uidex 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/cli.cjs +122 -41
- package/dist/cli/cli.cjs.map +1 -1
- package/dist/cloud/index.cjs +22 -2
- package/dist/cloud/index.cjs.map +1 -1
- package/dist/cloud/index.js +22 -2
- package/dist/cloud/index.js.map +1 -1
- package/dist/headless/index.cjs +909 -346
- package/dist/headless/index.cjs.map +1 -1
- package/dist/headless/index.d.cts +6 -0
- package/dist/headless/index.d.ts +6 -0
- package/dist/headless/index.js +914 -346
- package/dist/headless/index.js.map +1 -1
- package/dist/index.cjs +2887 -1167
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +83 -16
- package/dist/index.d.ts +83 -16
- package/dist/index.js +2919 -1175
- package/dist/index.js.map +1 -1
- package/dist/react/index.cjs +2850 -1155
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +55 -8
- package/dist/react/index.d.ts +55 -8
- package/dist/react/index.js +2879 -1159
- package/dist/react/index.js.map +1 -1
- package/dist/scan/index.cjs +121 -42
- package/dist/scan/index.cjs.map +1 -1
- package/dist/scan/index.d.cts +5 -0
- package/dist/scan/index.d.ts +5 -0
- package/dist/scan/index.js +121 -42
- package/dist/scan/index.js.map +1 -1
- package/package.json +18 -17
- package/templates/claude/audit.md +8 -2
- package/templates/claude/rules.md +15 -0
- package/dist/cloud/index.d.cts +0 -108
- package/dist/cloud/index.d.ts +0 -108
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/cloud/types.ts","../src/cloud/client.ts","../src/cloud/sdk-cloud.ts","../src/entities/types.ts","../src/entities/registry.ts","../src/entities/style.ts","../src/entities/display-name.ts","../src/views/built-in/ids.ts","../src/internal/clipboard.ts","../src/internal/dark-mode.ts","../src/ui/toast.ts","../src/views/built-in/feedback/markdown.ts","../src/views/built-in/feedback/schema.ts","../src/views/built-in/feedback/snapshot.ts","../src/views/built-in/feedback/view-builder.ts","../src/views/built-in/feedback/sdk-feedback.ts","../src/ingest/console.ts","../src/ingest/native-fetch.ts","../src/ingest/network.ts","../src/ingest/index.ts","../src/internal/cleanup.ts","../src/session/store.ts","../src/flows/highlight.ts","../src/flows/surface.ts","../src/styles/tailwind.built.css","../src/surface/constants.ts","../src/surface/host.ts","../src/surface/cursor-tooltip.ts","../src/surface/inspector.ts","../src/surface/menu-bar.ts","../src/surface/overlay.ts","../src/surface/theme.ts","../src/surface/shell.ts","../src/surface/keys.ts","../src/internal/dev.ts","../src/views/core/types.ts","../src/views/core/registry.ts","../src/internal/cn.ts","../src/internal/el.ts","../src/ui/cva.ts","../src/ui/badge.ts","../src/views/primitives/chip.ts","../src/views/primitives/kind-icon.ts","../src/views/primitives/icon-tile.ts","../src/views/primitives/kind-chip.ts","../src/machines/scroll-area.ts","../src/machines/machine.ts","../src/machines/normalize.ts","../src/views/builder/spread-props.ts","../src/views/render/custom.ts","../src/views/render/detail.ts","../src/views/builder/filter.ts","../src/views/labels.ts","../src/ui/button.ts","../src/ui/list-item.ts","../src/views/primitives/button.ts","../src/ui/kbd.ts","../src/views/primitives/row.ts","../src/views/primitives/entity-link.ts","../src/views/primitives/section.ts","../src/views/primitives/text.ts","../src/views/render/form.ts","../src/flows/form.ts","../src/ui/field.ts","../src/ui/form.ts","../src/ui/input.ts","../src/ui/select.ts","../src/machines/combobox.ts","../src/views/render/list.ts","../src/views/render/index.ts","../src/views/core/mount.ts","../src/views/core/shell.ts","../src/machines/menu.ts","../src/ui/menu.ts","../src/views/core/actions-popup.ts","../src/views/core/stack.ts","../src/views/built-in/command-palette.ts","../src/views/builder/page-context.ts","../src/views/builder/format-location.ts","../src/views/builder/resolve.ts","../src/views/builder/detail-builder.ts","../src/views/built-in/entity-detail.ts","../src/views/built-in/explore-page.ts","../src/views/built-in/feedback/host-feedback.ts","../src/views/built-in/flow-detail.ts","../src/views/built-in/glossary.ts","../src/views/built-in/index.ts","../src/create-uidex.ts"],"sourcesContent":["// Core factory\nexport { createUidex } from \"./create-uidex\"\nexport type { CreateUidexOptions, Uidex } from \"./create-uidex\"\n\n// Entities — data model\nexport {\n ENTITY_KINDS,\n UnknownEntityKindError,\n assertEntityKind,\n createRegistry,\n displayName,\n entityKey,\n isMetaKind,\n KIND_STYLE,\n prettify,\n} from \"./entities\"\nexport type {\n Element,\n Entity,\n EntityByKind,\n EntityKind,\n EntityRef,\n Feature,\n Flow,\n KindStyleEntry,\n Location,\n Metadata,\n MetaEntityKind,\n Page,\n Primitive,\n Region,\n Registry,\n Route,\n Scope,\n Widget,\n} from \"./entities\"\n\n// Session\nexport { createSession, resolveTheme } from \"./session\"\nexport type {\n CreateSessionOptions,\n ResolvedTheme,\n SessionActions,\n SessionSnapshot,\n SessionState,\n SessionStore,\n ThemePreference,\n ViewStackEntry,\n} from \"./session\"\n\n// Surface (chrome layer)\nexport {\n createCursorTooltip,\n createHighlightController,\n createInspector,\n createMenuBar,\n createOverlay,\n createSurfaceHost,\n createSurfaceShell,\n createThemeDetector,\n defaultResolveMatch,\n resolveEntityElement,\n SURFACE_CONTAINER_CLASS,\n SURFACE_HOST_CLASS,\n SURFACE_IGNORE_SELECTOR,\n Z_BASE,\n Z_CHROME,\n Z_OVERLAY,\n} from \"./surface\"\nexport type {\n Corner,\n CreateSurfaceShellOptions,\n CursorTooltip,\n CursorTooltipDeps,\n Inspector,\n InspectorMatch,\n InspectorOptions,\n MenuBar,\n MenuBarOptions,\n Overlay,\n OverlayShowOptions,\n SurfaceHost,\n SurfaceHostOptions,\n SurfaceShell,\n ThemeDetector,\n ThemeDetectorDeps,\n} from \"./surface\"\n\n// Views\nexport {\n commandPaletteView,\n componentDetailView,\n createViewRegistrar,\n createViewStack,\n DEFAULT_VIEWS,\n featureDetailView,\n feedbackView,\n flowDetailView,\n pageDetailView,\n primitiveDetailView,\n regionDetailView,\n ViewValidationError,\n widgetDetailView,\n} from \"./views\"\nexport type {\n Cleanup,\n CloudAdapter,\n ConsoleLogEntry,\n CustomSurface,\n DetailAction,\n DetailActionIcon,\n DetailActionRunContext,\n DetailSection,\n DetailSubtitle,\n DetailSurface,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n FormField,\n FormSubmit,\n FormSubmitResult,\n FormSurface,\n FormValue,\n HighlightController,\n IngestConfig,\n IngestConfigEpic,\n ListItem,\n ListSurface,\n NetworkErrorEntry,\n ShellAction,\n ShellHint,\n SourceRef,\n View,\n ViewContext,\n ViewDirectory,\n ViewPalette,\n ViewPushTarget,\n Viewport,\n ViewRegistrar,\n ViewRegistrarOptions,\n ViewStack,\n ViewStackOptions,\n ViewSurface,\n} from \"./views\"\n\n// Ingest (console/network capture)\nexport {\n createConsoleCapture,\n createIngest,\n createNetworkCapture,\n getNativeFetch,\n nativeFetch,\n resolveIngestOptions,\n} from \"./ingest\"\nexport type {\n ConsoleCapture,\n ConsoleEntry,\n ConsoleLevel,\n Ingest,\n IngestOptions,\n NetworkCapture,\n NetworkEntry,\n} from \"./ingest\"\n","export type {\n CloudAdapter,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigEpic,\n SourceRef,\n} from \"../ingest/feedback-contract\"\n\nexport const DEFAULT_CLOUD_ENDPOINT = \"https://app.uidex.dev\"\n\nexport interface CloudOptions {\n projectKey: string\n endpoint?: string\n fetch?: typeof fetch\n}\n\nexport class CloudError extends Error {\n readonly status: number\n readonly retryAfter?: number\n readonly details?: unknown\n\n constructor(\n message: string,\n options: { status: number; retryAfter?: number; details?: unknown }\n ) {\n super(message)\n this.name = \"CloudError\"\n this.status = options.status\n this.retryAfter = options.retryAfter\n this.details = options.details\n }\n}\n","import {\n CloudError,\n DEFAULT_CLOUD_ENDPOINT,\n type CloudAdapter,\n type CloudOptions,\n type FeedbackPayload,\n type FeedbackResult,\n type IngestConfig,\n} from \"./types\"\n\nfunction resolveFetch(override?: typeof fetch): typeof fetch {\n if (override) return override\n if (\n typeof globalThis !== \"undefined\" &&\n typeof globalThis.fetch === \"function\"\n ) {\n return globalThis.fetch.bind(globalThis)\n }\n throw new Error(\n \"uidex/cloud: global fetch is not available; pass a `fetch` override\"\n )\n}\n\nfunction trimEndpoint(endpoint: string): string {\n return endpoint.endsWith(\"/\") ? endpoint.slice(0, -1) : endpoint\n}\n\nfunction parseRetryAfter(header: string | null): number | undefined {\n if (!header) return undefined\n const seconds = Number(header)\n if (Number.isFinite(seconds) && seconds >= 0) return seconds\n const date = Date.parse(header)\n if (Number.isFinite(date)) {\n const delta = Math.ceil((date - Date.now()) / 1000)\n return delta > 0 ? delta : 0\n }\n return undefined\n}\n\nasync function readBody(response: Response): Promise<unknown> {\n const text = await response.text()\n if (!text) return undefined\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n}\n\nfunction errorMessage(body: unknown, fallback: string): string {\n if (\n body &&\n typeof body === \"object\" &&\n \"error\" in body &&\n typeof (body as { error: unknown }).error === \"string\"\n ) {\n return (body as { error: string }).error\n }\n return fallback\n}\n\nexport function cloud(options: CloudOptions): CloudAdapter {\n const projectKey = options.projectKey\n if (!projectKey) {\n throw new Error(\"uidex/cloud: `projectKey` is required\")\n }\n const endpoint = trimEndpoint(options.endpoint ?? DEFAULT_CLOUD_ENDPOINT)\n const fetchImpl = resolveFetch(options.fetch)\n const authHeader = `Bearer ${projectKey}`\n\n async function submit(payload: FeedbackPayload): Promise<FeedbackResult> {\n const response = await fetchImpl(`${endpoint}/api/ingest`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: authHeader,\n },\n body: JSON.stringify(payload),\n })\n\n const body = await readBody(response)\n\n if (!response.ok) {\n const retryAfter =\n response.status === 429\n ? parseRetryAfter(response.headers.get(\"Retry-After\"))\n : undefined\n throw new CloudError(\n errorMessage(body, `Feedback submission failed (${response.status})`),\n { status: response.status, retryAfter, details: body }\n )\n }\n\n if (!body || typeof body !== \"object\") {\n throw new CloudError(\"Feedback submission returned an empty response\", {\n status: response.status,\n })\n }\n return body as FeedbackResult\n }\n\n async function getConfig(): Promise<IngestConfig> {\n const response = await fetchImpl(`${endpoint}/api/ingest/config`, {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n Authorization: authHeader,\n },\n })\n\n const body = await readBody(response)\n\n if (!response.ok) {\n const retryAfter =\n response.status === 429\n ? parseRetryAfter(response.headers.get(\"Retry-After\"))\n : undefined\n throw new CloudError(\n errorMessage(body, `Ingest config request failed (${response.status})`),\n { status: response.status, retryAfter, details: body }\n )\n }\n\n if (!body || typeof body !== \"object\") {\n throw new CloudError(\"Ingest config returned an empty response\", {\n status: response.status,\n })\n }\n return body as IngestConfig\n }\n\n return {\n feedback: { submit },\n integrations: { getConfig },\n }\n}\n","import { cloud } from \"./client\"\nimport type { CloudAdapter } from \"./types\"\n\nexport const sdkCloud: CloudAdapter = cloud({\n projectKey: UIDEX_SDK_CLOUD_PROJECT_KEY,\n endpoint: UIDEX_SDK_CLOUD_ENDPOINT,\n})\n","export const ENTITY_KINDS = [\n \"route\",\n \"page\",\n \"feature\",\n \"widget\",\n \"region\",\n \"element\",\n \"primitive\",\n \"flow\",\n] as const\n\nexport type EntityKind = (typeof ENTITY_KINDS)[number]\n\nexport type Scope = string\n\nexport interface Location {\n file: string\n line?: number\n column?: number\n}\n\nexport interface EntityRef {\n kind: EntityKind\n id: string\n}\n\nexport interface Metadata {\n name?: string\n description?: string\n acceptance?: string[]\n notes?: string\n composes?: EntityRef[]\n flows?: readonly string[]\n features?: string[]\n widgets?: string[]\n}\n\ninterface EntityWithMetaBase {\n id: string\n loc?: Location\n scopes?: Scope[]\n meta?: Metadata\n}\n\nexport interface Route {\n kind: \"route\"\n path: string\n page: string\n}\n\nexport interface Flow {\n kind: \"flow\"\n id: string\n loc: Location\n touches: string[]\n}\n\nexport interface Page extends EntityWithMetaBase {\n kind: \"page\"\n}\n\nexport interface Feature extends EntityWithMetaBase {\n kind: \"feature\"\n}\n\nexport interface Widget extends EntityWithMetaBase {\n kind: \"widget\"\n}\n\nexport interface Region extends EntityWithMetaBase {\n kind: \"region\"\n}\n\nexport interface Element extends EntityWithMetaBase {\n kind: \"element\"\n}\n\nexport interface Primitive extends EntityWithMetaBase {\n kind: \"primitive\"\n}\n\nexport type Entity =\n | Route\n | Page\n | Feature\n | Widget\n | Region\n | Element\n | Primitive\n | Flow\n\nexport type EntityByKind<K extends EntityKind> = Extract<Entity, { kind: K }>\n\nexport type MetaEntityKind = Exclude<EntityKind, \"route\" | \"flow\">\n\nexport function isMetaKind(kind: EntityKind): kind is MetaEntityKind {\n return kind !== \"route\" && kind !== \"flow\"\n}\n\nexport function isMetaEntity(\n entity: Entity\n): entity is Extract<Entity, { kind: MetaEntityKind }> {\n return isMetaKind(entity.kind)\n}\n\nexport function entityKey(entity: Entity): string {\n return entity.kind === \"route\" ? entity.path : entity.id\n}\n\nexport function sameRef(a: EntityRef | null, b: EntityRef | null): boolean {\n if (a === b) return true\n if (a === null || b === null) return false\n return a.kind === b.kind && a.id === b.id\n}\n\nexport class UnknownEntityKindError extends Error {\n readonly kind: string\n constructor(kind: string) {\n super(`Unknown entity kind: ${kind}`)\n this.name = \"UnknownEntityKindError\"\n this.kind = kind\n }\n}\n\nconst KIND_SET: ReadonlySet<string> = new Set<string>(ENTITY_KINDS)\n\nexport function assertEntityKind(kind: string): asserts kind is EntityKind {\n if (!KIND_SET.has(kind)) throw new UnknownEntityKindError(kind)\n}\n","import {\n assertEntityKind,\n entityKey,\n isMetaEntity,\n isMetaKind,\n type Entity,\n type EntityByKind,\n type EntityKind,\n type Flow,\n type Metadata,\n type Scope,\n} from \"./types\"\n\nexport interface Registry {\n add(entity: Entity): void\n get<K extends EntityKind>(kind: K, id: string): EntityByKind<K> | undefined\n list<K extends EntityKind>(kind: K): ReadonlyArray<EntityByKind<K>>\n query(predicate: (entity: Entity) => boolean): Entity[]\n byScope(scope: Scope): Entity[]\n touchedBy(flowId: string): Entity[]\n}\n\ntype KindStore = {\n [K in EntityKind]: Map<string, EntityByKind<K>>\n}\n\nfunction emptyStore(): KindStore {\n return {\n route: new Map(),\n page: new Map(),\n feature: new Map(),\n widget: new Map(),\n region: new Map(),\n element: new Map(),\n primitive: new Map(),\n flow: new Map(),\n }\n}\n\nfunction computeFlowIds(flows: Iterable<Flow>, targetId: string): string[] {\n const ids: string[] = []\n for (const flow of flows) {\n if (flow.touches.includes(targetId)) ids.push(flow.id)\n }\n return ids\n}\n\nfunction freezeEntity<E extends Entity>(entity: E, flows: Iterable<Flow>): E {\n if (!isMetaKind(entity.kind)) return entity\n const withMeta = entity as Extract<Entity, { meta?: Metadata }>\n if (withMeta.meta === undefined) return entity\n const computedFlows = Object.freeze(computeFlowIds(flows, withMeta.id))\n const mergedMeta: Metadata = { ...withMeta.meta, flows: computedFlows }\n return { ...entity, meta: Object.freeze(mergedMeta) } as E\n}\n\nexport function createRegistry(): Registry {\n const store = emptyStore()\n let flowsCache: Flow[] | null = null\n\n const getFlows = (): Flow[] => {\n if (flowsCache === null) flowsCache = Array.from(store.flow.values())\n return flowsCache\n }\n\n const add = (entity: Entity): void => {\n assertEntityKind(entity.kind)\n const key = entityKey(entity)\n ;(store[entity.kind] as Map<string, Entity>).set(key, entity)\n flowsCache = null\n }\n\n const get = <K extends EntityKind>(\n kind: K,\n id: string\n ): EntityByKind<K> | undefined => {\n assertEntityKind(kind)\n const raw = store[kind].get(id) as EntityByKind<K> | undefined\n if (raw === undefined) return undefined\n return freezeEntity(raw, getFlows())\n }\n\n const list = <K extends EntityKind>(\n kind: K\n ): ReadonlyArray<EntityByKind<K>> => {\n assertEntityKind(kind)\n const flows = getFlows()\n return Array.from(store[kind].values(), (e) =>\n freezeEntity(e as EntityByKind<K>, flows)\n )\n }\n\n const allEntities = function* (): Generator<Entity> {\n for (const kind of Object.keys(store) as EntityKind[]) {\n for (const entity of store[kind].values()) {\n yield entity as Entity\n }\n }\n }\n\n const query = (predicate: (entity: Entity) => boolean): Entity[] => {\n const flows = getFlows()\n const result: Entity[] = []\n for (const entity of allEntities()) {\n if (predicate(entity)) result.push(freezeEntity(entity, flows))\n }\n return result\n }\n\n const byScope = (scope: Scope): Entity[] =>\n query(\n (entity) =>\n \"scopes\" in entity &&\n Array.isArray(entity.scopes) &&\n entity.scopes.includes(scope)\n )\n\n const touchedBy = (flowId: string): Entity[] => {\n const flow = store.flow.get(flowId)\n if (flow === undefined) return []\n const ids = new Set(flow.touches)\n return query((entity) => {\n if (!isMetaEntity(entity)) return false\n return ids.has(entity.id)\n })\n }\n\n return { add, get, list, query, byScope, touchedBy }\n}\n","import {\n Circle,\n FileText,\n type IconNode,\n LayoutGrid,\n LayoutPanelTop,\n MousePointerClick,\n Route as RouteIcon,\n Sparkles,\n Workflow,\n} from \"lucide\"\nimport type { EntityKind } from \"./types\"\n\nexport interface KindStyleEntry {\n icon: IconNode\n tone: string\n chip: string\n color: string\n label: string\n}\n\nexport const KIND_STYLE: Record<EntityKind, KindStyleEntry> = {\n route: {\n icon: RouteIcon,\n tone: \"text-blue-700 dark:text-blue-300\",\n chip: \"bg-blue-400/20 text-blue-700 group-data-hover:bg-blue-400/30 dark:bg-blue-400/10 dark:text-blue-300 dark:group-data-hover:bg-blue-400/15\",\n color: \"#60a5fa\",\n label: \"Route\",\n },\n page: {\n icon: FileText,\n tone: \"text-emerald-700 dark:text-emerald-300\",\n chip: \"bg-emerald-400/20 text-emerald-700 group-data-hover:bg-emerald-400/30 dark:bg-emerald-400/10 dark:text-emerald-300 dark:group-data-hover:bg-emerald-400/15\",\n color: \"#34d399\",\n label: \"Page\",\n },\n feature: {\n icon: Sparkles,\n tone: \"text-amber-700 dark:text-amber-300\",\n chip: \"bg-amber-400/20 text-amber-700 group-data-hover:bg-amber-400/30 dark:bg-amber-400/10 dark:text-amber-300 dark:group-data-hover:bg-amber-400/15\",\n color: \"#fbbf24\",\n label: \"Feature\",\n },\n widget: {\n icon: LayoutGrid,\n tone: \"text-violet-700 dark:text-violet-300\",\n chip: \"bg-violet-400/20 text-violet-700 group-data-hover:bg-violet-400/30 dark:bg-violet-400/10 dark:text-violet-300 dark:group-data-hover:bg-violet-400/15\",\n color: \"#a78bfa\",\n label: \"Widget\",\n },\n region: {\n icon: LayoutPanelTop,\n tone: \"text-cyan-700 dark:text-cyan-300\",\n chip: \"bg-cyan-400/20 text-cyan-700 group-data-hover:bg-cyan-400/30 dark:bg-cyan-400/10 dark:text-cyan-300 dark:group-data-hover:bg-cyan-400/15\",\n color: \"#22d3ee\",\n label: \"Region\",\n },\n element: {\n icon: MousePointerClick,\n tone: \"text-rose-700 dark:text-rose-300\",\n chip: \"bg-rose-400/20 text-rose-700 group-data-hover:bg-rose-400/30 dark:bg-rose-400/10 dark:text-rose-300 dark:group-data-hover:bg-rose-400/15\",\n color: \"#fb7185\",\n label: \"Element\",\n },\n primitive: {\n icon: Circle,\n tone: \"text-slate-700 dark:text-slate-300\",\n chip: \"bg-slate-400/20 text-slate-700 group-data-hover:bg-slate-400/30 dark:bg-slate-400/10 dark:text-slate-300 dark:group-data-hover:bg-slate-400/15\",\n color: \"#94a3b8\",\n label: \"Primitive\",\n },\n flow: {\n icon: Workflow,\n tone: \"text-fuchsia-700 dark:text-fuchsia-300\",\n chip: \"bg-fuchsia-400/20 text-fuchsia-700 group-data-hover:bg-fuchsia-400/30 dark:bg-fuchsia-400/10 dark:text-fuchsia-300 dark:group-data-hover:bg-fuchsia-400/15\",\n color: \"#e879f9\",\n label: \"Flow\",\n },\n}\n","import type { Entity } from \"./types\"\n\nexport function prettify(id: string): string {\n const parts = id.split(/[-_]+/).filter(Boolean)\n const words = parts.flatMap((part) => part.split(/(?=[A-Z])/).filter(Boolean))\n if (words.length === 0) return \"\"\n return words\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(\" \")\n}\n\nexport function displayName(entity: Entity, node?: Element | null): string {\n if (entity.kind === \"route\") return prettify(entity.page)\n if (entity.kind !== \"flow\") {\n const authored = entity.meta?.name\n if (authored) return authored\n }\n const aria = node?.getAttribute(\"aria-label\")?.trim()\n if (aria) return aria\n return prettify(entity.id)\n}\n","export const BUILT_IN_VIEW_IDS = {\n commandPalette: \"command-palette\",\n explorePage: \"explore-page\",\n feedback: \"feedback\",\n glossary: \"glossary\",\n sdkFeedback: \"sdk-feedback\",\n} as const\n","export async function copyToClipboard(text: string): Promise<boolean> {\n try {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text)\n return true\n }\n } catch {\n // fall through to legacy path\n }\n try {\n if (typeof document === \"undefined\") return false\n const textarea = document.createElement(\"textarea\")\n textarea.value = text\n textarea.setAttribute(\"readonly\", \"\")\n textarea.style.position = \"fixed\"\n textarea.style.opacity = \"0\"\n document.body.appendChild(textarea)\n textarea.select()\n const ok = document.execCommand(\"copy\")\n document.body.removeChild(textarea)\n return ok\n } catch {\n return false\n }\n}\n","export function isDarkMode(): boolean {\n if (typeof document !== \"undefined\") {\n const root = document.documentElement\n if (root?.classList.contains(\"dark\")) return true\n if (root?.classList.contains(\"light\")) return false\n }\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\"\n ) {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n }\n return false\n}\n","import { isDarkMode } from \"../internal/dark-mode\"\n\nexport function showCopiedToast(message: string): void {\n if (typeof document === \"undefined\") return\n const dark = isDarkMode()\n const toast = document.createElement(\"div\")\n toast.setAttribute(\"data-uidex-toast\", \"\")\n Object.assign(toast.style, {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%) scale(0.96)\",\n padding: \"12px 20px\",\n fontSize: \"14px\",\n fontFamily: \"ui-sans-serif, system-ui, sans-serif\",\n fontWeight: \"500\",\n color: dark ? \"#0a0a0a\" : \"#fafafa\",\n background: dark ? \"rgba(255, 255, 255, 0.98)\" : \"rgba(28, 28, 30, 0.95)\",\n border: dark\n ? \"1px solid rgba(0, 0, 0, 0.08)\"\n : \"1px solid rgba(255, 255, 255, 0.08)\",\n borderRadius: \"10px\",\n boxShadow: dark\n ? \"0 8px 24px rgba(0, 0, 0, 0.35), 0 2px 6px rgba(0, 0, 0, 0.2)\"\n : \"0 8px 24px rgba(0, 0, 0, 0.35), 0 2px 6px rgba(0, 0, 0, 0.25)\",\n zIndex: \"2147483647\",\n pointerEvents: \"none\",\n opacity: \"0\",\n transition: \"opacity 120ms ease-out, transform 160ms ease-out\",\n whiteSpace: \"nowrap\",\n } satisfies Partial<CSSStyleDeclaration>)\n toast.textContent = message\n document.body.appendChild(toast)\n\n requestAnimationFrame(() => {\n toast.style.opacity = \"1\"\n toast.style.transform = \"translate(-50%, -50%) scale(1)\"\n })\n\n setTimeout(() => {\n toast.style.opacity = \"0\"\n toast.style.transform = \"translate(-50%, -50%) scale(0.96)\"\n setTimeout(() => toast.remove(), 200)\n }, 1200)\n}\n","import type { FeedbackPayload } from \"../../core/types\"\n\nfunction capitalize(s: string): string {\n return s.length === 0 ? s : s[0].toUpperCase() + s.slice(1)\n}\n\nexport function renderPayloadMarkdown(payload: FeedbackPayload): string {\n const heading = payload.title ?? `${capitalize(payload.type)} Feedback`\n const lines: string[] = [\n `# ${heading}`,\n \"\",\n `- **Type:** ${payload.type}`,\n `- **Severity:** ${payload.severity}`,\n `- **Component:** \\`${payload.componentId}\\``,\n \"\",\n \"## Description\",\n \"\",\n payload.description || \"_(no description)_\",\n \"\",\n \"## Context\",\n \"\",\n `- **URL:** ${payload.url}`,\n `- **Path:** ${payload.path}`,\n ...(payload.pageTitle ? [`- **Page title:** ${payload.pageTitle}`] : []),\n `- **Viewport:** ${payload.viewport.width}×${payload.viewport.height}`,\n `- **Screen:** ${payload.screen.width}×${payload.screen.height}`,\n `- **User agent:** ${payload.userAgent}`,\n `- **Timestamp:** ${payload.timestamp}`,\n ]\n return lines.join(\"\\n\") + \"\\n\"\n}\n","import { z } from \"zod\"\nimport type { FormField } from \"../../core/surface\"\n\nexport const feedbackSchema = z.object({\n type: z.enum([\"bug\", \"feature\", \"improvement\", \"question\"]),\n severity: z.enum([\"low\", \"medium\", \"high\", \"critical\"]),\n title: z.string().optional(),\n description: z\n .string()\n .trim()\n .min(1, { message: \"Description is required.\" }),\n})\n\nexport const feedbackFields: FormField[] = [\n {\n kind: \"select\",\n name: \"type\",\n label: \"Type\",\n options: [\n { value: \"bug\", label: \"Bug\" },\n { value: \"feature\", label: \"Feature\" },\n { value: \"improvement\", label: \"Improvement\" },\n { value: \"question\", label: \"Question\" },\n ],\n },\n {\n kind: \"select\",\n name: \"severity\",\n label: \"Severity\",\n value: \"medium\",\n options: [\n { value: \"low\", label: \"Low\" },\n { value: \"medium\", label: \"Medium\" },\n { value: \"high\", label: \"High\" },\n { value: \"critical\", label: \"Critical\" },\n ],\n },\n {\n kind: \"text\",\n name: \"title\",\n label: \"Title\",\n placeholder: \"Short summary (optional)\",\n },\n {\n kind: \"textarea\",\n name: \"description\",\n label: \"Description\",\n placeholder: \"Describe what happened…\",\n required: true,\n },\n]\n","export interface FeedbackContextSnapshot {\n url: string\n path: string\n userAgent: string\n pageTitle: string | undefined\n timestamp: string\n viewport: { width: number; height: number }\n screen: { width: number; height: number }\n}\n\nexport function collectFeedbackContextSnapshot(): FeedbackContextSnapshot {\n const nav = typeof navigator !== \"undefined\" ? navigator : undefined\n const loc = typeof location !== \"undefined\" ? location : undefined\n const win = typeof window !== \"undefined\" ? window : undefined\n const doc = typeof document !== \"undefined\" ? document : undefined\n const viewport = {\n width: win?.innerWidth ?? 0,\n height: win?.innerHeight ?? 0,\n }\n const screenSize = {\n width: typeof screen !== \"undefined\" ? screen.width : 0,\n height: typeof screen !== \"undefined\" ? screen.height : 0,\n }\n return {\n url: loc?.href ?? \"\",\n path: loc?.pathname ?? \"\",\n userAgent: nav?.userAgent ?? \"\",\n pageTitle: doc?.title,\n timestamp: new Date().toISOString(),\n viewport,\n screen: screenSize,\n }\n}\n","import { copyToClipboard } from \"../../../internal/clipboard\"\nimport { showCopiedToast } from \"../../../ui/toast\"\nimport type { FormField, FormSurface, FormValue } from \"../../core/surface\"\nimport type {\n CloudAdapter,\n FeedbackPayload,\n FeedbackResult,\n View,\n ViewContext,\n} from \"../../core/types\"\nimport { renderPayloadMarkdown } from \"./markdown\"\nimport { feedbackFields, feedbackSchema } from \"./schema\"\nimport { collectFeedbackContextSnapshot } from \"./snapshot\"\n\nexport interface CreateFeedbackViewConfig {\n id: string\n resolveCloud: (\n ctx: ViewContext\n ) => CloudAdapter<unknown, unknown, unknown> | null\n componentId: (ctx: ViewContext) => string\n submitLabels: { ready: string; noCloud: string }\n successToast: (result: FeedbackResult) => string\n failureToast: (err: unknown) => string\n /**\n * Optional prefix prepended to `description` before submit/fallback-copy.\n * Used by sdk-feedback to stamp the SDK version in every report.\n */\n prependDescription?: () => string\n}\n\nfunction buildPayload(\n componentId: string,\n values: Record<string, FormValue>,\n prefix: string\n): FeedbackPayload {\n const snapshot = collectFeedbackContextSnapshot()\n const title = String(values.title ?? \"\").trim()\n const description = String(values.description ?? \"\").trim()\n return {\n type: (values.type as FeedbackPayload[\"type\"]) ?? \"bug\",\n severity: (values.severity as FeedbackPayload[\"severity\"]) ?? \"medium\",\n title: title || undefined,\n description: prefix ? `${prefix}${description}` : description,\n componentId,\n ...snapshot,\n }\n}\n\nasync function copyFallback(\n payload: FeedbackPayload,\n ctx: ViewContext,\n toastMessage: string\n): Promise<void> {\n const markdown = renderPayloadMarkdown(payload)\n const copied = await copyToClipboard(markdown)\n if (!copied) console.log(\"[uidex] feedback markdown:\\n\" + markdown)\n ctx.close()\n showCopiedToast(copied ? toastMessage : \"Copy failed\")\n}\n\nexport function createFeedbackView(config: CreateFeedbackViewConfig): View {\n const {\n id,\n resolveCloud,\n componentId,\n submitLabels,\n successToast,\n failureToast,\n prependDescription,\n } = config\n\n const fields: FormField[] = feedbackFields\n\n return {\n id,\n matches: () => false,\n searchable: false,\n hints: (ctx) => [\n {\n key: \"⌘↵\",\n label: resolveCloud(ctx) ? submitLabels.ready : submitLabels.noCloud,\n },\n ],\n focusTarget: (host) =>\n host.querySelector<HTMLElement>(\n \"[data-uidex-form='feedback'] select, [data-uidex-form='feedback'] input, [data-uidex-form='feedback'] textarea\"\n ),\n surface: (ctx): FormSurface => {\n const cloud = resolveCloud(ctx)\n return {\n kind: \"form\",\n id: \"feedback\",\n fields,\n schema: feedbackSchema,\n submit: {\n label: cloud ? submitLabels.ready : submitLabels.noCloud,\n onSubmit: async (values) => {\n const prefix = prependDescription ? prependDescription() : \"\"\n const payload = buildPayload(componentId(ctx), values, prefix)\n if (!cloud) {\n await copyFallback(payload, ctx, \"Copied to Clipboard\")\n return\n }\n try {\n const result = (await cloud.feedback.submit(\n payload\n )) as FeedbackResult\n ctx.close()\n showCopiedToast(successToast(result))\n return\n } catch (err) {\n await copyFallback(payload, ctx, failureToast(err))\n return\n }\n },\n },\n }\n },\n }\n}\n","import type { ShellAction, ViewContext } from \"../../core/types\"\nimport { BUILT_IN_VIEW_IDS } from \"../ids\"\nimport { createFeedbackView } from \"./view-builder\"\n\nexport function resolveSdkComponentId(ctx: ViewContext): string {\n const stack = ctx.getStack()\n const underlying = stack[stack.length - 2]\n return underlying ? `uidex-sdk:${underlying.id}` : \"uidex-sdk\"\n}\n\nfunction successToast(): string {\n return \"Thanks — your report was sent to uidex\"\n}\n\nexport const sdkFeedbackView = createFeedbackView({\n id: BUILT_IN_VIEW_IDS.sdkFeedback,\n resolveCloud: (ctx) => ctx.sdkCloud,\n componentId: (ctx) => resolveSdkComponentId(ctx),\n submitLabels: { ready: \"Send feedback\", noCloud: \"Copy report\" },\n successToast,\n failureToast: () => \"Couldn't reach uidex — copied report to clipboard\",\n prependDescription: () => `uidex-sdk v${UIDEX_SDK_VERSION}\\n\\n`,\n})\n\nexport function reportUidexIssueAction(ctx: ViewContext): ShellAction {\n return {\n id: \"report-uidex-issue\",\n label: \"Report uidex issue\",\n perform: () => ctx.push({ id: BUILT_IN_VIEW_IDS.sdkFeedback, ref: null }),\n intent: { kind: \"push\", viewId: BUILT_IN_VIEW_IDS.sdkFeedback },\n }\n}\n","export type ConsoleLevel = \"warn\" | \"error\"\n\nexport interface ConsoleEntry {\n level: ConsoleLevel\n message: string\n timestamp: string\n}\n\nexport interface ConsoleCaptureOptions {\n limit?: number\n target?: Console\n now?: () => Date\n}\n\nexport interface ConsoleCapture {\n start(): void\n stop(): void\n readonly isActive: boolean\n entries(): readonly ConsoleEntry[]\n clear(): void\n}\n\nconst DEFAULT_LIMIT = 50\nconst LEVELS: readonly ConsoleLevel[] = [\"warn\", \"error\"]\n\nfunction formatMessage(args: readonly unknown[]): string {\n return args\n .map((arg) => {\n if (typeof arg === \"string\") return arg\n if (arg instanceof Error) return arg.stack ?? arg.message\n try {\n return JSON.stringify(arg)\n } catch {\n return String(arg)\n }\n })\n .join(\" \")\n}\n\nexport function createConsoleCapture(\n options: ConsoleCaptureOptions = {}\n): ConsoleCapture {\n const limit = options.limit ?? DEFAULT_LIMIT\n const target = options.target ?? console\n const now = options.now ?? (() => new Date())\n const buffer: ConsoleEntry[] = []\n const originals: Partial<Record<ConsoleLevel, (...args: unknown[]) => void>> =\n {}\n let active = false\n\n function record(level: ConsoleLevel, args: readonly unknown[]): void {\n const entry: ConsoleEntry = {\n level,\n message: formatMessage(args),\n timestamp: now().toISOString(),\n }\n buffer.push(entry)\n if (buffer.length > limit) buffer.splice(0, buffer.length - limit)\n }\n\n function start(): void {\n if (active) return\n for (const level of LEVELS) {\n const original = target[level] as (...args: unknown[]) => void\n originals[level] = original\n const wrapped = (...args: unknown[]): void => {\n record(level, args)\n original.call(target, ...args)\n }\n ;(target as unknown as Record<string, unknown>)[level] = wrapped\n }\n active = true\n }\n\n function stop(): void {\n if (!active) return\n for (const level of LEVELS) {\n const original = originals[level]\n if (original) {\n ;(target as unknown as Record<string, unknown>)[level] = original\n }\n delete originals[level]\n }\n active = false\n }\n\n return {\n start,\n stop,\n get isActive() {\n return active\n },\n entries() {\n return buffer.slice()\n },\n clear() {\n buffer.length = 0\n },\n }\n}\n","// Captured at module load so `cloud.feedback.submit` (and anything else that\n// routes through this reference) is never observed by runtime fetch wrappers.\nexport const nativeFetch: typeof fetch | undefined =\n typeof globalThis !== \"undefined\" && typeof globalThis.fetch === \"function\"\n ? globalThis.fetch.bind(globalThis)\n : undefined\n\nexport function getNativeFetch(): typeof fetch | undefined {\n return nativeFetch\n}\n","import { nativeFetch } from \"./native-fetch\"\n\nexport interface NetworkEntry {\n method: string\n url: string\n status: number\n timestamp: string\n error?: string\n}\n\nexport interface NetworkCaptureOptions {\n limit?: number\n target?: {\n fetch?: typeof fetch\n }\n now?: () => Date\n}\n\nexport interface NetworkCapture {\n start(): void\n stop(): void\n readonly isActive: boolean\n entries(): readonly NetworkEntry[]\n clear(): void\n}\n\nconst DEFAULT_LIMIT = 20\n\nfunction resolveMethod(input: RequestInfo | URL, init?: RequestInit): string {\n if (init?.method) return init.method.toUpperCase()\n if (\n typeof input !== \"string\" &&\n !(input instanceof URL) &&\n \"method\" in input\n ) {\n return (input as Request).method.toUpperCase()\n }\n return \"GET\"\n}\n\nfunction resolveUrl(input: RequestInfo | URL): string {\n if (typeof input === \"string\") return input\n if (input instanceof URL) return input.toString()\n return (input as Request).url\n}\n\nexport function createNetworkCapture(\n options: NetworkCaptureOptions = {}\n): NetworkCapture {\n const limit = options.limit ?? DEFAULT_LIMIT\n const target = (options.target ?? globalThis) as {\n fetch?: typeof fetch\n }\n const now = options.now ?? (() => new Date())\n const buffer: NetworkEntry[] = []\n let original: typeof fetch | undefined\n let active = false\n\n function push(entry: NetworkEntry): void {\n buffer.push(entry)\n if (buffer.length > limit) buffer.splice(0, buffer.length - limit)\n }\n\n function start(): void {\n if (active) return\n const baseline = target.fetch ?? nativeFetch\n if (!baseline) return\n original = baseline\n const wrapped: typeof fetch = async (input, init) => {\n const method = resolveMethod(input, init)\n const url = resolveUrl(input)\n try {\n const res = await baseline(input, init)\n if (res.status >= 400) {\n push({\n method,\n url,\n status: res.status,\n timestamp: now().toISOString(),\n })\n }\n return res\n } catch (err) {\n push({\n method,\n url,\n status: 0,\n timestamp: now().toISOString(),\n error: err instanceof Error ? err.message : String(err),\n })\n throw err\n }\n }\n target.fetch = wrapped\n active = true\n }\n\n function stop(): void {\n if (!active) return\n if (original) target.fetch = original\n original = undefined\n active = false\n }\n\n return {\n start,\n stop,\n get isActive() {\n return active\n },\n entries() {\n return buffer.slice()\n },\n clear() {\n buffer.length = 0\n },\n }\n}\n","import type { SessionStore } from \"../session\"\nimport {\n createConsoleCapture,\n type ConsoleCapture,\n type ConsoleCaptureOptions,\n} from \"./console\"\nimport {\n createNetworkCapture,\n type NetworkCapture,\n type NetworkCaptureOptions,\n} from \"./network\"\n\nexport type { ConsoleEntry, ConsoleLevel, ConsoleCapture } from \"./console\"\nexport type { NetworkEntry, NetworkCapture } from \"./network\"\nexport { createConsoleCapture } from \"./console\"\nexport { createNetworkCapture } from \"./network\"\nexport { getNativeFetch, nativeFetch } from \"./native-fetch\"\nexport type {\n CloudAdapter,\n ConsoleLogEntry,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigEpic,\n NetworkErrorEntry,\n SourceRef,\n Viewport,\n} from \"./feedback-contract\"\n\nexport interface IngestOptions {\n captureConsole?: boolean\n captureNetwork?: boolean\n consoleLimit?: number\n networkLimit?: number\n consoleTarget?: ConsoleCaptureOptions[\"target\"]\n networkTarget?: NetworkCaptureOptions[\"target\"]\n now?: () => Date\n}\n\nexport interface Ingest {\n start(): void\n stop(): void\n readonly isActive: boolean\n readonly console: ConsoleCapture | null\n readonly network: NetworkCapture | null\n}\n\nexport interface CreateIngestOptions extends IngestOptions {\n session?: SessionStore\n}\n\nexport function createIngest(options: CreateIngestOptions = {}): Ingest {\n const { session, ...opts } = options\n const wantConsole = opts.captureConsole !== false\n const wantNetwork = opts.captureNetwork !== false\n\n const consoleCapture: ConsoleCapture | null = wantConsole\n ? createConsoleCapture({\n limit: opts.consoleLimit,\n target: opts.consoleTarget,\n now: opts.now,\n })\n : null\n const networkCapture: NetworkCapture | null = wantNetwork\n ? createNetworkCapture({\n limit: opts.networkLimit,\n target: opts.networkTarget,\n now: opts.now,\n })\n : null\n\n let active = false\n\n function start(): void {\n if (active) return\n consoleCapture?.start()\n networkCapture?.start()\n active = Boolean(consoleCapture?.isActive || networkCapture?.isActive)\n if (active) session?.getState().actions.setIngest(true)\n }\n\n function stop(): void {\n if (!active) return\n consoleCapture?.stop()\n networkCapture?.stop()\n active = false\n session?.getState().actions.setIngest(false)\n }\n\n return {\n start,\n stop,\n get isActive() {\n return active\n },\n console: consoleCapture,\n network: networkCapture,\n }\n}\n\nexport function resolveIngestOptions(\n explicit: IngestOptions | null | undefined,\n hasCloud: boolean\n): IngestOptions | null {\n if (explicit === null) return null\n if (explicit === undefined) {\n return hasCloud ? { captureConsole: true, captureNetwork: true } : null\n }\n if (explicit.captureConsole === false && explicit.captureNetwork === false) {\n return null\n }\n return explicit\n}\n","export type Cleanup = () => void\n\nexport interface Disposable {\n destroy(): void\n}\n\nexport interface CleanupStack {\n add(cleanup: Cleanup | Disposable | null | undefined): void\n drain(): void\n}\n\nexport function createCleanupStack(): CleanupStack {\n const stack: Cleanup[] = []\n return {\n add(cleanup) {\n if (!cleanup) return\n if (typeof cleanup === \"function\") stack.push(cleanup)\n else stack.push(() => cleanup.destroy())\n },\n drain() {\n for (let i = stack.length - 1; i >= 0; i--) {\n try {\n stack[i]()\n } catch (err) {\n console.error(\"[uidex] cleanup threw\", err)\n }\n }\n stack.length = 0\n },\n }\n}\n\nexport function composeCleanups(cleanups: readonly Cleanup[]): Cleanup {\n return () => {\n for (let i = cleanups.length - 1; i >= 0; i--) {\n try {\n cleanups[i]?.()\n } catch (err) {\n console.error(\"[uidex] cleanup threw\", err)\n }\n }\n }\n}\n","import { createActor, type Actor } from \"xstate\"\nimport { createStore, type StoreApi } from \"zustand/vanilla\"\n\nimport { sameRef } from \"../entities\"\nimport { highlightMachine, type HighlightContext } from \"../flows/highlight\"\nimport {\n surfaceMachine,\n type SurfaceEvent,\n type SurfaceInput,\n} from \"../flows/surface\"\nimport type {\n ResolvedTheme,\n SessionSnapshot,\n SessionState,\n ThemePreference,\n ViewStackEntry,\n} from \"./types\"\n\nexport type SessionStore = StoreApi<SessionState> & {\n send(event: SurfaceEvent): void\n}\n\nexport interface SurfaceBindings {\n mountInspector?: () => void\n destroyInspector?: () => void\n openActionsPopup?: () => void\n closePopup?: () => void\n}\n\nexport interface HighlightBindings {\n showOverlay?: (context: HighlightContext) => void\n hideOverlay?: () => void\n updateOverlay?: (context: HighlightContext) => void\n}\n\nexport interface SessionBindings {\n surface?: SurfaceBindings\n highlight?: HighlightBindings\n}\n\nexport interface CreateSessionOptions extends Partial<SessionSnapshot> {\n detectTheme?: () => ResolvedTheme\n /**\n * Action implementations injected into the surface machine and its\n * highlight child actor. Implementations may be closures that read from\n * mutable refs filled in after `createSession` returns (e.g., the SDK's\n * shell isn't available until `mount`).\n */\n bindings?: SessionBindings\n}\n\nconst defaultSnapshot: SessionSnapshot = {\n hover: null,\n selection: null,\n stack: [],\n pinnedHighlight: null,\n inspectorActive: false,\n theme: \"auto\",\n resolvedTheme: \"light\",\n ingestActive: false,\n}\n\nexport function resolveTheme(\n preference: ThemePreference,\n detect?: () => ResolvedTheme\n): ResolvedTheme {\n if (preference !== \"auto\") return preference\n if (detect) return detect()\n if (\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as { matchMedia?: unknown }).matchMedia === \"function\"\n ) {\n const mql = (\n globalThis as {\n matchMedia: (q: string) => { matches: boolean }\n }\n ).matchMedia(\"(prefers-color-scheme: dark)\")\n return mql.matches ? \"dark\" : \"light\"\n }\n return \"light\"\n}\n\ntype SurfaceActor = Actor<typeof surfaceMachine>\n\nfunction projectFromActor(actor: SurfaceActor): SessionSnapshot {\n const sn = actor.getSnapshot()\n const child = sn.children.highlight\n const childSnapshot = child?.getSnapshot()\n const pinned =\n childSnapshot && childSnapshot.value === \"pinned\"\n ? childSnapshot.context.pinnedRef\n : null\n return {\n hover: sn.context.hover,\n selection: sn.context.selection,\n stack: sn.context.stack,\n pinnedHighlight: pinned,\n inspectorActive: sn.matches(\"inspecting\"),\n theme: sn.context.theme,\n resolvedTheme: sn.context.resolvedTheme,\n ingestActive: sn.context.ingestActive,\n }\n}\n\nexport function createSession(\n options: CreateSessionOptions = {}\n): SessionStore {\n const { detectTheme, bindings, ...overrides } = options\n const initialPref: ThemePreference = overrides.theme ?? defaultSnapshot.theme\n const initialResolved: ResolvedTheme =\n overrides.resolvedTheme ?? resolveTheme(initialPref, detectTheme)\n const initialStack: ViewStackEntry[] = overrides.stack ?? []\n\n const input: SurfaceInput = {\n hover: overrides.hover ?? null,\n selection: overrides.selection ?? null,\n pinnedHighlight: null,\n theme: initialPref,\n resolvedTheme: initialResolved,\n ingestActive: overrides.ingestActive ?? false,\n }\n\n const providedHighlight = highlightMachine.provide({\n actions: {\n showOverlay: ({ context }) => bindings?.highlight?.showOverlay?.(context),\n hideOverlay: () => bindings?.highlight?.hideOverlay?.(),\n updateOverlay: ({ context }) =>\n bindings?.highlight?.updateOverlay?.(context),\n },\n })\n\n const providedSurface = surfaceMachine.provide({\n actions: {\n mountInspector: () => bindings?.surface?.mountInspector?.(),\n destroyInspector: () => bindings?.surface?.destroyInspector?.(),\n openActionsPopup: () => bindings?.surface?.openActionsPopup?.(),\n closePopup: () => bindings?.surface?.closePopup?.(),\n },\n actors: {\n highlight: providedHighlight,\n },\n })\n\n const actor = createActor(providedSurface, { input })\n actor.start()\n\n // Hydrate initial state via events (idle.entry resets stack, so we cannot\n // pass it through input).\n if (initialStack.length > 0) {\n actor.send({ type: \"OPEN_PALETTE\" })\n for (let i = 1; i < initialStack.length; i++) {\n actor.send({ type: \"PUSH_VIEW\", entry: initialStack[i] })\n }\n } else if (overrides.inspectorActive) {\n actor.send({ type: \"TOGGLE_INSPECTOR\" })\n }\n if (overrides.pinnedHighlight) {\n actor.send({ type: \"PIN\", ref: overrides.pinnedHighlight })\n }\n\n const store = createStore<SessionState>((_set, get) => ({\n ...projectFromActor(actor),\n actions: {\n hover(ref) {\n if (sameRef(get().hover, ref)) return\n if (ref === null) {\n actor.send({ type: \"UNHOVER\" })\n } else {\n actor.send({ type: \"HOVER\", ref, element: null })\n }\n },\n select(ref) {\n if (sameRef(get().selection, ref)) return\n actor.send({ type: \"SET_SELECTION\", ref })\n },\n pushStack(entry) {\n if (entry.id === \"command-palette\" && get().stack.length === 0) {\n actor.send({ type: \"OPEN_PALETTE\" })\n } else {\n actor.send({ type: \"PUSH_VIEW\", entry })\n }\n },\n popStack() {\n const sn = actor.getSnapshot()\n if (sn.matches(\"palette\")) {\n actor.send({ type: \"ESC\" })\n } else if (sn.matches(\"viewing\")) {\n actor.send({ type: \"POP_VIEW\" })\n }\n },\n clearStack() {\n if (get().stack.length === 0) return\n actor.send({ type: \"CLOSE\" })\n },\n openView(id, ref) {\n const resolvedRef = ref === undefined ? get().selection : ref\n get().actions.pushStack({ id, ref: resolvedRef })\n },\n closeView() {\n get().actions.clearStack()\n },\n setInspectorActive(active) {\n if (get().inspectorActive === active) return\n actor.send({ type: \"TOGGLE_INSPECTOR\" })\n },\n toggleInspector() {\n actor.send({ type: \"TOGGLE_INSPECTOR\" })\n },\n pinHighlight(ref) {\n if (sameRef(get().pinnedHighlight, ref)) return\n actor.send({ type: \"PIN\", ref })\n },\n clearPinnedHighlight() {\n if (get().pinnedHighlight === null) return\n actor.send({ type: \"UNPIN\" })\n },\n setTheme(theme, resolved) {\n const state = get()\n const nextResolved = resolved ?? resolveTheme(theme, detectTheme)\n if (state.theme === theme && state.resolvedTheme === nextResolved)\n return\n actor.send({ type: \"SET_THEME\", theme, resolvedTheme: nextResolved })\n },\n setIngest(active) {\n if (get().ingestActive === active) return\n actor.send({ type: \"SET_INGEST\", active })\n },\n },\n }))\n\n const projectAndSet = (): void => {\n const next = projectFromActor(actor)\n const prev = store.getState()\n const updates: Partial<SessionSnapshot> = {}\n if (!sameRef(prev.hover, next.hover)) updates.hover = next.hover\n if (!sameRef(prev.selection, next.selection))\n updates.selection = next.selection\n if (prev.stack !== next.stack) updates.stack = next.stack\n if (!sameRef(prev.pinnedHighlight, next.pinnedHighlight))\n updates.pinnedHighlight = next.pinnedHighlight\n if (prev.inspectorActive !== next.inspectorActive)\n updates.inspectorActive = next.inspectorActive\n if (prev.theme !== next.theme) updates.theme = next.theme\n if (prev.resolvedTheme !== next.resolvedTheme)\n updates.resolvedTheme = next.resolvedTheme\n if (prev.ingestActive !== next.ingestActive)\n updates.ingestActive = next.ingestActive\n if (Object.keys(updates).length === 0) return\n store.setState(updates)\n }\n actor.subscribe(projectAndSet)\n\n const session = store as SessionStore\n session.send = (event) => actor.send(event)\n return session\n}\n","import { assign, setup } from \"xstate\"\n\nimport type { EntityRef } from \"../entities/types\"\n\nexport interface HighlightContext {\n ref: EntityRef | null\n element: HTMLElement | null\n pinnedRef: EntityRef | null\n color: string | null\n}\n\nexport type HighlightEvent =\n | {\n type: \"HOVER\"\n ref: EntityRef\n element: HTMLElement\n color?: string | null\n }\n | { type: \"UNHOVER\" }\n | { type: \"PIN\"; ref?: EntityRef }\n | { type: \"UNPIN\" }\n\nconst initialContext: HighlightContext = {\n ref: null,\n element: null,\n pinnedRef: null,\n color: null,\n}\n\nexport const highlightMachine = setup({\n types: {} as {\n context: HighlightContext\n events: HighlightEvent\n },\n actions: {\n showOverlay: () => {},\n hideOverlay: () => {},\n updateOverlay: () => {},\n },\n}).createMachine({\n id: \"highlight\",\n initial: \"none\",\n context: initialContext,\n states: {\n none: {\n entry: [\n assign({\n ref: null,\n element: null,\n pinnedRef: null,\n color: null,\n }),\n { type: \"hideOverlay\" },\n ],\n on: {\n HOVER: {\n target: \"transient\",\n actions: assign(({ event }) => ({\n ref: event.ref,\n element: event.element,\n color: event.color ?? null,\n })),\n },\n PIN: {\n target: \"pinned\",\n actions: assign(({ context, event }) => ({\n ref: event.ref ?? context.ref,\n pinnedRef: event.ref ?? context.ref,\n })),\n },\n },\n },\n transient: {\n entry: { type: \"showOverlay\" },\n on: {\n HOVER: {\n actions: [\n assign(({ event }) => ({\n ref: event.ref,\n element: event.element,\n color: event.color ?? null,\n })),\n { type: \"updateOverlay\" },\n ],\n },\n UNHOVER: { target: \"none\" },\n PIN: {\n target: \"pinned\",\n actions: assign(({ context, event }) => ({\n pinnedRef: event.ref ?? context.ref,\n })),\n },\n },\n },\n pinned: {\n entry: { type: \"showOverlay\" },\n on: {\n UNPIN: { target: \"none\" },\n },\n },\n },\n})\n","import { assign, forwardTo, sendTo, setup } from \"xstate\"\n\nimport type { EntityRef } from \"../entities/types\"\nimport type {\n ResolvedTheme,\n ThemePreference,\n ViewStackEntry,\n} from \"../session/types\"\nimport { highlightMachine } from \"./highlight\"\n\nexport interface SurfaceContext {\n stack: ViewStackEntry[]\n hover: EntityRef | null\n selection: EntityRef | null\n pinnedHighlight: EntityRef | null\n theme: ThemePreference\n resolvedTheme: ResolvedTheme\n ingestActive: boolean\n}\n\nexport type SurfaceEvent =\n | { type: \"TOGGLE_INSPECTOR\" }\n | { type: \"OPEN_PALETTE\" }\n | { type: \"PUSH_VIEW\"; entry: ViewStackEntry }\n | { type: \"POP_VIEW\" }\n | { type: \"CLOSE\" }\n | { type: \"ESC\" }\n | { type: \"CMD_K\" }\n | { type: \"SELECT\"; ref: EntityRef | null; entry: ViewStackEntry }\n | { type: \"SET_SELECTION\"; ref: EntityRef | null }\n | {\n type: \"HOVER\"\n ref: EntityRef\n element: HTMLElement | null\n color?: string | null\n }\n | { type: \"UNHOVER\" }\n | { type: \"PIN\"; ref?: EntityRef }\n | { type: \"UNPIN\" }\n | {\n type: \"SET_THEME\"\n theme: ThemePreference\n resolvedTheme: ResolvedTheme\n }\n | { type: \"SET_INGEST\"; active: boolean }\n\nexport type SurfaceInput = Partial<SurfaceContext>\n\nconst initialContext: SurfaceContext = {\n stack: [],\n hover: null,\n selection: null,\n pinnedHighlight: null,\n theme: \"auto\",\n resolvedTheme: \"light\",\n ingestActive: false,\n}\n\nexport const surfaceMachine = setup({\n types: {} as {\n context: SurfaceContext\n events: SurfaceEvent\n children: { highlight: \"highlight\" }\n },\n actors: {\n highlight: highlightMachine,\n },\n actions: {\n mountInspector: () => {},\n destroyInspector: () => {},\n openActionsPopup: () => {},\n closePopup: () => {},\n },\n guards: {\n hasPinnedHighlight: ({ context }) => context.pinnedHighlight !== null,\n hasActions: () => false,\n popupOpen: () => false,\n stackDeeperThanTwo: ({ context }) => context.stack.length > 2,\n stackEqualsTwo: ({ context }) => context.stack.length === 2,\n stackEqualsOne: ({ context }) => context.stack.length === 1,\n paletteAtBottomDepthTwo: ({ context }) =>\n context.stack.length === 2 && context.stack[0]?.id === \"command-palette\",\n },\n}).createMachine({\n id: \"surface\",\n initial: \"idle\",\n context: ({ input }) => ({\n ...initialContext,\n ...((input as SurfaceInput | undefined) ?? {}),\n }),\n invoke: {\n id: \"highlight\",\n src: \"highlight\",\n },\n on: {\n HOVER: {\n actions: [\n assign(({ event }) => ({ hover: event.ref })),\n forwardTo(\"highlight\"),\n ],\n },\n UNHOVER: {\n actions: [assign({ hover: null }), forwardTo(\"highlight\")],\n },\n PIN: {\n actions: [\n assign(({ context, event }) => ({\n pinnedHighlight: event.ref ?? context.hover,\n })),\n forwardTo(\"highlight\"),\n ],\n },\n UNPIN: {\n actions: [assign({ pinnedHighlight: null }), forwardTo(\"highlight\")],\n },\n SET_SELECTION: {\n actions: assign(({ event }) => ({ selection: event.ref })),\n },\n SET_THEME: {\n actions: assign(({ event }) => ({\n theme: event.theme,\n resolvedTheme: event.resolvedTheme,\n })),\n },\n SET_INGEST: {\n actions: assign(({ event }) => ({ ingestActive: event.active })),\n },\n },\n states: {\n idle: {\n entry: assign({ stack: [] }),\n on: {\n TOGGLE_INSPECTOR: { target: \"inspecting\" },\n OPEN_PALETTE: { target: \"palette\" },\n PUSH_VIEW: {\n target: \"viewing\",\n actions: assign(({ event }) => ({ stack: [event.entry] })),\n },\n ESC: {\n guard: \"hasPinnedHighlight\",\n actions: [\n assign({ pinnedHighlight: null }),\n sendTo(\"highlight\", { type: \"UNPIN\" }),\n ],\n },\n },\n },\n inspecting: {\n entry: { type: \"mountInspector\" },\n exit: { type: \"destroyInspector\" },\n on: {\n SELECT: {\n target: \"viewing\",\n actions: assign(({ context, event }) => ({\n selection: event.ref,\n stack: [...context.stack, event.entry],\n })),\n },\n PUSH_VIEW: {\n target: \"viewing\",\n actions: assign(({ event }) => ({ stack: [event.entry] })),\n },\n TOGGLE_INSPECTOR: { target: \"idle\" },\n OPEN_PALETTE: { target: \"palette\" },\n ESC: { target: \"idle\" },\n },\n },\n palette: {\n entry: assign({ stack: [{ id: \"command-palette\", ref: null }] }),\n on: {\n PUSH_VIEW: {\n target: \"viewing\",\n actions: assign(({ context, event }) => ({\n stack: [...context.stack, event.entry],\n })),\n },\n CLOSE: { target: \"idle\" },\n ESC: { target: \"idle\" },\n CMD_K: [\n {\n guard: \"hasActions\",\n actions: { type: \"openActionsPopup\" },\n },\n { target: \"idle\" },\n ],\n },\n },\n viewing: {\n on: {\n PUSH_VIEW: {\n actions: assign(({ context, event }) => ({\n stack: [...context.stack, event.entry],\n })),\n },\n POP_VIEW: [\n {\n guard: \"stackDeeperThanTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"paletteAtBottomDepthTwo\",\n target: \"palette\",\n },\n {\n guard: \"stackEqualsTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"stackEqualsOne\",\n target: \"idle\",\n },\n ],\n CLOSE: { target: \"idle\" },\n ESC: [\n {\n guard: \"popupOpen\",\n actions: { type: \"closePopup\" },\n },\n {\n guard: \"stackDeeperThanTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"paletteAtBottomDepthTwo\",\n target: \"palette\",\n },\n {\n guard: \"stackEqualsTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"stackEqualsOne\",\n target: \"idle\",\n },\n ],\n },\n },\n },\n})\n","/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-amber-300: oklch(87.9% 0.169 91.605);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-500: oklch(76.9% 0.188 70.08);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-emerald-300: oklch(84.5% 0.143 164.978);\n --color-emerald-400: oklch(76.5% 0.177 163.223);\n --color-emerald-500: oklch(69.6% 0.17 162.48);\n --color-emerald-700: oklch(50.8% 0.118 165.612);\n --color-cyan-300: oklch(86.5% 0.127 207.078);\n --color-cyan-400: oklch(78.9% 0.154 211.53);\n --color-cyan-700: oklch(52% 0.105 223.128);\n --color-blue-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-violet-300: oklch(81.1% 0.111 293.571);\n --color-violet-400: oklch(70.2% 0.183 293.541);\n --color-violet-700: oklch(49.1% 0.27 292.581);\n --color-fuchsia-300: oklch(83.3% 0.145 321.434);\n --color-fuchsia-400: oklch(74% 0.238 322.16);\n --color-fuchsia-700: oklch(51.8% 0.253 323.949);\n --color-rose-300: oklch(81% 0.117 11.638);\n --color-rose-400: oklch(71.2% 0.194 13.428);\n --color-rose-700: oklch(51.4% 0.222 16.935);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-neutral-50: oklch(98.5% 0 0);\n --color-neutral-100: oklch(97% 0 0);\n --color-neutral-400: oklch(70.8% 0 0);\n --color-neutral-500: oklch(55.6% 0 0);\n --color-neutral-800: oklch(26.9% 0 0);\n --color-neutral-950: oklch(14.5% 0 0);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-xl: 36rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --tracking-widest: 0.1em;\n --leading-relaxed: 1.625;\n --radius-xl: calc(var(--radius) * 1.4);\n --radius-2xl: calc(var(--radius) * 1.8);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --blur-sm: 8px;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\",\n Roboto, sans-serif;\n --default-mono-font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n --color-border: var(--border);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .pointer-events-none {\n pointer-events: none;\n }\n .invisible {\n visibility: hidden;\n }\n .visible {\n visibility: visible;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border-width: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .start {\n inset-inline-start: var(--spacing);\n }\n .end {\n inset-inline-end: var(--spacing);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .right-3 {\n right: calc(var(--spacing) * 3);\n }\n .bottom-12 {\n bottom: calc(var(--spacing) * 12);\n }\n .z-10 {\n z-index: 10;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .-mx-px {\n margin-inline: -1px;\n }\n .mx-1 {\n margin-inline: calc(var(--spacing) * 1);\n }\n .mx-2 {\n margin-inline: calc(var(--spacing) * 2);\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .ms-auto {\n margin-inline-start: auto;\n }\n .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n .ml-auto {\n margin-left: auto;\n }\n .block {\n display: block;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .hidden {\n display: none;\n }\n .inline {\n display: inline;\n }\n .inline-block {\n display: inline-block;\n }\n .inline-flex {\n display: inline-flex;\n }\n .list-item {\n display: list-item;\n }\n .table {\n display: table;\n }\n .size-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n height: calc(var(--spacing) * 3.5);\n }\n .size-4 {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n .size-6 {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n .size-7 {\n width: calc(var(--spacing) * 7);\n height: calc(var(--spacing) * 7);\n }\n .size-8 {\n width: calc(var(--spacing) * 8);\n height: calc(var(--spacing) * 8);\n }\n .size-9 {\n width: calc(var(--spacing) * 9);\n height: calc(var(--spacing) * 9);\n }\n .h-3\\.5 {\n height: calc(var(--spacing) * 3.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-4\\.5 {\n height: calc(var(--spacing) * 4.5);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-5\\.5 {\n height: calc(var(--spacing) * 5.5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-7 {\n height: calc(var(--spacing) * 7);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-\\[26rem\\] {\n height: 26rem;\n }\n .h-auto {\n height: auto;\n }\n .h-full {\n height: 100%;\n }\n .h-px {\n height: 1px;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-7 {\n min-height: calc(var(--spacing) * 7);\n }\n .min-h-8 {\n min-height: calc(var(--spacing) * 8);\n }\n .min-h-20 {\n min-height: calc(var(--spacing) * 20);\n }\n .w-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-56 {\n width: calc(var(--spacing) * 56);\n }\n .w-auto {\n width: auto;\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-xl {\n max-width: var(--container-xl);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-4 {\n min-width: calc(var(--spacing) * 4);\n }\n .min-w-4\\.5 {\n min-width: calc(var(--spacing) * 4.5);\n }\n .min-w-5 {\n min-width: calc(var(--spacing) * 5);\n }\n .min-w-5\\.5 {\n min-width: calc(var(--spacing) * 5.5);\n }\n .min-w-32 {\n min-width: calc(var(--spacing) * 32);\n }\n .flex-1 {\n flex: 1;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\n }\n .cursor-default {\n cursor: default;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize {\n resize: both;\n }\n .scroll-py-2 {\n scroll-padding-block: calc(var(--spacing) * 2);\n }\n .list-none {\n list-style-type: none;\n }\n .appearance-none {\n appearance: none;\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-row {\n flex-direction: row;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .items-center {\n align-items: center;\n }\n .items-start {\n align-items: flex-start;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-start {\n justify-content: flex-start;\n }\n .gap-0 {\n gap: calc(var(--spacing) * 0);\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .self-start {\n align-self: flex-start;\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: calc(var(--radius) * 1.8);\n }\n .rounded-\\[0\\.25rem\\] {\n border-radius: 0.25rem;\n }\n .rounded-lg {\n border-radius: var(--radius);\n }\n .rounded-md {\n border-radius: calc(var(--radius) * 0.8);\n }\n .rounded-sm {\n border-radius: calc(var(--radius) * 0.6);\n }\n .rounded-t-xl {\n border-top-left-radius: calc(var(--radius) * 1.4);\n border-top-right-radius: calc(var(--radius) * 1.4);\n }\n .rounded-b-\\[calc\\(var\\(--radius-2xl\\)-1px\\)\\] {\n border-bottom-right-radius: calc(var(--radius-2xl) - 1px);\n border-bottom-left-radius: calc(var(--radius-2xl) - 1px);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-b-0 {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 0px;\n }\n .border-border {\n border-color: var(--border);\n }\n .border-destructive {\n border-color: var(--destructive);\n }\n .border-input {\n border-color: var(--input);\n }\n .border-primary {\n border-color: var(--primary);\n }\n .border-transparent {\n border-color: transparent;\n }\n .bg-amber-400\\/20 {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 20%, transparent);\n }\n }\n .bg-background {\n background-color: var(--background);\n }\n .bg-black\\/32 {\n background-color: color-mix(in srgb, #000 32%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 32%, transparent);\n }\n }\n .bg-blue-400\\/20 {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 20%, transparent);\n }\n }\n .bg-border {\n background-color: var(--border);\n }\n .bg-cyan-400\\/20 {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 20%, transparent);\n }\n }\n .bg-destructive {\n background-color: var(--destructive);\n }\n .bg-destructive\\/10 {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n }\n }\n .bg-emerald-400\\/20 {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 20%, transparent);\n }\n }\n .bg-fuchsia-400\\/20 {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 20%, transparent);\n }\n }\n .bg-info\\/10 {\n background-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--info) 10%, transparent);\n }\n }\n .bg-muted {\n background-color: var(--muted);\n }\n .bg-popover {\n background-color: var(--popover);\n }\n .bg-primary {\n background-color: var(--primary);\n }\n .bg-rose-400\\/20 {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 20%, transparent);\n }\n }\n .bg-secondary {\n background-color: var(--secondary);\n }\n .bg-slate-400\\/20 {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 20%, transparent);\n }\n }\n .bg-success\\/10 {\n background-color: var(--success);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--success) 10%, transparent);\n }\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-violet-400\\/20 {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 20%, transparent);\n }\n }\n .bg-warning\\/10 {\n background-color: var(--warning);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--warning) 10%, transparent);\n }\n }\n .bg-clip-padding {\n background-clip: padding-box;\n }\n .bg-\\[right_0\\.5rem_center\\] {\n background-position: right 0.5rem center;\n }\n .bg-no-repeat {\n background-repeat: no-repeat;\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .px-0 {\n padding-inline: calc(var(--spacing) * 0);\n }\n .px-1 {\n padding-inline: calc(var(--spacing) * 1);\n }\n .px-1\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-2\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-3\\.5 {\n padding-inline: calc(var(--spacing) * 3.5);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-5 {\n padding-inline: calc(var(--spacing) * 5);\n }\n .py-0 {\n padding-block: calc(var(--spacing) * 0);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-\\[max\\(1rem\\,4vh\\)\\] {\n padding-block: max(1rem, 4vh);\n }\n .ps-2 {\n padding-inline-start: calc(var(--spacing) * 2);\n }\n .pe-3 {\n padding-inline-end: calc(var(--spacing) * 3);\n }\n .pr-8 {\n padding-right: calc(var(--spacing) * 8);\n }\n .pl-3 {\n padding-left: calc(var(--spacing) * 3);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .font-mono {\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n }\n .font-sans {\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\",\n Roboto, sans-serif;\n }\n .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n .text-base\\/4\\.5 {\n font-size: var(--text-base);\n line-height: calc(var(--spacing) * 4.5);\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .text-\\[0\\.625rem\\] {\n font-size: 0.625rem;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-normal {\n --tw-font-weight: var(--font-weight-normal);\n font-weight: var(--font-weight-normal);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-widest {\n --tw-tracking: var(--tracking-widest);\n letter-spacing: var(--tracking-widest);\n }\n .break-words {\n overflow-wrap: break-word;\n }\n .whitespace-normal {\n white-space: normal;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .text-amber-700 {\n color: var(--color-amber-700);\n }\n .text-blue-700 {\n color: var(--color-blue-700);\n }\n .text-cyan-700 {\n color: var(--color-cyan-700);\n }\n .text-destructive-foreground {\n color: var(--destructive-foreground);\n }\n .text-emerald-700 {\n color: var(--color-emerald-700);\n }\n .text-foreground {\n color: var(--foreground);\n }\n .text-fuchsia-700 {\n color: var(--color-fuchsia-700);\n }\n .text-info-foreground {\n color: var(--info-foreground);\n }\n .text-muted-foreground {\n color: var(--muted-foreground);\n }\n .text-muted-foreground\\/70 {\n color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--muted-foreground) 70%, transparent);\n }\n }\n .text-popover-foreground {\n color: var(--popover-foreground);\n }\n .text-primary-foreground {\n color: var(--primary-foreground);\n }\n .text-rose-700 {\n color: var(--color-rose-700);\n }\n .text-secondary-foreground {\n color: var(--secondary-foreground);\n }\n .text-slate-700 {\n color: var(--color-slate-700);\n }\n .text-success-foreground {\n color: var(--success-foreground);\n }\n .text-violet-700 {\n color: var(--color-violet-700);\n }\n .text-warning-foreground {\n color: var(--warning-foreground);\n }\n .text-white {\n color: var(--color-white);\n }\n .lowercase {\n text-transform: lowercase;\n }\n .line-through {\n text-decoration-line: line-through;\n }\n .underline {\n text-decoration-line: underline;\n }\n .underline-offset-4 {\n text-underline-offset: 4px;\n }\n .accent-accent {\n accent-color: var(--accent);\n }\n .accent-primary {\n accent-color: var(--primary);\n }\n .opacity-80 {\n opacity: 80%;\n }\n .shadow-lg\\/5 {\n --tw-shadow-alpha: 5%;\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%)), 0 4px 6px -4px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs\\/5 {\n --tw-shadow-alpha: 5%;\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.05) l a b / 5%));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-none {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs {\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .filter {\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .backdrop-blur-sm {\n --tw-backdrop-blur: blur(var(--blur-sm));\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-shadow {\n transition-property: box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .ease-out {\n --tw-ease: var(--ease-out);\n transition-timing-function: var(--ease-out);\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n .\\[clip-path\\:inset\\(0_1px\\)\\] {\n clip-path: inset(0 1px);\n }\n .not-dark\\:bg-clip-padding {\n &:not(*:is(.dark *)) {\n background-clip: padding-box;\n }\n }\n .group-data-hover\\:bg-amber-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-blue-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-cyan-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-emerald-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-fuchsia-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-rose-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-slate-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-violet-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 30%, transparent);\n }\n }\n }\n .placeholder\\:text-muted-foreground {\n &::placeholder {\n color: var(--muted-foreground);\n }\n }\n .before\\:pointer-events-none {\n &::before {\n content: var(--tw-content);\n pointer-events: none;\n }\n }\n .before\\:absolute {\n &::before {\n content: var(--tw-content);\n position: absolute;\n }\n }\n .before\\:inset-0 {\n &::before {\n content: var(--tw-content);\n inset: calc(var(--spacing) * 0);\n }\n }\n .before\\:rounded-\\[calc\\(var\\(--radius-2xl\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-radius: calc(var(--radius-2xl) - 1px);\n }\n }\n .before\\:rounded-t-\\[calc\\(var\\(--radius-xl\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-top-left-radius: calc(var(--radius-xl) - 1px);\n border-top-right-radius: calc(var(--radius-xl) - 1px);\n }\n }\n .before\\:bg-muted\\/72 {\n &::before {\n content: var(--tw-content);\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 72%, transparent);\n }\n }\n }\n .before\\:shadow-\\[0_1px_--theme\\(--color-black\\/4\\%\\)\\] {\n &::before {\n content: var(--tw-content);\n --tw-shadow: 0 1px var(--tw-shadow-color, color-mix(in srgb, #000 4%, transparent));\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow: 0 1px var(--tw-shadow-color, color-mix(in oklab, var(--color-black) 4%, transparent));\n }\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-within\\:border-ring {\n &:focus-within {\n border-color: var(--ring);\n }\n }\n .focus-within\\:bg-accent {\n &:focus-within {\n background-color: var(--accent);\n }\n }\n .focus-within\\:text-accent-foreground {\n &:focus-within {\n color: var(--accent-foreground);\n }\n }\n .focus-within\\:ring-\\[3px\\] {\n &:focus-within {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-within\\:ring-ring\\/30 {\n &:focus-within {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 30%, transparent);\n }\n }\n }\n .hover\\:border-destructive\\/30 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--destructive) 30%, transparent);\n }\n }\n }\n }\n .hover\\:bg-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n .hover\\:bg-destructive\\/5 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 5%, transparent);\n }\n }\n }\n }\n .hover\\:bg-destructive\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-primary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-secondary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:text-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n .hover\\:underline {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n .focus\\:bg-accent {\n &:focus {\n background-color: var(--accent);\n }\n }\n .focus\\:text-accent-foreground {\n &:focus {\n color: var(--accent-foreground);\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .focus-visible\\:border-ring {\n &:focus-visible {\n border-color: var(--ring);\n }\n }\n .focus-visible\\:ring-2 {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-\\[3px\\] {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-ring {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n }\n }\n .focus-visible\\:ring-ring\\/30 {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 30%, transparent);\n }\n }\n }\n .focus-visible\\:ring-offset-1 {\n &:focus-visible {\n --tw-ring-offset-width: 1px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n }\n .focus-visible\\:ring-offset-background {\n &:focus-visible {\n --tw-ring-offset-color: var(--background);\n }\n }\n .disabled\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\:cursor-not-allowed {\n &:disabled {\n cursor: not-allowed;\n }\n }\n .disabled\\:opacity-60 {\n &:disabled {\n opacity: 60%;\n }\n }\n .has-disabled\\:opacity-60 {\n &:has(*:disabled) {\n opacity: 60%;\n }\n }\n .aria-invalid\\:border-destructive\\/40 {\n &[aria-invalid=\"true\"] {\n border-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n .aria-invalid\\:focus-visible\\:ring-destructive\\/20 {\n &[aria-invalid=\"true\"] {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n }\n .data-\\[disabled\\]\\:pointer-events-none {\n &[data-disabled] {\n pointer-events: none;\n }\n }\n .data-\\[disabled\\]\\:opacity-60 {\n &[data-disabled] {\n opacity: 60%;\n }\n }\n .data-\\[disabled\\]\\:opacity-64 {\n &[data-disabled] {\n opacity: 64%;\n }\n }\n .data-\\[highlighted\\]\\:bg-accent {\n &[data-highlighted] {\n background-color: var(--accent);\n }\n }\n .data-\\[highlighted\\]\\:text-accent-foreground {\n &[data-highlighted] {\n color: var(--accent-foreground);\n }\n }\n .sm\\:min-h-7 {\n @media (width >= 40rem) {\n min-height: calc(var(--spacing) * 7);\n }\n }\n .sm\\:py-\\[10vh\\] {\n @media (width >= 40rem) {\n padding-block: 10vh;\n }\n }\n .sm\\:text-sm {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .sm\\:text-sm\\/4 {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: calc(var(--spacing) * 4);\n }\n }\n .dark\\:bg-amber-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-blue-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-cyan-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-destructive\\/20 {\n &:is(.dark *) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-fuchsia-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-info\\/20 {\n &:is(.dark *) {\n background-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--info) 20%, transparent);\n }\n }\n }\n .dark\\:bg-input\\/30 {\n &:is(.dark *) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n .dark\\:bg-rose-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-slate-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-success\\/20 {\n &:is(.dark *) {\n background-color: var(--success);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--success) 20%, transparent);\n }\n }\n }\n .dark\\:bg-violet-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-warning\\/20 {\n &:is(.dark *) {\n background-color: var(--warning);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--warning) 20%, transparent);\n }\n }\n }\n .dark\\:text-amber-300 {\n &:is(.dark *) {\n color: var(--color-amber-300);\n }\n }\n .dark\\:text-blue-300 {\n &:is(.dark *) {\n color: var(--color-blue-300);\n }\n }\n .dark\\:text-cyan-300 {\n &:is(.dark *) {\n color: var(--color-cyan-300);\n }\n }\n .dark\\:text-emerald-300 {\n &:is(.dark *) {\n color: var(--color-emerald-300);\n }\n }\n .dark\\:text-fuchsia-300 {\n &:is(.dark *) {\n color: var(--color-fuchsia-300);\n }\n }\n .dark\\:text-rose-300 {\n &:is(.dark *) {\n color: var(--color-rose-300);\n }\n }\n .dark\\:text-slate-300 {\n &:is(.dark *) {\n color: var(--color-slate-300);\n }\n }\n .dark\\:text-violet-300 {\n &:is(.dark *) {\n color: var(--color-violet-300);\n }\n }\n .dark\\:group-data-hover\\:bg-amber-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-blue-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-cyan-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-emerald-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-fuchsia-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-rose-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-slate-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-violet-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:before\\:shadow-\\[0_-1px_--theme\\(--color-white\\/6\\%\\)\\] {\n &:is(.dark *) {\n &::before {\n content: var(--tw-content);\n --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in srgb, #fff 6%, transparent));\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in oklab, var(--color-white) 6%, transparent));\n }\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .\\[\\&_svg\\]\\:pointer-events-none {\n & svg {\n pointer-events: none;\n }\n }\n .\\[\\&_svg\\]\\:shrink-0 {\n & svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'opacity-\\'\\]\\)\\]\\:opacity-80 {\n & svg:not([class*='opacity-']) {\n opacity: 80%;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n}\n@layer base {\n *, ::after, ::before {\n border-color: var(--color-border, currentColor);\n }\n}\n@layer components {\n .uidex-scrollbar {\n scrollbar-width: thin;\n scrollbar-color: var(--muted-foreground) transparent;\n @supports (color: color-mix(in lab, red, red)) {\n scrollbar-color: color-mix(in srgb, var(--muted-foreground) 40%, transparent) transparent;\n }\n }\n .uidex-scrollbar::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n .uidex-scrollbar::-webkit-scrollbar-track {\n background: transparent;\n }\n .uidex-scrollbar::-webkit-scrollbar-thumb {\n background-color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix( in srgb, var(--muted-foreground) 35%, transparent );\n }\n border-radius: 9999px;\n border: 2px solid transparent;\n background-clip: content-box;\n }\n .uidex-scrollbar::-webkit-scrollbar-thumb:hover {\n background-color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix( in srgb, var(--muted-foreground) 60%, transparent );\n }\n }\n .uidex-scrollbar::-webkit-scrollbar-corner {\n background: transparent;\n }\n}\n:where(:host, :root) {\n --background: color-mix(\n in srgb,\n oklch(14.5% 0 0) 95%,\n #fff\n );\n @supports (color: color-mix(in lab, red, red)) {\n --background: color-mix(\n in srgb,\n var(--color-neutral-950) 95%,\n var(--color-white)\n );\n }\n --foreground: var(--color-neutral-100);\n --card: var(--background);\n @supports (color: color-mix(in lab, red, red)) {\n --card: color-mix(in srgb, var(--background) 98%, var(--color-white));\n }\n --card-foreground: var(--color-neutral-100);\n --popover: var(--background);\n @supports (color: color-mix(in lab, red, red)) {\n --popover: color-mix(in srgb, var(--background) 98%, var(--color-white));\n }\n --popover-foreground: var(--color-neutral-100);\n --primary: var(--color-neutral-100);\n --primary-foreground: var(--color-neutral-800);\n --secondary: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --secondary: color-mix(in srgb, var(--color-white) 4%, transparent);\n }\n --secondary-foreground: var(--color-neutral-100);\n --muted: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --muted: color-mix(in srgb, var(--color-white) 4%, transparent);\n }\n --muted-foreground: color-mix(\n in srgb,\n oklch(55.6% 0 0) 90%,\n #fff\n );\n @supports (color: color-mix(in lab, red, red)) {\n --muted-foreground: color-mix(\n in srgb,\n var(--color-neutral-500) 90%,\n var(--color-white)\n );\n }\n --accent: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --accent: color-mix(in srgb, var(--color-white) 4%, transparent);\n }\n --accent-foreground: var(--color-neutral-100);\n --destructive: color-mix(\n in srgb,\n oklch(63.7% 0.237 25.331) 90%,\n #fff\n );\n @supports (color: color-mix(in lab, red, red)) {\n --destructive: color-mix(\n in srgb,\n var(--color-red-500) 90%,\n var(--color-white)\n );\n }\n --destructive-foreground: var(--color-red-400);\n --border: color-mix(in srgb, #fff 6%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --border: color-mix(in srgb, var(--color-white) 6%, transparent);\n }\n --input: color-mix(in srgb, #fff 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --input: color-mix(in srgb, var(--color-white) 8%, transparent);\n }\n --ring: var(--color-neutral-500);\n --info: var(--color-blue-500);\n --info-foreground: var(--color-blue-400);\n --success: var(--color-emerald-500);\n --success-foreground: var(--color-emerald-400);\n --warning: var(--color-amber-500);\n --warning-foreground: var(--color-amber-400);\n --radius: 0.625rem;\n}\n:host(.light) {\n --background: var(--color-white);\n --foreground: var(--color-neutral-800);\n --card: var(--color-white);\n --card-foreground: var(--color-neutral-800);\n --popover: var(--color-white);\n --popover-foreground: var(--color-neutral-800);\n --primary: var(--color-neutral-800);\n --primary-foreground: var(--color-neutral-50);\n --secondary: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --secondary: color-mix(in srgb, var(--color-black) 4%, transparent);\n }\n --secondary-foreground: var(--color-neutral-800);\n --muted: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --muted: color-mix(in srgb, var(--color-black) 4%, transparent);\n }\n --muted-foreground: color-mix(\n in srgb,\n oklch(55.6% 0 0) 90%,\n #000\n );\n @supports (color: color-mix(in lab, red, red)) {\n --muted-foreground: color-mix(\n in srgb,\n var(--color-neutral-500) 90%,\n var(--color-black)\n );\n }\n --accent: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --accent: color-mix(in srgb, var(--color-black) 4%, transparent);\n }\n --accent-foreground: var(--color-neutral-800);\n --destructive: var(--color-red-500);\n --destructive-foreground: var(--color-red-700);\n --border: color-mix(in srgb, #000 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --border: color-mix(in srgb, var(--color-black) 8%, transparent);\n }\n --input: color-mix(in srgb, #000 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --input: color-mix(in srgb, var(--color-black) 10%, transparent);\n }\n --ring: var(--color-neutral-400);\n --info: var(--color-blue-500);\n --info-foreground: var(--color-blue-700);\n --success: var(--color-emerald-500);\n --success-foreground: var(--color-emerald-700);\n --warning: var(--color-amber-500);\n --warning-foreground: var(--color-amber-700);\n}\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-content {\n syntax: \"*\";\n initial-value: \"\";\n inherits: false;\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-ease: initial;\n --tw-content: \"\";\n }\n }\n}\n","export const SURFACE_HOST_CLASS = \"uidex-surface-host\"\nexport const SURFACE_CONTAINER_CLASS = \"uidex-container\"\n\nexport const Z_BASE = 2147483644\nexport const Z_OVERLAY = 2147483645\nexport const Z_CHROME = 2147483646\n\nexport const SURFACE_IGNORE_SELECTOR = `.${SURFACE_HOST_CLASS},.${SURFACE_CONTAINER_CLASS}`\n\nimport type { EntityKind } from \"../entities\"\n\nexport const UIDEX_ATTR_TO_KIND: ReadonlyArray<readonly [string, EntityKind]> =\n [\n [\"data-uidex\", \"element\"],\n [\"data-uidex-region\", \"region\"],\n [\"data-uidex-widget\", \"widget\"],\n [\"data-uidex-primitive\", \"primitive\"],\n ]\n","import type { ResolvedTheme } from \"../session\"\nimport builtinCss from \"../styles/tailwind.built.css\"\nimport { SURFACE_HOST_CLASS, Z_BASE } from \"./constants\"\n\nexport interface SurfaceHost {\n readonly hostEl: HTMLElement\n readonly shadowRoot: ShadowRoot\n readonly chromeEl: HTMLElement\n applyTheme(theme: ResolvedTheme): void\n destroy(): void\n}\n\nexport interface SurfaceHostOptions {\n mount: Element\n stylesheets?: string[]\n initialTheme?: ResolvedTheme\n}\n\nexport function createSurfaceHost(options: SurfaceHostOptions): SurfaceHost {\n const { mount, stylesheets = [], initialTheme = \"light\" } = options\n\n const hostEl = document.createElement(\"div\")\n hostEl.classList.add(SURFACE_HOST_CLASS)\n hostEl.style.position = \"fixed\"\n hostEl.style.inset = \"0\"\n hostEl.style.pointerEvents = \"none\"\n hostEl.style.zIndex = String(Z_BASE)\n hostEl.classList.add(initialTheme)\n\n const shadow = hostEl.attachShadow({ mode: \"open\" })\n\n applyStylesheets(shadow, [builtinCss, ...stylesheets])\n\n const chromeEl = document.createElement(\"div\")\n chromeEl.classList.add(\"uidex-chrome\")\n chromeEl.style.pointerEvents = \"auto\"\n shadow.appendChild(chromeEl)\n\n mount.appendChild(hostEl)\n\n return {\n hostEl,\n shadowRoot: shadow,\n chromeEl,\n applyTheme(theme) {\n hostEl.classList.remove(\"light\", \"dark\")\n hostEl.classList.add(theme)\n },\n destroy() {\n hostEl.remove()\n },\n }\n}\n\nfunction applyStylesheets(shadow: ShadowRoot, stylesheets: string[]): void {\n if (stylesheets.length === 0) return\n\n const adoptable = supportsConstructableStylesheets(shadow)\n if (adoptable) {\n const sheets: CSSStyleSheet[] = []\n for (const css of stylesheets) {\n const sheet = new CSSStyleSheet()\n sheet.replaceSync(css)\n sheets.push(sheet)\n }\n shadow.adoptedStyleSheets = [...shadow.adoptedStyleSheets, ...sheets]\n return\n }\n\n for (const css of stylesheets) {\n const style = document.createElement(\"style\")\n style.textContent = css\n shadow.appendChild(style)\n }\n}\n\nfunction supportsConstructableStylesheets(shadow: ShadowRoot): boolean {\n if (typeof CSSStyleSheet === \"undefined\") return false\n if (!(\"adoptedStyleSheets\" in shadow)) return false\n try {\n const probe = new CSSStyleSheet()\n probe.replaceSync(\"\")\n return true\n } catch {\n return false\n }\n}\n","import { createElement as createLucideElement } from \"lucide\"\nimport { displayName, KIND_STYLE, type Entity } from \"../entities\"\nimport type { SessionStore } from \"../session\"\nimport { Z_CHROME } from \"./constants\"\n\nconst DEFAULT_TOOLTIP_COLOR = \"#34d399\"\nconst TOOLTIP_OFFSET = 16\nconst ARROW_SIZE = 5\n\nexport type CursorTooltipContent =\n | { entity: Entity; node?: Element | null }\n | string\n\nexport interface CursorTooltip {\n destroy(): void\n /** Present content for the current cursor position. */\n update(\n content: CursorTooltipContent | null,\n cursor: { x: number; y: number } | null\n ): void\n}\n\nexport interface CursorTooltipDeps {\n container: Element\n session: SessionStore\n}\n\nexport function createCursorTooltip(deps: CursorTooltipDeps): CursorTooltip {\n const { container } = deps\n\n const el = document.createElement(\"div\")\n el.setAttribute(\"data-uidex-cursor-tooltip\", \"\")\n el.style.position = \"fixed\"\n el.style.pointerEvents = \"none\"\n el.style.zIndex = String(Z_CHROME)\n el.style.padding = \"4px 8px\"\n el.style.fontSize = \"12px\"\n el.style.fontFamily = \"ui-sans-serif, system-ui, sans-serif\"\n el.style.borderRadius = \"6px\"\n el.style.background = DEFAULT_TOOLTIP_COLOR\n el.style.color = \"#0a0a0a\"\n el.style.display = \"none\"\n el.style.whiteSpace = \"nowrap\"\n el.style.transform = \"translate(-50%, 0)\"\n el.style.alignItems = \"center\"\n el.style.gap = \"6px\"\n\n const arrow = document.createElement(\"div\")\n arrow.setAttribute(\"data-uidex-cursor-tooltip-arrow\", \"\")\n arrow.style.position = \"absolute\"\n arrow.style.left = \"50%\"\n arrow.style.bottom = \"100%\"\n arrow.style.width = \"0\"\n arrow.style.height = \"0\"\n arrow.style.transform = \"translate(-50%, 0)\"\n arrow.style.borderLeft = `${ARROW_SIZE}px solid transparent`\n arrow.style.borderRight = `${ARROW_SIZE}px solid transparent`\n arrow.style.borderBottom = `${ARROW_SIZE}px solid ${DEFAULT_TOOLTIP_COLOR}`\n el.appendChild(arrow)\n\n const body = document.createElement(\"span\")\n body.setAttribute(\"data-uidex-cursor-tooltip-body\", \"\")\n body.style.display = \"inline-flex\"\n body.style.alignItems = \"center\"\n body.style.gap = \"6px\"\n el.appendChild(body)\n\n container.appendChild(el)\n\n let currentContent: CursorTooltipContent | null = null\n let currentCursor: { x: number; y: number } | null = null\n\n const applyColor = (color: string): void => {\n el.style.background = color\n arrow.style.borderBottom = `${ARROW_SIZE}px solid ${color}`\n }\n\n const renderBody = (): void => {\n body.replaceChildren()\n if (typeof currentContent === \"string\") {\n applyColor(DEFAULT_TOOLTIP_COLOR)\n body.append(document.createTextNode(currentContent))\n return\n }\n if (!currentContent) return\n const { entity, node } = currentContent\n const style = KIND_STYLE[entity.kind]\n applyColor(style?.color ?? DEFAULT_TOOLTIP_COLOR)\n if (style) {\n const svg = createLucideElement(style.icon)\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"width\", \"14\")\n svg.setAttribute(\"height\", \"14\")\n svg.style.display = \"block\"\n body.append(svg)\n }\n const label = displayName(entity, node)\n body.append(document.createTextNode(label))\n const rawId = entity.kind === \"route\" ? entity.path : entity.id\n if (rawId && rawId !== label) {\n const subordinate = document.createElement(\"span\")\n subordinate.setAttribute(\"data-uidex-cursor-tooltip-id\", \"\")\n subordinate.style.opacity = \"0.65\"\n subordinate.style.fontFamily =\n \"ui-monospace, SFMono-Regular, Menlo, monospace\"\n subordinate.style.fontSize = \"11px\"\n subordinate.textContent = rawId\n body.append(subordinate)\n }\n }\n\n const render = (): void => {\n if (!currentContent || !currentCursor) {\n el.style.display = \"none\"\n return\n }\n renderBody()\n el.style.display = \"inline-flex\"\n el.style.left = `${currentCursor.x}px`\n el.style.top = `${currentCursor.y + TOOLTIP_OFFSET}px`\n }\n\n return {\n update(content, cursor) {\n currentContent = content\n currentCursor = cursor\n render()\n },\n destroy() {\n el.remove()\n currentContent = null\n currentCursor = null\n },\n }\n}\n","import { displayName, type Entity, type EntityRef } from \"../entities\"\nimport type { Registry } from \"../entities\"\nimport type { SessionStore } from \"../session\"\nimport { SURFACE_IGNORE_SELECTOR, UIDEX_ATTR_TO_KIND } from \"./constants\"\nimport type { Overlay, OverlayShowOptions } from \"./overlay\"\n\nexport interface InspectorMatch {\n element: HTMLElement\n ref: EntityRef\n entity: Entity\n /** Display name resolved via `displayName(entity, element)`. */\n label: string\n}\n\nexport interface InspectorOptions {\n session: SessionStore\n registry?: Registry\n resolve?: (target: Element) => InspectorMatch | null\n onHover?: (\n match: InspectorMatch | null,\n cursor: { x: number; y: number } | null\n ) => void\n onSelect?: (match: InspectorMatch, cursor: { x: number; y: number }) => void\n}\n\nexport interface Inspector {\n mount(): void\n destroy(): void\n}\n\nfunction entityForRef(ref: EntityRef, registry?: Registry): Entity {\n if (registry) {\n const found = registry.get(ref.kind, ref.id)\n if (found) return found\n }\n if (ref.kind === \"route\") return { kind: \"route\", path: ref.id, page: ref.id }\n if (ref.kind === \"flow\") {\n return { kind: \"flow\", id: ref.id, loc: { file: \"\" }, touches: [] }\n }\n return { kind: ref.kind, id: ref.id }\n}\n\nexport function defaultResolveMatch(\n target: Element,\n registry?: Registry\n): InspectorMatch | null {\n if (target.closest(SURFACE_IGNORE_SELECTOR)) return null\n let node: Element | null = target\n while (node) {\n if (node instanceof HTMLElement) {\n for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {\n const id = node.getAttribute(attr)\n if (id) {\n const ref: EntityRef = { kind, id }\n const entity = entityForRef(ref, registry)\n return {\n element: node,\n ref,\n entity,\n label: displayName(entity, node),\n }\n }\n }\n }\n node = node.parentElement\n }\n return null\n}\n\nexport function resolveEntityElement(ref: EntityRef): HTMLElement | null {\n const entry = UIDEX_ATTR_TO_KIND.find(([, kind]) => kind === ref.kind)\n if (!entry) return null\n const [attr] = entry\n const selector = `[${attr}=\"${CSS.escape(ref.id)}\"]`\n const el = document.querySelector(selector)\n if (el instanceof HTMLElement && el.isConnected) return el\n return null\n}\n\nexport interface HighlightControllerLike {\n show(ref: EntityRef, opts?: OverlayShowOptions): void\n hide(): void\n}\n\nexport function createHighlightController(\n overlay: Overlay\n): HighlightControllerLike {\n let lastKey: string | null = null\n return {\n show(ref, opts) {\n const el = resolveEntityElement(ref)\n if (!el) {\n lastKey = null\n overlay.hide()\n return\n }\n const key = `${ref.kind}:${ref.id}`\n if (key === lastKey && overlay.isVisible) return\n lastKey = key\n overlay.show(el, opts)\n },\n hide() {\n lastKey = null\n overlay.hide()\n },\n }\n}\n\nexport function createInspector(options: InspectorOptions): Inspector {\n const {\n session,\n registry,\n resolve = (target) => defaultResolveMatch(target, registry),\n onHover,\n onSelect,\n } = options\n\n let mounted = false\n let currentEl: HTMLElement | null = null\n let cursorStyleEl: HTMLStyleElement | null = null\n\n const onMouseMove = (e: MouseEvent): void => {\n if (!(e.target instanceof Element)) return\n const match = resolve(e.target)\n const cursor = { x: e.clientX, y: e.clientY }\n if (match) {\n if (match.element !== currentEl) {\n currentEl = match.element\n session.getState().actions.hover(match.ref)\n }\n onHover?.(match, cursor)\n } else if (currentEl) {\n currentEl = null\n session.getState().actions.hover(null)\n onHover?.(null, cursor)\n }\n }\n\n const onClick = (e: MouseEvent): void => {\n if (!(e.target instanceof Element)) return\n if (e.target.closest(SURFACE_IGNORE_SELECTOR)) return\n const match = resolve(e.target)\n if (!match) return\n e.preventDefault()\n e.stopPropagation()\n session.getState().actions.select(match.ref)\n onSelect?.(match, { x: e.clientX, y: e.clientY })\n }\n\n return {\n mount() {\n if (mounted) return\n mounted = true\n if (typeof document !== \"undefined\") {\n cursorStyleEl = document.createElement(\"style\")\n cursorStyleEl.setAttribute(\"data-uidex-inspector-cursor\", \"\")\n cursorStyleEl.textContent =\n \"html, body, body * { cursor: crosshair !important; }\"\n document.head.appendChild(cursorStyleEl)\n }\n document.addEventListener(\"mousemove\", onMouseMove)\n document.addEventListener(\"click\", onClick, true)\n },\n destroy() {\n if (!mounted) return\n mounted = false\n currentEl = null\n if (cursorStyleEl) {\n cursorStyleEl.remove()\n cursorStyleEl = null\n }\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"click\", onClick, true)\n session.getState().actions.hover(null)\n onHover?.(null, null)\n },\n }\n}\n","import type { SessionStore } from \"../session\"\nimport { Z_CHROME } from \"./constants\"\n\nexport type Corner = \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n\nexport interface MenuBarOptions {\n container: Element\n session: SessionStore\n initialCorner?: Corner\n appTitle?: string\n}\n\nexport interface MenuBar {\n destroy(): void\n snapTo(corner: Corner): void\n snapToNearest(x: number, y: number): void\n readonly corner: Corner\n readonly root: HTMLElement\n}\n\nexport function createMenuBar(options: MenuBarOptions): MenuBar {\n const {\n container,\n session,\n initialCorner = \"bottom-right\",\n appTitle,\n } = options\n\n const root = document.createElement(\"div\")\n root.setAttribute(\"data-uidex-menubar\", \"\")\n root.setAttribute(\"role\", \"toolbar\")\n Object.assign(root.style, {\n position: \"fixed\",\n zIndex: String(Z_CHROME),\n pointerEvents: \"auto\",\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"6px\",\n borderRadius: \"8px\",\n background: \"rgba(20, 20, 20, 0.92)\",\n color: \"#f5f5f5\",\n fontFamily: \"ui-sans-serif, system-ui, sans-serif\",\n fontSize: \"12px\",\n userSelect: \"none\",\n cursor: \"grab\",\n })\n\n const buttonStyle = {\n background: \"rgba(255,255,255,0.08)\",\n color: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.12)\",\n borderRadius: \"6px\",\n padding: \"4px 8px\",\n font: \"inherit\",\n cursor: \"pointer\",\n }\n const buttonActiveStyle = {\n background: \"rgba(120, 180, 255, 0.28)\",\n borderColor: \"rgba(120, 180, 255, 0.55)\",\n }\n\n if (appTitle) {\n const titleEl = document.createElement(\"span\")\n titleEl.setAttribute(\"data-uidex-menubar-title\", \"\")\n titleEl.textContent = appTitle\n Object.assign(titleEl.style, {\n padding: \"0 6px 0 4px\",\n fontWeight: \"600\",\n letterSpacing: \"0.01em\",\n whiteSpace: \"nowrap\",\n })\n root.appendChild(titleEl)\n }\n\n const highlightDot = document.createElement(\"span\")\n highlightDot.setAttribute(\"data-uidex-menubar-highlight-indicator\", \"\")\n highlightDot.setAttribute(\"aria-label\", \"Element highlighted (press Esc)\")\n highlightDot.setAttribute(\"role\", \"status\")\n Object.assign(highlightDot.style, {\n display: \"none\",\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n margin: \"0 2px 0 4px\",\n background: \"rgba(120, 180, 255, 0.85)\",\n boxShadow: \"0 0 6px rgba(120, 180, 255, 0.75)\",\n flex: \"0 0 auto\",\n })\n root.appendChild(highlightDot)\n\n const inspectBtn = document.createElement(\"button\")\n inspectBtn.type = \"button\"\n inspectBtn.setAttribute(\"data-uidex-menubar-inspect\", \"\")\n inspectBtn.textContent = \"Inspect\"\n Object.assign(inspectBtn.style, buttonStyle)\n inspectBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n session.send({ type: \"TOGGLE_INSPECTOR\" })\n })\n root.appendChild(inspectBtn)\n\n const paletteBtn = document.createElement(\"button\")\n paletteBtn.type = \"button\"\n paletteBtn.setAttribute(\"data-uidex-menubar-palette\", \"\")\n paletteBtn.textContent = \"⌘K\"\n Object.assign(paletteBtn.style, buttonStyle)\n paletteBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n if (session.getState().stack.length > 0) {\n session.send({ type: \"CLOSE\" })\n } else {\n session.send({ type: \"OPEN_PALETTE\" })\n }\n })\n root.appendChild(paletteBtn)\n container.appendChild(root)\n\n const syncButtonStates = (): void => {\n const state = session.getState()\n inspectBtn.setAttribute(\n \"data-uidex-menubar-inspect-active\",\n state.inspectorActive ? \"true\" : \"false\"\n )\n Object.assign(\n inspectBtn.style,\n state.inspectorActive ? buttonActiveStyle : buttonStyle\n )\n const top = state.stack[state.stack.length - 1] ?? null\n const paletteOpen = top?.id === \"command-palette\"\n paletteBtn.setAttribute(\n \"data-uidex-menubar-palette-active\",\n paletteOpen ? \"true\" : \"false\"\n )\n Object.assign(\n paletteBtn.style,\n paletteOpen ? buttonActiveStyle : buttonStyle\n )\n const highlightActive = state.pinnedHighlight !== null\n highlightDot.setAttribute(\n \"data-uidex-menubar-highlight-active\",\n highlightActive ? \"true\" : \"false\"\n )\n highlightDot.style.display = highlightActive ? \"inline-block\" : \"none\"\n }\n syncButtonStates()\n const unsubscribeSession = session.subscribe(syncButtonStates)\n\n let corner: Corner = initialCorner\n const applyCorner = (): void => {\n const offset = \"16px\"\n root.style.top = corner.startsWith(\"top\") ? offset : \"\"\n root.style.bottom = corner.startsWith(\"bottom\") ? offset : \"\"\n root.style.left = corner.endsWith(\"left\") ? offset : \"\"\n root.style.right = corner.endsWith(\"right\") ? offset : \"\"\n root.setAttribute(\"data-uidex-menubar-corner\", corner)\n }\n applyCorner()\n\n let dragging = false\n let startX = 0\n let startY = 0\n let originLeft = 0\n let originTop = 0\n\n const onMouseMove = (e: MouseEvent): void => {\n if (!dragging) return\n root.style.left = `${originLeft + e.clientX - startX}px`\n root.style.top = `${originTop + e.clientY - startY}px`\n }\n\n const onMouseUp = (e: MouseEvent): void => {\n if (!dragging) return\n dragging = false\n root.style.cursor = \"grab\"\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"mouseup\", onMouseUp)\n snapToNearest(e.clientX, e.clientY)\n }\n\n const onMouseDown = (e: MouseEvent): void => {\n if (e.target instanceof HTMLElement && e.target.closest(\"button\")) return\n const rect = root.getBoundingClientRect()\n dragging = true\n originLeft = rect.left\n originTop = rect.top\n startX = e.clientX\n startY = e.clientY\n root.style.cursor = \"grabbing\"\n Object.assign(root.style, {\n top: `${originTop}px`,\n left: `${originLeft}px`,\n bottom: \"\",\n right: \"\",\n })\n document.addEventListener(\"mousemove\", onMouseMove)\n document.addEventListener(\"mouseup\", onMouseUp)\n e.preventDefault()\n }\n root.addEventListener(\"mousedown\", onMouseDown)\n\n function snapTo(next: Corner): void {\n corner = next\n applyCorner()\n }\n\n function snapToNearest(x: number, y: number): void {\n const horizontal = x / (window.innerWidth || 1) < 0.5 ? \"left\" : \"right\"\n const vertical = y / (window.innerHeight || 1) < 0.5 ? \"top\" : \"bottom\"\n snapTo(`${vertical}-${horizontal}` as Corner)\n }\n\n return {\n destroy() {\n unsubscribeSession()\n root.removeEventListener(\"mousedown\", onMouseDown)\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"mouseup\", onMouseUp)\n root.remove()\n },\n snapTo,\n snapToNearest,\n get corner() {\n return corner\n },\n get root() {\n return root\n },\n }\n}\n","import { Z_OVERLAY } from \"./constants\"\n\nexport interface OverlayShowOptions {\n label?: string\n color?: string\n padding?: number\n borderStyle?: string\n borderWidth?: number\n fillOpacity?: number\n}\n\nexport interface Overlay {\n show(target: Element, options?: OverlayShowOptions): void\n hide(): void\n destroy(): void\n readonly isVisible: boolean\n}\n\ninterface OverlayDeps {\n container: Element\n}\n\nconst DEFAULT_COLOR = \"#34d399\"\nconst DEFAULT_BORDER_WIDTH = 2\nconst DEFAULT_FILL_OPACITY = 0.08\n\nexport function createOverlay(deps: OverlayDeps): Overlay {\n const { container } = deps\n\n const box = document.createElement(\"div\")\n box.setAttribute(\"data-uidex-overlay\", \"\")\n box.style.position = \"fixed\"\n box.style.pointerEvents = \"none\"\n box.style.zIndex = String(Z_OVERLAY)\n box.style.boxSizing = \"border-box\"\n box.style.display = \"none\"\n\n const label = document.createElement(\"div\")\n label.setAttribute(\"data-uidex-overlay-label\", \"\")\n label.style.position = \"absolute\"\n label.style.left = \"0\"\n label.style.bottom = \"100%\"\n label.style.padding = \"2px 6px\"\n label.style.fontSize = \"11px\"\n label.style.fontFamily = \"ui-sans-serif, system-ui, sans-serif\"\n label.style.lineHeight = \"1\"\n label.style.whiteSpace = \"nowrap\"\n label.style.color = \"#0a0a0a\"\n label.style.display = \"none\"\n\n box.appendChild(label)\n container.appendChild(box)\n\n let target: Element | null = null\n let opts: Required<OverlayShowOptions> = {\n label: \"\",\n color: DEFAULT_COLOR,\n padding: 0,\n borderStyle: \"solid\",\n borderWidth: DEFAULT_BORDER_WIDTH,\n fillOpacity: DEFAULT_FILL_OPACITY,\n }\n\n let rafId: number | null = null\n let attached = false\n\n const schedule = (): void => {\n if (rafId !== null) return\n rafId =\n typeof requestAnimationFrame === \"function\"\n ? requestAnimationFrame(() => {\n rafId = null\n updatePosition()\n })\n : (setTimeout(() => {\n rafId = null\n updatePosition()\n }, 0) as unknown as number)\n }\n\n const cancelSchedule = (): void => {\n if (rafId === null) return\n if (typeof cancelAnimationFrame === \"function\") cancelAnimationFrame(rafId)\n else clearTimeout(rafId as unknown as ReturnType<typeof setTimeout>)\n rafId = null\n }\n\n const onScroll = (): void => schedule()\n const onResize = (): void => schedule()\n\n const attach = (): void => {\n if (attached) return\n attached = true\n window.addEventListener(\"resize\", onResize)\n window.addEventListener(\"scroll\", onScroll, {\n capture: true,\n passive: true,\n })\n }\n\n const detach = (): void => {\n if (!attached) return\n attached = false\n window.removeEventListener(\"resize\", onResize)\n window.removeEventListener(\"scroll\", onScroll, {\n capture: true,\n } as EventListenerOptions)\n cancelSchedule()\n }\n\n function updatePosition(): void {\n if (!target) return\n const rect = target.getBoundingClientRect()\n const pad = opts.padding\n box.style.top = `${rect.top - pad}px`\n box.style.left = `${rect.left - pad}px`\n box.style.width = `${rect.width + pad * 2}px`\n box.style.height = `${rect.height + pad * 2}px`\n }\n\n function applyStyles(): void {\n box.style.borderColor = opts.color\n box.style.borderStyle = opts.borderStyle\n box.style.borderWidth = `${opts.borderWidth}px`\n box.style.backgroundColor = rgbaFromColor(opts.color, opts.fillOpacity)\n if (opts.label) {\n label.textContent = opts.label\n label.style.backgroundColor = opts.color\n label.style.display = \"\"\n } else {\n label.textContent = \"\"\n label.style.display = \"none\"\n }\n }\n\n return {\n show(nextTarget, showOpts) {\n target = nextTarget\n opts = {\n label: showOpts?.label ?? \"\",\n color: showOpts?.color ?? DEFAULT_COLOR,\n padding: showOpts?.padding ?? 0,\n borderStyle: showOpts?.borderStyle ?? \"solid\",\n borderWidth: showOpts?.borderWidth ?? DEFAULT_BORDER_WIDTH,\n fillOpacity: showOpts?.fillOpacity ?? DEFAULT_FILL_OPACITY,\n }\n applyStyles()\n updatePosition()\n box.style.display = \"\"\n attach()\n },\n hide() {\n target = null\n box.style.display = \"none\"\n detach()\n },\n destroy() {\n detach()\n box.remove()\n target = null\n },\n get isVisible() {\n return target !== null\n },\n }\n}\n\nfunction rgbaFromColor(color: string, alpha: number): string {\n if (color.startsWith(\"#\")) {\n const hex = color.slice(1)\n const bigint = parseInt(\n hex.length === 3\n ? hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : hex,\n 16\n )\n const r = (bigint >> 16) & 255\n const g = (bigint >> 8) & 255\n const b = bigint & 255\n return `rgba(${r}, ${g}, ${b}, ${alpha})`\n }\n return color\n}\n","import type { ResolvedTheme, SessionStore, ThemePreference } from \"../session\"\n\nexport interface ThemeDetector {\n destroy(): void\n /** Resolve the current theme preference against the environment. */\n readonly resolved: ResolvedTheme\n}\n\nexport interface ThemeDetectorDeps {\n session: SessionStore\n onResolve?: (theme: ResolvedTheme) => void\n}\n\ntype HtmlClassToken = \"dark\" | \"light\"\n\nexport function createThemeDetector(deps: ThemeDetectorDeps): ThemeDetector {\n const { session, onResolve } = deps\n\n let resolved: ResolvedTheme = session.getState().resolvedTheme\n\n const detect = (preference: ThemePreference): ResolvedTheme => {\n if (preference !== \"auto\") return preference\n const htmlToken = readHtmlClassToken()\n if (htmlToken) return htmlToken\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\"\n ) {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\"\n }\n return \"light\"\n }\n\n const push = (): void => {\n const preference = session.getState().theme\n const next = detect(preference)\n if (next === resolved) return\n resolved = next\n session.getState().actions.setTheme(preference, next)\n onResolve?.(next)\n }\n\n push()\n\n let mql: MediaQueryList | null = null\n const mqlListener = (): void => push()\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\"\n ) {\n mql = window.matchMedia(\"(prefers-color-scheme: dark)\")\n if (typeof mql.addEventListener === \"function\") {\n mql.addEventListener(\"change\", mqlListener)\n } else if (typeof mql.addListener === \"function\") {\n // Safari < 14\n mql.addListener(mqlListener)\n }\n }\n\n let observer: MutationObserver | null = null\n if (\n typeof MutationObserver !== \"undefined\" &&\n typeof document !== \"undefined\"\n ) {\n observer = new MutationObserver(() => push())\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"class\"],\n })\n }\n\n const unsubscribe = session.subscribe((state, prev) => {\n if (state.theme !== prev.theme) push()\n })\n\n return {\n destroy() {\n unsubscribe()\n if (mql) {\n if (typeof mql.removeEventListener === \"function\") {\n mql.removeEventListener(\"change\", mqlListener)\n } else if (typeof mql.removeListener === \"function\") {\n mql.removeListener(mqlListener)\n }\n }\n observer?.disconnect()\n },\n get resolved() {\n return resolved\n },\n }\n}\n\nfunction readHtmlClassToken(): HtmlClassToken | null {\n if (typeof document === \"undefined\") return null\n const root = document.documentElement\n if (!root) return null\n if (root.classList.contains(\"dark\")) return \"dark\"\n if (root.classList.contains(\"light\")) return \"light\"\n return null\n}\n","import { KIND_STYLE, type Registry } from \"../entities\"\nimport { createCleanupStack, type CleanupStack } from \"../internal/cleanup\"\nimport type { SessionStore } from \"../session\"\nimport { createCursorTooltip, type CursorTooltip } from \"./cursor-tooltip\"\nimport { createSurfaceHost, type SurfaceHost } from \"./host\"\nimport {\n createInspector,\n type Inspector,\n type InspectorOptions,\n} from \"./inspector\"\nimport { createMenuBar, type Corner, type MenuBar } from \"./menu-bar\"\nimport { createOverlay, type Overlay } from \"./overlay\"\nimport { createThemeDetector, type ThemeDetector } from \"./theme\"\n\nexport interface CreateSurfaceShellOptions {\n mount: Element\n registry: Registry\n session: SessionStore\n stylesheets?: string[]\n initialCorner?: Corner\n appTitle?: string\n /**\n * Additional inspector wiring. Hover is pre-wired to overlay + tooltip; pass\n * `onSelect` (and `onAfterHover`) to extend behaviour without rebuilding the\n * host.\n */\n inspector?: Pick<InspectorOptions, \"onSelect\"> & {\n onAfterHover?: InspectorOptions[\"onHover\"]\n }\n}\n\nexport interface SurfaceShell {\n host: SurfaceHost\n overlay: Overlay\n tooltip: CursorTooltip\n inspector: Inspector\n menuBar: MenuBar\n themeDetector: ThemeDetector\n cleanup: CleanupStack\n destroy(): void\n}\n\n/**\n * Builds the chrome bundle shared by `createUidex` and `createHeadless`:\n * host + theme detector + overlay + cursor tooltip + inspector + menu bar.\n * Returns a cleanup stack so callers can register their own teardown in LIFO\n * order, then call `destroy()` once to drain the whole thing.\n */\nexport function createSurfaceShell(\n options: CreateSurfaceShellOptions\n): SurfaceShell {\n const cleanup = createCleanupStack()\n\n const host = createSurfaceHost({\n mount: options.mount,\n stylesheets: options.stylesheets,\n initialTheme: options.session.getState().resolvedTheme,\n })\n cleanup.add(host)\n\n const themeDetector = createThemeDetector({\n session: options.session,\n onResolve: (theme) => host.applyTheme(theme),\n })\n cleanup.add(themeDetector)\n\n const overlay = createOverlay({ container: host.chromeEl })\n cleanup.add(overlay)\n\n const tooltip = createCursorTooltip({\n container: host.chromeEl,\n session: options.session,\n })\n cleanup.add(tooltip)\n\n const afterHover = options.inspector?.onAfterHover\n const inspector = createInspector({\n session: options.session,\n registry: options.registry,\n onSelect: options.inspector?.onSelect,\n onHover: (match, cursor) => {\n if (!match) {\n overlay.hide()\n tooltip.update(null, cursor)\n } else {\n overlay.show(match.element, {\n color: KIND_STYLE[match.ref.kind].color,\n })\n tooltip.update({ entity: match.entity, node: match.element }, cursor)\n }\n afterHover?.(match, cursor)\n },\n })\n cleanup.add(inspector)\n\n const menuBar = createMenuBar({\n container: host.chromeEl,\n session: options.session,\n initialCorner: options.initialCorner,\n appTitle: options.appTitle,\n })\n cleanup.add(menuBar)\n\n return {\n host,\n overlay,\n tooltip,\n inspector,\n menuBar,\n themeDetector,\n cleanup,\n destroy: cleanup.drain,\n }\n}\n","import type { SurfaceEvent } from \"../flows/surface\"\nimport type { SessionStore } from \"../session\"\nimport type { ActionsPopupHandle } from \"../views/core/actions-popup\"\n\nexport interface BindShadowKeysOptions {\n shadowRoot: ShadowRoot\n session: SessionStore\n getActionsPopup: () => ActionsPopupHandle | null\n}\n\nexport function bindShadowKeys(options: BindShadowKeysOptions): () => void {\n const { shadowRoot, session, getActionsPopup } = options\n const send = (event: SurfaceEvent): void => session.send(event)\n\n const onKeydown = (e: KeyboardEvent): void => {\n const isMod = e.metaKey || e.ctrlKey\n const isCmdK = isMod && !e.altKey && !e.shiftKey && e.key === \"k\"\n const isCmdBracket = isMod && !e.altKey && !e.shiftKey && e.key === \"[\"\n const isEsc = e.key === \"Escape\"\n const isPopKey = isEsc || isCmdBracket\n if (!isCmdK && !isPopKey) return\n\n const popup = getActionsPopup()\n if (popup?.isOpen()) {\n if (popup.handleKey(e)) {\n e.preventDefault()\n e.stopPropagation()\n return\n }\n if (isPopKey || isCmdK) {\n popup.close()\n e.preventDefault()\n e.stopPropagation()\n }\n return\n }\n\n if (isCmdK) {\n const state = session.getState()\n e.preventDefault()\n e.stopPropagation()\n send(\n state.stack.length === 0 ? { type: \"OPEN_PALETTE\" } : { type: \"CMD_K\" }\n )\n return\n }\n\n const state = session.getState()\n const hasWork =\n state.stack.length > 0 ||\n state.pinnedHighlight !== null ||\n state.inspectorActive\n if (!hasWork) return\n e.preventDefault()\n e.stopPropagation()\n send({ type: \"ESC\" })\n }\n\n shadowRoot.addEventListener(\"keydown\", onKeydown as EventListener, {\n capture: true,\n })\n return () => {\n shadowRoot.removeEventListener(\n \"keydown\",\n onKeydown as EventListener,\n {\n capture: true,\n } as EventListenerOptions\n )\n }\n}\n","export function detectDev(): boolean {\n try {\n if (\n typeof process !== \"undefined\" &&\n typeof process.env?.NODE_ENV === \"string\"\n ) {\n return process.env.NODE_ENV !== \"production\"\n }\n } catch {\n /* ignore */\n }\n return true\n}\n","import type {\n CloudAdapter,\n ConsoleLogEntry,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigEpic,\n NetworkErrorEntry,\n SourceRef,\n Viewport,\n} from \"../../ingest/feedback-contract\"\nimport type { EntityKind, EntityRef, Registry } from \"../../entities\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport type { OverlayShowOptions } from \"../../surface/overlay\"\nimport type { ViewSurface } from \"./surface\"\n\nexport type {\n CloudAdapter,\n ConsoleLogEntry,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigEpic,\n NetworkErrorEntry,\n SourceRef,\n Viewport,\n}\n\nexport interface ViewPalette {\n label: string\n group?: string\n /**\n * Leading-icon factory rendered as a rounded-square tile on the palette\n * row. Called fresh per render (so a returned SVG isn't reparented).\n */\n icon?: () => Node\n shortcut?: string\n}\n\nexport interface ViewDirectory {\n list(): readonly View[]\n}\n\nexport interface ViewPushTarget {\n id: string\n ref?: EntityRef | null\n}\n\nexport interface HighlightController {\n show(ref: EntityRef, opts?: OverlayShowOptions): void\n hide(): void\n}\n\nexport interface ViewContext {\n ref: EntityRef | null\n registry: Registry\n cloud: CloudAdapter<unknown, unknown, unknown> | null\n sdkCloud: CloudAdapter\n views: ViewDirectory\n /** Push a view onto the stack. Unregistered ids are a no-op. */\n push: (target: ViewPushTarget) => void\n /** Pop the top view off the stack. No-op when the stack is empty. */\n pop: () => void\n /** Clear the entire view stack. */\n close: () => void\n /** Resolve the first view matching `ref` and push it onto the stack. */\n navigate: (ref: EntityRef) => void\n /** Pin the overlay to `ref` until the user presses Esc. */\n pinHighlight: (ref: EntityRef) => void\n /** Shell-owned search input. The shell dispatches its value into the active surface. */\n searchInput: HTMLInputElement\n /** Drives the Surface's singleton overlay from inside a custom surface. */\n highlight: HighlightController\n /** Snapshot of the current view stack (top-most last). */\n getStack: () => readonly ViewStackEntry[]\n}\n\nexport interface ShellHint {\n key: string\n label: string\n}\n\nexport type ShellActionIntent =\n | { kind: \"push\"; viewId: string; refKind?: EntityKind }\n | { kind: \"pop\" }\n | { kind: \"close\" }\n | { kind: \"navigate\"; refKind?: EntityKind }\n | { kind: \"external\"; describe: string }\n\nexport interface ShellAction {\n id: string\n label: string\n shortcut?: string\n perform: () => void | Promise<void>\n intent?: ShellActionIntent\n}\n\nexport type Cleanup = () => void\n\nexport interface View {\n id: string\n matches?: (ref: EntityRef) => boolean\n palette?: ViewPalette\n title?: string | ((ctx: ViewContext) => string)\n /** Show the shell search input when this view is on top. Default: true. */\n searchable?: boolean\n hints?: ShellHint[] | ((ctx: ViewContext) => ShellHint[])\n actions?: (ctx: ViewContext) => ShellAction[]\n /**\n * Element focused when this view becomes the top of the stack. The shell\n * falls back to the first focusable element in the host when omitted, or\n * when the declared target has been removed from the host.\n */\n focusTarget?: (root: HTMLElement, ctx: ViewContext) => HTMLElement | null\n surface: (ctx: ViewContext) => ViewSurface\n}\n\nexport class ViewValidationError extends Error {\n constructor(message: string) {\n super(message)\n this.name = \"ViewValidationError\"\n }\n}\n","import type { EntityRef } from \"../../entities\"\nimport { detectDev } from \"../../internal/dev\"\nimport type { SessionStore } from \"../../session\"\nimport { ViewValidationError, type View } from \"./types\"\n\nexport interface ViewRegistrar {\n register(view: View): void\n unregister(id: string): void\n list(): readonly View[]\n get(id: string): View | undefined\n findMatch(ref: EntityRef): View | null\n navigate(ref: EntityRef): void\n}\n\nexport interface ViewRegistrarOptions {\n session: SessionStore\n dev?: boolean\n}\n\nexport function createViewRegistrar(\n options: ViewRegistrarOptions\n): ViewRegistrar {\n const views: View[] = []\n const dev = options.dev ?? detectDev()\n\n function validate(view: View): void {\n if (\n view === null ||\n typeof view !== \"object\" ||\n typeof view.id !== \"string\" ||\n view.id.length === 0\n ) {\n throw new ViewValidationError(\"View must have a non-empty string id\")\n }\n if (typeof view.surface !== \"function\") {\n throw new ViewValidationError(\n `View ${view.id}: 'surface' must be a function`\n )\n }\n if (!view.matches && !view.palette) {\n throw new ViewValidationError(\n `View ${view.id}: at least one of 'matches' or 'palette' is required`\n )\n }\n }\n\n function warnOverlaps(incoming: View): void {\n if (!dev || !incoming.matches) return\n const selection = options.session.getState().selection\n if (!selection) return\n if (!incoming.matches(selection)) return\n for (const existing of views) {\n if (existing.id === incoming.id) continue\n if (!existing.matches) continue\n if (existing.matches(selection)) {\n console.warn(\n `[uidex] View \"${incoming.id}\" matches ref ${selection.kind}:${selection.id} ` +\n `also handled by view \"${existing.id}\"; last-registered wins.`\n )\n }\n }\n }\n\n function register(view: View): void {\n validate(view)\n warnOverlaps(view)\n const existingIdx = views.findIndex((p) => p.id === view.id)\n if (existingIdx >= 0) views.splice(existingIdx, 1)\n views.push(view)\n }\n\n function unregister(id: string): void {\n const idx = views.findIndex((p) => p.id === id)\n if (idx < 0) return\n views.splice(idx, 1)\n const state = options.session.getState()\n const top = state.stack[state.stack.length - 1] ?? null\n if (top?.id === id) state.actions.closeView()\n }\n\n function list(): readonly View[] {\n return views.slice()\n }\n\n function get(id: string): View | undefined {\n return views.find((p) => p.id === id)\n }\n\n function findMatch(ref: EntityRef): View | null {\n for (let i = views.length - 1; i >= 0; i--) {\n const view = views[i]\n if (view.matches && view.matches(ref)) return view\n }\n return null\n }\n\n function navigate(ref: EntityRef): void {\n const match = findMatch(ref)\n if (!match) return\n const state = options.session.getState()\n state.actions.select(ref)\n state.actions.pushStack({ id: match.id, ref })\n }\n\n return { register, unregister, list, get, findMatch, navigate }\n}\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","import type { ClassValue } from \"clsx\"\nimport { cn } from \"./cn\"\n\ntype Attrs = Record<\n string,\n string | number | boolean | null | undefined | Record<string, string | number>\n>\n\nexport interface ElementOptions {\n class?: ClassValue\n attrs?: Attrs\n text?: string\n html?: never\n dataset?: Record<string, string>\n style?: Partial<CSSStyleDeclaration>\n}\n\nexport type Child = Node | string | null | undefined | false\n\nexport function el<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n options: ElementOptions = {},\n children: Child | Child[] = []\n): HTMLElementTagNameMap[K] {\n const node = document.createElement(tag)\n if (options.class) node.className = cn(options.class)\n if (options.attrs) {\n for (const [key, value] of Object.entries(options.attrs)) {\n if (value === undefined || value === null || value === false) continue\n if (value === true) {\n node.setAttribute(key, \"\")\n } else {\n node.setAttribute(key, String(value))\n }\n }\n }\n if (options.dataset) {\n for (const [key, value] of Object.entries(options.dataset)) {\n node.dataset[key] = value\n }\n }\n if (options.style) {\n Object.assign(node.style, options.style)\n }\n if (options.text !== undefined) {\n node.textContent = options.text\n }\n const list = Array.isArray(children) ? children : [children]\n for (const child of list) {\n if (child === null || child === undefined || child === false) continue\n node.append(\n typeof child === \"string\" ? document.createTextNode(child) : child\n )\n }\n return node\n}\n","import type { ClassValue } from \"clsx\"\n\ntype VariantSet = Record<string, Record<string, ClassValue>>\n\ntype VariantValues<V extends VariantSet> = {\n [K in keyof V]?: keyof V[K]\n}\n\nexport interface CvaConfig<V extends VariantSet> {\n variants?: V\n defaultVariants?: VariantValues<V>\n}\n\nexport function cva<V extends VariantSet>(\n base: ClassValue,\n config: CvaConfig<V> = {}\n) {\n return (props: VariantValues<V> = {}): ClassValue[] => {\n const out: ClassValue[] = [base]\n const variants = config.variants\n if (!variants) return out\n for (const key of Object.keys(variants) as Array<keyof V>) {\n const picked =\n (props[key] as string | undefined) ??\n (config.defaultVariants?.[key] as string | undefined)\n if (picked === undefined) continue\n const cls = variants[key][picked as string]\n if (cls) out.push(cls)\n }\n return out\n }\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\nimport { cva } from \"./cva\"\n\nexport type BadgeVariant =\n | \"default\"\n | \"destructive\"\n | \"error\"\n | \"info\"\n | \"outline\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n\nexport type BadgeSize = \"default\" | \"sm\" | \"lg\"\n\nconst badgeBase =\n \"relative inline-flex shrink-0 items-center justify-center gap-1 whitespace-nowrap rounded-sm border border-transparent font-medium outline-none transition-shadow [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-3 [&_svg]:pointer-events-none [&_svg]:shrink-0\"\n\nexport const badgeVariants = cva(badgeBase, {\n defaultVariants: { size: \"default\", variant: \"default\" },\n variants: {\n size: {\n default: \"h-4.5 min-w-4.5 px-1 text-xs\",\n lg: \"h-5.5 min-w-5.5 px-1.5 text-sm\",\n sm: \"h-4 min-w-4 rounded-[0.25rem] px-1 text-[0.625rem]\",\n },\n variant: {\n default: \"bg-primary text-primary-foreground\",\n destructive: \"bg-destructive text-white\",\n error:\n \"bg-destructive/10 text-destructive-foreground dark:bg-destructive/20\",\n info: \"bg-info/10 text-info-foreground dark:bg-info/20\",\n outline: \"border-input bg-background text-foreground dark:bg-input/30\",\n secondary: \"bg-secondary text-secondary-foreground\",\n success: \"bg-success/10 text-success-foreground dark:bg-success/20\",\n warning: \"bg-warning/10 text-warning-foreground dark:bg-warning/20\",\n },\n },\n})\n\nexport interface CreateBadgeOptions extends Omit<ElementOptions, \"class\"> {\n variant?: BadgeVariant\n size?: BadgeSize\n class?: ClassValue\n}\n\nexport function createBadge(\n options: CreateBadgeOptions = {},\n children: Child | Child[] = []\n): HTMLSpanElement {\n const { variant, size, class: extra, attrs, ...rest } = options\n return el(\n \"span\",\n {\n ...rest,\n class: cn(badgeVariants({ variant, size }), extra),\n attrs: { \"data-slot\": \"badge\", ...attrs },\n },\n children\n )\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../../internal/el\"\nimport { createBadge } from \"../../ui/badge\"\n\nexport interface ChipOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nconst CHIP_CLASS =\n \"inline-flex items-center gap-1.5 text-xs font-medium text-muted-foreground\"\n\nexport function createChip(\n options: ChipOptions = {},\n children: Child | Child[] = []\n): HTMLSpanElement {\n const { class: extra, ...rest } = options\n return el(\"span\", { ...rest, class: cn(CHIP_CLASS, extra) }, children)\n}\n\nexport function createPillItem(options: ChipOptions = {}): HTMLLIElement {\n const { class: extra, text, attrs, ...rest } = options\n const li = el(\"li\", { ...rest, class: \"list-none\", attrs })\n const badge = createBadge(\n { variant: \"secondary\", size: \"default\", class: extra, text },\n []\n )\n li.append(badge)\n return li\n}\n","import { createElement as createLucideElement } from \"lucide\"\nimport { KIND_STYLE, type EntityKind } from \"../../entities\"\nimport { cn } from \"../../internal/cn\"\nimport { createBadge } from \"../../ui/badge\"\nimport { createIconTile } from \"./icon-tile\"\n\nexport function renderKindIcon(kind: EntityKind): SVGElement {\n const style = KIND_STYLE[kind]\n const svg = createLucideElement(style.icon)\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"class\", cn(\"h-4 w-4 shrink-0\", style.tone))\n return svg\n}\n\n/** Tile-wrapped kind icon for use as the leading slot on list/detail rows. */\nexport function renderKindIconTile(kind: EntityKind): HTMLElement {\n const style = KIND_STYLE[kind]\n return createIconTile(renderKindIcon(kind), { toneClass: style.chip })\n}\n\n/** Inline badge with the kind icon + label, built on the coss `createBadge`. */\nexport function renderKindBadge(kind: EntityKind): HTMLElement {\n const style = KIND_STYLE[kind]\n const icon = createLucideElement(style.icon)\n icon.setAttribute(\"aria-hidden\", \"true\")\n return createBadge(\n {\n class: style.chip,\n attrs: { \"data-uidex-kind-badge\": kind },\n },\n [icon, style.label]\n )\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\n\nconst TILE_CLASS =\n \"inline-flex size-6 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground\"\n\nconst ICON_SIZE_CLASS_RE = /\\b(h-\\d+|w-\\d+|size-\\d+)\\b/g\n\nexport interface IconTileOptions {\n extraClass?: ClassValue\n /** Tailwind color classes (bg/text/hover/dark) replacing the muted default. */\n toneClass?: ClassValue\n /** CSS color applied as a tinted background (supports hex/rgb/var). */\n tint?: string\n /** 0–100, default 15 — enough to read the hue without fighting contrast. */\n tintAlpha?: number\n}\n\nexport function createIconTile(\n inner: Node,\n options: IconTileOptions = {}\n): HTMLElement {\n if (inner instanceof SVGElement) {\n const existing = inner.getAttribute(\"class\") ?? \"\"\n const stripped = existing.replace(ICON_SIZE_CLASS_RE, \"\").trim()\n inner.setAttribute(\"class\", cn(stripped, \"size-3.5 opacity-80\"))\n }\n\n const tile = el(\n \"span\",\n {\n class: cn(TILE_CLASS, options.toneClass, options.extraClass),\n attrs: { \"data-slot\": \"icon-tile\", \"aria-hidden\": \"true\" },\n },\n [inner]\n )\n\n if (options.tint && !options.toneClass) {\n const pct = options.tintAlpha ?? 15\n tile.style.backgroundColor = `color-mix(in srgb, ${options.tint} ${pct}%, transparent)`\n }\n return tile\n}\n","import { displayName, KIND_STYLE, type Entity } from \"../../entities\"\nimport { el } from \"../../internal/el\"\nimport { createChip } from \"./chip\"\nimport { renderKindIcon } from \"./kind-icon\"\n\nexport interface KindChipOptions {\n entity: Entity\n label?: string\n withKindName?: boolean\n node?: Element | null\n}\n\nexport function renderKindChip(options: KindChipOptions): HTMLElement {\n const { entity, label, withKindName, node } = options\n const kind = entity.kind\n const style = KIND_STYLE[kind]\n const chip = createChip({ attrs: { \"data-uidex-kind-chip\": kind } })\n chip.append(renderKindIcon(kind))\n const resolved = label ?? displayName(entity, node)\n const text = withKindName\n ? resolved\n ? `${style.label} · ${resolved}`\n : style.label\n : resolved\n if (text) {\n chip.append(\n el(\"span\", {\n class: \"truncate\",\n text,\n })\n )\n }\n return chip\n}\n","import * as scrollArea from \"@zag-js/scroll-area\"\nimport { createMachineHandle, type MachineHandle } from \"./machine\"\nimport { normalizeProps, type DomProps } from \"./normalize\"\n\nexport type ScrollAreaProps = scrollArea.Props\nexport type ScrollAreaApi = scrollArea.Api<DomProps>\nexport type ScrollAreaHandle = MachineHandle<ScrollAreaApi>\n\nexport function createScrollArea(\n props: Partial<ScrollAreaProps> = {}\n): ScrollAreaHandle {\n return createMachineHandle(\n scrollArea.machine,\n scrollArea.connect,\n normalizeProps,\n props\n )\n}\n\nexport { scrollArea }\n","import {\n createScope,\n findTransition,\n getExitEnterStates,\n hasTag as hasTagFn,\n INIT_STATE,\n MachineStatus,\n matchesState,\n resolveStateValue,\n type Machine,\n type MachineSchema,\n type Service,\n} from \"@zag-js/core\"\nimport {\n compact,\n ensure,\n isFunction,\n isString,\n toArray,\n warn,\n} from \"@zag-js/utils\"\n\ntype AnyFn = (...args: unknown[]) => unknown\n\ninterface BindableOptions<V> {\n value?: V\n defaultValue?: V\n isEqual?: (a: V, b: V) => boolean\n onChange?: (next: V, prev: V) => void\n sync?: boolean\n debug?: string\n hash?: (value: V) => string\n}\n\ninterface Bindable<V> {\n initial: V\n ref: { current: V }\n get(): V\n set(value: V | ((prev: V) => V)): void\n invoke(next: V, prev: V): void\n hash(value: V): string\n}\n\ninterface BindableFactory {\n <V>(propsFn: () => BindableOptions<V>): Bindable<V>\n cleanup: (fn: () => void) => void\n ref: <V>(defaultValue: V) => { get: () => V; set: (next: V) => void }\n}\n\nfunction createBindable<V>(propsFn: () => BindableOptions<V>): Bindable<V> {\n const initial = (propsFn().value ?? propsFn().defaultValue) as V\n let local = initial\n const ref = { current: initial as V }\n const eq = () => propsFn().isEqual ?? Object.is\n\n const getControlled = () => propsFn().value !== undefined\n\n const setFn = (value: V | ((prev: V) => V)) => {\n const prev = ref.current\n const next = (isFunction(value) ? (value as (p: V) => V)(prev) : value) as V\n if (propsFn().debug) {\n console.log(`[bindable > ${propsFn().debug}] setValue`, { next, prev })\n }\n if (!getControlled()) {\n local = next\n ref.current = next\n }\n if (!eq()(next, prev)) {\n propsFn().onChange?.(next, prev)\n }\n }\n\n const get = () => (getControlled() ? (propsFn().value as V) : local)\n\n // Keep ref in sync when controlled value changes on subsequent reads.\n const syncRef = () => {\n const v = get()\n if (!eq()(v, ref.current)) ref.current = v\n }\n\n return {\n initial,\n ref: new Proxy(ref, {\n get(target, key) {\n if (key === \"current\") {\n syncRef()\n return target.current\n }\n return Reflect.get(target, key)\n },\n }),\n get,\n set: setFn,\n invoke(next, prev) {\n propsFn().onChange?.(next, prev)\n },\n hash(value) {\n return propsFn().hash?.(value) ?? String(value)\n },\n }\n}\n\nexport interface MachineRunner<T extends MachineSchema> {\n service: Service<T>\n start(): void\n stop(): void\n subscribe(listener: () => void): () => void\n update(next: Partial<T[\"props\"]>): void\n}\n\nexport interface MachineHandle<Api> {\n runner: MachineRunner<MachineSchema>\n api: () => Api\n destroy: () => void\n}\n\nexport function createMachineHandle<Props, Api>(\n zagMachine: unknown,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n connect: (service: any, normalize: any) => Api,\n normalize: unknown,\n props: Partial<Props> = {} as Partial<Props>\n): MachineHandle<Api> {\n const runner = createMachineRunner(\n zagMachine as Machine<MachineSchema>,\n props as never\n )\n runner.start()\n return {\n runner,\n api: () => connect(runner.service as never, normalize),\n destroy: () => runner.stop(),\n }\n}\n\ntype AnyMachine = Machine<MachineSchema>\n\nexport function createMachineRunner<T extends MachineSchema>(\n machineArg: Machine<T>,\n initialProps: Partial<T[\"props\"]> = {} as Partial<T[\"props\"]>\n): MachineRunner<T> {\n const machine = machineArg as AnyMachine\n let userProps = initialProps\n const unmountFns: Array<() => void> = []\n const listeners = new Set<() => void>()\n const notify = () => listeners.forEach((fn) => fn())\n\n const bindableFactory: BindableFactory = ((propsFn) =>\n createBindable(propsFn)) as BindableFactory\n bindableFactory.cleanup = (fn) => unmountFns.push(fn)\n bindableFactory.ref = <V>(defaultValue: V) => {\n let value = defaultValue\n return {\n get: () => value,\n set: (next: V) => {\n value = next\n },\n }\n }\n\n const debug = (...args: unknown[]) => {\n if ((machine as { debug?: boolean }).debug) {\n console.log(...args)\n }\n }\n\n const propsRef = { current: {} as T[\"props\"] }\n const prop = (key: string) =>\n (propsRef.current as Record<string, unknown>)[key]\n\n const refreshProps = () => {\n const scope = scopeRef.current\n const computedProps =\n (machine as { props?: AnyFn }).props?.({\n props: compact(userProps) as Record<string, unknown>,\n scope,\n }) ?? userProps\n propsRef.current = computedProps as T[\"props\"]\n }\n\n const defaultGetRootNode = () =>\n typeof document !== \"undefined\" ? document : (null as never)\n\n const scopeRef = {\n current: createScope({\n id: (initialProps as { id?: string }).id,\n ids: (initialProps as { ids?: Record<string, string> }).ids,\n getRootNode:\n (\n initialProps as {\n getRootNode?: () => Node | ShadowRoot | Document\n }\n ).getRootNode ?? defaultGetRootNode,\n }),\n }\n refreshProps()\n\n const effectsMap = new Map<string, () => void>()\n let transitionRef: {\n actions?: unknown\n target?: string\n reenter?: boolean\n } | null = null\n let previousEvent: { type: string } = { type: \"\" }\n let currentEvent: { type: string } = { type: \"\" }\n\n const getEvent = () => ({\n ...currentEvent,\n current() {\n return currentEvent\n },\n previous() {\n return previousEvent\n },\n })\n\n const getState = () => ({\n ...state,\n matches(...values: string[]) {\n return values.some((v) => matchesState(state.ref.current as string, v))\n },\n hasTag(tag: string) {\n return hasTagFn(machine, state.ref.current as string, tag)\n },\n })\n\n const getParams = () => ({\n state: getState(),\n context: ctx,\n event: getEvent(),\n prop,\n send,\n action,\n guard,\n track: trackFn,\n refs,\n computed,\n flush,\n scope: scopeRef.current,\n choose,\n })\n\n const action = (keys: unknown) => {\n const strs = (isFunction(keys) ? (keys as AnyFn)(getParams()) : keys) as\n | string[]\n | undefined\n if (!strs) return\n const fns = strs.map((s) => {\n const fn = (\n machine as { implementations?: { actions?: Record<string, AnyFn> } }\n ).implementations?.actions?.[s]\n if (!fn) warn(`[uidex] No implementation found for action \"${s}\"`)\n return fn\n })\n for (const fn of fns) fn?.(getParams())\n }\n\n const guard = (str: unknown) => {\n if (isFunction(str)) return (str as AnyFn)(getParams())\n return (\n machine as { implementations?: { guards?: Record<string, AnyFn> } }\n ).implementations?.guards?.[str as string](getParams())\n }\n\n const effect = (keys: unknown) => {\n const strs = (isFunction(keys) ? (keys as AnyFn)(getParams()) : keys) as\n | string[]\n | undefined\n if (!strs) return\n const fns = strs.map((s) => {\n const fn = (\n machine as { implementations?: { effects?: Record<string, AnyFn> } }\n ).implementations?.effects?.[s]\n if (!fn) warn(`[uidex] No implementation found for effect \"${s}\"`)\n return fn\n })\n const localCleanups: Array<() => void> = []\n for (const fn of fns) {\n const cleanup = fn?.(getParams())\n if (typeof cleanup === \"function\") {\n localCleanups.push(cleanup as () => void)\n }\n }\n return () => localCleanups.forEach((fn) => fn())\n }\n\n const choose = (transitions: unknown) =>\n (toArray(transitions) as Array<{ guard?: unknown }>).find((t) => {\n let result = !t.guard\n if (isString(t.guard)) result = !!guard(t.guard)\n else if (isFunction(t.guard)) result = !!(t.guard as AnyFn)(getParams())\n return result\n })\n\n const computed = (key: string) => {\n ensure(\n (machine as { computed?: unknown }).computed,\n () => `[uidex] No computed object found on machine`\n )\n const fn = (machine as { computed: Record<string, AnyFn> }).computed[key]\n return fn({\n context: ctx,\n event: getEvent(),\n prop,\n refs,\n scope: scopeRef.current,\n computed,\n })\n }\n\n const trackSites = new WeakMap<\n AnyFn,\n { deps: unknown[]; cleanup?: () => void; mounted: boolean }\n >()\n const trackFn = (deps: unknown[] | undefined, fn: AnyFn) => {\n let site = trackSites.get(fn)\n const current = (deps ?? []).map((d) =>\n typeof d === \"function\" ? (d as AnyFn)() : d\n )\n if (!site) {\n site = { deps: current, mounted: false }\n trackSites.set(fn, site)\n return\n }\n const changed =\n current.length !== site.deps.length ||\n current.some((v, i) => !Object.is(v, site!.deps[i]))\n if (changed && site.mounted) {\n site.cleanup?.()\n const cleanup = fn()\n site.cleanup =\n typeof cleanup === \"function\" ? (cleanup as () => void) : undefined\n }\n site.deps = current\n }\n\n const flush = (fn: () => void) => {\n queueMicrotask(() => fn())\n }\n\n // context ------------------------------------------------------------\n let contextFields: Record<string, Bindable<unknown>> = {}\n const ctxContextFn = (machine as { context?: AnyFn }).context\n if (ctxContextFn) {\n contextFields = ctxContextFn({\n prop,\n bindable: bindableFactory,\n scope: scopeRef.current,\n flush,\n getContext() {\n return ctx\n },\n getComputed() {\n return computed\n },\n getRefs() {\n return refs\n },\n getEvent() {\n return getEvent()\n },\n }) as Record<string, Bindable<unknown>>\n }\n\n const ctx = {\n get(key: string) {\n return contextFields[key]?.ref.current\n },\n set(key: string, value: unknown) {\n contextFields[key]?.set(value as never)\n },\n initial(key: string) {\n return contextFields[key]?.initial\n },\n hash(key: string) {\n const current = contextFields[key]?.get()\n return contextFields[key]?.hash(current as never) ?? \"\"\n },\n }\n\n // refs ---------------------------------------------------------------\n const refsInit =\n (machine as { refs?: AnyFn }).refs?.({ prop, context: ctx }) ?? {}\n const refsStore: Record<string, unknown> = { ...(refsInit as object) }\n const refs = {\n get(key: string) {\n return refsStore[key]\n },\n set(key: string, value: unknown) {\n refsStore[key] = value\n },\n }\n\n // state bindable -----------------------------------------------------\n const initialState = resolveStateValue(\n machine,\n (machine as { initialState: AnyFn }).initialState({ prop }) as string\n )\n const state = createBindable<string>(() => ({\n defaultValue: initialState as string,\n onChange(nextState: string, prevState: string) {\n const { exiting, entering } = getExitEnterStates(\n machine,\n prevState,\n nextState,\n transitionRef?.reenter\n ) as {\n exiting: Array<{ path: string; state?: { exit?: unknown } }>\n entering: Array<{\n path: string\n state?: { effects?: unknown; entry?: unknown }\n }>\n }\n exiting.forEach((item) => {\n const exitEffects = effectsMap.get(item.path)\n exitEffects?.()\n effectsMap.delete(item.path)\n })\n exiting.forEach((item) => {\n action(item.state?.exit)\n })\n action(transitionRef?.actions)\n entering.forEach((item) => {\n const cleanup = effect(item.state?.effects)\n if (cleanup) effectsMap.set(item.path, cleanup)\n })\n if (prevState === INIT_STATE) {\n action((machine as { entry?: unknown }).entry)\n const cleanup = effect((machine as { effects?: unknown }).effects)\n if (cleanup) effectsMap.set(INIT_STATE, cleanup)\n }\n entering.forEach((item) => {\n action(item.state?.entry)\n })\n notify()\n },\n }))\n\n let status: MachineStatus = MachineStatus.NotStarted\n let hydrated: string | undefined\n\n const getCurrentState = (): string => state.ref.current\n\n const send = (event: { type: string }) => {\n queueMicrotask(() => {\n if (status !== MachineStatus.Started) return\n previousEvent = currentEvent\n currentEvent = event\n const currentState = getCurrentState()\n const { transitions, source } = findTransition(\n machine,\n currentState,\n event.type\n )\n const transition = choose(transitions) as\n | { actions?: unknown; target?: string; reenter?: boolean }\n | undefined\n if (!transition) return\n transitionRef = transition\n const target = resolveStateValue(\n machine,\n (transition.target ?? currentState) as string,\n source as never\n )\n debug(\"transition\", event.type, transition.target || currentState)\n const changed = target !== currentState\n if (changed) {\n state.set(target as string)\n } else if (transition.reenter) {\n ;(state as unknown as { invoke: AnyFn }).invoke(\n currentState,\n currentState\n )\n } else {\n action(transition.actions ?? [])\n notify()\n }\n })\n }\n\n ;(machine as { watch?: AnyFn }).watch?.(getParams())\n\n const service: Service<T> = {\n state: getState() as Service<T>[\"state\"],\n send,\n context: ctx as Service<T>[\"context\"],\n prop: prop as Service<T>[\"prop\"],\n scope: scopeRef.current,\n refs: refs as Service<T>[\"refs\"],\n computed: computed as Service<T>[\"computed\"],\n event: getEvent() as Service<T>[\"event\"],\n getStatus: () => status,\n }\n\n Object.defineProperty(service, \"state\", {\n get: () => getState(),\n enumerable: true,\n })\n Object.defineProperty(service, \"event\", {\n get: () => getEvent(),\n enumerable: true,\n })\n\n return {\n service,\n start() {\n if (status === MachineStatus.Started) return\n status = MachineStatus.Started\n ;(state as unknown as { invoke: AnyFn }).invoke(\n hydrated ?? state.initial,\n INIT_STATE\n )\n notify()\n },\n stop() {\n if (status === MachineStatus.Stopped) return\n hydrated = getCurrentState()\n status = MachineStatus.Stopped\n effectsMap.forEach((fn) => fn())\n effectsMap.clear()\n transitionRef = null\n while (unmountFns.length) unmountFns.pop()?.()\n listeners.clear()\n queueMicrotask(() => {\n action((machine as { exit?: unknown }).exit)\n })\n },\n subscribe(listener) {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n update(next) {\n userProps = { ...userProps, ...next }\n refreshProps()\n notify()\n },\n }\n}\n","import {\n createNormalizer,\n type NormalizeProps,\n type PropTypes,\n} from \"@zag-js/types\"\n\ntype DomProps = PropTypes<Record<string, unknown>>\n\nexport const normalizeProps: NormalizeProps<DomProps> =\n createNormalizer<DomProps>((props) => props)\n\nexport type { DomProps }\n","import { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\n\n// Zag connect() returns React-style prop objects; this bridges them to imperative DOM APIs.\nexport function spreadProps(\n node: HTMLElement,\n props: Record<string, unknown>\n): Cleanup {\n const removers: Cleanup[] = []\n for (const [key, rawValue] of Object.entries(props)) {\n if (key === \"children\" || key === \"dangerouslySetInnerHTML\") continue\n if (key.startsWith(\"on\") && typeof rawValue === \"function\") {\n const eventName = key.slice(2).toLowerCase()\n // React aliases onChange to the `input` event for text-type inputs and\n // textareas so handlers fire on every keystroke. Native DOM `change`\n // only fires on blur, which breaks live-filter UIs like command palette.\n const isTextControl =\n (node instanceof HTMLInputElement &&\n node.type !== \"checkbox\" &&\n node.type !== \"radio\") ||\n node instanceof HTMLTextAreaElement\n const effectiveEvent =\n eventName === \"change\" && isTextControl ? \"input\" : eventName\n const listener = rawValue as EventListener\n node.addEventListener(effectiveEvent, listener)\n removers.push(() => node.removeEventListener(effectiveEvent, listener))\n continue\n }\n // zag's dataAttr/ariaAttr return undefined to mean \"remove\" — treat\n // undefined/null as attribute removal rather than no-op, otherwise\n // state toggles like data-highlighted stick once set.\n if (rawValue === undefined || rawValue === null) {\n node.removeAttribute(key)\n continue\n }\n if (typeof rawValue === \"boolean\") {\n if (rawValue) node.setAttribute(key, \"\")\n else node.removeAttribute(key)\n continue\n }\n if (key === \"style\" && typeof rawValue === \"object\") {\n Object.assign(node.style, rawValue as Record<string, string>)\n continue\n }\n if (key === \"className\" || key === \"class\") {\n node.setAttribute(\"class\", String(rawValue))\n continue\n }\n if (key === \"htmlFor\") {\n node.setAttribute(\"for\", String(rawValue))\n continue\n }\n if (key === \"tabIndex\") {\n node.tabIndex = Number(rawValue)\n continue\n }\n node.setAttribute(key, String(rawValue))\n }\n return composeCleanups(removers)\n}\n\nexport function createPersistentSpreads(): {\n apply(node: HTMLElement, props: Record<string, unknown>): void\n cleanupAll(): void\n} {\n const map = new Map<HTMLElement, Cleanup>()\n return {\n apply(node, props) {\n const prior = map.get(node)\n if (prior) prior()\n map.set(node, spreadProps(node, props))\n },\n cleanupAll() {\n for (const clean of map.values()) clean()\n map.clear()\n },\n }\n}\n","import type { CustomSurface } from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport type { MountedSurface } from \"./index\"\n\nexport function renderCustomSurface(\n surface: CustomSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n const result = surface.render(ctx, root)\n const cleanup = typeof result === \"function\" ? result : () => {}\n return {\n cleanup: () => {\n try {\n cleanup()\n } finally {\n root.replaceChildren()\n }\n },\n }\n}\n","import {\n ChevronDown,\n Copy,\n HelpCircle,\n MessageCircle,\n Target,\n createElement as createLucideElement,\n type IconNode,\n} from \"lucide\"\nimport {\n displayName,\n entityKey,\n type Entity,\n type EntityRef,\n type Flow,\n} from \"../../entities\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport { filterEntities, filterIds } from \"../builder/filter\"\nimport type {\n DetailAction,\n DetailActionIcon,\n DetailActionRunContext,\n DetailSection,\n DetailSubtitle,\n DetailSurface,\n} from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport { SECTION_LABELS } from \"../labels\"\nimport { createButton } from \"../primitives/button\"\nimport { createPillItem } from \"../primitives/chip\"\nimport { createEntityLink } from \"../primitives/entity-link\"\nimport { createIconTile } from \"../primitives/icon-tile\"\nimport {\n renderKindBadge,\n renderKindIcon,\n renderKindIconTile,\n} from \"../primitives/kind-icon\"\nimport { fillRow, fillRowWithHandle } from \"../primitives/row\"\nimport { createSection } from \"../primitives/section\"\nimport {\n createCaption,\n createDescription,\n createHeading,\n createMutedText,\n} from \"../primitives/text\"\nimport {\n LIST_GROUP_LABEL_CLASS,\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n} from \"../../ui/list-item\"\nimport type { MountedSurface } from \"./index\"\n\nconst ICON_MAP: Record<DetailActionIcon, IconNode> = {\n copy: Copy,\n \"message-circle\": MessageCircle,\n \"chevron-down\": ChevronDown,\n target: Target,\n}\n\nfunction iconFor(icon: DetailActionIcon | undefined): IconNode | null {\n return icon ? ICON_MAP[icon] : null\n}\n\nfunction renderSubtitle(subtitle: DetailSubtitle): HTMLElement {\n const text = subtitle.extra\n ? `${subtitle.rawId} · ${subtitle.extra}`\n : subtitle.rawId\n return createCaption({\n class: \"px-2\",\n attrs: { \"data-uidex-detail-subtitle\": \"\" },\n text,\n })\n}\n\nfunction renderNotFound(ref: EntityRef): HTMLElement {\n return createMutedText({\n class: \"p-4\",\n attrs: { \"data-uidex-detail-missing\": \"\" },\n text: `${ref.kind}: ${ref.id} not found in registry`,\n })\n}\n\ninterface RenderedActions {\n node: HTMLElement\n buttons: readonly HTMLButtonElement[]\n cleanup: Cleanup\n}\n\nfunction renderActions(\n actions: readonly DetailAction[],\n ctx: ViewContext,\n root: HTMLElement,\n heading?: string\n): RenderedActions {\n const cleanups: Cleanup[] = []\n const buttons: HTMLButtonElement[] = []\n\n const section = el(\"section\", {\n class: \"flex flex-col\",\n attrs: { \"data-uidex-detail-actions\": \"\" },\n })\n if (heading) {\n section.append(el(\"h3\", { class: LIST_GROUP_LABEL_CLASS, text: heading }))\n }\n const list = el(\"div\", {\n class: \"flex flex-col\",\n attrs: { role: \"listbox\", \"aria-label\": heading ?? \"Actions\" },\n })\n section.append(list)\n\n for (const action of actions) {\n const btn = createButton({\n variant: \"action\",\n attrs: {\n role: \"option\",\n tabindex: buttons.length === 0 ? \"0\" : \"-1\",\n \"data-uidex-detail-action\": action.id,\n \"aria-label\": action.ariaLabel ?? action.label,\n },\n })\n let leading: Node | undefined\n const icon = iconFor(action.icon)\n if (icon) {\n const svg = createLucideElement(icon)\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"class\", \"h-4 w-4 shrink-0\")\n leading = createIconTile(svg)\n }\n const { label: labelEl } = fillRowWithHandle(btn, {\n leading,\n label: action.label,\n trailing: action.hint,\n })\n\n let revertTimer: ReturnType<typeof setTimeout> | null = null\n const runCtx: DetailActionRunContext = {\n setLabel(next, durationMs) {\n if (revertTimer !== null) {\n clearTimeout(revertTimer)\n revertTimer = null\n }\n labelEl.textContent = next\n if (durationMs && durationMs > 0) {\n revertTimer = setTimeout(() => {\n labelEl.textContent = action.label\n revertTimer = null\n }, durationMs)\n }\n },\n }\n\n const onClick = async () => {\n if (\"copy\" in action) {\n try {\n await navigator.clipboard?.writeText(action.copy)\n runCtx.setLabel(\"Copied!\", 1200)\n } catch (err) {\n console.warn(\"[uidex] copy action: clipboard write failed\", err)\n runCtx.setLabel(\"Copy failed\", 1500)\n }\n } else if (\"scrollTo\" in action) {\n const target = root.querySelector<HTMLElement>(action.scrollTo)\n target?.scrollIntoView({ block: \"start\", behavior: \"smooth\" })\n } else if (\"push\" in action) {\n ctx.push({ id: action.push.id, ref: action.push.ref ?? null })\n } else if (\"navigate\" in action) {\n ctx.navigate(action.navigate)\n } else if (\"highlight\" in action) {\n ctx.pinHighlight(action.highlight)\n ctx.close()\n } else {\n await action.run(runCtx)\n }\n }\n btn.addEventListener(\"click\", onClick)\n cleanups.push(() => {\n btn.removeEventListener(\"click\", onClick)\n if (revertTimer !== null) clearTimeout(revertTimer)\n })\n buttons.push(btn)\n list.append(btn)\n }\n\n return { node: section, buttons, cleanup: composeCleanups(cleanups) }\n}\n\ninterface RenderedSection {\n node: HTMLElement\n cleanup: Cleanup\n}\n\nfunction renderRefList(\n ctx: ViewContext,\n label: string,\n entities: readonly Entity[],\n dataAttr: string\n): RenderedSection | null {\n if (entities.length === 0) return null\n const cleanups: Cleanup[] = []\n const items = entities.map((entity) => {\n const ref: EntityRef = { kind: entity.kind, id: entityKey(entity) }\n const link = createEntityLink({\n ctx,\n target: ref,\n label: displayName(entity),\n leading: renderKindIconTile(entity.kind),\n })\n cleanups.push(link.cleanup)\n return el(\"li\", {}, [link.node])\n })\n const node = createSection({ heading: label, dataAttr }, items)\n return { node, cleanup: composeCleanups(cleanups) }\n}\n\nfunction renderFlowList(\n ctx: ViewContext,\n flows: readonly Flow[]\n): RenderedSection | null {\n if (flows.length === 0) return null\n const cleanups: Cleanup[] = []\n const items = flows.map((flow) => {\n const link = createEntityLink({\n ctx,\n target: { kind: \"flow\", id: flow.id },\n label: displayName(flow),\n leading: renderKindIconTile(\"flow\"),\n })\n cleanups.push(link.cleanup)\n return el(\"li\", {}, [link.node])\n })\n const node = createSection(\n { heading: SECTION_LABELS.flows, dataAttr: \"data-uidex-detail-flows\" },\n items\n )\n return { node, cleanup: composeCleanups(cleanups) }\n}\n\nfunction renderTouches(\n ctx: ViewContext,\n entities: readonly Entity[],\n unresolved: readonly string[],\n query: string\n): RenderedSection {\n if (entities.length === 0 && unresolved.length === 0) {\n const section = el(\"section\", {\n class: \"flex flex-col gap-2\",\n attrs: { \"data-uidex-detail-touches\": \"\" },\n })\n section.append(\n createHeading({ text: SECTION_LABELS.touches }),\n createMutedText({\n attrs: { \"data-uidex-detail-empty\": \"\" },\n text: query ? \"No matches\" : \"No entities touched\",\n })\n )\n return { node: section, cleanup: () => {} }\n }\n\n const cleanups: Cleanup[] = []\n const items: HTMLElement[] = []\n for (const entity of entities) {\n const link = createEntityLink({\n ctx,\n target: { kind: entity.kind, id: entityKey(entity) },\n label: displayName(entity),\n leading: renderKindIconTile(entity.kind),\n })\n cleanups.push(link.cleanup)\n items.push(el(\"li\", {}, [link.node]))\n }\n for (const id of unresolved) {\n const host = el(\"li\", {\n class: cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"text-muted-foreground\"\n ),\n attrs: {\n \"data-uidex-detail-unresolved\": \"\",\n \"data-uidex-detail-row\": \"unresolved\",\n tabindex: \"-1\",\n },\n })\n const helpIcon = createLucideElement(HelpCircle)\n helpIcon.setAttribute(\"aria-hidden\", \"true\")\n helpIcon.setAttribute(\"class\", \"h-4 w-4 shrink-0\")\n fillRow(host, { leading: createIconTile(helpIcon), label: id })\n items.push(host)\n }\n const node = createSection(\n { heading: SECTION_LABELS.touches, dataAttr: \"data-uidex-detail-touches\" },\n items\n )\n return { node, cleanup: composeCleanups(cleanups) }\n}\n\nfunction renderRoutePaths(paths: readonly string[]): RenderedSection | null {\n if (paths.length === 0) return null\n const node = createSection(\n { heading: SECTION_LABELS.routes, dataAttr: \"data-uidex-detail-routes\" },\n paths.map((p) => {\n const host = el(\"li\", {\n class: cn(LIST_ITEM_CLASS, LIST_ITEM_INTERACTIVE_CLASS),\n attrs: {\n \"data-uidex-detail-row\": \"route\",\n tabindex: \"-1\",\n },\n })\n fillRow(host, {\n leading: renderKindIconTile(\"route\"),\n label: p,\n })\n return host\n })\n )\n return { node, cleanup: () => {} }\n}\n\nfunction renderAcceptanceChecklist(items: readonly string[]): HTMLElement {\n return createSection(\n {\n heading: SECTION_LABELS.acceptance,\n dataAttr: \"data-uidex-detail-acceptance\",\n },\n items.map((text, idx) => {\n const id = `uidex-acceptance-${idx}`\n const checkbox = el(\"input\", {\n attrs: {\n type: \"checkbox\",\n id,\n \"data-uidex-acceptance-item\": String(idx),\n },\n class:\n \"mt-1 h-3.5 w-3.5 shrink-0 cursor-pointer accent-accent focus:outline-none\",\n }) as HTMLInputElement\n const label = el(\"label\", {\n class: cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"w-full cursor-pointer items-start\"\n ),\n attrs: { for: id },\n })\n const { label: labelSpan } = fillRowWithHandle(label, {\n leading: checkbox,\n label: text,\n })\n labelSpan.className = \"min-w-0 flex-1 whitespace-normal break-words\"\n const syncChecked = (): void => {\n labelSpan.classList.toggle(\"line-through\", checkbox.checked)\n labelSpan.classList.toggle(\"text-muted-foreground\", checkbox.checked)\n }\n checkbox.addEventListener(\"change\", syncChecked)\n checkbox.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Enter\") {\n e.preventDefault()\n checkbox.checked = !checkbox.checked\n syncChecked()\n }\n })\n return el(\"li\", {}, [label])\n })\n )\n}\n\nfunction renderSection(\n section: DetailSection,\n ctx: ViewContext,\n query: string\n): RenderedSection | null {\n switch (section.id) {\n case \"description\": {\n if (!section.text) return null\n return {\n node: createDescription({\n class: \"px-2\",\n attrs: { \"data-uidex-detail-description\": \"\" },\n text: section.text,\n }),\n cleanup: () => {},\n }\n }\n case \"acceptance\": {\n if (section.items.length === 0) return null\n return {\n node: renderAcceptanceChecklist(section.items),\n cleanup: () => {},\n }\n }\n case \"scopes\": {\n if (section.scopes.length === 0) return null\n const node = el(\n \"ul\",\n {\n class: \"flex flex-wrap gap-1.5\",\n attrs: { \"data-uidex-detail-scopes\": \"\" },\n },\n section.scopes.map((s) => createPillItem({ text: s }))\n )\n return { node, cleanup: () => {} }\n }\n case \"composes\":\n return renderRefList(\n ctx,\n section.label,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities,\n \"data-uidex-detail-composes\"\n )\n case \"used-by\":\n return renderRefList(\n ctx,\n section.label,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities,\n \"data-uidex-detail-used-by\"\n )\n case \"flows\":\n return renderFlowList(\n ctx,\n section.filterable\n ? filterEntities(section.flows, query)\n : section.flows\n )\n case \"touches\":\n return renderTouches(\n ctx,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities,\n section.filterable\n ? filterIds(section.unresolved, query)\n : section.unresolved,\n query\n )\n case \"routes\":\n return renderRoutePaths(\n section.filterable ? filterIds(section.paths, query) : section.paths\n )\n }\n}\n\nfunction hasFilterableSections(sections: readonly DetailSection[]): boolean {\n return sections.some((s) => \"filterable\" in s && s.filterable === true)\n}\n\nexport function renderDetailSurface(\n surface: DetailSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n if (surface.notFound) {\n root.append(renderNotFound(surface.notFound))\n return { cleanup: () => root.replaceChildren() }\n }\n\n const body = el(\"div\", {\n class: \"flex flex-col gap-3 px-2 py-4\",\n attrs: {\n \"data-uidex-detail-body\": \"\",\n \"data-uidex-detail-kind\": surface.entityKind,\n },\n })\n\n const cleanups: Cleanup[] = []\n\n const headerGroup = el(\"div\", {\n class: \"flex items-center gap-2 px-2\",\n })\n if (surface.title) {\n headerGroup.append(\n el(\"h2\", {\n class:\n \"min-w-0 flex-1 truncate text-base font-semibold text-foreground\",\n attrs: { \"data-uidex-detail-title\": \"\" },\n text: surface.title,\n })\n )\n }\n const kindBadge = renderKindBadge(surface.entityKind)\n kindBadge.classList.add(\"ml-auto\")\n headerGroup.append(kindBadge)\n body.append(headerGroup)\n\n if (surface.subtitle) body.append(renderSubtitle(surface.subtitle))\n\n let actionsNode: HTMLElement | null = null\n if (surface.actions && surface.actions.length > 0) {\n const rendered = renderActions(\n surface.actions,\n ctx,\n root,\n SECTION_LABELS.actions\n )\n cleanups.push(rendered.cleanup)\n actionsNode = rendered.node\n }\n\n const sections = surface.sections ?? []\n const filterable = hasFilterableSections(sections)\n\n const listsContainer = el(\"div\", {\n class: \"flex flex-col gap-3\",\n attrs: { \"data-uidex-detail-sections\": \"\" },\n })\n body.append(listsContainer)\n\n let sectionCleanup: Cleanup = () => {}\n let focusables: HTMLElement[] = []\n\n const focusAt = (rawIdx: number): void => {\n if (focusables.length === 0) return\n const idx = Math.max(0, Math.min(rawIdx, focusables.length - 1))\n for (let i = 0; i < focusables.length; i++) {\n focusables[i].tabIndex = i === idx ? 0 : -1\n }\n focusables[idx].focus()\n }\n\n const FOCUS_SELECTOR =\n \"button[data-uidex-detail-action], button[data-uidex-entity-link], input[data-uidex-acceptance-item], [data-uidex-detail-row]\"\n\n const refreshFocusSequence = (): void => {\n focusables = Array.from(\n listsContainer.querySelectorAll<HTMLElement>(FOCUS_SELECTOR)\n )\n for (let i = 0; i < focusables.length; i++) {\n focusables[i].tabIndex = i === 0 ? 0 : -1\n }\n }\n\n const onNavKeyDown = (e: KeyboardEvent): void => {\n if (\n e.key !== \"ArrowDown\" &&\n e.key !== \"ArrowUp\" &&\n e.key !== \"Home\" &&\n e.key !== \"End\"\n )\n return\n const rootNode = body.getRootNode()\n const active =\n rootNode instanceof ShadowRoot\n ? rootNode.activeElement\n : document.activeElement\n if (!(active instanceof HTMLElement)) return\n\n const inSearch = active === ctx.searchInput\n if (inSearch) {\n if (focusables.length === 0) return\n e.preventDefault()\n const idx =\n e.key === \"ArrowUp\" || e.key === \"End\" ? focusables.length - 1 : 0\n focusAt(idx)\n return\n }\n\n const idx = focusables.indexOf(active)\n if (idx === -1) return\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault()\n if (idx === 0) ctx.searchInput.focus()\n else focusAt(idx - 1)\n return\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault()\n if (idx < focusables.length - 1) focusAt(idx + 1)\n return\n }\n if (e.key === \"Home\") {\n e.preventDefault()\n focusAt(0)\n return\n }\n if (e.key === \"End\") {\n e.preventDefault()\n focusAt(focusables.length - 1)\n return\n }\n }\n\n body.addEventListener(\"keydown\", onNavKeyDown)\n ctx.searchInput.addEventListener(\"keydown\", onNavKeyDown)\n\n function renderSections(query: string): void {\n sectionCleanup()\n listsContainer.replaceChildren()\n const cs: Cleanup[] = []\n let hasFilterableSection = false\n let renderedFilterable = 0\n let actionsPlaced = false\n const placeActions = (): void => {\n if (actionsNode && !actionsPlaced) {\n listsContainer.append(actionsNode)\n actionsPlaced = true\n }\n }\n for (const section of sections) {\n const isFilterable =\n \"filterable\" in section && section.filterable === true\n if (isFilterable) hasFilterableSection = true\n const sectionQuery = isFilterable ? query : \"\"\n const out = renderSection(section, ctx, sectionQuery)\n if (!out) continue\n if (isFilterable) renderedFilterable++\n listsContainer.append(out.node)\n cs.push(out.cleanup)\n if (section.id === \"description\") placeActions()\n }\n if (!actionsPlaced && actionsNode) {\n listsContainer.prepend(actionsNode)\n actionsPlaced = true\n }\n if (query && hasFilterableSection && renderedFilterable === 0) {\n listsContainer.append(\n createMutedText({\n attrs: { \"data-uidex-detail-empty\": \"\" },\n text: \"No matches\",\n })\n )\n }\n sectionCleanup = composeCleanups(cs)\n refreshFocusSequence()\n }\n\n renderSections(\"\")\n\n root.append(body)\n\n const cleanup = composeCleanups([\n ...cleanups,\n () => sectionCleanup(),\n () => {\n body.removeEventListener(\"keydown\", onNavKeyDown)\n ctx.searchInput.removeEventListener(\"keydown\", onNavKeyDown)\n },\n () => root.replaceChildren(),\n ])\n\n const mounted: MountedSurface = { cleanup }\n if (filterable) {\n mounted.onSearch = renderSections\n }\n return mounted\n}\n","import { displayName, entityKey, type Entity } from \"../../entities\"\n\nexport function normalizeQuery(query: string): string {\n return query.trim().toLowerCase()\n}\n\nexport function matchesQuery(haystack: string, query: string): boolean {\n const q = normalizeQuery(query)\n if (!q) return true\n return haystack.toLowerCase().includes(q)\n}\n\nexport function filterEntities<E extends Entity>(\n entities: readonly E[],\n query: string\n): readonly E[] {\n const q = normalizeQuery(query)\n if (!q) return entities\n return entities.filter((e) => {\n const name = displayName(e).toLowerCase()\n const id = entityKey(e).toLowerCase()\n return (\n name.includes(q) || id.includes(q) || e.kind.toLowerCase().includes(q)\n )\n })\n}\n\nexport function filterIds(\n ids: readonly string[],\n query: string\n): readonly string[] {\n const q = normalizeQuery(query)\n if (!q) return ids\n return ids.filter((id) => id.toLowerCase().includes(q))\n}\n","export const SECTION_LABELS = {\n acceptance: \"Acceptance criteria\",\n actions: \"Actions\",\n contains: \"Contains\",\n usedBy: \"Used by\",\n flows: \"Flows\",\n touches: \"Touches\",\n routes: \"Routes\",\n} as const\n\nexport const PALETTE_GROUPS = {\n commands: \"Commands\",\n} as const\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\nimport { cva } from \"./cva\"\n\nexport type ButtonVariant =\n | \"default\"\n | \"destructive\"\n | \"destructive-outline\"\n | \"ghost\"\n | \"link\"\n | \"outline\"\n | \"secondary\"\n\nexport type ButtonSize =\n | \"default\"\n | \"sm\"\n | \"xs\"\n | \"lg\"\n | \"xl\"\n | \"icon\"\n | \"icon-sm\"\n | \"icon-lg\"\n | \"icon-xs\"\n\nconst buttonBase =\n \"focus-visible:ring-ring focus-visible:ring-offset-background disabled:opacity-60 relative inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-lg border text-sm font-medium outline-none transition-shadow focus-visible:ring-2 focus-visible:ring-offset-1 disabled:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg]:pointer-events-none [&_svg]:shrink-0\"\n\nexport const buttonVariants = cva(buttonBase, {\n defaultVariants: { size: \"default\", variant: \"default\" },\n variants: {\n size: {\n default: \"h-8 px-3\",\n sm: \"h-7 gap-1.5 px-2.5\",\n xs: \"h-6 gap-1 rounded-md px-2 text-xs\",\n lg: \"h-9 px-3.5\",\n xl: \"h-10 px-4 text-base\",\n icon: \"size-8\",\n \"icon-sm\": \"size-7\",\n \"icon-lg\": \"size-9\",\n \"icon-xs\": \"size-6 rounded-md\",\n },\n variant: {\n default:\n \"border-primary bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"border-destructive bg-destructive shadow-xs hover:bg-destructive/90 text-white\",\n \"destructive-outline\":\n \"border-input bg-popover text-destructive-foreground shadow-xs/5 hover:border-destructive/30 hover:bg-destructive/5 dark:bg-input/30\",\n ghost:\n \"text-foreground hover:bg-accent hover:text-accent-foreground border-transparent\",\n link: \"text-foreground border-transparent underline-offset-4 hover:underline\",\n outline:\n \"border-input bg-popover text-foreground shadow-xs/5 hover:bg-accent hover:text-accent-foreground dark:bg-input/30\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/90 border-transparent\",\n },\n },\n})\n\nexport interface CreateButtonOptions extends Omit<ElementOptions, \"class\"> {\n variant?: ButtonVariant\n size?: ButtonSize\n class?: ClassValue\n}\n\nexport function createButton(\n options: CreateButtonOptions = {},\n children: Child | Child[] = []\n): HTMLButtonElement {\n const { variant, size, class: extra, attrs, ...rest } = options\n return el(\n \"button\",\n {\n ...rest,\n class: cn(buttonVariants({ variant, size }), extra),\n attrs: { type: \"button\", \"data-slot\": \"button\", ...attrs },\n },\n children\n )\n}\n","export const LIST_ITEM_CLASS =\n \"flex min-h-8 cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-base outline-none sm:min-h-7 sm:text-sm\"\n\nexport const LIST_ITEM_STATE_CLASS =\n \"data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-64\"\n\nexport const LIST_ITEM_INTERACTIVE_CLASS =\n \"hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-within:bg-accent focus-within:text-accent-foreground\"\n\nexport const LIST_GROUP_LABEL_CLASS =\n \"text-muted-foreground px-2 py-1.5 text-xs font-medium\"\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../../internal/el\"\nimport {\n createButton as createUiButton,\n type ButtonSize,\n type ButtonVariant as UiButtonVariant,\n} from \"../../ui/button\"\nimport {\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n} from \"../../ui/list-item\"\n\n// `action` renders a button-shaped palette row so entity links, acceptance\n// rows, and detail actions share the list-item appearance.\nexport type ButtonVariant = \"primary\" | \"action\" | \"link\"\n\nconst VARIANT_MAP: Record<\n Exclude<ButtonVariant, \"action\">,\n { variant: UiButtonVariant; size?: ButtonSize; extra?: ClassValue }\n> = {\n primary: { variant: \"default\", size: \"default\", extra: \"self-start\" },\n link: {\n variant: \"link\",\n extra: \"h-auto w-auto justify-start px-0 py-0 font-normal shadow-none\",\n },\n}\n\nexport interface CreateButtonOptions extends Omit<ElementOptions, \"class\"> {\n variant: ButtonVariant\n class?: ClassValue\n}\n\nexport function createButton(\n options: CreateButtonOptions,\n children: Child | Child[] = []\n): HTMLButtonElement {\n const { variant, class: extraClass, attrs, ...rest } = options\n if (variant === \"action\") {\n return el(\n \"button\",\n {\n ...rest,\n class: cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"w-full cursor-pointer text-left font-normal\",\n extraClass\n ),\n attrs: { type: \"button\", \"data-slot\": \"list-item-button\", ...attrs },\n },\n children\n )\n }\n const mapped = VARIANT_MAP[variant]\n return createUiButton(\n {\n ...rest,\n variant: mapped.variant,\n size: mapped.size,\n class: cn(mapped.extra, extraClass),\n attrs,\n },\n children\n )\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\n\nconst KBD_CLASS =\n \"bg-muted text-muted-foreground pointer-events-none inline-flex h-5 min-w-5 select-none items-center justify-center gap-1 rounded px-1 font-sans text-xs font-medium [&_svg:not([class*='size-'])]:size-3\"\n\nconst KBD_GROUP_CLASS = \"inline-flex items-center gap-1\"\n\nconst COMMAND_SHORTCUT_CLASS =\n \"text-muted-foreground/70 ms-auto font-sans text-xs font-medium tracking-widest\"\n\nexport interface CreateKbdOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport function createKbd(\n options: CreateKbdOptions = {},\n children: Child | Child[] = []\n): HTMLElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"kbd\",\n {\n ...rest,\n class: cn(KBD_CLASS, extra),\n attrs: { \"data-slot\": \"kbd\", ...attrs },\n },\n children\n )\n}\n\nexport function createKbdGroup(\n options: CreateKbdOptions = {},\n children: Child | Child[] = []\n): HTMLElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"kbd\",\n {\n ...rest,\n class: cn(KBD_GROUP_CLASS, extra),\n attrs: { \"data-slot\": \"kbd-group\", ...attrs },\n },\n children\n )\n}\n\n/**\n * Lighter shortcut text used inside command-palette rows (coss\n * `CommandShortcut`). No background pill — just muted mono-tracked type.\n */\nexport function createCommandShortcut(\n options: CreateKbdOptions = {},\n children: Child | Child[] = []\n): HTMLElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"kbd\",\n {\n ...rest,\n class: cn(COMMAND_SHORTCUT_CLASS, extra),\n attrs: { \"data-slot\": \"command-shortcut\", ...attrs },\n },\n children\n )\n}\n","import { el } from \"../../internal/el\"\nimport { createCommandShortcut } from \"../../ui/kbd\"\n\n// Rows are always single-line: `leading`, `label`, optional muted `subtitle`\n// suffix, `trailing` (kbd if string, else raw node).\nexport interface RowContent {\n leading?: Node | null\n label: string\n subtitle?: string\n trailing?: Node | string | null\n}\n\nconst LABEL_CLASS = \"min-w-0 flex-1 truncate\"\nconst SUBTITLE_CLASS = \"truncate text-xs text-muted-foreground\"\n\n/** Returns the mutable label `<span>` so callers can swap its text later. */\nexport function fillRowWithHandle(\n host: HTMLElement,\n content: RowContent\n): { label: HTMLSpanElement } {\n if (content.leading) host.append(content.leading)\n const label = el(\"span\", { class: LABEL_CLASS, text: content.label })\n host.append(label)\n if (content.subtitle) {\n host.append(\n el(\"span\", {\n class: SUBTITLE_CLASS,\n attrs: { \"data-uidex-row-subtitle\": \"\" },\n text: content.subtitle,\n })\n )\n }\n if (content.trailing != null) {\n host.append(\n typeof content.trailing === \"string\"\n ? createCommandShortcut({ text: content.trailing })\n : content.trailing\n )\n }\n return { label }\n}\n\n/**\n * Host is expected to provide its own `flex` container styling (alignment,\n * gap, padding). The row only injects the inner leading/label/trailing slots.\n */\nexport function fillRow(host: HTMLElement, content: RowContent): void {\n fillRowWithHandle(host, content)\n}\n","import type { ClassValue } from \"clsx\"\nimport { KIND_STYLE, type EntityRef } from \"../../entities\"\nimport type { Cleanup } from \"../../internal/cleanup\"\nimport type { ViewContext } from \"../core/types\"\nimport { createButton } from \"./button\"\nimport { fillRow } from \"./row\"\n\nexport interface EntityLinkOptions {\n ctx: ViewContext\n target: EntityRef\n label?: string\n leading?: Node | null\n class?: ClassValue\n}\n\nexport function createEntityLink(options: EntityLinkOptions): {\n node: HTMLButtonElement\n cleanup: Cleanup\n} {\n const { ctx, target, label, leading, class: extraClass } = options\n const node = createButton({\n variant: \"action\",\n class: [\"w-full\", extraClass],\n attrs: {\n \"data-uidex-entity-link\": \"\",\n \"data-uidex-ref-kind\": target.kind,\n \"data-uidex-ref-id\": target.id,\n },\n })\n fillRow(node, { leading, label: label ?? `${target.kind}: ${target.id}` })\n const onClick = () => ctx.navigate(target)\n const preview = (): void => {\n ctx.highlight.show(target, { color: KIND_STYLE[target.kind].color })\n }\n const restoreParent = (): void => {\n if (ctx.ref) {\n ctx.highlight.show(ctx.ref, { color: KIND_STYLE[ctx.ref.kind].color })\n } else {\n ctx.highlight.hide()\n }\n }\n node.addEventListener(\"click\", onClick)\n node.addEventListener(\"mouseenter\", preview)\n node.addEventListener(\"mouseleave\", restoreParent)\n node.addEventListener(\"focus\", preview)\n node.addEventListener(\"blur\", restoreParent)\n return {\n node,\n cleanup: () => {\n node.removeEventListener(\"click\", onClick)\n node.removeEventListener(\"mouseenter\", preview)\n node.removeEventListener(\"mouseleave\", restoreParent)\n node.removeEventListener(\"focus\", preview)\n node.removeEventListener(\"blur\", restoreParent)\n },\n }\n}\n","import { el, type Child } from \"../../internal/el\"\nimport { LIST_GROUP_LABEL_CLASS } from \"../../ui/list-item\"\n\nexport interface CreateSectionOptions {\n heading?: string\n dataAttr: string\n listClass?: string\n}\n\nexport function createSection(\n options: CreateSectionOptions,\n items: Child[]\n): HTMLElement {\n const { heading, dataAttr, listClass = \"flex flex-col\" } = options\n const children: Child[] = []\n if (heading) {\n children.push(el(\"h3\", { class: LIST_GROUP_LABEL_CLASS, text: heading }))\n }\n children.push(el(\"ul\", { class: listClass }, items))\n return el(\n \"section\",\n {\n class: \"flex flex-col\",\n attrs: { [dataAttr]: \"\" },\n },\n children\n )\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type ElementOptions } from \"../../internal/el\"\nimport { LIST_GROUP_LABEL_CLASS } from \"../../ui/list-item\"\n\nexport interface TextOptions extends Omit<ElementOptions, \"class\" | \"text\"> {\n text?: string\n class?: ClassValue\n}\n\nconst CAPTION_CLASS = \"font-mono text-xs text-muted-foreground\"\nconst MUTED_CLASS = \"text-sm text-muted-foreground\"\nconst DESCRIPTION_CLASS = \"text-sm leading-relaxed text-foreground\"\nconst HEADING_CLASS = LIST_GROUP_LABEL_CLASS\n\nexport function createCaption(options: TextOptions = {}): HTMLParagraphElement {\n const { class: extra, ...rest } = options\n return el(\"p\", { ...rest, class: cn(CAPTION_CLASS, extra) })\n}\n\nexport function createMutedText(\n options: TextOptions = {}\n): HTMLParagraphElement {\n const { class: extra, ...rest } = options\n return el(\"p\", { ...rest, class: cn(MUTED_CLASS, extra) })\n}\n\nexport function createDescription(\n options: TextOptions = {}\n): HTMLParagraphElement {\n const { class: extra, ...rest } = options\n return el(\"p\", { ...rest, class: cn(DESCRIPTION_CLASS, extra) })\n}\n\nexport function createHeading(options: TextOptions = {}): HTMLHeadingElement {\n const { class: extra, ...rest } = options\n return el(\"h3\", { ...rest, class: cn(HEADING_CLASS, extra) })\n}\n","import { createActor, fromPromise } from \"xstate\"\n\nimport { formMachine } from \"../../flows/form\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { el } from \"../../internal/el\"\nimport { createButton } from \"../../ui/button\"\nimport { createField, createFieldError, createFieldLabel } from \"../../ui/field\"\nimport { createForm } from \"../../ui/form\"\nimport { createInput, createTextarea } from \"../../ui/input\"\nimport { createNativeSelect } from \"../../ui/select\"\nimport type {\n FormField,\n FormSubmitResult,\n FormSurface,\n FormValue,\n StandardSchemaIssue,\n StandardSchemaV1,\n} from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport type { MountedSurface } from \"./index\"\n\ninterface FieldHandle {\n name: string\n node: HTMLElement\n control: HTMLElement\n errorNode: HTMLParagraphElement\n read(): FormValue\n reset(): void\n setError(message: string | null): void\n}\n\nlet fieldSeq = 0\nconst nextFieldId = (): string => `uidex-field-${++fieldSeq}`\n\nfunction issuePathRoot(issue: StandardSchemaIssue): string | undefined {\n const seg = issue.path?.[0]\n if (seg === undefined) return undefined\n if (typeof seg === \"object\" && seg !== null && \"key\" in seg) {\n return String(seg.key)\n }\n return String(seg)\n}\n\nasync function validateWithSchema(\n schema: StandardSchemaV1<Record<string, unknown>>,\n values: Record<string, FormValue>\n): Promise<Record<string, string> | null> {\n const result = await schema[\"~standard\"].validate(values)\n if (!(\"issues\" in result) || !result.issues) return null\n // First issue per field wins — later issues are usually noise once the\n // root cause is fixed and the user re-submits.\n const out: Record<string, string> = {}\n for (const issue of result.issues) {\n const key = issuePathRoot(issue)\n if (!key) continue\n if (out[key]) continue\n out[key] = issue.message\n }\n return Object.keys(out).length > 0 ? out : null\n}\n\nfunction renderField(\n field: FormField,\n initial: FormValue | undefined\n): FieldHandle {\n const controlId = nextFieldId()\n let control: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\n let read: () => FormValue\n let reset: () => void\n\n switch (field.kind) {\n case \"select\": {\n const node = createNativeSelect({\n attrs: {\n name: field.name,\n id: controlId,\n required: field.required ?? false,\n },\n })\n for (const opt of field.options) {\n node.append(\n el(\"option\", { attrs: { value: opt.value }, text: opt.label })\n )\n }\n const initialVal =\n typeof initial === \"string\"\n ? initial\n : typeof field.value === \"string\"\n ? field.value\n : field.options[0]?.value\n if (initialVal !== undefined) node.value = initialVal\n control = node\n read = () => node.value\n reset = () => {\n if (initialVal !== undefined) node.value = initialVal\n }\n break\n }\n case \"text\":\n case \"email\": {\n const node = createInput({\n attrs: {\n type: field.kind === \"email\" ? \"email\" : \"text\",\n name: field.name,\n id: controlId,\n placeholder: field.placeholder ?? \"\",\n required: field.required ?? false,\n },\n })\n const initialVal =\n typeof initial === \"string\"\n ? initial\n : typeof field.value === \"string\"\n ? field.value\n : \"\"\n node.value = initialVal\n control = node\n read = () => node.value\n reset = () => {\n node.value = initialVal\n }\n break\n }\n case \"textarea\": {\n const node = createTextarea({\n attrs: {\n name: field.name,\n id: controlId,\n placeholder: field.placeholder ?? \"\",\n required: field.required ?? false,\n rows: field.rows,\n },\n })\n const initialVal =\n typeof initial === \"string\"\n ? initial\n : typeof field.value === \"string\"\n ? field.value\n : \"\"\n node.value = initialVal\n control = node\n read = () => node.value\n reset = () => {\n node.value = initialVal\n }\n break\n }\n case \"checkbox\": {\n const input = el(\"input\", {\n attrs: {\n type: \"checkbox\",\n name: field.name,\n id: controlId,\n },\n class:\n \"border-input bg-popover size-4 cursor-pointer rounded-[0.25rem] border accent-primary\",\n }) as HTMLInputElement\n const initialVal =\n typeof initial === \"boolean\"\n ? initial\n : typeof field.value === \"boolean\"\n ? field.value\n : false\n input.checked = initialVal\n control = input\n read = () => input.checked\n reset = () => {\n input.checked = initialVal\n }\n break\n }\n }\n\n const errorNode = createFieldError()\n const field$ = createField(\n {\n name: field.name,\n class: field.kind === \"checkbox\" ? \"flex-row items-center gap-2\" : \"\",\n },\n []\n )\n\n if (field.kind === \"checkbox\") {\n field$.append(\n control,\n createFieldLabel({ htmlFor: controlId }, field.label)\n )\n } else {\n field$.append(\n createFieldLabel({ htmlFor: controlId }, field.label),\n control\n )\n }\n field$.append(errorNode)\n\n const setError = (message: string | null): void => {\n if (!message) {\n errorNode.hidden = true\n errorNode.textContent = \"\"\n control.removeAttribute(\"aria-invalid\")\n return\n }\n errorNode.hidden = false\n errorNode.textContent = message\n control.setAttribute(\"aria-invalid\", \"true\")\n }\n\n return {\n name: field.name,\n node: field$,\n control,\n errorNode,\n read,\n reset,\n setError,\n }\n}\n\nexport function renderFormSurface(\n surface: FormSurface,\n _ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n const cleanups: Cleanup[] = []\n const fields = surface.fields.map((field) =>\n renderField(field, surface.initial?.[field.name])\n )\n const fieldByName = new Map(fields.map((f) => [f.name, f]))\n\n const status = el(\"p\", {\n class: \"text-muted-foreground text-xs\",\n attrs: {\n \"data-uidex-form-status\": \"\",\n \"aria-live\": \"polite\",\n },\n })\n\n // sr-only preserves native form-submit semantics (Enter in input,\n // `requestSubmit()`) and screen-reader announcement without the button\n // showing — the shell footer surfaces the primary-action hint.\n const submit = createButton({\n variant: \"default\",\n class: \"sr-only\",\n attrs: {\n type: \"submit\",\n \"data-uidex-form-submit\": \"\",\n },\n text: surface.submit.label,\n })\n\n const form = createForm({ attrs: { \"data-uidex-form\": surface.id } }, [\n ...fields.map((f) => f.node),\n submit,\n status,\n ])\n\n function clearAllFieldErrors(): void {\n for (const f of fields) f.setError(null)\n }\n\n function applyFieldErrors(errs: Record<string, string> | undefined): void {\n clearAllFieldErrors()\n if (!errs) return\n for (const [name, message] of Object.entries(errs)) {\n fieldByName.get(name)?.setError(message)\n }\n }\n\n function setStatus(result: FormSubmitResult | null): void {\n status.replaceChildren()\n status.classList.remove(\"text-destructive-foreground\")\n status.classList.add(\"text-muted-foreground\")\n if (!result) return\n if (result.status === \"error\") {\n status.classList.remove(\"text-muted-foreground\")\n status.classList.add(\"text-destructive-foreground\")\n if (!result.fieldErrors) {\n status.textContent = result.message\n }\n return\n }\n if (result.link) {\n status.append(\n document.createTextNode(`${result.message ?? \"Submitted.\"} `),\n el(\"a\", {\n class: \"text-foreground underline underline-offset-4\",\n attrs: {\n href: result.link.url,\n target: \"_blank\",\n rel: \"noreferrer\",\n },\n text: result.link.label ?? \"Open link\",\n })\n )\n } else {\n status.textContent = result.message ?? \"Submitted.\"\n }\n }\n\n const actor = createActor(\n formMachine.provide({\n actions: {\n disableSubmitButton: () => {\n submit.disabled = true\n submit.setAttribute(\"data-loading\", \"\")\n },\n enableSubmitButton: () => {\n submit.disabled = false\n submit.removeAttribute(\"data-loading\")\n },\n showSuccessStatus: ({ context }) => {\n setStatus(context.result)\n clearAllFieldErrors()\n },\n showErrorStatus: ({ context }) => {\n const message =\n context.result?.status === \"error\"\n ? context.result\n : context.errorMessage\n ? { status: \"error\" as const, message: context.errorMessage }\n : null\n setStatus(message)\n },\n applyFieldErrors: ({ context }) => {\n applyFieldErrors(context.fieldErrors ?? undefined)\n },\n clearStatus: () => {\n setStatus(null)\n },\n clearFieldErrors: () => {\n clearAllFieldErrors()\n },\n resetFields: ({ context }) => {\n if (\n context.result?.status === \"success\" &&\n context.result.resetFields\n ) {\n for (const name of context.result.resetFields) {\n fieldByName.get(name)?.reset()\n }\n }\n },\n },\n actors: {\n validate: fromPromise<\n Record<string, string> | null,\n { values: Record<string, FormValue> }\n >(async ({ input }) => {\n if (!surface.schema) return null\n return validateWithSchema(surface.schema, input.values)\n }),\n submit: fromPromise<\n FormSubmitResult,\n { values: Record<string, FormValue> }\n >(\n async ({ input }) =>\n (await surface.submit.onSubmit(input.values)) ?? {\n status: \"success\",\n }\n ),\n },\n })\n )\n actor.start()\n cleanups.push(() => actor.stop())\n\n const onSubmit = (e: SubmitEvent): void => {\n e.preventDefault()\n const values: Record<string, FormValue> = {}\n surface.fields.forEach((field, i) => {\n values[field.name] = fields[i].read()\n })\n const snapshot = actor.getSnapshot()\n if (snapshot.matches(\"success\") || snapshot.matches(\"error\")) {\n actor.send({ type: \"RETRY\" })\n }\n actor.send({ type: \"SUBMIT\", values })\n }\n form.addEventListener(\"submit\", onSubmit)\n cleanups.push(() => form.removeEventListener(\"submit\", onSubmit))\n\n // Submit = Cmd/Ctrl+Enter. Plain Enter in a text input would otherwise\n // implicit-submit, so swallow it; textareas keep Enter = newline.\n const onFormKeyDown = (e: KeyboardEvent): void => {\n if (e.key !== \"Enter\") return\n const isMod = e.metaKey || e.ctrlKey\n if (isMod) {\n e.preventDefault()\n if (typeof form.requestSubmit === \"function\") form.requestSubmit()\n else form.dispatchEvent(new Event(\"submit\", { cancelable: true }))\n return\n }\n if (\n e.target instanceof HTMLInputElement &&\n e.target.type !== \"checkbox\" &&\n e.target.type !== \"radio\"\n ) {\n e.preventDefault()\n }\n }\n form.addEventListener(\"keydown\", onFormKeyDown)\n cleanups.push(() => form.removeEventListener(\"keydown\", onFormKeyDown))\n\n const section = el(\n \"section\",\n {\n class: \"p-4\",\n attrs: { \"data-uidex-form-surface\": surface.id },\n },\n [form]\n )\n root.append(section)\n\n return {\n cleanup: composeCleanups([...cleanups, () => root.replaceChildren()]),\n }\n}\n","import { assign, enqueueActions, fromPromise, setup } from \"xstate\"\n\nimport type { FormSubmitResult, FormValue } from \"../views/core/surface\"\n\nexport interface FormContext {\n values: Record<string, FormValue> | null\n result: FormSubmitResult | null\n fieldErrors: Record<string, string> | null\n errorMessage: string | null\n}\n\nexport type FormEvent =\n | { type: \"SUBMIT\"; values: Record<string, FormValue> }\n | { type: \"VALID\" }\n | { type: \"INVALID\"; fieldErrors: Record<string, string> }\n | { type: \"OK\"; result: FormSubmitResult }\n | { type: \"FAIL\"; result: FormSubmitResult }\n | { type: \"RETRY\" }\n\nexport interface ValidateInput {\n values: Record<string, FormValue>\n}\n\nexport interface SubmitInput {\n values: Record<string, FormValue>\n}\n\nconst initialContext: FormContext = {\n values: null,\n result: null,\n fieldErrors: null,\n errorMessage: null,\n}\n\nexport const formMachine = setup({\n types: {} as {\n context: FormContext\n events: FormEvent\n },\n actions: {\n disableSubmitButton: () => {},\n enableSubmitButton: () => {},\n showSuccessStatus: () => {},\n showErrorStatus: () => {},\n resetFields: () => {},\n applyFieldErrors: () => {},\n clearStatus: () => {},\n clearFieldErrors: () => {},\n },\n actors: {\n validate: fromPromise<Record<string, string> | null, ValidateInput>(\n async () => null\n ),\n submit: fromPromise<FormSubmitResult, SubmitInput>(async () => ({\n status: \"success\",\n })),\n },\n}).createMachine({\n id: \"form\",\n initial: \"idle\",\n context: initialContext,\n states: {\n idle: {\n entry: [\n assign(() => ({\n fieldErrors: null,\n errorMessage: null,\n })),\n { type: \"clearStatus\" },\n { type: \"clearFieldErrors\" },\n ],\n on: {\n SUBMIT: {\n target: \"validating\",\n actions: assign(({ event }) => ({\n values: event.values,\n result: null,\n fieldErrors: null,\n errorMessage: null,\n })),\n },\n },\n },\n validating: {\n invoke: {\n src: \"validate\",\n input: ({ context }) => ({ values: context.values ?? {} }),\n onDone: {\n actions: enqueueActions(({ event, enqueue }) => {\n const errors = event.output\n if (!errors) {\n enqueue.raise({ type: \"VALID\" })\n } else {\n enqueue.raise({ type: \"INVALID\", fieldErrors: errors })\n }\n }),\n },\n onError: {\n actions: enqueueActions(({ event, enqueue }) => {\n const error = event.error\n const message =\n error instanceof Error ? error.message : String(error)\n enqueue.raise({\n type: \"FAIL\",\n result: { status: \"error\", message },\n })\n }),\n },\n },\n on: {\n VALID: { target: \"submitting\" },\n INVALID: {\n target: \"error\",\n actions: assign(({ event }) => ({\n fieldErrors: event.fieldErrors,\n errorMessage: \"Please fix the errors above.\",\n result: {\n status: \"error\",\n message: \"Please fix the errors above.\",\n fieldErrors: event.fieldErrors,\n },\n })),\n },\n FAIL: {\n target: \"error\",\n actions: assign(({ event }) => ({\n result: event.result,\n errorMessage:\n event.result.status === \"error\" ? event.result.message : null,\n fieldErrors:\n event.result.status === \"error\"\n ? (event.result.fieldErrors ?? null)\n : null,\n })),\n },\n },\n },\n submitting: {\n entry: { type: \"disableSubmitButton\" },\n exit: { type: \"enableSubmitButton\" },\n invoke: {\n src: \"submit\",\n input: ({ context }) => ({ values: context.values ?? {} }),\n onDone: {\n actions: enqueueActions(({ event, enqueue }) => {\n const result = event.output\n if (result.status === \"success\") {\n enqueue.raise({ type: \"OK\", result })\n } else {\n enqueue.raise({ type: \"FAIL\", result })\n }\n }),\n },\n onError: {\n actions: enqueueActions(({ event, enqueue }) => {\n const error = event.error\n const message =\n error instanceof Error ? error.message : String(error)\n enqueue.raise({\n type: \"FAIL\",\n result: { status: \"error\", message },\n })\n }),\n },\n },\n on: {\n OK: {\n target: \"success\",\n actions: assign(({ event }) => ({\n result: event.result,\n fieldErrors: null,\n errorMessage: null,\n })),\n },\n FAIL: {\n target: \"error\",\n actions: assign(({ event }) => ({\n result: event.result,\n errorMessage:\n event.result.status === \"error\" ? event.result.message : null,\n fieldErrors:\n event.result.status === \"error\"\n ? (event.result.fieldErrors ?? null)\n : null,\n })),\n },\n },\n },\n success: {\n entry: [{ type: \"showSuccessStatus\" }, { type: \"resetFields\" }],\n on: {\n RETRY: { target: \"idle\" },\n },\n },\n error: {\n entry: [{ type: \"showErrorStatus\" }, { type: \"applyFieldErrors\" }],\n on: {\n RETRY: { target: \"idle\" },\n },\n },\n },\n})\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\n\nconst FIELD_ROOT_CLASS = \"flex flex-col items-start gap-2\"\nconst FIELD_LABEL_CLASS =\n \"text-base/4.5 text-foreground inline-flex items-center gap-2 font-medium sm:text-sm/4\"\nconst FIELD_DESCRIPTION_CLASS = \"text-muted-foreground text-xs\"\nconst FIELD_ERROR_CLASS = \"text-destructive-foreground text-xs\"\n\nexport interface CreateFieldOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n name?: string\n}\n\nexport function createField(\n options: CreateFieldOptions = {},\n children: Child | Child[] = []\n): HTMLDivElement {\n const { class: extra, name, attrs, ...rest } = options\n return el(\n \"div\",\n {\n ...rest,\n class: cn(FIELD_ROOT_CLASS, extra),\n attrs: {\n \"data-slot\": \"field\",\n \"data-uidex-primitive\": \"field\",\n ...(name ? { \"data-uidex-field-name\": name } : {}),\n ...attrs,\n },\n },\n children\n ) as HTMLDivElement\n}\n\nexport interface CreateFieldLabelOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n /** When provided, the `<label for>` attribute is set so clicking focuses the control. */\n htmlFor?: string\n}\n\nexport function createFieldLabel(\n options: CreateFieldLabelOptions = {},\n children: Child | Child[] = []\n): HTMLLabelElement {\n const { class: extra, htmlFor, attrs, ...rest } = options\n return el(\n \"label\",\n {\n ...rest,\n class: cn(FIELD_LABEL_CLASS, extra),\n attrs: {\n \"data-slot\": \"field-label\",\n ...(htmlFor ? { for: htmlFor } : {}),\n ...attrs,\n },\n },\n children\n ) as HTMLLabelElement\n}\n\nexport function createFieldDescription(\n options: CreateFieldOptions = {},\n children: Child | Child[] = []\n): HTMLParagraphElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"p\",\n {\n ...rest,\n class: cn(FIELD_DESCRIPTION_CLASS, extra),\n attrs: { \"data-slot\": \"field-description\", ...attrs },\n },\n children\n ) as HTMLParagraphElement\n}\n\nexport function createFieldError(\n options: CreateFieldOptions = {}\n): HTMLParagraphElement {\n const { class: extra, attrs, ...rest } = options\n const node = el(\"p\", {\n ...rest,\n class: cn(FIELD_ERROR_CLASS, extra),\n attrs: {\n \"data-slot\": \"field-error\",\n role: \"alert\",\n \"aria-live\": \"polite\",\n ...attrs,\n },\n }) as HTMLParagraphElement\n node.hidden = true\n return node\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\n\nconst FORM_CLASS = \"flex w-full flex-col gap-4\"\n\nexport interface CreateFormOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport function createForm(\n options: CreateFormOptions = {},\n children: Child | Child[] = []\n): HTMLFormElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"form\",\n {\n ...rest,\n class: cn(FORM_CLASS, extra),\n attrs: {\n \"data-slot\": \"form\",\n \"data-uidex-primitive\": \"form\",\n noValidate: true,\n ...attrs,\n },\n },\n children\n ) as HTMLFormElement\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type ElementOptions } from \"../internal/el\"\n\nconst FIELD_CLASS =\n \"border-input bg-popover text-foreground shadow-xs/5 placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive/40 aria-invalid:focus-visible:ring-destructive/20 dark:bg-input/30 inline-flex w-full rounded-lg border text-sm outline-none transition-shadow focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-60\"\n\nexport interface CreateInputOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport function createInput(\n options: CreateInputOptions = {}\n): HTMLInputElement {\n const { class: extra, attrs, ...rest } = options\n return el(\"input\", {\n ...rest,\n class: cn(FIELD_CLASS, \"h-8 px-3\", extra),\n attrs: { \"data-slot\": \"input\", ...attrs },\n }) as HTMLInputElement\n}\n\nexport function createTextarea(\n options: CreateInputOptions = {}\n): HTMLTextAreaElement {\n const { class: extra, attrs, ...rest } = options\n return el(\"textarea\", {\n ...rest,\n class: cn(FIELD_CLASS, \"min-h-20 px-3 py-2\", extra),\n attrs: { \"data-slot\": \"textarea\", ...attrs },\n }) as HTMLTextAreaElement\n}\n","import type { ClassValue } from \"clsx\"\nimport { ChevronsUpDown, createElement as createLucideElement } from \"lucide\"\nimport { cn } from \"../internal/cn\"\nimport { el, type ElementOptions } from \"../internal/el\"\n\nconst SELECT_WRAP_CLASS =\n \"border-input bg-popover text-foreground shadow-xs/5 focus-within:border-ring focus-within:ring-ring/30 aria-invalid:border-destructive/40 dark:bg-input/30 relative inline-flex h-8 w-full items-center rounded-lg border text-sm outline-none transition-shadow focus-within:ring-[3px] has-disabled:opacity-60\"\n\nconst SELECT_CONTROL_CLASS =\n \"absolute inset-0 h-full w-full cursor-pointer appearance-none bg-transparent px-3 pr-8 text-sm text-foreground outline-none disabled:cursor-not-allowed\"\n\nconst NATIVE_SELECT_CLASS =\n \"border-input bg-popover text-foreground shadow-xs/5 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive/40 dark:bg-input/30 inline-flex h-8 w-full cursor-pointer appearance-none rounded-lg border bg-[right_0.5rem_center] bg-no-repeat pl-3 pr-8 text-sm outline-none transition-shadow focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-60\"\n\nconst SELECT_CHEVRON_CLASS =\n \"pointer-events-none absolute right-2 size-4 text-muted-foreground opacity-80\"\n\nexport interface CreateSelectOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport interface SelectHandle {\n wrapper: HTMLElement\n control: HTMLSelectElement\n}\n\n/**\n * Coss-styled select composed of a wrapper `<span>` carrying the\n * border/shadow/chevron and a native `<select>` inside. Use when you can\n * control where the full handle mounts.\n */\nexport function createSelect(options: CreateSelectOptions = {}): SelectHandle {\n const { class: extra, attrs, ...rest } = options\n const control = el(\"select\", {\n ...rest,\n class: SELECT_CONTROL_CLASS,\n attrs: { \"data-slot\": \"select\", ...attrs },\n }) as HTMLSelectElement\n const chevron = createLucideElement(ChevronsUpDown)\n chevron.setAttribute(\"aria-hidden\", \"true\")\n chevron.setAttribute(\"class\", SELECT_CHEVRON_CLASS)\n const wrapper = el(\n \"span\",\n {\n class: cn(SELECT_WRAP_CLASS, extra),\n attrs: { \"data-slot\": \"select-control\" },\n },\n [control, chevron]\n )\n return { wrapper, control }\n}\n\n/**\n * Bare coss-styled native `<select>` — no wrapper, no chevron. Use when the\n * consumer expects a single self-styled element (e.g. the generic form\n * renderer in `views/render/form.ts`).\n */\nexport function createNativeSelect(\n options: CreateSelectOptions = {}\n): HTMLSelectElement {\n const { class: extra, attrs, ...rest } = options\n return el(\"select\", {\n ...rest,\n class: cn(NATIVE_SELECT_CLASS, extra),\n attrs: { \"data-slot\": \"select\", ...attrs },\n }) as HTMLSelectElement\n}\n","import * as combobox from \"@zag-js/combobox\"\nimport { createMachineRunner } from \"./machine\"\nimport { normalizeProps, type DomProps } from \"./normalize\"\n\nexport type ComboboxProps<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n> = combobox.Props<T>\nexport type ComboboxApi<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n> = combobox.Api<DomProps, T>\n\nexport function createCombobox<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n>(props: Partial<ComboboxProps<T>>) {\n const runner = createMachineRunner(\n combobox.machine as unknown as Parameters<typeof createMachineRunner>[0],\n props as never\n )\n runner.start()\n return {\n runner,\n api: () =>\n combobox.connect(\n runner.service as never,\n normalizeProps\n ) as ComboboxApi<T>,\n destroy: () => runner.stop(),\n }\n}\n\nexport type ComboboxHandle<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n> = ReturnType<typeof createCombobox<T>>\n\nexport { combobox }\n","import { KIND_STYLE } from \"../../entities\"\nimport { combobox, createCombobox } from \"../../machines/combobox\"\nimport { createScrollArea } from \"../../machines/scroll-area\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport { matchesQuery } from \"../builder/filter\"\nimport { createPersistentSpreads, spreadProps } from \"../builder/spread-props\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport { createElement as createLucideElement, Circle } from \"lucide\"\nimport { createIconTile } from \"../primitives/icon-tile\"\nimport { renderKindIconTile } from \"../primitives/kind-icon\"\nimport { fillRow } from \"../primitives/row\"\nimport { createMutedText } from \"../primitives/text\"\nimport {\n LIST_GROUP_LABEL_CLASS,\n LIST_ITEM_CLASS,\n LIST_ITEM_STATE_CLASS,\n} from \"../../ui/list-item\"\nimport type { MountedSurface } from \"./index\"\n\nfunction defaultFilter(item: ListItem, query: string): boolean {\n return matchesQuery(\n `${item.label} ${item.value} ${item.group ?? \"\"} ${item.subtitle ?? \"\"}`,\n query\n )\n}\n\nfunction rowTag(item: ListItem): string {\n return item.tag ?? item.value\n}\n\nexport function renderListSurface(\n surface: ListSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n const all = surface.items\n const filterFn = surface.filter ?? defaultFilter\n let filteredItems: readonly ListItem[] = all\n\n const allByValue = new Map(all.map((i) => [i.value, i]))\n\n const getRootNode = (): ShadowRoot | Document => {\n const rn = root.getRootNode()\n if (rn instanceof ShadowRoot || rn instanceof Document) return rn\n return root.ownerDocument ?? document\n }\n\n const makeCollection = (items: readonly ListItem[]) =>\n combobox.collection({\n items: items as ListItem[],\n itemToValue: (item) => item.value,\n itemToString: (item) => item.label,\n })\n\n const hasDefault =\n surface.defaultHighlight !== undefined &&\n allByValue.has(surface.defaultHighlight)\n\n const handle = createCombobox<ListItem>({\n id: surface.id,\n getRootNode,\n collection: makeCollection(all),\n defaultOpen: true,\n defaultHighlightedValue: hasDefault ? surface.defaultHighlight : undefined,\n openOnClick: true,\n inputBehavior: \"autohighlight\",\n selectionBehavior: \"preserve\",\n closeOnSelect: false,\n disableLayer: true,\n onSelect: ({ itemValue }) => {\n const item = allByValue.get(itemValue)\n if (!item || !surface.onSelect) return\n surface.onSelect(item)\n },\n onHighlightChange: ({ highlightedValue }) => {\n const item = highlightedValue\n ? allByValue.get(highlightedValue)\n : undefined\n if (item?.preview) {\n ctx.highlight.show(item.preview, {\n color: KIND_STYLE[item.preview.kind].color,\n })\n } else {\n ctx.highlight.hide()\n }\n },\n })\n\n const section = el(\"section\", {\n class: \"flex h-full flex-col overflow-hidden\",\n attrs: { \"data-uidex-list-surface\": surface.id },\n })\n\n const scrollRoot = el(\"div\", {\n class: \"flex-1 min-h-0\",\n attrs: { \"data-uidex-list-scroll-root\": \"\" },\n })\n\n const viewport = el(\"div\", { class: \"uidex-scrollbar h-full w-full\" })\n\n const content = el(\"div\", {\n class: \"scroll-py-2 p-2\",\n attrs: { \"data-uidex-list-content\": \"\" },\n })\n\n viewport.append(content)\n scrollRoot.append(viewport)\n section.append(scrollRoot)\n root.append(section)\n\n const scrollArea = createScrollArea({\n id: `${surface.id}-scroll`,\n getRootNode,\n })\n const scrollSpreads = createPersistentSpreads()\n const applyScrollProps = (): void => {\n const api = scrollArea.api()\n scrollSpreads.apply(\n scrollRoot,\n api.getRootProps() as Record<string, unknown>\n )\n scrollSpreads.apply(\n viewport,\n api.getViewportProps() as Record<string, unknown>\n )\n }\n applyScrollProps()\n const unsubScroll = scrollArea.runner.subscribe(applyScrollProps)\n\n const shellSpreads = createPersistentSpreads()\n const itemSpreads = createPersistentSpreads()\n const groupSpreads = createPersistentSpreads()\n let inputSpreadCleanup: Cleanup = () => {}\n\n const itemNodes = new Map<string, HTMLElement>()\n const itemForValue = new Map<string, ListItem>()\n const groupNodes = new Map<string, HTMLElement>()\n let listEl: HTMLElement | null = null\n let lastCollectionKey = \"\"\n let lastHighlight: string | null = null\n\n const isHidden = (): boolean => root.hasAttribute(\"hidden\")\n\n const collectionKey = (items: readonly ListItem[]): string =>\n items.map((i) => i.value).join(\"\\x00\")\n\n const clearInputSpread = (): void => {\n inputSpreadCleanup()\n inputSpreadCleanup = () => {}\n }\n\n const applyInputSpread = (): void => {\n inputSpreadCleanup()\n const api = handle.api()\n const inputProps = api.getInputProps() as Record<string, unknown>\n // The shell owns the input's placeholder; zag emits `placeholder: undefined`\n // when no prop is passed, which would strip our attribute on re-apply.\n delete inputProps.placeholder\n inputSpreadCleanup = spreadProps(ctx.searchInput, inputProps)\n }\n\n const visibilityObserver = new MutationObserver(() => {\n if (isHidden()) {\n // The stack's syncHighlight owns the overlay while a child view is on\n // top — don't clobber its ref-based highlight here.\n clearInputSpread()\n } else {\n applyInputSpread()\n }\n })\n visibilityObserver.observe(root, {\n attributes: true,\n attributeFilter: [\"hidden\"],\n })\n\n function buildItemBody(itemEl: HTMLElement, item: ListItem): void {\n const leading = resolveLeadingTile(item)\n fillRow(itemEl, {\n leading,\n label: item.label,\n subtitle: item.subtitle,\n trailing: item.shortcut,\n })\n }\n\n function resolveLeadingTile(item: ListItem): HTMLElement {\n if (item.entityChip) return renderKindIconTile(item.entityChip.entity.kind)\n if (item.leading) return createIconTile(item.leading())\n const fallback = createLucideElement(Circle)\n fallback.setAttribute(\"aria-hidden\", \"true\")\n fallback.setAttribute(\"class\", \"size-4\")\n return createIconTile(fallback)\n }\n\n function buildItems(): void {\n itemSpreads.cleanupAll()\n groupSpreads.cleanupAll()\n itemNodes.clear()\n itemForValue.clear()\n groupNodes.clear()\n listEl = null\n content.replaceChildren()\n\n const visible = filteredItems\n if (visible.length === 0) {\n content.append(\n createMutedText({\n class: \"p-4 text-center\",\n attrs: { \"data-uidex-list-empty\": \"\" },\n text: surface.emptyLabel ?? \"No matches\",\n })\n )\n return\n }\n\n const byGroup = new Map<string, ListItem[]>()\n for (const item of visible) {\n const key = item.group ?? \"\"\n const bucket = byGroup.get(key) ?? []\n bucket.push(item)\n byGroup.set(key, bucket)\n }\n\n const list = el(\"ul\", {\n class: \"flex flex-col gap-1\",\n attrs: { \"data-uidex-list-groups\": \"\" },\n })\n listEl = list\n\n for (const [group, items] of byGroup) {\n const groupEl = el(\"li\", {\n class: \"flex flex-col gap-1 py-1\",\n attrs: {\n \"data-uidex-list-group\": \"\",\n \"data-uidex-list-group-name\": group,\n },\n })\n const groupHeading = group\n ? el(\"h3\", { class: LIST_GROUP_LABEL_CLASS, text: group })\n : null\n const groupList = el(\"ul\", { class: \"flex flex-col\" })\n groupNodes.set(group || \"ungrouped\", groupList)\n for (const item of items) {\n const itemEl = el(\"li\", {\n class: cn(LIST_ITEM_CLASS, LIST_ITEM_STATE_CLASS),\n attrs: { \"data-uidex-list-item\": rowTag(item) },\n })\n itemNodes.set(item.value, itemEl)\n itemForValue.set(item.value, item)\n buildItemBody(itemEl, item)\n groupList.append(itemEl)\n }\n if (groupHeading) groupEl.append(groupHeading)\n groupEl.append(groupList)\n list.append(groupEl)\n }\n\n content.append(list)\n }\n\n function applyProps(): void {\n const api = handle.api()\n shellSpreads.apply(section, api.getRootProps() as Record<string, unknown>)\n if (!isHidden()) applyInputSpread()\n shellSpreads.apply(\n content,\n api.getContentProps() as Record<string, unknown>\n )\n if (listEl) {\n shellSpreads.apply(listEl, api.getListProps() as Record<string, unknown>)\n for (const [id, groupList] of groupNodes) {\n groupSpreads.apply(\n groupList,\n api.getItemGroupProps({ id }) as Record<string, unknown>\n )\n }\n }\n for (const [value, itemEl] of itemNodes) {\n const item = itemForValue.get(value)\n if (!item) continue\n itemSpreads.apply(\n itemEl,\n api.getItemProps({ item }) as Record<string, unknown>\n )\n }\n }\n\n function maybeScrollHighlight(): void {\n const api = handle.api()\n const next = api.highlightedValue ?? null\n if (next === lastHighlight) return\n lastHighlight = next\n if (!next) return\n const node = itemNodes.get(next)\n node?.scrollIntoView({ block: \"nearest\" })\n }\n\n function tick(): void {\n const wantKey = collectionKey(filteredItems)\n if (wantKey !== lastCollectionKey) {\n buildItems()\n lastCollectionKey = wantKey\n }\n applyProps()\n maybeScrollHighlight()\n }\n\n const unsub = handle.runner.subscribe(tick)\n\n buildItems()\n lastCollectionKey = collectionKey(filteredItems)\n applyProps()\n if (hasDefault && surface.defaultHighlight) {\n handle.api().setHighlightValue(surface.defaultHighlight)\n const highlightedEl = itemNodes.get(surface.defaultHighlight)\n highlightedEl?.scrollIntoView({ block: \"nearest\" })\n lastHighlight = surface.defaultHighlight\n }\n\n const cleanup = composeCleanups([\n handle.destroy,\n () => ctx.highlight.hide(),\n unsubScroll,\n () => scrollSpreads.cleanupAll(),\n scrollArea.destroy,\n () => visibilityObserver.disconnect(),\n clearInputSpread,\n unsub,\n () => {\n itemSpreads.cleanupAll()\n groupSpreads.cleanupAll()\n shellSpreads.cleanupAll()\n itemNodes.clear()\n itemForValue.clear()\n groupNodes.clear()\n root.replaceChildren()\n },\n ])\n\n const onSearch = (query: string): void => {\n const next = all.filter((item) => filterFn(item, query))\n const nextKey = collectionKey(next)\n if (nextKey === lastCollectionKey) return\n filteredItems = next\n handle.runner.update({ collection: makeCollection(filteredItems) })\n }\n\n return { cleanup, onSearch }\n}\n","import type { Cleanup, ViewContext } from \"../core/types\"\nimport type { ViewSurface } from \"../core/surface\"\nimport { renderCustomSurface } from \"./custom\"\nimport { renderDetailSurface } from \"./detail\"\nimport { renderFormSurface } from \"./form\"\nimport { renderListSurface } from \"./list\"\n\nexport interface MountedSurface {\n cleanup: Cleanup\n onSearch?: (query: string) => void\n}\n\nexport function renderSurface(\n surface: ViewSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n switch (surface.kind) {\n case \"list\":\n return renderListSurface(surface, ctx, root)\n case \"detail\":\n return renderDetailSurface(surface, ctx, root)\n case \"form\":\n return renderFormSurface(surface, ctx, root)\n case \"custom\":\n return renderCustomSurface(surface, ctx, root)\n }\n}\n","import type { EntityRef, Registry } from \"../../entities\"\nimport type { Cleanup } from \"../../internal/cleanup\"\nimport {\n createScrollArea,\n type ScrollAreaHandle,\n} from \"../../machines/scroll-area\"\nimport type { SessionStore } from \"../../session\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport { createPersistentSpreads } from \"../builder/spread-props\"\nimport { renderSurface, type MountedSurface } from \"../render\"\nimport type { ViewRegistrar } from \"./registry\"\nimport type {\n CloudAdapter,\n HighlightController,\n View,\n ViewContext,\n} from \"./types\"\n\nconst SCROLL_ROOT_CLASS = \"absolute inset-0\"\nconst HOST_CLASS = \"uidex-scrollbar h-full w-full\"\n\nexport interface MountedEntry {\n id: string\n ref: EntityRef | null\n view: View\n host: HTMLElement\n scrollRoot: HTMLElement\n scrollArea: ScrollAreaHandle\n scrollCleanup: Cleanup\n ctx: ViewContext\n mounted: MountedSurface\n}\n\nexport interface MountEntryDeps {\n container: HTMLElement\n searchInput: HTMLInputElement\n views: ViewRegistrar\n session: SessionStore\n registry: Registry\n cloud: CloudAdapter | null\n sdkCloud: CloudAdapter\n highlight: HighlightController\n nextScrollSeq(): number\n}\n\nexport function mountEntry(\n entry: ViewStackEntry,\n view: View,\n deps: MountEntryDeps\n): MountedEntry | null {\n const scrollRoot = document.createElement(\"div\")\n scrollRoot.setAttribute(\"data-uidex-view-scroll-root\", \"\")\n scrollRoot.className = SCROLL_ROOT_CLASS\n\n const host = document.createElement(\"div\")\n host.setAttribute(\"data-uidex-view-slot\", \"\")\n host.setAttribute(\"data-uidex-view-id\", view.id)\n host.className = HOST_CLASS\n scrollRoot.appendChild(host)\n deps.container.appendChild(scrollRoot)\n\n const seq = deps.nextScrollSeq()\n const scrollArea = createScrollArea({\n id: `uidex-view-scroll-${view.id}-${seq}`,\n getRootNode: () => {\n const rn = scrollRoot.getRootNode()\n if (rn instanceof ShadowRoot || rn instanceof Document) return rn\n return scrollRoot.ownerDocument ?? document\n },\n })\n\n const scrollSpreads = createPersistentSpreads()\n const applyScrollProps = (): void => {\n const api = scrollArea.api()\n scrollSpreads.apply(\n scrollRoot,\n api.getRootProps() as Record<string, unknown>\n )\n // Zag's getRootProps sets inline `position: relative`, which beats the\n // `absolute inset-0` utility class and collapses the viewport to 0px.\n scrollRoot.style.position = \"absolute\"\n scrollSpreads.apply(host, api.getViewportProps() as Record<string, unknown>)\n }\n applyScrollProps()\n const unsubScroll = scrollArea.runner.subscribe(applyScrollProps)\n const scrollCleanup: Cleanup = () => {\n unsubScroll()\n scrollSpreads.cleanupAll()\n }\n\n const ctx: ViewContext = {\n ref: entry.ref,\n registry: deps.registry,\n cloud: deps.cloud,\n sdkCloud: deps.sdkCloud,\n views: {\n list: () => deps.views.list(),\n },\n push: (target) => {\n if (!deps.views.get(target.id)) return\n deps.session.getState().actions.pushStack({\n id: target.id,\n ref: target.ref ?? null,\n })\n },\n pop: () => deps.session.getState().actions.popStack(),\n close: () => deps.session.getState().actions.clearStack(),\n navigate: (r: EntityRef) => deps.views.navigate(r),\n pinHighlight: (r: EntityRef) =>\n deps.session.getState().actions.pinHighlight(r),\n searchInput: deps.searchInput,\n highlight: deps.highlight,\n getStack: () => deps.session.getState().stack,\n }\n\n let surfaceResult: MountedSurface\n try {\n const surface = view.surface(ctx)\n surfaceResult = renderSurface(surface, ctx, host)\n } catch (err) {\n console.error(`[uidex] View \"${view.id}\" surface() threw`, err)\n scrollCleanup()\n scrollArea.destroy()\n scrollRoot.remove()\n return null\n }\n\n return {\n id: view.id,\n ref: entry.ref,\n view,\n host,\n scrollRoot,\n scrollArea,\n scrollCleanup,\n ctx,\n mounted: surfaceResult,\n }\n}\n\nexport function cleanupMountedEntry(entry: MountedEntry): void {\n try {\n entry.mounted.cleanup()\n } catch (err) {\n console.error(\"[uidex] View cleanup threw\", err)\n }\n entry.scrollCleanup()\n entry.scrollArea.destroy()\n entry.scrollRoot.remove()\n}\n\nexport function setEntryVisibility(\n entry: MountedEntry,\n visible: boolean\n): void {\n if (visible) {\n entry.host.removeAttribute(\"hidden\")\n entry.host.removeAttribute(\"inert\")\n entry.host.removeAttribute(\"aria-hidden\")\n } else {\n entry.host.setAttribute(\"hidden\", \"\")\n entry.host.setAttribute(\"inert\", \"\")\n entry.host.setAttribute(\"aria-hidden\", \"true\")\n }\n}\n","import { ArrowLeft, Search, createElement as createLucideElement } from \"lucide\"\nimport { Z_CHROME } from \"../../surface/constants\"\nimport { createActionsPopup, type ActionsPopupHandle } from \"./actions-popup\"\nimport { createKbd } from \"../../ui/kbd\"\n\nconst BACKDROP_CLASS = \"fixed inset-0 bg-black/32 backdrop-blur-sm\"\n\nconst VIEWPORT_CLASS =\n \"fixed inset-0 flex flex-col items-center px-4 py-[max(1rem,4vh)] sm:py-[10vh]\"\n\nconst FRAME_CLASS =\n \"relative flex h-[26rem] w-full min-w-0 max-w-xl flex-col rounded-2xl border bg-popover text-popover-foreground shadow-lg/5 outline-none not-dark:bg-clip-padding before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-2xl)-1px)] before:bg-muted/72 before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\"\n\nconst HEADER_CLASS = \"flex shrink-0 items-center gap-1 px-2.5 py-1.5\"\n\nconst SEARCH_WRAPPER_CLASS =\n \"flex h-9 w-full items-center gap-0 text-foreground\"\n\nconst BACK_BUTTON_CLASS =\n \"inline-flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-md bg-muted text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n\nconst BACK_ICON_CLASS = \"size-4 opacity-80\"\n\nconst SEARCH_ICON_WRAP_CLASS =\n \"inline-flex size-7 shrink-0 items-center justify-center text-muted-foreground\"\n\nconst SEARCH_ICON_CLASS = \"size-4 opacity-80\"\n\nconst LOGO_CLASS =\n \"inline-flex shrink-0 items-center justify-center text-muted-foreground\"\n\nconst LOGO_ICON_CLASS = \"size-4\"\n\nconst SEARCH_INPUT_CLASS =\n \"text-foreground min-w-0 flex-1 bg-transparent ps-2 pe-3 text-sm placeholder:text-muted-foreground focus:outline-none\"\n\nconst HEADER_TITLE_CLASS =\n \"text-foreground min-w-0 flex-1 truncate px-3 text-sm\"\n\nconst HOST_CONTAINER_CLASS =\n \"relative -mx-px min-h-0 flex-1 overflow-hidden rounded-t-xl border border-b-0 bg-popover bg-clip-padding shadow-xs/5 [clip-path:inset(0_1px)] before:pointer-events-none before:absolute before:inset-0 before:rounded-t-[calc(var(--radius-xl)-1px)]\"\n\nconst FOOTER_CLASS =\n \"text-muted-foreground flex items-center justify-between gap-2 rounded-b-[calc(var(--radius-2xl)-1px)] border-t px-5 py-3 text-xs\"\n\nconst FOOTER_SIDE_CLASS = \"flex min-w-0 items-center gap-2\"\n\nconst HINT_CLASS =\n \"inline-flex items-center gap-1.5 text-xs text-muted-foreground\"\n\nconst ACTIONS_TRIGGER_CLASS =\n \"inline-flex h-6 shrink-0 cursor-pointer items-center gap-1.5 rounded-md px-2 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n\nexport interface StackShellCallbacks {\n onBack(): void\n onBackdropClick(): void\n onSearchInput(value: string): void\n}\n\nexport interface StackShell {\n backdrop: HTMLElement\n frame: HTMLElement\n header: HTMLElement\n backBtn: HTMLButtonElement\n logo: HTMLElement\n searchIcon: HTMLElement\n headerTitle: HTMLElement\n searchInput: HTMLInputElement\n hostContainer: HTMLElement\n footerLeft: HTMLElement\n footerRight: HTMLElement\n actionsPopup: ActionsPopupHandle\n destroy(): void\n}\n\nexport function createStackShell(\n container: HTMLElement,\n callbacks: StackShellCallbacks\n): StackShell {\n const backdrop = document.createElement(\"div\")\n backdrop.setAttribute(\"data-uidex-view-backdrop\", \"\")\n backdrop.className = BACKDROP_CLASS\n backdrop.style.zIndex = String(Z_CHROME)\n\n const frame = document.createElement(\"div\")\n frame.setAttribute(\"data-uidex-view-stack-frame\", \"\")\n frame.className = FRAME_CLASS\n\n const header = document.createElement(\"header\")\n header.setAttribute(\"data-uidex-view-stack-header\", \"\")\n header.className = HEADER_CLASS\n\n const backBtn = document.createElement(\"button\")\n backBtn.setAttribute(\"type\", \"button\")\n backBtn.setAttribute(\"data-uidex-view-stack-back\", \"\")\n backBtn.setAttribute(\"aria-label\", \"Back\")\n backBtn.className = BACK_BUTTON_CLASS\n const backIcon = createLucideElement(ArrowLeft)\n backIcon.setAttribute(\"aria-hidden\", \"true\")\n backIcon.setAttribute(\"class\", BACK_ICON_CLASS)\n backBtn.append(backIcon)\n backBtn.hidden = true\n const onBackClick = () => callbacks.onBack()\n backBtn.addEventListener(\"click\", onBackClick)\n\n const logo = createUidexLogo()\n logo.setAttribute(\"data-uidex-view-stack-footer-logo\", \"\")\n const searchIcon = createSearchIcon()\n\n const searchInput = document.createElement(\"input\")\n searchInput.setAttribute(\"type\", \"text\")\n searchInput.setAttribute(\"data-uidex-search-input\", \"\")\n searchInput.setAttribute(\"placeholder\", \"Search for command...\")\n searchInput.className = SEARCH_INPUT_CLASS\n const onSearchInput = () => callbacks.onSearchInput(searchInput.value)\n searchInput.addEventListener(\"input\", onSearchInput)\n\n const headerTitle = document.createElement(\"div\")\n headerTitle.setAttribute(\"data-uidex-view-stack-title\", \"\")\n headerTitle.className = HEADER_TITLE_CLASS\n headerTitle.hidden = true\n\n const searchWrap = document.createElement(\"div\")\n searchWrap.setAttribute(\"data-uidex-view-stack-search\", \"\")\n searchWrap.className = SEARCH_WRAPPER_CLASS\n searchWrap.append(backBtn, searchIcon, searchInput, headerTitle)\n header.append(searchWrap)\n\n const hostContainer = document.createElement(\"div\")\n hostContainer.setAttribute(\"data-uidex-view-stack-hosts\", \"\")\n hostContainer.className = HOST_CONTAINER_CLASS\n\n const footer = document.createElement(\"footer\")\n footer.setAttribute(\"data-uidex-view-stack-footer\", \"\")\n footer.className = FOOTER_CLASS\n\n const footerLeft = document.createElement(\"div\")\n footerLeft.setAttribute(\"data-uidex-view-stack-footer-left\", \"\")\n footerLeft.className = FOOTER_SIDE_CLASS\n\n const footerRight = document.createElement(\"div\")\n footerRight.setAttribute(\"data-uidex-view-stack-footer-right\", \"\")\n footerRight.className = FOOTER_SIDE_CLASS\n\n footer.append(footerLeft, footerRight)\n\n const actionsPopup = createActionsPopup()\n\n frame.append(header, hostContainer, footer, actionsPopup.element)\n\n const viewport = document.createElement(\"div\")\n viewport.setAttribute(\"data-uidex-view-viewport\", \"\")\n viewport.className = VIEWPORT_CLASS\n viewport.style.zIndex = String(Z_CHROME)\n viewport.append(frame)\n const onViewportClick = (e: MouseEvent) => {\n if (e.target === viewport) callbacks.onBackdropClick()\n }\n viewport.addEventListener(\"click\", onViewportClick)\n\n container.append(backdrop, viewport)\n\n return {\n backdrop,\n frame,\n header,\n backBtn,\n logo,\n searchIcon,\n headerTitle,\n searchInput,\n hostContainer,\n footerLeft,\n footerRight,\n actionsPopup,\n destroy() {\n backBtn.removeEventListener(\"click\", onBackClick)\n viewport.removeEventListener(\"click\", onViewportClick)\n searchInput.removeEventListener(\"input\", onSearchInput)\n actionsPopup.destroy()\n viewport.remove()\n backdrop.remove()\n },\n }\n}\n\nfunction createSearchIcon(): HTMLElement {\n const wrap = document.createElement(\"span\")\n wrap.setAttribute(\"data-uidex-view-stack-search-icon\", \"\")\n wrap.setAttribute(\"aria-hidden\", \"true\")\n wrap.className = SEARCH_ICON_WRAP_CLASS\n const icon = createLucideElement(Search)\n icon.setAttribute(\"aria-hidden\", \"true\")\n icon.setAttribute(\"class\", SEARCH_ICON_CLASS)\n wrap.append(icon)\n return wrap\n}\n\nfunction createUidexLogo(): HTMLElement {\n const wrap = document.createElement(\"span\")\n wrap.setAttribute(\"data-uidex-view-stack-logo\", \"\")\n wrap.setAttribute(\"aria-hidden\", \"true\")\n wrap.className = LOGO_CLASS\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\")\n svg.setAttribute(\"viewBox\", \"0 0 30 36\")\n svg.setAttribute(\"fill\", \"currentColor\")\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"class\", LOGO_ICON_CLASS)\n const back = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\")\n back.setAttribute(\"x\", \"1\")\n back.setAttribute(\"y\", \"5\")\n back.setAttribute(\"width\", \"22\")\n back.setAttribute(\"height\", \"28\")\n back.setAttribute(\"rx\", \"3\")\n back.setAttribute(\"fill\", \"currentColor\")\n back.setAttribute(\"opacity\", \"0.18\")\n back.setAttribute(\"transform\", \"rotate(-6, 12, 19)\")\n const front = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\")\n front.setAttribute(\"x\", \"7\")\n front.setAttribute(\"y\", \"1\")\n front.setAttribute(\"width\", \"22\")\n front.setAttribute(\"height\", \"28\")\n front.setAttribute(\"rx\", \"3\")\n front.setAttribute(\"fill\", \"currentColor\")\n svg.append(back, front)\n wrap.append(svg)\n return wrap\n}\n\nexport function createHint(key: string, label: string): HTMLElement {\n const wrap = document.createElement(\"span\")\n wrap.className = HINT_CLASS\n const text = document.createElement(\"span\")\n text.textContent = label\n const kbd = createKbd({ text: key })\n wrap.append(text, kbd)\n return wrap\n}\n\nexport function createFooterDivider(): HTMLElement {\n const sep = document.createElement(\"span\")\n sep.setAttribute(\"aria-hidden\", \"true\")\n sep.className = \"mx-1 h-4 w-px bg-border\"\n return sep\n}\n\nexport function createActionsButton(onClick: () => void): HTMLButtonElement {\n const btn = document.createElement(\"button\")\n btn.setAttribute(\"type\", \"button\")\n btn.setAttribute(\"data-uidex-actions-trigger\", \"\")\n btn.setAttribute(\"aria-label\", \"Actions\")\n btn.className = ACTIONS_TRIGGER_CLASS\n const text = document.createElement(\"span\")\n text.textContent = \"Actions\"\n const kbd = createKbd({ text: \"⌘K\" })\n btn.append(text, kbd)\n btn.addEventListener(\"click\", onClick)\n return btn\n}\n","import * as menu from \"@zag-js/menu\"\nimport { createMachineHandle, type MachineHandle } from \"./machine\"\nimport { normalizeProps, type DomProps } from \"./normalize\"\n\nexport type MenuProps = menu.Props\nexport type MenuApi = menu.Api<DomProps>\nexport type MenuHandle = MachineHandle<MenuApi>\n\nexport function createMenu(props: Partial<MenuProps> = {}): MenuHandle {\n return createMachineHandle(menu.machine, menu.connect, normalizeProps, props)\n}\n\nexport { menu }\n","import { cn } from \"../internal/cn\"\nimport { composeCleanups, type Cleanup } from \"../internal/cleanup\"\nimport { el } from \"../internal/el\"\nimport { createMenu as createMenuMachine, menu } from \"../machines/menu\"\nimport { createPersistentSpreads } from \"../views/builder/spread-props\"\nimport { createCommandShortcut } from \"./kbd\"\nimport { LIST_GROUP_LABEL_CLASS } from \"./list-item\"\n\nexport const MENU_POPUP_CLASS =\n \"bg-popover text-popover-foreground shadow-lg border-border flex min-w-32 flex-col overflow-hidden rounded-lg border outline-none\"\n\nexport const MENU_LIST_CLASS = \"flex flex-col p-1\"\n\nexport const MENU_ITEM_CLASS =\n \"text-foreground data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-60 flex min-h-7 cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-sm outline-none\"\n\nexport const MENU_GROUP_LABEL_CLASS = LIST_GROUP_LABEL_CLASS\n\nexport const MENU_SEPARATOR_CLASS = \"bg-border mx-2 my-1 h-px\"\n\nexport interface MenuItemDescriptor {\n id: string\n label: string\n shortcut?: string\n disabled?: boolean\n trailing?: Node | null\n onSelect?: () => void\n}\n\nexport interface CreateUiMenuOptions {\n id?: string\n getRootNode?: () => ShadowRoot | Document\n items: MenuItemDescriptor[]\n label?: string\n ariaLabel?: string\n onSelect?(itemId: string): void\n}\n\nexport interface UiMenuHandle {\n /** Popup root; caller positions this inside its own container. */\n readonly popup: HTMLElement\n /** The ul element carrying item rows. */\n readonly list: HTMLElement\n open(): void\n close(): void\n isOpen(): boolean\n /** Forward a keydown from an owned surface (Arrow/Enter/Escape/typeahead). */\n handleKey(e: KeyboardEvent): boolean\n setItems(next: MenuItemDescriptor[]): void\n destroy(): void\n}\n\n// `getPositionerProps` is deliberately skipped so callers own absolute\n// positioning inside their own containers (the palette shell frame, etc.).\nexport function createUiMenu(options: CreateUiMenuOptions): UiMenuHandle {\n let items = options.items\n const spreads = createPersistentSpreads()\n let lastKey = \"\"\n let rowByValue = new Map<string, HTMLElement>()\n const cleanups: Cleanup[] = []\n\n const popup = el(\"div\", {\n class: cn(MENU_POPUP_CLASS, \"hidden\"),\n attrs: { \"data-uidex-primitive\": \"menu\", \"data-slot\": \"menu-popup\" },\n })\n\n const list = el(\"ul\", {\n class: MENU_LIST_CLASS,\n attrs: {\n role: \"menu\",\n \"aria-label\": options.ariaLabel ?? options.label ?? \"Menu\",\n \"data-slot\": \"menu-list\",\n },\n })\n\n popup.append(list)\n\n const handle = createMenuMachine({\n id: options.id,\n getRootNode: options.getRootNode,\n closeOnSelect: true,\n onSelect: (details) => {\n const picked = items.find((it) => it.id === details.value)\n picked?.onSelect?.()\n options.onSelect?.(details.value)\n },\n onOpenChange: ({ open }) => {\n popup.classList.toggle(\"hidden\", !open)\n },\n })\n\n function rebuild(): void {\n spreads.cleanupAll()\n list.replaceChildren()\n rowByValue = new Map()\n for (const item of items) {\n const row = el(\"li\", {\n class: MENU_ITEM_CLASS,\n attrs: {\n \"data-slot\": \"menu-item\",\n \"data-uidex-menu-item\": item.id,\n },\n })\n const label = el(\"span\", {\n class: \"flex-1 truncate\",\n text: item.label,\n })\n row.append(label)\n if (item.trailing) row.append(item.trailing)\n else if (item.shortcut) {\n row.append(createCommandShortcut({ text: item.shortcut }))\n }\n rowByValue.set(item.id, row)\n list.append(row)\n }\n lastKey = items.map((i) => i.id).join(\"\\x00\")\n }\n\n function applyProps(): void {\n const api = handle.api()\n spreads.apply(list, api.getContentProps() as Record<string, unknown>)\n for (const item of items) {\n const row = rowByValue.get(item.id)\n if (!row) continue\n spreads.apply(\n row,\n api.getItemProps({\n value: item.id,\n valueText: item.label,\n disabled: item.disabled ?? false,\n }) as Record<string, unknown>\n )\n }\n }\n\n function tick(): void {\n const wantKey = items.map((i) => i.id).join(\"\\x00\")\n if (wantKey !== lastKey) rebuild()\n applyProps()\n }\n\n rebuild()\n applyProps()\n\n const unsub = handle.runner.subscribe(tick)\n cleanups.push(unsub)\n\n function nextId(currentId: string | null, delta: number): string | null {\n if (items.length === 0) return null\n if (!currentId) {\n return delta > 0 ? items[0].id : items[items.length - 1].id\n }\n const idx = items.findIndex((it) => it.id === currentId)\n if (idx === -1) return items[0].id\n const next = (idx + delta + items.length) % items.length\n return items[next].id\n }\n\n function runHighlighted(): void {\n const api = handle.api()\n const cur = api.highlightedValue\n if (!cur) return\n const item = items.find((it) => it.id === cur)\n if (!item || item.disabled) return\n item.onSelect?.()\n options.onSelect?.(cur)\n api.setOpen(false)\n }\n\n function handleKey(e: KeyboardEvent): boolean {\n const api = handle.api()\n if (!api.open) return false\n switch (e.key) {\n case \"ArrowDown\": {\n const next = nextId(api.highlightedValue, 1)\n if (next) api.setHighlightedValue(next)\n return true\n }\n case \"ArrowUp\": {\n const next = nextId(api.highlightedValue, -1)\n if (next) api.setHighlightedValue(next)\n return true\n }\n case \"Home\": {\n if (items[0]) api.setHighlightedValue(items[0].id)\n return true\n }\n case \"End\": {\n const last = items[items.length - 1]\n if (last) api.setHighlightedValue(last.id)\n return true\n }\n case \"Enter\":\n runHighlighted()\n return true\n case \"Escape\":\n api.setOpen(false)\n return true\n default:\n return false\n }\n }\n\n return {\n popup,\n list,\n open: () => handle.api().setOpen(true),\n close: () => handle.api().setOpen(false),\n isOpen: () => handle.api().open,\n handleKey,\n setItems(next) {\n const wantKey = next.map((i) => i.id).join(\"\\x00\")\n items = next\n if (wantKey === lastKey) return\n rebuild()\n applyProps()\n },\n destroy: () => {\n composeCleanups(cleanups)()\n spreads.cleanupAll()\n handle.destroy()\n popup.remove()\n },\n }\n}\n\nexport { menu as menuMachine }\n","import { el } from \"../../internal/el\"\nimport { createKbd } from \"../../ui/kbd\"\nimport {\n createUiMenu,\n MENU_GROUP_LABEL_CLASS,\n MENU_SEPARATOR_CLASS,\n type MenuItemDescriptor,\n type UiMenuHandle,\n} from \"../../ui/menu\"\nimport type { ShellAction } from \"./types\"\n\nconst POPUP_POSITION_CLASS = \"absolute bottom-12 right-3 z-10 w-56\"\n\nexport interface ActionsPopupHandle {\n readonly element: HTMLElement\n open(actions: ShellAction[]): void\n close(): void\n isOpen(): boolean\n handleKey(e: KeyboardEvent): boolean\n destroy(): void\n}\n\nfunction toDescriptors(actions: ShellAction[]): MenuItemDescriptor[] {\n return actions.map((action) => ({\n id: action.id,\n label: action.label,\n shortcut: action.shortcut,\n // Keep the pill-kbd look inside the actions popup; the menu's default\n // shortcut renders as the lighter `command-shortcut` style.\n trailing: action.shortcut ? createKbd({ text: action.shortcut }) : null,\n onSelect: () => void action.perform(),\n }))\n}\n\nexport function createActionsPopup(): ActionsPopupHandle {\n const menu: UiMenuHandle = createUiMenu({\n items: [],\n ariaLabel: \"Actions\",\n })\n menu.popup.classList.add(...POPUP_POSITION_CLASS.split(\" \"))\n\n const heading = el(\"div\", {\n class: MENU_GROUP_LABEL_CLASS,\n text: \"Actions\",\n attrs: { \"data-slot\": \"menu-group-label\" },\n })\n const separator = el(\"div\", {\n class: MENU_SEPARATOR_CLASS,\n attrs: { role: \"separator\" },\n })\n menu.popup.prepend(separator)\n menu.popup.prepend(heading)\n\n return {\n element: menu.popup,\n open(actions) {\n menu.setItems(toDescriptors(actions))\n menu.open()\n },\n close: menu.close,\n isOpen: menu.isOpen,\n handleKey: (e) => menu.handleKey(e),\n destroy: menu.destroy,\n }\n}\n","import { KIND_STYLE, type Registry } from \"../../entities\"\nimport { detectDev } from \"../../internal/dev\"\nimport type { SessionStore } from \"../../session\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport { renderKindChip } from \"../primitives/kind-chip\"\nimport type { ActionsPopupHandle } from \"./actions-popup\"\nimport {\n cleanupMountedEntry,\n mountEntry,\n setEntryVisibility,\n type MountedEntry,\n} from \"./mount\"\nimport type { ViewRegistrar } from \"./registry\"\nimport {\n createActionsButton,\n createFooterDivider,\n createHint,\n createStackShell,\n type StackShell,\n} from \"./shell\"\nimport type {\n CloudAdapter,\n HighlightController,\n ShellAction,\n ShellHint,\n View,\n ViewContext,\n} from \"./types\"\n\nconst SOFT_STACK_CAP = 10\n\nexport interface ViewStackOptions {\n container: HTMLElement\n views: ViewRegistrar\n session: SessionStore\n registry: Registry\n cloud?: CloudAdapter | null\n sdkCloud: CloudAdapter\n highlight: HighlightController\n globalActions?: (ctx: ViewContext) => ShellAction[]\n dev?: boolean\n}\n\nexport interface ViewStack {\n /**\n * The actions popup belonging to the currently mounted stack shell, or\n * `null` when the shell is not mounted. Exposed so the unified shadow-root\n * keydown handler can intercept keys while the popup is open.\n */\n getActionsPopup(): ActionsPopupHandle | null\n destroy(): void\n}\n\nfunction resolveViewFocusTarget(entry: MountedEntry): HTMLElement | null {\n const fn = entry.view.focusTarget\n if (!fn) return null\n try {\n const target = fn(entry.host, entry.ctx)\n if (target && entry.host.contains(target)) return target\n } catch (err) {\n console.error(`[uidex] view \"${entry.view.id}\" focusTarget() threw`, err)\n }\n return null\n}\n\nfunction focusTopAfterChange(\n entry: MountedEntry,\n searchInput: HTMLInputElement\n): void {\n const preferred = resolveViewFocusTarget(entry)\n const target =\n preferred && preferred !== searchInput ? preferred : searchInput\n const focus = () => {\n try {\n target.focus({ preventScroll: true })\n } catch {\n /* ignore */\n }\n }\n focus()\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(focus)\n }\n}\n\nfunction sameRef(a: MountedEntry[\"ref\"], b: MountedEntry[\"ref\"]): boolean {\n if (a === b) return true\n if (a === null || b === null) return false\n return a.kind === b.kind && a.id === b.id\n}\n\nfunction resolveHints(view: View, ctx: ViewContext): ShellHint[] {\n const h = view.hints\n if (!h) return []\n if (typeof h === \"function\") {\n try {\n return h(ctx) ?? []\n } catch (err) {\n console.error(`[uidex] view \"${view.id}\" hints() threw`, err)\n return []\n }\n }\n return h\n}\n\nfunction resolveTitle(view: View, ctx: ViewContext): string {\n const t = view.title\n if (!t) return \"\"\n if (typeof t === \"function\") {\n try {\n return t(ctx) ?? \"\"\n } catch (err) {\n console.error(`[uidex] view \"${view.id}\" title() threw`, err)\n return \"\"\n }\n }\n return t\n}\n\nfunction resolveActions(\n view: View,\n ctx: ViewContext,\n globalActions?: (ctx: ViewContext) => ShellAction[]\n): ShellAction[] {\n const result: ShellAction[] = []\n const fn = view.actions\n if (fn) {\n try {\n const viewActions = fn(ctx) ?? []\n result.push(...viewActions)\n } catch (err) {\n console.error(`[uidex] view \"${view.id}\" actions() threw`, err)\n }\n }\n if (globalActions) {\n try {\n const globals = globalActions(ctx) ?? []\n result.push(...globals)\n } catch (err) {\n console.error(`[uidex] globalActions() threw`, err)\n }\n }\n return result\n}\n\nexport function createViewStack(options: ViewStackOptions): ViewStack {\n const { container, views, session, registry, highlight, sdkCloud } = options\n const cloud = options.cloud ?? null\n const dev = options.dev ?? detectDev()\n\n const mounted: MountedEntry[] = []\n\n let shell: StackShell | null = null\n let warnedForDepth = 0\n let lastStack: readonly ViewStackEntry[] | null = null\n let pendingFallbackQuery: string | null = null\n let scrollAreaSeq = 0\n\n function ensureShell(): StackShell {\n if (shell) return shell\n shell = createStackShell(container, {\n onBack: () => session.getState().actions.popStack(),\n onBackdropClick: () => session.getState().actions.clearStack(),\n onSearchInput: (value) => {\n const top = mounted[mounted.length - 1]\n if (!top) return\n if (top.mounted.onSearch) {\n top.mounted.onSearch(value)\n return\n }\n if (top.view.id === \"command-palette\") return\n pendingFallbackQuery = value\n session\n .getState()\n .actions.pushStack({ id: \"command-palette\", ref: null })\n },\n })\n return shell\n }\n\n function destroyShell(): void {\n shell?.destroy()\n shell = null\n pendingFallbackQuery = null\n }\n\n function syncHighlight(): void {\n const top = mounted[mounted.length - 1]\n if (!top || !top.view.matches || !top.ctx.ref) {\n highlight.hide()\n return\n }\n highlight.show(top.ctx.ref, {\n color: KIND_STYLE[top.ctx.ref.kind].color,\n })\n }\n\n function updateChrome(): void {\n if (!shell) return\n const top = mounted[mounted.length - 1]\n if (!top) return\n\n const atRoot = mounted.length <= 1\n shell.backBtn.hidden = atRoot\n shell.searchIcon.hidden = !atRoot\n\n const searchable = top.view.searchable !== false\n shell.searchInput.hidden = !searchable\n const titleText = searchable ? \"\" : resolveTitle(top.view, top.ctx)\n shell.headerTitle.textContent = titleText\n shell.headerTitle.hidden = searchable || !titleText\n\n shell.footerLeft.replaceChildren()\n const refEntity = top.ctx.ref\n ? top.ctx.registry.get(top.ctx.ref.kind, top.ctx.ref.id)\n : null\n if (refEntity) {\n shell.footerLeft.append(\n renderKindChip({\n entity: refEntity,\n withKindName: true,\n })\n )\n } else {\n shell.footerLeft.append(shell.logo)\n }\n\n shell.footerRight.replaceChildren()\n // Only surface the primary \"Enter\" hint for the top view — arrows/tab/esc\n // are implicit keyboard conventions and don't need chrome explaining them.\n const enterHint = resolveHints(top.view, top.ctx).find((h) =>\n h.key.includes(\"↵\")\n )\n if (enterHint) {\n shell.footerRight.append(createHint(enterHint.key, enterHint.label))\n }\n\n const actions = resolveActions(top.view, top.ctx, options.globalActions)\n if (actions.length > 0) {\n if (enterHint) shell.footerRight.append(createFooterDivider())\n shell.footerRight.append(\n createActionsButton(() => shell?.actionsPopup.open(actions))\n )\n }\n }\n\n function render(): void {\n const stack = session.getState().stack\n if (stack === lastStack) return\n lastStack = stack\n\n if (dev && stack.length > SOFT_STACK_CAP && stack.length > warnedForDepth) {\n console.warn(\n `[uidex] View stack depth ${stack.length} exceeds soft cap of ${SOFT_STACK_CAP}`\n )\n warnedForDepth = stack.length\n }\n if (stack.length <= SOFT_STACK_CAP) warnedForDepth = 0\n\n const resolved: Array<{ entry: ViewStackEntry; view: View }> = []\n for (const entry of stack) {\n const view = views.get(entry.id)\n if (view) resolved.push({ entry, view })\n }\n\n const priorTop = mounted[mounted.length - 1] ?? null\n\n let commonPrefix = 0\n while (\n commonPrefix < resolved.length &&\n commonPrefix < mounted.length &&\n mounted[commonPrefix].id === resolved[commonPrefix].view.id &&\n sameRef(mounted[commonPrefix].ref, resolved[commonPrefix].entry.ref)\n ) {\n commonPrefix++\n }\n\n const popped = mounted.splice(commonPrefix)\n for (let i = popped.length - 1; i >= 0; i--) {\n cleanupMountedEntry(popped[i])\n }\n\n if (resolved.length > commonPrefix) {\n const active = ensureShell()\n for (let i = commonPrefix; i < resolved.length; i++) {\n const record = mountEntry(resolved[i].entry, resolved[i].view, {\n container: active.hostContainer,\n searchInput: active.searchInput,\n views,\n session,\n registry,\n cloud,\n sdkCloud,\n highlight,\n nextScrollSeq: () => ++scrollAreaSeq,\n })\n if (record) mounted.push(record)\n }\n }\n\n if (shell?.actionsPopup.isOpen() && popped.length > 0) {\n shell.actionsPopup.close()\n }\n\n if (mounted.length === 0) {\n destroyShell()\n highlight.hide()\n return\n }\n const topIndex = mounted.length - 1\n for (let i = 0; i < mounted.length; i++) {\n setEntryVisibility(mounted[i], i === topIndex)\n }\n updateChrome()\n syncHighlight()\n\n const newTop = mounted[topIndex]\n if (newTop !== priorTop && shell) {\n const fallbackQuery = pendingFallbackQuery\n pendingFallbackQuery = null\n const initialQuery = fallbackQuery ?? \"\"\n if (fallbackQuery === null) {\n shell.searchInput.value = \"\"\n }\n try {\n newTop.mounted.onSearch?.(initialQuery)\n } catch (err) {\n console.error(`[uidex] view \"${newTop.view.id}\" onSearch threw`, err)\n }\n focusTopAfterChange(newTop, shell.searchInput)\n }\n }\n\n render()\n const unsubscribe = session.subscribe(render)\n\n return {\n getActionsPopup() {\n return shell?.actionsPopup ?? null\n },\n destroy() {\n unsubscribe()\n while (mounted.length > 0) {\n const entry = mounted.pop()!\n cleanupMountedEntry(entry)\n }\n destroyShell()\n highlight.hide()\n },\n }\n}\n","import { Compass, createElement as createLucideElement } from \"lucide\"\nimport type { EntityRef, Page } from \"../../entities\"\nimport { matchesQuery } from \"../builder/filter\"\nimport { buildPageRouteMap, collectPageContext } from \"../builder/page-context\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { PALETTE_GROUPS } from \"../labels\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\ntype PaletteItemPayload =\n | { type: \"view\"; id: string; ref?: EntityRef | null }\n | { type: \"entity\"; ref: EntityRef }\n\ninterface PaletteItem extends ListItem {\n payload: PaletteItemPayload\n}\n\nconst CURRENT_PAGE_GROUP = PALETTE_GROUPS.commands\n\nfunction pageDetailsRow(\n page: Page,\n pageRoutes: ReadonlyMap<string, string>\n): PaletteItem {\n const ref: EntityRef = { kind: \"page\", id: page.id }\n const item: PaletteItem = {\n value: `entity:${ref.kind}:${ref.id}`,\n label: \"Page Details\",\n group: CURRENT_PAGE_GROUP,\n tag: `${ref.kind}:${ref.id}`,\n preview: ref,\n entityChip: { entity: page },\n payload: { type: \"entity\", ref },\n }\n const path = pageRoutes.get(page.id)\n if (path) item.subtitle = path\n return item\n}\n\nfunction explorePageRow(totalOnPage: number): PaletteItem {\n return {\n value: `view:${BUILT_IN_VIEW_IDS.explorePage}`,\n label: \"Explore page\",\n subtitle: totalOnPage === 1 ? \"1 item\" : `${totalOnPage} items`,\n group: CURRENT_PAGE_GROUP,\n tag: BUILT_IN_VIEW_IDS.explorePage,\n leading: () => createLucideElement(Compass),\n payload: { type: \"view\", id: BUILT_IN_VIEW_IDS.explorePage },\n }\n}\n\nfunction collectNavigation(ctx: ViewContext): PaletteItem[] {\n const out: PaletteItem[] = []\n for (const view of ctx.views.list()) {\n if (view.id === BUILT_IN_VIEW_IDS.commandPalette) continue\n // Explore page is reachable from the root row above; don't duplicate.\n if (view.id === BUILT_IN_VIEW_IDS.explorePage) continue\n if (!view.palette) continue\n out.push({\n value: `view:${view.id}`,\n label: view.palette.label,\n group: view.palette.group ?? PALETTE_GROUPS.commands,\n shortcut: view.palette.shortcut,\n tag: view.id,\n leading: view.palette.icon,\n payload: { type: \"view\", id: view.id },\n })\n }\n return out\n}\n\nexport const commandPaletteView: View = {\n id: BUILT_IN_VIEW_IDS.commandPalette,\n palette: { label: \"Command palette\", shortcut: \"Cmd+K\" },\n title: \"Command palette\",\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx): ListSurface => {\n const pageCtx = collectPageContext(ctx)\n const pageRoutes = buildPageRouteMap(ctx)\n\n const items: PaletteItem[] = []\n\n if (pageCtx.pageEntity) {\n items.push(pageDetailsRow(pageCtx.pageEntity, pageRoutes))\n }\n\n const onPageCount = pageCtx.composed.length + pageCtx.dom.length\n if (onPageCount > 0) items.push(explorePageRow(onPageCount))\n\n items.push(...collectNavigation(ctx))\n\n const initialHighlight = ctx.ref\n ? `entity:${ctx.ref.kind}:${ctx.ref.id}`\n : undefined\n\n const filter = (item: ListItem, query: string): boolean => {\n const palette = item as PaletteItem\n const rawId =\n palette.payload.type === \"entity\" ? palette.payload.ref.id : \"\"\n return matchesQuery(`${item.label} ${rawId} ${item.group ?? \"\"}`, query)\n }\n\n return {\n kind: \"list\",\n id: \"uidex-command-palette\",\n items,\n defaultHighlight: initialHighlight,\n filter,\n onSelect: (item) => {\n const palette = item as PaletteItem\n if (palette.payload.type === \"view\") {\n ctx.push({ id: palette.payload.id, ref: palette.payload.ref ?? null })\n return\n }\n ctx.navigate(palette.payload.ref)\n },\n }\n },\n}\n","import type { Entity, EntityRef, Page } from \"../../entities\"\nimport {\n SURFACE_IGNORE_SELECTOR,\n UIDEX_ATTR_TO_KIND,\n} from \"../../surface/constants\"\nimport type { ViewContext } from \"../core/types\"\n\nconst ON_THIS_PAGE_SELECTOR = UIDEX_ATTR_TO_KIND.map(\n ([attr]) => `[${attr}]`\n).join(\",\")\n\nfunction routePatternToRegex(pattern: string): RegExp {\n if (pattern === \"/\") return /^\\/$/\n const parts = pattern.split(\"/\").filter(Boolean)\n const regexParts = parts.map((seg) => {\n if (/^\\[\\.{3}[^\\]]+\\]$/.test(seg)) return \".+\"\n if (/^\\[[^\\]]+\\]$/.test(seg)) return \"[^/]+\"\n return seg.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n })\n return new RegExp(`^/${regexParts.join(\"/\")}/?$`)\n}\n\n/** Resolve the page entity for the current URL by walking the registry's routes. */\nexport function findCurrentPageId(ctx: ViewContext): string | null {\n if (typeof location === \"undefined\") return null\n const pathname = location.pathname || \"/\"\n const routes = ctx.registry.list(\"route\")\n let best: { path: string; page: string } | null = null\n for (const route of routes) {\n if (!routePatternToRegex(route.path).test(pathname)) continue\n if (!best || route.path.length > best.path.length) {\n best = { path: route.path, page: route.page }\n }\n }\n return best?.page ?? null\n}\n\n/** First route path per page id, for subtitle rendering in palette rows. */\nexport function buildPageRouteMap(\n ctx: ViewContext\n): ReadonlyMap<string, string> {\n const map = new Map<string, string>()\n for (const route of ctx.registry.list(\"route\")) {\n if (!map.has(route.page)) map.set(route.page, route.path)\n }\n return map\n}\n\nexport interface PageEntityHit {\n entity: Entity\n ref: EntityRef\n /** DOM node that surfaced this entity, if discovered via `data-uidex*` scan. */\n node?: Element | null\n}\n\nexport interface PageContext {\n pageId: string | null\n pageEntity: Page | null\n /** Features / widgets the page entity declares via `uidex.composes`. */\n composed: PageEntityHit[]\n /** Entities discovered by scanning the DOM for `data-uidex*` attributes. */\n dom: PageEntityHit[]\n}\n\n/**\n * Collect the entities relevant to the current page: the page entity itself,\n * its declared composes (features + widgets), and anything discovered via the\n * DOM scan. Dedup by `kind:id`; the page entity always wins over DOM dups.\n */\nexport function collectPageContext(ctx: ViewContext): PageContext {\n const seen = new Set<string>()\n const composed: PageEntityHit[] = []\n const dom: PageEntityHit[] = []\n\n const pageId = findCurrentPageId(ctx)\n const pageEntity = pageId ? (ctx.registry.get(\"page\", pageId) ?? null) : null\n\n if (pageEntity) {\n seen.add(`page:${pageEntity.id}`)\n for (const ref of pageEntity.meta?.composes ?? []) {\n if (ref.kind !== \"feature\" && ref.kind !== \"widget\") continue\n const entity = ctx.registry.get(ref.kind, ref.id)\n if (!entity) continue\n const key = `${ref.kind}:${ref.id}`\n if (seen.has(key)) continue\n seen.add(key)\n composed.push({ entity, ref })\n }\n }\n\n if (typeof document !== \"undefined\") {\n const nodes = document.querySelectorAll<HTMLElement>(ON_THIS_PAGE_SELECTOR)\n for (const node of nodes) {\n if (node.closest(SURFACE_IGNORE_SELECTOR)) continue\n for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {\n const id = node.getAttribute(attr)\n if (!id) continue\n const entity = ctx.registry.get(kind, id)\n if (!entity) continue\n const key = `${kind}:${id}`\n if (seen.has(key)) break\n seen.add(key)\n dom.push({ entity, ref: { kind, id }, node })\n break\n }\n }\n }\n\n return { pageId, pageEntity, composed, dom }\n}\n","import type { Location } from \"../../entities\"\n\nexport function formatLocation(loc: Location | undefined): string | null {\n if (!loc) return null\n const suffix =\n loc.line !== undefined\n ? loc.column !== undefined\n ? `:${loc.line}:${loc.column}`\n : `:${loc.line}`\n : \"\"\n return `${loc.file}${suffix}`\n}\n","import {\n isMetaKind,\n type Entity,\n type EntityKind,\n type EntityRef,\n type Flow,\n} from \"../../entities\"\nimport type { ViewContext } from \"../core/types\"\n\nexport function resolveRefs(\n ctx: ViewContext,\n refs: readonly EntityRef[] | undefined\n): readonly Entity[] {\n if (!refs) return []\n const out: Entity[] = []\n for (const ref of refs) {\n const entity = ctx.registry.get(ref.kind, ref.id)\n if (entity) out.push(entity)\n }\n return out\n}\n\nexport function resolveFlows(\n ctx: ViewContext,\n flowIds: readonly string[] | undefined\n): readonly Flow[] {\n if (!flowIds) return []\n const out: Flow[] = []\n for (const id of flowIds) {\n const flow = ctx.registry.get(\"flow\", id)\n if (flow) out.push(flow)\n }\n return out\n}\n\ninterface HasComposes {\n meta?: { composes?: readonly EntityRef[] }\n}\n\nexport function collectUsedBy(\n ctx: ViewContext,\n targetKind: EntityKind,\n targetId: string\n): readonly Entity[] {\n const out: Entity[] = []\n const seen = new Set<string>()\n for (const candidate of ctx.registry.query((e) => {\n if (!isMetaKind(e.kind)) return false\n const composes = (e as HasComposes).meta?.composes\n if (!composes) return false\n return composes.some((c) => c.kind === targetKind && c.id === targetId)\n })) {\n const key = `${candidate.kind}:${candidate.id}`\n if (seen.has(key)) continue\n seen.add(key)\n out.push(candidate)\n }\n return out\n}\n\nexport function collectFlowsTouching(\n ctx: ViewContext,\n targetId: string\n): readonly Flow[] {\n const out: Flow[] = []\n for (const flow of ctx.registry.list(\"flow\")) {\n if (flow.touches.includes(targetId)) out.push(flow)\n }\n return out\n}\n","import {\n displayName,\n type EntityByKind,\n type EntityKind,\n type EntityRef,\n type Location,\n type MetaEntityKind,\n} from \"../../entities\"\nimport type {\n DetailAction,\n DetailSection,\n DetailSubtitle,\n DetailSurface,\n} from \"../core/surface\"\nimport { BUILT_IN_VIEW_IDS } from \"../built-in/ids\"\nimport type { ShellHint, View, ViewContext } from \"../core/types\"\nimport { SECTION_LABELS } from \"../labels\"\nimport { formatLocation } from \"./format-location\"\nimport { resolveFlows, resolveRefs } from \"./resolve\"\n\ntype MetaEntity = EntityByKind<MetaEntityKind>\n\nconst DOM_BACKED_KINDS: ReadonlySet<EntityKind> = new Set([\n \"element\",\n \"region\",\n \"widget\",\n \"primitive\",\n])\n\nconst DETAIL_HINTS: readonly ShellHint[] = [{ key: \"↵\", label: \"Open\" }]\n\nexport function copyPathAction(\n ref: EntityRef,\n loc?: Location,\n labelOverride?: string\n): DetailAction {\n const path = `${ref.kind}:${ref.id}`\n return {\n id: \"copy-path\",\n label: labelOverride ?? formatLocation(loc) ?? path,\n ariaLabel: `Copy path ${path}`,\n icon: \"copy\",\n copy: path,\n intent: { kind: \"external\", describe: \"clipboard\" },\n }\n}\n\nexport function feedbackAction(ref: EntityRef): DetailAction {\n return {\n id: \"report-feedback\",\n label: \"Report feedback\",\n icon: \"message-circle\",\n push: { id: BUILT_IN_VIEW_IDS.feedback, ref },\n intent: {\n kind: \"push\",\n viewId: BUILT_IN_VIEW_IDS.feedback,\n refKind: ref.kind,\n },\n }\n}\n\nexport function highlightElementAction(ref: EntityRef): DetailAction {\n return {\n id: \"highlight-element\",\n label: \"Highlight element\",\n icon: \"target\",\n highlight: ref,\n intent: { kind: \"external\", describe: \"highlight\" },\n }\n}\n\nexport interface EntityDetailViewConfig<K extends MetaEntityKind> {\n id: string\n kind: K\n fallbackTitle: string\n /** Render the acceptance section when the entity declares acceptance. Default: true. */\n offerAcceptance?: boolean\n /** Extra sections inserted between the acceptance section and composes. */\n extraSections?(\n ctx: ViewContext,\n entity: EntityByKind<K>\n ): readonly DetailSection[]\n /** Override subtitle. Default: `{ rawId: entity.id }`. */\n subtitle?(\n ctx: ViewContext,\n entity: EntityByKind<K>\n ): DetailSubtitle | undefined\n}\n\nexport function createEntityDetailView<K extends MetaEntityKind>(\n config: EntityDetailViewConfig<K>\n): View {\n const { kind, fallbackTitle, offerAcceptance = true } = config\n return {\n id: config.id,\n matches: (ref) => ref.kind === kind,\n hints: DETAIL_HINTS,\n title: (ctx) => {\n if (!ctx.ref) return fallbackTitle\n const entity = ctx.registry.get(kind, ctx.ref.id)\n return entity ? displayName(entity) : ctx.ref.id\n },\n focusTarget: (host) =>\n host.querySelector<HTMLButtonElement>(\n \"[data-uidex-detail-actions] [data-uidex-detail-action]\"\n ),\n surface: (ctx): DetailSurface => {\n if (!ctx.ref || ctx.ref.kind !== kind) {\n return { kind: \"detail\", entityKind: kind }\n }\n const entity = ctx.registry.get(kind, ctx.ref.id) as\n | EntityByKind<K>\n | undefined\n if (!entity) {\n return { kind: \"detail\", entityKind: kind, notFound: ctx.ref }\n }\n // MetaEntityKind excludes route/flow, so entity always has meta/loc/scopes.\n const metaEntity = entity as MetaEntity\n const meta = metaEntity.meta\n\n const actions: DetailAction[] = [\n copyPathAction(ctx.ref, undefined, \"Copy path\"),\n ]\n if (DOM_BACKED_KINDS.has(kind)) {\n actions.push(highlightElementAction(ctx.ref))\n }\n actions.push(feedbackAction(ctx.ref))\n\n const sections: DetailSection[] = []\n if (metaEntity.scopes?.length) {\n sections.push({ id: \"scopes\", scopes: metaEntity.scopes })\n }\n if (meta?.description) {\n sections.push({ id: \"description\", text: meta.description })\n }\n if (offerAcceptance && meta?.acceptance?.length) {\n sections.push({ id: \"acceptance\", items: meta.acceptance })\n }\n for (const s of config.extraSections?.(ctx, entity) ?? []) {\n sections.push(s)\n }\n sections.push({\n id: \"composes\",\n label: SECTION_LABELS.contains,\n entities: resolveRefs(ctx, meta?.composes),\n filterable: true,\n })\n sections.push({\n id: \"flows\",\n flows: resolveFlows(ctx, meta?.flows),\n filterable: true,\n })\n\n return {\n kind: \"detail\",\n entityKind: kind,\n title: displayName(metaEntity),\n subtitle: config.subtitle?.(ctx, entity),\n actions,\n sections,\n }\n },\n }\n}\n","import type { EntityKind } from \"../../entities\"\nimport { createEntityDetailView } from \"../builder/detail-builder\"\nimport { collectFlowsTouching, collectUsedBy } from \"../builder/resolve\"\nimport type { DetailSection } from \"../core/surface\"\nimport { SECTION_LABELS } from \"../labels\"\n\nfunction usedBySection(\n ctx: Parameters<typeof collectUsedBy>[0],\n kind: EntityKind,\n id: string\n): DetailSection {\n return {\n id: \"used-by\",\n label: SECTION_LABELS.usedBy,\n entities: collectUsedBy(ctx, kind, id),\n filterable: true,\n }\n}\n\nfunction touchedByFlowsSection(\n ctx: Parameters<typeof collectFlowsTouching>[0],\n id: string\n): DetailSection {\n return {\n id: \"flows\",\n flows: collectFlowsTouching(ctx, id),\n filterable: true,\n }\n}\n\nexport const componentDetailView = createEntityDetailView({\n id: \"component-detail\",\n kind: \"element\",\n fallbackTitle: \"Component\",\n extraSections: (ctx, entity) => [\n usedBySection(ctx, \"element\", entity.id),\n touchedByFlowsSection(ctx, entity.id),\n ],\n})\n\nexport const featureDetailView = createEntityDetailView({\n id: \"feature-detail\",\n kind: \"feature\",\n fallbackTitle: \"Feature\",\n extraSections: (ctx, entity) => [usedBySection(ctx, \"feature\", entity.id)],\n})\n\nexport const regionDetailView = createEntityDetailView({\n id: \"region-detail\",\n kind: \"region\",\n fallbackTitle: \"Region\",\n offerAcceptance: false,\n extraSections: (ctx, entity) => [usedBySection(ctx, \"region\", entity.id)],\n})\n\nexport const widgetDetailView = createEntityDetailView({\n id: \"widget-detail\",\n kind: \"widget\",\n fallbackTitle: \"Widget\",\n extraSections: (ctx, entity) => [usedBySection(ctx, \"widget\", entity.id)],\n})\n\nexport const primitiveDetailView = createEntityDetailView({\n id: \"primitive-detail\",\n kind: \"primitive\",\n fallbackTitle: \"Primitive\",\n offerAcceptance: false,\n extraSections: (ctx, entity) => [usedBySection(ctx, \"primitive\", entity.id)],\n})\n\nexport const pageDetailView = createEntityDetailView({\n id: \"page-detail\",\n kind: \"page\",\n fallbackTitle: \"Page\",\n offerAcceptance: true,\n extraSections: (ctx, entity): DetailSection[] => {\n const paths = ctx.registry\n .list(\"route\")\n .filter((r) => r.page === entity.id)\n .map((r) => r.path)\n return [{ id: \"routes\", paths, filterable: true }]\n },\n})\n","import { Compass, createElement as createLucideElement } from \"lucide\"\nimport {\n displayName,\n ENTITY_KINDS,\n type Entity,\n type EntityRef,\n} from \"../../entities\"\nimport { matchesQuery } from \"../builder/filter\"\nimport {\n buildPageRouteMap,\n collectPageContext,\n type PageEntityHit,\n} from \"../builder/page-context\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\ninterface ExplorePageItem extends ListItem {\n ref: EntityRef\n}\n\nconst KIND_ORDER: ReadonlyMap<string, number> = new Map(\n ENTITY_KINDS.map((kind, index) => [kind, index])\n)\n\nconst KIND_GROUP_LABELS: Partial<Record<Entity[\"kind\"], string>> = {\n feature: \"Features\",\n widget: \"Widgets\",\n region: \"Regions\",\n element: \"Elements\",\n primitive: \"Primitives\",\n page: \"Pages\",\n route: \"Routes\",\n flow: \"Flows\",\n}\n\nfunction capitalize(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n\nfunction toItem(\n hit: PageEntityHit,\n pageRoutes: ReadonlyMap<string, string>\n): ExplorePageItem {\n const { entity, ref, node } = hit\n const item: ExplorePageItem = {\n value: `entity:${ref.kind}:${ref.id}`,\n label: displayName(entity, node),\n group: KIND_GROUP_LABELS[entity.kind] ?? capitalize(entity.kind),\n tag: `${ref.kind}:${ref.id}`,\n preview: ref,\n entityChip: { entity, node },\n ref,\n }\n if (entity.kind === \"route\") {\n item.subtitle = entity.path\n } else if (entity.kind === \"page\") {\n const path = pageRoutes.get(entity.id)\n if (path) item.subtitle = path\n }\n return item\n}\n\nexport const explorePageView: View = {\n id: BUILT_IN_VIEW_IDS.explorePage,\n palette: {\n label: \"Explore page\",\n shortcut: \"\",\n icon: () => createLucideElement(Compass),\n },\n title: \"Explore page\",\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx: ViewContext): ListSurface => {\n const { composed, dom } = collectPageContext(ctx)\n const pageRoutes = buildPageRouteMap(ctx)\n\n const items: ExplorePageItem[] = [\n ...composed.map((hit) => toItem(hit, pageRoutes)),\n ...dom.map((hit) => toItem(hit, pageRoutes)),\n ].sort((a, b) => {\n const ak = KIND_ORDER.get(a.ref.kind) ?? Number.MAX_SAFE_INTEGER\n const bk = KIND_ORDER.get(b.ref.kind) ?? Number.MAX_SAFE_INTEGER\n if (ak !== bk) return ak - bk\n return a.label.localeCompare(b.label)\n })\n\n const filter = (item: ListItem, query: string): boolean => {\n const row = item as ExplorePageItem\n return matchesQuery(\n `${item.label} ${row.ref.id} ${item.group ?? \"\"}`,\n query\n )\n }\n\n return {\n kind: \"list\",\n id: \"uidex-explore-page\",\n items,\n emptyLabel: \"No uidex-annotated elements on this page\",\n filter,\n onSelect: (item) => ctx.navigate((item as ExplorePageItem).ref),\n }\n },\n}\n","import { BUILT_IN_VIEW_IDS } from \"../ids\"\nimport { createFeedbackView } from \"./view-builder\"\n\nexport const feedbackView = createFeedbackView({\n id: BUILT_IN_VIEW_IDS.feedback,\n resolveCloud: (ctx) => ctx.cloud,\n componentId: (ctx) => (ctx.ref ? `${ctx.ref.kind}:${ctx.ref.id}` : \"unknown\"),\n submitLabels: { ready: \"Send feedback\", noCloud: \"Copy report\" },\n successToast: (result) => {\n const ticketKey =\n result.externalLink?.ok && result.externalLink.key\n ? result.externalLink.key\n : null\n return ticketKey\n ? `Feedback submitted (${ticketKey})`\n : \"Feedback submitted\"\n },\n failureToast: (err) => {\n const message = err instanceof Error ? err.message : String(err)\n return `Failed: ${message}`\n },\n})\n","import {\n displayName,\n entityKey,\n isMetaEntity,\n type Entity,\n} from \"../../entities\"\nimport type {\n DetailAction,\n DetailSection,\n DetailSurface,\n} from \"../core/surface\"\nimport type { View } from \"../core/types\"\nimport { copyPathAction, feedbackAction } from \"../builder/detail-builder\"\n\nexport const flowDetailView: View = {\n id: \"flow-detail\",\n matches: (ref) => ref.kind === \"flow\",\n title: (ctx) => {\n if (!ctx.ref) return \"Flow\"\n const entity = ctx.registry.get(\"flow\", ctx.ref.id)\n return entity ? displayName(entity) : ctx.ref.id\n },\n focusTarget: (host) =>\n host.querySelector<HTMLButtonElement>(\n \"[data-uidex-detail-actions] [data-uidex-detail-action]\"\n ),\n surface: (ctx): DetailSurface => {\n if (!ctx.ref || ctx.ref.kind !== \"flow\") {\n return { kind: \"detail\", entityKind: \"flow\" }\n }\n const flow = ctx.registry.get(\"flow\", ctx.ref.id)\n if (!flow) {\n return { kind: \"detail\", entityKind: \"flow\", notFound: ctx.ref }\n }\n\n const touched: Entity[] = []\n const seen = new Set<string>()\n for (const touchedEntity of ctx.registry.touchedBy(flow.id)) {\n if (!isMetaEntity(touchedEntity)) continue\n const key = `${touchedEntity.kind}:${touchedEntity.id}`\n if (seen.has(key)) continue\n seen.add(key)\n touched.push(touchedEntity)\n }\n const touchedIds = new Set(touched.map((t) => entityKey(t)))\n const unresolved = flow.touches.filter((id) => !touchedIds.has(id))\n\n const actions: DetailAction[] = [\n copyPathAction(ctx.ref, flow.loc),\n feedbackAction(ctx.ref),\n ]\n\n const sections: DetailSection[] = [\n {\n id: \"touches\",\n entities: touched,\n unresolved,\n filterable: true,\n },\n ]\n\n return {\n kind: \"detail\",\n entityKind: \"flow\",\n title: displayName(flow),\n actions,\n sections,\n }\n },\n}\n","import { BookOpen, createElement as createLucideElement } from \"lucide\"\nimport {\n ENTITY_KINDS,\n KIND_STYLE,\n type Entity,\n type EntityKind,\n} from \"../../entities\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View } from \"../core/types\"\nimport { PALETTE_GROUPS } from \"../labels\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\nconst DESCRIPTIONS: Record<EntityKind, string> = {\n route: \"URL to page mapping, derived from the framework router.\",\n page: \"Route-rendered top-level. Declared via uidex module export.\",\n feature: \"Cross-cutting capability spanning multiple pages.\",\n widget: \"Composite behavioural unit (player, picker, editor).\",\n region: \"Structural area. HTML5 landmark or data-uidex-region.\",\n element: \"Interactive DOM node tagged with data-uidex.\",\n primitive: \"Reusable presentational component under src/components/ui.\",\n flow: \"End-to-end user journey defined by a Playwright describe.\",\n}\n\nfunction syntheticEntity(kind: EntityKind): Entity {\n if (kind === \"route\") return { kind: \"route\", path: kind, page: kind }\n if (kind === \"flow\")\n return { kind: \"flow\", id: kind, loc: { file: \"\" }, touches: [] }\n return { kind, id: kind }\n}\n\nexport const glossaryView: View = {\n id: BUILT_IN_VIEW_IDS.glossary,\n palette: {\n label: \"Glossary\",\n group: PALETTE_GROUPS.commands,\n icon: () => createLucideElement(BookOpen),\n },\n title: \"Glossary\",\n hints: [],\n focusTarget: () => null,\n surface: (): ListSurface => {\n const items: ListItem[] = ENTITY_KINDS.map((kind) => ({\n value: `glossary:${kind}`,\n label: KIND_STYLE[kind].label,\n subtitle: DESCRIPTIONS[kind],\n tag: kind,\n entityChip: { entity: syntheticEntity(kind) },\n }))\n return {\n kind: \"list\",\n id: \"uidex-glossary\",\n items,\n }\n },\n}\n","export { BUILT_IN_VIEW_IDS } from \"./ids\"\n\nimport { commandPaletteView } from \"./command-palette\"\nimport {\n componentDetailView,\n featureDetailView,\n pageDetailView,\n primitiveDetailView,\n regionDetailView,\n widgetDetailView,\n} from \"./entity-detail\"\nimport { explorePageView } from \"./explore-page\"\nimport { feedbackView } from \"./feedback/host-feedback\"\nimport { sdkFeedbackView } from \"./feedback/sdk-feedback\"\nimport { flowDetailView } from \"./flow-detail\"\nimport { glossaryView } from \"./glossary\"\n\nexport { commandPaletteView } from \"./command-palette\"\nexport {\n componentDetailView,\n featureDetailView,\n pageDetailView,\n primitiveDetailView,\n regionDetailView,\n widgetDetailView,\n} from \"./entity-detail\"\nexport { explorePageView } from \"./explore-page\"\nexport { feedbackView } from \"./feedback/host-feedback\"\nexport { sdkFeedbackView } from \"./feedback/sdk-feedback\"\nexport { flowDetailView } from \"./flow-detail\"\nexport { glossaryView } from \"./glossary\"\n\nexport const DEFAULT_VIEWS = [\n commandPaletteView,\n explorePageView,\n componentDetailView,\n pageDetailView,\n featureDetailView,\n widgetDetailView,\n flowDetailView,\n primitiveDetailView,\n regionDetailView,\n feedbackView,\n sdkFeedbackView,\n glossaryView,\n] as const\n","import { sdkCloud } from \"./cloud/sdk-cloud\"\nimport { createRegistry, KIND_STYLE, type Registry } from \"./entities\"\nimport { reportUidexIssueAction } from \"./views/built-in/feedback/sdk-feedback\"\nimport {\n createIngest,\n resolveIngestOptions,\n type Ingest,\n type IngestOptions,\n} from \"./ingest\"\nimport type { HighlightContext } from \"./flows/highlight\"\nimport { createCleanupStack } from \"./internal/cleanup\"\nimport {\n createSession,\n type ResolvedTheme,\n type SessionStore,\n type ThemePreference,\n} from \"./session\"\nimport {\n bindShadowKeys,\n createSurfaceShell,\n resolveEntityElement,\n type Corner,\n type Inspector,\n type Overlay,\n} from \"./surface\"\nimport {\n createViewRegistrar,\n createViewStack,\n DEFAULT_VIEWS,\n type CloudAdapter,\n type HighlightController,\n type View,\n type ViewRegistrar,\n} from \"./views\"\n\nexport interface CreateUidexOptions {\n theme?: ThemePreference\n resolvedTheme?: ResolvedTheme\n stylesheets?: string[]\n initialCorner?: Corner\n /** Shown as a label at the start of the menu bar. */\n appTitle?: string\n cloud?: CloudAdapter | null\n dev?: boolean\n /** Register bundled default views. Defaults to `true`. */\n defaultViews?: boolean\n /** Additional views to register (after defaults). */\n views?: readonly View[]\n /**\n * Override ingest behaviour. When `cloud` is non-null, ingest auto-enables\n * (both console and network capture). Pass `null` to disable entirely, or\n * an options object to override either channel.\n */\n ingest?: IngestOptions | null\n}\n\nexport interface Uidex {\n mount(target?: Element): void\n unmount(): void\n readonly registry: Registry\n readonly session: SessionStore\n readonly views: ViewRegistrar\n readonly cloud: CloudAdapter | null\n readonly ingest: Ingest | null\n readonly shadowRoot: ShadowRoot | null\n}\n\nexport function createUidex(options: CreateUidexOptions = {}): Uidex {\n const registry = createRegistry()\n\n // Mutable refs filled in during mount(); session bindings close over them so\n // the surface machine's actions can mount the inspector and drive the\n // overlay once the shell exists.\n const inspectorRef: { current: Inspector | null } = { current: null }\n const overlayRef: { current: Overlay | null } = { current: null }\n\n const applyOverlay = (ctx: HighlightContext): void => {\n const overlay = overlayRef.current\n if (!overlay) return\n const ref = ctx.pinnedRef ?? ctx.ref\n if (!ref) return\n const el = ctx.element ?? resolveEntityElement(ref)\n if (!el) {\n overlay.hide()\n return\n }\n overlay.show(el, { color: ctx.color ?? KIND_STYLE[ref.kind].color })\n }\n\n const session = createSession({\n theme: options.theme,\n resolvedTheme: options.resolvedTheme,\n bindings: {\n surface: {\n mountInspector: () => inspectorRef.current?.mount(),\n destroyInspector: () => inspectorRef.current?.destroy(),\n },\n highlight: {\n showOverlay: applyOverlay,\n hideOverlay: () => overlayRef.current?.hide(),\n updateOverlay: applyOverlay,\n },\n },\n })\n const views = createViewRegistrar({ session, dev: options.dev })\n const cloud = options.cloud ?? null\n const ingestOpts = resolveIngestOptions(options.ingest, cloud !== null)\n const ingest = ingestOpts ? createIngest({ session, ...ingestOpts }) : null\n\n if (options.defaultViews !== false) {\n for (const view of DEFAULT_VIEWS) views.register(view)\n }\n if (options.views) {\n for (const view of options.views) views.register(view)\n }\n\n let shadowRoot: ShadowRoot | null = null\n const mountCleanup = createCleanupStack()\n let mounted = false\n\n function mount(target?: Element): void {\n if (mounted) return\n const mountTarget =\n target ?? (typeof document !== \"undefined\" ? document.body : null)\n if (!mountTarget) {\n throw new Error(\"createUidex: no mount target available\")\n }\n\n const shell = createSurfaceShell({\n mount: mountTarget,\n registry,\n session,\n stylesheets: options.stylesheets,\n initialCorner: options.initialCorner,\n appTitle: options.appTitle,\n inspector: {\n onSelect: (match) => {\n const view = views.findMatch(match.ref)\n if (!view) return\n session.send({\n type: \"SELECT\",\n ref: match.ref,\n entry: { id: view.id, ref: match.ref },\n })\n },\n },\n })\n shadowRoot = shell.host.shadowRoot\n inspectorRef.current = shell.inspector\n overlayRef.current = shell.overlay\n mountCleanup.add(shell)\n mountCleanup.add(() => {\n inspectorRef.current = null\n overlayRef.current = null\n })\n\n const highlight: HighlightController = {\n show(ref, opts) {\n const el = resolveEntityElement(ref)\n if (!el) {\n session.send({ type: \"UNHOVER\" })\n return\n }\n session.send({\n type: \"HOVER\",\n ref,\n element: el,\n color: opts?.color ?? null,\n })\n },\n hide() {\n session.send({ type: \"UNHOVER\" })\n },\n }\n\n const viewContainer = document.createElement(\"div\")\n viewContainer.setAttribute(\"data-uidex-views\", \"\")\n shell.host.chromeEl.appendChild(viewContainer)\n mountCleanup.add(() => viewContainer.remove())\n\n const viewStack = createViewStack({\n container: viewContainer,\n views,\n session,\n registry,\n cloud,\n sdkCloud,\n highlight,\n globalActions: (ctx) => [reportUidexIssueAction(ctx)],\n })\n mountCleanup.add(viewStack)\n\n if (shadowRoot) {\n mountCleanup.add(\n bindShadowKeys({\n shadowRoot,\n session,\n getActionsPopup: () => viewStack.getActionsPopup(),\n })\n )\n }\n\n if (ingest) {\n ingest.start()\n mountCleanup.add(() => ingest.stop())\n }\n\n mounted = true\n }\n\n function unmount(): void {\n if (!mounted) return\n mountCleanup.drain()\n shadowRoot = null\n mounted = false\n }\n\n return {\n mount,\n unmount,\n registry,\n session,\n views,\n cloud,\n ingest,\n get shadowRoot() {\n return shadowRoot\n },\n }\n}\n"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","names":["RouteIcon","successToast","cloud","DEFAULT_LIMIT","import_xstate","import_xstate","initialContext","import_lucide","el","createLucideElement","el","state","import_lucide","createLucideElement","connect","machine","hasTagFn","import_types","import_lucide","createButton","createButton","createButton","createLucideElement","idx","import_xstate","import_xstate","initialContext","import_lucide","import_lucide","scrollArea","createLucideElement","scrollArea","import_lucide","menu","createLucideElement","sameRef","sdkCloud","cloud","import_lucide","createLucideElement","import_lucide","capitalize","createLucideElement","import_lucide","createLucideElement","el","cloud"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/cloud/types.ts","../src/cloud/client.ts","../src/cloud/sdk-cloud.ts","../src/entities/types.ts","../src/entities/registry.ts","../src/entities/style.ts","../src/entities/display-name.ts","../src/ingest/console.ts","../src/ingest/native-fetch.ts","../src/ingest/network.ts","../src/ingest/index.ts","../src/internal/cleanup.ts","../src/session/store.ts","../src/flows/highlight.ts","../src/flows/surface.ts","../src/styles/tailwind.built.css","../src/surface/constants.ts","../src/surface/host.ts","../src/surface/cursor-tooltip.ts","../src/surface/inspector.ts","../src/surface/menu-bar.ts","../src/internal/cn.ts","../src/internal/el.ts","../src/surface/keys.ts","../src/surface/overlay.ts","../src/surface/theme.ts","../src/surface/shell.ts","../src/internal/dev.ts","../src/views/core/types.ts","../src/views/core/registry.ts","../src/ui/cva.ts","../src/ui/badge.ts","../src/views/primitives/chip.ts","../src/views/primitives/kind-icon.ts","../src/views/primitives/icon-tile.ts","../src/views/primitives/kind-chip.ts","../src/machines/scroll-area.ts","../src/machines/machine.ts","../src/machines/normalize.ts","../src/views/builder/spread-props.ts","../src/views/render/custom.ts","../src/views/render/detail.ts","../src/views/builder/filter.ts","../src/views/labels.ts","../src/ui/button.ts","../src/ui/list-item.ts","../src/views/primitives/button.ts","../src/views/primitives/entity-presence.ts","../src/ui/kbd.ts","../src/views/primitives/row.ts","../src/views/primitives/entity-link.ts","../src/views/primitives/section.ts","../src/views/primitives/text.ts","../src/views/render/form.ts","../src/flows/form.ts","../src/machines/dialog.ts","../src/ui/field.ts","../src/ui/form.ts","../src/ui/input.ts","../src/ui/select.ts","../src/machines/combobox.ts","../src/views/render/list.ts","../src/views/render/index.ts","../src/views/core/mount.ts","../src/views/core/shell.ts","../src/machines/menu.ts","../src/ui/menu.ts","../src/views/core/actions-popup.ts","../src/views/core/stack.ts","../src/views/built-in/ids.ts","../src/views/built-in/command-palette.ts","../src/views/builder/format-location.ts","../src/views/builder/page-context.ts","../src/internal/screenshot.ts","../src/views/built-in/feedback/snapshot.ts","../src/views/builder/resolve.ts","../src/views/builder/detail-builder.ts","../src/views/built-in/entity-detail.ts","../src/views/built-in/entity-kind-list.ts","../src/views/built-in/explore-page.ts","../src/internal/clipboard.ts","../src/views/built-in/feedback/markdown.ts","../src/views/built-in/feedback/schema.ts","../src/views/built-in/feedback/view-builder.ts","../src/views/built-in/feedback/host-feedback.ts","../src/views/built-in/feedback/jira-feedback.ts","../src/views/built-in/feedback/sdk-feedback.ts","../src/views/built-in/flow-detail.ts","../src/views/built-in/flows.ts","../src/views/built-in/glossary.ts","../src/views/built-in/index.ts","../src/create-uidex.ts"],"sourcesContent":["// Core factory\nexport { createUidex } from \"./create-uidex\"\nexport type { CreateUidexOptions, Uidex } from \"./create-uidex\"\n\n// Entities — data model\nexport {\n ENTITY_KINDS,\n UnknownEntityKindError,\n assertEntityKind,\n createRegistry,\n displayName,\n entityKey,\n isMetaKind,\n KIND_STYLE,\n prettify,\n} from \"./entities\"\nexport type {\n Element,\n Entity,\n EntityByKind,\n EntityKind,\n EntityRef,\n Feature,\n Flow,\n KindStyleEntry,\n Location,\n Metadata,\n MetaEntityKind,\n Page,\n Primitive,\n Region,\n Registry,\n Route,\n Scope,\n Widget,\n} from \"./entities\"\n\n// Session\nexport { createSession, resolveTheme } from \"./session\"\nexport type {\n CreateSessionOptions,\n ResolvedTheme,\n SessionActions,\n SessionSnapshot,\n SessionState,\n SessionStore,\n ThemePreference,\n ViewStackEntry,\n} from \"./session\"\n\n// Surface (chrome layer)\nexport {\n createCursorTooltip,\n createHighlightController,\n createInspector,\n createMenuBar,\n createOverlay,\n createSurfaceHost,\n createSurfaceShell,\n createThemeDetector,\n defaultResolveMatch,\n formatShortcutLabel,\n resolveEntityElement,\n SURFACE_CONTAINER_CLASS,\n SURFACE_HOST_CLASS,\n SURFACE_IGNORE_SELECTOR,\n Z_BASE,\n Z_CHROME,\n Z_OVERLAY,\n} from \"./surface\"\nexport type {\n Corner,\n CreateSurfaceShellOptions,\n CursorTooltip,\n CursorTooltipDeps,\n Inspector,\n InspectorMatch,\n InspectorMatchStack,\n InspectorOptions,\n MenuBar,\n MenuBarOptions,\n Overlay,\n OverlayShowOptions,\n PaletteShortcut,\n SurfaceHost,\n SurfaceHostOptions,\n SurfaceShell,\n ThemeDetector,\n ThemeDetectorDeps,\n} from \"./surface\"\n\n// Views\nexport {\n buildDefaultViews,\n componentDetailView,\n createCommandPaletteView,\n createViewRegistrar,\n createViewStack,\n featureDetailView,\n feedbackView,\n flowDetailView,\n pageDetailView,\n primitiveDetailView,\n regionDetailView,\n ViewValidationError,\n widgetDetailView,\n} from \"./views\"\nexport type {\n Cleanup,\n CloudAdapter,\n ConsoleLogEntry,\n CustomSurface,\n DetailAction,\n DetailActionIcon,\n DetailActionRunContext,\n DetailSection,\n DetailSubtitle,\n DetailSurface,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n FormField,\n FormSubmit,\n FormSubmitResult,\n FormSurface,\n FormValue,\n HighlightController,\n IngestConfig,\n IngestConfigIssue,\n ListItem,\n ListSurface,\n NetworkErrorEntry,\n ShellAction,\n ShellHint,\n SourceRef,\n View,\n ViewContext,\n ViewDirectory,\n ViewPalette,\n ViewPushTarget,\n Viewport,\n ViewRegistrar,\n ViewRegistrarOptions,\n ViewStack,\n ViewStackOptions,\n ViewSurface,\n} from \"./views\"\n\n// Ingest (console/network capture)\nexport {\n createConsoleCapture,\n createIngest,\n createNetworkCapture,\n getNativeFetch,\n nativeFetch,\n resolveIngestOptions,\n} from \"./ingest\"\nexport type {\n ConsoleCapture,\n ConsoleEntry,\n ConsoleLevel,\n Ingest,\n IngestOptions,\n NetworkCapture,\n NetworkEntry,\n} from \"./ingest\"\n","export type {\n CloudAdapter,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigIssue,\n SourceRef,\n} from \"../ingest/feedback-contract\"\n\nexport const DEFAULT_CLOUD_ENDPOINT = \"https://app.uidex.dev\"\n\nexport interface CloudOptions {\n projectKey: string\n endpoint?: string\n fetch?: typeof fetch\n}\n\nexport class CloudError extends Error {\n readonly status: number\n readonly retryAfter?: number\n readonly details?: unknown\n\n constructor(\n message: string,\n options: { status: number; retryAfter?: number; details?: unknown }\n ) {\n super(message)\n this.name = \"CloudError\"\n this.status = options.status\n this.retryAfter = options.retryAfter\n this.details = options.details\n }\n}\n","import {\n CloudError,\n DEFAULT_CLOUD_ENDPOINT,\n type CloudAdapter,\n type CloudOptions,\n type FeedbackPayload,\n type FeedbackResult,\n type IngestConfig,\n} from \"./types\"\n\nfunction resolveFetch(override?: typeof fetch): typeof fetch {\n if (override) return override\n if (\n typeof globalThis !== \"undefined\" &&\n typeof globalThis.fetch === \"function\"\n ) {\n return globalThis.fetch.bind(globalThis)\n }\n throw new Error(\n \"uidex/cloud: global fetch is not available; pass a `fetch` override\"\n )\n}\n\nfunction trimEndpoint(endpoint: string): string {\n return endpoint.endsWith(\"/\") ? endpoint.slice(0, -1) : endpoint\n}\n\nfunction parseRetryAfter(header: string | null): number | undefined {\n if (!header) return undefined\n const seconds = Number(header)\n if (Number.isFinite(seconds) && seconds >= 0) return seconds\n const date = Date.parse(header)\n if (Number.isFinite(date)) {\n const delta = Math.ceil((date - Date.now()) / 1000)\n return delta > 0 ? delta : 0\n }\n return undefined\n}\n\nasync function readBody(response: Response): Promise<unknown> {\n const text = await response.text()\n if (!text) return undefined\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n}\n\nfunction errorMessage(body: unknown, fallback: string): string {\n if (\n body &&\n typeof body === \"object\" &&\n \"error\" in body &&\n typeof (body as { error: unknown }).error === \"string\"\n ) {\n return (body as { error: string }).error\n }\n return fallback\n}\n\nexport function cloud(options: CloudOptions): CloudAdapter {\n let cachedConfig: Promise<IngestConfig> | null = null\n let resolvedConfig: IngestConfig | null = null\n\n const projectKey = options.projectKey\n if (!projectKey) {\n throw new Error(\"uidex/cloud: `projectKey` is required\")\n }\n const endpoint = trimEndpoint(options.endpoint ?? DEFAULT_CLOUD_ENDPOINT)\n const fetchImpl = resolveFetch(options.fetch)\n const authHeader = `Bearer ${projectKey}`\n\n async function submit(payload: FeedbackPayload): Promise<FeedbackResult> {\n const response = await fetchImpl(`${endpoint}/api/ingest`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: authHeader,\n },\n body: JSON.stringify(payload),\n })\n\n const body = await readBody(response)\n\n if (!response.ok) {\n const retryAfter =\n response.status === 429\n ? parseRetryAfter(response.headers.get(\"Retry-After\"))\n : undefined\n throw new CloudError(\n errorMessage(body, `Feedback submission failed (${response.status})`),\n { status: response.status, retryAfter, details: body }\n )\n }\n\n if (!body || typeof body !== \"object\") {\n throw new CloudError(\"Feedback submission returned an empty response\", {\n status: response.status,\n })\n }\n return body as FeedbackResult\n }\n\n async function fetchConfig(): Promise<IngestConfig> {\n const response = await fetchImpl(`${endpoint}/api/ingest/config`, {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n Authorization: authHeader,\n },\n })\n\n const body = await readBody(response)\n\n if (!response.ok) {\n const retryAfter =\n response.status === 429\n ? parseRetryAfter(response.headers.get(\"Retry-After\"))\n : undefined\n throw new CloudError(\n errorMessage(body, `Ingest config request failed (${response.status})`),\n { status: response.status, retryAfter, details: body }\n )\n }\n\n if (!body || typeof body !== \"object\") {\n throw new CloudError(\"Ingest config returned an empty response\", {\n status: response.status,\n })\n }\n return body as IngestConfig\n }\n\n function startFetch(): Promise<IngestConfig> {\n const promise = fetchConfig()\n promise.then(\n (config) => {\n resolvedConfig = config\n },\n () => {}\n )\n return promise\n }\n\n cachedConfig = startFetch()\n\n function getConfig(): Promise<IngestConfig> {\n return cachedConfig ?? (cachedConfig = startFetch())\n }\n\n function getCachedConfig(): IngestConfig | null {\n return resolvedConfig\n }\n\n return {\n feedback: { submit },\n integrations: { getConfig, getCachedConfig },\n }\n}\n","import { cloud } from \"./client\"\nimport type { CloudAdapter } from \"./types\"\n\nexport const sdkCloud: CloudAdapter = cloud({\n projectKey: UIDEX_SDK_CLOUD_PROJECT_KEY,\n endpoint: UIDEX_SDK_CLOUD_ENDPOINT,\n})\n","export const ENTITY_KINDS = [\n \"route\",\n \"page\",\n \"feature\",\n \"widget\",\n \"region\",\n \"element\",\n \"primitive\",\n \"flow\",\n] as const\n\nexport type EntityKind = (typeof ENTITY_KINDS)[number]\n\nexport type Scope = string\n\nexport interface Location {\n file: string\n line?: number\n column?: number\n}\n\nexport interface EntityRef {\n kind: EntityKind\n id: string\n}\n\nexport interface Metadata {\n name?: string\n description?: string\n acceptance?: string[]\n notes?: string\n composes?: EntityRef[]\n flows?: readonly string[]\n features?: string[]\n widgets?: string[]\n}\n\ninterface EntityWithMetaBase {\n id: string\n loc?: Location\n scopes?: Scope[]\n meta?: Metadata\n}\n\nexport interface Route {\n kind: \"route\"\n path: string\n page: string\n}\n\nexport interface FlowStep {\n entityId: string\n action?: string\n}\n\nexport interface Flow {\n kind: \"flow\"\n id: string\n loc: Location\n touches: string[]\n steps: FlowStep[]\n}\n\nexport interface Page extends EntityWithMetaBase {\n kind: \"page\"\n}\n\nexport interface Feature extends EntityWithMetaBase {\n kind: \"feature\"\n}\n\nexport interface Widget extends EntityWithMetaBase {\n kind: \"widget\"\n}\n\nexport interface Region extends EntityWithMetaBase {\n kind: \"region\"\n}\n\nexport interface Element extends EntityWithMetaBase {\n kind: \"element\"\n}\n\nexport interface Primitive extends EntityWithMetaBase {\n kind: \"primitive\"\n}\n\nexport type Entity =\n | Route\n | Page\n | Feature\n | Widget\n | Region\n | Element\n | Primitive\n | Flow\n\nexport type EntityByKind<K extends EntityKind> = Extract<Entity, { kind: K }>\n\nexport type MetaEntityKind = Exclude<EntityKind, \"route\" | \"flow\">\n\nexport function isMetaKind(kind: EntityKind): kind is MetaEntityKind {\n return kind !== \"route\" && kind !== \"flow\"\n}\n\nexport function isMetaEntity(\n entity: Entity\n): entity is Extract<Entity, { kind: MetaEntityKind }> {\n return isMetaKind(entity.kind)\n}\n\nexport function entityKey(entity: Entity): string {\n return entity.kind === \"route\" ? entity.path : entity.id\n}\n\nexport function sameRef(a: EntityRef | null, b: EntityRef | null): boolean {\n if (a === b) return true\n if (a === null || b === null) return false\n return a.kind === b.kind && a.id === b.id\n}\n\nexport class UnknownEntityKindError extends Error {\n readonly kind: string\n constructor(kind: string) {\n super(`Unknown entity kind: ${kind}`)\n this.name = \"UnknownEntityKindError\"\n this.kind = kind\n }\n}\n\nconst KIND_SET: ReadonlySet<string> = new Set<string>(ENTITY_KINDS)\n\nexport function assertEntityKind(kind: string): asserts kind is EntityKind {\n if (!KIND_SET.has(kind)) throw new UnknownEntityKindError(kind)\n}\n","import {\n assertEntityKind,\n entityKey,\n isMetaEntity,\n isMetaKind,\n type Entity,\n type EntityByKind,\n type EntityKind,\n type Flow,\n type Metadata,\n type Scope,\n} from \"./types\"\n\nexport interface Registry {\n add(entity: Entity): void\n get<K extends EntityKind>(kind: K, id: string): EntityByKind<K> | undefined\n list<K extends EntityKind>(kind: K): ReadonlyArray<EntityByKind<K>>\n query(predicate: (entity: Entity) => boolean): Entity[]\n byScope(scope: Scope): Entity[]\n touchedBy(flowId: string): Entity[]\n}\n\ntype KindStore = {\n [K in EntityKind]: Map<string, EntityByKind<K>>\n}\n\nfunction emptyStore(): KindStore {\n return {\n route: new Map(),\n page: new Map(),\n feature: new Map(),\n widget: new Map(),\n region: new Map(),\n element: new Map(),\n primitive: new Map(),\n flow: new Map(),\n }\n}\n\nfunction computeFlowIds(flows: Iterable<Flow>, targetId: string): string[] {\n const ids: string[] = []\n for (const flow of flows) {\n if (flow.touches.includes(targetId)) ids.push(flow.id)\n }\n return ids\n}\n\nfunction freezeEntity<E extends Entity>(entity: E, flows: Iterable<Flow>): E {\n if (!isMetaKind(entity.kind)) return entity\n const withMeta = entity as Extract<Entity, { meta?: Metadata }>\n if (withMeta.meta === undefined) return entity\n const computedFlows = Object.freeze(computeFlowIds(flows, withMeta.id))\n const mergedMeta: Metadata = { ...withMeta.meta, flows: computedFlows }\n return { ...entity, meta: Object.freeze(mergedMeta) } as E\n}\n\nexport function createRegistry(): Registry {\n const store = emptyStore()\n let flowsCache: Flow[] | null = null\n\n const getFlows = (): Flow[] => {\n if (flowsCache === null) flowsCache = Array.from(store.flow.values())\n return flowsCache\n }\n\n const add = (entity: Entity): void => {\n assertEntityKind(entity.kind)\n const key = entityKey(entity)\n ;(store[entity.kind] as Map<string, Entity>).set(key, entity)\n flowsCache = null\n }\n\n const get = <K extends EntityKind>(\n kind: K,\n id: string\n ): EntityByKind<K> | undefined => {\n assertEntityKind(kind)\n const raw = store[kind].get(id) as EntityByKind<K> | undefined\n if (raw === undefined) return undefined\n return freezeEntity(raw, getFlows())\n }\n\n const list = <K extends EntityKind>(\n kind: K\n ): ReadonlyArray<EntityByKind<K>> => {\n assertEntityKind(kind)\n const flows = getFlows()\n return Array.from(store[kind].values(), (e) =>\n freezeEntity(e as EntityByKind<K>, flows)\n )\n }\n\n const allEntities = function* (): Generator<Entity> {\n for (const kind of Object.keys(store) as EntityKind[]) {\n for (const entity of store[kind].values()) {\n yield entity as Entity\n }\n }\n }\n\n const query = (predicate: (entity: Entity) => boolean): Entity[] => {\n const flows = getFlows()\n const result: Entity[] = []\n for (const entity of allEntities()) {\n if (predicate(entity)) result.push(freezeEntity(entity, flows))\n }\n return result\n }\n\n const byScope = (scope: Scope): Entity[] =>\n query(\n (entity) =>\n \"scopes\" in entity &&\n Array.isArray(entity.scopes) &&\n entity.scopes.includes(scope)\n )\n\n const touchedBy = (flowId: string): Entity[] => {\n const flow = store.flow.get(flowId)\n if (flow === undefined) return []\n const ids = new Set(flow.touches)\n return query((entity) => {\n if (!isMetaEntity(entity)) return false\n return ids.has(entity.id)\n })\n }\n\n return { add, get, list, query, byScope, touchedBy }\n}\n","import {\n Circle,\n FileText,\n type IconNode,\n LayoutGrid,\n LayoutPanelTop,\n MousePointerClick,\n Route as RouteIcon,\n Sparkles,\n Workflow,\n} from \"lucide\"\nimport type { EntityKind } from \"./types\"\n\nexport interface KindStyleEntry {\n icon: IconNode\n tone: string\n chip: string\n color: string\n label: string\n}\n\nexport const KIND_STYLE: Record<EntityKind, KindStyleEntry> = {\n route: {\n icon: RouteIcon,\n tone: \"text-blue-700 dark:text-blue-400\",\n chip: \"bg-blue-50 text-blue-700 inset-ring inset-ring-blue-700/10 group-data-hover:bg-blue-100 dark:bg-blue-400/10 dark:text-blue-400 dark:inset-ring-blue-400/30 dark:group-data-hover:bg-blue-400/20\",\n color: \"#60a5fa\",\n label: \"Route\",\n },\n page: {\n icon: FileText,\n tone: \"text-emerald-700 dark:text-emerald-400\",\n chip: \"bg-emerald-50 text-emerald-700 inset-ring inset-ring-emerald-600/20 group-data-hover:bg-emerald-100 dark:bg-emerald-400/10 dark:text-emerald-400 dark:inset-ring-emerald-500/20 dark:group-data-hover:bg-emerald-400/20\",\n color: \"#34d399\",\n label: \"Page\",\n },\n feature: {\n icon: Sparkles,\n tone: \"text-amber-700 dark:text-amber-500\",\n chip: \"bg-amber-50 text-amber-800 inset-ring inset-ring-amber-600/20 group-data-hover:bg-amber-100 dark:bg-amber-400/10 dark:text-amber-500 dark:inset-ring-amber-400/20 dark:group-data-hover:bg-amber-400/20\",\n color: \"#fbbf24\",\n label: \"Feature\",\n },\n widget: {\n icon: LayoutGrid,\n tone: \"text-violet-700 dark:text-violet-400\",\n chip: \"bg-violet-50 text-violet-700 inset-ring inset-ring-violet-700/10 group-data-hover:bg-violet-100 dark:bg-violet-400/10 dark:text-violet-400 dark:inset-ring-violet-400/30 dark:group-data-hover:bg-violet-400/20\",\n color: \"#a78bfa\",\n label: \"Widget\",\n },\n region: {\n icon: LayoutPanelTop,\n tone: \"text-cyan-700 dark:text-cyan-400\",\n chip: \"bg-cyan-50 text-cyan-700 inset-ring inset-ring-cyan-700/10 group-data-hover:bg-cyan-100 dark:bg-cyan-400/10 dark:text-cyan-400 dark:inset-ring-cyan-400/30 dark:group-data-hover:bg-cyan-400/20\",\n color: \"#22d3ee\",\n label: \"Region\",\n },\n element: {\n icon: MousePointerClick,\n tone: \"text-rose-700 dark:text-rose-400\",\n chip: \"bg-rose-50 text-rose-700 inset-ring inset-ring-rose-600/10 group-data-hover:bg-rose-100 dark:bg-rose-400/10 dark:text-rose-400 dark:inset-ring-rose-400/20 dark:group-data-hover:bg-rose-400/20\",\n color: \"#fb7185\",\n label: \"Element\",\n },\n primitive: {\n icon: Circle,\n tone: \"text-slate-600 dark:text-slate-400\",\n chip: \"bg-slate-50 text-slate-600 inset-ring inset-ring-slate-500/10 group-data-hover:bg-slate-100 dark:bg-slate-400/10 dark:text-slate-400 dark:inset-ring-slate-400/20 dark:group-data-hover:bg-slate-400/20\",\n color: \"#94a3b8\",\n label: \"Primitive\",\n },\n flow: {\n icon: Workflow,\n tone: \"text-fuchsia-700 dark:text-fuchsia-400\",\n chip: \"bg-fuchsia-50 text-fuchsia-700 inset-ring inset-ring-fuchsia-700/10 group-data-hover:bg-fuchsia-100 dark:bg-fuchsia-400/10 dark:text-fuchsia-400 dark:inset-ring-fuchsia-400/20 dark:group-data-hover:bg-fuchsia-400/20\",\n color: \"#e879f9\",\n label: \"Flow\",\n },\n}\n","import type { Entity } from \"./types\"\n\nexport function prettify(id: string): string {\n const parts = id.split(/[-_]+/).filter(Boolean)\n const words = parts.flatMap((part) => part.split(/(?=[A-Z])/).filter(Boolean))\n if (words.length === 0) return \"\"\n return words\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(\" \")\n}\n\nexport function displayName(entity: Entity, node?: Element | null): string {\n if (entity.kind === \"route\") return prettify(entity.page)\n if (entity.kind !== \"flow\") {\n const authored = entity.meta?.name\n if (authored) return authored\n }\n const aria = node?.getAttribute(\"aria-label\")?.trim()\n if (aria) return aria\n return prettify(entity.id)\n}\n","export type ConsoleLevel = \"warn\" | \"error\"\n\nexport interface ConsoleEntry {\n level: ConsoleLevel\n message: string\n timestamp: string\n}\n\nexport interface ConsoleCaptureOptions {\n limit?: number\n target?: Console\n now?: () => Date\n}\n\nexport interface ConsoleCapture {\n start(): void\n stop(): void\n readonly isActive: boolean\n entries(): readonly ConsoleEntry[]\n clear(): void\n}\n\nconst DEFAULT_LIMIT = 50\nconst LEVELS: readonly ConsoleLevel[] = [\"warn\", \"error\"]\n\nfunction formatMessage(args: readonly unknown[]): string {\n return args\n .map((arg) => {\n if (typeof arg === \"string\") return arg\n if (arg instanceof Error) return arg.stack ?? arg.message\n try {\n return JSON.stringify(arg)\n } catch {\n return String(arg)\n }\n })\n .join(\" \")\n}\n\nexport function createConsoleCapture(\n options: ConsoleCaptureOptions = {}\n): ConsoleCapture {\n const limit = options.limit ?? DEFAULT_LIMIT\n const target = options.target ?? console\n const now = options.now ?? (() => new Date())\n const buffer: ConsoleEntry[] = []\n const originals: Partial<Record<ConsoleLevel, (...args: unknown[]) => void>> =\n {}\n let active = false\n\n function record(level: ConsoleLevel, args: readonly unknown[]): void {\n const entry: ConsoleEntry = {\n level,\n message: formatMessage(args),\n timestamp: now().toISOString(),\n }\n buffer.push(entry)\n if (buffer.length > limit) buffer.splice(0, buffer.length - limit)\n }\n\n function start(): void {\n if (active) return\n for (const level of LEVELS) {\n const original = target[level] as (...args: unknown[]) => void\n originals[level] = original\n const wrapped = (...args: unknown[]): void => {\n record(level, args)\n original.call(target, ...args)\n }\n ;(target as unknown as Record<string, unknown>)[level] = wrapped\n }\n active = true\n }\n\n function stop(): void {\n if (!active) return\n for (const level of LEVELS) {\n const original = originals[level]\n if (original) {\n ;(target as unknown as Record<string, unknown>)[level] = original\n }\n delete originals[level]\n }\n active = false\n }\n\n return {\n start,\n stop,\n get isActive() {\n return active\n },\n entries() {\n return buffer.slice()\n },\n clear() {\n buffer.length = 0\n },\n }\n}\n","// Captured at module load so `cloud.feedback.submit` (and anything else that\n// routes through this reference) is never observed by runtime fetch wrappers.\nexport const nativeFetch: typeof fetch | undefined =\n typeof globalThis !== \"undefined\" && typeof globalThis.fetch === \"function\"\n ? globalThis.fetch.bind(globalThis)\n : undefined\n\nexport function getNativeFetch(): typeof fetch | undefined {\n return nativeFetch\n}\n","import { nativeFetch } from \"./native-fetch\"\n\nexport interface NetworkEntry {\n method: string\n url: string\n status: number\n timestamp: string\n error?: string\n}\n\nexport interface NetworkCaptureOptions {\n limit?: number\n target?: {\n fetch?: typeof fetch\n }\n now?: () => Date\n}\n\nexport interface NetworkCapture {\n start(): void\n stop(): void\n readonly isActive: boolean\n entries(): readonly NetworkEntry[]\n clear(): void\n}\n\nconst DEFAULT_LIMIT = 20\n\nfunction resolveMethod(input: RequestInfo | URL, init?: RequestInit): string {\n if (init?.method) return init.method.toUpperCase()\n if (\n typeof input !== \"string\" &&\n !(input instanceof URL) &&\n \"method\" in input\n ) {\n return (input as Request).method.toUpperCase()\n }\n return \"GET\"\n}\n\nfunction resolveUrl(input: RequestInfo | URL): string {\n if (typeof input === \"string\") return input\n if (input instanceof URL) return input.toString()\n return (input as Request).url\n}\n\nexport function createNetworkCapture(\n options: NetworkCaptureOptions = {}\n): NetworkCapture {\n const limit = options.limit ?? DEFAULT_LIMIT\n const target = (options.target ?? globalThis) as {\n fetch?: typeof fetch\n }\n const now = options.now ?? (() => new Date())\n const buffer: NetworkEntry[] = []\n let original: typeof fetch | undefined\n let active = false\n\n function push(entry: NetworkEntry): void {\n buffer.push(entry)\n if (buffer.length > limit) buffer.splice(0, buffer.length - limit)\n }\n\n function start(): void {\n if (active) return\n const baseline = target.fetch ?? nativeFetch\n if (!baseline) return\n original = baseline\n const wrapped: typeof fetch = async (input, init) => {\n const method = resolveMethod(input, init)\n const url = resolveUrl(input)\n try {\n const res = await baseline(input, init)\n if (res.status >= 400) {\n push({\n method,\n url,\n status: res.status,\n timestamp: now().toISOString(),\n })\n }\n return res\n } catch (err) {\n push({\n method,\n url,\n status: 0,\n timestamp: now().toISOString(),\n error: err instanceof Error ? err.message : String(err),\n })\n throw err\n }\n }\n target.fetch = wrapped\n active = true\n }\n\n function stop(): void {\n if (!active) return\n if (original) target.fetch = original\n original = undefined\n active = false\n }\n\n return {\n start,\n stop,\n get isActive() {\n return active\n },\n entries() {\n return buffer.slice()\n },\n clear() {\n buffer.length = 0\n },\n }\n}\n","import type { SessionStore } from \"../session\"\nimport {\n createConsoleCapture,\n type ConsoleCapture,\n type ConsoleCaptureOptions,\n} from \"./console\"\nimport {\n createNetworkCapture,\n type NetworkCapture,\n type NetworkCaptureOptions,\n} from \"./network\"\n\nexport type { ConsoleEntry, ConsoleLevel, ConsoleCapture } from \"./console\"\nexport type { NetworkEntry, NetworkCapture } from \"./network\"\nexport { createConsoleCapture } from \"./console\"\nexport { createNetworkCapture } from \"./network\"\nexport { getNativeFetch, nativeFetch } from \"./native-fetch\"\nexport type {\n CloudAdapter,\n ConsoleLogEntry,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigIssue,\n NetworkErrorEntry,\n SourceRef,\n Viewport,\n} from \"./feedback-contract\"\n\nexport interface IngestOptions {\n captureConsole?: boolean\n captureNetwork?: boolean\n consoleLimit?: number\n networkLimit?: number\n consoleTarget?: ConsoleCaptureOptions[\"target\"]\n networkTarget?: NetworkCaptureOptions[\"target\"]\n now?: () => Date\n}\n\nexport interface Ingest {\n start(): void\n stop(): void\n readonly isActive: boolean\n readonly console: ConsoleCapture | null\n readonly network: NetworkCapture | null\n}\n\nexport interface CreateIngestOptions extends IngestOptions {\n session?: SessionStore\n}\n\nexport function createIngest(options: CreateIngestOptions = {}): Ingest {\n const { session, ...opts } = options\n const wantConsole = opts.captureConsole !== false\n const wantNetwork = opts.captureNetwork !== false\n\n const consoleCapture: ConsoleCapture | null = wantConsole\n ? createConsoleCapture({\n limit: opts.consoleLimit,\n target: opts.consoleTarget,\n now: opts.now,\n })\n : null\n const networkCapture: NetworkCapture | null = wantNetwork\n ? createNetworkCapture({\n limit: opts.networkLimit,\n target: opts.networkTarget,\n now: opts.now,\n })\n : null\n\n let active = false\n\n function start(): void {\n if (active) return\n consoleCapture?.start()\n networkCapture?.start()\n active = Boolean(consoleCapture?.isActive || networkCapture?.isActive)\n if (active) session?.getState().actions.setIngest(true)\n }\n\n function stop(): void {\n if (!active) return\n consoleCapture?.stop()\n networkCapture?.stop()\n active = false\n session?.getState().actions.setIngest(false)\n }\n\n return {\n start,\n stop,\n get isActive() {\n return active\n },\n console: consoleCapture,\n network: networkCapture,\n }\n}\n\nexport function resolveIngestOptions(\n explicit: IngestOptions | null | undefined,\n hasCloud: boolean\n): IngestOptions | null {\n if (explicit === null) return null\n if (explicit === undefined) {\n return hasCloud ? { captureConsole: true, captureNetwork: true } : null\n }\n if (explicit.captureConsole === false && explicit.captureNetwork === false) {\n return null\n }\n return explicit\n}\n","export type Cleanup = () => void\n\nexport interface Disposable {\n destroy(): void\n}\n\nexport interface CleanupStack {\n add(cleanup: Cleanup | Disposable | null | undefined): void\n drain(): void\n}\n\nexport function createCleanupStack(): CleanupStack {\n const stack: Cleanup[] = []\n return {\n add(cleanup) {\n if (!cleanup) return\n if (typeof cleanup === \"function\") stack.push(cleanup)\n else stack.push(() => cleanup.destroy())\n },\n drain() {\n for (let i = stack.length - 1; i >= 0; i--) {\n try {\n stack[i]()\n } catch (err) {\n console.error(\"[uidex] cleanup threw\", err)\n }\n }\n stack.length = 0\n },\n }\n}\n\nexport function composeCleanups(cleanups: readonly Cleanup[]): Cleanup {\n return () => {\n for (let i = cleanups.length - 1; i >= 0; i--) {\n try {\n cleanups[i]?.()\n } catch (err) {\n console.error(\"[uidex] cleanup threw\", err)\n }\n }\n }\n}\n","import { createActor, type Actor } from \"xstate\"\nimport { createStore, type StoreApi } from \"zustand/vanilla\"\n\nimport { sameRef } from \"../entities\"\nimport { highlightMachine, type HighlightContext } from \"../flows/highlight\"\nimport {\n surfaceMachine,\n type SurfaceEvent,\n type SurfaceInput,\n} from \"../flows/surface\"\nimport type {\n ResolvedTheme,\n SessionSnapshot,\n SessionState,\n ThemePreference,\n ViewStackEntry,\n} from \"./types\"\n\nexport type SessionStore = StoreApi<SessionState> & {\n send(event: SurfaceEvent): void\n}\n\nexport interface SurfaceBindings {\n mountInspector?: () => void\n destroyInspector?: () => void\n openActionsPopup?: () => void\n closePopup?: () => void\n}\n\nexport interface HighlightBindings {\n showOverlay?: (context: HighlightContext) => void\n hideOverlay?: () => void\n updateOverlay?: (context: HighlightContext) => void\n}\n\nexport interface SessionBindings {\n surface?: SurfaceBindings\n highlight?: HighlightBindings\n}\n\nexport interface CreateSessionOptions extends Partial<SessionSnapshot> {\n detectTheme?: () => ResolvedTheme\n /**\n * Action implementations injected into the surface machine and its\n * highlight child actor. Implementations may be closures that read from\n * mutable refs filled in after `createSession` returns (e.g., the SDK's\n * shell isn't available until `mount`).\n */\n bindings?: SessionBindings\n}\n\nconst defaultSnapshot: SessionSnapshot = {\n hover: null,\n selection: null,\n stack: [],\n pinnedHighlight: null,\n inspectorActive: false,\n theme: \"auto\",\n resolvedTheme: \"light\",\n ingestActive: false,\n}\n\nexport function resolveTheme(\n preference: ThemePreference,\n detect?: () => ResolvedTheme\n): ResolvedTheme {\n if (preference !== \"auto\") return preference\n if (detect) return detect()\n if (\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as { matchMedia?: unknown }).matchMedia === \"function\"\n ) {\n const mql = (\n globalThis as {\n matchMedia: (q: string) => { matches: boolean }\n }\n ).matchMedia(\"(prefers-color-scheme: dark)\")\n return mql.matches ? \"dark\" : \"light\"\n }\n return \"light\"\n}\n\ntype SurfaceActor = Actor<typeof surfaceMachine>\n\nfunction projectFromActor(actor: SurfaceActor): SessionSnapshot {\n const sn = actor.getSnapshot()\n const child = sn.children.highlight\n const childSnapshot = child?.getSnapshot()\n const pinned =\n childSnapshot && childSnapshot.value === \"pinned\"\n ? childSnapshot.context.pinnedRef\n : null\n return {\n hover: sn.context.hover,\n selection: sn.context.selection,\n stack: sn.context.stack,\n pinnedHighlight: pinned,\n inspectorActive: sn.matches(\"inspecting\"),\n theme: sn.context.theme,\n resolvedTheme: sn.context.resolvedTheme,\n ingestActive: sn.context.ingestActive,\n }\n}\n\nexport function createSession(\n options: CreateSessionOptions = {}\n): SessionStore {\n const { detectTheme, bindings, ...overrides } = options\n const initialPref: ThemePreference = overrides.theme ?? defaultSnapshot.theme\n const initialResolved: ResolvedTheme =\n overrides.resolvedTheme ?? resolveTheme(initialPref, detectTheme)\n const initialStack: ViewStackEntry[] = overrides.stack ?? []\n\n const input: SurfaceInput = {\n hover: overrides.hover ?? null,\n selection: overrides.selection ?? null,\n pinnedHighlight: null,\n theme: initialPref,\n resolvedTheme: initialResolved,\n ingestActive: overrides.ingestActive ?? false,\n }\n\n const providedHighlight = highlightMachine.provide({\n actions: {\n showOverlay: ({ context }) => bindings?.highlight?.showOverlay?.(context),\n hideOverlay: () => bindings?.highlight?.hideOverlay?.(),\n updateOverlay: ({ context }) =>\n bindings?.highlight?.updateOverlay?.(context),\n },\n })\n\n const providedSurface = surfaceMachine.provide({\n actions: {\n mountInspector: () => bindings?.surface?.mountInspector?.(),\n destroyInspector: () => bindings?.surface?.destroyInspector?.(),\n openActionsPopup: () => bindings?.surface?.openActionsPopup?.(),\n closePopup: () => bindings?.surface?.closePopup?.(),\n },\n actors: {\n highlight: providedHighlight,\n },\n })\n\n const actor = createActor(providedSurface, { input })\n actor.start()\n\n // Hydrate initial state via events (idle.entry resets stack, so we cannot\n // pass it through input).\n if (initialStack.length > 0) {\n actor.send({ type: \"OPEN_PALETTE\" })\n for (let i = 1; i < initialStack.length; i++) {\n actor.send({ type: \"PUSH_VIEW\", entry: initialStack[i] })\n }\n } else if (overrides.inspectorActive) {\n actor.send({ type: \"TOGGLE_INSPECTOR\" })\n }\n if (overrides.pinnedHighlight) {\n actor.send({ type: \"PIN\", ref: overrides.pinnedHighlight })\n }\n\n const store = createStore<SessionState>((_set, get) => ({\n ...projectFromActor(actor),\n actions: {\n hover(ref) {\n if (sameRef(get().hover, ref)) return\n if (ref === null) {\n actor.send({ type: \"UNHOVER\" })\n } else {\n actor.send({ type: \"HOVER\", ref, element: null })\n }\n },\n select(ref) {\n if (sameRef(get().selection, ref)) return\n actor.send({ type: \"SET_SELECTION\", ref })\n },\n pushStack(entry) {\n if (entry.id === \"command-palette\" && get().stack.length === 0) {\n actor.send({ type: \"OPEN_PALETTE\" })\n } else {\n actor.send({ type: \"PUSH_VIEW\", entry })\n }\n },\n popStack() {\n const sn = actor.getSnapshot()\n if (sn.matches(\"palette\")) {\n actor.send({ type: \"ESC\" })\n } else if (sn.matches(\"viewing\")) {\n actor.send({ type: \"POP_VIEW\" })\n }\n },\n clearStack() {\n if (get().stack.length === 0) return\n actor.send({ type: \"CLOSE\" })\n },\n openView(id, ref) {\n const resolvedRef = ref === undefined ? get().selection : ref\n get().actions.pushStack({ id, ref: resolvedRef })\n },\n closeView() {\n get().actions.clearStack()\n },\n setInspectorActive(active) {\n if (get().inspectorActive === active) return\n actor.send({ type: \"TOGGLE_INSPECTOR\" })\n },\n toggleInspector() {\n actor.send({ type: \"TOGGLE_INSPECTOR\" })\n },\n pinHighlight(ref) {\n if (sameRef(get().pinnedHighlight, ref)) return\n actor.send({ type: \"PIN\", ref })\n },\n clearPinnedHighlight() {\n if (get().pinnedHighlight === null) return\n actor.send({ type: \"UNPIN\" })\n },\n setTheme(theme, resolved) {\n const state = get()\n const nextResolved = resolved ?? resolveTheme(theme, detectTheme)\n if (state.theme === theme && state.resolvedTheme === nextResolved)\n return\n actor.send({ type: \"SET_THEME\", theme, resolvedTheme: nextResolved })\n },\n setIngest(active) {\n if (get().ingestActive === active) return\n actor.send({ type: \"SET_INGEST\", active })\n },\n },\n }))\n\n const projectAndSet = (): void => {\n const next = projectFromActor(actor)\n const prev = store.getState()\n const updates: Partial<SessionSnapshot> = {}\n if (!sameRef(prev.hover, next.hover)) updates.hover = next.hover\n if (!sameRef(prev.selection, next.selection))\n updates.selection = next.selection\n if (prev.stack !== next.stack) updates.stack = next.stack\n if (!sameRef(prev.pinnedHighlight, next.pinnedHighlight))\n updates.pinnedHighlight = next.pinnedHighlight\n if (prev.inspectorActive !== next.inspectorActive)\n updates.inspectorActive = next.inspectorActive\n if (prev.theme !== next.theme) updates.theme = next.theme\n if (prev.resolvedTheme !== next.resolvedTheme)\n updates.resolvedTheme = next.resolvedTheme\n if (prev.ingestActive !== next.ingestActive)\n updates.ingestActive = next.ingestActive\n if (Object.keys(updates).length === 0) return\n store.setState(updates)\n }\n actor.subscribe(projectAndSet)\n\n const session = store as SessionStore\n session.send = (event) => actor.send(event)\n return session\n}\n","import { assign, setup } from \"xstate\"\n\nimport type { EntityRef } from \"../entities/types\"\n\nexport interface HighlightContext {\n ref: EntityRef | null\n element: HTMLElement | null\n pinnedRef: EntityRef | null\n color: string | null\n}\n\nexport type HighlightEvent =\n | {\n type: \"HOVER\"\n ref: EntityRef\n element: HTMLElement\n color?: string | null\n }\n | { type: \"UNHOVER\" }\n | { type: \"PIN\"; ref?: EntityRef }\n | { type: \"UNPIN\" }\n\nconst initialContext: HighlightContext = {\n ref: null,\n element: null,\n pinnedRef: null,\n color: null,\n}\n\nexport const highlightMachine = setup({\n types: {} as {\n context: HighlightContext\n events: HighlightEvent\n },\n actions: {\n showOverlay: () => {},\n hideOverlay: () => {},\n updateOverlay: () => {},\n },\n}).createMachine({\n id: \"highlight\",\n initial: \"none\",\n context: initialContext,\n states: {\n none: {\n entry: [\n assign({\n ref: null,\n element: null,\n pinnedRef: null,\n color: null,\n }),\n { type: \"hideOverlay\" },\n ],\n on: {\n HOVER: {\n target: \"transient\",\n actions: assign(({ event }) => ({\n ref: event.ref,\n element: event.element,\n color: event.color ?? null,\n })),\n },\n PIN: {\n target: \"pinned\",\n actions: assign(({ context, event }) => ({\n ref: event.ref ?? context.ref,\n pinnedRef: event.ref ?? context.ref,\n })),\n },\n },\n },\n transient: {\n entry: { type: \"showOverlay\" },\n on: {\n HOVER: {\n actions: [\n assign(({ event }) => ({\n ref: event.ref,\n element: event.element,\n color: event.color ?? null,\n })),\n { type: \"updateOverlay\" },\n ],\n },\n UNHOVER: { target: \"none\" },\n PIN: {\n target: \"pinned\",\n actions: assign(({ context, event }) => ({\n pinnedRef: event.ref ?? context.ref,\n })),\n },\n },\n },\n pinned: {\n entry: { type: \"showOverlay\" },\n on: {\n UNPIN: { target: \"none\" },\n },\n },\n },\n})\n","import { assign, forwardTo, sendTo, setup } from \"xstate\"\n\nimport type { EntityRef } from \"../entities/types\"\nimport type {\n ResolvedTheme,\n ThemePreference,\n ViewStackEntry,\n} from \"../session/types\"\nimport { highlightMachine } from \"./highlight\"\n\nexport interface SurfaceContext {\n stack: ViewStackEntry[]\n hover: EntityRef | null\n selection: EntityRef | null\n pinnedHighlight: EntityRef | null\n theme: ThemePreference\n resolvedTheme: ResolvedTheme\n ingestActive: boolean\n}\n\nexport type SurfaceEvent =\n | { type: \"TOGGLE_INSPECTOR\" }\n | { type: \"OPEN_PALETTE\" }\n | { type: \"PUSH_VIEW\"; entry: ViewStackEntry }\n | { type: \"POP_VIEW\" }\n | { type: \"CLOSE\" }\n | { type: \"ESC\" }\n | { type: \"CMD_K\" }\n | { type: \"SELECT\"; ref: EntityRef | null; entry: ViewStackEntry }\n | { type: \"SET_SELECTION\"; ref: EntityRef | null }\n | {\n type: \"HOVER\"\n ref: EntityRef\n element: HTMLElement | null\n color?: string | null\n }\n | { type: \"UNHOVER\" }\n | { type: \"PIN\"; ref?: EntityRef }\n | { type: \"UNPIN\" }\n | {\n type: \"SET_THEME\"\n theme: ThemePreference\n resolvedTheme: ResolvedTheme\n }\n | { type: \"SET_INGEST\"; active: boolean }\n\nexport type SurfaceInput = Partial<SurfaceContext>\n\nconst initialContext: SurfaceContext = {\n stack: [],\n hover: null,\n selection: null,\n pinnedHighlight: null,\n theme: \"auto\",\n resolvedTheme: \"light\",\n ingestActive: false,\n}\n\nexport const surfaceMachine = setup({\n types: {} as {\n context: SurfaceContext\n events: SurfaceEvent\n children: { highlight: \"highlight\" }\n },\n actors: {\n highlight: highlightMachine,\n },\n actions: {\n mountInspector: () => {},\n destroyInspector: () => {},\n openActionsPopup: () => {},\n closePopup: () => {},\n },\n guards: {\n hasPinnedHighlight: ({ context }) => context.pinnedHighlight !== null,\n hasActions: () => false,\n popupOpen: () => false,\n stackDeeperThanTwo: ({ context }) => context.stack.length > 2,\n stackEqualsTwo: ({ context }) => context.stack.length === 2,\n stackEqualsOne: ({ context }) => context.stack.length === 1,\n paletteAtBottomDepthTwo: ({ context }) =>\n context.stack.length === 2 && context.stack[0]?.id === \"command-palette\",\n },\n}).createMachine({\n id: \"surface\",\n initial: \"idle\",\n context: ({ input }) => ({\n ...initialContext,\n ...((input as SurfaceInput | undefined) ?? {}),\n }),\n invoke: {\n id: \"highlight\",\n src: \"highlight\",\n },\n on: {\n HOVER: {\n actions: [\n assign(({ event }) => ({ hover: event.ref })),\n forwardTo(\"highlight\"),\n ],\n },\n UNHOVER: {\n actions: [assign({ hover: null }), forwardTo(\"highlight\")],\n },\n PIN: {\n actions: [\n assign(({ context, event }) => ({\n pinnedHighlight: event.ref ?? context.hover,\n })),\n forwardTo(\"highlight\"),\n ],\n },\n UNPIN: {\n actions: [assign({ pinnedHighlight: null }), forwardTo(\"highlight\")],\n },\n SET_SELECTION: {\n actions: assign(({ event }) => ({ selection: event.ref })),\n },\n SET_THEME: {\n actions: assign(({ event }) => ({\n theme: event.theme,\n resolvedTheme: event.resolvedTheme,\n })),\n },\n SET_INGEST: {\n actions: assign(({ event }) => ({ ingestActive: event.active })),\n },\n },\n states: {\n idle: {\n entry: assign({ stack: [] }),\n on: {\n TOGGLE_INSPECTOR: { target: \"inspecting\" },\n OPEN_PALETTE: { target: \"palette\" },\n PUSH_VIEW: {\n target: \"viewing\",\n actions: assign(({ event }) => ({ stack: [event.entry] })),\n },\n ESC: {\n guard: \"hasPinnedHighlight\",\n actions: [\n assign({ pinnedHighlight: null }),\n sendTo(\"highlight\", { type: \"UNPIN\" }),\n ],\n },\n },\n },\n inspecting: {\n entry: { type: \"mountInspector\" },\n exit: { type: \"destroyInspector\" },\n on: {\n SELECT: {\n target: \"viewing\",\n actions: assign(({ context, event }) => ({\n selection: event.ref,\n stack: [...context.stack, event.entry],\n })),\n },\n PUSH_VIEW: {\n target: \"viewing\",\n actions: assign(({ event }) => ({ stack: [event.entry] })),\n },\n TOGGLE_INSPECTOR: { target: \"idle\" },\n OPEN_PALETTE: { target: \"palette\" },\n ESC: { target: \"idle\" },\n },\n },\n palette: {\n entry: assign({ stack: [{ id: \"command-palette\", ref: null }] }),\n on: {\n PUSH_VIEW: {\n target: \"viewing\",\n actions: assign(({ context, event }) => ({\n stack: [...context.stack, event.entry],\n })),\n },\n CLOSE: { target: \"idle\" },\n ESC: { target: \"idle\" },\n CMD_K: [\n {\n guard: \"hasActions\",\n actions: { type: \"openActionsPopup\" },\n },\n { target: \"idle\" },\n ],\n },\n },\n viewing: {\n on: {\n PUSH_VIEW: {\n actions: assign(({ context, event }) => ({\n stack: [...context.stack, event.entry],\n })),\n },\n POP_VIEW: [\n {\n guard: \"stackDeeperThanTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"paletteAtBottomDepthTwo\",\n target: \"palette\",\n },\n {\n guard: \"stackEqualsTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"stackEqualsOne\",\n target: \"idle\",\n },\n ],\n CLOSE: { target: \"idle\" },\n ESC: [\n {\n guard: \"popupOpen\",\n actions: { type: \"closePopup\" },\n },\n {\n guard: \"stackDeeperThanTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"paletteAtBottomDepthTwo\",\n target: \"palette\",\n },\n {\n guard: \"stackEqualsTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"stackEqualsOne\",\n target: \"idle\",\n },\n ],\n },\n },\n },\n})\n","/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-amber-50: oklch(98.7% 0.022 95.277);\n --color-amber-100: oklch(96.2% 0.059 95.617);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-500: oklch(76.9% 0.188 70.08);\n --color-amber-600: oklch(66.6% 0.179 58.318);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-amber-800: oklch(47.3% 0.137 46.201);\n --color-emerald-50: oklch(97.9% 0.021 166.113);\n --color-emerald-100: oklch(95% 0.052 163.051);\n --color-emerald-400: oklch(76.5% 0.177 163.223);\n --color-emerald-500: oklch(69.6% 0.17 162.48);\n --color-emerald-600: oklch(59.6% 0.145 163.225);\n --color-emerald-700: oklch(50.8% 0.118 165.612);\n --color-cyan-50: oklch(98.4% 0.019 200.873);\n --color-cyan-100: oklch(95.6% 0.045 203.388);\n --color-cyan-400: oklch(78.9% 0.154 211.53);\n --color-cyan-700: oklch(52% 0.105 223.128);\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-100: oklch(93.2% 0.032 255.585);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-violet-50: oklch(96.9% 0.016 293.756);\n --color-violet-100: oklch(94.3% 0.029 294.588);\n --color-violet-400: oklch(70.2% 0.183 293.541);\n --color-violet-700: oklch(49.1% 0.27 292.581);\n --color-fuchsia-50: oklch(97.7% 0.017 320.058);\n --color-fuchsia-100: oklch(95.2% 0.037 318.852);\n --color-fuchsia-400: oklch(74% 0.238 322.16);\n --color-fuchsia-700: oklch(51.8% 0.253 323.949);\n --color-rose-50: oklch(96.9% 0.015 12.422);\n --color-rose-100: oklch(94.1% 0.03 12.58);\n --color-rose-400: oklch(71.2% 0.194 13.428);\n --color-rose-600: oklch(58.6% 0.253 17.585);\n --color-rose-700: oklch(51.4% 0.222 16.935);\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-neutral-50: oklch(98.5% 0 0);\n --color-neutral-100: oklch(97% 0 0);\n --color-neutral-400: oklch(70.8% 0 0);\n --color-neutral-500: oklch(55.6% 0 0);\n --color-neutral-800: oklch(26.9% 0 0);\n --color-neutral-950: oklch(14.5% 0 0);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-sm: 24rem;\n --container-xl: 36rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --tracking-tight: -0.025em;\n --tracking-widest: 0.1em;\n --leading-relaxed: 1.625;\n --radius-md: calc(var(--radius) * 0.8);\n --radius-lg: var(--radius);\n --radius-xl: calc(var(--radius) * 1.4);\n --radius-2xl: calc(var(--radius) * 1.8);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --animate-spin: spin 1s linear infinite;\n --blur-sm: 8px;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\",\n Roboto, sans-serif;\n --default-mono-font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n --color-muted: var(--muted);\n --color-border: var(--border);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .pointer-events-none {\n pointer-events: none;\n }\n .\\!visible {\n visibility: visible !important;\n }\n .invisible {\n visibility: hidden;\n }\n .visible {\n visibility: visible;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border-width: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .start {\n inset-inline-start: var(--spacing);\n }\n .end {\n inset-inline-end: var(--spacing);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .bottom-px {\n bottom: 1px;\n }\n .z-1 {\n z-index: 1;\n }\n .z-10 {\n z-index: 10;\n }\n .z-\\[2147483647\\] {\n z-index: 2147483647;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .-mx-px {\n margin-inline: -1px;\n }\n .mx-1 {\n margin-inline: calc(var(--spacing) * 1);\n }\n .mx-2 {\n margin-inline: calc(var(--spacing) * 2);\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .ms-auto {\n margin-inline-start: auto;\n }\n .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n .ml-auto {\n margin-left: auto;\n }\n .block {\n display: block;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .hidden {\n display: none;\n }\n .inline {\n display: inline;\n }\n .inline-flex {\n display: inline-flex;\n }\n .list-item {\n display: list-item;\n }\n .table {\n display: table;\n }\n .size-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n height: calc(var(--spacing) * 3.5);\n }\n .size-4 {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n .size-6 {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n .size-7 {\n width: calc(var(--spacing) * 7);\n height: calc(var(--spacing) * 7);\n }\n .size-8 {\n width: calc(var(--spacing) * 8);\n height: calc(var(--spacing) * 8);\n }\n .size-9 {\n width: calc(var(--spacing) * 9);\n height: calc(var(--spacing) * 9);\n }\n .h-3\\.5 {\n height: calc(var(--spacing) * 3.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-4\\.5 {\n height: calc(var(--spacing) * 4.5);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-5\\.5 {\n height: calc(var(--spacing) * 5.5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-7 {\n height: calc(var(--spacing) * 7);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-\\[26rem\\] {\n height: 26rem;\n }\n .h-auto {\n height: auto;\n }\n .h-full {\n height: 100%;\n }\n .h-px {\n height: 1px;\n }\n .max-h-32 {\n max-height: calc(var(--spacing) * 32);\n }\n .max-h-full {\n max-height: 100%;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-7 {\n min-height: calc(var(--spacing) * 7);\n }\n .min-h-8 {\n min-height: calc(var(--spacing) * 8);\n }\n .min-h-20 {\n min-height: calc(var(--spacing) * 20);\n }\n .w-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-20 {\n width: calc(var(--spacing) * 20);\n }\n .w-36 {\n width: calc(var(--spacing) * 36);\n }\n .w-56 {\n width: calc(var(--spacing) * 56);\n }\n .w-auto {\n width: auto;\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-full {\n max-width: 100%;\n }\n .max-w-sm {\n max-width: var(--container-sm);\n }\n .max-w-xl {\n max-width: var(--container-xl);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-4 {\n min-width: calc(var(--spacing) * 4);\n }\n .min-w-4\\.5 {\n min-width: calc(var(--spacing) * 4.5);\n }\n .min-w-5 {\n min-width: calc(var(--spacing) * 5);\n }\n .min-w-5\\.5 {\n min-width: calc(var(--spacing) * 5.5);\n }\n .min-w-32 {\n min-width: calc(var(--spacing) * 32);\n }\n .flex-1 {\n flex: 1;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .origin-bottom-left {\n transform-origin: 0 100%;\n }\n .origin-bottom-right {\n transform-origin: 100% 100%;\n }\n .-translate-x-0\\.5 {\n --tw-translate-x: calc(var(--spacing) * -0.5);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-0\\.5 {\n --tw-translate-x: calc(var(--spacing) * 0.5);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .scale-84 {\n --tw-scale-x: 84%;\n --tw-scale-y: 84%;\n --tw-scale-z: 84%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .-rotate-10 {\n rotate: calc(10deg * -1);\n }\n .rotate-10 {\n rotate: 10deg;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\n }\n .animate-skeleton {\n animation: skeleton 2s -1s infinite linear;\n }\n .animate-spin {\n animation: var(--animate-spin);\n }\n .cursor-default {\n cursor: default;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize {\n resize: both;\n }\n .scroll-py-2 {\n scroll-padding-block: calc(var(--spacing) * 2);\n }\n .list-none {\n list-style-type: none;\n }\n .appearance-none {\n appearance: none;\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-row {\n flex-direction: row;\n }\n .items-center {\n align-items: center;\n }\n .items-start {\n align-items: flex-start;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-start {\n justify-content: flex-start;\n }\n .gap-0 {\n gap: calc(var(--spacing) * 0);\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .self-start {\n align-self: flex-start;\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: calc(var(--radius) * 1.8);\n }\n .rounded-\\[0\\.25rem\\] {\n border-radius: 0.25rem;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius);\n }\n .rounded-md {\n border-radius: calc(var(--radius) * 0.8);\n }\n .rounded-sm {\n border-radius: calc(var(--radius) * 0.6);\n }\n .rounded-xl {\n border-radius: calc(var(--radius) * 1.4);\n }\n .rounded-t-xl {\n border-top-left-radius: calc(var(--radius) * 1.4);\n border-top-right-radius: calc(var(--radius) * 1.4);\n }\n .rounded-b-\\[calc\\(var\\(--radius-2xl\\)-1px\\)\\] {\n border-bottom-right-radius: calc(var(--radius-2xl) - 1px);\n border-bottom-left-radius: calc(var(--radius-2xl) - 1px);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-b-0 {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 0px;\n }\n .border-amber-500\\/40 {\n border-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-amber-500) 40%, transparent);\n }\n }\n .border-border {\n border-color: var(--border);\n }\n .border-destructive {\n border-color: var(--destructive);\n }\n .border-info\\/40 {\n border-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--info) 40%, transparent);\n }\n }\n .border-input {\n border-color: var(--input);\n }\n .border-primary {\n border-color: var(--primary);\n }\n .border-transparent {\n border-color: transparent;\n }\n .bg-amber-50 {\n background-color: var(--color-amber-50);\n }\n .bg-amber-500\\/15 {\n background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-500) 15%, transparent);\n }\n }\n .bg-background {\n background-color: var(--background);\n }\n .bg-black\\/32 {\n background-color: color-mix(in srgb, #000 32%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 32%, transparent);\n }\n }\n .bg-black\\/80 {\n background-color: color-mix(in srgb, #000 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 80%, transparent);\n }\n }\n .bg-blue-50 {\n background-color: var(--color-blue-50);\n }\n .bg-border {\n background-color: var(--border);\n }\n .bg-card {\n background-color: var(--card);\n }\n .bg-cyan-50 {\n background-color: var(--color-cyan-50);\n }\n .bg-destructive {\n background-color: var(--destructive);\n }\n .bg-destructive\\/10 {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n }\n }\n .bg-emerald-50 {\n background-color: var(--color-emerald-50);\n }\n .bg-fuchsia-50 {\n background-color: var(--color-fuchsia-50);\n }\n .bg-info\\/10 {\n background-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--info) 10%, transparent);\n }\n }\n .bg-info\\/15 {\n background-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--info) 15%, transparent);\n }\n }\n .bg-muted {\n background-color: var(--muted);\n }\n .bg-popover {\n background-color: var(--popover);\n }\n .bg-primary {\n background-color: var(--primary);\n }\n .bg-rose-50 {\n background-color: var(--color-rose-50);\n }\n .bg-secondary {\n background-color: var(--secondary);\n }\n .bg-slate-50 {\n background-color: var(--color-slate-50);\n }\n .bg-success\\/10 {\n background-color: var(--success);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--success) 10%, transparent);\n }\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-violet-50 {\n background-color: var(--color-violet-50);\n }\n .bg-warning\\/10 {\n background-color: var(--warning);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--warning) 10%, transparent);\n }\n }\n .bg-clip-padding {\n background-clip: padding-box;\n }\n .bg-\\[right_0\\.5rem_center\\] {\n background-position: right 0.5rem center;\n }\n .bg-no-repeat {\n background-repeat: no-repeat;\n }\n .object-cover {\n object-fit: cover;\n }\n .object-top {\n object-position: top;\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-1\\.5 {\n padding: calc(var(--spacing) * 1.5);\n }\n .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .p-6 {\n padding: calc(var(--spacing) * 6);\n }\n .px-0 {\n padding-inline: calc(var(--spacing) * 0);\n }\n .px-1 {\n padding-inline: calc(var(--spacing) * 1);\n }\n .px-1\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-2\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-3\\.5 {\n padding-inline: calc(var(--spacing) * 3.5);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .py-0 {\n padding-block: calc(var(--spacing) * 0);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-12 {\n padding-block: calc(var(--spacing) * 12);\n }\n .py-\\[max\\(1rem\\,4vh\\)\\] {\n padding-block: max(1rem, 4vh);\n }\n .ps-2 {\n padding-inline-start: calc(var(--spacing) * 2);\n }\n .pe-3 {\n padding-inline-end: calc(var(--spacing) * 3);\n }\n .pr-8 {\n padding-right: calc(var(--spacing) * 8);\n }\n .pl-3 {\n padding-left: calc(var(--spacing) * 3);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .font-mono {\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n }\n .font-sans {\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\",\n Roboto, sans-serif;\n }\n .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n .text-base\\/4\\.5 {\n font-size: var(--text-base);\n line-height: calc(var(--spacing) * 4.5);\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .text-\\[0\\.625rem\\] {\n font-size: 0.625rem;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-normal {\n --tw-font-weight: var(--font-weight-normal);\n font-weight: var(--font-weight-normal);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-tight {\n --tw-tracking: var(--tracking-tight);\n letter-spacing: var(--tracking-tight);\n }\n .tracking-widest {\n --tw-tracking: var(--tracking-widest);\n letter-spacing: var(--tracking-widest);\n }\n .text-balance {\n text-wrap: balance;\n }\n .break-words {\n overflow-wrap: break-word;\n }\n .whitespace-normal {\n white-space: normal;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .text-amber-600 {\n color: var(--color-amber-600);\n }\n .text-amber-700 {\n color: var(--color-amber-700);\n }\n .text-amber-800 {\n color: var(--color-amber-800);\n }\n .text-blue-700 {\n color: var(--color-blue-700);\n }\n .text-cyan-700 {\n color: var(--color-cyan-700);\n }\n .text-destructive-foreground {\n color: var(--destructive-foreground);\n }\n .text-emerald-700 {\n color: var(--color-emerald-700);\n }\n .text-foreground {\n color: var(--foreground);\n }\n .text-fuchsia-700 {\n color: var(--color-fuchsia-700);\n }\n .text-info-foreground {\n color: var(--info-foreground);\n }\n .text-muted-foreground {\n color: var(--muted-foreground);\n }\n .text-muted-foreground\\/70 {\n color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--muted-foreground) 70%, transparent);\n }\n }\n .text-popover-foreground {\n color: var(--popover-foreground);\n }\n .text-primary-foreground {\n color: var(--primary-foreground);\n }\n .text-rose-700 {\n color: var(--color-rose-700);\n }\n .text-secondary-foreground {\n color: var(--secondary-foreground);\n }\n .text-slate-600 {\n color: var(--color-slate-600);\n }\n .text-success-foreground {\n color: var(--success-foreground);\n }\n .text-violet-700 {\n color: var(--color-violet-700);\n }\n .text-warning-foreground {\n color: var(--warning-foreground);\n }\n .text-white {\n color: var(--color-white);\n }\n .lowercase {\n text-transform: lowercase;\n }\n .ordinal {\n --tw-ordinal: ordinal;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .line-through {\n text-decoration-line: line-through;\n }\n .underline {\n text-decoration-line: underline;\n }\n .underline-offset-4 {\n text-underline-offset: 4px;\n }\n .accent-accent {\n accent-color: var(--accent);\n }\n .accent-primary {\n accent-color: var(--primary);\n }\n .opacity-50 {\n opacity: 50%;\n }\n .opacity-80 {\n opacity: 80%;\n }\n .shadow-lg\\/5 {\n --tw-shadow-alpha: 5%;\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%)), 0 4px 6px -4px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-sm\\/5 {\n --tw-shadow-alpha: 5%;\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%)), 0 1px 2px -1px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs\\/5 {\n --tw-shadow-alpha: 5%;\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.05) l a b / 5%));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-none {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs {\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .inset-ring {\n --tw-inset-ring-shadow: inset 0 0 0 1px var(--tw-inset-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .inset-ring-amber-600\\/20 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(66.6% 0.179 58.318) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-amber-600) 20%, transparent);\n }\n }\n .inset-ring-blue-700\\/10 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(48.8% 0.243 264.376) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-blue-700) 10%, transparent);\n }\n }\n .inset-ring-cyan-700\\/10 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(52% 0.105 223.128) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-cyan-700) 10%, transparent);\n }\n }\n .inset-ring-emerald-600\\/20 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(59.6% 0.145 163.225) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-emerald-600) 20%, transparent);\n }\n }\n .inset-ring-fuchsia-700\\/10 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(51.8% 0.253 323.949) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-fuchsia-700) 10%, transparent);\n }\n }\n .inset-ring-rose-600\\/10 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(58.6% 0.253 17.585) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-rose-600) 10%, transparent);\n }\n }\n .inset-ring-slate-500\\/10 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(55.4% 0.046 257.417) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-slate-500) 10%, transparent);\n }\n }\n .inset-ring-violet-700\\/10 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(49.1% 0.27 292.581) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-violet-700) 10%, transparent);\n }\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .filter {\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .backdrop-blur-sm {\n --tw-backdrop-blur: blur(var(--blur-sm));\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-shadow {\n transition-property: box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .ease-out {\n --tw-ease: var(--ease-out);\n transition-timing-function: var(--ease-out);\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n .\\[--skeleton-highlight\\:--alpha\\(var\\(--color-white\\)\\/64\\%\\)\\] {\n --skeleton-highlight: color-mix(in srgb, #fff 64%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --skeleton-highlight: color-mix(in oklab, var(--color-white) 64%, transparent);\n }\n }\n .\\[background\\:linear-gradient\\(120deg\\,transparent_40\\%\\,var\\(--skeleton-highlight\\)\\,transparent_60\\%\\)_var\\(--color-muted\\)_0_0\\/200\\%_100\\%_fixed\\] {\n background: linear-gradient(120deg,transparent 40%,var(--skeleton-highlight),transparent 60%) var(--color-muted) 0 0/200% 100% fixed;\n }\n .\\[clip-path\\:inset\\(0_1px\\)\\] {\n clip-path: inset(0 1px);\n }\n .not-dark\\:bg-clip-padding {\n &:not(*:is(.dark *, :host(.dark) *)) {\n background-clip: padding-box;\n }\n }\n .group-data-hover\\:bg-amber-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-amber-100);\n }\n }\n .group-data-hover\\:bg-blue-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-blue-100);\n }\n }\n .group-data-hover\\:bg-cyan-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-cyan-100);\n }\n }\n .group-data-hover\\:bg-emerald-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-emerald-100);\n }\n }\n .group-data-hover\\:bg-fuchsia-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-fuchsia-100);\n }\n }\n .group-data-hover\\:bg-rose-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-rose-100);\n }\n }\n .group-data-hover\\:bg-slate-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-slate-100);\n }\n }\n .group-data-hover\\:bg-violet-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-violet-100);\n }\n }\n .placeholder\\:text-muted-foreground {\n &::placeholder {\n color: var(--muted-foreground);\n }\n }\n .before\\:pointer-events-none {\n &::before {\n content: var(--tw-content);\n pointer-events: none;\n }\n }\n .before\\:absolute {\n &::before {\n content: var(--tw-content);\n position: absolute;\n }\n }\n .before\\:inset-0 {\n &::before {\n content: var(--tw-content);\n inset: calc(var(--spacing) * 0);\n }\n }\n .before\\:rounded-\\[calc\\(var\\(--radius-2xl\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-radius: calc(var(--radius-2xl) - 1px);\n }\n }\n .before\\:rounded-\\[calc\\(var\\(--radius-lg\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-radius: calc(var(--radius-lg) - 1px);\n }\n }\n .before\\:rounded-\\[calc\\(var\\(--radius-md\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-radius: calc(var(--radius-md) - 1px);\n }\n }\n .before\\:rounded-\\[calc\\(var\\(--radius-xl\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-radius: calc(var(--radius-xl) - 1px);\n }\n }\n .before\\:rounded-t-\\[calc\\(var\\(--radius-xl\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-top-left-radius: calc(var(--radius-xl) - 1px);\n border-top-right-radius: calc(var(--radius-xl) - 1px);\n }\n }\n .before\\:bg-muted\\/72 {\n &::before {\n content: var(--tw-content);\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 72%, transparent);\n }\n }\n }\n .before\\:shadow-\\[0_1px_--theme\\(--color-black\\/4\\%\\)\\] {\n &::before {\n content: var(--tw-content);\n --tw-shadow: 0 1px var(--tw-shadow-color, color-mix(in srgb, #000 4%, transparent));\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow: 0 1px var(--tw-shadow-color, color-mix(in oklab, var(--color-black) 4%, transparent));\n }\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-within\\:border-ring {\n &:focus-within {\n border-color: var(--ring);\n }\n }\n .focus-within\\:bg-accent {\n &:focus-within {\n background-color: var(--accent);\n }\n }\n .focus-within\\:text-accent-foreground {\n &:focus-within {\n color: var(--accent-foreground);\n }\n }\n .focus-within\\:ring-\\[3px\\] {\n &:focus-within {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-within\\:ring-ring\\/30 {\n &:focus-within {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 30%, transparent);\n }\n }\n }\n .hover\\:border-destructive\\/30 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--destructive) 30%, transparent);\n }\n }\n }\n }\n .hover\\:bg-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n .hover\\:bg-amber-500\\/20 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-500) 20%, transparent);\n }\n }\n }\n }\n .hover\\:bg-destructive\\/5 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 5%, transparent);\n }\n }\n }\n }\n .hover\\:bg-destructive\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-info\\/20 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--info) 20%, transparent);\n }\n }\n }\n }\n .hover\\:bg-primary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-secondary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:text-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n .hover\\:underline {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n .focus\\:bg-accent {\n &:focus {\n background-color: var(--accent);\n }\n }\n .focus\\:text-accent-foreground {\n &:focus {\n color: var(--accent-foreground);\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .focus-visible\\:border-ring {\n &:focus-visible {\n border-color: var(--ring);\n }\n }\n .focus-visible\\:ring-2 {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-\\[3px\\] {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-ring {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n }\n }\n .focus-visible\\:ring-ring\\/30 {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 30%, transparent);\n }\n }\n }\n .focus-visible\\:ring-offset-1 {\n &:focus-visible {\n --tw-ring-offset-width: 1px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n }\n .focus-visible\\:ring-offset-background {\n &:focus-visible {\n --tw-ring-offset-color: var(--background);\n }\n }\n .disabled\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\:cursor-not-allowed {\n &:disabled {\n cursor: not-allowed;\n }\n }\n .disabled\\:opacity-60 {\n &:disabled {\n opacity: 60%;\n }\n }\n .has-disabled\\:opacity-60 {\n &:has(*:disabled) {\n opacity: 60%;\n }\n }\n .aria-invalid\\:border-destructive\\/40 {\n &[aria-invalid=\"true\"] {\n border-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n .aria-invalid\\:focus-visible\\:ring-destructive\\/20 {\n &[aria-invalid=\"true\"] {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n }\n .data-\\[disabled\\]\\:pointer-events-none {\n &[data-disabled] {\n pointer-events: none;\n }\n }\n .data-\\[disabled\\]\\:opacity-64 {\n &[data-disabled] {\n opacity: 64%;\n }\n }\n .data-\\[highlighted\\]\\:bg-accent {\n &[data-highlighted] {\n background-color: var(--accent);\n }\n }\n .data-\\[highlighted\\]\\:text-accent-foreground {\n &[data-highlighted] {\n color: var(--accent-foreground);\n }\n }\n .sm\\:min-h-7 {\n @media (width >= 40rem) {\n min-height: calc(var(--spacing) * 7);\n }\n }\n .sm\\:py-\\[10vh\\] {\n @media (width >= 40rem) {\n padding-block: 10vh;\n }\n }\n .sm\\:text-sm {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .sm\\:text-sm\\/4 {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: calc(var(--spacing) * 4);\n }\n }\n .dark\\:bg-amber-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-blue-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-cyan-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-destructive\\/20 {\n &:is(.dark *, :host(.dark) *) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-fuchsia-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-info\\/20 {\n &:is(.dark *, :host(.dark) *) {\n background-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--info) 20%, transparent);\n }\n }\n }\n .dark\\:bg-input\\/30 {\n &:is(.dark *, :host(.dark) *) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n .dark\\:bg-rose-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-slate-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-success\\/20 {\n &:is(.dark *, :host(.dark) *) {\n background-color: var(--success);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--success) 20%, transparent);\n }\n }\n }\n .dark\\:bg-violet-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-warning\\/20 {\n &:is(.dark *, :host(.dark) *) {\n background-color: var(--warning);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--warning) 20%, transparent);\n }\n }\n }\n .dark\\:text-amber-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-amber-400);\n }\n }\n .dark\\:text-amber-500 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-amber-500);\n }\n }\n .dark\\:text-blue-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-blue-400);\n }\n }\n .dark\\:text-cyan-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-cyan-400);\n }\n }\n .dark\\:text-emerald-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-emerald-400);\n }\n }\n .dark\\:text-fuchsia-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-fuchsia-400);\n }\n }\n .dark\\:text-rose-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-rose-400);\n }\n }\n .dark\\:text-slate-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-slate-400);\n }\n }\n .dark\\:text-violet-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-violet-400);\n }\n }\n .dark\\:inset-ring-amber-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-amber-400) 20%, transparent);\n }\n }\n }\n .dark\\:inset-ring-blue-400\\/30 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-blue-400) 30%, transparent);\n }\n }\n }\n .dark\\:inset-ring-cyan-400\\/30 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-cyan-400) 30%, transparent);\n }\n }\n }\n .dark\\:inset-ring-emerald-500\\/20 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-emerald-500) 20%, transparent);\n }\n }\n }\n .dark\\:inset-ring-fuchsia-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(74% 0.238 322.16) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-fuchsia-400) 20%, transparent);\n }\n }\n }\n .dark\\:inset-ring-rose-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-rose-400) 20%, transparent);\n }\n }\n }\n .dark\\:inset-ring-slate-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-slate-400) 20%, transparent);\n }\n }\n }\n .dark\\:inset-ring-violet-400\\/30 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-violet-400) 30%, transparent);\n }\n }\n }\n .dark\\:\\[--skeleton-highlight\\:--alpha\\(var\\(--color-white\\)\\/4\\%\\)\\] {\n &:is(.dark *, :host(.dark) *) {\n --skeleton-highlight: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --skeleton-highlight: color-mix(in oklab, var(--color-white) 4%, transparent);\n }\n }\n }\n .dark\\:group-data-hover\\:bg-amber-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-blue-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-cyan-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-emerald-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-fuchsia-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-rose-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-slate-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-violet-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:before\\:shadow-\\[0_-1px_--theme\\(--color-white\\/6\\%\\)\\] {\n &:is(.dark *, :host(.dark) *) {\n &::before {\n content: var(--tw-content);\n --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in srgb, #fff 6%, transparent));\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in oklab, var(--color-white) 6%, transparent));\n }\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .\\[\\&_svg\\]\\:pointer-events-none {\n & svg {\n pointer-events: none;\n }\n }\n .\\[\\&_svg\\]\\:shrink-0 {\n & svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'opacity-\\'\\]\\)\\]\\:opacity-80 {\n & svg:not([class*='opacity-']) {\n opacity: 80%;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4\\.5 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4.5);\n height: calc(var(--spacing) * 4.5);\n }\n }\n .\\[\\&\\>svg\\]\\:pointer-events-none {\n &>svg {\n pointer-events: none;\n }\n }\n .\\[\\&\\>svg\\]\\:-mx-0\\.5 {\n &>svg {\n margin-inline: calc(var(--spacing) * -0.5);\n }\n }\n .\\[\\&\\>svg\\]\\:shrink-0 {\n &>svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&\\>svg\\:not\\(\\[class\\*\\=\\'opacity-\\'\\]\\)\\]\\:opacity-80 {\n &>svg:not([class*='opacity-']) {\n opacity: 80%;\n }\n }\n .\\[\\&\\>svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n &>svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n}\n@layer base {\n *, ::after, ::before {\n border-color: var(--color-border, currentColor);\n }\n}\n@layer components {\n [data-highlighted] {\n background-color: var(--accent);\n color: var(--accent-foreground);\n transition: background-color 150ms ease-out;\n }\n [data-kbd-nav] [data-highlighted]:not([data-kbd-highlighted]) {\n background-color: transparent;\n color: inherit;\n }\n [data-kbd-highlighted] {\n background-color: var(--accent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in srgb, var(--accent) 200%, transparent);\n }\n color: var(--accent-foreground);\n }\n .uidex-item-interactive:hover {\n background-color: var(--accent);\n color: var(--accent-foreground);\n }\n [data-kbd-nav] .uidex-item-interactive:hover:not(:focus):not(:focus-within) {\n background-color: transparent;\n color: inherit;\n }\n .uidex-scrollbar {\n scrollbar-width: thin;\n scrollbar-color: var(--muted-foreground) transparent;\n @supports (color: color-mix(in lab, red, red)) {\n scrollbar-color: color-mix(in srgb, var(--muted-foreground) 40%, transparent) transparent;\n }\n }\n .uidex-scrollbar::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n .uidex-scrollbar::-webkit-scrollbar-track {\n background: transparent;\n }\n .uidex-scrollbar::-webkit-scrollbar-thumb {\n background-color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix( in srgb, var(--muted-foreground) 35%, transparent );\n }\n border-radius: 9999px;\n border: 2px solid transparent;\n background-clip: content-box;\n }\n .uidex-scrollbar::-webkit-scrollbar-thumb:hover {\n background-color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix( in srgb, var(--muted-foreground) 60%, transparent );\n }\n }\n .uidex-scrollbar::-webkit-scrollbar-corner {\n background: transparent;\n }\n}\n@keyframes skeleton {\n to {\n background-position: -200% 0;\n }\n}\n:where(:host, :root) {\n --background: color-mix(\n in srgb,\n oklch(14.5% 0 0) 95%,\n #fff\n );\n @supports (color: color-mix(in lab, red, red)) {\n --background: color-mix(\n in srgb,\n var(--color-neutral-950) 95%,\n var(--color-white)\n );\n }\n --foreground: var(--color-neutral-100);\n --card: var(--background);\n @supports (color: color-mix(in lab, red, red)) {\n --card: color-mix(in srgb, var(--background) 98%, var(--color-white));\n }\n --card-foreground: var(--color-neutral-100);\n --popover: var(--background);\n @supports (color: color-mix(in lab, red, red)) {\n --popover: color-mix(in srgb, var(--background) 98%, var(--color-white));\n }\n --popover-foreground: var(--color-neutral-100);\n --primary: var(--color-neutral-100);\n --primary-foreground: var(--color-neutral-800);\n --secondary: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --secondary: color-mix(in srgb, var(--color-white) 4%, transparent);\n }\n --secondary-foreground: var(--color-neutral-100);\n --muted: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --muted: color-mix(in srgb, var(--color-white) 4%, transparent);\n }\n --muted-foreground: color-mix(\n in srgb,\n oklch(55.6% 0 0) 90%,\n #fff\n );\n @supports (color: color-mix(in lab, red, red)) {\n --muted-foreground: color-mix(\n in srgb,\n var(--color-neutral-500) 90%,\n var(--color-white)\n );\n }\n --accent: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --accent: color-mix(in srgb, var(--color-white) 4%, transparent);\n }\n --accent-foreground: var(--color-neutral-100);\n --destructive: color-mix(\n in srgb,\n oklch(63.7% 0.237 25.331) 90%,\n #fff\n );\n @supports (color: color-mix(in lab, red, red)) {\n --destructive: color-mix(\n in srgb,\n var(--color-red-500) 90%,\n var(--color-white)\n );\n }\n --destructive-foreground: var(--color-red-400);\n --border: color-mix(in srgb, #fff 6%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --border: color-mix(in srgb, var(--color-white) 6%, transparent);\n }\n --input: color-mix(in srgb, #fff 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --input: color-mix(in srgb, var(--color-white) 8%, transparent);\n }\n --ring: var(--color-neutral-500);\n --info: var(--color-blue-500);\n --info-foreground: var(--color-blue-400);\n --success: var(--color-emerald-500);\n --success-foreground: var(--color-emerald-400);\n --warning: var(--color-amber-500);\n --warning-foreground: var(--color-amber-400);\n --radius: 0.625rem;\n}\n:host(.light) {\n --background: var(--color-white);\n --foreground: var(--color-neutral-800);\n --card: var(--color-white);\n --card-foreground: var(--color-neutral-800);\n --popover: var(--color-white);\n --popover-foreground: var(--color-neutral-800);\n --primary: var(--color-neutral-800);\n --primary-foreground: var(--color-neutral-50);\n --secondary: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --secondary: color-mix(in srgb, var(--color-black) 4%, transparent);\n }\n --secondary-foreground: var(--color-neutral-800);\n --muted: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --muted: color-mix(in srgb, var(--color-black) 4%, transparent);\n }\n --muted-foreground: color-mix(\n in srgb,\n oklch(55.6% 0 0) 90%,\n #000\n );\n @supports (color: color-mix(in lab, red, red)) {\n --muted-foreground: color-mix(\n in srgb,\n var(--color-neutral-500) 90%,\n var(--color-black)\n );\n }\n --accent: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --accent: color-mix(in srgb, var(--color-black) 4%, transparent);\n }\n --accent-foreground: var(--color-neutral-800);\n --destructive: var(--color-red-500);\n --destructive-foreground: var(--color-red-700);\n --border: color-mix(in srgb, #000 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --border: color-mix(in srgb, var(--color-black) 8%, transparent);\n }\n --input: color-mix(in srgb, #000 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --input: color-mix(in srgb, var(--color-black) 10%, transparent);\n }\n --ring: var(--color-neutral-400);\n --info: var(--color-blue-500);\n --info-foreground: var(--color-blue-700);\n --success: var(--color-emerald-500);\n --success-foreground: var(--color-emerald-700);\n --warning: var(--color-amber-500);\n --warning-foreground: var(--color-amber-700);\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-scale-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ordinal {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-slashed-zero {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-figure {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-spacing {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-fraction {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-content {\n syntax: \"*\";\n initial-value: \"\";\n inherits: false;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-ordinal: initial;\n --tw-slashed-zero: initial;\n --tw-numeric-figure: initial;\n --tw-numeric-spacing: initial;\n --tw-numeric-fraction: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-ease: initial;\n --tw-content: \"\";\n }\n }\n}\n","export const SURFACE_HOST_CLASS = \"uidex-surface-host\"\nexport const SURFACE_CONTAINER_CLASS = \"uidex-container\"\n\nexport const Z_BASE = 2147483644\nexport const Z_OVERLAY = 2147483645\nexport const Z_CHROME = 2147483646\n\nexport const SURFACE_IGNORE_SELECTOR = `.${SURFACE_HOST_CLASS},.${SURFACE_CONTAINER_CLASS}`\n\nimport type { EntityKind } from \"../entities\"\n\nexport const UIDEX_ATTR_TO_KIND: ReadonlyArray<readonly [string, EntityKind]> =\n [\n [\"data-uidex\", \"element\"],\n [\"data-uidex-region\", \"region\"],\n [\"data-uidex-widget\", \"widget\"],\n [\"data-uidex-primitive\", \"primitive\"],\n ]\n","import type { ResolvedTheme } from \"../session\"\nimport builtinCss from \"../styles/tailwind.built.css\"\nimport { SURFACE_HOST_CLASS, Z_BASE } from \"./constants\"\n\nexport interface SurfaceHost {\n readonly hostEl: HTMLElement\n readonly shadowRoot: ShadowRoot\n readonly chromeEl: HTMLElement\n applyTheme(theme: ResolvedTheme): void\n destroy(): void\n}\n\nexport interface SurfaceHostOptions {\n mount: Element\n stylesheets?: string[]\n initialTheme?: ResolvedTheme\n}\n\nexport function createSurfaceHost(options: SurfaceHostOptions): SurfaceHost {\n const { mount, stylesheets = [], initialTheme = \"light\" } = options\n\n const hostEl = document.createElement(\"div\")\n hostEl.classList.add(SURFACE_HOST_CLASS)\n hostEl.style.position = \"fixed\"\n hostEl.style.inset = \"0\"\n hostEl.style.pointerEvents = \"none\"\n hostEl.style.zIndex = String(Z_BASE)\n hostEl.classList.add(initialTheme)\n\n const shadow = hostEl.attachShadow({ mode: \"open\" })\n\n applyStylesheets(shadow, [builtinCss, ...stylesheets])\n\n const chromeEl = document.createElement(\"div\")\n chromeEl.classList.add(\"uidex-chrome\")\n chromeEl.style.pointerEvents = \"auto\"\n shadow.appendChild(chromeEl)\n\n mount.appendChild(hostEl)\n\n return {\n hostEl,\n shadowRoot: shadow,\n chromeEl,\n applyTheme(theme) {\n hostEl.classList.remove(\"light\", \"dark\")\n hostEl.classList.add(theme)\n },\n destroy() {\n hostEl.remove()\n },\n }\n}\n\nfunction applyStylesheets(shadow: ShadowRoot, stylesheets: string[]): void {\n if (stylesheets.length === 0) return\n\n const adoptable = supportsConstructableStylesheets(shadow)\n if (adoptable) {\n const sheets: CSSStyleSheet[] = []\n for (const css of stylesheets) {\n const sheet = new CSSStyleSheet()\n sheet.replaceSync(css)\n sheets.push(sheet)\n }\n shadow.adoptedStyleSheets = [...shadow.adoptedStyleSheets, ...sheets]\n return\n }\n\n for (const css of stylesheets) {\n const style = document.createElement(\"style\")\n style.textContent = css\n shadow.appendChild(style)\n }\n}\n\nfunction supportsConstructableStylesheets(shadow: ShadowRoot): boolean {\n if (typeof CSSStyleSheet === \"undefined\") return false\n if (!(\"adoptedStyleSheets\" in shadow)) return false\n try {\n const probe = new CSSStyleSheet()\n probe.replaceSync(\"\")\n return true\n } catch {\n return false\n }\n}\n","import { createElement as createLucideElement } from \"lucide\"\nimport { displayName, KIND_STYLE, type Entity } from \"../entities\"\nimport type { SessionStore } from \"../session\"\nimport { Z_CHROME } from \"./constants\"\n\nconst DEFAULT_TOOLTIP_COLOR = \"#34d399\"\nconst TOOLTIP_OFFSET = 16\nconst ARROW_SIZE = 5\n\nexport type CursorTooltipContent =\n | {\n entity: Entity\n node?: Element | null\n layer?: { index: number; total: number }\n }\n | string\n\nexport interface CursorTooltip {\n destroy(): void\n /** Present content for the current cursor position. */\n update(\n content: CursorTooltipContent | null,\n cursor: { x: number; y: number } | null\n ): void\n}\n\nexport interface CursorTooltipDeps {\n container: Element\n session: SessionStore\n}\n\nexport function createCursorTooltip(deps: CursorTooltipDeps): CursorTooltip {\n const { container } = deps\n\n const el = document.createElement(\"div\")\n el.setAttribute(\"data-uidex-cursor-tooltip\", \"\")\n el.style.position = \"fixed\"\n el.style.pointerEvents = \"none\"\n el.style.zIndex = String(Z_CHROME)\n el.style.padding = \"4px 8px\"\n el.style.fontSize = \"12px\"\n el.style.fontFamily = \"ui-sans-serif, system-ui, sans-serif\"\n el.style.borderRadius = \"6px\"\n el.style.background = DEFAULT_TOOLTIP_COLOR\n el.style.color = \"#0a0a0a\"\n el.style.display = \"none\"\n el.style.whiteSpace = \"nowrap\"\n el.style.transform = \"translate(-50%, 0)\"\n el.style.alignItems = \"center\"\n el.style.gap = \"6px\"\n\n const arrow = document.createElement(\"div\")\n arrow.setAttribute(\"data-uidex-cursor-tooltip-arrow\", \"\")\n arrow.style.position = \"absolute\"\n arrow.style.left = \"50%\"\n arrow.style.bottom = \"100%\"\n arrow.style.width = \"0\"\n arrow.style.height = \"0\"\n arrow.style.transform = \"translate(-50%, 0)\"\n arrow.style.borderLeft = `${ARROW_SIZE}px solid transparent`\n arrow.style.borderRight = `${ARROW_SIZE}px solid transparent`\n arrow.style.borderBottom = `${ARROW_SIZE}px solid ${DEFAULT_TOOLTIP_COLOR}`\n el.appendChild(arrow)\n\n const body = document.createElement(\"span\")\n body.setAttribute(\"data-uidex-cursor-tooltip-body\", \"\")\n body.style.display = \"inline-flex\"\n body.style.alignItems = \"center\"\n body.style.gap = \"6px\"\n el.appendChild(body)\n\n container.appendChild(el)\n\n let currentContent: CursorTooltipContent | null = null\n let currentCursor: { x: number; y: number } | null = null\n\n const applyColor = (color: string): void => {\n el.style.background = color\n arrow.style.borderBottom = `${ARROW_SIZE}px solid ${color}`\n }\n\n const renderBody = (): void => {\n body.replaceChildren()\n if (typeof currentContent === \"string\") {\n applyColor(DEFAULT_TOOLTIP_COLOR)\n body.append(document.createTextNode(currentContent))\n return\n }\n if (!currentContent) return\n const { entity, node } = currentContent\n const style = KIND_STYLE[entity.kind]\n applyColor(style?.color ?? DEFAULT_TOOLTIP_COLOR)\n if (style) {\n const svg = createLucideElement(style.icon)\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"width\", \"14\")\n svg.setAttribute(\"height\", \"14\")\n svg.style.display = \"block\"\n body.append(svg)\n }\n const label = displayName(entity, node)\n body.append(document.createTextNode(label))\n if (currentContent.layer) {\n const counter = document.createElement(\"span\")\n counter.setAttribute(\"data-uidex-cursor-tooltip-layer\", \"\")\n counter.style.fontFamily = \"ui-monospace, SFMono-Regular, Menlo, monospace\"\n counter.style.fontSize = \"10px\"\n counter.style.lineHeight = \"1\"\n counter.style.padding = \"2px 5px\"\n counter.style.borderRadius = \"4px\"\n counter.style.background = \"rgba(0,0,0,0.18)\"\n counter.textContent = `${currentContent.layer.index + 1}/${currentContent.layer.total}`\n body.append(counter)\n }\n }\n\n const render = (): void => {\n if (!currentContent || !currentCursor) {\n el.style.display = \"none\"\n return\n }\n renderBody()\n el.style.display = \"inline-flex\"\n el.style.left = `${currentCursor.x}px`\n el.style.top = `${currentCursor.y + TOOLTIP_OFFSET}px`\n }\n\n return {\n update(content, cursor) {\n currentContent = content\n currentCursor = cursor\n render()\n },\n destroy() {\n el.remove()\n currentContent = null\n currentCursor = null\n },\n }\n}\n","import { displayName, type Entity, type EntityRef } from \"../entities\"\nimport type { Registry } from \"../entities\"\nimport type { SessionStore } from \"../session\"\nimport { SURFACE_IGNORE_SELECTOR, UIDEX_ATTR_TO_KIND } from \"./constants\"\nimport type { Overlay, OverlayShowOptions } from \"./overlay\"\n\nexport interface InspectorMatch {\n element: HTMLElement\n ref: EntityRef\n entity: Entity\n /** Display name resolved via `displayName(entity, element)`. */\n label: string\n}\n\nexport interface InspectorMatchStack {\n matches: InspectorMatch[]\n index: number\n current: InspectorMatch\n}\n\nexport interface InspectorOptions {\n session: SessionStore\n registry?: Registry\n resolveAll?: (target: Element) => InspectorMatch[]\n onHover?: (\n stack: InspectorMatchStack | null,\n cursor: { x: number; y: number } | null\n ) => void\n onSelect?: (match: InspectorMatch, cursor: { x: number; y: number }) => void\n onCycle?: (\n stack: InspectorMatchStack,\n cursor: { x: number; y: number }\n ) => void\n}\n\nexport interface Inspector {\n mount(): void\n destroy(): void\n}\n\nfunction entityForRef(ref: EntityRef, registry?: Registry): Entity {\n if (registry) {\n const found = registry.get(ref.kind, ref.id)\n if (found) return found\n }\n if (ref.kind === \"route\") return { kind: \"route\", path: ref.id, page: ref.id }\n if (ref.kind === \"flow\") {\n return {\n kind: \"flow\",\n id: ref.id,\n loc: { file: \"\" },\n touches: [],\n steps: [],\n }\n }\n return { kind: ref.kind, id: ref.id }\n}\n\nexport function defaultResolveMatch(\n target: Element,\n registry?: Registry\n): InspectorMatch | null {\n if (target.closest(SURFACE_IGNORE_SELECTOR)) return null\n let node: Element | null = target\n while (node) {\n if (node instanceof HTMLElement) {\n for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {\n const id = node.getAttribute(attr)\n if (id) {\n const ref: EntityRef = { kind, id }\n const entity = entityForRef(ref, registry)\n return {\n element: node,\n ref,\n entity,\n label: displayName(entity, node),\n }\n }\n }\n }\n node = node.parentElement\n }\n return null\n}\n\nexport function defaultResolveAllMatches(\n target: Element,\n registry?: Registry\n): InspectorMatch[] {\n if (target.closest(SURFACE_IGNORE_SELECTOR)) return []\n const matches: InspectorMatch[] = []\n const seen = new Set<string>()\n let node: Element | null = target\n while (node) {\n if (node instanceof HTMLElement) {\n for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {\n const id = node.getAttribute(attr)\n if (id) {\n const key = `${kind}:${id}`\n if (!seen.has(key)) {\n seen.add(key)\n const ref: EntityRef = { kind, id }\n const entity = entityForRef(ref, registry)\n matches.push({\n element: node,\n ref,\n entity,\n label: displayName(entity, node),\n })\n }\n }\n }\n }\n node = node.parentElement\n }\n return matches\n}\n\nexport function resolveEntityElement(ref: EntityRef): HTMLElement | null {\n const entry = UIDEX_ATTR_TO_KIND.find(([, kind]) => kind === ref.kind)\n if (!entry) return null\n const [attr] = entry\n const selector = `[${attr}=\"${CSS.escape(ref.id)}\"]`\n const el = document.querySelector(selector)\n if (el instanceof HTMLElement && el.isConnected) return el\n return null\n}\n\nexport interface HighlightControllerLike {\n show(ref: EntityRef, opts?: OverlayShowOptions): void\n hide(): void\n}\n\nexport function createHighlightController(\n overlay: Overlay\n): HighlightControllerLike {\n let lastKey: string | null = null\n return {\n show(ref, opts) {\n const el = resolveEntityElement(ref)\n if (!el) {\n lastKey = null\n overlay.hide()\n return\n }\n const key = `${ref.kind}:${ref.id}`\n if (key === lastKey && overlay.isVisible) return\n lastKey = key\n overlay.show(el, opts)\n },\n hide() {\n lastKey = null\n overlay.hide()\n },\n }\n}\n\nexport function createInspector(options: InspectorOptions): Inspector {\n const {\n session,\n registry,\n resolveAll = (target) => defaultResolveAllMatches(target, registry),\n onHover,\n onSelect,\n onCycle,\n } = options\n\n let mounted = false\n let currentEl: HTMLElement | null = null\n let cursorStyleEl: HTMLStyleElement | null = null\n let stack: InspectorMatch[] = []\n let layerIndex = 0\n let lastCursor: { x: number; y: number } = { x: 0, y: 0 }\n\n const makeStack = (): InspectorMatchStack | null =>\n stack.length > 0\n ? { matches: stack, index: layerIndex, current: stack[layerIndex] }\n : null\n\n const onMouseMove = (e: MouseEvent): void => {\n if (!(e.target instanceof Element)) return\n const matches = resolveAll(e.target)\n const cursor = { x: e.clientX, y: e.clientY }\n lastCursor = cursor\n const topEl = matches.length > 0 ? matches[0].element : null\n if (topEl) {\n if (topEl !== currentEl) {\n currentEl = topEl\n stack = matches\n layerIndex = 0\n session.getState().actions.hover(stack[0].ref)\n }\n onHover?.(makeStack(), cursor)\n } else if (currentEl) {\n currentEl = null\n stack = []\n layerIndex = 0\n session.getState().actions.hover(null)\n onHover?.(null, cursor)\n }\n }\n\n const onClick = (e: MouseEvent): void => {\n if (!(e.target instanceof Element)) return\n if (e.target.closest(SURFACE_IGNORE_SELECTOR)) return\n if (stack.length === 0) return\n e.preventDefault()\n e.stopPropagation()\n const match = stack[layerIndex]\n session.getState().actions.select(match.ref)\n onSelect?.(match, { x: e.clientX, y: e.clientY })\n }\n\n const onContextMenu = (e: MouseEvent): void => {\n if (stack.length <= 1) return\n e.preventDefault()\n e.stopPropagation()\n layerIndex = (layerIndex + 1) % stack.length\n const match = stack[layerIndex]\n session.getState().actions.hover(match.ref)\n onCycle?.(makeStack()!, lastCursor)\n }\n\n return {\n mount() {\n if (mounted) return\n mounted = true\n if (typeof document !== \"undefined\") {\n cursorStyleEl = document.createElement(\"style\")\n cursorStyleEl.setAttribute(\"data-uidex-inspector-cursor\", \"\")\n cursorStyleEl.textContent =\n \"html, body, body * { cursor: crosshair !important; }\"\n document.head.appendChild(cursorStyleEl)\n }\n document.addEventListener(\"mousemove\", onMouseMove)\n document.addEventListener(\"click\", onClick, true)\n document.addEventListener(\"contextmenu\", onContextMenu, true)\n },\n destroy() {\n if (!mounted) return\n mounted = false\n currentEl = null\n stack = []\n layerIndex = 0\n if (cursorStyleEl) {\n cursorStyleEl.remove()\n cursorStyleEl = null\n }\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"click\", onClick, true)\n document.removeEventListener(\"contextmenu\", onContextMenu, true)\n session.getState().actions.hover(null)\n onHover?.(null, null)\n },\n }\n}\n","import {\n Command,\n Highlighter,\n MousePointerClick,\n createElement as createLucideElement,\n} from \"lucide\"\nimport { cn } from \"../internal/cn\"\nimport { el } from \"../internal/el\"\nimport type { SessionStore } from \"../session\"\nimport { Z_CHROME } from \"./constants\"\nimport { INSPECT_SHORTCUT, formatShortcutLabel } from \"./keys\"\n\nexport type Corner = \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n\nexport interface MenuBarOptions {\n container: Element\n session: SessionStore\n initialCorner?: Corner\n appTitle?: string\n}\n\nexport interface MenuBar {\n destroy(): void\n snapTo(corner: Corner): void\n snapToNearest(x: number, y: number): void\n readonly corner: Corner\n readonly root: HTMLElement\n}\n\nconst ROOT_CLASS =\n \"inline-flex items-center gap-1.5 rounded-xl border border-border bg-popover p-1.5 font-sans text-xs text-popover-foreground shadow-lg/5 select-none not-dark:bg-clip-padding before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-xl)-1px)] before:bg-muted/72 before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\"\n\nconst BUTTON_CLASS =\n \"relative z-1 inline-flex size-6 shrink-0 cursor-pointer items-center justify-center rounded-md border border-transparent text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n\nconst BUTTON_ACTIVE_CLASS =\n \"border-info/40 bg-info/15 text-info-foreground hover:bg-info/20\"\n\nconst TITLE_CLASS =\n \"relative z-1 whitespace-nowrap px-1.5 text-xs font-semibold tracking-tight text-foreground\"\n\nconst BUTTON_HIGHLIGHT_ACTIVE_CLASS =\n \"border-amber-500/40 bg-amber-500/15 text-amber-600 hover:bg-amber-500/20 dark:text-amber-400\"\n\nexport function createMenuBar(options: MenuBarOptions): MenuBar {\n const {\n container,\n session,\n initialCorner = \"bottom-right\",\n appTitle,\n } = options\n\n const root = el(\"div\", {\n class: ROOT_CLASS,\n attrs: {\n \"data-uidex-menubar\": \"\",\n role: \"toolbar\",\n },\n style: {\n position: \"fixed\",\n zIndex: String(Z_CHROME),\n pointerEvents: \"auto\",\n cursor: \"grab\",\n },\n })\n\n let titleEl: HTMLElement | null = null\n if (appTitle) {\n titleEl = el(\"span\", {\n class: TITLE_CLASS,\n attrs: { \"data-uidex-menubar-title\": \"\" },\n text: appTitle,\n })\n root.appendChild(titleEl)\n }\n\n const highlightIcon = createLucideElement(Highlighter)\n highlightIcon.setAttribute(\"class\", \"size-3.5\")\n highlightIcon.setAttribute(\"aria-hidden\", \"true\")\n const highlightBtn = el(\n \"button\",\n {\n class: BUTTON_CLASS,\n attrs: {\n type: \"button\",\n \"data-uidex-menubar-highlight\": \"\",\n \"aria-label\": \"Dismiss highlight\",\n },\n },\n highlightIcon\n )\n highlightBtn.hidden = true\n highlightBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n session.send({ type: \"UNPIN\" })\n })\n root.appendChild(highlightBtn)\n\n const inspectIcon = createLucideElement(MousePointerClick)\n inspectIcon.setAttribute(\"class\", \"size-3.5\")\n inspectIcon.setAttribute(\"aria-hidden\", \"true\")\n const inspectBtn = el(\n \"button\",\n {\n class: BUTTON_CLASS,\n attrs: {\n type: \"button\",\n \"data-uidex-menubar-inspect\": \"\",\n \"aria-label\": `Inspect (${formatShortcutLabel(INSPECT_SHORTCUT)})`,\n },\n },\n inspectIcon\n )\n inspectBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n session.send({ type: \"TOGGLE_INSPECTOR\" })\n })\n root.appendChild(inspectBtn)\n\n const paletteIcon = createLucideElement(Command)\n paletteIcon.setAttribute(\"class\", \"size-3.5\")\n paletteIcon.setAttribute(\"aria-hidden\", \"true\")\n const paletteBtn = el(\n \"button\",\n {\n class: BUTTON_CLASS,\n attrs: {\n type: \"button\",\n \"data-uidex-menubar-palette\": \"\",\n \"aria-label\": \"Command palette\",\n },\n },\n paletteIcon\n )\n paletteBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n if (session.getState().stack.length > 0) {\n session.send({ type: \"CLOSE\" })\n } else {\n session.send({ type: \"OPEN_PALETTE\" })\n }\n })\n root.appendChild(paletteBtn)\n container.appendChild(root)\n\n const syncButtonStates = (): void => {\n const state = session.getState()\n\n const inspectActive = state.inspectorActive\n inspectBtn.setAttribute(\n \"data-uidex-menubar-inspect-active\",\n inspectActive ? \"true\" : \"false\"\n )\n inspectBtn.className = cn(\n BUTTON_CLASS,\n inspectActive && BUTTON_ACTIVE_CLASS\n )\n\n const top = state.stack[state.stack.length - 1] ?? null\n const paletteOpen = top?.id === \"command-palette\"\n paletteBtn.setAttribute(\n \"data-uidex-menubar-palette-active\",\n paletteOpen ? \"true\" : \"false\"\n )\n paletteBtn.className = cn(BUTTON_CLASS, paletteOpen && BUTTON_ACTIVE_CLASS)\n\n const highlightActive = state.pinnedHighlight !== null\n highlightBtn.setAttribute(\n \"data-uidex-menubar-highlight-active\",\n highlightActive ? \"true\" : \"false\"\n )\n highlightBtn.className = cn(\n BUTTON_CLASS,\n highlightActive && BUTTON_HIGHLIGHT_ACTIVE_CLASS\n )\n highlightBtn.hidden = !highlightActive\n }\n syncButtonStates()\n const unsubscribeSession = session.subscribe(syncButtonStates)\n\n let corner: Corner = initialCorner\n const applyCorner = (): void => {\n const offset = \"16px\"\n root.style.top = corner.startsWith(\"top\") ? offset : \"\"\n root.style.bottom = corner.startsWith(\"bottom\") ? offset : \"\"\n root.style.left = corner.endsWith(\"left\") ? offset : \"\"\n root.style.right = corner.endsWith(\"right\") ? offset : \"\"\n root.setAttribute(\"data-uidex-menubar-corner\", corner)\n }\n applyCorner()\n\n let dragging = false\n let startX = 0\n let startY = 0\n let originLeft = 0\n let originTop = 0\n\n const onMouseMove = (e: MouseEvent): void => {\n if (!dragging) return\n root.style.left = `${originLeft + e.clientX - startX}px`\n root.style.top = `${originTop + e.clientY - startY}px`\n }\n\n const onMouseUp = (e: MouseEvent): void => {\n if (!dragging) return\n dragging = false\n root.style.cursor = \"grab\"\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"mouseup\", onMouseUp)\n snapToNearest(e.clientX, e.clientY)\n }\n\n const onMouseDown = (e: MouseEvent): void => {\n if (e.target instanceof HTMLElement && e.target.closest(\"button\")) return\n const rect = root.getBoundingClientRect()\n dragging = true\n originLeft = rect.left\n originTop = rect.top\n startX = e.clientX\n startY = e.clientY\n root.style.cursor = \"grabbing\"\n Object.assign(root.style, {\n top: `${originTop}px`,\n left: `${originLeft}px`,\n bottom: \"\",\n right: \"\",\n })\n document.addEventListener(\"mousemove\", onMouseMove)\n document.addEventListener(\"mouseup\", onMouseUp)\n e.preventDefault()\n }\n root.addEventListener(\"mousedown\", onMouseDown)\n\n function snapTo(next: Corner): void {\n corner = next\n applyCorner()\n }\n\n function snapToNearest(x: number, y: number): void {\n const horizontal = x / (window.innerWidth || 1) < 0.5 ? \"left\" : \"right\"\n const vertical = y / (window.innerHeight || 1) < 0.5 ? \"top\" : \"bottom\"\n snapTo(`${vertical}-${horizontal}` as Corner)\n }\n\n return {\n destroy() {\n unsubscribeSession()\n root.removeEventListener(\"mousedown\", onMouseDown)\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"mouseup\", onMouseUp)\n root.remove()\n },\n snapTo,\n snapToNearest,\n get corner() {\n return corner\n },\n get root() {\n return root\n },\n }\n}\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","import type { ClassValue } from \"clsx\"\nimport { cn } from \"./cn\"\n\ntype Attrs = Record<\n string,\n string | number | boolean | null | undefined | Record<string, string | number>\n>\n\nexport interface ElementOptions {\n class?: ClassValue\n attrs?: Attrs\n text?: string\n html?: never\n dataset?: Record<string, string>\n style?: Partial<CSSStyleDeclaration>\n}\n\nexport type Child = Node | string | null | undefined | false\n\nexport function el<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n options: ElementOptions = {},\n children: Child | Child[] = []\n): HTMLElementTagNameMap[K] {\n const node = document.createElement(tag)\n if (options.class) node.className = cn(options.class)\n if (options.attrs) {\n for (const [key, value] of Object.entries(options.attrs)) {\n if (value === undefined || value === null || value === false) continue\n if (value === true) {\n node.setAttribute(key, \"\")\n } else {\n node.setAttribute(key, String(value))\n }\n }\n }\n if (options.dataset) {\n for (const [key, value] of Object.entries(options.dataset)) {\n node.dataset[key] = value\n }\n }\n if (options.style) {\n Object.assign(node.style, options.style)\n }\n if (options.text !== undefined) {\n node.textContent = options.text\n }\n const list = Array.isArray(children) ? children : [children]\n for (const child of list) {\n if (child === null || child === undefined || child === false) continue\n node.append(\n typeof child === \"string\" ? document.createTextNode(child) : child\n )\n }\n return node\n}\n","import type { SurfaceEvent } from \"../flows/surface\"\nimport type { SessionStore } from \"../session\"\nimport type { ActionsPopupHandle } from \"../views/core/actions-popup\"\n\nexport interface PaletteShortcut {\n /** The key value (e.g. \"k\", \"j\", \";\"). Matched case-insensitively. */\n key: string\n /** Require Cmd (Mac) / Ctrl (Win/Linux). Default: true. */\n mod?: boolean\n /** Require Shift. Default: false. */\n shift?: boolean\n}\n\nconst DEFAULT_SHORTCUT: PaletteShortcut = { key: \"k\" }\n\nexport const ACTIONS_SHORTCUT: PaletteShortcut = { key: \"j\" }\n\nexport const INSPECT_SHORTCUT: PaletteShortcut = { key: \"i\" }\n\nexport function formatShortcutLabel(shortcut: PaletteShortcut): string {\n const parts: string[] = []\n if (shortcut.mod !== false) parts.push(\"⌘\")\n if (shortcut.shift) parts.push(\"⇧\")\n parts.push(shortcut.key.toUpperCase())\n return parts.join(\"\")\n}\n\nfunction matchesShortcut(e: KeyboardEvent, shortcut: PaletteShortcut): boolean {\n const wantMod = shortcut.mod !== false\n const wantShift = shortcut.shift === true\n const hasMod = e.metaKey || e.ctrlKey\n return (\n hasMod === wantMod &&\n e.shiftKey === wantShift &&\n !e.altKey &&\n e.key.toLowerCase() === shortcut.key.toLowerCase()\n )\n}\n\nexport interface BindShadowKeysOptions {\n shadowRoot: ShadowRoot\n session: SessionStore\n getActionsPopup: () => ActionsPopupHandle | null\n shortcut?: PaletteShortcut\n}\n\nexport function bindShadowKeys(options: BindShadowKeysOptions): () => void {\n const { shadowRoot, session, getActionsPopup } = options\n const shortcut = options.shortcut ?? DEFAULT_SHORTCUT\n const send = (event: SurfaceEvent): void => session.send(event)\n\n const onKeydown = (e: KeyboardEvent): void => {\n const isMod = e.metaKey || e.ctrlKey\n const isCmdK = matchesShortcut(e, shortcut)\n const isCmdDot = matchesShortcut(e, ACTIONS_SHORTCUT)\n const isCmdI = matchesShortcut(e, INSPECT_SHORTCUT)\n const isCmdBracket = isMod && !e.altKey && !e.shiftKey && e.key === \"[\"\n const isEsc = e.key === \"Escape\"\n const isPopKey = isEsc || isCmdBracket\n if (!isCmdK && !isCmdDot && !isCmdI && !isPopKey) return\n\n const popup = getActionsPopup()\n if (popup?.isOpen()) {\n if (isPopKey || isCmdK || isCmdDot) {\n popup.close()\n e.preventDefault()\n e.stopPropagation()\n }\n return\n }\n\n if (isCmdDot) {\n if (popup) {\n e.preventDefault()\n e.stopPropagation()\n popup.open()\n }\n return\n }\n\n if (isCmdI) {\n e.preventDefault()\n e.stopPropagation()\n send({ type: \"TOGGLE_INSPECTOR\" })\n return\n }\n\n if (isCmdK) {\n const state = session.getState()\n e.preventDefault()\n e.stopPropagation()\n send(\n state.stack.length === 0 ? { type: \"OPEN_PALETTE\" } : { type: \"CMD_K\" }\n )\n return\n }\n\n const state = session.getState()\n const hasWork =\n state.stack.length > 0 ||\n state.pinnedHighlight !== null ||\n state.inspectorActive\n if (!hasWork) return\n e.preventDefault()\n e.stopPropagation()\n send({ type: \"ESC\" })\n }\n\n // Listen on document so shortcuts work when focus is on the host page,\n // and on the shadow root so they work when focus is inside the overlay.\n const doc = shadowRoot.ownerDocument\n doc.addEventListener(\"keydown\", onKeydown, { capture: true })\n shadowRoot.addEventListener(\"keydown\", onKeydown as EventListener, {\n capture: true,\n })\n return () => {\n doc.removeEventListener(\"keydown\", onKeydown, { capture: true })\n shadowRoot.removeEventListener(\n \"keydown\",\n onKeydown as EventListener,\n {\n capture: true,\n } as EventListenerOptions\n )\n }\n}\n","import { Z_OVERLAY } from \"./constants\"\n\nexport interface OverlayShowOptions {\n label?: string\n color?: string\n padding?: number\n borderStyle?: string\n borderWidth?: number\n fillOpacity?: number\n backdrop?: boolean\n}\n\nexport interface Overlay {\n show(target: Element, options?: OverlayShowOptions): void\n hide(): void\n destroy(): void\n onDismiss: (() => void) | null\n readonly isVisible: boolean\n}\n\ninterface OverlayDeps {\n container: Element\n}\n\nconst DEFAULT_COLOR = \"#34d399\"\nconst DEFAULT_BORDER_WIDTH = 2\nconst DEFAULT_FILL_OPACITY = 0.08\nconst BACKDROP_OPACITY = 0.45\n\nexport function createOverlay(deps: OverlayDeps): Overlay {\n const { container } = deps\n\n const backdrop = document.createElement(\"div\")\n backdrop.setAttribute(\"data-uidex-overlay-backdrop\", \"\")\n backdrop.style.position = \"fixed\"\n backdrop.style.inset = \"0\"\n backdrop.style.zIndex = String(Z_OVERLAY)\n backdrop.style.backgroundColor = `rgba(0, 0, 0, ${BACKDROP_OPACITY})`\n backdrop.style.display = \"none\"\n backdrop.style.pointerEvents = \"auto\"\n backdrop.style.cursor = \"default\"\n backdrop.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n overlay.onDismiss?.()\n })\n container.appendChild(backdrop)\n\n const box = document.createElement(\"div\")\n box.setAttribute(\"data-uidex-overlay\", \"\")\n box.style.position = \"fixed\"\n box.style.pointerEvents = \"none\"\n box.style.zIndex = String(Z_OVERLAY + 1)\n box.style.boxSizing = \"border-box\"\n box.style.display = \"none\"\n\n const label = document.createElement(\"div\")\n label.setAttribute(\"data-uidex-overlay-label\", \"\")\n label.style.position = \"absolute\"\n label.style.left = \"0\"\n label.style.bottom = \"100%\"\n label.style.padding = \"2px 6px\"\n label.style.fontSize = \"11px\"\n label.style.fontFamily = \"ui-sans-serif, system-ui, sans-serif\"\n label.style.lineHeight = \"1\"\n label.style.whiteSpace = \"nowrap\"\n label.style.color = \"#0a0a0a\"\n label.style.display = \"none\"\n\n box.appendChild(label)\n container.appendChild(box)\n\n let target: Element | null = null\n let opts: Required<OverlayShowOptions> = {\n label: \"\",\n color: DEFAULT_COLOR,\n padding: 0,\n borderStyle: \"solid\",\n borderWidth: DEFAULT_BORDER_WIDTH,\n fillOpacity: DEFAULT_FILL_OPACITY,\n backdrop: false,\n }\n\n let rafId: number | null = null\n let attached = false\n\n const schedule = (): void => {\n if (rafId !== null) return\n rafId =\n typeof requestAnimationFrame === \"function\"\n ? requestAnimationFrame(() => {\n rafId = null\n updatePosition()\n })\n : (setTimeout(() => {\n rafId = null\n updatePosition()\n }, 0) as unknown as number)\n }\n\n const cancelSchedule = (): void => {\n if (rafId === null) return\n if (typeof cancelAnimationFrame === \"function\") cancelAnimationFrame(rafId)\n else clearTimeout(rafId as unknown as ReturnType<typeof setTimeout>)\n rafId = null\n }\n\n const onScroll = (): void => schedule()\n const onResize = (): void => schedule()\n\n const attach = (): void => {\n if (attached) return\n attached = true\n window.addEventListener(\"resize\", onResize)\n window.addEventListener(\"scroll\", onScroll, {\n capture: true,\n passive: true,\n })\n }\n\n const detach = (): void => {\n if (!attached) return\n attached = false\n window.removeEventListener(\"resize\", onResize)\n window.removeEventListener(\"scroll\", onScroll, {\n capture: true,\n } as EventListenerOptions)\n cancelSchedule()\n }\n\n function updatePosition(): void {\n if (!target) return\n const rect = target.getBoundingClientRect()\n const pad = opts.padding\n const top = rect.top - pad\n const left = rect.left - pad\n const w = rect.width + pad * 2\n const h = rect.height + pad * 2\n box.style.top = `${top}px`\n box.style.left = `${left}px`\n box.style.width = `${w}px`\n box.style.height = `${h}px`\n\n if (opts.backdrop) {\n const vw = window.innerWidth\n const vh = window.innerHeight\n backdrop.style.clipPath = cutoutPath(vw, vh, left, top, w, h)\n }\n }\n\n function applyStyles(): void {\n box.style.borderColor = opts.color\n box.style.borderStyle = opts.borderStyle\n box.style.borderWidth = `${opts.borderWidth}px`\n box.style.backgroundColor = rgbaFromColor(opts.color, opts.fillOpacity)\n box.style.borderRadius = \"6px\"\n if (opts.label) {\n label.textContent = opts.label\n label.style.backgroundColor = opts.color\n label.style.display = \"\"\n } else {\n label.textContent = \"\"\n label.style.display = \"none\"\n }\n backdrop.style.display = opts.backdrop ? \"\" : \"none\"\n if (!opts.backdrop) {\n backdrop.style.clipPath = \"\"\n }\n }\n\n const overlay: Overlay = {\n onDismiss: null,\n show(nextTarget, showOpts) {\n target = nextTarget\n opts = {\n label: showOpts?.label ?? \"\",\n color: showOpts?.color ?? DEFAULT_COLOR,\n padding: showOpts?.padding ?? 0,\n borderStyle: showOpts?.borderStyle ?? \"solid\",\n borderWidth: showOpts?.borderWidth ?? DEFAULT_BORDER_WIDTH,\n fillOpacity: showOpts?.fillOpacity ?? DEFAULT_FILL_OPACITY,\n backdrop: showOpts?.backdrop ?? false,\n }\n applyStyles()\n updatePosition()\n box.style.display = \"\"\n attach()\n },\n hide() {\n target = null\n box.style.display = \"none\"\n backdrop.style.display = \"none\"\n backdrop.style.clipPath = \"\"\n detach()\n },\n destroy() {\n detach()\n box.remove()\n backdrop.remove()\n target = null\n },\n get isVisible() {\n return target !== null\n },\n }\n\n return overlay\n}\n\n/**\n * Build a `path(evenodd, ...)` that covers the full viewport with a\n * rectangular cutout. Two separate subpaths (each with their own M/Z)\n * avoid the bridging-line artifacts that `polygon()` creates.\n */\nfunction cutoutPath(\n vw: number,\n vh: number,\n x: number,\n y: number,\n w: number,\n h: number\n): string {\n const outer = `M0 0H${vw}V${vh}H0Z`\n const inner = `M${x} ${y}V${y + h}H${x + w}V${y}Z`\n return `path(evenodd,\"${outer}${inner}\")`\n}\n\nfunction rgbaFromColor(color: string, alpha: number): string {\n if (color.startsWith(\"#\")) {\n const hex = color.slice(1)\n const bigint = parseInt(\n hex.length === 3\n ? hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : hex,\n 16\n )\n const r = (bigint >> 16) & 255\n const g = (bigint >> 8) & 255\n const b = bigint & 255\n return `rgba(${r}, ${g}, ${b}, ${alpha})`\n }\n return color\n}\n","import type { ResolvedTheme, SessionStore, ThemePreference } from \"../session\"\n\nexport interface ThemeDetector {\n destroy(): void\n /** Resolve the current theme preference against the environment. */\n readonly resolved: ResolvedTheme\n}\n\nexport interface ThemeDetectorDeps {\n session: SessionStore\n onResolve?: (theme: ResolvedTheme) => void\n}\n\ntype HtmlClassToken = \"dark\" | \"light\"\n\nexport function createThemeDetector(deps: ThemeDetectorDeps): ThemeDetector {\n const { session, onResolve } = deps\n\n let resolved: ResolvedTheme = session.getState().resolvedTheme\n\n const detect = (preference: ThemePreference): ResolvedTheme => {\n if (preference !== \"auto\") return preference\n const htmlToken = readHtmlClassToken()\n if (htmlToken) return htmlToken\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\"\n ) {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\"\n }\n return \"light\"\n }\n\n const push = (): void => {\n const preference = session.getState().theme\n const next = detect(preference)\n if (next === resolved) return\n resolved = next\n session.getState().actions.setTheme(preference, next)\n onResolve?.(next)\n }\n\n push()\n\n let mql: MediaQueryList | null = null\n const mqlListener = (): void => push()\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\"\n ) {\n mql = window.matchMedia(\"(prefers-color-scheme: dark)\")\n if (typeof mql.addEventListener === \"function\") {\n mql.addEventListener(\"change\", mqlListener)\n } else if (typeof mql.addListener === \"function\") {\n // Safari < 14\n mql.addListener(mqlListener)\n }\n }\n\n let observer: MutationObserver | null = null\n if (\n typeof MutationObserver !== \"undefined\" &&\n typeof document !== \"undefined\"\n ) {\n observer = new MutationObserver(() => push())\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"class\"],\n })\n }\n\n const unsubscribe = session.subscribe((state, prev) => {\n if (state.theme !== prev.theme) push()\n })\n\n return {\n destroy() {\n unsubscribe()\n if (mql) {\n if (typeof mql.removeEventListener === \"function\") {\n mql.removeEventListener(\"change\", mqlListener)\n } else if (typeof mql.removeListener === \"function\") {\n mql.removeListener(mqlListener)\n }\n }\n observer?.disconnect()\n },\n get resolved() {\n return resolved\n },\n }\n}\n\nfunction readHtmlClassToken(): HtmlClassToken | null {\n if (typeof document === \"undefined\") return null\n const root = document.documentElement\n if (!root) return null\n if (root.classList.contains(\"dark\")) return \"dark\"\n if (root.classList.contains(\"light\")) return \"light\"\n return null\n}\n","import { KIND_STYLE, type Registry } from \"../entities\"\nimport { createCleanupStack, type CleanupStack } from \"../internal/cleanup\"\nimport type { SessionStore } from \"../session\"\nimport { createCursorTooltip, type CursorTooltip } from \"./cursor-tooltip\"\nimport { createSurfaceHost, type SurfaceHost } from \"./host\"\nimport {\n createInspector,\n type Inspector,\n type InspectorMatch,\n type InspectorMatchStack,\n type InspectorOptions,\n} from \"./inspector\"\nimport { createMenuBar, type Corner, type MenuBar } from \"./menu-bar\"\nimport { createOverlay, type Overlay } from \"./overlay\"\nimport { createThemeDetector, type ThemeDetector } from \"./theme\"\n\nexport interface CreateSurfaceShellOptions {\n mount: Element\n registry: Registry\n session: SessionStore\n stylesheets?: string[]\n initialCorner?: Corner\n appTitle?: string\n /**\n * Additional inspector wiring. Hover is pre-wired to overlay + tooltip; pass\n * `onSelect` (and `onAfterHover`) to extend behaviour without rebuilding the\n * host.\n */\n inspector?: Pick<InspectorOptions, \"onSelect\"> & {\n onAfterHover?: (\n match: InspectorMatch | null,\n cursor: { x: number; y: number } | null\n ) => void\n }\n}\n\nexport interface SurfaceShell {\n host: SurfaceHost\n overlay: Overlay\n tooltip: CursorTooltip\n inspector: Inspector\n menuBar: MenuBar\n themeDetector: ThemeDetector\n cleanup: CleanupStack\n destroy(): void\n}\n\n/**\n * Builds the chrome bundle shared by `createUidex` and `createHeadless`:\n * host + theme detector + overlay + cursor tooltip + inspector + menu bar.\n * Returns a cleanup stack so callers can register their own teardown in LIFO\n * order, then call `destroy()` once to drain the whole thing.\n */\nexport function createSurfaceShell(\n options: CreateSurfaceShellOptions\n): SurfaceShell {\n const cleanup = createCleanupStack()\n\n const host = createSurfaceHost({\n mount: options.mount,\n stylesheets: options.stylesheets,\n initialTheme: options.session.getState().resolvedTheme,\n })\n cleanup.add(host)\n\n const themeDetector = createThemeDetector({\n session: options.session,\n onResolve: (theme) => host.applyTheme(theme),\n })\n cleanup.add(themeDetector)\n\n const overlay = createOverlay({ container: host.chromeEl })\n cleanup.add(overlay)\n\n const tooltip = createCursorTooltip({\n container: host.chromeEl,\n session: options.session,\n })\n cleanup.add(tooltip)\n\n const afterHover = options.inspector?.onAfterHover\n\n const showStack = (\n stack: InspectorMatchStack | null,\n cursor: { x: number; y: number } | null\n ): void => {\n if (!stack) {\n overlay.hide()\n tooltip.update(null, cursor)\n return\n }\n const { current } = stack\n overlay.show(current.element, {\n color: KIND_STYLE[current.ref.kind].color,\n })\n tooltip.update(\n {\n entity: current.entity,\n node: current.element,\n layer:\n stack.matches.length > 1\n ? { index: stack.index, total: stack.matches.length }\n : undefined,\n },\n cursor\n )\n }\n\n const inspector = createInspector({\n session: options.session,\n registry: options.registry,\n onSelect: options.inspector?.onSelect,\n onHover: (stack, cursor) => {\n showStack(stack, cursor)\n afterHover?.(stack?.current ?? null, cursor)\n },\n onCycle: (stack, cursor) => {\n showStack(stack, cursor)\n },\n })\n cleanup.add(inspector)\n\n const menuBar = createMenuBar({\n container: host.chromeEl,\n session: options.session,\n initialCorner: options.initialCorner,\n appTitle: options.appTitle,\n })\n cleanup.add(menuBar)\n\n return {\n host,\n overlay,\n tooltip,\n inspector,\n menuBar,\n themeDetector,\n cleanup,\n destroy: cleanup.drain,\n }\n}\n","export function detectDev(): boolean {\n try {\n if (\n typeof process !== \"undefined\" &&\n typeof process.env?.NODE_ENV === \"string\"\n ) {\n return process.env.NODE_ENV !== \"production\"\n }\n } catch {\n /* ignore */\n }\n return true\n}\n","import type {\n CloudAdapter,\n ConsoleLogEntry,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigIssue,\n NetworkErrorEntry,\n SourceRef,\n Viewport,\n} from \"../../ingest/feedback-contract\"\nimport type { EntityKind, EntityRef, Registry } from \"../../entities\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport type { OverlayShowOptions } from \"../../surface/overlay\"\nimport type { ViewSurface } from \"./surface\"\n\nexport type {\n CloudAdapter,\n ConsoleLogEntry,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigIssue,\n NetworkErrorEntry,\n SourceRef,\n Viewport,\n}\n\nexport interface ViewPalette {\n label: string\n group?: string\n /**\n * Leading-icon factory rendered as a rounded-square tile on the palette\n * row. Called fresh per render (so a returned SVG isn't reparented).\n */\n icon?: () => Node\n shortcut?: string\n}\n\nexport interface ViewDirectory {\n list(): readonly View[]\n recents(): readonly EntityRef[]\n favorites(): readonly EntityRef[]\n}\n\nexport interface ViewPushTarget {\n id: string\n ref?: EntityRef | null\n}\n\nexport interface HighlightController {\n show(ref: EntityRef, opts?: OverlayShowOptions): void\n hide(): void\n}\n\nexport interface ViewContext {\n ref: EntityRef | null\n registry: Registry\n cloud: CloudAdapter<unknown, unknown, unknown> | null\n sdkCloud: CloudAdapter\n views: ViewDirectory\n /** Push a view onto the stack. Unregistered ids are a no-op. */\n push: (target: ViewPushTarget) => void\n /** Pop the top view off the stack. No-op when the stack is empty. */\n pop: () => void\n /** Clear the entire view stack. */\n close: () => void\n /** Resolve the first view matching `ref` and push it onto the stack. */\n navigate: (ref: EntityRef) => void\n /** Pin the overlay to `ref` until the user presses Esc. */\n pinHighlight: (ref: EntityRef) => void\n /** Toggle favorite status for an entity ref. */\n toggleFavorite: (ref: EntityRef) => void\n /** Check if an entity ref is favorited. */\n isFavorite: (ref: EntityRef) => boolean\n /** Shell-owned search input. The shell dispatches its value into the active surface. */\n searchInput: HTMLInputElement\n /** Drives the Surface's singleton overlay from inside a custom surface. */\n highlight: HighlightController\n /** Snapshot of the current view stack (top-most last). */\n getStack: () => readonly ViewStackEntry[]\n}\n\nexport interface ShellHint {\n key: string\n label: string\n}\n\nexport type ShellActionIntent =\n | { kind: \"push\"; viewId: string; refKind?: EntityKind }\n | { kind: \"pop\" }\n | { kind: \"close\" }\n | { kind: \"navigate\"; refKind?: EntityKind }\n | { kind: \"external\"; describe: string }\n\nexport interface ShellAction {\n id: string\n label: string\n shortcut?: string\n icon?: () => Node\n perform: () => void | Promise<void>\n intent?: ShellActionIntent\n}\n\nexport type Cleanup = () => void\n\nexport interface View {\n id: string\n matches?: (ref: EntityRef) => boolean\n palette?: ViewPalette\n title?: string | ((ctx: ViewContext) => string)\n /** Show the shell search input when this view is on top. Default: true. */\n searchable?: boolean\n hints?: ShellHint[] | ((ctx: ViewContext) => ShellHint[])\n actions?: (ctx: ViewContext) => ShellAction[]\n /**\n * Element focused when this view becomes the top of the stack. The shell\n * falls back to the first focusable element in the host when omitted, or\n * when the declared target has been removed from the host.\n */\n focusTarget?: (root: HTMLElement, ctx: ViewContext) => HTMLElement | null\n surface: (ctx: ViewContext) => ViewSurface\n}\n\nexport class ViewValidationError extends Error {\n constructor(message: string) {\n super(message)\n this.name = \"ViewValidationError\"\n }\n}\n","import { sameRef, type EntityRef } from \"../../entities\"\nimport { detectDev } from \"../../internal/dev\"\nimport type { SessionStore } from \"../../session\"\nimport { ViewValidationError, type View } from \"./types\"\n\nexport interface ViewRegistrar {\n register(view: View): void\n unregister(id: string): void\n list(): readonly View[]\n get(id: string): View | undefined\n findMatch(ref: EntityRef): View | null\n navigate(ref: EntityRef): void\n recents(): readonly EntityRef[]\n favorites(): readonly EntityRef[]\n toggleFavorite(ref: EntityRef): void\n isFavorite(ref: EntityRef): boolean\n}\n\nexport interface ViewRegistrarOptions {\n session: SessionStore\n dev?: boolean\n}\n\nexport function createViewRegistrar(\n options: ViewRegistrarOptions\n): ViewRegistrar {\n const FAVORITES_KEY = \"uidex:favorites\"\n const views: View[] = []\n const recentRefs: EntityRef[] = []\n const favoriteRefs: EntityRef[] = []\n const MAX_RECENTS = 8\n const dev = options.dev ?? detectDev()\n\n try {\n const stored = localStorage.getItem(FAVORITES_KEY)\n if (stored) {\n const parsed = JSON.parse(stored) as EntityRef[]\n favoriteRefs.push(...parsed)\n }\n } catch {\n /* ignore — localStorage unavailable or corrupt */\n }\n\n function persistFavorites(): void {\n try {\n localStorage.setItem(FAVORITES_KEY, JSON.stringify(favoriteRefs))\n } catch {\n /* ignore */\n }\n }\n\n function validate(view: View): void {\n if (\n view === null ||\n typeof view !== \"object\" ||\n typeof view.id !== \"string\" ||\n view.id.length === 0\n ) {\n throw new ViewValidationError(\"View must have a non-empty string id\")\n }\n if (typeof view.surface !== \"function\") {\n throw new ViewValidationError(\n `View ${view.id}: 'surface' must be a function`\n )\n }\n if (!view.matches && !view.palette) {\n throw new ViewValidationError(\n `View ${view.id}: at least one of 'matches' or 'palette' is required`\n )\n }\n }\n\n function warnOverlaps(incoming: View): void {\n if (!dev || !incoming.matches) return\n const selection = options.session.getState().selection\n if (!selection) return\n if (!incoming.matches(selection)) return\n for (const existing of views) {\n if (existing.id === incoming.id) continue\n if (!existing.matches) continue\n if (existing.matches(selection)) {\n console.warn(\n `[uidex] View \"${incoming.id}\" matches ref ${selection.kind}:${selection.id} ` +\n `also handled by view \"${existing.id}\"; last-registered wins.`\n )\n }\n }\n }\n\n function register(view: View): void {\n validate(view)\n warnOverlaps(view)\n const existingIdx = views.findIndex((p) => p.id === view.id)\n if (existingIdx >= 0) views.splice(existingIdx, 1)\n views.push(view)\n }\n\n function unregister(id: string): void {\n const idx = views.findIndex((p) => p.id === id)\n if (idx < 0) return\n views.splice(idx, 1)\n const state = options.session.getState()\n const top = state.stack[state.stack.length - 1] ?? null\n if (top?.id === id) state.actions.closeView()\n }\n\n function list(): readonly View[] {\n return views.slice()\n }\n\n function get(id: string): View | undefined {\n return views.find((p) => p.id === id)\n }\n\n function findMatch(ref: EntityRef): View | null {\n for (let i = views.length - 1; i >= 0; i--) {\n const view = views[i]\n if (view.matches && view.matches(ref)) return view\n }\n return null\n }\n\n function trackRecent(ref: EntityRef): void {\n const idx = recentRefs.findIndex((r) => sameRef(r, ref))\n if (idx >= 0) recentRefs.splice(idx, 1)\n recentRefs.unshift(ref)\n if (recentRefs.length > MAX_RECENTS) recentRefs.length = MAX_RECENTS\n }\n\n function navigate(ref: EntityRef): void {\n const match = findMatch(ref)\n if (!match) return\n trackRecent(ref)\n const state = options.session.getState()\n state.actions.select(ref)\n state.actions.pushStack({ id: match.id, ref })\n }\n\n function recents(): readonly EntityRef[] {\n return recentRefs\n }\n\n function favorites(): readonly EntityRef[] {\n return favoriteRefs\n }\n\n function toggleFavorite(ref: EntityRef): void {\n const idx = favoriteRefs.findIndex((r) => sameRef(r, ref))\n if (idx >= 0) {\n favoriteRefs.splice(idx, 1)\n } else {\n favoriteRefs.unshift(ref)\n }\n persistFavorites()\n }\n\n function isFavorite(ref: EntityRef): boolean {\n return favoriteRefs.some((r) => sameRef(r, ref))\n }\n\n return {\n register,\n unregister,\n list,\n get,\n findMatch,\n navigate,\n recents,\n favorites,\n toggleFavorite,\n isFavorite,\n }\n}\n","import type { ClassValue } from \"clsx\"\n\ntype VariantSet = Record<string, Record<string, ClassValue>>\n\ntype VariantValues<V extends VariantSet> = {\n [K in keyof V]?: keyof V[K]\n}\n\nexport interface CvaConfig<V extends VariantSet> {\n variants?: V\n defaultVariants?: VariantValues<V>\n}\n\nexport function cva<V extends VariantSet>(\n base: ClassValue,\n config: CvaConfig<V> = {}\n) {\n return (props: VariantValues<V> = {}): ClassValue[] => {\n const out: ClassValue[] = [base]\n const variants = config.variants\n if (!variants) return out\n for (const key of Object.keys(variants) as Array<keyof V>) {\n const picked =\n (props[key] as string | undefined) ??\n (config.defaultVariants?.[key] as string | undefined)\n if (picked === undefined) continue\n const cls = variants[key][picked as string]\n if (cls) out.push(cls)\n }\n return out\n }\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\nimport { cva } from \"./cva\"\n\nexport type BadgeVariant =\n | \"default\"\n | \"destructive\"\n | \"error\"\n | \"info\"\n | \"outline\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n\nexport type BadgeSize = \"default\" | \"sm\" | \"lg\"\n\nconst badgeBase =\n \"relative inline-flex shrink-0 items-center justify-center gap-1 whitespace-nowrap rounded-sm border border-transparent font-medium outline-none transition-shadow [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-3 [&_svg]:pointer-events-none [&_svg]:shrink-0\"\n\nexport const badgeVariants = cva(badgeBase, {\n defaultVariants: { size: \"default\", variant: \"default\" },\n variants: {\n size: {\n default: \"h-4.5 min-w-4.5 px-1 text-xs\",\n lg: \"h-5.5 min-w-5.5 px-1.5 text-sm\",\n sm: \"h-4 min-w-4 rounded-[0.25rem] px-1 text-[0.625rem]\",\n },\n variant: {\n default: \"bg-primary text-primary-foreground\",\n destructive: \"bg-destructive text-white\",\n error:\n \"bg-destructive/10 text-destructive-foreground dark:bg-destructive/20\",\n info: \"bg-info/10 text-info-foreground dark:bg-info/20\",\n outline: \"border-input bg-background text-foreground dark:bg-input/30\",\n secondary: \"bg-secondary text-secondary-foreground\",\n success: \"bg-success/10 text-success-foreground dark:bg-success/20\",\n warning: \"bg-warning/10 text-warning-foreground dark:bg-warning/20\",\n },\n },\n})\n\nexport interface CreateBadgeOptions extends Omit<ElementOptions, \"class\"> {\n variant?: BadgeVariant\n size?: BadgeSize\n class?: ClassValue\n}\n\nexport function createBadge(\n options: CreateBadgeOptions = {},\n children: Child | Child[] = []\n): HTMLSpanElement {\n const { variant, size, class: extra, attrs, ...rest } = options\n return el(\n \"span\",\n {\n ...rest,\n class: cn(badgeVariants({ variant, size }), extra),\n attrs: { \"data-slot\": \"badge\", ...attrs },\n },\n children\n )\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../../internal/el\"\nimport { createBadge } from \"../../ui/badge\"\n\nexport interface ChipOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nconst CHIP_CLASS =\n \"inline-flex items-center gap-1.5 text-xs font-medium text-muted-foreground\"\n\nexport function createChip(\n options: ChipOptions = {},\n children: Child | Child[] = []\n): HTMLSpanElement {\n const { class: extra, ...rest } = options\n return el(\"span\", { ...rest, class: cn(CHIP_CLASS, extra) }, children)\n}\n\nexport function createPillItem(options: ChipOptions = {}): HTMLLIElement {\n const { class: extra, text, attrs, ...rest } = options\n const li = el(\"li\", { ...rest, class: \"list-none\", attrs })\n const badge = createBadge(\n { variant: \"secondary\", size: \"default\", class: extra, text },\n []\n )\n li.append(badge)\n return li\n}\n","import { createElement as createLucideElement } from \"lucide\"\nimport { KIND_STYLE, type EntityKind } from \"../../entities\"\nimport { cn } from \"../../internal/cn\"\nimport { createBadge } from \"../../ui/badge\"\nimport { createIconTile } from \"./icon-tile\"\n\nexport function renderKindIcon(kind: EntityKind): SVGElement {\n const style = KIND_STYLE[kind]\n const svg = createLucideElement(style.icon)\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"class\", cn(\"h-4 w-4 shrink-0\", style.tone))\n return svg\n}\n\n/** Tile-wrapped kind icon for use as the leading slot on list/detail rows. */\nexport function renderKindIconTile(kind: EntityKind): HTMLElement {\n const style = KIND_STYLE[kind]\n return createIconTile(renderKindIcon(kind), { toneClass: style.chip })\n}\n\n/** Inline badge with the kind icon + label, built on the coss `createBadge`. */\nexport function renderKindBadge(kind: EntityKind): HTMLElement {\n const style = KIND_STYLE[kind]\n const icon = createLucideElement(style.icon)\n icon.setAttribute(\"aria-hidden\", \"true\")\n return createBadge(\n {\n class: style.chip,\n attrs: { \"data-uidex-kind-badge\": kind },\n },\n [icon, style.label]\n )\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\n\nconst TILE_CLASS =\n \"inline-flex size-6 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground\"\n\nconst ICON_SIZE_CLASS_RE = /\\b(h-\\d+|w-\\d+|size-\\d+)\\b/g\n\nexport interface IconTileOptions {\n extraClass?: ClassValue\n /** Tailwind color classes (bg/text/hover/dark) replacing the muted default. */\n toneClass?: ClassValue\n /** CSS color applied as a tinted background (supports hex/rgb/var). */\n tint?: string\n /** 0–100, default 15 — enough to read the hue without fighting contrast. */\n tintAlpha?: number\n}\n\nexport function createIconTile(\n inner: Node,\n options: IconTileOptions = {}\n): HTMLElement {\n if (inner instanceof SVGElement) {\n const existing = inner.getAttribute(\"class\") ?? \"\"\n const stripped = existing.replace(ICON_SIZE_CLASS_RE, \"\").trim()\n inner.setAttribute(\"class\", cn(stripped, \"size-3.5 opacity-80\"))\n }\n\n const tile = el(\n \"span\",\n {\n class: cn(TILE_CLASS, options.toneClass, options.extraClass),\n attrs: { \"data-slot\": \"icon-tile\", \"aria-hidden\": \"true\" },\n },\n [inner]\n )\n\n if (options.tint && !options.toneClass) {\n const pct = options.tintAlpha ?? 15\n tile.style.backgroundColor = `color-mix(in srgb, ${options.tint} ${pct}%, transparent)`\n }\n return tile\n}\n","import { displayName, KIND_STYLE, type Entity } from \"../../entities\"\nimport { el } from \"../../internal/el\"\nimport { createChip } from \"./chip\"\nimport { renderKindIcon } from \"./kind-icon\"\n\nexport interface KindChipOptions {\n entity: Entity\n label?: string\n withKindName?: boolean\n node?: Element | null\n}\n\nexport function renderKindChip(options: KindChipOptions): HTMLElement {\n const { entity, label, withKindName, node } = options\n const kind = entity.kind\n const style = KIND_STYLE[kind]\n const chip = createChip({ attrs: { \"data-uidex-kind-chip\": kind } })\n chip.append(renderKindIcon(kind))\n const resolved = label ?? displayName(entity, node)\n const text = withKindName\n ? resolved\n ? `${style.label} · ${resolved}`\n : style.label\n : resolved\n if (text) {\n chip.append(\n el(\"span\", {\n class: \"truncate\",\n text,\n })\n )\n }\n return chip\n}\n","import * as scrollArea from \"@zag-js/scroll-area\"\nimport { createMachineHandle, type MachineHandle } from \"./machine\"\nimport { normalizeProps, type DomProps } from \"./normalize\"\n\nexport type ScrollAreaProps = scrollArea.Props\nexport type ScrollAreaApi = scrollArea.Api<DomProps>\nexport type ScrollAreaHandle = MachineHandle<ScrollAreaApi>\n\nexport function createScrollArea(\n props: Partial<ScrollAreaProps> = {}\n): ScrollAreaHandle {\n return createMachineHandle(\n scrollArea.machine,\n scrollArea.connect,\n normalizeProps,\n props\n )\n}\n\nexport { scrollArea }\n","import {\n createScope,\n findTransition,\n getExitEnterStates,\n hasTag as hasTagFn,\n INIT_STATE,\n MachineStatus,\n matchesState,\n resolveStateValue,\n type Machine,\n type MachineSchema,\n type Service,\n} from \"@zag-js/core\"\nimport {\n compact,\n ensure,\n isFunction,\n isString,\n toArray,\n warn,\n} from \"@zag-js/utils\"\n\ntype AnyFn = (...args: unknown[]) => unknown\n\ninterface BindableOptions<V> {\n value?: V\n defaultValue?: V\n isEqual?: (a: V, b: V) => boolean\n onChange?: (next: V, prev: V) => void\n sync?: boolean\n debug?: string\n hash?: (value: V) => string\n}\n\ninterface Bindable<V> {\n initial: V\n ref: { current: V }\n get(): V\n set(value: V | ((prev: V) => V)): void\n invoke(next: V, prev: V): void\n hash(value: V): string\n}\n\ninterface BindableFactory {\n <V>(propsFn: () => BindableOptions<V>): Bindable<V>\n cleanup: (fn: () => void) => void\n ref: <V>(defaultValue: V) => { get: () => V; set: (next: V) => void }\n}\n\nfunction createBindable<V>(propsFn: () => BindableOptions<V>): Bindable<V> {\n const initial = (propsFn().value ?? propsFn().defaultValue) as V\n let local = initial\n const ref = { current: initial as V }\n const eq = () => propsFn().isEqual ?? Object.is\n\n const getControlled = () => propsFn().value !== undefined\n\n const setFn = (value: V | ((prev: V) => V)) => {\n const prev = ref.current\n const next = (isFunction(value) ? (value as (p: V) => V)(prev) : value) as V\n if (propsFn().debug) {\n console.log(`[bindable > ${propsFn().debug}] setValue`, { next, prev })\n }\n if (!getControlled()) {\n local = next\n ref.current = next\n }\n if (!eq()(next, prev)) {\n propsFn().onChange?.(next, prev)\n }\n }\n\n const get = () => (getControlled() ? (propsFn().value as V) : local)\n\n // Keep ref in sync when controlled value changes on subsequent reads.\n const syncRef = () => {\n const v = get()\n if (!eq()(v, ref.current)) ref.current = v\n }\n\n return {\n initial,\n ref: new Proxy(ref, {\n get(target, key) {\n if (key === \"current\") {\n syncRef()\n return target.current\n }\n return Reflect.get(target, key)\n },\n }),\n get,\n set: setFn,\n invoke(next, prev) {\n propsFn().onChange?.(next, prev)\n },\n hash(value) {\n return propsFn().hash?.(value) ?? String(value)\n },\n }\n}\n\nexport interface MachineRunner<T extends MachineSchema> {\n service: Service<T>\n start(): void\n stop(): void\n subscribe(listener: () => void): () => void\n update(next: Partial<T[\"props\"]>): void\n}\n\nexport interface MachineHandle<Api> {\n runner: MachineRunner<MachineSchema>\n api: () => Api\n destroy: () => void\n}\n\nexport function createMachineHandle<Props, Api>(\n zagMachine: unknown,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n connect: (service: any, normalize: any) => Api,\n normalize: unknown,\n props: Partial<Props> = {} as Partial<Props>\n): MachineHandle<Api> {\n const runner = createMachineRunner(\n zagMachine as Machine<MachineSchema>,\n props as never\n )\n runner.start()\n return {\n runner,\n api: () => connect(runner.service as never, normalize),\n destroy: () => runner.stop(),\n }\n}\n\ntype AnyMachine = Machine<MachineSchema>\n\nexport function createMachineRunner<T extends MachineSchema>(\n machineArg: Machine<T>,\n initialProps: Partial<T[\"props\"]> = {} as Partial<T[\"props\"]>\n): MachineRunner<T> {\n const machine = machineArg as AnyMachine\n let userProps = initialProps\n const unmountFns: Array<() => void> = []\n const listeners = new Set<() => void>()\n const notify = () => listeners.forEach((fn) => fn())\n\n const bindableFactory: BindableFactory = ((propsFn) =>\n createBindable(propsFn)) as BindableFactory\n bindableFactory.cleanup = (fn) => unmountFns.push(fn)\n bindableFactory.ref = <V>(defaultValue: V) => {\n let value = defaultValue\n return {\n get: () => value,\n set: (next: V) => {\n value = next\n },\n }\n }\n\n const debug = (...args: unknown[]) => {\n if ((machine as { debug?: boolean }).debug) {\n console.log(...args)\n }\n }\n\n const propsRef = { current: {} as T[\"props\"] }\n const prop = (key: string) =>\n (propsRef.current as Record<string, unknown>)[key]\n\n const refreshProps = () => {\n const scope = scopeRef.current\n const computedProps =\n (machine as { props?: AnyFn }).props?.({\n props: compact(userProps) as Record<string, unknown>,\n scope,\n }) ?? userProps\n propsRef.current = computedProps as T[\"props\"]\n }\n\n const defaultGetRootNode = () =>\n typeof document !== \"undefined\" ? document : (null as never)\n\n const scopeRef = {\n current: createScope({\n id: (initialProps as { id?: string }).id,\n ids: (initialProps as { ids?: Record<string, string> }).ids,\n getRootNode:\n (\n initialProps as {\n getRootNode?: () => Node | ShadowRoot | Document\n }\n ).getRootNode ?? defaultGetRootNode,\n }),\n }\n refreshProps()\n\n const effectsMap = new Map<string, () => void>()\n let transitionRef: {\n actions?: unknown\n target?: string\n reenter?: boolean\n } | null = null\n let previousEvent: { type: string } = { type: \"\" }\n let currentEvent: { type: string } = { type: \"\" }\n\n const getEvent = () => ({\n ...currentEvent,\n current() {\n return currentEvent\n },\n previous() {\n return previousEvent\n },\n })\n\n const getState = () => ({\n ...state,\n matches(...values: string[]) {\n return values.some((v) => matchesState(state.ref.current as string, v))\n },\n hasTag(tag: string) {\n return hasTagFn(machine, state.ref.current as string, tag)\n },\n })\n\n const getParams = () => ({\n state: getState(),\n context: ctx,\n event: getEvent(),\n prop,\n send,\n action,\n guard,\n track: trackFn,\n refs,\n computed,\n flush,\n scope: scopeRef.current,\n choose,\n })\n\n const action = (keys: unknown) => {\n const strs = (isFunction(keys) ? (keys as AnyFn)(getParams()) : keys) as\n | string[]\n | undefined\n if (!strs) return\n const fns = strs.map((s) => {\n const fn = (\n machine as { implementations?: { actions?: Record<string, AnyFn> } }\n ).implementations?.actions?.[s]\n if (!fn) warn(`[uidex] No implementation found for action \"${s}\"`)\n return fn\n })\n for (const fn of fns) fn?.(getParams())\n }\n\n const guard = (str: unknown) => {\n if (isFunction(str)) return (str as AnyFn)(getParams())\n return (\n machine as { implementations?: { guards?: Record<string, AnyFn> } }\n ).implementations?.guards?.[str as string](getParams())\n }\n\n const effect = (keys: unknown) => {\n const strs = (isFunction(keys) ? (keys as AnyFn)(getParams()) : keys) as\n | string[]\n | undefined\n if (!strs) return\n const fns = strs.map((s) => {\n const fn = (\n machine as { implementations?: { effects?: Record<string, AnyFn> } }\n ).implementations?.effects?.[s]\n if (!fn) warn(`[uidex] No implementation found for effect \"${s}\"`)\n return fn\n })\n const localCleanups: Array<() => void> = []\n for (const fn of fns) {\n const cleanup = fn?.(getParams())\n if (typeof cleanup === \"function\") {\n localCleanups.push(cleanup as () => void)\n }\n }\n return () => localCleanups.forEach((fn) => fn())\n }\n\n const choose = (transitions: unknown) =>\n (toArray(transitions) as Array<{ guard?: unknown }>).find((t) => {\n let result = !t.guard\n if (isString(t.guard)) result = !!guard(t.guard)\n else if (isFunction(t.guard)) result = !!(t.guard as AnyFn)(getParams())\n return result\n })\n\n const computed = (key: string) => {\n ensure(\n (machine as { computed?: unknown }).computed,\n () => `[uidex] No computed object found on machine`\n )\n const fn = (machine as { computed: Record<string, AnyFn> }).computed[key]\n return fn({\n context: ctx,\n event: getEvent(),\n prop,\n refs,\n scope: scopeRef.current,\n computed,\n })\n }\n\n const trackSites = new WeakMap<\n AnyFn,\n { deps: unknown[]; cleanup?: () => void; mounted: boolean }\n >()\n const trackFn = (deps: unknown[] | undefined, fn: AnyFn) => {\n let site = trackSites.get(fn)\n const current = (deps ?? []).map((d) =>\n typeof d === \"function\" ? (d as AnyFn)() : d\n )\n if (!site) {\n site = { deps: current, mounted: false }\n trackSites.set(fn, site)\n return\n }\n const changed =\n current.length !== site.deps.length ||\n current.some((v, i) => !Object.is(v, site!.deps[i]))\n if (changed && site.mounted) {\n site.cleanup?.()\n const cleanup = fn()\n site.cleanup =\n typeof cleanup === \"function\" ? (cleanup as () => void) : undefined\n }\n site.deps = current\n }\n\n const flush = (fn: () => void) => {\n queueMicrotask(() => fn())\n }\n\n // context ------------------------------------------------------------\n let contextFields: Record<string, Bindable<unknown>> = {}\n const ctxContextFn = (machine as { context?: AnyFn }).context\n if (ctxContextFn) {\n contextFields = ctxContextFn({\n prop,\n bindable: bindableFactory,\n scope: scopeRef.current,\n flush,\n getContext() {\n return ctx\n },\n getComputed() {\n return computed\n },\n getRefs() {\n return refs\n },\n getEvent() {\n return getEvent()\n },\n }) as Record<string, Bindable<unknown>>\n }\n\n const ctx = {\n get(key: string) {\n return contextFields[key]?.ref.current\n },\n set(key: string, value: unknown) {\n contextFields[key]?.set(value as never)\n },\n initial(key: string) {\n return contextFields[key]?.initial\n },\n hash(key: string) {\n const current = contextFields[key]?.get()\n return contextFields[key]?.hash(current as never) ?? \"\"\n },\n }\n\n // refs ---------------------------------------------------------------\n const refsInit =\n (machine as { refs?: AnyFn }).refs?.({ prop, context: ctx }) ?? {}\n const refsStore: Record<string, unknown> = { ...(refsInit as object) }\n const refs = {\n get(key: string) {\n return refsStore[key]\n },\n set(key: string, value: unknown) {\n refsStore[key] = value\n },\n }\n\n // state bindable -----------------------------------------------------\n const initialState = resolveStateValue(\n machine,\n (machine as { initialState: AnyFn }).initialState({ prop }) as string\n )\n const state = createBindable<string>(() => ({\n defaultValue: initialState as string,\n onChange(nextState: string, prevState: string) {\n const { exiting, entering } = getExitEnterStates(\n machine,\n prevState,\n nextState,\n transitionRef?.reenter\n ) as {\n exiting: Array<{ path: string; state?: { exit?: unknown } }>\n entering: Array<{\n path: string\n state?: { effects?: unknown; entry?: unknown }\n }>\n }\n exiting.forEach((item) => {\n const exitEffects = effectsMap.get(item.path)\n exitEffects?.()\n effectsMap.delete(item.path)\n })\n exiting.forEach((item) => {\n action(item.state?.exit)\n })\n action(transitionRef?.actions)\n entering.forEach((item) => {\n const cleanup = effect(item.state?.effects)\n if (cleanup) effectsMap.set(item.path, cleanup)\n })\n if (prevState === INIT_STATE) {\n action((machine as { entry?: unknown }).entry)\n const cleanup = effect((machine as { effects?: unknown }).effects)\n if (cleanup) effectsMap.set(INIT_STATE, cleanup)\n }\n entering.forEach((item) => {\n action(item.state?.entry)\n })\n notify()\n },\n }))\n\n let status: MachineStatus = MachineStatus.NotStarted\n let hydrated: string | undefined\n\n const getCurrentState = (): string => state.ref.current\n\n const send = (event: { type: string }) => {\n queueMicrotask(() => {\n if (status !== MachineStatus.Started) return\n previousEvent = currentEvent\n currentEvent = event\n const currentState = getCurrentState()\n const { transitions, source } = findTransition(\n machine,\n currentState,\n event.type\n )\n const transition = choose(transitions) as\n | { actions?: unknown; target?: string; reenter?: boolean }\n | undefined\n if (!transition) return\n transitionRef = transition\n const target = resolveStateValue(\n machine,\n (transition.target ?? currentState) as string,\n source as never\n )\n debug(\"transition\", event.type, transition.target || currentState)\n const changed = target !== currentState\n if (changed) {\n state.set(target as string)\n } else if (transition.reenter) {\n ;(state as unknown as { invoke: AnyFn }).invoke(\n currentState,\n currentState\n )\n } else {\n action(transition.actions ?? [])\n notify()\n }\n })\n }\n\n ;(machine as { watch?: AnyFn }).watch?.(getParams())\n\n const service: Service<T> = {\n state: getState() as Service<T>[\"state\"],\n send,\n context: ctx as Service<T>[\"context\"],\n prop: prop as Service<T>[\"prop\"],\n scope: scopeRef.current,\n refs: refs as Service<T>[\"refs\"],\n computed: computed as Service<T>[\"computed\"],\n event: getEvent() as Service<T>[\"event\"],\n getStatus: () => status,\n }\n\n Object.defineProperty(service, \"state\", {\n get: () => getState(),\n enumerable: true,\n })\n Object.defineProperty(service, \"event\", {\n get: () => getEvent(),\n enumerable: true,\n })\n\n return {\n service,\n start() {\n if (status === MachineStatus.Started) return\n status = MachineStatus.Started\n ;(state as unknown as { invoke: AnyFn }).invoke(\n hydrated ?? state.initial,\n INIT_STATE\n )\n notify()\n },\n stop() {\n if (status === MachineStatus.Stopped) return\n hydrated = getCurrentState()\n status = MachineStatus.Stopped\n effectsMap.forEach((fn) => fn())\n effectsMap.clear()\n transitionRef = null\n while (unmountFns.length) unmountFns.pop()?.()\n listeners.clear()\n queueMicrotask(() => {\n action((machine as { exit?: unknown }).exit)\n })\n },\n subscribe(listener) {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n update(next) {\n userProps = { ...userProps, ...next }\n refreshProps()\n notify()\n },\n }\n}\n","import {\n createNormalizer,\n type NormalizeProps,\n type PropTypes,\n} from \"@zag-js/types\"\n\ntype DomProps = PropTypes<Record<string, unknown>>\n\nexport const normalizeProps: NormalizeProps<DomProps> =\n createNormalizer<DomProps>((props) => props)\n\nexport type { DomProps }\n","import { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\n\n// Zag connect() returns React-style prop objects; this bridges them to imperative DOM APIs.\nexport function spreadProps(\n node: HTMLElement,\n props: Record<string, unknown>\n): Cleanup {\n const removers: Cleanup[] = []\n for (const [key, rawValue] of Object.entries(props)) {\n if (key === \"children\" || key === \"dangerouslySetInnerHTML\") continue\n if (key.startsWith(\"on\") && typeof rawValue === \"function\") {\n const eventName = key.slice(2).toLowerCase()\n // React aliases onChange to the `input` event for text-type inputs and\n // textareas so handlers fire on every keystroke. Native DOM `change`\n // only fires on blur, which breaks live-filter UIs like command palette.\n const isTextControl =\n (node instanceof HTMLInputElement &&\n node.type !== \"checkbox\" &&\n node.type !== \"radio\") ||\n node instanceof HTMLTextAreaElement\n const effectiveEvent =\n eventName === \"change\" && isTextControl ? \"input\" : eventName\n const listener = rawValue as EventListener\n node.addEventListener(effectiveEvent, listener)\n removers.push(() => node.removeEventListener(effectiveEvent, listener))\n continue\n }\n // zag's dataAttr/ariaAttr return undefined to mean \"remove\" — treat\n // undefined/null as attribute removal rather than no-op, otherwise\n // state toggles like data-highlighted stick once set.\n if (rawValue === undefined || rawValue === null) {\n node.removeAttribute(key)\n continue\n }\n if (typeof rawValue === \"boolean\") {\n if (rawValue) node.setAttribute(key, \"\")\n else node.removeAttribute(key)\n continue\n }\n if (key === \"style\" && typeof rawValue === \"object\") {\n Object.assign(node.style, rawValue as Record<string, string>)\n continue\n }\n if (key === \"className\" || key === \"class\") {\n node.setAttribute(\"class\", String(rawValue))\n continue\n }\n if (key === \"htmlFor\") {\n node.setAttribute(\"for\", String(rawValue))\n continue\n }\n if (key === \"tabIndex\") {\n node.tabIndex = Number(rawValue)\n continue\n }\n node.setAttribute(key, String(rawValue))\n }\n return composeCleanups(removers)\n}\n\nexport function createPersistentSpreads(): {\n apply(node: HTMLElement, props: Record<string, unknown>): void\n cleanupAll(): void\n} {\n const map = new Map<HTMLElement, Cleanup>()\n return {\n apply(node, props) {\n const prior = map.get(node)\n if (prior) prior()\n map.set(node, spreadProps(node, props))\n },\n cleanupAll() {\n for (const clean of map.values()) clean()\n map.clear()\n },\n }\n}\n","import type { CustomSurface } from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport type { MountedSurface } from \"./index\"\n\nexport function renderCustomSurface(\n surface: CustomSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n const result = surface.render(ctx, root)\n const cleanup = typeof result === \"function\" ? result : () => {}\n return {\n cleanup: () => {\n try {\n cleanup()\n } finally {\n root.replaceChildren()\n }\n },\n }\n}\n","import {\n Camera,\n ChevronDown,\n Copy,\n Highlighter,\n MessageCircleWarning,\n TicketPlus,\n View,\n createElement as createLucideElement,\n type IconNode,\n} from \"lucide\"\nimport {\n displayName,\n entityKey,\n type Entity,\n type EntityRef,\n type Flow,\n} from \"../../entities\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport { filterEntities, filterIds, normalizeQuery } from \"../builder/filter\"\nimport type {\n DetailAction,\n DetailActionIcon,\n DetailActionRunContext,\n DetailSection,\n DetailSubtitle,\n DetailSurface,\n ResolvedFlowStep,\n} from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport { SECTION_LABELS } from \"../labels\"\nimport { createBadge } from \"../../ui/badge\"\nimport { createButton } from \"../primitives/button\"\nimport { createEntityLink } from \"../primitives/entity-link\"\nimport { createIconTile } from \"../primitives/icon-tile\"\nimport {\n renderKindBadge,\n renderKindIcon,\n renderKindIconTile,\n} from \"../primitives/kind-icon\"\nimport { fillRow, fillRowWithHandle } from \"../primitives/row\"\nimport { createSection } from \"../primitives/section\"\nimport {\n createCaption,\n createDescription,\n createHeading,\n createMutedText,\n} from \"../primitives/text\"\nimport {\n LIST_GROUP_LABEL_CLASS,\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n} from \"../../ui/list-item\"\nimport type { MountedSurface, SubmitIntent, SubmitIntentSource } from \"./index\"\n\nconst ICON_MAP: Record<DetailActionIcon, IconNode> = {\n copy: Copy,\n camera: Camera,\n \"message-circle-warning\": MessageCircleWarning,\n \"chevron-down\": ChevronDown,\n highlighter: Highlighter,\n \"ticket-plus\": TicketPlus,\n view: View,\n}\n\nfunction iconFor(icon: DetailActionIcon | undefined): IconNode | null {\n return icon ? ICON_MAP[icon] : null\n}\n\nfunction renderSubtitle(subtitle: DetailSubtitle): HTMLElement {\n const text = subtitle.extra\n ? `${subtitle.rawId} · ${subtitle.extra}`\n : subtitle.rawId\n return createCaption({\n class: \"px-2\",\n attrs: { \"data-uidex-detail-subtitle\": \"\" },\n text,\n })\n}\n\nfunction renderNotFound(ref: EntityRef): HTMLElement {\n return createMutedText({\n class: \"p-4\",\n attrs: { \"data-uidex-detail-missing\": \"\" },\n text: `${ref.kind}: ${ref.id} not found in registry`,\n })\n}\n\ninterface RenderedActions {\n node: HTMLElement\n buttons: readonly HTMLButtonElement[]\n cleanup: Cleanup\n}\n\nfunction renderActions(\n actions: readonly DetailAction[],\n ctx: ViewContext,\n root: HTMLElement,\n heading?: string\n): RenderedActions {\n const cleanups: Cleanup[] = []\n const buttons: HTMLButtonElement[] = []\n\n const section = el(\"section\", {\n class: \"flex flex-col\",\n attrs: { \"data-uidex-detail-actions\": \"\" },\n })\n if (heading) {\n section.append(el(\"h3\", { class: LIST_GROUP_LABEL_CLASS, text: heading }))\n }\n const list = el(\"div\", {\n class: \"flex flex-col\",\n attrs: { role: \"listbox\", \"aria-label\": heading ?? \"Actions\" },\n })\n section.append(list)\n\n for (const action of actions) {\n const btn = createButton({\n variant: \"action\",\n attrs: {\n role: \"option\",\n tabindex: buttons.length === 0 ? \"0\" : \"-1\",\n \"data-uidex-detail-action\": action.id,\n \"aria-label\": action.ariaLabel ?? action.label,\n },\n })\n let leading: Node | undefined\n const icon = iconFor(action.icon)\n if (icon) {\n const svg = createLucideElement(icon)\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"class\", \"h-4 w-4 shrink-0\")\n leading = createIconTile(svg)\n }\n const { label: labelEl } = fillRowWithHandle(btn, {\n leading,\n label: action.label,\n trailing: action.hint,\n })\n\n let revertTimer: ReturnType<typeof setTimeout> | null = null\n const runCtx: DetailActionRunContext = {\n setLabel(next, durationMs) {\n if (revertTimer !== null) {\n clearTimeout(revertTimer)\n revertTimer = null\n }\n labelEl.textContent = next\n if (durationMs && durationMs > 0) {\n revertTimer = setTimeout(() => {\n labelEl.textContent = action.label\n revertTimer = null\n }, durationMs)\n }\n },\n }\n\n const onClick = async () => {\n if (\"copy\" in action) {\n try {\n await navigator.clipboard?.writeText(action.copy)\n runCtx.setLabel(\"Copied!\", 1200)\n } catch (err) {\n console.warn(\"[uidex] copy action: clipboard write failed\", err)\n runCtx.setLabel(\"Copy failed\", 1500)\n }\n } else if (\"scrollTo\" in action) {\n const target = root.querySelector<HTMLElement>(action.scrollTo)\n target?.scrollIntoView({ block: \"start\", behavior: \"smooth\" })\n } else if (\"push\" in action) {\n ctx.push({ id: action.push.id, ref: action.push.ref ?? null })\n } else if (\"navigate\" in action) {\n ctx.navigate(action.navigate)\n } else if (\"highlight\" in action) {\n ctx.pinHighlight(action.highlight)\n ctx.close()\n } else {\n await action.run(runCtx)\n }\n }\n btn.addEventListener(\"click\", onClick)\n cleanups.push(() => {\n btn.removeEventListener(\"click\", onClick)\n if (revertTimer !== null) clearTimeout(revertTimer)\n })\n buttons.push(btn)\n list.append(btn)\n }\n\n return { node: section, buttons, cleanup: composeCleanups(cleanups) }\n}\n\ninterface RenderedSection {\n node: HTMLElement\n cleanup: Cleanup\n}\n\nfunction renderRefList(\n ctx: ViewContext,\n label: string,\n entities: readonly Entity[],\n dataAttr: string\n): RenderedSection | null {\n if (entities.length === 0) return null\n const cleanups: Cleanup[] = []\n const items = entities.map((entity) => {\n const ref: EntityRef = { kind: entity.kind, id: entityKey(entity) }\n const link = createEntityLink({\n ctx,\n target: ref,\n label: displayName(entity),\n leading: renderKindIconTile(entity.kind),\n })\n cleanups.push(link.cleanup)\n return el(\"li\", {}, [link.node])\n })\n const node = createSection({ heading: label, dataAttr }, items)\n return { node, cleanup: composeCleanups(cleanups) }\n}\n\nfunction renderFlowList(\n ctx: ViewContext,\n flows: readonly Flow[]\n): RenderedSection | null {\n if (flows.length === 0) return null\n const cleanups: Cleanup[] = []\n const items = flows.map((flow) => {\n const link = createEntityLink({\n ctx,\n target: { kind: \"flow\", id: flow.id },\n label: displayName(flow),\n leading: renderKindIconTile(\"flow\"),\n })\n cleanups.push(link.cleanup)\n return el(\"li\", {}, [link.node])\n })\n const node = createSection(\n { heading: SECTION_LABELS.flows, dataAttr: \"data-uidex-detail-flows\" },\n items\n )\n return { node, cleanup: composeCleanups(cleanups) }\n}\n\nfunction renderTouches(\n ctx: ViewContext,\n entities: readonly Entity[],\n query: string\n): RenderedSection {\n if (entities.length === 0) {\n const section = el(\"section\", {\n class: \"flex flex-col gap-2\",\n attrs: { \"data-uidex-detail-touches\": \"\" },\n })\n section.append(\n createHeading({ text: SECTION_LABELS.touches }),\n createMutedText({\n attrs: { \"data-uidex-detail-empty\": \"\" },\n text: query ? \"No matches\" : \"No entities touched\",\n })\n )\n return { node: section, cleanup: () => {} }\n }\n\n const cleanups: Cleanup[] = []\n const items: HTMLElement[] = []\n for (const entity of entities) {\n const link = createEntityLink({\n ctx,\n target: { kind: entity.kind, id: entityKey(entity) },\n label: displayName(entity),\n leading: renderKindIconTile(entity.kind),\n })\n cleanups.push(link.cleanup)\n items.push(el(\"li\", {}, [link.node]))\n }\n const node = createSection(\n { heading: SECTION_LABELS.touches, dataAttr: \"data-uidex-detail-touches\" },\n items\n )\n return { node, cleanup: composeCleanups(cleanups) }\n}\n\nfunction filterStepsBy<T>(\n items: readonly T[],\n query: string,\n fields: (item: T) => readonly (string | undefined)[]\n): readonly T[] {\n const q = normalizeQuery(query)\n if (!q) return items\n return items.filter((item) =>\n fields(item).some((field) => field?.toLowerCase().includes(q))\n )\n}\n\nconst resolvedStepFields = (step: ResolvedFlowStep) => [\n displayName(step.entity),\n entityKey(step.entity),\n step.entity.kind,\n step.action,\n]\n\nfunction renderActionBadge(action: string): HTMLElement {\n return createBadge(\n {\n variant: \"secondary\",\n size: \"sm\",\n class: \"font-mono\",\n attrs: { \"data-uidex-step-action\": action },\n text: action,\n },\n []\n )\n}\n\nconst STEP_ROW_CLASS = \"flex items-center gap-2 px-2\"\n\nconst STEP_ORDINAL_CLASS =\n \"relative z-10 inline-flex size-6 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground text-xs font-medium tabular-nums\"\n\nfunction renderSteps(\n ctx: ViewContext,\n steps: readonly ResolvedFlowStep[],\n query: string\n): RenderedSection {\n const section = el(\"section\", {\n class: \"flex flex-col\",\n attrs: { \"data-uidex-detail-steps\": \"\" },\n })\n section.append(createHeading({ text: SECTION_LABELS.steps }))\n\n if (steps.length === 0) {\n section.append(\n createMutedText({\n attrs: { \"data-uidex-detail-empty\": \"\" },\n text: query ? \"No matches\" : \"No steps recorded\",\n })\n )\n return { node: section, cleanup: () => {} }\n }\n\n const cleanups: Cleanup[] = []\n const list = el(\"ol\", { class: \"flex flex-col gap-1.5\" })\n\n for (const step of steps) {\n const li = el(\"li\", {\n class: STEP_ROW_CLASS,\n attrs: { \"data-uidex-step\": String(step.ordinal) },\n })\n\n li.append(\n el(\"span\", {\n class: STEP_ORDINAL_CLASS,\n attrs: { \"data-uidex-step-ordinal\": \"\", \"aria-hidden\": \"true\" },\n text: String(step.ordinal),\n })\n )\n\n const link = createEntityLink({\n ctx,\n target: { kind: step.entity.kind, id: entityKey(step.entity) },\n label: displayName(step.entity),\n leading: renderKindIconTile(step.entity.kind),\n class: \"min-w-0 flex-1\",\n })\n cleanups.push(link.cleanup)\n li.append(link.node)\n\n if (step.action) {\n li.append(renderActionBadge(step.action))\n }\n\n list.append(li)\n }\n\n section.append(list)\n return { node: section, cleanup: composeCleanups(cleanups) }\n}\n\nfunction renderRoutePaths(paths: readonly string[]): RenderedSection | null {\n if (paths.length === 0) return null\n const node = createSection(\n { heading: SECTION_LABELS.routes, dataAttr: \"data-uidex-detail-routes\" },\n paths.map((p) => {\n const host = el(\"li\", {\n class: cn(LIST_ITEM_CLASS, LIST_ITEM_INTERACTIVE_CLASS),\n attrs: {\n \"data-uidex-detail-row\": \"route\",\n tabindex: \"-1\",\n },\n })\n fillRow(host, {\n leading: renderKindIconTile(\"route\"),\n label: p,\n })\n return host\n })\n )\n return { node, cleanup: () => {} }\n}\n\nfunction renderAcceptanceChecklist(items: readonly string[]): HTMLElement {\n return createSection(\n {\n heading: SECTION_LABELS.acceptance,\n dataAttr: \"data-uidex-detail-acceptance\",\n },\n items.map((text, idx) => {\n const id = `uidex-acceptance-${idx}`\n const checkbox = el(\"input\", {\n attrs: {\n type: \"checkbox\",\n id,\n \"data-uidex-acceptance-item\": String(idx),\n },\n class:\n \"mt-1 h-3.5 w-3.5 shrink-0 cursor-pointer accent-accent focus:outline-none\",\n }) as HTMLInputElement\n const label = el(\"label\", {\n class: cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"w-full cursor-pointer items-start\"\n ),\n attrs: { for: id },\n })\n const { label: labelSpan } = fillRowWithHandle(label, {\n leading: checkbox,\n label: text,\n })\n labelSpan.className = \"min-w-0 flex-1 whitespace-normal break-words\"\n const syncChecked = (): void => {\n labelSpan.classList.toggle(\"line-through\", checkbox.checked)\n labelSpan.classList.toggle(\"text-muted-foreground\", checkbox.checked)\n }\n checkbox.addEventListener(\"change\", syncChecked)\n checkbox.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Enter\") {\n e.preventDefault()\n checkbox.checked = !checkbox.checked\n syncChecked()\n }\n })\n return el(\"li\", {}, [label])\n })\n )\n}\n\nfunction renderSection(\n section: DetailSection,\n ctx: ViewContext,\n query: string\n): RenderedSection | null {\n switch (section.id) {\n case \"description\": {\n if (!section.text) return null\n return {\n node: createDescription({\n class: \"px-2\",\n attrs: { \"data-uidex-detail-description\": \"\" },\n text: section.text,\n }),\n cleanup: () => {},\n }\n }\n case \"acceptance\": {\n if (section.items.length === 0) return null\n return {\n node: renderAcceptanceChecklist(section.items),\n cleanup: () => {},\n }\n }\n case \"composes\":\n return renderRefList(\n ctx,\n section.label,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities,\n \"data-uidex-detail-composes\"\n )\n case \"used-by\":\n return renderRefList(\n ctx,\n section.label,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities,\n \"data-uidex-detail-used-by\"\n )\n case \"flows\":\n return renderFlowList(\n ctx,\n section.filterable\n ? filterEntities(section.flows, query)\n : section.flows\n )\n case \"touches\":\n return renderTouches(\n ctx,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities,\n query\n )\n case \"steps\":\n return renderSteps(\n ctx,\n section.filterable\n ? filterStepsBy(section.steps, query, resolvedStepFields)\n : section.steps,\n query\n )\n case \"routes\":\n return renderRoutePaths(\n section.filterable ? filterIds(section.paths, query) : section.paths\n )\n }\n}\n\nfunction hasFilterableSections(sections: readonly DetailSection[]): boolean {\n return sections.some((s) => \"filterable\" in s && s.filterable === true)\n}\n\nexport function renderDetailSurface(\n surface: DetailSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n if (surface.notFound) {\n root.append(renderNotFound(surface.notFound))\n return { cleanup: () => root.replaceChildren() }\n }\n\n const body = el(\"div\", {\n class: \"flex flex-col gap-3 px-2 py-4\",\n attrs: {\n \"data-uidex-detail-body\": \"\",\n \"data-uidex-detail-kind\": surface.entityKind,\n },\n })\n\n const cleanups: Cleanup[] = []\n\n const headerGroup = el(\"div\", {\n class: \"flex items-center gap-2 px-2\",\n })\n if (surface.title) {\n headerGroup.append(\n el(\"h2\", {\n class:\n \"min-w-0 flex-1 truncate text-base font-semibold text-foreground\",\n attrs: { \"data-uidex-detail-title\": \"\" },\n text: surface.title,\n })\n )\n }\n const kindBadge = renderKindBadge(surface.entityKind)\n kindBadge.classList.add(\"ml-auto\")\n headerGroup.append(kindBadge)\n body.append(headerGroup)\n\n if (surface.subtitle) body.append(renderSubtitle(surface.subtitle))\n\n let actionsNode: HTMLElement | null = null\n if (surface.actions && surface.actions.length > 0) {\n const rendered = renderActions(\n surface.actions,\n ctx,\n root,\n SECTION_LABELS.actions\n )\n cleanups.push(rendered.cleanup)\n actionsNode = rendered.node\n }\n\n const sections = surface.sections ?? []\n const filterable = hasFilterableSections(sections)\n\n const listsContainer = el(\"div\", {\n class: \"flex flex-col gap-3\",\n attrs: { \"data-uidex-detail-sections\": \"\" },\n })\n body.append(listsContainer)\n\n let sectionCleanup: Cleanup = () => {}\n let focusables: HTMLElement[] = []\n\n const focusAt = (rawIdx: number): void => {\n if (focusables.length === 0) return\n const idx = Math.max(0, Math.min(rawIdx, focusables.length - 1))\n for (let i = 0; i < focusables.length; i++) {\n focusables[i].tabIndex = i === idx ? 0 : -1\n }\n focusables[idx].focus()\n }\n\n const FOCUS_SELECTOR =\n \"button[data-uidex-detail-action], button[data-uidex-entity-link], input[data-uidex-acceptance-item], [data-uidex-detail-row]\"\n\n const refreshFocusSequence = (): void => {\n focusables = Array.from(\n listsContainer.querySelectorAll<HTMLElement>(FOCUS_SELECTOR)\n )\n for (let i = 0; i < focusables.length; i++) {\n focusables[i].tabIndex = i === 0 ? 0 : -1\n }\n }\n\n const enterKbdMode = (): void => body.setAttribute(\"data-kbd-nav\", \"\")\n const exitKbdMode = (): void => body.removeAttribute(\"data-kbd-nav\")\n body.addEventListener(\"pointermove\", exitKbdMode)\n\n const onNavKeyDown = (e: KeyboardEvent): void => {\n if (\n e.key !== \"ArrowDown\" &&\n e.key !== \"ArrowUp\" &&\n e.key !== \"Home\" &&\n e.key !== \"End\"\n )\n return\n enterKbdMode()\n const rootNode = body.getRootNode()\n const active =\n rootNode instanceof ShadowRoot\n ? rootNode.activeElement\n : document.activeElement\n if (!(active instanceof HTMLElement)) return\n\n const inSearch = active === ctx.searchInput\n if (inSearch) {\n if (focusables.length === 0) return\n e.preventDefault()\n const idx =\n e.key === \"ArrowUp\" || e.key === \"End\" ? focusables.length - 1 : 0\n focusAt(idx)\n return\n }\n\n const idx = focusables.indexOf(active)\n if (idx === -1) return\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault()\n if (idx === 0) ctx.searchInput.focus()\n else focusAt(idx - 1)\n return\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault()\n if (idx < focusables.length - 1) focusAt(idx + 1)\n return\n }\n if (e.key === \"Home\") {\n e.preventDefault()\n focusAt(0)\n return\n }\n if (e.key === \"End\") {\n e.preventDefault()\n focusAt(focusables.length - 1)\n return\n }\n }\n\n body.addEventListener(\"keydown\", onNavKeyDown)\n ctx.searchInput.addEventListener(\"keydown\", onNavKeyDown)\n\n function renderSections(query: string): void {\n sectionCleanup()\n listsContainer.replaceChildren()\n const cs: Cleanup[] = []\n let hasFilterableSection = false\n let renderedFilterable = 0\n let actionsPlaced = false\n const placeActions = (): void => {\n if (actionsNode && !actionsPlaced) {\n listsContainer.append(actionsNode)\n actionsPlaced = true\n }\n }\n for (const section of sections) {\n const isFilterable =\n \"filterable\" in section && section.filterable === true\n if (isFilterable) hasFilterableSection = true\n const sectionQuery = isFilterable ? query : \"\"\n const out = renderSection(section, ctx, sectionQuery)\n if (!out) continue\n if (isFilterable) renderedFilterable++\n listsContainer.append(out.node)\n cs.push(out.cleanup)\n if (section.id === \"description\") placeActions()\n }\n if (!actionsPlaced && actionsNode) {\n listsContainer.prepend(actionsNode)\n actionsPlaced = true\n }\n if (query && hasFilterableSection && renderedFilterable === 0) {\n listsContainer.append(\n createMutedText({\n attrs: { \"data-uidex-detail-empty\": \"\" },\n text: \"No matches\",\n })\n )\n }\n sectionCleanup = composeCleanups(cs)\n refreshFocusSequence()\n }\n\n renderSections(\"\")\n\n root.append(body)\n\n const cleanup = composeCleanups([\n ...cleanups,\n () => sectionCleanup(),\n () => {\n body.removeEventListener(\"keydown\", onNavKeyDown)\n body.removeEventListener(\"pointermove\", exitKbdMode)\n ctx.searchInput.removeEventListener(\"keydown\", onNavKeyDown)\n },\n () => root.replaceChildren(),\n ])\n\n const actionLabelById = new Map<string, string>()\n if (surface.actions) {\n for (const action of surface.actions) {\n if (\"copy\" in action) actionLabelById.set(action.id, \"Copy\")\n else if (\"push\" in action) actionLabelById.set(action.id, \"Open\")\n else if (\"navigate\" in action) actionLabelById.set(action.id, \"Open\")\n else if (\"highlight\" in action)\n actionLabelById.set(action.id, \"Highlight\")\n else if (\"scrollTo\" in action) actionLabelById.set(action.id, \"Go to\")\n else actionLabelById.set(action.id, \"Run\")\n }\n }\n\n const getActiveInBody = (): HTMLElement | null => {\n const rootNode = body.getRootNode()\n const active =\n rootNode instanceof ShadowRoot\n ? rootNode.activeElement\n : document.activeElement\n if (active instanceof HTMLElement && body.contains(active)) return active\n return null\n }\n\n let cachedIntent: SubmitIntent | null = null\n\n const resolveIntent = (): SubmitIntent | null => {\n const active = getActiveInBody()\n if (!active) return null\n if (active instanceof HTMLInputElement && active.type === \"checkbox\") {\n return {\n label: active.checked ? \"Uncheck\" : \"Check\",\n perform: () => active.click(),\n }\n }\n const actionId = active.getAttribute(\"data-uidex-detail-action\")\n if (actionId) {\n return {\n label: actionLabelById.get(actionId) ?? \"Run\",\n perform: () => active.click(),\n }\n }\n if (active.hasAttribute(\"data-uidex-entity-link\")) {\n return { label: \"Open\", perform: () => active.click() }\n }\n return { label: \"Open\", perform: () => active.click() }\n }\n\n const submitIntent: SubmitIntentSource = {\n get: () => cachedIntent,\n subscribe(cb) {\n const update = () => {\n cachedIntent = resolveIntent()\n cb()\n }\n body.addEventListener(\"focusin\", update)\n body.addEventListener(\"change\", update)\n ctx.searchInput.addEventListener(\"focus\", update)\n update()\n return () => {\n body.removeEventListener(\"focusin\", update)\n body.removeEventListener(\"change\", update)\n ctx.searchInput.removeEventListener(\"focus\", update)\n }\n },\n }\n\n const mounted: MountedSurface = { cleanup, submitIntent }\n if (filterable) {\n mounted.onSearch = renderSections\n }\n return mounted\n}\n","import { displayName, entityKey, type Entity } from \"../../entities\"\n\nexport function normalizeQuery(query: string): string {\n return query.trim().toLowerCase()\n}\n\nexport function matchesQuery(haystack: string, query: string): boolean {\n const q = normalizeQuery(query)\n if (!q) return true\n return haystack.toLowerCase().includes(q)\n}\n\nexport function filterEntities<E extends Entity>(\n entities: readonly E[],\n query: string\n): readonly E[] {\n const q = normalizeQuery(query)\n if (!q) return entities\n return entities.filter((e) => {\n const name = displayName(e).toLowerCase()\n const id = entityKey(e).toLowerCase()\n return (\n name.includes(q) || id.includes(q) || e.kind.toLowerCase().includes(q)\n )\n })\n}\n\nexport function filterIds(\n ids: readonly string[],\n query: string\n): readonly string[] {\n const q = normalizeQuery(query)\n if (!q) return ids\n return ids.filter((id) => id.toLowerCase().includes(q))\n}\n","export const SECTION_LABELS = {\n acceptance: \"Acceptance criteria\",\n actions: \"Actions\",\n contains: \"Contains\",\n usedBy: \"Used by\",\n flows: \"Flows\",\n touches: \"Touches\",\n steps: \"Steps\",\n routes: \"Routes\",\n} as const\n\nexport const PALETTE_GROUPS = {\n commands: \"Commands\",\n currentPage: \"Current Page\",\n favorites: \"Favorites\",\n recents: \"Recents\",\n} as const\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\nimport { cva } from \"./cva\"\n\nexport type ButtonVariant =\n | \"default\"\n | \"destructive\"\n | \"destructive-outline\"\n | \"ghost\"\n | \"link\"\n | \"outline\"\n | \"secondary\"\n\nexport type ButtonSize =\n | \"default\"\n | \"sm\"\n | \"xs\"\n | \"lg\"\n | \"xl\"\n | \"icon\"\n | \"icon-sm\"\n | \"icon-lg\"\n | \"icon-xs\"\n\nconst buttonBase =\n \"focus-visible:ring-ring focus-visible:ring-offset-background disabled:opacity-60 relative inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-lg border text-sm font-medium outline-none transition-shadow focus-visible:ring-2 focus-visible:ring-offset-1 disabled:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg]:pointer-events-none [&_svg]:shrink-0\"\n\nexport const buttonVariants = cva(buttonBase, {\n defaultVariants: { size: \"default\", variant: \"default\" },\n variants: {\n size: {\n default: \"h-8 px-3\",\n sm: \"h-7 gap-1.5 px-2.5\",\n xs: \"h-6 gap-1 rounded-md px-2 text-xs\",\n lg: \"h-9 px-3.5\",\n xl: \"h-10 px-4 text-base\",\n icon: \"size-8\",\n \"icon-sm\": \"size-7\",\n \"icon-lg\": \"size-9\",\n \"icon-xs\": \"size-6 rounded-md\",\n },\n variant: {\n default:\n \"border-primary bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"border-destructive bg-destructive shadow-xs hover:bg-destructive/90 text-white\",\n \"destructive-outline\":\n \"border-input bg-popover text-destructive-foreground shadow-xs/5 hover:border-destructive/30 hover:bg-destructive/5 dark:bg-input/30\",\n ghost:\n \"text-foreground hover:bg-accent hover:text-accent-foreground border-transparent\",\n link: \"text-foreground border-transparent underline-offset-4 hover:underline\",\n outline:\n \"border-input bg-popover text-foreground shadow-xs/5 hover:bg-accent hover:text-accent-foreground dark:bg-input/30\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/90 border-transparent\",\n },\n },\n})\n\nexport interface CreateButtonOptions extends Omit<ElementOptions, \"class\"> {\n variant?: ButtonVariant\n size?: ButtonSize\n class?: ClassValue\n}\n\nexport function createButton(\n options: CreateButtonOptions = {},\n children: Child | Child[] = []\n): HTMLButtonElement {\n const { variant, size, class: extra, attrs, ...rest } = options\n return el(\n \"button\",\n {\n ...rest,\n class: cn(buttonVariants({ variant, size }), extra),\n attrs: { type: \"button\", \"data-slot\": \"button\", ...attrs },\n },\n children\n )\n}\n","export const LIST_ITEM_CLASS =\n \"flex min-h-8 cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-base outline-none sm:min-h-7 sm:text-sm\"\n\nexport const LIST_ITEM_STATE_CLASS =\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-64\"\n\nexport const LIST_ITEM_INTERACTIVE_CLASS =\n \"uidex-item-interactive focus:bg-accent focus:text-accent-foreground focus-within:bg-accent focus-within:text-accent-foreground\"\n\nexport const LIST_GROUP_LABEL_CLASS =\n \"text-muted-foreground px-2 py-1.5 text-xs font-medium\"\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../../internal/el\"\nimport {\n createButton as createUiButton,\n type ButtonSize,\n type ButtonVariant as UiButtonVariant,\n} from \"../../ui/button\"\nimport {\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n} from \"../../ui/list-item\"\n\n// `action` renders a button-shaped palette row so entity links, acceptance\n// rows, and detail actions share the list-item appearance.\nexport type ButtonVariant = \"primary\" | \"action\" | \"link\"\n\nconst VARIANT_MAP: Record<\n Exclude<ButtonVariant, \"action\">,\n { variant: UiButtonVariant; size?: ButtonSize; extra?: ClassValue }\n> = {\n primary: { variant: \"default\", size: \"default\", extra: \"self-start\" },\n link: {\n variant: \"link\",\n extra: \"h-auto w-auto justify-start px-0 py-0 font-normal shadow-none\",\n },\n}\n\nexport interface CreateButtonOptions extends Omit<ElementOptions, \"class\"> {\n variant: ButtonVariant\n class?: ClassValue\n}\n\nexport function createButton(\n options: CreateButtonOptions,\n children: Child | Child[] = []\n): HTMLButtonElement {\n const { variant, class: extraClass, attrs, ...rest } = options\n if (variant === \"action\") {\n return el(\n \"button\",\n {\n ...rest,\n class: cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"w-full cursor-pointer text-left font-normal\",\n extraClass\n ),\n attrs: { type: \"button\", \"data-slot\": \"list-item-button\", ...attrs },\n },\n children\n )\n }\n const mapped = VARIANT_MAP[variant]\n return createUiButton(\n {\n ...rest,\n variant: mapped.variant,\n size: mapped.size,\n class: cn(mapped.extra, extraClass),\n attrs,\n },\n children\n )\n}\n","import type { EntityRef, Registry } from \"../../entities\"\nimport { resolveEntityElement } from \"../../surface/inspector\"\n\nconst DOM_BACKED_KINDS: ReadonlySet<string> = new Set([\n \"element\",\n \"region\",\n \"widget\",\n \"primitive\",\n])\n\nconst TOUCH_RESOLVE_KINDS = [\n \"element\",\n \"widget\",\n \"region\",\n \"primitive\",\n] as const\n\nexport function isAbsentFromPage(ref: EntityRef, registry?: Registry): boolean {\n if (DOM_BACKED_KINDS.has(ref.kind)) {\n return !resolveEntityElement(ref)\n }\n if (ref.kind === \"flow\" && registry) {\n const flow = registry.get(\"flow\", ref.id)\n if (!flow) return true\n for (const touchId of flow.touches) {\n for (const kind of TOUCH_RESOLVE_KINDS) {\n const entity = registry.get(kind, touchId)\n if (entity && resolveEntityElement({ kind, id: touchId })) return false\n }\n }\n return true\n }\n return false\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\n\nconst KBD_CLASS =\n \"bg-muted text-muted-foreground pointer-events-none inline-flex h-5 min-w-5 select-none items-center justify-center gap-1 rounded px-1 font-sans text-xs font-medium [&_svg:not([class*='size-'])]:size-3\"\n\nconst KBD_GROUP_CLASS = \"inline-flex items-center gap-1\"\n\nconst COMMAND_SHORTCUT_CLASS =\n \"text-muted-foreground/70 ms-auto font-sans text-xs font-medium tracking-widest\"\n\nexport interface CreateKbdOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport function createKbd(\n options: CreateKbdOptions = {},\n children: Child | Child[] = []\n): HTMLElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"kbd\",\n {\n ...rest,\n class: cn(KBD_CLASS, extra),\n attrs: { \"data-slot\": \"kbd\", ...attrs },\n },\n children\n )\n}\n\nexport function createKbdGroup(\n options: CreateKbdOptions = {},\n children: Child | Child[] = []\n): HTMLElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"kbd\",\n {\n ...rest,\n class: cn(KBD_GROUP_CLASS, extra),\n attrs: { \"data-slot\": \"kbd-group\", ...attrs },\n },\n children\n )\n}\n\n/**\n * Lighter shortcut text used inside command-palette rows (coss\n * `CommandShortcut`). No background pill — just muted mono-tracked type.\n */\nexport function createCommandShortcut(\n options: CreateKbdOptions = {},\n children: Child | Child[] = []\n): HTMLElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"kbd\",\n {\n ...rest,\n class: cn(COMMAND_SHORTCUT_CLASS, extra),\n attrs: { \"data-slot\": \"command-shortcut\", ...attrs },\n },\n children\n )\n}\n","import { el } from \"../../internal/el\"\nimport { createCommandShortcut } from \"../../ui/kbd\"\n\n// Rows are always single-line: `leading`, `label`, optional muted `subtitle`\n// suffix, `trailing` (kbd if string, else raw node).\nexport interface RowContent {\n leading?: Node | null\n label: string\n subtitle?: string\n trailing?: Node | string | null\n}\n\nconst LABEL_CLASS = \"min-w-0 flex-1 truncate\"\nconst SUBTITLE_CLASS = \"truncate text-xs text-muted-foreground\"\n\n/** Returns the mutable label `<span>` so callers can swap its text later. */\nexport function fillRowWithHandle(\n host: HTMLElement,\n content: RowContent\n): { label: HTMLSpanElement } {\n if (content.leading) host.append(content.leading)\n const label = el(\"span\", { class: LABEL_CLASS, text: content.label })\n host.append(label)\n if (content.subtitle) {\n host.append(\n el(\"span\", {\n class: SUBTITLE_CLASS,\n attrs: { \"data-uidex-row-subtitle\": \"\" },\n text: content.subtitle,\n })\n )\n }\n if (content.trailing != null) {\n host.append(\n typeof content.trailing === \"string\"\n ? createCommandShortcut({ text: content.trailing })\n : content.trailing\n )\n }\n return { label }\n}\n\n/**\n * Host is expected to provide its own `flex` container styling (alignment,\n * gap, padding). The row only injects the inner leading/label/trailing slots.\n */\nexport function fillRow(host: HTMLElement, content: RowContent): void {\n fillRowWithHandle(host, content)\n}\n","import type { ClassValue } from \"clsx\"\nimport { KIND_STYLE, type EntityRef } from \"../../entities\"\nimport type { Cleanup } from \"../../internal/cleanup\"\nimport type { ViewContext } from \"../core/types\"\nimport { createButton } from \"./button\"\nimport { isAbsentFromPage } from \"./entity-presence\"\nimport { fillRow } from \"./row\"\n\nexport interface EntityLinkOptions {\n ctx: ViewContext\n target: EntityRef\n label?: string\n leading?: Node | null\n class?: ClassValue\n}\n\nexport function createEntityLink(options: EntityLinkOptions): {\n node: HTMLButtonElement\n cleanup: Cleanup\n} {\n const { ctx, target, label, leading, class: extraClass } = options\n const absent = isAbsentFromPage(target)\n const node = createButton({\n variant: \"action\",\n class: [\"w-full\", absent && \"opacity-50\", extraClass],\n attrs: {\n \"data-uidex-entity-link\": \"\",\n \"data-uidex-ref-kind\": target.kind,\n \"data-uidex-ref-id\": target.id,\n ...(absent ? { title: \"Not on this page\" } : {}),\n },\n })\n fillRow(node, { leading, label: label ?? `${target.kind}: ${target.id}` })\n const onClick = () => ctx.navigate(target)\n const preview = (): void => {\n ctx.highlight.show(target, { color: KIND_STYLE[target.kind].color })\n }\n const restoreParent = (): void => {\n if (ctx.ref) {\n ctx.highlight.show(ctx.ref, { color: KIND_STYLE[ctx.ref.kind].color })\n } else {\n ctx.highlight.hide()\n }\n }\n node.addEventListener(\"click\", onClick)\n node.addEventListener(\"mouseenter\", preview)\n node.addEventListener(\"mouseleave\", restoreParent)\n node.addEventListener(\"focus\", preview)\n node.addEventListener(\"blur\", restoreParent)\n return {\n node,\n cleanup: () => {\n node.removeEventListener(\"click\", onClick)\n node.removeEventListener(\"mouseenter\", preview)\n node.removeEventListener(\"mouseleave\", restoreParent)\n node.removeEventListener(\"focus\", preview)\n node.removeEventListener(\"blur\", restoreParent)\n },\n }\n}\n","import { el, type Child } from \"../../internal/el\"\nimport { LIST_GROUP_LABEL_CLASS } from \"../../ui/list-item\"\n\nexport interface CreateSectionOptions {\n heading?: string\n dataAttr: string\n listClass?: string\n}\n\nexport function createSection(\n options: CreateSectionOptions,\n items: Child[]\n): HTMLElement {\n const { heading, dataAttr, listClass = \"flex flex-col\" } = options\n const children: Child[] = []\n if (heading) {\n children.push(el(\"h3\", { class: LIST_GROUP_LABEL_CLASS, text: heading }))\n }\n children.push(el(\"ul\", { class: listClass }, items))\n return el(\n \"section\",\n {\n class: \"flex flex-col\",\n attrs: { [dataAttr]: \"\" },\n },\n children\n )\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type ElementOptions } from \"../../internal/el\"\nimport { LIST_GROUP_LABEL_CLASS } from \"../../ui/list-item\"\n\nexport interface TextOptions extends Omit<ElementOptions, \"class\" | \"text\"> {\n text?: string\n class?: ClassValue\n}\n\nconst CAPTION_CLASS = \"font-mono text-xs text-muted-foreground\"\nconst MUTED_CLASS = \"text-sm text-muted-foreground\"\nconst DESCRIPTION_CLASS = \"text-sm leading-relaxed text-foreground\"\nconst HEADING_CLASS = LIST_GROUP_LABEL_CLASS\n\nexport function createCaption(options: TextOptions = {}): HTMLParagraphElement {\n const { class: extra, ...rest } = options\n return el(\"p\", { ...rest, class: cn(CAPTION_CLASS, extra) })\n}\n\nexport function createMutedText(\n options: TextOptions = {}\n): HTMLParagraphElement {\n const { class: extra, ...rest } = options\n return el(\"p\", { ...rest, class: cn(MUTED_CLASS, extra) })\n}\n\nexport function createDescription(\n options: TextOptions = {}\n): HTMLParagraphElement {\n const { class: extra, ...rest } = options\n return el(\"p\", { ...rest, class: cn(DESCRIPTION_CLASS, extra) })\n}\n\nexport function createHeading(options: TextOptions = {}): HTMLHeadingElement {\n const { class: extra, ...rest } = options\n return el(\"h3\", { ...rest, class: cn(HEADING_CLASS, extra) })\n}\n","import {\n CircleCheck,\n CircleX,\n Loader2,\n createElement as createLucideElement,\n} from \"lucide\"\nimport { createActor, fromPromise } from \"xstate\"\n\nimport { formMachine } from \"../../flows/form\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { el } from \"../../internal/el\"\nimport { createDialog } from \"../../machines/dialog\"\nimport { spreadProps } from \"../builder/spread-props\"\nimport { buttonVariants, createButton } from \"../../ui/button\"\nimport { createField, createFieldError, createFieldLabel } from \"../../ui/field\"\nimport { createForm } from \"../../ui/form\"\nimport { createInput, createTextarea } from \"../../ui/input\"\nimport { createNativeSelect } from \"../../ui/select\"\nimport type {\n FormField,\n FormSubmitResult,\n FormSurface,\n FormValue,\n StandardSchemaIssue,\n StandardSchemaV1,\n} from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport type { MountedSurface, SubmitIntent } from \"./index\"\n\ninterface FieldHandle {\n name: string\n node: HTMLElement\n control: HTMLElement\n errorNode: HTMLParagraphElement\n read(): FormValue\n reset(): void\n setError(message: string | null): void\n}\n\nlet fieldSeq = 0\nconst nextFieldId = (): string => `uidex-field-${++fieldSeq}`\n\nfunction issuePathRoot(issue: StandardSchemaIssue): string | undefined {\n const seg = issue.path?.[0]\n if (seg === undefined) return undefined\n if (typeof seg === \"object\" && seg !== null && \"key\" in seg) {\n return String(seg.key)\n }\n return String(seg)\n}\n\nasync function validateWithSchema(\n schema: StandardSchemaV1<Record<string, unknown>>,\n values: Record<string, FormValue>\n): Promise<Record<string, string> | null> {\n const result = await schema[\"~standard\"].validate(values)\n if (!(\"issues\" in result) || !result.issues) return null\n // First issue per field wins — later issues are usually noise once the\n // root cause is fixed and the user re-submits.\n const out: Record<string, string> = {}\n for (const issue of result.issues) {\n const key = issuePathRoot(issue)\n if (!key) continue\n if (out[key]) continue\n out[key] = issue.message\n }\n return Object.keys(out).length > 0 ? out : null\n}\n\nfunction renderField(\n field: FormField,\n initial: FormValue | undefined\n): FieldHandle {\n const controlId = nextFieldId()\n let control: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\n let read: () => FormValue\n let reset: () => void\n\n switch (field.kind) {\n case \"select\": {\n const node = createNativeSelect({\n attrs: {\n name: field.name,\n id: controlId,\n required: field.required ?? false,\n },\n })\n for (const opt of field.options) {\n node.append(\n el(\"option\", { attrs: { value: opt.value }, text: opt.label })\n )\n }\n const initialVal =\n typeof initial === \"string\"\n ? initial\n : typeof field.value === \"string\"\n ? field.value\n : field.options[0]?.value\n if (initialVal !== undefined) node.value = initialVal\n control = node\n read = () => node.value\n reset = () => {\n if (initialVal !== undefined) node.value = initialVal\n }\n break\n }\n case \"text\":\n case \"email\": {\n const node = createInput({\n attrs: {\n type: field.kind === \"email\" ? \"email\" : \"text\",\n name: field.name,\n id: controlId,\n placeholder: field.placeholder ?? \"\",\n required: field.required ?? false,\n },\n })\n const initialVal =\n typeof initial === \"string\"\n ? initial\n : typeof field.value === \"string\"\n ? field.value\n : \"\"\n node.value = initialVal\n control = node\n read = () => node.value\n reset = () => {\n node.value = initialVal\n }\n break\n }\n case \"textarea\": {\n const node = createTextarea({\n attrs: {\n name: field.name,\n id: controlId,\n placeholder: field.placeholder ?? \"\",\n required: field.required ?? false,\n rows: field.rows,\n },\n })\n const initialVal =\n typeof initial === \"string\"\n ? initial\n : typeof field.value === \"string\"\n ? field.value\n : \"\"\n node.value = initialVal\n control = node\n read = () => node.value\n reset = () => {\n node.value = initialVal\n }\n break\n }\n case \"checkbox\": {\n const input = el(\"input\", {\n attrs: {\n type: \"checkbox\",\n name: field.name,\n id: controlId,\n },\n class:\n \"border-input bg-popover size-4 cursor-pointer rounded-[0.25rem] border accent-primary\",\n }) as HTMLInputElement\n const initialVal =\n typeof initial === \"boolean\"\n ? initial\n : typeof field.value === \"boolean\"\n ? field.value\n : false\n input.checked = initialVal\n control = input\n read = () => input.checked\n reset = () => {\n input.checked = initialVal\n }\n break\n }\n }\n\n const errorNode = createFieldError()\n const field$ = createField(\n {\n name: field.name,\n class: field.kind === \"checkbox\" ? \"flex-row items-center gap-2\" : \"\",\n },\n []\n )\n\n if (field.kind === \"checkbox\") {\n field$.append(\n control,\n createFieldLabel({ htmlFor: controlId }, field.label)\n )\n } else {\n field$.append(\n createFieldLabel({ htmlFor: controlId }, field.label),\n control\n )\n }\n field$.append(errorNode)\n\n const setError = (message: string | null): void => {\n if (!message) {\n errorNode.hidden = true\n errorNode.textContent = \"\"\n control.removeAttribute(\"aria-invalid\")\n return\n }\n errorNode.hidden = false\n errorNode.textContent = message\n control.setAttribute(\"aria-invalid\", \"true\")\n }\n\n return {\n name: field.name,\n node: field$,\n control,\n errorNode,\n read,\n reset,\n setError,\n }\n}\n\nexport function renderFormSurface(\n surface: FormSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n const cleanups: Cleanup[] = []\n const fields = surface.fields.map((field) =>\n renderField(field, surface.initial?.[field.name])\n )\n const fieldByName = new Map(fields.map((f) => [f.name, f]))\n\n const status = el(\"p\", {\n class: \"text-muted-foreground text-xs\",\n attrs: {\n \"data-uidex-form-status\": \"\",\n \"aria-live\": \"polite\",\n },\n })\n\n // sr-only preserves native form-submit semantics (Enter in input,\n // `requestSubmit()`) and screen-reader announcement without the button\n // showing — the shell footer surfaces the primary-action hint.\n const submit = createButton({\n variant: \"default\",\n class: \"sr-only\",\n attrs: {\n type: \"submit\",\n \"data-uidex-form-submit\": \"\",\n },\n text: surface.submit.label,\n })\n\n const screenshotLabel = el(\"span\", {\n class: \"text-muted-foreground text-xs font-medium\",\n text: \"Screenshot\",\n })\n const screenshotPreview = el(\"div\", {\n class: \"cursor-pointer overflow-hidden rounded-md border\",\n })\n const screenshotField = el(\n \"div\",\n {\n class: \"flex flex-col gap-1.5\",\n attrs: { hidden: true },\n },\n [screenshotLabel, screenshotPreview]\n )\n\n if (surface.screenshotPreview) {\n surface.screenshotPreview.then((dataUrl) => {\n if (!dataUrl) return\n const img = el(\"img\", {\n class: \"max-h-32 w-full object-cover object-top\",\n attrs: { src: dataUrl, alt: \"Screenshot preview\" },\n })\n screenshotPreview.append(img)\n screenshotField.hidden = false\n\n const lightbox = createDialog({\n id: \"uidex-screenshot-lightbox\",\n modal: true,\n closeOnInteractOutside: false,\n closeOnEscape: false,\n trapFocus: true,\n preventScroll: true,\n restoreFocus: true,\n \"aria-label\": \"Screenshot preview\",\n getRootNode: () =>\n screenshotPreview.getRootNode() as ShadowRoot | Document,\n })\n cleanups.push(() => lightbox.destroy())\n\n const backdropEl = el(\"div\", {\n class: \"fixed inset-0 z-[2147483647] bg-black/80 cursor-pointer\",\n attrs: { \"data-uidex-lightbox\": \"\" },\n })\n const positioner = el(\"div\", {\n class:\n \"fixed inset-0 z-[2147483647] flex items-center justify-center p-6 cursor-pointer\",\n })\n const content = el(\"div\", {\n class: \"flex items-center justify-center outline-none\",\n })\n const fullImg = el(\"img\", {\n class: \"max-h-full max-w-full rounded-lg\",\n attrs: { src: dataUrl, alt: \"Screenshot\" },\n })\n content.append(fullImg)\n positioner.append(content)\n\n const mountTarget = (() => {\n const rn = screenshotPreview.getRootNode()\n return rn instanceof ShadowRoot ? rn : (rn as Document).body\n })()\n mountTarget.append(backdropEl, positioner)\n backdropEl.hidden = true\n positioner.hidden = true\n\n let spreadCleanups: Cleanup[] = []\n function applyLightboxProps(): void {\n for (const c of spreadCleanups) c()\n spreadCleanups = []\n const api = lightbox.api()\n spreadCleanups.push(\n spreadProps(\n backdropEl,\n api.getBackdropProps() as Record<string, unknown>\n ),\n spreadProps(\n positioner,\n api.getPositionerProps() as Record<string, unknown>\n ),\n spreadProps(content, api.getContentProps() as Record<string, unknown>)\n )\n backdropEl.hidden = !api.open\n positioner.hidden = !api.open\n }\n applyLightboxProps()\n const unsubLightbox = lightbox.runner.subscribe(applyLightboxProps)\n cleanups.push(() => {\n unsubLightbox()\n for (const c of spreadCleanups) c()\n backdropEl.remove()\n positioner.remove()\n })\n\n const onEscapeCapture = (e: Event): void => {\n if ((e as KeyboardEvent).key !== \"Escape\") return\n if (!lightbox.api().open) return\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n lightbox.api().setOpen(false)\n }\n let suppressClickUntil = 0\n const onClickOutsideCapture = (e: Event): void => {\n if (Date.now() < suppressClickUntil) {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n return\n }\n if (!lightbox.api().open) return\n if (fullImg.contains(e.target as Node)) return\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n lightbox.api().setOpen(false)\n suppressClickUntil = Date.now() + 100\n }\n window.addEventListener(\"keydown\", onEscapeCapture, true)\n window.addEventListener(\"pointerdown\", onClickOutsideCapture, true)\n window.addEventListener(\"mousedown\", onClickOutsideCapture, true)\n window.addEventListener(\"click\", onClickOutsideCapture, true)\n cleanups.push(() => {\n window.removeEventListener(\"keydown\", onEscapeCapture, true)\n window.removeEventListener(\"pointerdown\", onClickOutsideCapture, true)\n window.removeEventListener(\"mousedown\", onClickOutsideCapture, true)\n window.removeEventListener(\"click\", onClickOutsideCapture, true)\n })\n\n spreadProps(\n screenshotPreview,\n lightbox.api().getTriggerProps() as Record<string, unknown>\n )\n })\n }\n\n const form = createForm({ attrs: { \"data-uidex-form\": surface.id } }, [\n ...(surface.screenshotPreview ? [screenshotField] : []),\n ...fields.map((f) => f.node),\n submit,\n status,\n ])\n\n const ICON_TILE =\n \"bg-card text-foreground shadow-sm/5 [&_svg:not([class*='size-'])]:size-4.5 relative flex size-9 shrink-0 items-center justify-center rounded-md border before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-md)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\"\n const ICON_TILE_GHOST =\n ICON_TILE + \" pointer-events-none absolute bottom-px shadow-none scale-84\"\n const EMPTY_ROOT =\n \"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 text-balance px-6 py-12 text-center\"\n\n function createIconMedia(icon: SVGSVGElement): HTMLElement {\n const left = el(\"div\", {\n class:\n ICON_TILE_GHOST + \" -rotate-10 origin-bottom-left -translate-x-0.5\",\n attrs: { \"aria-hidden\": \"true\" },\n })\n const right = el(\"div\", {\n class: ICON_TILE_GHOST + \" rotate-10 origin-bottom-right translate-x-0.5\",\n attrs: { \"aria-hidden\": \"true\" },\n })\n const tile = el(\"div\", { class: ICON_TILE }, [icon])\n return el(\"div\", { class: \"relative\" }, [left, right, tile])\n }\n\n // -- Loading view (hidden by default) --\n const SKELETON =\n \"animate-skeleton rounded-sm [--skeleton-highlight:--alpha(var(--color-white)/64%)] [background:linear-gradient(120deg,transparent_40%,var(--skeleton-highlight),transparent_60%)_var(--color-muted)_0_0/200%_100%_fixed] dark:[--skeleton-highlight:--alpha(var(--color-white)/4%)]\"\n const spinnerSvg = createLucideElement(Loader2)\n spinnerSvg.classList.add(\"animate-spin\")\n const loadingView = el(\n \"div\",\n { class: EMPTY_ROOT, attrs: { \"aria-live\": \"polite\", hidden: true } },\n [\n createIconMedia(spinnerSvg),\n el(\"div\", { class: \"flex max-w-sm flex-col items-center text-center\" }, [\n el(\"div\", { class: SKELETON + \" h-6 w-36 rounded-md\" }),\n ]),\n el(\n \"div\",\n {\n class:\n \"flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm\",\n },\n [el(\"div\", { class: SKELETON + \" h-7 w-20 rounded-lg\" })]\n ),\n ]\n )\n\n // -- Success view (hidden by default) --\n const checkSvg = createLucideElement(CircleCheck)\n const successTitle = el(\"div\", {\n class: \"font-heading text-xl font-semibold\",\n })\n const successLink = el(\"a\", {\n class: buttonVariants({ variant: \"outline\", size: \"sm\" }),\n attrs: { target: \"_blank\", rel: \"noreferrer\" },\n })\n const successActions = el(\n \"div\",\n {\n class:\n \"flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm\",\n },\n [successLink]\n )\n const successView = el(\n \"div\",\n { class: EMPTY_ROOT, attrs: { hidden: true } },\n [\n createIconMedia(checkSvg),\n el(\"div\", { class: \"flex max-w-sm flex-col items-center text-center\" }, [\n successTitle,\n ]),\n successActions,\n ]\n )\n\n // -- Error view (hidden by default) --\n const errorSvg = createLucideElement(CircleX)\n const errorTitle = el(\"div\", {\n class: \"font-heading text-xl font-semibold\",\n })\n const errorDescription = el(\"p\", {\n class: \"text-muted-foreground text-sm\",\n })\n const retryButton = createButton({\n variant: \"outline\",\n size: \"sm\",\n text: \"Try Again\",\n })\n const errorActions = el(\n \"div\",\n {\n class:\n \"flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm\",\n },\n [retryButton]\n )\n const errorView = el(\"div\", { class: EMPTY_ROOT, attrs: { hidden: true } }, [\n createIconMedia(errorSvg),\n el(\n \"div\",\n { class: \"flex max-w-sm flex-col items-center gap-1 text-center\" },\n [errorTitle, errorDescription]\n ),\n errorActions,\n ])\n\n function clearAllFieldErrors(): void {\n for (const f of fields) f.setError(null)\n }\n\n function applyFieldErrors(errs: Record<string, string> | undefined): void {\n clearAllFieldErrors()\n if (!errs) return\n for (const [name, message] of Object.entries(errs)) {\n fieldByName.get(name)?.setError(message)\n }\n }\n\n function setStatus(result: FormSubmitResult | null): void {\n status.replaceChildren()\n status.classList.remove(\"text-destructive-foreground\")\n status.classList.add(\"text-muted-foreground\")\n if (!result) return\n if (result.status === \"error\") {\n status.classList.remove(\"text-muted-foreground\")\n status.classList.add(\"text-destructive-foreground\")\n if (!result.fieldErrors) {\n status.textContent = result.message\n }\n return\n }\n if (result.link) {\n status.append(\n document.createTextNode(`${result.message ?? \"Submitted.\"} `),\n el(\"a\", {\n class: \"text-foreground underline underline-offset-4\",\n attrs: {\n href: result.link.url,\n target: \"_blank\",\n rel: \"noreferrer\",\n },\n text: result.link.label ?? \"Open link\",\n })\n )\n } else {\n status.textContent = result.message ?? \"Submitted.\"\n }\n }\n\n type FormViewState = \"form\" | \"loading\" | \"success\" | \"error\"\n function showView(state: FormViewState): void {\n form.hidden = state !== \"form\"\n loadingView.hidden = state !== \"loading\"\n successView.hidden = state !== \"success\"\n errorView.hidden = state !== \"error\"\n }\n\n function populateSuccess(result: FormSubmitResult | null): void {\n if (!result || result.status !== \"success\") return\n successTitle.textContent = result.message ?? \"Submitted\"\n if (result.link) {\n successLink.setAttribute(\"href\", result.link.url)\n successLink.textContent = result.link.label ?? \"Open link\"\n successActions.hidden = false\n } else {\n successActions.hidden = true\n }\n }\n\n function populateError(result: FormSubmitResult | null): void {\n if (!result || result.status !== \"error\") return\n errorTitle.textContent = \"Something went wrong\"\n errorDescription.textContent = result.message\n }\n\n const actor = createActor(\n formMachine.provide({\n actions: {\n disableSubmitButton: () => {\n submit.disabled = true\n submit.setAttribute(\"data-loading\", \"\")\n showView(\"loading\")\n },\n enableSubmitButton: () => {\n submit.disabled = false\n submit.removeAttribute(\"data-loading\")\n },\n showSuccessStatus: ({ context }) => {\n populateSuccess(context.result)\n showView(\"success\")\n clearAllFieldErrors()\n },\n showErrorStatus: ({ context }) => {\n const hasFieldErrors =\n context.fieldErrors && Object.keys(context.fieldErrors).length > 0\n if (hasFieldErrors) {\n const message =\n context.result?.status === \"error\"\n ? context.result\n : context.errorMessage\n ? {\n status: \"error\" as const,\n message: context.errorMessage,\n }\n : null\n setStatus(message)\n showView(\"form\")\n } else {\n populateError(context.result)\n showView(\"error\")\n }\n },\n applyFieldErrors: ({ context }) => {\n applyFieldErrors(context.fieldErrors ?? undefined)\n },\n clearStatus: () => {\n setStatus(null)\n showView(\"form\")\n },\n clearFieldErrors: () => {\n clearAllFieldErrors()\n },\n resetFields: ({ context }) => {\n if (\n context.result?.status === \"success\" &&\n context.result.resetFields\n ) {\n for (const name of context.result.resetFields) {\n fieldByName.get(name)?.reset()\n }\n }\n },\n },\n actors: {\n validate: fromPromise<\n Record<string, string> | null,\n { values: Record<string, FormValue> }\n >(async ({ input }) => {\n if (!surface.schema) return null\n return validateWithSchema(surface.schema, input.values)\n }),\n submit: fromPromise<\n FormSubmitResult,\n { values: Record<string, FormValue> }\n >(\n async ({ input }) =>\n (await surface.submit.onSubmit(input.values)) ?? {\n status: \"success\",\n }\n ),\n },\n })\n )\n actor.start()\n cleanups.push(() => actor.stop())\n\n const onSubmit = (e: SubmitEvent): void => {\n e.preventDefault()\n const values: Record<string, FormValue> = {}\n surface.fields.forEach((field, i) => {\n values[field.name] = fields[i].read()\n })\n const snapshot = actor.getSnapshot()\n if (snapshot.matches(\"success\")) return\n if (snapshot.matches(\"error\")) {\n actor.send({ type: \"RETRY\" })\n }\n actor.send({ type: \"SUBMIT\", values })\n }\n form.addEventListener(\"submit\", onSubmit)\n cleanups.push(() => form.removeEventListener(\"submit\", onSubmit))\n\n const triggerSubmit = (): void => {\n if (typeof form.requestSubmit === \"function\") form.requestSubmit()\n else form.dispatchEvent(new Event(\"submit\", { cancelable: true }))\n }\n\n // Submit = Cmd/Ctrl+Enter. Plain Enter in a text input would otherwise\n // implicit-submit, so swallow it; textareas keep Enter = newline.\n const onFormKeyDown = (e: KeyboardEvent): void => {\n if (e.key !== \"Enter\") return\n const isMod = e.metaKey || e.ctrlKey\n if (isMod) {\n e.preventDefault()\n const snap = actor.getSnapshot()\n if (snap.matches(\"success\")) {\n ctx.close()\n return\n }\n if (!snap.matches(\"idle\") && !snap.matches(\"error\")) return\n triggerSubmit()\n return\n }\n if (\n e.target instanceof HTMLInputElement &&\n e.target.type !== \"checkbox\" &&\n e.target.type !== \"radio\"\n ) {\n e.preventDefault()\n }\n }\n form.addEventListener(\"keydown\", onFormKeyDown)\n cleanups.push(() => form.removeEventListener(\"keydown\", onFormKeyDown))\n\n const section = el(\n \"section\",\n {\n class: \"flex min-h-0 flex-1 flex-col p-4\",\n attrs: { \"data-uidex-form-surface\": surface.id },\n },\n [form, loadingView, successView, errorView]\n )\n root.append(section)\n\n const retryFromError = (): void => {\n actor.send({ type: \"RETRY\" })\n }\n retryButton.addEventListener(\"click\", retryFromError)\n cleanups.push(() => retryButton.removeEventListener(\"click\", retryFromError))\n\n const subscribers = new Set<() => void>()\n const resolveIntent = (): SubmitIntent | null => {\n const snap = actor.getSnapshot()\n if (snap.matches(\"submitting\") || snap.matches(\"validating\")) {\n return { label: \"Submitting…\", perform: () => {} }\n }\n if (snap.matches(\"success\")) {\n return { label: \"Close\", perform: () => ctx.close() }\n }\n if (snap.matches(\"error\") && !snap.context.fieldErrors) {\n return { label: \"Try Again\", perform: retryFromError }\n }\n return { label: surface.submit.label, perform: triggerSubmit }\n }\n\n const actorSub = actor.subscribe(() => {\n for (const cb of subscribers) cb()\n })\n cleanups.push(() => actorSub.unsubscribe())\n\n return {\n cleanup: composeCleanups([...cleanups, () => root.replaceChildren()]),\n submitIntent: {\n get: resolveIntent,\n subscribe: (cb) => {\n subscribers.add(cb)\n return () => subscribers.delete(cb)\n },\n },\n }\n}\n","import { assign, enqueueActions, fromPromise, setup } from \"xstate\"\n\nimport type { FormSubmitResult, FormValue } from \"../views/core/surface\"\n\nexport interface FormContext {\n values: Record<string, FormValue> | null\n result: FormSubmitResult | null\n fieldErrors: Record<string, string> | null\n errorMessage: string | null\n}\n\nexport type FormEvent =\n | { type: \"SUBMIT\"; values: Record<string, FormValue> }\n | { type: \"VALID\" }\n | { type: \"INVALID\"; fieldErrors: Record<string, string> }\n | { type: \"OK\"; result: FormSubmitResult }\n | { type: \"FAIL\"; result: FormSubmitResult }\n | { type: \"RETRY\" }\n\nexport interface ValidateInput {\n values: Record<string, FormValue>\n}\n\nexport interface SubmitInput {\n values: Record<string, FormValue>\n}\n\nconst initialContext: FormContext = {\n values: null,\n result: null,\n fieldErrors: null,\n errorMessage: null,\n}\n\nexport const formMachine = setup({\n types: {} as {\n context: FormContext\n events: FormEvent\n },\n actions: {\n disableSubmitButton: () => {},\n enableSubmitButton: () => {},\n showSuccessStatus: () => {},\n showErrorStatus: () => {},\n resetFields: () => {},\n applyFieldErrors: () => {},\n clearStatus: () => {},\n clearFieldErrors: () => {},\n },\n actors: {\n validate: fromPromise<Record<string, string> | null, ValidateInput>(\n async () => null\n ),\n submit: fromPromise<FormSubmitResult, SubmitInput>(async () => ({\n status: \"success\",\n })),\n },\n}).createMachine({\n id: \"form\",\n initial: \"idle\",\n context: initialContext,\n states: {\n idle: {\n entry: [\n assign(() => ({\n fieldErrors: null,\n errorMessage: null,\n })),\n { type: \"clearStatus\" },\n { type: \"clearFieldErrors\" },\n ],\n on: {\n SUBMIT: {\n target: \"validating\",\n actions: assign(({ event }) => ({\n values: event.values,\n result: null,\n fieldErrors: null,\n errorMessage: null,\n })),\n },\n },\n },\n validating: {\n invoke: {\n src: \"validate\",\n input: ({ context }) => ({ values: context.values ?? {} }),\n onDone: {\n actions: enqueueActions(({ event, enqueue }) => {\n const errors = event.output\n if (!errors) {\n enqueue.raise({ type: \"VALID\" })\n } else {\n enqueue.raise({ type: \"INVALID\", fieldErrors: errors })\n }\n }),\n },\n onError: {\n actions: enqueueActions(({ event, enqueue }) => {\n const error = event.error\n const message =\n error instanceof Error ? error.message : String(error)\n enqueue.raise({\n type: \"FAIL\",\n result: { status: \"error\", message },\n })\n }),\n },\n },\n on: {\n VALID: { target: \"submitting\" },\n INVALID: {\n target: \"error\",\n actions: assign(({ event }) => ({\n fieldErrors: event.fieldErrors,\n errorMessage: \"Please fix the errors above.\",\n result: {\n status: \"error\",\n message: \"Please fix the errors above.\",\n fieldErrors: event.fieldErrors,\n },\n })),\n },\n FAIL: {\n target: \"error\",\n actions: assign(({ event }) => ({\n result: event.result,\n errorMessage:\n event.result.status === \"error\" ? event.result.message : null,\n fieldErrors:\n event.result.status === \"error\"\n ? (event.result.fieldErrors ?? null)\n : null,\n })),\n },\n },\n },\n submitting: {\n entry: { type: \"disableSubmitButton\" },\n exit: { type: \"enableSubmitButton\" },\n invoke: {\n src: \"submit\",\n input: ({ context }) => ({ values: context.values ?? {} }),\n onDone: {\n actions: enqueueActions(({ event, enqueue }) => {\n const result = event.output\n if (result.status === \"success\") {\n enqueue.raise({ type: \"OK\", result })\n } else {\n enqueue.raise({ type: \"FAIL\", result })\n }\n }),\n },\n onError: {\n actions: enqueueActions(({ event, enqueue }) => {\n const error = event.error\n const message =\n error instanceof Error ? error.message : String(error)\n enqueue.raise({\n type: \"FAIL\",\n result: { status: \"error\", message },\n })\n }),\n },\n },\n on: {\n OK: {\n target: \"success\",\n actions: assign(({ event }) => ({\n result: event.result,\n fieldErrors: null,\n errorMessage: null,\n })),\n },\n FAIL: {\n target: \"error\",\n actions: assign(({ event }) => ({\n result: event.result,\n errorMessage:\n event.result.status === \"error\" ? event.result.message : null,\n fieldErrors:\n event.result.status === \"error\"\n ? (event.result.fieldErrors ?? null)\n : null,\n })),\n },\n },\n },\n success: {\n entry: [{ type: \"showSuccessStatus\" }, { type: \"resetFields\" }],\n },\n error: {\n entry: [{ type: \"showErrorStatus\" }, { type: \"applyFieldErrors\" }],\n on: {\n RETRY: { target: \"idle\" },\n },\n },\n },\n})\n","import * as dialog from \"@zag-js/dialog\"\nimport { createMachineHandle, type MachineHandle } from \"./machine\"\nimport { normalizeProps, type DomProps } from \"./normalize\"\n\nexport type DialogProps = dialog.Props\nexport type DialogApi = dialog.Api<DomProps>\nexport type DialogHandle = MachineHandle<DialogApi>\n\nexport function createDialog(props: Partial<DialogProps> = {}): DialogHandle {\n return createMachineHandle(\n dialog.machine,\n dialog.connect,\n normalizeProps,\n props\n )\n}\n\nexport { dialog }\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\n\nconst FIELD_ROOT_CLASS = \"flex flex-col items-start gap-2\"\nconst FIELD_LABEL_CLASS =\n \"text-base/4.5 text-foreground inline-flex items-center gap-2 font-medium sm:text-sm/4\"\nconst FIELD_DESCRIPTION_CLASS = \"text-muted-foreground text-xs\"\nconst FIELD_ERROR_CLASS = \"text-destructive-foreground text-xs\"\n\nexport interface CreateFieldOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n name?: string\n}\n\nexport function createField(\n options: CreateFieldOptions = {},\n children: Child | Child[] = []\n): HTMLDivElement {\n const { class: extra, name, attrs, ...rest } = options\n return el(\n \"div\",\n {\n ...rest,\n class: cn(FIELD_ROOT_CLASS, extra),\n attrs: {\n \"data-slot\": \"field\",\n \"data-uidex-primitive\": \"field\",\n ...(name ? { \"data-uidex-field-name\": name } : {}),\n ...attrs,\n },\n },\n children\n ) as HTMLDivElement\n}\n\nexport interface CreateFieldLabelOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n /** When provided, the `<label for>` attribute is set so clicking focuses the control. */\n htmlFor?: string\n}\n\nexport function createFieldLabel(\n options: CreateFieldLabelOptions = {},\n children: Child | Child[] = []\n): HTMLLabelElement {\n const { class: extra, htmlFor, attrs, ...rest } = options\n return el(\n \"label\",\n {\n ...rest,\n class: cn(FIELD_LABEL_CLASS, extra),\n attrs: {\n \"data-slot\": \"field-label\",\n ...(htmlFor ? { for: htmlFor } : {}),\n ...attrs,\n },\n },\n children\n ) as HTMLLabelElement\n}\n\nexport function createFieldDescription(\n options: CreateFieldOptions = {},\n children: Child | Child[] = []\n): HTMLParagraphElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"p\",\n {\n ...rest,\n class: cn(FIELD_DESCRIPTION_CLASS, extra),\n attrs: { \"data-slot\": \"field-description\", ...attrs },\n },\n children\n ) as HTMLParagraphElement\n}\n\nexport function createFieldError(\n options: CreateFieldOptions = {}\n): HTMLParagraphElement {\n const { class: extra, attrs, ...rest } = options\n const node = el(\"p\", {\n ...rest,\n class: cn(FIELD_ERROR_CLASS, extra),\n attrs: {\n \"data-slot\": \"field-error\",\n role: \"alert\",\n \"aria-live\": \"polite\",\n ...attrs,\n },\n }) as HTMLParagraphElement\n node.hidden = true\n return node\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\n\nconst FORM_CLASS = \"flex w-full flex-col gap-4\"\n\nexport interface CreateFormOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport function createForm(\n options: CreateFormOptions = {},\n children: Child | Child[] = []\n): HTMLFormElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"form\",\n {\n ...rest,\n class: cn(FORM_CLASS, extra),\n attrs: {\n \"data-slot\": \"form\",\n \"data-uidex-primitive\": \"form\",\n noValidate: true,\n ...attrs,\n },\n },\n children\n ) as HTMLFormElement\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type ElementOptions } from \"../internal/el\"\n\nconst FIELD_CLASS =\n \"border-input bg-popover text-foreground shadow-xs/5 placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive/40 aria-invalid:focus-visible:ring-destructive/20 dark:bg-input/30 inline-flex w-full rounded-lg border text-sm outline-none transition-shadow focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-60\"\n\nexport interface CreateInputOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport function createInput(\n options: CreateInputOptions = {}\n): HTMLInputElement {\n const { class: extra, attrs, ...rest } = options\n return el(\"input\", {\n ...rest,\n class: cn(FIELD_CLASS, \"h-8 px-3\", extra),\n attrs: { \"data-slot\": \"input\", ...attrs },\n }) as HTMLInputElement\n}\n\nexport function createTextarea(\n options: CreateInputOptions = {}\n): HTMLTextAreaElement {\n const { class: extra, attrs, ...rest } = options\n return el(\"textarea\", {\n ...rest,\n class: cn(FIELD_CLASS, \"min-h-20 px-3 py-2\", extra),\n attrs: { \"data-slot\": \"textarea\", ...attrs },\n }) as HTMLTextAreaElement\n}\n","import type { ClassValue } from \"clsx\"\nimport { ChevronsUpDown, createElement as createLucideElement } from \"lucide\"\nimport { cn } from \"../internal/cn\"\nimport { el, type ElementOptions } from \"../internal/el\"\n\nconst SELECT_WRAP_CLASS =\n \"border-input bg-popover text-foreground shadow-xs/5 focus-within:border-ring focus-within:ring-ring/30 aria-invalid:border-destructive/40 dark:bg-input/30 relative inline-flex h-8 w-full items-center rounded-lg border text-sm outline-none transition-shadow focus-within:ring-[3px] has-disabled:opacity-60\"\n\nconst SELECT_CONTROL_CLASS =\n \"absolute inset-0 h-full w-full cursor-pointer appearance-none bg-transparent px-3 pr-8 text-sm text-foreground outline-none disabled:cursor-not-allowed\"\n\nconst NATIVE_SELECT_CLASS =\n \"border-input bg-popover text-foreground shadow-xs/5 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive/40 dark:bg-input/30 inline-flex h-8 w-full cursor-pointer appearance-none rounded-lg border bg-[right_0.5rem_center] bg-no-repeat pl-3 pr-8 text-sm outline-none transition-shadow focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-60\"\n\nconst SELECT_CHEVRON_CLASS =\n \"pointer-events-none absolute right-2 size-4 text-muted-foreground opacity-80\"\n\nexport interface CreateSelectOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport interface SelectHandle {\n wrapper: HTMLElement\n control: HTMLSelectElement\n}\n\n/**\n * Coss-styled select composed of a wrapper `<span>` carrying the\n * border/shadow/chevron and a native `<select>` inside. Use when you can\n * control where the full handle mounts.\n */\nexport function createSelect(options: CreateSelectOptions = {}): SelectHandle {\n const { class: extra, attrs, ...rest } = options\n const control = el(\"select\", {\n ...rest,\n class: SELECT_CONTROL_CLASS,\n attrs: { \"data-slot\": \"select\", ...attrs },\n }) as HTMLSelectElement\n const chevron = createLucideElement(ChevronsUpDown)\n chevron.setAttribute(\"aria-hidden\", \"true\")\n chevron.setAttribute(\"class\", SELECT_CHEVRON_CLASS)\n const wrapper = el(\n \"span\",\n {\n class: cn(SELECT_WRAP_CLASS, extra),\n attrs: { \"data-slot\": \"select-control\" },\n },\n [control, chevron]\n )\n return { wrapper, control }\n}\n\n/**\n * Bare coss-styled native `<select>` — no wrapper, no chevron. Use when the\n * consumer expects a single self-styled element (e.g. the generic form\n * renderer in `views/render/form.ts`).\n */\nexport function createNativeSelect(\n options: CreateSelectOptions = {}\n): HTMLSelectElement {\n const { class: extra, attrs, ...rest } = options\n return el(\"select\", {\n ...rest,\n class: cn(NATIVE_SELECT_CLASS, extra),\n attrs: { \"data-slot\": \"select\", ...attrs },\n }) as HTMLSelectElement\n}\n","import * as combobox from \"@zag-js/combobox\"\nimport { createMachineRunner } from \"./machine\"\nimport { normalizeProps, type DomProps } from \"./normalize\"\n\nexport type ComboboxProps<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n> = combobox.Props<T>\nexport type ComboboxApi<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n> = combobox.Api<DomProps, T>\n\nexport function createCombobox<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n>(props: Partial<ComboboxProps<T>>) {\n const runner = createMachineRunner(\n combobox.machine as unknown as Parameters<typeof createMachineRunner>[0],\n props as never\n )\n runner.start()\n return {\n runner,\n api: () =>\n combobox.connect(\n runner.service as never,\n normalizeProps\n ) as ComboboxApi<T>,\n destroy: () => runner.stop(),\n }\n}\n\nexport type ComboboxHandle<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n> = ReturnType<typeof createCombobox<T>>\n\nexport { combobox }\n","import { KIND_STYLE } from \"../../entities\"\nimport { combobox, createCombobox } from \"../../machines/combobox\"\nimport { createScrollArea } from \"../../machines/scroll-area\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport { matchesQuery } from \"../builder/filter\"\nimport { createPersistentSpreads, spreadProps } from \"../builder/spread-props\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { ShellAction, ViewContext } from \"../core/types\"\nimport { createElement as createLucideElement, Circle } from \"lucide\"\nimport { isAbsentFromPage } from \"../primitives/entity-presence\"\nimport { createIconTile } from \"../primitives/icon-tile\"\nimport { renderKindIconTile } from \"../primitives/kind-icon\"\nimport { fillRow } from \"../primitives/row\"\nimport { createMutedText } from \"../primitives/text\"\nimport {\n LIST_GROUP_LABEL_CLASS,\n LIST_ITEM_CLASS,\n LIST_ITEM_STATE_CLASS,\n} from \"../../ui/list-item\"\nimport type { MountedSurface } from \"./index\"\n\nfunction defaultFilter(item: ListItem, query: string): boolean {\n return matchesQuery(\n `${item.label} ${item.value} ${item.group ?? \"\"} ${item.subtitle ?? \"\"}`,\n query\n )\n}\n\nfunction rowTag(item: ListItem): string {\n return item.tag ?? item.value\n}\n\nexport function renderListSurface(\n surface: ListSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n const all = surface.items\n const filterFn = surface.filter ?? defaultFilter\n let filteredItems: readonly ListItem[] = all\n\n const allByValue = new Map(all.map((i) => [i.value, i]))\n\n const getRootNode = (): ShadowRoot | Document => {\n const rn = root.getRootNode()\n if (rn instanceof ShadowRoot || rn instanceof Document) return rn\n return root.ownerDocument ?? document\n }\n\n const makeCollection = (items: readonly ListItem[]) =>\n combobox.collection({\n items: items as ListItem[],\n itemToValue: (item) => item.value,\n itemToString: (item) => item.label,\n })\n\n const hasDefault =\n surface.defaultHighlight !== undefined &&\n allByValue.has(surface.defaultHighlight)\n\n const handle = createCombobox<ListItem>({\n id: surface.id,\n getRootNode,\n collection: makeCollection(all),\n defaultOpen: true,\n defaultHighlightedValue: hasDefault ? surface.defaultHighlight : undefined,\n openOnClick: true,\n inputBehavior: \"autohighlight\",\n selectionBehavior: \"preserve\",\n closeOnSelect: false,\n disableLayer: true,\n onSelect: ({ itemValue }) => {\n const item = allByValue.get(itemValue)\n if (!item || !surface.onSelect) return\n surface.onSelect(item)\n },\n onHighlightChange: ({ highlightedValue }) => {\n const item = highlightedValue\n ? allByValue.get(highlightedValue)\n : undefined\n if (item?.preview) {\n ctx.highlight.show(item.preview, {\n color: KIND_STYLE[item.preview.kind].color,\n })\n } else {\n ctx.highlight.hide()\n }\n },\n })\n\n const section = el(\"section\", {\n class: \"flex h-full flex-col overflow-hidden\",\n attrs: { \"data-uidex-list-surface\": surface.id },\n })\n\n let kbdHighlightEl: HTMLElement | null = null\n let kbdActive = false\n const setKbdHighlight = (value: string | null): void => {\n if (kbdHighlightEl) {\n kbdHighlightEl.removeAttribute(\"data-kbd-highlighted\")\n kbdHighlightEl = null\n }\n if (value) {\n const node = itemNodes.get(value)\n if (node) {\n node.setAttribute(\"data-kbd-highlighted\", \"\")\n kbdHighlightEl = node\n }\n }\n }\n const enterKbdMode = (): void => {\n if (!kbdActive) {\n kbdActive = true\n section.setAttribute(\"data-kbd-nav\", \"\")\n }\n }\n const exitKbdMode = (): void => {\n if (kbdActive) {\n kbdActive = false\n section.removeAttribute(\"data-kbd-nav\")\n }\n }\n section.addEventListener(\"keydown\", (e) => {\n if (\n e.key === \"ArrowDown\" ||\n e.key === \"ArrowUp\" ||\n e.key === \"Home\" ||\n e.key === \"End\"\n ) {\n enterKbdMode()\n requestAnimationFrame(() => {\n setKbdHighlight(handle.api().highlightedValue ?? null)\n })\n }\n })\n section.addEventListener(\"pointermove\", exitKbdMode)\n\n const scrollRoot = el(\"div\", {\n class: \"flex-1 min-h-0\",\n attrs: { \"data-uidex-list-scroll-root\": \"\" },\n })\n\n const viewport = el(\"div\", { class: \"uidex-scrollbar h-full w-full\" })\n\n const content = el(\"div\", {\n class: \"scroll-py-2 p-2\",\n attrs: { \"data-uidex-list-content\": \"\" },\n })\n\n viewport.append(content)\n scrollRoot.append(viewport)\n section.append(scrollRoot)\n root.append(section)\n\n const scrollArea = createScrollArea({\n id: `${surface.id}-scroll`,\n getRootNode,\n })\n const scrollSpreads = createPersistentSpreads()\n const applyScrollProps = (): void => {\n const api = scrollArea.api()\n scrollSpreads.apply(\n scrollRoot,\n api.getRootProps() as Record<string, unknown>\n )\n scrollSpreads.apply(\n viewport,\n api.getViewportProps() as Record<string, unknown>\n )\n }\n applyScrollProps()\n const unsubScroll = scrollArea.runner.subscribe(applyScrollProps)\n\n const shellSpreads = createPersistentSpreads()\n const itemSpreads = createPersistentSpreads()\n const groupSpreads = createPersistentSpreads()\n let inputSpreadCleanup: Cleanup = () => {}\n\n const itemNodes = new Map<string, HTMLElement>()\n const itemForValue = new Map<string, ListItem>()\n const groupNodes = new Map<string, HTMLElement>()\n let listEl: HTMLElement | null = null\n let lastCollectionKey = \"\"\n let lastHighlight: string | null = null\n\n const isHidden = (): boolean => root.hasAttribute(\"hidden\")\n\n const collectionKey = (items: readonly ListItem[]): string =>\n items.map((i) => i.value).join(\"\\x00\")\n\n const clearInputSpread = (): void => {\n inputSpreadCleanup()\n inputSpreadCleanup = () => {}\n }\n\n const applyInputSpread = (): void => {\n inputSpreadCleanup()\n const api = handle.api()\n const inputProps = api.getInputProps() as Record<string, unknown>\n // The shell owns the input's placeholder; zag emits `placeholder: undefined`\n // when no prop is passed, which would strip our attribute on re-apply.\n delete inputProps.placeholder\n inputSpreadCleanup = spreadProps(ctx.searchInput, inputProps)\n }\n\n const visibilityObserver = new MutationObserver(() => {\n if (isHidden()) {\n // The stack's syncHighlight owns the overlay while a child view is on\n // top — don't clobber its ref-based highlight here.\n clearInputSpread()\n } else {\n applyInputSpread()\n }\n })\n visibilityObserver.observe(root, {\n attributes: true,\n attributeFilter: [\"hidden\"],\n })\n\n function buildItemBody(itemEl: HTMLElement, item: ListItem): void {\n const leading = resolveLeadingTile(item)\n fillRow(itemEl, {\n leading,\n label: item.label,\n subtitle: item.subtitle,\n trailing: item.shortcut,\n })\n }\n\n function resolveLeadingTile(item: ListItem): HTMLElement {\n if (item.entityChip) return renderKindIconTile(item.entityChip.entity.kind)\n if (item.leading) return createIconTile(item.leading())\n const fallback = createLucideElement(Circle)\n fallback.setAttribute(\"aria-hidden\", \"true\")\n fallback.setAttribute(\"class\", \"size-4\")\n return createIconTile(fallback)\n }\n\n function buildItems(): void {\n itemSpreads.cleanupAll()\n groupSpreads.cleanupAll()\n itemNodes.clear()\n itemForValue.clear()\n groupNodes.clear()\n listEl = null\n content.replaceChildren()\n\n const visible = filteredItems\n if (visible.length === 0) {\n content.append(\n createMutedText({\n class: \"p-4 text-center\",\n attrs: { \"data-uidex-list-empty\": \"\" },\n text: surface.emptyLabel ?? \"No matches\",\n })\n )\n return\n }\n\n const byGroup = new Map<string, ListItem[]>()\n for (const item of visible) {\n const key = item.group ?? \"\"\n const bucket = byGroup.get(key) ?? []\n bucket.push(item)\n byGroup.set(key, bucket)\n }\n\n const list = el(\"ul\", {\n class: \"flex flex-col gap-1\",\n attrs: { \"data-uidex-list-groups\": \"\" },\n })\n listEl = list\n\n for (const [group, items] of byGroup) {\n const groupEl = el(\"li\", {\n class: \"flex flex-col gap-1 py-1\",\n attrs: {\n \"data-uidex-list-group\": \"\",\n \"data-uidex-list-group-name\": group,\n },\n })\n const groupHeading = group\n ? el(\"h3\", { class: LIST_GROUP_LABEL_CLASS, text: group })\n : null\n const groupList = el(\"ul\", { class: \"flex flex-col\" })\n groupNodes.set(group || \"ungrouped\", groupList)\n for (const item of items) {\n const absent = item.preview\n ? isAbsentFromPage(item.preview, ctx.registry)\n : false\n const itemEl = el(\"li\", {\n class: cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_STATE_CLASS,\n absent && \"opacity-50\"\n ),\n attrs: {\n \"data-uidex-list-item\": rowTag(item),\n ...(absent ? { title: \"Not on this page\" } : {}),\n },\n })\n itemNodes.set(item.value, itemEl)\n itemForValue.set(item.value, item)\n buildItemBody(itemEl, item)\n groupList.append(itemEl)\n }\n if (groupHeading) groupEl.append(groupHeading)\n groupEl.append(groupList)\n list.append(groupEl)\n }\n\n content.append(list)\n }\n\n function applyProps(): void {\n const api = handle.api()\n shellSpreads.apply(section, api.getRootProps() as Record<string, unknown>)\n if (!isHidden()) applyInputSpread()\n shellSpreads.apply(\n content,\n api.getContentProps() as Record<string, unknown>\n )\n if (listEl) {\n shellSpreads.apply(listEl, api.getListProps() as Record<string, unknown>)\n for (const [id, groupList] of groupNodes) {\n groupSpreads.apply(\n groupList,\n api.getItemGroupProps({ id }) as Record<string, unknown>\n )\n }\n }\n for (const [value, itemEl] of itemNodes) {\n const item = itemForValue.get(value)\n if (!item) continue\n itemSpreads.apply(\n itemEl,\n api.getItemProps({ item }) as Record<string, unknown>\n )\n }\n }\n\n function maybeScrollHighlight(): void {\n const api = handle.api()\n const next = api.highlightedValue ?? null\n if (next === lastHighlight) return\n lastHighlight = next\n if (!next) return\n const node = itemNodes.get(next)\n node?.scrollIntoView({ block: \"nearest\" })\n }\n\n function tick(): void {\n const wantKey = collectionKey(filteredItems)\n if (wantKey !== lastCollectionKey) {\n kbdHighlightEl = null\n buildItems()\n lastCollectionKey = wantKey\n setKbdHighlight(handle.api().highlightedValue ?? null)\n }\n applyProps()\n maybeScrollHighlight()\n }\n\n const unsub = handle.runner.subscribe(tick)\n\n buildItems()\n lastCollectionKey = collectionKey(filteredItems)\n applyProps()\n if (hasDefault && surface.defaultHighlight) {\n handle.api().setHighlightValue(surface.defaultHighlight)\n const highlightedEl = itemNodes.get(surface.defaultHighlight)\n highlightedEl?.scrollIntoView({ block: \"nearest\" })\n lastHighlight = surface.defaultHighlight\n setKbdHighlight(surface.defaultHighlight)\n }\n\n const cleanup = composeCleanups([\n handle.destroy,\n () => ctx.highlight.hide(),\n unsubScroll,\n () => scrollSpreads.cleanupAll(),\n scrollArea.destroy,\n () => visibilityObserver.disconnect(),\n clearInputSpread,\n unsub,\n () => section.removeEventListener(\"pointermove\", exitKbdMode),\n () => {\n itemSpreads.cleanupAll()\n groupSpreads.cleanupAll()\n shellSpreads.cleanupAll()\n itemNodes.clear()\n itemForValue.clear()\n groupNodes.clear()\n root.replaceChildren()\n },\n ])\n\n const onSearch = (query: string): void => {\n const next = all.filter((item) => filterFn(item, query))\n const nextKey = collectionKey(next)\n if (nextKey === lastCollectionKey) return\n filteredItems = next\n handle.runner.update({ collection: makeCollection(filteredItems) })\n }\n\n const submitIntent = {\n get() {\n const api = handle.api()\n const highlighted = api.highlightedValue\n if (!highlighted) return null\n const item = allByValue.get(highlighted)\n if (!item || !surface.onSelect) return null\n return {\n label: \"Select\",\n perform: () => surface.onSelect!(item),\n }\n },\n subscribe(cb: () => void) {\n return handle.runner.subscribe(cb)\n },\n }\n\n const highlightActions = {\n get(): readonly ShellAction[] {\n const api = handle.api()\n const highlighted = api.highlightedValue\n if (!highlighted) return []\n const item = allByValue.get(highlighted)\n return item?.actions ?? []\n },\n subscribe(cb: () => void) {\n return handle.runner.subscribe(cb)\n },\n }\n\n return { cleanup, onSearch, submitIntent, highlightActions }\n}\n","import type { Cleanup, ShellAction, ViewContext } from \"../core/types\"\nimport type { ViewSurface } from \"../core/surface\"\nimport { renderCustomSurface } from \"./custom\"\nimport { renderDetailSurface } from \"./detail\"\nimport { renderFormSurface } from \"./form\"\nimport { renderListSurface } from \"./list\"\n\nexport interface SubmitIntent {\n label: string\n perform: () => void\n}\n\nexport interface SubmitIntentSource {\n get(): SubmitIntent | null\n subscribe(cb: () => void): Cleanup\n}\n\nexport interface HighlightActionsSource {\n get(): readonly ShellAction[]\n subscribe(cb: () => void): Cleanup\n}\n\nexport interface MountedSurface {\n cleanup: Cleanup\n onSearch?: (query: string) => void\n submitIntent?: SubmitIntentSource\n highlightActions?: HighlightActionsSource\n}\n\nexport function renderSurface(\n surface: ViewSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n switch (surface.kind) {\n case \"list\":\n return renderListSurface(surface, ctx, root)\n case \"detail\":\n return renderDetailSurface(surface, ctx, root)\n case \"form\":\n return renderFormSurface(surface, ctx, root)\n case \"custom\":\n return renderCustomSurface(surface, ctx, root)\n }\n}\n","import type { EntityRef, Registry } from \"../../entities\"\nimport type { Cleanup } from \"../../internal/cleanup\"\nimport {\n createScrollArea,\n type ScrollAreaHandle,\n} from \"../../machines/scroll-area\"\nimport type { SessionStore } from \"../../session\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport { createPersistentSpreads } from \"../builder/spread-props\"\nimport { renderSurface, type MountedSurface } from \"../render\"\nimport type { ViewRegistrar } from \"./registry\"\nimport type {\n CloudAdapter,\n HighlightController,\n View,\n ViewContext,\n} from \"./types\"\n\nconst SCROLL_ROOT_CLASS = \"absolute inset-0\"\nconst HOST_CLASS = \"uidex-scrollbar h-full w-full\"\n\nexport interface MountedEntry {\n id: string\n ref: EntityRef | null\n view: View\n host: HTMLElement\n scrollRoot: HTMLElement\n scrollArea: ScrollAreaHandle\n scrollCleanup: Cleanup\n ctx: ViewContext\n mounted: MountedSurface\n}\n\nexport interface MountEntryDeps {\n container: HTMLElement\n searchInput: HTMLInputElement\n views: ViewRegistrar\n session: SessionStore\n registry: Registry\n cloud: CloudAdapter | null\n sdkCloud: CloudAdapter\n highlight: HighlightController\n nextScrollSeq(): number\n}\n\nexport function mountEntry(\n entry: ViewStackEntry,\n view: View,\n deps: MountEntryDeps\n): MountedEntry | null {\n const scrollRoot = document.createElement(\"div\")\n scrollRoot.setAttribute(\"data-uidex-view-scroll-root\", \"\")\n scrollRoot.className = SCROLL_ROOT_CLASS\n\n const host = document.createElement(\"div\")\n host.setAttribute(\"data-uidex-view-slot\", \"\")\n host.setAttribute(\"data-uidex-view-id\", view.id)\n host.className = HOST_CLASS\n scrollRoot.appendChild(host)\n deps.container.appendChild(scrollRoot)\n\n const seq = deps.nextScrollSeq()\n const scrollArea = createScrollArea({\n id: `uidex-view-scroll-${view.id}-${seq}`,\n getRootNode: () => {\n const rn = scrollRoot.getRootNode()\n if (rn instanceof ShadowRoot || rn instanceof Document) return rn\n return scrollRoot.ownerDocument ?? document\n },\n })\n\n const scrollSpreads = createPersistentSpreads()\n const applyScrollProps = (): void => {\n const api = scrollArea.api()\n scrollSpreads.apply(\n scrollRoot,\n api.getRootProps() as Record<string, unknown>\n )\n // Zag's getRootProps sets inline `position: relative`, which beats the\n // `absolute inset-0` utility class and collapses the viewport to 0px.\n scrollRoot.style.position = \"absolute\"\n scrollSpreads.apply(host, api.getViewportProps() as Record<string, unknown>)\n }\n applyScrollProps()\n const unsubScroll = scrollArea.runner.subscribe(applyScrollProps)\n const scrollCleanup: Cleanup = () => {\n unsubScroll()\n scrollSpreads.cleanupAll()\n }\n\n const ctx: ViewContext = {\n ref: entry.ref,\n registry: deps.registry,\n cloud: deps.cloud,\n sdkCloud: deps.sdkCloud,\n views: {\n list: () => deps.views.list(),\n recents: () => deps.views.recents(),\n favorites: () => deps.views.favorites(),\n },\n push: (target) => {\n if (!deps.views.get(target.id)) return\n deps.session.getState().actions.pushStack({\n id: target.id,\n ref: target.ref ?? null,\n })\n },\n pop: () => deps.session.getState().actions.popStack(),\n close: () => deps.session.getState().actions.clearStack(),\n navigate: (r: EntityRef) => deps.views.navigate(r),\n toggleFavorite: (r: EntityRef) => deps.views.toggleFavorite(r),\n isFavorite: (r: EntityRef) => deps.views.isFavorite(r),\n pinHighlight: (r: EntityRef) =>\n deps.session.getState().actions.pinHighlight(r),\n searchInput: deps.searchInput,\n highlight: deps.highlight,\n getStack: () => deps.session.getState().stack,\n }\n\n let surfaceResult: MountedSurface\n try {\n const surface = view.surface(ctx)\n surfaceResult = renderSurface(surface, ctx, host)\n } catch (err) {\n console.error(`[uidex] View \"${view.id}\" surface() threw`, err)\n scrollCleanup()\n scrollArea.destroy()\n scrollRoot.remove()\n return null\n }\n\n return {\n id: view.id,\n ref: entry.ref,\n view,\n host,\n scrollRoot,\n scrollArea,\n scrollCleanup,\n ctx,\n mounted: surfaceResult,\n }\n}\n\nexport function cleanupMountedEntry(entry: MountedEntry): void {\n try {\n entry.mounted.cleanup()\n } catch (err) {\n console.error(\"[uidex] View cleanup threw\", err)\n }\n entry.scrollCleanup()\n entry.scrollArea.destroy()\n entry.scrollRoot.remove()\n}\n\nexport function setEntryVisibility(\n entry: MountedEntry,\n visible: boolean\n): void {\n if (visible) {\n entry.host.removeAttribute(\"hidden\")\n entry.host.removeAttribute(\"inert\")\n entry.host.removeAttribute(\"aria-hidden\")\n } else {\n entry.host.setAttribute(\"hidden\", \"\")\n entry.host.setAttribute(\"inert\", \"\")\n entry.host.setAttribute(\"aria-hidden\", \"true\")\n }\n}\n","import { ArrowLeft, Search, createElement as createLucideElement } from \"lucide\"\nimport { Z_CHROME } from \"../../surface/constants\"\nimport type { PaletteShortcut } from \"../../surface/keys\"\nimport { createActionsPopup, type ActionsPopupHandle } from \"./actions-popup\"\nimport { createKbd } from \"../../ui/kbd\"\n\nconst BACKDROP_CLASS = \"fixed inset-0 bg-black/32 backdrop-blur-sm\"\n\nconst VIEWPORT_CLASS =\n \"fixed inset-0 flex flex-col items-center px-4 py-[max(1rem,4vh)] sm:py-[10vh]\"\n\nconst FRAME_CLASS =\n \"relative flex h-[26rem] w-full min-w-0 max-w-xl flex-col rounded-2xl border bg-popover text-popover-foreground shadow-lg/5 outline-none not-dark:bg-clip-padding before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-2xl)-1px)] before:bg-muted/72 before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\"\n\nconst HEADER_CLASS = \"flex shrink-0 items-center gap-1 px-2.5 py-1.5\"\n\nconst SEARCH_WRAPPER_CLASS =\n \"flex h-9 w-full items-center gap-0 text-foreground\"\n\nconst BACK_BUTTON_CLASS =\n \"inline-flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-md bg-muted text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n\nconst BACK_ICON_CLASS = \"size-4 opacity-80\"\n\nconst SEARCH_ICON_WRAP_CLASS =\n \"inline-flex size-7 shrink-0 items-center justify-center text-muted-foreground\"\n\nconst SEARCH_ICON_CLASS = \"size-4 opacity-80\"\n\nconst LOGO_CLASS =\n \"inline-flex shrink-0 items-center justify-center text-muted-foreground\"\n\nconst LOGO_ICON_CLASS = \"size-4\"\n\nconst SEARCH_INPUT_CLASS =\n \"text-foreground min-w-0 flex-1 bg-transparent ps-2 pe-3 text-sm placeholder:text-muted-foreground focus:outline-none\"\n\nconst HEADER_TITLE_CLASS =\n \"text-foreground min-w-0 flex-1 truncate px-3 text-sm\"\n\nconst HOST_CONTAINER_CLASS =\n \"relative -mx-px min-h-0 flex-1 overflow-hidden rounded-t-xl border border-b-0 bg-popover bg-clip-padding shadow-xs/5 [clip-path:inset(0_1px)] before:pointer-events-none before:absolute before:inset-0 before:rounded-t-[calc(var(--radius-xl)-1px)]\"\n\nconst FOOTER_CLASS =\n \"text-muted-foreground flex items-center justify-between gap-2 rounded-b-[calc(var(--radius-2xl)-1px)] border-t px-3 py-1.5 text-xs\"\n\nconst FOOTER_SIDE_CLASS = \"flex min-w-0 items-center\"\n\nconst HINT_CLASS =\n \"inline-flex items-center gap-1.5 text-xs text-muted-foreground\"\n\nconst ACTIONS_TRIGGER_CLASS =\n \"inline-flex shrink-0 cursor-pointer items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n\nexport interface StackShellCallbacks {\n onBack(): void\n onBackdropClick(): void\n onSearchInput(value: string): void\n}\n\nexport interface StackShell {\n backdrop: HTMLElement\n frame: HTMLElement\n header: HTMLElement\n backBtn: HTMLButtonElement\n logo: HTMLElement\n searchIcon: HTMLElement\n headerTitle: HTMLElement\n searchInput: HTMLInputElement\n hostContainer: HTMLElement\n footerLeft: HTMLElement\n footerRight: HTMLElement\n actionsPopup: ActionsPopupHandle\n destroy(): void\n}\n\nexport function createStackShell(\n container: HTMLElement,\n callbacks: StackShellCallbacks,\n opts?: { shortcut?: PaletteShortcut }\n): StackShell {\n const backdrop = document.createElement(\"div\")\n backdrop.setAttribute(\"data-uidex-view-backdrop\", \"\")\n backdrop.className = BACKDROP_CLASS\n backdrop.style.zIndex = String(Z_CHROME)\n\n const frame = document.createElement(\"div\")\n frame.setAttribute(\"data-uidex-view-stack-frame\", \"\")\n frame.className = FRAME_CLASS\n\n const header = document.createElement(\"header\")\n header.setAttribute(\"data-uidex-view-stack-header\", \"\")\n header.className = HEADER_CLASS\n\n const backBtn = document.createElement(\"button\")\n backBtn.setAttribute(\"type\", \"button\")\n backBtn.setAttribute(\"data-uidex-view-stack-back\", \"\")\n backBtn.setAttribute(\"aria-label\", \"Back\")\n backBtn.className = BACK_BUTTON_CLASS\n const backIcon = createLucideElement(ArrowLeft)\n backIcon.setAttribute(\"aria-hidden\", \"true\")\n backIcon.setAttribute(\"class\", BACK_ICON_CLASS)\n backBtn.append(backIcon)\n backBtn.hidden = true\n const onBackClick = () => callbacks.onBack()\n backBtn.addEventListener(\"click\", onBackClick)\n\n const logo = createUidexLogo()\n logo.setAttribute(\"data-uidex-view-stack-footer-logo\", \"\")\n const searchIcon = createSearchIcon()\n\n const searchInput = document.createElement(\"input\")\n searchInput.setAttribute(\"type\", \"text\")\n searchInput.setAttribute(\"data-uidex-search-input\", \"\")\n searchInput.setAttribute(\"placeholder\", \"Search for command...\")\n searchInput.className = SEARCH_INPUT_CLASS\n const onSearchInput = () => callbacks.onSearchInput(searchInput.value)\n searchInput.addEventListener(\"input\", onSearchInput)\n\n const headerTitle = document.createElement(\"div\")\n headerTitle.setAttribute(\"data-uidex-view-stack-title\", \"\")\n headerTitle.className = HEADER_TITLE_CLASS\n headerTitle.hidden = true\n\n const searchWrap = document.createElement(\"div\")\n searchWrap.setAttribute(\"data-uidex-view-stack-search\", \"\")\n searchWrap.className = SEARCH_WRAPPER_CLASS\n searchWrap.append(backBtn, searchIcon, searchInput, headerTitle)\n header.append(searchWrap)\n\n const hostContainer = document.createElement(\"div\")\n hostContainer.setAttribute(\"data-uidex-view-stack-hosts\", \"\")\n hostContainer.className = HOST_CONTAINER_CLASS\n\n const footer = document.createElement(\"footer\")\n footer.setAttribute(\"data-uidex-view-stack-footer\", \"\")\n footer.className = FOOTER_CLASS\n\n const footerLeft = document.createElement(\"div\")\n footerLeft.setAttribute(\"data-uidex-view-stack-footer-left\", \"\")\n footerLeft.className = FOOTER_SIDE_CLASS\n\n const footerRight = document.createElement(\"div\")\n footerRight.setAttribute(\"data-uidex-view-stack-footer-right\", \"\")\n footerRight.className = FOOTER_SIDE_CLASS\n\n footer.append(footerLeft, footerRight)\n\n const actionsPopup = createActionsPopup({\n onOpenChange: (open) => {\n hostContainer.style.pointerEvents = open ? \"none\" : \"\"\n if (!open)\n requestAnimationFrame(() => searchInput.focus({ preventScroll: true }))\n },\n })\n\n frame.append(header, hostContainer, footer, actionsPopup.element)\n\n const viewport = document.createElement(\"div\")\n viewport.setAttribute(\"data-uidex-view-viewport\", \"\")\n viewport.className = VIEWPORT_CLASS\n viewport.style.zIndex = String(Z_CHROME)\n viewport.append(frame)\n const onViewportClick = (e: MouseEvent) => {\n if (e.target === viewport) callbacks.onBackdropClick()\n }\n viewport.addEventListener(\"click\", onViewportClick)\n\n container.append(backdrop, viewport)\n\n return {\n backdrop,\n frame,\n header,\n backBtn,\n logo,\n searchIcon,\n headerTitle,\n searchInput,\n hostContainer,\n footerLeft,\n footerRight,\n actionsPopup,\n destroy() {\n backBtn.removeEventListener(\"click\", onBackClick)\n viewport.removeEventListener(\"click\", onViewportClick)\n searchInput.removeEventListener(\"input\", onSearchInput)\n actionsPopup.destroy()\n viewport.remove()\n backdrop.remove()\n },\n }\n}\n\nfunction createSearchIcon(): HTMLElement {\n const wrap = document.createElement(\"span\")\n wrap.setAttribute(\"data-uidex-view-stack-search-icon\", \"\")\n wrap.setAttribute(\"aria-hidden\", \"true\")\n wrap.className = SEARCH_ICON_WRAP_CLASS\n const icon = createLucideElement(Search)\n icon.setAttribute(\"aria-hidden\", \"true\")\n icon.setAttribute(\"class\", SEARCH_ICON_CLASS)\n wrap.append(icon)\n return wrap\n}\n\nfunction createUidexLogo(): HTMLElement {\n const wrap = document.createElement(\"span\")\n wrap.setAttribute(\"data-uidex-view-stack-logo\", \"\")\n wrap.setAttribute(\"aria-hidden\", \"true\")\n wrap.className = LOGO_CLASS\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\")\n svg.setAttribute(\"viewBox\", \"0 0 30 36\")\n svg.setAttribute(\"fill\", \"currentColor\")\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"class\", LOGO_ICON_CLASS)\n const back = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\")\n back.setAttribute(\"x\", \"1\")\n back.setAttribute(\"y\", \"5\")\n back.setAttribute(\"width\", \"22\")\n back.setAttribute(\"height\", \"28\")\n back.setAttribute(\"rx\", \"3\")\n back.setAttribute(\"fill\", \"currentColor\")\n back.setAttribute(\"opacity\", \"0.18\")\n back.setAttribute(\"transform\", \"rotate(-6, 12, 19)\")\n const front = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\")\n front.setAttribute(\"x\", \"7\")\n front.setAttribute(\"y\", \"1\")\n front.setAttribute(\"width\", \"22\")\n front.setAttribute(\"height\", \"28\")\n front.setAttribute(\"rx\", \"3\")\n front.setAttribute(\"fill\", \"currentColor\")\n svg.append(back, front)\n wrap.append(svg)\n return wrap\n}\n\nexport function createHint(key: string, label: string): HTMLElement {\n const wrap = document.createElement(\"span\")\n wrap.className = HINT_CLASS\n const text = document.createElement(\"span\")\n text.textContent = label\n const kbd = createKbd({ text: key })\n wrap.append(text, kbd)\n return wrap\n}\n\nexport function createFooterDivider(): HTMLElement {\n const sep = document.createElement(\"span\")\n sep.setAttribute(\"aria-hidden\", \"true\")\n sep.className = \"mx-1 h-4 w-px bg-border\"\n return sep\n}\n\nexport interface FooterHintButton {\n element: HTMLButtonElement\n setLabel(label: string): void\n}\n\nexport function createFooterHintButton(\n key: string,\n label: string,\n onClick: () => void\n): FooterHintButton {\n const btn = document.createElement(\"button\")\n btn.setAttribute(\"type\", \"button\")\n btn.setAttribute(\"aria-label\", label)\n btn.className = ACTIONS_TRIGGER_CLASS\n const text = document.createElement(\"span\")\n text.textContent = label\n const kbd = createKbd({ text: key })\n btn.append(text, kbd)\n btn.addEventListener(\"click\", onClick)\n return {\n element: btn,\n setLabel(next: string) {\n text.textContent = next\n btn.setAttribute(\"aria-label\", next)\n },\n }\n}\n","import * as menu from \"@zag-js/menu\"\nimport { createMachineHandle, type MachineHandle } from \"./machine\"\nimport { normalizeProps, type DomProps } from \"./normalize\"\n\nexport type MenuProps = menu.Props\nexport type MenuApi = menu.Api<DomProps>\nexport type MenuHandle = MachineHandle<MenuApi>\n\nexport function createMenu(props: Partial<MenuProps> = {}): MenuHandle {\n return createMachineHandle(menu.machine, menu.connect, normalizeProps, props)\n}\n\nexport { menu }\n","import { cn } from \"../internal/cn\"\nimport { composeCleanups, type Cleanup } from \"../internal/cleanup\"\nimport { el } from \"../internal/el\"\nimport { createMenu as createMenuMachine, menu } from \"../machines/menu\"\nimport { createPersistentSpreads } from \"../views/builder/spread-props\"\nimport { createCommandShortcut } from \"./kbd\"\nimport { LIST_GROUP_LABEL_CLASS } from \"./list-item\"\n\nexport const MENU_POPUP_CLASS =\n \"bg-popover shadow-lg/5 not-dark:bg-clip-padding relative flex min-w-32 rounded-lg border outline-none before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] focus:outline-none dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\"\n\nexport const MENU_LIST_CLASS = \"flex flex-col p-1\"\n\nexport const MENU_ITEM_CLASS =\n \"text-foreground data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-64 flex min-h-7 cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-sm outline-none [&>svg:not([class*='size-'])]:size-4 [&>svg:not([class*='opacity-'])]:opacity-80 [&>svg]:pointer-events-none [&>svg]:-mx-0.5 [&>svg]:shrink-0\"\n\nexport const MENU_GROUP_LABEL_CLASS = LIST_GROUP_LABEL_CLASS\n\nexport const MENU_SEPARATOR_CLASS = \"bg-border mx-2 my-1 h-px\"\n\nexport interface MenuItemDescriptor {\n id: string\n label: string\n shortcut?: string\n disabled?: boolean\n leading?: Node | null\n trailing?: Node | null\n onSelect?: () => void\n}\n\nexport interface CreateUiMenuOptions {\n id?: string\n getRootNode?: () => ShadowRoot | Document\n items: MenuItemDescriptor[]\n label?: string\n ariaLabel?: string\n onSelect?(itemId: string): void\n}\n\nexport interface UiMenuHandle {\n /** Popup root; caller positions this inside its own container. */\n readonly popup: HTMLElement\n /** The ul element carrying item rows. */\n readonly list: HTMLElement\n open(): void\n close(): void\n isOpen(): boolean\n /** Forward a keydown from an owned surface (Arrow/Enter/Escape/typeahead). */\n handleKey(e: KeyboardEvent): boolean\n setItems(next: MenuItemDescriptor[]): void\n destroy(): void\n}\n\n// `getPositionerProps` is deliberately skipped so callers own absolute\n// positioning inside their own containers (the palette shell frame, etc.).\nexport function createUiMenu(options: CreateUiMenuOptions): UiMenuHandle {\n let items = options.items\n const spreads = createPersistentSpreads()\n let lastKey = \"\"\n let rowByValue = new Map<string, HTMLElement>()\n const cleanups: Cleanup[] = []\n\n const popup = el(\"div\", {\n class: cn(MENU_POPUP_CLASS, \"hidden\"),\n attrs: { \"data-uidex-primitive\": \"menu\", \"data-slot\": \"menu-popup\" },\n })\n\n const list = el(\"ul\", {\n class: MENU_LIST_CLASS,\n attrs: {\n role: \"menu\",\n \"aria-label\": options.ariaLabel ?? options.label ?? \"Menu\",\n \"data-slot\": \"menu-list\",\n },\n })\n\n popup.append(list)\n\n const handle = createMenuMachine({\n id: options.id,\n getRootNode: options.getRootNode,\n closeOnSelect: true,\n onSelect: (details) => {\n const picked = items.find((it) => it.id === details.value)\n picked?.onSelect?.()\n options.onSelect?.(details.value)\n },\n onOpenChange: ({ open }) => {\n popup.classList.toggle(\"hidden\", !open)\n },\n })\n\n function rebuild(): void {\n spreads.cleanupAll()\n list.replaceChildren()\n rowByValue = new Map()\n for (const item of items) {\n const row = el(\"li\", {\n class: MENU_ITEM_CLASS,\n attrs: {\n \"data-slot\": \"menu-item\",\n \"data-uidex-menu-item\": item.id,\n },\n })\n if (item.leading) row.append(item.leading)\n const label = el(\"span\", {\n class: \"flex-1 truncate\",\n text: item.label,\n })\n row.append(label)\n if (item.trailing) row.append(item.trailing)\n else if (item.shortcut) {\n row.append(createCommandShortcut({ text: item.shortcut }))\n }\n rowByValue.set(item.id, row)\n list.append(row)\n }\n lastKey = items.map((i) => i.id).join(\"\\x00\")\n }\n\n function applyProps(): void {\n const api = handle.api()\n spreads.apply(list, api.getContentProps() as Record<string, unknown>)\n for (const item of items) {\n const row = rowByValue.get(item.id)\n if (!row) continue\n spreads.apply(\n row,\n api.getItemProps({\n value: item.id,\n valueText: item.label,\n disabled: item.disabled ?? false,\n }) as Record<string, unknown>\n )\n }\n }\n\n function tick(): void {\n const wantKey = items.map((i) => i.id).join(\"\\x00\")\n if (wantKey !== lastKey) rebuild()\n applyProps()\n }\n\n rebuild()\n applyProps()\n\n const unsub = handle.runner.subscribe(tick)\n cleanups.push(unsub)\n\n function nextId(currentId: string | null, delta: number): string | null {\n if (items.length === 0) return null\n if (!currentId) {\n return delta > 0 ? items[0].id : items[items.length - 1].id\n }\n const idx = items.findIndex((it) => it.id === currentId)\n if (idx === -1) return items[0].id\n const next = (idx + delta + items.length) % items.length\n return items[next].id\n }\n\n function runHighlighted(): void {\n const api = handle.api()\n const cur = api.highlightedValue\n if (!cur) return\n const item = items.find((it) => it.id === cur)\n if (!item || item.disabled) return\n item.onSelect?.()\n options.onSelect?.(cur)\n api.setOpen(false)\n }\n\n function handleKey(e: KeyboardEvent): boolean {\n const api = handle.api()\n if (!api.open) return false\n switch (e.key) {\n case \"ArrowDown\": {\n const next = nextId(api.highlightedValue, 1)\n if (next) api.setHighlightedValue(next)\n return true\n }\n case \"ArrowUp\": {\n const next = nextId(api.highlightedValue, -1)\n if (next) api.setHighlightedValue(next)\n return true\n }\n case \"Home\": {\n if (items[0]) api.setHighlightedValue(items[0].id)\n return true\n }\n case \"End\": {\n const last = items[items.length - 1]\n if (last) api.setHighlightedValue(last.id)\n return true\n }\n case \"Enter\":\n runHighlighted()\n return true\n case \"Escape\":\n api.setOpen(false)\n return true\n default:\n return false\n }\n }\n\n return {\n popup,\n list,\n open: () => handle.api().setOpen(true),\n close: () => handle.api().setOpen(false),\n isOpen: () => handle.api().open,\n handleKey,\n setItems(next) {\n const wantKey = next.map((i) => i.id).join(\"\\x00\")\n items = next\n if (wantKey === lastKey) return\n rebuild()\n applyProps()\n },\n destroy: () => {\n composeCleanups(cleanups)()\n spreads.cleanupAll()\n handle.destroy()\n popup.remove()\n },\n }\n}\n\nexport { menu as menuMachine }\n","import { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport {\n createMenu as createMenuMachine,\n type MenuApi,\n} from \"../../machines/menu\"\nimport { createPersistentSpreads } from \"../builder/spread-props\"\nimport {\n ACTIONS_SHORTCUT,\n formatShortcutLabel,\n type PaletteShortcut,\n} from \"../../surface/keys\"\nimport { createKbd } from \"../../ui/kbd\"\nimport { LIST_ITEM_CLASS, LIST_ITEM_STATE_CLASS } from \"../../ui/list-item\"\nimport {\n MENU_LIST_CLASS,\n MENU_POPUP_CLASS,\n type MenuItemDescriptor,\n} from \"../../ui/menu\"\nimport { createIconTile } from \"../primitives/icon-tile\"\nimport { fillRow } from \"../primitives/row\"\nimport type { ShellAction } from \"./types\"\n\nconst TRIGGER_CLASS =\n \"inline-flex shrink-0 cursor-pointer items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n\nexport interface ActionsPopupHandle {\n readonly trigger: HTMLButtonElement\n readonly element: HTMLElement\n setActions(actions: ShellAction[]): void\n open(): void\n close(): void\n isOpen(): boolean\n destroy(): void\n}\n\nfunction toDescriptors(actions: ShellAction[]): MenuItemDescriptor[] {\n return actions.map((action) => ({\n id: action.id,\n label: action.label,\n shortcut: action.shortcut,\n leading: action.icon?.() ?? null,\n trailing: action.shortcut ? createKbd({ text: action.shortcut }) : null,\n onSelect: () => void action.perform(),\n }))\n}\n\nfunction itemsKey(items: readonly MenuItemDescriptor[]): string {\n return items.map((i) => i.id).join(\"\\x00\")\n}\n\nexport function createActionsPopup(opts?: {\n shortcut?: PaletteShortcut\n onOpenChange?: (open: boolean) => void\n}): ActionsPopupHandle {\n let items: MenuItemDescriptor[] = []\n const spreads = createPersistentSpreads()\n let lastKey = \"\"\n let rowByValue = new Map<string, HTMLElement>()\n const cleanups: Cleanup[] = []\n\n const trigger = document.createElement(\"button\")\n trigger.setAttribute(\"type\", \"button\")\n trigger.setAttribute(\"data-uidex-actions-trigger\", \"\")\n trigger.className = TRIGGER_CLASS\n const triggerText = document.createElement(\"span\")\n triggerText.textContent = \"Actions\"\n const triggerKbd = createKbd({\n text: formatShortcutLabel(opts?.shortcut ?? ACTIONS_SHORTCUT),\n })\n trigger.append(triggerText, triggerKbd)\n\n const positioner = el(\"div\", {\n attrs: { \"data-slot\": \"menu-positioner\" },\n })\n\n const popup = el(\"div\", {\n class: `${MENU_POPUP_CLASS} w-56`,\n attrs: { \"data-uidex-primitive\": \"menu\", \"data-slot\": \"menu-popup\" },\n })\n\n const list = el(\"ul\", {\n class: `${MENU_LIST_CLASS} w-full`,\n attrs: {\n role: \"menu\",\n \"aria-label\": \"Actions\",\n \"data-slot\": \"menu-list\",\n },\n })\n\n popup.append(list)\n positioner.append(popup)\n\n const handle = createMenuMachine({\n getRootNode: () => {\n const rn = positioner.getRootNode()\n if (rn instanceof ShadowRoot || rn instanceof Document) return rn\n return positioner.ownerDocument ?? document\n },\n closeOnSelect: true,\n positioning: {\n placement: \"top-end\",\n gutter: 4,\n },\n onOpenChange: ({ open }: { open: boolean }) => opts?.onOpenChange?.(open),\n onSelect: (details: { value: string }) => {\n const picked = items.find((it) => it.id === details.value)\n picked?.onSelect?.()\n },\n })\n\n function rebuild(key: string): void {\n spreads.cleanupAll()\n list.replaceChildren()\n rowByValue = new Map()\n for (const item of items) {\n const row = el(\"li\", {\n class: cn(LIST_ITEM_CLASS, LIST_ITEM_STATE_CLASS),\n attrs: {\n \"data-slot\": \"menu-item\",\n \"data-uidex-menu-item\": item.id,\n },\n })\n const leading = item.leading ? createIconTile(item.leading) : null\n fillRow(row, {\n leading,\n label: item.label,\n trailing: item.shortcut ?? item.trailing ?? null,\n })\n rowByValue.set(item.id, row)\n list.append(row)\n }\n lastKey = key\n }\n\n function applyProps(): void {\n const api: MenuApi = handle.api()\n spreads.apply(trigger, api.getTriggerProps() as Record<string, unknown>)\n spreads.apply(\n positioner,\n api.getPositionerProps() as Record<string, unknown>\n )\n spreads.apply(popup, api.getContentProps() as Record<string, unknown>)\n for (const item of items) {\n const row = rowByValue.get(item.id)\n if (!row) continue\n spreads.apply(\n row,\n api.getItemProps({\n value: item.id,\n valueText: item.label,\n disabled: item.disabled ?? false,\n }) as Record<string, unknown>\n )\n }\n }\n\n function tick(): void {\n const key = itemsKey(items)\n if (key !== lastKey) rebuild(key)\n applyProps()\n }\n\n rebuild(itemsKey(items))\n applyProps()\n\n const unsub = handle.runner.subscribe(tick)\n cleanups.push(unsub)\n\n return {\n trigger,\n element: positioner,\n setActions(actions) {\n items = toDescriptors(actions)\n const key = itemsKey(items)\n if (key === lastKey) return\n rebuild(key)\n applyProps()\n },\n open: () => handle.api().setOpen(true),\n close: () => handle.api().setOpen(false),\n isOpen: () => handle.api().open,\n destroy: () => {\n composeCleanups(cleanups)()\n spreads.cleanupAll()\n handle.destroy()\n positioner.remove()\n },\n }\n}\n","import { KIND_STYLE, type Registry } from \"../../entities\"\nimport { detectDev } from \"../../internal/dev\"\nimport type { SessionStore } from \"../../session\"\nimport type { PaletteShortcut } from \"../../surface/keys\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport { renderKindChip } from \"../primitives/kind-chip\"\nimport type { ActionsPopupHandle } from \"./actions-popup\"\nimport {\n cleanupMountedEntry,\n mountEntry,\n setEntryVisibility,\n type MountedEntry,\n} from \"./mount\"\nimport type { ViewRegistrar } from \"./registry\"\nimport {\n createFooterDivider,\n createFooterHintButton,\n createHint,\n createStackShell,\n type StackShell,\n} from \"./shell\"\nimport type {\n CloudAdapter,\n HighlightController,\n ShellAction,\n ShellHint,\n View,\n ViewContext,\n} from \"./types\"\n\nconst SOFT_STACK_CAP = 10\n\nexport interface ViewStackOptions {\n container: HTMLElement\n views: ViewRegistrar\n session: SessionStore\n registry: Registry\n cloud?: CloudAdapter | null\n sdkCloud: CloudAdapter\n highlight: HighlightController\n globalActions?: (ctx: ViewContext) => ShellAction[]\n shortcut?: PaletteShortcut\n dev?: boolean\n}\n\nexport interface ViewStack {\n /**\n * The actions popup belonging to the currently mounted stack shell, or\n * `null` when the shell is not mounted. Exposed so the unified shadow-root\n * keydown handler can intercept keys while the popup is open.\n */\n getActionsPopup(): ActionsPopupHandle | null\n destroy(): void\n}\n\nfunction resolveViewFocusTarget(entry: MountedEntry): HTMLElement | null {\n const fn = entry.view.focusTarget\n if (!fn) return null\n try {\n const target = fn(entry.host, entry.ctx)\n if (target && entry.host.contains(target)) return target\n } catch (err) {\n console.error(`[uidex] view \"${entry.view.id}\" focusTarget() threw`, err)\n }\n return null\n}\n\nfunction focusTopAfterChange(\n entry: MountedEntry,\n searchInput: HTMLInputElement\n): void {\n const preferred = resolveViewFocusTarget(entry)\n const target =\n preferred && preferred !== searchInput ? preferred : searchInput\n const focus = () => {\n try {\n target.focus({ preventScroll: true })\n } catch {\n /* ignore */\n }\n }\n focus()\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(focus)\n }\n}\n\nfunction sameRef(a: MountedEntry[\"ref\"], b: MountedEntry[\"ref\"]): boolean {\n if (a === b) return true\n if (a === null || b === null) return false\n return a.kind === b.kind && a.id === b.id\n}\n\nfunction resolveHints(view: View, ctx: ViewContext): ShellHint[] {\n const h = view.hints\n if (!h) return []\n if (typeof h === \"function\") {\n try {\n return h(ctx) ?? []\n } catch (err) {\n console.error(`[uidex] view \"${view.id}\" hints() threw`, err)\n return []\n }\n }\n return h\n}\n\nfunction resolveTitle(view: View, ctx: ViewContext): string {\n const t = view.title\n if (!t) return \"\"\n if (typeof t === \"function\") {\n try {\n return t(ctx) ?? \"\"\n } catch (err) {\n console.error(`[uidex] view \"${view.id}\" title() threw`, err)\n return \"\"\n }\n }\n return t\n}\n\nfunction resolveActions(\n view: View,\n ctx: ViewContext,\n globalActions?: (ctx: ViewContext) => ShellAction[]\n): ShellAction[] {\n const result: ShellAction[] = []\n const fn = view.actions\n if (fn) {\n try {\n const viewActions = fn(ctx) ?? []\n result.push(...viewActions)\n } catch (err) {\n console.error(`[uidex] view \"${view.id}\" actions() threw`, err)\n }\n }\n if (globalActions) {\n try {\n const globals = globalActions(ctx) ?? []\n result.push(...globals)\n } catch (err) {\n console.error(`[uidex] globalActions() threw`, err)\n }\n }\n return result\n}\n\nexport function createViewStack(options: ViewStackOptions): ViewStack {\n const { container, views, session, registry, highlight, sdkCloud } = options\n const cloud = options.cloud ?? null\n const dev = options.dev ?? detectDev()\n\n const mounted: MountedEntry[] = []\n\n let shell: StackShell | null = null\n let warnedForDepth = 0\n let lastStack: readonly ViewStackEntry[] | null = null\n let pendingFallbackQuery: string | null = null\n let scrollAreaSeq = 0\n let hintChangeSub: (() => void) | null = null\n let highlightActionsSub: (() => void) | null = null\n\n function ensureShell(): StackShell {\n if (shell) return shell\n shell = createStackShell(\n container,\n {\n onBack: () => {\n const { actions, stack } = session.getState()\n if (stack.length <= 1) {\n actions.clearStack()\n actions.pushStack({ id: \"command-palette\", ref: null })\n } else {\n actions.popStack()\n }\n },\n onBackdropClick: () => session.getState().actions.clearStack(),\n onSearchInput: (value) => {\n const top = mounted[mounted.length - 1]\n if (!top) return\n if (top.mounted.onSearch) {\n top.mounted.onSearch(value)\n return\n }\n if (top.view.id === \"command-palette\") return\n pendingFallbackQuery = value\n session\n .getState()\n .actions.pushStack({ id: \"command-palette\", ref: null })\n },\n },\n { shortcut: options.shortcut }\n )\n return shell\n }\n\n function destroyShell(): void {\n hintChangeSub?.()\n hintChangeSub = null\n highlightActionsSub?.()\n highlightActionsSub = null\n shell?.destroy()\n shell = null\n pendingFallbackQuery = null\n }\n\n function syncHighlight(): void {\n const top = mounted[mounted.length - 1]\n if (!top || !top.view.matches || !top.ctx.ref) {\n highlight.hide()\n return\n }\n highlight.show(top.ctx.ref, {\n color: KIND_STYLE[top.ctx.ref.kind].color,\n })\n }\n\n function updateChrome(): void {\n if (!shell) return\n const top = mounted[mounted.length - 1]\n if (!top) return\n\n const atRoot = mounted.length <= 1 && top.view.id === \"command-palette\"\n shell.backBtn.hidden = atRoot\n shell.searchIcon.hidden = !atRoot\n\n const searchable = top.view.searchable !== false\n shell.searchInput.hidden = !searchable\n const titleText = searchable ? \"\" : resolveTitle(top.view, top.ctx)\n shell.headerTitle.textContent = titleText\n shell.headerTitle.hidden = searchable || !titleText\n\n shell.footerLeft.replaceChildren()\n const refEntity = top.ctx.ref\n ? top.ctx.registry.get(top.ctx.ref.kind, top.ctx.ref.id)\n : null\n if (refEntity) {\n shell.footerLeft.append(\n renderKindChip({\n entity: refEntity,\n withKindName: true,\n })\n )\n } else {\n shell.footerLeft.append(shell.logo)\n }\n\n hintChangeSub?.()\n hintChangeSub = null\n highlightActionsSub?.()\n highlightActionsSub = null\n\n shell.footerRight.replaceChildren()\n const footerItems: HTMLElement[] = []\n\n const enterHint = resolveHints(top.view, top.ctx).find((h) =>\n h.key.includes(\"↵\")\n )\n const src = top.mounted.submitIntent\n if (src) {\n const key = enterHint?.key ?? \"↵\"\n const intent = src.get()\n const fallbackLabel = enterHint?.label ?? \"Open\"\n const hint = createFooterHintButton(\n key,\n intent?.label ?? fallbackLabel,\n () => src.get()?.perform()\n )\n footerItems.push(hint.element)\n hintChangeSub = src.subscribe(() => {\n const next = src.get()\n hint.setLabel(next?.label ?? fallbackLabel)\n })\n } else if (enterHint) {\n footerItems.push(createHint(enterHint.key, enterHint.label))\n }\n\n const actionsDivider = createFooterDivider()\n const viewActions = resolveActions(top.view, top.ctx)\n const hlSrc = top.mounted.highlightActions\n\n const syncActions = (): void => {\n const hlActions = hlSrc?.get() ?? []\n const combined = [...hlActions, ...viewActions]\n shell!.actionsPopup.setActions(combined)\n const visible = combined.length > 0\n shell!.actionsPopup.trigger.hidden = !visible\n actionsDivider.hidden = !visible || footerItems.length === 0\n }\n\n if (hlSrc) {\n highlightActionsSub = hlSrc.subscribe(syncActions)\n }\n\n for (let i = 0; i < footerItems.length; i++) {\n if (i > 0) shell.footerRight.append(createFooterDivider())\n shell.footerRight.append(footerItems[i])\n }\n shell.footerRight.append(actionsDivider)\n shell.footerRight.append(shell.actionsPopup.trigger)\n syncActions()\n }\n\n function render(): void {\n const stack = session.getState().stack\n if (stack === lastStack) return\n lastStack = stack\n\n if (dev && stack.length > SOFT_STACK_CAP && stack.length > warnedForDepth) {\n console.warn(\n `[uidex] View stack depth ${stack.length} exceeds soft cap of ${SOFT_STACK_CAP}`\n )\n warnedForDepth = stack.length\n }\n if (stack.length <= SOFT_STACK_CAP) warnedForDepth = 0\n\n const resolved: Array<{ entry: ViewStackEntry; view: View }> = []\n for (const entry of stack) {\n const view = views.get(entry.id)\n if (view) resolved.push({ entry, view })\n }\n\n const priorTop = mounted[mounted.length - 1] ?? null\n\n let commonPrefix = 0\n while (\n commonPrefix < resolved.length &&\n commonPrefix < mounted.length &&\n mounted[commonPrefix].id === resolved[commonPrefix].view.id &&\n sameRef(mounted[commonPrefix].ref, resolved[commonPrefix].entry.ref)\n ) {\n commonPrefix++\n }\n\n const popped = mounted.splice(commonPrefix)\n for (let i = popped.length - 1; i >= 0; i--) {\n cleanupMountedEntry(popped[i])\n }\n\n if (resolved.length > commonPrefix) {\n const active = ensureShell()\n for (let i = commonPrefix; i < resolved.length; i++) {\n const record = mountEntry(resolved[i].entry, resolved[i].view, {\n container: active.hostContainer,\n searchInput: active.searchInput,\n views,\n session,\n registry,\n cloud,\n sdkCloud,\n highlight,\n nextScrollSeq: () => ++scrollAreaSeq,\n })\n if (record) mounted.push(record)\n }\n }\n\n if (shell?.actionsPopup.isOpen() && popped.length > 0) {\n shell.actionsPopup.close()\n }\n\n if (mounted.length === 0) {\n destroyShell()\n highlight.hide()\n return\n }\n const topIndex = mounted.length - 1\n for (let i = 0; i < mounted.length; i++) {\n setEntryVisibility(mounted[i], i === topIndex)\n }\n updateChrome()\n syncHighlight()\n\n const newTop = mounted[topIndex]\n if (newTop !== priorTop && shell) {\n const fallbackQuery = pendingFallbackQuery\n pendingFallbackQuery = null\n const initialQuery = fallbackQuery ?? \"\"\n if (fallbackQuery === null) {\n shell.searchInput.value = \"\"\n }\n try {\n newTop.mounted.onSearch?.(initialQuery)\n } catch (err) {\n console.error(`[uidex] view \"${newTop.view.id}\" onSearch threw`, err)\n }\n focusTopAfterChange(newTop, shell.searchInput)\n }\n }\n\n render()\n const unsubscribe = session.subscribe(render)\n\n return {\n getActionsPopup() {\n return shell?.actionsPopup ?? null\n },\n destroy() {\n unsubscribe()\n while (mounted.length > 0) {\n const entry = mounted.pop()!\n cleanupMountedEntry(entry)\n }\n destroyShell()\n highlight.hide()\n },\n }\n}\n","export const BUILT_IN_VIEW_IDS = {\n commandPalette: \"command-palette\",\n elements: \"elements\",\n explorePage: \"explore-page\",\n features: \"features\",\n feedback: \"feedback\",\n flows: \"flows\",\n glossary: \"glossary\",\n jiraFeedback: \"jira-feedback\",\n pages: \"pages\",\n primitives: \"primitives\",\n regions: \"regions\",\n sdkFeedback: \"sdk-feedback\",\n widgets: \"widgets\",\n} as const\n","import {\n Compass,\n Copy,\n ExternalLink,\n MessageCircleWarning,\n Star,\n StarOff,\n TicketPlus,\n Workflow,\n createElement as createLucideElement,\n} from \"lucide\"\nimport {\n displayName,\n KIND_STYLE,\n type Entity,\n type EntityKind,\n type EntityRef,\n type Page,\n} from \"../../entities\"\nimport { formatShortcutLabel, type PaletteShortcut } from \"../../surface/keys\"\nimport { matchesQuery } from \"../builder/filter\"\nimport { formatLocation } from \"../builder/format-location\"\nimport { buildPageRouteMap, collectPageContext } from \"../builder/page-context\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type {\n CloudAdapter,\n ShellAction,\n View,\n ViewContext,\n} from \"../core/types\"\nimport { PALETTE_GROUPS } from \"../labels\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\ntype PaletteItemPayload =\n | { type: \"view\"; id: string; ref?: EntityRef | null }\n | { type: \"entity\"; ref: EntityRef }\n\ninterface PaletteItem extends ListItem {\n payload: PaletteItemPayload\n}\n\nfunction openAction(onSelect: () => void): ShellAction {\n return {\n id: \"open\",\n label: \"Open\",\n icon: () => createLucideElement(ExternalLink),\n perform: onSelect,\n }\n}\n\nfunction favoriteAction(ref: EntityRef, ctx: ViewContext): ShellAction {\n const isFav = ctx.isFavorite(ref)\n return {\n id: \"toggle-favorite\",\n label: isFav ? \"Remove from Favorites\" : \"Add to Favorites\",\n shortcut: \"⇧⌘F\",\n icon: () => createLucideElement(isFav ? StarOff : Star),\n perform: () => {\n ctx.toggleFavorite(ref)\n ctx.close()\n ctx.push({ id: BUILT_IN_VIEW_IDS.commandPalette, ref: null })\n },\n }\n}\n\nfunction entityActions(\n ref: EntityRef,\n entity: Entity | undefined,\n ctx: ViewContext,\n onSelect: () => void\n): ShellAction[] {\n const actions: ShellAction[] = [openAction(onSelect)]\n if (entity && \"loc\" in entity && entity.loc) {\n const path = formatLocation(entity.loc)\n if (path) {\n actions.push({\n id: \"copy-path\",\n label: \"Copy Source Path\",\n icon: () => createLucideElement(Copy),\n perform: () => void navigator.clipboard.writeText(path),\n })\n }\n }\n actions.push({\n id: \"report-feedback\",\n label: \"Submit Report\",\n icon: () => createLucideElement(MessageCircleWarning),\n perform: () => ctx.push({ id: BUILT_IN_VIEW_IDS.feedback, ref }),\n })\n if (\n (ctx.cloud as CloudAdapter | null)?.integrations.getCachedConfig()?.hasJira\n ) {\n actions.push({\n id: \"create-jira-issue\",\n label: \"Submit Jira Bug\",\n icon: () => createLucideElement(TicketPlus),\n perform: () => ctx.push({ id: BUILT_IN_VIEW_IDS.jiraFeedback, ref }),\n })\n }\n actions.push(favoriteAction(ref, ctx))\n return actions\n}\n\nfunction viewActions(onSelect: () => void): ShellAction[] {\n return [openAction(onSelect)]\n}\n\nconst CURRENT_PAGE_GROUP = PALETTE_GROUPS.currentPage\n\nfunction pageDetailsRow(\n page: Page,\n pageRoutes: ReadonlyMap<string, string>,\n ctx: ViewContext\n): PaletteItem {\n const ref: EntityRef = { kind: \"page\", id: page.id }\n const onSelect = () => ctx.navigate(ref)\n const item: PaletteItem = {\n value: `entity:${ref.kind}:${ref.id}`,\n label: displayName(page),\n group: CURRENT_PAGE_GROUP,\n tag: `${ref.kind}:${ref.id}`,\n preview: ref,\n entityChip: { entity: page },\n actions: entityActions(ref, page, ctx, onSelect),\n payload: { type: \"entity\", ref },\n }\n const path = pageRoutes.get(page.id)\n if (path) item.subtitle = path\n return item\n}\n\nfunction explorePageRow(totalOnPage: number, ctx: ViewContext): PaletteItem {\n const onSelect = () =>\n ctx.push({ id: BUILT_IN_VIEW_IDS.explorePage, ref: null })\n return {\n value: `view:${BUILT_IN_VIEW_IDS.explorePage}`,\n label: \"Explore Page\",\n subtitle: totalOnPage === 1 ? \"1 item\" : `${totalOnPage} items`,\n group: CURRENT_PAGE_GROUP,\n tag: BUILT_IN_VIEW_IDS.explorePage,\n leading: () => createLucideElement(Compass),\n actions: viewActions(onSelect),\n payload: { type: \"view\", id: BUILT_IN_VIEW_IDS.explorePage },\n }\n}\n\nfunction flowsRow(count: number, ctx: ViewContext): PaletteItem {\n const onSelect = () => ctx.push({ id: BUILT_IN_VIEW_IDS.flows, ref: null })\n return {\n value: `view:${BUILT_IN_VIEW_IDS.flows}`,\n label: \"Flows\",\n subtitle: String(count),\n group: PALETTE_GROUPS.commands,\n tag: BUILT_IN_VIEW_IDS.flows,\n leading: () => createLucideElement(Workflow),\n actions: viewActions(onSelect),\n payload: { type: \"view\", id: BUILT_IN_VIEW_IDS.flows },\n }\n}\n\nconst ENTITY_KIND_VIEWS: { kind: EntityKind; viewId: string }[] = [\n { kind: \"page\", viewId: BUILT_IN_VIEW_IDS.pages },\n { kind: \"feature\", viewId: BUILT_IN_VIEW_IDS.features },\n { kind: \"widget\", viewId: BUILT_IN_VIEW_IDS.widgets },\n { kind: \"region\", viewId: BUILT_IN_VIEW_IDS.regions },\n { kind: \"element\", viewId: BUILT_IN_VIEW_IDS.elements },\n { kind: \"primitive\", viewId: BUILT_IN_VIEW_IDS.primitives },\n]\n\nfunction entityKindRow(\n kind: EntityKind,\n viewId: string,\n count: number,\n ctx: ViewContext\n): PaletteItem {\n const style = KIND_STYLE[kind]\n const onSelect = () => ctx.push({ id: viewId, ref: null })\n const label = style.label + \"s\"\n return {\n value: `view:${viewId}`,\n label,\n subtitle: String(count),\n group: PALETTE_GROUPS.commands,\n tag: viewId,\n leading: () => createLucideElement(style.icon),\n actions: viewActions(onSelect),\n payload: { type: \"view\", id: viewId },\n }\n}\n\nfunction collectNavigation(ctx: ViewContext): PaletteItem[] {\n const out: PaletteItem[] = []\n for (const view of ctx.views.list()) {\n if (view.id === BUILT_IN_VIEW_IDS.commandPalette) continue\n if (view.id === BUILT_IN_VIEW_IDS.explorePage) continue\n if (view.id === BUILT_IN_VIEW_IDS.flows) continue\n if (view.id === BUILT_IN_VIEW_IDS.elements) continue\n if (view.id === BUILT_IN_VIEW_IDS.widgets) continue\n if (view.id === BUILT_IN_VIEW_IDS.regions) continue\n if (view.id === BUILT_IN_VIEW_IDS.pages) continue\n if (view.id === BUILT_IN_VIEW_IDS.features) continue\n if (view.id === BUILT_IN_VIEW_IDS.primitives) continue\n if (!view.palette) continue\n const onSelect = () => ctx.push({ id: view.id, ref: null })\n out.push({\n value: `view:${view.id}`,\n label: view.palette.label,\n group: view.palette.group ?? PALETTE_GROUPS.commands,\n shortcut: view.palette.shortcut,\n tag: view.id,\n leading: view.palette.icon,\n actions: viewActions(onSelect),\n payload: { type: \"view\", id: view.id },\n })\n }\n return out\n}\n\nexport function createCommandPaletteView(shortcut?: PaletteShortcut): View {\n const shortcutLabel = formatShortcutLabel(shortcut ?? { key: \"k\" })\n return {\n id: BUILT_IN_VIEW_IDS.commandPalette,\n palette: { label: \"Command Palette\", shortcut: shortcutLabel },\n title: \"Command Palette\",\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx): ListSurface => {\n const pageCtx = collectPageContext(ctx)\n const pageRoutes = buildPageRouteMap(ctx)\n\n const items: PaletteItem[] = []\n const favSet = new Set(\n ctx.views.favorites().map((r) => `${r.kind}:${r.id}`)\n )\n\n for (const ref of ctx.views.favorites()) {\n if (ref.kind === \"route\") continue\n const entity = ctx.registry.get(ref.kind, ref.id)\n if (!entity) continue\n const style = KIND_STYLE[ref.kind]\n const onSelect = () => ctx.navigate(ref)\n items.push({\n value: `favorite:${ref.kind}:${ref.id}`,\n label: displayName(entity),\n tag: `${ref.kind}:${ref.id}`,\n group: PALETTE_GROUPS.favorites,\n preview: ref,\n entityChip: { entity },\n leading: () => createLucideElement(style.icon),\n actions: entityActions(ref, entity, ctx, onSelect),\n payload: { type: \"entity\", ref },\n })\n }\n\n if (pageCtx.pageEntity) {\n items.push(pageDetailsRow(pageCtx.pageEntity, pageRoutes, ctx))\n }\n\n const onPageCount = pageCtx.composed.length + pageCtx.dom.length\n if (onPageCount > 0) items.push(explorePageRow(onPageCount, ctx))\n\n items.push(...collectNavigation(ctx))\n for (const { kind, viewId } of ENTITY_KIND_VIEWS) {\n const count = ctx.registry.list(kind).length\n if (count > 0) items.push(entityKindRow(kind, viewId, count, ctx))\n }\n const flowCount = ctx.registry.list(\"flow\").length\n if (flowCount > 0) items.push(flowsRow(flowCount, ctx))\n\n const sdkFeedbackSelect = () =>\n ctx.push({ id: BUILT_IN_VIEW_IDS.sdkFeedback, ref: null })\n items.push({\n value: `view:${BUILT_IN_VIEW_IDS.sdkFeedback}`,\n label: \"Send Feedback\",\n group: PALETTE_GROUPS.commands,\n tag: BUILT_IN_VIEW_IDS.sdkFeedback,\n leading: () => createLucideElement(MessageCircleWarning),\n actions: viewActions(sdkFeedbackSelect),\n payload: { type: \"view\", id: BUILT_IN_VIEW_IDS.sdkFeedback },\n })\n\n for (const ref of ctx.views.recents()) {\n if (ref.kind === \"route\") continue\n if (favSet.has(`${ref.kind}:${ref.id}`)) continue\n const entity = ctx.registry.get(ref.kind, ref.id)\n if (!entity) continue\n const style = KIND_STYLE[ref.kind]\n const onSelect = () => ctx.navigate(ref)\n items.push({\n value: `recent:${ref.kind}:${ref.id}`,\n label: displayName(entity),\n tag: `${ref.kind}:${ref.id}`,\n group: PALETTE_GROUPS.recents,\n preview: ref,\n entityChip: { entity },\n leading: () => createLucideElement(style.icon),\n actions: entityActions(ref, entity, ctx, onSelect),\n payload: { type: \"entity\", ref },\n })\n }\n\n const initialHighlight = ctx.ref\n ? `entity:${ctx.ref.kind}:${ctx.ref.id}`\n : undefined\n\n const filter = (item: ListItem, query: string): boolean => {\n const palette = item as PaletteItem\n const rawId =\n palette.payload.type === \"entity\" ? palette.payload.ref.id : \"\"\n return matchesQuery(`${item.label} ${rawId} ${item.group ?? \"\"}`, query)\n }\n\n return {\n kind: \"list\",\n id: \"uidex-command-palette\",\n items,\n defaultHighlight: initialHighlight,\n filter,\n onSelect: (item) => {\n const palette = item as PaletteItem\n if (palette.payload.type === \"view\") {\n ctx.push({\n id: palette.payload.id,\n ref: palette.payload.ref ?? null,\n })\n return\n }\n ctx.navigate(palette.payload.ref)\n },\n }\n },\n }\n}\n","import type { Location } from \"../../entities\"\n\nexport function formatLocation(loc: Location | undefined): string | null {\n if (!loc) return null\n const suffix =\n loc.line !== undefined\n ? loc.column !== undefined\n ? `:${loc.line}:${loc.column}`\n : `:${loc.line}`\n : \"\"\n return `${loc.file}${suffix}`\n}\n","import type { Entity, EntityRef, Page } from \"../../entities\"\nimport {\n SURFACE_IGNORE_SELECTOR,\n UIDEX_ATTR_TO_KIND,\n} from \"../../surface/constants\"\nimport type { ViewContext } from \"../core/types\"\n\nconst ON_THIS_PAGE_SELECTOR = UIDEX_ATTR_TO_KIND.map(\n ([attr]) => `[${attr}]`\n).join(\",\")\n\nfunction routePatternToRegex(pattern: string): RegExp {\n if (pattern === \"/\") return /^\\/$/\n const parts = pattern.split(\"/\").filter(Boolean)\n const regexParts = parts.map((seg) => {\n if (/^\\[\\.{3}[^\\]]+\\]$/.test(seg)) return \".+\"\n if (/^\\[[^\\]]+\\]$/.test(seg)) return \"[^/]+\"\n return seg.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n })\n return new RegExp(`^/${regexParts.join(\"/\")}/?$`)\n}\n\n/** Resolve the page entity for the current URL by walking the registry's routes. */\nexport function findCurrentPageId(ctx: ViewContext): string | null {\n if (typeof location === \"undefined\") return null\n const pathname = location.pathname || \"/\"\n const routes = ctx.registry.list(\"route\")\n let best: { path: string; page: string } | null = null\n for (const route of routes) {\n if (!routePatternToRegex(route.path).test(pathname)) continue\n if (!best || route.path.length > best.path.length) {\n best = { path: route.path, page: route.page }\n }\n }\n return best?.page ?? null\n}\n\n/** First route path per page id, for subtitle rendering in palette rows. */\nexport function buildPageRouteMap(\n ctx: ViewContext\n): ReadonlyMap<string, string> {\n const map = new Map<string, string>()\n for (const route of ctx.registry.list(\"route\")) {\n if (!map.has(route.page)) map.set(route.page, route.path)\n }\n return map\n}\n\nexport interface PageEntityHit {\n entity: Entity\n ref: EntityRef\n /** DOM node that surfaced this entity, if discovered via `data-uidex*` scan. */\n node?: Element | null\n}\n\nexport interface PageContext {\n pageId: string | null\n pageEntity: Page | null\n /** Features / widgets the page entity declares via `uidex.composes`. */\n composed: PageEntityHit[]\n /** Entities discovered by scanning the DOM for `data-uidex*` attributes. */\n dom: PageEntityHit[]\n}\n\n/**\n * Collect the entities relevant to the current page: the page entity itself,\n * its declared composes (features + widgets), and anything discovered via the\n * DOM scan. Dedup by `kind:id`; the page entity always wins over DOM dups.\n */\nexport function collectPageContext(ctx: ViewContext): PageContext {\n const seen = new Set<string>()\n const composed: PageEntityHit[] = []\n const dom: PageEntityHit[] = []\n\n const pageId = findCurrentPageId(ctx)\n const pageEntity = pageId ? (ctx.registry.get(\"page\", pageId) ?? null) : null\n\n if (pageEntity) {\n seen.add(`page:${pageEntity.id}`)\n for (const ref of pageEntity.meta?.composes ?? []) {\n if (ref.kind !== \"feature\" && ref.kind !== \"widget\") continue\n const entity = ctx.registry.get(ref.kind, ref.id)\n if (!entity) continue\n const key = `${ref.kind}:${ref.id}`\n if (seen.has(key)) continue\n seen.add(key)\n composed.push({ entity, ref })\n }\n }\n\n if (typeof document !== \"undefined\") {\n const nodes = document.querySelectorAll<HTMLElement>(ON_THIS_PAGE_SELECTOR)\n for (const node of nodes) {\n if (node.closest(SURFACE_IGNORE_SELECTOR)) continue\n for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {\n const id = node.getAttribute(attr)\n if (!id) continue\n const entity = ctx.registry.get(kind, id)\n if (!entity) continue\n const key = `${kind}:${id}`\n if (seen.has(key)) break\n seen.add(key)\n dom.push({ entity, ref: { kind, id }, node })\n break\n }\n }\n }\n\n return { pageId, pageEntity, composed, dom }\n}\n","import { domToPng } from \"modern-screenshot\"\nimport {\n SURFACE_HOST_CLASS,\n SURFACE_CONTAINER_CLASS,\n} from \"../surface/constants\"\n\nexport interface CaptureScreenshotOptions {\n target?: HTMLElement\n maxWidth?: number\n}\n\nfunction resolveBackgroundColor(el: HTMLElement): string {\n let node: HTMLElement | null = el\n while (node) {\n const bg = getComputedStyle(node).backgroundColor\n if (bg && bg !== \"transparent\" && bg !== \"rgba(0, 0, 0, 0)\") return bg\n node = node.parentElement\n }\n return \"#ffffff\"\n}\n\nfunction isUidexChrome(node: Node): boolean {\n if (node.nodeType !== Node.ELEMENT_NODE) return false\n const el = node as Element\n if (el.shadowRoot !== null) return true\n const cls = el.classList\n return (\n cls.contains(SURFACE_HOST_CLASS) || cls.contains(SURFACE_CONTAINER_CLASS)\n )\n}\n\nexport async function captureScreenshot(\n options: CaptureScreenshotOptions = {}\n): Promise<string> {\n if (typeof document === \"undefined\") {\n throw new Error(\"captureScreenshot: no document available\")\n }\n const target = options.target ?? document.body\n if (!target) throw new Error(\"captureScreenshot: no target\")\n\n const width = target.scrollWidth || target.clientWidth\n const scale =\n options.maxWidth && width > options.maxWidth ? options.maxWidth / width : 1\n\n const padding = 16\n const height = target.scrollHeight || target.clientHeight\n\n return domToPng(target, {\n scale,\n width: width + padding * 2,\n height: height + padding * 2,\n backgroundColor: resolveBackgroundColor(target),\n style: { padding: `${padding}px` },\n filter: (node) => !isUidexChrome(node),\n })\n}\n","export interface FeedbackContextSnapshot {\n url: string\n path: string\n userAgent: string\n pageTitle: string | undefined\n timestamp: string\n viewport: { width: number; height: number }\n screen: { width: number; height: number }\n}\n\nexport function collectFeedbackContextSnapshot(): FeedbackContextSnapshot {\n const nav = typeof navigator !== \"undefined\" ? navigator : undefined\n const loc = typeof location !== \"undefined\" ? location : undefined\n const win = typeof window !== \"undefined\" ? window : undefined\n const doc = typeof document !== \"undefined\" ? document : undefined\n const viewport = {\n width: win?.innerWidth ?? 0,\n height: win?.innerHeight ?? 0,\n }\n const screenSize = {\n width: typeof screen !== \"undefined\" ? screen.width : 0,\n height: typeof screen !== \"undefined\" ? screen.height : 0,\n }\n return {\n url: loc?.href ?? \"\",\n path: loc?.pathname ?? \"\",\n userAgent: nav?.userAgent ?? \"\",\n pageTitle: doc?.title,\n timestamp: new Date().toISOString(),\n viewport,\n screen: screenSize,\n }\n}\n","import { type Entity, type EntityRef, type Flow } from \"../../entities\"\nimport type { ViewContext } from \"../core/types\"\n\nexport function resolveRefs(\n ctx: ViewContext,\n refs: readonly EntityRef[] | undefined\n): readonly Entity[] {\n if (!refs) return []\n const out: Entity[] = []\n for (const ref of refs) {\n const entity = ctx.registry.get(ref.kind, ref.id)\n if (entity) out.push(entity)\n }\n return out\n}\n\nexport function resolveFlows(\n ctx: ViewContext,\n flowIds: readonly string[] | undefined\n): readonly Flow[] {\n if (!flowIds) return []\n const out: Flow[] = []\n for (const id of flowIds) {\n const flow = ctx.registry.get(\"flow\", id)\n if (flow) out.push(flow)\n }\n return out\n}\n\nexport function collectFlowsTouching(\n ctx: ViewContext,\n targetId: string\n): readonly Flow[] {\n const out: Flow[] = []\n for (const flow of ctx.registry.list(\"flow\")) {\n if (flow.touches.includes(targetId)) out.push(flow)\n }\n return out\n}\n","import {\n displayName,\n type Entity,\n type EntityByKind,\n type EntityKind,\n type EntityRef,\n type Location,\n type MetaEntityKind,\n} from \"../../entities\"\nimport { captureScreenshot } from \"../../internal/screenshot\"\nimport { resolveEntityElement } from \"../../surface/inspector\"\nimport { UIDEX_ATTR_TO_KIND } from \"../../surface/constants\"\nimport { collectFeedbackContextSnapshot } from \"../built-in/feedback/snapshot\"\nimport type {\n DetailAction,\n DetailSection,\n DetailSubtitle,\n DetailSurface,\n} from \"../core/surface\"\nimport { BUILT_IN_VIEW_IDS } from \"../built-in/ids\"\nimport type { CloudAdapter, ShellHint, View, ViewContext } from \"../core/types\"\nimport { SECTION_LABELS } from \"../labels\"\nimport { formatLocation } from \"./format-location\"\nimport { resolveFlows, resolveRefs } from \"./resolve\"\n\ntype MetaEntity = EntityByKind<MetaEntityKind>\n\nfunction collectDomChildren(\n ctx: ViewContext,\n ref: EntityRef\n): readonly Entity[] {\n const root = resolveEntityElement(ref)\n if (!root) return []\n const children: Entity[] = []\n const seen = new Set<string>()\n for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {\n for (const node of root.querySelectorAll(`[${attr}]`)) {\n if (node === root) continue\n const id = node.getAttribute(attr)\n if (!id) continue\n const key = `${kind}:${id}`\n if (seen.has(key)) continue\n seen.add(key)\n const entity = ctx.registry.get(kind, id)\n if (entity) children.push(entity)\n }\n }\n return children\n}\n\nconst DOM_BACKED_KINDS: ReadonlySet<EntityKind> = new Set([\n \"element\",\n \"region\",\n \"widget\",\n \"primitive\",\n])\n\nconst DETAIL_HINTS: readonly ShellHint[] = [{ key: \"↵\", label: \"Open\" }]\n\nexport function copyPathAction(ref: EntityRef, loc?: Location): DetailAction {\n const identifier = `${ref.kind}:${ref.id}`\n const path = formatLocation(loc) ?? identifier\n return {\n id: \"copy-path\",\n label: \"Copy Source Path\",\n ariaLabel: `Copy path ${path}`,\n icon: \"copy\",\n copy: path,\n intent: { kind: \"external\", describe: \"clipboard\" },\n }\n}\n\nexport function feedbackAction(ref: EntityRef): DetailAction {\n return {\n id: \"report-feedback\",\n label: \"Submit Report\",\n icon: \"message-circle-warning\",\n push: { id: BUILT_IN_VIEW_IDS.feedback, ref },\n intent: {\n kind: \"push\",\n viewId: BUILT_IN_VIEW_IDS.feedback,\n refKind: ref.kind,\n },\n }\n}\n\nexport function jiraAction(ref: EntityRef): DetailAction {\n return {\n id: \"create-jira-issue\",\n label: \"Submit Jira Bug\",\n icon: \"ticket-plus\",\n push: { id: BUILT_IN_VIEW_IDS.jiraFeedback, ref },\n intent: {\n kind: \"push\",\n viewId: BUILT_IN_VIEW_IDS.jiraFeedback,\n refKind: ref.kind,\n },\n }\n}\n\nexport function buildSnapshotMarkdown(ref: EntityRef, loc?: Location): string {\n const snapshot = collectFeedbackContextSnapshot()\n const sourcePath = formatLocation(loc)\n const lines: string[] = [\n `#### ${ref.kind}: ${ref.id}`,\n `- **Kind:** ${ref.kind}`,\n `- **ID:** \\`${ref.id}\\``,\n ...(sourcePath ? [`- **Source:** \\`${sourcePath}\\``] : []),\n `#### Context`,\n `- **URL:** ${snapshot.url}`,\n `- **Path:** ${snapshot.path}`,\n ...(snapshot.pageTitle ? [`- **Page Title:** ${snapshot.pageTitle}`] : []),\n `- **Viewport:** ${snapshot.viewport.width}×${snapshot.viewport.height}`,\n `- **Screen:** ${snapshot.screen.width}×${snapshot.screen.height}`,\n `- **User Agent:** ${snapshot.userAgent}`,\n `- **Timestamp:** ${snapshot.timestamp}`,\n ]\n return lines.join(\"\\n\") + \"\\n\"\n}\n\nexport function copySnapshotAction(\n ref: EntityRef,\n loc?: Location\n): DetailAction {\n return {\n id: \"copy-snapshot\",\n label: \"Copy Markdown Snapshot\",\n icon: \"view\",\n copy: buildSnapshotMarkdown(ref, loc),\n intent: { kind: \"external\", describe: \"clipboard\" },\n }\n}\n\nexport function highlightElementAction(ref: EntityRef): DetailAction {\n return {\n id: \"highlight-element\",\n label: \"Highlight Element\",\n icon: \"highlighter\",\n highlight: ref,\n intent: { kind: \"external\", describe: \"highlight\" },\n }\n}\n\nexport function copyScreenshotAction(ref: EntityRef): DetailAction {\n return {\n id: \"copy-screenshot\",\n label: \"Copy Screenshot\",\n icon: \"camera\",\n intent: { kind: \"external\", describe: \"clipboard\" },\n run: async (ctx) => {\n try {\n ctx.setLabel(\"Capturing…\")\n const target = resolveEntityElement(ref) ?? undefined\n const dataUrl = await captureScreenshot({\n target,\n maxWidth: 1280,\n })\n const res = await fetch(dataUrl)\n const blob = await res.blob()\n await navigator.clipboard.write([\n new ClipboardItem({ [blob.type]: blob }),\n ])\n ctx.setLabel(\"Copied!\", 1200)\n } catch {\n ctx.setLabel(\"Copy failed\", 1500)\n }\n },\n }\n}\n\nexport interface EntityDetailViewConfig<K extends MetaEntityKind> {\n id: string\n kind: K\n fallbackTitle: string\n /** Render the acceptance section when the entity declares acceptance. Default: true. */\n offerAcceptance?: boolean\n /** Extra sections inserted between the acceptance section and composes. */\n extraSections?(\n ctx: ViewContext,\n entity: EntityByKind<K>\n ): readonly DetailSection[]\n /** Override subtitle. Default: `{ rawId: entity.id }`. */\n subtitle?(\n ctx: ViewContext,\n entity: EntityByKind<K>\n ): DetailSubtitle | undefined\n}\n\nexport function createEntityDetailView<K extends MetaEntityKind>(\n config: EntityDetailViewConfig<K>\n): View {\n const { kind, fallbackTitle, offerAcceptance = true } = config\n return {\n id: config.id,\n matches: (ref) => ref.kind === kind,\n hints: DETAIL_HINTS,\n title: (ctx) => {\n if (!ctx.ref) return fallbackTitle\n const entity = ctx.registry.get(kind, ctx.ref.id)\n return entity ? displayName(entity) : ctx.ref.id\n },\n focusTarget: (host) =>\n host.querySelector<HTMLButtonElement>(\n \"[data-uidex-detail-actions] [data-uidex-detail-action]\"\n ),\n surface: (ctx): DetailSurface => {\n if (!ctx.ref || ctx.ref.kind !== kind) {\n return { kind: \"detail\", entityKind: kind }\n }\n const entity = ctx.registry.get(kind, ctx.ref.id) as\n | EntityByKind<K>\n | undefined\n if (!entity) {\n return { kind: \"detail\", entityKind: kind, notFound: ctx.ref }\n }\n // MetaEntityKind excludes route/flow, so entity always has meta/loc.\n const metaEntity = entity as MetaEntity\n const meta = metaEntity.meta\n\n const actions: DetailAction[] = [\n copyPathAction(ctx.ref, metaEntity.loc),\n copySnapshotAction(ctx.ref, metaEntity.loc),\n ]\n if (DOM_BACKED_KINDS.has(kind) && resolveEntityElement(ctx.ref)) {\n actions.push(highlightElementAction(ctx.ref))\n actions.push(copyScreenshotAction(ctx.ref))\n }\n actions.push(feedbackAction(ctx.ref))\n const cloud = ctx.cloud as CloudAdapter | null\n if (cloud?.integrations.getCachedConfig()?.hasJira) {\n actions.push(jiraAction(ctx.ref))\n }\n\n const sections: DetailSection[] = []\n if (meta?.description) {\n sections.push({ id: \"description\", text: meta.description })\n }\n if (offerAcceptance && meta?.acceptance?.length) {\n sections.push({ id: \"acceptance\", items: meta.acceptance })\n }\n for (const s of config.extraSections?.(ctx, entity) ?? []) {\n sections.push(s)\n }\n sections.push({\n id: \"composes\",\n label: SECTION_LABELS.contains,\n entities: DOM_BACKED_KINDS.has(kind)\n ? collectDomChildren(ctx, ctx.ref)\n : resolveRefs(ctx, meta?.composes),\n filterable: true,\n })\n sections.push({\n id: \"flows\",\n flows: resolveFlows(ctx, meta?.flows),\n filterable: true,\n })\n\n return {\n kind: \"detail\",\n entityKind: kind,\n title: displayName(metaEntity),\n subtitle: config.subtitle?.(ctx, entity),\n actions,\n sections,\n }\n },\n }\n}\n","import type { Entity, EntityRef } from \"../../entities\"\nimport { resolveEntityElement } from \"../../surface/inspector\"\nimport { UIDEX_ATTR_TO_KIND } from \"../../surface/constants\"\nimport { createEntityDetailView } from \"../builder/detail-builder\"\nimport { collectFlowsTouching } from \"../builder/resolve\"\nimport type { DetailSection } from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport { SECTION_LABELS } from \"../labels\"\n\nfunction collectDomParents(ctx: ViewContext, ref: EntityRef): Entity[] {\n const el = resolveEntityElement(ref)\n if (!el) return []\n const parents: Entity[] = []\n const seen = new Set<string>()\n let node = el.parentElement\n while (node) {\n if (node instanceof HTMLElement) {\n for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {\n const id = node.getAttribute(attr)\n if (id) {\n const key = `${kind}:${id}`\n if (!seen.has(key)) {\n seen.add(key)\n const entity = ctx.registry.get(kind, id)\n if (entity) parents.push(entity)\n }\n }\n }\n }\n node = node.parentElement\n }\n return parents\n}\n\nfunction usedBySection(ctx: ViewContext, ref: EntityRef): DetailSection {\n return {\n id: \"used-by\",\n label: SECTION_LABELS.usedBy,\n entities: collectDomParents(ctx, ref),\n filterable: true,\n }\n}\n\nfunction touchedByFlowsSection(\n ctx: Parameters<typeof collectFlowsTouching>[0],\n id: string\n): DetailSection {\n return {\n id: \"flows\",\n flows: collectFlowsTouching(ctx, id),\n filterable: true,\n }\n}\n\nexport const componentDetailView = createEntityDetailView({\n id: \"component-detail\",\n kind: \"element\",\n fallbackTitle: \"Component\",\n extraSections: (ctx, entity) => [\n usedBySection(ctx, { kind: \"element\", id: entity.id }),\n touchedByFlowsSection(ctx, entity.id),\n ],\n})\n\nexport const featureDetailView = createEntityDetailView({\n id: \"feature-detail\",\n kind: \"feature\",\n fallbackTitle: \"Feature\",\n extraSections: (ctx, entity) => [\n usedBySection(ctx, { kind: \"feature\", id: entity.id }),\n ],\n})\n\nexport const regionDetailView = createEntityDetailView({\n id: \"region-detail\",\n kind: \"region\",\n fallbackTitle: \"Region\",\n offerAcceptance: false,\n extraSections: (ctx, entity) => [\n usedBySection(ctx, { kind: \"region\", id: entity.id }),\n ],\n})\n\nexport const widgetDetailView = createEntityDetailView({\n id: \"widget-detail\",\n kind: \"widget\",\n fallbackTitle: \"Widget\",\n extraSections: (ctx, entity) => [\n usedBySection(ctx, { kind: \"widget\", id: entity.id }),\n ],\n})\n\nexport const primitiveDetailView = createEntityDetailView({\n id: \"primitive-detail\",\n kind: \"primitive\",\n fallbackTitle: \"Primitive\",\n offerAcceptance: false,\n extraSections: (ctx, entity) => [\n usedBySection(ctx, { kind: \"primitive\", id: entity.id }),\n ],\n})\n\nexport const pageDetailView = createEntityDetailView({\n id: \"page-detail\",\n kind: \"page\",\n fallbackTitle: \"Page\",\n offerAcceptance: true,\n extraSections: (ctx, entity): DetailSection[] => {\n const paths = ctx.registry\n .list(\"route\")\n .filter((r) => r.page === entity.id)\n .map((r) => r.path)\n return [{ id: \"routes\", paths, filterable: true }]\n },\n})\n","import {\n displayName,\n entityKey,\n KIND_STYLE,\n type Entity,\n type EntityKind,\n type EntityRef,\n} from \"../../entities\"\nimport { matchesQuery } from \"../builder/filter\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\ninterface EntityItem extends ListItem {\n ref: EntityRef\n}\n\nfunction toItem(entity: Entity): EntityItem {\n const ref: EntityRef = { kind: entity.kind, id: entityKey(entity) }\n return {\n value: `entity:${ref.kind}:${ref.id}`,\n label: displayName(entity),\n tag: `${ref.kind}:${ref.id}`,\n preview: ref,\n entityChip: { entity },\n ref,\n }\n}\n\nfunction createEntityKindListView(kind: EntityKind, viewId: string): View {\n const style = KIND_STYLE[kind]\n return {\n id: viewId,\n palette: { label: style.label + \"s\" },\n title: style.label + \"s\",\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx: ViewContext): ListSurface => {\n const entities = ctx.registry.list(kind)\n const items: EntityItem[] = (entities as Entity[])\n .map(toItem)\n .sort((a, b) => a.label.localeCompare(b.label))\n\n return {\n kind: \"list\",\n id: `uidex-${kind}s`,\n items,\n emptyLabel: `No ${style.label.toLowerCase()}s registered`,\n filter: (item, query) =>\n matchesQuery(\n `${item.label} ${(item as EntityItem).ref.id} ${item.group ?? \"\"}`,\n query\n ),\n onSelect: (item) => ctx.navigate((item as EntityItem).ref),\n }\n },\n }\n}\n\nexport const elementsView = createEntityKindListView(\n \"element\",\n BUILT_IN_VIEW_IDS.elements\n)\nexport const widgetsView = createEntityKindListView(\n \"widget\",\n BUILT_IN_VIEW_IDS.widgets\n)\nexport const regionsView = createEntityKindListView(\n \"region\",\n BUILT_IN_VIEW_IDS.regions\n)\nexport const pagesView = createEntityKindListView(\n \"page\",\n BUILT_IN_VIEW_IDS.pages\n)\nexport const featuresView = createEntityKindListView(\n \"feature\",\n BUILT_IN_VIEW_IDS.features\n)\nexport const primitivesView = createEntityKindListView(\n \"primitive\",\n BUILT_IN_VIEW_IDS.primitives\n)\n","import { Compass, createElement as createLucideElement } from \"lucide\"\nimport {\n displayName,\n ENTITY_KINDS,\n type Entity,\n type EntityRef,\n} from \"../../entities\"\nimport { matchesQuery } from \"../builder/filter\"\nimport {\n buildPageRouteMap,\n collectPageContext,\n type PageEntityHit,\n} from \"../builder/page-context\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\ninterface ExplorePageItem extends ListItem {\n ref: EntityRef\n}\n\nconst KIND_ORDER: ReadonlyMap<string, number> = new Map(\n ENTITY_KINDS.map((kind, index) => [kind, index])\n)\n\nconst KIND_GROUP_LABELS: Partial<Record<Entity[\"kind\"], string>> = {\n feature: \"Features\",\n widget: \"Widgets\",\n region: \"Regions\",\n element: \"Elements\",\n primitive: \"Primitives\",\n page: \"Pages\",\n route: \"Routes\",\n flow: \"Flows\",\n}\n\nfunction capitalize(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n\nfunction toItem(\n hit: PageEntityHit,\n pageRoutes: ReadonlyMap<string, string>\n): ExplorePageItem {\n const { entity, ref, node } = hit\n const item: ExplorePageItem = {\n value: `entity:${ref.kind}:${ref.id}`,\n label: displayName(entity, node),\n group: KIND_GROUP_LABELS[entity.kind] ?? capitalize(entity.kind),\n tag: `${ref.kind}:${ref.id}`,\n preview: ref,\n entityChip: { entity, node },\n ref,\n }\n if (entity.kind === \"route\") {\n item.subtitle = entity.path\n } else if (entity.kind === \"page\") {\n const path = pageRoutes.get(entity.id)\n if (path) item.subtitle = path\n }\n return item\n}\n\nexport const explorePageView: View = {\n id: BUILT_IN_VIEW_IDS.explorePage,\n palette: {\n label: \"Explore Page\",\n shortcut: \"\",\n icon: () => createLucideElement(Compass),\n },\n title: \"Explore Page\",\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx: ViewContext): ListSurface => {\n const { composed, dom } = collectPageContext(ctx)\n const pageRoutes = buildPageRouteMap(ctx)\n\n const items: ExplorePageItem[] = [\n ...composed.map((hit) => toItem(hit, pageRoutes)),\n ...dom.map((hit) => toItem(hit, pageRoutes)),\n ].sort((a, b) => {\n const ak = KIND_ORDER.get(a.ref.kind) ?? Number.MAX_SAFE_INTEGER\n const bk = KIND_ORDER.get(b.ref.kind) ?? Number.MAX_SAFE_INTEGER\n if (ak !== bk) return ak - bk\n return a.label.localeCompare(b.label)\n })\n\n const filter = (item: ListItem, query: string): boolean => {\n const row = item as ExplorePageItem\n return matchesQuery(\n `${item.label} ${row.ref.id} ${item.group ?? \"\"}`,\n query\n )\n }\n\n return {\n kind: \"list\",\n id: \"uidex-explore-page\",\n items,\n emptyLabel: \"No uidex-annotated elements on this page\",\n filter,\n onSelect: (item) => ctx.navigate((item as ExplorePageItem).ref),\n }\n },\n}\n","export async function copyToClipboard(text: string): Promise<boolean> {\n try {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text)\n return true\n }\n } catch {\n // fall through to legacy path\n }\n try {\n if (typeof document === \"undefined\") return false\n const textarea = document.createElement(\"textarea\")\n textarea.value = text\n textarea.setAttribute(\"readonly\", \"\")\n textarea.style.position = \"fixed\"\n textarea.style.opacity = \"0\"\n document.body.appendChild(textarea)\n textarea.select()\n const ok = document.execCommand(\"copy\")\n document.body.removeChild(textarea)\n return ok\n } catch {\n return false\n }\n}\n","import type { FeedbackPayload } from \"../../core/types\"\n\nfunction capitalize(s: string): string {\n return s.length === 0 ? s : s[0].toUpperCase() + s.slice(1)\n}\n\nexport function renderPayloadMarkdown(payload: FeedbackPayload): string {\n const heading = payload.title ?? `${capitalize(payload.type)} Feedback`\n const lines: string[] = [\n `# ${heading}`,\n \"\",\n `- **Type:** ${payload.type}`,\n `- **Severity:** ${payload.severity}`,\n `- **Component:** \\`${payload.componentId}\\``,\n \"\",\n \"#### Description\",\n payload.description || \"_(no description)_\",\n \"\",\n \"#### Context\",\n `- **URL:** ${payload.url}`,\n `- **Path:** ${payload.path}`,\n ...(payload.pageTitle ? [`- **Page title:** ${payload.pageTitle}`] : []),\n `- **Viewport:** ${payload.viewport.width}×${payload.viewport.height}`,\n `- **Screen:** ${payload.screen.width}×${payload.screen.height}`,\n `- **User agent:** ${payload.userAgent}`,\n `- **Timestamp:** ${payload.timestamp}`,\n ]\n return lines.join(\"\\n\") + \"\\n\"\n}\n","import { z } from \"zod\"\nimport type { FormField } from \"../../core/surface\"\n\nexport const feedbackSchema = z.object({\n type: z.enum([\"bug\", \"feature\", \"improvement\", \"question\"]),\n severity: z.enum([\"low\", \"medium\", \"high\", \"critical\"]),\n title: z.string().optional(),\n description: z\n .string()\n .trim()\n .min(1, { message: \"Description is required.\" }),\n})\n\nexport const feedbackFields: FormField[] = [\n {\n kind: \"select\",\n name: \"type\",\n label: \"Type\",\n options: [\n { value: \"bug\", label: \"Bug\" },\n { value: \"feature\", label: \"Feature\" },\n { value: \"improvement\", label: \"Improvement\" },\n { value: \"question\", label: \"Question\" },\n ],\n },\n {\n kind: \"select\",\n name: \"severity\",\n label: \"Severity\",\n value: \"medium\",\n options: [\n { value: \"low\", label: \"Low\" },\n { value: \"medium\", label: \"Medium\" },\n { value: \"high\", label: \"High\" },\n { value: \"critical\", label: \"Critical\" },\n ],\n },\n {\n kind: \"text\",\n name: \"title\",\n label: \"Title\",\n placeholder: \"Short summary (optional)\",\n },\n {\n kind: \"textarea\",\n name: \"description\",\n label: \"Description\",\n placeholder: \"Describe what happened…\",\n required: true,\n },\n]\n","import { copyToClipboard } from \"../../../internal/clipboard\"\nimport { captureScreenshot } from \"../../../internal/screenshot\"\nimport type { EntityRef } from \"../../../entities\"\nimport { UIDEX_ATTR_TO_KIND } from \"../../../surface/constants\"\nimport type {\n FormField,\n FormSubmitResult,\n FormSurface,\n FormValue,\n} from \"../../core/surface\"\nimport type {\n CloudAdapter,\n FeedbackPayload,\n FeedbackResult,\n View,\n ViewContext,\n} from \"../../core/types\"\nimport { renderPayloadMarkdown } from \"./markdown\"\nimport { feedbackFields, feedbackSchema } from \"./schema\"\nimport { collectFeedbackContextSnapshot } from \"./snapshot\"\n\nconst DOM_BACKED_KINDS: ReadonlySet<string> = new Set([\n \"element\",\n \"region\",\n \"widget\",\n \"primitive\",\n])\n\nconst KIND_TO_ATTR = new Map(\n UIDEX_ATTR_TO_KIND.map(([attr, kind]) => [kind, attr])\n)\n\nfunction resolveElement(ref: EntityRef): HTMLElement | null {\n const attr = KIND_TO_ATTR.get(ref.kind)\n if (!attr) return null\n return document.querySelector<HTMLElement>(\n `[${attr}=\"${CSS.escape(ref.id)}\"]`\n )\n}\n\nexport interface CreateFeedbackViewConfig {\n id: string\n resolveCloud: (\n ctx: ViewContext\n ) => CloudAdapter<unknown, unknown, unknown> | null\n componentId: (ctx: ViewContext) => string\n submitLabels: { ready: string; noCloud: string }\n successToast: (result: FeedbackResult) => string\n failureToast: (err: unknown) => string\n /**\n * Override the inline result shown on success. Use to include a link\n * (e.g. Jira issue URL) or customise the message beyond `successToast`.\n */\n successResult?: (result: FeedbackResult) => FormSubmitResult\n /**\n * Optional prefix prepended to `description` before submit/fallback-copy.\n * Used by sdk-feedback to stamp the SDK version in every report.\n */\n prependDescription?: () => string\n /**\n * Extra form fields prepended before the base feedback fields.\n * Receives the view context so the field list can depend on runtime state\n * (e.g. cached integration config).\n */\n /**\n * Override the base feedback fields. Defaults to all four\n * (type, severity, title, description). Use to hide fields that are\n * hardcoded by the variant (e.g. Jira always sets type to \"bug\").\n */\n baseFields?: FormField[]\n extraFields?: (ctx: ViewContext) => FormField[]\n /**\n * Optional hook invoked after the base payload is built. Variants use this\n * to attach extra fields (e.g. `suggestedTarget` for the Jira view) without\n * duplicating snapshot logic. `values` contains all collected form values\n * including any extra fields.\n */\n augmentPayload?: (\n payload: FeedbackPayload,\n ctx: ViewContext,\n values: Record<string, FormValue>\n ) => FeedbackPayload\n /**\n * Override the default feedback schema. Use when the variant hides fields\n * that the base schema requires (e.g. Jira omits the \"type\" field).\n */\n schema?: FormSurface[\"schema\"]\n}\n\nfunction buildPayload(\n ctx: ViewContext,\n componentId: string,\n values: Record<string, FormValue>,\n prefix: string,\n augmentPayload: CreateFeedbackViewConfig[\"augmentPayload\"],\n screenshot?: string\n): FeedbackPayload {\n const snapshot = collectFeedbackContextSnapshot()\n const title = String(values.title ?? \"\").trim()\n const description = String(values.description ?? \"\").trim()\n const ref = ctx.ref\n const entity = ref ? ctx.registry.get(ref.kind, ref.id) : undefined\n const loc = entity && \"loc\" in entity ? entity.loc : undefined\n const sources = loc\n ? [{ filePath: loc.file, line: loc.line ?? 0 }]\n : undefined\n\n const payload: FeedbackPayload = {\n type: (values.type as FeedbackPayload[\"type\"]) ?? \"bug\",\n severity: (values.severity as FeedbackPayload[\"severity\"]) ?? \"medium\",\n title: title || undefined,\n description: prefix ? `${prefix}${description}` : description,\n componentId,\n screenshot,\n sources,\n ...snapshot,\n }\n return augmentPayload ? augmentPayload(payload, ctx, values) : payload\n}\n\nasync function copyFallback(\n payload: FeedbackPayload\n): Promise<FormSubmitResult> {\n const markdown = renderPayloadMarkdown(payload)\n const copied = await copyToClipboard(markdown)\n if (!copied) console.log(\"[uidex] feedback markdown:\\n\" + markdown)\n return {\n status: copied ? \"success\" : \"error\",\n message: copied ? \"Copied to clipboard\" : \"Copy failed\",\n } as FormSubmitResult\n}\n\nexport function createFeedbackView(config: CreateFeedbackViewConfig): View {\n const {\n id,\n resolveCloud,\n componentId,\n submitLabels,\n successToast,\n failureToast,\n prependDescription,\n baseFields,\n extraFields,\n augmentPayload,\n successResult,\n schema: schemaOverride,\n } = config\n\n return {\n id,\n matches: () => false,\n searchable: false,\n hints: (ctx) => [\n {\n key: \"⌘↵\",\n label: resolveCloud(ctx) ? submitLabels.ready : submitLabels.noCloud,\n },\n ],\n focusTarget: (host) =>\n host.querySelector<HTMLElement>(\n \"[data-uidex-form='feedback'] select, [data-uidex-form='feedback'] input, [data-uidex-form='feedback'] textarea\"\n ),\n surface: (ctx): FormSurface => {\n const cloud = resolveCloud(ctx)\n const extra = extraFields ? extraFields(ctx) : []\n const fields: FormField[] = [...extra, ...(baseFields ?? feedbackFields)]\n\n const isDomBacked = ctx.ref != null && DOM_BACKED_KINDS.has(ctx.ref.kind)\n const targetEl = ctx.ref && isDomBacked ? resolveElement(ctx.ref) : null\n const screenshotPromise = isDomBacked\n ? captureScreenshot({\n target: targetEl ?? undefined,\n maxWidth: 1280,\n }).catch(() => null)\n : null\n\n return {\n kind: \"form\",\n id: \"feedback\",\n fields,\n schema: schemaOverride ?? feedbackSchema,\n screenshotPreview: screenshotPromise ? screenshotPromise : undefined,\n submit: {\n label: cloud ? submitLabels.ready : submitLabels.noCloud,\n onSubmit: async (values) => {\n const screenshot = (await screenshotPromise) ?? undefined\n const prefix = prependDescription ? prependDescription() : \"\"\n const payload = buildPayload(\n ctx,\n componentId(ctx),\n values,\n prefix,\n augmentPayload,\n screenshot\n )\n if (!cloud) {\n return copyFallback(payload)\n }\n try {\n const result = (await cloud.feedback.submit(\n payload\n )) as FeedbackResult\n if (successResult) return successResult(result)\n return {\n status: \"success\" as const,\n message: successToast(result),\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n return {\n status: \"error\" as const,\n message: failureToast(err) ?? message,\n }\n }\n },\n },\n }\n },\n }\n}\n","import { BUILT_IN_VIEW_IDS } from \"../ids\"\nimport { createFeedbackView } from \"./view-builder\"\n\nexport const feedbackView = createFeedbackView({\n id: BUILT_IN_VIEW_IDS.feedback,\n resolveCloud: (ctx) => ctx.cloud,\n componentId: (ctx) => (ctx.ref ? `${ctx.ref.kind}:${ctx.ref.id}` : \"unknown\"),\n submitLabels: { ready: \"Submit Report\", noCloud: \"Copy Report\" },\n successToast: (result) => {\n const ticketKey =\n result.externalLink?.ok && result.externalLink.key\n ? result.externalLink.key\n : null\n return ticketKey\n ? `Feedback submitted (${ticketKey})`\n : \"Feedback submitted\"\n },\n failureToast: (err) => {\n const message = err instanceof Error ? err.message : String(err)\n return `Failed: ${message}`\n },\n})\n","import type { FormField, FormSubmitResult } from \"../../core/surface\"\nimport type {\n CloudAdapter,\n FeedbackResult,\n IngestConfig,\n IngestConfigIssue,\n} from \"../../core/types\"\nimport { BUILT_IN_VIEW_IDS } from \"../ids\"\nimport { feedbackFields, feedbackSchema } from \"./schema\"\nimport { createFeedbackView } from \"./view-builder\"\n\nconst jiraSchema = feedbackSchema.omit({ type: true })\n\nconst jiraBaseFields = feedbackFields.filter((f) => f.name !== \"type\")\n\nfunction buildParentIssueField(config: IngestConfig): FormField {\n const issues = config.parentIssues ?? []\n\n const options: { value: string; label: string }[] = [\n { value: \"\", label: \"None\" },\n ]\n\n const byType = new Map<string, IngestConfigIssue[]>()\n for (const issue of issues) {\n const group = byType.get(issue.issueType) ?? []\n group.push(issue)\n byType.set(issue.issueType, group)\n }\n for (const [type, group] of byType) {\n for (const issue of group) {\n options.push({\n value: issue.key,\n label: `[${type}] ${issue.key}: ${issue.summary}`,\n })\n }\n }\n\n return {\n kind: \"select\",\n name: \"parentIssue\",\n label: \"Parent Issue\",\n options,\n }\n}\n\nexport const jiraFeedbackView = createFeedbackView({\n id: BUILT_IN_VIEW_IDS.jiraFeedback,\n resolveCloud: (ctx) => ctx.cloud,\n componentId: (ctx) => (ctx.ref ? `${ctx.ref.kind}:${ctx.ref.id}` : \"unknown\"),\n submitLabels: { ready: \"Submit bug\", noCloud: \"Copy report\" },\n schema: jiraSchema,\n baseFields: jiraBaseFields,\n extraFields: (ctx) => {\n const cloud = ctx.cloud as CloudAdapter | null\n const config = cloud?.integrations.getCachedConfig() ?? null\n if (!config?.hasJira) return []\n return [buildParentIssueField(config)]\n },\n augmentPayload: (payload, ctx, values) => {\n const cloud = ctx.cloud as CloudAdapter | null\n const config = cloud?.integrations.getCachedConfig() ?? null\n if (!config?.hasJira || !config.integrationId) return payload\n const targetConfig: Record<string, unknown> = {}\n const parentKey = values.parentIssue as string | undefined\n if (parentKey) {\n const issue = config.parentIssues?.find((i) => i.key === parentKey)\n if (issue) targetConfig.epicId = issue.id\n }\n return {\n ...payload,\n type: \"bug\" as const,\n suggestedTarget: {\n integrationId: config.integrationId,\n targetConfig,\n },\n }\n },\n successResult: (result: FeedbackResult): FormSubmitResult => {\n const link = result.externalLink\n if (link?.ok && link.key) {\n return {\n status: \"success\",\n message: `Created ${link.key}`,\n link: link.url ? { url: link.url, label: link.key } : undefined,\n }\n }\n return {\n status: \"error\",\n message: \"Feedback saved — Jira issue creation failed\",\n }\n },\n successToast: (result: FeedbackResult) => {\n const link = result.externalLink\n if (link?.ok && link.key) return `Created ${link.key}`\n return \"Feedback saved — Jira Bug failed\"\n },\n failureToast: (err) => {\n const message = err instanceof Error ? err.message : String(err)\n return `Failed to create issue: ${message}`\n },\n})\n","import {\n MessageCircleWarning,\n createElement as createLucideElement,\n} from \"lucide\"\nimport type { ShellAction, ViewContext } from \"../../core/types\"\nimport { BUILT_IN_VIEW_IDS } from \"../ids\"\nimport { createFeedbackView } from \"./view-builder\"\n\nexport function resolveSdkComponentId(ctx: ViewContext): string {\n const stack = ctx.getStack()\n const underlying = stack[stack.length - 2]\n return underlying ? `uidex-sdk:${underlying.id}` : \"uidex-sdk\"\n}\n\nfunction successToast(): string {\n return \"Thanks — your report was sent to uidex\"\n}\n\nexport const sdkFeedbackView = createFeedbackView({\n id: BUILT_IN_VIEW_IDS.sdkFeedback,\n resolveCloud: (ctx) => ctx.sdkCloud,\n componentId: (ctx) => resolveSdkComponentId(ctx),\n submitLabels: { ready: \"Send feedback\", noCloud: \"Copy report\" },\n successToast,\n failureToast: () => \"Couldn't reach uidex — copied report to clipboard\",\n prependDescription: () => `uidex-sdk v${UIDEX_SDK_VERSION}\\n\\n`,\n})\n\nexport function reportUidexIssueAction(ctx: ViewContext): ShellAction {\n return {\n id: \"report-uidex-issue\",\n label: \"Report Uidex Issue\",\n icon: () => createLucideElement(MessageCircleWarning),\n perform: () => ctx.push({ id: BUILT_IN_VIEW_IDS.sdkFeedback, ref: null }),\n intent: { kind: \"push\", viewId: BUILT_IN_VIEW_IDS.sdkFeedback },\n }\n}\n","import {\n displayName,\n isMetaEntity,\n type Entity,\n type Flow,\n type FlowStep,\n type MetaEntityKind,\n type Registry,\n} from \"../../entities\"\nimport type {\n DetailAction,\n DetailSection,\n DetailSurface,\n ResolvedFlowStep,\n} from \"../core/surface\"\nimport type { View } from \"../core/types\"\nimport {\n copyPathAction,\n copySnapshotAction,\n feedbackAction,\n} from \"../builder/detail-builder\"\n\nconst STEP_KINDS: readonly MetaEntityKind[] = [\n \"element\",\n \"widget\",\n \"region\",\n \"page\",\n \"feature\",\n \"primitive\",\n]\n\nexport const flowDetailView: View = {\n id: \"flow-detail\",\n matches: (ref) => ref.kind === \"flow\",\n title: (ctx) => {\n if (!ctx.ref) return \"Flow\"\n const entity = ctx.registry.get(\"flow\", ctx.ref.id)\n return entity ? displayName(entity) : ctx.ref.id\n },\n focusTarget: (host) =>\n host.querySelector<HTMLButtonElement>(\n \"[data-uidex-detail-actions] [data-uidex-detail-action]\"\n ),\n surface: (ctx): DetailSurface => {\n if (!ctx.ref || ctx.ref.kind !== \"flow\") {\n return { kind: \"detail\", entityKind: \"flow\" }\n }\n const flow = ctx.registry.get(\"flow\", ctx.ref.id)\n if (!flow) {\n return { kind: \"detail\", entityKind: \"flow\", notFound: ctx.ref }\n }\n\n const actions: DetailAction[] = [\n copyPathAction(ctx.ref, flow.loc),\n copySnapshotAction(ctx.ref, flow.loc),\n feedbackAction(ctx.ref),\n ]\n\n const sections: DetailSection[] = [\n flow.steps.length > 0\n ? buildStepsSection(flow.steps, ctx.registry)\n : buildTouchesSection(flow, ctx.registry),\n ]\n\n return {\n kind: \"detail\",\n entityKind: \"flow\",\n title: displayName(flow),\n actions,\n sections,\n }\n },\n}\n\nfunction buildStepsSection(\n flowSteps: readonly FlowStep[],\n registry: Registry\n): DetailSection {\n const steps: ResolvedFlowStep[] = []\n flowSteps.forEach((step, index) => {\n const entity = resolveStepEntity(registry, step.entityId)\n if (entity) {\n steps.push({ ordinal: index + 1, entity, action: step.action })\n }\n })\n return { id: \"steps\", steps, filterable: true }\n}\n\nfunction resolveStepEntity(\n registry: Registry,\n entityId: string\n): Entity | undefined {\n for (const kind of STEP_KINDS) {\n const entity = registry.get(kind, entityId)\n if (entity) return entity\n }\n return undefined\n}\n\nfunction buildTouchesSection(flow: Flow, registry: Registry): DetailSection {\n const touched: Entity[] = []\n const seen = new Set<string>()\n for (const touchedEntity of registry.touchedBy(flow.id)) {\n if (!isMetaEntity(touchedEntity)) continue\n const key = `${touchedEntity.kind}:${touchedEntity.id}`\n if (seen.has(key)) continue\n seen.add(key)\n touched.push(touchedEntity)\n }\n return {\n id: \"touches\",\n entities: touched,\n filterable: true,\n }\n}\n","import { displayName, type EntityRef, type Flow } from \"../../entities\"\nimport { matchesQuery } from \"../builder/filter\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\ninterface FlowItem extends ListItem {\n ref: EntityRef\n}\n\nfunction toItem(flow: Flow): FlowItem {\n const ref: EntityRef = { kind: \"flow\", id: flow.id }\n return {\n value: `entity:flow:${flow.id}`,\n label: displayName(flow),\n subtitle: flow.loc.file || undefined,\n tag: `flow:${flow.id}`,\n preview: ref,\n entityChip: { entity: flow },\n ref,\n }\n}\n\nexport const flowsView: View = {\n id: BUILT_IN_VIEW_IDS.flows,\n palette: { label: \"Flows\" },\n title: \"Flows\",\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx: ViewContext): ListSurface => {\n const flows = ctx.registry.list(\"flow\")\n const items: FlowItem[] = flows\n .map(toItem)\n .sort((a, b) => a.label.localeCompare(b.label))\n\n const filter = (item: ListItem, query: string): boolean => {\n const row = item as FlowItem\n return matchesQuery(\n `${item.label} ${row.ref.id} ${item.group ?? \"\"}`,\n query\n )\n }\n\n return {\n kind: \"list\",\n id: \"uidex-flows\",\n items,\n emptyLabel: \"No flows registered\",\n filter,\n onSelect: (item) => ctx.navigate((item as FlowItem).ref),\n }\n },\n}\n","import { BookOpen, createElement as createLucideElement } from \"lucide\"\nimport { KIND_STYLE, type Entity, type EntityKind } from \"../../entities\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { PALETTE_GROUPS } from \"../labels\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\nconst KIND_TO_VIEW: Partial<Record<EntityKind, string>> = {\n element: BUILT_IN_VIEW_IDS.elements,\n widget: BUILT_IN_VIEW_IDS.widgets,\n region: BUILT_IN_VIEW_IDS.regions,\n page: BUILT_IN_VIEW_IDS.pages,\n feature: BUILT_IN_VIEW_IDS.features,\n primitive: BUILT_IN_VIEW_IDS.primitives,\n flow: BUILT_IN_VIEW_IDS.flows,\n}\n\nconst BROWSABLE_KINDS: EntityKind[] = [\n \"page\",\n \"feature\",\n \"widget\",\n \"region\",\n \"element\",\n \"primitive\",\n \"flow\",\n]\n\nfunction syntheticEntity(kind: EntityKind): Entity {\n if (kind === \"route\") return { kind: \"route\", path: kind, page: kind }\n if (kind === \"flow\")\n return {\n kind: \"flow\",\n id: kind,\n loc: { file: \"\" },\n touches: [],\n steps: [],\n }\n return { kind, id: kind }\n}\n\nexport const glossaryView: View = {\n id: BUILT_IN_VIEW_IDS.glossary,\n palette: {\n label: \"Glossary\",\n group: PALETTE_GROUPS.commands,\n icon: () => createLucideElement(BookOpen),\n },\n title: \"Glossary\",\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx: ViewContext): ListSurface => {\n const items: ListItem[] = BROWSABLE_KINDS.map((kind) => {\n const count =\n kind === \"flow\"\n ? ctx.registry.list(\"flow\").length\n : ctx.registry.list(kind).length\n return {\n value: `glossary:${kind}`,\n label: KIND_STYLE[kind].label + \"s\",\n subtitle: String(count),\n tag: kind,\n entityChip: { entity: syntheticEntity(kind) },\n }\n })\n return {\n kind: \"list\",\n id: \"uidex-glossary\",\n items,\n onSelect: (item) => {\n const kind = item.tag as EntityKind\n const viewId = KIND_TO_VIEW[kind]\n if (viewId) ctx.push({ id: viewId, ref: null })\n },\n }\n },\n}\n","export { BUILT_IN_VIEW_IDS } from \"./ids\"\n\nimport type { PaletteShortcut } from \"../../surface/keys\"\nimport { createCommandPaletteView } from \"./command-palette\"\nimport {\n componentDetailView,\n featureDetailView,\n pageDetailView,\n primitiveDetailView,\n regionDetailView,\n widgetDetailView,\n} from \"./entity-detail\"\nimport {\n elementsView,\n featuresView,\n pagesView,\n primitivesView,\n regionsView,\n widgetsView,\n} from \"./entity-kind-list\"\nimport { explorePageView } from \"./explore-page\"\nimport { feedbackView } from \"./feedback/host-feedback\"\nimport { jiraFeedbackView } from \"./feedback/jira-feedback\"\nimport { sdkFeedbackView } from \"./feedback/sdk-feedback\"\nimport { flowDetailView } from \"./flow-detail\"\nimport { flowsView } from \"./flows\"\nimport { glossaryView } from \"./glossary\"\n\nexport { createCommandPaletteView } from \"./command-palette\"\nexport {\n componentDetailView,\n featureDetailView,\n pageDetailView,\n primitiveDetailView,\n regionDetailView,\n widgetDetailView,\n} from \"./entity-detail\"\nexport {\n elementsView,\n featuresView,\n pagesView,\n primitivesView,\n regionsView,\n widgetsView,\n} from \"./entity-kind-list\"\nexport { explorePageView } from \"./explore-page\"\nexport { feedbackView } from \"./feedback/host-feedback\"\nexport { jiraFeedbackView } from \"./feedback/jira-feedback\"\nexport { sdkFeedbackView } from \"./feedback/sdk-feedback\"\nexport { flowDetailView } from \"./flow-detail\"\nexport { flowsView } from \"./flows\"\nexport { glossaryView } from \"./glossary\"\n\nimport type { View } from \"../core/types\"\n\nexport function buildDefaultViews(shortcut?: PaletteShortcut): View[] {\n return [\n createCommandPaletteView(shortcut),\n explorePageView,\n componentDetailView,\n pageDetailView,\n featureDetailView,\n widgetDetailView,\n flowDetailView,\n flowsView,\n elementsView,\n widgetsView,\n regionsView,\n pagesView,\n featuresView,\n primitivesView,\n primitiveDetailView,\n regionDetailView,\n feedbackView,\n jiraFeedbackView,\n sdkFeedbackView,\n glossaryView,\n ]\n}\n","import { sdkCloud } from \"./cloud/sdk-cloud\"\nimport { createRegistry, KIND_STYLE, type Registry } from \"./entities\"\nimport {\n createIngest,\n resolveIngestOptions,\n type Ingest,\n type IngestOptions,\n} from \"./ingest\"\nimport type { HighlightContext } from \"./flows/highlight\"\nimport { createCleanupStack } from \"./internal/cleanup\"\nimport {\n createSession,\n type ResolvedTheme,\n type SessionStore,\n type ThemePreference,\n} from \"./session\"\nimport {\n bindShadowKeys,\n createSurfaceShell,\n resolveEntityElement,\n type Corner,\n type Inspector,\n type Overlay,\n type PaletteShortcut,\n} from \"./surface\"\nimport {\n buildDefaultViews,\n createViewRegistrar,\n createViewStack,\n type CloudAdapter,\n type HighlightController,\n type View,\n type ViewRegistrar,\n} from \"./views\"\n\nexport interface CreateUidexOptions {\n theme?: ThemePreference\n resolvedTheme?: ResolvedTheme\n stylesheets?: string[]\n initialCorner?: Corner\n /** Shown as a label at the start of the menu bar. */\n appTitle?: string\n cloud?: CloudAdapter | null\n dev?: boolean\n /** Register bundled default views. Defaults to `true`. */\n defaultViews?: boolean\n /** Additional views to register (after defaults). */\n views?: readonly View[]\n /**\n * Override ingest behaviour. When `cloud` is non-null, ingest auto-enables\n * (both console and network capture). Pass `null` to disable entirely, or\n * an options object to override either channel.\n */\n ingest?: IngestOptions | null\n /** Keyboard shortcut for the command palette. Defaults to Cmd+K / Ctrl+K. */\n shortcut?: PaletteShortcut\n}\n\nexport interface Uidex {\n mount(target?: Element): void\n unmount(): void\n readonly registry: Registry\n readonly session: SessionStore\n readonly views: ViewRegistrar\n readonly cloud: CloudAdapter | null\n readonly ingest: Ingest | null\n readonly shadowRoot: ShadowRoot | null\n}\n\nexport function createUidex(options: CreateUidexOptions = {}): Uidex {\n const registry = createRegistry()\n\n // Mutable refs filled in during mount(); session bindings close over them so\n // the surface machine's actions can mount the inspector and drive the\n // overlay once the shell exists.\n const inspectorRef: { current: Inspector | null } = { current: null }\n const overlayRef: { current: Overlay | null } = { current: null }\n\n const applyOverlay = (ctx: HighlightContext): void => {\n const overlay = overlayRef.current\n if (!overlay) return\n const ref = ctx.pinnedRef ?? ctx.ref\n if (!ref) return\n const el = ctx.element ?? resolveEntityElement(ref)\n if (!el) {\n overlay.hide()\n return\n }\n const pinned = ctx.pinnedRef !== null\n overlay.show(el, {\n color: ctx.color ?? KIND_STYLE[ref.kind].color,\n backdrop: pinned,\n })\n }\n\n const session = createSession({\n theme: options.theme,\n resolvedTheme: options.resolvedTheme,\n bindings: {\n surface: {\n mountInspector: () => inspectorRef.current?.mount(),\n destroyInspector: () => inspectorRef.current?.destroy(),\n },\n highlight: {\n showOverlay: applyOverlay,\n hideOverlay: () => overlayRef.current?.hide(),\n updateOverlay: applyOverlay,\n },\n },\n })\n const views = createViewRegistrar({ session, dev: options.dev })\n const cloud = options.cloud ?? null\n const ingestOpts = resolveIngestOptions(options.ingest, cloud !== null)\n const ingest = ingestOpts ? createIngest({ session, ...ingestOpts }) : null\n\n if (options.defaultViews !== false) {\n for (const view of buildDefaultViews(options.shortcut)) views.register(view)\n }\n if (options.views) {\n for (const view of options.views) views.register(view)\n }\n\n let shadowRoot: ShadowRoot | null = null\n const mountCleanup = createCleanupStack()\n let mounted = false\n\n function mount(target?: Element): void {\n if (mounted) return\n const mountTarget =\n target ?? (typeof document !== \"undefined\" ? document.body : null)\n if (!mountTarget) {\n throw new Error(\"createUidex: no mount target available\")\n }\n\n const shell = createSurfaceShell({\n mount: mountTarget,\n registry,\n session,\n stylesheets: options.stylesheets,\n initialCorner: options.initialCorner,\n appTitle: options.appTitle,\n inspector: {\n onSelect: (match) => {\n const view = views.findMatch(match.ref)\n if (!view) return\n session.send({\n type: \"SELECT\",\n ref: match.ref,\n entry: { id: view.id, ref: match.ref },\n })\n },\n },\n })\n shadowRoot = shell.host.shadowRoot\n inspectorRef.current = shell.inspector\n overlayRef.current = shell.overlay\n shell.overlay.onDismiss = () => session.send({ type: \"UNPIN\" })\n mountCleanup.add(shell)\n mountCleanup.add(() => {\n inspectorRef.current = null\n overlayRef.current = null\n })\n\n const highlight: HighlightController = {\n show(ref, opts) {\n const el = resolveEntityElement(ref)\n if (!el) {\n session.send({ type: \"UNHOVER\" })\n return\n }\n session.send({\n type: \"HOVER\",\n ref,\n element: el,\n color: opts?.color ?? null,\n })\n },\n hide() {\n session.send({ type: \"UNHOVER\" })\n },\n }\n\n const viewContainer = document.createElement(\"div\")\n viewContainer.setAttribute(\"data-uidex-views\", \"\")\n shell.host.chromeEl.appendChild(viewContainer)\n mountCleanup.add(() => viewContainer.remove())\n\n const viewStack = createViewStack({\n container: viewContainer,\n views,\n session,\n registry,\n cloud,\n sdkCloud,\n highlight,\n shortcut: options.shortcut,\n })\n mountCleanup.add(viewStack)\n\n if (shadowRoot) {\n mountCleanup.add(\n bindShadowKeys({\n shadowRoot,\n session,\n getActionsPopup: () => viewStack.getActionsPopup(),\n shortcut: options.shortcut,\n })\n )\n }\n\n if (ingest) {\n ingest.start()\n mountCleanup.add(() => ingest.stop())\n }\n\n mounted = true\n }\n\n function unmount(): void {\n if (!mounted) return\n mountCleanup.drain()\n shadowRoot = null\n mounted = false\n }\n\n return {\n mount,\n unmount,\n registry,\n session,\n views,\n cloud,\n ingest,\n get shadowRoot() {\n return shadowRoot\n },\n }\n}\n"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,qBAAqB;AAC3B,IAAM,0BAA0B;AAEhC,IAAM,SAAS;AACf,IAAM,YAAY;AAClB,IAAM,WAAW;AAEjB,IAAM,0BAA0B,IAAI,kBAAkB,KAAK,uBAAuB;AAIlF,IAAM,qBACX;AAAA,EACE,CAAC,cAAc,SAAS;AAAA,EACxB,CAAC,qBAAqB,QAAQ;AAAA,EAC9B,CAAC,qBAAqB,QAAQ;AAAA,EAC9B,CAAC,wBAAwB,WAAW;AACtC;;;ACCK,SAAS,kBAAkB,SAA0C;AAC1E,QAAM,EAAE,OAAO,cAAc,CAAC,GAAG,eAAe,QAAQ,IAAI;AAE5D,QAAM,SAAS,SAAS,cAAc,KAAK;AAC3C,SAAO,UAAU,IAAI,kBAAkB;AACvC,SAAO,MAAM,WAAW;AACxB,SAAO,MAAM,QAAQ;AACrB,SAAO,MAAM,gBAAgB;AAC7B,SAAO,MAAM,SAAS,OAAO,MAAM;AACnC,SAAO,UAAU,IAAI,YAAY;AAEjC,QAAM,SAAS,OAAO,aAAa,EAAE,MAAM,OAAO,CAAC;AAEnD,mBAAiB,QAAQ,CAAC,wBAAY,GAAG,WAAW,CAAC;AAErD,QAAM,WAAW,SAAS,cAAc,KAAK;AAC7C,WAAS,UAAU,IAAI,cAAc;AACrC,WAAS,MAAM,gBAAgB;AAC/B,SAAO,YAAY,QAAQ;AAE3B,QAAM,YAAY,MAAM;AAExB,SAAO;AAAA,IACL;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA,WAAW,OAAO;AAChB,aAAO,UAAU,OAAO,SAAS,MAAM;AACvC,aAAO,UAAU,IAAI,KAAK;AAAA,IAC5B;AAAA,IACA,UAAU;AACR,aAAO,OAAO;AAAA,IAChB;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,QAAoB,aAA6B;AACzE,MAAI,YAAY,WAAW,EAAG;AAE9B,QAAM,YAAY,iCAAiC,MAAM;AACzD,MAAI,WAAW;AACb,UAAM,SAA0B,CAAC;AACjC,eAAW,OAAO,aAAa;AAC7B,YAAM,QAAQ,IAAI,cAAc;AAChC,YAAM,YAAY,GAAG;AACrB,aAAO,KAAK,KAAK;AAAA,IACnB;AACA,WAAO,qBAAqB,CAAC,GAAG,OAAO,oBAAoB,GAAG,MAAM;AACpE;AAAA,EACF;AAEA,aAAW,OAAO,aAAa;AAC7B,UAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,UAAM,cAAc;AACpB,WAAO,YAAY,KAAK;AAAA,EAC1B;AACF;AAEA,SAAS,iCAAiC,QAA6B;AACrE,MAAI,OAAO,kBAAkB,YAAa,QAAO;AACjD,MAAI,EAAE,wBAAwB,QAAS,QAAO;AAC9C,MAAI;AACF,UAAM,QAAQ,IAAI,cAAc;AAChC,UAAM,YAAY,EAAE;AACpB,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;ACtFA,IAAAC,iBAAqD;AAKrD,IAAM,wBAAwB;AAC9B,IAAM,iBAAiB;AACvB,IAAM,aAAa;AAwBZ,SAAS,oBAAoB,MAAwC;AAC1E,QAAM,EAAE,UAAU,IAAI;AAEtB,QAAMC,MAAK,SAAS,cAAc,KAAK;AACvC,EAAAA,IAAG,aAAa,6BAA6B,EAAE;AAC/C,EAAAA,IAAG,MAAM,WAAW;AACpB,EAAAA,IAAG,MAAM,gBAAgB;AACzB,EAAAA,IAAG,MAAM,SAAS,OAAO,QAAQ;AACjC,EAAAA,IAAG,MAAM,UAAU;AACnB,EAAAA,IAAG,MAAM,WAAW;AACpB,EAAAA,IAAG,MAAM,aAAa;AACtB,EAAAA,IAAG,MAAM,eAAe;AACxB,EAAAA,IAAG,MAAM,aAAa;AACtB,EAAAA,IAAG,MAAM,QAAQ;AACjB,EAAAA,IAAG,MAAM,UAAU;AACnB,EAAAA,IAAG,MAAM,aAAa;AACtB,EAAAA,IAAG,MAAM,YAAY;AACrB,EAAAA,IAAG,MAAM,aAAa;AACtB,EAAAA,IAAG,MAAM,MAAM;AAEf,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,aAAa,mCAAmC,EAAE;AACxD,QAAM,MAAM,WAAW;AACvB,QAAM,MAAM,OAAO;AACnB,QAAM,MAAM,SAAS;AACrB,QAAM,MAAM,QAAQ;AACpB,QAAM,MAAM,SAAS;AACrB,QAAM,MAAM,YAAY;AACxB,QAAM,MAAM,aAAa,GAAG,UAAU;AACtC,QAAM,MAAM,cAAc,GAAG,UAAU;AACvC,QAAM,MAAM,eAAe,GAAG,UAAU,YAAY,qBAAqB;AACzE,EAAAA,IAAG,YAAY,KAAK;AAEpB,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,OAAK,aAAa,kCAAkC,EAAE;AACtD,OAAK,MAAM,UAAU;AACrB,OAAK,MAAM,aAAa;AACxB,OAAK,MAAM,MAAM;AACjB,EAAAA,IAAG,YAAY,IAAI;AAEnB,YAAU,YAAYA,GAAE;AAExB,MAAI,iBAA8C;AAClD,MAAI,gBAAiD;AAErD,QAAM,aAAa,CAAC,UAAwB;AAC1C,IAAAA,IAAG,MAAM,aAAa;AACtB,UAAM,MAAM,eAAe,GAAG,UAAU,YAAY,KAAK;AAAA,EAC3D;AAEA,QAAM,aAAa,MAAY;AAC7B,SAAK,gBAAgB;AACrB,QAAI,OAAO,mBAAmB,UAAU;AACtC,iBAAW,qBAAqB;AAChC,WAAK,OAAO,SAAS,eAAe,cAAc,CAAC;AACnD;AAAA,IACF;AACA,QAAI,CAAC,eAAgB;AACrB,UAAM,EAAE,QAAQ,KAAK,IAAI;AACzB,UAAM,QAAQ,WAAW,OAAO,IAAI;AACpC,eAAW,OAAO,SAAS,qBAAqB;AAChD,QAAI,OAAO;AACT,YAAM,UAAM,eAAAC,eAAoB,MAAM,IAAI;AAC1C,UAAI,aAAa,eAAe,MAAM;AACtC,UAAI,aAAa,SAAS,IAAI;AAC9B,UAAI,aAAa,UAAU,IAAI;AAC/B,UAAI,MAAM,UAAU;AACpB,WAAK,OAAO,GAAG;AAAA,IACjB;AACA,UAAM,QAAQ,YAAY,QAAQ,IAAI;AACtC,SAAK,OAAO,SAAS,eAAe,KAAK,CAAC;AAC1C,QAAI,eAAe,OAAO;AACxB,YAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,cAAQ,aAAa,mCAAmC,EAAE;AAC1D,cAAQ,MAAM,aAAa;AAC3B,cAAQ,MAAM,WAAW;AACzB,cAAQ,MAAM,aAAa;AAC3B,cAAQ,MAAM,UAAU;AACxB,cAAQ,MAAM,eAAe;AAC7B,cAAQ,MAAM,aAAa;AAC3B,cAAQ,cAAc,GAAG,eAAe,MAAM,QAAQ,CAAC,IAAI,eAAe,MAAM,KAAK;AACrF,WAAK,OAAO,OAAO;AAAA,IACrB;AAAA,EACF;AAEA,QAAM,SAAS,MAAY;AACzB,QAAI,CAAC,kBAAkB,CAAC,eAAe;AACrC,MAAAD,IAAG,MAAM,UAAU;AACnB;AAAA,IACF;AACA,eAAW;AACX,IAAAA,IAAG,MAAM,UAAU;AACnB,IAAAA,IAAG,MAAM,OAAO,GAAG,cAAc,CAAC;AAClC,IAAAA,IAAG,MAAM,MAAM,GAAG,cAAc,IAAI,cAAc;AAAA,EACpD;AAEA,SAAO;AAAA,IACL,OAAO,SAAS,QAAQ;AACtB,uBAAiB;AACjB,sBAAgB;AAChB,aAAO;AAAA,IACT;AAAA,IACA,UAAU;AACR,MAAAA,IAAG,OAAO;AACV,uBAAiB;AACjB,sBAAgB;AAAA,IAClB;AAAA,EACF;AACF;;;ACnGA,SAAS,aAAa,KAAgB,UAA6B;AACjE,MAAI,UAAU;AACZ,UAAM,QAAQ,SAAS,IAAI,IAAI,MAAM,IAAI,EAAE;AAC3C,QAAI,MAAO,QAAO;AAAA,EACpB;AACA,MAAI,IAAI,SAAS,QAAS,QAAO,EAAE,MAAM,SAAS,MAAM,IAAI,IAAI,MAAM,IAAI,GAAG;AAC7E,MAAI,IAAI,SAAS,QAAQ;AACvB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAI,IAAI;AAAA,MACR,KAAK,EAAE,MAAM,GAAG;AAAA,MAChB,SAAS,CAAC;AAAA,MACV,OAAO,CAAC;AAAA,IACV;AAAA,EACF;AACA,SAAO,EAAE,MAAM,IAAI,MAAM,IAAI,IAAI,GAAG;AACtC;AAEO,SAAS,oBACd,QACA,UACuB;AACvB,MAAI,OAAO,QAAQ,uBAAuB,EAAG,QAAO;AACpD,MAAI,OAAuB;AAC3B,SAAO,MAAM;AACX,QAAI,gBAAgB,aAAa;AAC/B,iBAAW,CAAC,MAAM,IAAI,KAAK,oBAAoB;AAC7C,cAAM,KAAK,KAAK,aAAa,IAAI;AACjC,YAAI,IAAI;AACN,gBAAM,MAAiB,EAAE,MAAM,GAAG;AAClC,gBAAM,SAAS,aAAa,KAAK,QAAQ;AACzC,iBAAO;AAAA,YACL,SAAS;AAAA,YACT;AAAA,YACA;AAAA,YACA,OAAO,YAAY,QAAQ,IAAI;AAAA,UACjC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;AAEO,SAAS,yBACd,QACA,UACkB;AAClB,MAAI,OAAO,QAAQ,uBAAuB,EAAG,QAAO,CAAC;AACrD,QAAM,UAA4B,CAAC;AACnC,QAAM,OAAO,oBAAI,IAAY;AAC7B,MAAI,OAAuB;AAC3B,SAAO,MAAM;AACX,QAAI,gBAAgB,aAAa;AAC/B,iBAAW,CAAC,MAAM,IAAI,KAAK,oBAAoB;AAC7C,cAAM,KAAK,KAAK,aAAa,IAAI;AACjC,YAAI,IAAI;AACN,gBAAM,MAAM,GAAG,IAAI,IAAI,EAAE;AACzB,cAAI,CAAC,KAAK,IAAI,GAAG,GAAG;AAClB,iBAAK,IAAI,GAAG;AACZ,kBAAM,MAAiB,EAAE,MAAM,GAAG;AAClC,kBAAM,SAAS,aAAa,KAAK,QAAQ;AACzC,oBAAQ,KAAK;AAAA,cACX,SAAS;AAAA,cACT;AAAA,cACA;AAAA,cACA,OAAO,YAAY,QAAQ,IAAI;AAAA,YACjC,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;AAEO,SAAS,qBAAqB,KAAoC;AACvE,QAAM,QAAQ,mBAAmB,KAAK,CAAC,CAAC,EAAE,IAAI,MAAM,SAAS,IAAI,IAAI;AACrE,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,CAAC,IAAI,IAAI;AACf,QAAM,WAAW,IAAI,IAAI,KAAK,IAAI,OAAO,IAAI,EAAE,CAAC;AAChD,QAAME,MAAK,SAAS,cAAc,QAAQ;AAC1C,MAAIA,eAAc,eAAeA,IAAG,YAAa,QAAOA;AACxD,SAAO;AACT;AAOO,SAAS,0BACd,SACyB;AACzB,MAAI,UAAyB;AAC7B,SAAO;AAAA,IACL,KAAK,KAAK,MAAM;AACd,YAAMA,MAAK,qBAAqB,GAAG;AACnC,UAAI,CAACA,KAAI;AACP,kBAAU;AACV,gBAAQ,KAAK;AACb;AAAA,MACF;AACA,YAAM,MAAM,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AACjC,UAAI,QAAQ,WAAW,QAAQ,UAAW;AAC1C,gBAAU;AACV,cAAQ,KAAKA,KAAI,IAAI;AAAA,IACvB;AAAA,IACA,OAAO;AACL,gBAAU;AACV,cAAQ,KAAK;AAAA,IACf;AAAA,EACF;AACF;AAEO,SAAS,gBAAgB,SAAsC;AACpE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,aAAa,CAAC,WAAW,yBAAyB,QAAQ,QAAQ;AAAA,IAClE;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,MAAI,UAAU;AACd,MAAI,YAAgC;AACpC,MAAI,gBAAyC;AAC7C,MAAI,QAA0B,CAAC;AAC/B,MAAI,aAAa;AACjB,MAAI,aAAuC,EAAE,GAAG,GAAG,GAAG,EAAE;AAExD,QAAM,YAAY,MAChB,MAAM,SAAS,IACX,EAAE,SAAS,OAAO,OAAO,YAAY,SAAS,MAAM,UAAU,EAAE,IAChE;AAEN,QAAM,cAAc,CAAC,MAAwB;AAC3C,QAAI,EAAE,EAAE,kBAAkB,SAAU;AACpC,UAAM,UAAU,WAAW,EAAE,MAAM;AACnC,UAAM,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ;AAC5C,iBAAa;AACb,UAAM,QAAQ,QAAQ,SAAS,IAAI,QAAQ,CAAC,EAAE,UAAU;AACxD,QAAI,OAAO;AACT,UAAI,UAAU,WAAW;AACvB,oBAAY;AACZ,gBAAQ;AACR,qBAAa;AACb,gBAAQ,SAAS,EAAE,QAAQ,MAAM,MAAM,CAAC,EAAE,GAAG;AAAA,MAC/C;AACA,gBAAU,UAAU,GAAG,MAAM;AAAA,IAC/B,WAAW,WAAW;AACpB,kBAAY;AACZ,cAAQ,CAAC;AACT,mBAAa;AACb,cAAQ,SAAS,EAAE,QAAQ,MAAM,IAAI;AACrC,gBAAU,MAAM,MAAM;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,UAAU,CAAC,MAAwB;AACvC,QAAI,EAAE,EAAE,kBAAkB,SAAU;AACpC,QAAI,EAAE,OAAO,QAAQ,uBAAuB,EAAG;AAC/C,QAAI,MAAM,WAAW,EAAG;AACxB,MAAE,eAAe;AACjB,MAAE,gBAAgB;AAClB,UAAM,QAAQ,MAAM,UAAU;AAC9B,YAAQ,SAAS,EAAE,QAAQ,OAAO,MAAM,GAAG;AAC3C,eAAW,OAAO,EAAE,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ,CAAC;AAAA,EAClD;AAEA,QAAM,gBAAgB,CAAC,MAAwB;AAC7C,QAAI,MAAM,UAAU,EAAG;AACvB,MAAE,eAAe;AACjB,MAAE,gBAAgB;AAClB,kBAAc,aAAa,KAAK,MAAM;AACtC,UAAM,QAAQ,MAAM,UAAU;AAC9B,YAAQ,SAAS,EAAE,QAAQ,MAAM,MAAM,GAAG;AAC1C,cAAU,UAAU,GAAI,UAAU;AAAA,EACpC;AAEA,SAAO;AAAA,IACL,QAAQ;AACN,UAAI,QAAS;AACb,gBAAU;AACV,UAAI,OAAO,aAAa,aAAa;AACnC,wBAAgB,SAAS,cAAc,OAAO;AAC9C,sBAAc,aAAa,+BAA+B,EAAE;AAC5D,sBAAc,cACZ;AACF,iBAAS,KAAK,YAAY,aAAa;AAAA,MACzC;AACA,eAAS,iBAAiB,aAAa,WAAW;AAClD,eAAS,iBAAiB,SAAS,SAAS,IAAI;AAChD,eAAS,iBAAiB,eAAe,eAAe,IAAI;AAAA,IAC9D;AAAA,IACA,UAAU;AACR,UAAI,CAAC,QAAS;AACd,gBAAU;AACV,kBAAY;AACZ,cAAQ,CAAC;AACT,mBAAa;AACb,UAAI,eAAe;AACjB,sBAAc,OAAO;AACrB,wBAAgB;AAAA,MAClB;AACA,eAAS,oBAAoB,aAAa,WAAW;AACrD,eAAS,oBAAoB,SAAS,SAAS,IAAI;AACnD,eAAS,oBAAoB,eAAe,eAAe,IAAI;AAC/D,cAAQ,SAAS,EAAE,QAAQ,MAAM,IAAI;AACrC,gBAAU,MAAM,IAAI;AAAA,IACtB;AAAA,EACF;AACF;;;AC/PA,IAAAC,iBAKO;;;ACLP,kBAAsC;AACtC,4BAAwB;AAEjB,SAAS,MAAM,QAA8B;AAClD,aAAO,mCAAQ,kBAAK,MAAM,CAAC;AAC7B;;;ACcO,SAAS,GACd,KACA,UAA0B,CAAC,GAC3B,WAA4B,CAAC,GACH;AAC1B,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,MAAI,QAAQ,MAAO,MAAK,YAAY,GAAG,QAAQ,KAAK;AACpD,MAAI,QAAQ,OAAO;AACjB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,KAAK,GAAG;AACxD,UAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,MAAO;AAC9D,UAAI,UAAU,MAAM;AAClB,aAAK,aAAa,KAAK,EAAE;AAAA,MAC3B,OAAO;AACL,aAAK,aAAa,KAAK,OAAO,KAAK,CAAC;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACA,MAAI,QAAQ,SAAS;AACnB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,OAAO,GAAG;AAC1D,WAAK,QAAQ,GAAG,IAAI;AAAA,IACtB;AAAA,EACF;AACA,MAAI,QAAQ,OAAO;AACjB,WAAO,OAAO,KAAK,OAAO,QAAQ,KAAK;AAAA,EACzC;AACA,MAAI,QAAQ,SAAS,QAAW;AAC9B,SAAK,cAAc,QAAQ;AAAA,EAC7B;AACA,QAAM,OAAO,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ;AAC3D,aAAW,SAAS,MAAM;AACxB,QAAI,UAAU,QAAQ,UAAU,UAAa,UAAU,MAAO;AAC9D,SAAK;AAAA,MACH,OAAO,UAAU,WAAW,SAAS,eAAe,KAAK,IAAI;AAAA,IAC/D;AAAA,EACF;AACA,SAAO;AACT;;;AC1CA,IAAM,mBAAoC,EAAE,KAAK,IAAI;AAE9C,IAAM,mBAAoC,EAAE,KAAK,IAAI;AAErD,IAAM,mBAAoC,EAAE,KAAK,IAAI;AAErD,SAAS,oBAAoB,UAAmC;AACrE,QAAM,QAAkB,CAAC;AACzB,MAAI,SAAS,QAAQ,MAAO,OAAM,KAAK,QAAG;AAC1C,MAAI,SAAS,MAAO,OAAM,KAAK,QAAG;AAClC,QAAM,KAAK,SAAS,IAAI,YAAY,CAAC;AACrC,SAAO,MAAM,KAAK,EAAE;AACtB;AAEA,SAAS,gBAAgB,GAAkB,UAAoC;AAC7E,QAAM,UAAU,SAAS,QAAQ;AACjC,QAAM,YAAY,SAAS,UAAU;AACrC,QAAM,SAAS,EAAE,WAAW,EAAE;AAC9B,SACE,WAAW,WACX,EAAE,aAAa,aACf,CAAC,EAAE,UACH,EAAE,IAAI,YAAY,MAAM,SAAS,IAAI,YAAY;AAErD;AASO,SAAS,eAAe,SAA4C;AACzE,QAAM,EAAE,YAAY,SAAS,gBAAgB,IAAI;AACjD,QAAM,WAAW,QAAQ,YAAY;AACrC,QAAM,OAAO,CAAC,UAA8B,QAAQ,KAAK,KAAK;AAE9D,QAAM,YAAY,CAAC,MAA2B;AAC5C,UAAM,QAAQ,EAAE,WAAW,EAAE;AAC7B,UAAM,SAAS,gBAAgB,GAAG,QAAQ;AAC1C,UAAM,WAAW,gBAAgB,GAAG,gBAAgB;AACpD,UAAM,SAAS,gBAAgB,GAAG,gBAAgB;AAClD,UAAM,eAAe,SAAS,CAAC,EAAE,UAAU,CAAC,EAAE,YAAY,EAAE,QAAQ;AACpE,UAAM,QAAQ,EAAE,QAAQ;AACxB,UAAM,WAAW,SAAS;AAC1B,QAAI,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,SAAU;AAElD,UAAM,QAAQ,gBAAgB;AAC9B,QAAI,OAAO,OAAO,GAAG;AACnB,UAAI,YAAY,UAAU,UAAU;AAClC,cAAM,MAAM;AACZ,UAAE,eAAe;AACjB,UAAE,gBAAgB;AAAA,MACpB;AACA;AAAA,IACF;AAEA,QAAI,UAAU;AACZ,UAAI,OAAO;AACT,UAAE,eAAe;AACjB,UAAE,gBAAgB;AAClB,cAAM,KAAK;AAAA,MACb;AACA;AAAA,IACF;AAEA,QAAI,QAAQ;AACV,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,WAAK,EAAE,MAAM,mBAAmB,CAAC;AACjC;AAAA,IACF;AAEA,QAAI,QAAQ;AACV,YAAMC,SAAQ,QAAQ,SAAS;AAC/B,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB;AAAA,QACEA,OAAM,MAAM,WAAW,IAAI,EAAE,MAAM,eAAe,IAAI,EAAE,MAAM,QAAQ;AAAA,MACxE;AACA;AAAA,IACF;AAEA,UAAM,QAAQ,QAAQ,SAAS;AAC/B,UAAM,UACJ,MAAM,MAAM,SAAS,KACrB,MAAM,oBAAoB,QAC1B,MAAM;AACR,QAAI,CAAC,QAAS;AACd,MAAE,eAAe;AACjB,MAAE,gBAAgB;AAClB,SAAK,EAAE,MAAM,MAAM,CAAC;AAAA,EACtB;AAIA,QAAM,MAAM,WAAW;AACvB,MAAI,iBAAiB,WAAW,WAAW,EAAE,SAAS,KAAK,CAAC;AAC5D,aAAW,iBAAiB,WAAW,WAA4B;AAAA,IACjE,SAAS;AAAA,EACX,CAAC;AACD,SAAO,MAAM;AACX,QAAI,oBAAoB,WAAW,WAAW,EAAE,SAAS,KAAK,CAAC;AAC/D,eAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,QACE,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;;;AHhGA,IAAM,aACJ;AAEF,IAAM,eACJ;AAEF,IAAM,sBACJ;AAEF,IAAM,cACJ;AAEF,IAAM,gCACJ;AAEK,SAAS,cAAc,SAAkC;AAC9D,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,EACF,IAAI;AAEJ,QAAM,OAAO,GAAG,OAAO;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,MACL,sBAAsB;AAAA,MACtB,MAAM;AAAA,IACR;AAAA,IACA,OAAO;AAAA,MACL,UAAU;AAAA,MACV,QAAQ,OAAO,QAAQ;AAAA,MACvB,eAAe;AAAA,MACf,QAAQ;AAAA,IACV;AAAA,EACF,CAAC;AAED,MAAI,UAA8B;AAClC,MAAI,UAAU;AACZ,cAAU,GAAG,QAAQ;AAAA,MACnB,OAAO;AAAA,MACP,OAAO,EAAE,4BAA4B,GAAG;AAAA,MACxC,MAAM;AAAA,IACR,CAAC;AACD,SAAK,YAAY,OAAO;AAAA,EAC1B;AAEA,QAAM,oBAAgB,eAAAC,eAAoB,0BAAW;AACrD,gBAAc,aAAa,SAAS,UAAU;AAC9C,gBAAc,aAAa,eAAe,MAAM;AAChD,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,MAAM;AAAA,QACN,gCAAgC;AAAA,QAChC,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACA,eAAa,SAAS;AACtB,eAAa,iBAAiB,SAAS,CAAC,MAAM;AAC5C,MAAE,gBAAgB;AAClB,YAAQ,KAAK,EAAE,MAAM,QAAQ,CAAC;AAAA,EAChC,CAAC;AACD,OAAK,YAAY,YAAY;AAE7B,QAAM,kBAAc,eAAAA,eAAoB,gCAAiB;AACzD,cAAY,aAAa,SAAS,UAAU;AAC5C,cAAY,aAAa,eAAe,MAAM;AAC9C,QAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,MAAM;AAAA,QACN,8BAA8B;AAAA,QAC9B,cAAc,YAAY,oBAAoB,gBAAgB,CAAC;AAAA,MACjE;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACA,aAAW,iBAAiB,SAAS,CAAC,MAAM;AAC1C,MAAE,gBAAgB;AAClB,YAAQ,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAAA,EAC3C,CAAC;AACD,OAAK,YAAY,UAAU;AAE3B,QAAM,kBAAc,eAAAA,eAAoB,sBAAO;AAC/C,cAAY,aAAa,SAAS,UAAU;AAC5C,cAAY,aAAa,eAAe,MAAM;AAC9C,QAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,MAAM;AAAA,QACN,8BAA8B;AAAA,QAC9B,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACA,aAAW,iBAAiB,SAAS,CAAC,MAAM;AAC1C,MAAE,gBAAgB;AAClB,QAAI,QAAQ,SAAS,EAAE,MAAM,SAAS,GAAG;AACvC,cAAQ,KAAK,EAAE,MAAM,QAAQ,CAAC;AAAA,IAChC,OAAO;AACL,cAAQ,KAAK,EAAE,MAAM,eAAe,CAAC;AAAA,IACvC;AAAA,EACF,CAAC;AACD,OAAK,YAAY,UAAU;AAC3B,YAAU,YAAY,IAAI;AAE1B,QAAM,mBAAmB,MAAY;AACnC,UAAM,QAAQ,QAAQ,SAAS;AAE/B,UAAM,gBAAgB,MAAM;AAC5B,eAAW;AAAA,MACT;AAAA,MACA,gBAAgB,SAAS;AAAA,IAC3B;AACA,eAAW,YAAY;AAAA,MACrB;AAAA,MACA,iBAAiB;AAAA,IACnB;AAEA,UAAM,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS,CAAC,KAAK;AACnD,UAAM,cAAc,KAAK,OAAO;AAChC,eAAW;AAAA,MACT;AAAA,MACA,cAAc,SAAS;AAAA,IACzB;AACA,eAAW,YAAY,GAAG,cAAc,eAAe,mBAAmB;AAE1E,UAAM,kBAAkB,MAAM,oBAAoB;AAClD,iBAAa;AAAA,MACX;AAAA,MACA,kBAAkB,SAAS;AAAA,IAC7B;AACA,iBAAa,YAAY;AAAA,MACvB;AAAA,MACA,mBAAmB;AAAA,IACrB;AACA,iBAAa,SAAS,CAAC;AAAA,EACzB;AACA,mBAAiB;AACjB,QAAM,qBAAqB,QAAQ,UAAU,gBAAgB;AAE7D,MAAI,SAAiB;AACrB,QAAM,cAAc,MAAY;AAC9B,UAAM,SAAS;AACf,SAAK,MAAM,MAAM,OAAO,WAAW,KAAK,IAAI,SAAS;AACrD,SAAK,MAAM,SAAS,OAAO,WAAW,QAAQ,IAAI,SAAS;AAC3D,SAAK,MAAM,OAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AACrD,SAAK,MAAM,QAAQ,OAAO,SAAS,OAAO,IAAI,SAAS;AACvD,SAAK,aAAa,6BAA6B,MAAM;AAAA,EACvD;AACA,cAAY;AAEZ,MAAI,WAAW;AACf,MAAI,SAAS;AACb,MAAI,SAAS;AACb,MAAI,aAAa;AACjB,MAAI,YAAY;AAEhB,QAAM,cAAc,CAAC,MAAwB;AAC3C,QAAI,CAAC,SAAU;AACf,SAAK,MAAM,OAAO,GAAG,aAAa,EAAE,UAAU,MAAM;AACpD,SAAK,MAAM,MAAM,GAAG,YAAY,EAAE,UAAU,MAAM;AAAA,EACpD;AAEA,QAAM,YAAY,CAAC,MAAwB;AACzC,QAAI,CAAC,SAAU;AACf,eAAW;AACX,SAAK,MAAM,SAAS;AACpB,aAAS,oBAAoB,aAAa,WAAW;AACrD,aAAS,oBAAoB,WAAW,SAAS;AACjD,kBAAc,EAAE,SAAS,EAAE,OAAO;AAAA,EACpC;AAEA,QAAM,cAAc,CAAC,MAAwB;AAC3C,QAAI,EAAE,kBAAkB,eAAe,EAAE,OAAO,QAAQ,QAAQ,EAAG;AACnE,UAAM,OAAO,KAAK,sBAAsB;AACxC,eAAW;AACX,iBAAa,KAAK;AAClB,gBAAY,KAAK;AACjB,aAAS,EAAE;AACX,aAAS,EAAE;AACX,SAAK,MAAM,SAAS;AACpB,WAAO,OAAO,KAAK,OAAO;AAAA,MACxB,KAAK,GAAG,SAAS;AAAA,MACjB,MAAM,GAAG,UAAU;AAAA,MACnB,QAAQ;AAAA,MACR,OAAO;AAAA,IACT,CAAC;AACD,aAAS,iBAAiB,aAAa,WAAW;AAClD,aAAS,iBAAiB,WAAW,SAAS;AAC9C,MAAE,eAAe;AAAA,EACnB;AACA,OAAK,iBAAiB,aAAa,WAAW;AAE9C,WAAS,OAAO,MAAoB;AAClC,aAAS;AACT,gBAAY;AAAA,EACd;AAEA,WAAS,cAAc,GAAW,GAAiB;AACjD,UAAM,aAAa,KAAK,OAAO,cAAc,KAAK,MAAM,SAAS;AACjE,UAAM,WAAW,KAAK,OAAO,eAAe,KAAK,MAAM,QAAQ;AAC/D,WAAO,GAAG,QAAQ,IAAI,UAAU,EAAY;AAAA,EAC9C;AAEA,SAAO;AAAA,IACL,UAAU;AACR,yBAAmB;AACnB,WAAK,oBAAoB,aAAa,WAAW;AACjD,eAAS,oBAAoB,aAAa,WAAW;AACrD,eAAS,oBAAoB,WAAW,SAAS;AACjD,WAAK,OAAO;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA,IAAI,SAAS;AACX,aAAO;AAAA,IACT;AAAA,IACA,IAAI,OAAO;AACT,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AI7OA,IAAM,gBAAgB;AACtB,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAC7B,IAAM,mBAAmB;AAElB,SAAS,cAAc,MAA4B;AACxD,QAAM,EAAE,UAAU,IAAI;AAEtB,QAAM,WAAW,SAAS,cAAc,KAAK;AAC7C,WAAS,aAAa,+BAA+B,EAAE;AACvD,WAAS,MAAM,WAAW;AAC1B,WAAS,MAAM,QAAQ;AACvB,WAAS,MAAM,SAAS,OAAO,SAAS;AACxC,WAAS,MAAM,kBAAkB,iBAAiB,gBAAgB;AAClE,WAAS,MAAM,UAAU;AACzB,WAAS,MAAM,gBAAgB;AAC/B,WAAS,MAAM,SAAS;AACxB,WAAS,iBAAiB,SAAS,CAAC,MAAM;AACxC,MAAE,gBAAgB;AAClB,YAAQ,YAAY;AAAA,EACtB,CAAC;AACD,YAAU,YAAY,QAAQ;AAE9B,QAAM,MAAM,SAAS,cAAc,KAAK;AACxC,MAAI,aAAa,sBAAsB,EAAE;AACzC,MAAI,MAAM,WAAW;AACrB,MAAI,MAAM,gBAAgB;AAC1B,MAAI,MAAM,SAAS,OAAO,YAAY,CAAC;AACvC,MAAI,MAAM,YAAY;AACtB,MAAI,MAAM,UAAU;AAEpB,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,aAAa,4BAA4B,EAAE;AACjD,QAAM,MAAM,WAAW;AACvB,QAAM,MAAM,OAAO;AACnB,QAAM,MAAM,SAAS;AACrB,QAAM,MAAM,UAAU;AACtB,QAAM,MAAM,WAAW;AACvB,QAAM,MAAM,aAAa;AACzB,QAAM,MAAM,aAAa;AACzB,QAAM,MAAM,aAAa;AACzB,QAAM,MAAM,QAAQ;AACpB,QAAM,MAAM,UAAU;AAEtB,MAAI,YAAY,KAAK;AACrB,YAAU,YAAY,GAAG;AAEzB,MAAI,SAAyB;AAC7B,MAAI,OAAqC;AAAA,IACvC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAEA,MAAI,QAAuB;AAC3B,MAAI,WAAW;AAEf,QAAM,WAAW,MAAY;AAC3B,QAAI,UAAU,KAAM;AACpB,YACE,OAAO,0BAA0B,aAC7B,sBAAsB,MAAM;AAC1B,cAAQ;AACR,qBAAe;AAAA,IACjB,CAAC,IACA,WAAW,MAAM;AAChB,cAAQ;AACR,qBAAe;AAAA,IACjB,GAAG,CAAC;AAAA,EACZ;AAEA,QAAM,iBAAiB,MAAY;AACjC,QAAI,UAAU,KAAM;AACpB,QAAI,OAAO,yBAAyB,WAAY,sBAAqB,KAAK;AAAA,QACrE,cAAa,KAAiD;AACnE,YAAQ;AAAA,EACV;AAEA,QAAM,WAAW,MAAY,SAAS;AACtC,QAAM,WAAW,MAAY,SAAS;AAEtC,QAAM,SAAS,MAAY;AACzB,QAAI,SAAU;AACd,eAAW;AACX,WAAO,iBAAiB,UAAU,QAAQ;AAC1C,WAAO,iBAAiB,UAAU,UAAU;AAAA,MAC1C,SAAS;AAAA,MACT,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,QAAM,SAAS,MAAY;AACzB,QAAI,CAAC,SAAU;AACf,eAAW;AACX,WAAO,oBAAoB,UAAU,QAAQ;AAC7C,WAAO,oBAAoB,UAAU,UAAU;AAAA,MAC7C,SAAS;AAAA,IACX,CAAyB;AACzB,mBAAe;AAAA,EACjB;AAEA,WAAS,iBAAuB;AAC9B,QAAI,CAAC,OAAQ;AACb,UAAM,OAAO,OAAO,sBAAsB;AAC1C,UAAM,MAAM,KAAK;AACjB,UAAM,MAAM,KAAK,MAAM;AACvB,UAAM,OAAO,KAAK,OAAO;AACzB,UAAM,IAAI,KAAK,QAAQ,MAAM;AAC7B,UAAM,IAAI,KAAK,SAAS,MAAM;AAC9B,QAAI,MAAM,MAAM,GAAG,GAAG;AACtB,QAAI,MAAM,OAAO,GAAG,IAAI;AACxB,QAAI,MAAM,QAAQ,GAAG,CAAC;AACtB,QAAI,MAAM,SAAS,GAAG,CAAC;AAEvB,QAAI,KAAK,UAAU;AACjB,YAAM,KAAK,OAAO;AAClB,YAAM,KAAK,OAAO;AAClB,eAAS,MAAM,WAAW,WAAW,IAAI,IAAI,MAAM,KAAK,GAAG,CAAC;AAAA,IAC9D;AAAA,EACF;AAEA,WAAS,cAAoB;AAC3B,QAAI,MAAM,cAAc,KAAK;AAC7B,QAAI,MAAM,cAAc,KAAK;AAC7B,QAAI,MAAM,cAAc,GAAG,KAAK,WAAW;AAC3C,QAAI,MAAM,kBAAkB,cAAc,KAAK,OAAO,KAAK,WAAW;AACtE,QAAI,MAAM,eAAe;AACzB,QAAI,KAAK,OAAO;AACd,YAAM,cAAc,KAAK;AACzB,YAAM,MAAM,kBAAkB,KAAK;AACnC,YAAM,MAAM,UAAU;AAAA,IACxB,OAAO;AACL,YAAM,cAAc;AACpB,YAAM,MAAM,UAAU;AAAA,IACxB;AACA,aAAS,MAAM,UAAU,KAAK,WAAW,KAAK;AAC9C,QAAI,CAAC,KAAK,UAAU;AAClB,eAAS,MAAM,WAAW;AAAA,IAC5B;AAAA,EACF;AAEA,QAAM,UAAmB;AAAA,IACvB,WAAW;AAAA,IACX,KAAK,YAAY,UAAU;AACzB,eAAS;AACT,aAAO;AAAA,QACL,OAAO,UAAU,SAAS;AAAA,QAC1B,OAAO,UAAU,SAAS;AAAA,QAC1B,SAAS,UAAU,WAAW;AAAA,QAC9B,aAAa,UAAU,eAAe;AAAA,QACtC,aAAa,UAAU,eAAe;AAAA,QACtC,aAAa,UAAU,eAAe;AAAA,QACtC,UAAU,UAAU,YAAY;AAAA,MAClC;AACA,kBAAY;AACZ,qBAAe;AACf,UAAI,MAAM,UAAU;AACpB,aAAO;AAAA,IACT;AAAA,IACA,OAAO;AACL,eAAS;AACT,UAAI,MAAM,UAAU;AACpB,eAAS,MAAM,UAAU;AACzB,eAAS,MAAM,WAAW;AAC1B,aAAO;AAAA,IACT;AAAA,IACA,UAAU;AACR,aAAO;AACP,UAAI,OAAO;AACX,eAAS,OAAO;AAChB,eAAS;AAAA,IACX;AAAA,IACA,IAAI,YAAY;AACd,aAAO,WAAW;AAAA,IACpB;AAAA,EACF;AAEA,SAAO;AACT;AAOA,SAAS,WACP,IACA,IACA,GACA,GACA,GACA,GACQ;AACR,QAAM,QAAQ,QAAQ,EAAE,IAAI,EAAE;AAC9B,QAAM,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AAC/C,SAAO,iBAAiB,KAAK,GAAG,KAAK;AACvC;AAEA,SAAS,cAAc,OAAe,OAAuB;AAC3D,MAAI,MAAM,WAAW,GAAG,GAAG;AACzB,UAAM,MAAM,MAAM,MAAM,CAAC;AACzB,UAAM,SAAS;AAAA,MACb,IAAI,WAAW,IACX,IACG,MAAM,EAAE,EACR,IAAI,CAAC,MAAM,IAAI,CAAC,EAChB,KAAK,EAAE,IACV;AAAA,MACJ;AAAA,IACF;AACA,UAAM,IAAK,UAAU,KAAM;AAC3B,UAAM,IAAK,UAAU,IAAK;AAC1B,UAAM,IAAI,SAAS;AACnB,WAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK;AAAA,EACxC;AACA,SAAO;AACT;;;ACrOO,SAAS,oBAAoB,MAAwC;AAC1E,QAAM,EAAE,SAAS,UAAU,IAAI;AAE/B,MAAI,WAA0B,QAAQ,SAAS,EAAE;AAEjD,QAAM,SAAS,CAAC,eAA+C;AAC7D,QAAI,eAAe,OAAQ,QAAO;AAClC,UAAM,YAAY,mBAAmB;AACrC,QAAI,UAAW,QAAO;AACtB,QACE,OAAO,WAAW,eAClB,OAAO,OAAO,eAAe,YAC7B;AACA,aAAO,OAAO,WAAW,8BAA8B,EAAE,UACrD,SACA;AAAA,IACN;AACA,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,MAAY;AACvB,UAAM,aAAa,QAAQ,SAAS,EAAE;AACtC,UAAM,OAAO,OAAO,UAAU;AAC9B,QAAI,SAAS,SAAU;AACvB,eAAW;AACX,YAAQ,SAAS,EAAE,QAAQ,SAAS,YAAY,IAAI;AACpD,gBAAY,IAAI;AAAA,EAClB;AAEA,OAAK;AAEL,MAAI,MAA6B;AACjC,QAAM,cAAc,MAAY,KAAK;AACrC,MACE,OAAO,WAAW,eAClB,OAAO,OAAO,eAAe,YAC7B;AACA,UAAM,OAAO,WAAW,8BAA8B;AACtD,QAAI,OAAO,IAAI,qBAAqB,YAAY;AAC9C,UAAI,iBAAiB,UAAU,WAAW;AAAA,IAC5C,WAAW,OAAO,IAAI,gBAAgB,YAAY;AAEhD,UAAI,YAAY,WAAW;AAAA,IAC7B;AAAA,EACF;AAEA,MAAI,WAAoC;AACxC,MACE,OAAO,qBAAqB,eAC5B,OAAO,aAAa,aACpB;AACA,eAAW,IAAI,iBAAiB,MAAM,KAAK,CAAC;AAC5C,aAAS,QAAQ,SAAS,iBAAiB;AAAA,MACzC,YAAY;AAAA,MACZ,iBAAiB,CAAC,OAAO;AAAA,IAC3B,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,QAAQ,UAAU,CAAC,OAAO,SAAS;AACrD,QAAI,MAAM,UAAU,KAAK,MAAO,MAAK;AAAA,EACvC,CAAC;AAED,SAAO;AAAA,IACL,UAAU;AACR,kBAAY;AACZ,UAAI,KAAK;AACP,YAAI,OAAO,IAAI,wBAAwB,YAAY;AACjD,cAAI,oBAAoB,UAAU,WAAW;AAAA,QAC/C,WAAW,OAAO,IAAI,mBAAmB,YAAY;AACnD,cAAI,eAAe,WAAW;AAAA,QAChC;AAAA,MACF;AACA,gBAAU,WAAW;AAAA,IACvB;AAAA,IACA,IAAI,WAAW;AACb,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,qBAA4C;AACnD,MAAI,OAAO,aAAa,YAAa,QAAO;AAC5C,QAAM,OAAO,SAAS;AACtB,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,KAAK,UAAU,SAAS,MAAM,EAAG,QAAO;AAC5C,MAAI,KAAK,UAAU,SAAS,OAAO,EAAG,QAAO;AAC7C,SAAO;AACT;;;ACjDO,SAAS,mBACd,SACc;AACd,QAAM,UAAU,mBAAmB;AAEnC,QAAM,OAAO,kBAAkB;AAAA,IAC7B,OAAO,QAAQ;AAAA,IACf,aAAa,QAAQ;AAAA,IACrB,cAAc,QAAQ,QAAQ,SAAS,EAAE;AAAA,EAC3C,CAAC;AACD,UAAQ,IAAI,IAAI;AAEhB,QAAM,gBAAgB,oBAAoB;AAAA,IACxC,SAAS,QAAQ;AAAA,IACjB,WAAW,CAAC,UAAU,KAAK,WAAW,KAAK;AAAA,EAC7C,CAAC;AACD,UAAQ,IAAI,aAAa;AAEzB,QAAM,UAAU,cAAc,EAAE,WAAW,KAAK,SAAS,CAAC;AAC1D,UAAQ,IAAI,OAAO;AAEnB,QAAM,UAAU,oBAAoB;AAAA,IAClC,WAAW,KAAK;AAAA,IAChB,SAAS,QAAQ;AAAA,EACnB,CAAC;AACD,UAAQ,IAAI,OAAO;AAEnB,QAAM,aAAa,QAAQ,WAAW;AAEtC,QAAM,YAAY,CAChB,OACA,WACS;AACT,QAAI,CAAC,OAAO;AACV,cAAQ,KAAK;AACb,cAAQ,OAAO,MAAM,MAAM;AAC3B;AAAA,IACF;AACA,UAAM,EAAE,QAAQ,IAAI;AACpB,YAAQ,KAAK,QAAQ,SAAS;AAAA,MAC5B,OAAO,WAAW,QAAQ,IAAI,IAAI,EAAE;AAAA,IACtC,CAAC;AACD,YAAQ;AAAA,MACN;AAAA,QACE,QAAQ,QAAQ;AAAA,QAChB,MAAM,QAAQ;AAAA,QACd,OACE,MAAM,QAAQ,SAAS,IACnB,EAAE,OAAO,MAAM,OAAO,OAAO,MAAM,QAAQ,OAAO,IAClD;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,gBAAgB;AAAA,IAChC,SAAS,QAAQ;AAAA,IACjB,UAAU,QAAQ;AAAA,IAClB,UAAU,QAAQ,WAAW;AAAA,IAC7B,SAAS,CAAC,OAAO,WAAW;AAC1B,gBAAU,OAAO,MAAM;AACvB,mBAAa,OAAO,WAAW,MAAM,MAAM;AAAA,IAC7C;AAAA,IACA,SAAS,CAAC,OAAO,WAAW;AAC1B,gBAAU,OAAO,MAAM;AAAA,IACzB;AAAA,EACF,CAAC;AACD,UAAQ,IAAI,SAAS;AAErB,QAAM,UAAU,cAAc;AAAA,IAC5B,WAAW,KAAK;AAAA,IAChB,SAAS,QAAQ;AAAA,IACjB,eAAe,QAAQ;AAAA,IACvB,UAAU,QAAQ;AAAA,EACpB,CAAC;AACD,UAAQ,IAAI,OAAO;AAEnB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,QAAQ;AAAA,EACnB;AACF;;;AC5IO,SAAS,YAAqB;AACnC,MAAI;AACF,QACE,OAAO,YAAY,eACnB,OAAO,QAAQ,KAAK,aAAa,UACjC;AACA,aAAO,QAAQ,IAAI,aAAa;AAAA,IAClC;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO;AACT;;;ACoHO,IAAM,sBAAN,cAAkC,MAAM;AAAA,EAC7C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;;;AC9GO,SAAS,oBACd,SACe;AACf,QAAM,gBAAgB;AACtB,QAAM,QAAgB,CAAC;AACvB,QAAM,aAA0B,CAAC;AACjC,QAAM,eAA4B,CAAC;AACnC,QAAM,cAAc;AACpB,QAAM,MAAM,QAAQ,OAAO,UAAU;AAErC,MAAI;AACF,UAAM,SAAS,aAAa,QAAQ,aAAa;AACjD,QAAI,QAAQ;AACV,YAAM,SAAS,KAAK,MAAM,MAAM;AAChC,mBAAa,KAAK,GAAG,MAAM;AAAA,IAC7B;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,WAAS,mBAAyB;AAChC,QAAI;AACF,mBAAa,QAAQ,eAAe,KAAK,UAAU,YAAY,CAAC;AAAA,IAClE,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,WAAS,SAAS,MAAkB;AAClC,QACE,SAAS,QACT,OAAO,SAAS,YAChB,OAAO,KAAK,OAAO,YACnB,KAAK,GAAG,WAAW,GACnB;AACA,YAAM,IAAI,oBAAoB,sCAAsC;AAAA,IACtE;AACA,QAAI,OAAO,KAAK,YAAY,YAAY;AACtC,YAAM,IAAI;AAAA,QACR,QAAQ,KAAK,EAAE;AAAA,MACjB;AAAA,IACF;AACA,QAAI,CAAC,KAAK,WAAW,CAAC,KAAK,SAAS;AAClC,YAAM,IAAI;AAAA,QACR,QAAQ,KAAK,EAAE;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAEA,WAAS,aAAa,UAAsB;AAC1C,QAAI,CAAC,OAAO,CAAC,SAAS,QAAS;AAC/B,UAAM,YAAY,QAAQ,QAAQ,SAAS,EAAE;AAC7C,QAAI,CAAC,UAAW;AAChB,QAAI,CAAC,SAAS,QAAQ,SAAS,EAAG;AAClC,eAAW,YAAY,OAAO;AAC5B,UAAI,SAAS,OAAO,SAAS,GAAI;AACjC,UAAI,CAAC,SAAS,QAAS;AACvB,UAAI,SAAS,QAAQ,SAAS,GAAG;AAC/B,gBAAQ;AAAA,UACN,iBAAiB,SAAS,EAAE,iBAAiB,UAAU,IAAI,IAAI,UAAU,EAAE,0BAChD,SAAS,EAAE;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,WAAS,SAAS,MAAkB;AAClC,aAAS,IAAI;AACb,iBAAa,IAAI;AACjB,UAAM,cAAc,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,KAAK,EAAE;AAC3D,QAAI,eAAe,EAAG,OAAM,OAAO,aAAa,CAAC;AACjD,UAAM,KAAK,IAAI;AAAA,EACjB;AAEA,WAAS,WAAW,IAAkB;AACpC,UAAM,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE;AAC9C,QAAI,MAAM,EAAG;AACb,UAAM,OAAO,KAAK,CAAC;AACnB,UAAM,QAAQ,QAAQ,QAAQ,SAAS;AACvC,UAAM,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS,CAAC,KAAK;AACnD,QAAI,KAAK,OAAO,GAAI,OAAM,QAAQ,UAAU;AAAA,EAC9C;AAEA,WAAS,OAAwB;AAC/B,WAAO,MAAM,MAAM;AAAA,EACrB;AAEA,WAAS,IAAI,IAA8B;AACzC,WAAO,MAAM,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE;AAAA,EACtC;AAEA,WAAS,UAAU,KAA6B;AAC9C,aAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,YAAM,OAAO,MAAM,CAAC;AACpB,UAAI,KAAK,WAAW,KAAK,QAAQ,GAAG,EAAG,QAAO;AAAA,IAChD;AACA,WAAO;AAAA,EACT;AAEA,WAAS,YAAY,KAAsB;AACzC,UAAM,MAAM,WAAW,UAAU,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AACvD,QAAI,OAAO,EAAG,YAAW,OAAO,KAAK,CAAC;AACtC,eAAW,QAAQ,GAAG;AACtB,QAAI,WAAW,SAAS,YAAa,YAAW,SAAS;AAAA,EAC3D;AAEA,WAAS,SAAS,KAAsB;AACtC,UAAM,QAAQ,UAAU,GAAG;AAC3B,QAAI,CAAC,MAAO;AACZ,gBAAY,GAAG;AACf,UAAM,QAAQ,QAAQ,QAAQ,SAAS;AACvC,UAAM,QAAQ,OAAO,GAAG;AACxB,UAAM,QAAQ,UAAU,EAAE,IAAI,MAAM,IAAI,IAAI,CAAC;AAAA,EAC/C;AAEA,WAAS,UAAgC;AACvC,WAAO;AAAA,EACT;AAEA,WAAS,YAAkC;AACzC,WAAO;AAAA,EACT;AAEA,WAAS,eAAe,KAAsB;AAC5C,UAAM,MAAM,aAAa,UAAU,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AACzD,QAAI,OAAO,GAAG;AACZ,mBAAa,OAAO,KAAK,CAAC;AAAA,IAC5B,OAAO;AACL,mBAAa,QAAQ,GAAG;AAAA,IAC1B;AACA,qBAAiB;AAAA,EACnB;AAEA,WAAS,WAAW,KAAyB;AAC3C,WAAO,aAAa,KAAK,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAAA,EACjD;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC/JO,SAAS,IACd,MACA,SAAuB,CAAC,GACxB;AACA,SAAO,CAAC,QAA0B,CAAC,MAAoB;AACrD,UAAM,MAAoB,CAAC,IAAI;AAC/B,UAAM,WAAW,OAAO;AACxB,QAAI,CAAC,SAAU,QAAO;AACtB,eAAW,OAAO,OAAO,KAAK,QAAQ,GAAqB;AACzD,YAAM,SACH,MAAM,GAAG,KACT,OAAO,kBAAkB,GAAG;AAC/B,UAAI,WAAW,OAAW;AAC1B,YAAM,MAAM,SAAS,GAAG,EAAE,MAAgB;AAC1C,UAAI,IAAK,KAAI,KAAK,GAAG;AAAA,IACvB;AACA,WAAO;AAAA,EACT;AACF;;;ACdA,IAAM,YACJ;AAEK,IAAM,gBAAgB,IAAI,WAAW;AAAA,EAC1C,iBAAiB,EAAE,MAAM,WAAW,SAAS,UAAU;AAAA,EACvD,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,IACA,SAAS;AAAA,MACP,SAAS;AAAA,MACT,aAAa;AAAA,MACb,OACE;AAAA,MACF,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,EACF;AACF,CAAC;AAQM,SAAS,YACd,UAA8B,CAAC,GAC/B,WAA4B,CAAC,GACZ;AACjB,QAAM,EAAE,SAAS,MAAM,OAAO,OAAO,OAAO,GAAG,KAAK,IAAI;AACxD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,OAAO,GAAG,cAAc,EAAE,SAAS,KAAK,CAAC,GAAG,KAAK;AAAA,MACjD,OAAO,EAAE,aAAa,SAAS,GAAG,MAAM;AAAA,IAC1C;AAAA,IACA;AAAA,EACF;AACF;;;ACrDA,IAAM,aACJ;AAEK,SAAS,WACd,UAAuB,CAAC,GACxB,WAA4B,CAAC,GACZ;AACjB,QAAM,EAAE,OAAO,OAAO,GAAG,KAAK,IAAI;AAClC,SAAO,GAAG,QAAQ,EAAE,GAAG,MAAM,OAAO,GAAG,YAAY,KAAK,EAAE,GAAG,QAAQ;AACvE;;;AClBA,IAAAC,iBAAqD;;;ACIrD,IAAM,aACJ;AAEF,IAAM,qBAAqB;AAYpB,SAAS,eACd,OACA,UAA2B,CAAC,GACf;AACb,MAAI,iBAAiB,YAAY;AAC/B,UAAM,WAAW,MAAM,aAAa,OAAO,KAAK;AAChD,UAAM,WAAW,SAAS,QAAQ,oBAAoB,EAAE,EAAE,KAAK;AAC/D,UAAM,aAAa,SAAS,GAAG,UAAU,qBAAqB,CAAC;AAAA,EACjE;AAEA,QAAM,OAAO;AAAA,IACX;AAAA,IACA;AAAA,MACE,OAAO,GAAG,YAAY,QAAQ,WAAW,QAAQ,UAAU;AAAA,MAC3D,OAAO,EAAE,aAAa,aAAa,eAAe,OAAO;AAAA,IAC3D;AAAA,IACA,CAAC,KAAK;AAAA,EACR;AAEA,MAAI,QAAQ,QAAQ,CAAC,QAAQ,WAAW;AACtC,UAAM,MAAM,QAAQ,aAAa;AACjC,SAAK,MAAM,kBAAkB,sBAAsB,QAAQ,IAAI,IAAI,GAAG;AAAA,EACxE;AACA,SAAO;AACT;;;ADrCO,SAAS,eAAe,MAA8B;AAC3D,QAAM,QAAQ,WAAW,IAAI;AAC7B,QAAM,UAAM,eAAAC,eAAoB,MAAM,IAAI;AAC1C,MAAI,aAAa,eAAe,MAAM;AACtC,MAAI,aAAa,SAAS,GAAG,oBAAoB,MAAM,IAAI,CAAC;AAC5D,SAAO;AACT;AAGO,SAAS,mBAAmB,MAA+B;AAChE,QAAM,QAAQ,WAAW,IAAI;AAC7B,SAAO,eAAe,eAAe,IAAI,GAAG,EAAE,WAAW,MAAM,KAAK,CAAC;AACvE;AAGO,SAAS,gBAAgB,MAA+B;AAC7D,QAAM,QAAQ,WAAW,IAAI;AAC7B,QAAM,WAAO,eAAAA,eAAoB,MAAM,IAAI;AAC3C,OAAK,aAAa,eAAe,MAAM;AACvC,SAAO;AAAA,IACL;AAAA,MACE,OAAO,MAAM;AAAA,MACb,OAAO,EAAE,yBAAyB,KAAK;AAAA,IACzC;AAAA,IACA,CAAC,MAAM,MAAM,KAAK;AAAA,EACpB;AACF;;;AEpBO,SAAS,eAAe,SAAuC;AACpE,QAAM,EAAE,QAAQ,OAAO,cAAc,KAAK,IAAI;AAC9C,QAAM,OAAO,OAAO;AACpB,QAAM,QAAQ,WAAW,IAAI;AAC7B,QAAM,OAAO,WAAW,EAAE,OAAO,EAAE,wBAAwB,KAAK,EAAE,CAAC;AACnE,OAAK,OAAO,eAAe,IAAI,CAAC;AAChC,QAAM,WAAW,SAAS,YAAY,QAAQ,IAAI;AAClD,QAAM,OAAO,eACT,WACE,GAAG,MAAM,KAAK,SAAM,QAAQ,KAC5B,MAAM,QACR;AACJ,MAAI,MAAM;AACR,SAAK;AAAA,MACH,GAAG,QAAQ;AAAA,QACT,OAAO;AAAA,QACP;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;;;ACjCA,iBAA4B;;;ACA5B,kBAYO;AACP,mBAOO;AA6BP,SAAS,eAAkB,SAAgD;AACzE,QAAM,UAAW,QAAQ,EAAE,SAAS,QAAQ,EAAE;AAC9C,MAAI,QAAQ;AACZ,QAAM,MAAM,EAAE,SAAS,QAAa;AACpC,QAAM,KAAK,MAAM,QAAQ,EAAE,WAAW,OAAO;AAE7C,QAAM,gBAAgB,MAAM,QAAQ,EAAE,UAAU;AAEhD,QAAM,QAAQ,CAAC,UAAgC;AAC7C,UAAM,OAAO,IAAI;AACjB,UAAM,WAAQ,yBAAW,KAAK,IAAK,MAAsB,IAAI,IAAI;AACjE,QAAI,QAAQ,EAAE,OAAO;AACnB,cAAQ,IAAI,eAAe,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAAA,IACxE;AACA,QAAI,CAAC,cAAc,GAAG;AACpB,cAAQ;AACR,UAAI,UAAU;AAAA,IAChB;AACA,QAAI,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG;AACrB,cAAQ,EAAE,WAAW,MAAM,IAAI;AAAA,IACjC;AAAA,EACF;AAEA,QAAM,MAAM,MAAO,cAAc,IAAK,QAAQ,EAAE,QAAc;AAG9D,QAAM,UAAU,MAAM;AACpB,UAAM,IAAI,IAAI;AACd,QAAI,CAAC,GAAG,EAAE,GAAG,IAAI,OAAO,EAAG,KAAI,UAAU;AAAA,EAC3C;AAEA,SAAO;AAAA,IACL;AAAA,IACA,KAAK,IAAI,MAAM,KAAK;AAAA,MAClB,IAAI,QAAQ,KAAK;AACf,YAAI,QAAQ,WAAW;AACrB,kBAAQ;AACR,iBAAO,OAAO;AAAA,QAChB;AACA,eAAO,QAAQ,IAAI,QAAQ,GAAG;AAAA,MAChC;AAAA,IACF,CAAC;AAAA,IACD;AAAA,IACA,KAAK;AAAA,IACL,OAAO,MAAM,MAAM;AACjB,cAAQ,EAAE,WAAW,MAAM,IAAI;AAAA,IACjC;AAAA,IACA,KAAK,OAAO;AACV,aAAO,QAAQ,EAAE,OAAO,KAAK,KAAK,OAAO,KAAK;AAAA,IAChD;AAAA,EACF;AACF;AAgBO,SAAS,oBACd,YAEAC,UACA,WACA,QAAwB,CAAC,GACL;AACpB,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,EACF;AACA,SAAO,MAAM;AACb,SAAO;AAAA,IACL;AAAA,IACA,KAAK,MAAMA,SAAQ,OAAO,SAAkB,SAAS;AAAA,IACrD,SAAS,MAAM,OAAO,KAAK;AAAA,EAC7B;AACF;AAIO,SAAS,oBACd,YACA,eAAoC,CAAC,GACnB;AAClB,QAAMC,WAAU;AAChB,MAAI,YAAY;AAChB,QAAM,aAAgC,CAAC;AACvC,QAAM,YAAY,oBAAI,IAAgB;AACtC,QAAM,SAAS,MAAM,UAAU,QAAQ,CAAC,OAAO,GAAG,CAAC;AAEnD,QAAM,mBAAoC,CAAC,YACzC,eAAe,OAAO;AACxB,kBAAgB,UAAU,CAAC,OAAO,WAAW,KAAK,EAAE;AACpD,kBAAgB,MAAM,CAAI,iBAAoB;AAC5C,QAAI,QAAQ;AACZ,WAAO;AAAA,MACL,KAAK,MAAM;AAAA,MACX,KAAK,CAAC,SAAY;AAChB,gBAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,QAAM,QAAQ,IAAI,SAAoB;AACpC,QAAKA,SAAgC,OAAO;AAC1C,cAAQ,IAAI,GAAG,IAAI;AAAA,IACrB;AAAA,EACF;AAEA,QAAM,WAAW,EAAE,SAAS,CAAC,EAAgB;AAC7C,QAAM,OAAO,CAAC,QACX,SAAS,QAAoC,GAAG;AAEnD,QAAM,eAAe,MAAM;AACzB,UAAM,QAAQ,SAAS;AACvB,UAAM,gBACHA,SAA8B,QAAQ;AAAA,MACrC,WAAO,sBAAQ,SAAS;AAAA,MACxB;AAAA,IACF,CAAC,KAAK;AACR,aAAS,UAAU;AAAA,EACrB;AAEA,QAAM,qBAAqB,MACzB,OAAO,aAAa,cAAc,WAAY;AAEhD,QAAM,WAAW;AAAA,IACf,aAAS,yBAAY;AAAA,MACnB,IAAK,aAAiC;AAAA,MACtC,KAAM,aAAkD;AAAA,MACxD,aAEI,aAGA,eAAe;AAAA,IACrB,CAAC;AAAA,EACH;AACA,eAAa;AAEb,QAAM,aAAa,oBAAI,IAAwB;AAC/C,MAAI,gBAIO;AACX,MAAI,gBAAkC,EAAE,MAAM,GAAG;AACjD,MAAI,eAAiC,EAAE,MAAM,GAAG;AAEhD,QAAM,WAAW,OAAO;AAAA,IACtB,GAAG;AAAA,IACH,UAAU;AACR,aAAO;AAAA,IACT;AAAA,IACA,WAAW;AACT,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,WAAW,OAAO;AAAA,IACtB,GAAG;AAAA,IACH,WAAW,QAAkB;AAC3B,aAAO,OAAO,KAAK,CAAC,UAAM,0BAAa,MAAM,IAAI,SAAmB,CAAC,CAAC;AAAA,IACxE;AAAA,IACA,OAAO,KAAa;AAClB,iBAAO,YAAAC,QAASD,UAAS,MAAM,IAAI,SAAmB,GAAG;AAAA,IAC3D;AAAA,EACF;AAEA,QAAM,YAAY,OAAO;AAAA,IACvB,OAAO,SAAS;AAAA,IAChB,SAAS;AAAA,IACT,OAAO,SAAS;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,SAAS;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,SAAS,CAAC,SAAkB;AAChC,UAAM,WAAQ,yBAAW,IAAI,IAAK,KAAe,UAAU,CAAC,IAAI;AAGhE,QAAI,CAAC,KAAM;AACX,UAAM,MAAM,KAAK,IAAI,CAAC,MAAM;AAC1B,YAAM,KACJA,SACA,iBAAiB,UAAU,CAAC;AAC9B,UAAI,CAAC,GAAI,wBAAK,+CAA+C,CAAC,GAAG;AACjE,aAAO;AAAA,IACT,CAAC;AACD,eAAW,MAAM,IAAK,MAAK,UAAU,CAAC;AAAA,EACxC;AAEA,QAAM,QAAQ,CAAC,QAAiB;AAC9B,YAAI,yBAAW,GAAG,EAAG,QAAQ,IAAc,UAAU,CAAC;AACtD,WACEA,SACA,iBAAiB,SAAS,GAAa,EAAE,UAAU,CAAC;AAAA,EACxD;AAEA,QAAM,SAAS,CAAC,SAAkB;AAChC,UAAM,WAAQ,yBAAW,IAAI,IAAK,KAAe,UAAU,CAAC,IAAI;AAGhE,QAAI,CAAC,KAAM;AACX,UAAM,MAAM,KAAK,IAAI,CAAC,MAAM;AAC1B,YAAM,KACJA,SACA,iBAAiB,UAAU,CAAC;AAC9B,UAAI,CAAC,GAAI,wBAAK,+CAA+C,CAAC,GAAG;AACjE,aAAO;AAAA,IACT,CAAC;AACD,UAAM,gBAAmC,CAAC;AAC1C,eAAW,MAAM,KAAK;AACpB,YAAM,UAAU,KAAK,UAAU,CAAC;AAChC,UAAI,OAAO,YAAY,YAAY;AACjC,sBAAc,KAAK,OAAqB;AAAA,MAC1C;AAAA,IACF;AACA,WAAO,MAAM,cAAc,QAAQ,CAAC,OAAO,GAAG,CAAC;AAAA,EACjD;AAEA,QAAM,SAAS,CAAC,oBACb,sBAAQ,WAAW,EAAiC,KAAK,CAAC,MAAM;AAC/D,QAAI,SAAS,CAAC,EAAE;AAChB,YAAI,uBAAS,EAAE,KAAK,EAAG,UAAS,CAAC,CAAC,MAAM,EAAE,KAAK;AAAA,iBACtC,yBAAW,EAAE,KAAK,EAAG,UAAS,CAAC,CAAE,EAAE,MAAgB,UAAU,CAAC;AACvE,WAAO;AAAA,EACT,CAAC;AAEH,QAAM,WAAW,CAAC,QAAgB;AAChC;AAAA,MACGA,SAAmC;AAAA,MACpC,MAAM;AAAA,IACR;AACA,UAAM,KAAMA,SAAgD,SAAS,GAAG;AACxE,WAAO,GAAG;AAAA,MACR,SAAS;AAAA,MACT,OAAO,SAAS;AAAA,MAChB;AAAA,MACA;AAAA,MACA,OAAO,SAAS;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,aAAa,oBAAI,QAGrB;AACF,QAAM,UAAU,CAAC,MAA6B,OAAc;AAC1D,QAAI,OAAO,WAAW,IAAI,EAAE;AAC5B,UAAM,WAAW,QAAQ,CAAC,GAAG;AAAA,MAAI,CAAC,MAChC,OAAO,MAAM,aAAc,EAAY,IAAI;AAAA,IAC7C;AACA,QAAI,CAAC,MAAM;AACT,aAAO,EAAE,MAAM,SAAS,SAAS,MAAM;AACvC,iBAAW,IAAI,IAAI,IAAI;AACvB;AAAA,IACF;AACA,UAAM,UACJ,QAAQ,WAAW,KAAK,KAAK,UAC7B,QAAQ,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,GAAG,GAAG,KAAM,KAAK,CAAC,CAAC,CAAC;AACrD,QAAI,WAAW,KAAK,SAAS;AAC3B,WAAK,UAAU;AACf,YAAM,UAAU,GAAG;AACnB,WAAK,UACH,OAAO,YAAY,aAAc,UAAyB;AAAA,IAC9D;AACA,SAAK,OAAO;AAAA,EACd;AAEA,QAAM,QAAQ,CAAC,OAAmB;AAChC,mBAAe,MAAM,GAAG,CAAC;AAAA,EAC3B;AAGA,MAAI,gBAAmD,CAAC;AACxD,QAAM,eAAgBA,SAAgC;AACtD,MAAI,cAAc;AAChB,oBAAgB,aAAa;AAAA,MAC3B;AAAA,MACA,UAAU;AAAA,MACV,OAAO,SAAS;AAAA,MAChB;AAAA,MACA,aAAa;AACX,eAAO;AAAA,MACT;AAAA,MACA,cAAc;AACZ,eAAO;AAAA,MACT;AAAA,MACA,UAAU;AACR,eAAO;AAAA,MACT;AAAA,MACA,WAAW;AACT,eAAO,SAAS;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,MAAM;AAAA,IACV,IAAI,KAAa;AACf,aAAO,cAAc,GAAG,GAAG,IAAI;AAAA,IACjC;AAAA,IACA,IAAI,KAAa,OAAgB;AAC/B,oBAAc,GAAG,GAAG,IAAI,KAAc;AAAA,IACxC;AAAA,IACA,QAAQ,KAAa;AACnB,aAAO,cAAc,GAAG,GAAG;AAAA,IAC7B;AAAA,IACA,KAAK,KAAa;AAChB,YAAM,UAAU,cAAc,GAAG,GAAG,IAAI;AACxC,aAAO,cAAc,GAAG,GAAG,KAAK,OAAgB,KAAK;AAAA,IACvD;AAAA,EACF;AAGA,QAAM,WACHA,SAA6B,OAAO,EAAE,MAAM,SAAS,IAAI,CAAC,KAAK,CAAC;AACnE,QAAM,YAAqC,EAAE,GAAI,SAAoB;AACrE,QAAM,OAAO;AAAA,IACX,IAAI,KAAa;AACf,aAAO,UAAU,GAAG;AAAA,IACtB;AAAA,IACA,IAAI,KAAa,OAAgB;AAC/B,gBAAU,GAAG,IAAI;AAAA,IACnB;AAAA,EACF;AAGA,QAAM,mBAAe;AAAA,IACnBA;AAAA,IACCA,SAAoC,aAAa,EAAE,KAAK,CAAC;AAAA,EAC5D;AACA,QAAM,QAAQ,eAAuB,OAAO;AAAA,IAC1C,cAAc;AAAA,IACd,SAAS,WAAmB,WAAmB;AAC7C,YAAM,EAAE,SAAS,SAAS,QAAI;AAAA,QAC5BA;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAe;AAAA,MACjB;AAOA,cAAQ,QAAQ,CAAC,SAAS;AACxB,cAAM,cAAc,WAAW,IAAI,KAAK,IAAI;AAC5C,sBAAc;AACd,mBAAW,OAAO,KAAK,IAAI;AAAA,MAC7B,CAAC;AACD,cAAQ,QAAQ,CAAC,SAAS;AACxB,eAAO,KAAK,OAAO,IAAI;AAAA,MACzB,CAAC;AACD,aAAO,eAAe,OAAO;AAC7B,eAAS,QAAQ,CAAC,SAAS;AACzB,cAAM,UAAU,OAAO,KAAK,OAAO,OAAO;AAC1C,YAAI,QAAS,YAAW,IAAI,KAAK,MAAM,OAAO;AAAA,MAChD,CAAC;AACD,UAAI,cAAc,wBAAY;AAC5B,eAAQA,SAAgC,KAAK;AAC7C,cAAM,UAAU,OAAQA,SAAkC,OAAO;AACjE,YAAI,QAAS,YAAW,IAAI,wBAAY,OAAO;AAAA,MACjD;AACA,eAAS,QAAQ,CAAC,SAAS;AACzB,eAAO,KAAK,OAAO,KAAK;AAAA,MAC1B,CAAC;AACD,aAAO;AAAA,IACT;AAAA,EACF,EAAE;AAEF,MAAI,SAAwB,0BAAc;AAC1C,MAAI;AAEJ,QAAM,kBAAkB,MAAc,MAAM,IAAI;AAEhD,QAAM,OAAO,CAAC,UAA4B;AACxC,mBAAe,MAAM;AACnB,UAAI,WAAW,0BAAc,QAAS;AACtC,sBAAgB;AAChB,qBAAe;AACf,YAAM,eAAe,gBAAgB;AACrC,YAAM,EAAE,aAAa,OAAO,QAAI;AAAA,QAC9BA;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACR;AACA,YAAM,aAAa,OAAO,WAAW;AAGrC,UAAI,CAAC,WAAY;AACjB,sBAAgB;AAChB,YAAM,aAAS;AAAA,QACbA;AAAA,QACC,WAAW,UAAU;AAAA,QACtB;AAAA,MACF;AACA,YAAM,cAAc,MAAM,MAAM,WAAW,UAAU,YAAY;AACjE,YAAM,UAAU,WAAW;AAC3B,UAAI,SAAS;AACX,cAAM,IAAI,MAAgB;AAAA,MAC5B,WAAW,WAAW,SAAS;AAC7B;AAAC,QAAC,MAAuC;AAAA,UACvC;AAAA,UACA;AAAA,QACF;AAAA,MACF,OAAO;AACL,eAAO,WAAW,WAAW,CAAC,CAAC;AAC/B,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH;AAEC,EAACA,SAA8B,QAAQ,UAAU,CAAC;AAEnD,QAAM,UAAsB;AAAA,IAC1B,OAAO,SAAS;AAAA,IAChB;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA,OAAO,SAAS;AAAA,IAChB;AAAA,IACA;AAAA,IACA,OAAO,SAAS;AAAA,IAChB,WAAW,MAAM;AAAA,EACnB;AAEA,SAAO,eAAe,SAAS,SAAS;AAAA,IACtC,KAAK,MAAM,SAAS;AAAA,IACpB,YAAY;AAAA,EACd,CAAC;AACD,SAAO,eAAe,SAAS,SAAS;AAAA,IACtC,KAAK,MAAM,SAAS;AAAA,IACpB,YAAY;AAAA,EACd,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,QAAQ;AACN,UAAI,WAAW,0BAAc,QAAS;AACtC,eAAS,0BAAc;AACtB,MAAC,MAAuC;AAAA,QACvC,YAAY,MAAM;AAAA,QAClB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,OAAO;AACL,UAAI,WAAW,0BAAc,QAAS;AACtC,iBAAW,gBAAgB;AAC3B,eAAS,0BAAc;AACvB,iBAAW,QAAQ,CAAC,OAAO,GAAG,CAAC;AAC/B,iBAAW,MAAM;AACjB,sBAAgB;AAChB,aAAO,WAAW,OAAQ,YAAW,IAAI,IAAI;AAC7C,gBAAU,MAAM;AAChB,qBAAe,MAAM;AACnB,eAAQA,SAA+B,IAAI;AAAA,MAC7C,CAAC;AAAA,IACH;AAAA,IACA,UAAU,UAAU;AAClB,gBAAU,IAAI,QAAQ;AACtB,aAAO,MAAM,UAAU,OAAO,QAAQ;AAAA,IACxC;AAAA,IACA,OAAO,MAAM;AACX,kBAAY,EAAE,GAAG,WAAW,GAAG,KAAK;AACpC,mBAAa;AACb,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;ACzhBA,IAAAE,gBAIO;AAIA,IAAM,qBACX,gCAA2B,CAAC,UAAU,KAAK;;;AFDtC,SAAS,iBACd,QAAkC,CAAC,GACjB;AAClB,SAAO;AAAA,IACM;AAAA,IACA;AAAA,IACX;AAAA,IACA;AAAA,EACF;AACF;;;AGdO,SAAS,YACd,MACA,OACS;AACT,QAAM,WAAsB,CAAC;AAC7B,aAAW,CAAC,KAAK,QAAQ,KAAK,OAAO,QAAQ,KAAK,GAAG;AACnD,QAAI,QAAQ,cAAc,QAAQ,0BAA2B;AAC7D,QAAI,IAAI,WAAW,IAAI,KAAK,OAAO,aAAa,YAAY;AAC1D,YAAM,YAAY,IAAI,MAAM,CAAC,EAAE,YAAY;AAI3C,YAAM,gBACH,gBAAgB,oBACf,KAAK,SAAS,cACd,KAAK,SAAS,WAChB,gBAAgB;AAClB,YAAM,iBACJ,cAAc,YAAY,gBAAgB,UAAU;AACtD,YAAM,WAAW;AACjB,WAAK,iBAAiB,gBAAgB,QAAQ;AAC9C,eAAS,KAAK,MAAM,KAAK,oBAAoB,gBAAgB,QAAQ,CAAC;AACtE;AAAA,IACF;AAIA,QAAI,aAAa,UAAa,aAAa,MAAM;AAC/C,WAAK,gBAAgB,GAAG;AACxB;AAAA,IACF;AACA,QAAI,OAAO,aAAa,WAAW;AACjC,UAAI,SAAU,MAAK,aAAa,KAAK,EAAE;AAAA,UAClC,MAAK,gBAAgB,GAAG;AAC7B;AAAA,IACF;AACA,QAAI,QAAQ,WAAW,OAAO,aAAa,UAAU;AACnD,aAAO,OAAO,KAAK,OAAO,QAAkC;AAC5D;AAAA,IACF;AACA,QAAI,QAAQ,eAAe,QAAQ,SAAS;AAC1C,WAAK,aAAa,SAAS,OAAO,QAAQ,CAAC;AAC3C;AAAA,IACF;AACA,QAAI,QAAQ,WAAW;AACrB,WAAK,aAAa,OAAO,OAAO,QAAQ,CAAC;AACzC;AAAA,IACF;AACA,QAAI,QAAQ,YAAY;AACtB,WAAK,WAAW,OAAO,QAAQ;AAC/B;AAAA,IACF;AACA,SAAK,aAAa,KAAK,OAAO,QAAQ,CAAC;AAAA,EACzC;AACA,SAAO,gBAAgB,QAAQ;AACjC;AAEO,SAAS,0BAGd;AACA,QAAM,MAAM,oBAAI,IAA0B;AAC1C,SAAO;AAAA,IACL,MAAM,MAAM,OAAO;AACjB,YAAM,QAAQ,IAAI,IAAI,IAAI;AAC1B,UAAI,MAAO,OAAM;AACjB,UAAI,IAAI,MAAM,YAAY,MAAM,KAAK,CAAC;AAAA,IACxC;AAAA,IACA,aAAa;AACX,iBAAW,SAAS,IAAI,OAAO,EAAG,OAAM;AACxC,UAAI,MAAM;AAAA,IACZ;AAAA,EACF;AACF;;;ACxEO,SAAS,oBACd,SACA,KACA,MACgB;AAChB,QAAM,SAAS,QAAQ,OAAO,KAAK,IAAI;AACvC,QAAM,UAAU,OAAO,WAAW,aAAa,SAAS,MAAM;AAAA,EAAC;AAC/D,SAAO;AAAA,IACL,SAAS,MAAM;AACb,UAAI;AACF,gBAAQ;AAAA,MACV,UAAE;AACA,aAAK,gBAAgB;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AACF;;;ACpBA,IAAAC,iBAUO;;;ACRA,SAAS,eAAe,OAAuB;AACpD,SAAO,MAAM,KAAK,EAAE,YAAY;AAClC;AAEO,SAAS,aAAa,UAAkB,OAAwB;AACrE,QAAM,IAAI,eAAe,KAAK;AAC9B,MAAI,CAAC,EAAG,QAAO;AACf,SAAO,SAAS,YAAY,EAAE,SAAS,CAAC;AAC1C;AAEO,SAAS,eACd,UACA,OACc;AACd,QAAM,IAAI,eAAe,KAAK;AAC9B,MAAI,CAAC,EAAG,QAAO;AACf,SAAO,SAAS,OAAO,CAAC,MAAM;AAC5B,UAAM,OAAO,YAAY,CAAC,EAAE,YAAY;AACxC,UAAM,KAAK,UAAU,CAAC,EAAE,YAAY;AACpC,WACE,KAAK,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,YAAY,EAAE,SAAS,CAAC;AAAA,EAEzE,CAAC;AACH;AAEO,SAAS,UACd,KACA,OACmB;AACnB,QAAM,IAAI,eAAe,KAAK;AAC9B,MAAI,CAAC,EAAG,QAAO;AACf,SAAO,IAAI,OAAO,CAAC,OAAO,GAAG,YAAY,EAAE,SAAS,CAAC,CAAC;AACxD;;;AClCO,IAAM,iBAAiB;AAAA,EAC5B,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AACV;AAEO,IAAM,iBAAiB;AAAA,EAC5B,UAAU;AAAA,EACV,aAAa;AAAA,EACb,WAAW;AAAA,EACX,SAAS;AACX;;;ACSA,IAAM,aACJ;AAEK,IAAM,iBAAiB,IAAI,YAAY;AAAA,EAC5C,iBAAiB,EAAE,MAAM,WAAW,SAAS,UAAU;AAAA,EACvD,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,WAAW;AAAA,MACX,WAAW;AAAA,MACX,WAAW;AAAA,IACb;AAAA,IACA,SAAS;AAAA,MACP,SACE;AAAA,MACF,aACE;AAAA,MACF,uBACE;AAAA,MACF,OACE;AAAA,MACF,MAAM;AAAA,MACN,SACE;AAAA,MACF,WACE;AAAA,IACJ;AAAA,EACF;AACF,CAAC;AAQM,SAAS,aACd,UAA+B,CAAC,GAChC,WAA4B,CAAC,GACV;AACnB,QAAM,EAAE,SAAS,MAAM,OAAO,OAAO,OAAO,GAAG,KAAK,IAAI;AACxD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,OAAO,GAAG,eAAe,EAAE,SAAS,KAAK,CAAC,GAAG,KAAK;AAAA,MAClD,OAAO,EAAE,MAAM,UAAU,aAAa,UAAU,GAAG,MAAM;AAAA,IAC3D;AAAA,IACA;AAAA,EACF;AACF;;;AChFO,IAAM,kBACX;AAEK,IAAM,wBACX;AAEK,IAAM,8BACX;AAEK,IAAM,yBACX;;;ACOF,IAAM,cAGF;AAAA,EACF,SAAS,EAAE,SAAS,WAAW,MAAM,WAAW,OAAO,aAAa;AAAA,EACpE,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AACF;AAOO,SAASC,cACd,SACA,WAA4B,CAAC,GACV;AACnB,QAAM,EAAE,SAAS,OAAO,YAAY,OAAO,GAAG,KAAK,IAAI;AACvD,MAAI,YAAY,UAAU;AACxB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE,GAAG;AAAA,QACH,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAO,EAAE,MAAM,UAAU,aAAa,oBAAoB,GAAG,MAAM;AAAA,MACrE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,SAAS,YAAY,OAAO;AAClC,SAAO;AAAA,IACL;AAAA,MACE,GAAG;AAAA,MACH,SAAS,OAAO;AAAA,MAChB,MAAM,OAAO;AAAA,MACb,OAAO,GAAG,OAAO,OAAO,UAAU;AAAA,MAClC;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACF;;;AC9DA,IAAM,mBAAwC,oBAAI,IAAI;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,sBAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,iBAAiB,KAAgB,UAA8B;AAC7E,MAAI,iBAAiB,IAAI,IAAI,IAAI,GAAG;AAClC,WAAO,CAAC,qBAAqB,GAAG;AAAA,EAClC;AACA,MAAI,IAAI,SAAS,UAAU,UAAU;AACnC,UAAM,OAAO,SAAS,IAAI,QAAQ,IAAI,EAAE;AACxC,QAAI,CAAC,KAAM,QAAO;AAClB,eAAW,WAAW,KAAK,SAAS;AAClC,iBAAW,QAAQ,qBAAqB;AACtC,cAAM,SAAS,SAAS,IAAI,MAAM,OAAO;AACzC,YAAI,UAAU,qBAAqB,EAAE,MAAM,IAAI,QAAQ,CAAC,EAAG,QAAO;AAAA,MACpE;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;AC7BA,IAAM,YACJ;AAIF,IAAM,yBACJ;AAMK,SAAS,UACd,UAA4B,CAAC,GAC7B,WAA4B,CAAC,GAChB;AACb,QAAM,EAAE,OAAO,OAAO,OAAO,GAAG,KAAK,IAAI;AACzC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,OAAO,GAAG,WAAW,KAAK;AAAA,MAC1B,OAAO,EAAE,aAAa,OAAO,GAAG,MAAM;AAAA,IACxC;AAAA,IACA;AAAA,EACF;AACF;AAsBO,SAAS,sBACd,UAA4B,CAAC,GAC7B,WAA4B,CAAC,GAChB;AACb,QAAM,EAAE,OAAO,OAAO,OAAO,GAAG,KAAK,IAAI;AACzC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,OAAO,GAAG,wBAAwB,KAAK;AAAA,MACvC,OAAO,EAAE,aAAa,oBAAoB,GAAG,MAAM;AAAA,IACrD;AAAA,IACA;AAAA,EACF;AACF;;;ACtDA,IAAM,cAAc;AACpB,IAAM,iBAAiB;AAGhB,SAAS,kBACd,MACA,SAC4B;AAC5B,MAAI,QAAQ,QAAS,MAAK,OAAO,QAAQ,OAAO;AAChD,QAAM,QAAQ,GAAG,QAAQ,EAAE,OAAO,aAAa,MAAM,QAAQ,MAAM,CAAC;AACpE,OAAK,OAAO,KAAK;AACjB,MAAI,QAAQ,UAAU;AACpB,SAAK;AAAA,MACH,GAAG,QAAQ;AAAA,QACT,OAAO;AAAA,QACP,OAAO,EAAE,2BAA2B,GAAG;AAAA,QACvC,MAAM,QAAQ;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,EACF;AACA,MAAI,QAAQ,YAAY,MAAM;AAC5B,SAAK;AAAA,MACH,OAAO,QAAQ,aAAa,WACxB,sBAAsB,EAAE,MAAM,QAAQ,SAAS,CAAC,IAChD,QAAQ;AAAA,IACd;AAAA,EACF;AACA,SAAO,EAAE,MAAM;AACjB;AAMO,SAAS,QAAQ,MAAmB,SAA2B;AACpE,oBAAkB,MAAM,OAAO;AACjC;;;AChCO,SAAS,iBAAiB,SAG/B;AACA,QAAM,EAAE,KAAK,QAAQ,OAAO,SAAS,OAAO,WAAW,IAAI;AAC3D,QAAM,SAAS,iBAAiB,MAAM;AACtC,QAAM,OAAOC,cAAa;AAAA,IACxB,SAAS;AAAA,IACT,OAAO,CAAC,UAAU,UAAU,cAAc,UAAU;AAAA,IACpD,OAAO;AAAA,MACL,0BAA0B;AAAA,MAC1B,uBAAuB,OAAO;AAAA,MAC9B,qBAAqB,OAAO;AAAA,MAC5B,GAAI,SAAS,EAAE,OAAO,mBAAmB,IAAI,CAAC;AAAA,IAChD;AAAA,EACF,CAAC;AACD,UAAQ,MAAM,EAAE,SAAS,OAAO,SAAS,GAAG,OAAO,IAAI,KAAK,OAAO,EAAE,GAAG,CAAC;AACzE,QAAM,UAAU,MAAM,IAAI,SAAS,MAAM;AACzC,QAAM,UAAU,MAAY;AAC1B,QAAI,UAAU,KAAK,QAAQ,EAAE,OAAO,WAAW,OAAO,IAAI,EAAE,MAAM,CAAC;AAAA,EACrE;AACA,QAAM,gBAAgB,MAAY;AAChC,QAAI,IAAI,KAAK;AACX,UAAI,UAAU,KAAK,IAAI,KAAK,EAAE,OAAO,WAAW,IAAI,IAAI,IAAI,EAAE,MAAM,CAAC;AAAA,IACvE,OAAO;AACL,UAAI,UAAU,KAAK;AAAA,IACrB;AAAA,EACF;AACA,OAAK,iBAAiB,SAAS,OAAO;AACtC,OAAK,iBAAiB,cAAc,OAAO;AAC3C,OAAK,iBAAiB,cAAc,aAAa;AACjD,OAAK,iBAAiB,SAAS,OAAO;AACtC,OAAK,iBAAiB,QAAQ,aAAa;AAC3C,SAAO;AAAA,IACL;AAAA,IACA,SAAS,MAAM;AACb,WAAK,oBAAoB,SAAS,OAAO;AACzC,WAAK,oBAAoB,cAAc,OAAO;AAC9C,WAAK,oBAAoB,cAAc,aAAa;AACpD,WAAK,oBAAoB,SAAS,OAAO;AACzC,WAAK,oBAAoB,QAAQ,aAAa;AAAA,IAChD;AAAA,EACF;AACF;;;AClDO,SAAS,cACd,SACA,OACa;AACb,QAAM,EAAE,SAAS,UAAU,YAAY,gBAAgB,IAAI;AAC3D,QAAM,WAAoB,CAAC;AAC3B,MAAI,SAAS;AACX,aAAS,KAAK,GAAG,MAAM,EAAE,OAAO,wBAAwB,MAAM,QAAQ,CAAC,CAAC;AAAA,EAC1E;AACA,WAAS,KAAK,GAAG,MAAM,EAAE,OAAO,UAAU,GAAG,KAAK,CAAC;AACnD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,CAAC,QAAQ,GAAG,GAAG;AAAA,IAC1B;AAAA,IACA;AAAA,EACF;AACF;;;ACjBA,IAAM,gBAAgB;AACtB,IAAM,cAAc;AACpB,IAAM,oBAAoB;AAC1B,IAAM,gBAAgB;AAEf,SAAS,cAAc,UAAuB,CAAC,GAAyB;AAC7E,QAAM,EAAE,OAAO,OAAO,GAAG,KAAK,IAAI;AAClC,SAAO,GAAG,KAAK,EAAE,GAAG,MAAM,OAAO,GAAG,eAAe,KAAK,EAAE,CAAC;AAC7D;AAEO,SAAS,gBACd,UAAuB,CAAC,GACF;AACtB,QAAM,EAAE,OAAO,OAAO,GAAG,KAAK,IAAI;AAClC,SAAO,GAAG,KAAK,EAAE,GAAG,MAAM,OAAO,GAAG,aAAa,KAAK,EAAE,CAAC;AAC3D;AAEO,SAAS,kBACd,UAAuB,CAAC,GACF;AACtB,QAAM,EAAE,OAAO,OAAO,GAAG,KAAK,IAAI;AAClC,SAAO,GAAG,KAAK,EAAE,GAAG,MAAM,OAAO,GAAG,mBAAmB,KAAK,EAAE,CAAC;AACjE;AAEO,SAAS,cAAc,UAAuB,CAAC,GAAuB;AAC3E,QAAM,EAAE,OAAO,OAAO,GAAG,KAAK,IAAI;AAClC,SAAO,GAAG,MAAM,EAAE,GAAG,MAAM,OAAO,GAAG,eAAe,KAAK,EAAE,CAAC;AAC9D;;;AXoBA,IAAM,WAA+C;AAAA,EACnD,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,0BAA0B;AAAA,EAC1B,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,eAAe;AAAA,EACf,MAAM;AACR;AAEA,SAAS,QAAQ,MAAqD;AACpE,SAAO,OAAO,SAAS,IAAI,IAAI;AACjC;AAEA,SAAS,eAAe,UAAuC;AAC7D,QAAM,OAAO,SAAS,QAClB,GAAG,SAAS,KAAK,SAAM,SAAS,KAAK,KACrC,SAAS;AACb,SAAO,cAAc;AAAA,IACnB,OAAO;AAAA,IACP,OAAO,EAAE,8BAA8B,GAAG;AAAA,IAC1C;AAAA,EACF,CAAC;AACH;AAEA,SAAS,eAAe,KAA6B;AACnD,SAAO,gBAAgB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO,EAAE,6BAA6B,GAAG;AAAA,IACzC,MAAM,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE;AAAA,EAC9B,CAAC;AACH;AAQA,SAAS,cACP,SACA,KACA,MACA,SACiB;AACjB,QAAM,WAAsB,CAAC;AAC7B,QAAM,UAA+B,CAAC;AAEtC,QAAM,UAAU,GAAG,WAAW;AAAA,IAC5B,OAAO;AAAA,IACP,OAAO,EAAE,6BAA6B,GAAG;AAAA,EAC3C,CAAC;AACD,MAAI,SAAS;AACX,YAAQ,OAAO,GAAG,MAAM,EAAE,OAAO,wBAAwB,MAAM,QAAQ,CAAC,CAAC;AAAA,EAC3E;AACA,QAAM,OAAO,GAAG,OAAO;AAAA,IACrB,OAAO;AAAA,IACP,OAAO,EAAE,MAAM,WAAW,cAAc,WAAW,UAAU;AAAA,EAC/D,CAAC;AACD,UAAQ,OAAO,IAAI;AAEnB,aAAW,UAAU,SAAS;AAC5B,UAAM,MAAMC,cAAa;AAAA,MACvB,SAAS;AAAA,MACT,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,QAAQ,WAAW,IAAI,MAAM;AAAA,QACvC,4BAA4B,OAAO;AAAA,QACnC,cAAc,OAAO,aAAa,OAAO;AAAA,MAC3C;AAAA,IACF,CAAC;AACD,QAAI;AACJ,UAAM,OAAO,QAAQ,OAAO,IAAI;AAChC,QAAI,MAAM;AACR,YAAM,UAAM,eAAAC,eAAoB,IAAI;AACpC,UAAI,aAAa,eAAe,MAAM;AACtC,UAAI,aAAa,SAAS,kBAAkB;AAC5C,gBAAU,eAAe,GAAG;AAAA,IAC9B;AACA,UAAM,EAAE,OAAO,QAAQ,IAAI,kBAAkB,KAAK;AAAA,MAChD;AAAA,MACA,OAAO,OAAO;AAAA,MACd,UAAU,OAAO;AAAA,IACnB,CAAC;AAED,QAAI,cAAoD;AACxD,UAAM,SAAiC;AAAA,MACrC,SAAS,MAAM,YAAY;AACzB,YAAI,gBAAgB,MAAM;AACxB,uBAAa,WAAW;AACxB,wBAAc;AAAA,QAChB;AACA,gBAAQ,cAAc;AACtB,YAAI,cAAc,aAAa,GAAG;AAChC,wBAAc,WAAW,MAAM;AAC7B,oBAAQ,cAAc,OAAO;AAC7B,0BAAc;AAAA,UAChB,GAAG,UAAU;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAEA,UAAM,UAAU,YAAY;AAC1B,UAAI,UAAU,QAAQ;AACpB,YAAI;AACF,gBAAM,UAAU,WAAW,UAAU,OAAO,IAAI;AAChD,iBAAO,SAAS,WAAW,IAAI;AAAA,QACjC,SAAS,KAAK;AACZ,kBAAQ,KAAK,+CAA+C,GAAG;AAC/D,iBAAO,SAAS,eAAe,IAAI;AAAA,QACrC;AAAA,MACF,WAAW,cAAc,QAAQ;AAC/B,cAAM,SAAS,KAAK,cAA2B,OAAO,QAAQ;AAC9D,gBAAQ,eAAe,EAAE,OAAO,SAAS,UAAU,SAAS,CAAC;AAAA,MAC/D,WAAW,UAAU,QAAQ;AAC3B,YAAI,KAAK,EAAE,IAAI,OAAO,KAAK,IAAI,KAAK,OAAO,KAAK,OAAO,KAAK,CAAC;AAAA,MAC/D,WAAW,cAAc,QAAQ;AAC/B,YAAI,SAAS,OAAO,QAAQ;AAAA,MAC9B,WAAW,eAAe,QAAQ;AAChC,YAAI,aAAa,OAAO,SAAS;AACjC,YAAI,MAAM;AAAA,MACZ,OAAO;AACL,cAAM,OAAO,IAAI,MAAM;AAAA,MACzB;AAAA,IACF;AACA,QAAI,iBAAiB,SAAS,OAAO;AACrC,aAAS,KAAK,MAAM;AAClB,UAAI,oBAAoB,SAAS,OAAO;AACxC,UAAI,gBAAgB,KAAM,cAAa,WAAW;AAAA,IACpD,CAAC;AACD,YAAQ,KAAK,GAAG;AAChB,SAAK,OAAO,GAAG;AAAA,EACjB;AAEA,SAAO,EAAE,MAAM,SAAS,SAAS,SAAS,gBAAgB,QAAQ,EAAE;AACtE;AAOA,SAAS,cACP,KACA,OACA,UACA,UACwB;AACxB,MAAI,SAAS,WAAW,EAAG,QAAO;AAClC,QAAM,WAAsB,CAAC;AAC7B,QAAM,QAAQ,SAAS,IAAI,CAAC,WAAW;AACrC,UAAM,MAAiB,EAAE,MAAM,OAAO,MAAM,IAAI,UAAU,MAAM,EAAE;AAClE,UAAM,OAAO,iBAAiB;AAAA,MAC5B;AAAA,MACA,QAAQ;AAAA,MACR,OAAO,YAAY,MAAM;AAAA,MACzB,SAAS,mBAAmB,OAAO,IAAI;AAAA,IACzC,CAAC;AACD,aAAS,KAAK,KAAK,OAAO;AAC1B,WAAO,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;AAAA,EACjC,CAAC;AACD,QAAM,OAAO,cAAc,EAAE,SAAS,OAAO,SAAS,GAAG,KAAK;AAC9D,SAAO,EAAE,MAAM,SAAS,gBAAgB,QAAQ,EAAE;AACpD;AAEA,SAAS,eACP,KACA,OACwB;AACxB,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,QAAM,WAAsB,CAAC;AAC7B,QAAM,QAAQ,MAAM,IAAI,CAAC,SAAS;AAChC,UAAM,OAAO,iBAAiB;AAAA,MAC5B;AAAA,MACA,QAAQ,EAAE,MAAM,QAAQ,IAAI,KAAK,GAAG;AAAA,MACpC,OAAO,YAAY,IAAI;AAAA,MACvB,SAAS,mBAAmB,MAAM;AAAA,IACpC,CAAC;AACD,aAAS,KAAK,KAAK,OAAO;AAC1B,WAAO,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;AAAA,EACjC,CAAC;AACD,QAAM,OAAO;AAAA,IACX,EAAE,SAAS,eAAe,OAAO,UAAU,0BAA0B;AAAA,IACrE;AAAA,EACF;AACA,SAAO,EAAE,MAAM,SAAS,gBAAgB,QAAQ,EAAE;AACpD;AAEA,SAAS,cACP,KACA,UACA,OACiB;AACjB,MAAI,SAAS,WAAW,GAAG;AACzB,UAAM,UAAU,GAAG,WAAW;AAAA,MAC5B,OAAO;AAAA,MACP,OAAO,EAAE,6BAA6B,GAAG;AAAA,IAC3C,CAAC;AACD,YAAQ;AAAA,MACN,cAAc,EAAE,MAAM,eAAe,QAAQ,CAAC;AAAA,MAC9C,gBAAgB;AAAA,QACd,OAAO,EAAE,2BAA2B,GAAG;AAAA,QACvC,MAAM,QAAQ,eAAe;AAAA,MAC/B,CAAC;AAAA,IACH;AACA,WAAO,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,IAAC,EAAE;AAAA,EAC5C;AAEA,QAAM,WAAsB,CAAC;AAC7B,QAAM,QAAuB,CAAC;AAC9B,aAAW,UAAU,UAAU;AAC7B,UAAM,OAAO,iBAAiB;AAAA,MAC5B;AAAA,MACA,QAAQ,EAAE,MAAM,OAAO,MAAM,IAAI,UAAU,MAAM,EAAE;AAAA,MACnD,OAAO,YAAY,MAAM;AAAA,MACzB,SAAS,mBAAmB,OAAO,IAAI;AAAA,IACzC,CAAC;AACD,aAAS,KAAK,KAAK,OAAO;AAC1B,UAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;AAAA,EACtC;AACA,QAAM,OAAO;AAAA,IACX,EAAE,SAAS,eAAe,SAAS,UAAU,4BAA4B;AAAA,IACzE;AAAA,EACF;AACA,SAAO,EAAE,MAAM,SAAS,gBAAgB,QAAQ,EAAE;AACpD;AAEA,SAAS,cACP,OACA,OACA,QACc;AACd,QAAM,IAAI,eAAe,KAAK;AAC9B,MAAI,CAAC,EAAG,QAAO;AACf,SAAO,MAAM;AAAA,IAAO,CAAC,SACnB,OAAO,IAAI,EAAE,KAAK,CAAC,UAAU,OAAO,YAAY,EAAE,SAAS,CAAC,CAAC;AAAA,EAC/D;AACF;AAEA,IAAM,qBAAqB,CAAC,SAA2B;AAAA,EACrD,YAAY,KAAK,MAAM;AAAA,EACvB,UAAU,KAAK,MAAM;AAAA,EACrB,KAAK,OAAO;AAAA,EACZ,KAAK;AACP;AAEA,SAAS,kBAAkB,QAA6B;AACtD,SAAO;AAAA,IACL;AAAA,MACE,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO,EAAE,0BAA0B,OAAO;AAAA,MAC1C,MAAM;AAAA,IACR;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAEA,IAAM,iBAAiB;AAEvB,IAAM,qBACJ;AAEF,SAAS,YACP,KACA,OACA,OACiB;AACjB,QAAM,UAAU,GAAG,WAAW;AAAA,IAC5B,OAAO;AAAA,IACP,OAAO,EAAE,2BAA2B,GAAG;AAAA,EACzC,CAAC;AACD,UAAQ,OAAO,cAAc,EAAE,MAAM,eAAe,MAAM,CAAC,CAAC;AAE5D,MAAI,MAAM,WAAW,GAAG;AACtB,YAAQ;AAAA,MACN,gBAAgB;AAAA,QACd,OAAO,EAAE,2BAA2B,GAAG;AAAA,QACvC,MAAM,QAAQ,eAAe;AAAA,MAC/B,CAAC;AAAA,IACH;AACA,WAAO,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,IAAC,EAAE;AAAA,EAC5C;AAEA,QAAM,WAAsB,CAAC;AAC7B,QAAM,OAAO,GAAG,MAAM,EAAE,OAAO,wBAAwB,CAAC;AAExD,aAAW,QAAQ,OAAO;AACxB,UAAM,KAAK,GAAG,MAAM;AAAA,MAClB,OAAO;AAAA,MACP,OAAO,EAAE,mBAAmB,OAAO,KAAK,OAAO,EAAE;AAAA,IACnD,CAAC;AAED,OAAG;AAAA,MACD,GAAG,QAAQ;AAAA,QACT,OAAO;AAAA,QACP,OAAO,EAAE,2BAA2B,IAAI,eAAe,OAAO;AAAA,QAC9D,MAAM,OAAO,KAAK,OAAO;AAAA,MAC3B,CAAC;AAAA,IACH;AAEA,UAAM,OAAO,iBAAiB;AAAA,MAC5B;AAAA,MACA,QAAQ,EAAE,MAAM,KAAK,OAAO,MAAM,IAAI,UAAU,KAAK,MAAM,EAAE;AAAA,MAC7D,OAAO,YAAY,KAAK,MAAM;AAAA,MAC9B,SAAS,mBAAmB,KAAK,OAAO,IAAI;AAAA,MAC5C,OAAO;AAAA,IACT,CAAC;AACD,aAAS,KAAK,KAAK,OAAO;AAC1B,OAAG,OAAO,KAAK,IAAI;AAEnB,QAAI,KAAK,QAAQ;AACf,SAAG,OAAO,kBAAkB,KAAK,MAAM,CAAC;AAAA,IAC1C;AAEA,SAAK,OAAO,EAAE;AAAA,EAChB;AAEA,UAAQ,OAAO,IAAI;AACnB,SAAO,EAAE,MAAM,SAAS,SAAS,gBAAgB,QAAQ,EAAE;AAC7D;AAEA,SAAS,iBAAiB,OAAkD;AAC1E,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,QAAM,OAAO;AAAA,IACX,EAAE,SAAS,eAAe,QAAQ,UAAU,2BAA2B;AAAA,IACvE,MAAM,IAAI,CAAC,MAAM;AACf,YAAM,OAAO,GAAG,MAAM;AAAA,QACpB,OAAO,GAAG,iBAAiB,2BAA2B;AAAA,QACtD,OAAO;AAAA,UACL,yBAAyB;AAAA,UACzB,UAAU;AAAA,QACZ;AAAA,MACF,CAAC;AACD,cAAQ,MAAM;AAAA,QACZ,SAAS,mBAAmB,OAAO;AAAA,QACnC,OAAO;AAAA,MACT,CAAC;AACD,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACA,SAAO,EAAE,MAAM,SAAS,MAAM;AAAA,EAAC,EAAE;AACnC;AAEA,SAAS,0BAA0B,OAAuC;AACxE,SAAO;AAAA,IACL;AAAA,MACE,SAAS,eAAe;AAAA,MACxB,UAAU;AAAA,IACZ;AAAA,IACA,MAAM,IAAI,CAAC,MAAM,QAAQ;AACvB,YAAM,KAAK,oBAAoB,GAAG;AAClC,YAAM,WAAW,GAAG,SAAS;AAAA,QAC3B,OAAO;AAAA,UACL,MAAM;AAAA,UACN;AAAA,UACA,8BAA8B,OAAO,GAAG;AAAA,QAC1C;AAAA,QACA,OACE;AAAA,MACJ,CAAC;AACD,YAAM,QAAQ,GAAG,SAAS;AAAA,QACxB,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAO,EAAE,KAAK,GAAG;AAAA,MACnB,CAAC;AACD,YAAM,EAAE,OAAO,UAAU,IAAI,kBAAkB,OAAO;AAAA,QACpD,SAAS;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AACD,gBAAU,YAAY;AACtB,YAAM,cAAc,MAAY;AAC9B,kBAAU,UAAU,OAAO,gBAAgB,SAAS,OAAO;AAC3D,kBAAU,UAAU,OAAO,yBAAyB,SAAS,OAAO;AAAA,MACtE;AACA,eAAS,iBAAiB,UAAU,WAAW;AAC/C,eAAS,iBAAiB,WAAW,CAAC,MAAM;AAC1C,YAAI,EAAE,QAAQ,SAAS;AACrB,YAAE,eAAe;AACjB,mBAAS,UAAU,CAAC,SAAS;AAC7B,sBAAY;AAAA,QACd;AAAA,MACF,CAAC;AACD,aAAO,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAAA,IAC7B,CAAC;AAAA,EACH;AACF;AAEA,SAAS,cACP,SACA,KACA,OACwB;AACxB,UAAQ,QAAQ,IAAI;AAAA,IAClB,KAAK,eAAe;AAClB,UAAI,CAAC,QAAQ,KAAM,QAAO;AAC1B,aAAO;AAAA,QACL,MAAM,kBAAkB;AAAA,UACtB,OAAO;AAAA,UACP,OAAO,EAAE,iCAAiC,GAAG;AAAA,UAC7C,MAAM,QAAQ;AAAA,QAChB,CAAC;AAAA,QACD,SAAS,MAAM;AAAA,QAAC;AAAA,MAClB;AAAA,IACF;AAAA,IACA,KAAK,cAAc;AACjB,UAAI,QAAQ,MAAM,WAAW,EAAG,QAAO;AACvC,aAAO;AAAA,QACL,MAAM,0BAA0B,QAAQ,KAAK;AAAA,QAC7C,SAAS,MAAM;AAAA,QAAC;AAAA,MAClB;AAAA,IACF;AAAA,IACA,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ,aACJ,eAAe,QAAQ,UAAU,KAAK,IACtC,QAAQ;AAAA,QACZ;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ,aACJ,eAAe,QAAQ,UAAU,KAAK,IACtC,QAAQ;AAAA,QACZ;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,QAAQ,aACJ,eAAe,QAAQ,OAAO,KAAK,IACnC,QAAQ;AAAA,MACd;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,QAAQ,aACJ,eAAe,QAAQ,UAAU,KAAK,IACtC,QAAQ;AAAA,QACZ;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,QAAQ,aACJ,cAAc,QAAQ,OAAO,OAAO,kBAAkB,IACtD,QAAQ;AAAA,QACZ;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,QAAQ,aAAa,UAAU,QAAQ,OAAO,KAAK,IAAI,QAAQ;AAAA,MACjE;AAAA,EACJ;AACF;AAEA,SAAS,sBAAsB,UAA6C;AAC1E,SAAO,SAAS,KAAK,CAAC,MAAM,gBAAgB,KAAK,EAAE,eAAe,IAAI;AACxE;AAEO,SAAS,oBACd,SACA,KACA,MACgB;AAChB,MAAI,QAAQ,UAAU;AACpB,SAAK,OAAO,eAAe,QAAQ,QAAQ,CAAC;AAC5C,WAAO,EAAE,SAAS,MAAM,KAAK,gBAAgB,EAAE;AAAA,EACjD;AAEA,QAAM,OAAO,GAAG,OAAO;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,MACL,0BAA0B;AAAA,MAC1B,0BAA0B,QAAQ;AAAA,IACpC;AAAA,EACF,CAAC;AAED,QAAM,WAAsB,CAAC;AAE7B,QAAM,cAAc,GAAG,OAAO;AAAA,IAC5B,OAAO;AAAA,EACT,CAAC;AACD,MAAI,QAAQ,OAAO;AACjB,gBAAY;AAAA,MACV,GAAG,MAAM;AAAA,QACP,OACE;AAAA,QACF,OAAO,EAAE,2BAA2B,GAAG;AAAA,QACvC,MAAM,QAAQ;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,YAAY,gBAAgB,QAAQ,UAAU;AACpD,YAAU,UAAU,IAAI,SAAS;AACjC,cAAY,OAAO,SAAS;AAC5B,OAAK,OAAO,WAAW;AAEvB,MAAI,QAAQ,SAAU,MAAK,OAAO,eAAe,QAAQ,QAAQ,CAAC;AAElE,MAAI,cAAkC;AACtC,MAAI,QAAQ,WAAW,QAAQ,QAAQ,SAAS,GAAG;AACjD,UAAM,WAAW;AAAA,MACf,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA,eAAe;AAAA,IACjB;AACA,aAAS,KAAK,SAAS,OAAO;AAC9B,kBAAc,SAAS;AAAA,EACzB;AAEA,QAAM,WAAW,QAAQ,YAAY,CAAC;AACtC,QAAM,aAAa,sBAAsB,QAAQ;AAEjD,QAAM,iBAAiB,GAAG,OAAO;AAAA,IAC/B,OAAO;AAAA,IACP,OAAO,EAAE,8BAA8B,GAAG;AAAA,EAC5C,CAAC;AACD,OAAK,OAAO,cAAc;AAE1B,MAAI,iBAA0B,MAAM;AAAA,EAAC;AACrC,MAAI,aAA4B,CAAC;AAEjC,QAAM,UAAU,CAAC,WAAyB;AACxC,QAAI,WAAW,WAAW,EAAG;AAC7B,UAAM,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,QAAQ,WAAW,SAAS,CAAC,CAAC;AAC/D,aAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,iBAAW,CAAC,EAAE,WAAW,MAAM,MAAM,IAAI;AAAA,IAC3C;AACA,eAAW,GAAG,EAAE,MAAM;AAAA,EACxB;AAEA,QAAM,iBACJ;AAEF,QAAM,uBAAuB,MAAY;AACvC,iBAAa,MAAM;AAAA,MACjB,eAAe,iBAA8B,cAAc;AAAA,IAC7D;AACA,aAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,iBAAW,CAAC,EAAE,WAAW,MAAM,IAAI,IAAI;AAAA,IACzC;AAAA,EACF;AAEA,QAAM,eAAe,MAAY,KAAK,aAAa,gBAAgB,EAAE;AACrE,QAAM,cAAc,MAAY,KAAK,gBAAgB,cAAc;AACnE,OAAK,iBAAiB,eAAe,WAAW;AAEhD,QAAM,eAAe,CAAC,MAA2B;AAC/C,QACE,EAAE,QAAQ,eACV,EAAE,QAAQ,aACV,EAAE,QAAQ,UACV,EAAE,QAAQ;AAEV;AACF,iBAAa;AACb,UAAM,WAAW,KAAK,YAAY;AAClC,UAAM,SACJ,oBAAoB,aAChB,SAAS,gBACT,SAAS;AACf,QAAI,EAAE,kBAAkB,aAAc;AAEtC,UAAM,WAAW,WAAW,IAAI;AAChC,QAAI,UAAU;AACZ,UAAI,WAAW,WAAW,EAAG;AAC7B,QAAE,eAAe;AACjB,YAAMC,OACJ,EAAE,QAAQ,aAAa,EAAE,QAAQ,QAAQ,WAAW,SAAS,IAAI;AACnE,cAAQA,IAAG;AACX;AAAA,IACF;AAEA,UAAM,MAAM,WAAW,QAAQ,MAAM;AACrC,QAAI,QAAQ,GAAI;AAEhB,QAAI,EAAE,QAAQ,WAAW;AACvB,QAAE,eAAe;AACjB,UAAI,QAAQ,EAAG,KAAI,YAAY,MAAM;AAAA,UAChC,SAAQ,MAAM,CAAC;AACpB;AAAA,IACF;AACA,QAAI,EAAE,QAAQ,aAAa;AACzB,QAAE,eAAe;AACjB,UAAI,MAAM,WAAW,SAAS,EAAG,SAAQ,MAAM,CAAC;AAChD;AAAA,IACF;AACA,QAAI,EAAE,QAAQ,QAAQ;AACpB,QAAE,eAAe;AACjB,cAAQ,CAAC;AACT;AAAA,IACF;AACA,QAAI,EAAE,QAAQ,OAAO;AACnB,QAAE,eAAe;AACjB,cAAQ,WAAW,SAAS,CAAC;AAC7B;AAAA,IACF;AAAA,EACF;AAEA,OAAK,iBAAiB,WAAW,YAAY;AAC7C,MAAI,YAAY,iBAAiB,WAAW,YAAY;AAExD,WAAS,eAAe,OAAqB;AAC3C,mBAAe;AACf,mBAAe,gBAAgB;AAC/B,UAAM,KAAgB,CAAC;AACvB,QAAI,uBAAuB;AAC3B,QAAI,qBAAqB;AACzB,QAAI,gBAAgB;AACpB,UAAM,eAAe,MAAY;AAC/B,UAAI,eAAe,CAAC,eAAe;AACjC,uBAAe,OAAO,WAAW;AACjC,wBAAgB;AAAA,MAClB;AAAA,IACF;AACA,eAAW,WAAW,UAAU;AAC9B,YAAM,eACJ,gBAAgB,WAAW,QAAQ,eAAe;AACpD,UAAI,aAAc,wBAAuB;AACzC,YAAM,eAAe,eAAe,QAAQ;AAC5C,YAAM,MAAM,cAAc,SAAS,KAAK,YAAY;AACpD,UAAI,CAAC,IAAK;AACV,UAAI,aAAc;AAClB,qBAAe,OAAO,IAAI,IAAI;AAC9B,SAAG,KAAK,IAAI,OAAO;AACnB,UAAI,QAAQ,OAAO,cAAe,cAAa;AAAA,IACjD;AACA,QAAI,CAAC,iBAAiB,aAAa;AACjC,qBAAe,QAAQ,WAAW;AAClC,sBAAgB;AAAA,IAClB;AACA,QAAI,SAAS,wBAAwB,uBAAuB,GAAG;AAC7D,qBAAe;AAAA,QACb,gBAAgB;AAAA,UACd,OAAO,EAAE,2BAA2B,GAAG;AAAA,UACvC,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,IACF;AACA,qBAAiB,gBAAgB,EAAE;AACnC,yBAAqB;AAAA,EACvB;AAEA,iBAAe,EAAE;AAEjB,OAAK,OAAO,IAAI;AAEhB,QAAM,UAAU,gBAAgB;AAAA,IAC9B,GAAG;AAAA,IACH,MAAM,eAAe;AAAA,IACrB,MAAM;AACJ,WAAK,oBAAoB,WAAW,YAAY;AAChD,WAAK,oBAAoB,eAAe,WAAW;AACnD,UAAI,YAAY,oBAAoB,WAAW,YAAY;AAAA,IAC7D;AAAA,IACA,MAAM,KAAK,gBAAgB;AAAA,EAC7B,CAAC;AAED,QAAM,kBAAkB,oBAAI,IAAoB;AAChD,MAAI,QAAQ,SAAS;AACnB,eAAW,UAAU,QAAQ,SAAS;AACpC,UAAI,UAAU,OAAQ,iBAAgB,IAAI,OAAO,IAAI,MAAM;AAAA,eAClD,UAAU,OAAQ,iBAAgB,IAAI,OAAO,IAAI,MAAM;AAAA,eACvD,cAAc,OAAQ,iBAAgB,IAAI,OAAO,IAAI,MAAM;AAAA,eAC3D,eAAe;AACtB,wBAAgB,IAAI,OAAO,IAAI,WAAW;AAAA,eACnC,cAAc,OAAQ,iBAAgB,IAAI,OAAO,IAAI,OAAO;AAAA,UAChE,iBAAgB,IAAI,OAAO,IAAI,KAAK;AAAA,IAC3C;AAAA,EACF;AAEA,QAAM,kBAAkB,MAA0B;AAChD,UAAM,WAAW,KAAK,YAAY;AAClC,UAAM,SACJ,oBAAoB,aAChB,SAAS,gBACT,SAAS;AACf,QAAI,kBAAkB,eAAe,KAAK,SAAS,MAAM,EAAG,QAAO;AACnE,WAAO;AAAA,EACT;AAEA,MAAI,eAAoC;AAExC,QAAM,gBAAgB,MAA2B;AAC/C,UAAM,SAAS,gBAAgB;AAC/B,QAAI,CAAC,OAAQ,QAAO;AACpB,QAAI,kBAAkB,oBAAoB,OAAO,SAAS,YAAY;AACpE,aAAO;AAAA,QACL,OAAO,OAAO,UAAU,YAAY;AAAA,QACpC,SAAS,MAAM,OAAO,MAAM;AAAA,MAC9B;AAAA,IACF;AACA,UAAM,WAAW,OAAO,aAAa,0BAA0B;AAC/D,QAAI,UAAU;AACZ,aAAO;AAAA,QACL,OAAO,gBAAgB,IAAI,QAAQ,KAAK;AAAA,QACxC,SAAS,MAAM,OAAO,MAAM;AAAA,MAC9B;AAAA,IACF;AACA,QAAI,OAAO,aAAa,wBAAwB,GAAG;AACjD,aAAO,EAAE,OAAO,QAAQ,SAAS,MAAM,OAAO,MAAM,EAAE;AAAA,IACxD;AACA,WAAO,EAAE,OAAO,QAAQ,SAAS,MAAM,OAAO,MAAM,EAAE;AAAA,EACxD;AAEA,QAAM,eAAmC;AAAA,IACvC,KAAK,MAAM;AAAA,IACX,UAAU,IAAI;AACZ,YAAM,SAAS,MAAM;AACnB,uBAAe,cAAc;AAC7B,WAAG;AAAA,MACL;AACA,WAAK,iBAAiB,WAAW,MAAM;AACvC,WAAK,iBAAiB,UAAU,MAAM;AACtC,UAAI,YAAY,iBAAiB,SAAS,MAAM;AAChD,aAAO;AACP,aAAO,MAAM;AACX,aAAK,oBAAoB,WAAW,MAAM;AAC1C,aAAK,oBAAoB,UAAU,MAAM;AACzC,YAAI,YAAY,oBAAoB,SAAS,MAAM;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAA0B,EAAE,SAAS,aAAa;AACxD,MAAI,YAAY;AACd,YAAQ,WAAW;AAAA,EACrB;AACA,SAAO;AACT;;;AY5xBA,IAAAC,iBAKO;AACP,IAAAC,iBAAyC;;;ACNzC,IAAAC,iBAA2D;AA2B3D,IAAMC,kBAA8B;AAAA,EAClC,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,cAAc;AAChB;AAEO,IAAM,kBAAc,sBAAM;AAAA,EAC/B,OAAO,CAAC;AAAA,EAIR,SAAS;AAAA,IACP,qBAAqB,MAAM;AAAA,IAAC;AAAA,IAC5B,oBAAoB,MAAM;AAAA,IAAC;AAAA,IAC3B,mBAAmB,MAAM;AAAA,IAAC;AAAA,IAC1B,iBAAiB,MAAM;AAAA,IAAC;AAAA,IACxB,aAAa,MAAM;AAAA,IAAC;AAAA,IACpB,kBAAkB,MAAM;AAAA,IAAC;AAAA,IACzB,aAAa,MAAM;AAAA,IAAC;AAAA,IACpB,kBAAkB,MAAM;AAAA,IAAC;AAAA,EAC3B;AAAA,EACA,QAAQ;AAAA,IACN,cAAU;AAAA,MACR,YAAY;AAAA,IACd;AAAA,IACA,YAAQ,4BAA2C,aAAa;AAAA,MAC9D,QAAQ;AAAA,IACV,EAAE;AAAA,EACJ;AACF,CAAC,EAAE,cAAc;AAAA,EACf,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,SAASA;AAAA,EACT,QAAQ;AAAA,IACN,MAAM;AAAA,MACJ,OAAO;AAAA,YACL,uBAAO,OAAO;AAAA,UACZ,aAAa;AAAA,UACb,cAAc;AAAA,QAChB,EAAE;AAAA,QACF,EAAE,MAAM,cAAc;AAAA,QACtB,EAAE,MAAM,mBAAmB;AAAA,MAC7B;AAAA,MACA,IAAI;AAAA,QACF,QAAQ;AAAA,UACN,QAAQ;AAAA,UACR,aAAS,uBAAO,CAAC,EAAE,MAAM,OAAO;AAAA,YAC9B,QAAQ,MAAM;AAAA,YACd,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,cAAc;AAAA,UAChB,EAAE;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY;AAAA,MACV,QAAQ;AAAA,QACN,KAAK;AAAA,QACL,OAAO,CAAC,EAAE,QAAQ,OAAO,EAAE,QAAQ,QAAQ,UAAU,CAAC,EAAE;AAAA,QACxD,QAAQ;AAAA,UACN,aAAS,+BAAe,CAAC,EAAE,OAAO,QAAQ,MAAM;AAC9C,kBAAM,SAAS,MAAM;AACrB,gBAAI,CAAC,QAAQ;AACX,sBAAQ,MAAM,EAAE,MAAM,QAAQ,CAAC;AAAA,YACjC,OAAO;AACL,sBAAQ,MAAM,EAAE,MAAM,WAAW,aAAa,OAAO,CAAC;AAAA,YACxD;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA,SAAS;AAAA,UACP,aAAS,+BAAe,CAAC,EAAE,OAAO,QAAQ,MAAM;AAC9C,kBAAM,QAAQ,MAAM;AACpB,kBAAM,UACJ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACvD,oBAAQ,MAAM;AAAA,cACZ,MAAM;AAAA,cACN,QAAQ,EAAE,QAAQ,SAAS,QAAQ;AAAA,YACrC,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,IAAI;AAAA,QACF,OAAO,EAAE,QAAQ,aAAa;AAAA,QAC9B,SAAS;AAAA,UACP,QAAQ;AAAA,UACR,aAAS,uBAAO,CAAC,EAAE,MAAM,OAAO;AAAA,YAC9B,aAAa,MAAM;AAAA,YACnB,cAAc;AAAA,YACd,QAAQ;AAAA,cACN,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,aAAa,MAAM;AAAA,YACrB;AAAA,UACF,EAAE;AAAA,QACJ;AAAA,QACA,MAAM;AAAA,UACJ,QAAQ;AAAA,UACR,aAAS,uBAAO,CAAC,EAAE,MAAM,OAAO;AAAA,YAC9B,QAAQ,MAAM;AAAA,YACd,cACE,MAAM,OAAO,WAAW,UAAU,MAAM,OAAO,UAAU;AAAA,YAC3D,aACE,MAAM,OAAO,WAAW,UACnB,MAAM,OAAO,eAAe,OAC7B;AAAA,UACR,EAAE;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY;AAAA,MACV,OAAO,EAAE,MAAM,sBAAsB;AAAA,MACrC,MAAM,EAAE,MAAM,qBAAqB;AAAA,MACnC,QAAQ;AAAA,QACN,KAAK;AAAA,QACL,OAAO,CAAC,EAAE,QAAQ,OAAO,EAAE,QAAQ,QAAQ,UAAU,CAAC,EAAE;AAAA,QACxD,QAAQ;AAAA,UACN,aAAS,+BAAe,CAAC,EAAE,OAAO,QAAQ,MAAM;AAC9C,kBAAM,SAAS,MAAM;AACrB,gBAAI,OAAO,WAAW,WAAW;AAC/B,sBAAQ,MAAM,EAAE,MAAM,MAAM,OAAO,CAAC;AAAA,YACtC,OAAO;AACL,sBAAQ,MAAM,EAAE,MAAM,QAAQ,OAAO,CAAC;AAAA,YACxC;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA,SAAS;AAAA,UACP,aAAS,+BAAe,CAAC,EAAE,OAAO,QAAQ,MAAM;AAC9C,kBAAM,QAAQ,MAAM;AACpB,kBAAM,UACJ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACvD,oBAAQ,MAAM;AAAA,cACZ,MAAM;AAAA,cACN,QAAQ,EAAE,QAAQ,SAAS,QAAQ;AAAA,YACrC,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,IAAI;AAAA,QACF,IAAI;AAAA,UACF,QAAQ;AAAA,UACR,aAAS,uBAAO,CAAC,EAAE,MAAM,OAAO;AAAA,YAC9B,QAAQ,MAAM;AAAA,YACd,aAAa;AAAA,YACb,cAAc;AAAA,UAChB,EAAE;AAAA,QACJ;AAAA,QACA,MAAM;AAAA,UACJ,QAAQ;AAAA,UACR,aAAS,uBAAO,CAAC,EAAE,MAAM,OAAO;AAAA,YAC9B,QAAQ,MAAM;AAAA,YACd,cACE,MAAM,OAAO,WAAW,UAAU,MAAM,OAAO,UAAU;AAAA,YAC3D,aACE,MAAM,OAAO,WAAW,UACnB,MAAM,OAAO,eAAe,OAC7B;AAAA,UACR,EAAE;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,OAAO,CAAC,EAAE,MAAM,oBAAoB,GAAG,EAAE,MAAM,cAAc,CAAC;AAAA,IAChE;AAAA,IACA,OAAO;AAAA,MACL,OAAO,CAAC,EAAE,MAAM,kBAAkB,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAAA,MACjE,IAAI;AAAA,QACF,OAAO,EAAE,QAAQ,OAAO;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;ACtMD,aAAwB;AAQjB,SAAS,aAAa,QAA8B,CAAC,GAAiB;AAC3E,SAAO;AAAA,IACE;AAAA,IACA;AAAA,IACP;AAAA,IACA;AAAA,EACF;AACF;;;ACXA,IAAM,mBAAmB;AACzB,IAAM,oBACJ;AAEF,IAAM,oBAAoB;AAOnB,SAAS,YACd,UAA8B,CAAC,GAC/B,WAA4B,CAAC,GACb;AAChB,QAAM,EAAE,OAAO,OAAO,MAAM,OAAO,GAAG,KAAK,IAAI;AAC/C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,OAAO,GAAG,kBAAkB,KAAK;AAAA,MACjC,OAAO;AAAA,QACL,aAAa;AAAA,QACb,wBAAwB;AAAA,QACxB,GAAI,OAAO,EAAE,yBAAyB,KAAK,IAAI,CAAC;AAAA,QAChD,GAAG;AAAA,MACL;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACF;AAQO,SAAS,iBACd,UAAmC,CAAC,GACpC,WAA4B,CAAC,GACX;AAClB,QAAM,EAAE,OAAO,OAAO,SAAS,OAAO,GAAG,KAAK,IAAI;AAClD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,OAAO,GAAG,mBAAmB,KAAK;AAAA,MAClC,OAAO;AAAA,QACL,aAAa;AAAA,QACb,GAAI,UAAU,EAAE,KAAK,QAAQ,IAAI,CAAC;AAAA,QAClC,GAAG;AAAA,MACL;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACF;AAkBO,SAAS,iBACd,UAA8B,CAAC,GACT;AACtB,QAAM,EAAE,OAAO,OAAO,OAAO,GAAG,KAAK,IAAI;AACzC,QAAM,OAAO,GAAG,KAAK;AAAA,IACnB,GAAG;AAAA,IACH,OAAO,GAAG,mBAAmB,KAAK;AAAA,IAClC,OAAO;AAAA,MACL,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,GAAG;AAAA,IACL;AAAA,EACF,CAAC;AACD,OAAK,SAAS;AACd,SAAO;AACT;;;AC1FA,IAAM,aAAa;AAMZ,SAAS,WACd,UAA6B,CAAC,GAC9B,WAA4B,CAAC,GACZ;AACjB,QAAM,EAAE,OAAO,OAAO,OAAO,GAAG,KAAK,IAAI;AACzC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,OAAO,GAAG,YAAY,KAAK;AAAA,MAC3B,OAAO;AAAA,QACL,aAAa;AAAA,QACb,wBAAwB;AAAA,QACxB,YAAY;AAAA,QACZ,GAAG;AAAA,MACL;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACF;;;ACzBA,IAAM,cACJ;AAMK,SAAS,YACd,UAA8B,CAAC,GACb;AAClB,QAAM,EAAE,OAAO,OAAO,OAAO,GAAG,KAAK,IAAI;AACzC,SAAO,GAAG,SAAS;AAAA,IACjB,GAAG;AAAA,IACH,OAAO,GAAG,aAAa,YAAY,KAAK;AAAA,IACxC,OAAO,EAAE,aAAa,SAAS,GAAG,MAAM;AAAA,EAC1C,CAAC;AACH;AAEO,SAAS,eACd,UAA8B,CAAC,GACV;AACrB,QAAM,EAAE,OAAO,OAAO,OAAO,GAAG,KAAK,IAAI;AACzC,SAAO,GAAG,YAAY;AAAA,IACpB,GAAG;AAAA,IACH,OAAO,GAAG,aAAa,sBAAsB,KAAK;AAAA,IAClD,OAAO,EAAE,aAAa,YAAY,GAAG,MAAM;AAAA,EAC7C,CAAC;AACH;;;AC9BA,IAAAC,iBAAqE;AAUrE,IAAM,sBACJ;AA6CK,SAAS,mBACd,UAA+B,CAAC,GACb;AACnB,QAAM,EAAE,OAAO,OAAO,OAAO,GAAG,KAAK,IAAI;AACzC,SAAO,GAAG,UAAU;AAAA,IAClB,GAAG;AAAA,IACH,OAAO,GAAG,qBAAqB,KAAK;AAAA,IACpC,OAAO,EAAE,aAAa,UAAU,GAAG,MAAM;AAAA,EAC3C,CAAC;AACH;;;AN3BA,IAAI,WAAW;AACf,IAAM,cAAc,MAAc,eAAe,EAAE,QAAQ;AAE3D,SAAS,cAAc,OAAgD;AACrE,QAAM,MAAM,MAAM,OAAO,CAAC;AAC1B,MAAI,QAAQ,OAAW,QAAO;AAC9B,MAAI,OAAO,QAAQ,YAAY,QAAQ,QAAQ,SAAS,KAAK;AAC3D,WAAO,OAAO,IAAI,GAAG;AAAA,EACvB;AACA,SAAO,OAAO,GAAG;AACnB;AAEA,eAAe,mBACb,QACA,QACwC;AACxC,QAAM,SAAS,MAAM,OAAO,WAAW,EAAE,SAAS,MAAM;AACxD,MAAI,EAAE,YAAY,WAAW,CAAC,OAAO,OAAQ,QAAO;AAGpD,QAAM,MAA8B,CAAC;AACrC,aAAW,SAAS,OAAO,QAAQ;AACjC,UAAM,MAAM,cAAc,KAAK;AAC/B,QAAI,CAAC,IAAK;AACV,QAAI,IAAI,GAAG,EAAG;AACd,QAAI,GAAG,IAAI,MAAM;AAAA,EACnB;AACA,SAAO,OAAO,KAAK,GAAG,EAAE,SAAS,IAAI,MAAM;AAC7C;AAEA,SAAS,YACP,OACA,SACa;AACb,QAAM,YAAY,YAAY;AAC9B,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK,UAAU;AACb,YAAM,OAAO,mBAAmB;AAAA,QAC9B,OAAO;AAAA,UACL,MAAM,MAAM;AAAA,UACZ,IAAI;AAAA,UACJ,UAAU,MAAM,YAAY;AAAA,QAC9B;AAAA,MACF,CAAC;AACD,iBAAW,OAAO,MAAM,SAAS;AAC/B,aAAK;AAAA,UACH,GAAG,UAAU,EAAE,OAAO,EAAE,OAAO,IAAI,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC;AAAA,QAC/D;AAAA,MACF;AACA,YAAM,aACJ,OAAO,YAAY,WACf,UACA,OAAO,MAAM,UAAU,WACrB,MAAM,QACN,MAAM,QAAQ,CAAC,GAAG;AAC1B,UAAI,eAAe,OAAW,MAAK,QAAQ;AAC3C,gBAAU;AACV,aAAO,MAAM,KAAK;AAClB,cAAQ,MAAM;AACZ,YAAI,eAAe,OAAW,MAAK,QAAQ;AAAA,MAC7C;AACA;AAAA,IACF;AAAA,IACA,KAAK;AAAA,IACL,KAAK,SAAS;AACZ,YAAM,OAAO,YAAY;AAAA,QACvB,OAAO;AAAA,UACL,MAAM,MAAM,SAAS,UAAU,UAAU;AAAA,UACzC,MAAM,MAAM;AAAA,UACZ,IAAI;AAAA,UACJ,aAAa,MAAM,eAAe;AAAA,UAClC,UAAU,MAAM,YAAY;AAAA,QAC9B;AAAA,MACF,CAAC;AACD,YAAM,aACJ,OAAO,YAAY,WACf,UACA,OAAO,MAAM,UAAU,WACrB,MAAM,QACN;AACR,WAAK,QAAQ;AACb,gBAAU;AACV,aAAO,MAAM,KAAK;AAClB,cAAQ,MAAM;AACZ,aAAK,QAAQ;AAAA,MACf;AACA;AAAA,IACF;AAAA,IACA,KAAK,YAAY;AACf,YAAM,OAAO,eAAe;AAAA,QAC1B,OAAO;AAAA,UACL,MAAM,MAAM;AAAA,UACZ,IAAI;AAAA,UACJ,aAAa,MAAM,eAAe;AAAA,UAClC,UAAU,MAAM,YAAY;AAAA,UAC5B,MAAM,MAAM;AAAA,QACd;AAAA,MACF,CAAC;AACD,YAAM,aACJ,OAAO,YAAY,WACf,UACA,OAAO,MAAM,UAAU,WACrB,MAAM,QACN;AACR,WAAK,QAAQ;AACb,gBAAU;AACV,aAAO,MAAM,KAAK;AAClB,cAAQ,MAAM;AACZ,aAAK,QAAQ;AAAA,MACf;AACA;AAAA,IACF;AAAA,IACA,KAAK,YAAY;AACf,YAAM,QAAQ,GAAG,SAAS;AAAA,QACxB,OAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM,MAAM;AAAA,UACZ,IAAI;AAAA,QACN;AAAA,QACA,OACE;AAAA,MACJ,CAAC;AACD,YAAM,aACJ,OAAO,YAAY,YACf,UACA,OAAO,MAAM,UAAU,YACrB,MAAM,QACN;AACR,YAAM,UAAU;AAChB,gBAAU;AACV,aAAO,MAAM,MAAM;AACnB,cAAQ,MAAM;AACZ,cAAM,UAAU;AAAA,MAClB;AACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,iBAAiB;AACnC,QAAM,SAAS;AAAA,IACb;AAAA,MACE,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM,SAAS,aAAa,gCAAgC;AAAA,IACrE;AAAA,IACA,CAAC;AAAA,EACH;AAEA,MAAI,MAAM,SAAS,YAAY;AAC7B,WAAO;AAAA,MACL;AAAA,MACA,iBAAiB,EAAE,SAAS,UAAU,GAAG,MAAM,KAAK;AAAA,IACtD;AAAA,EACF,OAAO;AACL,WAAO;AAAA,MACL,iBAAiB,EAAE,SAAS,UAAU,GAAG,MAAM,KAAK;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AACA,SAAO,OAAO,SAAS;AAEvB,QAAM,WAAW,CAAC,YAAiC;AACjD,QAAI,CAAC,SAAS;AACZ,gBAAU,SAAS;AACnB,gBAAU,cAAc;AACxB,cAAQ,gBAAgB,cAAc;AACtC;AAAA,IACF;AACA,cAAU,SAAS;AACnB,cAAU,cAAc;AACxB,YAAQ,aAAa,gBAAgB,MAAM;AAAA,EAC7C;AAEA,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,kBACd,SACA,KACA,MACgB;AAChB,QAAM,WAAsB,CAAC;AAC7B,QAAM,SAAS,QAAQ,OAAO;AAAA,IAAI,CAAC,UACjC,YAAY,OAAO,QAAQ,UAAU,MAAM,IAAI,CAAC;AAAA,EAClD;AACA,QAAM,cAAc,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAE1D,QAAM,SAAS,GAAG,KAAK;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,MACL,0BAA0B;AAAA,MAC1B,aAAa;AAAA,IACf;AAAA,EACF,CAAC;AAKD,QAAM,SAAS,aAAa;AAAA,IAC1B,SAAS;AAAA,IACT,OAAO;AAAA,IACP,OAAO;AAAA,MACL,MAAM;AAAA,MACN,0BAA0B;AAAA,IAC5B;AAAA,IACA,MAAM,QAAQ,OAAO;AAAA,EACvB,CAAC;AAED,QAAM,kBAAkB,GAAG,QAAQ;AAAA,IACjC,OAAO;AAAA,IACP,MAAM;AAAA,EACR,CAAC;AACD,QAAM,oBAAoB,GAAG,OAAO;AAAA,IAClC,OAAO;AAAA,EACT,CAAC;AACD,QAAM,kBAAkB;AAAA,IACtB;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,QAAQ,KAAK;AAAA,IACxB;AAAA,IACA,CAAC,iBAAiB,iBAAiB;AAAA,EACrC;AAEA,MAAI,QAAQ,mBAAmB;AAC7B,YAAQ,kBAAkB,KAAK,CAAC,YAAY;AAC1C,UAAI,CAAC,QAAS;AACd,YAAM,MAAM,GAAG,OAAO;AAAA,QACpB,OAAO;AAAA,QACP,OAAO,EAAE,KAAK,SAAS,KAAK,qBAAqB;AAAA,MACnD,CAAC;AACD,wBAAkB,OAAO,GAAG;AAC5B,sBAAgB,SAAS;AAEzB,YAAM,WAAW,aAAa;AAAA,QAC5B,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,wBAAwB;AAAA,QACxB,eAAe;AAAA,QACf,WAAW;AAAA,QACX,eAAe;AAAA,QACf,cAAc;AAAA,QACd,cAAc;AAAA,QACd,aAAa,MACX,kBAAkB,YAAY;AAAA,MAClC,CAAC;AACD,eAAS,KAAK,MAAM,SAAS,QAAQ,CAAC;AAEtC,YAAM,aAAa,GAAG,OAAO;AAAA,QAC3B,OAAO;AAAA,QACP,OAAO,EAAE,uBAAuB,GAAG;AAAA,MACrC,CAAC;AACD,YAAM,aAAa,GAAG,OAAO;AAAA,QAC3B,OACE;AAAA,MACJ,CAAC;AACD,YAAM,UAAU,GAAG,OAAO;AAAA,QACxB,OAAO;AAAA,MACT,CAAC;AACD,YAAM,UAAU,GAAG,OAAO;AAAA,QACxB,OAAO;AAAA,QACP,OAAO,EAAE,KAAK,SAAS,KAAK,aAAa;AAAA,MAC3C,CAAC;AACD,cAAQ,OAAO,OAAO;AACtB,iBAAW,OAAO,OAAO;AAEzB,YAAM,eAAe,MAAM;AACzB,cAAM,KAAK,kBAAkB,YAAY;AACzC,eAAO,cAAc,aAAa,KAAM,GAAgB;AAAA,MAC1D,GAAG;AACH,kBAAY,OAAO,YAAY,UAAU;AACzC,iBAAW,SAAS;AACpB,iBAAW,SAAS;AAEpB,UAAI,iBAA4B,CAAC;AACjC,eAAS,qBAA2B;AAClC,mBAAW,KAAK,eAAgB,GAAE;AAClC,yBAAiB,CAAC;AAClB,cAAM,MAAM,SAAS,IAAI;AACzB,uBAAe;AAAA,UACb;AAAA,YACE;AAAA,YACA,IAAI,iBAAiB;AAAA,UACvB;AAAA,UACA;AAAA,YACE;AAAA,YACA,IAAI,mBAAmB;AAAA,UACzB;AAAA,UACA,YAAY,SAAS,IAAI,gBAAgB,CAA4B;AAAA,QACvE;AACA,mBAAW,SAAS,CAAC,IAAI;AACzB,mBAAW,SAAS,CAAC,IAAI;AAAA,MAC3B;AACA,yBAAmB;AACnB,YAAM,gBAAgB,SAAS,OAAO,UAAU,kBAAkB;AAClE,eAAS,KAAK,MAAM;AAClB,sBAAc;AACd,mBAAW,KAAK,eAAgB,GAAE;AAClC,mBAAW,OAAO;AAClB,mBAAW,OAAO;AAAA,MACpB,CAAC;AAED,YAAM,kBAAkB,CAAC,MAAmB;AAC1C,YAAK,EAAoB,QAAQ,SAAU;AAC3C,YAAI,CAAC,SAAS,IAAI,EAAE,KAAM;AAC1B,UAAE,eAAe;AACjB,UAAE,gBAAgB;AAClB,UAAE,yBAAyB;AAC3B,iBAAS,IAAI,EAAE,QAAQ,KAAK;AAAA,MAC9B;AACA,UAAI,qBAAqB;AACzB,YAAM,wBAAwB,CAAC,MAAmB;AAChD,YAAI,KAAK,IAAI,IAAI,oBAAoB;AACnC,YAAE,eAAe;AACjB,YAAE,gBAAgB;AAClB,YAAE,yBAAyB;AAC3B;AAAA,QACF;AACA,YAAI,CAAC,SAAS,IAAI,EAAE,KAAM;AAC1B,YAAI,QAAQ,SAAS,EAAE,MAAc,EAAG;AACxC,UAAE,eAAe;AACjB,UAAE,gBAAgB;AAClB,UAAE,yBAAyB;AAC3B,iBAAS,IAAI,EAAE,QAAQ,KAAK;AAC5B,6BAAqB,KAAK,IAAI,IAAI;AAAA,MACpC;AACA,aAAO,iBAAiB,WAAW,iBAAiB,IAAI;AACxD,aAAO,iBAAiB,eAAe,uBAAuB,IAAI;AAClE,aAAO,iBAAiB,aAAa,uBAAuB,IAAI;AAChE,aAAO,iBAAiB,SAAS,uBAAuB,IAAI;AAC5D,eAAS,KAAK,MAAM;AAClB,eAAO,oBAAoB,WAAW,iBAAiB,IAAI;AAC3D,eAAO,oBAAoB,eAAe,uBAAuB,IAAI;AACrE,eAAO,oBAAoB,aAAa,uBAAuB,IAAI;AACnE,eAAO,oBAAoB,SAAS,uBAAuB,IAAI;AAAA,MACjE,CAAC;AAED;AAAA,QACE;AAAA,QACA,SAAS,IAAI,EAAE,gBAAgB;AAAA,MACjC;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,OAAO,WAAW,EAAE,OAAO,EAAE,mBAAmB,QAAQ,GAAG,EAAE,GAAG;AAAA,IACpE,GAAI,QAAQ,oBAAoB,CAAC,eAAe,IAAI,CAAC;AAAA,IACrD,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,IAC3B;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,YACJ;AACF,QAAM,kBACJ,YAAY;AACd,QAAM,aACJ;AAEF,WAAS,gBAAgB,MAAkC;AACzD,UAAM,OAAO,GAAG,OAAO;AAAA,MACrB,OACE,kBAAkB;AAAA,MACpB,OAAO,EAAE,eAAe,OAAO;AAAA,IACjC,CAAC;AACD,UAAM,QAAQ,GAAG,OAAO;AAAA,MACtB,OAAO,kBAAkB;AAAA,MACzB,OAAO,EAAE,eAAe,OAAO;AAAA,IACjC,CAAC;AACD,UAAM,OAAO,GAAG,OAAO,EAAE,OAAO,UAAU,GAAG,CAAC,IAAI,CAAC;AACnD,WAAO,GAAG,OAAO,EAAE,OAAO,WAAW,GAAG,CAAC,MAAM,OAAO,IAAI,CAAC;AAAA,EAC7D;AAGA,QAAM,WACJ;AACF,QAAM,iBAAa,eAAAC,eAAoB,sBAAO;AAC9C,aAAW,UAAU,IAAI,cAAc;AACvC,QAAM,cAAc;AAAA,IAClB;AAAA,IACA,EAAE,OAAO,YAAY,OAAO,EAAE,aAAa,UAAU,QAAQ,KAAK,EAAE;AAAA,IACpE;AAAA,MACE,gBAAgB,UAAU;AAAA,MAC1B,GAAG,OAAO,EAAE,OAAO,kDAAkD,GAAG;AAAA,QACtE,GAAG,OAAO,EAAE,OAAO,WAAW,uBAAuB,CAAC;AAAA,MACxD,CAAC;AAAA,MACD;AAAA,QACE;AAAA,QACA;AAAA,UACE,OACE;AAAA,QACJ;AAAA,QACA,CAAC,GAAG,OAAO,EAAE,OAAO,WAAW,uBAAuB,CAAC,CAAC;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAGA,QAAM,eAAW,eAAAA,eAAoB,0BAAW;AAChD,QAAM,eAAe,GAAG,OAAO;AAAA,IAC7B,OAAO;AAAA,EACT,CAAC;AACD,QAAM,cAAc,GAAG,KAAK;AAAA,IAC1B,OAAO,eAAe,EAAE,SAAS,WAAW,MAAM,KAAK,CAAC;AAAA,IACxD,OAAO,EAAE,QAAQ,UAAU,KAAK,aAAa;AAAA,EAC/C,CAAC;AACD,QAAM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,MACE,OACE;AAAA,IACJ;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AACA,QAAM,cAAc;AAAA,IAClB;AAAA,IACA,EAAE,OAAO,YAAY,OAAO,EAAE,QAAQ,KAAK,EAAE;AAAA,IAC7C;AAAA,MACE,gBAAgB,QAAQ;AAAA,MACxB,GAAG,OAAO,EAAE,OAAO,kDAAkD,GAAG;AAAA,QACtE;AAAA,MACF,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAGA,QAAM,eAAW,eAAAA,eAAoB,sBAAO;AAC5C,QAAM,aAAa,GAAG,OAAO;AAAA,IAC3B,OAAO;AAAA,EACT,CAAC;AACD,QAAM,mBAAmB,GAAG,KAAK;AAAA,IAC/B,OAAO;AAAA,EACT,CAAC;AACD,QAAM,cAAc,aAAa;AAAA,IAC/B,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR,CAAC;AACD,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,MACE,OACE;AAAA,IACJ;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AACA,QAAM,YAAY,GAAG,OAAO,EAAE,OAAO,YAAY,OAAO,EAAE,QAAQ,KAAK,EAAE,GAAG;AAAA,IAC1E,gBAAgB,QAAQ;AAAA,IACxB;AAAA,MACE;AAAA,MACA,EAAE,OAAO,wDAAwD;AAAA,MACjE,CAAC,YAAY,gBAAgB;AAAA,IAC/B;AAAA,IACA;AAAA,EACF,CAAC;AAED,WAAS,sBAA4B;AACnC,eAAW,KAAK,OAAQ,GAAE,SAAS,IAAI;AAAA,EACzC;AAEA,WAAS,iBAAiB,MAAgD;AACxE,wBAAoB;AACpB,QAAI,CAAC,KAAM;AACX,eAAW,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,IAAI,GAAG;AAClD,kBAAY,IAAI,IAAI,GAAG,SAAS,OAAO;AAAA,IACzC;AAAA,EACF;AAEA,WAAS,UAAU,QAAuC;AACxD,WAAO,gBAAgB;AACvB,WAAO,UAAU,OAAO,6BAA6B;AACrD,WAAO,UAAU,IAAI,uBAAuB;AAC5C,QAAI,CAAC,OAAQ;AACb,QAAI,OAAO,WAAW,SAAS;AAC7B,aAAO,UAAU,OAAO,uBAAuB;AAC/C,aAAO,UAAU,IAAI,6BAA6B;AAClD,UAAI,CAAC,OAAO,aAAa;AACvB,eAAO,cAAc,OAAO;AAAA,MAC9B;AACA;AAAA,IACF;AACA,QAAI,OAAO,MAAM;AACf,aAAO;AAAA,QACL,SAAS,eAAe,GAAG,OAAO,WAAW,YAAY,GAAG;AAAA,QAC5D,GAAG,KAAK;AAAA,UACN,OAAO;AAAA,UACP,OAAO;AAAA,YACL,MAAM,OAAO,KAAK;AAAA,YAClB,QAAQ;AAAA,YACR,KAAK;AAAA,UACP;AAAA,UACA,MAAM,OAAO,KAAK,SAAS;AAAA,QAC7B,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AACL,aAAO,cAAc,OAAO,WAAW;AAAA,IACzC;AAAA,EACF;AAGA,WAAS,SAAS,OAA4B;AAC5C,SAAK,SAAS,UAAU;AACxB,gBAAY,SAAS,UAAU;AAC/B,gBAAY,SAAS,UAAU;AAC/B,cAAU,SAAS,UAAU;AAAA,EAC/B;AAEA,WAAS,gBAAgB,QAAuC;AAC9D,QAAI,CAAC,UAAU,OAAO,WAAW,UAAW;AAC5C,iBAAa,cAAc,OAAO,WAAW;AAC7C,QAAI,OAAO,MAAM;AACf,kBAAY,aAAa,QAAQ,OAAO,KAAK,GAAG;AAChD,kBAAY,cAAc,OAAO,KAAK,SAAS;AAC/C,qBAAe,SAAS;AAAA,IAC1B,OAAO;AACL,qBAAe,SAAS;AAAA,IAC1B;AAAA,EACF;AAEA,WAAS,cAAc,QAAuC;AAC5D,QAAI,CAAC,UAAU,OAAO,WAAW,QAAS;AAC1C,eAAW,cAAc;AACzB,qBAAiB,cAAc,OAAO;AAAA,EACxC;AAEA,QAAM,YAAQ;AAAA,IACZ,YAAY,QAAQ;AAAA,MAClB,SAAS;AAAA,QACP,qBAAqB,MAAM;AACzB,iBAAO,WAAW;AAClB,iBAAO,aAAa,gBAAgB,EAAE;AACtC,mBAAS,SAAS;AAAA,QACpB;AAAA,QACA,oBAAoB,MAAM;AACxB,iBAAO,WAAW;AAClB,iBAAO,gBAAgB,cAAc;AAAA,QACvC;AAAA,QACA,mBAAmB,CAAC,EAAE,QAAQ,MAAM;AAClC,0BAAgB,QAAQ,MAAM;AAC9B,mBAAS,SAAS;AAClB,8BAAoB;AAAA,QACtB;AAAA,QACA,iBAAiB,CAAC,EAAE,QAAQ,MAAM;AAChC,gBAAM,iBACJ,QAAQ,eAAe,OAAO,KAAK,QAAQ,WAAW,EAAE,SAAS;AACnE,cAAI,gBAAgB;AAClB,kBAAM,UACJ,QAAQ,QAAQ,WAAW,UACvB,QAAQ,SACR,QAAQ,eACN;AAAA,cACE,QAAQ;AAAA,cACR,SAAS,QAAQ;AAAA,YACnB,IACA;AACR,sBAAU,OAAO;AACjB,qBAAS,MAAM;AAAA,UACjB,OAAO;AACL,0BAAc,QAAQ,MAAM;AAC5B,qBAAS,OAAO;AAAA,UAClB;AAAA,QACF;AAAA,QACA,kBAAkB,CAAC,EAAE,QAAQ,MAAM;AACjC,2BAAiB,QAAQ,eAAe,MAAS;AAAA,QACnD;AAAA,QACA,aAAa,MAAM;AACjB,oBAAU,IAAI;AACd,mBAAS,MAAM;AAAA,QACjB;AAAA,QACA,kBAAkB,MAAM;AACtB,8BAAoB;AAAA,QACtB;AAAA,QACA,aAAa,CAAC,EAAE,QAAQ,MAAM;AAC5B,cACE,QAAQ,QAAQ,WAAW,aAC3B,QAAQ,OAAO,aACf;AACA,uBAAW,QAAQ,QAAQ,OAAO,aAAa;AAC7C,0BAAY,IAAI,IAAI,GAAG,MAAM;AAAA,YAC/B;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,QACN,cAAU,4BAGR,OAAO,EAAE,MAAM,MAAM;AACrB,cAAI,CAAC,QAAQ,OAAQ,QAAO;AAC5B,iBAAO,mBAAmB,QAAQ,QAAQ,MAAM,MAAM;AAAA,QACxD,CAAC;AAAA,QACD,YAAQ;AAAA,UAIN,OAAO,EAAE,MAAM,MACZ,MAAM,QAAQ,OAAO,SAAS,MAAM,MAAM,KAAM;AAAA,YAC/C,QAAQ;AAAA,UACV;AAAA,QACJ;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACA,QAAM,MAAM;AACZ,WAAS,KAAK,MAAM,MAAM,KAAK,CAAC;AAEhC,QAAM,WAAW,CAAC,MAAyB;AACzC,MAAE,eAAe;AACjB,UAAM,SAAoC,CAAC;AAC3C,YAAQ,OAAO,QAAQ,CAAC,OAAO,MAAM;AACnC,aAAO,MAAM,IAAI,IAAI,OAAO,CAAC,EAAE,KAAK;AAAA,IACtC,CAAC;AACD,UAAM,WAAW,MAAM,YAAY;AACnC,QAAI,SAAS,QAAQ,SAAS,EAAG;AACjC,QAAI,SAAS,QAAQ,OAAO,GAAG;AAC7B,YAAM,KAAK,EAAE,MAAM,QAAQ,CAAC;AAAA,IAC9B;AACA,UAAM,KAAK,EAAE,MAAM,UAAU,OAAO,CAAC;AAAA,EACvC;AACA,OAAK,iBAAiB,UAAU,QAAQ;AACxC,WAAS,KAAK,MAAM,KAAK,oBAAoB,UAAU,QAAQ,CAAC;AAEhE,QAAM,gBAAgB,MAAY;AAChC,QAAI,OAAO,KAAK,kBAAkB,WAAY,MAAK,cAAc;AAAA,QAC5D,MAAK,cAAc,IAAI,MAAM,UAAU,EAAE,YAAY,KAAK,CAAC,CAAC;AAAA,EACnE;AAIA,QAAM,gBAAgB,CAAC,MAA2B;AAChD,QAAI,EAAE,QAAQ,QAAS;AACvB,UAAM,QAAQ,EAAE,WAAW,EAAE;AAC7B,QAAI,OAAO;AACT,QAAE,eAAe;AACjB,YAAM,OAAO,MAAM,YAAY;AAC/B,UAAI,KAAK,QAAQ,SAAS,GAAG;AAC3B,YAAI,MAAM;AACV;AAAA,MACF;AACA,UAAI,CAAC,KAAK,QAAQ,MAAM,KAAK,CAAC,KAAK,QAAQ,OAAO,EAAG;AACrD,oBAAc;AACd;AAAA,IACF;AACA,QACE,EAAE,kBAAkB,oBACpB,EAAE,OAAO,SAAS,cAClB,EAAE,OAAO,SAAS,SAClB;AACA,QAAE,eAAe;AAAA,IACnB;AAAA,EACF;AACA,OAAK,iBAAiB,WAAW,aAAa;AAC9C,WAAS,KAAK,MAAM,KAAK,oBAAoB,WAAW,aAAa,CAAC;AAEtE,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,2BAA2B,QAAQ,GAAG;AAAA,IACjD;AAAA,IACA,CAAC,MAAM,aAAa,aAAa,SAAS;AAAA,EAC5C;AACA,OAAK,OAAO,OAAO;AAEnB,QAAM,iBAAiB,MAAY;AACjC,UAAM,KAAK,EAAE,MAAM,QAAQ,CAAC;AAAA,EAC9B;AACA,cAAY,iBAAiB,SAAS,cAAc;AACpD,WAAS,KAAK,MAAM,YAAY,oBAAoB,SAAS,cAAc,CAAC;AAE5E,QAAM,cAAc,oBAAI,IAAgB;AACxC,QAAM,gBAAgB,MAA2B;AAC/C,UAAM,OAAO,MAAM,YAAY;AAC/B,QAAI,KAAK,QAAQ,YAAY,KAAK,KAAK,QAAQ,YAAY,GAAG;AAC5D,aAAO,EAAE,OAAO,oBAAe,SAAS,MAAM;AAAA,MAAC,EAAE;AAAA,IACnD;AACA,QAAI,KAAK,QAAQ,SAAS,GAAG;AAC3B,aAAO,EAAE,OAAO,SAAS,SAAS,MAAM,IAAI,MAAM,EAAE;AAAA,IACtD;AACA,QAAI,KAAK,QAAQ,OAAO,KAAK,CAAC,KAAK,QAAQ,aAAa;AACtD,aAAO,EAAE,OAAO,aAAa,SAAS,eAAe;AAAA,IACvD;AACA,WAAO,EAAE,OAAO,QAAQ,OAAO,OAAO,SAAS,cAAc;AAAA,EAC/D;AAEA,QAAM,WAAW,MAAM,UAAU,MAAM;AACrC,eAAW,MAAM,YAAa,IAAG;AAAA,EACnC,CAAC;AACD,WAAS,KAAK,MAAM,SAAS,YAAY,CAAC;AAE1C,SAAO;AAAA,IACL,SAAS,gBAAgB,CAAC,GAAG,UAAU,MAAM,KAAK,gBAAgB,CAAC,CAAC;AAAA,IACpE,cAAc;AAAA,MACZ,KAAK;AAAA,MACL,WAAW,CAAC,OAAO;AACjB,oBAAY,IAAI,EAAE;AAClB,eAAO,MAAM,YAAY,OAAO,EAAE;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AACF;;;AO9uBA,eAA0B;AAWnB,SAAS,eAEd,OAAkC;AAClC,QAAM,SAAS;AAAA,IACJ;AAAA,IACT;AAAA,EACF;AACA,SAAO,MAAM;AACb,SAAO;AAAA,IACL;AAAA,IACA,KAAK,MACM;AAAA,MACP,OAAO;AAAA,MACP;AAAA,IACF;AAAA,IACF,SAAS,MAAM,OAAO,KAAK;AAAA,EAC7B;AACF;;;AClBA,IAAAC,iBAA6D;AAa7D,SAAS,cAAc,MAAgB,OAAwB;AAC7D,SAAO;AAAA,IACL,GAAG,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,SAAS,EAAE,IAAI,KAAK,YAAY,EAAE;AAAA,IACtE;AAAA,EACF;AACF;AAEA,SAAS,OAAO,MAAwB;AACtC,SAAO,KAAK,OAAO,KAAK;AAC1B;AAEO,SAAS,kBACd,SACA,KACA,MACgB;AAChB,QAAM,MAAM,QAAQ;AACpB,QAAM,WAAW,QAAQ,UAAU;AACnC,MAAI,gBAAqC;AAEzC,QAAM,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvD,QAAM,cAAc,MAA6B;AAC/C,UAAM,KAAK,KAAK,YAAY;AAC5B,QAAI,cAAc,cAAc,cAAc,SAAU,QAAO;AAC/D,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AAEA,QAAM,iBAAiB,CAAC,UACtB,SAAS,WAAW;AAAA,IAClB;AAAA,IACA,aAAa,CAAC,SAAS,KAAK;AAAA,IAC5B,cAAc,CAAC,SAAS,KAAK;AAAA,EAC/B,CAAC;AAEH,QAAM,aACJ,QAAQ,qBAAqB,UAC7B,WAAW,IAAI,QAAQ,gBAAgB;AAEzC,QAAM,SAAS,eAAyB;AAAA,IACtC,IAAI,QAAQ;AAAA,IACZ;AAAA,IACA,YAAY,eAAe,GAAG;AAAA,IAC9B,aAAa;AAAA,IACb,yBAAyB,aAAa,QAAQ,mBAAmB;AAAA,IACjE,aAAa;AAAA,IACb,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,cAAc;AAAA,IACd,UAAU,CAAC,EAAE,UAAU,MAAM;AAC3B,YAAM,OAAO,WAAW,IAAI,SAAS;AACrC,UAAI,CAAC,QAAQ,CAAC,QAAQ,SAAU;AAChC,cAAQ,SAAS,IAAI;AAAA,IACvB;AAAA,IACA,mBAAmB,CAAC,EAAE,iBAAiB,MAAM;AAC3C,YAAM,OAAO,mBACT,WAAW,IAAI,gBAAgB,IAC/B;AACJ,UAAI,MAAM,SAAS;AACjB,YAAI,UAAU,KAAK,KAAK,SAAS;AAAA,UAC/B,OAAO,WAAW,KAAK,QAAQ,IAAI,EAAE;AAAA,QACvC,CAAC;AAAA,MACH,OAAO;AACL,YAAI,UAAU,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,UAAU,GAAG,WAAW;AAAA,IAC5B,OAAO;AAAA,IACP,OAAO,EAAE,2BAA2B,QAAQ,GAAG;AAAA,EACjD,CAAC;AAED,MAAI,iBAAqC;AACzC,MAAI,YAAY;AAChB,QAAM,kBAAkB,CAAC,UAA+B;AACtD,QAAI,gBAAgB;AAClB,qBAAe,gBAAgB,sBAAsB;AACrD,uBAAiB;AAAA,IACnB;AACA,QAAI,OAAO;AACT,YAAM,OAAO,UAAU,IAAI,KAAK;AAChC,UAAI,MAAM;AACR,aAAK,aAAa,wBAAwB,EAAE;AAC5C,yBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AACA,QAAM,eAAe,MAAY;AAC/B,QAAI,CAAC,WAAW;AACd,kBAAY;AACZ,cAAQ,aAAa,gBAAgB,EAAE;AAAA,IACzC;AAAA,EACF;AACA,QAAM,cAAc,MAAY;AAC9B,QAAI,WAAW;AACb,kBAAY;AACZ,cAAQ,gBAAgB,cAAc;AAAA,IACxC;AAAA,EACF;AACA,UAAQ,iBAAiB,WAAW,CAAC,MAAM;AACzC,QACE,EAAE,QAAQ,eACV,EAAE,QAAQ,aACV,EAAE,QAAQ,UACV,EAAE,QAAQ,OACV;AACA,mBAAa;AACb,4BAAsB,MAAM;AAC1B,wBAAgB,OAAO,IAAI,EAAE,oBAAoB,IAAI;AAAA,MACvD,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACD,UAAQ,iBAAiB,eAAe,WAAW;AAEnD,QAAM,aAAa,GAAG,OAAO;AAAA,IAC3B,OAAO;AAAA,IACP,OAAO,EAAE,+BAA+B,GAAG;AAAA,EAC7C,CAAC;AAED,QAAM,WAAW,GAAG,OAAO,EAAE,OAAO,gCAAgC,CAAC;AAErE,QAAM,UAAU,GAAG,OAAO;AAAA,IACxB,OAAO;AAAA,IACP,OAAO,EAAE,2BAA2B,GAAG;AAAA,EACzC,CAAC;AAED,WAAS,OAAO,OAAO;AACvB,aAAW,OAAO,QAAQ;AAC1B,UAAQ,OAAO,UAAU;AACzB,OAAK,OAAO,OAAO;AAEnB,QAAMC,cAAa,iBAAiB;AAAA,IAClC,IAAI,GAAG,QAAQ,EAAE;AAAA,IACjB;AAAA,EACF,CAAC;AACD,QAAM,gBAAgB,wBAAwB;AAC9C,QAAM,mBAAmB,MAAY;AACnC,UAAM,MAAMA,YAAW,IAAI;AAC3B,kBAAc;AAAA,MACZ;AAAA,MACA,IAAI,aAAa;AAAA,IACnB;AACA,kBAAc;AAAA,MACZ;AAAA,MACA,IAAI,iBAAiB;AAAA,IACvB;AAAA,EACF;AACA,mBAAiB;AACjB,QAAM,cAAcA,YAAW,OAAO,UAAU,gBAAgB;AAEhE,QAAM,eAAe,wBAAwB;AAC7C,QAAM,cAAc,wBAAwB;AAC5C,QAAM,eAAe,wBAAwB;AAC7C,MAAI,qBAA8B,MAAM;AAAA,EAAC;AAEzC,QAAM,YAAY,oBAAI,IAAyB;AAC/C,QAAM,eAAe,oBAAI,IAAsB;AAC/C,QAAM,aAAa,oBAAI,IAAyB;AAChD,MAAI,SAA6B;AACjC,MAAI,oBAAoB;AACxB,MAAI,gBAA+B;AAEnC,QAAM,WAAW,MAAe,KAAK,aAAa,QAAQ;AAE1D,QAAM,gBAAgB,CAAC,UACrB,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAM;AAEvC,QAAM,mBAAmB,MAAY;AACnC,uBAAmB;AACnB,yBAAqB,MAAM;AAAA,IAAC;AAAA,EAC9B;AAEA,QAAM,mBAAmB,MAAY;AACnC,uBAAmB;AACnB,UAAM,MAAM,OAAO,IAAI;AACvB,UAAM,aAAa,IAAI,cAAc;AAGrC,WAAO,WAAW;AAClB,yBAAqB,YAAY,IAAI,aAAa,UAAU;AAAA,EAC9D;AAEA,QAAM,qBAAqB,IAAI,iBAAiB,MAAM;AACpD,QAAI,SAAS,GAAG;AAGd,uBAAiB;AAAA,IACnB,OAAO;AACL,uBAAiB;AAAA,IACnB;AAAA,EACF,CAAC;AACD,qBAAmB,QAAQ,MAAM;AAAA,IAC/B,YAAY;AAAA,IACZ,iBAAiB,CAAC,QAAQ;AAAA,EAC5B,CAAC;AAED,WAAS,cAAc,QAAqB,MAAsB;AAChE,UAAM,UAAU,mBAAmB,IAAI;AACvC,YAAQ,QAAQ;AAAA,MACd;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,UAAU,KAAK;AAAA,IACjB,CAAC;AAAA,EACH;AAEA,WAAS,mBAAmB,MAA6B;AACvD,QAAI,KAAK,WAAY,QAAO,mBAAmB,KAAK,WAAW,OAAO,IAAI;AAC1E,QAAI,KAAK,QAAS,QAAO,eAAe,KAAK,QAAQ,CAAC;AACtD,UAAM,eAAW,eAAAC,eAAoB,qBAAM;AAC3C,aAAS,aAAa,eAAe,MAAM;AAC3C,aAAS,aAAa,SAAS,QAAQ;AACvC,WAAO,eAAe,QAAQ;AAAA,EAChC;AAEA,WAAS,aAAmB;AAC1B,gBAAY,WAAW;AACvB,iBAAa,WAAW;AACxB,cAAU,MAAM;AAChB,iBAAa,MAAM;AACnB,eAAW,MAAM;AACjB,aAAS;AACT,YAAQ,gBAAgB;AAExB,UAAM,UAAU;AAChB,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ;AAAA,QACN,gBAAgB;AAAA,UACd,OAAO;AAAA,UACP,OAAO,EAAE,yBAAyB,GAAG;AAAA,UACrC,MAAM,QAAQ,cAAc;AAAA,QAC9B,CAAC;AAAA,MACH;AACA;AAAA,IACF;AAEA,UAAM,UAAU,oBAAI,IAAwB;AAC5C,eAAW,QAAQ,SAAS;AAC1B,YAAM,MAAM,KAAK,SAAS;AAC1B,YAAM,SAAS,QAAQ,IAAI,GAAG,KAAK,CAAC;AACpC,aAAO,KAAK,IAAI;AAChB,cAAQ,IAAI,KAAK,MAAM;AAAA,IACzB;AAEA,UAAM,OAAO,GAAG,MAAM;AAAA,MACpB,OAAO;AAAA,MACP,OAAO,EAAE,0BAA0B,GAAG;AAAA,IACxC,CAAC;AACD,aAAS;AAET,eAAW,CAAC,OAAO,KAAK,KAAK,SAAS;AACpC,YAAM,UAAU,GAAG,MAAM;AAAA,QACvB,OAAO;AAAA,QACP,OAAO;AAAA,UACL,yBAAyB;AAAA,UACzB,8BAA8B;AAAA,QAChC;AAAA,MACF,CAAC;AACD,YAAM,eAAe,QACjB,GAAG,MAAM,EAAE,OAAO,wBAAwB,MAAM,MAAM,CAAC,IACvD;AACJ,YAAM,YAAY,GAAG,MAAM,EAAE,OAAO,gBAAgB,CAAC;AACrD,iBAAW,IAAI,SAAS,aAAa,SAAS;AAC9C,iBAAW,QAAQ,OAAO;AACxB,cAAM,SAAS,KAAK,UAChB,iBAAiB,KAAK,SAAS,IAAI,QAAQ,IAC3C;AACJ,cAAM,SAAS,GAAG,MAAM;AAAA,UACtB,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA,UAAU;AAAA,UACZ;AAAA,UACA,OAAO;AAAA,YACL,wBAAwB,OAAO,IAAI;AAAA,YACnC,GAAI,SAAS,EAAE,OAAO,mBAAmB,IAAI,CAAC;AAAA,UAChD;AAAA,QACF,CAAC;AACD,kBAAU,IAAI,KAAK,OAAO,MAAM;AAChC,qBAAa,IAAI,KAAK,OAAO,IAAI;AACjC,sBAAc,QAAQ,IAAI;AAC1B,kBAAU,OAAO,MAAM;AAAA,MACzB;AACA,UAAI,aAAc,SAAQ,OAAO,YAAY;AAC7C,cAAQ,OAAO,SAAS;AACxB,WAAK,OAAO,OAAO;AAAA,IACrB;AAEA,YAAQ,OAAO,IAAI;AAAA,EACrB;AAEA,WAAS,aAAmB;AAC1B,UAAM,MAAM,OAAO,IAAI;AACvB,iBAAa,MAAM,SAAS,IAAI,aAAa,CAA4B;AACzE,QAAI,CAAC,SAAS,EAAG,kBAAiB;AAClC,iBAAa;AAAA,MACX;AAAA,MACA,IAAI,gBAAgB;AAAA,IACtB;AACA,QAAI,QAAQ;AACV,mBAAa,MAAM,QAAQ,IAAI,aAAa,CAA4B;AACxE,iBAAW,CAAC,IAAI,SAAS,KAAK,YAAY;AACxC,qBAAa;AAAA,UACX;AAAA,UACA,IAAI,kBAAkB,EAAE,GAAG,CAAC;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AACA,eAAW,CAAC,OAAO,MAAM,KAAK,WAAW;AACvC,YAAM,OAAO,aAAa,IAAI,KAAK;AACnC,UAAI,CAAC,KAAM;AACX,kBAAY;AAAA,QACV;AAAA,QACA,IAAI,aAAa,EAAE,KAAK,CAAC;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAEA,WAAS,uBAA6B;AACpC,UAAM,MAAM,OAAO,IAAI;AACvB,UAAM,OAAO,IAAI,oBAAoB;AACrC,QAAI,SAAS,cAAe;AAC5B,oBAAgB;AAChB,QAAI,CAAC,KAAM;AACX,UAAM,OAAO,UAAU,IAAI,IAAI;AAC/B,UAAM,eAAe,EAAE,OAAO,UAAU,CAAC;AAAA,EAC3C;AAEA,WAAS,OAAa;AACpB,UAAM,UAAU,cAAc,aAAa;AAC3C,QAAI,YAAY,mBAAmB;AACjC,uBAAiB;AACjB,iBAAW;AACX,0BAAoB;AACpB,sBAAgB,OAAO,IAAI,EAAE,oBAAoB,IAAI;AAAA,IACvD;AACA,eAAW;AACX,yBAAqB;AAAA,EACvB;AAEA,QAAM,QAAQ,OAAO,OAAO,UAAU,IAAI;AAE1C,aAAW;AACX,sBAAoB,cAAc,aAAa;AAC/C,aAAW;AACX,MAAI,cAAc,QAAQ,kBAAkB;AAC1C,WAAO,IAAI,EAAE,kBAAkB,QAAQ,gBAAgB;AACvD,UAAM,gBAAgB,UAAU,IAAI,QAAQ,gBAAgB;AAC5D,mBAAe,eAAe,EAAE,OAAO,UAAU,CAAC;AAClD,oBAAgB,QAAQ;AACxB,oBAAgB,QAAQ,gBAAgB;AAAA,EAC1C;AAEA,QAAM,UAAU,gBAAgB;AAAA,IAC9B,OAAO;AAAA,IACP,MAAM,IAAI,UAAU,KAAK;AAAA,IACzB;AAAA,IACA,MAAM,cAAc,WAAW;AAAA,IAC/BD,YAAW;AAAA,IACX,MAAM,mBAAmB,WAAW;AAAA,IACpC;AAAA,IACA;AAAA,IACA,MAAM,QAAQ,oBAAoB,eAAe,WAAW;AAAA,IAC5D,MAAM;AACJ,kBAAY,WAAW;AACvB,mBAAa,WAAW;AACxB,mBAAa,WAAW;AACxB,gBAAU,MAAM;AAChB,mBAAa,MAAM;AACnB,iBAAW,MAAM;AACjB,WAAK,gBAAgB;AAAA,IACvB;AAAA,EACF,CAAC;AAED,QAAM,WAAW,CAAC,UAAwB;AACxC,UAAM,OAAO,IAAI,OAAO,CAAC,SAAS,SAAS,MAAM,KAAK,CAAC;AACvD,UAAM,UAAU,cAAc,IAAI;AAClC,QAAI,YAAY,kBAAmB;AACnC,oBAAgB;AAChB,WAAO,OAAO,OAAO,EAAE,YAAY,eAAe,aAAa,EAAE,CAAC;AAAA,EACpE;AAEA,QAAM,eAAe;AAAA,IACnB,MAAM;AACJ,YAAM,MAAM,OAAO,IAAI;AACvB,YAAM,cAAc,IAAI;AACxB,UAAI,CAAC,YAAa,QAAO;AACzB,YAAM,OAAO,WAAW,IAAI,WAAW;AACvC,UAAI,CAAC,QAAQ,CAAC,QAAQ,SAAU,QAAO;AACvC,aAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS,MAAM,QAAQ,SAAU,IAAI;AAAA,MACvC;AAAA,IACF;AAAA,IACA,UAAU,IAAgB;AACxB,aAAO,OAAO,OAAO,UAAU,EAAE;AAAA,IACnC;AAAA,EACF;AAEA,QAAM,mBAAmB;AAAA,IACvB,MAA8B;AAC5B,YAAM,MAAM,OAAO,IAAI;AACvB,YAAM,cAAc,IAAI;AACxB,UAAI,CAAC,YAAa,QAAO,CAAC;AAC1B,YAAM,OAAO,WAAW,IAAI,WAAW;AACvC,aAAO,MAAM,WAAW,CAAC;AAAA,IAC3B;AAAA,IACA,UAAU,IAAgB;AACxB,aAAO,OAAO,OAAO,UAAU,EAAE;AAAA,IACnC;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,UAAU,cAAc,iBAAiB;AAC7D;;;ACzZO,SAAS,cACd,SACA,KACA,MACgB;AAChB,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK;AACH,aAAO,kBAAkB,SAAS,KAAK,IAAI;AAAA,IAC7C,KAAK;AACH,aAAO,oBAAoB,SAAS,KAAK,IAAI;AAAA,IAC/C,KAAK;AACH,aAAO,kBAAkB,SAAS,KAAK,IAAI;AAAA,IAC7C,KAAK;AACH,aAAO,oBAAoB,SAAS,KAAK,IAAI;AAAA,EACjD;AACF;;;AC1BA,IAAM,oBAAoB;AAC1B,IAAM,aAAa;AA0BZ,SAAS,WACd,OACA,MACA,MACqB;AACrB,QAAM,aAAa,SAAS,cAAc,KAAK;AAC/C,aAAW,aAAa,+BAA+B,EAAE;AACzD,aAAW,YAAY;AAEvB,QAAM,OAAO,SAAS,cAAc,KAAK;AACzC,OAAK,aAAa,wBAAwB,EAAE;AAC5C,OAAK,aAAa,sBAAsB,KAAK,EAAE;AAC/C,OAAK,YAAY;AACjB,aAAW,YAAY,IAAI;AAC3B,OAAK,UAAU,YAAY,UAAU;AAErC,QAAM,MAAM,KAAK,cAAc;AAC/B,QAAME,cAAa,iBAAiB;AAAA,IAClC,IAAI,qBAAqB,KAAK,EAAE,IAAI,GAAG;AAAA,IACvC,aAAa,MAAM;AACjB,YAAM,KAAK,WAAW,YAAY;AAClC,UAAI,cAAc,cAAc,cAAc,SAAU,QAAO;AAC/D,aAAO,WAAW,iBAAiB;AAAA,IACrC;AAAA,EACF,CAAC;AAED,QAAM,gBAAgB,wBAAwB;AAC9C,QAAM,mBAAmB,MAAY;AACnC,UAAM,MAAMA,YAAW,IAAI;AAC3B,kBAAc;AAAA,MACZ;AAAA,MACA,IAAI,aAAa;AAAA,IACnB;AAGA,eAAW,MAAM,WAAW;AAC5B,kBAAc,MAAM,MAAM,IAAI,iBAAiB,CAA4B;AAAA,EAC7E;AACA,mBAAiB;AACjB,QAAM,cAAcA,YAAW,OAAO,UAAU,gBAAgB;AAChE,QAAM,gBAAyB,MAAM;AACnC,gBAAY;AACZ,kBAAc,WAAW;AAAA,EAC3B;AAEA,QAAM,MAAmB;AAAA,IACvB,KAAK,MAAM;AAAA,IACX,UAAU,KAAK;AAAA,IACf,OAAO,KAAK;AAAA,IACZ,UAAU,KAAK;AAAA,IACf,OAAO;AAAA,MACL,MAAM,MAAM,KAAK,MAAM,KAAK;AAAA,MAC5B,SAAS,MAAM,KAAK,MAAM,QAAQ;AAAA,MAClC,WAAW,MAAM,KAAK,MAAM,UAAU;AAAA,IACxC;AAAA,IACA,MAAM,CAAC,WAAW;AAChB,UAAI,CAAC,KAAK,MAAM,IAAI,OAAO,EAAE,EAAG;AAChC,WAAK,QAAQ,SAAS,EAAE,QAAQ,UAAU;AAAA,QACxC,IAAI,OAAO;AAAA,QACX,KAAK,OAAO,OAAO;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,IACA,KAAK,MAAM,KAAK,QAAQ,SAAS,EAAE,QAAQ,SAAS;AAAA,IACpD,OAAO,MAAM,KAAK,QAAQ,SAAS,EAAE,QAAQ,WAAW;AAAA,IACxD,UAAU,CAAC,MAAiB,KAAK,MAAM,SAAS,CAAC;AAAA,IACjD,gBAAgB,CAAC,MAAiB,KAAK,MAAM,eAAe,CAAC;AAAA,IAC7D,YAAY,CAAC,MAAiB,KAAK,MAAM,WAAW,CAAC;AAAA,IACrD,cAAc,CAAC,MACb,KAAK,QAAQ,SAAS,EAAE,QAAQ,aAAa,CAAC;AAAA,IAChD,aAAa,KAAK;AAAA,IAClB,WAAW,KAAK;AAAA,IAChB,UAAU,MAAM,KAAK,QAAQ,SAAS,EAAE;AAAA,EAC1C;AAEA,MAAI;AACJ,MAAI;AACF,UAAM,UAAU,KAAK,QAAQ,GAAG;AAChC,oBAAgB,cAAc,SAAS,KAAK,IAAI;AAAA,EAClD,SAAS,KAAK;AACZ,YAAQ,MAAM,iBAAiB,KAAK,EAAE,qBAAqB,GAAG;AAC9D,kBAAc;AACd,IAAAA,YAAW,QAAQ;AACnB,eAAW,OAAO;AAClB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,IAAI,KAAK;AAAA,IACT,KAAK,MAAM;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,EACX;AACF;AAEO,SAAS,oBAAoB,OAA2B;AAC7D,MAAI;AACF,UAAM,QAAQ,QAAQ;AAAA,EACxB,SAAS,KAAK;AACZ,YAAQ,MAAM,8BAA8B,GAAG;AAAA,EACjD;AACA,QAAM,cAAc;AACpB,QAAM,WAAW,QAAQ;AACzB,QAAM,WAAW,OAAO;AAC1B;AAEO,SAAS,mBACd,OACA,SACM;AACN,MAAI,SAAS;AACX,UAAM,KAAK,gBAAgB,QAAQ;AACnC,UAAM,KAAK,gBAAgB,OAAO;AAClC,UAAM,KAAK,gBAAgB,aAAa;AAAA,EAC1C,OAAO;AACL,UAAM,KAAK,aAAa,UAAU,EAAE;AACpC,UAAM,KAAK,aAAa,SAAS,EAAE;AACnC,UAAM,KAAK,aAAa,eAAe,MAAM;AAAA,EAC/C;AACF;;;ACxKA,IAAAC,iBAAwE;;;ACAxE,WAAsB;AAQf,SAAS,WAAW,QAA4B,CAAC,GAAe;AACrE,SAAO,oBAAyB,cAAc,cAAS,gBAAgB,KAAK;AAC9E;;;ACFO,IAAM,mBACX;AAEK,IAAM,kBAAkB;;;ACa/B,IAAM,gBACJ;AAYF,SAAS,cAAc,SAA8C;AACnE,SAAO,QAAQ,IAAI,CAAC,YAAY;AAAA,IAC9B,IAAI,OAAO;AAAA,IACX,OAAO,OAAO;AAAA,IACd,UAAU,OAAO;AAAA,IACjB,SAAS,OAAO,OAAO,KAAK;AAAA,IAC5B,UAAU,OAAO,WAAW,UAAU,EAAE,MAAM,OAAO,SAAS,CAAC,IAAI;AAAA,IACnE,UAAU,MAAM,KAAK,OAAO,QAAQ;AAAA,EACtC,EAAE;AACJ;AAEA,SAAS,SAAS,OAA8C;AAC9D,SAAO,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,IAAM;AAC3C;AAEO,SAAS,mBAAmB,MAGZ;AACrB,MAAI,QAA8B,CAAC;AACnC,QAAM,UAAU,wBAAwB;AACxC,MAAI,UAAU;AACd,MAAI,aAAa,oBAAI,IAAyB;AAC9C,QAAM,WAAsB,CAAC;AAE7B,QAAM,UAAU,SAAS,cAAc,QAAQ;AAC/C,UAAQ,aAAa,QAAQ,QAAQ;AACrC,UAAQ,aAAa,8BAA8B,EAAE;AACrD,UAAQ,YAAY;AACpB,QAAM,cAAc,SAAS,cAAc,MAAM;AACjD,cAAY,cAAc;AAC1B,QAAM,aAAa,UAAU;AAAA,IAC3B,MAAM,oBAAoB,MAAM,YAAY,gBAAgB;AAAA,EAC9D,CAAC;AACD,UAAQ,OAAO,aAAa,UAAU;AAEtC,QAAM,aAAa,GAAG,OAAO;AAAA,IAC3B,OAAO,EAAE,aAAa,kBAAkB;AAAA,EAC1C,CAAC;AAED,QAAM,QAAQ,GAAG,OAAO;AAAA,IACtB,OAAO,GAAG,gBAAgB;AAAA,IAC1B,OAAO,EAAE,wBAAwB,QAAQ,aAAa,aAAa;AAAA,EACrE,CAAC;AAED,QAAM,OAAO,GAAG,MAAM;AAAA,IACpB,OAAO,GAAG,eAAe;AAAA,IACzB,OAAO;AAAA,MACL,MAAM;AAAA,MACN,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF,CAAC;AAED,QAAM,OAAO,IAAI;AACjB,aAAW,OAAO,KAAK;AAEvB,QAAM,SAAS,WAAkB;AAAA,IAC/B,aAAa,MAAM;AACjB,YAAM,KAAK,WAAW,YAAY;AAClC,UAAI,cAAc,cAAc,cAAc,SAAU,QAAO;AAC/D,aAAO,WAAW,iBAAiB;AAAA,IACrC;AAAA,IACA,eAAe;AAAA,IACf,aAAa;AAAA,MACX,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,IACA,cAAc,CAAC,EAAE,KAAK,MAAyB,MAAM,eAAe,IAAI;AAAA,IACxE,UAAU,CAAC,YAA+B;AACxC,YAAM,SAAS,MAAM,KAAK,CAAC,OAAO,GAAG,OAAO,QAAQ,KAAK;AACzD,cAAQ,WAAW;AAAA,IACrB;AAAA,EACF,CAAC;AAED,WAAS,QAAQ,KAAmB;AAClC,YAAQ,WAAW;AACnB,SAAK,gBAAgB;AACrB,iBAAa,oBAAI,IAAI;AACrB,eAAW,QAAQ,OAAO;AACxB,YAAM,MAAM,GAAG,MAAM;AAAA,QACnB,OAAO,GAAG,iBAAiB,qBAAqB;AAAA,QAChD,OAAO;AAAA,UACL,aAAa;AAAA,UACb,wBAAwB,KAAK;AAAA,QAC/B;AAAA,MACF,CAAC;AACD,YAAM,UAAU,KAAK,UAAU,eAAe,KAAK,OAAO,IAAI;AAC9D,cAAQ,KAAK;AAAA,QACX;AAAA,QACA,OAAO,KAAK;AAAA,QACZ,UAAU,KAAK,YAAY,KAAK,YAAY;AAAA,MAC9C,CAAC;AACD,iBAAW,IAAI,KAAK,IAAI,GAAG;AAC3B,WAAK,OAAO,GAAG;AAAA,IACjB;AACA,cAAU;AAAA,EACZ;AAEA,WAAS,aAAmB;AAC1B,UAAM,MAAe,OAAO,IAAI;AAChC,YAAQ,MAAM,SAAS,IAAI,gBAAgB,CAA4B;AACvE,YAAQ;AAAA,MACN;AAAA,MACA,IAAI,mBAAmB;AAAA,IACzB;AACA,YAAQ,MAAM,OAAO,IAAI,gBAAgB,CAA4B;AACrE,eAAW,QAAQ,OAAO;AACxB,YAAM,MAAM,WAAW,IAAI,KAAK,EAAE;AAClC,UAAI,CAAC,IAAK;AACV,cAAQ;AAAA,QACN;AAAA,QACA,IAAI,aAAa;AAAA,UACf,OAAO,KAAK;AAAA,UACZ,WAAW,KAAK;AAAA,UAChB,UAAU,KAAK,YAAY;AAAA,QAC7B,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,WAAS,OAAa;AACpB,UAAM,MAAM,SAAS,KAAK;AAC1B,QAAI,QAAQ,QAAS,SAAQ,GAAG;AAChC,eAAW;AAAA,EACb;AAEA,UAAQ,SAAS,KAAK,CAAC;AACvB,aAAW;AAEX,QAAM,QAAQ,OAAO,OAAO,UAAU,IAAI;AAC1C,WAAS,KAAK,KAAK;AAEnB,SAAO;AAAA,IACL;AAAA,IACA,SAAS;AAAA,IACT,WAAW,SAAS;AAClB,cAAQ,cAAc,OAAO;AAC7B,YAAM,MAAM,SAAS,KAAK;AAC1B,UAAI,QAAQ,QAAS;AACrB,cAAQ,GAAG;AACX,iBAAW;AAAA,IACb;AAAA,IACA,MAAM,MAAM,OAAO,IAAI,EAAE,QAAQ,IAAI;AAAA,IACrC,OAAO,MAAM,OAAO,IAAI,EAAE,QAAQ,KAAK;AAAA,IACvC,QAAQ,MAAM,OAAO,IAAI,EAAE;AAAA,IAC3B,SAAS,MAAM;AACb,sBAAgB,QAAQ,EAAE;AAC1B,cAAQ,WAAW;AACnB,aAAO,QAAQ;AACf,iBAAW,OAAO;AAAA,IACpB;AAAA,EACF;AACF;;;AHxLA,IAAM,iBAAiB;AAEvB,IAAM,iBACJ;AAEF,IAAM,cACJ;AAEF,IAAM,eAAe;AAErB,IAAM,uBACJ;AAEF,IAAM,oBACJ;AAEF,IAAM,kBAAkB;AAExB,IAAM,yBACJ;AAEF,IAAM,oBAAoB;AAE1B,IAAM,aACJ;AAEF,IAAM,kBAAkB;AAExB,IAAM,qBACJ;AAEF,IAAM,qBACJ;AAEF,IAAM,uBACJ;AAEF,IAAM,eACJ;AAEF,IAAM,oBAAoB;AAE1B,IAAM,aACJ;AAEF,IAAM,wBACJ;AAwBK,SAAS,iBACd,WACA,WACA,MACY;AACZ,QAAM,WAAW,SAAS,cAAc,KAAK;AAC7C,WAAS,aAAa,4BAA4B,EAAE;AACpD,WAAS,YAAY;AACrB,WAAS,MAAM,SAAS,OAAO,QAAQ;AAEvC,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,aAAa,+BAA+B,EAAE;AACpD,QAAM,YAAY;AAElB,QAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,SAAO,aAAa,gCAAgC,EAAE;AACtD,SAAO,YAAY;AAEnB,QAAM,UAAU,SAAS,cAAc,QAAQ;AAC/C,UAAQ,aAAa,QAAQ,QAAQ;AACrC,UAAQ,aAAa,8BAA8B,EAAE;AACrD,UAAQ,aAAa,cAAc,MAAM;AACzC,UAAQ,YAAY;AACpB,QAAM,eAAW,eAAAC,eAAoB,wBAAS;AAC9C,WAAS,aAAa,eAAe,MAAM;AAC3C,WAAS,aAAa,SAAS,eAAe;AAC9C,UAAQ,OAAO,QAAQ;AACvB,UAAQ,SAAS;AACjB,QAAM,cAAc,MAAM,UAAU,OAAO;AAC3C,UAAQ,iBAAiB,SAAS,WAAW;AAE7C,QAAM,OAAO,gBAAgB;AAC7B,OAAK,aAAa,qCAAqC,EAAE;AACzD,QAAM,aAAa,iBAAiB;AAEpC,QAAM,cAAc,SAAS,cAAc,OAAO;AAClD,cAAY,aAAa,QAAQ,MAAM;AACvC,cAAY,aAAa,2BAA2B,EAAE;AACtD,cAAY,aAAa,eAAe,uBAAuB;AAC/D,cAAY,YAAY;AACxB,QAAM,gBAAgB,MAAM,UAAU,cAAc,YAAY,KAAK;AACrE,cAAY,iBAAiB,SAAS,aAAa;AAEnD,QAAM,cAAc,SAAS,cAAc,KAAK;AAChD,cAAY,aAAa,+BAA+B,EAAE;AAC1D,cAAY,YAAY;AACxB,cAAY,SAAS;AAErB,QAAM,aAAa,SAAS,cAAc,KAAK;AAC/C,aAAW,aAAa,gCAAgC,EAAE;AAC1D,aAAW,YAAY;AACvB,aAAW,OAAO,SAAS,YAAY,aAAa,WAAW;AAC/D,SAAO,OAAO,UAAU;AAExB,QAAM,gBAAgB,SAAS,cAAc,KAAK;AAClD,gBAAc,aAAa,+BAA+B,EAAE;AAC5D,gBAAc,YAAY;AAE1B,QAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,SAAO,aAAa,gCAAgC,EAAE;AACtD,SAAO,YAAY;AAEnB,QAAM,aAAa,SAAS,cAAc,KAAK;AAC/C,aAAW,aAAa,qCAAqC,EAAE;AAC/D,aAAW,YAAY;AAEvB,QAAM,cAAc,SAAS,cAAc,KAAK;AAChD,cAAY,aAAa,sCAAsC,EAAE;AACjE,cAAY,YAAY;AAExB,SAAO,OAAO,YAAY,WAAW;AAErC,QAAM,eAAe,mBAAmB;AAAA,IACtC,cAAc,CAAC,SAAS;AACtB,oBAAc,MAAM,gBAAgB,OAAO,SAAS;AACpD,UAAI,CAAC;AACH,8BAAsB,MAAM,YAAY,MAAM,EAAE,eAAe,KAAK,CAAC,CAAC;AAAA,IAC1E;AAAA,EACF,CAAC;AAED,QAAM,OAAO,QAAQ,eAAe,QAAQ,aAAa,OAAO;AAEhE,QAAM,WAAW,SAAS,cAAc,KAAK;AAC7C,WAAS,aAAa,4BAA4B,EAAE;AACpD,WAAS,YAAY;AACrB,WAAS,MAAM,SAAS,OAAO,QAAQ;AACvC,WAAS,OAAO,KAAK;AACrB,QAAM,kBAAkB,CAAC,MAAkB;AACzC,QAAI,EAAE,WAAW,SAAU,WAAU,gBAAgB;AAAA,EACvD;AACA,WAAS,iBAAiB,SAAS,eAAe;AAElD,YAAU,OAAO,UAAU,QAAQ;AAEnC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AACR,cAAQ,oBAAoB,SAAS,WAAW;AAChD,eAAS,oBAAoB,SAAS,eAAe;AACrD,kBAAY,oBAAoB,SAAS,aAAa;AACtD,mBAAa,QAAQ;AACrB,eAAS,OAAO;AAChB,eAAS,OAAO;AAAA,IAClB;AAAA,EACF;AACF;AAEA,SAAS,mBAAgC;AACvC,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,OAAK,aAAa,qCAAqC,EAAE;AACzD,OAAK,aAAa,eAAe,MAAM;AACvC,OAAK,YAAY;AACjB,QAAM,WAAO,eAAAA,eAAoB,qBAAM;AACvC,OAAK,aAAa,eAAe,MAAM;AACvC,OAAK,aAAa,SAAS,iBAAiB;AAC5C,OAAK,OAAO,IAAI;AAChB,SAAO;AACT;AAEA,SAAS,kBAA+B;AACtC,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,OAAK,aAAa,8BAA8B,EAAE;AAClD,OAAK,aAAa,eAAe,MAAM;AACvC,OAAK,YAAY;AACjB,QAAM,MAAM,SAAS,gBAAgB,8BAA8B,KAAK;AACxE,MAAI,aAAa,WAAW,WAAW;AACvC,MAAI,aAAa,QAAQ,cAAc;AACvC,MAAI,aAAa,eAAe,MAAM;AACtC,MAAI,aAAa,SAAS,eAAe;AACzC,QAAM,OAAO,SAAS,gBAAgB,8BAA8B,MAAM;AAC1E,OAAK,aAAa,KAAK,GAAG;AAC1B,OAAK,aAAa,KAAK,GAAG;AAC1B,OAAK,aAAa,SAAS,IAAI;AAC/B,OAAK,aAAa,UAAU,IAAI;AAChC,OAAK,aAAa,MAAM,GAAG;AAC3B,OAAK,aAAa,QAAQ,cAAc;AACxC,OAAK,aAAa,WAAW,MAAM;AACnC,OAAK,aAAa,aAAa,oBAAoB;AACnD,QAAM,QAAQ,SAAS,gBAAgB,8BAA8B,MAAM;AAC3E,QAAM,aAAa,KAAK,GAAG;AAC3B,QAAM,aAAa,KAAK,GAAG;AAC3B,QAAM,aAAa,SAAS,IAAI;AAChC,QAAM,aAAa,UAAU,IAAI;AACjC,QAAM,aAAa,MAAM,GAAG;AAC5B,QAAM,aAAa,QAAQ,cAAc;AACzC,MAAI,OAAO,MAAM,KAAK;AACtB,OAAK,OAAO,GAAG;AACf,SAAO;AACT;AAEO,SAAS,WAAW,KAAa,OAA4B;AAClE,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,OAAK,YAAY;AACjB,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,OAAK,cAAc;AACnB,QAAM,MAAM,UAAU,EAAE,MAAM,IAAI,CAAC;AACnC,OAAK,OAAO,MAAM,GAAG;AACrB,SAAO;AACT;AAEO,SAAS,sBAAmC;AACjD,QAAM,MAAM,SAAS,cAAc,MAAM;AACzC,MAAI,aAAa,eAAe,MAAM;AACtC,MAAI,YAAY;AAChB,SAAO;AACT;AAOO,SAAS,uBACd,KACA,OACA,SACkB;AAClB,QAAM,MAAM,SAAS,cAAc,QAAQ;AAC3C,MAAI,aAAa,QAAQ,QAAQ;AACjC,MAAI,aAAa,cAAc,KAAK;AACpC,MAAI,YAAY;AAChB,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,OAAK,cAAc;AACnB,QAAM,MAAM,UAAU,EAAE,MAAM,IAAI,CAAC;AACnC,MAAI,OAAO,MAAM,GAAG;AACpB,MAAI,iBAAiB,SAAS,OAAO;AACrC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,SAAS,MAAc;AACrB,WAAK,cAAc;AACnB,UAAI,aAAa,cAAc,IAAI;AAAA,IACrC;AAAA,EACF;AACF;;;AI1PA,IAAM,iBAAiB;AAyBvB,SAAS,uBAAuB,OAAyC;AACvE,QAAM,KAAK,MAAM,KAAK;AACtB,MAAI,CAAC,GAAI,QAAO;AAChB,MAAI;AACF,UAAM,SAAS,GAAG,MAAM,MAAM,MAAM,GAAG;AACvC,QAAI,UAAU,MAAM,KAAK,SAAS,MAAM,EAAG,QAAO;AAAA,EACpD,SAAS,KAAK;AACZ,YAAQ,MAAM,iBAAiB,MAAM,KAAK,EAAE,yBAAyB,GAAG;AAAA,EAC1E;AACA,SAAO;AACT;AAEA,SAAS,oBACP,OACA,aACM;AACN,QAAM,YAAY,uBAAuB,KAAK;AAC9C,QAAM,SACJ,aAAa,cAAc,cAAc,YAAY;AACvD,QAAM,QAAQ,MAAM;AAClB,QAAI;AACF,aAAO,MAAM,EAAE,eAAe,KAAK,CAAC;AAAA,IACtC,QAAQ;AAAA,IAER;AAAA,EACF;AACA,QAAM;AACN,MAAI,OAAO,0BAA0B,YAAY;AAC/C,0BAAsB,KAAK;AAAA,EAC7B;AACF;AAEA,SAASC,SAAQ,GAAwB,GAAiC;AACxE,MAAI,MAAM,EAAG,QAAO;AACpB,MAAI,MAAM,QAAQ,MAAM,KAAM,QAAO;AACrC,SAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;AACzC;AAEA,SAAS,aAAa,MAAY,KAA+B;AAC/D,QAAM,IAAI,KAAK;AACf,MAAI,CAAC,EAAG,QAAO,CAAC;AAChB,MAAI,OAAO,MAAM,YAAY;AAC3B,QAAI;AACF,aAAO,EAAE,GAAG,KAAK,CAAC;AAAA,IACpB,SAAS,KAAK;AACZ,cAAQ,MAAM,iBAAiB,KAAK,EAAE,mBAAmB,GAAG;AAC5D,aAAO,CAAC;AAAA,IACV;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,aAAa,MAAY,KAA0B;AAC1D,QAAM,IAAI,KAAK;AACf,MAAI,CAAC,EAAG,QAAO;AACf,MAAI,OAAO,MAAM,YAAY;AAC3B,QAAI;AACF,aAAO,EAAE,GAAG,KAAK;AAAA,IACnB,SAAS,KAAK;AACZ,cAAQ,MAAM,iBAAiB,KAAK,EAAE,mBAAmB,GAAG;AAC5D,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,eACP,MACA,KACA,eACe;AACf,QAAM,SAAwB,CAAC;AAC/B,QAAM,KAAK,KAAK;AAChB,MAAI,IAAI;AACN,QAAI;AACF,YAAMC,eAAc,GAAG,GAAG,KAAK,CAAC;AAChC,aAAO,KAAK,GAAGA,YAAW;AAAA,IAC5B,SAAS,KAAK;AACZ,cAAQ,MAAM,iBAAiB,KAAK,EAAE,qBAAqB,GAAG;AAAA,IAChE;AAAA,EACF;AACA,MAAI,eAAe;AACjB,QAAI;AACF,YAAM,UAAU,cAAc,GAAG,KAAK,CAAC;AACvC,aAAO,KAAK,GAAG,OAAO;AAAA,IACxB,SAAS,KAAK;AACZ,cAAQ,MAAM,iCAAiC,GAAG;AAAA,IACpD;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,gBAAgB,SAAsC;AACpE,QAAM,EAAE,WAAW,OAAO,SAAS,UAAU,WAAW,UAAAC,UAAS,IAAI;AACrE,QAAMC,SAAQ,QAAQ,SAAS;AAC/B,QAAM,MAAM,QAAQ,OAAO,UAAU;AAErC,QAAM,UAA0B,CAAC;AAEjC,MAAI,QAA2B;AAC/B,MAAI,iBAAiB;AACrB,MAAI,YAA8C;AAClD,MAAI,uBAAsC;AAC1C,MAAI,gBAAgB;AACpB,MAAI,gBAAqC;AACzC,MAAI,sBAA2C;AAE/C,WAAS,cAA0B;AACjC,QAAI,MAAO,QAAO;AAClB,YAAQ;AAAA,MACN;AAAA,MACA;AAAA,QACE,QAAQ,MAAM;AACZ,gBAAM,EAAE,SAAS,MAAM,IAAI,QAAQ,SAAS;AAC5C,cAAI,MAAM,UAAU,GAAG;AACrB,oBAAQ,WAAW;AACnB,oBAAQ,UAAU,EAAE,IAAI,mBAAmB,KAAK,KAAK,CAAC;AAAA,UACxD,OAAO;AACL,oBAAQ,SAAS;AAAA,UACnB;AAAA,QACF;AAAA,QACA,iBAAiB,MAAM,QAAQ,SAAS,EAAE,QAAQ,WAAW;AAAA,QAC7D,eAAe,CAAC,UAAU;AACxB,gBAAM,MAAM,QAAQ,QAAQ,SAAS,CAAC;AACtC,cAAI,CAAC,IAAK;AACV,cAAI,IAAI,QAAQ,UAAU;AACxB,gBAAI,QAAQ,SAAS,KAAK;AAC1B;AAAA,UACF;AACA,cAAI,IAAI,KAAK,OAAO,kBAAmB;AACvC,iCAAuB;AACvB,kBACG,SAAS,EACT,QAAQ,UAAU,EAAE,IAAI,mBAAmB,KAAK,KAAK,CAAC;AAAA,QAC3D;AAAA,MACF;AAAA,MACA,EAAE,UAAU,QAAQ,SAAS;AAAA,IAC/B;AACA,WAAO;AAAA,EACT;AAEA,WAAS,eAAqB;AAC5B,oBAAgB;AAChB,oBAAgB;AAChB,0BAAsB;AACtB,0BAAsB;AACtB,WAAO,QAAQ;AACf,YAAQ;AACR,2BAAuB;AAAA,EACzB;AAEA,WAAS,gBAAsB;AAC7B,UAAM,MAAM,QAAQ,QAAQ,SAAS,CAAC;AACtC,QAAI,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,IAAI,KAAK;AAC7C,gBAAU,KAAK;AACf;AAAA,IACF;AACA,cAAU,KAAK,IAAI,IAAI,KAAK;AAAA,MAC1B,OAAO,WAAW,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,IACtC,CAAC;AAAA,EACH;AAEA,WAAS,eAAqB;AAC5B,QAAI,CAAC,MAAO;AACZ,UAAM,MAAM,QAAQ,QAAQ,SAAS,CAAC;AACtC,QAAI,CAAC,IAAK;AAEV,UAAM,SAAS,QAAQ,UAAU,KAAK,IAAI,KAAK,OAAO;AACtD,UAAM,QAAQ,SAAS;AACvB,UAAM,WAAW,SAAS,CAAC;AAE3B,UAAM,aAAa,IAAI,KAAK,eAAe;AAC3C,UAAM,YAAY,SAAS,CAAC;AAC5B,UAAM,YAAY,aAAa,KAAK,aAAa,IAAI,MAAM,IAAI,GAAG;AAClE,UAAM,YAAY,cAAc;AAChC,UAAM,YAAY,SAAS,cAAc,CAAC;AAE1C,UAAM,WAAW,gBAAgB;AACjC,UAAM,YAAY,IAAI,IAAI,MACtB,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,EAAE,IACrD;AACJ,QAAI,WAAW;AACb,YAAM,WAAW;AAAA,QACf,eAAe;AAAA,UACb,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AACL,YAAM,WAAW,OAAO,MAAM,IAAI;AAAA,IACpC;AAEA,oBAAgB;AAChB,oBAAgB;AAChB,0BAAsB;AACtB,0BAAsB;AAEtB,UAAM,YAAY,gBAAgB;AAClC,UAAM,cAA6B,CAAC;AAEpC,UAAM,YAAY,aAAa,IAAI,MAAM,IAAI,GAAG,EAAE;AAAA,MAAK,CAAC,MACtD,EAAE,IAAI,SAAS,QAAG;AAAA,IACpB;AACA,UAAM,MAAM,IAAI,QAAQ;AACxB,QAAI,KAAK;AACP,YAAM,MAAM,WAAW,OAAO;AAC9B,YAAM,SAAS,IAAI,IAAI;AACvB,YAAM,gBAAgB,WAAW,SAAS;AAC1C,YAAM,OAAO;AAAA,QACX;AAAA,QACA,QAAQ,SAAS;AAAA,QACjB,MAAM,IAAI,IAAI,GAAG,QAAQ;AAAA,MAC3B;AACA,kBAAY,KAAK,KAAK,OAAO;AAC7B,sBAAgB,IAAI,UAAU,MAAM;AAClC,cAAM,OAAO,IAAI,IAAI;AACrB,aAAK,SAAS,MAAM,SAAS,aAAa;AAAA,MAC5C,CAAC;AAAA,IACH,WAAW,WAAW;AACpB,kBAAY,KAAK,WAAW,UAAU,KAAK,UAAU,KAAK,CAAC;AAAA,IAC7D;AAEA,UAAM,iBAAiB,oBAAoB;AAC3C,UAAMF,eAAc,eAAe,IAAI,MAAM,IAAI,GAAG;AACpD,UAAM,QAAQ,IAAI,QAAQ;AAE1B,UAAM,cAAc,MAAY;AAC9B,YAAM,YAAY,OAAO,IAAI,KAAK,CAAC;AACnC,YAAM,WAAW,CAAC,GAAG,WAAW,GAAGA,YAAW;AAC9C,YAAO,aAAa,WAAW,QAAQ;AACvC,YAAM,UAAU,SAAS,SAAS;AAClC,YAAO,aAAa,QAAQ,SAAS,CAAC;AACtC,qBAAe,SAAS,CAAC,WAAW,YAAY,WAAW;AAAA,IAC7D;AAEA,QAAI,OAAO;AACT,4BAAsB,MAAM,UAAU,WAAW;AAAA,IACnD;AAEA,aAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,UAAI,IAAI,EAAG,OAAM,YAAY,OAAO,oBAAoB,CAAC;AACzD,YAAM,YAAY,OAAO,YAAY,CAAC,CAAC;AAAA,IACzC;AACA,UAAM,YAAY,OAAO,cAAc;AACvC,UAAM,YAAY,OAAO,MAAM,aAAa,OAAO;AACnD,gBAAY;AAAA,EACd;AAEA,WAAS,SAAe;AACtB,UAAM,QAAQ,QAAQ,SAAS,EAAE;AACjC,QAAI,UAAU,UAAW;AACzB,gBAAY;AAEZ,QAAI,OAAO,MAAM,SAAS,kBAAkB,MAAM,SAAS,gBAAgB;AACzE,cAAQ;AAAA,QACN,4BAA4B,MAAM,MAAM,wBAAwB,cAAc;AAAA,MAChF;AACA,uBAAiB,MAAM;AAAA,IACzB;AACA,QAAI,MAAM,UAAU,eAAgB,kBAAiB;AAErD,UAAM,WAAyD,CAAC;AAChE,eAAW,SAAS,OAAO;AACzB,YAAM,OAAO,MAAM,IAAI,MAAM,EAAE;AAC/B,UAAI,KAAM,UAAS,KAAK,EAAE,OAAO,KAAK,CAAC;AAAA,IACzC;AAEA,UAAM,WAAW,QAAQ,QAAQ,SAAS,CAAC,KAAK;AAEhD,QAAI,eAAe;AACnB,WACE,eAAe,SAAS,UACxB,eAAe,QAAQ,UACvB,QAAQ,YAAY,EAAE,OAAO,SAAS,YAAY,EAAE,KAAK,MACzDD,SAAQ,QAAQ,YAAY,EAAE,KAAK,SAAS,YAAY,EAAE,MAAM,GAAG,GACnE;AACA;AAAA,IACF;AAEA,UAAM,SAAS,QAAQ,OAAO,YAAY;AAC1C,aAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,0BAAoB,OAAO,CAAC,CAAC;AAAA,IAC/B;AAEA,QAAI,SAAS,SAAS,cAAc;AAClC,YAAM,SAAS,YAAY;AAC3B,eAAS,IAAI,cAAc,IAAI,SAAS,QAAQ,KAAK;AACnD,cAAM,SAAS,WAAW,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC,EAAE,MAAM;AAAA,UAC7D,WAAW,OAAO;AAAA,UAClB,aAAa,OAAO;AAAA,UACpB;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAAG;AAAA,UACA,UAAAD;AAAA,UACA;AAAA,UACA,eAAe,MAAM,EAAE;AAAA,QACzB,CAAC;AACD,YAAI,OAAQ,SAAQ,KAAK,MAAM;AAAA,MACjC;AAAA,IACF;AAEA,QAAI,OAAO,aAAa,OAAO,KAAK,OAAO,SAAS,GAAG;AACrD,YAAM,aAAa,MAAM;AAAA,IAC3B;AAEA,QAAI,QAAQ,WAAW,GAAG;AACxB,mBAAa;AACb,gBAAU,KAAK;AACf;AAAA,IACF;AACA,UAAM,WAAW,QAAQ,SAAS;AAClC,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,yBAAmB,QAAQ,CAAC,GAAG,MAAM,QAAQ;AAAA,IAC/C;AACA,iBAAa;AACb,kBAAc;AAEd,UAAM,SAAS,QAAQ,QAAQ;AAC/B,QAAI,WAAW,YAAY,OAAO;AAChC,YAAM,gBAAgB;AACtB,6BAAuB;AACvB,YAAM,eAAe,iBAAiB;AACtC,UAAI,kBAAkB,MAAM;AAC1B,cAAM,YAAY,QAAQ;AAAA,MAC5B;AACA,UAAI;AACF,eAAO,QAAQ,WAAW,YAAY;AAAA,MACxC,SAAS,KAAK;AACZ,gBAAQ,MAAM,iBAAiB,OAAO,KAAK,EAAE,oBAAoB,GAAG;AAAA,MACtE;AACA,0BAAoB,QAAQ,MAAM,WAAW;AAAA,IAC/C;AAAA,EACF;AAEA,SAAO;AACP,QAAM,cAAc,QAAQ,UAAU,MAAM;AAE5C,SAAO;AAAA,IACL,kBAAkB;AAChB,aAAO,OAAO,gBAAgB;AAAA,IAChC;AAAA,IACA,UAAU;AACR,kBAAY;AACZ,aAAO,QAAQ,SAAS,GAAG;AACzB,cAAM,QAAQ,QAAQ,IAAI;AAC1B,4BAAoB,KAAK;AAAA,MAC3B;AACA,mBAAa;AACb,gBAAU,KAAK;AAAA,IACjB;AAAA,EACF;AACF;;;ACvZO,IAAM,oBAAoB;AAAA,EAC/B,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,aAAa;AAAA,EACb,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,UAAU;AAAA,EACV,cAAc;AAAA,EACd,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,aAAa;AAAA,EACb,SAAS;AACX;;;ACdA,IAAAE,kBAUO;;;ACRA,SAAS,eAAe,KAA0C;AACvE,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,SACJ,IAAI,SAAS,SACT,IAAI,WAAW,SACb,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,KAC1B,IAAI,IAAI,IAAI,KACd;AACN,SAAO,GAAG,IAAI,IAAI,GAAG,MAAM;AAC7B;;;ACJA,IAAM,wBAAwB,mBAAmB;AAAA,EAC/C,CAAC,CAAC,IAAI,MAAM,IAAI,IAAI;AACtB,EAAE,KAAK,GAAG;AAEV,SAAS,oBAAoB,SAAyB;AACpD,MAAI,YAAY,IAAK,QAAO;AAC5B,QAAM,QAAQ,QAAQ,MAAM,GAAG,EAAE,OAAO,OAAO;AAC/C,QAAM,aAAa,MAAM,IAAI,CAAC,QAAQ;AACpC,QAAI,oBAAoB,KAAK,GAAG,EAAG,QAAO;AAC1C,QAAI,eAAe,KAAK,GAAG,EAAG,QAAO;AACrC,WAAO,IAAI,QAAQ,uBAAuB,MAAM;AAAA,EAClD,CAAC;AACD,SAAO,IAAI,OAAO,KAAK,WAAW,KAAK,GAAG,CAAC,KAAK;AAClD;AAGO,SAAS,kBAAkB,KAAiC;AACjE,MAAI,OAAO,aAAa,YAAa,QAAO;AAC5C,QAAM,WAAW,SAAS,YAAY;AACtC,QAAM,SAAS,IAAI,SAAS,KAAK,OAAO;AACxC,MAAI,OAA8C;AAClD,aAAW,SAAS,QAAQ;AAC1B,QAAI,CAAC,oBAAoB,MAAM,IAAI,EAAE,KAAK,QAAQ,EAAG;AACrD,QAAI,CAAC,QAAQ,MAAM,KAAK,SAAS,KAAK,KAAK,QAAQ;AACjD,aAAO,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK;AAAA,IAC9C;AAAA,EACF;AACA,SAAO,MAAM,QAAQ;AACvB;AAGO,SAAS,kBACd,KAC6B;AAC7B,QAAM,MAAM,oBAAI,IAAoB;AACpC,aAAW,SAAS,IAAI,SAAS,KAAK,OAAO,GAAG;AAC9C,QAAI,CAAC,IAAI,IAAI,MAAM,IAAI,EAAG,KAAI,IAAI,MAAM,MAAM,MAAM,IAAI;AAAA,EAC1D;AACA,SAAO;AACT;AAuBO,SAAS,mBAAmB,KAA+B;AAChE,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,WAA4B,CAAC;AACnC,QAAM,MAAuB,CAAC;AAE9B,QAAM,SAAS,kBAAkB,GAAG;AACpC,QAAM,aAAa,SAAU,IAAI,SAAS,IAAI,QAAQ,MAAM,KAAK,OAAQ;AAEzE,MAAI,YAAY;AACd,SAAK,IAAI,QAAQ,WAAW,EAAE,EAAE;AAChC,eAAW,OAAO,WAAW,MAAM,YAAY,CAAC,GAAG;AACjD,UAAI,IAAI,SAAS,aAAa,IAAI,SAAS,SAAU;AACrD,YAAM,SAAS,IAAI,SAAS,IAAI,IAAI,MAAM,IAAI,EAAE;AAChD,UAAI,CAAC,OAAQ;AACb,YAAM,MAAM,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AACjC,UAAI,KAAK,IAAI,GAAG,EAAG;AACnB,WAAK,IAAI,GAAG;AACZ,eAAS,KAAK,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC/B;AAAA,EACF;AAEA,MAAI,OAAO,aAAa,aAAa;AACnC,UAAM,QAAQ,SAAS,iBAA8B,qBAAqB;AAC1E,eAAW,QAAQ,OAAO;AACxB,UAAI,KAAK,QAAQ,uBAAuB,EAAG;AAC3C,iBAAW,CAAC,MAAM,IAAI,KAAK,oBAAoB;AAC7C,cAAM,KAAK,KAAK,aAAa,IAAI;AACjC,YAAI,CAAC,GAAI;AACT,cAAM,SAAS,IAAI,SAAS,IAAI,MAAM,EAAE;AACxC,YAAI,CAAC,OAAQ;AACb,cAAM,MAAM,GAAG,IAAI,IAAI,EAAE;AACzB,YAAI,KAAK,IAAI,GAAG,EAAG;AACnB,aAAK,IAAI,GAAG;AACZ,YAAI,KAAK,EAAE,QAAQ,KAAK,EAAE,MAAM,GAAG,GAAG,KAAK,CAAC;AAC5C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,YAAY,UAAU,IAAI;AAC7C;;;AFpEA,SAAS,WAAW,UAAmC;AACrD,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM,UAAM,gBAAAC,eAAoB,4BAAY;AAAA,IAC5C,SAAS;AAAA,EACX;AACF;AAEA,SAAS,eAAe,KAAgB,KAA+B;AACrE,QAAM,QAAQ,IAAI,WAAW,GAAG;AAChC,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO,QAAQ,0BAA0B;AAAA,IACzC,UAAU;AAAA,IACV,MAAM,UAAM,gBAAAA,eAAoB,QAAQ,0BAAU,oBAAI;AAAA,IACtD,SAAS,MAAM;AACb,UAAI,eAAe,GAAG;AACtB,UAAI,MAAM;AACV,UAAI,KAAK,EAAE,IAAI,kBAAkB,gBAAgB,KAAK,KAAK,CAAC;AAAA,IAC9D;AAAA,EACF;AACF;AAEA,SAAS,cACP,KACA,QACA,KACA,UACe;AACf,QAAM,UAAyB,CAAC,WAAW,QAAQ,CAAC;AACpD,MAAI,UAAU,SAAS,UAAU,OAAO,KAAK;AAC3C,UAAM,OAAO,eAAe,OAAO,GAAG;AACtC,QAAI,MAAM;AACR,cAAQ,KAAK;AAAA,QACX,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,MAAM,UAAM,gBAAAA,eAAoB,oBAAI;AAAA,QACpC,SAAS,MAAM,KAAK,UAAU,UAAU,UAAU,IAAI;AAAA,MACxD,CAAC;AAAA,IACH;AAAA,EACF;AACA,UAAQ,KAAK;AAAA,IACX,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM,UAAM,gBAAAA,eAAoB,oCAAoB;AAAA,IACpD,SAAS,MAAM,IAAI,KAAK,EAAE,IAAI,kBAAkB,UAAU,IAAI,CAAC;AAAA,EACjE,CAAC;AACD,MACG,IAAI,OAA+B,aAAa,gBAAgB,GAAG,SACpE;AACA,YAAQ,KAAK;AAAA,MACX,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,MAAM,UAAM,gBAAAA,eAAoB,0BAAU;AAAA,MAC1C,SAAS,MAAM,IAAI,KAAK,EAAE,IAAI,kBAAkB,cAAc,IAAI,CAAC;AAAA,IACrE,CAAC;AAAA,EACH;AACA,UAAQ,KAAK,eAAe,KAAK,GAAG,CAAC;AACrC,SAAO;AACT;AAEA,SAAS,YAAY,UAAqC;AACxD,SAAO,CAAC,WAAW,QAAQ,CAAC;AAC9B;AAEA,IAAM,qBAAqB,eAAe;AAE1C,SAAS,eACP,MACA,YACA,KACa;AACb,QAAM,MAAiB,EAAE,MAAM,QAAQ,IAAI,KAAK,GAAG;AACnD,QAAM,WAAW,MAAM,IAAI,SAAS,GAAG;AACvC,QAAM,OAAoB;AAAA,IACxB,OAAO,UAAU,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,IACnC,OAAO,YAAY,IAAI;AAAA,IACvB,OAAO;AAAA,IACP,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,IAC1B,SAAS;AAAA,IACT,YAAY,EAAE,QAAQ,KAAK;AAAA,IAC3B,SAAS,cAAc,KAAK,MAAM,KAAK,QAAQ;AAAA,IAC/C,SAAS,EAAE,MAAM,UAAU,IAAI;AAAA,EACjC;AACA,QAAM,OAAO,WAAW,IAAI,KAAK,EAAE;AACnC,MAAI,KAAM,MAAK,WAAW;AAC1B,SAAO;AACT;AAEA,SAAS,eAAe,aAAqB,KAA+B;AAC1E,QAAM,WAAW,MACf,IAAI,KAAK,EAAE,IAAI,kBAAkB,aAAa,KAAK,KAAK,CAAC;AAC3D,SAAO;AAAA,IACL,OAAO,QAAQ,kBAAkB,WAAW;AAAA,IAC5C,OAAO;AAAA,IACP,UAAU,gBAAgB,IAAI,WAAW,GAAG,WAAW;AAAA,IACvD,OAAO;AAAA,IACP,KAAK,kBAAkB;AAAA,IACvB,SAAS,UAAM,gBAAAA,eAAoB,uBAAO;AAAA,IAC1C,SAAS,YAAY,QAAQ;AAAA,IAC7B,SAAS,EAAE,MAAM,QAAQ,IAAI,kBAAkB,YAAY;AAAA,EAC7D;AACF;AAEA,SAAS,SAAS,OAAe,KAA+B;AAC9D,QAAM,WAAW,MAAM,IAAI,KAAK,EAAE,IAAI,kBAAkB,OAAO,KAAK,KAAK,CAAC;AAC1E,SAAO;AAAA,IACL,OAAO,QAAQ,kBAAkB,KAAK;AAAA,IACtC,OAAO;AAAA,IACP,UAAU,OAAO,KAAK;AAAA,IACtB,OAAO,eAAe;AAAA,IACtB,KAAK,kBAAkB;AAAA,IACvB,SAAS,UAAM,gBAAAA,eAAoB,wBAAQ;AAAA,IAC3C,SAAS,YAAY,QAAQ;AAAA,IAC7B,SAAS,EAAE,MAAM,QAAQ,IAAI,kBAAkB,MAAM;AAAA,EACvD;AACF;AAEA,IAAM,oBAA4D;AAAA,EAChE,EAAE,MAAM,QAAQ,QAAQ,kBAAkB,MAAM;AAAA,EAChD,EAAE,MAAM,WAAW,QAAQ,kBAAkB,SAAS;AAAA,EACtD,EAAE,MAAM,UAAU,QAAQ,kBAAkB,QAAQ;AAAA,EACpD,EAAE,MAAM,UAAU,QAAQ,kBAAkB,QAAQ;AAAA,EACpD,EAAE,MAAM,WAAW,QAAQ,kBAAkB,SAAS;AAAA,EACtD,EAAE,MAAM,aAAa,QAAQ,kBAAkB,WAAW;AAC5D;AAEA,SAAS,cACP,MACA,QACA,OACA,KACa;AACb,QAAM,QAAQ,WAAW,IAAI;AAC7B,QAAM,WAAW,MAAM,IAAI,KAAK,EAAE,IAAI,QAAQ,KAAK,KAAK,CAAC;AACzD,QAAM,QAAQ,MAAM,QAAQ;AAC5B,SAAO;AAAA,IACL,OAAO,QAAQ,MAAM;AAAA,IACrB;AAAA,IACA,UAAU,OAAO,KAAK;AAAA,IACtB,OAAO,eAAe;AAAA,IACtB,KAAK;AAAA,IACL,SAAS,UAAM,gBAAAA,eAAoB,MAAM,IAAI;AAAA,IAC7C,SAAS,YAAY,QAAQ;AAAA,IAC7B,SAAS,EAAE,MAAM,QAAQ,IAAI,OAAO;AAAA,EACtC;AACF;AAEA,SAAS,kBAAkB,KAAiC;AAC1D,QAAM,MAAqB,CAAC;AAC5B,aAAW,QAAQ,IAAI,MAAM,KAAK,GAAG;AACnC,QAAI,KAAK,OAAO,kBAAkB,eAAgB;AAClD,QAAI,KAAK,OAAO,kBAAkB,YAAa;AAC/C,QAAI,KAAK,OAAO,kBAAkB,MAAO;AACzC,QAAI,KAAK,OAAO,kBAAkB,SAAU;AAC5C,QAAI,KAAK,OAAO,kBAAkB,QAAS;AAC3C,QAAI,KAAK,OAAO,kBAAkB,QAAS;AAC3C,QAAI,KAAK,OAAO,kBAAkB,MAAO;AACzC,QAAI,KAAK,OAAO,kBAAkB,SAAU;AAC5C,QAAI,KAAK,OAAO,kBAAkB,WAAY;AAC9C,QAAI,CAAC,KAAK,QAAS;AACnB,UAAM,WAAW,MAAM,IAAI,KAAK,EAAE,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC;AAC1D,QAAI,KAAK;AAAA,MACP,OAAO,QAAQ,KAAK,EAAE;AAAA,MACtB,OAAO,KAAK,QAAQ;AAAA,MACpB,OAAO,KAAK,QAAQ,SAAS,eAAe;AAAA,MAC5C,UAAU,KAAK,QAAQ;AAAA,MACvB,KAAK,KAAK;AAAA,MACV,SAAS,KAAK,QAAQ;AAAA,MACtB,SAAS,YAAY,QAAQ;AAAA,MAC7B,SAAS,EAAE,MAAM,QAAQ,IAAI,KAAK,GAAG;AAAA,IACvC,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEO,SAAS,yBAAyB,UAAkC;AACzE,QAAM,gBAAgB,oBAAoB,YAAY,EAAE,KAAK,IAAI,CAAC;AAClE,SAAO;AAAA,IACL,IAAI,kBAAkB;AAAA,IACtB,SAAS,EAAE,OAAO,mBAAmB,UAAU,cAAc;AAAA,IAC7D,OAAO;AAAA,IACP,OAAO,CAAC,EAAE,KAAK,UAAK,OAAO,SAAS,CAAC;AAAA,IACrC,aAAa,MAAM;AAAA,IACnB,SAAS,CAAC,QAAqB;AAC7B,YAAM,UAAU,mBAAmB,GAAG;AACtC,YAAM,aAAa,kBAAkB,GAAG;AAExC,YAAM,QAAuB,CAAC;AAC9B,YAAM,SAAS,IAAI;AAAA,QACjB,IAAI,MAAM,UAAU,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE;AAAA,MACtD;AAEA,iBAAW,OAAO,IAAI,MAAM,UAAU,GAAG;AACvC,YAAI,IAAI,SAAS,QAAS;AAC1B,cAAM,SAAS,IAAI,SAAS,IAAI,IAAI,MAAM,IAAI,EAAE;AAChD,YAAI,CAAC,OAAQ;AACb,cAAM,QAAQ,WAAW,IAAI,IAAI;AACjC,cAAM,WAAW,MAAM,IAAI,SAAS,GAAG;AACvC,cAAM,KAAK;AAAA,UACT,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACrC,OAAO,YAAY,MAAM;AAAA,UACzB,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UAC1B,OAAO,eAAe;AAAA,UACtB,SAAS;AAAA,UACT,YAAY,EAAE,OAAO;AAAA,UACrB,SAAS,UAAM,gBAAAA,eAAoB,MAAM,IAAI;AAAA,UAC7C,SAAS,cAAc,KAAK,QAAQ,KAAK,QAAQ;AAAA,UACjD,SAAS,EAAE,MAAM,UAAU,IAAI;AAAA,QACjC,CAAC;AAAA,MACH;AAEA,UAAI,QAAQ,YAAY;AACtB,cAAM,KAAK,eAAe,QAAQ,YAAY,YAAY,GAAG,CAAC;AAAA,MAChE;AAEA,YAAM,cAAc,QAAQ,SAAS,SAAS,QAAQ,IAAI;AAC1D,UAAI,cAAc,EAAG,OAAM,KAAK,eAAe,aAAa,GAAG,CAAC;AAEhE,YAAM,KAAK,GAAG,kBAAkB,GAAG,CAAC;AACpC,iBAAW,EAAE,MAAM,OAAO,KAAK,mBAAmB;AAChD,cAAM,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE;AACtC,YAAI,QAAQ,EAAG,OAAM,KAAK,cAAc,MAAM,QAAQ,OAAO,GAAG,CAAC;AAAA,MACnE;AACA,YAAM,YAAY,IAAI,SAAS,KAAK,MAAM,EAAE;AAC5C,UAAI,YAAY,EAAG,OAAM,KAAK,SAAS,WAAW,GAAG,CAAC;AAEtD,YAAM,oBAAoB,MACxB,IAAI,KAAK,EAAE,IAAI,kBAAkB,aAAa,KAAK,KAAK,CAAC;AAC3D,YAAM,KAAK;AAAA,QACT,OAAO,QAAQ,kBAAkB,WAAW;AAAA,QAC5C,OAAO;AAAA,QACP,OAAO,eAAe;AAAA,QACtB,KAAK,kBAAkB;AAAA,QACvB,SAAS,UAAM,gBAAAA,eAAoB,oCAAoB;AAAA,QACvD,SAAS,YAAY,iBAAiB;AAAA,QACtC,SAAS,EAAE,MAAM,QAAQ,IAAI,kBAAkB,YAAY;AAAA,MAC7D,CAAC;AAED,iBAAW,OAAO,IAAI,MAAM,QAAQ,GAAG;AACrC,YAAI,IAAI,SAAS,QAAS;AAC1B,YAAI,OAAO,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,EAAG;AACzC,cAAM,SAAS,IAAI,SAAS,IAAI,IAAI,MAAM,IAAI,EAAE;AAChD,YAAI,CAAC,OAAQ;AACb,cAAM,QAAQ,WAAW,IAAI,IAAI;AACjC,cAAM,WAAW,MAAM,IAAI,SAAS,GAAG;AACvC,cAAM,KAAK;AAAA,UACT,OAAO,UAAU,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UACnC,OAAO,YAAY,MAAM;AAAA,UACzB,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,UAC1B,OAAO,eAAe;AAAA,UACtB,SAAS;AAAA,UACT,YAAY,EAAE,OAAO;AAAA,UACrB,SAAS,UAAM,gBAAAA,eAAoB,MAAM,IAAI;AAAA,UAC7C,SAAS,cAAc,KAAK,QAAQ,KAAK,QAAQ;AAAA,UACjD,SAAS,EAAE,MAAM,UAAU,IAAI;AAAA,QACjC,CAAC;AAAA,MACH;AAEA,YAAM,mBAAmB,IAAI,MACzB,UAAU,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,KACpC;AAEJ,YAAM,SAAS,CAAC,MAAgB,UAA2B;AACzD,cAAM,UAAU;AAChB,cAAM,QACJ,QAAQ,QAAQ,SAAS,WAAW,QAAQ,QAAQ,IAAI,KAAK;AAC/D,eAAO,aAAa,GAAG,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,SAAS,EAAE,IAAI,KAAK;AAAA,MACzE;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,IAAI;AAAA,QACJ;AAAA,QACA,kBAAkB;AAAA,QAClB;AAAA,QACA,UAAU,CAAC,SAAS;AAClB,gBAAM,UAAU;AAChB,cAAI,QAAQ,QAAQ,SAAS,QAAQ;AACnC,gBAAI,KAAK;AAAA,cACP,IAAI,QAAQ,QAAQ;AAAA,cACpB,KAAK,QAAQ,QAAQ,OAAO;AAAA,YAC9B,CAAC;AACD;AAAA,UACF;AACA,cAAI,SAAS,QAAQ,QAAQ,GAAG;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AG5UA,+BAAyB;AAWzB,SAAS,uBAAuBC,KAAyB;AACvD,MAAI,OAA2BA;AAC/B,SAAO,MAAM;AACX,UAAM,KAAK,iBAAiB,IAAI,EAAE;AAClC,QAAI,MAAM,OAAO,iBAAiB,OAAO,mBAAoB,QAAO;AACpE,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;AAEA,SAAS,cAAc,MAAqB;AAC1C,MAAI,KAAK,aAAa,KAAK,aAAc,QAAO;AAChD,QAAMA,MAAK;AACX,MAAIA,IAAG,eAAe,KAAM,QAAO;AACnC,QAAM,MAAMA,IAAG;AACf,SACE,IAAI,SAAS,kBAAkB,KAAK,IAAI,SAAS,uBAAuB;AAE5E;AAEA,eAAsB,kBACpB,UAAoC,CAAC,GACpB;AACjB,MAAI,OAAO,aAAa,aAAa;AACnC,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AACA,QAAM,SAAS,QAAQ,UAAU,SAAS;AAC1C,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,8BAA8B;AAE3D,QAAM,QAAQ,OAAO,eAAe,OAAO;AAC3C,QAAM,QACJ,QAAQ,YAAY,QAAQ,QAAQ,WAAW,QAAQ,WAAW,QAAQ;AAE5E,QAAM,UAAU;AAChB,QAAM,SAAS,OAAO,gBAAgB,OAAO;AAE7C,aAAO,mCAAS,QAAQ;AAAA,IACtB;AAAA,IACA,OAAO,QAAQ,UAAU;AAAA,IACzB,QAAQ,SAAS,UAAU;AAAA,IAC3B,iBAAiB,uBAAuB,MAAM;AAAA,IAC9C,OAAO,EAAE,SAAS,GAAG,OAAO,KAAK;AAAA,IACjC,QAAQ,CAAC,SAAS,CAAC,cAAc,IAAI;AAAA,EACvC,CAAC;AACH;;;AC7CO,SAAS,iCAA0D;AACxE,QAAM,MAAM,OAAO,cAAc,cAAc,YAAY;AAC3D,QAAM,MAAM,OAAO,aAAa,cAAc,WAAW;AACzD,QAAM,MAAM,OAAO,WAAW,cAAc,SAAS;AACrD,QAAM,MAAM,OAAO,aAAa,cAAc,WAAW;AACzD,QAAM,WAAW;AAAA,IACf,OAAO,KAAK,cAAc;AAAA,IAC1B,QAAQ,KAAK,eAAe;AAAA,EAC9B;AACA,QAAM,aAAa;AAAA,IACjB,OAAO,OAAO,WAAW,cAAc,OAAO,QAAQ;AAAA,IACtD,QAAQ,OAAO,WAAW,cAAc,OAAO,SAAS;AAAA,EAC1D;AACA,SAAO;AAAA,IACL,KAAK,KAAK,QAAQ;AAAA,IAClB,MAAM,KAAK,YAAY;AAAA,IACvB,WAAW,KAAK,aAAa;AAAA,IAC7B,WAAW,KAAK;AAAA,IAChB,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAClC;AAAA,IACA,QAAQ;AAAA,EACV;AACF;;;AC7BO,SAAS,YACd,KACA,MACmB;AACnB,MAAI,CAAC,KAAM,QAAO,CAAC;AACnB,QAAM,MAAgB,CAAC;AACvB,aAAW,OAAO,MAAM;AACtB,UAAM,SAAS,IAAI,SAAS,IAAI,IAAI,MAAM,IAAI,EAAE;AAChD,QAAI,OAAQ,KAAI,KAAK,MAAM;AAAA,EAC7B;AACA,SAAO;AACT;AAEO,SAAS,aACd,KACA,SACiB;AACjB,MAAI,CAAC,QAAS,QAAO,CAAC;AACtB,QAAM,MAAc,CAAC;AACrB,aAAW,MAAM,SAAS;AACxB,UAAM,OAAO,IAAI,SAAS,IAAI,QAAQ,EAAE;AACxC,QAAI,KAAM,KAAI,KAAK,IAAI;AAAA,EACzB;AACA,SAAO;AACT;AAEO,SAAS,qBACd,KACA,UACiB;AACjB,QAAM,MAAc,CAAC;AACrB,aAAW,QAAQ,IAAI,SAAS,KAAK,MAAM,GAAG;AAC5C,QAAI,KAAK,QAAQ,SAAS,QAAQ,EAAG,KAAI,KAAK,IAAI;AAAA,EACpD;AACA,SAAO;AACT;;;ACXA,SAAS,mBACP,KACA,KACmB;AACnB,QAAM,OAAO,qBAAqB,GAAG;AACrC,MAAI,CAAC,KAAM,QAAO,CAAC;AACnB,QAAM,WAAqB,CAAC;AAC5B,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,CAAC,MAAM,IAAI,KAAK,oBAAoB;AAC7C,eAAW,QAAQ,KAAK,iBAAiB,IAAI,IAAI,GAAG,GAAG;AACrD,UAAI,SAAS,KAAM;AACnB,YAAM,KAAK,KAAK,aAAa,IAAI;AACjC,UAAI,CAAC,GAAI;AACT,YAAM,MAAM,GAAG,IAAI,IAAI,EAAE;AACzB,UAAI,KAAK,IAAI,GAAG,EAAG;AACnB,WAAK,IAAI,GAAG;AACZ,YAAM,SAAS,IAAI,SAAS,IAAI,MAAM,EAAE;AACxC,UAAI,OAAQ,UAAS,KAAK,MAAM;AAAA,IAClC;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAMC,oBAA4C,oBAAI,IAAI;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,eAAqC,CAAC,EAAE,KAAK,UAAK,OAAO,OAAO,CAAC;AAEhE,SAAS,eAAe,KAAgB,KAA8B;AAC3E,QAAM,aAAa,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AACxC,QAAM,OAAO,eAAe,GAAG,KAAK;AACpC,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,WAAW,aAAa,IAAI;AAAA,IAC5B,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ,EAAE,MAAM,YAAY,UAAU,YAAY;AAAA,EACpD;AACF;AAEO,SAAS,eAAe,KAA8B;AAC3D,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM,EAAE,IAAI,kBAAkB,UAAU,IAAI;AAAA,IAC5C,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,QAAQ,kBAAkB;AAAA,MAC1B,SAAS,IAAI;AAAA,IACf;AAAA,EACF;AACF;AAEO,SAAS,WAAW,KAA8B;AACvD,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM,EAAE,IAAI,kBAAkB,cAAc,IAAI;AAAA,IAChD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,QAAQ,kBAAkB;AAAA,MAC1B,SAAS,IAAI;AAAA,IACf;AAAA,EACF;AACF;AAEO,SAAS,sBAAsB,KAAgB,KAAwB;AAC5E,QAAM,WAAW,+BAA+B;AAChD,QAAM,aAAa,eAAe,GAAG;AACrC,QAAM,QAAkB;AAAA,IACtB,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;AAAA,IAC3B,eAAe,IAAI,IAAI;AAAA,IACvB,eAAe,IAAI,EAAE;AAAA,IACrB,GAAI,aAAa,CAAC,mBAAmB,UAAU,IAAI,IAAI,CAAC;AAAA,IACxD;AAAA,IACA,cAAc,SAAS,GAAG;AAAA,IAC1B,eAAe,SAAS,IAAI;AAAA,IAC5B,GAAI,SAAS,YAAY,CAAC,qBAAqB,SAAS,SAAS,EAAE,IAAI,CAAC;AAAA,IACxE,mBAAmB,SAAS,SAAS,KAAK,OAAI,SAAS,SAAS,MAAM;AAAA,IACtE,iBAAiB,SAAS,OAAO,KAAK,OAAI,SAAS,OAAO,MAAM;AAAA,IAChE,qBAAqB,SAAS,SAAS;AAAA,IACvC,oBAAoB,SAAS,SAAS;AAAA,EACxC;AACA,SAAO,MAAM,KAAK,IAAI,IAAI;AAC5B;AAEO,SAAS,mBACd,KACA,KACc;AACd,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM,sBAAsB,KAAK,GAAG;AAAA,IACpC,QAAQ,EAAE,MAAM,YAAY,UAAU,YAAY;AAAA,EACpD;AACF;AAEO,SAAS,uBAAuB,KAA8B;AACnE,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,WAAW;AAAA,IACX,QAAQ,EAAE,MAAM,YAAY,UAAU,YAAY;AAAA,EACpD;AACF;AAEO,SAAS,qBAAqB,KAA8B;AACjE,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ,EAAE,MAAM,YAAY,UAAU,YAAY;AAAA,IAClD,KAAK,OAAO,QAAQ;AAClB,UAAI;AACF,YAAI,SAAS,iBAAY;AACzB,cAAM,SAAS,qBAAqB,GAAG,KAAK;AAC5C,cAAM,UAAU,MAAM,kBAAkB;AAAA,UACtC;AAAA,UACA,UAAU;AAAA,QACZ,CAAC;AACD,cAAM,MAAM,MAAM,MAAM,OAAO;AAC/B,cAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,cAAM,UAAU,UAAU,MAAM;AAAA,UAC9B,IAAI,cAAc,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC;AAAA,QACzC,CAAC;AACD,YAAI,SAAS,WAAW,IAAI;AAAA,MAC9B,QAAQ;AACN,YAAI,SAAS,eAAe,IAAI;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF;AAoBO,SAAS,uBACd,QACM;AACN,QAAM,EAAE,MAAM,eAAe,kBAAkB,KAAK,IAAI;AACxD,SAAO;AAAA,IACL,IAAI,OAAO;AAAA,IACX,SAAS,CAAC,QAAQ,IAAI,SAAS;AAAA,IAC/B,OAAO;AAAA,IACP,OAAO,CAAC,QAAQ;AACd,UAAI,CAAC,IAAI,IAAK,QAAO;AACrB,YAAM,SAAS,IAAI,SAAS,IAAI,MAAM,IAAI,IAAI,EAAE;AAChD,aAAO,SAAS,YAAY,MAAM,IAAI,IAAI,IAAI;AAAA,IAChD;AAAA,IACA,aAAa,CAAC,SACZ,KAAK;AAAA,MACH;AAAA,IACF;AAAA,IACF,SAAS,CAAC,QAAuB;AAC/B,UAAI,CAAC,IAAI,OAAO,IAAI,IAAI,SAAS,MAAM;AACrC,eAAO,EAAE,MAAM,UAAU,YAAY,KAAK;AAAA,MAC5C;AACA,YAAM,SAAS,IAAI,SAAS,IAAI,MAAM,IAAI,IAAI,EAAE;AAGhD,UAAI,CAAC,QAAQ;AACX,eAAO,EAAE,MAAM,UAAU,YAAY,MAAM,UAAU,IAAI,IAAI;AAAA,MAC/D;AAEA,YAAM,aAAa;AACnB,YAAM,OAAO,WAAW;AAExB,YAAM,UAA0B;AAAA,QAC9B,eAAe,IAAI,KAAK,WAAW,GAAG;AAAA,QACtC,mBAAmB,IAAI,KAAK,WAAW,GAAG;AAAA,MAC5C;AACA,UAAIA,kBAAiB,IAAI,IAAI,KAAK,qBAAqB,IAAI,GAAG,GAAG;AAC/D,gBAAQ,KAAK,uBAAuB,IAAI,GAAG,CAAC;AAC5C,gBAAQ,KAAK,qBAAqB,IAAI,GAAG,CAAC;AAAA,MAC5C;AACA,cAAQ,KAAK,eAAe,IAAI,GAAG,CAAC;AACpC,YAAMC,SAAQ,IAAI;AAClB,UAAIA,QAAO,aAAa,gBAAgB,GAAG,SAAS;AAClD,gBAAQ,KAAK,WAAW,IAAI,GAAG,CAAC;AAAA,MAClC;AAEA,YAAM,WAA4B,CAAC;AACnC,UAAI,MAAM,aAAa;AACrB,iBAAS,KAAK,EAAE,IAAI,eAAe,MAAM,KAAK,YAAY,CAAC;AAAA,MAC7D;AACA,UAAI,mBAAmB,MAAM,YAAY,QAAQ;AAC/C,iBAAS,KAAK,EAAE,IAAI,cAAc,OAAO,KAAK,WAAW,CAAC;AAAA,MAC5D;AACA,iBAAW,KAAK,OAAO,gBAAgB,KAAK,MAAM,KAAK,CAAC,GAAG;AACzD,iBAAS,KAAK,CAAC;AAAA,MACjB;AACA,eAAS,KAAK;AAAA,QACZ,IAAI;AAAA,QACJ,OAAO,eAAe;AAAA,QACtB,UAAUD,kBAAiB,IAAI,IAAI,IAC/B,mBAAmB,KAAK,IAAI,GAAG,IAC/B,YAAY,KAAK,MAAM,QAAQ;AAAA,QACnC,YAAY;AAAA,MACd,CAAC;AACD,eAAS,KAAK;AAAA,QACZ,IAAI;AAAA,QACJ,OAAO,aAAa,KAAK,MAAM,KAAK;AAAA,QACpC,YAAY;AAAA,MACd,CAAC;AAED,aAAO;AAAA,QACL,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,OAAO,YAAY,UAAU;AAAA,QAC7B,UAAU,OAAO,WAAW,KAAK,MAAM;AAAA,QACvC;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AClQA,SAAS,kBAAkB,KAAkB,KAA0B;AACrE,QAAME,MAAK,qBAAqB,GAAG;AACnC,MAAI,CAACA,IAAI,QAAO,CAAC;AACjB,QAAM,UAAoB,CAAC;AAC3B,QAAM,OAAO,oBAAI,IAAY;AAC7B,MAAI,OAAOA,IAAG;AACd,SAAO,MAAM;AACX,QAAI,gBAAgB,aAAa;AAC/B,iBAAW,CAAC,MAAM,IAAI,KAAK,oBAAoB;AAC7C,cAAM,KAAK,KAAK,aAAa,IAAI;AACjC,YAAI,IAAI;AACN,gBAAM,MAAM,GAAG,IAAI,IAAI,EAAE;AACzB,cAAI,CAAC,KAAK,IAAI,GAAG,GAAG;AAClB,iBAAK,IAAI,GAAG;AACZ,kBAAM,SAAS,IAAI,SAAS,IAAI,MAAM,EAAE;AACxC,gBAAI,OAAQ,SAAQ,KAAK,MAAM;AAAA,UACjC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;AAEA,SAAS,cAAc,KAAkB,KAA+B;AACtE,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO,eAAe;AAAA,IACtB,UAAU,kBAAkB,KAAK,GAAG;AAAA,IACpC,YAAY;AAAA,EACd;AACF;AAEA,SAAS,sBACP,KACA,IACe;AACf,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO,qBAAqB,KAAK,EAAE;AAAA,IACnC,YAAY;AAAA,EACd;AACF;AAEO,IAAM,sBAAsB,uBAAuB;AAAA,EACxD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,eAAe;AAAA,EACf,eAAe,CAAC,KAAK,WAAW;AAAA,IAC9B,cAAc,KAAK,EAAE,MAAM,WAAW,IAAI,OAAO,GAAG,CAAC;AAAA,IACrD,sBAAsB,KAAK,OAAO,EAAE;AAAA,EACtC;AACF,CAAC;AAEM,IAAM,oBAAoB,uBAAuB;AAAA,EACtD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,eAAe;AAAA,EACf,eAAe,CAAC,KAAK,WAAW;AAAA,IAC9B,cAAc,KAAK,EAAE,MAAM,WAAW,IAAI,OAAO,GAAG,CAAC;AAAA,EACvD;AACF,CAAC;AAEM,IAAM,mBAAmB,uBAAuB;AAAA,EACrD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,eAAe,CAAC,KAAK,WAAW;AAAA,IAC9B,cAAc,KAAK,EAAE,MAAM,UAAU,IAAI,OAAO,GAAG,CAAC;AAAA,EACtD;AACF,CAAC;AAEM,IAAM,mBAAmB,uBAAuB;AAAA,EACrD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,eAAe;AAAA,EACf,eAAe,CAAC,KAAK,WAAW;AAAA,IAC9B,cAAc,KAAK,EAAE,MAAM,UAAU,IAAI,OAAO,GAAG,CAAC;AAAA,EACtD;AACF,CAAC;AAEM,IAAM,sBAAsB,uBAAuB;AAAA,EACxD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,eAAe,CAAC,KAAK,WAAW;AAAA,IAC9B,cAAc,KAAK,EAAE,MAAM,aAAa,IAAI,OAAO,GAAG,CAAC;AAAA,EACzD;AACF,CAAC;AAEM,IAAM,iBAAiB,uBAAuB;AAAA,EACnD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,eAAe,CAAC,KAAK,WAA4B;AAC/C,UAAM,QAAQ,IAAI,SACf,KAAK,OAAO,EACZ,OAAO,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,EAClC,IAAI,CAAC,MAAM,EAAE,IAAI;AACpB,WAAO,CAAC,EAAE,IAAI,UAAU,OAAO,YAAY,KAAK,CAAC;AAAA,EACnD;AACF,CAAC;;;ACjGD,SAAS,OAAO,QAA4B;AAC1C,QAAM,MAAiB,EAAE,MAAM,OAAO,MAAM,IAAI,UAAU,MAAM,EAAE;AAClE,SAAO;AAAA,IACL,OAAO,UAAU,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,IACnC,OAAO,YAAY,MAAM;AAAA,IACzB,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,IAC1B,SAAS;AAAA,IACT,YAAY,EAAE,OAAO;AAAA,IACrB;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,MAAkB,QAAsB;AACxE,QAAM,QAAQ,WAAW,IAAI;AAC7B,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,SAAS,EAAE,OAAO,MAAM,QAAQ,IAAI;AAAA,IACpC,OAAO,MAAM,QAAQ;AAAA,IACrB,OAAO,CAAC,EAAE,KAAK,UAAK,OAAO,SAAS,CAAC;AAAA,IACrC,aAAa,MAAM;AAAA,IACnB,SAAS,CAAC,QAAkC;AAC1C,YAAM,WAAW,IAAI,SAAS,KAAK,IAAI;AACvC,YAAM,QAAuB,SAC1B,IAAI,MAAM,EACV,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,cAAc,EAAE,KAAK,CAAC;AAEhD,aAAO;AAAA,QACL,MAAM;AAAA,QACN,IAAI,SAAS,IAAI;AAAA,QACjB;AAAA,QACA,YAAY,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,QAC3C,QAAQ,CAAC,MAAM,UACb;AAAA,UACE,GAAG,KAAK,KAAK,IAAK,KAAoB,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE;AAAA,UAChE;AAAA,QACF;AAAA,QACF,UAAU,CAAC,SAAS,IAAI,SAAU,KAAoB,GAAG;AAAA,MAC3D;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA,kBAAkB;AACpB;AACO,IAAM,cAAc;AAAA,EACzB;AAAA,EACA,kBAAkB;AACpB;AACO,IAAM,cAAc;AAAA,EACzB;AAAA,EACA,kBAAkB;AACpB;AACO,IAAM,YAAY;AAAA,EACvB;AAAA,EACA,kBAAkB;AACpB;AACO,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA,kBAAkB;AACpB;AACO,IAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA,kBAAkB;AACpB;;;AClFA,IAAAC,kBAA8D;AAqB9D,IAAM,aAA0C,IAAI;AAAA,EAClD,aAAa,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,KAAK,CAAC;AACjD;AAEA,IAAM,oBAA6D;AAAA,EACjE,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AAAA,EACX,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AACR;AAEA,SAAS,WAAW,GAAmB;AACrC,SAAO,EAAE,OAAO,CAAC,EAAE,YAAY,IAAI,EAAE,MAAM,CAAC;AAC9C;AAEA,SAASC,QACP,KACA,YACiB;AACjB,QAAM,EAAE,QAAQ,KAAK,KAAK,IAAI;AAC9B,QAAM,OAAwB;AAAA,IAC5B,OAAO,UAAU,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,IACnC,OAAO,YAAY,QAAQ,IAAI;AAAA,IAC/B,OAAO,kBAAkB,OAAO,IAAI,KAAK,WAAW,OAAO,IAAI;AAAA,IAC/D,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,IAC1B,SAAS;AAAA,IACT,YAAY,EAAE,QAAQ,KAAK;AAAA,IAC3B;AAAA,EACF;AACA,MAAI,OAAO,SAAS,SAAS;AAC3B,SAAK,WAAW,OAAO;AAAA,EACzB,WAAW,OAAO,SAAS,QAAQ;AACjC,UAAM,OAAO,WAAW,IAAI,OAAO,EAAE;AACrC,QAAI,KAAM,MAAK,WAAW;AAAA,EAC5B;AACA,SAAO;AACT;AAEO,IAAM,kBAAwB;AAAA,EACnC,IAAI,kBAAkB;AAAA,EACtB,SAAS;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM,UAAM,gBAAAC,eAAoB,uBAAO;AAAA,EACzC;AAAA,EACA,OAAO;AAAA,EACP,OAAO,CAAC,EAAE,KAAK,UAAK,OAAO,SAAS,CAAC;AAAA,EACrC,aAAa,MAAM;AAAA,EACnB,SAAS,CAAC,QAAkC;AAC1C,UAAM,EAAE,UAAU,IAAI,IAAI,mBAAmB,GAAG;AAChD,UAAM,aAAa,kBAAkB,GAAG;AAExC,UAAM,QAA2B;AAAA,MAC/B,GAAG,SAAS,IAAI,CAAC,QAAQD,QAAO,KAAK,UAAU,CAAC;AAAA,MAChD,GAAG,IAAI,IAAI,CAAC,QAAQA,QAAO,KAAK,UAAU,CAAC;AAAA,IAC7C,EAAE,KAAK,CAAC,GAAG,MAAM;AACf,YAAM,KAAK,WAAW,IAAI,EAAE,IAAI,IAAI,KAAK,OAAO;AAChD,YAAM,KAAK,WAAW,IAAI,EAAE,IAAI,IAAI,KAAK,OAAO;AAChD,UAAI,OAAO,GAAI,QAAO,KAAK;AAC3B,aAAO,EAAE,MAAM,cAAc,EAAE,KAAK;AAAA,IACtC,CAAC;AAED,UAAM,SAAS,CAAC,MAAgB,UAA2B;AACzD,YAAM,MAAM;AACZ,aAAO;AAAA,QACL,GAAG,KAAK,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE;AAAA,QAC/C;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAI;AAAA,MACJ;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,MACA,UAAU,CAAC,SAAS,IAAI,SAAU,KAAyB,GAAG;AAAA,IAChE;AAAA,EACF;AACF;;;ACxGA,eAAsB,gBAAgB,MAAgC;AACpE,MAAI;AACF,QAAI,OAAO,cAAc,eAAe,UAAU,WAAW,WAAW;AACtE,YAAM,UAAU,UAAU,UAAU,IAAI;AACxC,aAAO;AAAA,IACT;AAAA,EACF,QAAQ;AAAA,EAER;AACA,MAAI;AACF,QAAI,OAAO,aAAa,YAAa,QAAO;AAC5C,UAAM,WAAW,SAAS,cAAc,UAAU;AAClD,aAAS,QAAQ;AACjB,aAAS,aAAa,YAAY,EAAE;AACpC,aAAS,MAAM,WAAW;AAC1B,aAAS,MAAM,UAAU;AACzB,aAAS,KAAK,YAAY,QAAQ;AAClC,aAAS,OAAO;AAChB,UAAM,KAAK,SAAS,YAAY,MAAM;AACtC,aAAS,KAAK,YAAY,QAAQ;AAClC,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;ACtBA,SAASE,YAAW,GAAmB;AACrC,SAAO,EAAE,WAAW,IAAI,IAAI,EAAE,CAAC,EAAE,YAAY,IAAI,EAAE,MAAM,CAAC;AAC5D;AAEO,SAAS,sBAAsB,SAAkC;AACtE,QAAM,UAAU,QAAQ,SAAS,GAAGA,YAAW,QAAQ,IAAI,CAAC;AAC5D,QAAM,QAAkB;AAAA,IACtB,KAAK,OAAO;AAAA,IACZ;AAAA,IACA,eAAe,QAAQ,IAAI;AAAA,IAC3B,mBAAmB,QAAQ,QAAQ;AAAA,IACnC,sBAAsB,QAAQ,WAAW;AAAA,IACzC;AAAA,IACA;AAAA,IACA,QAAQ,eAAe;AAAA,IACvB;AAAA,IACA;AAAA,IACA,cAAc,QAAQ,GAAG;AAAA,IACzB,eAAe,QAAQ,IAAI;AAAA,IAC3B,GAAI,QAAQ,YAAY,CAAC,qBAAqB,QAAQ,SAAS,EAAE,IAAI,CAAC;AAAA,IACtE,mBAAmB,QAAQ,SAAS,KAAK,OAAI,QAAQ,SAAS,MAAM;AAAA,IACpE,iBAAiB,QAAQ,OAAO,KAAK,OAAI,QAAQ,OAAO,MAAM;AAAA,IAC9D,qBAAqB,QAAQ,SAAS;AAAA,IACtC,oBAAoB,QAAQ,SAAS;AAAA,EACvC;AACA,SAAO,MAAM,KAAK,IAAI,IAAI;AAC5B;;;AC5BA,iBAAkB;AAGX,IAAM,iBAAiB,aAAE,OAAO;AAAA,EACrC,MAAM,aAAE,KAAK,CAAC,OAAO,WAAW,eAAe,UAAU,CAAC;AAAA,EAC1D,UAAU,aAAE,KAAK,CAAC,OAAO,UAAU,QAAQ,UAAU,CAAC;AAAA,EACtD,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,aAAa,aACV,OAAO,EACP,KAAK,EACL,IAAI,GAAG,EAAE,SAAS,2BAA2B,CAAC;AACnD,CAAC;AAEM,IAAM,iBAA8B;AAAA,EACzC;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,MACP,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,MAC7B,EAAE,OAAO,WAAW,OAAO,UAAU;AAAA,MACrC,EAAE,OAAO,eAAe,OAAO,cAAc;AAAA,MAC7C,EAAE,OAAO,YAAY,OAAO,WAAW;AAAA,IACzC;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,MACP,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,MAC7B,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,MACnC,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,MAC/B,EAAE,OAAO,YAAY,OAAO,WAAW;AAAA,IACzC;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AACF;;;AC7BA,IAAMC,oBAAwC,oBAAI,IAAI;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,eAAe,IAAI;AAAA,EACvB,mBAAmB,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;AACvD;AAEA,SAAS,eAAe,KAAoC;AAC1D,QAAM,OAAO,aAAa,IAAI,IAAI,IAAI;AACtC,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,SAAS;AAAA,IACd,IAAI,IAAI,KAAK,IAAI,OAAO,IAAI,EAAE,CAAC;AAAA,EACjC;AACF;AAmDA,SAAS,aACP,KACA,aACA,QACA,QACA,gBACA,YACiB;AACjB,QAAM,WAAW,+BAA+B;AAChD,QAAM,QAAQ,OAAO,OAAO,SAAS,EAAE,EAAE,KAAK;AAC9C,QAAM,cAAc,OAAO,OAAO,eAAe,EAAE,EAAE,KAAK;AAC1D,QAAM,MAAM,IAAI;AAChB,QAAM,SAAS,MAAM,IAAI,SAAS,IAAI,IAAI,MAAM,IAAI,EAAE,IAAI;AAC1D,QAAM,MAAM,UAAU,SAAS,SAAS,OAAO,MAAM;AACrD,QAAM,UAAU,MACZ,CAAC,EAAE,UAAU,IAAI,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC,IAC5C;AAEJ,QAAM,UAA2B;AAAA,IAC/B,MAAO,OAAO,QAAoC;AAAA,IAClD,UAAW,OAAO,YAA4C;AAAA,IAC9D,OAAO,SAAS;AAAA,IAChB,aAAa,SAAS,GAAG,MAAM,GAAG,WAAW,KAAK;AAAA,IAClD;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL;AACA,SAAO,iBAAiB,eAAe,SAAS,KAAK,MAAM,IAAI;AACjE;AAEA,eAAe,aACb,SAC2B;AAC3B,QAAM,WAAW,sBAAsB,OAAO;AAC9C,QAAM,SAAS,MAAM,gBAAgB,QAAQ;AAC7C,MAAI,CAAC,OAAQ,SAAQ,IAAI,iCAAiC,QAAQ;AAClE,SAAO;AAAA,IACL,QAAQ,SAAS,YAAY;AAAA,IAC7B,SAAS,SAAS,wBAAwB;AAAA,EAC5C;AACF;AAEO,SAAS,mBAAmB,QAAwC;AACzE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAAC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV,IAAI;AAEJ,SAAO;AAAA,IACL;AAAA,IACA,SAAS,MAAM;AAAA,IACf,YAAY;AAAA,IACZ,OAAO,CAAC,QAAQ;AAAA,MACd;AAAA,QACE,KAAK;AAAA,QACL,OAAO,aAAa,GAAG,IAAI,aAAa,QAAQ,aAAa;AAAA,MAC/D;AAAA,IACF;AAAA,IACA,aAAa,CAAC,SACZ,KAAK;AAAA,MACH;AAAA,IACF;AAAA,IACF,SAAS,CAAC,QAAqB;AAC7B,YAAMC,SAAQ,aAAa,GAAG;AAC9B,YAAM,QAAQ,cAAc,YAAY,GAAG,IAAI,CAAC;AAChD,YAAM,SAAsB,CAAC,GAAG,OAAO,GAAI,cAAc,cAAe;AAExE,YAAM,cAAc,IAAI,OAAO,QAAQF,kBAAiB,IAAI,IAAI,IAAI,IAAI;AACxE,YAAM,WAAW,IAAI,OAAO,cAAc,eAAe,IAAI,GAAG,IAAI;AACpE,YAAM,oBAAoB,cACtB,kBAAkB;AAAA,QAChB,QAAQ,YAAY;AAAA,QACpB,UAAU;AAAA,MACZ,CAAC,EAAE,MAAM,MAAM,IAAI,IACnB;AAEJ,aAAO;AAAA,QACL,MAAM;AAAA,QACN,IAAI;AAAA,QACJ;AAAA,QACA,QAAQ,kBAAkB;AAAA,QAC1B,mBAAmB,oBAAoB,oBAAoB;AAAA,QAC3D,QAAQ;AAAA,UACN,OAAOE,SAAQ,aAAa,QAAQ,aAAa;AAAA,UACjD,UAAU,OAAO,WAAW;AAC1B,kBAAM,aAAc,MAAM,qBAAsB;AAChD,kBAAM,SAAS,qBAAqB,mBAAmB,IAAI;AAC3D,kBAAM,UAAU;AAAA,cACd;AAAA,cACA,YAAY,GAAG;AAAA,cACf;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AACA,gBAAI,CAACA,QAAO;AACV,qBAAO,aAAa,OAAO;AAAA,YAC7B;AACA,gBAAI;AACF,oBAAM,SAAU,MAAMA,OAAM,SAAS;AAAA,gBACnC;AAAA,cACF;AACA,kBAAI,cAAe,QAAO,cAAc,MAAM;AAC9C,qBAAO;AAAA,gBACL,QAAQ;AAAA,gBACR,SAASD,cAAa,MAAM;AAAA,cAC9B;AAAA,YACF,SAAS,KAAK;AACZ,oBAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,qBAAO;AAAA,gBACL,QAAQ;AAAA,gBACR,SAAS,aAAa,GAAG,KAAK;AAAA,cAChC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACxNO,IAAM,eAAe,mBAAmB;AAAA,EAC7C,IAAI,kBAAkB;AAAA,EACtB,cAAc,CAAC,QAAQ,IAAI;AAAA,EAC3B,aAAa,CAAC,QAAS,IAAI,MAAM,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,KAAK;AAAA,EACnE,cAAc,EAAE,OAAO,iBAAiB,SAAS,cAAc;AAAA,EAC/D,cAAc,CAAC,WAAW;AACxB,UAAM,YACJ,OAAO,cAAc,MAAM,OAAO,aAAa,MAC3C,OAAO,aAAa,MACpB;AACN,WAAO,YACH,uBAAuB,SAAS,MAChC;AAAA,EACN;AAAA,EACA,cAAc,CAAC,QAAQ;AACrB,UAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,WAAO,WAAW,OAAO;AAAA,EAC3B;AACF,CAAC;;;ACVD,IAAM,aAAa,eAAe,KAAK,EAAE,MAAM,KAAK,CAAC;AAErD,IAAM,iBAAiB,eAAe,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM;AAErE,SAAS,sBAAsB,QAAiC;AAC9D,QAAM,SAAS,OAAO,gBAAgB,CAAC;AAEvC,QAAM,UAA8C;AAAA,IAClD,EAAE,OAAO,IAAI,OAAO,OAAO;AAAA,EAC7B;AAEA,QAAM,SAAS,oBAAI,IAAiC;AACpD,aAAW,SAAS,QAAQ;AAC1B,UAAM,QAAQ,OAAO,IAAI,MAAM,SAAS,KAAK,CAAC;AAC9C,UAAM,KAAK,KAAK;AAChB,WAAO,IAAI,MAAM,WAAW,KAAK;AAAA,EACnC;AACA,aAAW,CAAC,MAAM,KAAK,KAAK,QAAQ;AAClC,eAAW,SAAS,OAAO;AACzB,cAAQ,KAAK;AAAA,QACX,OAAO,MAAM;AAAA,QACb,OAAO,IAAI,IAAI,KAAK,MAAM,GAAG,KAAK,MAAM,OAAO;AAAA,MACjD,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP;AAAA,EACF;AACF;AAEO,IAAM,mBAAmB,mBAAmB;AAAA,EACjD,IAAI,kBAAkB;AAAA,EACtB,cAAc,CAAC,QAAQ,IAAI;AAAA,EAC3B,aAAa,CAAC,QAAS,IAAI,MAAM,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,KAAK;AAAA,EACnE,cAAc,EAAE,OAAO,cAAc,SAAS,cAAc;AAAA,EAC5D,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,aAAa,CAAC,QAAQ;AACpB,UAAME,SAAQ,IAAI;AAClB,UAAM,SAASA,QAAO,aAAa,gBAAgB,KAAK;AACxD,QAAI,CAAC,QAAQ,QAAS,QAAO,CAAC;AAC9B,WAAO,CAAC,sBAAsB,MAAM,CAAC;AAAA,EACvC;AAAA,EACA,gBAAgB,CAAC,SAAS,KAAK,WAAW;AACxC,UAAMA,SAAQ,IAAI;AAClB,UAAM,SAASA,QAAO,aAAa,gBAAgB,KAAK;AACxD,QAAI,CAAC,QAAQ,WAAW,CAAC,OAAO,cAAe,QAAO;AACtD,UAAM,eAAwC,CAAC;AAC/C,UAAM,YAAY,OAAO;AACzB,QAAI,WAAW;AACb,YAAM,QAAQ,OAAO,cAAc,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS;AAClE,UAAI,MAAO,cAAa,SAAS,MAAM;AAAA,IACzC;AACA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,MAAM;AAAA,MACN,iBAAiB;AAAA,QACf,eAAe,OAAO;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,eAAe,CAAC,WAA6C;AAC3D,UAAM,OAAO,OAAO;AACpB,QAAI,MAAM,MAAM,KAAK,KAAK;AACxB,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS,WAAW,KAAK,GAAG;AAAA,QAC5B,MAAM,KAAK,MAAM,EAAE,KAAK,KAAK,KAAK,OAAO,KAAK,IAAI,IAAI;AAAA,MACxD;AAAA,IACF;AACA,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,cAAc,CAAC,WAA2B;AACxC,UAAM,OAAO,OAAO;AACpB,QAAI,MAAM,MAAM,KAAK,IAAK,QAAO,WAAW,KAAK,GAAG;AACpD,WAAO;AAAA,EACT;AAAA,EACA,cAAc,CAAC,QAAQ;AACrB,UAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,WAAO,2BAA2B,OAAO;AAAA,EAC3C;AACF,CAAC;;;ACpGD,IAAAC,kBAGO;AAKA,SAAS,sBAAsB,KAA0B;AAC9D,QAAM,QAAQ,IAAI,SAAS;AAC3B,QAAM,aAAa,MAAM,MAAM,SAAS,CAAC;AACzC,SAAO,aAAa,aAAa,WAAW,EAAE,KAAK;AACrD;AAEA,SAAS,eAAuB;AAC9B,SAAO;AACT;AAEO,IAAM,kBAAkB,mBAAmB;AAAA,EAChD,IAAI,kBAAkB;AAAA,EACtB,cAAc,CAAC,QAAQ,IAAI;AAAA,EAC3B,aAAa,CAAC,QAAQ,sBAAsB,GAAG;AAAA,EAC/C,cAAc,EAAE,OAAO,iBAAiB,SAAS,cAAc;AAAA,EAC/D;AAAA,EACA,cAAc,MAAM;AAAA,EACpB,oBAAoB,MAAM,cAAc,OAAiB;AAAA;AAAA;AAC3D,CAAC;;;ACJD,IAAM,aAAwC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,iBAAuB;AAAA,EAClC,IAAI;AAAA,EACJ,SAAS,CAAC,QAAQ,IAAI,SAAS;AAAA,EAC/B,OAAO,CAAC,QAAQ;AACd,QAAI,CAAC,IAAI,IAAK,QAAO;AACrB,UAAM,SAAS,IAAI,SAAS,IAAI,QAAQ,IAAI,IAAI,EAAE;AAClD,WAAO,SAAS,YAAY,MAAM,IAAI,IAAI,IAAI;AAAA,EAChD;AAAA,EACA,aAAa,CAAC,SACZ,KAAK;AAAA,IACH;AAAA,EACF;AAAA,EACF,SAAS,CAAC,QAAuB;AAC/B,QAAI,CAAC,IAAI,OAAO,IAAI,IAAI,SAAS,QAAQ;AACvC,aAAO,EAAE,MAAM,UAAU,YAAY,OAAO;AAAA,IAC9C;AACA,UAAM,OAAO,IAAI,SAAS,IAAI,QAAQ,IAAI,IAAI,EAAE;AAChD,QAAI,CAAC,MAAM;AACT,aAAO,EAAE,MAAM,UAAU,YAAY,QAAQ,UAAU,IAAI,IAAI;AAAA,IACjE;AAEA,UAAM,UAA0B;AAAA,MAC9B,eAAe,IAAI,KAAK,KAAK,GAAG;AAAA,MAChC,mBAAmB,IAAI,KAAK,KAAK,GAAG;AAAA,MACpC,eAAe,IAAI,GAAG;AAAA,IACxB;AAEA,UAAM,WAA4B;AAAA,MAChC,KAAK,MAAM,SAAS,IAChB,kBAAkB,KAAK,OAAO,IAAI,QAAQ,IAC1C,oBAAoB,MAAM,IAAI,QAAQ;AAAA,IAC5C;AAEA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,OAAO,YAAY,IAAI;AAAA,MACvB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,kBACP,WACA,UACe;AACf,QAAM,QAA4B,CAAC;AACnC,YAAU,QAAQ,CAAC,MAAM,UAAU;AACjC,UAAM,SAAS,kBAAkB,UAAU,KAAK,QAAQ;AACxD,QAAI,QAAQ;AACV,YAAM,KAAK,EAAE,SAAS,QAAQ,GAAG,QAAQ,QAAQ,KAAK,OAAO,CAAC;AAAA,IAChE;AAAA,EACF,CAAC;AACD,SAAO,EAAE,IAAI,SAAS,OAAO,YAAY,KAAK;AAChD;AAEA,SAAS,kBACP,UACA,UACoB;AACpB,aAAW,QAAQ,YAAY;AAC7B,UAAM,SAAS,SAAS,IAAI,MAAM,QAAQ;AAC1C,QAAI,OAAQ,QAAO;AAAA,EACrB;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,MAAY,UAAmC;AAC1E,QAAM,UAAoB,CAAC;AAC3B,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,iBAAiB,SAAS,UAAU,KAAK,EAAE,GAAG;AACvD,QAAI,CAAC,aAAa,aAAa,EAAG;AAClC,UAAM,MAAM,GAAG,cAAc,IAAI,IAAI,cAAc,EAAE;AACrD,QAAI,KAAK,IAAI,GAAG,EAAG;AACnB,SAAK,IAAI,GAAG;AACZ,YAAQ,KAAK,aAAa;AAAA,EAC5B;AACA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AACF;;;ACxGA,SAASC,QAAO,MAAsB;AACpC,QAAM,MAAiB,EAAE,MAAM,QAAQ,IAAI,KAAK,GAAG;AACnD,SAAO;AAAA,IACL,OAAO,eAAe,KAAK,EAAE;AAAA,IAC7B,OAAO,YAAY,IAAI;AAAA,IACvB,UAAU,KAAK,IAAI,QAAQ;AAAA,IAC3B,KAAK,QAAQ,KAAK,EAAE;AAAA,IACpB,SAAS;AAAA,IACT,YAAY,EAAE,QAAQ,KAAK;AAAA,IAC3B;AAAA,EACF;AACF;AAEO,IAAM,YAAkB;AAAA,EAC7B,IAAI,kBAAkB;AAAA,EACtB,SAAS,EAAE,OAAO,QAAQ;AAAA,EAC1B,OAAO;AAAA,EACP,OAAO,CAAC,EAAE,KAAK,UAAK,OAAO,SAAS,CAAC;AAAA,EACrC,aAAa,MAAM;AAAA,EACnB,SAAS,CAAC,QAAkC;AAC1C,UAAM,QAAQ,IAAI,SAAS,KAAK,MAAM;AACtC,UAAM,QAAoB,MACvB,IAAIA,OAAM,EACV,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,cAAc,EAAE,KAAK,CAAC;AAEhD,UAAM,SAAS,CAAC,MAAgB,UAA2B;AACzD,YAAM,MAAM;AACZ,aAAO;AAAA,QACL,GAAG,KAAK,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE;AAAA,QAC/C;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAI;AAAA,MACJ;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,MACA,UAAU,CAAC,SAAS,IAAI,SAAU,KAAkB,GAAG;AAAA,IACzD;AAAA,EACF;AACF;;;ACpDA,IAAAC,kBAA+D;AAO/D,IAAM,eAAoD;AAAA,EACxD,SAAS,kBAAkB;AAAA,EAC3B,QAAQ,kBAAkB;AAAA,EAC1B,QAAQ,kBAAkB;AAAA,EAC1B,MAAM,kBAAkB;AAAA,EACxB,SAAS,kBAAkB;AAAA,EAC3B,WAAW,kBAAkB;AAAA,EAC7B,MAAM,kBAAkB;AAC1B;AAEA,IAAM,kBAAgC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,gBAAgB,MAA0B;AACjD,MAAI,SAAS,QAAS,QAAO,EAAE,MAAM,SAAS,MAAM,MAAM,MAAM,KAAK;AACrE,MAAI,SAAS;AACX,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,KAAK,EAAE,MAAM,GAAG;AAAA,MAChB,SAAS,CAAC;AAAA,MACV,OAAO,CAAC;AAAA,IACV;AACF,SAAO,EAAE,MAAM,IAAI,KAAK;AAC1B;AAEO,IAAM,eAAqB;AAAA,EAChC,IAAI,kBAAkB;AAAA,EACtB,SAAS;AAAA,IACP,OAAO;AAAA,IACP,OAAO,eAAe;AAAA,IACtB,MAAM,UAAM,gBAAAC,eAAoB,wBAAQ;AAAA,EAC1C;AAAA,EACA,OAAO;AAAA,EACP,OAAO,CAAC,EAAE,KAAK,UAAK,OAAO,SAAS,CAAC;AAAA,EACrC,aAAa,MAAM;AAAA,EACnB,SAAS,CAAC,QAAkC;AAC1C,UAAM,QAAoB,gBAAgB,IAAI,CAAC,SAAS;AACtD,YAAM,QACJ,SAAS,SACL,IAAI,SAAS,KAAK,MAAM,EAAE,SAC1B,IAAI,SAAS,KAAK,IAAI,EAAE;AAC9B,aAAO;AAAA,QACL,OAAO,YAAY,IAAI;AAAA,QACvB,OAAO,WAAW,IAAI,EAAE,QAAQ;AAAA,QAChC,UAAU,OAAO,KAAK;AAAA,QACtB,KAAK;AAAA,QACL,YAAY,EAAE,QAAQ,gBAAgB,IAAI,EAAE;AAAA,MAC9C;AAAA,IACF,CAAC;AACD,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAI;AAAA,MACJ;AAAA,MACA,UAAU,CAAC,SAAS;AAClB,cAAM,OAAO,KAAK;AAClB,cAAM,SAAS,aAAa,IAAI;AAChC,YAAI,OAAQ,KAAI,KAAK,EAAE,IAAI,QAAQ,KAAK,KAAK,CAAC;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AACF;;;ACpBO,SAAS,kBAAkB,UAAoC;AACpE,SAAO;AAAA,IACL,yBAAyB,QAAQ;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACTO,SAAS,YAAY,UAA8B,CAAC,GAAU;AACnE,QAAM,WAAW,eAAe;AAKhC,QAAM,eAA8C,EAAE,SAAS,KAAK;AACpE,QAAM,aAA0C,EAAE,SAAS,KAAK;AAEhE,QAAM,eAAe,CAAC,QAAgC;AACpD,UAAM,UAAU,WAAW;AAC3B,QAAI,CAAC,QAAS;AACd,UAAM,MAAM,IAAI,aAAa,IAAI;AACjC,QAAI,CAAC,IAAK;AACV,UAAMC,MAAK,IAAI,WAAW,qBAAqB,GAAG;AAClD,QAAI,CAACA,KAAI;AACP,cAAQ,KAAK;AACb;AAAA,IACF;AACA,UAAM,SAAS,IAAI,cAAc;AACjC,YAAQ,KAAKA,KAAI;AAAA,MACf,OAAO,IAAI,SAAS,WAAW,IAAI,IAAI,EAAE;AAAA,MACzC,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,cAAc;AAAA,IAC5B,OAAO,QAAQ;AAAA,IACf,eAAe,QAAQ;AAAA,IACvB,UAAU;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB,MAAM,aAAa,SAAS,MAAM;AAAA,QAClD,kBAAkB,MAAM,aAAa,SAAS,QAAQ;AAAA,MACxD;AAAA,MACA,WAAW;AAAA,QACT,aAAa;AAAA,QACb,aAAa,MAAM,WAAW,SAAS,KAAK;AAAA,QAC5C,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,EACF,CAAC;AACD,QAAM,QAAQ,oBAAoB,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;AAC/D,QAAMC,SAAQ,QAAQ,SAAS;AAC/B,QAAM,aAAa,qBAAqB,QAAQ,QAAQA,WAAU,IAAI;AACtE,QAAM,SAAS,aAAa,aAAa,EAAE,SAAS,GAAG,WAAW,CAAC,IAAI;AAEvE,MAAI,QAAQ,iBAAiB,OAAO;AAClC,eAAW,QAAQ,kBAAkB,QAAQ,QAAQ,EAAG,OAAM,SAAS,IAAI;AAAA,EAC7E;AACA,MAAI,QAAQ,OAAO;AACjB,eAAW,QAAQ,QAAQ,MAAO,OAAM,SAAS,IAAI;AAAA,EACvD;AAEA,MAAI,aAAgC;AACpC,QAAM,eAAe,mBAAmB;AACxC,MAAI,UAAU;AAEd,WAAS,MAAM,QAAwB;AACrC,QAAI,QAAS;AACb,UAAM,cACJ,WAAW,OAAO,aAAa,cAAc,SAAS,OAAO;AAC/D,QAAI,CAAC,aAAa;AAChB,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AAEA,UAAM,QAAQ,mBAAmB;AAAA,MAC/B,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,eAAe,QAAQ;AAAA,MACvB,UAAU,QAAQ;AAAA,MAClB,WAAW;AAAA,QACT,UAAU,CAAC,UAAU;AACnB,gBAAM,OAAO,MAAM,UAAU,MAAM,GAAG;AACtC,cAAI,CAAC,KAAM;AACX,kBAAQ,KAAK;AAAA,YACX,MAAM;AAAA,YACN,KAAK,MAAM;AAAA,YACX,OAAO,EAAE,IAAI,KAAK,IAAI,KAAK,MAAM,IAAI;AAAA,UACvC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAC;AACD,iBAAa,MAAM,KAAK;AACxB,iBAAa,UAAU,MAAM;AAC7B,eAAW,UAAU,MAAM;AAC3B,UAAM,QAAQ,YAAY,MAAM,QAAQ,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC9D,iBAAa,IAAI,KAAK;AACtB,iBAAa,IAAI,MAAM;AACrB,mBAAa,UAAU;AACvB,iBAAW,UAAU;AAAA,IACvB,CAAC;AAED,UAAM,YAAiC;AAAA,MACrC,KAAK,KAAK,MAAM;AACd,cAAMD,MAAK,qBAAqB,GAAG;AACnC,YAAI,CAACA,KAAI;AACP,kBAAQ,KAAK,EAAE,MAAM,UAAU,CAAC;AAChC;AAAA,QACF;AACA,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN;AAAA,UACA,SAASA;AAAA,UACT,OAAO,MAAM,SAAS;AAAA,QACxB,CAAC;AAAA,MACH;AAAA,MACA,OAAO;AACL,gBAAQ,KAAK,EAAE,MAAM,UAAU,CAAC;AAAA,MAClC;AAAA,IACF;AAEA,UAAM,gBAAgB,SAAS,cAAc,KAAK;AAClD,kBAAc,aAAa,oBAAoB,EAAE;AACjD,UAAM,KAAK,SAAS,YAAY,aAAa;AAC7C,iBAAa,IAAI,MAAM,cAAc,OAAO,CAAC;AAE7C,UAAM,YAAY,gBAAgB;AAAA,MAChC,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAAC;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,QAAQ;AAAA,IACpB,CAAC;AACD,iBAAa,IAAI,SAAS;AAE1B,QAAI,YAAY;AACd,mBAAa;AAAA,QACX,eAAe;AAAA,UACb;AAAA,UACA;AAAA,UACA,iBAAiB,MAAM,UAAU,gBAAgB;AAAA,UACjD,UAAU,QAAQ;AAAA,QACpB,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI,QAAQ;AACV,aAAO,MAAM;AACb,mBAAa,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,IACtC;AAEA,cAAU;AAAA,EACZ;AAEA,WAAS,UAAgB;AACvB,QAAI,CAAC,QAAS;AACd,iBAAa,MAAM;AACnB,iBAAa;AACb,cAAU;AAAA,EACZ;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAAA;AAAA,IACA;AAAA,IACA,IAAI,aAAa;AACf,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":["RouteIcon","DEFAULT_LIMIT","import_xstate","import_xstate","initialContext","import_lucide","el","createLucideElement","el","import_lucide","state","createLucideElement","import_lucide","createLucideElement","connect","machine","hasTagFn","import_types","import_lucide","createButton","createButton","createButton","createLucideElement","idx","import_lucide","import_xstate","import_xstate","initialContext","import_lucide","createLucideElement","import_lucide","scrollArea","createLucideElement","scrollArea","import_lucide","createLucideElement","sameRef","viewActions","sdkCloud","cloud","import_lucide","createLucideElement","el","DOM_BACKED_KINDS","cloud","el","import_lucide","toItem","createLucideElement","capitalize","DOM_BACKED_KINDS","successToast","cloud","cloud","import_lucide","toItem","import_lucide","createLucideElement","el","cloud"]}
|