uidex 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/shared/entities/types.ts","../src/shared/entities/registry.ts","../src/shared/entities/style.ts","../src/shared/entities/display-name.ts","../src/browser/ingest/console.ts","../src/browser/ingest/native-fetch.ts","../src/browser/ingest/network.ts","../src/browser/ingest/index.ts","../src/browser/internal/cleanup.ts","../src/browser/internal/dark-mode.ts","../src/browser/internal/route-change.ts","../src/browser/session/store.ts","../src/browser/session/mode.ts","../src/browser/session/navigation.ts","../src/browser/styles/tailwind.built.css","../src/browser/surface/constants.ts","../src/browser/surface/host.ts","../src/browser/surface/cursor-tooltip.ts","../src/browser/surface/inspector.ts","../src/browser/surface/menu-bar.ts","../src/browser/internal/cn.ts","../src/browser/internal/el.ts","../src/browser/surface/keys.ts","../src/browser/surface/overlay.ts","../src/browser/surface/theme.ts","../src/browser/surface/shell.ts","../src/browser/report/constants.ts","../src/browser/surface/pin-layer.ts","../src/browser/views/core/types.ts","../src/browser/views/core/router.ts","../src/browser/internal/dev.ts","../src/browser/internal/lit.ts","../src/browser/internal/apply-props.ts","../src/browser/internal/lit-icon.ts","../src/browser/ui/cva.ts","../src/browser/ui/badge.ts","../src/browser/views/primitives/chip.ts","../src/browser/views/primitives/kind-icon.ts","../src/browser/views/primitives/icon-tile.ts","../src/browser/views/primitives/kind-chip.ts","../src/browser/machines/scroll-area.ts","../src/browser/machines/machine.ts","../src/browser/machines/normalize.ts","../src/browser/views/builder/spread-props.ts","../src/browser/views/render/detail.ts","../src/browser/internal/arrow-nav.ts","../src/browser/views/builder/filter.ts","../src/browser/views/labels.ts","../src/browser/ui/list-item.ts","../src/browser/ui/button.ts","../src/browser/views/primitives/entity-presence.ts","../src/browser/ui/kbd.ts","../src/browser/views/primitives/row.ts","../src/browser/views/primitives/entity-link.ts","../src/browser/views/primitives/text.ts","../src/browser/views/render/form.ts","../src/browser/machines/dialog.ts","../src/browser/ui/screenshot-lightbox.ts","../src/browser/views/render/list.ts","../src/browser/views/render/list-controller.ts","../src/browser/views/render/index.ts","../src/browser/views/core/mount.ts","../src/browser/views/core/shell.ts","../src/browser/machines/menu.ts","../src/browser/ui/menu.ts","../src/browser/views/core/actions-popup.ts","../src/browser/views/core/stack.ts","../src/browser/views/built-in/ids.ts","../src/browser/views/built-in/archive-reason.ts","../src/browser/views/built-in/command-palette.ts","../src/browser/views/builder/format-location.ts","../src/browser/views/builder/page-context.ts","../src/browser/internal/screenshot.ts","../src/browser/report/capture.ts","../src/browser/views/builder/resolve.ts","../src/browser/views/builder/detail-builder.ts","../src/browser/views/built-in/entity-detail.ts","../src/browser/views/built-in/entity-kind-list.ts","../src/browser/views/built-in/report-detail.ts","../src/browser/views/built-in/entity-reports.ts","../src/browser/views/built-in/explore-page.ts","../src/browser/internal/clipboard.ts","../src/browser/views/built-in/report/markdown.ts","../src/browser/views/built-in/report/schema.ts","../src/browser/views/built-in/report/view-builder.ts","../src/browser/views/built-in/report/host-report.ts","../src/browser/views/built-in/report/jira-report.ts","../src/browser/views/built-in/flow-detail.ts","../src/browser/views/built-in/flows.ts","../src/browser/views/built-in/glossary.ts","../src/browser/views/built-in/page-reports.ts","../src/browser/views/built-in/pin-settings.ts","../src/browser/ui/toast.ts","../src/browser/views/built-in/index.ts","../src/browser/create-uidex.ts"],"sourcesContent":["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 ReportRecord {\n id: string\n entity?: string\n reporter?: { id?: string; email?: string; name?: string }\n title?: string\n body: string\n type: string\n severity: string\n status: string\n labels?: string[]\n url: string\n route?: string\n pageTitle?: string\n screenshot?: string\n createdAt: string\n}\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 setReports(\n kind: EntityKind,\n id: string,\n reports: readonly ReportRecord[]\n ): void\n getReports(kind: EntityKind, id: string): readonly ReportRecord[]\n listReportKeys(): readonly string[]\n archiveReport?: (reportId: string, reason?: string) => void | Promise<void>\n onReportsChange(cb: () => void): () => void\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 const reports = new Map<string, readonly ReportRecord[]>()\n const reportsCbs = new Set<() => void>()\n\n const setReports = (\n kind: EntityKind,\n id: string,\n records: readonly ReportRecord[]\n ): void => {\n reports.set(`${kind}:${id}`, records)\n for (const cb of reportsCbs) cb()\n }\n\n const getReports = (kind: EntityKind, id: string): readonly ReportRecord[] =>\n reports.get(`${kind}:${id}`) ?? []\n\n const listReportKeys = (): readonly string[] => Array.from(reports.keys())\n\n const onReportsChange = (cb: () => void): (() => void) => {\n reportsCbs.add(cb)\n return () => reportsCbs.delete(cb)\n }\n\n return {\n add,\n get,\n list,\n query,\n byScope,\n touchedBy,\n setReports,\n getReports,\n listReportKeys,\n onReportsChange,\n }\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.reports.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 { CloudAdapter } from \"../../cloud/types\"\nexport type {\n ReportPayload,\n ReportResult,\n IngestConfig,\n} from \"@uidex/api-client\"\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?.setIngest(true)\n }\n\n function stop(): void {\n if (!active) return\n consoleCapture?.stop()\n networkCapture?.stop()\n active = false\n session?.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","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 type { Cleanup } from \"./cleanup\"\n\nconst ROUTE_CHANGE_EVENT = \"uidex:routechange\"\n\nlet patched = false\n\nfunction ensureHistoryPatched(): void {\n if (patched) return\n if (typeof window === \"undefined\" || typeof history === \"undefined\") return\n patched = true\n\n const dispatch = (): void => {\n window.dispatchEvent(new Event(ROUTE_CHANGE_EVENT))\n }\n\n const origPush = history.pushState\n history.pushState = function (this: History, ...args) {\n const result = origPush.apply(\n this,\n args as Parameters<History[\"pushState\"]>\n )\n dispatch()\n return result\n }\n\n const origReplace = history.replaceState\n history.replaceState = function (this: History, ...args) {\n const result = origReplace.apply(\n this,\n args as Parameters<History[\"replaceState\"]>\n )\n dispatch()\n return result\n }\n}\n\nexport function bindRouteChange(handler: () => void): Cleanup {\n if (typeof window === \"undefined\") return () => {}\n ensureHistoryPatched()\n window.addEventListener(\"popstate\", handler)\n window.addEventListener(ROUTE_CHANGE_EVENT, handler)\n return () => {\n window.removeEventListener(\"popstate\", handler)\n window.removeEventListener(ROUTE_CHANGE_EVENT, handler)\n }\n}\n","import { createStore, type StoreApi } from \"zustand/vanilla\"\n\nimport { sameRef, type EntityRef } from \"../../shared/entities\"\nimport { createModeStore, type ModeStore } from \"./mode\"\nimport { createNavigationStore, type NavigationStore } from \"./navigation\"\nimport type {\n ResolvedTheme,\n SessionSnapshot,\n SessionState,\n ThemePreference,\n ViewStackEntry,\n} from \"./types\"\n\nexport interface HighlightContext {\n ref: EntityRef | null\n element: HTMLElement | null\n pinnedRef: EntityRef | null\n color: string | null\n}\n\nexport interface HighlightActions {\n hover(\n ref: EntityRef,\n element?: HTMLElement | null,\n color?: string | null\n ): void\n unhover(): void\n pin(ref?: EntityRef): void\n unpin(): void\n}\n\nexport type SessionStore = StoreApi<SessionState> & {\n readonly nav: NavigationStore\n readonly mode: ModeStore\n readonly highlight: HighlightActions\n select(ref: EntityRef | null): void\n setTheme(theme: ThemePreference, resolved?: ResolvedTheme): void\n setIngest(active: boolean): void\n}\n\nexport interface CreateSessionOptions extends Partial<SessionSnapshot> {\n detectTheme?: () => ResolvedTheme\n onMountInspector?: () => void\n onDestroyInspector?: () => void\n onShowOverlay?: (context: HighlightContext) => void\n onHideOverlay?: () => void\n onUpdateOverlay?: (context: HighlightContext) => void\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 user: null,\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 HighlightMode = \"none\" | \"transient\" | \"pinned\"\n\nexport function createSession(\n options: CreateSessionOptions = {}\n): SessionStore {\n const {\n detectTheme,\n onMountInspector,\n onDestroyInspector,\n onShowOverlay,\n onHideOverlay,\n onUpdateOverlay,\n ...overrides\n } = 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 nav = createNavigationStore()\n const modeStore = createModeStore({\n nav,\n bindings: {\n mountInspector: onMountInspector,\n destroyInspector: onDestroyInspector,\n },\n })\n\n // --- Mutable highlight state ---\n let highlightMode: HighlightMode = \"none\"\n const hlCtx: HighlightContext = {\n ref: null,\n element: null,\n pinnedRef: null,\n color: null,\n }\n\n const highlightActions: HighlightActions = {\n hover(ref, element, color) {\n hlCtx.ref = ref\n hlCtx.element = element ?? null\n hlCtx.color = color ?? null\n if (highlightMode === \"none\") {\n highlightMode = \"transient\"\n onShowOverlay?.(hlCtx)\n } else if (highlightMode === \"transient\") {\n onUpdateOverlay?.(hlCtx)\n }\n store.setState({ hover: ref })\n },\n\n unhover() {\n if (highlightMode === \"transient\") {\n highlightMode = \"none\"\n hlCtx.ref = null\n hlCtx.element = null\n hlCtx.color = null\n onHideOverlay?.()\n }\n store.setState({ hover: null })\n },\n\n pin(ref) {\n const pinRef = ref ?? hlCtx.ref\n hlCtx.pinnedRef = pinRef\n if (highlightMode === \"none\") {\n hlCtx.ref = pinRef\n }\n if (highlightMode !== \"pinned\") {\n highlightMode = \"pinned\"\n onShowOverlay?.(hlCtx)\n }\n store.setState({ pinnedHighlight: hlCtx.pinnedRef })\n },\n\n unpin() {\n if (highlightMode === \"pinned\") {\n highlightMode = \"none\"\n hlCtx.ref = null\n hlCtx.element = null\n hlCtx.pinnedRef = null\n hlCtx.color = null\n onHideOverlay?.()\n }\n store.setState({ pinnedHighlight: null })\n },\n }\n\n // --- Create Zustand store ---\n const store = createStore<SessionState>(() => ({\n ...defaultSnapshot,\n hover: overrides.hover ?? null,\n selection: overrides.selection ?? null,\n stack: [],\n pinnedHighlight: null,\n inspectorActive: false,\n theme: initialPref,\n resolvedTheme: initialResolved,\n ingestActive: overrides.ingestActive ?? false,\n user: overrides.user ?? null,\n }))\n\n // --- Auto-sync sub-stores → session store ---\n nav.subscribe(() => {\n const { stack } = nav.getState()\n if (store.getState().stack !== stack) {\n store.setState({ stack })\n }\n })\n\n modeStore.subscribe(() => {\n const { inspectorActive } = modeStore.getState()\n if (store.getState().inspectorActive !== inspectorActive) {\n store.setState({ inspectorActive })\n }\n })\n\n // --- Build session object ---\n const session = store as SessionStore\n ;(session as { nav: NavigationStore }).nav = nav\n ;(session as { mode: ModeStore }).mode = modeStore\n ;(session as { highlight: HighlightActions }).highlight = highlightActions\n\n session.select = (ref) => {\n if (sameRef(store.getState().selection, ref)) return\n store.setState({ selection: ref })\n }\n\n session.setTheme = (theme, resolved) => {\n const state = store.getState()\n const nextResolved = resolved ?? resolveTheme(theme, detectTheme)\n if (state.theme === theme && state.resolvedTheme === nextResolved) return\n store.setState({ theme, resolvedTheme: nextResolved })\n }\n\n session.setIngest = (active) => {\n if (store.getState().ingestActive === active) return\n store.setState({ ingestActive: active })\n }\n\n // --- Hydrate initial state ---\n if (initialStack.length > 0) {\n modeStore.transition.openPalette()\n for (let i = 1; i < initialStack.length; i++) {\n modeStore.transition.pushView(initialStack[i])\n }\n } else if (overrides.inspectorActive) {\n modeStore.transition.openInspector()\n }\n if (overrides.pinnedHighlight) {\n highlightActions.pin(overrides.pinnedHighlight)\n }\n\n return session\n}\n","import { createStore, type StoreApi } from \"zustand/vanilla\"\n\nimport type { NavigationStore } from \"./navigation\"\nimport type { ViewStackEntry } from \"./types\"\n\nexport type SurfaceMode = \"idle\" | \"inspecting\" | \"palette\" | \"viewing\"\n\nexport interface ModeSnapshot {\n mode: SurfaceMode\n inspectorActive: boolean\n}\n\nexport interface ModeBindings {\n mountInspector?: () => void\n destroyInspector?: () => void\n}\n\nexport interface ModeTransitions {\n openPalette(): void\n openInspector(): void\n closeInspector(): void\n toggleInspector(): void\n enterViewing(initialStack: ViewStackEntry[]): void\n dismiss(): void\n popOrTransition(): void\n pushView(entry: ViewStackEntry): void\n}\n\nexport type ModeStore = StoreApi<ModeSnapshot> & {\n transition: ModeTransitions\n}\n\nexport interface CreateModeStoreOptions {\n nav: NavigationStore\n bindings?: ModeBindings\n}\n\nconst COMMAND_PALETTE_ENTRY: ViewStackEntry = {\n id: \"command-palette\",\n ref: null,\n}\n\nexport function createModeStore(options: CreateModeStoreOptions): ModeStore {\n const { nav, bindings } = options\n\n const store = createStore<ModeSnapshot>(() => ({\n mode: \"idle\",\n inspectorActive: false,\n }))\n\n const transition: ModeTransitions = {\n openPalette() {\n const prev = store.getState()\n if (prev.mode === \"inspecting\") {\n bindings?.destroyInspector?.()\n }\n nav.nav.reset([COMMAND_PALETTE_ENTRY])\n store.setState({ mode: \"palette\", inspectorActive: false })\n },\n\n openInspector() {\n bindings?.mountInspector?.()\n nav.nav.clear()\n store.setState({ mode: \"inspecting\", inspectorActive: true })\n },\n\n closeInspector() {\n bindings?.destroyInspector?.()\n nav.nav.clear()\n store.setState({ mode: \"idle\", inspectorActive: false })\n },\n\n toggleInspector() {\n if (store.getState().mode === \"inspecting\") {\n transition.closeInspector()\n } else {\n transition.openInspector()\n }\n },\n\n enterViewing(initialStack) {\n const prev = store.getState()\n if (prev.mode === \"inspecting\") {\n bindings?.destroyInspector?.()\n }\n nav.nav.reset(initialStack)\n store.setState({ mode: \"viewing\", inspectorActive: false })\n },\n\n dismiss() {\n const prev = store.getState()\n if (prev.mode === \"inspecting\") {\n bindings?.destroyInspector?.()\n }\n nav.nav.clear()\n store.setState({ mode: \"idle\", inspectorActive: false })\n },\n\n popOrTransition() {\n const { stack } = nav.getState()\n if (stack.length > 2) {\n nav.nav.pop()\n } else if (stack.length === 2 && stack[0]?.id === \"command-palette\") {\n nav.nav.reset([COMMAND_PALETTE_ENTRY])\n store.setState({ mode: \"palette\", inspectorActive: false })\n } else if (stack.length === 2) {\n nav.nav.pop()\n } else {\n nav.nav.clear()\n store.setState({ mode: \"idle\", inspectorActive: false })\n }\n },\n\n pushView(entry) {\n const { mode } = store.getState()\n const { stack } = nav.getState()\n\n if (entry.id === \"command-palette\" && stack.length === 0) {\n transition.openPalette()\n return\n }\n\n switch (mode) {\n case \"idle\":\n transition.enterViewing([entry])\n break\n case \"inspecting\":\n bindings?.destroyInspector?.()\n nav.nav.reset([entry])\n store.setState({ mode: \"viewing\", inspectorActive: false })\n break\n case \"palette\":\n case \"viewing\":\n nav.nav.push(entry)\n if (mode === \"palette\") {\n store.setState({ mode: \"viewing\" })\n }\n break\n }\n },\n }\n\n const modeStore = store as ModeStore\n modeStore.transition = transition\n return modeStore\n}\n","import { createStore, type StoreApi } from \"zustand/vanilla\"\n\nimport type { ViewStackEntry } from \"./types\"\n\nexport interface NavigationState {\n stack: ViewStackEntry[]\n}\n\nexport interface NavigationActions {\n push(entry: ViewStackEntry): void\n pop(): void\n replace(entry: ViewStackEntry): void\n clear(): void\n reset(stack: ViewStackEntry[]): void\n}\n\nexport type NavigationStore = StoreApi<NavigationState> & {\n nav: NavigationActions\n}\n\nexport function createNavigationStore(): NavigationStore {\n const store = createStore<NavigationState>(() => ({\n stack: [],\n }))\n\n const nav: NavigationActions = {\n push(entry) {\n store.setState({ stack: [...store.getState().stack, entry] })\n },\n pop() {\n const s = store.getState().stack\n if (s.length <= 1) {\n store.setState({ stack: [] })\n } else {\n store.setState({ stack: s.slice(0, -1) })\n }\n },\n replace(entry) {\n const s = store.getState().stack\n if (s.length === 0) {\n store.setState({ stack: [entry] })\n } else {\n store.setState({ stack: [...s.slice(0, -1), entry] })\n }\n },\n clear() {\n store.setState({ stack: [] })\n },\n reset(stack) {\n store.setState({ stack })\n },\n }\n\n const navStore = store as NavigationStore\n navStore.nav = nav\n return navStore\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 --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\",\n Roboto, sans-serif;\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 --font-weight-bold: 700;\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 .collapse {\n visibility: collapse;\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 .-top-1 {\n top: calc(var(--spacing) * -1);\n }\n .-right-1 {\n right: calc(var(--spacing) * -1);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .bottom-full {\n bottom: 100%;\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 .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n .mb-6 {\n margin-bottom: calc(var(--spacing) * 6);\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-2 {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n .size-3 {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\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-0\\.5 {\n gap: calc(var(--spacing) * 0.5);\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-emerald-500 {\n background-color: var(--color-emerald-500);\n }\n .bg-fuchsia-50 {\n background-color: var(--color-fuchsia-50);\n }\n .bg-info {\n background-color: var(--info);\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 .pt-2 {\n padding-top: calc(var(--spacing) * 2);\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 .text-\\[9px\\] {\n font-size: 9px;\n }\n .text-\\[10px\\] {\n font-size: 10px;\n }\n .text-\\[11px\\] {\n font-size: 11px;\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\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 {\n color: var(--destructive);\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-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 .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\\: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\\: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-50 {\n &:disabled {\n opacity: 50%;\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 .\\[\\[data-kbd-nav\\]_\\&\\]\\:focus-within\\:bg-accent {\n [data-kbd-nav] & {\n &:focus-within {\n background-color: var(--accent);\n }\n }\n }\n .\\[\\[data-kbd-nav\\]_\\&\\]\\:focus-within\\:text-accent-foreground {\n [data-kbd-nav] & {\n &:focus-within {\n color: var(--accent-foreground);\n }\n }\n }\n .\\[\\[data-kbd-nav\\]_\\&\\]\\:focus\\:bg-accent {\n [data-kbd-nav] & {\n &:focus {\n background-color: var(--accent);\n }\n }\n }\n .\\[\\[data-kbd-nav\\]_\\&\\]\\:focus\\:text-accent-foreground {\n [data-kbd-nav] & {\n &:focus {\n color: var(--accent-foreground);\n }\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 = 2147483630\nexport const Z_OVERLAY = 2147483635\nexport const Z_PIN_LAYER = 2147483640\nexport const Z_CHROME = 2147483645\n\nexport const SURFACE_IGNORE_SELECTOR = `.${SURFACE_HOST_CLASS},.${SURFACE_CONTAINER_CLASS}`\n\nimport type { EntityKind } from \"../../shared/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, Z_CHROME } 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.position = \"relative\"\n chromeEl.style.zIndex = String(Z_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 \"../../shared/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 const demoted = entity.kind === \"primitive\"\n applyColor(style?.color ?? DEFAULT_TOOLTIP_COLOR)\n el.style.opacity = demoted ? \"0.55\" : \"1\"\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 =\n \"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 \"../../shared/entities\"\nimport type { Registry } from \"../../shared/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 semantic: InspectorMatch[] = []\n const primitives: 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 const match: InspectorMatch = {\n element: node,\n ref,\n entity,\n label: displayName(entity, node),\n }\n if (kind === \"primitive\") {\n primitives.push(match)\n } else {\n semantic.push(match)\n }\n }\n }\n }\n }\n node = node.parentElement\n }\n return semantic.concat(primitives)\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.highlight.hover(stack[0].ref)\n }\n onHover?.(makeStack(), cursor)\n } else if (currentEl) {\n currentEl = null\n stack = []\n layerIndex = 0\n session.highlight.unhover()\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.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.highlight.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.highlight.unhover()\n onHover?.(null, null)\n },\n }\n}\n","import {\n ChevronLeft,\n ChevronRight,\n Command,\n Highlighter,\n MapPin,\n MousePointerClick,\n Users,\n createElement as createLucideElement,\n} from \"lucide\"\nimport type { RealtimeChannel, RealtimePresenceUser } from \"../../cloud/types\"\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\"\nimport type { PinLayer } from \"./pin-layer\"\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 channel?: RealtimeChannel | null\n pinLayer?: PinLayer | null\n}\n\nexport interface MenuBar {\n destroy(): void\n snapTo(corner: Corner): void\n snapToNearest(x: number, y: number): void\n setPinLayer(layer: PinLayer): 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 channel = null,\n pinLayer: initialPinLayer = null,\n } = options\n\n let activePinLayer: PinLayer | null = initialPinLayer\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.highlight.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.mode.transition.toggleInspector()\n inspectBtn.blur()\n })\n root.appendChild(inspectBtn)\n\n // ── pin commit cycler ──\n const pinIcon = createLucideElement(MapPin)\n pinIcon.setAttribute(\"class\", \"size-3.5\")\n pinIcon.setAttribute(\"aria-hidden\", \"true\")\n const pinBtn = el(\n \"button\",\n {\n class: BUTTON_CLASS,\n attrs: {\n type: \"button\",\n \"data-uidex-menubar-pins\": \"\",\n \"aria-label\": \"Report pins\",\n },\n },\n pinIcon\n )\n\n const commitCycler = el(\"div\", {\n class: \"relative z-1 inline-flex items-center gap-0.5\",\n attrs: { \"data-uidex-menubar-commit-cycler\": \"\" },\n })\n commitCycler.hidden = true\n\n const prevIcon = createLucideElement(ChevronLeft)\n prevIcon.setAttribute(\"class\", \"size-3\")\n prevIcon.setAttribute(\"aria-hidden\", \"true\")\n const prevBtn = el(\n \"button\",\n {\n class: BUTTON_CLASS,\n attrs: { type: \"button\", \"aria-label\": \"Previous commit\" },\n style: { width: \"18px\", height: \"18px\" },\n },\n prevIcon\n )\n\n const commitLabel = el(\"span\", {\n class:\n \"relative z-1 whitespace-nowrap px-1 text-[10px] font-mono text-muted-foreground\",\n attrs: { \"data-uidex-menubar-commit-label\": \"\" },\n })\n\n const nextIcon = createLucideElement(ChevronRight)\n nextIcon.setAttribute(\"class\", \"size-3\")\n nextIcon.setAttribute(\"aria-hidden\", \"true\")\n const nextBtn = el(\n \"button\",\n {\n class: BUTTON_CLASS,\n attrs: { type: \"button\", \"aria-label\": \"Next commit\" },\n style: { width: \"18px\", height: \"18px\" },\n },\n nextIcon\n )\n\n commitCycler.appendChild(prevBtn)\n commitCycler.appendChild(commitLabel)\n commitCycler.appendChild(nextBtn)\n\n const pinWrapper = el(\"div\", {\n class: \"relative z-1 inline-flex items-center gap-0.5\",\n attrs: { \"data-uidex-menubar-pin-wrapper\": \"\" },\n })\n pinWrapper.hidden = true\n pinWrapper.appendChild(pinBtn)\n pinWrapper.appendChild(commitCycler)\n root.appendChild(pinWrapper)\n\n const updatePinUI = (): void => {\n if (!activePinLayer) {\n pinWrapper.hidden = true\n return\n }\n const pinsVisible = activePinLayer.visible\n const state = activePinLayer.filterState\n const hasCommits = state.commits.length > 0\n pinWrapper.hidden = false\n commitCycler.hidden = !pinsVisible || !hasCommits\n\n if (state.commitIndex === -1 || !state.commits[state.commitIndex]) {\n commitLabel.textContent = `all (${state.commits.length})`\n } else {\n const sha = state.commits[state.commitIndex] ?? \"\"\n commitLabel.textContent = sha.slice(0, 7)\n }\n\n pinBtn.className = cn(BUTTON_CLASS, pinsVisible && BUTTON_ACTIVE_CLASS)\n }\n\n pinBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n if (activePinLayer) {\n activePinLayer.setVisible(!activePinLayer.visible)\n }\n })\n\n prevBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n activePinLayer?.prevCommit()\n })\n\n nextBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n activePinLayer?.nextCommit()\n })\n\n let unsubscribePinFilter = activePinLayer?.onFilterChange(() => updatePinUI())\n\n // ── presence indicator ──\n const presenceIcon = createLucideElement(Users)\n presenceIcon.setAttribute(\"class\", \"size-3.5\")\n presenceIcon.setAttribute(\"aria-hidden\", \"true\")\n const presenceBtn = el(\n \"button\",\n {\n class: BUTTON_CLASS,\n attrs: {\n type: \"button\",\n \"data-uidex-menubar-presence\": \"\",\n \"aria-label\": \"Online users\",\n },\n },\n presenceIcon\n )\n presenceBtn.hidden = true\n\n const presenceBadge = el(\"span\", {\n class:\n \"absolute -top-1 -right-1 z-1 inline-flex size-3.5 items-center justify-center rounded-full bg-info text-[9px] font-bold leading-none text-info-foreground\",\n })\n presenceBtn.appendChild(presenceBadge)\n\n const presencePopover = el(\"div\", {\n class:\n \"absolute bottom-full mb-2 right-0 min-w-32 rounded-lg border border-border bg-popover p-2 text-xs text-popover-foreground shadow-lg\",\n })\n presencePopover.hidden = true\n\n let presencePopoverVisible = false\n presenceBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n presencePopoverVisible = !presencePopoverVisible\n presencePopover.hidden = !presencePopoverVisible\n })\n\n const presenceWrapper = el(\"div\", { class: \"relative z-1 inline-flex\" }, [\n presenceBtn,\n presencePopover,\n ])\n presenceWrapper.hidden = true\n root.appendChild(presenceWrapper)\n\n let presenceUsers: RealtimePresenceUser[] = []\n\n const updatePresenceUI = (): void => {\n // Filter out the local user — we only show *other* peers\n const localUserId = session.getState().user?.id ?? null\n const peers = localUserId\n ? presenceUsers.filter((u) => u.userId !== localUserId)\n : presenceUsers\n const count = peers.length\n\n presenceWrapper.hidden = count === 0\n presenceBadge.textContent = String(count)\n presenceBtn.setAttribute(\n \"aria-label\",\n count === 1 ? \"1 other user online\" : `${count} other users online`\n )\n\n // Update popover content\n presencePopover.innerHTML = \"\"\n for (const user of peers) {\n const row = el(\"div\", {\n class: \"flex items-center gap-2 rounded px-1.5 py-1\",\n })\n const dot = el(\"span\", {\n class: \"inline-block size-2 shrink-0 rounded-full bg-emerald-500\",\n })\n const name = el(\"span\", {\n class: \"truncate\",\n text: user.name || \"Anonymous\",\n })\n row.appendChild(dot)\n row.appendChild(name)\n presencePopover.appendChild(row)\n }\n }\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.mode.transition.dismiss()\n } else {\n session.mode.transition.openPalette()\n }\n paletteBtn.blur()\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 const unsubscribePresence = channel?.onPresence(\n (users: RealtimePresenceUser[]) => {\n presenceUsers = users\n updatePresenceUI()\n }\n )\n\n return {\n destroy() {\n unsubscribePinFilter?.()\n unsubscribePresence?.()\n unsubscribeSession()\n root.removeEventListener(\"mousedown\", onMouseDown)\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"mouseup\", onMouseUp)\n root.remove()\n },\n setPinLayer(layer: PinLayer) {\n unsubscribePinFilter?.()\n activePinLayer = layer\n unsubscribePinFilter = layer.onFilterChange(() => updatePinUI())\n updatePinUI()\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 { Cleanup } from \"../internal/cleanup\"\nimport type { SessionStore } from \"../session\"\nimport type { PinLayer } from \"./pin-layer\"\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 const PINS_SHORTCUT: PaletteShortcut = { key: \"u\" }\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 type EscapeHandler = () => boolean\n\nexport interface KeyBindingHandle {\n destroy(): void\n pushEscapeLayer(handler: EscapeHandler): Cleanup\n}\n\nexport interface BindShadowKeysOptions {\n shadowRoot: ShadowRoot\n session: SessionStore\n getActionsPopup: () => ActionsPopupHandle | null\n getPinLayer?: () => PinLayer | null\n shortcut?: PaletteShortcut\n}\n\nexport function bindShadowKeys(\n options: BindShadowKeysOptions\n): KeyBindingHandle {\n const { shadowRoot, session, getActionsPopup, getPinLayer } = options\n const shortcut = options.shortcut ?? DEFAULT_SHORTCUT\n const escapeStack: EscapeHandler[] = []\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 isCmdU = matchesShortcut(e, PINS_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 && !isCmdU && !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 (isCmdU) {\n const pinLayer = getPinLayer?.()\n if (pinLayer) {\n e.preventDefault()\n e.stopPropagation()\n pinLayer.setVisible(!pinLayer.visible)\n }\n return\n }\n\n if (isCmdI) {\n e.preventDefault()\n e.stopPropagation()\n session.mode.transition.toggleInspector()\n return\n }\n\n if (isCmdK) {\n e.preventDefault()\n e.stopPropagation()\n const { mode } = session.mode.getState()\n if (session.nav.getState().stack.length === 0) {\n session.mode.transition.openPalette()\n } else if (mode === \"palette\") {\n if (popup) {\n popup.open()\n } else {\n session.mode.transition.dismiss()\n }\n }\n return\n }\n\n // ESC / Cmd+[ — check escape layers first (e.g. lightbox)\n if (escapeStack.length > 0) {\n const top = escapeStack[escapeStack.length - 1]\n if (top()) {\n e.preventDefault()\n e.stopPropagation()\n return\n }\n }\n\n const { mode } = session.mode.getState()\n if (mode === \"viewing\") {\n e.preventDefault()\n e.stopPropagation()\n session.mode.transition.popOrTransition()\n } else if (mode === \"inspecting\") {\n e.preventDefault()\n e.stopPropagation()\n session.mode.transition.closeInspector()\n } else if (mode === \"palette\") {\n e.preventDefault()\n e.stopPropagation()\n session.mode.transition.dismiss()\n } else if (session.getState().pinnedHighlight !== null) {\n e.preventDefault()\n e.stopPropagation()\n session.highlight.unpin()\n }\n }\n\n const doc = shadowRoot.ownerDocument\n doc.addEventListener(\"keydown\", onKeydown, { capture: true })\n shadowRoot.addEventListener(\"keydown\", onKeydown as EventListener, {\n capture: true,\n })\n\n return {\n destroy() {\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 pushEscapeLayer(handler: EscapeHandler): Cleanup {\n escapeStack.push(handler)\n return () => {\n const idx = escapeStack.indexOf(handler)\n if (idx >= 0) escapeStack.splice(idx, 1)\n }\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 | ShadowRoot\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.opacity = \"0\"\n backdrop.style.visibility = \"hidden\"\n backdrop.style.transition = \"opacity 150ms ease-out\"\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.opacity = \"0\"\n box.style.transition = \"opacity 150ms ease-out\"\n box.style.visibility = \"hidden\"\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.addEventListener(\"transitionend\", () => {\n if (box.style.opacity === \"0\") {\n box.style.visibility = \"hidden\"\n }\n })\n backdrop.addEventListener(\"transitionend\", () => {\n if (backdrop.style.opacity === \"0\") {\n backdrop.style.visibility = \"hidden\"\n backdrop.style.clipPath = \"\"\n }\n })\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 if (opts.backdrop) {\n backdrop.style.visibility = \"visible\"\n backdrop.style.opacity = \"1\"\n } else {\n backdrop.style.opacity = \"0\"\n backdrop.style.visibility = \"hidden\"\n backdrop.style.clipPath = \"\"\n }\n }\n\n const overlay: Overlay = {\n onDismiss: null,\n show(nextTarget, showOpts) {\n const wasVisible = target !== null\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 if (!wasVisible) {\n box.style.opacity = \"0\"\n box.style.visibility = \"visible\"\n box.offsetHeight // eslint-disable-line @typescript-eslint/no-unused-expressions\n }\n box.style.opacity = \"1\"\n attach()\n },\n hide() {\n target = null\n box.style.opacity = \"0\"\n backdrop.style.opacity = \"0\"\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.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 \"../../shared/entities\"\nimport type { RealtimeChannel } from \"../../cloud/types\"\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 type { PinLayer } from \"./pin-layer\"\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 channel?: RealtimeChannel | null\n pinLayer?: PinLayer | null\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.shadowRoot })\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 const demoted = current.ref.kind === \"primitive\"\n overlay.show(current.element, {\n color: KIND_STYLE[current.ref.kind].color,\n ...(demoted && { borderStyle: \"dashed\", fillOpacity: 0.04 }),\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 channel: options.channel ?? null,\n pinLayer: options.pinLayer ?? null,\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 {\n ReportType,\n ReportSeverity,\n ReportStatus,\n} from \"@uidex/api-client\"\n\nexport const TYPE_LABELS: Record<ReportType, string> = {\n bug: \"Bug\",\n request: \"Request\",\n suggestion: \"Suggestion\",\n}\n\nexport const SEVERITY_LABELS: Record<ReportSeverity, string> = {\n critical: \"Critical\",\n high: \"High\",\n medium: \"Medium\",\n low: \"Low\",\n}\n\nexport const STATUS_LABELS: Record<ReportStatus, string> = {\n open: \"Open\",\n triaged: \"Triaged\",\n in_progress: \"In Progress\",\n resolved: \"Resolved\",\n closed: \"Closed\",\n}\n\nexport function authorLabel(rec: {\n reporter?: { name?: string; email?: string } | null\n reporterName?: string\n reporterEmail?: string\n}): string {\n const name = rec.reporter?.name ?? rec.reporterName\n const email = rec.reporter?.email ?? rec.reporterEmail\n return name?.trim() || email?.trim() || \"Anonymous\"\n}\n\nexport function relativeTime(iso: string): string {\n const ms = Date.parse(iso)\n if (!Number.isFinite(ms)) return \"\"\n const s = Math.floor((Date.now() - ms) / 1000)\n if (s < 60) return \"just now\"\n const m = Math.floor(s / 60)\n if (m < 60) return `${m}m ago`\n const h = Math.floor(m / 60)\n if (h < 24) return `${h}h ago`\n const d = Math.floor(h / 24)\n if (d < 30) return `${d}d ago`\n return `${Math.floor(d / 30)}mo ago`\n}\n","import type { EntityKind } from \"../../shared/entities\"\nimport type {\n CloudAdapter,\n PinRecord,\n RealtimeChannel,\n} from \"../../cloud/types\"\nimport { authorLabel, relativeTime } from \"../report/constants\"\nimport {\n Bug,\n CircleHelp,\n Lightbulb,\n MessageSquarePlus,\n Sparkles,\n StickyNote,\n createElement as createLucideElement,\n type IconNode,\n} from \"lucide\"\nimport { UIDEX_ATTR_TO_KIND, Z_PIN_LAYER } from \"./constants\"\nimport { resolveEntityElement } from \"./inspector\"\n\nconst KNOWN_KINDS = new Set<string>(UIDEX_ATTR_TO_KIND.map(([, k]) => k))\n\nexport function parseComponentRef(componentId: string): {\n kind: EntityKind\n id: string\n} {\n const colon = componentId.indexOf(\":\")\n if (colon > 0) {\n const maybeKind = componentId.slice(0, colon)\n if (KNOWN_KINDS.has(maybeKind)) {\n return { kind: maybeKind as EntityKind, id: componentId.slice(colon + 1) }\n }\n }\n return { kind: \"element\", id: componentId }\n}\n\nexport type PinMatchMode = \"route\" | \"pathname\" | \"component\"\n\nexport interface PinFilter {\n branch: string | null\n commit: string | null\n}\n\nexport interface PinFilterState extends PinFilter {\n readonly commits: readonly string[]\n readonly commitIndex: number\n}\n\nexport interface PinLayer {\n setPins(pins: readonly PinRecord[]): void\n addPin(pin: PinRecord): void\n removePin(reportId: string): void\n clear(): void\n getPinsForElement(componentId: string): readonly PinRecord[]\n getAllPinsForElement(componentId: string): readonly PinRecord[]\n getAllPins(): readonly PinRecord[]\n attachChannel(channel: RealtimeChannel): () => void\n attachCloud(opts: AttachCloudOpts): () => void\n refresh(): Promise<void>\n\n readonly filterState: PinFilterState\n setFilter(filter: Partial<PinFilter>): void\n nextCommit(): void\n prevCommit(): void\n onFilterChange(cb: () => void): () => void\n\n readonly visible: boolean\n setVisible(visible: boolean): void\n\n destroy(): void\n}\n\nexport interface AttachCloudOpts {\n cloud: Pick<CloudAdapter, \"pins\">\n channel?: RealtimeChannel | null\n getRoute: () => string\n getPathname: () => string\n getVisibleEntities: () => string[]\n getMatchMode: () => PinMatchMode\n onError?: (err: unknown) => void\n}\n\nexport interface PinLayerOptions {\n container: Element | ShadowRoot\n onOpenPinDetail?: (componentId: string, reportId: string) => void\n onHoverPin?: (anchor: HTMLElement | null, componentId: string | null) => void\n onPinsChanged?: () => void\n currentBranch?: string | null\n}\n\ninterface IndicatorState {\n componentId: string\n wrap: HTMLElement\n el: HTMLElement\n iconEl: HTMLElement\n badgeEl: HTMLElement\n contentEl: HTMLElement\n anchor: HTMLElement | null\n pinIndex: number\n expanded: boolean\n lastType: string | null\n}\n\n// ── Visual constants ──\n\nconst DOT = 28\nconst BORDER = 2\nconst ICON = 16\nconst PAD = 10\nconst CARD_W = 280\nconst LINE_H = 17 // 12px * 1.4\nconst HEADER_H = 16\nconst BODY_MT = 2\nconst CYCLE_H = 18 // 10px font + 4px margin-top\nconst CARD_H = PAD + HEADER_H + BODY_MT + LINE_H * 2 + CYCLE_H + PAD\nconst INSET = 4\n\nconst TYPE_ICON: Record<string, IconNode> = {\n bug: Bug,\n request: MessageSquarePlus,\n suggestion: Lightbulb,\n feature: Lightbulb,\n improvement: Sparkles,\n question: CircleHelp,\n note: StickyNote,\n}\n\nconst TYPE_COLOR: Record<string, { bg: string; fg: string }> = {\n bug: {\n bg: \"color-mix(in srgb, var(--destructive) 10%, var(--background))\",\n fg: \"var(--destructive-foreground)\",\n },\n request: {\n bg: \"color-mix(in srgb, var(--info) 10%, var(--background))\",\n fg: \"var(--info-foreground)\",\n },\n suggestion: {\n bg: \"color-mix(in srgb, var(--warning) 10%, var(--background))\",\n fg: \"var(--warning-foreground)\",\n },\n feature: { bg: \"var(--secondary)\", fg: \"var(--secondary-foreground)\" },\n improvement: {\n bg: \"color-mix(in srgb, var(--info) 10%, var(--background))\",\n fg: \"var(--info-foreground)\",\n },\n question: {\n bg: \"color-mix(in srgb, var(--warning) 10%, var(--background))\",\n fg: \"var(--warning-foreground)\",\n },\n note: {\n bg: \"color-mix(in srgb, var(--primary) 10%, var(--background))\",\n fg: \"var(--primary)\",\n },\n}\n\nconst FALLBACK_COLOR = {\n bg: \"var(--secondary)\",\n fg: \"var(--secondary-foreground)\",\n}\n\nfunction typeColors(t: string) {\n return TYPE_COLOR[t] ?? FALLBACK_COLOR\n}\nfunction typeIcon(t: string) {\n return TYPE_ICON[t] ?? StickyNote\n}\n\n// ── Transition tokens ──\n\nconst EASE_OUT = \"cubic-bezier(0.16, 1, 0.3, 1)\"\nconst DUR_FADE = 120\nconst DUR_EXPAND = 250\nconst T_FADE = `opacity ${DUR_FADE}ms ease`\n\n// ── Factory ──\n\nexport function createPinLayer(options: PinLayerOptions): PinLayer {\n const { container, onOpenPinDetail, onHoverPin, onPinsChanged } = options\n\n const layerEl = document.createElement(\"div\")\n layerEl.setAttribute(\"data-uidex-pin-layer\", \"\")\n Object.assign(layerEl.style, {\n position: \"fixed\",\n inset: \"0\",\n zIndex: String(Z_PIN_LAYER),\n pointerEvents: \"none\",\n })\n container.appendChild(layerEl)\n\n let layerVisible = true\n const allPins: PinRecord[] = []\n const seenIds = new Set<string>()\n const byComp = new Map<string, PinRecord[]>()\n const indicators = new Map<string, IndicatorState>()\n\n let filter: PinFilter = { branch: null, commit: null }\n let commits: string[] = []\n let commitIndex = -1\n const filterCbs = new Set<() => void>()\n const notifyFilter = () => {\n for (const cb of filterCbs) cb()\n }\n\n // ── Filter helpers ──\n\n const rebuildFiltered = (): void => {\n byComp.clear()\n for (const p of allPins) {\n const cid = p.entity ?? \"\"\n const list = byComp.get(cid)\n if (list) list.push(p)\n else byComp.set(cid, [p])\n }\n }\n\n const rerender = (): void => {\n commits = []\n commitIndex = -1\n rebuildFiltered()\n for (const id of Array.from(indicators.keys())) {\n if (!byComp.has(id)) removeIndicator(id)\n }\n for (const id of byComp.keys()) renderIndicator(id)\n notifyFilter()\n onPinsChanged?.()\n }\n\n // ── Scroll / resize / mutation ──\n\n let rafId: number | null = null\n let winAttached = false\n let obs: MutationObserver | null = null\n\n const schedulePos = (): void => {\n if (rafId !== null) return\n rafId =\n typeof requestAnimationFrame === \"function\"\n ? requestAnimationFrame(() => {\n rafId = null\n posAll()\n })\n : (setTimeout(() => {\n rafId = null\n posAll()\n }, 0) as unknown as number)\n }\n const cancelPos = (): 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 const onScroll = () => schedulePos()\n const onResize = () => schedulePos()\n\n const attachWin = (): void => {\n if (winAttached) return\n winAttached = true\n window.addEventListener(\"scroll\", onScroll, {\n capture: true,\n passive: true,\n })\n window.addEventListener(\"resize\", onResize)\n }\n const detachWin = (): void => {\n if (!winAttached) return\n winAttached = false\n window.removeEventListener(\"scroll\", onScroll, {\n capture: true,\n } as EventListenerOptions)\n window.removeEventListener(\"resize\", onResize)\n cancelPos()\n }\n const attachObs = (): void => {\n if (obs || typeof MutationObserver === \"undefined\") return\n obs = new MutationObserver((recs) => {\n for (const r of recs) {\n if (\n r.type === \"childList\" &&\n (r.addedNodes.length || r.removedNodes.length)\n ) {\n refreshAnchors()\n return\n }\n }\n })\n obs.observe(document.body, { childList: true, subtree: true })\n }\n const detachObs = (): void => {\n obs?.disconnect()\n obs = null\n }\n const refreshAnchors = (): void => {\n let changed = false\n for (const s of indicators.values()) {\n if (s.anchor && s.anchor.isConnected) continue\n s.anchor = resolveEntityElement(parseComponentRef(s.componentId))\n changed = true\n }\n if (changed) schedulePos()\n }\n\n // ── Expand / collapse ──\n\n const expand = (st: IndicatorState): void => {\n if (st.expanded) return\n st.expanded = true\n fillContent(st)\n\n st.wrap.style.zIndex = \"1\"\n\n // 1) Icon fades out immediately\n st.iconEl.style.transition = T_FADE\n st.iconEl.style.opacity = \"0\"\n st.badgeEl.style.visibility = \"hidden\"\n\n // 2) Element expands after icon fades\n st.el.style.transition = `width ${DUR_EXPAND}ms ${EASE_OUT} ${DUR_FADE}ms, height ${DUR_EXPAND}ms ${EASE_OUT} ${DUR_FADE}ms`\n st.el.style.width = `${CARD_W}px`\n st.el.style.height = `${CARD_H}px`\n\n // 3) Content fades in after expand\n st.contentEl.style.transition = `opacity ${DUR_FADE}ms ease ${DUR_FADE + DUR_EXPAND}ms`\n st.contentEl.style.opacity = \"1\"\n\n if (st.anchor) onHoverPin?.(st.anchor, st.componentId)\n }\n\n const collapse = (st: IndicatorState): void => {\n if (!st.expanded) return\n st.expanded = false\n\n // 1) Content fades out immediately\n st.contentEl.style.transition = T_FADE\n st.contentEl.style.opacity = \"0\"\n\n // 2) Element shrinks after content fades\n st.el.style.transition = `width ${DUR_EXPAND}ms ${EASE_OUT} ${DUR_FADE}ms, height ${DUR_EXPAND}ms ${EASE_OUT} ${DUR_FADE}ms`\n st.el.style.width = `${DOT}px`\n st.el.style.height = `${DOT}px`\n\n // 3) Icon fades in after shrink; clear z-index once done\n st.iconEl.style.transition = `opacity ${DUR_FADE}ms ease ${DUR_FADE + DUR_EXPAND}ms`\n st.iconEl.style.opacity = \"1\"\n st.badgeEl.style.visibility = \"\"\n st.iconEl.addEventListener(\n \"transitionend\",\n () => {\n if (!st.expanded) st.wrap.style.zIndex = \"\"\n },\n { once: true }\n )\n\n onHoverPin?.(null, null)\n }\n\n const fillContent = (st: IndicatorState): void => {\n const pins = byComp.get(st.componentId)\n if (!pins?.length) return\n const idx = Math.max(0, Math.min(st.pinIndex, pins.length - 1))\n st.pinIndex = idx\n const pin = pins[idx]\n\n st.contentEl.innerHTML = \"\"\n\n const hdr = document.createElement(\"div\")\n hdr.style.display = \"flex\"\n hdr.style.alignItems = \"baseline\"\n hdr.style.gap = \"6px\"\n\n const nm = document.createElement(\"span\")\n nm.style.fontWeight = \"600\"\n nm.style.fontSize = \"12px\"\n nm.textContent = authorLabel(pin)\n hdr.appendChild(nm)\n\n const tm = document.createElement(\"span\")\n tm.style.fontSize = \"11px\"\n tm.style.opacity = \"0.75\"\n tm.textContent = relativeTime(pin.createdAt)\n hdr.appendChild(tm)\n st.contentEl.appendChild(hdr)\n\n const body = document.createElement(\"div\")\n Object.assign(body.style, {\n fontSize: \"12px\",\n lineHeight: \"1.4\",\n marginTop: \"2px\",\n whiteSpace: \"pre-wrap\",\n overflow: \"hidden\",\n display: \"-webkit-box\",\n })\n body.style.setProperty(\"-webkit-line-clamp\", \"2\")\n body.style.setProperty(\"-webkit-box-orient\", \"vertical\")\n body.textContent = pin.body\n st.contentEl.appendChild(body)\n\n const ctr = document.createElement(\"div\")\n Object.assign(ctr.style, {\n fontSize: \"10px\",\n opacity: \"0.5\",\n marginTop: \"4px\",\n })\n ctr.textContent =\n pins.length > 1\n ? `${idx + 1} of ${pins.length} · right-click to cycle`\n : \"click to open\"\n st.contentEl.appendChild(ctr)\n }\n\n // ── Build indicator ──\n\n const buildIndicator = (componentId: string): IndicatorState => {\n // Wrapper — fixed-positioned, overflow visible so badge isn't clipped\n const wrap = document.createElement(\"div\")\n wrap.setAttribute(\"data-uidex-pin-wrap\", \"\")\n Object.assign(wrap.style, {\n position: \"fixed\",\n display: \"none\",\n pointerEvents: \"none\",\n })\n\n // Main element — overflow hidden for expand/collapse clipping\n const el = document.createElement(\"button\")\n el.type = \"button\"\n el.setAttribute(\"data-uidex-pin\", \"\")\n el.setAttribute(\"data-uidex-pin-component\", componentId)\n el.setAttribute(\"aria-label\", `Open report for ${componentId}`)\n Object.assign(el.style, {\n position: \"relative\",\n width: `${DOT}px`,\n height: `${DOT}px`,\n borderRadius: `${DOT / 2}px`,\n border: `${BORDER}px solid var(--background)`,\n padding: \"0\",\n margin: \"0\",\n cursor: \"pointer\",\n pointerEvents: \"auto\",\n overflow: \"hidden\",\n boxShadow: \"0 2px 8px rgba(0,0,0,0.15), 0 0 0 1px rgba(0,0,0,0.05)\",\n fontFamily: \"var(--font-sans)\",\n textAlign: \"left\" as const,\n float: \"right\",\n })\n wrap.appendChild(el)\n\n // Icon — centered in collapsed dot, fades out on expand\n const iconEl = document.createElement(\"span\")\n iconEl.setAttribute(\"data-uidex-pin-icon\", \"\")\n Object.assign(iconEl.style, {\n position: \"absolute\",\n inset: \"0\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n })\n el.appendChild(iconEl)\n\n // Badge — on wrapper, outside el's overflow\n const badgeEl = document.createElement(\"span\")\n badgeEl.setAttribute(\"data-uidex-pin-badge\", \"\")\n Object.assign(badgeEl.style, {\n position: \"absolute\",\n top: \"-4px\",\n right: \"-4px\",\n minWidth: \"14px\",\n height: \"14px\",\n borderRadius: \"999px\",\n background: \"var(--foreground)\",\n color: \"var(--background)\",\n fontSize: \"9px\",\n fontWeight: \"600\",\n display: \"none\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"0 3px\",\n lineHeight: \"1\",\n zIndex: \"2\",\n pointerEvents: \"none\",\n })\n wrap.appendChild(badgeEl)\n\n // Content — fills the element, hidden when collapsed\n const contentEl = document.createElement(\"div\")\n contentEl.setAttribute(\"data-uidex-pin-content\", \"\")\n Object.assign(contentEl.style, {\n position: \"absolute\",\n top: `${PAD}px`,\n left: `${PAD}px`,\n right: `${PAD}px`,\n opacity: \"0\",\n minWidth: \"0\",\n })\n el.appendChild(contentEl)\n\n const st: IndicatorState = {\n componentId,\n wrap,\n el,\n iconEl,\n badgeEl,\n contentEl,\n anchor: null,\n pinIndex: 0,\n expanded: false,\n lastType: null,\n }\n\n el.addEventListener(\"mouseenter\", () => expand(st))\n el.addEventListener(\"mouseleave\", () => collapse(st))\n el.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n e.preventDefault()\n const pins = byComp.get(componentId)\n const pin = pins?.[st.pinIndex]\n if (pin) onOpenPinDetail?.(componentId, pin.id)\n })\n el.addEventListener(\"contextmenu\", (e) => {\n e.stopPropagation()\n e.preventDefault()\n const pins = byComp.get(componentId)\n if (!pins || pins.length <= 1) return\n st.pinIndex = (st.pinIndex + 1) % pins.length\n applyStyle(st)\n if (st.expanded) fillContent(st)\n })\n\n layerEl.appendChild(wrap)\n return st\n }\n\n // ── Style & direction ──\n\n const applyStyle = (st: IndicatorState): void => {\n const pins = byComp.get(st.componentId)\n if (!pins?.length) return\n const idx = Math.max(0, Math.min(st.pinIndex, pins.length - 1))\n st.pinIndex = idx\n const pin = pins[idx]\n const c = typeColors(pin.type)\n\n st.el.style.backgroundColor = \"var(--background)\"\n st.el.style.backgroundImage = `linear-gradient(${c.bg}, ${c.bg})`\n st.el.style.color = c.fg\n\n if (st.lastType !== pin.type) {\n st.lastType = pin.type\n st.iconEl.innerHTML = \"\"\n const svg = createLucideElement(typeIcon(pin.type))\n svg.setAttribute(\"width\", String(ICON))\n svg.setAttribute(\"height\", String(ICON))\n st.iconEl.appendChild(svg)\n }\n\n if (pins.length > 1) {\n st.badgeEl.textContent = String(pins.length)\n st.badgeEl.style.display = \"flex\"\n } else {\n st.badgeEl.textContent = \"\"\n st.badgeEl.style.display = \"none\"\n }\n }\n\n // ── Positioning ──\n\n const posIndicator = (st: IndicatorState): void => {\n const a = st.anchor\n if (!a || !a.isConnected) {\n st.wrap.style.display = \"none\"\n return\n }\n const r = a.getBoundingClientRect()\n if (r.width === 0 && r.height === 0) {\n st.wrap.style.display = \"none\"\n return\n }\n\n // Inset at top-right of target bounding box, anchored from right so it grows left\n const vw = window.innerWidth\n st.wrap.style.top = `${r.top + INSET}px`\n st.wrap.style.right = `${vw - r.right + INSET}px`\n\n st.wrap.style.display = \"\"\n }\n\n const posAll = () => {\n for (const st of indicators.values()) posIndicator(st)\n }\n\n const renderIndicator = (componentId: string): void => {\n const pins = byComp.get(componentId)\n if (!pins?.length) {\n removeIndicator(componentId)\n return\n }\n let st = indicators.get(componentId)\n if (!st) {\n st = buildIndicator(componentId)\n indicators.set(componentId, st)\n attachWin()\n attachObs()\n }\n if (st.pinIndex >= pins.length) st.pinIndex = 0\n applyStyle(st)\n st.anchor = resolveEntityElement(parseComponentRef(componentId))\n posIndicator(st)\n }\n\n const removeIndicator = (componentId: string): void => {\n const st = indicators.get(componentId)\n if (!st) return\n st.wrap.remove()\n indicators.delete(componentId)\n if (indicators.size === 0) {\n detachWin()\n detachObs()\n }\n }\n\n // ── Ingest ──\n\n const ingest = (pin: PinRecord): boolean => {\n const cid = pin.entity ?? \"\"\n if (!cid || seenIds.has(pin.id)) return false\n seenIds.add(pin.id)\n allPins.push(pin)\n return true\n }\n\n // ── Public API ──\n\n let activeRefresh: (() => Promise<void>) | null = null\n\n const layer: PinLayer = {\n setPins(pins) {\n allPins.length = 0\n seenIds.clear()\n for (const p of pins) ingest(p)\n rerender()\n },\n addPin(pin) {\n if (!ingest(pin)) return\n rerender()\n },\n removePin(reportId) {\n const i = allPins.findIndex((p) => p.id === reportId)\n if (i === -1) return\n allPins.splice(i, 1)\n seenIds.delete(reportId)\n rerender()\n },\n clear() {\n allPins.length = 0\n seenIds.clear()\n byComp.clear()\n for (const id of Array.from(indicators.keys())) removeIndicator(id)\n commits = []\n commitIndex = -1\n notifyFilter()\n },\n getPinsForElement: (id) => byComp.get(id) ?? [],\n getAllPinsForElement: (id) =>\n allPins.filter((p) => (p.entity ?? \"\") === id),\n getAllPins: () => allPins.slice(),\n attachChannel(channel) {\n return channel.onPin((pin: PinRecord) => {\n layer.addPin(pin)\n })\n },\n attachCloud(opts) {\n const offCh = opts.channel ? layer.attachChannel(opts.channel) : () => {}\n const fetch = async (): Promise<void> => {\n try {\n const mode = opts.getMatchMode()\n let params: { route?: string; entities?: string }\n if (mode === \"component\") {\n params = { entities: opts.getVisibleEntities().join(\",\") }\n } else if (mode === \"pathname\") {\n params = { route: opts.getPathname() }\n } else {\n params = { route: opts.getRoute() }\n }\n layer.setPins(await opts.cloud.pins.list(params))\n } catch (err) {\n opts.onError?.(err)\n }\n }\n void fetch()\n activeRefresh = fetch\n return () => {\n offCh()\n if (activeRefresh === fetch) activeRefresh = null\n }\n },\n async refresh() {\n if (activeRefresh) await activeRefresh()\n },\n\n get filterState(): PinFilterState {\n return {\n branch: filter.branch,\n commit: filter.commit,\n commits,\n commitIndex,\n }\n },\n setFilter(next) {\n filter = {\n branch: next.branch !== undefined ? next.branch : filter.branch,\n commit: next.commit !== undefined ? next.commit : filter.commit,\n }\n rerender()\n },\n nextCommit() {\n if (!commits.length) return\n commitIndex = commitIndex >= commits.length - 1 ? -1 : commitIndex + 1\n filter = {\n ...filter,\n commit: commitIndex === -1 ? null : commits[commitIndex],\n }\n rerender()\n },\n prevCommit() {\n if (!commits.length) return\n commitIndex = commitIndex <= -1 ? commits.length - 1 : commitIndex - 1\n filter = {\n ...filter,\n commit: commitIndex === -1 ? null : commits[commitIndex],\n }\n rerender()\n },\n onFilterChange(cb) {\n filterCbs.add(cb)\n return () => {\n filterCbs.delete(cb)\n }\n },\n get visible() {\n return layerVisible\n },\n setVisible(v) {\n if (layerVisible === v) return\n layerVisible = v\n layerEl.style.display = v ? \"\" : \"none\"\n if (v) posAll()\n notifyFilter()\n },\n destroy() {\n layer.clear()\n detachWin()\n detachObs()\n layerEl.remove()\n activeRefresh = null\n filterCbs.clear()\n },\n }\n\n return layer\n}\n","import type { CloudAdapter } from \"../../../cloud/types\"\nimport type { EntityKind, EntityRef, Registry } from \"../../../shared/entities\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport type { EscapeHandler } from \"../../surface/keys\"\nimport type { OverlayShowOptions } from \"../../surface/overlay\"\nimport type { UserIdentity } from \"../../../shared/user\"\nimport type { Router } from \"./router\"\nimport type { ViewSurface } from \"./surface\"\n\nexport type { CloudAdapter } from \"../../../cloud/types\"\nexport type {\n ReportPayload,\n ReportResult,\n IngestConfig,\n} from \"@uidex/api-client\"\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 subtitle?: string | (() => string)\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 /**\n * Local user identity from `createUidex`'s `user` option, or `null` when\n * unconfigured. Views that auto-populate attribution (e.g. report\n * `reporterName`) read this here instead of touching the session store.\n */\n user: UserIdentity | null\n views: Router\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 /** 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 pushEscapeLayer(handler: EscapeHandler): Cleanup\n /** Called after a report submission succeeds, to refresh pins etc. */\n onAfterSubmit?: () => void\n /** Return the current route pattern. Falls back to `location.pathname`. */\n getRoute?: () => string\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 /** Direct render for integration adapters (React, etc.). Mutually exclusive with surface renderers. */\n render?: (ctx: ViewContext, root: HTMLElement) => Cleanup | void\n parent?: (ref: EntityRef | null) => ViewStackEntry | null\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 \"../../../shared/entities\"\nimport type { SessionStore } from \"../../session\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport { ViewValidationError, type View } from \"./types\"\n\nexport interface RouteMatch {\n view: View\n priority: number\n}\n\nexport interface Router {\n resolve(ref: EntityRef): RouteMatch | null\n add(view: View, priority?: number): void\n remove(id: string): void\n get(id: string): View | undefined\n list(): readonly View[]\n buildStack(entry: ViewStackEntry): ViewStackEntry[]\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 CreateRouterOptions {\n session: SessionStore\n}\n\nexport function createRouter(options: CreateRouterOptions): Router {\n const FAVORITES_KEY = \"uidex:favorites\"\n const MAX_RECENTS = 8\n const entries: Array<{ view: View; priority: number }> = []\n const recentRefs: EntityRef[] = []\n const favoriteRefs: EntityRef[] = []\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 resolve(ref: EntityRef): RouteMatch | null {\n let best: RouteMatch | null = null\n for (const e of entries) {\n if (!e.view.matches?.(ref)) continue\n if (!best || e.priority > best.priority) {\n best = { view: e.view, priority: e.priority }\n }\n }\n return best\n }\n\n function add(view: View, priority = 0): void {\n validate(view)\n const idx = entries.findIndex((e) => e.view.id === view.id)\n if (idx >= 0) entries.splice(idx, 1)\n entries.push({ view, priority })\n }\n\n function remove(id: string): void {\n const idx = entries.findIndex((e) => e.view.id === id)\n if (idx >= 0) entries.splice(idx, 1)\n const { stack } = options.session.nav.getState()\n const top = stack[stack.length - 1] ?? null\n if (top?.id === id) options.session.mode.transition.dismiss()\n }\n\n function get(id: string): View | undefined {\n return entries.find((e) => e.view.id === id)?.view\n }\n\n function list(): readonly View[] {\n return entries.map((e) => e.view)\n }\n\n function buildStack(entry: ViewStackEntry): ViewStackEntry[] {\n const stack: ViewStackEntry[] = [entry]\n let current = entry\n for (let depth = 0; depth < 10; depth++) {\n const view = get(current.id)\n if (!view?.parent) break\n const parentEntry = view.parent(current.ref)\n if (!parentEntry) break\n stack.unshift(parentEntry)\n current = parentEntry\n }\n return stack\n }\n\n function navigate(ref: EntityRef): void {\n const match = resolve(ref)\n if (!match) return\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 options.session.select(ref)\n const entry: ViewStackEntry = { id: match.view.id, ref }\n const { mode } = options.session.mode.getState()\n if (mode === \"idle\" || mode === \"inspecting\") {\n options.session.mode.transition.enterViewing(buildStack(entry))\n } else {\n options.session.mode.transition.pushView(entry)\n }\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 resolve,\n add,\n remove,\n get,\n list,\n buildStack,\n navigate,\n recents,\n favorites,\n toggleFavorite,\n isFavorite,\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","export { html, svg, render, nothing, type TemplateResult } from \"lit-html\"\nexport { repeat } from \"lit-html/directives/repeat.js\"\nexport { ref, createRef } from \"lit-html/directives/ref.js\"\nexport { classMap } from \"lit-html/directives/class-map.js\"\nexport { spreadProps } from \"./lit-spread.js\"\nexport { icon } from \"./lit-icon.js\"\n","import type { Cleanup } from \"./cleanup\"\n\ntype Props = Record<string, unknown>\n\nexport function applyProps(node: Element, props: Props): Cleanup {\n const removers: Array<() => void> = []\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 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 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(\n (node as HTMLElement).style,\n rawValue as Record<string, string>\n )\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 as HTMLElement).tabIndex = Number(rawValue)\n continue\n }\n node.setAttribute(key, String(rawValue))\n }\n return () => removers.forEach((fn) => fn())\n}\n","import { noChange } from \"lit-html\"\nimport {\n Directive,\n directive,\n type PartInfo,\n PartType,\n} from \"lit-html/directive.js\"\nimport { createElement, type IconNode } from \"lucide\"\n\nclass LucideIconDirective extends Directive {\n private _icon: IconNode | undefined\n private _class: string | undefined\n private _el: SVGSVGElement | undefined\n\n constructor(partInfo: PartInfo) {\n super(partInfo)\n if (partInfo.type !== PartType.CHILD) {\n throw new Error(\"icon() can only be used in a child position\")\n }\n }\n\n override update(_part: unknown, [iconNode, className]: [IconNode, string?]) {\n if (iconNode === this._icon && className === this._class) return noChange\n this._icon = iconNode\n this._class = className\n this._el = createElement(iconNode) as unknown as SVGSVGElement\n this._el.setAttribute(\"aria-hidden\", \"true\")\n if (className) this._el.setAttribute(\"class\", className)\n return this._el\n }\n\n render(iconNode: IconNode, className?: string) {\n const el = createElement(iconNode) as unknown as SVGSVGElement\n el.setAttribute(\"aria-hidden\", \"true\")\n if (className) el.setAttribute(\"class\", className)\n return el\n }\n}\n\nexport const icon = directive(LucideIconDirective)\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 { html, type TemplateResult } from \"../internal/lit\"\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\n// ── Imperative (legacy) — returns HTMLSpanElement ──────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\nexport function badgeTpl(\n content: TemplateResult | string,\n options: { variant?: BadgeVariant; size?: BadgeSize; class?: ClassValue } = {}\n): TemplateResult {\n const { variant, size, class: extra } = options\n return html`\n <span class=${cn(badgeVariants({ variant, size }), extra)} data-slot=\"badge\"\n >${content}</span\n >\n `\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../../internal/el\"\nimport { createBadge, badgeVariants } from \"../../ui/badge\"\nimport { html, type TemplateResult } from \"../../internal/lit\"\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\n// ── Imperative (legacy) — returns HTMLElement ─────────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\nexport function chipTpl(\n content: TemplateResult | string,\n className?: ClassValue\n): TemplateResult {\n return html`<span class=${cn(CHIP_CLASS, className)}>${content}</span>`\n}\n\nexport function pillItemTpl(\n text: string,\n className?: ClassValue\n): TemplateResult {\n return html`\n <li class=\"list-none\">\n <span\n class=${cn(\n badgeVariants({ variant: \"secondary\", size: \"default\" }),\n className\n )}\n data-slot=\"badge\"\n >${text}</span\n >\n </li>\n `\n}\n","import { createElement as createLucideElement } from \"lucide\"\nimport { KIND_STYLE, type EntityKind } from \"../../../shared/entities\"\nimport { cn } from \"../../internal/cn\"\nimport { html, type TemplateResult } from \"../../internal/lit\"\nimport { icon } from \"../../internal/lit-icon\"\nimport { createBadge, badgeVariants } from \"../../ui/badge\"\nimport { createIconTile, iconTileTpl } from \"./icon-tile\"\n\n// ── Imperative (legacy) — returns HTMLElement / SVGElement ─────────\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 iconEl = createLucideElement(style.icon)\n iconEl.setAttribute(\"aria-hidden\", \"true\")\n return createBadge(\n {\n class: style.chip,\n attrs: { \"data-uidex-kind-badge\": kind },\n },\n [iconEl, style.label]\n )\n}\n\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\nexport function kindIconTpl(kind: EntityKind): TemplateResult {\n const style = KIND_STYLE[kind]\n return html`${icon(style.icon, cn(\"h-4 w-4 shrink-0\", style.tone))}`\n}\n\nexport function kindIconTileTpl(kind: EntityKind): TemplateResult {\n const style = KIND_STYLE[kind]\n return iconTileTpl(\n html`${icon(style.icon, cn(\"size-3.5 opacity-80\", style.tone))}`,\n { toneClass: style.chip }\n )\n}\n\nexport function kindBadgeTpl(kind: EntityKind): TemplateResult {\n const style = KIND_STYLE[kind]\n return html`\n <span\n class=${cn(badgeVariants({}), style.chip)}\n data-slot=\"badge\"\n data-uidex-kind-badge=${kind}\n >${icon(style.icon)} ${style.label}</span\n >\n `\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport { html, type TemplateResult } from \"../../internal/lit\"\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\n// ── Imperative (legacy) — returns HTMLElement ─────────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\n/**\n * Template version of the icon tile. Callers pass a properly-sized\n * `TemplateResult` (e.g. from the `icon` directive) — no SVG class\n * stripping needed.\n */\nexport function iconTileTpl(\n inner: TemplateResult,\n options: Pick<\n IconTileOptions,\n \"extraClass\" | \"toneClass\" | \"tint\" | \"tintAlpha\"\n > = {}\n): TemplateResult {\n const tintStyle =\n options.tint && !options.toneClass\n ? `background-color: color-mix(in srgb, ${options.tint} ${options.tintAlpha ?? 15}%, transparent)`\n : \"\"\n return html`\n <span\n class=${cn(TILE_CLASS, options.toneClass, options.extraClass)}\n data-slot=\"icon-tile\"\n aria-hidden=\"true\"\n style=${tintStyle}\n >${inner}</span\n >\n `\n}\n","import { displayName, KIND_STYLE, type Entity } from \"../../../shared/entities\"\nimport { el } from \"../../internal/el\"\nimport { html, nothing, type TemplateResult } from \"../../internal/lit\"\nimport { createChip } from \"./chip\"\nimport { renderKindIcon, kindIconTpl } from \"./kind-icon\"\n\nexport interface KindChipOptions {\n entity: Entity\n label?: string\n withKindName?: boolean\n node?: Element | null\n}\n\n// ── Imperative (legacy) — returns HTMLElement ─────────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\nexport function kindChipTpl(options: KindChipOptions): TemplateResult {\n const { entity, label, withKindName, node } = options\n const kind = entity.kind\n const style = KIND_STYLE[kind]\n const resolved = label ?? displayName(entity, node)\n const text = withKindName\n ? resolved\n ? `${style.label} · ${resolved}`\n : style.label\n : resolved\n return html`\n <span\n class=\"text-muted-foreground inline-flex items-center gap-1.5 text-xs font-medium\"\n data-uidex-kind-chip=${kind}\n >\n ${kindIconTpl(kind)}\n ${text ? html`<span class=\"truncate\">${text}</span>` : nothing}\n </span>\n `\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 { createNormalizer, type PropTypes } from \"@zag-js/types\"\n\nexport type DomProps = PropTypes<Record<string, unknown>>\n\nexport const normalizeProps = createNormalizer<DomProps>((v) => v)\n","import { applyProps } from \"../../internal/apply-props\"\nimport type { Cleanup } from \"../../internal/cleanup\"\n\nexport function spreadProps(\n node: HTMLElement,\n props: Record<string, unknown>\n): Cleanup {\n return applyProps(node, props)\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, applyProps(node, props))\n },\n cleanupAll() {\n for (const clean of map.values()) clean()\n map.clear()\n },\n }\n}\n","import {\n ArchiveX,\n Camera,\n ChevronDown,\n Copy,\n Highlighter,\n Inbox,\n MessageCircleWarning,\n StickyNote,\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 \"../../../shared/entities\"\nimport { bindArrowNav } from \"../../internal/arrow-nav\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport {\n html,\n render,\n nothing,\n createRef,\n ref,\n type TemplateResult,\n} from \"../../internal/lit\"\nimport { icon } from \"../../internal/lit-icon\"\nimport { filterEntities, filterIds, normalizeQuery } from \"../builder/filter\"\nimport type {\n DetailAction,\n DetailActionIcon,\n DetailActionRunContext,\n DetailSection,\n DetailSubtitle,\n DetailSurface,\n MetadataEntry,\n ResolvedFlowStep,\n} from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport { SECTION_LABELS } from \"../labels\"\nimport { badgeVariants } from \"../../ui/badge\"\nimport { entityLinkTpl } from \"../primitives/entity-link\"\nimport { iconTileTpl } from \"../primitives/icon-tile\"\nimport { kindBadgeTpl, kindIconTileTpl } from \"../primitives/kind-icon\"\nimport { rowTpl } from \"../primitives/row\"\nimport {\n captionTpl,\n descriptionTpl,\n headingTpl,\n mutedTextTpl,\n} from \"../primitives/text\"\nimport { commandShortcutTpl } from \"../../ui/kbd\"\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 \"archive-x\": ArchiveX,\n copy: Copy,\n camera: Camera,\n inbox: Inbox,\n \"message-circle-warning\": MessageCircleWarning,\n \"chevron-down\": ChevronDown,\n highlighter: Highlighter,\n \"sticky-note\": StickyNote,\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 subtitleTpl(subtitle: DetailSubtitle): TemplateResult {\n const text = subtitle.extra\n ? `${subtitle.rawId} · ${subtitle.extra}`\n : subtitle.rawId\n return html`<p\n class=${cn(\"text-muted-foreground font-mono text-xs\", \"px-2\")}\n data-uidex-detail-subtitle\n >\n ${text}\n </p>`\n}\n\nfunction notFoundTpl(ref: EntityRef): TemplateResult {\n return html`<p\n class=${cn(\"text-muted-foreground text-sm\", \"p-4\")}\n data-uidex-detail-missing\n >\n ${ref.kind}: ${ref.id} not found in registry\n </p>`\n}\n\n// ── Actions (imperative) ─────────────────────────────────────────────\n// Action buttons need mutable label elements (setLabel + revert timer),\n// so they stay imperative.\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 = el(\"button\", {\n class: cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"w-full cursor-pointer text-left font-normal\"\n ),\n attrs: {\n type: \"button\",\n \"data-slot\": \"list-item-button\",\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\n let leading: Node | undefined\n const iconNode = iconFor(action.icon)\n if (iconNode) {\n const svg = createLucideElement(iconNode)\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"class\", \"h-4 w-4 shrink-0\")\n const tile = el(\n \"span\",\n {\n class:\n \"inline-flex size-6 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground\",\n attrs: { \"data-slot\": \"icon-tile\", \"aria-hidden\": \"true\" },\n },\n [svg]\n )\n leading = tile\n }\n\n // Label span needs to be mutable for setLabel()\n const labelSpan = el(\"span\", {\n class: \"min-w-0 flex-1 truncate\",\n text: action.label,\n })\n if (leading) btn.append(leading)\n btn.append(labelSpan)\n if (action.hint) {\n const kbd = el(\"kbd\", {\n class:\n \"text-muted-foreground/70 ms-auto font-sans text-xs font-medium tracking-widest\",\n attrs: { \"data-slot\": \"command-shortcut\" },\n text: action.hint,\n })\n btn.append(kbd)\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 labelSpan.textContent = next\n if (durationMs && durationMs > 0) {\n revertTimer = setTimeout(() => {\n labelSpan.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.views.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\n// ── Section templates ────────────────────────────────────────────────\n\nfunction entityListItems(\n ctx: ViewContext,\n entities: readonly Entity[]\n): TemplateResult {\n return html`${entities.map((entity) => {\n const eRef: EntityRef = { kind: entity.kind, id: entityKey(entity) }\n return html`<li>\n ${entityLinkTpl({\n ctx,\n target: eRef,\n label: displayName(entity),\n leading: kindIconTileTpl(entity.kind),\n })}\n </li>`\n })}`\n}\n\nfunction composesListTpl(\n ctx: ViewContext,\n label: string,\n entities: readonly Entity[]\n): TemplateResult | null {\n if (entities.length === 0) return null\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-composes>\n ${headingTpl(label)}\n <ul class=\"flex flex-col\">\n ${entityListItems(ctx, entities)}\n </ul>\n </section>\n `\n}\n\nfunction usedByListTpl(\n ctx: ViewContext,\n label: string,\n entities: readonly Entity[]\n): TemplateResult | null {\n if (entities.length === 0) return null\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-used-by>\n ${headingTpl(label)}\n <ul class=\"flex flex-col\">\n ${entityListItems(ctx, entities)}\n </ul>\n </section>\n `\n}\n\nfunction flowListTpl(\n ctx: ViewContext,\n flows: readonly Flow[]\n): TemplateResult | null {\n if (flows.length === 0) return null\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-flows>\n ${headingTpl(SECTION_LABELS.flows)}\n <ul class=\"flex flex-col\">\n ${flows.map(\n (flow) =>\n html`<li>\n ${entityLinkTpl({\n ctx,\n target: { kind: \"flow\", id: flow.id },\n label: displayName(flow),\n leading: kindIconTileTpl(\"flow\"),\n })}\n </li>`\n )}\n </ul>\n </section>\n `\n}\n\nfunction touchesTpl(\n ctx: ViewContext,\n entities: readonly Entity[],\n query: string\n): TemplateResult {\n if (entities.length === 0) {\n return html`\n <section class=\"flex flex-col gap-2\" data-uidex-detail-touches>\n ${headingTpl(SECTION_LABELS.touches)}\n ${mutedTextTpl(query ? \"No matches\" : \"No entities touched\")}\n </section>\n `\n }\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-touches>\n ${headingTpl(SECTION_LABELS.touches)}\n <ul class=\"flex flex-col\">\n ${entities.map(\n (entity) =>\n html`<li>\n ${entityLinkTpl({\n ctx,\n target: { kind: entity.kind, id: entityKey(entity) },\n label: displayName(entity),\n leading: kindIconTileTpl(entity.kind),\n })}\n </li>`\n )}\n </ul>\n </section>\n `\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\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 stepsTpl(\n ctx: ViewContext,\n steps: readonly ResolvedFlowStep[],\n query: string\n): TemplateResult {\n if (steps.length === 0) {\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-steps>\n ${headingTpl(SECTION_LABELS.steps)}\n ${mutedTextTpl(query ? \"No matches\" : \"No steps recorded\")}\n </section>\n `\n }\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-steps>\n ${headingTpl(SECTION_LABELS.steps)}\n <ol class=\"flex flex-col gap-1.5\">\n ${steps.map(\n (step) => html`\n <li class=${STEP_ROW_CLASS} data-uidex-step=${String(step.ordinal)}>\n <span\n class=${STEP_ORDINAL_CLASS}\n data-uidex-step-ordinal\n aria-hidden=\"true\"\n >${String(step.ordinal)}</span\n >\n ${entityLinkTpl({\n ctx,\n target: { kind: step.entity.kind, id: entityKey(step.entity) },\n label: displayName(step.entity),\n leading: kindIconTileTpl(step.entity.kind),\n class: \"min-w-0 flex-1\",\n })}\n ${step.action\n ? html`<span\n class=${cn(\n badgeVariants({ variant: \"secondary\", size: \"sm\" }),\n \"font-mono\"\n )}\n data-slot=\"badge\"\n data-uidex-step-action=${step.action}\n >${step.action}</span\n >`\n : nothing}\n </li>\n `\n )}\n </ol>\n </section>\n `\n}\n\nfunction routePathsTpl(paths: readonly string[]): TemplateResult | null {\n if (paths.length === 0) return null\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-routes>\n ${headingTpl(SECTION_LABELS.routes)}\n <ul class=\"flex flex-col\">\n ${paths.map(\n (p) => html`\n <li\n class=${cn(LIST_ITEM_CLASS, LIST_ITEM_INTERACTIVE_CLASS)}\n data-uidex-detail-row=\"route\"\n tabindex=\"-1\"\n >\n ${rowTpl({\n leading: kindIconTileTpl(\"route\"),\n label: p,\n })}\n </li>\n `\n )}\n </ul>\n </section>\n `\n}\n\nfunction acceptanceChecklistTpl(items: readonly string[]): TemplateResult {\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-acceptance>\n ${headingTpl(SECTION_LABELS.acceptance)}\n <ul class=\"flex flex-col\">\n ${items.map((text, idx) => {\n const id = `uidex-acceptance-${idx}`\n const syncChecked = (e: Event): void => {\n const checkbox = e.currentTarget as HTMLInputElement\n const label = checkbox\n .closest(\"label\")\n ?.querySelector(\n \"[data-uidex-acceptance-label]\"\n ) as HTMLElement | null\n if (label) {\n label.classList.toggle(\"line-through\", checkbox.checked)\n label.classList.toggle(\"text-muted-foreground\", checkbox.checked)\n }\n }\n const onKeydown = (e: KeyboardEvent): void => {\n if (e.key === \"Enter\") {\n e.preventDefault()\n const checkbox = e.currentTarget as HTMLInputElement\n checkbox.checked = !checkbox.checked\n syncChecked(e)\n }\n }\n return html`\n <li>\n <label\n class=${cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"w-full cursor-pointer items-start\"\n )}\n for=${id}\n >\n <input\n type=\"checkbox\"\n id=${id}\n data-uidex-acceptance-item=${String(idx)}\n class=\"accent-accent mt-1 h-3.5 w-3.5 shrink-0 cursor-pointer focus:outline-none\"\n @change=${syncChecked}\n @keydown=${onKeydown}\n />\n <span\n class=\"min-w-0 flex-1 whitespace-normal break-words\"\n data-uidex-acceptance-label\n >${text}</span\n >\n </label>\n </li>\n `\n })}\n </ul>\n </section>\n `\n}\n\nfunction screenshotTpl(url: string): TemplateResult {\n return html`\n <section class=\"px-2\">\n ${headingTpl(\"Screenshot\")}\n <img\n src=${url}\n alt=\"Screenshot\"\n class=\"border-border mt-1 w-full rounded-md border\"\n />\n </section>\n `\n}\n\nfunction metadataListTpl(entries: readonly MetadataEntry[]): TemplateResult {\n return html`\n <div\n class=\"text-muted-foreground border-border mx-2 border-t pt-2 text-[11px] leading-relaxed\"\n >\n ${entries.map(\n (e) =>\n html`<div class=\"flex gap-1.5 truncate\">\n <span class=\"shrink-0\">${e.label}</span>\n <span class=\"truncate font-mono\">${e.value}</span>\n </div>`\n )}\n </div>\n `\n}\n\nfunction sectionTpl(\n section: DetailSection,\n ctx: ViewContext,\n query: string\n): TemplateResult | null {\n switch (section.id) {\n case \"description\": {\n if (!section.text) return null\n return html`<p\n class=${cn(\"text-foreground text-sm leading-relaxed\", \"px-2\")}\n data-uidex-detail-description\n >\n ${section.text}\n </p>`\n }\n case \"acceptance\": {\n if (section.items.length === 0) return null\n return acceptanceChecklistTpl(section.items)\n }\n case \"composes\":\n return composesListTpl(\n ctx,\n section.label,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities\n )\n case \"used-by\":\n return usedByListTpl(\n ctx,\n section.label,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities\n )\n case \"flows\":\n return flowListTpl(\n ctx,\n section.filterable\n ? filterEntities(section.flows, query)\n : section.flows\n )\n case \"touches\":\n return touchesTpl(\n ctx,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities,\n query\n )\n case \"steps\":\n return stepsTpl(\n ctx,\n section.filterable\n ? filterStepsBy(section.steps, query, resolvedStepFields)\n : section.steps,\n query\n )\n case \"routes\":\n return routePathsTpl(\n section.filterable ? filterIds(section.paths, query) : section.paths\n )\n case \"screenshot\":\n return screenshotTpl(section.url)\n case \"metadata\":\n return section.entries.length > 0\n ? metadataListTpl(section.entries)\n : null\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 render(notFoundTpl(surface.notFound), root)\n return { cleanup: () => root.replaceChildren() }\n }\n\n const bodyRef = createRef<HTMLDivElement>()\n const sectionsRef = createRef<HTMLDivElement>()\n\n const cleanups: Cleanup[] = []\n\n // ── Build actions (imperative — mutable labels) ──────────────────\n let actionsNode: HTMLElement | null = null\n if (surface.actions && surface.actions.length > 0) {\n const groups = new Map<string, DetailAction[]>()\n for (const action of surface.actions) {\n const key = action.group ?? \"\"\n const list = groups.get(key) ?? []\n list.push(action)\n groups.set(key, list)\n }\n\n if (groups.size <= 1) {\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 } else {\n const wrapper = el(\"div\", {\n class: \"flex flex-col gap-1\",\n attrs: { \"data-uidex-detail-action-groups\": \"\" },\n })\n for (const [heading, groupActions] of groups) {\n const rendered = renderActions(\n groupActions,\n ctx,\n root,\n heading || SECTION_LABELS.actions\n )\n cleanups.push(rendered.cleanup)\n wrapper.append(rendered.node)\n }\n actionsNode = wrapper\n }\n }\n\n const sections = surface.sections ?? []\n const filterable = hasFilterableSections(sections)\n\n // ── Render body template ──────────────────────────────────────────\n render(\n html`\n <div\n ${ref(bodyRef)}\n class=\"flex flex-col gap-3 px-2 py-4\"\n data-uidex-detail-body\n data-uidex-detail-kind=${surface.entityKind}\n >\n <div class=\"flex items-center gap-2 px-2\">\n ${surface.title\n ? html`<h2\n class=\"text-foreground min-w-0 flex-1 truncate text-base font-semibold\"\n data-uidex-detail-title\n >\n ${surface.title}\n </h2>`\n : nothing}\n <span class=\"ml-auto\">${kindBadgeTpl(surface.entityKind)}</span>\n </div>\n ${surface.subtitle ? subtitleTpl(surface.subtitle) : nothing}\n <div\n ${ref(sectionsRef)}\n class=\"flex flex-col gap-3\"\n data-uidex-detail-sections\n ></div>\n </div>\n `,\n root\n )\n\n const body = bodyRef.value!\n const listsContainer = sectionsRef.value!\n\n // ── Focus management ──────────────────────────────────────────────\n let focusables: HTMLElement[] = []\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 detachArrowNav = bindArrowNav({\n container: body,\n getItems: () => focusables,\n escapeTarget: ctx.searchInput,\n extraSources: [ctx.searchInput],\n onEnterKbd: enterKbdMode,\n })\n\n // ── Render sections into the ref'd container ──────────────────────\n\n function renderSections(query: string): void {\n let hasFilterableSection = false\n let renderedFilterable = 0\n let actionsPlaced = false\n\n const parts: Array<TemplateResult | HTMLElement> = []\n const placeActions = (): void => {\n if (actionsNode && !actionsPlaced) {\n parts.push(actionsNode)\n actionsPlaced = true\n }\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 = sectionTpl(section, ctx, sectionQuery)\n if (!out) continue\n if (isFilterable) renderedFilterable++\n parts.push(out)\n if (section.id === \"description\") placeActions()\n }\n if (!actionsPlaced && actionsNode) {\n parts.unshift(actionsNode)\n }\n if (query && hasFilterableSection && renderedFilterable === 0) {\n parts.push(mutedTextTpl(\"No matches\"))\n }\n render(html`${parts}`, listsContainer)\n refreshFocusSequence()\n }\n\n renderSections(\"\")\n\n const cleanup = composeCleanups([\n ...cleanups,\n detachArrowNav,\n () => body.removeEventListener(\"pointermove\", exitKbdMode),\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 type { Cleanup } from \"./cleanup\"\n\nconst NAV_KEYS = new Set([\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"])\n\nexport interface ArrowNavOptions {\n container: HTMLElement\n getItems(): HTMLElement[]\n /** Element to focus when ArrowUp is pressed at the top of the list. */\n escapeTarget?: HTMLElement\n /** Wrap from last→first and first→last. Default: false. */\n wrap?: boolean\n /** Additional elements that should forward arrow keys into the list. */\n extraSources?: HTMLElement[]\n onEnterKbd?: () => void\n}\n\nexport function bindArrowNav(options: ArrowNavOptions): Cleanup {\n const { container, getItems, escapeTarget, onEnterKbd } = options\n const wrap = options.wrap ?? false\n\n const onKeyDown = (e: KeyboardEvent): void => {\n if (!NAV_KEYS.has(e.key)) return\n onEnterKbd?.()\n const items = getItems()\n if (items.length === 0) return\n\n const active =\n container.getRootNode() instanceof ShadowRoot\n ? (container.getRootNode() as ShadowRoot).activeElement\n : document.activeElement\n if (!(active instanceof HTMLElement)) return\n\n const isEscape = escapeTarget && active === escapeTarget\n if (isEscape) {\n e.preventDefault()\n const idx = e.key === \"ArrowUp\" || e.key === \"End\" ? items.length - 1 : 0\n focusItem(items, idx)\n return\n }\n\n const idx = items.indexOf(active)\n if (idx === -1) {\n if (container.contains(active)) {\n e.preventDefault()\n const entry =\n e.key === \"ArrowUp\" || e.key === \"End\" ? items.length - 1 : 0\n focusItem(items, entry)\n }\n return\n }\n\n e.preventDefault()\n switch (e.key) {\n case \"ArrowUp\":\n if (idx === 0) {\n if (escapeTarget) escapeTarget.focus()\n else if (wrap) focusItem(items, items.length - 1)\n } else {\n focusItem(items, idx - 1)\n }\n break\n case \"ArrowDown\":\n if (idx === items.length - 1) {\n if (wrap) focusItem(items, 0)\n } else {\n focusItem(items, idx + 1)\n }\n break\n case \"Home\":\n focusItem(items, 0)\n break\n case \"End\":\n focusItem(items, items.length - 1)\n break\n }\n }\n\n container.addEventListener(\"keydown\", onKeyDown)\n const extraCleanups: Cleanup[] = []\n for (const src of options.extraSources ?? []) {\n src.addEventListener(\"keydown\", onKeyDown)\n extraCleanups.push(() => src.removeEventListener(\"keydown\", onKeyDown))\n }\n\n return () => {\n container.removeEventListener(\"keydown\", onKeyDown)\n for (const c of extraCleanups) c()\n }\n}\n\nfunction focusItem(items: HTMLElement[], idx: number): void {\n for (let i = 0; i < items.length; i++) {\n items[i].tabIndex = i === idx ? 0 : -1\n }\n items[idx].focus()\n}\n","import { displayName, entityKey, type Entity } from \"../../../shared/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","export const LIST_ITEM_CLASS =\n \"flex min-h-8 cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-base outline-none sm:min-h-7 sm:text-sm data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground\"\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 [[data-kbd-nav]_&]:focus:bg-accent [[data-kbd-nav]_&]:focus:text-accent-foreground [[data-kbd-nav]_&]:focus-within:bg-accent [[data-kbd-nav]_&]: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 { html, type TemplateResult } from \"../internal/lit\"\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\n// ── Imperative (legacy) — returns HTMLButtonElement ────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\nexport function buttonTpl(\n content: TemplateResult | string,\n options: {\n variant?: ButtonVariant\n size?: ButtonSize\n class?: ClassValue\n } = {}\n): TemplateResult {\n const { variant, size, class: extra } = options\n return html`\n <button\n type=\"button\"\n class=${cn(buttonVariants({ variant, size }), extra)}\n data-slot=\"button\"\n >\n ${content}\n </button>\n `\n}\n","import type { EntityRef, Registry } from \"../../../shared/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\"\nimport { html, type TemplateResult } from \"../internal/lit\"\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\n// ── Imperative (legacy) — returns HTMLElement ─────────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\nexport function kbdTpl(text: string, className?: ClassValue): TemplateResult {\n return html`<kbd class=${cn(KBD_CLASS, className)} data-slot=\"kbd\"\n >${text}</kbd\n >`\n}\n\nexport function kbdGroupTpl(\n content: TemplateResult | TemplateResult[],\n className?: ClassValue\n): TemplateResult {\n return html`<kbd class=${cn(KBD_GROUP_CLASS, className)} data-slot=\"kbd-group\"\n >${content}</kbd\n >`\n}\n\nexport function commandShortcutTpl(\n text: string,\n className?: ClassValue\n): TemplateResult {\n return html`<kbd\n class=${cn(COMMAND_SHORTCUT_CLASS, className)}\n data-slot=\"command-shortcut\"\n >${text}</kbd\n >`\n}\n","import { el } from \"../../internal/el\"\nimport { html, nothing, type TemplateResult } from \"../../internal/lit\"\nimport { createCommandShortcut, commandShortcutTpl } 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\n/** Template-friendly row content — allows TemplateResult for slots. */\nexport interface RowTplContent {\n leading?: TemplateResult | null\n label: string\n subtitle?: string\n trailing?: TemplateResult | string | null\n}\n\nconst LABEL_CLASS = \"min-w-0 flex-1 truncate\"\nconst SUBTITLE_CLASS = \"truncate text-xs text-muted-foreground\"\n\n// ── Imperative (legacy) — mutates host element ────────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\n/**\n * Renders the row CONTENTS (leading / label / subtitle / trailing) without a\n * wrapping element, so the caller can place them inside any container.\n */\nexport function rowTpl(content: RowTplContent): TemplateResult {\n return html`\n ${content.leading ?? nothing}\n <span class=${LABEL_CLASS}>${content.label}</span>\n ${content.subtitle\n ? html`<span class=${SUBTITLE_CLASS} data-uidex-row-subtitle\n >${content.subtitle}</span\n >`\n : nothing}\n ${content.trailing != null\n ? typeof content.trailing === \"string\"\n ? commandShortcutTpl(content.trailing)\n : content.trailing\n : nothing}\n `\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { KIND_STYLE, type EntityRef } from \"../../../shared/entities\"\nimport type { Cleanup } from \"../../internal/cleanup\"\nimport { html, type TemplateResult } from \"../../internal/lit\"\nimport {\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n} from \"../../ui/list-item\"\nimport type { ViewContext } from \"../core/types\"\nimport { createButton } from \"./button\"\nimport { isAbsentFromPage } from \"./entity-presence\"\nimport { fillRow } from \"./row\"\nimport { rowTpl, type RowTplContent } 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 interface EntityLinkTplOptions {\n ctx: ViewContext\n target: EntityRef\n label?: string\n leading?: TemplateResult | null\n class?: ClassValue\n}\n\n// ── Imperative (legacy) — returns HTMLButtonElement + cleanup ──────\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.views.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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\nconst ACTION_CLASS = cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"w-full cursor-pointer text-left font-normal\"\n)\n\n/**\n * Lit-html template for an entity link button. Event handlers use lit-html's\n * `@event` syntax so cleanup is handled automatically on disconnection.\n */\nexport function entityLinkTpl(options: EntityLinkTplOptions): TemplateResult {\n const { ctx, target, label, leading, class: extraClass } = options\n const absent = isAbsentFromPage(target)\n const resolvedLabel = label ?? `${target.kind}: ${target.id}`\n\n const onClick = () => ctx.views.navigate(target)\n const preview = () => {\n ctx.highlight.show(target, { color: KIND_STYLE[target.kind].color })\n }\n const restoreParent = () => {\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\n return html`\n <button\n type=\"button\"\n class=${cn(ACTION_CLASS, \"w-full\", absent && \"opacity-50\", extraClass)}\n data-slot=\"list-item-button\"\n data-uidex-entity-link\n data-uidex-ref-kind=${target.kind}\n data-uidex-ref-id=${target.id}\n title=${absent ? \"Not on this page\" : \"\"}\n @click=${onClick}\n @mouseenter=${preview}\n @mouseleave=${restoreParent}\n @focus=${preview}\n @blur=${restoreParent}\n >\n ${rowTpl({\n leading,\n label: resolvedLabel,\n })}\n </button>\n `\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type ElementOptions } from \"../../internal/el\"\nimport { html, nothing, type TemplateResult } from \"../../internal/lit\"\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\n// ── Imperative (legacy) — returns HTMLElement ──────────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ────────────────\n\nexport function captionTpl(\n text: string,\n className?: ClassValue\n): TemplateResult {\n return html`<p class=${cn(CAPTION_CLASS, className)}>${text}</p>`\n}\n\nexport function mutedTextTpl(\n text: string,\n className?: ClassValue\n): TemplateResult {\n return html`<p class=${cn(MUTED_CLASS, className)}>${text}</p>`\n}\n\nexport function descriptionTpl(\n text: string,\n className?: ClassValue\n): TemplateResult {\n return html`<p class=${cn(DESCRIPTION_CLASS, className)}>${text}</p>`\n}\n\nexport function headingTpl(\n text: string | undefined,\n className?: ClassValue\n): TemplateResult {\n if (!text) return nothing as unknown as TemplateResult\n return html`<h3 class=${cn(HEADING_CLASS, className)}>${text}</h3>`\n}\n","import { CircleCheck, CircleX, Loader2 } from \"lucide\"\n\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport {\n html,\n render,\n nothing,\n createRef,\n ref,\n type TemplateResult,\n} from \"../../internal/lit\"\nimport { icon } from \"../../internal/lit-icon\"\nimport { createScreenshotLightbox } from \"../../ui/screenshot-lightbox\"\nimport { buttonVariants } from \"../../ui/button\"\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 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\n// ── Field classes ───────────────────────────────────────────────────\n\nconst FIELD_INPUT_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\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 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_ERROR_CLASS = \"text-destructive-foreground text-xs\"\n\nconst CHECKBOX_CLASS =\n \"border-input bg-popover size-4 cursor-pointer rounded-[0.25rem] border accent-primary\"\n\n// ── Field renderer (imperative — returns FieldHandle for error mgmt) ──\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 = el(\"select\", {\n class: NATIVE_SELECT_CLASS,\n attrs: {\n \"data-slot\": \"select\",\n name: field.name,\n id: controlId,\n required: field.required ?? false,\n },\n }) as HTMLSelectElement\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 = el(\"input\", {\n class: cn(FIELD_INPUT_CLASS, \"h-8 px-3\"),\n attrs: {\n \"data-slot\": \"input\",\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 }) as HTMLInputElement\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 = el(\"textarea\", {\n class: cn(FIELD_INPUT_CLASS, \"min-h-20 px-3 py-2\"),\n attrs: {\n \"data-slot\": \"textarea\",\n name: field.name,\n id: controlId,\n placeholder: field.placeholder ?? \"\",\n required: field.required ?? false,\n rows: field.rows,\n },\n }) as HTMLTextAreaElement\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: CHECKBOX_CLASS,\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 = el(\"p\", {\n class: FIELD_ERROR_CLASS,\n attrs: {\n \"data-slot\": \"field-error\",\n role: \"alert\",\n \"aria-live\": \"polite\",\n },\n }) as HTMLParagraphElement\n errorNode.hidden = true\n\n const field$ = el(\"div\", {\n class: cn(\n FIELD_ROOT_CLASS,\n field.kind === \"checkbox\" ? \"flex-row items-center gap-2\" : \"\"\n ),\n attrs: {\n \"data-slot\": \"field\",\n \"data-uidex-primitive\": \"field\",\n \"data-uidex-field-name\": field.name,\n },\n }) as HTMLDivElement\n\n const label = el(\"label\", {\n class: FIELD_LABEL_CLASS,\n attrs: {\n \"data-slot\": \"field-label\",\n for: controlId,\n },\n text: field.label,\n })\n\n if (field.kind === \"checkbox\") {\n field$.append(control, label)\n } else {\n field$.append(label, control)\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\n// ── Shared constants ────────────────────────────────────────────────\n\nconst ICON_TILE_BASE =\n \"bg-card text-foreground shadow-sm/5 not-dark:bg-clip-padding [&_svg:not([class*='size-'])]:size-4.5 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%)]\"\nconst ICON_TILE = ICON_TILE_BASE + \" relative\"\nconst ICON_TILE_GHOST =\n ICON_TILE_BASE +\n \" pointer-events-none absolute bottom-px shadow-none scale-84\"\nconst 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\"\nconst 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\n// ── State view templates ────────────────────────────────────────────\n\nfunction iconMediaTpl(iconTpl: TemplateResult): TemplateResult {\n return html`\n <div class=\"relative mb-6\">\n <div\n class=${ICON_TILE_GHOST +\n \" -rotate-10 origin-bottom-left -translate-x-0.5\"}\n aria-hidden=\"true\"\n ></div>\n <div\n class=${ICON_TILE_GHOST +\n \" rotate-10 origin-bottom-right translate-x-0.5\"}\n aria-hidden=\"true\"\n ></div>\n <div class=${ICON_TILE}>${iconTpl}</div>\n </div>\n `\n}\n\nfunction loadingViewTpl(): TemplateResult {\n return html`\n <div class=${EMPTY_ROOT} aria-live=\"polite\" hidden>\n ${iconMediaTpl(icon(Loader2, \"animate-spin\"))}\n <div class=\"flex max-w-sm flex-col items-center text-center\">\n <div class=${SKELETON + \" h-6 w-36 rounded-md\"}></div>\n </div>\n <div\n class=\"flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm\"\n >\n <div class=${SKELETON + \" h-7 w-20 rounded-lg\"}></div>\n </div>\n </div>\n `\n}\n\nfunction successViewTpl(): TemplateResult {\n return html`\n <div class=${EMPTY_ROOT} hidden data-uidex-success-view>\n ${iconMediaTpl(icon(CircleCheck))}\n <div class=\"flex max-w-sm flex-col items-center text-center\">\n <div\n class=\"font-heading text-xl font-semibold\"\n data-uidex-success-title\n ></div>\n </div>\n <div\n class=\"flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm\"\n data-uidex-success-actions\n >\n <a\n class=${buttonVariants({ variant: \"outline\", size: \"sm\" })}\n target=\"_blank\"\n rel=\"noreferrer\"\n data-uidex-success-link\n ></a>\n </div>\n </div>\n `\n}\n\nfunction errorViewTpl(): TemplateResult {\n return html`\n <div class=${EMPTY_ROOT} hidden data-uidex-error-view>\n ${iconMediaTpl(icon(CircleX))}\n <div class=\"flex max-w-sm flex-col items-center gap-1 text-center\">\n <div\n class=\"font-heading text-xl font-semibold\"\n data-uidex-error-title\n ></div>\n <p\n class=\"text-muted-foreground text-sm\"\n data-uidex-error-description\n ></p>\n </div>\n <div\n class=\"flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm\"\n >\n <button\n type=\"button\"\n class=${buttonVariants({ variant: \"outline\", size: \"sm\" })}\n data-slot=\"button\"\n data-uidex-retry-button\n >\n Try Again\n </button>\n </div>\n </div>\n `\n}\n\n// ── Main form renderer ──────────────────────────────────────────────\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 // ── Screenshot preview field (imperative — async + lightbox) ──────\n const screenshotField = el(\"div\", {\n class: \"flex flex-col gap-1.5\",\n attrs: { hidden: true },\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 screenshotField.append(screenshotLabel, screenshotPreview)\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 handle = createScreenshotLightbox(screenshotPreview, dataUrl, {\n pushEscapeLayer: ctx.pushEscapeLayer,\n })\n cleanups.push(() => handle.destroy())\n })\n }\n\n // ── Render the section shell ──────────────────────────────────────\n const formRef = createRef<HTMLFormElement>()\n const statusRef = createRef<HTMLParagraphElement>()\n const submitRef = createRef<HTMLButtonElement>()\n\n render(\n html`\n <section\n class=\"flex min-h-0 flex-1 flex-col p-4\"\n data-uidex-form-surface=${surface.id}\n >\n <form\n ${ref(formRef)}\n class=\"flex w-full flex-col gap-4\"\n data-slot=\"form\"\n data-uidex-primitive=\"form\"\n novalidate\n data-uidex-form=${surface.id}\n ></form>\n ${loadingViewTpl()} ${successViewTpl()} ${errorViewTpl()}\n </section>\n `,\n root\n )\n\n const form = formRef.value!\n\n // Append imperative field nodes and screenshot into the form\n if (surface.screenshotPreview) {\n form.append(screenshotField)\n }\n for (const f of fields) {\n form.append(f.node)\n }\n\n // Submit button (sr-only)\n const submit = el(\"button\", {\n class: cn(buttonVariants({ variant: \"default\" }), \"sr-only\"),\n attrs: {\n type: \"submit\",\n \"data-slot\": \"button\",\n \"data-uidex-form-submit\": \"\",\n },\n text: surface.submit.label,\n })\n form.append(submit)\n\n // Status paragraph\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 form.append(status)\n\n // ── Query state view elements ─────────────────────────────────────\n const sectionEl = root.querySelector<HTMLElement>(\n \"[data-uidex-form-surface]\"\n )!\n const loadingView =\n sectionEl.querySelector<HTMLElement>(\"[aria-live='polite'][hidden]\") ??\n (sectionEl.children[1] as HTMLElement)\n const successView = sectionEl.querySelector<HTMLElement>(\n \"[data-uidex-success-view]\"\n )!\n const successTitle = sectionEl.querySelector<HTMLElement>(\n \"[data-uidex-success-title]\"\n )!\n const successLink = sectionEl.querySelector<HTMLAnchorElement>(\n \"[data-uidex-success-link]\"\n )!\n const successActions = successLink.parentElement!\n const errorView = sectionEl.querySelector<HTMLElement>(\n \"[data-uidex-error-view]\"\n )!\n const errorTitle = sectionEl.querySelector<HTMLElement>(\n \"[data-uidex-error-title]\"\n )!\n const errorDescription = sectionEl.querySelector<HTMLElement>(\n \"[data-uidex-error-description]\"\n )!\n const retryButton = sectionEl.querySelector<HTMLButtonElement>(\n \"[data-uidex-retry-button]\"\n )!\n\n // ── State management functions ────────────────────────────────────\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 // ── Form state ─────────────────────────────────────────────────────\n\n type FormState = \"idle\" | \"submitting\" | \"success\" | \"error\"\n let formState: FormState = \"idle\"\n let lastResult: FormSubmitResult | null = null\n let lastFieldErrors: Record<string, string> | null = null\n const subscribers = new Set<() => void>()\n const notify = (): void => {\n for (const cb of subscribers) cb()\n }\n\n async function doSubmit(values: Record<string, FormValue>): Promise<void> {\n if (formState === \"submitting\") return\n formState = \"submitting\"\n\n setStatus(null)\n clearAllFieldErrors()\n showView(\"form\")\n lastResult = null\n lastFieldErrors = null\n\n if (surface.schema) {\n const errors = await validateWithSchema(surface.schema, values)\n if (errors) {\n lastFieldErrors = errors\n lastResult = {\n status: \"error\",\n message: \"Please fix the errors above.\",\n fieldErrors: errors,\n }\n formState = \"error\"\n applyFieldErrors(errors)\n setStatus(lastResult)\n showView(\"form\")\n notify()\n return\n }\n }\n\n submit.disabled = true\n submit.setAttribute(\"data-loading\", \"\")\n showView(\"loading\")\n notify()\n\n try {\n const result: FormSubmitResult = (await surface.submit.onSubmit(\n values\n )) ?? { status: \"success\" }\n submit.disabled = false\n submit.removeAttribute(\"data-loading\")\n\n if (result.status === \"success\") {\n lastResult = result\n formState = \"success\"\n populateSuccess(result)\n showView(\"success\")\n clearAllFieldErrors()\n if (result.resetFields) {\n for (const name of result.resetFields) {\n fieldByName.get(name)?.reset()\n }\n }\n } else {\n lastResult = result\n lastFieldErrors = result.fieldErrors ?? null\n formState = \"error\"\n const hasFieldErrors =\n lastFieldErrors && Object.keys(lastFieldErrors).length > 0\n if (hasFieldErrors) {\n applyFieldErrors(lastFieldErrors ?? undefined)\n setStatus(result)\n showView(\"form\")\n } else {\n populateError(result)\n showView(\"error\")\n }\n }\n } catch (err) {\n submit.disabled = false\n submit.removeAttribute(\"data-loading\")\n const message = err instanceof Error ? err.message : String(err)\n lastResult = { status: \"error\", message }\n formState = \"error\"\n populateError(lastResult)\n showView(\"error\")\n }\n notify()\n }\n\n function retryFromError(): void {\n formState = \"idle\"\n lastResult = null\n lastFieldErrors = null\n setStatus(null)\n clearAllFieldErrors()\n showView(\"form\")\n notify()\n }\n\n // ── Form event handlers ───────────────────────────────────────────\n\n const onSubmit = (e: SubmitEvent): void => {\n e.preventDefault()\n if (formState === \"success\") return\n if (formState === \"error\") retryFromError()\n const values: Record<string, FormValue> = {}\n surface.fields.forEach((field, i) => {\n values[field.name] = fields[i].read()\n })\n void doSubmit(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 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 (formState === \"success\") {\n ctx.close()\n return\n }\n if (formState !== \"idle\" && formState !== \"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 retryButton.addEventListener(\"click\", retryFromError)\n cleanups.push(() => retryButton.removeEventListener(\"click\", retryFromError))\n\n // ── Submit intent ─────────────────────────────────────────────────\n\n const resolveIntent = (): SubmitIntent | null => {\n if (formState === \"submitting\") {\n return { label: \"Submitting…\", disabled: true, perform: () => {} }\n }\n if (formState === \"success\") {\n return { label: \"Close\", perform: () => ctx.close() }\n }\n if (formState === \"error\" && !lastFieldErrors) {\n return { label: \"Try Again\", perform: retryFromError }\n }\n return { label: surface.submit.label, perform: triggerSubmit }\n }\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 * 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 { Cleanup } from \"../internal/cleanup\"\nimport { html, render, createRef, ref } from \"../internal/lit\"\nimport { createDialog } from \"../machines/dialog\"\nimport { spreadProps } from \"../views/builder/spread-props\"\nimport type { EscapeHandler } from \"../surface/keys\"\n\nexport interface ScreenshotLightboxHandle {\n destroy(): void\n}\n\nexport interface ScreenshotLightboxOptions {\n pushEscapeLayer?: (handler: EscapeHandler) => Cleanup\n}\n\nexport function createScreenshotLightbox(\n trigger: HTMLElement,\n dataUrl: string,\n options?: ScreenshotLightboxOptions\n): ScreenshotLightboxHandle {\n const cleanups: Cleanup[] = []\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: () => trigger.getRootNode() as ShadowRoot | Document,\n })\n cleanups.push(() => lightbox.destroy())\n\n const backdropRef = createRef<HTMLDivElement>()\n const positionerRef = createRef<HTMLDivElement>()\n const contentRef = createRef<HTMLDivElement>()\n const fullImgRef = createRef<HTMLImageElement>()\n\n const mountTarget = (() => {\n const rn = trigger.getRootNode()\n return rn instanceof ShadowRoot ? rn : (rn as Document).body\n })()\n\n const fragment = document.createDocumentFragment()\n render(\n html`\n <div\n ${ref(backdropRef)}\n class=\"fixed inset-0 z-[2147483647] cursor-pointer bg-black/80\"\n data-uidex-lightbox\n hidden\n ></div>\n <div\n ${ref(positionerRef)}\n class=\"fixed inset-0 z-[2147483647] flex cursor-pointer items-center justify-center p-6\"\n hidden\n >\n <div\n ${ref(contentRef)}\n class=\"flex items-center justify-center outline-none\"\n >\n <img\n ${ref(fullImgRef)}\n class=\"max-h-full max-w-full rounded-lg\"\n src=${dataUrl}\n alt=\"Screenshot\"\n />\n </div>\n </div>\n `,\n fragment\n )\n\n const backdropEl = backdropRef.value!\n const positioner = positionerRef.value!\n const content = contentRef.value!\n const fullImg = fullImgRef.value!\n\n mountTarget.append(fragment)\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 closeLightbox = (): void => lightbox.api().setOpen(false)\n\n if (options?.pushEscapeLayer) {\n cleanups.push(\n options.pushEscapeLayer(() => {\n if (!lightbox.api().open) return false\n closeLightbox()\n return true\n })\n )\n } else {\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 closeLightbox()\n }\n window.addEventListener(\"keydown\", onEscapeCapture, true)\n cleanups.push(() =>\n window.removeEventListener(\"keydown\", onEscapeCapture, true)\n )\n }\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 closeLightbox()\n suppressClickUntil = Date.now() + 100\n }\n window.addEventListener(\"pointerdown\", onClickOutsideCapture, true)\n window.addEventListener(\"mousedown\", onClickOutsideCapture, true)\n window.addEventListener(\"click\", onClickOutsideCapture, true)\n cleanups.push(() => {\n window.removeEventListener(\"pointerdown\", onClickOutsideCapture, true)\n window.removeEventListener(\"mousedown\", onClickOutsideCapture, true)\n window.removeEventListener(\"click\", onClickOutsideCapture, true)\n })\n\n spreadProps(\n trigger,\n lightbox.api().getTriggerProps() as Record<string, unknown>\n )\n\n return {\n destroy() {\n for (const c of cleanups) c()\n cleanups.length = 0\n },\n }\n}\n","import { KIND_STYLE } from \"../../../shared/entities\"\nimport { createScrollArea } from \"../../machines/scroll-area\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport {\n html,\n render,\n nothing,\n createRef,\n ref,\n type TemplateResult,\n} from \"../../internal/lit\"\nimport { icon } from \"../../internal/lit-icon\"\nimport { matchesQuery } from \"../builder/filter\"\nimport { createPersistentSpreads } from \"../builder/spread-props\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { ShellAction, ViewContext } from \"../core/types\"\nimport { Circle } from \"lucide\"\nimport { isAbsentFromPage } from \"../primitives/entity-presence\"\nimport { iconTileTpl } from \"../primitives/icon-tile\"\nimport { kindIconTileTpl } from \"../primitives/kind-icon\"\nimport { rowTpl } from \"../primitives/row\"\nimport { mutedTextTpl } from \"../primitives/text\"\nimport {\n LIST_GROUP_LABEL_CLASS,\n LIST_ITEM_CLASS,\n LIST_ITEM_STATE_CLASS,\n} from \"../../ui/list-item\"\nimport { createListController, type ListController } from \"./list-controller\"\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\nfunction resolveLeadingTpl(item: ListItem, ctx: ViewContext): TemplateResult {\n if (item.entityChip) return kindIconTileTpl(item.entityChip.entity.kind)\n if (item.leading) {\n const node = item.leading()\n if (node instanceof SVGElement) {\n const existing = node.getAttribute(\"class\") ?? \"\"\n const stripped = existing\n .replace(/\\b(h-\\d+|w-\\d+|size-\\d+)\\b/g, \"\")\n .trim()\n node.setAttribute(\"class\", cn(stripped, \"size-3.5 opacity-80\"))\n }\n return html`<span\n class=\"bg-muted text-muted-foreground inline-flex size-6 shrink-0 items-center justify-center rounded-md\"\n data-slot=\"icon-tile\"\n aria-hidden=\"true\"\n >${node}</span\n >`\n }\n return iconTileTpl(icon(Circle, \"size-3.5 opacity-80\"))\n}\n\ninterface ListShell {\n section: HTMLElement\n scrollRoot: HTMLDivElement\n viewport: HTMLDivElement\n content: HTMLDivElement\n}\n\nfunction renderShell(surface: ListSurface, root: HTMLElement): ListShell {\n const scrollRootRef = createRef<HTMLDivElement>()\n const viewportRef = createRef<HTMLDivElement>()\n const contentRef = createRef<HTMLDivElement>()\n const sectionRef = createRef<HTMLElement>()\n\n render(\n html`\n <section\n ${ref(sectionRef)}\n class=\"flex h-full flex-col overflow-hidden\"\n data-uidex-list-surface=${surface.id}\n >\n <div\n ${ref(scrollRootRef)}\n class=\"min-h-0 flex-1\"\n data-uidex-list-scroll-root\n >\n <div ${ref(viewportRef)} class=\"uidex-scrollbar h-full w-full\">\n <div\n ${ref(contentRef)}\n class=\"scroll-py-2 p-2\"\n data-uidex-list-content\n ></div>\n </div>\n </div>\n </section>\n `,\n root\n )\n\n return {\n section: sectionRef.value!,\n scrollRoot: scrollRootRef.value!,\n viewport: viewportRef.value!,\n content: contentRef.value!,\n }\n}\n\ninterface ItemMaps {\n itemNodes: Map<string, HTMLElement>\n itemForValue: Map<string, ListItem>\n groupNodes: Map<string, HTMLElement>\n}\n\nfunction buildItemsDom(\n surface: ListSurface,\n ctx: ViewContext,\n filteredItems: readonly ListItem[],\n allByValue: Map<string, ListItem>,\n content: HTMLElement\n): ItemMaps {\n const itemNodes = new Map<string, HTMLElement>()\n const itemForValue = new Map<string, ListItem>()\n const groupNodes = new Map<string, HTMLElement>()\n content.replaceChildren()\n\n if (filteredItems.length === 0) {\n const frag = document.createDocumentFragment()\n render(\n mutedTextTpl(surface.emptyLabel ?? \"No matches\", \"p-4 text-center\"),\n frag\n )\n content.append(frag)\n return { itemNodes, itemForValue, groupNodes }\n }\n\n const byGroup = new Map<string, ListItem[]>()\n for (const item of filteredItems) {\n const key = item.group ?? \"\"\n const bucket = byGroup.get(key) ?? []\n bucket.push(item)\n byGroup.set(key, bucket)\n }\n\n const frag = document.createDocumentFragment()\n render(\n html`\n <ul class=\"flex flex-col gap-1\" data-uidex-list-groups>\n ${Array.from(byGroup.entries()).map(\n ([group, items]) => html`\n <li\n class=\"flex flex-col gap-1 py-1\"\n data-uidex-list-group\n data-uidex-list-group-name=${group}\n >\n ${group\n ? html`<h3 class=${LIST_GROUP_LABEL_CLASS}>${group}</h3>`\n : nothing}\n <ul\n class=\"flex flex-col\"\n data-uidex-group-list=${group || \"ungrouped\"}\n >\n ${items.map((item) => {\n const absent = item.preview\n ? isAbsentFromPage(item.preview, ctx.registry)\n : false\n return html`\n <li\n class=${cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_STATE_CLASS,\n absent && \"opacity-50\"\n )}\n data-uidex-list-item=${rowTag(item)}\n title=${absent ? \"Not on this page\" : \"\"}\n data-uidex-item-value=${item.value}\n >\n ${rowTpl({\n leading: resolveLeadingTpl(item, ctx),\n label: item.label,\n subtitle: item.subtitle,\n trailing: item.trailing ?? item.shortcut,\n })}\n </li>\n `\n })}\n </ul>\n </li>\n `\n )}\n </ul>\n `,\n frag\n )\n\n content.append(frag)\n\n for (const el of content.querySelectorAll<HTMLElement>(\n \"[data-uidex-group-list]\"\n )) {\n const id = el.getAttribute(\"data-uidex-group-list\") ?? \"ungrouped\"\n groupNodes.set(id, el)\n }\n for (const el of content.querySelectorAll<HTMLElement>(\n \"[data-uidex-item-value]\"\n )) {\n const value = el.getAttribute(\"data-uidex-item-value\")!\n itemNodes.set(value, el)\n const item = allByValue.get(value)\n if (item) itemForValue.set(value, item)\n }\n\n return { itemNodes, itemForValue, groupNodes }\n}\n\n// ── Public entry point ──────────────────────────────────────────────\n\nexport function renderListSurface(\n surface: ListSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n const all = surface.items\n const searchable = surface.searchable !== false\n const filterFn = searchable ? (surface.filter ?? defaultFilter) : undefined\n let filteredItems: readonly ListItem[] = all\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 hasDefault =\n surface.defaultHighlight !== undefined &&\n allByValue.has(surface.defaultHighlight)\n\n const { section, scrollRoot, viewport, content } = renderShell(surface, root)\n\n let maps = buildItemsDom(surface, ctx, filteredItems, allByValue, content)\n\n const controller: ListController = createListController({\n surfaceId: surface.id,\n contentEl: content,\n items: filteredItems,\n itemNodes: maps.itemNodes,\n defaultHighlight: hasDefault ? surface.defaultHighlight : undefined,\n onSelect: (value) => {\n const item = allByValue.get(value)\n if (item && surface.onSelect) surface.onSelect(item)\n },\n onHighlightChange: (value) => {\n const item = value ? allByValue.get(value) : 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 searchInput: searchable ? ctx.searchInput : undefined,\n })\n\n // ── Scroll area ──────────────────────────────────────────────────\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 // ── Focus the content element for non-searchable lists ───────────\n if (!searchable) {\n requestAnimationFrame(() => content.focus({ preventScroll: true }))\n }\n\n // ── Track visibility so stacked controllers don't fight ──────────\n const visibilityObserver = new MutationObserver(() => {\n controller.setActive(!root.hidden)\n })\n visibilityObserver.observe(root, {\n attributes: true,\n attributeFilter: [\"hidden\"],\n })\n\n // ── Cleanup ──────────────────────────────────────────────────────\n const cleanup = composeCleanups([\n () => controller.destroy(),\n () => ctx.highlight.hide(),\n () => visibilityObserver.disconnect(),\n unsubScroll,\n () => scrollSpreads.cleanupAll(),\n scrollArea.destroy,\n () => {\n maps.itemNodes.clear()\n maps.itemForValue.clear()\n maps.groupNodes.clear()\n root.replaceChildren()\n },\n ])\n\n // ── Search ───────────────────────────────────────────────────────\n let lastItemKey = filteredItems.map((i) => i.value).join(\"\\x00\")\n\n const onSearch = filterFn\n ? (query: string): void => {\n const next = all.filter((item) => filterFn(item, query))\n const nextKey = next.map((i) => i.value).join(\"\\x00\")\n if (nextKey === lastItemKey) return\n lastItemKey = nextKey\n maps = buildItemsDom(surface, ctx, next, allByValue, content)\n filteredItems = next\n controller.setItems(filteredItems, maps.itemNodes)\n }\n : undefined\n\n // ── Submit intent + highlight actions ────────────────────────────\n const submitIntent = {\n get() {\n const value = controller.getHighlightedValue()\n if (!value) return null\n const item = allByValue.get(value)\n if (!item || !surface.onSelect) return null\n return { label: \"Select\", perform: () => surface.onSelect!(item) }\n },\n subscribe(cb: () => void) {\n return controller.subscribe(cb)\n },\n }\n\n const highlightActions = {\n get(): readonly ShellAction[] {\n const value = controller.getHighlightedValue()\n if (!value) return []\n return allByValue.get(value)?.actions ?? []\n },\n subscribe(cb: () => void) {\n return controller.subscribe(cb)\n },\n }\n\n return { cleanup, onSearch, submitIntent, highlightActions }\n}\n","import type { Cleanup } from \"../../internal/cleanup\"\n\nexport interface ListControllerOptions {\n surfaceId: string\n contentEl: HTMLElement\n items: readonly { value: string }[]\n itemNodes: Map<string, HTMLElement>\n defaultHighlight?: string\n onSelect: (value: string) => void\n onHighlightChange?: (value: string | null) => void\n searchInput?: HTMLInputElement\n}\n\nexport interface ListController {\n getHighlightedValue(): string | null\n highlightValue(value: string | null): void\n setActive(active: boolean): void\n setItems(\n items: readonly { value: string }[],\n itemNodes: Map<string, HTMLElement>\n ): void\n subscribe(cb: () => void): Cleanup\n destroy(): void\n}\n\nexport function createListController(\n opts: ListControllerOptions\n): ListController {\n let items = opts.items\n let itemNodes = opts.itemNodes\n let highlighted: string | null = null\n let kbdMode = false\n const subs = new Set<() => void>()\n\n const { contentEl, onSelect, onHighlightChange } = opts\n\n contentEl.setAttribute(\"role\", \"listbox\")\n contentEl.tabIndex = 0\n contentEl.style.outline = \"none\"\n applyItemAria()\n\n if (opts.defaultHighlight && itemNodes.has(opts.defaultHighlight)) {\n setHighlight(opts.defaultHighlight, false)\n }\n\n function values(): string[] {\n return items.map((i) => i.value)\n }\n\n function notify(): void {\n for (const cb of subs) cb()\n }\n\n function applyItemAria(): void {\n for (const [value, el] of itemNodes) {\n el.setAttribute(\"role\", \"option\")\n el.id = `${opts.surfaceId}-item-${value}`\n }\n }\n\n function setHighlight(value: string | null, scroll = true): void {\n if (value === highlighted) return\n if (highlighted) {\n const prev = itemNodes.get(highlighted)\n if (prev) {\n prev.removeAttribute(\"data-highlighted\")\n prev.removeAttribute(\"data-kbd-highlighted\")\n prev.removeAttribute(\"aria-selected\")\n }\n }\n highlighted = value\n if (value) {\n const el = itemNodes.get(value)\n if (el) {\n el.setAttribute(\"data-highlighted\", \"\")\n el.setAttribute(\"aria-selected\", \"true\")\n if (kbdMode) el.setAttribute(\"data-kbd-highlighted\", \"\")\n contentEl.setAttribute(\"aria-activedescendant\", el.id)\n if (scroll) el.scrollIntoView({ block: \"nearest\" })\n }\n } else {\n contentEl.removeAttribute(\"aria-activedescendant\")\n }\n onHighlightChange?.(value)\n notify()\n }\n\n function enterKbd(): void {\n if (kbdMode) return\n kbdMode = true\n contentEl.setAttribute(\"data-kbd-nav\", \"\")\n }\n\n function exitKbd(): void {\n if (!kbdMode) return\n kbdMode = false\n contentEl.removeAttribute(\"data-kbd-nav\")\n if (highlighted) {\n itemNodes.get(highlighted)?.removeAttribute(\"data-kbd-highlighted\")\n }\n }\n\n function move(delta: number): void {\n const vals = values()\n if (vals.length === 0) return\n enterKbd()\n if (highlighted === null) {\n setHighlight(delta > 0 ? vals[0] : vals[vals.length - 1])\n if (highlighted)\n itemNodes.get(highlighted)?.setAttribute(\"data-kbd-highlighted\", \"\")\n return\n }\n const idx = vals.indexOf(highlighted)\n const next = (idx + delta + vals.length) % vals.length\n setHighlight(vals[next])\n if (highlighted)\n itemNodes.get(highlighted)?.setAttribute(\"data-kbd-highlighted\", \"\")\n }\n\n let active = true\n\n function handleKeydown(e: KeyboardEvent): void {\n if (!active) return\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault()\n move(1)\n break\n case \"ArrowUp\":\n e.preventDefault()\n move(-1)\n break\n case \"Home\":\n e.preventDefault()\n enterKbd()\n const first = values()[0]\n if (first != null) {\n setHighlight(first)\n if (highlighted)\n itemNodes.get(highlighted)?.setAttribute(\"data-kbd-highlighted\", \"\")\n }\n break\n case \"End\":\n e.preventDefault()\n enterKbd()\n const vals = values()\n const last = vals[vals.length - 1]\n if (last != null) {\n setHighlight(last)\n if (highlighted)\n itemNodes.get(highlighted)?.setAttribute(\"data-kbd-highlighted\", \"\")\n }\n break\n case \"Enter\":\n if (highlighted) {\n e.preventDefault()\n onSelect(highlighted)\n }\n break\n }\n }\n\n function handlePointermove(e: PointerEvent): void {\n const target = (e.target as HTMLElement).closest?.(\n \"[data-uidex-item-value]\"\n )\n if (!target) return\n const value = target.getAttribute(\"data-uidex-item-value\")\n if (!value || value === highlighted) return\n exitKbd()\n setHighlight(value, false)\n }\n\n function handleClick(e: MouseEvent): void {\n const target = (e.target as HTMLElement).closest?.(\n \"[data-uidex-item-value]\"\n )\n if (!target) return\n const value = target.getAttribute(\"data-uidex-item-value\")\n if (!value) return\n onSelect(value)\n }\n\n contentEl.addEventListener(\"keydown\", handleKeydown)\n contentEl.addEventListener(\"pointermove\", handlePointermove)\n contentEl.addEventListener(\"click\", handleClick)\n opts.searchInput?.addEventListener(\"keydown\", handleKeydown)\n\n return {\n getHighlightedValue: () => highlighted,\n highlightValue: (v) => setHighlight(v),\n setActive(v) {\n active = v\n },\n setItems(nextItems, nextNodes) {\n items = nextItems\n itemNodes = nextNodes\n applyItemAria()\n if (nextItems.length > 0) {\n setHighlight(nextItems[0].value)\n } else {\n setHighlight(null)\n }\n },\n subscribe(cb) {\n subs.add(cb)\n return () => subs.delete(cb)\n },\n destroy() {\n contentEl.removeEventListener(\"keydown\", handleKeydown)\n contentEl.removeEventListener(\"pointermove\", handlePointermove)\n contentEl.removeEventListener(\"click\", handleClick)\n opts.searchInput?.removeEventListener(\"keydown\", handleKeydown)\n subs.clear()\n },\n }\n}\n","import type { Cleanup, ShellAction, ViewContext } from \"../core/types\"\nimport type { ViewSurface } from \"../core/surface\"\nimport { renderDetailSurface } from \"./detail\"\nimport { renderFormSurface } from \"./form\"\nimport { renderListSurface } from \"./list\"\n\nexport interface SubmitIntent {\n label: string\n disabled?: boolean\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 }\n}\n","import type { EntityRef, Registry } from \"../../../shared/entities\"\nimport type { Cleanup } from \"../../internal/cleanup\"\nimport { html, render, createRef, ref } from \"../../internal/lit\"\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 { Router } from \"./router\"\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: Router\n session: SessionStore\n registry: Registry\n cloud: CloudAdapter | null\n highlight: HighlightController\n nextScrollSeq(): number\n pushEscapeLayer: ViewContext[\"pushEscapeLayer\"]\n onAfterSubmit?: () => void\n getRoute?: () => string\n}\n\nexport function mountEntry(\n entry: ViewStackEntry,\n view: View,\n deps: MountEntryDeps\n): MountedEntry | null {\n const scrollRootRef = createRef<HTMLDivElement>()\n const hostRef = createRef<HTMLDivElement>()\n\n // Render scroll-root + host into the container\n const fragment = document.createDocumentFragment()\n render(\n html`\n <div\n ${ref(scrollRootRef)}\n data-uidex-view-scroll-root\n class=${SCROLL_ROOT_CLASS}\n >\n <div\n ${ref(hostRef)}\n data-uidex-view-slot\n data-uidex-view-id=${view.id}\n class=${HOST_CLASS}\n ></div>\n </div>\n `,\n fragment\n )\n\n const scrollRoot = scrollRootRef.value!\n const host = hostRef.value!\n deps.container.appendChild(fragment)\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 user: deps.session.getState().user,\n views: deps.views,\n push: (target) => {\n if (!deps.views.get(target.id)) return\n deps.session.mode.transition.pushView({\n id: target.id,\n ref: target.ref ?? null,\n })\n },\n pop: () => deps.session.mode.transition.popOrTransition(),\n close: () => deps.session.mode.transition.dismiss(),\n pinHighlight: (r: EntityRef) => deps.session.highlight.pin(r),\n searchInput: deps.searchInput,\n highlight: deps.highlight,\n getStack: () => deps.session.getState().stack,\n pushEscapeLayer: deps.pushEscapeLayer,\n onAfterSubmit: deps.onAfterSubmit,\n getRoute: deps.getRoute,\n }\n\n let surfaceResult: MountedSurface\n try {\n if (view.render) {\n const result = view.render(ctx, host)\n const cleanup = typeof result === \"function\" ? result : () => {}\n surfaceResult = {\n cleanup: () => {\n try {\n cleanup()\n } finally {\n host.replaceChildren()\n }\n },\n }\n } else {\n const surface = view.surface(ctx)\n surfaceResult = renderSurface(surface, ctx, host)\n }\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 } from \"lucide\"\nimport { Z_CHROME } from \"../../surface/constants\"\nimport type { PaletteShortcut } from \"../../surface/keys\"\nimport { html, render, svg, createRef, ref } from \"../../internal/lit\"\nimport { icon } from \"../../internal/lit-icon\"\nimport { createActionsPopup, type ActionsPopupHandle } from \"./actions-popup\"\nimport { kbdTpl } 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 disabled:pointer-events-none disabled:opacity-50\"\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 backdropRef = createRef<HTMLDivElement>()\n const viewportRef = createRef<HTMLDivElement>()\n const frameRef = createRef<HTMLDivElement>()\n const headerRef = createRef<HTMLElement>()\n const backBtnRef = createRef<HTMLButtonElement>()\n const searchIconRef = createRef<HTMLSpanElement>()\n const searchInputRef = createRef<HTMLInputElement>()\n const headerTitleRef = createRef<HTMLDivElement>()\n const hostContainerRef = createRef<HTMLDivElement>()\n const footerLeftRef = createRef<HTMLDivElement>()\n const footerRightRef = createRef<HTMLDivElement>()\n const actionsPopupSlotRef = createRef<HTMLDivElement>()\n\n const actionsPopup = createActionsPopup({\n onOpenChange: (open) => {\n if (hostContainerRef.value)\n hostContainerRef.value.style.pointerEvents = open ? \"none\" : \"\"\n if (!open)\n requestAnimationFrame(() =>\n searchInputRef.value?.focus({ preventScroll: true })\n )\n },\n })\n\n const logo = createUidexLogo()\n logo.setAttribute(\"data-uidex-view-stack-footer-logo\", \"\")\n\n const onBackClick = () => callbacks.onBack()\n const onSearchInput = () => {\n if (searchInputRef.value)\n callbacks.onSearchInput(searchInputRef.value.value)\n }\n const onViewportClick = (e: MouseEvent) => {\n if (e.target === viewportRef.value) callbacks.onBackdropClick()\n }\n\n render(\n html`\n <div\n ${ref(backdropRef)}\n data-uidex-view-backdrop\n class=${BACKDROP_CLASS}\n style=\"z-index: ${Z_CHROME}\"\n ></div>\n <div\n ${ref(viewportRef)}\n data-uidex-view-viewport\n class=${VIEWPORT_CLASS}\n style=\"z-index: ${Z_CHROME}\"\n @click=${onViewportClick}\n >\n <div ${ref(frameRef)} data-uidex-view-stack-frame class=${FRAME_CLASS}>\n <header\n ${ref(headerRef)}\n data-uidex-view-stack-header\n class=${HEADER_CLASS}\n >\n <div data-uidex-view-stack-search class=${SEARCH_WRAPPER_CLASS}>\n <button\n ${ref(backBtnRef)}\n type=\"button\"\n data-uidex-view-stack-back\n aria-label=\"Back\"\n class=${BACK_BUTTON_CLASS}\n hidden\n @click=${onBackClick}\n >\n ${icon(ArrowLeft, BACK_ICON_CLASS)}\n </button>\n <span\n ${ref(searchIconRef)}\n data-uidex-view-stack-search-icon\n aria-hidden=\"true\"\n class=${SEARCH_ICON_WRAP_CLASS}\n >${icon(Search, SEARCH_ICON_CLASS)}</span\n >\n <input\n ${ref(searchInputRef)}\n type=\"text\"\n data-uidex-search-input\n placeholder=\"Search for command...\"\n class=${SEARCH_INPUT_CLASS}\n @input=${onSearchInput}\n />\n <div\n ${ref(headerTitleRef)}\n data-uidex-view-stack-title\n class=${HEADER_TITLE_CLASS}\n hidden\n ></div>\n </div>\n </header>\n <div\n ${ref(hostContainerRef)}\n data-uidex-view-stack-hosts\n class=${HOST_CONTAINER_CLASS}\n ></div>\n <footer data-uidex-view-stack-footer class=${FOOTER_CLASS}>\n <div\n ${ref(footerLeftRef)}\n data-uidex-view-stack-footer-left\n class=${FOOTER_SIDE_CLASS}\n ></div>\n <div\n ${ref(footerRightRef)}\n data-uidex-view-stack-footer-right\n class=${FOOTER_SIDE_CLASS}\n ></div>\n </footer>\n <div ${ref(actionsPopupSlotRef)}></div>\n </div>\n </div>\n `,\n container\n )\n\n // Append the actions popup element into its slot\n actionsPopupSlotRef.value!.replaceWith(actionsPopup.element)\n\n const backdrop = backdropRef.value!\n const frame = frameRef.value!\n const header = headerRef.value! as HTMLElement\n const backBtn = backBtnRef.value!\n const searchIcon = searchIconRef.value!\n const searchInput = searchInputRef.value!\n const headerTitle = headerTitleRef.value!\n const hostContainer = hostContainerRef.value!\n const footerLeft = footerLeftRef.value!\n const footerRight = footerRightRef.value!\n const viewport = viewportRef.value!\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 actionsPopup.destroy()\n viewport.remove()\n backdrop.remove()\n },\n }\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 render(\n html`\n <svg\n viewBox=\"0 0 30 36\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n class=${LOGO_ICON_CLASS}\n >\n ${svg`\n <rect x=\"1\" y=\"5\" width=\"22\" height=\"28\" rx=\"3\"\n fill=\"currentColor\" opacity=\"0.18\"\n transform=\"rotate(-6, 12, 19)\" />\n <rect x=\"7\" y=\"1\" width=\"22\" height=\"28\" rx=\"3\"\n fill=\"currentColor\" />\n `}\n </svg>\n `,\n wrap\n )\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 render(html`<span>${label}</span>${kbdTpl(key)}`, wrap)\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 setDisabled(disabled: boolean): 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\n const textRef = createRef<HTMLSpanElement>()\n render(html`<span ${ref(textRef)}>${label}</span>${kbdTpl(key)}`, btn)\n btn.addEventListener(\"click\", onClick)\n\n return {\n element: btn,\n setLabel(next: string) {\n if (textRef.value) textRef.value.textContent = next\n btn.setAttribute(\"aria-label\", next)\n },\n setDisabled(disabled: boolean) {\n btn.disabled = disabled\n btn.setAttribute(\"aria-disabled\", String(disabled))\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 { html, render, createRef, ref } from \"../internal/lit\"\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 popupRef = createRef<HTMLDivElement>()\n const listRef = createRef<HTMLUListElement>()\n\n const fragment = document.createDocumentFragment()\n render(\n html`\n <div\n ${ref(popupRef)}\n class=${cn(MENU_POPUP_CLASS, \"hidden\")}\n data-uidex-primitive=\"menu\"\n data-slot=\"menu-popup\"\n >\n <ul\n ${ref(listRef)}\n class=${MENU_LIST_CLASS}\n role=\"menu\"\n aria-label=${options.ariaLabel ?? options.label ?? \"Menu\"}\n data-slot=\"menu-list\"\n ></ul>\n </div>\n `,\n fragment\n )\n\n const popup = popupRef.value!\n const list = listRef.value!\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 rowByValue = new Map()\n\n render(\n html`${items.map(\n (item) =>\n html`<li\n class=${MENU_ITEM_CLASS}\n data-slot=\"menu-item\"\n data-uidex-menu-item=${item.id}\n ></li>`\n )}`,\n list\n )\n\n // Fill row content imperatively (leading/trailing are Node refs) and\n // build the rowByValue map by querying rendered elements\n const rows = list.querySelectorAll<HTMLElement>(\"[data-uidex-menu-item]\")\n rows.forEach((row, i) => {\n const item = items[i]\n if (item.leading) row.append(item.leading)\n const label = document.createElement(\"span\")\n label.className = \"flex-1 truncate\"\n label.textContent = item.label\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 })\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 { html, render, createRef, ref } from \"../../internal/lit\"\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 { kbdTpl } 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 { fillRowWithHandle } 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: null,\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 let actionById = new Map<string, ShellAction>()\n const spreads = createPersistentSpreads()\n let lastKey = \"\"\n let rowByValue = new Map<string, HTMLElement>()\n let labelByValue = new Map<string, HTMLSpanElement>()\n const cleanups: Cleanup[] = []\n\n // Build trigger imperatively — it needs a ref for zag spreading\n const triggerRef = createRef<HTMLButtonElement>()\n const positionerRef = createRef<HTMLDivElement>()\n const popupRef = createRef<HTMLDivElement>()\n const listRef = createRef<HTMLUListElement>()\n\n // Render the entire structure into a document fragment\n const fragment = document.createDocumentFragment()\n render(\n html`\n <div ${ref(positionerRef)} data-slot=\"menu-positioner\">\n <button\n ${ref(triggerRef)}\n type=\"button\"\n data-uidex-actions-trigger\n class=${TRIGGER_CLASS}\n >\n <span>Actions</span>\n ${kbdTpl(formatShortcutLabel(opts?.shortcut ?? ACTIONS_SHORTCUT))}\n </button>\n <div\n ${ref(popupRef)}\n class=\"${MENU_POPUP_CLASS} w-56\"\n data-uidex-primitive=\"menu\"\n data-slot=\"menu-popup\"\n >\n <ul\n ${ref(listRef)}\n class=\"${MENU_LIST_CLASS} w-full\"\n role=\"menu\"\n aria-label=\"Actions\"\n data-slot=\"menu-list\"\n ></ul>\n </div>\n </div>\n `,\n fragment\n )\n\n const trigger = triggerRef.value!\n const positioner = positionerRef.value!\n const popup = popupRef.value!\n const list = listRef.value!\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 action = actionById.get(details.value)\n if (!action) return\n const result = action.perform()\n if (result instanceof Promise) {\n const labelEl = labelByValue.get(action.id)\n if (labelEl) {\n const original = labelEl.textContent\n labelEl.textContent = \"Done!\"\n setTimeout(() => {\n labelEl.textContent = original\n }, 800)\n }\n }\n },\n })\n\n function rebuild(key: string): void {\n spreads.cleanupAll()\n rowByValue = new Map()\n labelByValue = new Map()\n\n render(\n html`${items.map(\n (item) =>\n html`<li\n class=${cn(LIST_ITEM_CLASS, LIST_ITEM_STATE_CLASS)}\n data-slot=\"menu-item\"\n data-uidex-menu-item=${item.id}\n ></li>`\n )}`,\n list\n )\n\n const rows = list.querySelectorAll<HTMLElement>(\"[data-uidex-menu-item]\")\n rows.forEach((row, i) => {\n const item = items[i]\n const leading = item.leading ? createIconTile(item.leading) : null\n const { label: labelEl } = fillRowWithHandle(row, {\n leading,\n label: item.label,\n trailing: item.shortcut ?? item.trailing ?? null,\n })\n rowByValue.set(item.id, row)\n labelByValue.set(item.id, labelEl)\n })\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 actionById = new Map(actions.map((a) => [a.id, a]))\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 \"../../../shared/entities\"\nimport { detectDev } from \"../../internal/dev\"\nimport { render as litRender, nothing } from \"../../internal/lit\"\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 { Router } from \"./router\"\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: Router\n session: SessionStore\n registry: Registry\n cloud?: CloudAdapter | null\n highlight: HighlightController\n globalActions?: (ctx: ViewContext) => ShellAction[]\n shortcut?: PaletteShortcut\n dev?: boolean\n pushEscapeLayer?: ViewContext[\"pushEscapeLayer\"]\n onAfterSubmit?: () => void\n getRoute?: () => string\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 if (searchInput.hidden && !isFocusedWithin(entry.host)) {\n const fallback = entry.host.querySelector<HTMLElement>(\n \"[tabindex], button, input, select, textarea, a[href], [data-uidex-list-content]\"\n )\n fallback?.focus({ preventScroll: true })\n }\n }\n focus()\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(focus)\n }\n}\n\nfunction isFocusedWithin(host: HTMLElement): boolean {\n const rootNode = host.getRootNode()\n const active =\n rootNode instanceof ShadowRoot\n ? rootNode.activeElement\n : document.activeElement\n return active instanceof HTMLElement && host.contains(active)\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 } = options\n const cloud = options.cloud ?? null\n const dev = options.dev ?? detectDev()\n const onAfterSubmit = options.onAfterSubmit\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 { stack } = session.nav.getState()\n if (stack.length <= 1) {\n session.mode.transition.openPalette()\n } else {\n session.mode.transition.popOrTransition()\n }\n },\n onBackdropClick: () => session.mode.transition.dismiss(),\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.mode.transition.pushView({\n id: \"command-palette\",\n ref: null,\n })\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 litRender(nothing, container)\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 hint.setDisabled(intent?.disabled ?? false)\n hintChangeSub = src.subscribe(() => {\n const next = src.get()\n hint.setLabel(next?.label ?? fallbackLabel)\n hint.setDisabled(next?.disabled ?? false)\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 if (!container.isConnected) return\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 highlight,\n nextScrollSeq: () => ++scrollAreaSeq,\n pushEscapeLayer: options.pushEscapeLayer ?? (() => () => {}),\n onAfterSubmit,\n getRoute: options.getRoute,\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 type { EntityKind, EntityRef } from \"../../../shared/entities\"\nimport type { ViewStackEntry } from \"../../session/types\"\n\nexport const BUILT_IN_VIEW_IDS = {\n archiveReason: \"archive-reason\",\n commandPalette: \"command-palette\",\n elements: \"elements\",\n entityReports: \"entity-reports\",\n explorePage: \"explore-page\",\n features: \"features\",\n report: \"report\",\n flows: \"flows\",\n glossary: \"glossary\",\n jiraReport: \"jira-report\",\n pages: \"pages\",\n pageReports: \"page-reports\",\n reportDetail: \"report-detail\",\n pinSettings: \"pin-settings\",\n primitives: \"primitives\",\n regions: \"regions\",\n widgets: \"widgets\",\n} as const\n\nexport const LIST_VIEW_FOR_KIND: Record<EntityKind, string> = {\n element: BUILT_IN_VIEW_IDS.elements,\n feature: BUILT_IN_VIEW_IDS.features,\n page: BUILT_IN_VIEW_IDS.pages,\n widget: BUILT_IN_VIEW_IDS.widgets,\n region: BUILT_IN_VIEW_IDS.regions,\n primitive: BUILT_IN_VIEW_IDS.primitives,\n flow: BUILT_IN_VIEW_IDS.flows,\n route: BUILT_IN_VIEW_IDS.pages,\n}\n\nexport const DETAIL_VIEW_FOR_KIND: Record<EntityKind, string> = {\n element: \"component-detail\",\n feature: \"feature-detail\",\n page: \"page-detail\",\n widget: \"widget-detail\",\n region: \"region-detail\",\n primitive: \"primitive-detail\",\n flow: \"flow-detail\",\n route: \"page-detail\",\n}\n\nexport const COMMAND_PALETTE_ENTRY: ViewStackEntry = {\n id: BUILT_IN_VIEW_IDS.commandPalette,\n ref: null,\n}\n\nexport function parentList(ref: EntityRef | null): ViewStackEntry | null {\n if (!ref) return COMMAND_PALETTE_ENTRY\n return { id: LIST_VIEW_FOR_KIND[ref.kind], ref: null }\n}\n\nexport function parentDetail(ref: EntityRef | null): ViewStackEntry | null {\n if (!ref) return COMMAND_PALETTE_ENTRY\n return { id: DETAIL_VIEW_FOR_KIND[ref.kind], ref }\n}\n","import {\n Ban,\n BugOff,\n CircleCheck,\n Copy,\n LoaderCircle,\n createElement as createLucideElement,\n type IconNode,\n} from \"lucide\"\nimport type { ArchiveReason } from \"../../../cloud/types\"\nimport type { Cleanup } from \"../../internal/cleanup\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { createIconTile } from \"../primitives/icon-tile\"\nimport { renderListSurface } from \"../render/list\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\nlet pendingReportId: string | null = null\nlet afterArchive: (() => void) | null = null\n\nexport function setArchiveTarget(reportId: string, onDone: () => void): void {\n pendingReportId = reportId\n afterArchive = onDone\n}\n\nfunction leadingIcon(iconNode: IconNode): () => Node {\n return () => {\n const svg = createLucideElement(iconNode)\n svg.setAttribute(\"aria-hidden\", \"true\")\n return createIconTile(svg)\n }\n}\n\nfunction spinnerTile(): HTMLElement {\n const spinner = createLucideElement(LoaderCircle)\n spinner.setAttribute(\"class\", \"animate-spin\")\n return createIconTile(spinner)\n}\n\nconst REASONS: { value: ArchiveReason; label: string; icon: IconNode }[] = [\n { value: \"fixed\", label: \"Fixed\", icon: CircleCheck },\n { value: \"not_a_bug\", label: \"Not a bug\", icon: BugOff },\n { value: \"duplicate\", label: \"Duplicate\", icon: Copy },\n { value: \"wont_fix\", label: \"Won't fix\", icon: Ban },\n]\n\nexport const archiveReasonView: View = {\n id: BUILT_IN_VIEW_IDS.archiveReason,\n matches: () => false,\n parent: (ref) => (ref ? { id: BUILT_IN_VIEW_IDS.reportDetail, ref } : null),\n title: \"Archive reason\",\n searchable: false,\n focusTarget: (host) =>\n host.querySelector<HTMLElement>(\"[data-uidex-list-content]\"),\n surface: () => ({ kind: \"list\", id: \"unused\", items: [] }),\n render(ctx: ViewContext, root: HTMLElement): Cleanup {\n let busy = false\n\n const items: ListItem[] = REASONS.map((r) => ({\n value: r.value,\n label: r.label,\n leading: leadingIcon(r.icon),\n }))\n\n const surface: ListSurface = {\n kind: \"list\",\n id: \"uidex-archive-reason\",\n searchable: false,\n items,\n emptyLabel: \"No reasons available\",\n onSelect: async (item) => {\n if (busy || !pendingReportId || !ctx.registry.archiveReport) return\n busy = true\n\n const row = root.querySelector<HTMLElement>(\n `[data-uidex-item-value=\"${item.value}\"]`\n )\n const existingTile = row?.querySelector(\"[data-slot='icon-tile']\")\n if (row && existingTile) {\n existingTile.replaceWith(spinnerTile())\n row.style.opacity = \"0.6\"\n row.style.pointerEvents = \"none\"\n }\n\n try {\n await ctx.registry.archiveReport(\n pendingReportId,\n item.value as ArchiveReason\n )\n const done = afterArchive\n pendingReportId = null\n afterArchive = null\n done?.()\n } catch {\n busy = false\n if (row) {\n row.style.opacity = \"\"\n row.style.pointerEvents = \"\"\n const reason = REASONS.find((r) => r.value === item.value)\n if (reason) {\n const tile = row.querySelector(\"[data-slot='icon-tile']\")\n if (tile)\n tile.replaceWith(\n createIconTile(createLucideElement(reason.icon))\n )\n }\n }\n const error = document.createElement(\"p\")\n error.className = \"text-destructive px-4 py-2 text-xs\"\n error.textContent = \"Archive failed — try again\"\n root.querySelector(\"[data-uidex-list-content]\")?.prepend(error)\n setTimeout(() => error.remove(), 3000)\n }\n },\n }\n\n const mounted = renderListSurface(surface, ctx, root)\n return mounted.cleanup\n },\n}\n","import {\n Compass,\n Copy,\n ExternalLink,\n MessageCircleWarning,\n Star,\n StarOff,\n TicketPlus,\n createElement as createLucideElement,\n} from \"lucide\"\nimport {\n displayName,\n KIND_STYLE,\n type Entity,\n type EntityRef,\n type Page,\n} from \"../../../shared/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.views.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.views.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 async perform() {\n try {\n await navigator.clipboard.writeText(path)\n } catch {\n // silent\n }\n },\n })\n }\n }\n actions.push({\n id: \"submit-report\",\n label: \"Report\",\n icon: () => createLucideElement(MessageCircleWarning),\n perform: () => ctx.push({ id: BUILT_IN_VIEW_IDS.report, ref }),\n })\n if (\n (ctx.cloud as CloudAdapter | null)?.integrations.getCachedConfig()?.hasJira\n ) {\n actions.push({\n id: \"create-jira-issue\",\n label: \"Create Jira Ticket\",\n icon: () => createLucideElement(TicketPlus),\n perform: () => ctx.push({ id: BUILT_IN_VIEW_IDS.jiraReport, 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.views.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\nconst PALETTE_EXCLUDED_VIEWS: Set<string> = new Set([\n BUILT_IN_VIEW_IDS.commandPalette,\n BUILT_IN_VIEW_IDS.explorePage,\n BUILT_IN_VIEW_IDS.flows,\n BUILT_IN_VIEW_IDS.elements,\n BUILT_IN_VIEW_IDS.widgets,\n BUILT_IN_VIEW_IDS.regions,\n BUILT_IN_VIEW_IDS.pages,\n BUILT_IN_VIEW_IDS.features,\n BUILT_IN_VIEW_IDS.primitives,\n])\n\nfunction collectNavigation(ctx: ViewContext): PaletteItem[] {\n const out: PaletteItem[] = []\n for (const view of ctx.views.list()) {\n if (PALETTE_EXCLUDED_VIEWS.has(view.id)) continue\n if (!view.palette) continue\n const onSelect = () => ctx.push({ id: view.id, ref: null })\n const subtitle =\n typeof view.palette.subtitle === \"function\"\n ? view.palette.subtitle()\n : view.palette.subtitle\n out.push({\n value: `view:${view.id}`,\n label: view.palette.label,\n subtitle,\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.views.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\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.views.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 groupOrder = new Map<string, number>()\n for (const item of items) {\n const g = item.group ?? \"\"\n if (!groupOrder.has(g)) groupOrder.set(g, groupOrder.size)\n }\n items.sort(\n (a, b) =>\n (groupOrder.get(a.group ?? \"\") ?? 0) -\n (groupOrder.get(b.group ?? \"\") ?? 0)\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.views.navigate(palette.payload.ref)\n },\n }\n },\n }\n}\n","import type { Location } from \"../../../shared/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 \"../../../shared/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/**\n * Find the best-matching route for the current pathname. Returns both the\n * route path pattern and the page id, or `null` when no route matches.\n */\nfunction findCurrentRoute(\n registry: ViewContext[\"registry\"]\n): { path: string; page: string } | null {\n if (typeof location === \"undefined\") return null\n const pathname = location.pathname || \"/\"\n const routes = 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\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 return findCurrentRoute(ctx.registry)?.page ?? null\n}\n\n/** Resolve the route pattern for the current URL (e.g. `/:orgSlug/projects/:slug`). */\nexport function findCurrentRoutePath(\n registry: ViewContext[\"registry\"]\n): string | null {\n return findCurrentRoute(registry)?.path ?? 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 ReportContext {\n url: string\n route?: string\n pageTitle?: string\n viewport: { w: number; h: number }\n userAgent: string\n timestamp: string\n env?: string\n appVersion?: string\n git?: { branch?: string; commit?: string }\n}\n\nexport function captureReportContext(opts?: {\n getRoute?: () => string\n}): ReportContext {\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 return {\n url: loc?.href ?? \"\",\n route: opts?.getRoute?.() ?? loc?.pathname,\n userAgent: nav?.userAgent ?? \"\",\n pageTitle: doc?.title,\n timestamp: new Date().toISOString(),\n viewport: {\n w: win?.innerWidth ?? 0,\n h: win?.innerHeight ?? 0,\n },\n }\n}\n","import {\n type Entity,\n type EntityRef,\n type Flow,\n} from \"../../../shared/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 EntityByKind,\n type EntityKind,\n type EntityRef,\n type Location,\n type MetaEntityKind,\n} from \"../../../shared/entities\"\nimport { captureScreenshot } from \"../../internal/screenshot\"\nimport { resolveEntityElement } from \"../../surface/inspector\"\nimport { captureReportContext } from \"../../report/capture\"\nimport type {\n DetailAction,\n DetailSection,\n DetailSubtitle,\n DetailSurface,\n} from \"../core/surface\"\nimport { BUILT_IN_VIEW_IDS, parentList } 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\nconst DOM_BACKED_KINDS: ReadonlySet<EntityKind> = new Set([\n \"element\",\n \"region\",\n \"widget\",\n \"primitive\",\n])\n\nconst DETAIL_HINTS: 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 reportAction(ref: EntityRef): DetailAction {\n return {\n id: \"submit-report\",\n label: \"Report\",\n icon: \"message-circle-warning\",\n push: { id: BUILT_IN_VIEW_IDS.report, ref },\n intent: {\n kind: \"push\",\n viewId: BUILT_IN_VIEW_IDS.report,\n refKind: ref.kind,\n },\n }\n}\n\nexport function viewReportsAction(\n ref: EntityRef,\n count?: number\n): DetailAction {\n return {\n id: \"view-reports\",\n label: \"View Reports\",\n icon: \"inbox\",\n hint:\n count != null ? (count === 1 ? \"1 item\" : `${count} items`) : undefined,\n push: { id: BUILT_IN_VIEW_IDS.entityReports, ref },\n intent: {\n kind: \"push\",\n viewId: BUILT_IN_VIEW_IDS.entityReports,\n refKind: ref.kind,\n },\n }\n}\n\nexport function jiraAction(ref: EntityRef): DetailAction {\n return {\n id: \"create-jira-issue\",\n label: \"Create Jira Ticket\",\n icon: \"ticket-plus\",\n push: { id: BUILT_IN_VIEW_IDS.jiraReport, ref },\n intent: {\n kind: \"push\",\n viewId: BUILT_IN_VIEW_IDS.jiraReport,\n refKind: ref.kind,\n },\n }\n}\n\nexport function buildSnapshotMarkdown(ref: EntityRef, loc?: Location): string {\n const snapshot = captureReportContext()\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.route ?? \"\"}`,\n ...(snapshot.pageTitle ? [`- **Page Title:** ${snapshot.pageTitle}`] : []),\n `- **Viewport:** ${snapshot.viewport.w}×${snapshot.viewport.h}`,\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 parent: parentList,\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 const cloud = ctx.cloud as CloudAdapter | null\n\n // Report group\n actions.push({ ...reportAction(ctx.ref), group: \"Report\" })\n const reportCount = ctx.registry.getReports(kind, ctx.ref.id).length\n if (reportCount > 0) {\n actions.push({\n ...viewReportsAction(ctx.ref, reportCount),\n group: \"Report\",\n })\n }\n if (cloud?.integrations.getCachedConfig()?.hasJira) {\n actions.push({ ...jiraAction(ctx.ref), group: \"Report\" })\n }\n\n // Inspect group\n if (DOM_BACKED_KINDS.has(kind) && resolveEntityElement(ctx.ref)) {\n actions.push({ ...highlightElementAction(ctx.ref), group: \"Inspect\" })\n actions.push({ ...copyScreenshotAction(ctx.ref), group: \"Inspect\" })\n }\n actions.push({\n ...copyPathAction(ctx.ref, metaEntity.loc),\n group: \"Inspect\",\n })\n actions.push({\n ...copySnapshotAction(ctx.ref, metaEntity.loc),\n group: \"Inspect\",\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 if (!DOM_BACKED_KINDS.has(kind)) {\n sections.push({\n id: \"composes\",\n label: SECTION_LABELS.contains,\n entities: resolveRefs(ctx, meta?.composes),\n filterable: true,\n })\n }\n if (DOM_BACKED_KINDS.has(kind) && meta?.features?.length) {\n const featureEntities = meta.features\n .map((fId) => ctx.registry.get(\"feature\", fId))\n .filter((e): e is NonNullable<typeof e> => !!e)\n if (featureEntities.length > 0) {\n sections.push({\n id: \"composes\",\n label: \"Features\",\n entities: featureEntities,\n filterable: true,\n })\n }\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 \"../../../shared/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) => [touchedByFlowsSection(ctx, entity.id)],\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})\n\nexport const widgetDetailView = createEntityDetailView({\n id: \"widget-detail\",\n kind: \"widget\",\n fallbackTitle: \"Widget\",\n})\n\nexport const primitiveDetailView = createEntityDetailView({\n id: \"primitive-detail\",\n kind: \"primitive\",\n fallbackTitle: \"Primitive\",\n offerAcceptance: false,\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 \"../../../shared/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, COMMAND_PALETTE_ENTRY } 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 parent: () => COMMAND_PALETTE_ENTRY,\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.views.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 type { ReportRecord } from \"../../../shared/entities\"\nimport {\n TYPE_LABELS,\n SEVERITY_LABELS,\n authorLabel,\n relativeTime,\n} from \"../../report/constants\"\nimport type {\n DetailAction,\n DetailSection,\n DetailSurface,\n} from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { setArchiveTarget } from \"./archive-reason\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\nlet selectedId: string | null = null\n\nexport function setSelectedReportId(id: string): void {\n selectedId = id\n}\n\nfunction findReport(ctx: ViewContext): ReportRecord | null {\n if (!ctx.ref || !selectedId) return null\n const reports = ctx.registry.getReports(ctx.ref.kind, ctx.ref.id)\n return reports.find((r) => r.id === selectedId) ?? null\n}\n\nexport const reportDetailView: View = {\n id: BUILT_IN_VIEW_IDS.reportDetail,\n matches: () => false,\n parent: (ref) => ({ id: BUILT_IN_VIEW_IDS.entityReports, ref }),\n searchable: false,\n focusTarget: (host) =>\n host.querySelector<HTMLButtonElement>(\n \"[data-uidex-detail-actions] [data-uidex-detail-action]\"\n ),\n surface: (ctx): DetailSurface => {\n const report = findReport(ctx)\n if (!report) {\n return {\n kind: \"detail\",\n entityKind: ctx.ref?.kind ?? \"element\",\n notFound: ctx.ref ?? undefined,\n }\n }\n\n const typeLabel =\n (TYPE_LABELS as Record<string, string>)[report.type] ?? report.type\n const sevLabel =\n (SEVERITY_LABELS as Record<string, string>)[report.severity] ??\n report.severity\n\n const sections: DetailSection[] = []\n\n if (report.body) {\n sections.push({ id: \"description\", text: report.body })\n }\n\n if (report.screenshot) {\n sections.push({ id: \"screenshot\", url: report.screenshot })\n }\n\n const metaEntries: Array<{ label: string; value: string }> = []\n if (report.url) metaEntries.push({ label: \"URL\", value: report.url })\n if (report.route) metaEntries.push({ label: \"Route\", value: report.route })\n if (report.pageTitle)\n metaEntries.push({ label: \"Page\", value: report.pageTitle })\n if (metaEntries.length > 0) {\n sections.push({ id: \"metadata\", entries: metaEntries })\n }\n\n const actions: DetailAction[] = []\n if (ctx.registry.archiveReport) {\n actions.push({\n id: \"archive\",\n label: \"Archive\",\n icon: \"archive-x\",\n run: () => {\n setArchiveTarget(report.id, () => ctx.pop())\n ctx.push({ id: BUILT_IN_VIEW_IDS.archiveReason })\n },\n })\n }\n if (report.url) {\n actions.push({\n id: \"open-url\",\n label: \"Open URL\",\n icon: \"copy\",\n copy: report.url,\n })\n }\n\n return {\n kind: \"detail\",\n entityKind: ctx.ref?.kind ?? \"element\",\n title: report.title || \"(no title)\",\n subtitle: {\n rawId: [\n typeLabel,\n sevLabel,\n authorLabel(report),\n relativeTime(report.createdAt),\n ]\n .filter(Boolean)\n .join(\" · \"),\n },\n actions,\n sections,\n }\n },\n}\n","import { matchesQuery } from \"../builder/filter\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { ShellAction, View, ViewContext } from \"../core/types\"\nimport { renderKindIcon } from \"../primitives/kind-icon\"\nimport {\n TYPE_LABELS,\n SEVERITY_LABELS,\n authorLabel,\n relativeTime,\n} from \"../../report/constants\"\nimport { setArchiveTarget } from \"./archive-reason\"\nimport { BUILT_IN_VIEW_IDS, parentDetail } from \"./ids\"\nimport { setSelectedReportId } from \"./report-detail\"\nimport type { ReportRecord } from \"../../../shared/entities\"\n\nfunction reportToItem(report: ReportRecord, ctx: ViewContext): ListItem {\n const typeLabel =\n (TYPE_LABELS as Record<string, string>)[report.type] ?? report.type\n const sevLabel =\n (SEVERITY_LABELS as Record<string, string>)[report.severity] ??\n report.severity\n const raw = report.title || report.body\n const label = raw.length > 80 ? raw.slice(0, 80) + \"…\" : raw\n const kind = ctx.ref?.kind ?? \"element\"\n const actions: ShellAction[] = []\n\n if (ctx.registry.archiveReport) {\n actions.push({\n id: `archive-${report.id}`,\n label: \"Archive\",\n perform: () => {\n setArchiveTarget(report.id, () => ctx.pop())\n ctx.push({ id: BUILT_IN_VIEW_IDS.archiveReason })\n },\n })\n }\n\n return {\n value: `report:${report.id}`,\n label: label || \"(no description)\",\n subtitle: [\n authorLabel(report),\n typeLabel,\n sevLabel,\n relativeTime(report.createdAt),\n ]\n .filter(Boolean)\n .join(\" · \"),\n tag: `report:${report.id}`,\n leading: () => renderKindIcon(kind),\n actions,\n }\n}\n\nexport const entityReportsView: View = {\n id: BUILT_IN_VIEW_IDS.entityReports,\n matches: () => false,\n parent: parentDetail,\n title: \"Reports\",\n searchable: true,\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx: ViewContext): ListSurface => {\n const ref = ctx.ref\n const reports = ref ? ctx.registry.getReports(ref.kind, ref.id) : []\n const items = reports.map((r) => reportToItem(r, ctx))\n\n return {\n kind: \"list\",\n id: \"uidex-entity-reports\",\n items,\n emptyLabel: \"No reports for this element\",\n filter: (item, query) =>\n matchesQuery(`${item.label} ${item.subtitle ?? \"\"}`, query),\n onSelect: (item) => {\n setSelectedReportId(item.value.replace(/^report:/, \"\"))\n ctx.push({ id: BUILT_IN_VIEW_IDS.reportDetail, ref })\n },\n }\n },\n}\n","import { Compass, createElement as createLucideElement } from \"lucide\"\nimport {\n displayName,\n ENTITY_KINDS,\n type Entity,\n type EntityRef,\n} from \"../../../shared/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, COMMAND_PALETTE_ENTRY } 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 parent: () => COMMAND_PALETTE_ENTRY,\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.views.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 { ReportPayload } from \"@uidex/api-client\"\n\nfunction capitalize(s: string): string {\n return s.length === 0 ? s : s[0].toUpperCase() + s.slice(1)\n}\n\nexport function renderPayloadMarkdown(payload: ReportPayload): string {\n const heading = payload.title ?? `${capitalize(payload.type)} Report`\n const ctx = payload.context\n const lines: string[] = [\n `# ${heading}`,\n \"\",\n `- **Type:** ${payload.type}`,\n ...(payload.severity ? [`- **Severity:** ${payload.severity}`] : []),\n `- **Entity:** \\`${payload.entity}\\``,\n \"\",\n \"#### Description\",\n payload.body || \"_(no description)_\",\n \"\",\n \"#### Context\",\n `- **URL:** ${ctx?.url}`,\n ...(ctx?.pageTitle ? [`- **Page title:** ${ctx.pageTitle}`] : []),\n `- **Viewport:** ${ctx?.viewport.w}×${ctx?.viewport.h}`,\n `- **User agent:** ${ctx?.userAgent}`,\n `- **Timestamp:** ${ctx?.timestamp}`,\n ]\n return lines.join(\"\\n\") + \"\\n\"\n}\n","import { z } from \"zod\"\nimport type { FormField } from \"../../core/surface\"\n\nexport const reportSchema = z.object({\n type: z.enum([\"bug\", \"request\", \"suggestion\"]),\n severity: z.enum([\"low\", \"medium\", \"high\", \"critical\"]).optional(),\n title: z.string().optional(),\n body: z.string().trim().min(1, { message: \"Description is required.\" }),\n})\n\nexport const reportFields: FormField[] = [\n {\n kind: \"select\",\n name: \"type\",\n label: \"Type\",\n options: [\n { value: \"bug\", label: \"Bug\" },\n { value: \"request\", label: \"Request\" },\n { value: \"suggestion\", label: \"Suggestion\" },\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: \"body\",\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 \"../../../../shared/entities\"\nimport { parentDetail } from \"../ids\"\nimport { UIDEX_ATTR_TO_KIND } from \"../../../surface/constants\"\nimport type {\n FormField,\n FormSubmitResult,\n FormSurface,\n FormValue,\n} from \"../../core/surface\"\nimport type { ReportPayload } from \"@uidex/api-client\"\nimport type {\n CloudAdapter,\n ReportResult,\n View,\n ViewContext,\n} from \"../../core/types\"\nimport { renderPayloadMarkdown } from \"./markdown\"\nimport { reportFields, reportSchema } from \"./schema\"\nimport { captureReportContext } from \"../../../report/capture\"\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 CreateReportViewConfig {\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: ReportResult) => 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: ReportResult) => FormSubmitResult\n /**\n * Optional prefix prepended to `description` before submit/fallback-copy.\n */\n prependDescription?: () => string\n /**\n * Extra form fields prepended before the base report 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 report 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: ReportPayload,\n ctx: ViewContext,\n values: Record<string, FormValue>\n ) => ReportPayload\n /**\n * Override the default report 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: CreateReportViewConfig[\"augmentPayload\"],\n screenshot?: string\n): ReportPayload {\n const context = captureReportContext({ getRoute: ctx.getRoute })\n const title = String(values.title ?? \"\").trim()\n const body = String(values.body ?? \"\").trim()\n\n const reporter: ReportPayload[\"reporter\"] = ctx.user\n ? { id: ctx.user.id, name: ctx.user.name || undefined }\n : undefined\n\n const payload: ReportPayload = {\n type: (values.type as ReportPayload[\"type\"]) ?? \"bug\",\n severity: (values.severity as ReportPayload[\"severity\"]) ?? \"medium\",\n title: title || undefined,\n body: prefix ? `${prefix}${body}` : body,\n entity: componentId,\n screenshot,\n context,\n reporter,\n metadata: ctx.user ? { userId: ctx.user.id } : undefined,\n }\n return augmentPayload ? augmentPayload(payload, ctx, values) : payload\n}\n\nasync function copyFallback(payload: ReportPayload): Promise<FormSubmitResult> {\n const markdown = renderPayloadMarkdown(payload)\n const copied = await copyToClipboard(markdown)\n if (!copied) console.log(\"[uidex] report 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 createReportView(config: CreateReportViewConfig): 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 parent: parentDetail,\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='report'] select, [data-uidex-form='report'] input, [data-uidex-form='report'] textarea\"\n ),\n surface: (ctx): FormSurface => {\n const cloud = resolveCloud(ctx)\n const extra = extraFields ? extraFields(ctx) : []\n const fields: FormField[] = [...extra, ...(baseFields ?? reportFields)]\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: \"report\",\n fields,\n schema: schemaOverride ?? reportSchema,\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.reports.submit(\n payload\n )) as ReportResult\n ctx.onAfterSubmit?.()\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 { createReportView } from \"./view-builder\"\n\nexport const reportView = createReportView({\n id: BUILT_IN_VIEW_IDS.report,\n resolveCloud: (ctx) => ctx.cloud,\n componentId: (ctx) => (ctx.ref ? `${ctx.ref.kind}:${ctx.ref.id}` : \"unknown\"),\n submitLabels: { ready: \"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 ? `Report submitted (${ticketKey})` : \"Report 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 { IngestConfig } from \"@uidex/api-client\"\nimport type { CloudAdapter, ReportResult } from \"../../core/types\"\n\nimport { BUILT_IN_VIEW_IDS } from \"../ids\"\nimport { reportFields, reportSchema } from \"./schema\"\nimport { createReportView } from \"./view-builder\"\n\ntype JiraConfig = Extract<IngestConfig, { hasJira: true }>\ntype IngestConfigIssue = JiraConfig[\"parentIssues\"][number]\n\nconst jiraSchema = reportSchema.omit({ type: true })\n\nconst jiraBaseFields = reportFields.filter(\n (f) => f.name !== \"type\" && f.name !== \"severity\"\n)\n\nfunction buildParentIssueField(config: JiraConfig): 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 jiraReportView = createReportView({\n id: BUILT_IN_VIEW_IDS.jiraReport,\n resolveCloud: (ctx) => ctx.cloud,\n componentId: (ctx) => (ctx.ref ? `${ctx.ref.kind}:${ctx.ref.id}` : \"unknown\"),\n submitLabels: { ready: \"Create Jira Ticket\", 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: ReportResult): 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: \"Report saved — Jira issue creation failed\",\n }\n },\n successToast: (result: ReportResult) => {\n const link = result.externalLink\n if (link?.ok && link.key) return `Created ${link.key}`\n return \"Report 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 displayName,\n isMetaEntity,\n type Entity,\n type Flow,\n type FlowStep,\n type MetaEntityKind,\n type Registry,\n} from \"../../../shared/entities\"\nimport { parentList } from \"./ids\"\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 reportAction,\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 parent: parentList,\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 reportAction(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 {\n displayName,\n type EntityRef,\n type Flow,\n} from \"../../../shared/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, COMMAND_PALETTE_ENTRY } 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 parent: () => COMMAND_PALETTE_ENTRY,\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.views.navigate((item as FlowItem).ref),\n }\n },\n}\n","import { BookOpen, createElement as createLucideElement } from \"lucide\"\nimport {\n KIND_STYLE,\n type Entity,\n type EntityKind,\n} from \"../../../shared/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, COMMAND_PALETTE_ENTRY } 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 parent: () => COMMAND_PALETTE_ENTRY,\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","import { CircleOff, Inbox, createElement as createLucideElement } from \"lucide\"\nimport {\n displayName,\n type Entity,\n type EntityRef,\n ENTITY_KINDS,\n} from \"../../../shared/entities\"\nimport { parseComponentRef } from \"../../surface/pin-layer\"\nimport { matchesQuery } from \"../builder/filter\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { renderKindIcon } from \"../primitives/kind-icon\"\nimport {\n TYPE_LABELS,\n SEVERITY_LABELS,\n authorLabel,\n relativeTime,\n} from \"../../report/constants\"\nimport { BUILT_IN_VIEW_IDS, COMMAND_PALETTE_ENTRY } from \"./ids\"\nimport { setSelectedReportId } from \"./report-detail\"\n\ninterface PageReportItem extends ListItem {\n ref: EntityRef\n}\n\nfunction collectPageReports(ctx: ViewContext): PageReportItem[] {\n const items: PageReportItem[] = []\n const seenReportIds = new Set<string>()\n\n for (const kind of ENTITY_KINDS) {\n for (const entity of ctx.registry.list(kind)) {\n const id = \"id\" in entity ? (entity as Entity & { id: string }).id : \"\"\n if (!id) continue\n const reports = ctx.registry.getReports(kind, id)\n seenReportIds.add(`${kind}:${id}`)\n const ref: EntityRef = { kind, id }\n for (const report of reports) {\n const typeLabel =\n (TYPE_LABELS as Record<string, string>)[report.type] ?? report.type\n const sevLabel =\n (SEVERITY_LABELS as Record<string, string>)[report.severity] ??\n report.severity\n const raw = report.title || report.body\n const label = raw.length > 80 ? raw.slice(0, 80) + \"…\" : raw\n const entityName = displayName(entity as Entity)\n items.push({\n value: `report:${report.id}`,\n label: label || \"(no description)\",\n subtitle: [\n entityName,\n authorLabel(report),\n typeLabel,\n sevLabel,\n relativeTime(report.createdAt),\n ]\n .filter(Boolean)\n .join(\" · \"),\n tag: `report:${report.id}`,\n group: `${kind}: ${entityName}`,\n leading: () => renderKindIcon(kind),\n ref,\n })\n }\n }\n }\n\n for (const key of ctx.registry.listReportKeys()) {\n if (seenReportIds.has(key)) continue\n const parsed = parseComponentRef(key)\n if (ctx.registry.get(parsed.kind, parsed.id)) continue\n const reports = ctx.registry.getReports(parsed.kind, parsed.id)\n const ref: EntityRef = parsed\n for (const report of reports) {\n const typeLabel =\n (TYPE_LABELS as Record<string, string>)[report.type] ?? report.type\n const sevLabel =\n (SEVERITY_LABELS as Record<string, string>)[report.severity] ??\n report.severity\n const raw = report.title || report.body\n const label = raw.length > 80 ? raw.slice(0, 80) + \"…\" : raw\n items.push({\n value: `report:${report.id}`,\n label: label || \"(no description)\",\n subtitle: [\n `${parsed.kind}:${parsed.id}`,\n authorLabel(report),\n typeLabel,\n sevLabel,\n relativeTime(report.createdAt),\n ]\n .filter(Boolean)\n .join(\" · \"),\n tag: `report:${report.id}`,\n group: \"Orphaned\",\n leading: () => createLucideElement(CircleOff),\n ref,\n })\n }\n }\n\n return items\n}\n\nexport const pageReportsView: View = {\n id: BUILT_IN_VIEW_IDS.pageReports,\n matches: () => false,\n parent: () => COMMAND_PALETTE_ENTRY,\n palette: {\n label: \"Page Reports\",\n group: \"Current Page\",\n icon: () => createLucideElement(Inbox),\n },\n title: \"Page Reports\",\n searchable: true,\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx: ViewContext): ListSurface => {\n const items = collectPageReports(ctx)\n\n return {\n kind: \"list\",\n id: \"uidex-page-reports\",\n items,\n emptyLabel: \"No reports on this page\",\n filter: (item, query) =>\n matchesQuery(\n `${item.label} ${item.subtitle ?? \"\"} ${item.group ?? \"\"}`,\n query\n ),\n onSelect: (item) => {\n setSelectedReportId(item.value.replace(/^report:/, \"\"))\n ctx.push({\n id: BUILT_IN_VIEW_IDS.reportDetail,\n ref: (item as PageReportItem).ref,\n })\n },\n }\n },\n}\n","import {\n Check,\n Globe,\n MapPin,\n Settings,\n createElement as createLucideElement,\n type IconNode,\n} from \"lucide\"\nimport type { PinMatchMode } from \"../../surface/pin-layer\"\nimport { html } from \"../../internal/lit\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { createIconTile } from \"../primitives/icon-tile\"\nimport { PALETTE_GROUPS } from \"../labels\"\nimport { showCopiedToast } from \"../../ui/toast\"\nimport { BUILT_IN_VIEW_IDS, COMMAND_PALETTE_ENTRY } from \"./ids\"\n\nconst MATCH_MODE_KEY = \"uidex:pin-match-mode\"\n\nfunction readMode(): PinMatchMode {\n try {\n const v = localStorage.getItem(MATCH_MODE_KEY)\n if (v === \"route\" || v === \"pathname\" || v === \"component\") return v\n } catch {\n /* ignore */\n }\n return \"route\"\n}\n\nfunction writeMode(mode: PinMatchMode): void {\n try {\n localStorage.setItem(MATCH_MODE_KEY, mode)\n } catch {\n /* ignore */\n }\n}\n\nconst MODES: {\n value: PinMatchMode\n label: string\n description: string\n icon: IconNode\n}[] = [\n {\n value: \"route\",\n label: \"By route\",\n description: \"Pins from any URL matching this route pattern\",\n icon: Globe,\n },\n {\n value: \"pathname\",\n label: \"By pathname\",\n description: \"Pins from this exact URL path\",\n icon: MapPin,\n },\n {\n value: \"component\",\n label: \"By component\",\n description: \"All pins for components on this page\",\n icon: Settings,\n },\n]\n\nfunction leadingIcon(iconNode: IconNode, active: boolean): () => Node {\n return () => {\n const svg = createLucideElement(active ? Check : iconNode)\n svg.setAttribute(\"aria-hidden\", \"true\")\n return createIconTile(svg)\n }\n}\n\nexport const pinSettingsView: View = {\n id: BUILT_IN_VIEW_IDS.pinSettings,\n matches: () => false,\n parent: () => COMMAND_PALETTE_ENTRY,\n palette: {\n label: \"Pin settings\",\n group: PALETTE_GROUPS.commands,\n icon: () => createLucideElement(Settings),\n },\n title: \"Pin settings\",\n searchable: false,\n focusTarget: (host) =>\n host.querySelector<HTMLElement>(\"[data-uidex-list-content]\"),\n surface: (ctx: ViewContext): ListSurface => {\n const current = readMode()\n const items: ListItem[] = MODES.map((m) => {\n const active = m.value === current\n return {\n value: m.value,\n label: m.label,\n subtitle: m.description,\n leading: leadingIcon(m.icon, active),\n trailing: active\n ? html`<span class=\"text-muted-foreground ms-auto text-xs font-medium\"\n >Active</span\n >`\n : undefined,\n }\n })\n\n return {\n kind: \"list\",\n id: \"uidex-pin-settings\",\n searchable: false,\n items,\n emptyLabel: \"No options available\",\n onSelect: (item) => {\n const mode = item.value as PinMatchMode\n writeMode(mode)\n ctx.onAfterSubmit?.()\n const modeLabel = MODES.find((m) => m.value === mode)!.label\n showCopiedToast(`Pin mode set to \"${modeLabel}\"`)\n ctx.pop()\n },\n }\n },\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","export { BUILT_IN_VIEW_IDS } from \"./ids\"\n\nimport type { PaletteShortcut } from \"../../surface/keys\"\nimport { archiveReasonView } from \"./archive-reason\"\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 { entityReportsView } from \"./entity-reports\"\nimport { explorePageView } from \"./explore-page\"\nimport { reportView } from \"./report/host-report\"\nimport { jiraReportView } from \"./report/jira-report\"\nimport { flowDetailView } from \"./flow-detail\"\nimport { flowsView } from \"./flows\"\nimport { glossaryView } from \"./glossary\"\nimport { pageReportsView } from \"./page-reports\"\nimport { pinSettingsView } from \"./pin-settings\"\nimport { reportDetailView } from \"./report-detail\"\n\nexport { archiveReasonView } from \"./archive-reason\"\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 { entityReportsView } from \"./entity-reports\"\nexport { explorePageView } from \"./explore-page\"\nexport { reportView } from \"./report/host-report\"\nexport { jiraReportView } from \"./report/jira-report\"\nexport { flowDetailView } from \"./flow-detail\"\nexport { flowsView } from \"./flows\"\nexport { glossaryView } from \"./glossary\"\nexport { pageReportsView } from \"./page-reports\"\nexport { pinSettingsView } from \"./pin-settings\"\nexport { reportDetailView } from \"./report-detail\"\n\nimport type { View } from \"../core/types\"\n\nexport function buildDefaultViews(shortcut?: PaletteShortcut): View[] {\n return [\n archiveReasonView,\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 entityReportsView,\n reportView,\n jiraReportView,\n glossaryView,\n pageReportsView,\n pinSettingsView,\n reportDetailView,\n ]\n}\n","import { createRegistry, KIND_STYLE, type Registry } from \"../shared/entities\"\nimport {\n createIngest,\n resolveIngestOptions,\n type Ingest,\n type IngestOptions,\n} from \"./ingest\"\nimport type { RealtimeChannel } from \"../cloud/types\"\nimport { createCleanupStack } from \"./internal/cleanup\"\nimport { isDarkMode } from \"./internal/dark-mode\"\nimport { bindRouteChange } from \"./internal/route-change\"\nimport {\n createSession,\n type HighlightContext,\n type ResolvedTheme,\n type SessionStore,\n type ThemePreference,\n} from \"./session\"\nimport type { UserIdentity } from \"../shared/user\"\nimport {\n bindShadowKeys,\n createPinLayer,\n createSurfaceShell,\n parseComponentRef,\n resolveEntityElement,\n SURFACE_IGNORE_SELECTOR,\n UIDEX_ATTR_TO_KIND,\n type Corner,\n type Inspector,\n type Overlay,\n type PaletteShortcut,\n type PinLayer,\n type PinMatchMode,\n} from \"./surface\"\nimport {\n buildDefaultViews,\n createRouter,\n createViewStack,\n BUILT_IN_VIEW_IDS,\n type CloudAdapter,\n type HighlightController,\n type Router,\n type View,\n} from \"./views\"\nimport { setSelectedReportId } from \"./views/built-in/report-detail\"\nimport { findCurrentRoutePath } from \"./views/builder/page-context\"\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 * Identity for the local user. Required to opt into realtime collaborative\n * features (peer cursors, presence). When omitted, realtime stays\n * disconnected and report attribution falls back to whatever the user\n * types in the report form.\n */\n user?: UserIdentity\n /** Git context for pin filtering. Typically mirrors `cloud({ git })`. */\n git?: { branch?: string; commit?: string }\n /**\n * Return the current route pattern (e.g. `/users/:id`). Used for\n * route-based pin matching and report attribution. When omitted, the SDK\n * falls back to `location.pathname`.\n */\n getRoute?: () => string\n}\n\nexport interface Uidex {\n mount(target?: Element): void\n unmount(): void\n readonly registry: Registry\n readonly session: SessionStore\n readonly views: Router\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 const inspectorRef: { current: Inspector | null } = { current: null }\n const overlayRef: { current: Overlay | null } = { current: null }\n const pinLayerRef: { current: PinLayer | 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 user: options.user,\n onMountInspector: () => inspectorRef.current?.mount(),\n onDestroyInspector: () => inspectorRef.current?.destroy(),\n onShowOverlay: applyOverlay,\n onHideOverlay: () => overlayRef.current?.hide(),\n onUpdateOverlay: applyOverlay,\n })\n const views = createRouter({ session })\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.add(view)\n }\n if (options.views) {\n for (const view of options.views) views.add(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 getPathname = (): string =>\n typeof location !== \"undefined\" ? location.pathname : \"/\"\n\n const getCurrentRoute = (): string =>\n options.getRoute?.() ?? findCurrentRoutePath(registry) ?? getPathname()\n\n const getVisibleEntities = (): string[] => {\n if (typeof document === \"undefined\") return []\n const selector = UIDEX_ATTR_TO_KIND.map(([a]) => `[${a}]`).join(\",\")\n const nodes = document.querySelectorAll<HTMLElement>(selector)\n const ids: string[] = []\n const seen = new Set<string>()\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 key = `${kind}:${id}`\n if (!seen.has(key)) {\n seen.add(key)\n ids.push(key)\n }\n break\n }\n }\n return ids\n }\n\n const getMatchMode = (): PinMatchMode =>\n (typeof localStorage !== \"undefined\"\n ? (localStorage.getItem(\"uidex:pin-match-mode\") as PinMatchMode | null)\n : null) ?? \"route\"\n\n let channel: RealtimeChannel | null = null\n if (cloud && options.user) {\n channel = cloud.realtime.connect({\n user: options.user,\n route: getCurrentRoute(),\n })\n mountCleanup.add(() => channel?.disconnect())\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 channel,\n inspector: {\n onSelect: (match) => {\n const route = views.resolve(match.ref)\n if (!route) return\n session.select(match.ref)\n const entry = { id: route.view.id, ref: match.ref }\n session.mode.transition.enterViewing(views.buildStack(entry))\n },\n },\n })\n shadowRoot = shell.host.shadowRoot\n inspectorRef.current = shell.inspector\n overlayRef.current = shell.overlay\n shell.overlay.onDismiss = () => session.highlight.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.highlight.unhover()\n return\n }\n session.highlight.hover(ref, el, opts?.color ?? null)\n },\n hide() {\n session.highlight.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 let keyBindings: ReturnType<typeof bindShadowKeys> | null = null\n\n const viewStack = createViewStack({\n container: viewContainer,\n views,\n session,\n registry,\n cloud,\n highlight,\n shortcut: options.shortcut,\n pushEscapeLayer: (handler) => {\n if (!keyBindings) return () => {}\n return keyBindings.pushEscapeLayer(handler)\n },\n onAfterSubmit: () => pinLayerRef.current?.refresh(),\n getRoute: getCurrentRoute,\n })\n mountCleanup.add(viewStack)\n\n if (shadowRoot) {\n keyBindings = bindShadowKeys({\n shadowRoot,\n session,\n getActionsPopup: () => viewStack.getActionsPopup(),\n getPinLayer: () => pinLayerRef.current,\n shortcut: options.shortcut,\n })\n mountCleanup.add(keyBindings)\n }\n\n if (shadowRoot) {\n const syncReportsToRegistry = (): void => {\n const layer = pinLayerRef.current\n if (!layer) return\n const byEntity = new Map<\n string,\n ReturnType<PinLayer[\"getAllPins\"]>[number][]\n >()\n for (const pin of layer.getAllPins()) {\n const cid = pin.entity ?? \"\"\n if (!cid) continue\n const list = byEntity.get(cid)\n if (list) list.push(pin)\n else byEntity.set(cid, [pin])\n }\n for (const [cid, pins] of byEntity) {\n const ref = parseComponentRef(cid)\n registry.setReports(ref.kind, ref.id, pins)\n }\n }\n\n if (cloud) {\n registry.archiveReport = async (reportId, reason) => {\n pinLayerRef.current?.removePin(reportId)\n await cloud.pins.archive(\n reportId,\n reason as Parameters<typeof cloud.pins.archive>[1]\n )\n syncReportsToRegistry()\n }\n }\n\n const pinLayer: PinLayer = createPinLayer({\n container: shadowRoot,\n currentBranch: options.git?.branch ?? null,\n onOpenPinDetail: (componentId, reportId) => {\n const ref = parseComponentRef(componentId)\n setSelectedReportId(reportId)\n const entry = { id: BUILT_IN_VIEW_IDS.reportDetail, ref }\n session.mode.transition.enterViewing(views.buildStack(entry))\n },\n onHoverPin: (anchor, componentId) => {\n const overlay = overlayRef.current\n if (!overlay) return\n if (!anchor || !componentId) {\n overlay.hide()\n return\n }\n overlay.show(anchor, {\n color: isDarkMode() ? \"#e4e4e7\" : \"#27272a\",\n })\n },\n onPinsChanged: syncReportsToRegistry,\n })\n shell.menuBar.setPinLayer(pinLayer)\n pinLayerRef.current = pinLayer\n\n mountCleanup.add(() => {\n pinLayer.destroy()\n pinLayerRef.current = null\n registry.archiveReport = undefined\n })\n\n if (cloud) {\n const detach = pinLayer.attachCloud({\n cloud,\n channel,\n getRoute: getCurrentRoute,\n getPathname,\n getVisibleEntities,\n getMatchMode,\n onError: (err) => console.warn(\"[uidex] pin fetch failed\", err),\n })\n mountCleanup.add(detach)\n\n if (channel && typeof window !== \"undefined\") {\n const onRouteChange = (): void => {\n const route = getCurrentRoute()\n channel?.joinRoute(route)\n void pinLayer.refresh()\n }\n const detachRoute = bindRouteChange(onRouteChange)\n mountCleanup.add(detachRoute)\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":";AAAO,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AA4FO,SAAS,WAAW,MAA0C;AACnE,SAAO,SAAS,WAAW,SAAS;AACtC;AAEO,SAAS,aACd,QACqD;AACrD,SAAO,WAAW,OAAO,IAAI;AAC/B;AAEO,SAAS,UAAU,QAAwB;AAChD,SAAO,OAAO,SAAS,UAAU,OAAO,OAAO,OAAO;AACxD;AAEO,SAAS,QAAQ,GAAqB,GAA8B;AACzE,MAAI,MAAM,EAAG,QAAO;AACpB,MAAI,MAAM,QAAQ,MAAM,KAAM,QAAO;AACrC,SAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;AACzC;AAEO,IAAM,yBAAN,cAAqC,MAAM;AAAA,EACvC;AAAA,EACT,YAAY,MAAc;AACxB,UAAM,wBAAwB,IAAI,EAAE;AACpC,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;AAEA,IAAM,WAAgC,IAAI,IAAY,YAAY;AAE3D,SAAS,iBAAiB,MAA0C;AACzE,MAAI,CAAC,SAAS,IAAI,IAAI,EAAG,OAAM,IAAI,uBAAuB,IAAI;AAChE;;;AClFA,SAAS,aAAwB;AAC/B,SAAO;AAAA,IACL,OAAO,oBAAI,IAAI;AAAA,IACf,MAAM,oBAAI,IAAI;AAAA,IACd,SAAS,oBAAI,IAAI;AAAA,IACjB,QAAQ,oBAAI,IAAI;AAAA,IAChB,QAAQ,oBAAI,IAAI;AAAA,IAChB,SAAS,oBAAI,IAAI;AAAA,IACjB,WAAW,oBAAI,IAAI;AAAA,IACnB,MAAM,oBAAI,IAAI;AAAA,EAChB;AACF;AAEA,SAAS,eAAe,OAAuB,UAA4B;AACzE,QAAM,MAAgB,CAAC;AACvB,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,QAAQ,SAAS,QAAQ,EAAG,KAAI,KAAK,KAAK,EAAE;AAAA,EACvD;AACA,SAAO;AACT;AAEA,SAAS,aAA+B,QAAW,OAA0B;AAC3E,MAAI,CAAC,WAAW,OAAO,IAAI,EAAG,QAAO;AACrC,QAAM,WAAW;AACjB,MAAI,SAAS,SAAS,OAAW,QAAO;AACxC,QAAM,gBAAgB,OAAO,OAAO,eAAe,OAAO,SAAS,EAAE,CAAC;AACtE,QAAM,aAAuB,EAAE,GAAG,SAAS,MAAM,OAAO,cAAc;AACtE,SAAO,EAAE,GAAG,QAAQ,MAAM,OAAO,OAAO,UAAU,EAAE;AACtD;AAEO,SAAS,iBAA2B;AACzC,QAAM,QAAQ,WAAW;AACzB,MAAI,aAA4B;AAEhC,QAAM,WAAW,MAAc;AAC7B,QAAI,eAAe,KAAM,cAAa,MAAM,KAAK,MAAM,KAAK,OAAO,CAAC;AACpE,WAAO;AAAA,EACT;AAEA,QAAM,MAAM,CAAC,WAAyB;AACpC,qBAAiB,OAAO,IAAI;AAC5B,UAAM,MAAM,UAAU,MAAM;AAC3B,IAAC,MAAM,OAAO,IAAI,EAA0B,IAAI,KAAK,MAAM;AAC5D,iBAAa;AAAA,EACf;AAEA,QAAM,MAAM,CACV,MACA,OACgC;AAChC,qBAAiB,IAAI;AACrB,UAAM,MAAM,MAAM,IAAI,EAAE,IAAI,EAAE;AAC9B,QAAI,QAAQ,OAAW,QAAO;AAC9B,WAAO,aAAa,KAAK,SAAS,CAAC;AAAA,EACrC;AAEA,QAAM,OAAO,CACX,SACmC;AACnC,qBAAiB,IAAI;AACrB,UAAM,QAAQ,SAAS;AACvB,WAAO,MAAM;AAAA,MAAK,MAAM,IAAI,EAAE,OAAO;AAAA,MAAG,CAAC,MACvC,aAAa,GAAsB,KAAK;AAAA,IAC1C;AAAA,EACF;AAEA,QAAM,cAAc,aAAgC;AAClD,eAAW,QAAQ,OAAO,KAAK,KAAK,GAAmB;AACrD,iBAAW,UAAU,MAAM,IAAI,EAAE,OAAO,GAAG;AACzC,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,QAAQ,CAAC,cAAqD;AAClE,UAAM,QAAQ,SAAS;AACvB,UAAM,SAAmB,CAAC;AAC1B,eAAW,UAAU,YAAY,GAAG;AAClC,UAAI,UAAU,MAAM,EAAG,QAAO,KAAK,aAAa,QAAQ,KAAK,CAAC;AAAA,IAChE;AACA,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,CAAC,UACf;AAAA,IACE,CAAC,WACC,YAAY,UACZ,MAAM,QAAQ,OAAO,MAAM,KAC3B,OAAO,OAAO,SAAS,KAAK;AAAA,EAChC;AAEF,QAAM,YAAY,CAAC,WAA6B;AAC9C,UAAM,OAAO,MAAM,KAAK,IAAI,MAAM;AAClC,QAAI,SAAS,OAAW,QAAO,CAAC;AAChC,UAAM,MAAM,IAAI,IAAI,KAAK,OAAO;AAChC,WAAO,MAAM,CAAC,WAAW;AACvB,UAAI,CAAC,aAAa,MAAM,EAAG,QAAO;AAClC,aAAO,IAAI,IAAI,OAAO,EAAE;AAAA,IAC1B,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,oBAAI,IAAqC;AACzD,QAAM,aAAa,oBAAI,IAAgB;AAEvC,QAAM,aAAa,CACjB,MACA,IACA,YACS;AACT,YAAQ,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI,OAAO;AACpC,eAAW,MAAM,WAAY,IAAG;AAAA,EAClC;AAEA,QAAM,aAAa,CAAC,MAAkB,OACpC,QAAQ,IAAI,GAAG,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC;AAEnC,QAAM,iBAAiB,MAAyB,MAAM,KAAK,QAAQ,KAAK,CAAC;AAEzE,QAAM,kBAAkB,CAAC,OAAiC;AACxD,eAAW,IAAI,EAAE;AACjB,WAAO,MAAM,WAAW,OAAO,EAAE;AAAA,EACnC;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;;;AC3LA;AAAA,EACE;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,OACK;AAWA,IAAM,aAAiD;AAAA,EAC5D,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AACF;;;AC5EO,SAAS,SAAS,IAAoB;AAC3C,QAAM,QAAQ,GAAG,MAAM,OAAO,EAAE,OAAO,OAAO;AAC9C,QAAM,QAAQ,MAAM,QAAQ,CAAC,SAAS,KAAK,MAAM,WAAW,EAAE,OAAO,OAAO,CAAC;AAC7E,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,MACJ,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAI,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,EAC/D,KAAK,GAAG;AACb;AAEO,SAAS,YAAY,QAAgB,MAA+B;AACzE,MAAI,OAAO,SAAS,QAAS,QAAO,SAAS,OAAO,IAAI;AACxD,MAAI,OAAO,SAAS,QAAQ;AAC1B,UAAM,WAAW,OAAO,MAAM;AAC9B,QAAI,SAAU,QAAO;AAAA,EACvB;AACA,QAAM,OAAO,MAAM,aAAa,YAAY,GAAG,KAAK;AACpD,MAAI,KAAM,QAAO;AACjB,SAAO,SAAS,OAAO,EAAE;AAC3B;;;ACEA,IAAM,gBAAgB;AACtB,IAAM,SAAkC,CAAC,QAAQ,OAAO;AAExD,SAAS,cAAc,MAAkC;AACvD,SAAO,KACJ,IAAI,CAAC,QAAQ;AACZ,QAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,QAAI,eAAe,MAAO,QAAO,IAAI,SAAS,IAAI;AAClD,QAAI;AACF,aAAO,KAAK,UAAU,GAAG;AAAA,IAC3B,QAAQ;AACN,aAAO,OAAO,GAAG;AAAA,IACnB;AAAA,EACF,CAAC,EACA,KAAK,GAAG;AACb;AAEO,SAAS,qBACd,UAAiC,CAAC,GAClB;AAChB,QAAM,QAAQ,QAAQ,SAAS;AAC/B,QAAM,SAAS,QAAQ,UAAU;AACjC,QAAM,MAAM,QAAQ,QAAQ,MAAM,oBAAI,KAAK;AAC3C,QAAM,SAAyB,CAAC;AAChC,QAAM,YACJ,CAAC;AACH,MAAI,SAAS;AAEb,WAAS,OAAO,OAAqB,MAAgC;AACnE,UAAM,QAAsB;AAAA,MAC1B;AAAA,MACA,SAAS,cAAc,IAAI;AAAA,MAC3B,WAAW,IAAI,EAAE,YAAY;AAAA,IAC/B;AACA,WAAO,KAAK,KAAK;AACjB,QAAI,OAAO,SAAS,MAAO,QAAO,OAAO,GAAG,OAAO,SAAS,KAAK;AAAA,EACnE;AAEA,WAAS,QAAc;AACrB,QAAI,OAAQ;AACZ,eAAW,SAAS,QAAQ;AAC1B,YAAM,WAAW,OAAO,KAAK;AAC7B,gBAAU,KAAK,IAAI;AACnB,YAAM,UAAU,IAAI,SAA0B;AAC5C,eAAO,OAAO,IAAI;AAClB,iBAAS,KAAK,QAAQ,GAAG,IAAI;AAAA,MAC/B;AACC,MAAC,OAA8C,KAAK,IAAI;AAAA,IAC3D;AACA,aAAS;AAAA,EACX;AAEA,WAAS,OAAa;AACpB,QAAI,CAAC,OAAQ;AACb,eAAW,SAAS,QAAQ;AAC1B,YAAM,WAAW,UAAU,KAAK;AAChC,UAAI,UAAU;AACZ;AAAC,QAAC,OAA8C,KAAK,IAAI;AAAA,MAC3D;AACA,aAAO,UAAU,KAAK;AAAA,IACxB;AACA,aAAS;AAAA,EACX;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,IAAI,WAAW;AACb,aAAO;AAAA,IACT;AAAA,IACA,UAAU;AACR,aAAO,OAAO,MAAM;AAAA,IACtB;AAAA,IACA,QAAQ;AACN,aAAO,SAAS;AAAA,IAClB;AAAA,EACF;AACF;;;ACjGO,IAAM,cACX,OAAO,eAAe,eAAe,OAAO,WAAW,UAAU,aAC7D,WAAW,MAAM,KAAK,UAAU,IAChC;AAEC,SAAS,iBAA2C;AACzD,SAAO;AACT;;;ACiBA,IAAMA,iBAAgB;AAEtB,SAAS,cAAc,OAA0B,MAA4B;AAC3E,MAAI,MAAM,OAAQ,QAAO,KAAK,OAAO,YAAY;AACjD,MACE,OAAO,UAAU,YACjB,EAAE,iBAAiB,QACnB,YAAY,OACZ;AACA,WAAQ,MAAkB,OAAO,YAAY;AAAA,EAC/C;AACA,SAAO;AACT;AAEA,SAAS,WAAW,OAAkC;AACpD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,iBAAiB,IAAK,QAAO,MAAM,SAAS;AAChD,SAAQ,MAAkB;AAC5B;AAEO,SAAS,qBACd,UAAiC,CAAC,GAClB;AAChB,QAAM,QAAQ,QAAQ,SAASA;AAC/B,QAAM,SAAU,QAAQ,UAAU;AAGlC,QAAM,MAAM,QAAQ,QAAQ,MAAM,oBAAI,KAAK;AAC3C,QAAM,SAAyB,CAAC;AAChC,MAAI;AACJ,MAAI,SAAS;AAEb,WAAS,KAAK,OAA2B;AACvC,WAAO,KAAK,KAAK;AACjB,QAAI,OAAO,SAAS,MAAO,QAAO,OAAO,GAAG,OAAO,SAAS,KAAK;AAAA,EACnE;AAEA,WAAS,QAAc;AACrB,QAAI,OAAQ;AACZ,UAAM,WAAW,OAAO,SAAS;AACjC,QAAI,CAAC,SAAU;AACf,eAAW;AACX,UAAM,UAAwB,OAAO,OAAO,SAAS;AACnD,YAAM,SAAS,cAAc,OAAO,IAAI;AACxC,YAAM,MAAM,WAAW,KAAK;AAC5B,UAAI;AACF,cAAM,MAAM,MAAM,SAAS,OAAO,IAAI;AACtC,YAAI,IAAI,UAAU,KAAK;AACrB,eAAK;AAAA,YACH;AAAA,YACA;AAAA,YACA,QAAQ,IAAI;AAAA,YACZ,WAAW,IAAI,EAAE,YAAY;AAAA,UAC/B,CAAC;AAAA,QACH;AACA,eAAO;AAAA,MACT,SAAS,KAAK;AACZ,aAAK;AAAA,UACH;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR,WAAW,IAAI,EAAE,YAAY;AAAA,UAC7B,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,QACxD,CAAC;AACD,cAAM;AAAA,MACR;AAAA,IACF;AACA,WAAO,QAAQ;AACf,aAAS;AAAA,EACX;AAEA,WAAS,OAAa;AACpB,QAAI,CAAC,OAAQ;AACb,QAAI,SAAU,QAAO,QAAQ;AAC7B,eAAW;AACX,aAAS;AAAA,EACX;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,IAAI,WAAW;AACb,aAAO;AAAA,IACT;AAAA,IACA,UAAU;AACR,aAAO,OAAO,MAAM;AAAA,IACtB;AAAA,IACA,QAAQ;AACN,aAAO,SAAS;AAAA,IAClB;AAAA,EACF;AACF;;;ACvEO,SAAS,aAAa,UAA+B,CAAC,GAAW;AACtE,QAAM,EAAE,SAAS,GAAG,KAAK,IAAI;AAC7B,QAAM,cAAc,KAAK,mBAAmB;AAC5C,QAAM,cAAc,KAAK,mBAAmB;AAE5C,QAAM,iBAAwC,cAC1C,qBAAqB;AAAA,IACnB,OAAO,KAAK;AAAA,IACZ,QAAQ,KAAK;AAAA,IACb,KAAK,KAAK;AAAA,EACZ,CAAC,IACD;AACJ,QAAM,iBAAwC,cAC1C,qBAAqB;AAAA,IACnB,OAAO,KAAK;AAAA,IACZ,QAAQ,KAAK;AAAA,IACb,KAAK,KAAK;AAAA,EACZ,CAAC,IACD;AAEJ,MAAI,SAAS;AAEb,WAAS,QAAc;AACrB,QAAI,OAAQ;AACZ,oBAAgB,MAAM;AACtB,oBAAgB,MAAM;AACtB,aAAS,QAAQ,gBAAgB,YAAY,gBAAgB,QAAQ;AACrE,QAAI,OAAQ,UAAS,UAAU,IAAI;AAAA,EACrC;AAEA,WAAS,OAAa;AACpB,QAAI,CAAC,OAAQ;AACb,oBAAgB,KAAK;AACrB,oBAAgB,KAAK;AACrB,aAAS;AACT,aAAS,UAAU,KAAK;AAAA,EAC1B;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,IAAI,WAAW;AACb,aAAO;AAAA,IACT;AAAA,IACA,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AACF;AAEO,SAAS,qBACd,UACA,UACsB;AACtB,MAAI,aAAa,KAAM,QAAO;AAC9B,MAAI,aAAa,QAAW;AAC1B,WAAO,WAAW,EAAE,gBAAgB,MAAM,gBAAgB,KAAK,IAAI;AAAA,EACrE;AACA,MAAI,SAAS,mBAAmB,SAAS,SAAS,mBAAmB,OAAO;AAC1E,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;AChGO,SAAS,qBAAmC;AACjD,QAAM,QAAmB,CAAC;AAC1B,SAAO;AAAA,IACL,IAAI,SAAS;AACX,UAAI,CAAC,QAAS;AACd,UAAI,OAAO,YAAY,WAAY,OAAM,KAAK,OAAO;AAAA,UAChD,OAAM,KAAK,MAAM,QAAQ,QAAQ,CAAC;AAAA,IACzC;AAAA,IACA,QAAQ;AACN,eAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,YAAI;AACF,gBAAM,CAAC,EAAE;AAAA,QACX,SAAS,KAAK;AACZ,kBAAQ,MAAM,yBAAyB,GAAG;AAAA,QAC5C;AAAA,MACF;AACA,YAAM,SAAS;AAAA,IACjB;AAAA,EACF;AACF;AAEO,SAAS,gBAAgB,UAAuC;AACrE,SAAO,MAAM;AACX,aAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7C,UAAI;AACF,iBAAS,CAAC,IAAI;AAAA,MAChB,SAAS,KAAK;AACZ,gBAAQ,MAAM,yBAAyB,GAAG;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AACF;;;AC1CO,SAAS,aAAsB;AACpC,MAAI,OAAO,aAAa,aAAa;AACnC,UAAM,OAAO,SAAS;AACtB,QAAI,MAAM,UAAU,SAAS,MAAM,EAAG,QAAO;AAC7C,QAAI,MAAM,UAAU,SAAS,OAAO,EAAG,QAAO;AAAA,EAChD;AACA,MACE,OAAO,WAAW,eAClB,OAAO,OAAO,eAAe,YAC7B;AACA,WAAO,OAAO,WAAW,8BAA8B,EAAE;AAAA,EAC3D;AACA,SAAO;AACT;;;ACXA,IAAM,qBAAqB;AAE3B,IAAI,UAAU;AAEd,SAAS,uBAA6B;AACpC,MAAI,QAAS;AACb,MAAI,OAAO,WAAW,eAAe,OAAO,YAAY,YAAa;AACrE,YAAU;AAEV,QAAM,WAAW,MAAY;AAC3B,WAAO,cAAc,IAAI,MAAM,kBAAkB,CAAC;AAAA,EACpD;AAEA,QAAM,WAAW,QAAQ;AACzB,UAAQ,YAAY,YAA4B,MAAM;AACpD,UAAM,SAAS,SAAS;AAAA,MACtB;AAAA,MACA;AAAA,IACF;AACA,aAAS;AACT,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,QAAQ;AAC5B,UAAQ,eAAe,YAA4B,MAAM;AACvD,UAAM,SAAS,YAAY;AAAA,MACzB;AAAA,MACA;AAAA,IACF;AACA,aAAS;AACT,WAAO;AAAA,EACT;AACF;AAEO,SAAS,gBAAgB,SAA8B;AAC5D,MAAI,OAAO,WAAW,YAAa,QAAO,MAAM;AAAA,EAAC;AACjD,uBAAqB;AACrB,SAAO,iBAAiB,YAAY,OAAO;AAC3C,SAAO,iBAAiB,oBAAoB,OAAO;AACnD,SAAO,MAAM;AACX,WAAO,oBAAoB,YAAY,OAAO;AAC9C,WAAO,oBAAoB,oBAAoB,OAAO;AAAA,EACxD;AACF;;;AC7CA,SAAS,eAAAC,oBAAkC;;;ACA3C,SAAS,mBAAkC;AAqC3C,IAAM,wBAAwC;AAAA,EAC5C,IAAI;AAAA,EACJ,KAAK;AACP;AAEO,SAAS,gBAAgB,SAA4C;AAC1E,QAAM,EAAE,KAAK,SAAS,IAAI;AAE1B,QAAM,QAAQ,YAA0B,OAAO;AAAA,IAC7C,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB,EAAE;AAEF,QAAM,aAA8B;AAAA,IAClC,cAAc;AACZ,YAAM,OAAO,MAAM,SAAS;AAC5B,UAAI,KAAK,SAAS,cAAc;AAC9B,kBAAU,mBAAmB;AAAA,MAC/B;AACA,UAAI,IAAI,MAAM,CAAC,qBAAqB,CAAC;AACrC,YAAM,SAAS,EAAE,MAAM,WAAW,iBAAiB,MAAM,CAAC;AAAA,IAC5D;AAAA,IAEA,gBAAgB;AACd,gBAAU,iBAAiB;AAC3B,UAAI,IAAI,MAAM;AACd,YAAM,SAAS,EAAE,MAAM,cAAc,iBAAiB,KAAK,CAAC;AAAA,IAC9D;AAAA,IAEA,iBAAiB;AACf,gBAAU,mBAAmB;AAC7B,UAAI,IAAI,MAAM;AACd,YAAM,SAAS,EAAE,MAAM,QAAQ,iBAAiB,MAAM,CAAC;AAAA,IACzD;AAAA,IAEA,kBAAkB;AAChB,UAAI,MAAM,SAAS,EAAE,SAAS,cAAc;AAC1C,mBAAW,eAAe;AAAA,MAC5B,OAAO;AACL,mBAAW,cAAc;AAAA,MAC3B;AAAA,IACF;AAAA,IAEA,aAAa,cAAc;AACzB,YAAM,OAAO,MAAM,SAAS;AAC5B,UAAI,KAAK,SAAS,cAAc;AAC9B,kBAAU,mBAAmB;AAAA,MAC/B;AACA,UAAI,IAAI,MAAM,YAAY;AAC1B,YAAM,SAAS,EAAE,MAAM,WAAW,iBAAiB,MAAM,CAAC;AAAA,IAC5D;AAAA,IAEA,UAAU;AACR,YAAM,OAAO,MAAM,SAAS;AAC5B,UAAI,KAAK,SAAS,cAAc;AAC9B,kBAAU,mBAAmB;AAAA,MAC/B;AACA,UAAI,IAAI,MAAM;AACd,YAAM,SAAS,EAAE,MAAM,QAAQ,iBAAiB,MAAM,CAAC;AAAA,IACzD;AAAA,IAEA,kBAAkB;AAChB,YAAM,EAAE,MAAM,IAAI,IAAI,SAAS;AAC/B,UAAI,MAAM,SAAS,GAAG;AACpB,YAAI,IAAI,IAAI;AAAA,MACd,WAAW,MAAM,WAAW,KAAK,MAAM,CAAC,GAAG,OAAO,mBAAmB;AACnE,YAAI,IAAI,MAAM,CAAC,qBAAqB,CAAC;AACrC,cAAM,SAAS,EAAE,MAAM,WAAW,iBAAiB,MAAM,CAAC;AAAA,MAC5D,WAAW,MAAM,WAAW,GAAG;AAC7B,YAAI,IAAI,IAAI;AAAA,MACd,OAAO;AACL,YAAI,IAAI,MAAM;AACd,cAAM,SAAS,EAAE,MAAM,QAAQ,iBAAiB,MAAM,CAAC;AAAA,MACzD;AAAA,IACF;AAAA,IAEA,SAAS,OAAO;AACd,YAAM,EAAE,KAAK,IAAI,MAAM,SAAS;AAChC,YAAM,EAAE,MAAM,IAAI,IAAI,SAAS;AAE/B,UAAI,MAAM,OAAO,qBAAqB,MAAM,WAAW,GAAG;AACxD,mBAAW,YAAY;AACvB;AAAA,MACF;AAEA,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,qBAAW,aAAa,CAAC,KAAK,CAAC;AAC/B;AAAA,QACF,KAAK;AACH,oBAAU,mBAAmB;AAC7B,cAAI,IAAI,MAAM,CAAC,KAAK,CAAC;AACrB,gBAAM,SAAS,EAAE,MAAM,WAAW,iBAAiB,MAAM,CAAC;AAC1D;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,cAAI,IAAI,KAAK,KAAK;AAClB,cAAI,SAAS,WAAW;AACtB,kBAAM,SAAS,EAAE,MAAM,UAAU,CAAC;AAAA,UACpC;AACA;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY;AAClB,YAAU,aAAa;AACvB,SAAO;AACT;;;ACjJA,SAAS,eAAAC,oBAAkC;AAoBpC,SAAS,wBAAyC;AACvD,QAAM,QAAQA,aAA6B,OAAO;AAAA,IAChD,OAAO,CAAC;AAAA,EACV,EAAE;AAEF,QAAM,MAAyB;AAAA,IAC7B,KAAK,OAAO;AACV,YAAM,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,SAAS,EAAE,OAAO,KAAK,EAAE,CAAC;AAAA,IAC9D;AAAA,IACA,MAAM;AACJ,YAAM,IAAI,MAAM,SAAS,EAAE;AAC3B,UAAI,EAAE,UAAU,GAAG;AACjB,cAAM,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;AAAA,MAC9B,OAAO;AACL,cAAM,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,EAAE,EAAE,CAAC;AAAA,MAC1C;AAAA,IACF;AAAA,IACA,QAAQ,OAAO;AACb,YAAM,IAAI,MAAM,SAAS,EAAE;AAC3B,UAAI,EAAE,WAAW,GAAG;AAClB,cAAM,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;AAAA,MACnC,OAAO;AACL,cAAM,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;AAAA,MACtD;AAAA,IACF;AAAA,IACA,QAAQ;AACN,YAAM,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;AAAA,IAC9B;AAAA,IACA,MAAM,OAAO;AACX,YAAM,SAAS,EAAE,MAAM,CAAC;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,WAAW;AACjB,WAAS,MAAM;AACf,SAAO;AACT;;;AFPA,IAAM,kBAAmC;AAAA,EACvC,OAAO;AAAA,EACP,WAAW;AAAA,EACX,OAAO,CAAC;AAAA,EACR,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,eAAe;AAAA,EACf,cAAc;AAAA,EACd,MAAM;AACR;AAEO,SAAS,aACd,YACA,QACe;AACf,MAAI,eAAe,OAAQ,QAAO;AAClC,MAAI,OAAQ,QAAO,OAAO;AAC1B,MACE,OAAO,eAAe,eACtB,OAAQ,WAAwC,eAAe,YAC/D;AACA,UAAM,MACJ,WAGA,WAAW,8BAA8B;AAC3C,WAAO,IAAI,UAAU,SAAS;AAAA,EAChC;AACA,SAAO;AACT;AAIO,SAAS,cACd,UAAgC,CAAC,GACnB;AACd,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,cAA+B,UAAU,SAAS,gBAAgB;AACxE,QAAM,kBACJ,UAAU,iBAAiB,aAAa,aAAa,WAAW;AAClE,QAAM,eAAiC,UAAU,SAAS,CAAC;AAE3D,QAAM,MAAM,sBAAsB;AAClC,QAAM,YAAY,gBAAgB;AAAA,IAChC;AAAA,IACA,UAAU;AAAA,MACR,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,IACpB;AAAA,EACF,CAAC;AAGD,MAAI,gBAA+B;AACnC,QAAM,QAA0B;AAAA,IAC9B,KAAK;AAAA,IACL,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO;AAAA,EACT;AAEA,QAAM,mBAAqC;AAAA,IACzC,MAAMC,MAAK,SAAS,OAAO;AACzB,YAAM,MAAMA;AACZ,YAAM,UAAU,WAAW;AAC3B,YAAM,QAAQ,SAAS;AACvB,UAAI,kBAAkB,QAAQ;AAC5B,wBAAgB;AAChB,wBAAgB,KAAK;AAAA,MACvB,WAAW,kBAAkB,aAAa;AACxC,0BAAkB,KAAK;AAAA,MACzB;AACA,YAAM,SAAS,EAAE,OAAOA,KAAI,CAAC;AAAA,IAC/B;AAAA,IAEA,UAAU;AACR,UAAI,kBAAkB,aAAa;AACjC,wBAAgB;AAChB,cAAM,MAAM;AACZ,cAAM,UAAU;AAChB,cAAM,QAAQ;AACd,wBAAgB;AAAA,MAClB;AACA,YAAM,SAAS,EAAE,OAAO,KAAK,CAAC;AAAA,IAChC;AAAA,IAEA,IAAIA,MAAK;AACP,YAAM,SAASA,QAAO,MAAM;AAC5B,YAAM,YAAY;AAClB,UAAI,kBAAkB,QAAQ;AAC5B,cAAM,MAAM;AAAA,MACd;AACA,UAAI,kBAAkB,UAAU;AAC9B,wBAAgB;AAChB,wBAAgB,KAAK;AAAA,MACvB;AACA,YAAM,SAAS,EAAE,iBAAiB,MAAM,UAAU,CAAC;AAAA,IACrD;AAAA,IAEA,QAAQ;AACN,UAAI,kBAAkB,UAAU;AAC9B,wBAAgB;AAChB,cAAM,MAAM;AACZ,cAAM,UAAU;AAChB,cAAM,YAAY;AAClB,cAAM,QAAQ;AACd,wBAAgB;AAAA,MAClB;AACA,YAAM,SAAS,EAAE,iBAAiB,KAAK,CAAC;AAAA,IAC1C;AAAA,EACF;AAGA,QAAM,QAAQC,aAA0B,OAAO;AAAA,IAC7C,GAAG;AAAA,IACH,OAAO,UAAU,SAAS;AAAA,IAC1B,WAAW,UAAU,aAAa;AAAA,IAClC,OAAO,CAAC;AAAA,IACR,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,OAAO;AAAA,IACP,eAAe;AAAA,IACf,cAAc,UAAU,gBAAgB;AAAA,IACxC,MAAM,UAAU,QAAQ;AAAA,EAC1B,EAAE;AAGF,MAAI,UAAU,MAAM;AAClB,UAAM,EAAE,MAAM,IAAI,IAAI,SAAS;AAC/B,QAAI,MAAM,SAAS,EAAE,UAAU,OAAO;AACpC,YAAM,SAAS,EAAE,MAAM,CAAC;AAAA,IAC1B;AAAA,EACF,CAAC;AAED,YAAU,UAAU,MAAM;AACxB,UAAM,EAAE,gBAAgB,IAAI,UAAU,SAAS;AAC/C,QAAI,MAAM,SAAS,EAAE,oBAAoB,iBAAiB;AACxD,YAAM,SAAS,EAAE,gBAAgB,CAAC;AAAA,IACpC;AAAA,EACF,CAAC;AAGD,QAAM,UAAU;AACf,EAAC,QAAqC,MAAM;AAC5C,EAAC,QAAgC,OAAO;AACxC,EAAC,QAA4C,YAAY;AAE1D,UAAQ,SAAS,CAACD,SAAQ;AACxB,QAAI,QAAQ,MAAM,SAAS,EAAE,WAAWA,IAAG,EAAG;AAC9C,UAAM,SAAS,EAAE,WAAWA,KAAI,CAAC;AAAA,EACnC;AAEA,UAAQ,WAAW,CAAC,OAAO,aAAa;AACtC,UAAM,QAAQ,MAAM,SAAS;AAC7B,UAAM,eAAe,YAAY,aAAa,OAAO,WAAW;AAChE,QAAI,MAAM,UAAU,SAAS,MAAM,kBAAkB,aAAc;AACnE,UAAM,SAAS,EAAE,OAAO,eAAe,aAAa,CAAC;AAAA,EACvD;AAEA,UAAQ,YAAY,CAAC,WAAW;AAC9B,QAAI,MAAM,SAAS,EAAE,iBAAiB,OAAQ;AAC9C,UAAM,SAAS,EAAE,cAAc,OAAO,CAAC;AAAA,EACzC;AAGA,MAAI,aAAa,SAAS,GAAG;AAC3B,cAAU,WAAW,YAAY;AACjC,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,gBAAU,WAAW,SAAS,aAAa,CAAC,CAAC;AAAA,IAC/C;AAAA,EACF,WAAW,UAAU,iBAAiB;AACpC,cAAU,WAAW,cAAc;AAAA,EACrC;AACA,MAAI,UAAU,iBAAiB;AAC7B,qBAAiB,IAAI,UAAU,eAAe;AAAA,EAChD;AAEA,SAAO;AACT;;;AG3OA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":["DEFAULT_LIMIT","createStore","createStore","ref","createStore","el","svg","render","ref","el","MousePointerClick","createLucideElement","mode","createLucideElement","MousePointerClick","Sparkles","createLucideElement","Sparkles","el","svg","createLucideElement","fetch","ref","el","createLucideElement","svg","createLucideElement","ref","connect","machine","Highlighter","StickyNote","createLucideElement","idx","ref","Highlighter","StickyNote","icon","ref","svg","createLucideElement","Circle","el","Circle","frag","el","scrollArea","scrollArea","applyProps","sameRef","viewActions","render","COMMAND_PALETTE_ENTRY","ref","CircleCheck","Copy","createLucideElement","svg","createLucideElement","CircleCheck","Copy","ref","Copy","MessageCircleWarning","TicketPlus","createLucideElement","ref","createLucideElement","ref","Copy","MessageCircleWarning","TicketPlus","el","ref","DOM_BACKED_KINDS","ref","ref","el","ref","COMMAND_PALETTE_ENTRY","ref","ref","Compass","createLucideElement","toItem","ref","COMMAND_PALETTE_ENTRY","createLucideElement","Compass","capitalize","DOM_BACKED_KINDS","ref","ref","toItem","ref","COMMAND_PALETTE_ENTRY","createLucideElement","COMMAND_PALETTE_ENTRY","createLucideElement","Inbox","createLucideElement","ref","createLucideElement","COMMAND_PALETTE_ENTRY","Inbox","MapPin","createLucideElement","MapPin","leadingIcon","svg","createLucideElement","COMMAND_PALETTE_ENTRY","ref","el"]}
1
+ {"version":3,"sources":["../src/shared/entities/types.ts","../src/shared/entities/registry.ts","../src/shared/entities/style.ts","../src/shared/entities/display-name.ts","../src/browser/ingest/console.ts","../src/browser/ingest/native-fetch.ts","../src/browser/ingest/network.ts","../src/browser/ingest/index.ts","../src/browser/internal/cleanup.ts","../src/browser/internal/dark-mode.ts","../src/browser/internal/route-change.ts","../src/browser/session/store.ts","../src/browser/session/mode.ts","../src/browser/session/navigation.ts","../src/browser/styles/tailwind.built.css","../src/browser/surface/constants.ts","../src/browser/surface/host.ts","../src/browser/surface/cursor-tooltip.ts","../src/browser/surface/inspector.ts","../src/browser/surface/menu-bar.ts","../src/browser/internal/cn.ts","../src/browser/internal/el.ts","../src/browser/surface/keys.ts","../src/browser/surface/overlay.ts","../src/browser/surface/theme.ts","../src/browser/surface/shell.ts","../src/browser/report/constants.ts","../src/browser/surface/pin-layer.ts","../src/browser/views/core/types.ts","../src/browser/views/core/router.ts","../src/browser/internal/dev.ts","../src/browser/internal/lit.ts","../src/browser/internal/apply-props.ts","../src/browser/internal/lit-icon.ts","../src/browser/ui/cva.ts","../src/browser/ui/badge.ts","../src/browser/views/primitives/chip.ts","../src/browser/views/primitives/kind-icon.ts","../src/browser/views/primitives/icon-tile.ts","../src/browser/views/primitives/kind-chip.ts","../src/browser/machines/scroll-area.ts","../src/browser/machines/machine.ts","../src/browser/machines/normalize.ts","../src/browser/views/builder/spread-props.ts","../src/browser/views/render/detail.ts","../src/browser/internal/arrow-nav.ts","../src/browser/views/builder/filter.ts","../src/browser/views/labels.ts","../src/browser/ui/list-item.ts","../src/browser/ui/button.ts","../src/browser/views/primitives/entity-presence.ts","../src/browser/ui/kbd.ts","../src/browser/views/primitives/row.ts","../src/browser/views/primitives/entity-link.ts","../src/browser/views/primitives/text.ts","../src/browser/views/render/form.ts","../src/browser/machines/dialog.ts","../src/browser/ui/screenshot-lightbox.ts","../src/browser/views/render/list.ts","../src/browser/views/render/list-controller.ts","../src/browser/views/render/index.ts","../src/browser/views/core/mount.ts","../src/browser/views/core/shell.ts","../src/browser/machines/menu.ts","../src/browser/ui/menu.ts","../src/browser/views/core/actions-popup.ts","../src/browser/views/core/stack.ts","../src/browser/views/built-in/ids.ts","../src/browser/views/built-in/archive-reason.ts","../src/browser/views/built-in/command-palette.ts","../src/browser/views/builder/format-location.ts","../src/browser/views/builder/page-context.ts","../src/browser/internal/screenshot.ts","../src/browser/report/capture.ts","../src/browser/views/builder/resolve.ts","../src/browser/views/builder/detail-builder.ts","../src/browser/views/built-in/entity-detail.ts","../src/browser/views/built-in/entity-kind-list.ts","../src/browser/views/built-in/report-detail.ts","../src/browser/views/built-in/entity-reports.ts","../src/browser/views/built-in/explore-page.ts","../src/browser/internal/clipboard.ts","../src/browser/views/built-in/report/markdown.ts","../src/browser/views/built-in/report/schema.ts","../src/browser/views/built-in/report/view-builder.ts","../src/browser/views/built-in/report/host-report.ts","../src/browser/views/built-in/report/jira-report.ts","../src/browser/views/built-in/flow-detail.ts","../src/browser/views/built-in/flows.ts","../src/browser/views/built-in/glossary.ts","../src/browser/views/built-in/page-reports.ts","../src/browser/views/built-in/pin-settings.ts","../src/browser/ui/toast.ts","../src/browser/views/built-in/index.ts","../src/browser/create-uidex.ts"],"sourcesContent":["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 ReportRecord {\n id: string\n entity?: string\n reporter?: { id?: string; email?: string; name?: string }\n title?: string\n body: string\n type: string\n severity: string\n status: string\n labels?: string[]\n url: string\n route?: string\n pageTitle?: string\n screenshot?: string\n createdAt: string\n}\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 setReports(\n kind: EntityKind,\n id: string,\n reports: readonly ReportRecord[]\n ): void\n getReports(kind: EntityKind, id: string): readonly ReportRecord[]\n listReportKeys(): readonly string[]\n archiveReport?: (reportId: string, reason?: string) => void | Promise<void>\n onReportsChange(cb: () => void): () => void\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 const reports = new Map<string, readonly ReportRecord[]>()\n const reportsCbs = new Set<() => void>()\n\n const setReports = (\n kind: EntityKind,\n id: string,\n records: readonly ReportRecord[]\n ): void => {\n reports.set(`${kind}:${id}`, records)\n for (const cb of reportsCbs) cb()\n }\n\n const getReports = (kind: EntityKind, id: string): readonly ReportRecord[] =>\n reports.get(`${kind}:${id}`) ?? []\n\n const listReportKeys = (): readonly string[] => Array.from(reports.keys())\n\n const onReportsChange = (cb: () => void): (() => void) => {\n reportsCbs.add(cb)\n return () => reportsCbs.delete(cb)\n }\n\n return {\n add,\n get,\n list,\n query,\n byScope,\n touchedBy,\n setReports,\n getReports,\n listReportKeys,\n onReportsChange,\n }\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.reports.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 { CloudAdapter } from \"../../cloud/types\"\nexport type {\n ReportPayload,\n ReportResult,\n IngestConfig,\n} from \"@uidex/api-client\"\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?.setIngest(true)\n }\n\n function stop(): void {\n if (!active) return\n consoleCapture?.stop()\n networkCapture?.stop()\n active = false\n session?.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","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 type { Cleanup } from \"./cleanup\"\n\nconst ROUTE_CHANGE_EVENT = \"uidex:routechange\"\n\nlet patched = false\n\nfunction ensureHistoryPatched(): void {\n if (patched) return\n if (typeof window === \"undefined\" || typeof history === \"undefined\") return\n patched = true\n\n const dispatch = (): void => {\n window.dispatchEvent(new Event(ROUTE_CHANGE_EVENT))\n }\n\n const origPush = history.pushState\n history.pushState = function (this: History, ...args) {\n const result = origPush.apply(\n this,\n args as Parameters<History[\"pushState\"]>\n )\n dispatch()\n return result\n }\n\n const origReplace = history.replaceState\n history.replaceState = function (this: History, ...args) {\n const result = origReplace.apply(\n this,\n args as Parameters<History[\"replaceState\"]>\n )\n dispatch()\n return result\n }\n}\n\nexport function bindRouteChange(handler: () => void): Cleanup {\n if (typeof window === \"undefined\") return () => {}\n ensureHistoryPatched()\n window.addEventListener(\"popstate\", handler)\n window.addEventListener(ROUTE_CHANGE_EVENT, handler)\n return () => {\n window.removeEventListener(\"popstate\", handler)\n window.removeEventListener(ROUTE_CHANGE_EVENT, handler)\n }\n}\n","import { createStore, type StoreApi } from \"zustand/vanilla\"\n\nimport { sameRef, type EntityRef } from \"../../shared/entities\"\nimport { createModeStore, type ModeStore } from \"./mode\"\nimport { createNavigationStore, type NavigationStore } from \"./navigation\"\nimport type {\n ResolvedTheme,\n SessionSnapshot,\n SessionState,\n ThemePreference,\n ViewStackEntry,\n} from \"./types\"\n\nexport interface HighlightContext {\n ref: EntityRef | null\n element: HTMLElement | null\n pinnedRef: EntityRef | null\n color: string | null\n}\n\nexport interface HighlightActions {\n hover(\n ref: EntityRef,\n element?: HTMLElement | null,\n color?: string | null\n ): void\n unhover(): void\n pin(ref?: EntityRef): void\n unpin(): void\n}\n\nexport type SessionStore = StoreApi<SessionState> & {\n readonly nav: NavigationStore\n readonly mode: ModeStore\n readonly highlight: HighlightActions\n select(ref: EntityRef | null): void\n setTheme(theme: ThemePreference, resolved?: ResolvedTheme): void\n setIngest(active: boolean): void\n}\n\nexport interface CreateSessionOptions extends Partial<SessionSnapshot> {\n detectTheme?: () => ResolvedTheme\n onMountInspector?: () => void\n onDestroyInspector?: () => void\n onShowOverlay?: (context: HighlightContext) => void\n onHideOverlay?: () => void\n onUpdateOverlay?: (context: HighlightContext) => void\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 user: null,\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 HighlightMode = \"none\" | \"transient\" | \"pinned\"\n\nexport function createSession(\n options: CreateSessionOptions = {}\n): SessionStore {\n const {\n detectTheme,\n onMountInspector,\n onDestroyInspector,\n onShowOverlay,\n onHideOverlay,\n onUpdateOverlay,\n ...overrides\n } = 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 nav = createNavigationStore()\n const modeStore = createModeStore({\n nav,\n bindings: {\n mountInspector: onMountInspector,\n destroyInspector: onDestroyInspector,\n },\n })\n\n // --- Mutable highlight state ---\n let highlightMode: HighlightMode = \"none\"\n const hlCtx: HighlightContext = {\n ref: null,\n element: null,\n pinnedRef: null,\n color: null,\n }\n\n const highlightActions: HighlightActions = {\n hover(ref, element, color) {\n hlCtx.ref = ref\n hlCtx.element = element ?? null\n hlCtx.color = color ?? null\n if (highlightMode === \"none\") {\n highlightMode = \"transient\"\n onShowOverlay?.(hlCtx)\n } else if (highlightMode === \"transient\") {\n onUpdateOverlay?.(hlCtx)\n }\n store.setState({ hover: ref })\n },\n\n unhover() {\n if (highlightMode === \"transient\") {\n highlightMode = \"none\"\n hlCtx.ref = null\n hlCtx.element = null\n hlCtx.color = null\n onHideOverlay?.()\n }\n store.setState({ hover: null })\n },\n\n pin(ref) {\n const pinRef = ref ?? hlCtx.ref\n hlCtx.pinnedRef = pinRef\n if (highlightMode === \"none\") {\n hlCtx.ref = pinRef\n }\n if (highlightMode !== \"pinned\") {\n highlightMode = \"pinned\"\n onShowOverlay?.(hlCtx)\n }\n store.setState({ pinnedHighlight: hlCtx.pinnedRef })\n },\n\n unpin() {\n if (highlightMode === \"pinned\") {\n highlightMode = \"none\"\n hlCtx.ref = null\n hlCtx.element = null\n hlCtx.pinnedRef = null\n hlCtx.color = null\n onHideOverlay?.()\n }\n store.setState({ pinnedHighlight: null })\n },\n }\n\n // --- Create Zustand store ---\n const store = createStore<SessionState>(() => ({\n ...defaultSnapshot,\n hover: overrides.hover ?? null,\n selection: overrides.selection ?? null,\n stack: [],\n pinnedHighlight: null,\n inspectorActive: false,\n theme: initialPref,\n resolvedTheme: initialResolved,\n ingestActive: overrides.ingestActive ?? false,\n user: overrides.user ?? null,\n }))\n\n // --- Auto-sync sub-stores → session store ---\n nav.subscribe(() => {\n const { stack } = nav.getState()\n if (store.getState().stack !== stack) {\n store.setState({ stack })\n }\n })\n\n modeStore.subscribe(() => {\n const { inspectorActive } = modeStore.getState()\n if (store.getState().inspectorActive !== inspectorActive) {\n store.setState({ inspectorActive })\n }\n })\n\n // --- Build session object ---\n const session = store as SessionStore\n ;(session as { nav: NavigationStore }).nav = nav\n ;(session as { mode: ModeStore }).mode = modeStore\n ;(session as { highlight: HighlightActions }).highlight = highlightActions\n\n session.select = (ref) => {\n if (sameRef(store.getState().selection, ref)) return\n store.setState({ selection: ref })\n }\n\n session.setTheme = (theme, resolved) => {\n const state = store.getState()\n const nextResolved = resolved ?? resolveTheme(theme, detectTheme)\n if (state.theme === theme && state.resolvedTheme === nextResolved) return\n store.setState({ theme, resolvedTheme: nextResolved })\n }\n\n session.setIngest = (active) => {\n if (store.getState().ingestActive === active) return\n store.setState({ ingestActive: active })\n }\n\n // --- Hydrate initial state ---\n if (initialStack.length > 0) {\n modeStore.transition.openPalette()\n for (let i = 1; i < initialStack.length; i++) {\n modeStore.transition.pushView(initialStack[i])\n }\n } else if (overrides.inspectorActive) {\n modeStore.transition.openInspector()\n }\n if (overrides.pinnedHighlight) {\n highlightActions.pin(overrides.pinnedHighlight)\n }\n\n return session\n}\n","import { createStore, type StoreApi } from \"zustand/vanilla\"\n\nimport type { NavigationStore } from \"./navigation\"\nimport type { ViewStackEntry } from \"./types\"\n\nexport type SurfaceMode = \"idle\" | \"inspecting\" | \"palette\" | \"viewing\"\n\nexport interface ModeSnapshot {\n mode: SurfaceMode\n inspectorActive: boolean\n}\n\nexport interface ModeBindings {\n mountInspector?: () => void\n destroyInspector?: () => void\n}\n\nexport interface ModeTransitions {\n openPalette(): void\n openInspector(): void\n closeInspector(): void\n toggleInspector(): void\n enterViewing(initialStack: ViewStackEntry[]): void\n dismiss(): void\n popOrTransition(): void\n pushView(entry: ViewStackEntry): void\n}\n\nexport type ModeStore = StoreApi<ModeSnapshot> & {\n transition: ModeTransitions\n}\n\nexport interface CreateModeStoreOptions {\n nav: NavigationStore\n bindings?: ModeBindings\n}\n\nconst COMMAND_PALETTE_ENTRY: ViewStackEntry = {\n id: \"command-palette\",\n ref: null,\n}\n\nexport function createModeStore(options: CreateModeStoreOptions): ModeStore {\n const { nav, bindings } = options\n\n const store = createStore<ModeSnapshot>(() => ({\n mode: \"idle\",\n inspectorActive: false,\n }))\n\n const transition: ModeTransitions = {\n openPalette() {\n const prev = store.getState()\n if (prev.mode === \"inspecting\") {\n bindings?.destroyInspector?.()\n }\n nav.nav.reset([COMMAND_PALETTE_ENTRY])\n store.setState({ mode: \"palette\", inspectorActive: false })\n },\n\n openInspector() {\n bindings?.mountInspector?.()\n nav.nav.clear()\n store.setState({ mode: \"inspecting\", inspectorActive: true })\n },\n\n closeInspector() {\n bindings?.destroyInspector?.()\n nav.nav.clear()\n store.setState({ mode: \"idle\", inspectorActive: false })\n },\n\n toggleInspector() {\n if (store.getState().mode === \"inspecting\") {\n transition.closeInspector()\n } else {\n transition.openInspector()\n }\n },\n\n enterViewing(initialStack) {\n const prev = store.getState()\n if (prev.mode === \"inspecting\") {\n bindings?.destroyInspector?.()\n }\n nav.nav.reset(initialStack)\n store.setState({ mode: \"viewing\", inspectorActive: false })\n },\n\n dismiss() {\n const prev = store.getState()\n if (prev.mode === \"inspecting\") {\n bindings?.destroyInspector?.()\n }\n nav.nav.clear()\n store.setState({ mode: \"idle\", inspectorActive: false })\n },\n\n popOrTransition() {\n const { stack } = nav.getState()\n if (stack.length > 2) {\n nav.nav.pop()\n } else if (stack.length === 2 && stack[0]?.id === \"command-palette\") {\n nav.nav.reset([COMMAND_PALETTE_ENTRY])\n store.setState({ mode: \"palette\", inspectorActive: false })\n } else if (stack.length === 2) {\n nav.nav.pop()\n } else {\n nav.nav.clear()\n store.setState({ mode: \"idle\", inspectorActive: false })\n }\n },\n\n pushView(entry) {\n const { mode } = store.getState()\n const { stack } = nav.getState()\n\n if (entry.id === \"command-palette\" && stack.length === 0) {\n transition.openPalette()\n return\n }\n\n switch (mode) {\n case \"idle\":\n transition.enterViewing([entry])\n break\n case \"inspecting\":\n bindings?.destroyInspector?.()\n nav.nav.reset([entry])\n store.setState({ mode: \"viewing\", inspectorActive: false })\n break\n case \"palette\":\n case \"viewing\":\n nav.nav.push(entry)\n if (mode === \"palette\") {\n store.setState({ mode: \"viewing\" })\n }\n break\n }\n },\n }\n\n const modeStore = store as ModeStore\n modeStore.transition = transition\n return modeStore\n}\n","import { createStore, type StoreApi } from \"zustand/vanilla\"\n\nimport type { ViewStackEntry } from \"./types\"\n\nexport interface NavigationState {\n stack: ViewStackEntry[]\n}\n\nexport interface NavigationActions {\n push(entry: ViewStackEntry): void\n pop(): void\n replace(entry: ViewStackEntry): void\n clear(): void\n reset(stack: ViewStackEntry[]): void\n}\n\nexport type NavigationStore = StoreApi<NavigationState> & {\n nav: NavigationActions\n}\n\nexport function createNavigationStore(): NavigationStore {\n const store = createStore<NavigationState>(() => ({\n stack: [],\n }))\n\n const nav: NavigationActions = {\n push(entry) {\n store.setState({ stack: [...store.getState().stack, entry] })\n },\n pop() {\n const s = store.getState().stack\n if (s.length <= 1) {\n store.setState({ stack: [] })\n } else {\n store.setState({ stack: s.slice(0, -1) })\n }\n },\n replace(entry) {\n const s = store.getState().stack\n if (s.length === 0) {\n store.setState({ stack: [entry] })\n } else {\n store.setState({ stack: [...s.slice(0, -1), entry] })\n }\n },\n clear() {\n store.setState({ stack: [] })\n },\n reset(stack) {\n store.setState({ stack })\n },\n }\n\n const navStore = store as NavigationStore\n navStore.nav = nav\n return navStore\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 --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\",\n Roboto, sans-serif;\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 --font-weight-bold: 700;\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 .collapse {\n visibility: collapse;\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 .-top-1 {\n top: calc(var(--spacing) * -1);\n }\n .-right-1 {\n right: calc(var(--spacing) * -1);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .bottom-full {\n bottom: 100%;\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 .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n .mb-6 {\n margin-bottom: calc(var(--spacing) * 6);\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-2 {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n .size-3 {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\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-12 {\n width: calc(var(--spacing) * 12);\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-0\\.5 {\n gap: calc(var(--spacing) * 0.5);\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-emerald-500 {\n background-color: var(--color-emerald-500);\n }\n .bg-fuchsia-50 {\n background-color: var(--color-fuchsia-50);\n }\n .bg-info {\n background-color: var(--info);\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 .pt-2 {\n padding-top: calc(var(--spacing) * 2);\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 .text-\\[9px\\] {\n font-size: 9px;\n }\n .text-\\[10px\\] {\n font-size: 10px;\n }\n .text-\\[11px\\] {\n font-size: 11px;\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\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 {\n color: var(--destructive);\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-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 .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\\: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\\: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-50 {\n &:disabled {\n opacity: 50%;\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 .\\[\\[data-kbd-nav\\]_\\&\\]\\:focus-within\\:bg-accent {\n [data-kbd-nav] & {\n &:focus-within {\n background-color: var(--accent);\n }\n }\n }\n .\\[\\[data-kbd-nav\\]_\\&\\]\\:focus-within\\:text-accent-foreground {\n [data-kbd-nav] & {\n &:focus-within {\n color: var(--accent-foreground);\n }\n }\n }\n .\\[\\[data-kbd-nav\\]_\\&\\]\\:focus\\:bg-accent {\n [data-kbd-nav] & {\n &:focus {\n background-color: var(--accent);\n }\n }\n }\n .\\[\\[data-kbd-nav\\]_\\&\\]\\:focus\\:text-accent-foreground {\n [data-kbd-nav] & {\n &:focus {\n color: var(--accent-foreground);\n }\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 = 2147483630\nexport const Z_OVERLAY = 2147483635\nexport const Z_PIN_LAYER = 2147483640\nexport const Z_CHROME = 2147483645\n\nexport const SURFACE_IGNORE_SELECTOR = `.${SURFACE_HOST_CLASS},.${SURFACE_CONTAINER_CLASS}`\n\nimport type { EntityKind } from \"../../shared/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, Z_CHROME } 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.position = \"relative\"\n chromeEl.style.zIndex = String(Z_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 \"../../shared/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 const demoted = entity.kind === \"primitive\"\n applyColor(style?.color ?? DEFAULT_TOOLTIP_COLOR)\n el.style.opacity = demoted ? \"0.55\" : \"1\"\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 =\n \"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 \"../../shared/entities\"\nimport type { Registry } from \"../../shared/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 semantic: InspectorMatch[] = []\n const primitives: 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 const match: InspectorMatch = {\n element: node,\n ref,\n entity,\n label: displayName(entity, node),\n }\n if (kind === \"primitive\") {\n primitives.push(match)\n } else {\n semantic.push(match)\n }\n }\n }\n }\n }\n node = node.parentElement\n }\n return semantic.concat(primitives)\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.highlight.hover(stack[0].ref)\n }\n onHover?.(makeStack(), cursor)\n } else if (currentEl) {\n currentEl = null\n stack = []\n layerIndex = 0\n session.highlight.unhover()\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.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.highlight.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.highlight.unhover()\n onHover?.(null, null)\n },\n }\n}\n","import {\n ChevronLeft,\n ChevronRight,\n Command,\n Highlighter,\n MapPin,\n MousePointerClick,\n Users,\n createElement as createLucideElement,\n} from \"lucide\"\nimport type { RealtimeChannel, RealtimePresenceUser } from \"../../cloud/types\"\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\"\nimport type { PinLayer } from \"./pin-layer\"\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 channel?: RealtimeChannel | null\n pinLayer?: PinLayer | null\n}\n\nexport interface MenuBar {\n destroy(): void\n snapTo(corner: Corner): void\n snapToNearest(x: number, y: number): void\n setPinLayer(layer: PinLayer): 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 channel = null,\n pinLayer: initialPinLayer = null,\n } = options\n\n let activePinLayer: PinLayer | null = initialPinLayer\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.highlight.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.mode.transition.toggleInspector()\n inspectBtn.blur()\n })\n root.appendChild(inspectBtn)\n\n // ── pin commit cycler ──\n const pinIcon = createLucideElement(MapPin)\n pinIcon.setAttribute(\"class\", \"size-3.5\")\n pinIcon.setAttribute(\"aria-hidden\", \"true\")\n const pinBtn = el(\n \"button\",\n {\n class: BUTTON_CLASS,\n attrs: {\n type: \"button\",\n \"data-uidex-menubar-pins\": \"\",\n \"aria-label\": \"Report pins\",\n },\n },\n pinIcon\n )\n\n const commitCycler = el(\"div\", {\n class: \"relative z-1 inline-flex items-center gap-0.5\",\n attrs: { \"data-uidex-menubar-commit-cycler\": \"\" },\n })\n commitCycler.hidden = true\n\n const prevIcon = createLucideElement(ChevronLeft)\n prevIcon.setAttribute(\"class\", \"size-3\")\n prevIcon.setAttribute(\"aria-hidden\", \"true\")\n const prevBtn = el(\n \"button\",\n {\n class: BUTTON_CLASS,\n attrs: { type: \"button\", \"aria-label\": \"Previous commit\" },\n style: { width: \"18px\", height: \"18px\" },\n },\n prevIcon\n )\n\n const commitLabel = el(\"span\", {\n class:\n \"relative z-1 whitespace-nowrap px-1 text-[10px] font-mono text-muted-foreground\",\n attrs: { \"data-uidex-menubar-commit-label\": \"\" },\n })\n\n const nextIcon = createLucideElement(ChevronRight)\n nextIcon.setAttribute(\"class\", \"size-3\")\n nextIcon.setAttribute(\"aria-hidden\", \"true\")\n const nextBtn = el(\n \"button\",\n {\n class: BUTTON_CLASS,\n attrs: { type: \"button\", \"aria-label\": \"Next commit\" },\n style: { width: \"18px\", height: \"18px\" },\n },\n nextIcon\n )\n\n commitCycler.appendChild(prevBtn)\n commitCycler.appendChild(commitLabel)\n commitCycler.appendChild(nextBtn)\n\n const pinWrapper = el(\"div\", {\n class: \"relative z-1 inline-flex items-center gap-0.5\",\n attrs: { \"data-uidex-menubar-pin-wrapper\": \"\" },\n })\n pinWrapper.hidden = true\n pinWrapper.appendChild(pinBtn)\n pinWrapper.appendChild(commitCycler)\n root.appendChild(pinWrapper)\n\n const updatePinUI = (): void => {\n if (!activePinLayer) {\n pinWrapper.hidden = true\n return\n }\n const pinsVisible = activePinLayer.visible\n const state = activePinLayer.filterState\n const hasCommits = state.commits.length > 0\n pinWrapper.hidden = false\n commitCycler.hidden = !pinsVisible || !hasCommits\n\n if (state.commitIndex === -1 || !state.commits[state.commitIndex]) {\n commitLabel.textContent = `all (${state.commits.length})`\n } else {\n const sha = state.commits[state.commitIndex] ?? \"\"\n commitLabel.textContent = sha.slice(0, 7)\n }\n\n pinBtn.className = cn(BUTTON_CLASS, pinsVisible && BUTTON_ACTIVE_CLASS)\n }\n\n pinBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n if (activePinLayer) {\n activePinLayer.setVisible(!activePinLayer.visible)\n }\n })\n\n prevBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n activePinLayer?.prevCommit()\n })\n\n nextBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n activePinLayer?.nextCommit()\n })\n\n let unsubscribePinFilter = activePinLayer?.onFilterChange(() => updatePinUI())\n\n // ── presence indicator ──\n const presenceIcon = createLucideElement(Users)\n presenceIcon.setAttribute(\"class\", \"size-3.5\")\n presenceIcon.setAttribute(\"aria-hidden\", \"true\")\n const presenceBtn = el(\n \"button\",\n {\n class: BUTTON_CLASS,\n attrs: {\n type: \"button\",\n \"data-uidex-menubar-presence\": \"\",\n \"aria-label\": \"Online users\",\n },\n },\n presenceIcon\n )\n presenceBtn.hidden = true\n\n const presenceBadge = el(\"span\", {\n class:\n \"absolute -top-1 -right-1 z-1 inline-flex size-3.5 items-center justify-center rounded-full bg-info text-[9px] font-bold leading-none text-info-foreground\",\n })\n presenceBtn.appendChild(presenceBadge)\n\n const presencePopover = el(\"div\", {\n class:\n \"absolute bottom-full mb-2 right-0 min-w-32 rounded-lg border border-border bg-popover p-2 text-xs text-popover-foreground shadow-lg\",\n })\n presencePopover.hidden = true\n\n let presencePopoverVisible = false\n presenceBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n presencePopoverVisible = !presencePopoverVisible\n presencePopover.hidden = !presencePopoverVisible\n })\n\n const presenceWrapper = el(\"div\", { class: \"relative z-1 inline-flex\" }, [\n presenceBtn,\n presencePopover,\n ])\n presenceWrapper.hidden = true\n root.appendChild(presenceWrapper)\n\n let presenceUsers: RealtimePresenceUser[] = []\n\n const updatePresenceUI = (): void => {\n // Filter out the local user — we only show *other* peers\n const localUserId = session.getState().user?.id ?? null\n const peers = localUserId\n ? presenceUsers.filter((u) => u.userId !== localUserId)\n : presenceUsers\n const count = peers.length\n\n presenceWrapper.hidden = count === 0\n presenceBadge.textContent = String(count)\n presenceBtn.setAttribute(\n \"aria-label\",\n count === 1 ? \"1 other user online\" : `${count} other users online`\n )\n\n // Update popover content\n presencePopover.innerHTML = \"\"\n for (const user of peers) {\n const row = el(\"div\", {\n class: \"flex items-center gap-2 rounded px-1.5 py-1\",\n })\n const dot = el(\"span\", {\n class: \"inline-block size-2 shrink-0 rounded-full bg-emerald-500\",\n })\n const name = el(\"span\", {\n class: \"truncate\",\n text: user.name || \"Anonymous\",\n })\n row.appendChild(dot)\n row.appendChild(name)\n presencePopover.appendChild(row)\n }\n }\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.mode.transition.dismiss()\n } else {\n session.mode.transition.openPalette()\n }\n paletteBtn.blur()\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 const unsubscribePresence = channel?.onPresence(\n (users: RealtimePresenceUser[]) => {\n presenceUsers = users\n updatePresenceUI()\n }\n )\n\n return {\n destroy() {\n unsubscribePinFilter?.()\n unsubscribePresence?.()\n unsubscribeSession()\n root.removeEventListener(\"mousedown\", onMouseDown)\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"mouseup\", onMouseUp)\n root.remove()\n },\n setPinLayer(layer: PinLayer) {\n unsubscribePinFilter?.()\n activePinLayer = layer\n unsubscribePinFilter = layer.onFilterChange(() => updatePinUI())\n updatePinUI()\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 { Cleanup } from \"../internal/cleanup\"\nimport type { SessionStore } from \"../session\"\nimport type { PinLayer } from \"./pin-layer\"\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 const PINS_SHORTCUT: PaletteShortcut = { key: \"u\" }\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 type EscapeHandler = () => boolean\n\nexport interface KeyBindingHandle {\n destroy(): void\n pushEscapeLayer(handler: EscapeHandler): Cleanup\n}\n\nexport interface BindShadowKeysOptions {\n shadowRoot: ShadowRoot\n session: SessionStore\n getActionsPopup: () => ActionsPopupHandle | null\n getPinLayer?: () => PinLayer | null\n shortcut?: PaletteShortcut\n}\n\nexport function bindShadowKeys(\n options: BindShadowKeysOptions\n): KeyBindingHandle {\n const { shadowRoot, session, getActionsPopup, getPinLayer } = options\n const shortcut = options.shortcut ?? DEFAULT_SHORTCUT\n const escapeStack: EscapeHandler[] = []\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 isCmdU = matchesShortcut(e, PINS_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 && !isCmdU && !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 (isCmdU) {\n const pinLayer = getPinLayer?.()\n if (pinLayer) {\n e.preventDefault()\n e.stopPropagation()\n pinLayer.setVisible(!pinLayer.visible)\n }\n return\n }\n\n if (isCmdI) {\n e.preventDefault()\n e.stopPropagation()\n session.mode.transition.toggleInspector()\n return\n }\n\n if (isCmdK) {\n e.preventDefault()\n e.stopPropagation()\n const { mode } = session.mode.getState()\n if (session.nav.getState().stack.length === 0) {\n session.mode.transition.openPalette()\n } else if (mode === \"palette\") {\n if (popup) {\n popup.open()\n } else {\n session.mode.transition.dismiss()\n }\n }\n return\n }\n\n // ESC / Cmd+[ — check escape layers first (e.g. lightbox)\n if (escapeStack.length > 0) {\n const top = escapeStack[escapeStack.length - 1]\n if (top()) {\n e.preventDefault()\n e.stopPropagation()\n return\n }\n }\n\n const { mode } = session.mode.getState()\n if (mode === \"viewing\") {\n e.preventDefault()\n e.stopPropagation()\n session.mode.transition.popOrTransition()\n } else if (mode === \"inspecting\") {\n e.preventDefault()\n e.stopPropagation()\n session.mode.transition.closeInspector()\n } else if (mode === \"palette\") {\n e.preventDefault()\n e.stopPropagation()\n session.mode.transition.dismiss()\n } else if (session.getState().pinnedHighlight !== null) {\n e.preventDefault()\n e.stopPropagation()\n session.highlight.unpin()\n }\n }\n\n const doc = shadowRoot.ownerDocument\n doc.addEventListener(\"keydown\", onKeydown, { capture: true })\n shadowRoot.addEventListener(\"keydown\", onKeydown as EventListener, {\n capture: true,\n })\n\n return {\n destroy() {\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 pushEscapeLayer(handler: EscapeHandler): Cleanup {\n escapeStack.push(handler)\n return () => {\n const idx = escapeStack.indexOf(handler)\n if (idx >= 0) escapeStack.splice(idx, 1)\n }\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 | ShadowRoot\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.opacity = \"0\"\n backdrop.style.visibility = \"hidden\"\n backdrop.style.transition = \"opacity 150ms ease-out\"\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.opacity = \"0\"\n box.style.transition = \"opacity 150ms ease-out\"\n box.style.visibility = \"hidden\"\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.addEventListener(\"transitionend\", () => {\n if (box.style.opacity === \"0\") {\n box.style.visibility = \"hidden\"\n }\n })\n backdrop.addEventListener(\"transitionend\", () => {\n if (backdrop.style.opacity === \"0\") {\n backdrop.style.visibility = \"hidden\"\n backdrop.style.clipPath = \"\"\n }\n })\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 if (opts.backdrop) {\n backdrop.style.visibility = \"visible\"\n backdrop.style.opacity = \"1\"\n } else {\n backdrop.style.opacity = \"0\"\n backdrop.style.visibility = \"hidden\"\n backdrop.style.clipPath = \"\"\n }\n }\n\n const overlay: Overlay = {\n onDismiss: null,\n show(nextTarget, showOpts) {\n const wasVisible = target !== null\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 if (!wasVisible) {\n box.style.opacity = \"0\"\n box.style.visibility = \"visible\"\n box.offsetHeight // eslint-disable-line @typescript-eslint/no-unused-expressions\n }\n box.style.opacity = \"1\"\n attach()\n },\n hide() {\n target = null\n box.style.opacity = \"0\"\n backdrop.style.opacity = \"0\"\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.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 \"../../shared/entities\"\nimport type { RealtimeChannel } from \"../../cloud/types\"\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 type { PinLayer } from \"./pin-layer\"\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 channel?: RealtimeChannel | null\n pinLayer?: PinLayer | null\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.shadowRoot })\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 const demoted = current.ref.kind === \"primitive\"\n overlay.show(current.element, {\n color: KIND_STYLE[current.ref.kind].color,\n ...(demoted && { borderStyle: \"dashed\", fillOpacity: 0.04 }),\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 channel: options.channel ?? null,\n pinLayer: options.pinLayer ?? null,\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 {\n ReportType,\n ReportSeverity,\n ReportStatus,\n} from \"@uidex/api-client\"\n\nexport const TYPE_LABELS: Record<ReportType, string> = {\n bug: \"Bug\",\n request: \"Request\",\n suggestion: \"Suggestion\",\n}\n\nexport const SEVERITY_LABELS: Record<ReportSeverity, string> = {\n critical: \"Critical\",\n high: \"High\",\n medium: \"Medium\",\n low: \"Low\",\n}\n\nexport const STATUS_LABELS: Record<ReportStatus, string> = {\n open: \"Open\",\n triaged: \"Triaged\",\n in_progress: \"In Progress\",\n resolved: \"Resolved\",\n closed: \"Closed\",\n}\n\nexport function authorLabel(rec: {\n reporter?: { name?: string; email?: string } | null\n reporterName?: string\n reporterEmail?: string\n}): string {\n const name = rec.reporter?.name ?? rec.reporterName\n const email = rec.reporter?.email ?? rec.reporterEmail\n return name?.trim() || email?.trim() || \"Anonymous\"\n}\n\nexport function relativeTime(iso: string): string {\n const ms = Date.parse(iso)\n if (!Number.isFinite(ms)) return \"\"\n const s = Math.floor((Date.now() - ms) / 1000)\n if (s < 60) return \"just now\"\n const m = Math.floor(s / 60)\n if (m < 60) return `${m}m ago`\n const h = Math.floor(m / 60)\n if (h < 24) return `${h}h ago`\n const d = Math.floor(h / 24)\n if (d < 30) return `${d}d ago`\n return `${Math.floor(d / 30)}mo ago`\n}\n","import type { EntityKind } from \"../../shared/entities\"\nimport type {\n CloudAdapter,\n PinRecord,\n RealtimeChannel,\n} from \"../../cloud/types\"\nimport { authorLabel, relativeTime } from \"../report/constants\"\nimport {\n Bug,\n CircleHelp,\n Lightbulb,\n MessageSquarePlus,\n Sparkles,\n StickyNote,\n createElement as createLucideElement,\n type IconNode,\n} from \"lucide\"\nimport { UIDEX_ATTR_TO_KIND, Z_PIN_LAYER } from \"./constants\"\nimport { resolveEntityElement } from \"./inspector\"\n\nconst KNOWN_KINDS = new Set<string>(UIDEX_ATTR_TO_KIND.map(([, k]) => k))\n\nexport function parseComponentRef(componentId: string): {\n kind: EntityKind\n id: string\n} {\n const colon = componentId.indexOf(\":\")\n if (colon > 0) {\n const maybeKind = componentId.slice(0, colon)\n if (KNOWN_KINDS.has(maybeKind)) {\n return { kind: maybeKind as EntityKind, id: componentId.slice(colon + 1) }\n }\n }\n return { kind: \"element\", id: componentId }\n}\n\nexport type PinMatchMode = \"route\" | \"pathname\" | \"component\"\n\nexport interface PinFilter {\n branch: string | null\n commit: string | null\n}\n\nexport interface PinFilterState extends PinFilter {\n readonly commits: readonly string[]\n readonly commitIndex: number\n}\n\nexport interface PinLayer {\n setPins(pins: readonly PinRecord[]): void\n addPin(pin: PinRecord): void\n removePin(reportId: string): void\n clear(): void\n getPinsForElement(componentId: string): readonly PinRecord[]\n getAllPinsForElement(componentId: string): readonly PinRecord[]\n getAllPins(): readonly PinRecord[]\n attachChannel(channel: RealtimeChannel): () => void\n attachCloud(opts: AttachCloudOpts): () => void\n refresh(): Promise<void>\n\n readonly filterState: PinFilterState\n setFilter(filter: Partial<PinFilter>): void\n nextCommit(): void\n prevCommit(): void\n onFilterChange(cb: () => void): () => void\n\n readonly visible: boolean\n setVisible(visible: boolean): void\n\n destroy(): void\n}\n\nexport interface AttachCloudOpts {\n cloud: Pick<CloudAdapter, \"pins\">\n channel?: RealtimeChannel | null\n getRoute: () => string\n getPathname: () => string\n getVisibleEntities: () => string[]\n getMatchMode: () => PinMatchMode\n onError?: (err: unknown) => void\n}\n\nexport interface PinLayerOptions {\n container: Element | ShadowRoot\n onOpenPinDetail?: (componentId: string, reportId: string) => void\n onHoverPin?: (anchor: HTMLElement | null, componentId: string | null) => void\n onPinsChanged?: () => void\n currentBranch?: string | null\n}\n\ninterface IndicatorState {\n componentId: string\n wrap: HTMLElement\n el: HTMLElement\n iconEl: HTMLElement\n badgeEl: HTMLElement\n contentEl: HTMLElement\n anchor: HTMLElement | null\n pinIndex: number\n expanded: boolean\n lastType: string | null\n}\n\n// ── Visual constants ──\n\nconst DOT = 28\nconst BORDER = 2\nconst ICON = 16\nconst PAD = 10\nconst CARD_W = 280\nconst LINE_H = 17 // 12px * 1.4\nconst HEADER_H = 16\nconst BODY_MT = 2\nconst CYCLE_H = 18 // 10px font + 4px margin-top\nconst CARD_H = PAD + HEADER_H + BODY_MT + LINE_H * 2 + CYCLE_H + PAD\nconst INSET = 4\n\nconst TYPE_ICON: Record<string, IconNode> = {\n bug: Bug,\n request: MessageSquarePlus,\n suggestion: Lightbulb,\n feature: Lightbulb,\n improvement: Sparkles,\n question: CircleHelp,\n note: StickyNote,\n}\n\nconst TYPE_COLOR: Record<string, { bg: string; fg: string }> = {\n bug: {\n bg: \"color-mix(in srgb, var(--destructive) 10%, var(--background))\",\n fg: \"var(--destructive-foreground)\",\n },\n request: {\n bg: \"color-mix(in srgb, var(--info) 10%, var(--background))\",\n fg: \"var(--info-foreground)\",\n },\n suggestion: {\n bg: \"color-mix(in srgb, var(--warning) 10%, var(--background))\",\n fg: \"var(--warning-foreground)\",\n },\n feature: { bg: \"var(--secondary)\", fg: \"var(--secondary-foreground)\" },\n improvement: {\n bg: \"color-mix(in srgb, var(--info) 10%, var(--background))\",\n fg: \"var(--info-foreground)\",\n },\n question: {\n bg: \"color-mix(in srgb, var(--warning) 10%, var(--background))\",\n fg: \"var(--warning-foreground)\",\n },\n note: {\n bg: \"color-mix(in srgb, var(--primary) 10%, var(--background))\",\n fg: \"var(--primary)\",\n },\n}\n\nconst FALLBACK_COLOR = {\n bg: \"var(--secondary)\",\n fg: \"var(--secondary-foreground)\",\n}\n\nfunction typeColors(t: string) {\n return TYPE_COLOR[t] ?? FALLBACK_COLOR\n}\nfunction typeIcon(t: string) {\n return TYPE_ICON[t] ?? StickyNote\n}\n\n// ── Transition tokens ──\n\nconst EASE_OUT = \"cubic-bezier(0.16, 1, 0.3, 1)\"\nconst DUR_FADE = 120\nconst DUR_EXPAND = 250\nconst T_FADE = `opacity ${DUR_FADE}ms ease`\n\n// ── Factory ──\n\nexport function createPinLayer(options: PinLayerOptions): PinLayer {\n const { container, onOpenPinDetail, onHoverPin, onPinsChanged } = options\n\n const layerEl = document.createElement(\"div\")\n layerEl.setAttribute(\"data-uidex-pin-layer\", \"\")\n Object.assign(layerEl.style, {\n position: \"fixed\",\n inset: \"0\",\n zIndex: String(Z_PIN_LAYER),\n pointerEvents: \"none\",\n })\n container.appendChild(layerEl)\n\n let layerVisible = true\n const allPins: PinRecord[] = []\n const seenIds = new Set<string>()\n const byComp = new Map<string, PinRecord[]>()\n const indicators = new Map<string, IndicatorState>()\n\n let filter: PinFilter = { branch: null, commit: null }\n let commits: string[] = []\n let commitIndex = -1\n const filterCbs = new Set<() => void>()\n const notifyFilter = () => {\n for (const cb of filterCbs) cb()\n }\n\n // ── Filter helpers ──\n\n const rebuildFiltered = (): void => {\n byComp.clear()\n for (const p of allPins) {\n const cid = p.entity ?? \"\"\n const list = byComp.get(cid)\n if (list) list.push(p)\n else byComp.set(cid, [p])\n }\n }\n\n const rerender = (): void => {\n commits = []\n commitIndex = -1\n rebuildFiltered()\n for (const id of Array.from(indicators.keys())) {\n if (!byComp.has(id)) removeIndicator(id)\n }\n for (const id of byComp.keys()) renderIndicator(id)\n notifyFilter()\n onPinsChanged?.()\n }\n\n // ── Scroll / resize / mutation ──\n\n let rafId: number | null = null\n let winAttached = false\n let obs: MutationObserver | null = null\n\n const schedulePos = (): void => {\n if (rafId !== null) return\n rafId =\n typeof requestAnimationFrame === \"function\"\n ? requestAnimationFrame(() => {\n rafId = null\n posAll()\n })\n : (setTimeout(() => {\n rafId = null\n posAll()\n }, 0) as unknown as number)\n }\n const cancelPos = (): 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 const onScroll = () => schedulePos()\n const onResize = () => schedulePos()\n\n const attachWin = (): void => {\n if (winAttached) return\n winAttached = true\n window.addEventListener(\"scroll\", onScroll, {\n capture: true,\n passive: true,\n })\n window.addEventListener(\"resize\", onResize)\n }\n const detachWin = (): void => {\n if (!winAttached) return\n winAttached = false\n window.removeEventListener(\"scroll\", onScroll, {\n capture: true,\n } as EventListenerOptions)\n window.removeEventListener(\"resize\", onResize)\n cancelPos()\n }\n const attachObs = (): void => {\n if (obs || typeof MutationObserver === \"undefined\") return\n obs = new MutationObserver((recs) => {\n for (const r of recs) {\n if (\n r.type === \"childList\" &&\n (r.addedNodes.length || r.removedNodes.length)\n ) {\n refreshAnchors()\n return\n }\n }\n })\n obs.observe(document.body, { childList: true, subtree: true })\n }\n const detachObs = (): void => {\n obs?.disconnect()\n obs = null\n }\n const refreshAnchors = (): void => {\n let changed = false\n for (const s of indicators.values()) {\n if (s.anchor && s.anchor.isConnected) continue\n s.anchor = resolveEntityElement(parseComponentRef(s.componentId))\n changed = true\n }\n if (changed) schedulePos()\n }\n\n // ── Expand / collapse ──\n\n const expand = (st: IndicatorState): void => {\n if (st.expanded) return\n st.expanded = true\n fillContent(st)\n\n st.wrap.style.zIndex = \"1\"\n\n // 1) Icon fades out immediately\n st.iconEl.style.transition = T_FADE\n st.iconEl.style.opacity = \"0\"\n st.badgeEl.style.visibility = \"hidden\"\n\n // 2) Element expands after icon fades\n st.el.style.transition = `width ${DUR_EXPAND}ms ${EASE_OUT} ${DUR_FADE}ms, height ${DUR_EXPAND}ms ${EASE_OUT} ${DUR_FADE}ms`\n st.el.style.width = `${CARD_W}px`\n st.el.style.height = `${CARD_H}px`\n\n // 3) Content fades in after expand\n st.contentEl.style.transition = `opacity ${DUR_FADE}ms ease ${DUR_FADE + DUR_EXPAND}ms`\n st.contentEl.style.opacity = \"1\"\n\n if (st.anchor) onHoverPin?.(st.anchor, st.componentId)\n }\n\n const collapse = (st: IndicatorState): void => {\n if (!st.expanded) return\n st.expanded = false\n\n // 1) Content fades out immediately\n st.contentEl.style.transition = T_FADE\n st.contentEl.style.opacity = \"0\"\n\n // 2) Element shrinks after content fades\n st.el.style.transition = `width ${DUR_EXPAND}ms ${EASE_OUT} ${DUR_FADE}ms, height ${DUR_EXPAND}ms ${EASE_OUT} ${DUR_FADE}ms`\n st.el.style.width = `${DOT}px`\n st.el.style.height = `${DOT}px`\n\n // 3) Icon fades in after shrink; clear z-index once done\n st.iconEl.style.transition = `opacity ${DUR_FADE}ms ease ${DUR_FADE + DUR_EXPAND}ms`\n st.iconEl.style.opacity = \"1\"\n st.badgeEl.style.visibility = \"\"\n st.iconEl.addEventListener(\n \"transitionend\",\n () => {\n if (!st.expanded) st.wrap.style.zIndex = \"\"\n },\n { once: true }\n )\n\n onHoverPin?.(null, null)\n }\n\n const fillContent = (st: IndicatorState): void => {\n const pins = byComp.get(st.componentId)\n if (!pins?.length) return\n const idx = Math.max(0, Math.min(st.pinIndex, pins.length - 1))\n st.pinIndex = idx\n const pin = pins[idx]\n\n st.contentEl.innerHTML = \"\"\n\n const hdr = document.createElement(\"div\")\n hdr.style.display = \"flex\"\n hdr.style.alignItems = \"baseline\"\n hdr.style.gap = \"6px\"\n\n const nm = document.createElement(\"span\")\n nm.style.fontWeight = \"600\"\n nm.style.fontSize = \"12px\"\n nm.textContent = authorLabel(pin)\n hdr.appendChild(nm)\n\n const tm = document.createElement(\"span\")\n tm.style.fontSize = \"11px\"\n tm.style.opacity = \"0.75\"\n tm.textContent = relativeTime(pin.createdAt)\n hdr.appendChild(tm)\n st.contentEl.appendChild(hdr)\n\n const body = document.createElement(\"div\")\n Object.assign(body.style, {\n fontSize: \"12px\",\n lineHeight: \"1.4\",\n marginTop: \"2px\",\n whiteSpace: \"pre-wrap\",\n overflow: \"hidden\",\n display: \"-webkit-box\",\n })\n body.style.setProperty(\"-webkit-line-clamp\", \"2\")\n body.style.setProperty(\"-webkit-box-orient\", \"vertical\")\n body.textContent = pin.body\n st.contentEl.appendChild(body)\n\n const ctr = document.createElement(\"div\")\n Object.assign(ctr.style, {\n fontSize: \"10px\",\n opacity: \"0.5\",\n marginTop: \"4px\",\n })\n ctr.textContent =\n pins.length > 1\n ? `${idx + 1} of ${pins.length} · right-click to cycle`\n : \"click to open\"\n st.contentEl.appendChild(ctr)\n }\n\n // ── Build indicator ──\n\n const buildIndicator = (componentId: string): IndicatorState => {\n // Wrapper — fixed-positioned, overflow visible so badge isn't clipped\n const wrap = document.createElement(\"div\")\n wrap.setAttribute(\"data-uidex-pin-wrap\", \"\")\n Object.assign(wrap.style, {\n position: \"fixed\",\n display: \"none\",\n pointerEvents: \"none\",\n })\n\n // Main element — overflow hidden for expand/collapse clipping\n const el = document.createElement(\"button\")\n el.type = \"button\"\n el.setAttribute(\"data-uidex-pin\", \"\")\n el.setAttribute(\"data-uidex-pin-component\", componentId)\n el.setAttribute(\"aria-label\", `Open report for ${componentId}`)\n Object.assign(el.style, {\n position: \"relative\",\n width: `${DOT}px`,\n height: `${DOT}px`,\n borderRadius: `${DOT / 2}px`,\n border: `${BORDER}px solid var(--background)`,\n padding: \"0\",\n margin: \"0\",\n cursor: \"pointer\",\n pointerEvents: \"auto\",\n overflow: \"hidden\",\n boxShadow: \"0 2px 8px rgba(0,0,0,0.15), 0 0 0 1px rgba(0,0,0,0.05)\",\n fontFamily: \"var(--font-sans)\",\n textAlign: \"left\" as const,\n float: \"right\",\n })\n wrap.appendChild(el)\n\n // Icon — centered in collapsed dot, fades out on expand\n const iconEl = document.createElement(\"span\")\n iconEl.setAttribute(\"data-uidex-pin-icon\", \"\")\n Object.assign(iconEl.style, {\n position: \"absolute\",\n inset: \"0\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n })\n el.appendChild(iconEl)\n\n // Badge — on wrapper, outside el's overflow\n const badgeEl = document.createElement(\"span\")\n badgeEl.setAttribute(\"data-uidex-pin-badge\", \"\")\n Object.assign(badgeEl.style, {\n position: \"absolute\",\n top: \"-4px\",\n right: \"-4px\",\n minWidth: \"14px\",\n height: \"14px\",\n borderRadius: \"999px\",\n background: \"var(--foreground)\",\n color: \"var(--background)\",\n fontSize: \"9px\",\n fontWeight: \"600\",\n display: \"none\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"0 3px\",\n lineHeight: \"1\",\n zIndex: \"2\",\n pointerEvents: \"none\",\n })\n wrap.appendChild(badgeEl)\n\n // Content — fills the element, hidden when collapsed\n const contentEl = document.createElement(\"div\")\n contentEl.setAttribute(\"data-uidex-pin-content\", \"\")\n Object.assign(contentEl.style, {\n position: \"absolute\",\n top: `${PAD}px`,\n left: `${PAD}px`,\n right: `${PAD}px`,\n opacity: \"0\",\n minWidth: \"0\",\n })\n el.appendChild(contentEl)\n\n const st: IndicatorState = {\n componentId,\n wrap,\n el,\n iconEl,\n badgeEl,\n contentEl,\n anchor: null,\n pinIndex: 0,\n expanded: false,\n lastType: null,\n }\n\n el.addEventListener(\"mouseenter\", () => expand(st))\n el.addEventListener(\"mouseleave\", () => collapse(st))\n el.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n e.preventDefault()\n const pins = byComp.get(componentId)\n const pin = pins?.[st.pinIndex]\n if (pin) onOpenPinDetail?.(componentId, pin.id)\n })\n el.addEventListener(\"contextmenu\", (e) => {\n e.stopPropagation()\n e.preventDefault()\n const pins = byComp.get(componentId)\n if (!pins || pins.length <= 1) return\n st.pinIndex = (st.pinIndex + 1) % pins.length\n applyStyle(st)\n if (st.expanded) fillContent(st)\n })\n\n layerEl.appendChild(wrap)\n return st\n }\n\n // ── Style & direction ──\n\n const applyStyle = (st: IndicatorState): void => {\n const pins = byComp.get(st.componentId)\n if (!pins?.length) return\n const idx = Math.max(0, Math.min(st.pinIndex, pins.length - 1))\n st.pinIndex = idx\n const pin = pins[idx]\n const c = typeColors(pin.type)\n\n st.el.style.backgroundColor = \"var(--background)\"\n st.el.style.backgroundImage = `linear-gradient(${c.bg}, ${c.bg})`\n st.el.style.color = c.fg\n\n if (st.lastType !== pin.type) {\n st.lastType = pin.type\n st.iconEl.innerHTML = \"\"\n const svg = createLucideElement(typeIcon(pin.type))\n svg.setAttribute(\"width\", String(ICON))\n svg.setAttribute(\"height\", String(ICON))\n st.iconEl.appendChild(svg)\n }\n\n if (pins.length > 1) {\n st.badgeEl.textContent = String(pins.length)\n st.badgeEl.style.display = \"flex\"\n } else {\n st.badgeEl.textContent = \"\"\n st.badgeEl.style.display = \"none\"\n }\n }\n\n // ── Positioning ──\n\n const posIndicator = (st: IndicatorState): void => {\n const a = st.anchor\n if (!a || !a.isConnected) {\n st.wrap.style.display = \"none\"\n return\n }\n const r = a.getBoundingClientRect()\n if (r.width === 0 && r.height === 0) {\n st.wrap.style.display = \"none\"\n return\n }\n\n // Inset at top-right of target bounding box, anchored from right so it grows left\n const vw = window.innerWidth\n st.wrap.style.top = `${r.top + INSET}px`\n st.wrap.style.right = `${vw - r.right + INSET}px`\n\n st.wrap.style.display = \"\"\n }\n\n const posAll = () => {\n for (const st of indicators.values()) posIndicator(st)\n }\n\n const renderIndicator = (componentId: string): void => {\n const pins = byComp.get(componentId)\n if (!pins?.length) {\n removeIndicator(componentId)\n return\n }\n let st = indicators.get(componentId)\n if (!st) {\n st = buildIndicator(componentId)\n indicators.set(componentId, st)\n attachWin()\n attachObs()\n }\n if (st.pinIndex >= pins.length) st.pinIndex = 0\n applyStyle(st)\n st.anchor = resolveEntityElement(parseComponentRef(componentId))\n posIndicator(st)\n }\n\n const removeIndicator = (componentId: string): void => {\n const st = indicators.get(componentId)\n if (!st) return\n st.wrap.remove()\n indicators.delete(componentId)\n if (indicators.size === 0) {\n detachWin()\n detachObs()\n }\n }\n\n // ── Ingest ──\n\n const ingest = (pin: PinRecord): boolean => {\n const cid = pin.entity ?? \"\"\n if (!cid || seenIds.has(pin.id)) return false\n seenIds.add(pin.id)\n allPins.push(pin)\n return true\n }\n\n // ── Public API ──\n\n let activeRefresh: (() => Promise<void>) | null = null\n\n const layer: PinLayer = {\n setPins(pins) {\n allPins.length = 0\n seenIds.clear()\n for (const p of pins) ingest(p)\n rerender()\n },\n addPin(pin) {\n if (!ingest(pin)) return\n rerender()\n },\n removePin(reportId) {\n const i = allPins.findIndex((p) => p.id === reportId)\n if (i === -1) return\n allPins.splice(i, 1)\n seenIds.delete(reportId)\n rerender()\n },\n clear() {\n allPins.length = 0\n seenIds.clear()\n byComp.clear()\n for (const id of Array.from(indicators.keys())) removeIndicator(id)\n commits = []\n commitIndex = -1\n notifyFilter()\n },\n getPinsForElement: (id) => byComp.get(id) ?? [],\n getAllPinsForElement: (id) =>\n allPins.filter((p) => (p.entity ?? \"\") === id),\n getAllPins: () => allPins.slice(),\n attachChannel(channel) {\n return channel.onPin((pin: PinRecord) => {\n layer.addPin(pin)\n })\n },\n attachCloud(opts) {\n const offCh = opts.channel ? layer.attachChannel(opts.channel) : () => {}\n const fetch = async (): Promise<void> => {\n try {\n const mode = opts.getMatchMode()\n let params: { route?: string; entities?: string }\n if (mode === \"component\") {\n params = { entities: opts.getVisibleEntities().join(\",\") }\n } else if (mode === \"pathname\") {\n params = { route: opts.getPathname() }\n } else {\n params = { route: opts.getRoute() }\n }\n layer.setPins(await opts.cloud.pins.list(params))\n } catch (err) {\n opts.onError?.(err)\n }\n }\n void fetch()\n activeRefresh = fetch\n return () => {\n offCh()\n if (activeRefresh === fetch) activeRefresh = null\n }\n },\n async refresh() {\n if (activeRefresh) await activeRefresh()\n },\n\n get filterState(): PinFilterState {\n return {\n branch: filter.branch,\n commit: filter.commit,\n commits,\n commitIndex,\n }\n },\n setFilter(next) {\n filter = {\n branch: next.branch !== undefined ? next.branch : filter.branch,\n commit: next.commit !== undefined ? next.commit : filter.commit,\n }\n rerender()\n },\n nextCommit() {\n if (!commits.length) return\n commitIndex = commitIndex >= commits.length - 1 ? -1 : commitIndex + 1\n filter = {\n ...filter,\n commit: commitIndex === -1 ? null : commits[commitIndex],\n }\n rerender()\n },\n prevCommit() {\n if (!commits.length) return\n commitIndex = commitIndex <= -1 ? commits.length - 1 : commitIndex - 1\n filter = {\n ...filter,\n commit: commitIndex === -1 ? null : commits[commitIndex],\n }\n rerender()\n },\n onFilterChange(cb) {\n filterCbs.add(cb)\n return () => {\n filterCbs.delete(cb)\n }\n },\n get visible() {\n return layerVisible\n },\n setVisible(v) {\n if (layerVisible === v) return\n layerVisible = v\n layerEl.style.display = v ? \"\" : \"none\"\n if (v) posAll()\n notifyFilter()\n },\n destroy() {\n layer.clear()\n detachWin()\n detachObs()\n layerEl.remove()\n activeRefresh = null\n filterCbs.clear()\n },\n }\n\n return layer\n}\n","import type { CloudAdapter } from \"../../../cloud/types\"\nimport type { EntityKind, EntityRef, Registry } from \"../../../shared/entities\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport type { EscapeHandler } from \"../../surface/keys\"\nimport type { OverlayShowOptions } from \"../../surface/overlay\"\nimport type { UserIdentity } from \"../../../shared/user\"\nimport type { Router } from \"./router\"\nimport type { ViewSurface } from \"./surface\"\n\nexport type { CloudAdapter } from \"../../../cloud/types\"\nexport type {\n ReportPayload,\n ReportResult,\n IngestConfig,\n} from \"@uidex/api-client\"\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 subtitle?: string | (() => string)\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 /**\n * Local user identity from `createUidex`'s `user` option, or `null` when\n * unconfigured. Views that auto-populate attribution (e.g. report\n * `reporterName`) read this here instead of touching the session store.\n */\n user: UserIdentity | null\n views: Router\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 /** 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 pushEscapeLayer(handler: EscapeHandler): Cleanup\n /** Called after a report submission succeeds, to refresh pins etc. */\n onAfterSubmit?: () => void\n /** Return the current route pattern. Falls back to `location.pathname`. */\n getRoute?: () => string\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 /** Direct render for integration adapters (React, etc.). Mutually exclusive with surface renderers. */\n render?: (ctx: ViewContext, root: HTMLElement) => Cleanup | void\n parent?: (ref: EntityRef | null) => ViewStackEntry | null\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 \"../../../shared/entities\"\nimport type { SessionStore } from \"../../session\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport { ViewValidationError, type View } from \"./types\"\n\nexport interface RouteMatch {\n view: View\n priority: number\n}\n\nexport interface Router {\n resolve(ref: EntityRef): RouteMatch | null\n add(view: View, priority?: number): void\n remove(id: string): void\n get(id: string): View | undefined\n list(): readonly View[]\n buildStack(entry: ViewStackEntry): ViewStackEntry[]\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 CreateRouterOptions {\n session: SessionStore\n}\n\nexport function createRouter(options: CreateRouterOptions): Router {\n const FAVORITES_KEY = \"uidex:favorites\"\n const MAX_RECENTS = 8\n const entries: Array<{ view: View; priority: number }> = []\n const recentRefs: EntityRef[] = []\n const favoriteRefs: EntityRef[] = []\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 resolve(ref: EntityRef): RouteMatch | null {\n let best: RouteMatch | null = null\n for (const e of entries) {\n if (!e.view.matches?.(ref)) continue\n if (!best || e.priority > best.priority) {\n best = { view: e.view, priority: e.priority }\n }\n }\n return best\n }\n\n function add(view: View, priority = 0): void {\n validate(view)\n const idx = entries.findIndex((e) => e.view.id === view.id)\n if (idx >= 0) entries.splice(idx, 1)\n entries.push({ view, priority })\n }\n\n function remove(id: string): void {\n const idx = entries.findIndex((e) => e.view.id === id)\n if (idx >= 0) entries.splice(idx, 1)\n const { stack } = options.session.nav.getState()\n const top = stack[stack.length - 1] ?? null\n if (top?.id === id) options.session.mode.transition.dismiss()\n }\n\n function get(id: string): View | undefined {\n return entries.find((e) => e.view.id === id)?.view\n }\n\n function list(): readonly View[] {\n return entries.map((e) => e.view)\n }\n\n function buildStack(entry: ViewStackEntry): ViewStackEntry[] {\n const stack: ViewStackEntry[] = [entry]\n let current = entry\n for (let depth = 0; depth < 10; depth++) {\n const view = get(current.id)\n if (!view?.parent) break\n const parentEntry = view.parent(current.ref)\n if (!parentEntry) break\n stack.unshift(parentEntry)\n current = parentEntry\n }\n return stack\n }\n\n function navigate(ref: EntityRef): void {\n const match = resolve(ref)\n if (!match) return\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 options.session.select(ref)\n const entry: ViewStackEntry = { id: match.view.id, ref }\n const { mode } = options.session.mode.getState()\n if (mode === \"idle\" || mode === \"inspecting\") {\n options.session.mode.transition.enterViewing(buildStack(entry))\n } else {\n options.session.mode.transition.pushView(entry)\n }\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 resolve,\n add,\n remove,\n get,\n list,\n buildStack,\n navigate,\n recents,\n favorites,\n toggleFavorite,\n isFavorite,\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","export { html, svg, render, nothing, type TemplateResult } from \"lit-html\"\nexport { repeat } from \"lit-html/directives/repeat.js\"\nexport { ref, createRef } from \"lit-html/directives/ref.js\"\nexport { classMap } from \"lit-html/directives/class-map.js\"\nexport { spreadProps } from \"./lit-spread.js\"\nexport { icon } from \"./lit-icon.js\"\n","import type { Cleanup } from \"./cleanup\"\n\ntype Props = Record<string, unknown>\n\nexport function applyProps(node: Element, props: Props): Cleanup {\n const removers: Array<() => void> = []\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 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 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(\n (node as HTMLElement).style,\n rawValue as Record<string, string>\n )\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 as HTMLElement).tabIndex = Number(rawValue)\n continue\n }\n node.setAttribute(key, String(rawValue))\n }\n return () => removers.forEach((fn) => fn())\n}\n","import { noChange } from \"lit-html\"\nimport {\n Directive,\n directive,\n type PartInfo,\n PartType,\n} from \"lit-html/directive.js\"\nimport { createElement, type IconNode } from \"lucide\"\n\nclass LucideIconDirective extends Directive {\n private _icon: IconNode | undefined\n private _class: string | undefined\n private _el: SVGSVGElement | undefined\n\n constructor(partInfo: PartInfo) {\n super(partInfo)\n if (partInfo.type !== PartType.CHILD) {\n throw new Error(\"icon() can only be used in a child position\")\n }\n }\n\n override update(_part: unknown, [iconNode, className]: [IconNode, string?]) {\n if (iconNode === this._icon && className === this._class) return noChange\n this._icon = iconNode\n this._class = className\n this._el = createElement(iconNode) as unknown as SVGSVGElement\n this._el.setAttribute(\"aria-hidden\", \"true\")\n if (className) this._el.setAttribute(\"class\", className)\n return this._el\n }\n\n render(iconNode: IconNode, className?: string) {\n const el = createElement(iconNode) as unknown as SVGSVGElement\n el.setAttribute(\"aria-hidden\", \"true\")\n if (className) el.setAttribute(\"class\", className)\n return el\n }\n}\n\nexport const icon = directive(LucideIconDirective)\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 { html, type TemplateResult } from \"../internal/lit\"\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\n// ── Imperative (legacy) — returns HTMLSpanElement ──────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\nexport function badgeTpl(\n content: TemplateResult | string,\n options: { variant?: BadgeVariant; size?: BadgeSize; class?: ClassValue } = {}\n): TemplateResult {\n const { variant, size, class: extra } = options\n return html`\n <span class=${cn(badgeVariants({ variant, size }), extra)} data-slot=\"badge\"\n >${content}</span\n >\n `\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../../internal/el\"\nimport { createBadge, badgeVariants } from \"../../ui/badge\"\nimport { html, type TemplateResult } from \"../../internal/lit\"\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\n// ── Imperative (legacy) — returns HTMLElement ─────────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\nexport function chipTpl(\n content: TemplateResult | string,\n className?: ClassValue\n): TemplateResult {\n return html`<span class=${cn(CHIP_CLASS, className)}>${content}</span>`\n}\n\nexport function pillItemTpl(\n text: string,\n className?: ClassValue\n): TemplateResult {\n return html`\n <li class=\"list-none\">\n <span\n class=${cn(\n badgeVariants({ variant: \"secondary\", size: \"default\" }),\n className\n )}\n data-slot=\"badge\"\n >${text}</span\n >\n </li>\n `\n}\n","import { createElement as createLucideElement } from \"lucide\"\nimport { KIND_STYLE, type EntityKind } from \"../../../shared/entities\"\nimport { cn } from \"../../internal/cn\"\nimport { html, type TemplateResult } from \"../../internal/lit\"\nimport { icon } from \"../../internal/lit-icon\"\nimport { createBadge, badgeVariants } from \"../../ui/badge\"\nimport { createIconTile, iconTileTpl } from \"./icon-tile\"\n\n// ── Imperative (legacy) — returns HTMLElement / SVGElement ─────────\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 iconEl = createLucideElement(style.icon)\n iconEl.setAttribute(\"aria-hidden\", \"true\")\n return createBadge(\n {\n class: style.chip,\n attrs: { \"data-uidex-kind-badge\": kind },\n },\n [iconEl, style.label]\n )\n}\n\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\nexport function kindIconTpl(kind: EntityKind): TemplateResult {\n const style = KIND_STYLE[kind]\n return html`${icon(style.icon, cn(\"h-4 w-4 shrink-0\", style.tone))}`\n}\n\nexport function kindIconTileTpl(kind: EntityKind): TemplateResult {\n const style = KIND_STYLE[kind]\n return iconTileTpl(\n html`${icon(style.icon, cn(\"size-3.5 opacity-80\", style.tone))}`,\n { toneClass: style.chip }\n )\n}\n\nexport function kindBadgeTpl(kind: EntityKind): TemplateResult {\n const style = KIND_STYLE[kind]\n return html`\n <span\n class=${cn(badgeVariants({}), style.chip)}\n data-slot=\"badge\"\n data-uidex-kind-badge=${kind}\n >${icon(style.icon)} ${style.label}</span\n >\n `\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport { html, type TemplateResult } from \"../../internal/lit\"\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\n// ── Imperative (legacy) — returns HTMLElement ─────────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\n/**\n * Template version of the icon tile. Callers pass a properly-sized\n * `TemplateResult` (e.g. from the `icon` directive) — no SVG class\n * stripping needed.\n */\nexport function iconTileTpl(\n inner: TemplateResult,\n options: Pick<\n IconTileOptions,\n \"extraClass\" | \"toneClass\" | \"tint\" | \"tintAlpha\"\n > = {}\n): TemplateResult {\n const tintStyle =\n options.tint && !options.toneClass\n ? `background-color: color-mix(in srgb, ${options.tint} ${options.tintAlpha ?? 15}%, transparent)`\n : \"\"\n return html`\n <span\n class=${cn(TILE_CLASS, options.toneClass, options.extraClass)}\n data-slot=\"icon-tile\"\n aria-hidden=\"true\"\n style=${tintStyle}\n >${inner}</span\n >\n `\n}\n","import { displayName, KIND_STYLE, type Entity } from \"../../../shared/entities\"\nimport { el } from \"../../internal/el\"\nimport { html, nothing, type TemplateResult } from \"../../internal/lit\"\nimport { createChip } from \"./chip\"\nimport { renderKindIcon, kindIconTpl } from \"./kind-icon\"\n\nexport interface KindChipOptions {\n entity: Entity\n label?: string\n withKindName?: boolean\n node?: Element | null\n}\n\n// ── Imperative (legacy) — returns HTMLElement ─────────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\nexport function kindChipTpl(options: KindChipOptions): TemplateResult {\n const { entity, label, withKindName, node } = options\n const kind = entity.kind\n const style = KIND_STYLE[kind]\n const resolved = label ?? displayName(entity, node)\n const text = withKindName\n ? resolved\n ? `${style.label} · ${resolved}`\n : style.label\n : resolved\n return html`\n <span\n class=\"text-muted-foreground inline-flex items-center gap-1.5 text-xs font-medium\"\n data-uidex-kind-chip=${kind}\n >\n ${kindIconTpl(kind)}\n ${text ? html`<span class=\"truncate\">${text}</span>` : nothing}\n </span>\n `\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 { createNormalizer, type PropTypes } from \"@zag-js/types\"\n\nexport type DomProps = PropTypes<Record<string, unknown>>\n\nexport const normalizeProps = createNormalizer<DomProps>((v) => v)\n","import { applyProps } from \"../../internal/apply-props\"\nimport type { Cleanup } from \"../../internal/cleanup\"\n\nexport function spreadProps(\n node: HTMLElement,\n props: Record<string, unknown>\n): Cleanup {\n return applyProps(node, props)\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, applyProps(node, props))\n },\n cleanupAll() {\n for (const clean of map.values()) clean()\n map.clear()\n },\n }\n}\n","import {\n ArchiveX,\n Camera,\n ChevronDown,\n Copy,\n Highlighter,\n Inbox,\n MessageCircleWarning,\n StickyNote,\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 \"../../../shared/entities\"\nimport { bindArrowNav } from \"../../internal/arrow-nav\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport {\n html,\n render,\n nothing,\n createRef,\n ref,\n type TemplateResult,\n} from \"../../internal/lit\"\nimport { icon } from \"../../internal/lit-icon\"\nimport { filterEntities, filterIds, normalizeQuery } from \"../builder/filter\"\nimport type {\n DetailAction,\n DetailActionIcon,\n DetailActionRunContext,\n DetailSection,\n DetailSubtitle,\n DetailSurface,\n MetadataEntry,\n ResolvedFlowStep,\n} from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport { SECTION_LABELS } from \"../labels\"\nimport { badgeVariants } from \"../../ui/badge\"\nimport { entityLinkTpl } from \"../primitives/entity-link\"\nimport { iconTileTpl } from \"../primitives/icon-tile\"\nimport { kindBadgeTpl, kindIconTileTpl } from \"../primitives/kind-icon\"\nimport { rowTpl } from \"../primitives/row\"\nimport {\n captionTpl,\n descriptionTpl,\n headingTpl,\n mutedTextTpl,\n} from \"../primitives/text\"\nimport { commandShortcutTpl } from \"../../ui/kbd\"\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 \"archive-x\": ArchiveX,\n copy: Copy,\n camera: Camera,\n inbox: Inbox,\n \"message-circle-warning\": MessageCircleWarning,\n \"chevron-down\": ChevronDown,\n highlighter: Highlighter,\n \"sticky-note\": StickyNote,\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 subtitleTpl(subtitle: DetailSubtitle): TemplateResult {\n const text = subtitle.extra\n ? `${subtitle.rawId} · ${subtitle.extra}`\n : subtitle.rawId\n return html`<p\n class=${cn(\"text-muted-foreground font-mono text-xs\", \"px-2\")}\n data-uidex-detail-subtitle\n >\n ${text}\n </p>`\n}\n\nfunction notFoundTpl(ref: EntityRef): TemplateResult {\n return html`<p\n class=${cn(\"text-muted-foreground text-sm\", \"p-4\")}\n data-uidex-detail-missing\n >\n ${ref.kind}: ${ref.id} not found in registry\n </p>`\n}\n\n// ── Actions (imperative) ─────────────────────────────────────────────\n// Action buttons need mutable label elements (setLabel + revert timer),\n// so they stay imperative.\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 = el(\"button\", {\n class: cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"w-full cursor-pointer text-left font-normal\"\n ),\n attrs: {\n type: \"button\",\n \"data-slot\": \"list-item-button\",\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\n let leading: Node | undefined\n const iconNode = iconFor(action.icon)\n if (iconNode) {\n const svg = createLucideElement(iconNode)\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"class\", \"h-4 w-4 shrink-0\")\n const tile = el(\n \"span\",\n {\n class:\n \"inline-flex size-6 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground\",\n attrs: { \"data-slot\": \"icon-tile\", \"aria-hidden\": \"true\" },\n },\n [svg]\n )\n leading = tile\n }\n\n // Label span needs to be mutable for setLabel()\n const labelSpan = el(\"span\", {\n class: \"min-w-0 flex-1 truncate\",\n text: action.label,\n })\n if (leading) btn.append(leading)\n btn.append(labelSpan)\n if (action.hint) {\n const kbd = el(\"kbd\", {\n class:\n \"text-muted-foreground/70 ms-auto font-sans text-xs font-medium tracking-widest\",\n attrs: { \"data-slot\": \"command-shortcut\" },\n text: action.hint,\n })\n btn.append(kbd)\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 labelSpan.textContent = next\n if (durationMs && durationMs > 0) {\n revertTimer = setTimeout(() => {\n labelSpan.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.views.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\n// ── Section templates ────────────────────────────────────────────────\n\nfunction entityListItems(\n ctx: ViewContext,\n entities: readonly Entity[]\n): TemplateResult {\n return html`${entities.map((entity) => {\n const eRef: EntityRef = { kind: entity.kind, id: entityKey(entity) }\n return html`<li>\n ${entityLinkTpl({\n ctx,\n target: eRef,\n label: displayName(entity),\n leading: kindIconTileTpl(entity.kind),\n })}\n </li>`\n })}`\n}\n\nfunction composesListTpl(\n ctx: ViewContext,\n label: string,\n entities: readonly Entity[]\n): TemplateResult | null {\n if (entities.length === 0) return null\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-composes>\n ${headingTpl(label)}\n <ul class=\"flex flex-col\">\n ${entityListItems(ctx, entities)}\n </ul>\n </section>\n `\n}\n\nfunction usedByListTpl(\n ctx: ViewContext,\n label: string,\n entities: readonly Entity[]\n): TemplateResult | null {\n if (entities.length === 0) return null\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-used-by>\n ${headingTpl(label)}\n <ul class=\"flex flex-col\">\n ${entityListItems(ctx, entities)}\n </ul>\n </section>\n `\n}\n\nfunction flowListTpl(\n ctx: ViewContext,\n flows: readonly Flow[]\n): TemplateResult | null {\n if (flows.length === 0) return null\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-flows>\n ${headingTpl(SECTION_LABELS.flows)}\n <ul class=\"flex flex-col\">\n ${flows.map(\n (flow) =>\n html`<li>\n ${entityLinkTpl({\n ctx,\n target: { kind: \"flow\", id: flow.id },\n label: displayName(flow),\n leading: kindIconTileTpl(\"flow\"),\n })}\n </li>`\n )}\n </ul>\n </section>\n `\n}\n\nfunction touchesTpl(\n ctx: ViewContext,\n entities: readonly Entity[],\n query: string\n): TemplateResult {\n if (entities.length === 0) {\n return html`\n <section class=\"flex flex-col gap-2\" data-uidex-detail-touches>\n ${headingTpl(SECTION_LABELS.touches)}\n ${mutedTextTpl(query ? \"No matches\" : \"No entities touched\")}\n </section>\n `\n }\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-touches>\n ${headingTpl(SECTION_LABELS.touches)}\n <ul class=\"flex flex-col\">\n ${entities.map(\n (entity) =>\n html`<li>\n ${entityLinkTpl({\n ctx,\n target: { kind: entity.kind, id: entityKey(entity) },\n label: displayName(entity),\n leading: kindIconTileTpl(entity.kind),\n })}\n </li>`\n )}\n </ul>\n </section>\n `\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\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 stepsTpl(\n ctx: ViewContext,\n steps: readonly ResolvedFlowStep[],\n query: string\n): TemplateResult {\n if (steps.length === 0) {\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-steps>\n ${headingTpl(SECTION_LABELS.steps)}\n ${mutedTextTpl(query ? \"No matches\" : \"No steps recorded\")}\n </section>\n `\n }\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-steps>\n ${headingTpl(SECTION_LABELS.steps)}\n <ol class=\"flex flex-col gap-1.5\">\n ${steps.map(\n (step) => html`\n <li class=${STEP_ROW_CLASS} data-uidex-step=${String(step.ordinal)}>\n <span\n class=${STEP_ORDINAL_CLASS}\n data-uidex-step-ordinal\n aria-hidden=\"true\"\n >${String(step.ordinal)}</span\n >\n ${entityLinkTpl({\n ctx,\n target: { kind: step.entity.kind, id: entityKey(step.entity) },\n label: displayName(step.entity),\n leading: kindIconTileTpl(step.entity.kind),\n class: \"min-w-0 flex-1\",\n })}\n ${step.action\n ? html`<span\n class=${cn(\n badgeVariants({ variant: \"secondary\", size: \"sm\" }),\n \"font-mono\"\n )}\n data-slot=\"badge\"\n data-uidex-step-action=${step.action}\n >${step.action}</span\n >`\n : nothing}\n </li>\n `\n )}\n </ol>\n </section>\n `\n}\n\nfunction routePathsTpl(paths: readonly string[]): TemplateResult | null {\n if (paths.length === 0) return null\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-routes>\n ${headingTpl(SECTION_LABELS.routes)}\n <ul class=\"flex flex-col\">\n ${paths.map(\n (p) => html`\n <li\n class=${cn(LIST_ITEM_CLASS, LIST_ITEM_INTERACTIVE_CLASS)}\n data-uidex-detail-row=\"route\"\n tabindex=\"-1\"\n >\n ${rowTpl({\n leading: kindIconTileTpl(\"route\"),\n label: p,\n })}\n </li>\n `\n )}\n </ul>\n </section>\n `\n}\n\nfunction acceptanceChecklistTpl(items: readonly string[]): TemplateResult {\n return html`\n <section class=\"flex flex-col\" data-uidex-detail-acceptance>\n ${headingTpl(SECTION_LABELS.acceptance)}\n <ul class=\"flex flex-col\">\n ${items.map((text, idx) => {\n const id = `uidex-acceptance-${idx}`\n const syncChecked = (e: Event): void => {\n const checkbox = e.currentTarget as HTMLInputElement\n const label = checkbox\n .closest(\"label\")\n ?.querySelector(\n \"[data-uidex-acceptance-label]\"\n ) as HTMLElement | null\n if (label) {\n label.classList.toggle(\"line-through\", checkbox.checked)\n label.classList.toggle(\"text-muted-foreground\", checkbox.checked)\n }\n }\n const onKeydown = (e: KeyboardEvent): void => {\n if (e.key === \"Enter\") {\n e.preventDefault()\n const checkbox = e.currentTarget as HTMLInputElement\n checkbox.checked = !checkbox.checked\n syncChecked(e)\n }\n }\n return html`\n <li>\n <label\n class=${cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"w-full cursor-pointer items-start\"\n )}\n for=${id}\n >\n <input\n type=\"checkbox\"\n id=${id}\n data-uidex-acceptance-item=${String(idx)}\n class=\"accent-accent mt-1 h-3.5 w-3.5 shrink-0 cursor-pointer focus:outline-none\"\n @change=${syncChecked}\n @keydown=${onKeydown}\n />\n <span\n class=\"min-w-0 flex-1 whitespace-normal break-words\"\n data-uidex-acceptance-label\n >${text}</span\n >\n </label>\n </li>\n `\n })}\n </ul>\n </section>\n `\n}\n\nfunction screenshotTpl(url: string): TemplateResult {\n return html`\n <section class=\"px-2\">\n ${headingTpl(\"Screenshot\")}\n <img\n src=${url}\n alt=\"Screenshot\"\n class=\"border-border mt-1 w-full rounded-md border\"\n />\n </section>\n `\n}\n\nfunction metadataListTpl(entries: readonly MetadataEntry[]): TemplateResult {\n return html`\n <div\n class=\"text-muted-foreground border-border mx-2 border-t pt-2 text-[11px] leading-relaxed\"\n >\n ${entries.map(\n (e) =>\n html`<div class=\"flex gap-1.5 truncate\">\n <span class=\"shrink-0\">${e.label}</span>\n <span class=\"truncate font-mono\">${e.value}</span>\n </div>`\n )}\n </div>\n `\n}\n\nfunction sectionTpl(\n section: DetailSection,\n ctx: ViewContext,\n query: string\n): TemplateResult | null {\n switch (section.id) {\n case \"description\": {\n if (!section.text) return null\n return html`<p\n class=${cn(\"text-foreground text-sm leading-relaxed\", \"px-2\")}\n data-uidex-detail-description\n >\n ${section.text}\n </p>`\n }\n case \"acceptance\": {\n if (section.items.length === 0) return null\n return acceptanceChecklistTpl(section.items)\n }\n case \"composes\":\n return composesListTpl(\n ctx,\n section.label,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities\n )\n case \"used-by\":\n return usedByListTpl(\n ctx,\n section.label,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities\n )\n case \"flows\":\n return flowListTpl(\n ctx,\n section.filterable\n ? filterEntities(section.flows, query)\n : section.flows\n )\n case \"touches\":\n return touchesTpl(\n ctx,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities,\n query\n )\n case \"steps\":\n return stepsTpl(\n ctx,\n section.filterable\n ? filterStepsBy(section.steps, query, resolvedStepFields)\n : section.steps,\n query\n )\n case \"routes\":\n return routePathsTpl(\n section.filterable ? filterIds(section.paths, query) : section.paths\n )\n case \"screenshot\":\n return screenshotTpl(section.url)\n case \"metadata\":\n return section.entries.length > 0\n ? metadataListTpl(section.entries)\n : null\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 render(notFoundTpl(surface.notFound), root)\n return { cleanup: () => root.replaceChildren() }\n }\n\n const bodyRef = createRef<HTMLDivElement>()\n const sectionsRef = createRef<HTMLDivElement>()\n\n const cleanups: Cleanup[] = []\n\n // ── Build actions (imperative — mutable labels) ──────────────────\n let actionsNode: HTMLElement | null = null\n if (surface.actions && surface.actions.length > 0) {\n const groups = new Map<string, DetailAction[]>()\n for (const action of surface.actions) {\n const key = action.group ?? \"\"\n const list = groups.get(key) ?? []\n list.push(action)\n groups.set(key, list)\n }\n\n if (groups.size <= 1) {\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 } else {\n const wrapper = el(\"div\", {\n class: \"flex flex-col gap-1\",\n attrs: { \"data-uidex-detail-action-groups\": \"\" },\n })\n for (const [heading, groupActions] of groups) {\n const rendered = renderActions(\n groupActions,\n ctx,\n root,\n heading || SECTION_LABELS.actions\n )\n cleanups.push(rendered.cleanup)\n wrapper.append(rendered.node)\n }\n actionsNode = wrapper\n }\n }\n\n const sections = surface.sections ?? []\n const filterable = hasFilterableSections(sections)\n\n // ── Render body template ──────────────────────────────────────────\n render(\n html`\n <div\n ${ref(bodyRef)}\n class=\"flex flex-col gap-3 px-2 py-4\"\n data-uidex-detail-body\n data-uidex-detail-kind=${surface.entityKind}\n >\n <div class=\"flex items-center gap-2 px-2\">\n ${surface.title\n ? html`<h2\n class=\"text-foreground min-w-0 flex-1 truncate text-base font-semibold\"\n data-uidex-detail-title\n >\n ${surface.title}\n </h2>`\n : nothing}\n <span class=\"ml-auto\">${kindBadgeTpl(surface.entityKind)}</span>\n </div>\n ${surface.subtitle ? subtitleTpl(surface.subtitle) : nothing}\n <div\n ${ref(sectionsRef)}\n class=\"flex flex-col gap-3\"\n data-uidex-detail-sections\n ></div>\n </div>\n `,\n root\n )\n\n const body = bodyRef.value!\n const listsContainer = sectionsRef.value!\n\n // ── Focus management ──────────────────────────────────────────────\n let focusables: HTMLElement[] = []\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 detachArrowNav = bindArrowNav({\n container: body,\n getItems: () => focusables,\n escapeTarget: ctx.searchInput,\n extraSources: [ctx.searchInput],\n onEnterKbd: enterKbdMode,\n })\n\n // ── Render sections into the ref'd container ──────────────────────\n\n function renderSections(query: string): void {\n let hasFilterableSection = false\n let renderedFilterable = 0\n let actionsPlaced = false\n\n const parts: Array<TemplateResult | HTMLElement> = []\n const placeActions = (): void => {\n if (actionsNode && !actionsPlaced) {\n parts.push(actionsNode)\n actionsPlaced = true\n }\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 = sectionTpl(section, ctx, sectionQuery)\n if (!out) continue\n if (isFilterable) renderedFilterable++\n parts.push(out)\n if (section.id === \"description\") placeActions()\n }\n if (!actionsPlaced && actionsNode) {\n parts.unshift(actionsNode)\n }\n if (query && hasFilterableSection && renderedFilterable === 0) {\n parts.push(mutedTextTpl(\"No matches\"))\n }\n render(html`${parts}`, listsContainer)\n refreshFocusSequence()\n }\n\n renderSections(\"\")\n\n const cleanup = composeCleanups([\n ...cleanups,\n detachArrowNav,\n () => body.removeEventListener(\"pointermove\", exitKbdMode),\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 type { Cleanup } from \"./cleanup\"\n\nconst NAV_KEYS = new Set([\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"])\n\nexport interface ArrowNavOptions {\n container: HTMLElement\n getItems(): HTMLElement[]\n /** Element to focus when ArrowUp is pressed at the top of the list. */\n escapeTarget?: HTMLElement\n /** Wrap from last→first and first→last. Default: false. */\n wrap?: boolean\n /** Additional elements that should forward arrow keys into the list. */\n extraSources?: HTMLElement[]\n onEnterKbd?: () => void\n}\n\nexport function bindArrowNav(options: ArrowNavOptions): Cleanup {\n const { container, getItems, escapeTarget, onEnterKbd } = options\n const wrap = options.wrap ?? false\n\n const onKeyDown = (e: KeyboardEvent): void => {\n if (!NAV_KEYS.has(e.key)) return\n onEnterKbd?.()\n const items = getItems()\n if (items.length === 0) return\n\n const active =\n container.getRootNode() instanceof ShadowRoot\n ? (container.getRootNode() as ShadowRoot).activeElement\n : document.activeElement\n if (!(active instanceof HTMLElement)) return\n\n const isEscape = escapeTarget && active === escapeTarget\n if (isEscape) {\n e.preventDefault()\n const idx = e.key === \"ArrowUp\" || e.key === \"End\" ? items.length - 1 : 0\n focusItem(items, idx)\n return\n }\n\n const idx = items.indexOf(active)\n if (idx === -1) {\n if (container.contains(active)) {\n e.preventDefault()\n const entry =\n e.key === \"ArrowUp\" || e.key === \"End\" ? items.length - 1 : 0\n focusItem(items, entry)\n }\n return\n }\n\n e.preventDefault()\n switch (e.key) {\n case \"ArrowUp\":\n if (idx === 0) {\n if (escapeTarget) escapeTarget.focus()\n else if (wrap) focusItem(items, items.length - 1)\n } else {\n focusItem(items, idx - 1)\n }\n break\n case \"ArrowDown\":\n if (idx === items.length - 1) {\n if (wrap) focusItem(items, 0)\n } else {\n focusItem(items, idx + 1)\n }\n break\n case \"Home\":\n focusItem(items, 0)\n break\n case \"End\":\n focusItem(items, items.length - 1)\n break\n }\n }\n\n container.addEventListener(\"keydown\", onKeyDown)\n const extraCleanups: Cleanup[] = []\n for (const src of options.extraSources ?? []) {\n src.addEventListener(\"keydown\", onKeyDown)\n extraCleanups.push(() => src.removeEventListener(\"keydown\", onKeyDown))\n }\n\n return () => {\n container.removeEventListener(\"keydown\", onKeyDown)\n for (const c of extraCleanups) c()\n }\n}\n\nfunction focusItem(items: HTMLElement[], idx: number): void {\n for (let i = 0; i < items.length; i++) {\n items[i].tabIndex = i === idx ? 0 : -1\n }\n items[idx].focus()\n}\n","import { displayName, entityKey, type Entity } from \"../../../shared/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","export const LIST_ITEM_CLASS =\n \"flex min-h-8 cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-base outline-none sm:min-h-7 sm:text-sm data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground\"\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 [[data-kbd-nav]_&]:focus:bg-accent [[data-kbd-nav]_&]:focus:text-accent-foreground [[data-kbd-nav]_&]:focus-within:bg-accent [[data-kbd-nav]_&]: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 { html, type TemplateResult } from \"../internal/lit\"\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\n// ── Imperative (legacy) — returns HTMLButtonElement ────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\nexport function buttonTpl(\n content: TemplateResult | string,\n options: {\n variant?: ButtonVariant\n size?: ButtonSize\n class?: ClassValue\n } = {}\n): TemplateResult {\n const { variant, size, class: extra } = options\n return html`\n <button\n type=\"button\"\n class=${cn(buttonVariants({ variant, size }), extra)}\n data-slot=\"button\"\n >\n ${content}\n </button>\n `\n}\n","import type { EntityRef, Registry } from \"../../../shared/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\"\nimport { html, type TemplateResult } from \"../internal/lit\"\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\n// ── Imperative (legacy) — returns HTMLElement ─────────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\nexport function kbdTpl(text: string, className?: ClassValue): TemplateResult {\n return html`<kbd class=${cn(KBD_CLASS, className)} data-slot=\"kbd\"\n >${text}</kbd\n >`\n}\n\nexport function kbdGroupTpl(\n content: TemplateResult | TemplateResult[],\n className?: ClassValue\n): TemplateResult {\n return html`<kbd class=${cn(KBD_GROUP_CLASS, className)} data-slot=\"kbd-group\"\n >${content}</kbd\n >`\n}\n\nexport function commandShortcutTpl(\n text: string,\n className?: ClassValue\n): TemplateResult {\n return html`<kbd\n class=${cn(COMMAND_SHORTCUT_CLASS, className)}\n data-slot=\"command-shortcut\"\n >${text}</kbd\n >`\n}\n","import { el } from \"../../internal/el\"\nimport { html, nothing, type TemplateResult } from \"../../internal/lit\"\nimport { createCommandShortcut, commandShortcutTpl } 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\n/** Template-friendly row content — allows TemplateResult for slots. */\nexport interface RowTplContent {\n leading?: TemplateResult | null\n label: string\n subtitle?: string\n trailing?: TemplateResult | string | null\n}\n\nconst LABEL_CLASS = \"min-w-0 flex-1 truncate\"\nconst SUBTITLE_CLASS = \"truncate text-xs text-muted-foreground\"\n\n// ── Imperative (legacy) — mutates host element ────────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\n/**\n * Renders the row CONTENTS (leading / label / subtitle / trailing) without a\n * wrapping element, so the caller can place them inside any container.\n */\nexport function rowTpl(content: RowTplContent): TemplateResult {\n return html`\n ${content.leading ?? nothing}\n <span class=${LABEL_CLASS}>${content.label}</span>\n ${content.subtitle\n ? html`<span class=${SUBTITLE_CLASS} data-uidex-row-subtitle\n >${content.subtitle}</span\n >`\n : nothing}\n ${content.trailing != null\n ? typeof content.trailing === \"string\"\n ? commandShortcutTpl(content.trailing)\n : content.trailing\n : nothing}\n `\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { KIND_STYLE, type EntityRef } from \"../../../shared/entities\"\nimport type { Cleanup } from \"../../internal/cleanup\"\nimport { html, type TemplateResult } from \"../../internal/lit\"\nimport {\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n} from \"../../ui/list-item\"\nimport type { ViewContext } from \"../core/types\"\nimport { createButton } from \"./button\"\nimport { isAbsentFromPage } from \"./entity-presence\"\nimport { fillRow } from \"./row\"\nimport { rowTpl, type RowTplContent } 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 interface EntityLinkTplOptions {\n ctx: ViewContext\n target: EntityRef\n label?: string\n leading?: TemplateResult | null\n class?: ClassValue\n}\n\n// ── Imperative (legacy) — returns HTMLButtonElement + cleanup ──────\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.views.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\n// ── Declarative (lit-html) — returns TemplateResult ───────────────\n\nconst ACTION_CLASS = cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"w-full cursor-pointer text-left font-normal\"\n)\n\n/**\n * Lit-html template for an entity link button. Event handlers use lit-html's\n * `@event` syntax so cleanup is handled automatically on disconnection.\n */\nexport function entityLinkTpl(options: EntityLinkTplOptions): TemplateResult {\n const { ctx, target, label, leading, class: extraClass } = options\n const absent = isAbsentFromPage(target)\n const resolvedLabel = label ?? `${target.kind}: ${target.id}`\n\n const onClick = () => ctx.views.navigate(target)\n const preview = () => {\n ctx.highlight.show(target, { color: KIND_STYLE[target.kind].color })\n }\n const restoreParent = () => {\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\n return html`\n <button\n type=\"button\"\n class=${cn(ACTION_CLASS, \"w-full\", absent && \"opacity-50\", extraClass)}\n data-slot=\"list-item-button\"\n data-uidex-entity-link\n data-uidex-ref-kind=${target.kind}\n data-uidex-ref-id=${target.id}\n title=${absent ? \"Not on this page\" : \"\"}\n @click=${onClick}\n @mouseenter=${preview}\n @mouseleave=${restoreParent}\n @focus=${preview}\n @blur=${restoreParent}\n >\n ${rowTpl({\n leading,\n label: resolvedLabel,\n })}\n </button>\n `\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type ElementOptions } from \"../../internal/el\"\nimport { html, nothing, type TemplateResult } from \"../../internal/lit\"\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\n// ── Imperative (legacy) — returns HTMLElement ──────────────────────\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\n// ── Declarative (lit-html) — returns TemplateResult ────────────────\n\nexport function captionTpl(\n text: string,\n className?: ClassValue\n): TemplateResult {\n return html`<p class=${cn(CAPTION_CLASS, className)}>${text}</p>`\n}\n\nexport function mutedTextTpl(\n text: string,\n className?: ClassValue\n): TemplateResult {\n return html`<p class=${cn(MUTED_CLASS, className)}>${text}</p>`\n}\n\nexport function descriptionTpl(\n text: string,\n className?: ClassValue\n): TemplateResult {\n return html`<p class=${cn(DESCRIPTION_CLASS, className)}>${text}</p>`\n}\n\nexport function headingTpl(\n text: string | undefined,\n className?: ClassValue\n): TemplateResult {\n if (!text) return nothing as unknown as TemplateResult\n return html`<h3 class=${cn(HEADING_CLASS, className)}>${text}</h3>`\n}\n","import { CircleCheck, CircleX, Loader2 } from \"lucide\"\n\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport {\n html,\n render,\n nothing,\n createRef,\n ref,\n type TemplateResult,\n} from \"../../internal/lit\"\nimport { icon } from \"../../internal/lit-icon\"\nimport { createScreenshotLightbox } from \"../../ui/screenshot-lightbox\"\nimport { buttonVariants } from \"../../ui/button\"\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 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\n// ── Field classes ───────────────────────────────────────────────────\n\nconst FIELD_INPUT_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\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 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_ERROR_CLASS = \"text-destructive-foreground text-xs\"\n\nconst CHECKBOX_CLASS =\n \"border-input bg-popover size-4 cursor-pointer rounded-[0.25rem] border accent-primary\"\n\n// ── Field renderer (imperative — returns FieldHandle for error mgmt) ──\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 = el(\"select\", {\n class: NATIVE_SELECT_CLASS,\n attrs: {\n \"data-slot\": \"select\",\n name: field.name,\n id: controlId,\n required: field.required ?? false,\n },\n }) as HTMLSelectElement\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 = el(\"input\", {\n class: cn(FIELD_INPUT_CLASS, \"h-8 px-3\"),\n attrs: {\n \"data-slot\": \"input\",\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 }) as HTMLInputElement\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 = el(\"textarea\", {\n class: cn(FIELD_INPUT_CLASS, \"min-h-20 px-3 py-2\"),\n attrs: {\n \"data-slot\": \"textarea\",\n name: field.name,\n id: controlId,\n placeholder: field.placeholder ?? \"\",\n required: field.required ?? false,\n rows: field.rows,\n },\n }) as HTMLTextAreaElement\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: CHECKBOX_CLASS,\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 = el(\"p\", {\n class: FIELD_ERROR_CLASS,\n attrs: {\n \"data-slot\": \"field-error\",\n role: \"alert\",\n \"aria-live\": \"polite\",\n },\n }) as HTMLParagraphElement\n errorNode.hidden = true\n\n const field$ = el(\"div\", {\n class: cn(\n FIELD_ROOT_CLASS,\n field.kind === \"checkbox\" ? \"flex-row items-center gap-2\" : \"\"\n ),\n attrs: {\n \"data-slot\": \"field\",\n \"data-uidex-primitive\": \"field\",\n \"data-uidex-field-name\": field.name,\n },\n }) as HTMLDivElement\n\n const label = el(\"label\", {\n class: FIELD_LABEL_CLASS,\n attrs: {\n \"data-slot\": \"field-label\",\n for: controlId,\n },\n text: field.label,\n })\n\n if (field.kind === \"checkbox\") {\n field$.append(control, label)\n } else {\n field$.append(label, control)\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\n// ── Shared constants ────────────────────────────────────────────────\n\nconst ICON_TILE_BASE =\n \"bg-card text-foreground shadow-sm/5 not-dark:bg-clip-padding [&_svg:not([class*='size-'])]:size-4.5 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%)]\"\nconst ICON_TILE = ICON_TILE_BASE + \" relative\"\nconst ICON_TILE_GHOST =\n ICON_TILE_BASE +\n \" pointer-events-none absolute bottom-px shadow-none scale-84\"\nconst 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\"\nconst 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\n// ── State view templates ────────────────────────────────────────────\n\nfunction iconMediaTpl(iconTpl: TemplateResult): TemplateResult {\n return html`\n <div class=\"relative mb-6\">\n <div\n class=${ICON_TILE_GHOST +\n \" -rotate-10 origin-bottom-left -translate-x-0.5\"}\n aria-hidden=\"true\"\n ></div>\n <div\n class=${ICON_TILE_GHOST +\n \" rotate-10 origin-bottom-right translate-x-0.5\"}\n aria-hidden=\"true\"\n ></div>\n <div class=${ICON_TILE}>${iconTpl}</div>\n </div>\n `\n}\n\nfunction loadingViewTpl(): TemplateResult {\n return html`\n <div class=${EMPTY_ROOT} aria-live=\"polite\" hidden>\n ${iconMediaTpl(icon(Loader2, \"animate-spin\"))}\n <div class=\"flex max-w-sm flex-col items-center text-center\">\n <div class=${SKELETON + \" h-6 w-36 rounded-md\"}></div>\n </div>\n <div\n class=\"flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm\"\n >\n <div class=${SKELETON + \" h-7 w-20 rounded-lg\"}></div>\n </div>\n </div>\n `\n}\n\nfunction successViewTpl(): TemplateResult {\n return html`\n <div class=${EMPTY_ROOT} hidden data-uidex-success-view>\n ${iconMediaTpl(icon(CircleCheck))}\n <div class=\"flex max-w-sm flex-col items-center text-center\">\n <div\n class=\"font-heading text-xl font-semibold\"\n data-uidex-success-title\n ></div>\n </div>\n <div\n class=\"flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm\"\n data-uidex-success-actions\n >\n <a\n class=${buttonVariants({ variant: \"outline\", size: \"sm\" })}\n target=\"_blank\"\n rel=\"noreferrer\"\n data-uidex-success-link\n ></a>\n </div>\n </div>\n `\n}\n\nfunction errorViewTpl(): TemplateResult {\n return html`\n <div class=${EMPTY_ROOT} hidden data-uidex-error-view>\n ${iconMediaTpl(icon(CircleX))}\n <div class=\"flex max-w-sm flex-col items-center gap-1 text-center\">\n <div\n class=\"font-heading text-xl font-semibold\"\n data-uidex-error-title\n ></div>\n <p\n class=\"text-muted-foreground text-sm\"\n data-uidex-error-description\n ></p>\n </div>\n <div\n class=\"flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm\"\n >\n <button\n type=\"button\"\n class=${buttonVariants({ variant: \"outline\", size: \"sm\" })}\n data-slot=\"button\"\n data-uidex-retry-button\n >\n Try Again\n </button>\n </div>\n </div>\n `\n}\n\n// ── Main form renderer ──────────────────────────────────────────────\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 // ── Screenshot preview field (imperative — async + lightbox) ──────\n const screenshotField = el(\"div\", {\n class: \"flex flex-col gap-1.5\",\n attrs: { hidden: true },\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 screenshotField.append(screenshotLabel, screenshotPreview)\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 handle = createScreenshotLightbox(screenshotPreview, dataUrl, {\n pushEscapeLayer: ctx.pushEscapeLayer,\n })\n cleanups.push(() => handle.destroy())\n })\n }\n\n // ── Render the section shell ──────────────────────────────────────\n const formRef = createRef<HTMLFormElement>()\n const statusRef = createRef<HTMLParagraphElement>()\n const submitRef = createRef<HTMLButtonElement>()\n\n render(\n html`\n <section\n class=\"flex min-h-0 flex-1 flex-col p-4\"\n data-uidex-form-surface=${surface.id}\n >\n <form\n ${ref(formRef)}\n class=\"flex w-full flex-col gap-4\"\n data-slot=\"form\"\n data-uidex-primitive=\"form\"\n novalidate\n data-uidex-form=${surface.id}\n ></form>\n ${loadingViewTpl()} ${successViewTpl()} ${errorViewTpl()}\n </section>\n `,\n root\n )\n\n const form = formRef.value!\n\n // Append imperative field nodes and screenshot into the form\n if (surface.screenshotPreview) {\n form.append(screenshotField)\n }\n for (const f of fields) {\n form.append(f.node)\n }\n\n // Submit button (sr-only)\n const submit = el(\"button\", {\n class: cn(buttonVariants({ variant: \"default\" }), \"sr-only\"),\n attrs: {\n type: \"submit\",\n \"data-slot\": \"button\",\n \"data-uidex-form-submit\": \"\",\n },\n text: surface.submit.label,\n })\n form.append(submit)\n\n // Status paragraph\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 form.append(status)\n\n // ── Query state view elements ─────────────────────────────────────\n const sectionEl = root.querySelector<HTMLElement>(\n \"[data-uidex-form-surface]\"\n )!\n const loadingView =\n sectionEl.querySelector<HTMLElement>(\"[aria-live='polite'][hidden]\") ??\n (sectionEl.children[1] as HTMLElement)\n const successView = sectionEl.querySelector<HTMLElement>(\n \"[data-uidex-success-view]\"\n )!\n const successTitle = sectionEl.querySelector<HTMLElement>(\n \"[data-uidex-success-title]\"\n )!\n const successLink = sectionEl.querySelector<HTMLAnchorElement>(\n \"[data-uidex-success-link]\"\n )!\n const successActions = successLink.parentElement!\n const errorView = sectionEl.querySelector<HTMLElement>(\n \"[data-uidex-error-view]\"\n )!\n const errorTitle = sectionEl.querySelector<HTMLElement>(\n \"[data-uidex-error-title]\"\n )!\n const errorDescription = sectionEl.querySelector<HTMLElement>(\n \"[data-uidex-error-description]\"\n )!\n const retryButton = sectionEl.querySelector<HTMLButtonElement>(\n \"[data-uidex-retry-button]\"\n )!\n\n // ── State management functions ────────────────────────────────────\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 // ── Form state ─────────────────────────────────────────────────────\n\n type FormState = \"idle\" | \"submitting\" | \"success\" | \"error\"\n let formState: FormState = \"idle\"\n let lastResult: FormSubmitResult | null = null\n let lastFieldErrors: Record<string, string> | null = null\n const subscribers = new Set<() => void>()\n const notify = (): void => {\n for (const cb of subscribers) cb()\n }\n\n async function doSubmit(values: Record<string, FormValue>): Promise<void> {\n if (formState === \"submitting\") return\n formState = \"submitting\"\n\n setStatus(null)\n clearAllFieldErrors()\n showView(\"form\")\n lastResult = null\n lastFieldErrors = null\n\n if (surface.schema) {\n const errors = await validateWithSchema(surface.schema, values)\n if (errors) {\n lastFieldErrors = errors\n lastResult = {\n status: \"error\",\n message: \"Please fix the errors above.\",\n fieldErrors: errors,\n }\n formState = \"error\"\n applyFieldErrors(errors)\n setStatus(lastResult)\n showView(\"form\")\n notify()\n return\n }\n }\n\n submit.disabled = true\n submit.setAttribute(\"data-loading\", \"\")\n showView(\"loading\")\n notify()\n\n try {\n const result: FormSubmitResult = (await surface.submit.onSubmit(\n values\n )) ?? { status: \"success\" }\n submit.disabled = false\n submit.removeAttribute(\"data-loading\")\n\n if (result.status === \"success\") {\n lastResult = result\n formState = \"success\"\n populateSuccess(result)\n showView(\"success\")\n clearAllFieldErrors()\n if (result.resetFields) {\n for (const name of result.resetFields) {\n fieldByName.get(name)?.reset()\n }\n }\n } else {\n lastResult = result\n lastFieldErrors = result.fieldErrors ?? null\n formState = \"error\"\n const hasFieldErrors =\n lastFieldErrors && Object.keys(lastFieldErrors).length > 0\n if (hasFieldErrors) {\n applyFieldErrors(lastFieldErrors ?? undefined)\n setStatus(result)\n showView(\"form\")\n } else {\n populateError(result)\n showView(\"error\")\n }\n }\n } catch (err) {\n submit.disabled = false\n submit.removeAttribute(\"data-loading\")\n const message = err instanceof Error ? err.message : String(err)\n lastResult = { status: \"error\", message }\n formState = \"error\"\n populateError(lastResult)\n showView(\"error\")\n }\n notify()\n }\n\n function retryFromError(): void {\n formState = \"idle\"\n lastResult = null\n lastFieldErrors = null\n setStatus(null)\n clearAllFieldErrors()\n showView(\"form\")\n notify()\n }\n\n // ── Form event handlers ───────────────────────────────────────────\n\n const onSubmit = (e: SubmitEvent): void => {\n e.preventDefault()\n if (formState === \"success\") return\n if (formState === \"error\") retryFromError()\n const values: Record<string, FormValue> = {}\n surface.fields.forEach((field, i) => {\n values[field.name] = fields[i].read()\n })\n void doSubmit(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 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 (formState === \"success\") {\n ctx.close()\n return\n }\n if (formState !== \"idle\" && formState !== \"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 retryButton.addEventListener(\"click\", retryFromError)\n cleanups.push(() => retryButton.removeEventListener(\"click\", retryFromError))\n\n // ── Submit intent ─────────────────────────────────────────────────\n\n const resolveIntent = (): SubmitIntent | null => {\n if (formState === \"submitting\") {\n return { label: \"Submitting…\", disabled: true, perform: () => {} }\n }\n if (formState === \"success\") {\n return { label: \"Close\", perform: () => ctx.close() }\n }\n if (formState === \"error\" && !lastFieldErrors) {\n return { label: \"Try Again\", perform: retryFromError }\n }\n return { label: surface.submit.label, perform: triggerSubmit }\n }\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 * 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 { Cleanup } from \"../internal/cleanup\"\nimport { html, render, createRef, ref } from \"../internal/lit\"\nimport { createDialog } from \"../machines/dialog\"\nimport { spreadProps } from \"../views/builder/spread-props\"\nimport type { EscapeHandler } from \"../surface/keys\"\n\nexport interface ScreenshotLightboxHandle {\n destroy(): void\n}\n\nexport interface ScreenshotLightboxOptions {\n pushEscapeLayer?: (handler: EscapeHandler) => Cleanup\n}\n\nexport function createScreenshotLightbox(\n trigger: HTMLElement,\n dataUrl: string,\n options?: ScreenshotLightboxOptions\n): ScreenshotLightboxHandle {\n const cleanups: Cleanup[] = []\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: () => trigger.getRootNode() as ShadowRoot | Document,\n })\n cleanups.push(() => lightbox.destroy())\n\n const backdropRef = createRef<HTMLDivElement>()\n const positionerRef = createRef<HTMLDivElement>()\n const contentRef = createRef<HTMLDivElement>()\n const fullImgRef = createRef<HTMLImageElement>()\n\n const mountTarget = (() => {\n const rn = trigger.getRootNode()\n return rn instanceof ShadowRoot ? rn : (rn as Document).body\n })()\n\n const fragment = document.createDocumentFragment()\n render(\n html`\n <div\n ${ref(backdropRef)}\n class=\"fixed inset-0 z-[2147483647] cursor-pointer bg-black/80\"\n data-uidex-lightbox\n hidden\n ></div>\n <div\n ${ref(positionerRef)}\n class=\"fixed inset-0 z-[2147483647] flex cursor-pointer items-center justify-center p-6\"\n hidden\n >\n <div\n ${ref(contentRef)}\n class=\"flex items-center justify-center outline-none\"\n >\n <img\n ${ref(fullImgRef)}\n class=\"max-h-full max-w-full rounded-lg\"\n src=${dataUrl}\n alt=\"Screenshot\"\n />\n </div>\n </div>\n `,\n fragment\n )\n\n const backdropEl = backdropRef.value!\n const positioner = positionerRef.value!\n const content = contentRef.value!\n const fullImg = fullImgRef.value!\n\n mountTarget.append(fragment)\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 closeLightbox = (): void => lightbox.api().setOpen(false)\n\n if (options?.pushEscapeLayer) {\n cleanups.push(\n options.pushEscapeLayer(() => {\n if (!lightbox.api().open) return false\n closeLightbox()\n return true\n })\n )\n } else {\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 closeLightbox()\n }\n window.addEventListener(\"keydown\", onEscapeCapture, true)\n cleanups.push(() =>\n window.removeEventListener(\"keydown\", onEscapeCapture, true)\n )\n }\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 closeLightbox()\n suppressClickUntil = Date.now() + 100\n }\n window.addEventListener(\"pointerdown\", onClickOutsideCapture, true)\n window.addEventListener(\"mousedown\", onClickOutsideCapture, true)\n window.addEventListener(\"click\", onClickOutsideCapture, true)\n cleanups.push(() => {\n window.removeEventListener(\"pointerdown\", onClickOutsideCapture, true)\n window.removeEventListener(\"mousedown\", onClickOutsideCapture, true)\n window.removeEventListener(\"click\", onClickOutsideCapture, true)\n })\n\n spreadProps(\n trigger,\n lightbox.api().getTriggerProps() as Record<string, unknown>\n )\n\n return {\n destroy() {\n for (const c of cleanups) c()\n cleanups.length = 0\n },\n }\n}\n","import { KIND_STYLE } from \"../../../shared/entities\"\nimport { createScrollArea } from \"../../machines/scroll-area\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport {\n html,\n render,\n nothing,\n createRef,\n ref,\n type TemplateResult,\n} from \"../../internal/lit\"\nimport { icon } from \"../../internal/lit-icon\"\nimport { matchesQuery } from \"../builder/filter\"\nimport { createPersistentSpreads } from \"../builder/spread-props\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { ShellAction, ViewContext } from \"../core/types\"\nimport { Circle } from \"lucide\"\nimport { isAbsentFromPage } from \"../primitives/entity-presence\"\nimport { iconTileTpl } from \"../primitives/icon-tile\"\nimport { kindIconTileTpl } from \"../primitives/kind-icon\"\nimport { rowTpl } from \"../primitives/row\"\nimport { mutedTextTpl } from \"../primitives/text\"\nimport {\n LIST_GROUP_LABEL_CLASS,\n LIST_ITEM_CLASS,\n LIST_ITEM_STATE_CLASS,\n} from \"../../ui/list-item\"\nimport { createListController, type ListController } from \"./list-controller\"\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\nfunction resolveLeadingTpl(item: ListItem, ctx: ViewContext): TemplateResult {\n if (item.entityChip) return kindIconTileTpl(item.entityChip.entity.kind)\n if (item.leading) {\n const node = item.leading()\n if (node instanceof SVGElement) {\n const existing = node.getAttribute(\"class\") ?? \"\"\n const stripped = existing\n .replace(/\\b(h-\\d+|w-\\d+|size-\\d+)\\b/g, \"\")\n .trim()\n node.setAttribute(\"class\", cn(stripped, \"size-3.5 opacity-80\"))\n }\n return html`<span\n class=\"bg-muted text-muted-foreground inline-flex size-6 shrink-0 items-center justify-center rounded-md\"\n data-slot=\"icon-tile\"\n aria-hidden=\"true\"\n >${node}</span\n >`\n }\n return iconTileTpl(icon(Circle, \"size-3.5 opacity-80\"))\n}\n\ninterface ListShell {\n section: HTMLElement\n scrollRoot: HTMLDivElement\n viewport: HTMLDivElement\n content: HTMLDivElement\n}\n\nfunction renderShell(surface: ListSurface, root: HTMLElement): ListShell {\n const scrollRootRef = createRef<HTMLDivElement>()\n const viewportRef = createRef<HTMLDivElement>()\n const contentRef = createRef<HTMLDivElement>()\n const sectionRef = createRef<HTMLElement>()\n\n render(\n html`\n <section\n ${ref(sectionRef)}\n class=\"flex h-full flex-col overflow-hidden\"\n data-uidex-list-surface=${surface.id}\n >\n <div\n ${ref(scrollRootRef)}\n class=\"min-h-0 flex-1\"\n data-uidex-list-scroll-root\n >\n <div ${ref(viewportRef)} class=\"uidex-scrollbar h-full w-full\">\n <div\n ${ref(contentRef)}\n class=\"scroll-py-2 p-2\"\n data-uidex-list-content\n ></div>\n </div>\n </div>\n </section>\n `,\n root\n )\n\n return {\n section: sectionRef.value!,\n scrollRoot: scrollRootRef.value!,\n viewport: viewportRef.value!,\n content: contentRef.value!,\n }\n}\n\ninterface ItemMaps {\n itemNodes: Map<string, HTMLElement>\n itemForValue: Map<string, ListItem>\n groupNodes: Map<string, HTMLElement>\n}\n\nfunction buildItemsDom(\n surface: ListSurface,\n ctx: ViewContext,\n filteredItems: readonly ListItem[],\n allByValue: Map<string, ListItem>,\n content: HTMLElement\n): ItemMaps {\n const itemNodes = new Map<string, HTMLElement>()\n const itemForValue = new Map<string, ListItem>()\n const groupNodes = new Map<string, HTMLElement>()\n content.replaceChildren()\n\n if (filteredItems.length === 0) {\n const frag = document.createDocumentFragment()\n render(\n mutedTextTpl(surface.emptyLabel ?? \"No matches\", \"p-4 text-center\"),\n frag\n )\n content.append(frag)\n return { itemNodes, itemForValue, groupNodes }\n }\n\n const byGroup = new Map<string, ListItem[]>()\n for (const item of filteredItems) {\n const key = item.group ?? \"\"\n const bucket = byGroup.get(key) ?? []\n bucket.push(item)\n byGroup.set(key, bucket)\n }\n\n const frag = document.createDocumentFragment()\n render(\n html`\n <ul class=\"flex flex-col gap-1\" data-uidex-list-groups>\n ${Array.from(byGroup.entries()).map(\n ([group, items]) => html`\n <li\n class=\"flex flex-col gap-1 py-1\"\n data-uidex-list-group\n data-uidex-list-group-name=${group}\n >\n ${group\n ? html`<h3 class=${LIST_GROUP_LABEL_CLASS}>${group}</h3>`\n : nothing}\n <ul\n class=\"flex flex-col\"\n data-uidex-group-list=${group || \"ungrouped\"}\n >\n ${items.map((item) => {\n const absent = item.preview\n ? isAbsentFromPage(item.preview, ctx.registry)\n : false\n return html`\n <li\n class=${cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_STATE_CLASS,\n absent && \"opacity-50\"\n )}\n data-uidex-list-item=${rowTag(item)}\n title=${absent ? \"Not on this page\" : \"\"}\n data-uidex-item-value=${item.value}\n >\n ${rowTpl({\n leading: resolveLeadingTpl(item, ctx),\n label: item.label,\n subtitle: item.subtitle,\n trailing: item.trailing ?? item.shortcut,\n })}\n </li>\n `\n })}\n </ul>\n </li>\n `\n )}\n </ul>\n `,\n frag\n )\n\n content.append(frag)\n\n for (const el of content.querySelectorAll<HTMLElement>(\n \"[data-uidex-group-list]\"\n )) {\n const id = el.getAttribute(\"data-uidex-group-list\") ?? \"ungrouped\"\n groupNodes.set(id, el)\n }\n for (const el of content.querySelectorAll<HTMLElement>(\n \"[data-uidex-item-value]\"\n )) {\n const value = el.getAttribute(\"data-uidex-item-value\")!\n itemNodes.set(value, el)\n const item = allByValue.get(value)\n if (item) itemForValue.set(value, item)\n }\n\n return { itemNodes, itemForValue, groupNodes }\n}\n\n// ── Public entry point ──────────────────────────────────────────────\n\nexport function renderListSurface(\n surface: ListSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n const all = surface.items\n const searchable = surface.searchable !== false\n const filterFn = searchable ? (surface.filter ?? defaultFilter) : undefined\n let filteredItems: readonly ListItem[] = all\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 hasDefault =\n surface.defaultHighlight !== undefined &&\n allByValue.has(surface.defaultHighlight)\n\n const { section, scrollRoot, viewport, content } = renderShell(surface, root)\n\n let maps = buildItemsDom(surface, ctx, filteredItems, allByValue, content)\n\n const controller: ListController = createListController({\n surfaceId: surface.id,\n contentEl: content,\n items: filteredItems,\n itemNodes: maps.itemNodes,\n defaultHighlight: hasDefault ? surface.defaultHighlight : undefined,\n onSelect: (value) => {\n const item = allByValue.get(value)\n if (item && surface.onSelect) surface.onSelect(item)\n },\n onHighlightChange: (value) => {\n const item = value ? allByValue.get(value) : 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 searchInput: searchable ? ctx.searchInput : undefined,\n })\n\n // ── Scroll area ──────────────────────────────────────────────────\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 // ── Focus the content element for non-searchable lists ───────────\n if (!searchable) {\n requestAnimationFrame(() => content.focus({ preventScroll: true }))\n }\n\n // ── Track visibility so stacked controllers don't fight ──────────\n const visibilityObserver = new MutationObserver(() => {\n controller.setActive(!root.hidden)\n })\n visibilityObserver.observe(root, {\n attributes: true,\n attributeFilter: [\"hidden\"],\n })\n\n // ── Cleanup ──────────────────────────────────────────────────────\n const cleanup = composeCleanups([\n () => controller.destroy(),\n () => ctx.highlight.hide(),\n () => visibilityObserver.disconnect(),\n unsubScroll,\n () => scrollSpreads.cleanupAll(),\n scrollArea.destroy,\n () => {\n maps.itemNodes.clear()\n maps.itemForValue.clear()\n maps.groupNodes.clear()\n root.replaceChildren()\n },\n ])\n\n // ── Search ───────────────────────────────────────────────────────\n let lastItemKey = filteredItems.map((i) => i.value).join(\"\\x00\")\n\n const onSearch = filterFn\n ? (query: string): void => {\n const next = all.filter((item) => filterFn(item, query))\n const nextKey = next.map((i) => i.value).join(\"\\x00\")\n if (nextKey === lastItemKey) return\n lastItemKey = nextKey\n maps = buildItemsDom(surface, ctx, next, allByValue, content)\n filteredItems = next\n controller.setItems(filteredItems, maps.itemNodes)\n }\n : undefined\n\n // ── Submit intent + highlight actions ────────────────────────────\n const submitIntent = {\n get() {\n const value = controller.getHighlightedValue()\n if (!value) return null\n const item = allByValue.get(value)\n if (!item || !surface.onSelect) return null\n return { label: \"Select\", perform: () => surface.onSelect!(item) }\n },\n subscribe(cb: () => void) {\n return controller.subscribe(cb)\n },\n }\n\n const highlightActions = {\n get(): readonly ShellAction[] {\n const value = controller.getHighlightedValue()\n if (!value) return []\n return allByValue.get(value)?.actions ?? []\n },\n subscribe(cb: () => void) {\n return controller.subscribe(cb)\n },\n }\n\n return { cleanup, onSearch, submitIntent, highlightActions }\n}\n","import type { Cleanup } from \"../../internal/cleanup\"\n\nexport interface ListControllerOptions {\n surfaceId: string\n contentEl: HTMLElement\n items: readonly { value: string }[]\n itemNodes: Map<string, HTMLElement>\n defaultHighlight?: string\n onSelect: (value: string) => void\n onHighlightChange?: (value: string | null) => void\n searchInput?: HTMLInputElement\n}\n\nexport interface ListController {\n getHighlightedValue(): string | null\n highlightValue(value: string | null): void\n setActive(active: boolean): void\n setItems(\n items: readonly { value: string }[],\n itemNodes: Map<string, HTMLElement>\n ): void\n subscribe(cb: () => void): Cleanup\n destroy(): void\n}\n\nexport function createListController(\n opts: ListControllerOptions\n): ListController {\n let items = opts.items\n let itemNodes = opts.itemNodes\n let highlighted: string | null = null\n let kbdMode = false\n const subs = new Set<() => void>()\n\n const { contentEl, onSelect, onHighlightChange } = opts\n\n contentEl.setAttribute(\"role\", \"listbox\")\n contentEl.tabIndex = 0\n contentEl.style.outline = \"none\"\n applyItemAria()\n\n if (opts.defaultHighlight && itemNodes.has(opts.defaultHighlight)) {\n setHighlight(opts.defaultHighlight, false)\n }\n\n function values(): string[] {\n return items.map((i) => i.value)\n }\n\n function notify(): void {\n for (const cb of subs) cb()\n }\n\n function applyItemAria(): void {\n for (const [value, el] of itemNodes) {\n el.setAttribute(\"role\", \"option\")\n el.id = `${opts.surfaceId}-item-${value}`\n }\n }\n\n function setHighlight(value: string | null, scroll = true): void {\n if (value === highlighted) return\n if (highlighted) {\n const prev = itemNodes.get(highlighted)\n if (prev) {\n prev.removeAttribute(\"data-highlighted\")\n prev.removeAttribute(\"data-kbd-highlighted\")\n prev.removeAttribute(\"aria-selected\")\n }\n }\n highlighted = value\n if (value) {\n const el = itemNodes.get(value)\n if (el) {\n el.setAttribute(\"data-highlighted\", \"\")\n el.setAttribute(\"aria-selected\", \"true\")\n if (kbdMode) el.setAttribute(\"data-kbd-highlighted\", \"\")\n contentEl.setAttribute(\"aria-activedescendant\", el.id)\n if (scroll) el.scrollIntoView({ block: \"nearest\" })\n }\n } else {\n contentEl.removeAttribute(\"aria-activedescendant\")\n }\n onHighlightChange?.(value)\n notify()\n }\n\n function enterKbd(): void {\n if (kbdMode) return\n kbdMode = true\n contentEl.setAttribute(\"data-kbd-nav\", \"\")\n }\n\n function exitKbd(): void {\n if (!kbdMode) return\n kbdMode = false\n contentEl.removeAttribute(\"data-kbd-nav\")\n if (highlighted) {\n itemNodes.get(highlighted)?.removeAttribute(\"data-kbd-highlighted\")\n }\n }\n\n function move(delta: number): void {\n const vals = values()\n if (vals.length === 0) return\n enterKbd()\n if (highlighted === null) {\n setHighlight(delta > 0 ? vals[0] : vals[vals.length - 1])\n if (highlighted)\n itemNodes.get(highlighted)?.setAttribute(\"data-kbd-highlighted\", \"\")\n return\n }\n const idx = vals.indexOf(highlighted)\n const next = (idx + delta + vals.length) % vals.length\n setHighlight(vals[next])\n if (highlighted)\n itemNodes.get(highlighted)?.setAttribute(\"data-kbd-highlighted\", \"\")\n }\n\n let active = true\n\n function handleKeydown(e: KeyboardEvent): void {\n if (!active) return\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault()\n move(1)\n break\n case \"ArrowUp\":\n e.preventDefault()\n move(-1)\n break\n case \"Home\":\n e.preventDefault()\n enterKbd()\n const first = values()[0]\n if (first != null) {\n setHighlight(first)\n if (highlighted)\n itemNodes.get(highlighted)?.setAttribute(\"data-kbd-highlighted\", \"\")\n }\n break\n case \"End\":\n e.preventDefault()\n enterKbd()\n const vals = values()\n const last = vals[vals.length - 1]\n if (last != null) {\n setHighlight(last)\n if (highlighted)\n itemNodes.get(highlighted)?.setAttribute(\"data-kbd-highlighted\", \"\")\n }\n break\n case \"Enter\":\n if (highlighted) {\n e.preventDefault()\n onSelect(highlighted)\n }\n break\n }\n }\n\n function handlePointermove(e: PointerEvent): void {\n const target = (e.target as HTMLElement).closest?.(\n \"[data-uidex-item-value]\"\n )\n if (!target) return\n const value = target.getAttribute(\"data-uidex-item-value\")\n if (!value || value === highlighted) return\n exitKbd()\n setHighlight(value, false)\n }\n\n function handleClick(e: MouseEvent): void {\n const target = (e.target as HTMLElement).closest?.(\n \"[data-uidex-item-value]\"\n )\n if (!target) return\n const value = target.getAttribute(\"data-uidex-item-value\")\n if (!value) return\n onSelect(value)\n }\n\n contentEl.addEventListener(\"keydown\", handleKeydown)\n contentEl.addEventListener(\"pointermove\", handlePointermove)\n contentEl.addEventListener(\"click\", handleClick)\n opts.searchInput?.addEventListener(\"keydown\", handleKeydown)\n\n return {\n getHighlightedValue: () => highlighted,\n highlightValue: (v) => setHighlight(v),\n setActive(v) {\n active = v\n },\n setItems(nextItems, nextNodes) {\n items = nextItems\n itemNodes = nextNodes\n applyItemAria()\n if (nextItems.length > 0) {\n setHighlight(nextItems[0].value)\n } else {\n setHighlight(null)\n }\n },\n subscribe(cb) {\n subs.add(cb)\n return () => subs.delete(cb)\n },\n destroy() {\n contentEl.removeEventListener(\"keydown\", handleKeydown)\n contentEl.removeEventListener(\"pointermove\", handlePointermove)\n contentEl.removeEventListener(\"click\", handleClick)\n opts.searchInput?.removeEventListener(\"keydown\", handleKeydown)\n subs.clear()\n },\n }\n}\n","import type { Cleanup, ShellAction, ViewContext } from \"../core/types\"\nimport type { ViewSurface } from \"../core/surface\"\nimport { renderDetailSurface } from \"./detail\"\nimport { renderFormSurface } from \"./form\"\nimport { renderListSurface } from \"./list\"\n\nexport interface SubmitIntent {\n label: string\n disabled?: boolean\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 }\n}\n","import type { EntityRef, Registry } from \"../../../shared/entities\"\nimport type { Cleanup } from \"../../internal/cleanup\"\nimport { html, render, createRef, ref } from \"../../internal/lit\"\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 { Router } from \"./router\"\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: Router\n session: SessionStore\n registry: Registry\n cloud: CloudAdapter | null\n highlight: HighlightController\n nextScrollSeq(): number\n pushEscapeLayer: ViewContext[\"pushEscapeLayer\"]\n onAfterSubmit?: () => void\n getRoute?: () => string\n}\n\nexport function mountEntry(\n entry: ViewStackEntry,\n view: View,\n deps: MountEntryDeps\n): MountedEntry | null {\n const scrollRootRef = createRef<HTMLDivElement>()\n const hostRef = createRef<HTMLDivElement>()\n\n // Render scroll-root + host into the container\n const fragment = document.createDocumentFragment()\n render(\n html`\n <div\n ${ref(scrollRootRef)}\n data-uidex-view-scroll-root\n class=${SCROLL_ROOT_CLASS}\n >\n <div\n ${ref(hostRef)}\n data-uidex-view-slot\n data-uidex-view-id=${view.id}\n class=${HOST_CLASS}\n ></div>\n </div>\n `,\n fragment\n )\n\n const scrollRoot = scrollRootRef.value!\n const host = hostRef.value!\n deps.container.appendChild(fragment)\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 user: deps.session.getState().user,\n views: deps.views,\n push: (target) => {\n if (!deps.views.get(target.id)) return\n deps.session.mode.transition.pushView({\n id: target.id,\n ref: target.ref ?? null,\n })\n },\n pop: () => deps.session.mode.transition.popOrTransition(),\n close: () => deps.session.mode.transition.dismiss(),\n pinHighlight: (r: EntityRef) => deps.session.highlight.pin(r),\n searchInput: deps.searchInput,\n highlight: deps.highlight,\n getStack: () => deps.session.getState().stack,\n pushEscapeLayer: deps.pushEscapeLayer,\n onAfterSubmit: deps.onAfterSubmit,\n getRoute: deps.getRoute,\n }\n\n let surfaceResult: MountedSurface\n try {\n if (view.render) {\n const result = view.render(ctx, host)\n const cleanup = typeof result === \"function\" ? result : () => {}\n surfaceResult = {\n cleanup: () => {\n try {\n cleanup()\n } finally {\n host.replaceChildren()\n }\n },\n }\n } else {\n const surface = view.surface(ctx)\n surfaceResult = renderSurface(surface, ctx, host)\n }\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 } from \"lucide\"\nimport { Z_CHROME } from \"../../surface/constants\"\nimport type { PaletteShortcut } from \"../../surface/keys\"\nimport { html, render, svg, createRef, ref } from \"../../internal/lit\"\nimport { icon } from \"../../internal/lit-icon\"\nimport { createActionsPopup, type ActionsPopupHandle } from \"./actions-popup\"\nimport { kbdTpl } 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 disabled:pointer-events-none disabled:opacity-50\"\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 backdropRef = createRef<HTMLDivElement>()\n const viewportRef = createRef<HTMLDivElement>()\n const frameRef = createRef<HTMLDivElement>()\n const headerRef = createRef<HTMLElement>()\n const backBtnRef = createRef<HTMLButtonElement>()\n const searchIconRef = createRef<HTMLSpanElement>()\n const searchInputRef = createRef<HTMLInputElement>()\n const headerTitleRef = createRef<HTMLDivElement>()\n const hostContainerRef = createRef<HTMLDivElement>()\n const footerLeftRef = createRef<HTMLDivElement>()\n const footerRightRef = createRef<HTMLDivElement>()\n const actionsPopupSlotRef = createRef<HTMLDivElement>()\n\n const actionsPopup = createActionsPopup({\n onOpenChange: (open) => {\n if (hostContainerRef.value)\n hostContainerRef.value.style.pointerEvents = open ? \"none\" : \"\"\n if (!open)\n requestAnimationFrame(() =>\n searchInputRef.value?.focus({ preventScroll: true })\n )\n },\n })\n\n const logo = createUidexLogo()\n logo.setAttribute(\"data-uidex-view-stack-footer-logo\", \"\")\n\n const onBackClick = () => callbacks.onBack()\n const onSearchInput = () => {\n if (searchInputRef.value)\n callbacks.onSearchInput(searchInputRef.value.value)\n }\n const onViewportClick = (e: MouseEvent) => {\n if (e.target === viewportRef.value) callbacks.onBackdropClick()\n }\n\n render(\n html`\n <div\n ${ref(backdropRef)}\n data-uidex-view-backdrop\n class=${BACKDROP_CLASS}\n style=\"z-index: ${Z_CHROME}\"\n ></div>\n <div\n ${ref(viewportRef)}\n data-uidex-view-viewport\n class=${VIEWPORT_CLASS}\n style=\"z-index: ${Z_CHROME}\"\n @click=${onViewportClick}\n >\n <div ${ref(frameRef)} data-uidex-view-stack-frame class=${FRAME_CLASS}>\n <header\n ${ref(headerRef)}\n data-uidex-view-stack-header\n class=${HEADER_CLASS}\n >\n <div data-uidex-view-stack-search class=${SEARCH_WRAPPER_CLASS}>\n <button\n ${ref(backBtnRef)}\n type=\"button\"\n data-uidex-view-stack-back\n aria-label=\"Back\"\n class=${BACK_BUTTON_CLASS}\n hidden\n @click=${onBackClick}\n >\n ${icon(ArrowLeft, BACK_ICON_CLASS)}\n </button>\n <span\n ${ref(searchIconRef)}\n data-uidex-view-stack-search-icon\n aria-hidden=\"true\"\n class=${SEARCH_ICON_WRAP_CLASS}\n >${icon(Search, SEARCH_ICON_CLASS)}</span\n >\n <input\n ${ref(searchInputRef)}\n type=\"text\"\n data-uidex-search-input\n placeholder=\"Search for command...\"\n class=${SEARCH_INPUT_CLASS}\n @input=${onSearchInput}\n />\n <div\n ${ref(headerTitleRef)}\n data-uidex-view-stack-title\n class=${HEADER_TITLE_CLASS}\n hidden\n ></div>\n </div>\n </header>\n <div\n ${ref(hostContainerRef)}\n data-uidex-view-stack-hosts\n class=${HOST_CONTAINER_CLASS}\n ></div>\n <footer data-uidex-view-stack-footer class=${FOOTER_CLASS}>\n <div\n ${ref(footerLeftRef)}\n data-uidex-view-stack-footer-left\n class=${FOOTER_SIDE_CLASS}\n ></div>\n <div\n ${ref(footerRightRef)}\n data-uidex-view-stack-footer-right\n class=${FOOTER_SIDE_CLASS}\n ></div>\n </footer>\n <div ${ref(actionsPopupSlotRef)}></div>\n </div>\n </div>\n `,\n container\n )\n\n // Append the actions popup element into its slot\n actionsPopupSlotRef.value!.replaceWith(actionsPopup.element)\n\n const backdrop = backdropRef.value!\n const frame = frameRef.value!\n const header = headerRef.value! as HTMLElement\n const backBtn = backBtnRef.value!\n const searchIcon = searchIconRef.value!\n const searchInput = searchInputRef.value!\n const headerTitle = headerTitleRef.value!\n const hostContainer = hostContainerRef.value!\n const footerLeft = footerLeftRef.value!\n const footerRight = footerRightRef.value!\n const viewport = viewportRef.value!\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 actionsPopup.destroy()\n viewport.remove()\n backdrop.remove()\n },\n }\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 render(\n html`\n <svg\n viewBox=\"0 0 30 36\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n class=${LOGO_ICON_CLASS}\n >\n ${svg`\n <rect x=\"1\" y=\"5\" width=\"22\" height=\"28\" rx=\"3\"\n fill=\"currentColor\" opacity=\"0.18\"\n transform=\"rotate(-6, 12, 19)\" />\n <rect x=\"7\" y=\"1\" width=\"22\" height=\"28\" rx=\"3\"\n fill=\"currentColor\" />\n `}\n </svg>\n `,\n wrap\n )\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 render(html`<span>${label}</span>${kbdTpl(key)}`, wrap)\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 setDisabled(disabled: boolean): 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\n const textRef = createRef<HTMLSpanElement>()\n render(html`<span ${ref(textRef)}>${label}</span>${kbdTpl(key)}`, btn)\n btn.addEventListener(\"click\", onClick)\n\n return {\n element: btn,\n setLabel(next: string) {\n if (textRef.value) textRef.value.textContent = next\n btn.setAttribute(\"aria-label\", next)\n },\n setDisabled(disabled: boolean) {\n btn.disabled = disabled\n btn.setAttribute(\"aria-disabled\", String(disabled))\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 { html, render, createRef, ref } from \"../internal/lit\"\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 popupRef = createRef<HTMLDivElement>()\n const listRef = createRef<HTMLUListElement>()\n\n const fragment = document.createDocumentFragment()\n render(\n html`\n <div\n ${ref(popupRef)}\n class=${cn(MENU_POPUP_CLASS, \"hidden\")}\n data-uidex-primitive=\"menu\"\n data-slot=\"menu-popup\"\n >\n <ul\n ${ref(listRef)}\n class=${MENU_LIST_CLASS}\n role=\"menu\"\n aria-label=${options.ariaLabel ?? options.label ?? \"Menu\"}\n data-slot=\"menu-list\"\n ></ul>\n </div>\n `,\n fragment\n )\n\n const popup = popupRef.value!\n const list = listRef.value!\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 rowByValue = new Map()\n\n render(\n html`${items.map(\n (item) =>\n html`<li\n class=${MENU_ITEM_CLASS}\n data-slot=\"menu-item\"\n data-uidex-menu-item=${item.id}\n ></li>`\n )}`,\n list\n )\n\n // Fill row content imperatively (leading/trailing are Node refs) and\n // build the rowByValue map by querying rendered elements\n const rows = list.querySelectorAll<HTMLElement>(\"[data-uidex-menu-item]\")\n rows.forEach((row, i) => {\n const item = items[i]\n if (item.leading) row.append(item.leading)\n const label = document.createElement(\"span\")\n label.className = \"flex-1 truncate\"\n label.textContent = item.label\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 })\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 { html, render, createRef, ref } from \"../../internal/lit\"\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 { kbdTpl } 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 { fillRowWithHandle } 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: null,\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 let actionById = new Map<string, ShellAction>()\n const spreads = createPersistentSpreads()\n let lastKey = \"\"\n let rowByValue = new Map<string, HTMLElement>()\n let labelByValue = new Map<string, HTMLSpanElement>()\n const cleanups: Cleanup[] = []\n\n // Build trigger imperatively — it needs a ref for zag spreading\n const triggerRef = createRef<HTMLButtonElement>()\n const positionerRef = createRef<HTMLDivElement>()\n const popupRef = createRef<HTMLDivElement>()\n const listRef = createRef<HTMLUListElement>()\n\n // Render the entire structure into a document fragment\n const fragment = document.createDocumentFragment()\n render(\n html`\n <div ${ref(positionerRef)} data-slot=\"menu-positioner\">\n <button\n ${ref(triggerRef)}\n type=\"button\"\n data-uidex-actions-trigger\n class=${TRIGGER_CLASS}\n >\n <span>Actions</span>\n ${kbdTpl(formatShortcutLabel(opts?.shortcut ?? ACTIONS_SHORTCUT))}\n </button>\n <div\n ${ref(popupRef)}\n class=\"${MENU_POPUP_CLASS} w-56\"\n data-uidex-primitive=\"menu\"\n data-slot=\"menu-popup\"\n >\n <ul\n ${ref(listRef)}\n class=\"${MENU_LIST_CLASS} w-full\"\n role=\"menu\"\n aria-label=\"Actions\"\n data-slot=\"menu-list\"\n ></ul>\n </div>\n </div>\n `,\n fragment\n )\n\n const trigger = triggerRef.value!\n const positioner = positionerRef.value!\n const popup = popupRef.value!\n const list = listRef.value!\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 action = actionById.get(details.value)\n if (!action) return\n const result = action.perform()\n if (result instanceof Promise) {\n const labelEl = labelByValue.get(action.id)\n if (labelEl) {\n const original = labelEl.textContent\n labelEl.textContent = \"Done!\"\n setTimeout(() => {\n labelEl.textContent = original\n }, 800)\n }\n }\n },\n })\n\n function rebuild(key: string): void {\n spreads.cleanupAll()\n rowByValue = new Map()\n labelByValue = new Map()\n\n render(\n html`${items.map(\n (item) =>\n html`<li\n class=${cn(LIST_ITEM_CLASS, LIST_ITEM_STATE_CLASS)}\n data-slot=\"menu-item\"\n data-uidex-menu-item=${item.id}\n ></li>`\n )}`,\n list\n )\n\n const rows = list.querySelectorAll<HTMLElement>(\"[data-uidex-menu-item]\")\n rows.forEach((row, i) => {\n const item = items[i]\n const leading = item.leading ? createIconTile(item.leading) : null\n const { label: labelEl } = fillRowWithHandle(row, {\n leading,\n label: item.label,\n trailing: item.shortcut ?? item.trailing ?? null,\n })\n rowByValue.set(item.id, row)\n labelByValue.set(item.id, labelEl)\n })\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 actionById = new Map(actions.map((a) => [a.id, a]))\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 \"../../../shared/entities\"\nimport { detectDev } from \"../../internal/dev\"\nimport { render as litRender, nothing } from \"../../internal/lit\"\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 { Router } from \"./router\"\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: Router\n session: SessionStore\n registry: Registry\n cloud?: CloudAdapter | null\n highlight: HighlightController\n globalActions?: (ctx: ViewContext) => ShellAction[]\n shortcut?: PaletteShortcut\n dev?: boolean\n pushEscapeLayer?: ViewContext[\"pushEscapeLayer\"]\n onAfterSubmit?: () => void\n getRoute?: () => string\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 if (searchInput.hidden && !isFocusedWithin(entry.host)) {\n const fallback = entry.host.querySelector<HTMLElement>(\n \"[tabindex], button, input, select, textarea, a[href], [data-uidex-list-content]\"\n )\n fallback?.focus({ preventScroll: true })\n }\n }\n focus()\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(focus)\n }\n}\n\nfunction isFocusedWithin(host: HTMLElement): boolean {\n const rootNode = host.getRootNode()\n const active =\n rootNode instanceof ShadowRoot\n ? rootNode.activeElement\n : document.activeElement\n return active instanceof HTMLElement && host.contains(active)\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 } = options\n const cloud = options.cloud ?? null\n const dev = options.dev ?? detectDev()\n const onAfterSubmit = options.onAfterSubmit\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 { stack } = session.nav.getState()\n if (stack.length <= 1) {\n session.mode.transition.openPalette()\n } else {\n session.mode.transition.popOrTransition()\n }\n },\n onBackdropClick: () => session.mode.transition.dismiss(),\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.mode.transition.pushView({\n id: \"command-palette\",\n ref: null,\n })\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 litRender(nothing, container)\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 hint.setDisabled(intent?.disabled ?? false)\n hintChangeSub = src.subscribe(() => {\n const next = src.get()\n hint.setLabel(next?.label ?? fallbackLabel)\n hint.setDisabled(next?.disabled ?? false)\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 if (!container.isConnected) return\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 highlight,\n nextScrollSeq: () => ++scrollAreaSeq,\n pushEscapeLayer: options.pushEscapeLayer ?? (() => () => {}),\n onAfterSubmit,\n getRoute: options.getRoute,\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 type { EntityKind, EntityRef } from \"../../../shared/entities\"\nimport type { ViewStackEntry } from \"../../session/types\"\n\nexport const BUILT_IN_VIEW_IDS = {\n archiveReason: \"archive-reason\",\n commandPalette: \"command-palette\",\n elements: \"elements\",\n entityReports: \"entity-reports\",\n explorePage: \"explore-page\",\n features: \"features\",\n report: \"report\",\n flows: \"flows\",\n glossary: \"glossary\",\n jiraReport: \"jira-report\",\n pages: \"pages\",\n pageReports: \"page-reports\",\n reportDetail: \"report-detail\",\n pinSettings: \"pin-settings\",\n primitives: \"primitives\",\n regions: \"regions\",\n widgets: \"widgets\",\n} as const\n\nexport const LIST_VIEW_FOR_KIND: Record<EntityKind, string> = {\n element: BUILT_IN_VIEW_IDS.elements,\n feature: BUILT_IN_VIEW_IDS.features,\n page: BUILT_IN_VIEW_IDS.pages,\n widget: BUILT_IN_VIEW_IDS.widgets,\n region: BUILT_IN_VIEW_IDS.regions,\n primitive: BUILT_IN_VIEW_IDS.primitives,\n flow: BUILT_IN_VIEW_IDS.flows,\n route: BUILT_IN_VIEW_IDS.pages,\n}\n\nexport const DETAIL_VIEW_FOR_KIND: Record<EntityKind, string> = {\n element: \"component-detail\",\n feature: \"feature-detail\",\n page: \"page-detail\",\n widget: \"widget-detail\",\n region: \"region-detail\",\n primitive: \"primitive-detail\",\n flow: \"flow-detail\",\n route: \"page-detail\",\n}\n\nexport const COMMAND_PALETTE_ENTRY: ViewStackEntry = {\n id: BUILT_IN_VIEW_IDS.commandPalette,\n ref: null,\n}\n\nexport function parentList(ref: EntityRef | null): ViewStackEntry | null {\n if (!ref) return COMMAND_PALETTE_ENTRY\n return { id: LIST_VIEW_FOR_KIND[ref.kind], ref: null }\n}\n\nexport function parentDetail(ref: EntityRef | null): ViewStackEntry | null {\n if (!ref) return COMMAND_PALETTE_ENTRY\n return { id: DETAIL_VIEW_FOR_KIND[ref.kind], ref }\n}\n","import {\n Ban,\n BugOff,\n CircleCheck,\n Copy,\n LoaderCircle,\n createElement as createLucideElement,\n type IconNode,\n} from \"lucide\"\nimport type { ArchiveReason } from \"../../../cloud/types\"\nimport type { Cleanup } from \"../../internal/cleanup\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { createIconTile } from \"../primitives/icon-tile\"\nimport { renderListSurface } from \"../render/list\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\nlet pendingReportId: string | null = null\nlet afterArchive: (() => void) | null = null\n\nexport function setArchiveTarget(reportId: string, onDone: () => void): void {\n pendingReportId = reportId\n afterArchive = onDone\n}\n\nfunction leadingIcon(iconNode: IconNode): () => Node {\n return () => {\n const svg = createLucideElement(iconNode)\n svg.setAttribute(\"aria-hidden\", \"true\")\n return createIconTile(svg)\n }\n}\n\nfunction spinnerTile(): HTMLElement {\n const spinner = createLucideElement(LoaderCircle)\n spinner.setAttribute(\"class\", \"animate-spin\")\n return createIconTile(spinner)\n}\n\nconst REASONS: { value: ArchiveReason; label: string; icon: IconNode }[] = [\n { value: \"fixed\", label: \"Fixed\", icon: CircleCheck },\n { value: \"not_a_bug\", label: \"Not a bug\", icon: BugOff },\n { value: \"duplicate\", label: \"Duplicate\", icon: Copy },\n { value: \"wont_fix\", label: \"Won't fix\", icon: Ban },\n]\n\nexport const archiveReasonView: View = {\n id: BUILT_IN_VIEW_IDS.archiveReason,\n matches: () => false,\n parent: (ref) => (ref ? { id: BUILT_IN_VIEW_IDS.reportDetail, ref } : null),\n title: \"Archive reason\",\n searchable: false,\n focusTarget: (host) =>\n host.querySelector<HTMLElement>(\"[data-uidex-list-content]\"),\n surface: () => ({ kind: \"list\", id: \"unused\", items: [] }),\n render(ctx: ViewContext, root: HTMLElement): Cleanup {\n let busy = false\n\n const items: ListItem[] = REASONS.map((r) => ({\n value: r.value,\n label: r.label,\n leading: leadingIcon(r.icon),\n }))\n\n const surface: ListSurface = {\n kind: \"list\",\n id: \"uidex-archive-reason\",\n searchable: false,\n items,\n emptyLabel: \"No reasons available\",\n onSelect: async (item) => {\n if (busy || !pendingReportId || !ctx.registry.archiveReport) return\n busy = true\n\n const row = root.querySelector<HTMLElement>(\n `[data-uidex-item-value=\"${item.value}\"]`\n )\n const existingTile = row?.querySelector(\"[data-slot='icon-tile']\")\n if (row && existingTile) {\n existingTile.replaceWith(spinnerTile())\n row.style.opacity = \"0.6\"\n row.style.pointerEvents = \"none\"\n }\n\n try {\n await ctx.registry.archiveReport(\n pendingReportId,\n item.value as ArchiveReason\n )\n const done = afterArchive\n pendingReportId = null\n afterArchive = null\n done?.()\n } catch {\n busy = false\n if (row) {\n row.style.opacity = \"\"\n row.style.pointerEvents = \"\"\n const reason = REASONS.find((r) => r.value === item.value)\n if (reason) {\n const tile = row.querySelector(\"[data-slot='icon-tile']\")\n if (tile)\n tile.replaceWith(\n createIconTile(createLucideElement(reason.icon))\n )\n }\n }\n const error = document.createElement(\"p\")\n error.className = \"text-destructive px-4 py-2 text-xs\"\n error.textContent = \"Archive failed — try again\"\n root.querySelector(\"[data-uidex-list-content]\")?.prepend(error)\n setTimeout(() => error.remove(), 3000)\n }\n },\n }\n\n const mounted = renderListSurface(surface, ctx, root)\n return mounted.cleanup\n },\n}\n","import {\n Compass,\n Copy,\n ExternalLink,\n MessageCircleWarning,\n Star,\n StarOff,\n TicketPlus,\n createElement as createLucideElement,\n} from \"lucide\"\nimport {\n displayName,\n KIND_STYLE,\n type Entity,\n type EntityRef,\n type Page,\n} from \"../../../shared/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.views.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.views.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 async perform() {\n try {\n await navigator.clipboard.writeText(path)\n } catch {\n // silent\n }\n },\n })\n }\n }\n actions.push({\n id: \"submit-report\",\n label: \"Report\",\n icon: () => createLucideElement(MessageCircleWarning),\n perform: () => ctx.push({ id: BUILT_IN_VIEW_IDS.report, ref }),\n })\n if (\n (ctx.cloud as CloudAdapter | null)?.integrations.getCachedConfig()?.hasJira\n ) {\n actions.push({\n id: \"create-jira-issue\",\n label: \"Create Jira Ticket\",\n icon: () => createLucideElement(TicketPlus),\n perform: () => ctx.push({ id: BUILT_IN_VIEW_IDS.jiraReport, 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.views.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\nconst PALETTE_EXCLUDED_VIEWS: Set<string> = new Set([\n BUILT_IN_VIEW_IDS.commandPalette,\n BUILT_IN_VIEW_IDS.explorePage,\n BUILT_IN_VIEW_IDS.flows,\n BUILT_IN_VIEW_IDS.elements,\n BUILT_IN_VIEW_IDS.widgets,\n BUILT_IN_VIEW_IDS.regions,\n BUILT_IN_VIEW_IDS.pages,\n BUILT_IN_VIEW_IDS.features,\n BUILT_IN_VIEW_IDS.primitives,\n])\n\nfunction collectNavigation(ctx: ViewContext): PaletteItem[] {\n const out: PaletteItem[] = []\n for (const view of ctx.views.list()) {\n if (PALETTE_EXCLUDED_VIEWS.has(view.id)) continue\n if (!view.palette) continue\n const onSelect = () => ctx.push({ id: view.id, ref: null })\n const subtitle =\n typeof view.palette.subtitle === \"function\"\n ? view.palette.subtitle()\n : view.palette.subtitle\n out.push({\n value: `view:${view.id}`,\n label: view.palette.label,\n subtitle,\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.views.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\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.views.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 groupOrder = new Map<string, number>()\n for (const item of items) {\n const g = item.group ?? \"\"\n if (!groupOrder.has(g)) groupOrder.set(g, groupOrder.size)\n }\n items.sort(\n (a, b) =>\n (groupOrder.get(a.group ?? \"\") ?? 0) -\n (groupOrder.get(b.group ?? \"\") ?? 0)\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.views.navigate(palette.payload.ref)\n },\n }\n },\n }\n}\n","import type { Location } from \"../../../shared/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 \"../../../shared/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/**\n * Find the best-matching route for the current pathname. Returns both the\n * route path pattern and the page id, or `null` when no route matches.\n */\nfunction findCurrentRoute(\n registry: ViewContext[\"registry\"]\n): { path: string; page: string } | null {\n if (typeof location === \"undefined\") return null\n const pathname = location.pathname || \"/\"\n const routes = 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\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 return findCurrentRoute(ctx.registry)?.page ?? null\n}\n\n/** Resolve the route pattern for the current URL (e.g. `/:orgSlug/projects/:slug`). */\nexport function findCurrentRoutePath(\n registry: ViewContext[\"registry\"]\n): string | null {\n return findCurrentRoute(registry)?.path ?? 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 ReportContext {\n url: string\n route?: string\n pageTitle?: string\n viewport: { w: number; h: number }\n userAgent: string\n timestamp: string\n env?: string\n appVersion?: string\n git?: { branch?: string; commit?: string }\n}\n\nexport function captureReportContext(opts?: {\n getRoute?: () => string\n}): ReportContext {\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 return {\n url: loc?.href ?? \"\",\n route: opts?.getRoute?.() ?? loc?.pathname,\n userAgent: nav?.userAgent ?? \"\",\n pageTitle: doc?.title,\n timestamp: new Date().toISOString(),\n viewport: {\n w: win?.innerWidth ?? 0,\n h: win?.innerHeight ?? 0,\n },\n }\n}\n","import {\n type Entity,\n type EntityRef,\n type Flow,\n} from \"../../../shared/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 EntityByKind,\n type EntityKind,\n type EntityRef,\n type Location,\n type MetaEntityKind,\n} from \"../../../shared/entities\"\nimport { captureScreenshot } from \"../../internal/screenshot\"\nimport { resolveEntityElement } from \"../../surface/inspector\"\nimport { captureReportContext } from \"../../report/capture\"\nimport type {\n DetailAction,\n DetailSection,\n DetailSubtitle,\n DetailSurface,\n} from \"../core/surface\"\nimport { BUILT_IN_VIEW_IDS, parentList } 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\nconst DOM_BACKED_KINDS: ReadonlySet<EntityKind> = new Set([\n \"element\",\n \"region\",\n \"widget\",\n \"primitive\",\n])\n\nconst DETAIL_HINTS: 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 reportAction(ref: EntityRef): DetailAction {\n return {\n id: \"submit-report\",\n label: \"Report\",\n icon: \"message-circle-warning\",\n push: { id: BUILT_IN_VIEW_IDS.report, ref },\n intent: {\n kind: \"push\",\n viewId: BUILT_IN_VIEW_IDS.report,\n refKind: ref.kind,\n },\n }\n}\n\nexport function viewReportsAction(\n ref: EntityRef,\n count?: number\n): DetailAction {\n return {\n id: \"view-reports\",\n label: \"View Reports\",\n icon: \"inbox\",\n hint:\n count != null ? (count === 1 ? \"1 item\" : `${count} items`) : undefined,\n push: { id: BUILT_IN_VIEW_IDS.entityReports, ref },\n intent: {\n kind: \"push\",\n viewId: BUILT_IN_VIEW_IDS.entityReports,\n refKind: ref.kind,\n },\n }\n}\n\nexport function jiraAction(ref: EntityRef): DetailAction {\n return {\n id: \"create-jira-issue\",\n label: \"Create Jira Ticket\",\n icon: \"ticket-plus\",\n push: { id: BUILT_IN_VIEW_IDS.jiraReport, ref },\n intent: {\n kind: \"push\",\n viewId: BUILT_IN_VIEW_IDS.jiraReport,\n refKind: ref.kind,\n },\n }\n}\n\nexport function buildSnapshotMarkdown(ref: EntityRef, loc?: Location): string {\n const snapshot = captureReportContext()\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.route ?? \"\"}`,\n ...(snapshot.pageTitle ? [`- **Page Title:** ${snapshot.pageTitle}`] : []),\n `- **Viewport:** ${snapshot.viewport.w}×${snapshot.viewport.h}`,\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 parent: parentList,\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 const cloud = ctx.cloud as CloudAdapter | null\n\n // Report group\n actions.push({ ...reportAction(ctx.ref), group: \"Report\" })\n const reportCount = ctx.registry.getReports(kind, ctx.ref.id).length\n if (reportCount > 0) {\n actions.push({\n ...viewReportsAction(ctx.ref, reportCount),\n group: \"Report\",\n })\n }\n if (cloud?.integrations.getCachedConfig()?.hasJira) {\n actions.push({ ...jiraAction(ctx.ref), group: \"Report\" })\n }\n\n // Inspect group\n if (DOM_BACKED_KINDS.has(kind) && resolveEntityElement(ctx.ref)) {\n actions.push({ ...highlightElementAction(ctx.ref), group: \"Inspect\" })\n actions.push({ ...copyScreenshotAction(ctx.ref), group: \"Inspect\" })\n }\n actions.push({\n ...copyPathAction(ctx.ref, metaEntity.loc),\n group: \"Inspect\",\n })\n actions.push({\n ...copySnapshotAction(ctx.ref, metaEntity.loc),\n group: \"Inspect\",\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 if (!DOM_BACKED_KINDS.has(kind)) {\n sections.push({\n id: \"composes\",\n label: SECTION_LABELS.contains,\n entities: resolveRefs(ctx, meta?.composes),\n filterable: true,\n })\n }\n if (DOM_BACKED_KINDS.has(kind) && meta?.features?.length) {\n const featureEntities = meta.features\n .map((fId) => ctx.registry.get(\"feature\", fId))\n .filter((e): e is NonNullable<typeof e> => !!e)\n if (featureEntities.length > 0) {\n sections.push({\n id: \"composes\",\n label: \"Features\",\n entities: featureEntities,\n filterable: true,\n })\n }\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 \"../../../shared/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) => [touchedByFlowsSection(ctx, entity.id)],\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})\n\nexport const widgetDetailView = createEntityDetailView({\n id: \"widget-detail\",\n kind: \"widget\",\n fallbackTitle: \"Widget\",\n})\n\nexport const primitiveDetailView = createEntityDetailView({\n id: \"primitive-detail\",\n kind: \"primitive\",\n fallbackTitle: \"Primitive\",\n offerAcceptance: false,\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 \"../../../shared/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, COMMAND_PALETTE_ENTRY } 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 parent: () => COMMAND_PALETTE_ENTRY,\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.views.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 type { ReportRecord } from \"../../../shared/entities\"\nimport {\n TYPE_LABELS,\n SEVERITY_LABELS,\n authorLabel,\n relativeTime,\n} from \"../../report/constants\"\nimport type {\n DetailAction,\n DetailSection,\n DetailSurface,\n} from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { setArchiveTarget } from \"./archive-reason\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\nlet selectedId: string | null = null\n\nexport function setSelectedReportId(id: string): void {\n selectedId = id\n}\n\nfunction findReport(ctx: ViewContext): ReportRecord | null {\n if (!ctx.ref || !selectedId) return null\n const reports = ctx.registry.getReports(ctx.ref.kind, ctx.ref.id)\n return reports.find((r) => r.id === selectedId) ?? null\n}\n\nexport const reportDetailView: View = {\n id: BUILT_IN_VIEW_IDS.reportDetail,\n matches: () => false,\n parent: (ref) => ({ id: BUILT_IN_VIEW_IDS.entityReports, ref }),\n searchable: false,\n focusTarget: (host) =>\n host.querySelector<HTMLButtonElement>(\n \"[data-uidex-detail-actions] [data-uidex-detail-action]\"\n ),\n surface: (ctx): DetailSurface => {\n const report = findReport(ctx)\n if (!report) {\n return {\n kind: \"detail\",\n entityKind: ctx.ref?.kind ?? \"element\",\n notFound: ctx.ref ?? undefined,\n }\n }\n\n const typeLabel =\n (TYPE_LABELS as Record<string, string>)[report.type] ?? report.type\n const sevLabel =\n (SEVERITY_LABELS as Record<string, string>)[report.severity] ??\n report.severity\n\n const sections: DetailSection[] = []\n\n if (report.body) {\n sections.push({ id: \"description\", text: report.body })\n }\n\n if (report.screenshot) {\n sections.push({ id: \"screenshot\", url: report.screenshot })\n }\n\n const metaEntries: Array<{ label: string; value: string }> = []\n if (report.url) metaEntries.push({ label: \"URL\", value: report.url })\n if (report.route) metaEntries.push({ label: \"Route\", value: report.route })\n if (report.pageTitle)\n metaEntries.push({ label: \"Page\", value: report.pageTitle })\n if (metaEntries.length > 0) {\n sections.push({ id: \"metadata\", entries: metaEntries })\n }\n\n const actions: DetailAction[] = []\n if (ctx.registry.archiveReport) {\n actions.push({\n id: \"archive\",\n label: \"Archive\",\n icon: \"archive-x\",\n run: () => {\n setArchiveTarget(report.id, () => ctx.pop())\n ctx.push({ id: BUILT_IN_VIEW_IDS.archiveReason })\n },\n })\n }\n if (report.url) {\n actions.push({\n id: \"open-url\",\n label: \"Open URL\",\n icon: \"copy\",\n copy: report.url,\n })\n }\n\n return {\n kind: \"detail\",\n entityKind: ctx.ref?.kind ?? \"element\",\n title: report.title || \"(no title)\",\n subtitle: {\n rawId: [\n typeLabel,\n sevLabel,\n authorLabel(report),\n relativeTime(report.createdAt),\n ]\n .filter(Boolean)\n .join(\" · \"),\n },\n actions,\n sections,\n }\n },\n}\n","import { matchesQuery } from \"../builder/filter\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { ShellAction, View, ViewContext } from \"../core/types\"\nimport { renderKindIcon } from \"../primitives/kind-icon\"\nimport {\n TYPE_LABELS,\n SEVERITY_LABELS,\n authorLabel,\n relativeTime,\n} from \"../../report/constants\"\nimport { setArchiveTarget } from \"./archive-reason\"\nimport { BUILT_IN_VIEW_IDS, parentDetail } from \"./ids\"\nimport { setSelectedReportId } from \"./report-detail\"\nimport type { ReportRecord } from \"../../../shared/entities\"\n\nfunction reportToItem(report: ReportRecord, ctx: ViewContext): ListItem {\n const typeLabel =\n (TYPE_LABELS as Record<string, string>)[report.type] ?? report.type\n const sevLabel =\n (SEVERITY_LABELS as Record<string, string>)[report.severity] ??\n report.severity\n const raw = report.title || report.body\n const label = raw.length > 80 ? raw.slice(0, 80) + \"…\" : raw\n const kind = ctx.ref?.kind ?? \"element\"\n const actions: ShellAction[] = []\n\n if (ctx.registry.archiveReport) {\n actions.push({\n id: `archive-${report.id}`,\n label: \"Archive\",\n perform: () => {\n setArchiveTarget(report.id, () => ctx.pop())\n ctx.push({ id: BUILT_IN_VIEW_IDS.archiveReason })\n },\n })\n }\n\n return {\n value: `report:${report.id}`,\n label: label || \"(no description)\",\n subtitle: [\n authorLabel(report),\n typeLabel,\n sevLabel,\n relativeTime(report.createdAt),\n ]\n .filter(Boolean)\n .join(\" · \"),\n tag: `report:${report.id}`,\n leading: () => renderKindIcon(kind),\n actions,\n }\n}\n\nexport const entityReportsView: View = {\n id: BUILT_IN_VIEW_IDS.entityReports,\n matches: () => false,\n parent: parentDetail,\n title: \"Reports\",\n searchable: true,\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx: ViewContext): ListSurface => {\n const ref = ctx.ref\n const reports = ref ? ctx.registry.getReports(ref.kind, ref.id) : []\n const items = reports.map((r) => reportToItem(r, ctx))\n\n return {\n kind: \"list\",\n id: \"uidex-entity-reports\",\n items,\n emptyLabel: \"No reports for this element\",\n filter: (item, query) =>\n matchesQuery(`${item.label} ${item.subtitle ?? \"\"}`, query),\n onSelect: (item) => {\n setSelectedReportId(item.value.replace(/^report:/, \"\"))\n ctx.push({ id: BUILT_IN_VIEW_IDS.reportDetail, ref })\n },\n }\n },\n}\n","import { Compass, createElement as createLucideElement } from \"lucide\"\nimport {\n displayName,\n ENTITY_KINDS,\n type Entity,\n type EntityRef,\n} from \"../../../shared/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, COMMAND_PALETTE_ENTRY } 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 parent: () => COMMAND_PALETTE_ENTRY,\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.views.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 { ReportPayload } from \"@uidex/api-client\"\n\nfunction capitalize(s: string): string {\n return s.length === 0 ? s : s[0].toUpperCase() + s.slice(1)\n}\n\nexport function renderPayloadMarkdown(payload: ReportPayload): string {\n const heading = payload.title ?? `${capitalize(payload.type)} Report`\n const ctx = payload.context\n const lines: string[] = [\n `# ${heading}`,\n \"\",\n `- **Type:** ${payload.type}`,\n ...(payload.severity ? [`- **Severity:** ${payload.severity}`] : []),\n `- **Entity:** \\`${payload.entity}\\``,\n \"\",\n \"#### Description\",\n payload.body || \"_(no description)_\",\n \"\",\n \"#### Context\",\n `- **URL:** ${ctx?.url}`,\n ...(ctx?.pageTitle ? [`- **Page title:** ${ctx.pageTitle}`] : []),\n `- **Viewport:** ${ctx?.viewport.w}×${ctx?.viewport.h}`,\n `- **User agent:** ${ctx?.userAgent}`,\n `- **Timestamp:** ${ctx?.timestamp}`,\n ]\n return lines.join(\"\\n\") + \"\\n\"\n}\n","import { z } from \"zod\"\nimport type { FormField } from \"../../core/surface\"\n\nexport const reportSchema = z.object({\n type: z.enum([\"bug\", \"request\", \"suggestion\"]),\n severity: z.enum([\"low\", \"medium\", \"high\", \"critical\"]).optional(),\n title: z.string().optional(),\n body: z.string().trim().min(1, { message: \"Description is required.\" }),\n})\n\nexport const reportFields: FormField[] = [\n {\n kind: \"select\",\n name: \"type\",\n label: \"Type\",\n options: [\n { value: \"bug\", label: \"Bug\" },\n { value: \"request\", label: \"Request\" },\n { value: \"suggestion\", label: \"Suggestion\" },\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: \"body\",\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 \"../../../../shared/entities\"\nimport { parentDetail } from \"../ids\"\nimport { UIDEX_ATTR_TO_KIND } from \"../../../surface/constants\"\nimport type {\n FormField,\n FormSubmitResult,\n FormSurface,\n FormValue,\n} from \"../../core/surface\"\nimport type { ReportPayload } from \"@uidex/api-client\"\nimport type {\n CloudAdapter,\n ReportResult,\n View,\n ViewContext,\n} from \"../../core/types\"\nimport { renderPayloadMarkdown } from \"./markdown\"\nimport { reportFields, reportSchema } from \"./schema\"\nimport { captureReportContext } from \"../../../report/capture\"\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 CreateReportViewConfig {\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: ReportResult) => 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: ReportResult) => FormSubmitResult\n /**\n * Optional prefix prepended to `description` before submit/fallback-copy.\n */\n prependDescription?: () => string\n /**\n * Extra form fields prepended before the base report 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 report 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: ReportPayload,\n ctx: ViewContext,\n values: Record<string, FormValue>\n ) => ReportPayload\n /**\n * Override the default report 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: CreateReportViewConfig[\"augmentPayload\"],\n screenshot?: string\n): ReportPayload {\n const context = captureReportContext({ getRoute: ctx.getRoute })\n const title = String(values.title ?? \"\").trim()\n const body = String(values.body ?? \"\").trim()\n\n const reporter: ReportPayload[\"reporter\"] = ctx.user\n ? { id: ctx.user.id, name: ctx.user.name || undefined }\n : undefined\n\n const payload: ReportPayload = {\n type: (values.type as ReportPayload[\"type\"]) ?? \"bug\",\n severity: (values.severity as ReportPayload[\"severity\"]) ?? \"medium\",\n title: title || undefined,\n body: prefix ? `${prefix}${body}` : body,\n entity: componentId,\n screenshot,\n context,\n reporter,\n metadata: ctx.user ? { userId: ctx.user.id } : undefined,\n }\n return augmentPayload ? augmentPayload(payload, ctx, values) : payload\n}\n\nasync function copyFallback(payload: ReportPayload): Promise<FormSubmitResult> {\n const markdown = renderPayloadMarkdown(payload)\n const copied = await copyToClipboard(markdown)\n if (!copied) console.log(\"[uidex] report 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 createReportView(config: CreateReportViewConfig): 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 parent: parentDetail,\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='report'] select, [data-uidex-form='report'] input, [data-uidex-form='report'] textarea\"\n ),\n surface: (ctx): FormSurface => {\n const cloud = resolveCloud(ctx)\n const extra = extraFields ? extraFields(ctx) : []\n const fields: FormField[] = [...extra, ...(baseFields ?? reportFields)]\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: \"report\",\n fields,\n schema: schemaOverride ?? reportSchema,\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.reports.submit(\n payload\n )) as ReportResult\n ctx.onAfterSubmit?.()\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 { createReportView } from \"./view-builder\"\n\nexport const reportView = createReportView({\n id: BUILT_IN_VIEW_IDS.report,\n resolveCloud: (ctx) => ctx.cloud,\n componentId: (ctx) => (ctx.ref ? `${ctx.ref.kind}:${ctx.ref.id}` : \"unknown\"),\n submitLabels: { ready: \"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 ? `Report submitted (${ticketKey})` : \"Report 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 { IngestConfig } from \"@uidex/api-client\"\nimport type { CloudAdapter, ReportResult } from \"../../core/types\"\n\nimport { BUILT_IN_VIEW_IDS } from \"../ids\"\nimport { reportFields, reportSchema } from \"./schema\"\nimport { createReportView } from \"./view-builder\"\n\ntype JiraConfig = Extract<IngestConfig, { hasJira: true }>\ntype IngestConfigIssue = JiraConfig[\"parentIssues\"][number]\n\nconst jiraSchema = reportSchema.omit({ type: true })\n\nconst jiraBaseFields = reportFields.filter(\n (f) => f.name !== \"type\" && f.name !== \"severity\"\n)\n\nfunction buildParentIssueField(config: JiraConfig): 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 jiraReportView = createReportView({\n id: BUILT_IN_VIEW_IDS.jiraReport,\n resolveCloud: (ctx) => ctx.cloud,\n componentId: (ctx) => (ctx.ref ? `${ctx.ref.kind}:${ctx.ref.id}` : \"unknown\"),\n submitLabels: { ready: \"Create Jira Ticket\", 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: ReportResult): 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: \"Report saved — Jira issue creation failed\",\n }\n },\n successToast: (result: ReportResult) => {\n const link = result.externalLink\n if (link?.ok && link.key) return `Created ${link.key}`\n return \"Report 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 displayName,\n isMetaEntity,\n type Entity,\n type Flow,\n type FlowStep,\n type MetaEntityKind,\n type Registry,\n} from \"../../../shared/entities\"\nimport { parentList } from \"./ids\"\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 reportAction,\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 parent: parentList,\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 reportAction(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 {\n displayName,\n type EntityRef,\n type Flow,\n} from \"../../../shared/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, COMMAND_PALETTE_ENTRY } 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 parent: () => COMMAND_PALETTE_ENTRY,\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.views.navigate((item as FlowItem).ref),\n }\n },\n}\n","import { BookOpen, createElement as createLucideElement } from \"lucide\"\nimport {\n KIND_STYLE,\n type Entity,\n type EntityKind,\n} from \"../../../shared/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, COMMAND_PALETTE_ENTRY } 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 parent: () => COMMAND_PALETTE_ENTRY,\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","import { CircleOff, Inbox, createElement as createLucideElement } from \"lucide\"\nimport {\n displayName,\n type Entity,\n type EntityRef,\n ENTITY_KINDS,\n} from \"../../../shared/entities\"\nimport { parseComponentRef } from \"../../surface/pin-layer\"\nimport { matchesQuery } from \"../builder/filter\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { renderKindIcon } from \"../primitives/kind-icon\"\nimport {\n TYPE_LABELS,\n SEVERITY_LABELS,\n authorLabel,\n relativeTime,\n} from \"../../report/constants\"\nimport { BUILT_IN_VIEW_IDS, COMMAND_PALETTE_ENTRY } from \"./ids\"\nimport { setSelectedReportId } from \"./report-detail\"\n\ninterface PageReportItem extends ListItem {\n ref: EntityRef\n}\n\nfunction collectPageReports(ctx: ViewContext): PageReportItem[] {\n const items: PageReportItem[] = []\n const seenReportIds = new Set<string>()\n\n for (const kind of ENTITY_KINDS) {\n for (const entity of ctx.registry.list(kind)) {\n const id = \"id\" in entity ? (entity as Entity & { id: string }).id : \"\"\n if (!id) continue\n const reports = ctx.registry.getReports(kind, id)\n seenReportIds.add(`${kind}:${id}`)\n const ref: EntityRef = { kind, id }\n for (const report of reports) {\n const typeLabel =\n (TYPE_LABELS as Record<string, string>)[report.type] ?? report.type\n const sevLabel =\n (SEVERITY_LABELS as Record<string, string>)[report.severity] ??\n report.severity\n const raw = report.title || report.body\n const label = raw.length > 80 ? raw.slice(0, 80) + \"…\" : raw\n const entityName = displayName(entity as Entity)\n items.push({\n value: `report:${report.id}`,\n label: label || \"(no description)\",\n subtitle: [\n entityName,\n authorLabel(report),\n typeLabel,\n sevLabel,\n relativeTime(report.createdAt),\n ]\n .filter(Boolean)\n .join(\" · \"),\n tag: `report:${report.id}`,\n group: `${kind}: ${entityName}`,\n leading: () => renderKindIcon(kind),\n ref,\n })\n }\n }\n }\n\n for (const key of ctx.registry.listReportKeys()) {\n if (seenReportIds.has(key)) continue\n const parsed = parseComponentRef(key)\n if (ctx.registry.get(parsed.kind, parsed.id)) continue\n const reports = ctx.registry.getReports(parsed.kind, parsed.id)\n const ref: EntityRef = parsed\n for (const report of reports) {\n const typeLabel =\n (TYPE_LABELS as Record<string, string>)[report.type] ?? report.type\n const sevLabel =\n (SEVERITY_LABELS as Record<string, string>)[report.severity] ??\n report.severity\n const raw = report.title || report.body\n const label = raw.length > 80 ? raw.slice(0, 80) + \"…\" : raw\n items.push({\n value: `report:${report.id}`,\n label: label || \"(no description)\",\n subtitle: [\n `${parsed.kind}:${parsed.id}`,\n authorLabel(report),\n typeLabel,\n sevLabel,\n relativeTime(report.createdAt),\n ]\n .filter(Boolean)\n .join(\" · \"),\n tag: `report:${report.id}`,\n group: \"Orphaned\",\n leading: () => createLucideElement(CircleOff),\n ref,\n })\n }\n }\n\n return items\n}\n\nexport const pageReportsView: View = {\n id: BUILT_IN_VIEW_IDS.pageReports,\n matches: () => false,\n parent: () => COMMAND_PALETTE_ENTRY,\n palette: {\n label: \"Page Reports\",\n group: \"Current Page\",\n icon: () => createLucideElement(Inbox),\n },\n title: \"Page Reports\",\n searchable: true,\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx: ViewContext): ListSurface => {\n const items = collectPageReports(ctx)\n\n return {\n kind: \"list\",\n id: \"uidex-page-reports\",\n items,\n emptyLabel: \"No reports on this page\",\n filter: (item, query) =>\n matchesQuery(\n `${item.label} ${item.subtitle ?? \"\"} ${item.group ?? \"\"}`,\n query\n ),\n onSelect: (item) => {\n setSelectedReportId(item.value.replace(/^report:/, \"\"))\n ctx.push({\n id: BUILT_IN_VIEW_IDS.reportDetail,\n ref: (item as PageReportItem).ref,\n })\n },\n }\n },\n}\n","import {\n Check,\n Globe,\n MapPin,\n Settings,\n createElement as createLucideElement,\n type IconNode,\n} from \"lucide\"\nimport type { PinMatchMode } from \"../../surface/pin-layer\"\nimport { html } from \"../../internal/lit\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { createIconTile } from \"../primitives/icon-tile\"\nimport { PALETTE_GROUPS } from \"../labels\"\nimport { showCopiedToast } from \"../../ui/toast\"\nimport { BUILT_IN_VIEW_IDS, COMMAND_PALETTE_ENTRY } from \"./ids\"\n\nconst MATCH_MODE_KEY = \"uidex:pin-match-mode\"\n\nfunction readMode(): PinMatchMode {\n try {\n const v = localStorage.getItem(MATCH_MODE_KEY)\n if (v === \"route\" || v === \"pathname\" || v === \"component\") return v\n } catch {\n /* ignore */\n }\n return \"route\"\n}\n\nfunction writeMode(mode: PinMatchMode): void {\n try {\n localStorage.setItem(MATCH_MODE_KEY, mode)\n } catch {\n /* ignore */\n }\n}\n\nconst MODES: {\n value: PinMatchMode\n label: string\n description: string\n icon: IconNode\n}[] = [\n {\n value: \"route\",\n label: \"By route\",\n description: \"Pins from any URL matching this route pattern\",\n icon: Globe,\n },\n {\n value: \"pathname\",\n label: \"By pathname\",\n description: \"Pins from this exact URL path\",\n icon: MapPin,\n },\n {\n value: \"component\",\n label: \"By component\",\n description: \"All pins for components on this page\",\n icon: Settings,\n },\n]\n\nfunction leadingIcon(iconNode: IconNode, active: boolean): () => Node {\n return () => {\n const svg = createLucideElement(active ? Check : iconNode)\n svg.setAttribute(\"aria-hidden\", \"true\")\n return createIconTile(svg)\n }\n}\n\nexport const pinSettingsView: View = {\n id: BUILT_IN_VIEW_IDS.pinSettings,\n matches: () => false,\n parent: () => COMMAND_PALETTE_ENTRY,\n palette: {\n label: \"Pin settings\",\n group: PALETTE_GROUPS.commands,\n icon: () => createLucideElement(Settings),\n },\n title: \"Pin settings\",\n searchable: false,\n focusTarget: (host) =>\n host.querySelector<HTMLElement>(\"[data-uidex-list-content]\"),\n surface: (ctx: ViewContext): ListSurface => {\n const current = readMode()\n const items: ListItem[] = MODES.map((m) => {\n const active = m.value === current\n return {\n value: m.value,\n label: m.label,\n subtitle: m.description,\n leading: leadingIcon(m.icon, active),\n trailing: active\n ? html`<span class=\"text-muted-foreground ms-auto text-xs font-medium\"\n >Active</span\n >`\n : undefined,\n }\n })\n\n return {\n kind: \"list\",\n id: \"uidex-pin-settings\",\n searchable: false,\n items,\n emptyLabel: \"No options available\",\n onSelect: (item) => {\n const mode = item.value as PinMatchMode\n writeMode(mode)\n ctx.onAfterSubmit?.()\n const modeLabel = MODES.find((m) => m.value === mode)!.label\n showCopiedToast(`Pin mode set to \"${modeLabel}\"`)\n ctx.pop()\n },\n }\n },\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","export { BUILT_IN_VIEW_IDS } from \"./ids\"\n\nimport type { PaletteShortcut } from \"../../surface/keys\"\nimport { archiveReasonView } from \"./archive-reason\"\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 { entityReportsView } from \"./entity-reports\"\nimport { explorePageView } from \"./explore-page\"\nimport { reportView } from \"./report/host-report\"\nimport { jiraReportView } from \"./report/jira-report\"\nimport { flowDetailView } from \"./flow-detail\"\nimport { flowsView } from \"./flows\"\nimport { glossaryView } from \"./glossary\"\nimport { pageReportsView } from \"./page-reports\"\nimport { pinSettingsView } from \"./pin-settings\"\nimport { reportDetailView } from \"./report-detail\"\n\nexport { archiveReasonView } from \"./archive-reason\"\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 { entityReportsView } from \"./entity-reports\"\nexport { explorePageView } from \"./explore-page\"\nexport { reportView } from \"./report/host-report\"\nexport { jiraReportView } from \"./report/jira-report\"\nexport { flowDetailView } from \"./flow-detail\"\nexport { flowsView } from \"./flows\"\nexport { glossaryView } from \"./glossary\"\nexport { pageReportsView } from \"./page-reports\"\nexport { pinSettingsView } from \"./pin-settings\"\nexport { reportDetailView } from \"./report-detail\"\n\nimport type { View } from \"../core/types\"\n\nexport function buildDefaultViews(shortcut?: PaletteShortcut): View[] {\n return [\n archiveReasonView,\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 entityReportsView,\n reportView,\n jiraReportView,\n glossaryView,\n pageReportsView,\n pinSettingsView,\n reportDetailView,\n ]\n}\n","import { createRegistry, KIND_STYLE, type Registry } from \"../shared/entities\"\nimport {\n createIngest,\n resolveIngestOptions,\n type Ingest,\n type IngestOptions,\n} from \"./ingest\"\nimport type { RealtimeChannel } from \"../cloud/types\"\nimport { createCleanupStack } from \"./internal/cleanup\"\nimport { isDarkMode } from \"./internal/dark-mode\"\nimport { bindRouteChange } from \"./internal/route-change\"\nimport {\n createSession,\n type HighlightContext,\n type ResolvedTheme,\n type SessionStore,\n type ThemePreference,\n} from \"./session\"\nimport type { UserIdentity } from \"../shared/user\"\nimport {\n bindShadowKeys,\n createPinLayer,\n createSurfaceShell,\n parseComponentRef,\n resolveEntityElement,\n SURFACE_IGNORE_SELECTOR,\n UIDEX_ATTR_TO_KIND,\n type Corner,\n type Inspector,\n type Overlay,\n type PaletteShortcut,\n type PinLayer,\n type PinMatchMode,\n} from \"./surface\"\nimport {\n buildDefaultViews,\n createRouter,\n createViewStack,\n BUILT_IN_VIEW_IDS,\n type CloudAdapter,\n type HighlightController,\n type Router,\n type View,\n} from \"./views\"\nimport { setSelectedReportId } from \"./views/built-in/report-detail\"\nimport { findCurrentRoutePath } from \"./views/builder/page-context\"\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 * Identity for the local user. Required to opt into realtime collaborative\n * features (peer cursors, presence). When omitted, realtime stays\n * disconnected and report attribution falls back to whatever the user\n * types in the report form.\n */\n user?: UserIdentity\n /** Git context for pin filtering. Typically mirrors `cloud({ git })`. */\n git?: { branch?: string; commit?: string }\n /**\n * Return the current route pattern (e.g. `/users/:id`). Used for\n * route-based pin matching and report attribution. When omitted, the SDK\n * falls back to `location.pathname`.\n */\n getRoute?: () => string\n}\n\nexport interface Uidex {\n mount(target?: Element): void\n unmount(): void\n readonly registry: Registry\n readonly session: SessionStore\n readonly views: Router\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 const inspectorRef: { current: Inspector | null } = { current: null }\n const overlayRef: { current: Overlay | null } = { current: null }\n const pinLayerRef: { current: PinLayer | 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 user: options.user,\n onMountInspector: () => inspectorRef.current?.mount(),\n onDestroyInspector: () => inspectorRef.current?.destroy(),\n onShowOverlay: applyOverlay,\n onHideOverlay: () => overlayRef.current?.hide(),\n onUpdateOverlay: applyOverlay,\n })\n const views = createRouter({ session })\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.add(view)\n }\n if (options.views) {\n for (const view of options.views) views.add(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 getPathname = (): string =>\n typeof location !== \"undefined\" ? location.pathname : \"/\"\n\n const getCurrentRoute = (): string =>\n options.getRoute?.() ?? findCurrentRoutePath(registry) ?? getPathname()\n\n const getVisibleEntities = (): string[] => {\n if (typeof document === \"undefined\") return []\n const selector = UIDEX_ATTR_TO_KIND.map(([a]) => `[${a}]`).join(\",\")\n const nodes = document.querySelectorAll<HTMLElement>(selector)\n const ids: string[] = []\n const seen = new Set<string>()\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 key = `${kind}:${id}`\n if (!seen.has(key)) {\n seen.add(key)\n ids.push(key)\n }\n break\n }\n }\n return ids\n }\n\n const getMatchMode = (): PinMatchMode =>\n (typeof localStorage !== \"undefined\"\n ? (localStorage.getItem(\"uidex:pin-match-mode\") as PinMatchMode | null)\n : null) ?? \"route\"\n\n let channel: RealtimeChannel | null = null\n if (cloud && options.user) {\n channel = cloud.realtime.connect({\n user: options.user,\n route: getCurrentRoute(),\n })\n mountCleanup.add(() => channel?.disconnect())\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 channel,\n inspector: {\n onSelect: (match) => {\n const route = views.resolve(match.ref)\n if (!route) return\n session.select(match.ref)\n const entry = { id: route.view.id, ref: match.ref }\n session.mode.transition.enterViewing(views.buildStack(entry))\n },\n },\n })\n shadowRoot = shell.host.shadowRoot\n inspectorRef.current = shell.inspector\n overlayRef.current = shell.overlay\n shell.overlay.onDismiss = () => session.highlight.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.highlight.unhover()\n return\n }\n session.highlight.hover(ref, el, opts?.color ?? null)\n },\n hide() {\n session.highlight.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 let keyBindings: ReturnType<typeof bindShadowKeys> | null = null\n\n const viewStack = createViewStack({\n container: viewContainer,\n views,\n session,\n registry,\n cloud,\n highlight,\n shortcut: options.shortcut,\n pushEscapeLayer: (handler) => {\n if (!keyBindings) return () => {}\n return keyBindings.pushEscapeLayer(handler)\n },\n onAfterSubmit: () => pinLayerRef.current?.refresh(),\n getRoute: getCurrentRoute,\n })\n mountCleanup.add(viewStack)\n\n if (shadowRoot) {\n keyBindings = bindShadowKeys({\n shadowRoot,\n session,\n getActionsPopup: () => viewStack.getActionsPopup(),\n getPinLayer: () => pinLayerRef.current,\n shortcut: options.shortcut,\n })\n mountCleanup.add(keyBindings)\n }\n\n if (shadowRoot) {\n const syncReportsToRegistry = (): void => {\n const layer = pinLayerRef.current\n if (!layer) return\n const byEntity = new Map<\n string,\n ReturnType<PinLayer[\"getAllPins\"]>[number][]\n >()\n for (const pin of layer.getAllPins()) {\n const cid = pin.entity ?? \"\"\n if (!cid) continue\n const list = byEntity.get(cid)\n if (list) list.push(pin)\n else byEntity.set(cid, [pin])\n }\n for (const [cid, pins] of byEntity) {\n const ref = parseComponentRef(cid)\n registry.setReports(ref.kind, ref.id, pins)\n }\n }\n\n if (cloud) {\n registry.archiveReport = async (reportId, reason) => {\n pinLayerRef.current?.removePin(reportId)\n await cloud.pins.archive(\n reportId,\n reason as Parameters<typeof cloud.pins.archive>[1]\n )\n syncReportsToRegistry()\n }\n }\n\n const pinLayer: PinLayer = createPinLayer({\n container: shadowRoot,\n currentBranch: options.git?.branch ?? null,\n onOpenPinDetail: (componentId, reportId) => {\n const ref = parseComponentRef(componentId)\n setSelectedReportId(reportId)\n const entry = { id: BUILT_IN_VIEW_IDS.reportDetail, ref }\n session.mode.transition.enterViewing(views.buildStack(entry))\n },\n onHoverPin: (anchor, componentId) => {\n const overlay = overlayRef.current\n if (!overlay) return\n if (!anchor || !componentId) {\n overlay.hide()\n return\n }\n overlay.show(anchor, {\n color: isDarkMode() ? \"#e4e4e7\" : \"#27272a\",\n })\n },\n onPinsChanged: syncReportsToRegistry,\n })\n shell.menuBar.setPinLayer(pinLayer)\n pinLayerRef.current = pinLayer\n\n mountCleanup.add(() => {\n pinLayer.destroy()\n pinLayerRef.current = null\n registry.archiveReport = undefined\n })\n\n if (cloud) {\n const detach = pinLayer.attachCloud({\n cloud,\n channel,\n getRoute: getCurrentRoute,\n getPathname,\n getVisibleEntities,\n getMatchMode,\n onError: (err) => console.warn(\"[uidex] pin fetch failed\", err),\n })\n mountCleanup.add(detach)\n\n if (channel && typeof window !== \"undefined\") {\n const onRouteChange = (): void => {\n const route = getCurrentRoute()\n channel?.joinRoute(route)\n void pinLayer.refresh()\n }\n const detachRoute = bindRouteChange(onRouteChange)\n mountCleanup.add(detachRoute)\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":";AAAO,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AA4FO,SAAS,WAAW,MAA0C;AACnE,SAAO,SAAS,WAAW,SAAS;AACtC;AAEO,SAAS,aACd,QACqD;AACrD,SAAO,WAAW,OAAO,IAAI;AAC/B;AAEO,SAAS,UAAU,QAAwB;AAChD,SAAO,OAAO,SAAS,UAAU,OAAO,OAAO,OAAO;AACxD;AAEO,SAAS,QAAQ,GAAqB,GAA8B;AACzE,MAAI,MAAM,EAAG,QAAO;AACpB,MAAI,MAAM,QAAQ,MAAM,KAAM,QAAO;AACrC,SAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;AACzC;AAEO,IAAM,yBAAN,cAAqC,MAAM;AAAA,EACvC;AAAA,EACT,YAAY,MAAc;AACxB,UAAM,wBAAwB,IAAI,EAAE;AACpC,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;AAEA,IAAM,WAAgC,IAAI,IAAY,YAAY;AAE3D,SAAS,iBAAiB,MAA0C;AACzE,MAAI,CAAC,SAAS,IAAI,IAAI,EAAG,OAAM,IAAI,uBAAuB,IAAI;AAChE;;;AClFA,SAAS,aAAwB;AAC/B,SAAO;AAAA,IACL,OAAO,oBAAI,IAAI;AAAA,IACf,MAAM,oBAAI,IAAI;AAAA,IACd,SAAS,oBAAI,IAAI;AAAA,IACjB,QAAQ,oBAAI,IAAI;AAAA,IAChB,QAAQ,oBAAI,IAAI;AAAA,IAChB,SAAS,oBAAI,IAAI;AAAA,IACjB,WAAW,oBAAI,IAAI;AAAA,IACnB,MAAM,oBAAI,IAAI;AAAA,EAChB;AACF;AAEA,SAAS,eAAe,OAAuB,UAA4B;AACzE,QAAM,MAAgB,CAAC;AACvB,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,QAAQ,SAAS,QAAQ,EAAG,KAAI,KAAK,KAAK,EAAE;AAAA,EACvD;AACA,SAAO;AACT;AAEA,SAAS,aAA+B,QAAW,OAA0B;AAC3E,MAAI,CAAC,WAAW,OAAO,IAAI,EAAG,QAAO;AACrC,QAAM,WAAW;AACjB,MAAI,SAAS,SAAS,OAAW,QAAO;AACxC,QAAM,gBAAgB,OAAO,OAAO,eAAe,OAAO,SAAS,EAAE,CAAC;AACtE,QAAM,aAAuB,EAAE,GAAG,SAAS,MAAM,OAAO,cAAc;AACtE,SAAO,EAAE,GAAG,QAAQ,MAAM,OAAO,OAAO,UAAU,EAAE;AACtD;AAEO,SAAS,iBAA2B;AACzC,QAAM,QAAQ,WAAW;AACzB,MAAI,aAA4B;AAEhC,QAAM,WAAW,MAAc;AAC7B,QAAI,eAAe,KAAM,cAAa,MAAM,KAAK,MAAM,KAAK,OAAO,CAAC;AACpE,WAAO;AAAA,EACT;AAEA,QAAM,MAAM,CAAC,WAAyB;AACpC,qBAAiB,OAAO,IAAI;AAC5B,UAAM,MAAM,UAAU,MAAM;AAC3B,IAAC,MAAM,OAAO,IAAI,EAA0B,IAAI,KAAK,MAAM;AAC5D,iBAAa;AAAA,EACf;AAEA,QAAM,MAAM,CACV,MACA,OACgC;AAChC,qBAAiB,IAAI;AACrB,UAAM,MAAM,MAAM,IAAI,EAAE,IAAI,EAAE;AAC9B,QAAI,QAAQ,OAAW,QAAO;AAC9B,WAAO,aAAa,KAAK,SAAS,CAAC;AAAA,EACrC;AAEA,QAAM,OAAO,CACX,SACmC;AACnC,qBAAiB,IAAI;AACrB,UAAM,QAAQ,SAAS;AACvB,WAAO,MAAM;AAAA,MAAK,MAAM,IAAI,EAAE,OAAO;AAAA,MAAG,CAAC,MACvC,aAAa,GAAsB,KAAK;AAAA,IAC1C;AAAA,EACF;AAEA,QAAM,cAAc,aAAgC;AAClD,eAAW,QAAQ,OAAO,KAAK,KAAK,GAAmB;AACrD,iBAAW,UAAU,MAAM,IAAI,EAAE,OAAO,GAAG;AACzC,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,QAAQ,CAAC,cAAqD;AAClE,UAAM,QAAQ,SAAS;AACvB,UAAM,SAAmB,CAAC;AAC1B,eAAW,UAAU,YAAY,GAAG;AAClC,UAAI,UAAU,MAAM,EAAG,QAAO,KAAK,aAAa,QAAQ,KAAK,CAAC;AAAA,IAChE;AACA,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,CAAC,UACf;AAAA,IACE,CAAC,WACC,YAAY,UACZ,MAAM,QAAQ,OAAO,MAAM,KAC3B,OAAO,OAAO,SAAS,KAAK;AAAA,EAChC;AAEF,QAAM,YAAY,CAAC,WAA6B;AAC9C,UAAM,OAAO,MAAM,KAAK,IAAI,MAAM;AAClC,QAAI,SAAS,OAAW,QAAO,CAAC;AAChC,UAAM,MAAM,IAAI,IAAI,KAAK,OAAO;AAChC,WAAO,MAAM,CAAC,WAAW;AACvB,UAAI,CAAC,aAAa,MAAM,EAAG,QAAO;AAClC,aAAO,IAAI,IAAI,OAAO,EAAE;AAAA,IAC1B,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,oBAAI,IAAqC;AACzD,QAAM,aAAa,oBAAI,IAAgB;AAEvC,QAAM,aAAa,CACjB,MACA,IACA,YACS;AACT,YAAQ,IAAI,GAAG,IAAI,IAAI,EAAE,IAAI,OAAO;AACpC,eAAW,MAAM,WAAY,IAAG;AAAA,EAClC;AAEA,QAAM,aAAa,CAAC,MAAkB,OACpC,QAAQ,IAAI,GAAG,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC;AAEnC,QAAM,iBAAiB,MAAyB,MAAM,KAAK,QAAQ,KAAK,CAAC;AAEzE,QAAM,kBAAkB,CAAC,OAAiC;AACxD,eAAW,IAAI,EAAE;AACjB,WAAO,MAAM,WAAW,OAAO,EAAE;AAAA,EACnC;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;;;AC3LA;AAAA,EACE;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,OACK;AAWA,IAAM,aAAiD;AAAA,EAC5D,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AACF;;;AC5EO,SAAS,SAAS,IAAoB;AAC3C,QAAM,QAAQ,GAAG,MAAM,OAAO,EAAE,OAAO,OAAO;AAC9C,QAAM,QAAQ,MAAM,QAAQ,CAAC,SAAS,KAAK,MAAM,WAAW,EAAE,OAAO,OAAO,CAAC;AAC7E,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,MACJ,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAI,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,EAC/D,KAAK,GAAG;AACb;AAEO,SAAS,YAAY,QAAgB,MAA+B;AACzE,MAAI,OAAO,SAAS,QAAS,QAAO,SAAS,OAAO,IAAI;AACxD,MAAI,OAAO,SAAS,QAAQ;AAC1B,UAAM,WAAW,OAAO,MAAM;AAC9B,QAAI,SAAU,QAAO;AAAA,EACvB;AACA,QAAM,OAAO,MAAM,aAAa,YAAY,GAAG,KAAK;AACpD,MAAI,KAAM,QAAO;AACjB,SAAO,SAAS,OAAO,EAAE;AAC3B;;;ACEA,IAAM,gBAAgB;AACtB,IAAM,SAAkC,CAAC,QAAQ,OAAO;AAExD,SAAS,cAAc,MAAkC;AACvD,SAAO,KACJ,IAAI,CAAC,QAAQ;AACZ,QAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,QAAI,eAAe,MAAO,QAAO,IAAI,SAAS,IAAI;AAClD,QAAI;AACF,aAAO,KAAK,UAAU,GAAG;AAAA,IAC3B,QAAQ;AACN,aAAO,OAAO,GAAG;AAAA,IACnB;AAAA,EACF,CAAC,EACA,KAAK,GAAG;AACb;AAEO,SAAS,qBACd,UAAiC,CAAC,GAClB;AAChB,QAAM,QAAQ,QAAQ,SAAS;AAC/B,QAAM,SAAS,QAAQ,UAAU;AACjC,QAAM,MAAM,QAAQ,QAAQ,MAAM,oBAAI,KAAK;AAC3C,QAAM,SAAyB,CAAC;AAChC,QAAM,YACJ,CAAC;AACH,MAAI,SAAS;AAEb,WAAS,OAAO,OAAqB,MAAgC;AACnE,UAAM,QAAsB;AAAA,MAC1B;AAAA,MACA,SAAS,cAAc,IAAI;AAAA,MAC3B,WAAW,IAAI,EAAE,YAAY;AAAA,IAC/B;AACA,WAAO,KAAK,KAAK;AACjB,QAAI,OAAO,SAAS,MAAO,QAAO,OAAO,GAAG,OAAO,SAAS,KAAK;AAAA,EACnE;AAEA,WAAS,QAAc;AACrB,QAAI,OAAQ;AACZ,eAAW,SAAS,QAAQ;AAC1B,YAAM,WAAW,OAAO,KAAK;AAC7B,gBAAU,KAAK,IAAI;AACnB,YAAM,UAAU,IAAI,SAA0B;AAC5C,eAAO,OAAO,IAAI;AAClB,iBAAS,KAAK,QAAQ,GAAG,IAAI;AAAA,MAC/B;AACC,MAAC,OAA8C,KAAK,IAAI;AAAA,IAC3D;AACA,aAAS;AAAA,EACX;AAEA,WAAS,OAAa;AACpB,QAAI,CAAC,OAAQ;AACb,eAAW,SAAS,QAAQ;AAC1B,YAAM,WAAW,UAAU,KAAK;AAChC,UAAI,UAAU;AACZ;AAAC,QAAC,OAA8C,KAAK,IAAI;AAAA,MAC3D;AACA,aAAO,UAAU,KAAK;AAAA,IACxB;AACA,aAAS;AAAA,EACX;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,IAAI,WAAW;AACb,aAAO;AAAA,IACT;AAAA,IACA,UAAU;AACR,aAAO,OAAO,MAAM;AAAA,IACtB;AAAA,IACA,QAAQ;AACN,aAAO,SAAS;AAAA,IAClB;AAAA,EACF;AACF;;;ACjGO,IAAM,cACX,OAAO,eAAe,eAAe,OAAO,WAAW,UAAU,aAC7D,WAAW,MAAM,KAAK,UAAU,IAChC;AAEC,SAAS,iBAA2C;AACzD,SAAO;AACT;;;ACiBA,IAAMA,iBAAgB;AAEtB,SAAS,cAAc,OAA0B,MAA4B;AAC3E,MAAI,MAAM,OAAQ,QAAO,KAAK,OAAO,YAAY;AACjD,MACE,OAAO,UAAU,YACjB,EAAE,iBAAiB,QACnB,YAAY,OACZ;AACA,WAAQ,MAAkB,OAAO,YAAY;AAAA,EAC/C;AACA,SAAO;AACT;AAEA,SAAS,WAAW,OAAkC;AACpD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,iBAAiB,IAAK,QAAO,MAAM,SAAS;AAChD,SAAQ,MAAkB;AAC5B;AAEO,SAAS,qBACd,UAAiC,CAAC,GAClB;AAChB,QAAM,QAAQ,QAAQ,SAASA;AAC/B,QAAM,SAAU,QAAQ,UAAU;AAGlC,QAAM,MAAM,QAAQ,QAAQ,MAAM,oBAAI,KAAK;AAC3C,QAAM,SAAyB,CAAC;AAChC,MAAI;AACJ,MAAI,SAAS;AAEb,WAAS,KAAK,OAA2B;AACvC,WAAO,KAAK,KAAK;AACjB,QAAI,OAAO,SAAS,MAAO,QAAO,OAAO,GAAG,OAAO,SAAS,KAAK;AAAA,EACnE;AAEA,WAAS,QAAc;AACrB,QAAI,OAAQ;AACZ,UAAM,WAAW,OAAO,SAAS;AACjC,QAAI,CAAC,SAAU;AACf,eAAW;AACX,UAAM,UAAwB,OAAO,OAAO,SAAS;AACnD,YAAM,SAAS,cAAc,OAAO,IAAI;AACxC,YAAM,MAAM,WAAW,KAAK;AAC5B,UAAI;AACF,cAAM,MAAM,MAAM,SAAS,OAAO,IAAI;AACtC,YAAI,IAAI,UAAU,KAAK;AACrB,eAAK;AAAA,YACH;AAAA,YACA;AAAA,YACA,QAAQ,IAAI;AAAA,YACZ,WAAW,IAAI,EAAE,YAAY;AAAA,UAC/B,CAAC;AAAA,QACH;AACA,eAAO;AAAA,MACT,SAAS,KAAK;AACZ,aAAK;AAAA,UACH;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR,WAAW,IAAI,EAAE,YAAY;AAAA,UAC7B,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,QACxD,CAAC;AACD,cAAM;AAAA,MACR;AAAA,IACF;AACA,WAAO,QAAQ;AACf,aAAS;AAAA,EACX;AAEA,WAAS,OAAa;AACpB,QAAI,CAAC,OAAQ;AACb,QAAI,SAAU,QAAO,QAAQ;AAC7B,eAAW;AACX,aAAS;AAAA,EACX;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,IAAI,WAAW;AACb,aAAO;AAAA,IACT;AAAA,IACA,UAAU;AACR,aAAO,OAAO,MAAM;AAAA,IACtB;AAAA,IACA,QAAQ;AACN,aAAO,SAAS;AAAA,IAClB;AAAA,EACF;AACF;;;ACvEO,SAAS,aAAa,UAA+B,CAAC,GAAW;AACtE,QAAM,EAAE,SAAS,GAAG,KAAK,IAAI;AAC7B,QAAM,cAAc,KAAK,mBAAmB;AAC5C,QAAM,cAAc,KAAK,mBAAmB;AAE5C,QAAM,iBAAwC,cAC1C,qBAAqB;AAAA,IACnB,OAAO,KAAK;AAAA,IACZ,QAAQ,KAAK;AAAA,IACb,KAAK,KAAK;AAAA,EACZ,CAAC,IACD;AACJ,QAAM,iBAAwC,cAC1C,qBAAqB;AAAA,IACnB,OAAO,KAAK;AAAA,IACZ,QAAQ,KAAK;AAAA,IACb,KAAK,KAAK;AAAA,EACZ,CAAC,IACD;AAEJ,MAAI,SAAS;AAEb,WAAS,QAAc;AACrB,QAAI,OAAQ;AACZ,oBAAgB,MAAM;AACtB,oBAAgB,MAAM;AACtB,aAAS,QAAQ,gBAAgB,YAAY,gBAAgB,QAAQ;AACrE,QAAI,OAAQ,UAAS,UAAU,IAAI;AAAA,EACrC;AAEA,WAAS,OAAa;AACpB,QAAI,CAAC,OAAQ;AACb,oBAAgB,KAAK;AACrB,oBAAgB,KAAK;AACrB,aAAS;AACT,aAAS,UAAU,KAAK;AAAA,EAC1B;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,IAAI,WAAW;AACb,aAAO;AAAA,IACT;AAAA,IACA,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AACF;AAEO,SAAS,qBACd,UACA,UACsB;AACtB,MAAI,aAAa,KAAM,QAAO;AAC9B,MAAI,aAAa,QAAW;AAC1B,WAAO,WAAW,EAAE,gBAAgB,MAAM,gBAAgB,KAAK,IAAI;AAAA,EACrE;AACA,MAAI,SAAS,mBAAmB,SAAS,SAAS,mBAAmB,OAAO;AAC1E,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;AChGO,SAAS,qBAAmC;AACjD,QAAM,QAAmB,CAAC;AAC1B,SAAO;AAAA,IACL,IAAI,SAAS;AACX,UAAI,CAAC,QAAS;AACd,UAAI,OAAO,YAAY,WAAY,OAAM,KAAK,OAAO;AAAA,UAChD,OAAM,KAAK,MAAM,QAAQ,QAAQ,CAAC;AAAA,IACzC;AAAA,IACA,QAAQ;AACN,eAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,YAAI;AACF,gBAAM,CAAC,EAAE;AAAA,QACX,SAAS,KAAK;AACZ,kBAAQ,MAAM,yBAAyB,GAAG;AAAA,QAC5C;AAAA,MACF;AACA,YAAM,SAAS;AAAA,IACjB;AAAA,EACF;AACF;AAEO,SAAS,gBAAgB,UAAuC;AACrE,SAAO,MAAM;AACX,aAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7C,UAAI;AACF,iBAAS,CAAC,IAAI;AAAA,MAChB,SAAS,KAAK;AACZ,gBAAQ,MAAM,yBAAyB,GAAG;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AACF;;;AC1CO,SAAS,aAAsB;AACpC,MAAI,OAAO,aAAa,aAAa;AACnC,UAAM,OAAO,SAAS;AACtB,QAAI,MAAM,UAAU,SAAS,MAAM,EAAG,QAAO;AAC7C,QAAI,MAAM,UAAU,SAAS,OAAO,EAAG,QAAO;AAAA,EAChD;AACA,MACE,OAAO,WAAW,eAClB,OAAO,OAAO,eAAe,YAC7B;AACA,WAAO,OAAO,WAAW,8BAA8B,EAAE;AAAA,EAC3D;AACA,SAAO;AACT;;;ACXA,IAAM,qBAAqB;AAE3B,IAAI,UAAU;AAEd,SAAS,uBAA6B;AACpC,MAAI,QAAS;AACb,MAAI,OAAO,WAAW,eAAe,OAAO,YAAY,YAAa;AACrE,YAAU;AAEV,QAAM,WAAW,MAAY;AAC3B,WAAO,cAAc,IAAI,MAAM,kBAAkB,CAAC;AAAA,EACpD;AAEA,QAAM,WAAW,QAAQ;AACzB,UAAQ,YAAY,YAA4B,MAAM;AACpD,UAAM,SAAS,SAAS;AAAA,MACtB;AAAA,MACA;AAAA,IACF;AACA,aAAS;AACT,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,QAAQ;AAC5B,UAAQ,eAAe,YAA4B,MAAM;AACvD,UAAM,SAAS,YAAY;AAAA,MACzB;AAAA,MACA;AAAA,IACF;AACA,aAAS;AACT,WAAO;AAAA,EACT;AACF;AAEO,SAAS,gBAAgB,SAA8B;AAC5D,MAAI,OAAO,WAAW,YAAa,QAAO,MAAM;AAAA,EAAC;AACjD,uBAAqB;AACrB,SAAO,iBAAiB,YAAY,OAAO;AAC3C,SAAO,iBAAiB,oBAAoB,OAAO;AACnD,SAAO,MAAM;AACX,WAAO,oBAAoB,YAAY,OAAO;AAC9C,WAAO,oBAAoB,oBAAoB,OAAO;AAAA,EACxD;AACF;;;AC7CA,SAAS,eAAAC,oBAAkC;;;ACA3C,SAAS,mBAAkC;AAqC3C,IAAM,wBAAwC;AAAA,EAC5C,IAAI;AAAA,EACJ,KAAK;AACP;AAEO,SAAS,gBAAgB,SAA4C;AAC1E,QAAM,EAAE,KAAK,SAAS,IAAI;AAE1B,QAAM,QAAQ,YAA0B,OAAO;AAAA,IAC7C,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB,EAAE;AAEF,QAAM,aAA8B;AAAA,IAClC,cAAc;AACZ,YAAM,OAAO,MAAM,SAAS;AAC5B,UAAI,KAAK,SAAS,cAAc;AAC9B,kBAAU,mBAAmB;AAAA,MAC/B;AACA,UAAI,IAAI,MAAM,CAAC,qBAAqB,CAAC;AACrC,YAAM,SAAS,EAAE,MAAM,WAAW,iBAAiB,MAAM,CAAC;AAAA,IAC5D;AAAA,IAEA,gBAAgB;AACd,gBAAU,iBAAiB;AAC3B,UAAI,IAAI,MAAM;AACd,YAAM,SAAS,EAAE,MAAM,cAAc,iBAAiB,KAAK,CAAC;AAAA,IAC9D;AAAA,IAEA,iBAAiB;AACf,gBAAU,mBAAmB;AAC7B,UAAI,IAAI,MAAM;AACd,YAAM,SAAS,EAAE,MAAM,QAAQ,iBAAiB,MAAM,CAAC;AAAA,IACzD;AAAA,IAEA,kBAAkB;AAChB,UAAI,MAAM,SAAS,EAAE,SAAS,cAAc;AAC1C,mBAAW,eAAe;AAAA,MAC5B,OAAO;AACL,mBAAW,cAAc;AAAA,MAC3B;AAAA,IACF;AAAA,IAEA,aAAa,cAAc;AACzB,YAAM,OAAO,MAAM,SAAS;AAC5B,UAAI,KAAK,SAAS,cAAc;AAC9B,kBAAU,mBAAmB;AAAA,MAC/B;AACA,UAAI,IAAI,MAAM,YAAY;AAC1B,YAAM,SAAS,EAAE,MAAM,WAAW,iBAAiB,MAAM,CAAC;AAAA,IAC5D;AAAA,IAEA,UAAU;AACR,YAAM,OAAO,MAAM,SAAS;AAC5B,UAAI,KAAK,SAAS,cAAc;AAC9B,kBAAU,mBAAmB;AAAA,MAC/B;AACA,UAAI,IAAI,MAAM;AACd,YAAM,SAAS,EAAE,MAAM,QAAQ,iBAAiB,MAAM,CAAC;AAAA,IACzD;AAAA,IAEA,kBAAkB;AAChB,YAAM,EAAE,MAAM,IAAI,IAAI,SAAS;AAC/B,UAAI,MAAM,SAAS,GAAG;AACpB,YAAI,IAAI,IAAI;AAAA,MACd,WAAW,MAAM,WAAW,KAAK,MAAM,CAAC,GAAG,OAAO,mBAAmB;AACnE,YAAI,IAAI,MAAM,CAAC,qBAAqB,CAAC;AACrC,cAAM,SAAS,EAAE,MAAM,WAAW,iBAAiB,MAAM,CAAC;AAAA,MAC5D,WAAW,MAAM,WAAW,GAAG;AAC7B,YAAI,IAAI,IAAI;AAAA,MACd,OAAO;AACL,YAAI,IAAI,MAAM;AACd,cAAM,SAAS,EAAE,MAAM,QAAQ,iBAAiB,MAAM,CAAC;AAAA,MACzD;AAAA,IACF;AAAA,IAEA,SAAS,OAAO;AACd,YAAM,EAAE,KAAK,IAAI,MAAM,SAAS;AAChC,YAAM,EAAE,MAAM,IAAI,IAAI,SAAS;AAE/B,UAAI,MAAM,OAAO,qBAAqB,MAAM,WAAW,GAAG;AACxD,mBAAW,YAAY;AACvB;AAAA,MACF;AAEA,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,qBAAW,aAAa,CAAC,KAAK,CAAC;AAC/B;AAAA,QACF,KAAK;AACH,oBAAU,mBAAmB;AAC7B,cAAI,IAAI,MAAM,CAAC,KAAK,CAAC;AACrB,gBAAM,SAAS,EAAE,MAAM,WAAW,iBAAiB,MAAM,CAAC;AAC1D;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,cAAI,IAAI,KAAK,KAAK;AAClB,cAAI,SAAS,WAAW;AACtB,kBAAM,SAAS,EAAE,MAAM,UAAU,CAAC;AAAA,UACpC;AACA;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY;AAClB,YAAU,aAAa;AACvB,SAAO;AACT;;;ACjJA,SAAS,eAAAC,oBAAkC;AAoBpC,SAAS,wBAAyC;AACvD,QAAM,QAAQA,aAA6B,OAAO;AAAA,IAChD,OAAO,CAAC;AAAA,EACV,EAAE;AAEF,QAAM,MAAyB;AAAA,IAC7B,KAAK,OAAO;AACV,YAAM,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,SAAS,EAAE,OAAO,KAAK,EAAE,CAAC;AAAA,IAC9D;AAAA,IACA,MAAM;AACJ,YAAM,IAAI,MAAM,SAAS,EAAE;AAC3B,UAAI,EAAE,UAAU,GAAG;AACjB,cAAM,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;AAAA,MAC9B,OAAO;AACL,cAAM,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,EAAE,EAAE,CAAC;AAAA,MAC1C;AAAA,IACF;AAAA,IACA,QAAQ,OAAO;AACb,YAAM,IAAI,MAAM,SAAS,EAAE;AAC3B,UAAI,EAAE,WAAW,GAAG;AAClB,cAAM,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;AAAA,MACnC,OAAO;AACL,cAAM,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;AAAA,MACtD;AAAA,IACF;AAAA,IACA,QAAQ;AACN,YAAM,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;AAAA,IAC9B;AAAA,IACA,MAAM,OAAO;AACX,YAAM,SAAS,EAAE,MAAM,CAAC;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,WAAW;AACjB,WAAS,MAAM;AACf,SAAO;AACT;;;AFPA,IAAM,kBAAmC;AAAA,EACvC,OAAO;AAAA,EACP,WAAW;AAAA,EACX,OAAO,CAAC;AAAA,EACR,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,eAAe;AAAA,EACf,cAAc;AAAA,EACd,MAAM;AACR;AAEO,SAAS,aACd,YACA,QACe;AACf,MAAI,eAAe,OAAQ,QAAO;AAClC,MAAI,OAAQ,QAAO,OAAO;AAC1B,MACE,OAAO,eAAe,eACtB,OAAQ,WAAwC,eAAe,YAC/D;AACA,UAAM,MACJ,WAGA,WAAW,8BAA8B;AAC3C,WAAO,IAAI,UAAU,SAAS;AAAA,EAChC;AACA,SAAO;AACT;AAIO,SAAS,cACd,UAAgC,CAAC,GACnB;AACd,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,cAA+B,UAAU,SAAS,gBAAgB;AACxE,QAAM,kBACJ,UAAU,iBAAiB,aAAa,aAAa,WAAW;AAClE,QAAM,eAAiC,UAAU,SAAS,CAAC;AAE3D,QAAM,MAAM,sBAAsB;AAClC,QAAM,YAAY,gBAAgB;AAAA,IAChC;AAAA,IACA,UAAU;AAAA,MACR,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,IACpB;AAAA,EACF,CAAC;AAGD,MAAI,gBAA+B;AACnC,QAAM,QAA0B;AAAA,IAC9B,KAAK;AAAA,IACL,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO;AAAA,EACT;AAEA,QAAM,mBAAqC;AAAA,IACzC,MAAMC,MAAK,SAAS,OAAO;AACzB,YAAM,MAAMA;AACZ,YAAM,UAAU,WAAW;AAC3B,YAAM,QAAQ,SAAS;AACvB,UAAI,kBAAkB,QAAQ;AAC5B,wBAAgB;AAChB,wBAAgB,KAAK;AAAA,MACvB,WAAW,kBAAkB,aAAa;AACxC,0BAAkB,KAAK;AAAA,MACzB;AACA,YAAM,SAAS,EAAE,OAAOA,KAAI,CAAC;AAAA,IAC/B;AAAA,IAEA,UAAU;AACR,UAAI,kBAAkB,aAAa;AACjC,wBAAgB;AAChB,cAAM,MAAM;AACZ,cAAM,UAAU;AAChB,cAAM,QAAQ;AACd,wBAAgB;AAAA,MAClB;AACA,YAAM,SAAS,EAAE,OAAO,KAAK,CAAC;AAAA,IAChC;AAAA,IAEA,IAAIA,MAAK;AACP,YAAM,SAASA,QAAO,MAAM;AAC5B,YAAM,YAAY;AAClB,UAAI,kBAAkB,QAAQ;AAC5B,cAAM,MAAM;AAAA,MACd;AACA,UAAI,kBAAkB,UAAU;AAC9B,wBAAgB;AAChB,wBAAgB,KAAK;AAAA,MACvB;AACA,YAAM,SAAS,EAAE,iBAAiB,MAAM,UAAU,CAAC;AAAA,IACrD;AAAA,IAEA,QAAQ;AACN,UAAI,kBAAkB,UAAU;AAC9B,wBAAgB;AAChB,cAAM,MAAM;AACZ,cAAM,UAAU;AAChB,cAAM,YAAY;AAClB,cAAM,QAAQ;AACd,wBAAgB;AAAA,MAClB;AACA,YAAM,SAAS,EAAE,iBAAiB,KAAK,CAAC;AAAA,IAC1C;AAAA,EACF;AAGA,QAAM,QAAQC,aAA0B,OAAO;AAAA,IAC7C,GAAG;AAAA,IACH,OAAO,UAAU,SAAS;AAAA,IAC1B,WAAW,UAAU,aAAa;AAAA,IAClC,OAAO,CAAC;AAAA,IACR,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,OAAO;AAAA,IACP,eAAe;AAAA,IACf,cAAc,UAAU,gBAAgB;AAAA,IACxC,MAAM,UAAU,QAAQ;AAAA,EAC1B,EAAE;AAGF,MAAI,UAAU,MAAM;AAClB,UAAM,EAAE,MAAM,IAAI,IAAI,SAAS;AAC/B,QAAI,MAAM,SAAS,EAAE,UAAU,OAAO;AACpC,YAAM,SAAS,EAAE,MAAM,CAAC;AAAA,IAC1B;AAAA,EACF,CAAC;AAED,YAAU,UAAU,MAAM;AACxB,UAAM,EAAE,gBAAgB,IAAI,UAAU,SAAS;AAC/C,QAAI,MAAM,SAAS,EAAE,oBAAoB,iBAAiB;AACxD,YAAM,SAAS,EAAE,gBAAgB,CAAC;AAAA,IACpC;AAAA,EACF,CAAC;AAGD,QAAM,UAAU;AACf,EAAC,QAAqC,MAAM;AAC5C,EAAC,QAAgC,OAAO;AACxC,EAAC,QAA4C,YAAY;AAE1D,UAAQ,SAAS,CAACD,SAAQ;AACxB,QAAI,QAAQ,MAAM,SAAS,EAAE,WAAWA,IAAG,EAAG;AAC9C,UAAM,SAAS,EAAE,WAAWA,KAAI,CAAC;AAAA,EACnC;AAEA,UAAQ,WAAW,CAAC,OAAO,aAAa;AACtC,UAAM,QAAQ,MAAM,SAAS;AAC7B,UAAM,eAAe,YAAY,aAAa,OAAO,WAAW;AAChE,QAAI,MAAM,UAAU,SAAS,MAAM,kBAAkB,aAAc;AACnE,UAAM,SAAS,EAAE,OAAO,eAAe,aAAa,CAAC;AAAA,EACvD;AAEA,UAAQ,YAAY,CAAC,WAAW;AAC9B,QAAI,MAAM,SAAS,EAAE,iBAAiB,OAAQ;AAC9C,UAAM,SAAS,EAAE,cAAc,OAAO,CAAC;AAAA,EACzC;AAGA,MAAI,aAAa,SAAS,GAAG;AAC3B,cAAU,WAAW,YAAY;AACjC,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,gBAAU,WAAW,SAAS,aAAa,CAAC,CAAC;AAAA,IAC/C;AAAA,EACF,WAAW,UAAU,iBAAiB;AACpC,cAAU,WAAW,cAAc;AAAA,EACrC;AACA,MAAI,UAAU,iBAAiB;AAC7B,qBAAiB,IAAI,UAAU,eAAe;AAAA,EAChD;AAEA,SAAO;AACT;;;AG3OA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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,cAAc;AACpB,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;;;ACAK,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,WAAW;AAC1B,WAAS,MAAM,SAAS,OAAO,QAAQ;AACvC,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;;;ACxFA,SAAS,iBAAiB,2BAA2B;AAKrD,IAAM,wBAAwB;AAC9B,IAAM,iBAAiB;AACvB,IAAM,aAAa;AAwBZ,SAAS,oBAAoB,MAAwC;AAC1E,QAAM,EAAE,UAAU,IAAI;AAEtB,QAAME,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,UAAM,UAAU,OAAO,SAAS;AAChC,eAAW,OAAO,SAAS,qBAAqB;AAChD,IAAAA,IAAG,MAAM,UAAU,UAAU,SAAS;AACtC,QAAI,OAAO;AACT,YAAMC,OAAM,oBAAoB,MAAM,IAAI;AAC1C,MAAAA,KAAI,aAAa,eAAe,MAAM;AACtC,MAAAA,KAAI,aAAa,SAAS,IAAI;AAC9B,MAAAA,KAAI,aAAa,UAAU,IAAI;AAC/B,MAAAA,KAAI,MAAM,UAAU;AACpB,WAAK,OAAOA,IAAG;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,aACZ;AACF,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,QAAMC,UAAS,MAAY;AACzB,QAAI,CAAC,kBAAkB,CAAC,eAAe;AACrC,MAAAF,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,MAAAE,QAAO;AAAA,IACT;AAAA,IACA,UAAU;AACR,MAAAF,IAAG,OAAO;AACV,uBAAiB;AACjB,sBAAgB;AAAA,IAClB;AAAA,EACF;AACF;;;ACtGA,SAAS,aAAaG,MAAgB,UAA6B;AACjE,MAAI,UAAU;AACZ,UAAM,QAAQ,SAAS,IAAIA,KAAI,MAAMA,KAAI,EAAE;AAC3C,QAAI,MAAO,QAAO;AAAA,EACpB;AACA,MAAIA,KAAI,SAAS,QAAS,QAAO,EAAE,MAAM,SAAS,MAAMA,KAAI,IAAI,MAAMA,KAAI,GAAG;AAC7E,MAAIA,KAAI,SAAS,QAAQ;AACvB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAIA,KAAI;AAAA,MACR,KAAK,EAAE,MAAM,GAAG;AAAA,MAChB,SAAS,CAAC;AAAA,MACV,OAAO,CAAC;AAAA,IACV;AAAA,EACF;AACA,SAAO,EAAE,MAAMA,KAAI,MAAM,IAAIA,KAAI,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,gBAAMA,OAAiB,EAAE,MAAM,GAAG;AAClC,gBAAM,SAAS,aAAaA,MAAK,QAAQ;AACzC,iBAAO;AAAA,YACL,SAAS;AAAA,YACT,KAAAA;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,WAA6B,CAAC;AACpC,QAAM,aAA+B,CAAC;AACtC,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,kBAAMA,OAAiB,EAAE,MAAM,GAAG;AAClC,kBAAM,SAAS,aAAaA,MAAK,QAAQ;AACzC,kBAAM,QAAwB;AAAA,cAC5B,SAAS;AAAA,cACT,KAAAA;AAAA,cACA;AAAA,cACA,OAAO,YAAY,QAAQ,IAAI;AAAA,YACjC;AACA,gBAAI,SAAS,aAAa;AACxB,yBAAW,KAAK,KAAK;AAAA,YACvB,OAAO;AACL,uBAAS,KAAK,KAAK;AAAA,YACrB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AACA,SAAO,SAAS,OAAO,UAAU;AACnC;AAEO,SAAS,qBAAqBA,MAAoC;AACvE,QAAM,QAAQ,mBAAmB,KAAK,CAAC,CAAC,EAAE,IAAI,MAAM,SAASA,KAAI,IAAI;AACrE,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,CAAC,IAAI,IAAI;AACf,QAAM,WAAW,IAAI,IAAI,KAAK,IAAI,OAAOA,KAAI,EAAE,CAAC;AAChD,QAAMC,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,KAAKD,MAAK,MAAM;AACd,YAAMC,MAAK,qBAAqBD,IAAG;AACnC,UAAI,CAACC,KAAI;AACP,kBAAU;AACV,gBAAQ,KAAK;AACb;AAAA,MACF;AACA,YAAM,MAAM,GAAGD,KAAI,IAAI,IAAIA,KAAI,EAAE;AACjC,UAAI,QAAQ,WAAW,QAAQ,UAAW;AAC1C,gBAAU;AACV,cAAQ,KAAKC,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,UAAU,MAAM,MAAM,CAAC,EAAE,GAAG;AAAA,MACtC;AACA,gBAAU,UAAU,GAAG,MAAM;AAAA,IAC/B,WAAW,WAAW;AACpB,kBAAY;AACZ,cAAQ,CAAC;AACT,mBAAa;AACb,cAAQ,UAAU,QAAQ;AAC1B,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,OAAO,MAAM,GAAG;AACxB,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,UAAU,MAAM,MAAM,GAAG;AACjC,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,UAAU,QAAQ;AAC1B,gBAAU,MAAM,IAAI;AAAA,IACtB;AAAA,EACF;AACF;;;ACrQA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAAC;AAAA,EACA;AAAA,EACA,iBAAiBC;AAAA,OACZ;;;ACTP,SAAS,YAA6B;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAA8B;AAClD,SAAO,QAAQ,KAAK,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;;;ACzCA,IAAM,mBAAoC,EAAE,KAAK,IAAI;AAE9C,IAAM,mBAAoC,EAAE,KAAK,IAAI;AAErD,IAAM,mBAAoC,EAAE,KAAK,IAAI;AAErD,IAAM,gBAAiC,EAAE,KAAK,IAAI;AAElD,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;AAiBO,SAAS,eACd,SACkB;AAClB,QAAM,EAAE,YAAY,SAAS,iBAAiB,YAAY,IAAI;AAC9D,QAAM,WAAW,QAAQ,YAAY;AACrC,QAAM,cAA+B,CAAC;AAEtC,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,SAAS,gBAAgB,GAAG,aAAa;AAC/C,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,UAAU,CAAC,SAAU;AAE7D,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,YAAM,WAAW,cAAc;AAC/B,UAAI,UAAU;AACZ,UAAE,eAAe;AACjB,UAAE,gBAAgB;AAClB,iBAAS,WAAW,CAAC,SAAS,OAAO;AAAA,MACvC;AACA;AAAA,IACF;AAEA,QAAI,QAAQ;AACV,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,cAAQ,KAAK,WAAW,gBAAgB;AACxC;AAAA,IACF;AAEA,QAAI,QAAQ;AACV,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,YAAM,EAAE,MAAAC,MAAK,IAAI,QAAQ,KAAK,SAAS;AACvC,UAAI,QAAQ,IAAI,SAAS,EAAE,MAAM,WAAW,GAAG;AAC7C,gBAAQ,KAAK,WAAW,YAAY;AAAA,MACtC,WAAWA,UAAS,WAAW;AAC7B,YAAI,OAAO;AACT,gBAAM,KAAK;AAAA,QACb,OAAO;AACL,kBAAQ,KAAK,WAAW,QAAQ;AAAA,QAClC;AAAA,MACF;AACA;AAAA,IACF;AAGA,QAAI,YAAY,SAAS,GAAG;AAC1B,YAAM,MAAM,YAAY,YAAY,SAAS,CAAC;AAC9C,UAAI,IAAI,GAAG;AACT,UAAE,eAAe;AACjB,UAAE,gBAAgB;AAClB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,EAAE,KAAK,IAAI,QAAQ,KAAK,SAAS;AACvC,QAAI,SAAS,WAAW;AACtB,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,cAAQ,KAAK,WAAW,gBAAgB;AAAA,IAC1C,WAAW,SAAS,cAAc;AAChC,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,cAAQ,KAAK,WAAW,eAAe;AAAA,IACzC,WAAW,SAAS,WAAW;AAC7B,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,cAAQ,KAAK,WAAW,QAAQ;AAAA,IAClC,WAAW,QAAQ,SAAS,EAAE,oBAAoB,MAAM;AACtD,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,cAAQ,UAAU,MAAM;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,MAAM,WAAW;AACvB,MAAI,iBAAiB,WAAW,WAAW,EAAE,SAAS,KAAK,CAAC;AAC5D,aAAW,iBAAiB,WAAW,WAA4B;AAAA,IACjE,SAAS;AAAA,EACX,CAAC;AAED,SAAO;AAAA,IACL,UAAU;AACR,UAAI,oBAAoB,WAAW,WAAW,EAAE,SAAS,KAAK,CAAC;AAC/D,iBAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,UACE,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgB,SAAiC;AAC/C,kBAAY,KAAK,OAAO;AACxB,aAAO,MAAM;AACX,cAAM,MAAM,YAAY,QAAQ,OAAO;AACvC,YAAI,OAAO,EAAG,aAAY,OAAO,KAAK,CAAC;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AACF;;;AHhJA,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,IACA,UAAU;AAAA,IACV,UAAU,kBAAkB;AAAA,EAC9B,IAAI;AAEJ,MAAI,iBAAkC;AAEtC,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,gBAAgBC,qBAAoB,WAAW;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,UAAU,MAAM;AAAA,EAC1B,CAAC;AACD,OAAK,YAAY,YAAY;AAE7B,QAAM,cAAcA,qBAAoBC,kBAAiB;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,WAAW,gBAAgB;AACxC,eAAW,KAAK;AAAA,EAClB,CAAC;AACD,OAAK,YAAY,UAAU;AAG3B,QAAM,UAAUD,qBAAoB,MAAM;AAC1C,UAAQ,aAAa,SAAS,UAAU;AACxC,UAAQ,aAAa,eAAe,MAAM;AAC1C,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,MAAM;AAAA,QACN,2BAA2B;AAAA,QAC3B,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAEA,QAAM,eAAe,GAAG,OAAO;AAAA,IAC7B,OAAO;AAAA,IACP,OAAO,EAAE,oCAAoC,GAAG;AAAA,EAClD,CAAC;AACD,eAAa,SAAS;AAEtB,QAAM,WAAWA,qBAAoB,WAAW;AAChD,WAAS,aAAa,SAAS,QAAQ;AACvC,WAAS,aAAa,eAAe,MAAM;AAC3C,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,MAAM,UAAU,cAAc,kBAAkB;AAAA,MACzD,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,IACzC;AAAA,IACA;AAAA,EACF;AAEA,QAAM,cAAc,GAAG,QAAQ;AAAA,IAC7B,OACE;AAAA,IACF,OAAO,EAAE,mCAAmC,GAAG;AAAA,EACjD,CAAC;AAED,QAAM,WAAWA,qBAAoB,YAAY;AACjD,WAAS,aAAa,SAAS,QAAQ;AACvC,WAAS,aAAa,eAAe,MAAM;AAC3C,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,MAAM,UAAU,cAAc,cAAc;AAAA,MACrD,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,IACzC;AAAA,IACA;AAAA,EACF;AAEA,eAAa,YAAY,OAAO;AAChC,eAAa,YAAY,WAAW;AACpC,eAAa,YAAY,OAAO;AAEhC,QAAM,aAAa,GAAG,OAAO;AAAA,IAC3B,OAAO;AAAA,IACP,OAAO,EAAE,kCAAkC,GAAG;AAAA,EAChD,CAAC;AACD,aAAW,SAAS;AACpB,aAAW,YAAY,MAAM;AAC7B,aAAW,YAAY,YAAY;AACnC,OAAK,YAAY,UAAU;AAE3B,QAAM,cAAc,MAAY;AAC9B,QAAI,CAAC,gBAAgB;AACnB,iBAAW,SAAS;AACpB;AAAA,IACF;AACA,UAAM,cAAc,eAAe;AACnC,UAAM,QAAQ,eAAe;AAC7B,UAAM,aAAa,MAAM,QAAQ,SAAS;AAC1C,eAAW,SAAS;AACpB,iBAAa,SAAS,CAAC,eAAe,CAAC;AAEvC,QAAI,MAAM,gBAAgB,MAAM,CAAC,MAAM,QAAQ,MAAM,WAAW,GAAG;AACjE,kBAAY,cAAc,QAAQ,MAAM,QAAQ,MAAM;AAAA,IACxD,OAAO;AACL,YAAM,MAAM,MAAM,QAAQ,MAAM,WAAW,KAAK;AAChD,kBAAY,cAAc,IAAI,MAAM,GAAG,CAAC;AAAA,IAC1C;AAEA,WAAO,YAAY,GAAG,cAAc,eAAe,mBAAmB;AAAA,EACxE;AAEA,SAAO,iBAAiB,SAAS,CAAC,MAAM;AACtC,MAAE,gBAAgB;AAClB,QAAI,gBAAgB;AAClB,qBAAe,WAAW,CAAC,eAAe,OAAO;AAAA,IACnD;AAAA,EACF,CAAC;AAED,UAAQ,iBAAiB,SAAS,CAAC,MAAM;AACvC,MAAE,gBAAgB;AAClB,oBAAgB,WAAW;AAAA,EAC7B,CAAC;AAED,UAAQ,iBAAiB,SAAS,CAAC,MAAM;AACvC,MAAE,gBAAgB;AAClB,oBAAgB,WAAW;AAAA,EAC7B,CAAC;AAED,MAAI,uBAAuB,gBAAgB,eAAe,MAAM,YAAY,CAAC;AAG7E,QAAM,eAAeA,qBAAoB,KAAK;AAC9C,eAAa,aAAa,SAAS,UAAU;AAC7C,eAAa,aAAa,eAAe,MAAM;AAC/C,QAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,MAAM;AAAA,QACN,+BAA+B;AAAA,QAC/B,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACA,cAAY,SAAS;AAErB,QAAM,gBAAgB,GAAG,QAAQ;AAAA,IAC/B,OACE;AAAA,EACJ,CAAC;AACD,cAAY,YAAY,aAAa;AAErC,QAAM,kBAAkB,GAAG,OAAO;AAAA,IAChC,OACE;AAAA,EACJ,CAAC;AACD,kBAAgB,SAAS;AAEzB,MAAI,yBAAyB;AAC7B,cAAY,iBAAiB,SAAS,CAAC,MAAM;AAC3C,MAAE,gBAAgB;AAClB,6BAAyB,CAAC;AAC1B,oBAAgB,SAAS,CAAC;AAAA,EAC5B,CAAC;AAED,QAAM,kBAAkB,GAAG,OAAO,EAAE,OAAO,2BAA2B,GAAG;AAAA,IACvE;AAAA,IACA;AAAA,EACF,CAAC;AACD,kBAAgB,SAAS;AACzB,OAAK,YAAY,eAAe;AAEhC,MAAI,gBAAwC,CAAC;AAE7C,QAAM,mBAAmB,MAAY;AAEnC,UAAM,cAAc,QAAQ,SAAS,EAAE,MAAM,MAAM;AACnD,UAAM,QAAQ,cACV,cAAc,OAAO,CAAC,MAAM,EAAE,WAAW,WAAW,IACpD;AACJ,UAAM,QAAQ,MAAM;AAEpB,oBAAgB,SAAS,UAAU;AACnC,kBAAc,cAAc,OAAO,KAAK;AACxC,gBAAY;AAAA,MACV;AAAA,MACA,UAAU,IAAI,wBAAwB,GAAG,KAAK;AAAA,IAChD;AAGA,oBAAgB,YAAY;AAC5B,eAAW,QAAQ,OAAO;AACxB,YAAM,MAAM,GAAG,OAAO;AAAA,QACpB,OAAO;AAAA,MACT,CAAC;AACD,YAAM,MAAM,GAAG,QAAQ;AAAA,QACrB,OAAO;AAAA,MACT,CAAC;AACD,YAAM,OAAO,GAAG,QAAQ;AAAA,QACtB,OAAO;AAAA,QACP,MAAM,KAAK,QAAQ;AAAA,MACrB,CAAC;AACD,UAAI,YAAY,GAAG;AACnB,UAAI,YAAY,IAAI;AACpB,sBAAgB,YAAY,GAAG;AAAA,IACjC;AAAA,EACF;AAEA,QAAM,cAAcA,qBAAoB,OAAO;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,WAAW,QAAQ;AAAA,IAClC,OAAO;AACL,cAAQ,KAAK,WAAW,YAAY;AAAA,IACtC;AACA,eAAW,KAAK;AAAA,EAClB,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,QAAM,sBAAsB,SAAS;AAAA,IACnC,CAAC,UAAkC;AACjC,sBAAgB;AAChB,uBAAiB;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,UAAU;AACR,6BAAuB;AACvB,4BAAsB;AACtB,yBAAmB;AACnB,WAAK,oBAAoB,aAAa,WAAW;AACjD,eAAS,oBAAoB,aAAa,WAAW;AACrD,eAAS,oBAAoB,WAAW,SAAS;AACjD,WAAK,OAAO;AAAA,IACd;AAAA,IACA,YAAY,OAAiB;AAC3B,6BAAuB;AACvB,uBAAiB;AACjB,6BAAuB,MAAM,eAAe,MAAM,YAAY,CAAC;AAC/D,kBAAY;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;;;AIvcA,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,aAAa;AAC5B,WAAS,MAAM,aAAa;AAC5B,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;AACpB,MAAI,MAAM,aAAa;AACvB,MAAI,MAAM,aAAa;AAEvB,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,iBAAiB,iBAAiB,MAAM;AAC1C,QAAI,IAAI,MAAM,YAAY,KAAK;AAC7B,UAAI,MAAM,aAAa;AAAA,IACzB;AAAA,EACF,CAAC;AACD,WAAS,iBAAiB,iBAAiB,MAAM;AAC/C,QAAI,SAAS,MAAM,YAAY,KAAK;AAClC,eAAS,MAAM,aAAa;AAC5B,eAAS,MAAM,WAAW;AAAA,IAC5B;AAAA,EACF,CAAC;AAED,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,QAAI,KAAK,UAAU;AACjB,eAAS,MAAM,aAAa;AAC5B,eAAS,MAAM,UAAU;AAAA,IAC3B,OAAO;AACL,eAAS,MAAM,UAAU;AACzB,eAAS,MAAM,aAAa;AAC5B,eAAS,MAAM,WAAW;AAAA,IAC5B;AAAA,EACF;AAEA,QAAM,UAAmB;AAAA,IACvB,WAAW;AAAA,IACX,KAAK,YAAY,UAAU;AACzB,YAAM,aAAa,WAAW;AAC9B,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,CAAC,YAAY;AACf,YAAI,MAAM,UAAU;AACpB,YAAI,MAAM,aAAa;AACvB,YAAI;AAAA,MACN;AACA,UAAI,MAAM,UAAU;AACpB,aAAO;AAAA,IACT;AAAA,IACA,OAAO;AACL,eAAS;AACT,UAAI,MAAM,UAAU;AACpB,eAAS,MAAM,UAAU;AACzB,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;;;AC9PO,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,YAAY,IAAI;AACjC,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;;;AC7CO,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,WAAW,CAAC;AAC5D,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,UAAM,UAAU,QAAQ,IAAI,SAAS;AACrC,YAAQ,KAAK,QAAQ,SAAS;AAAA,MAC5B,OAAO,WAAW,QAAQ,IAAI,IAAI,EAAE;AAAA,MACpC,GAAI,WAAW,EAAE,aAAa,UAAU,aAAa,KAAK;AAAA,IAC5D,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,IAClB,SAAS,QAAQ,WAAW;AAAA,IAC5B,UAAU,QAAQ,YAAY;AAAA,EAChC,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;;;AC9IO,IAAM,cAA0C;AAAA,EACrD,KAAK;AAAA,EACL,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,kBAAkD;AAAA,EAC7D,UAAU;AAAA,EACV,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,KAAK;AACP;AAUO,SAAS,YAAY,KAIjB;AACT,QAAM,OAAO,IAAI,UAAU,QAAQ,IAAI;AACvC,QAAM,QAAQ,IAAI,UAAU,SAAS,IAAI;AACzC,SAAO,MAAM,KAAK,KAAK,OAAO,KAAK,KAAK;AAC1C;AAEO,SAAS,aAAa,KAAqB;AAChD,QAAM,KAAK,KAAK,MAAM,GAAG;AACzB,MAAI,CAAC,OAAO,SAAS,EAAE,EAAG,QAAO;AACjC,QAAM,IAAI,KAAK,OAAO,KAAK,IAAI,IAAI,MAAM,GAAI;AAC7C,MAAI,IAAI,GAAI,QAAO;AACnB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,QAAM,IAAI,KAAK,MAAM,IAAI,EAAE;AAC3B,MAAI,IAAI,GAAI,QAAO,GAAG,CAAC;AACvB,SAAO,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC;AAC9B;;;AC1CA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAAE;AAAA,EACA;AAAA,EACA,iBAAiBC;AAAA,OAEZ;AAIP,IAAM,cAAc,IAAI,IAAY,mBAAmB,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAEjE,SAAS,kBAAkB,aAGhC;AACA,QAAM,QAAQ,YAAY,QAAQ,GAAG;AACrC,MAAI,QAAQ,GAAG;AACb,UAAM,YAAY,YAAY,MAAM,GAAG,KAAK;AAC5C,QAAI,YAAY,IAAI,SAAS,GAAG;AAC9B,aAAO,EAAE,MAAM,WAAyB,IAAI,YAAY,MAAM,QAAQ,CAAC,EAAE;AAAA,IAC3E;AAAA,EACF;AACA,SAAO,EAAE,MAAM,WAAW,IAAI,YAAY;AAC5C;AAuEA,IAAM,MAAM;AACZ,IAAM,SAAS;AACf,IAAM,OAAO;AACb,IAAM,MAAM;AACZ,IAAM,SAAS;AACf,IAAM,SAAS;AACf,IAAM,WAAW;AACjB,IAAM,UAAU;AAChB,IAAM,UAAU;AAChB,IAAM,SAAS,MAAM,WAAW,UAAU,SAAS,IAAI,UAAU;AACjE,IAAM,QAAQ;AAEd,IAAM,YAAsC;AAAA,EAC1C,KAAK;AAAA,EACL,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,aAAaC;AAAA,EACb,UAAU;AAAA,EACV,MAAM;AACR;AAEA,IAAM,aAAyD;AAAA,EAC7D,KAAK;AAAA,IACH,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,YAAY;AAAA,IACV,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,SAAS,EAAE,IAAI,oBAAoB,IAAI,8BAA8B;AAAA,EACrE,aAAa;AAAA,IACX,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AACF;AAEA,IAAM,iBAAiB;AAAA,EACrB,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,SAAS,WAAW,GAAW;AAC7B,SAAO,WAAW,CAAC,KAAK;AAC1B;AACA,SAAS,SAAS,GAAW;AAC3B,SAAO,UAAU,CAAC,KAAK;AACzB;AAIA,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,aAAa;AACnB,IAAM,SAAS,WAAW,QAAQ;AAI3B,SAAS,eAAe,SAAoC;AACjE,QAAM,EAAE,WAAW,iBAAiB,YAAY,cAAc,IAAI;AAElE,QAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,UAAQ,aAAa,wBAAwB,EAAE;AAC/C,SAAO,OAAO,QAAQ,OAAO;AAAA,IAC3B,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ,OAAO,WAAW;AAAA,IAC1B,eAAe;AAAA,EACjB,CAAC;AACD,YAAU,YAAY,OAAO;AAE7B,MAAI,eAAe;AACnB,QAAM,UAAuB,CAAC;AAC9B,QAAM,UAAU,oBAAI,IAAY;AAChC,QAAM,SAAS,oBAAI,IAAyB;AAC5C,QAAM,aAAa,oBAAI,IAA4B;AAEnD,MAAI,SAAoB,EAAE,QAAQ,MAAM,QAAQ,KAAK;AACrD,MAAI,UAAoB,CAAC;AACzB,MAAI,cAAc;AAClB,QAAM,YAAY,oBAAI,IAAgB;AACtC,QAAM,eAAe,MAAM;AACzB,eAAW,MAAM,UAAW,IAAG;AAAA,EACjC;AAIA,QAAM,kBAAkB,MAAY;AAClC,WAAO,MAAM;AACb,eAAW,KAAK,SAAS;AACvB,YAAM,MAAM,EAAE,UAAU;AACxB,YAAM,OAAO,OAAO,IAAI,GAAG;AAC3B,UAAI,KAAM,MAAK,KAAK,CAAC;AAAA,UAChB,QAAO,IAAI,KAAK,CAAC,CAAC,CAAC;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,WAAW,MAAY;AAC3B,cAAU,CAAC;AACX,kBAAc;AACd,oBAAgB;AAChB,eAAW,MAAM,MAAM,KAAK,WAAW,KAAK,CAAC,GAAG;AAC9C,UAAI,CAAC,OAAO,IAAI,EAAE,EAAG,iBAAgB,EAAE;AAAA,IACzC;AACA,eAAW,MAAM,OAAO,KAAK,EAAG,iBAAgB,EAAE;AAClD,iBAAa;AACb,oBAAgB;AAAA,EAClB;AAIA,MAAI,QAAuB;AAC3B,MAAI,cAAc;AAClB,MAAI,MAA+B;AAEnC,QAAM,cAAc,MAAY;AAC9B,QAAI,UAAU,KAAM;AACpB,YACE,OAAO,0BAA0B,aAC7B,sBAAsB,MAAM;AAC1B,cAAQ;AACR,aAAO;AAAA,IACT,CAAC,IACA,WAAW,MAAM;AAChB,cAAQ;AACR,aAAO;AAAA,IACT,GAAG,CAAC;AAAA,EACZ;AACA,QAAM,YAAY,MAAY;AAC5B,QAAI,UAAU,KAAM;AACpB,QAAI,OAAO,yBAAyB,WAAY,sBAAqB,KAAK;AAAA,QACrE,cAAa,KAAiD;AACnE,YAAQ;AAAA,EACV;AACA,QAAM,WAAW,MAAM,YAAY;AACnC,QAAM,WAAW,MAAM,YAAY;AAEnC,QAAM,YAAY,MAAY;AAC5B,QAAI,YAAa;AACjB,kBAAc;AACd,WAAO,iBAAiB,UAAU,UAAU;AAAA,MAC1C,SAAS;AAAA,MACT,SAAS;AAAA,IACX,CAAC;AACD,WAAO,iBAAiB,UAAU,QAAQ;AAAA,EAC5C;AACA,QAAM,YAAY,MAAY;AAC5B,QAAI,CAAC,YAAa;AAClB,kBAAc;AACd,WAAO,oBAAoB,UAAU,UAAU;AAAA,MAC7C,SAAS;AAAA,IACX,CAAyB;AACzB,WAAO,oBAAoB,UAAU,QAAQ;AAC7C,cAAU;AAAA,EACZ;AACA,QAAM,YAAY,MAAY;AAC5B,QAAI,OAAO,OAAO,qBAAqB,YAAa;AACpD,UAAM,IAAI,iBAAiB,CAAC,SAAS;AACnC,iBAAW,KAAK,MAAM;AACpB,YACE,EAAE,SAAS,gBACV,EAAE,WAAW,UAAU,EAAE,aAAa,SACvC;AACA,yBAAe;AACf;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AACD,QAAI,QAAQ,SAAS,MAAM,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAAA,EAC/D;AACA,QAAM,YAAY,MAAY;AAC5B,SAAK,WAAW;AAChB,UAAM;AAAA,EACR;AACA,QAAM,iBAAiB,MAAY;AACjC,QAAI,UAAU;AACd,eAAW,KAAK,WAAW,OAAO,GAAG;AACnC,UAAI,EAAE,UAAU,EAAE,OAAO,YAAa;AACtC,QAAE,SAAS,qBAAqB,kBAAkB,EAAE,WAAW,CAAC;AAChE,gBAAU;AAAA,IACZ;AACA,QAAI,QAAS,aAAY;AAAA,EAC3B;AAIA,QAAM,SAAS,CAAC,OAA6B;AAC3C,QAAI,GAAG,SAAU;AACjB,OAAG,WAAW;AACd,gBAAY,EAAE;AAEd,OAAG,KAAK,MAAM,SAAS;AAGvB,OAAG,OAAO,MAAM,aAAa;AAC7B,OAAG,OAAO,MAAM,UAAU;AAC1B,OAAG,QAAQ,MAAM,aAAa;AAG9B,OAAG,GAAG,MAAM,aAAa,SAAS,UAAU,MAAM,QAAQ,IAAI,QAAQ,cAAc,UAAU,MAAM,QAAQ,IAAI,QAAQ;AACxH,OAAG,GAAG,MAAM,QAAQ,GAAG,MAAM;AAC7B,OAAG,GAAG,MAAM,SAAS,GAAG,MAAM;AAG9B,OAAG,UAAU,MAAM,aAAa,WAAW,QAAQ,WAAW,WAAW,UAAU;AACnF,OAAG,UAAU,MAAM,UAAU;AAE7B,QAAI,GAAG,OAAQ,cAAa,GAAG,QAAQ,GAAG,WAAW;AAAA,EACvD;AAEA,QAAM,WAAW,CAAC,OAA6B;AAC7C,QAAI,CAAC,GAAG,SAAU;AAClB,OAAG,WAAW;AAGd,OAAG,UAAU,MAAM,aAAa;AAChC,OAAG,UAAU,MAAM,UAAU;AAG7B,OAAG,GAAG,MAAM,aAAa,SAAS,UAAU,MAAM,QAAQ,IAAI,QAAQ,cAAc,UAAU,MAAM,QAAQ,IAAI,QAAQ;AACxH,OAAG,GAAG,MAAM,QAAQ,GAAG,GAAG;AAC1B,OAAG,GAAG,MAAM,SAAS,GAAG,GAAG;AAG3B,OAAG,OAAO,MAAM,aAAa,WAAW,QAAQ,WAAW,WAAW,UAAU;AAChF,OAAG,OAAO,MAAM,UAAU;AAC1B,OAAG,QAAQ,MAAM,aAAa;AAC9B,OAAG,OAAO;AAAA,MACR;AAAA,MACA,MAAM;AACJ,YAAI,CAAC,GAAG,SAAU,IAAG,KAAK,MAAM,SAAS;AAAA,MAC3C;AAAA,MACA,EAAE,MAAM,KAAK;AAAA,IACf;AAEA,iBAAa,MAAM,IAAI;AAAA,EACzB;AAEA,QAAM,cAAc,CAAC,OAA6B;AAChD,UAAM,OAAO,OAAO,IAAI,GAAG,WAAW;AACtC,QAAI,CAAC,MAAM,OAAQ;AACnB,UAAM,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC;AAC9D,OAAG,WAAW;AACd,UAAM,MAAM,KAAK,GAAG;AAEpB,OAAG,UAAU,YAAY;AAEzB,UAAM,MAAM,SAAS,cAAc,KAAK;AACxC,QAAI,MAAM,UAAU;AACpB,QAAI,MAAM,aAAa;AACvB,QAAI,MAAM,MAAM;AAEhB,UAAM,KAAK,SAAS,cAAc,MAAM;AACxC,OAAG,MAAM,aAAa;AACtB,OAAG,MAAM,WAAW;AACpB,OAAG,cAAc,YAAY,GAAG;AAChC,QAAI,YAAY,EAAE;AAElB,UAAM,KAAK,SAAS,cAAc,MAAM;AACxC,OAAG,MAAM,WAAW;AACpB,OAAG,MAAM,UAAU;AACnB,OAAG,cAAc,aAAa,IAAI,SAAS;AAC3C,QAAI,YAAY,EAAE;AAClB,OAAG,UAAU,YAAY,GAAG;AAE5B,UAAM,OAAO,SAAS,cAAc,KAAK;AACzC,WAAO,OAAO,KAAK,OAAO;AAAA,MACxB,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,SAAS;AAAA,IACX,CAAC;AACD,SAAK,MAAM,YAAY,sBAAsB,GAAG;AAChD,SAAK,MAAM,YAAY,sBAAsB,UAAU;AACvD,SAAK,cAAc,IAAI;AACvB,OAAG,UAAU,YAAY,IAAI;AAE7B,UAAM,MAAM,SAAS,cAAc,KAAK;AACxC,WAAO,OAAO,IAAI,OAAO;AAAA,MACvB,UAAU;AAAA,MACV,SAAS;AAAA,MACT,WAAW;AAAA,IACb,CAAC;AACD,QAAI,cACF,KAAK,SAAS,IACV,GAAG,MAAM,CAAC,OAAO,KAAK,MAAM,+BAC5B;AACN,OAAG,UAAU,YAAY,GAAG;AAAA,EAC9B;AAIA,QAAM,iBAAiB,CAAC,gBAAwC;AAE9D,UAAM,OAAO,SAAS,cAAc,KAAK;AACzC,SAAK,aAAa,uBAAuB,EAAE;AAC3C,WAAO,OAAO,KAAK,OAAO;AAAA,MACxB,UAAU;AAAA,MACV,SAAS;AAAA,MACT,eAAe;AAAA,IACjB,CAAC;AAGD,UAAMC,MAAK,SAAS,cAAc,QAAQ;AAC1C,IAAAA,IAAG,OAAO;AACV,IAAAA,IAAG,aAAa,kBAAkB,EAAE;AACpC,IAAAA,IAAG,aAAa,4BAA4B,WAAW;AACvD,IAAAA,IAAG,aAAa,cAAc,mBAAmB,WAAW,EAAE;AAC9D,WAAO,OAAOA,IAAG,OAAO;AAAA,MACtB,UAAU;AAAA,MACV,OAAO,GAAG,GAAG;AAAA,MACb,QAAQ,GAAG,GAAG;AAAA,MACd,cAAc,GAAG,MAAM,CAAC;AAAA,MACxB,QAAQ,GAAG,MAAM;AAAA,MACjB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,eAAe;AAAA,MACf,UAAU;AAAA,MACV,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,OAAO;AAAA,IACT,CAAC;AACD,SAAK,YAAYA,GAAE;AAGnB,UAAM,SAAS,SAAS,cAAc,MAAM;AAC5C,WAAO,aAAa,uBAAuB,EAAE;AAC7C,WAAO,OAAO,OAAO,OAAO;AAAA,MAC1B,UAAU;AAAA,MACV,OAAO;AAAA,MACP,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,IAClB,CAAC;AACD,IAAAA,IAAG,YAAY,MAAM;AAGrB,UAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,YAAQ,aAAa,wBAAwB,EAAE;AAC/C,WAAO,OAAO,QAAQ,OAAO;AAAA,MAC3B,UAAU;AAAA,MACV,KAAK;AAAA,MACL,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB,CAAC;AACD,SAAK,YAAY,OAAO;AAGxB,UAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,cAAU,aAAa,0BAA0B,EAAE;AACnD,WAAO,OAAO,UAAU,OAAO;AAAA,MAC7B,UAAU;AAAA,MACV,KAAK,GAAG,GAAG;AAAA,MACX,MAAM,GAAG,GAAG;AAAA,MACZ,OAAO,GAAG,GAAG;AAAA,MACb,SAAS;AAAA,MACT,UAAU;AAAA,IACZ,CAAC;AACD,IAAAA,IAAG,YAAY,SAAS;AAExB,UAAM,KAAqB;AAAA,MACzB;AAAA,MACA;AAAA,MACA,IAAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,IACZ;AAEA,IAAAA,IAAG,iBAAiB,cAAc,MAAM,OAAO,EAAE,CAAC;AAClD,IAAAA,IAAG,iBAAiB,cAAc,MAAM,SAAS,EAAE,CAAC;AACpD,IAAAA,IAAG,iBAAiB,SAAS,CAAC,MAAM;AAClC,QAAE,gBAAgB;AAClB,QAAE,eAAe;AACjB,YAAM,OAAO,OAAO,IAAI,WAAW;AACnC,YAAM,MAAM,OAAO,GAAG,QAAQ;AAC9B,UAAI,IAAK,mBAAkB,aAAa,IAAI,EAAE;AAAA,IAChD,CAAC;AACD,IAAAA,IAAG,iBAAiB,eAAe,CAAC,MAAM;AACxC,QAAE,gBAAgB;AAClB,QAAE,eAAe;AACjB,YAAM,OAAO,OAAO,IAAI,WAAW;AACnC,UAAI,CAAC,QAAQ,KAAK,UAAU,EAAG;AAC/B,SAAG,YAAY,GAAG,WAAW,KAAK,KAAK;AACvC,iBAAW,EAAE;AACb,UAAI,GAAG,SAAU,aAAY,EAAE;AAAA,IACjC,CAAC;AAED,YAAQ,YAAY,IAAI;AACxB,WAAO;AAAA,EACT;AAIA,QAAM,aAAa,CAAC,OAA6B;AAC/C,UAAM,OAAO,OAAO,IAAI,GAAG,WAAW;AACtC,QAAI,CAAC,MAAM,OAAQ;AACnB,UAAM,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC;AAC9D,OAAG,WAAW;AACd,UAAM,MAAM,KAAK,GAAG;AACpB,UAAM,IAAI,WAAW,IAAI,IAAI;AAE7B,OAAG,GAAG,MAAM,kBAAkB;AAC9B,OAAG,GAAG,MAAM,kBAAkB,mBAAmB,EAAE,EAAE,KAAK,EAAE,EAAE;AAC9D,OAAG,GAAG,MAAM,QAAQ,EAAE;AAEtB,QAAI,GAAG,aAAa,IAAI,MAAM;AAC5B,SAAG,WAAW,IAAI;AAClB,SAAG,OAAO,YAAY;AACtB,YAAMC,OAAMC,qBAAoB,SAAS,IAAI,IAAI,CAAC;AAClD,MAAAD,KAAI,aAAa,SAAS,OAAO,IAAI,CAAC;AACtC,MAAAA,KAAI,aAAa,UAAU,OAAO,IAAI,CAAC;AACvC,SAAG,OAAO,YAAYA,IAAG;AAAA,IAC3B;AAEA,QAAI,KAAK,SAAS,GAAG;AACnB,SAAG,QAAQ,cAAc,OAAO,KAAK,MAAM;AAC3C,SAAG,QAAQ,MAAM,UAAU;AAAA,IAC7B,OAAO;AACL,SAAG,QAAQ,cAAc;AACzB,SAAG,QAAQ,MAAM,UAAU;AAAA,IAC7B;AAAA,EACF;AAIA,QAAM,eAAe,CAAC,OAA6B;AACjD,UAAM,IAAI,GAAG;AACb,QAAI,CAAC,KAAK,CAAC,EAAE,aAAa;AACxB,SAAG,KAAK,MAAM,UAAU;AACxB;AAAA,IACF;AACA,UAAM,IAAI,EAAE,sBAAsB;AAClC,QAAI,EAAE,UAAU,KAAK,EAAE,WAAW,GAAG;AACnC,SAAG,KAAK,MAAM,UAAU;AACxB;AAAA,IACF;AAGA,UAAM,KAAK,OAAO;AAClB,OAAG,KAAK,MAAM,MAAM,GAAG,EAAE,MAAM,KAAK;AACpC,OAAG,KAAK,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAQ,KAAK;AAE7C,OAAG,KAAK,MAAM,UAAU;AAAA,EAC1B;AAEA,QAAM,SAAS,MAAM;AACnB,eAAW,MAAM,WAAW,OAAO,EAAG,cAAa,EAAE;AAAA,EACvD;AAEA,QAAM,kBAAkB,CAAC,gBAA8B;AACrD,UAAM,OAAO,OAAO,IAAI,WAAW;AACnC,QAAI,CAAC,MAAM,QAAQ;AACjB,sBAAgB,WAAW;AAC3B;AAAA,IACF;AACA,QAAI,KAAK,WAAW,IAAI,WAAW;AACnC,QAAI,CAAC,IAAI;AACP,WAAK,eAAe,WAAW;AAC/B,iBAAW,IAAI,aAAa,EAAE;AAC9B,gBAAU;AACV,gBAAU;AAAA,IACZ;AACA,QAAI,GAAG,YAAY,KAAK,OAAQ,IAAG,WAAW;AAC9C,eAAW,EAAE;AACb,OAAG,SAAS,qBAAqB,kBAAkB,WAAW,CAAC;AAC/D,iBAAa,EAAE;AAAA,EACjB;AAEA,QAAM,kBAAkB,CAAC,gBAA8B;AACrD,UAAM,KAAK,WAAW,IAAI,WAAW;AACrC,QAAI,CAAC,GAAI;AACT,OAAG,KAAK,OAAO;AACf,eAAW,OAAO,WAAW;AAC7B,QAAI,WAAW,SAAS,GAAG;AACzB,gBAAU;AACV,gBAAU;AAAA,IACZ;AAAA,EACF;AAIA,QAAM,SAAS,CAAC,QAA4B;AAC1C,UAAM,MAAM,IAAI,UAAU;AAC1B,QAAI,CAAC,OAAO,QAAQ,IAAI,IAAI,EAAE,EAAG,QAAO;AACxC,YAAQ,IAAI,IAAI,EAAE;AAClB,YAAQ,KAAK,GAAG;AAChB,WAAO;AAAA,EACT;AAIA,MAAI,gBAA8C;AAElD,QAAM,QAAkB;AAAA,IACtB,QAAQ,MAAM;AACZ,cAAQ,SAAS;AACjB,cAAQ,MAAM;AACd,iBAAW,KAAK,KAAM,QAAO,CAAC;AAC9B,eAAS;AAAA,IACX;AAAA,IACA,OAAO,KAAK;AACV,UAAI,CAAC,OAAO,GAAG,EAAG;AAClB,eAAS;AAAA,IACX;AAAA,IACA,UAAU,UAAU;AAClB,YAAM,IAAI,QAAQ,UAAU,CAAC,MAAM,EAAE,OAAO,QAAQ;AACpD,UAAI,MAAM,GAAI;AACd,cAAQ,OAAO,GAAG,CAAC;AACnB,cAAQ,OAAO,QAAQ;AACvB,eAAS;AAAA,IACX;AAAA,IACA,QAAQ;AACN,cAAQ,SAAS;AACjB,cAAQ,MAAM;AACd,aAAO,MAAM;AACb,iBAAW,MAAM,MAAM,KAAK,WAAW,KAAK,CAAC,EAAG,iBAAgB,EAAE;AAClE,gBAAU,CAAC;AACX,oBAAc;AACd,mBAAa;AAAA,IACf;AAAA,IACA,mBAAmB,CAAC,OAAO,OAAO,IAAI,EAAE,KAAK,CAAC;AAAA,IAC9C,sBAAsB,CAAC,OACrB,QAAQ,OAAO,CAAC,OAAO,EAAE,UAAU,QAAQ,EAAE;AAAA,IAC/C,YAAY,MAAM,QAAQ,MAAM;AAAA,IAChC,cAAc,SAAS;AACrB,aAAO,QAAQ,MAAM,CAAC,QAAmB;AACvC,cAAM,OAAO,GAAG;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IACA,YAAY,MAAM;AAChB,YAAM,QAAQ,KAAK,UAAU,MAAM,cAAc,KAAK,OAAO,IAAI,MAAM;AAAA,MAAC;AACxE,YAAME,SAAQ,YAA2B;AACvC,YAAI;AACF,gBAAM,OAAO,KAAK,aAAa;AAC/B,cAAI;AACJ,cAAI,SAAS,aAAa;AACxB,qBAAS,EAAE,UAAU,KAAK,mBAAmB,EAAE,KAAK,GAAG,EAAE;AAAA,UAC3D,WAAW,SAAS,YAAY;AAC9B,qBAAS,EAAE,OAAO,KAAK,YAAY,EAAE;AAAA,UACvC,OAAO;AACL,qBAAS,EAAE,OAAO,KAAK,SAAS,EAAE;AAAA,UACpC;AACA,gBAAM,QAAQ,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,CAAC;AAAA,QAClD,SAAS,KAAK;AACZ,eAAK,UAAU,GAAG;AAAA,QACpB;AAAA,MACF;AACA,WAAKA,OAAM;AACX,sBAAgBA;AAChB,aAAO,MAAM;AACX,cAAM;AACN,YAAI,kBAAkBA,OAAO,iBAAgB;AAAA,MAC/C;AAAA,IACF;AAAA,IACA,MAAM,UAAU;AACd,UAAI,cAAe,OAAM,cAAc;AAAA,IACzC;AAAA,IAEA,IAAI,cAA8B;AAChC,aAAO;AAAA,QACL,QAAQ,OAAO;AAAA,QACf,QAAQ,OAAO;AAAA,QACf;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,MAAM;AACd,eAAS;AAAA,QACP,QAAQ,KAAK,WAAW,SAAY,KAAK,SAAS,OAAO;AAAA,QACzD,QAAQ,KAAK,WAAW,SAAY,KAAK,SAAS,OAAO;AAAA,MAC3D;AACA,eAAS;AAAA,IACX;AAAA,IACA,aAAa;AACX,UAAI,CAAC,QAAQ,OAAQ;AACrB,oBAAc,eAAe,QAAQ,SAAS,IAAI,KAAK,cAAc;AACrE,eAAS;AAAA,QACP,GAAG;AAAA,QACH,QAAQ,gBAAgB,KAAK,OAAO,QAAQ,WAAW;AAAA,MACzD;AACA,eAAS;AAAA,IACX;AAAA,IACA,aAAa;AACX,UAAI,CAAC,QAAQ,OAAQ;AACrB,oBAAc,eAAe,KAAK,QAAQ,SAAS,IAAI,cAAc;AACrE,eAAS;AAAA,QACP,GAAG;AAAA,QACH,QAAQ,gBAAgB,KAAK,OAAO,QAAQ,WAAW;AAAA,MACzD;AACA,eAAS;AAAA,IACX;AAAA,IACA,eAAe,IAAI;AACjB,gBAAU,IAAI,EAAE;AAChB,aAAO,MAAM;AACX,kBAAU,OAAO,EAAE;AAAA,MACrB;AAAA,IACF;AAAA,IACA,IAAI,UAAU;AACZ,aAAO;AAAA,IACT;AAAA,IACA,WAAW,GAAG;AACZ,UAAI,iBAAiB,EAAG;AACxB,qBAAe;AACf,cAAQ,MAAM,UAAU,IAAI,KAAK;AACjC,UAAI,EAAG,QAAO;AACd,mBAAa;AAAA,IACf;AAAA,IACA,UAAU;AACR,YAAM,MAAM;AACZ,gBAAU;AACV,gBAAU;AACV,cAAQ,OAAO;AACf,sBAAgB;AAChB,gBAAU,MAAM;AAAA,IAClB;AAAA,EACF;AAEA,SAAO;AACT;;;ACpoBO,IAAM,sBAAN,cAAkC,MAAM;AAAA,EAC7C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;;;AC3FO,SAAS,aAAa,SAAsC;AACjE,QAAM,gBAAgB;AACtB,QAAM,cAAc;AACpB,QAAM,UAAmD,CAAC;AAC1D,QAAM,aAA0B,CAAC;AACjC,QAAM,eAA4B,CAAC;AAEnC,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,QAAQC,MAAmC;AAClD,QAAI,OAA0B;AAC9B,eAAW,KAAK,SAAS;AACvB,UAAI,CAAC,EAAE,KAAK,UAAUA,IAAG,EAAG;AAC5B,UAAI,CAAC,QAAQ,EAAE,WAAW,KAAK,UAAU;AACvC,eAAO,EAAE,MAAM,EAAE,MAAM,UAAU,EAAE,SAAS;AAAA,MAC9C;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,WAAS,IAAI,MAAY,WAAW,GAAS;AAC3C,aAAS,IAAI;AACb,UAAM,MAAM,QAAQ,UAAU,CAAC,MAAM,EAAE,KAAK,OAAO,KAAK,EAAE;AAC1D,QAAI,OAAO,EAAG,SAAQ,OAAO,KAAK,CAAC;AACnC,YAAQ,KAAK,EAAE,MAAM,SAAS,CAAC;AAAA,EACjC;AAEA,WAAS,OAAO,IAAkB;AAChC,UAAM,MAAM,QAAQ,UAAU,CAAC,MAAM,EAAE,KAAK,OAAO,EAAE;AACrD,QAAI,OAAO,EAAG,SAAQ,OAAO,KAAK,CAAC;AACnC,UAAM,EAAE,MAAM,IAAI,QAAQ,QAAQ,IAAI,SAAS;AAC/C,UAAM,MAAM,MAAM,MAAM,SAAS,CAAC,KAAK;AACvC,QAAI,KAAK,OAAO,GAAI,SAAQ,QAAQ,KAAK,WAAW,QAAQ;AAAA,EAC9D;AAEA,WAAS,IAAI,IAA8B;AACzC,WAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,OAAO,EAAE,GAAG;AAAA,EAChD;AAEA,WAAS,OAAwB;AAC/B,WAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,EAClC;AAEA,WAAS,WAAW,OAAyC;AAC3D,UAAM,QAA0B,CAAC,KAAK;AACtC,QAAI,UAAU;AACd,aAAS,QAAQ,GAAG,QAAQ,IAAI,SAAS;AACvC,YAAM,OAAO,IAAI,QAAQ,EAAE;AAC3B,UAAI,CAAC,MAAM,OAAQ;AACnB,YAAM,cAAc,KAAK,OAAO,QAAQ,GAAG;AAC3C,UAAI,CAAC,YAAa;AAClB,YAAM,QAAQ,WAAW;AACzB,gBAAU;AAAA,IACZ;AACA,WAAO;AAAA,EACT;AAEA,WAAS,SAASA,MAAsB;AACtC,UAAM,QAAQ,QAAQA,IAAG;AACzB,QAAI,CAAC,MAAO;AACZ,UAAM,MAAM,WAAW,UAAU,CAAC,MAAM,QAAQ,GAAGA,IAAG,CAAC;AACvD,QAAI,OAAO,EAAG,YAAW,OAAO,KAAK,CAAC;AACtC,eAAW,QAAQA,IAAG;AACtB,QAAI,WAAW,SAAS,YAAa,YAAW,SAAS;AACzD,YAAQ,QAAQ,OAAOA,IAAG;AAC1B,UAAM,QAAwB,EAAE,IAAI,MAAM,KAAK,IAAI,KAAAA,KAAI;AACvD,UAAM,EAAE,KAAK,IAAI,QAAQ,QAAQ,KAAK,SAAS;AAC/C,QAAI,SAAS,UAAU,SAAS,cAAc;AAC5C,cAAQ,QAAQ,KAAK,WAAW,aAAa,WAAW,KAAK,CAAC;AAAA,IAChE,OAAO;AACL,cAAQ,QAAQ,KAAK,WAAW,SAAS,KAAK;AAAA,IAChD;AAAA,EACF;AAEA,WAAS,UAAgC;AACvC,WAAO;AAAA,EACT;AAEA,WAAS,YAAkC;AACzC,WAAO;AAAA,EACT;AAEA,WAAS,eAAeA,MAAsB;AAC5C,UAAM,MAAM,aAAa,UAAU,CAAC,MAAM,QAAQ,GAAGA,IAAG,CAAC;AACzD,QAAI,OAAO,GAAG;AACZ,mBAAa,OAAO,KAAK,CAAC;AAAA,IAC5B,OAAO;AACL,mBAAa,QAAQA,IAAG;AAAA,IAC1B;AACA,qBAAiB;AAAA,EACnB;AAEA,WAAS,WAAWA,MAAyB;AAC3C,WAAO,aAAa,KAAK,CAAC,MAAM,QAAQ,GAAGA,IAAG,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,IACA;AAAA,EACF;AACF;;;AC9KO,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;;;ACZA,SAAS,MAAM,KAAK,QAAQ,eAAoC;AAChE,SAAS,cAAc;AACvB,SAAS,KAAK,iBAAiB;AAC/B,SAAS,gBAAgB;;;ACClB,SAAS,WAAW,MAAe,OAAuB;AAC/D,QAAM,WAA8B,CAAC;AACrC,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;AAC3C,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;AACA,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;AAAA,QACJ,KAAqB;AAAA,QACtB;AAAA,MACF;AACA;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;AAAC,MAAC,KAAqB,WAAW,OAAO,QAAQ;AACjD;AAAA,IACF;AACA,SAAK,aAAa,KAAK,OAAO,QAAQ,CAAC;AAAA,EACzC;AACA,SAAO,MAAM,SAAS,QAAQ,CAAC,OAAO,GAAG,CAAC;AAC5C;;;ACrDA,SAAS,gBAAgB;AACzB;AAAA,EACE;AAAA,EACA;AAAA,EAEA;AAAA,OACK;AACP,SAAS,qBAAoC;AAE7C,IAAM,sBAAN,cAAkC,UAAU;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,UAAoB;AAC9B,UAAM,QAAQ;AACd,QAAI,SAAS,SAAS,SAAS,OAAO;AACpC,YAAM,IAAI,MAAM,6CAA6C;AAAA,IAC/D;AAAA,EACF;AAAA,EAES,OAAO,OAAgB,CAAC,UAAU,SAAS,GAAwB;AAC1E,QAAI,aAAa,KAAK,SAAS,cAAc,KAAK,OAAQ,QAAO;AACjE,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,MAAM,cAAc,QAAQ;AACjC,SAAK,IAAI,aAAa,eAAe,MAAM;AAC3C,QAAI,UAAW,MAAK,IAAI,aAAa,SAAS,SAAS;AACvD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,OAAO,UAAoB,WAAoB;AAC7C,UAAMC,MAAK,cAAc,QAAQ;AACjC,IAAAA,IAAG,aAAa,eAAe,MAAM;AACrC,QAAI,UAAW,CAAAA,IAAG,aAAa,SAAS,SAAS;AACjD,WAAOA;AAAA,EACT;AACF;AAEO,IAAM,OAAO,UAAU,mBAAmB;;;AC1B1C,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;;;ACbA,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;;;AC/BD,IAAM,aACJ;AAIK,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;;;ACrBA,SAAS,iBAAiBC,4BAA2B;;;ACKrD,IAAM,aACJ;AAEF,IAAM,qBAAqB;AAcpB,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;AASO,SAAS,YACd,OACA,UAGI,CAAC,GACW;AAChB,QAAM,YACJ,QAAQ,QAAQ,CAAC,QAAQ,YACrB,wCAAwC,QAAQ,IAAI,IAAI,QAAQ,aAAa,EAAE,oBAC/E;AACN,SAAO;AAAA;AAAA,cAEK,GAAG,YAAY,QAAQ,WAAW,QAAQ,UAAU,CAAC;AAAA;AAAA;AAAA,cAGrD,SAAS;AAAA,SACd,KAAK;AAAA;AAAA;AAGd;;;ADjEO,SAAS,eAAe,MAA8B;AAC3D,QAAM,QAAQ,WAAW,IAAI;AAC7B,QAAMC,OAAMC,qBAAoB,MAAM,IAAI;AAC1C,EAAAD,KAAI,aAAa,eAAe,MAAM;AACtC,EAAAA,KAAI,aAAa,SAAS,GAAG,oBAAoB,MAAM,IAAI,CAAC;AAC5D,SAAOA;AACT;AA6BO,SAAS,gBAAgB,MAAkC;AAChE,QAAM,QAAQ,WAAW,IAAI;AAC7B,SAAO;AAAA,IACL,OAAO,KAAK,MAAM,MAAM,GAAG,uBAAuB,MAAM,IAAI,CAAC,CAAC;AAAA,IAC9D,EAAE,WAAW,MAAM,KAAK;AAAA,EAC1B;AACF;AAEO,SAAS,aAAa,MAAkC;AAC7D,QAAM,QAAQ,WAAW,IAAI;AAC7B,SAAO;AAAA;AAAA,cAEK,GAAG,cAAc,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA;AAAA,8BAEjB,IAAI;AAAA,SACzB,KAAK,MAAM,IAAI,CAAC,IAAI,MAAM,KAAK;AAAA;AAAA;AAGxC;;;AEhDO,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;;;ACpCA,YAAY,gBAAgB;;;ACA5B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA6BP,SAAS,eAAkB,SAAgD;AACzE,QAAM,UAAW,QAAQ,EAAE,SAAS,QAAQ,EAAE;AAC9C,MAAI,QAAQ;AACZ,QAAME,OAAM,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,OAAOA,KAAI;AACjB,UAAM,OAAQ,WAAW,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,MAAAA,KAAI,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,GAAGA,KAAI,OAAO,EAAG,CAAAA,KAAI,UAAU;AAAA,EAC3C;AAEA,SAAO;AAAA,IACL;AAAA,IACA,KAAK,IAAI,MAAMA,MAAK;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,OAAO,QAAQ,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,SAAS,YAAY;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,MAAM,aAAa,MAAM,IAAI,SAAmB,CAAC,CAAC;AAAA,IACxE;AAAA,IACA,OAAO,KAAa;AAClB,aAAO,SAASA,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,OAAQ,WAAW,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,MAAK,+CAA+C,CAAC,GAAG;AACjE,aAAO;AAAA,IACT,CAAC;AACD,eAAW,MAAM,IAAK,MAAK,UAAU,CAAC;AAAA,EACxC;AAEA,QAAM,QAAQ,CAAC,QAAiB;AAC9B,QAAI,WAAW,GAAG,EAAG,QAAQ,IAAc,UAAU,CAAC;AACtD,WACEA,SACA,iBAAiB,SAAS,GAAa,EAAE,UAAU,CAAC;AAAA,EACxD;AAEA,QAAM,SAAS,CAAC,SAAkB;AAChC,UAAM,OAAQ,WAAW,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,MAAK,+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,gBACb,QAAQ,WAAW,EAAiC,KAAK,CAAC,MAAM;AAC/D,QAAI,SAAS,CAAC,EAAE;AAChB,QAAI,SAAS,EAAE,KAAK,EAAG,UAAS,CAAC,CAAC,MAAM,EAAE,KAAK;AAAA,aACtC,WAAW,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,eAAe;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,IAAI;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,YAAY;AAC5B,eAAQA,SAAgC,KAAK;AAC7C,cAAM,UAAU,OAAQA,SAAkC,OAAO;AACjE,YAAI,QAAS,YAAW,IAAI,YAAY,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,cAAc;AAC1C,MAAI;AAEJ,QAAM,kBAAkB,MAAc,MAAM,IAAI;AAEhD,QAAM,OAAO,CAAC,UAA4B;AACxC,mBAAe,MAAM;AACnB,UAAI,WAAW,cAAc,QAAS;AACtC,sBAAgB;AAChB,qBAAe;AACf,YAAM,eAAe,gBAAgB;AACrC,YAAM,EAAE,aAAa,OAAO,IAAI;AAAA,QAC9BA;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACR;AACA,YAAM,aAAa,OAAO,WAAW;AAGrC,UAAI,CAAC,WAAY;AACjB,sBAAgB;AAChB,YAAM,SAAS;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,cAAc,QAAS;AACtC,eAAS,cAAc;AACtB,MAAC,MAAuC;AAAA,QACvC,YAAY,MAAM;AAAA,QAClB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,OAAO;AACL,UAAI,WAAW,cAAc,QAAS;AACtC,iBAAW,gBAAgB;AAC3B,eAAS,cAAc;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,SAAS,wBAAwC;AAI1C,IAAM,iBAAiB,iBAA2B,CAAC,MAAM,CAAC;;;AFI1D,SAAS,iBACd,QAAkC,CAAC,GACjB;AAClB,SAAO;AAAA,IACM;AAAA,IACA;AAAA,IACX;AAAA,IACA;AAAA,EACF;AACF;;;AGdO,SAAS,YACd,MACA,OACS;AACT,SAAO,WAAW,MAAM,KAAK;AAC/B;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,WAAW,MAAM,KAAK,CAAC;AAAA,IACvC;AAAA,IACA,aAAa;AACX,iBAAW,SAAS,IAAI,OAAO,EAAG,OAAM;AACxC,UAAI,MAAM;AAAA,IACZ;AAAA,EACF;AACF;;;AC1BA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiBC;AAAA,OAEZ;;;ACXP,IAAM,WAAW,oBAAI,IAAI,CAAC,aAAa,WAAW,QAAQ,KAAK,CAAC;AAczD,SAAS,aAAa,SAAmC;AAC9D,QAAM,EAAE,WAAW,UAAU,cAAc,WAAW,IAAI;AAC1D,QAAM,OAAO,QAAQ,QAAQ;AAE7B,QAAM,YAAY,CAAC,MAA2B;AAC5C,QAAI,CAAC,SAAS,IAAI,EAAE,GAAG,EAAG;AAC1B,iBAAa;AACb,UAAM,QAAQ,SAAS;AACvB,QAAI,MAAM,WAAW,EAAG;AAExB,UAAM,SACJ,UAAU,YAAY,aAAa,aAC9B,UAAU,YAAY,EAAiB,gBACxC,SAAS;AACf,QAAI,EAAE,kBAAkB,aAAc;AAEtC,UAAM,WAAW,gBAAgB,WAAW;AAC5C,QAAI,UAAU;AACZ,QAAE,eAAe;AACjB,YAAMC,OAAM,EAAE,QAAQ,aAAa,EAAE,QAAQ,QAAQ,MAAM,SAAS,IAAI;AACxE,gBAAU,OAAOA,IAAG;AACpB;AAAA,IACF;AAEA,UAAM,MAAM,MAAM,QAAQ,MAAM;AAChC,QAAI,QAAQ,IAAI;AACd,UAAI,UAAU,SAAS,MAAM,GAAG;AAC9B,UAAE,eAAe;AACjB,cAAM,QACJ,EAAE,QAAQ,aAAa,EAAE,QAAQ,QAAQ,MAAM,SAAS,IAAI;AAC9D,kBAAU,OAAO,KAAK;AAAA,MACxB;AACA;AAAA,IACF;AAEA,MAAE,eAAe;AACjB,YAAQ,EAAE,KAAK;AAAA,MACb,KAAK;AACH,YAAI,QAAQ,GAAG;AACb,cAAI,aAAc,cAAa,MAAM;AAAA,mBAC5B,KAAM,WAAU,OAAO,MAAM,SAAS,CAAC;AAAA,QAClD,OAAO;AACL,oBAAU,OAAO,MAAM,CAAC;AAAA,QAC1B;AACA;AAAA,MACF,KAAK;AACH,YAAI,QAAQ,MAAM,SAAS,GAAG;AAC5B,cAAI,KAAM,WAAU,OAAO,CAAC;AAAA,QAC9B,OAAO;AACL,oBAAU,OAAO,MAAM,CAAC;AAAA,QAC1B;AACA;AAAA,MACF,KAAK;AACH,kBAAU,OAAO,CAAC;AAClB;AAAA,MACF,KAAK;AACH,kBAAU,OAAO,MAAM,SAAS,CAAC;AACjC;AAAA,IACJ;AAAA,EACF;AAEA,YAAU,iBAAiB,WAAW,SAAS;AAC/C,QAAM,gBAA2B,CAAC;AAClC,aAAW,OAAO,QAAQ,gBAAgB,CAAC,GAAG;AAC5C,QAAI,iBAAiB,WAAW,SAAS;AACzC,kBAAc,KAAK,MAAM,IAAI,oBAAoB,WAAW,SAAS,CAAC;AAAA,EACxE;AAEA,SAAO,MAAM;AACX,cAAU,oBAAoB,WAAW,SAAS;AAClD,eAAW,KAAK,cAAe,GAAE;AAAA,EACnC;AACF;AAEA,SAAS,UAAU,OAAsB,KAAmB;AAC1D,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,CAAC,EAAE,WAAW,MAAM,MAAM,IAAI;AAAA,EACtC;AACA,QAAM,GAAG,EAAE,MAAM;AACnB;;;AC7FO,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;;;AChBO,IAAM,kBACX;AAEK,IAAM,wBACX;AAEK,IAAM,8BACX;AAEK,IAAM,yBACX;;;ACgBF,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;;;ACxDD,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,iBAAiBC,MAAgB,UAA8B;AAC7E,MAAI,iBAAiB,IAAIA,KAAI,IAAI,GAAG;AAClC,WAAO,CAAC,qBAAqBA,IAAG;AAAA,EAClC;AACA,MAAIA,KAAI,SAAS,UAAU,UAAU;AACnC,UAAM,OAAO,SAAS,IAAI,QAAQA,KAAI,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;;;AC5BA,IAAM,YACJ;AAIF,IAAM,yBACJ;AA4CK,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;AAIO,SAAS,OAAO,MAAc,WAAwC;AAC3E,SAAO,kBAAkB,GAAG,WAAW,SAAS,CAAC;AAAA,OAC5C,IAAI;AAAA;AAEX;AAWO,SAAS,mBACd,MACA,WACgB;AAChB,SAAO;AAAA,YACG,GAAG,wBAAwB,SAAS,CAAC;AAAA;AAAA,OAE1C,IAAI;AAAA;AAEX;;;AC5EA,IAAM,cAAc;AACpB,IAAM,iBAAiB;AAKhB,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;AAgBO,SAAS,OAAO,SAAwC;AAC7D,SAAO;AAAA,MACH,QAAQ,WAAW,OAAO;AAAA,kBACd,WAAW,IAAI,QAAQ,KAAK;AAAA,MACxC,QAAQ,WACN,mBAAmB,cAAc;AAAA,aAC5B,QAAQ,QAAQ;AAAA,aAErB,OAAO;AAAA,MACT,QAAQ,YAAY,OAClB,OAAO,QAAQ,aAAa,WAC1B,mBAAmB,QAAQ,QAAQ,IACnC,QAAQ,WACV,OAAO;AAAA;AAEf;;;ACFA,IAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AACF;AAMO,SAAS,cAAc,SAA+C;AAC3E,QAAM,EAAE,KAAK,QAAQ,OAAO,SAAS,OAAO,WAAW,IAAI;AAC3D,QAAM,SAAS,iBAAiB,MAAM;AACtC,QAAM,gBAAgB,SAAS,GAAG,OAAO,IAAI,KAAK,OAAO,EAAE;AAE3D,QAAM,UAAU,MAAM,IAAI,MAAM,SAAS,MAAM;AAC/C,QAAM,UAAU,MAAM;AACpB,QAAI,UAAU,KAAK,QAAQ,EAAE,OAAO,WAAW,OAAO,IAAI,EAAE,MAAM,CAAC;AAAA,EACrE;AACA,QAAM,gBAAgB,MAAM;AAC1B,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;AAEA,SAAO;AAAA;AAAA;AAAA,cAGK,GAAG,cAAc,UAAU,UAAU,cAAc,UAAU,CAAC;AAAA;AAAA;AAAA,4BAGhD,OAAO,IAAI;AAAA,0BACb,OAAO,EAAE;AAAA,cACrB,SAAS,qBAAqB,EAAE;AAAA,eAC/B,OAAO;AAAA,oBACF,OAAO;AAAA,oBACP,aAAa;AAAA,eAClB,OAAO;AAAA,cACR,aAAa;AAAA;AAAA,QAEnB,OAAO;AAAA,IACP;AAAA,IACA,OAAO;AAAA,EACT,CAAC,CAAC;AAAA;AAAA;AAGR;;;ACpHA,IAAM,cAAc;AAEpB,IAAM,gBAAgB;AAqCf,SAAS,aACd,MACA,WACgB;AAChB,SAAO,gBAAgB,GAAG,aAAa,SAAS,CAAC,IAAI,IAAI;AAC3D;AASO,SAAS,WACd,MACA,WACgB;AAChB,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,iBAAiB,GAAG,eAAe,SAAS,CAAC,IAAI,IAAI;AAC9D;;;AVLA,IAAM,WAA+C;AAAA,EACnD,aAAa;AAAA,EACb,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,0BAA0B;AAAA,EAC1B,gBAAgB;AAAA,EAChB,aAAaC;AAAA,EACb,eAAeC;AAAA,EACf,eAAe;AAAA,EACf,MAAM;AACR;AAEA,SAAS,QAAQC,OAAqD;AACpE,SAAOA,QAAO,SAASA,KAAI,IAAI;AACjC;AAEA,SAAS,YAAY,UAA0C;AAC7D,QAAM,OAAO,SAAS,QAClB,GAAG,SAAS,KAAK,SAAM,SAAS,KAAK,KACrC,SAAS;AACb,SAAO;AAAA,YACG,GAAG,2CAA2C,MAAM,CAAC;AAAA;AAAA;AAAA,MAG3D,IAAI;AAAA;AAEV;AAEA,SAAS,YAAYC,MAAgC;AACnD,SAAO;AAAA,YACG,GAAG,iCAAiC,KAAK,CAAC;AAAA;AAAA;AAAA,MAGhDA,KAAI,IAAI,KAAKA,KAAI,EAAE;AAAA;AAEzB;AAYA,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,MAAM,GAAG,UAAU;AAAA,MACvB,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,UAAU,QAAQ,WAAW,IAAI,MAAM;AAAA,QACvC,4BAA4B,OAAO;AAAA,QACnC,cAAc,OAAO,aAAa,OAAO;AAAA,MAC3C;AAAA,IACF,CAAC;AAED,QAAI;AACJ,UAAM,WAAW,QAAQ,OAAO,IAAI;AACpC,QAAI,UAAU;AACZ,YAAMC,OAAMC,qBAAoB,QAAQ;AACxC,MAAAD,KAAI,aAAa,eAAe,MAAM;AACtC,MAAAA,KAAI,aAAa,SAAS,kBAAkB;AAC5C,YAAM,OAAO;AAAA,QACX;AAAA,QACA;AAAA,UACE,OACE;AAAA,UACF,OAAO,EAAE,aAAa,aAAa,eAAe,OAAO;AAAA,QAC3D;AAAA,QACA,CAACA,IAAG;AAAA,MACN;AACA,gBAAU;AAAA,IACZ;AAGA,UAAM,YAAY,GAAG,QAAQ;AAAA,MAC3B,OAAO;AAAA,MACP,MAAM,OAAO;AAAA,IACf,CAAC;AACD,QAAI,QAAS,KAAI,OAAO,OAAO;AAC/B,QAAI,OAAO,SAAS;AACpB,QAAI,OAAO,MAAM;AACf,YAAM,MAAM,GAAG,OAAO;AAAA,QACpB,OACE;AAAA,QACF,OAAO,EAAE,aAAa,mBAAmB;AAAA,QACzC,MAAM,OAAO;AAAA,MACf,CAAC;AACD,UAAI,OAAO,GAAG;AAAA,IAChB;AAEA,QAAI,cAAoD;AACxD,UAAM,SAAiC;AAAA,MACrC,SAAS,MAAM,YAAY;AACzB,YAAI,gBAAgB,MAAM;AACxB,uBAAa,WAAW;AACxB,wBAAc;AAAA,QAChB;AACA,kBAAU,cAAc;AACxB,YAAI,cAAc,aAAa,GAAG;AAChC,wBAAc,WAAW,MAAM;AAC7B,sBAAU,cAAc,OAAO;AAC/B,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,MAAM,SAAS,OAAO,QAAQ;AAAA,MACpC,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;AAIA,SAAS,gBACP,KACA,UACgB;AAChB,SAAO,OAAO,SAAS,IAAI,CAAC,WAAW;AACrC,UAAM,OAAkB,EAAE,MAAM,OAAO,MAAM,IAAI,UAAU,MAAM,EAAE;AACnE,WAAO;AAAA,QACH,cAAc;AAAA,MACd;AAAA,MACA,QAAQ;AAAA,MACR,OAAO,YAAY,MAAM;AAAA,MACzB,SAAS,gBAAgB,OAAO,IAAI;AAAA,IACtC,CAAC,CAAC;AAAA;AAAA,EAEN,CAAC,CAAC;AACJ;AAEA,SAAS,gBACP,KACA,OACA,UACuB;AACvB,MAAI,SAAS,WAAW,EAAG,QAAO;AAClC,SAAO;AAAA;AAAA,QAED,WAAW,KAAK,CAAC;AAAA;AAAA,UAEf,gBAAgB,KAAK,QAAQ,CAAC;AAAA;AAAA;AAAA;AAIxC;AAEA,SAAS,cACP,KACA,OACA,UACuB;AACvB,MAAI,SAAS,WAAW,EAAG,QAAO;AAClC,SAAO;AAAA;AAAA,QAED,WAAW,KAAK,CAAC;AAAA;AAAA,UAEf,gBAAgB,KAAK,QAAQ,CAAC;AAAA;AAAA;AAAA;AAIxC;AAEA,SAAS,YACP,KACA,OACuB;AACvB,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO;AAAA;AAAA,QAED,WAAW,eAAe,KAAK,CAAC;AAAA;AAAA,UAE9B,MAAM;AAAA,IACN,CAAC,SACC;AAAA,gBACI,cAAc;AAAA,MACd;AAAA,MACA,QAAQ,EAAE,MAAM,QAAQ,IAAI,KAAK,GAAG;AAAA,MACpC,OAAO,YAAY,IAAI;AAAA,MACvB,SAAS,gBAAgB,MAAM;AAAA,IACjC,CAAC,CAAC;AAAA;AAAA,EAER,CAAC;AAAA;AAAA;AAAA;AAIT;AAEA,SAAS,WACP,KACA,UACA,OACgB;AAChB,MAAI,SAAS,WAAW,GAAG;AACzB,WAAO;AAAA;AAAA,UAED,WAAW,eAAe,OAAO,CAAC;AAAA,UAClC,aAAa,QAAQ,eAAe,qBAAqB,CAAC;AAAA;AAAA;AAAA,EAGlE;AACA,SAAO;AAAA;AAAA,QAED,WAAW,eAAe,OAAO,CAAC;AAAA;AAAA,UAEhC,SAAS;AAAA,IACT,CAAC,WACC;AAAA,gBACI,cAAc;AAAA,MACd;AAAA,MACA,QAAQ,EAAE,MAAM,OAAO,MAAM,IAAI,UAAU,MAAM,EAAE;AAAA,MACnD,OAAO,YAAY,MAAM;AAAA,MACzB,SAAS,gBAAgB,OAAO,IAAI;AAAA,IACtC,CAAC,CAAC;AAAA;AAAA,EAER,CAAC;AAAA;AAAA;AAAA;AAIT;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,IAAM,iBAAiB;AAEvB,IAAM,qBACJ;AAEF,SAAS,SACP,KACA,OACA,OACgB;AAChB,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO;AAAA;AAAA,UAED,WAAW,eAAe,KAAK,CAAC;AAAA,UAChC,aAAa,QAAQ,eAAe,mBAAmB,CAAC;AAAA;AAAA;AAAA,EAGhE;AACA,SAAO;AAAA;AAAA,QAED,WAAW,eAAe,KAAK,CAAC;AAAA;AAAA,UAE9B,MAAM;AAAA,IACN,CAAC,SAAS;AAAA,wBACI,cAAc,oBAAoB,OAAO,KAAK,OAAO,CAAC;AAAA;AAAA,wBAEtD,kBAAkB;AAAA;AAAA;AAAA,mBAGvB,OAAO,KAAK,OAAO,CAAC;AAAA;AAAA,gBAEvB,cAAc;AAAA,MACd;AAAA,MACA,QAAQ,EAAE,MAAM,KAAK,OAAO,MAAM,IAAI,UAAU,KAAK,MAAM,EAAE;AAAA,MAC7D,OAAO,YAAY,KAAK,MAAM;AAAA,MAC9B,SAAS,gBAAgB,KAAK,OAAO,IAAI;AAAA,MACzC,OAAO;AAAA,IACT,CAAC,CAAC;AAAA,gBACA,KAAK,SACH;AAAA,4BACU;AAAA,MACN,cAAc,EAAE,SAAS,aAAa,MAAM,KAAK,CAAC;AAAA,MAClD;AAAA,IACF,CAAC;AAAA;AAAA,6CAEwB,KAAK,MAAM;AAAA,uBACjC,KAAK,MAAM;AAAA,uBAEhB,OAAO;AAAA;AAAA;AAAA,EAGjB,CAAC;AAAA;AAAA;AAAA;AAIT;AAEA,SAAS,cAAc,OAAiD;AACtE,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO;AAAA;AAAA,QAED,WAAW,eAAe,MAAM,CAAC;AAAA;AAAA,UAE/B,MAAM;AAAA,IACN,CAAC,MAAM;AAAA;AAAA,sBAEK,GAAG,iBAAiB,2BAA2B,CAAC;AAAA;AAAA;AAAA;AAAA,gBAItD,OAAO;AAAA,MACP,SAAS,gBAAgB,OAAO;AAAA,MAChC,OAAO;AAAA,IACT,CAAC,CAAC;AAAA;AAAA;AAAA,EAGR,CAAC;AAAA;AAAA;AAAA;AAIT;AAEA,SAAS,uBAAuB,OAA0C;AACxE,SAAO;AAAA;AAAA,QAED,WAAW,eAAe,UAAU,CAAC;AAAA;AAAA,UAEnC,MAAM,IAAI,CAAC,MAAM,QAAQ;AACzB,UAAM,KAAK,oBAAoB,GAAG;AAClC,UAAM,cAAc,CAAC,MAAmB;AACtC,YAAM,WAAW,EAAE;AACnB,YAAM,QAAQ,SACX,QAAQ,OAAO,GACd;AAAA,QACA;AAAA,MACF;AACF,UAAI,OAAO;AACT,cAAM,UAAU,OAAO,gBAAgB,SAAS,OAAO;AACvD,cAAM,UAAU,OAAO,yBAAyB,SAAS,OAAO;AAAA,MAClE;AAAA,IACF;AACA,UAAM,YAAY,CAAC,MAA2B;AAC5C,UAAI,EAAE,QAAQ,SAAS;AACrB,UAAE,eAAe;AACjB,cAAM,WAAW,EAAE;AACnB,iBAAS,UAAU,CAAC,SAAS;AAC7B,oBAAY,CAAC;AAAA,MACf;AAAA,IACF;AACA,WAAO;AAAA;AAAA;AAAA,wBAGO;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,sBACK,EAAE;AAAA;AAAA;AAAA;AAAA,uBAID,EAAE;AAAA,+CACsB,OAAO,GAAG,CAAC;AAAA;AAAA,4BAE9B,WAAW;AAAA,6BACV,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,qBAKjB,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,EAKjB,CAAC,CAAC;AAAA;AAAA;AAAA;AAIV;AAEA,SAAS,cAAc,KAA6B;AAClD,SAAO;AAAA;AAAA,QAED,WAAW,YAAY,CAAC;AAAA;AAAA,cAElB,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAMjB;AAEA,SAAS,gBAAgB,SAAmD;AAC1E,SAAO;AAAA;AAAA;AAAA;AAAA,QAID,QAAQ;AAAA,IACR,CAAC,MACC;AAAA,qCAC2B,EAAE,KAAK;AAAA,+CACG,EAAE,KAAK;AAAA;AAAA,EAEhD,CAAC;AAAA;AAAA;AAGP;AAEA,SAAS,WACP,SACA,KACA,OACuB;AACvB,UAAQ,QAAQ,IAAI;AAAA,IAClB,KAAK,eAAe;AAClB,UAAI,CAAC,QAAQ,KAAM,QAAO;AAC1B,aAAO;AAAA,gBACG,GAAG,2CAA2C,MAAM,CAAC;AAAA;AAAA;AAAA,UAG3D,QAAQ,IAAI;AAAA;AAAA,IAElB;AAAA,IACA,KAAK,cAAc;AACjB,UAAI,QAAQ,MAAM,WAAW,EAAG,QAAO;AACvC,aAAO,uBAAuB,QAAQ,KAAK;AAAA,IAC7C;AAAA,IACA,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ,aACJ,eAAe,QAAQ,UAAU,KAAK,IACtC,QAAQ;AAAA,MACd;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ,aACJ,eAAe,QAAQ,UAAU,KAAK,IACtC,QAAQ;AAAA,MACd;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,IACF,KAAK;AACH,aAAO,cAAc,QAAQ,GAAG;AAAA,IAClC,KAAK;AACH,aAAO,QAAQ,QAAQ,SAAS,IAC5B,gBAAgB,QAAQ,OAAO,IAC/B;AAAA,EACR;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,WAAO,YAAY,QAAQ,QAAQ,GAAG,IAAI;AAC1C,WAAO,EAAE,SAAS,MAAM,KAAK,gBAAgB,EAAE;AAAA,EACjD;AAEA,QAAM,UAAU,UAA0B;AAC1C,QAAM,cAAc,UAA0B;AAE9C,QAAM,WAAsB,CAAC;AAG7B,MAAI,cAAkC;AACtC,MAAI,QAAQ,WAAW,QAAQ,QAAQ,SAAS,GAAG;AACjD,UAAM,SAAS,oBAAI,IAA4B;AAC/C,eAAW,UAAU,QAAQ,SAAS;AACpC,YAAM,MAAM,OAAO,SAAS;AAC5B,YAAM,OAAO,OAAO,IAAI,GAAG,KAAK,CAAC;AACjC,WAAK,KAAK,MAAM;AAChB,aAAO,IAAI,KAAK,IAAI;AAAA,IACtB;AAEA,QAAI,OAAO,QAAQ,GAAG;AACpB,YAAM,WAAW;AAAA,QACf,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,eAAe;AAAA,MACjB;AACA,eAAS,KAAK,SAAS,OAAO;AAC9B,oBAAc,SAAS;AAAA,IACzB,OAAO;AACL,YAAM,UAAU,GAAG,OAAO;AAAA,QACxB,OAAO;AAAA,QACP,OAAO,EAAE,mCAAmC,GAAG;AAAA,MACjD,CAAC;AACD,iBAAW,CAAC,SAAS,YAAY,KAAK,QAAQ;AAC5C,cAAM,WAAW;AAAA,UACf;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW,eAAe;AAAA,QAC5B;AACA,iBAAS,KAAK,SAAS,OAAO;AAC9B,gBAAQ,OAAO,SAAS,IAAI;AAAA,MAC9B;AACA,oBAAc;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,WAAW,QAAQ,YAAY,CAAC;AACtC,QAAM,aAAa,sBAAsB,QAAQ;AAGjD;AAAA,IACE;AAAA;AAAA,UAEM,IAAI,OAAO,CAAC;AAAA;AAAA;AAAA,iCAGW,QAAQ,UAAU;AAAA;AAAA;AAAA,YAGvC,QAAQ,QACN;AAAA;AAAA;AAAA;AAAA,kBAII,QAAQ,KAAK;AAAA,uBAEjB,OAAO;AAAA,kCACa,aAAa,QAAQ,UAAU,CAAC;AAAA;AAAA,UAExD,QAAQ,WAAW,YAAY,QAAQ,QAAQ,IAAI,OAAO;AAAA;AAAA,YAExD,IAAI,WAAW,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMxB;AAAA,EACF;AAEA,QAAM,OAAO,QAAQ;AACrB,QAAM,iBAAiB,YAAY;AAGnC,MAAI,aAA4B,CAAC;AAEjC,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,iBAAiB,aAAa;AAAA,IAClC,WAAW;AAAA,IACX,UAAU,MAAM;AAAA,IAChB,cAAc,IAAI;AAAA,IAClB,cAAc,CAAC,IAAI,WAAW;AAAA,IAC9B,YAAY;AAAA,EACd,CAAC;AAID,WAAS,eAAe,OAAqB;AAC3C,QAAI,uBAAuB;AAC3B,QAAI,qBAAqB;AACzB,QAAI,gBAAgB;AAEpB,UAAM,QAA6C,CAAC;AACpD,UAAM,eAAe,MAAY;AAC/B,UAAI,eAAe,CAAC,eAAe;AACjC,cAAM,KAAK,WAAW;AACtB,wBAAgB;AAAA,MAClB;AAAA,IACF;AAEA,eAAW,WAAW,UAAU;AAC9B,YAAM,eACJ,gBAAgB,WAAW,QAAQ,eAAe;AACpD,UAAI,aAAc,wBAAuB;AACzC,YAAM,eAAe,eAAe,QAAQ;AAC5C,YAAM,MAAM,WAAW,SAAS,KAAK,YAAY;AACjD,UAAI,CAAC,IAAK;AACV,UAAI,aAAc;AAClB,YAAM,KAAK,GAAG;AACd,UAAI,QAAQ,OAAO,cAAe,cAAa;AAAA,IACjD;AACA,QAAI,CAAC,iBAAiB,aAAa;AACjC,YAAM,QAAQ,WAAW;AAAA,IAC3B;AACA,QAAI,SAAS,wBAAwB,uBAAuB,GAAG;AAC7D,YAAM,KAAK,aAAa,YAAY,CAAC;AAAA,IACvC;AACA,WAAO,OAAO,KAAK,IAAI,cAAc;AACrC,yBAAqB;AAAA,EACvB;AAEA,iBAAe,EAAE;AAEjB,QAAM,UAAU,gBAAgB;AAAA,IAC9B,GAAG;AAAA,IACH;AAAA,IACA,MAAM,KAAK,oBAAoB,eAAe,WAAW;AAAA,IACzD,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;;;AW/0BA,SAAS,aAAa,SAAS,eAAe;;;ACA9C,YAAY,YAAY;AAQjB,SAAS,aAAa,QAA8B,CAAC,GAAiB;AAC3E,SAAO;AAAA,IACE;AAAA,IACA;AAAA,IACP;AAAA,IACA;AAAA,EACF;AACF;;;ACDO,SAAS,yBACd,SACA,SACA,SAC0B;AAC1B,QAAM,WAAsB,CAAC;AAE7B,QAAM,WAAW,aAAa;AAAA,IAC5B,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,wBAAwB;AAAA,IACxB,eAAe;AAAA,IACf,WAAW;AAAA,IACX,eAAe;AAAA,IACf,cAAc;AAAA,IACd,cAAc;AAAA,IACd,aAAa,MAAM,QAAQ,YAAY;AAAA,EACzC,CAAC;AACD,WAAS,KAAK,MAAM,SAAS,QAAQ,CAAC;AAEtC,QAAM,cAAc,UAA0B;AAC9C,QAAM,gBAAgB,UAA0B;AAChD,QAAM,aAAa,UAA0B;AAC7C,QAAM,aAAa,UAA4B;AAE/C,QAAM,eAAe,MAAM;AACzB,UAAM,KAAK,QAAQ,YAAY;AAC/B,WAAO,cAAc,aAAa,KAAM,GAAgB;AAAA,EAC1D,GAAG;AAEH,QAAM,WAAW,SAAS,uBAAuB;AACjD;AAAA,IACE;AAAA;AAAA,UAEM,IAAI,WAAW,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMhB,IAAI,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAKhB,IAAI,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA,cAIb,IAAI,UAAU,CAAC;AAAA;AAAA,kBAEX,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMrB;AAAA,EACF;AAEA,QAAM,aAAa,YAAY;AAC/B,QAAM,aAAa,cAAc;AACjC,QAAM,UAAU,WAAW;AAC3B,QAAM,UAAU,WAAW;AAE3B,cAAY,OAAO,QAAQ;AAE3B,MAAI,iBAA4B,CAAC;AACjC,WAAS,qBAA2B;AAClC,eAAW,KAAK,eAAgB,GAAE;AAClC,qBAAiB,CAAC;AAClB,UAAM,MAAM,SAAS,IAAI;AACzB,mBAAe;AAAA,MACb;AAAA,QACE;AAAA,QACA,IAAI,iBAAiB;AAAA,MACvB;AAAA,MACA;AAAA,QACE;AAAA,QACA,IAAI,mBAAmB;AAAA,MACzB;AAAA,MACA,YAAY,SAAS,IAAI,gBAAgB,CAA4B;AAAA,IACvE;AACA,eAAW,SAAS,CAAC,IAAI;AACzB,eAAW,SAAS,CAAC,IAAI;AAAA,EAC3B;AACA,qBAAmB;AACnB,QAAM,gBAAgB,SAAS,OAAO,UAAU,kBAAkB;AAClE,WAAS,KAAK,MAAM;AAClB,kBAAc;AACd,eAAW,KAAK,eAAgB,GAAE;AAClC,eAAW,OAAO;AAClB,eAAW,OAAO;AAAA,EACpB,CAAC;AAED,QAAM,gBAAgB,MAAY,SAAS,IAAI,EAAE,QAAQ,KAAK;AAE9D,MAAI,SAAS,iBAAiB;AAC5B,aAAS;AAAA,MACP,QAAQ,gBAAgB,MAAM;AAC5B,YAAI,CAAC,SAAS,IAAI,EAAE,KAAM,QAAO;AACjC,sBAAc;AACd,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF,OAAO;AACL,UAAM,kBAAkB,CAAC,MAAmB;AAC1C,UAAK,EAAoB,QAAQ,SAAU;AAC3C,UAAI,CAAC,SAAS,IAAI,EAAE,KAAM;AAC1B,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,QAAE,yBAAyB;AAC3B,oBAAc;AAAA,IAChB;AACA,WAAO,iBAAiB,WAAW,iBAAiB,IAAI;AACxD,aAAS;AAAA,MAAK,MACZ,OAAO,oBAAoB,WAAW,iBAAiB,IAAI;AAAA,IAC7D;AAAA,EACF;AAEA,MAAI,qBAAqB;AACzB,QAAM,wBAAwB,CAAC,MAAmB;AAChD,QAAI,KAAK,IAAI,IAAI,oBAAoB;AACnC,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,QAAE,yBAAyB;AAC3B;AAAA,IACF;AACA,QAAI,CAAC,SAAS,IAAI,EAAE,KAAM;AAC1B,QAAI,QAAQ,SAAS,EAAE,MAAc,EAAG;AACxC,MAAE,eAAe;AACjB,MAAE,gBAAgB;AAClB,MAAE,yBAAyB;AAC3B,kBAAc;AACd,yBAAqB,KAAK,IAAI,IAAI;AAAA,EACpC;AACA,SAAO,iBAAiB,eAAe,uBAAuB,IAAI;AAClE,SAAO,iBAAiB,aAAa,uBAAuB,IAAI;AAChE,SAAO,iBAAiB,SAAS,uBAAuB,IAAI;AAC5D,WAAS,KAAK,MAAM;AAClB,WAAO,oBAAoB,eAAe,uBAAuB,IAAI;AACrE,WAAO,oBAAoB,aAAa,uBAAuB,IAAI;AACnE,WAAO,oBAAoB,SAAS,uBAAuB,IAAI;AAAA,EACjE,CAAC;AAED;AAAA,IACE;AAAA,IACA,SAAS,IAAI,EAAE,gBAAgB;AAAA,EACjC;AAEA,SAAO;AAAA,IACL,UAAU;AACR,iBAAW,KAAK,SAAU,GAAE;AAC5B,eAAS,SAAS;AAAA,IACpB;AAAA,EACF;AACF;;;AFrIA,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;AACpD,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;AAIA,IAAM,oBACJ;AAEF,IAAM,sBACJ;AAEF,IAAM,mBAAmB;AACzB,IAAM,oBACJ;AACF,IAAM,oBAAoB;AAE1B,IAAM,iBACJ;AAIF,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,GAAG,UAAU;AAAA,QACxB,OAAO;AAAA,QACP,OAAO;AAAA,UACL,aAAa;AAAA,UACb,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,GAAG,SAAS;AAAA,QACvB,OAAO,GAAG,mBAAmB,UAAU;AAAA,QACvC,OAAO;AAAA,UACL,aAAa;AAAA,UACb,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,GAAG,YAAY;AAAA,QAC1B,OAAO,GAAG,mBAAmB,oBAAoB;AAAA,QACjD,OAAO;AAAA,UACL,aAAa;AAAA,UACb,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,OAAO;AAAA,MACT,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,GAAG,KAAK;AAAA,IACxB,OAAO;AAAA,IACP,OAAO;AAAA,MACL,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF,CAAC;AACD,YAAU,SAAS;AAEnB,QAAM,SAAS,GAAG,OAAO;AAAA,IACvB,OAAO;AAAA,MACL;AAAA,MACA,MAAM,SAAS,aAAa,gCAAgC;AAAA,IAC9D;AAAA,IACA,OAAO;AAAA,MACL,aAAa;AAAA,MACb,wBAAwB;AAAA,MACxB,yBAAyB,MAAM;AAAA,IACjC;AAAA,EACF,CAAC;AAED,QAAM,QAAQ,GAAG,SAAS;AAAA,IACxB,OAAO;AAAA,IACP,OAAO;AAAA,MACL,aAAa;AAAA,MACb,KAAK;AAAA,IACP;AAAA,IACA,MAAM,MAAM;AAAA,EACd,CAAC;AAED,MAAI,MAAM,SAAS,YAAY;AAC7B,WAAO,OAAO,SAAS,KAAK;AAAA,EAC9B,OAAO;AACL,WAAO,OAAO,OAAO,OAAO;AAAA,EAC9B;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;AAIA,IAAM,iBACJ;AACF,IAAM,YAAY,iBAAiB;AACnC,IAAM,kBACJ,iBACA;AACF,IAAM,aACJ;AACF,IAAM,WACJ;AAIF,SAAS,aAAa,SAAyC;AAC7D,SAAO;AAAA;AAAA;AAAA,gBAGO,kBACR,iDAAiD;AAAA;AAAA;AAAA;AAAA,gBAIzC,kBACR,gDAAgD;AAAA;AAAA;AAAA,mBAGrC,SAAS,IAAI,OAAO;AAAA;AAAA;AAGvC;AAEA,SAAS,iBAAiC;AACxC,SAAO;AAAA,iBACQ,UAAU;AAAA,QACnB,aAAa,KAAK,SAAS,cAAc,CAAC,CAAC;AAAA;AAAA,qBAE9B,WAAW,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,qBAKjC,WAAW,sBAAsB;AAAA;AAAA;AAAA;AAItD;AAEA,SAAS,iBAAiC;AACxC,SAAO;AAAA,iBACQ,UAAU;AAAA,QACnB,aAAa,KAAK,WAAW,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAYrB,eAAe,EAAE,SAAS,WAAW,MAAM,KAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQpE;AAEA,SAAS,eAA+B;AACtC,SAAO;AAAA,iBACQ,UAAU;AAAA,QACnB,aAAa,KAAK,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAgBjB,eAAe,EAAE,SAAS,WAAW,MAAM,KAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASpE;AAIO,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;AAG1D,QAAM,kBAAkB,GAAG,OAAO;AAAA,IAChC,OAAO;AAAA,IACP,OAAO,EAAE,QAAQ,KAAK;AAAA,EACxB,CAAC;AACD,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,kBAAgB,OAAO,iBAAiB,iBAAiB;AAEzD,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,SAAS,yBAAyB,mBAAmB,SAAS;AAAA,QAClE,iBAAiB,IAAI;AAAA,MACvB,CAAC;AACD,eAAS,KAAK,MAAM,OAAO,QAAQ,CAAC;AAAA,IACtC,CAAC;AAAA,EACH;AAGA,QAAM,UAAU,UAA2B;AAC3C,QAAM,YAAY,UAAgC;AAClD,QAAM,YAAY,UAA6B;AAE/C;AAAA,IACE;AAAA;AAAA;AAAA,kCAG8B,QAAQ,EAAE;AAAA;AAAA;AAAA,YAGhC,IAAI,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,4BAKI,QAAQ,EAAE;AAAA;AAAA,UAE5B,eAAe,CAAC,IAAI,eAAe,CAAC,IAAI,aAAa,CAAC;AAAA;AAAA;AAAA,IAG5D;AAAA,EACF;AAEA,QAAM,OAAO,QAAQ;AAGrB,MAAI,QAAQ,mBAAmB;AAC7B,SAAK,OAAO,eAAe;AAAA,EAC7B;AACA,aAAW,KAAK,QAAQ;AACtB,SAAK,OAAO,EAAE,IAAI;AAAA,EACpB;AAGA,QAAM,SAAS,GAAG,UAAU;AAAA,IAC1B,OAAO,GAAG,eAAe,EAAE,SAAS,UAAU,CAAC,GAAG,SAAS;AAAA,IAC3D,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,MACb,0BAA0B;AAAA,IAC5B;AAAA,IACA,MAAM,QAAQ,OAAO;AAAA,EACvB,CAAC;AACD,OAAK,OAAO,MAAM;AAGlB,QAAM,SAAS,GAAG,KAAK;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,MACL,0BAA0B;AAAA,MAC1B,aAAa;AAAA,IACf;AAAA,EACF,CAAC;AACD,OAAK,OAAO,MAAM;AAGlB,QAAM,YAAY,KAAK;AAAA,IACrB;AAAA,EACF;AACA,QAAM,cACJ,UAAU,cAA2B,8BAA8B,KAClE,UAAU,SAAS,CAAC;AACvB,QAAM,cAAc,UAAU;AAAA,IAC5B;AAAA,EACF;AACA,QAAM,eAAe,UAAU;AAAA,IAC7B;AAAA,EACF;AACA,QAAM,cAAc,UAAU;AAAA,IAC5B;AAAA,EACF;AACA,QAAM,iBAAiB,YAAY;AACnC,QAAM,YAAY,UAAU;AAAA,IAC1B;AAAA,EACF;AACA,QAAM,aAAa,UAAU;AAAA,IAC3B;AAAA,EACF;AACA,QAAM,mBAAmB,UAAU;AAAA,IACjC;AAAA,EACF;AACA,QAAM,cAAc,UAAU;AAAA,IAC5B;AAAA,EACF;AAIA,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;AAKA,MAAI,YAAuB;AAC3B,MAAI,aAAsC;AAC1C,MAAI,kBAAiD;AACrD,QAAM,cAAc,oBAAI,IAAgB;AACxC,QAAM,SAAS,MAAY;AACzB,eAAW,MAAM,YAAa,IAAG;AAAA,EACnC;AAEA,iBAAe,SAAS,QAAkD;AACxE,QAAI,cAAc,aAAc;AAChC,gBAAY;AAEZ,cAAU,IAAI;AACd,wBAAoB;AACpB,aAAS,MAAM;AACf,iBAAa;AACb,sBAAkB;AAElB,QAAI,QAAQ,QAAQ;AAClB,YAAM,SAAS,MAAM,mBAAmB,QAAQ,QAAQ,MAAM;AAC9D,UAAI,QAAQ;AACV,0BAAkB;AAClB,qBAAa;AAAA,UACX,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,aAAa;AAAA,QACf;AACA,oBAAY;AACZ,yBAAiB,MAAM;AACvB,kBAAU,UAAU;AACpB,iBAAS,MAAM;AACf,eAAO;AACP;AAAA,MACF;AAAA,IACF;AAEA,WAAO,WAAW;AAClB,WAAO,aAAa,gBAAgB,EAAE;AACtC,aAAS,SAAS;AAClB,WAAO;AAEP,QAAI;AACF,YAAM,SAA4B,MAAM,QAAQ,OAAO;AAAA,QACrD;AAAA,MACF,KAAM,EAAE,QAAQ,UAAU;AAC1B,aAAO,WAAW;AAClB,aAAO,gBAAgB,cAAc;AAErC,UAAI,OAAO,WAAW,WAAW;AAC/B,qBAAa;AACb,oBAAY;AACZ,wBAAgB,MAAM;AACtB,iBAAS,SAAS;AAClB,4BAAoB;AACpB,YAAI,OAAO,aAAa;AACtB,qBAAW,QAAQ,OAAO,aAAa;AACrC,wBAAY,IAAI,IAAI,GAAG,MAAM;AAAA,UAC/B;AAAA,QACF;AAAA,MACF,OAAO;AACL,qBAAa;AACb,0BAAkB,OAAO,eAAe;AACxC,oBAAY;AACZ,cAAM,iBACJ,mBAAmB,OAAO,KAAK,eAAe,EAAE,SAAS;AAC3D,YAAI,gBAAgB;AAClB,2BAAiB,mBAAmB,MAAS;AAC7C,oBAAU,MAAM;AAChB,mBAAS,MAAM;AAAA,QACjB,OAAO;AACL,wBAAc,MAAM;AACpB,mBAAS,OAAO;AAAA,QAClB;AAAA,MACF;AAAA,IACF,SAAS,KAAK;AACZ,aAAO,WAAW;AAClB,aAAO,gBAAgB,cAAc;AACrC,YAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,mBAAa,EAAE,QAAQ,SAAS,QAAQ;AACxC,kBAAY;AACZ,oBAAc,UAAU;AACxB,eAAS,OAAO;AAAA,IAClB;AACA,WAAO;AAAA,EACT;AAEA,WAAS,iBAAuB;AAC9B,gBAAY;AACZ,iBAAa;AACb,sBAAkB;AAClB,cAAU,IAAI;AACd,wBAAoB;AACpB,aAAS,MAAM;AACf,WAAO;AAAA,EACT;AAIA,QAAM,WAAW,CAAC,MAAyB;AACzC,MAAE,eAAe;AACjB,QAAI,cAAc,UAAW;AAC7B,QAAI,cAAc,QAAS,gBAAe;AAC1C,UAAM,SAAoC,CAAC;AAC3C,YAAQ,OAAO,QAAQ,CAAC,OAAO,MAAM;AACnC,aAAO,MAAM,IAAI,IAAI,OAAO,CAAC,EAAE,KAAK;AAAA,IACtC,CAAC;AACD,SAAK,SAAS,MAAM;AAAA,EACtB;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;AAEA,QAAM,gBAAgB,CAAC,MAA2B;AAChD,QAAI,EAAE,QAAQ,QAAS;AACvB,UAAM,QAAQ,EAAE,WAAW,EAAE;AAC7B,QAAI,OAAO;AACT,QAAE,eAAe;AACjB,UAAI,cAAc,WAAW;AAC3B,YAAI,MAAM;AACV;AAAA,MACF;AACA,UAAI,cAAc,UAAU,cAAc,QAAS;AACnD,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,cAAY,iBAAiB,SAAS,cAAc;AACpD,WAAS,KAAK,MAAM,YAAY,oBAAoB,SAAS,cAAc,CAAC;AAI5E,QAAM,gBAAgB,MAA2B;AAC/C,QAAI,cAAc,cAAc;AAC9B,aAAO,EAAE,OAAO,oBAAe,UAAU,MAAM,SAAS,MAAM;AAAA,MAAC,EAAE;AAAA,IACnE;AACA,QAAI,cAAc,WAAW;AAC3B,aAAO,EAAE,OAAO,SAAS,SAAS,MAAM,IAAI,MAAM,EAAE;AAAA,IACtD;AACA,QAAI,cAAc,WAAW,CAAC,iBAAiB;AAC7C,aAAO,EAAE,OAAO,aAAa,SAAS,eAAe;AAAA,IACvD;AACA,WAAO,EAAE,OAAO,QAAQ,OAAO,OAAO,SAAS,cAAc;AAAA,EAC/D;AAEA,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;;;AGjtBA,SAAS,UAAAE,eAAc;;;ACQhB,SAAS,qBACd,MACgB;AAChB,MAAI,QAAQ,KAAK;AACjB,MAAI,YAAY,KAAK;AACrB,MAAI,cAA6B;AACjC,MAAI,UAAU;AACd,QAAM,OAAO,oBAAI,IAAgB;AAEjC,QAAM,EAAE,WAAW,UAAU,kBAAkB,IAAI;AAEnD,YAAU,aAAa,QAAQ,SAAS;AACxC,YAAU,WAAW;AACrB,YAAU,MAAM,UAAU;AAC1B,gBAAc;AAEd,MAAI,KAAK,oBAAoB,UAAU,IAAI,KAAK,gBAAgB,GAAG;AACjE,iBAAa,KAAK,kBAAkB,KAAK;AAAA,EAC3C;AAEA,WAAS,SAAmB;AAC1B,WAAO,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK;AAAA,EACjC;AAEA,WAAS,SAAe;AACtB,eAAW,MAAM,KAAM,IAAG;AAAA,EAC5B;AAEA,WAAS,gBAAsB;AAC7B,eAAW,CAAC,OAAOC,GAAE,KAAK,WAAW;AACnC,MAAAA,IAAG,aAAa,QAAQ,QAAQ;AAChC,MAAAA,IAAG,KAAK,GAAG,KAAK,SAAS,SAAS,KAAK;AAAA,IACzC;AAAA,EACF;AAEA,WAAS,aAAa,OAAsB,SAAS,MAAY;AAC/D,QAAI,UAAU,YAAa;AAC3B,QAAI,aAAa;AACf,YAAM,OAAO,UAAU,IAAI,WAAW;AACtC,UAAI,MAAM;AACR,aAAK,gBAAgB,kBAAkB;AACvC,aAAK,gBAAgB,sBAAsB;AAC3C,aAAK,gBAAgB,eAAe;AAAA,MACtC;AAAA,IACF;AACA,kBAAc;AACd,QAAI,OAAO;AACT,YAAMA,MAAK,UAAU,IAAI,KAAK;AAC9B,UAAIA,KAAI;AACN,QAAAA,IAAG,aAAa,oBAAoB,EAAE;AACtC,QAAAA,IAAG,aAAa,iBAAiB,MAAM;AACvC,YAAI,QAAS,CAAAA,IAAG,aAAa,wBAAwB,EAAE;AACvD,kBAAU,aAAa,yBAAyBA,IAAG,EAAE;AACrD,YAAI,OAAQ,CAAAA,IAAG,eAAe,EAAE,OAAO,UAAU,CAAC;AAAA,MACpD;AAAA,IACF,OAAO;AACL,gBAAU,gBAAgB,uBAAuB;AAAA,IACnD;AACA,wBAAoB,KAAK;AACzB,WAAO;AAAA,EACT;AAEA,WAAS,WAAiB;AACxB,QAAI,QAAS;AACb,cAAU;AACV,cAAU,aAAa,gBAAgB,EAAE;AAAA,EAC3C;AAEA,WAAS,UAAgB;AACvB,QAAI,CAAC,QAAS;AACd,cAAU;AACV,cAAU,gBAAgB,cAAc;AACxC,QAAI,aAAa;AACf,gBAAU,IAAI,WAAW,GAAG,gBAAgB,sBAAsB;AAAA,IACpE;AAAA,EACF;AAEA,WAAS,KAAK,OAAqB;AACjC,UAAM,OAAO,OAAO;AACpB,QAAI,KAAK,WAAW,EAAG;AACvB,aAAS;AACT,QAAI,gBAAgB,MAAM;AACxB,mBAAa,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC;AACxD,UAAI;AACF,kBAAU,IAAI,WAAW,GAAG,aAAa,wBAAwB,EAAE;AACrE;AAAA,IACF;AACA,UAAM,MAAM,KAAK,QAAQ,WAAW;AACpC,UAAM,QAAQ,MAAM,QAAQ,KAAK,UAAU,KAAK;AAChD,iBAAa,KAAK,IAAI,CAAC;AACvB,QAAI;AACF,gBAAU,IAAI,WAAW,GAAG,aAAa,wBAAwB,EAAE;AAAA,EACvE;AAEA,MAAI,SAAS;AAEb,WAAS,cAAc,GAAwB;AAC7C,QAAI,CAAC,OAAQ;AACb,YAAQ,EAAE,KAAK;AAAA,MACb,KAAK;AACH,UAAE,eAAe;AACjB,aAAK,CAAC;AACN;AAAA,MACF,KAAK;AACH,UAAE,eAAe;AACjB,aAAK,EAAE;AACP;AAAA,MACF,KAAK;AACH,UAAE,eAAe;AACjB,iBAAS;AACT,cAAM,QAAQ,OAAO,EAAE,CAAC;AACxB,YAAI,SAAS,MAAM;AACjB,uBAAa,KAAK;AAClB,cAAI;AACF,sBAAU,IAAI,WAAW,GAAG,aAAa,wBAAwB,EAAE;AAAA,QACvE;AACA;AAAA,MACF,KAAK;AACH,UAAE,eAAe;AACjB,iBAAS;AACT,cAAM,OAAO,OAAO;AACpB,cAAM,OAAO,KAAK,KAAK,SAAS,CAAC;AACjC,YAAI,QAAQ,MAAM;AAChB,uBAAa,IAAI;AACjB,cAAI;AACF,sBAAU,IAAI,WAAW,GAAG,aAAa,wBAAwB,EAAE;AAAA,QACvE;AACA;AAAA,MACF,KAAK;AACH,YAAI,aAAa;AACf,YAAE,eAAe;AACjB,mBAAS,WAAW;AAAA,QACtB;AACA;AAAA,IACJ;AAAA,EACF;AAEA,WAAS,kBAAkB,GAAuB;AAChD,UAAM,SAAU,EAAE,OAAuB;AAAA,MACvC;AAAA,IACF;AACA,QAAI,CAAC,OAAQ;AACb,UAAM,QAAQ,OAAO,aAAa,uBAAuB;AACzD,QAAI,CAAC,SAAS,UAAU,YAAa;AACrC,YAAQ;AACR,iBAAa,OAAO,KAAK;AAAA,EAC3B;AAEA,WAAS,YAAY,GAAqB;AACxC,UAAM,SAAU,EAAE,OAAuB;AAAA,MACvC;AAAA,IACF;AACA,QAAI,CAAC,OAAQ;AACb,UAAM,QAAQ,OAAO,aAAa,uBAAuB;AACzD,QAAI,CAAC,MAAO;AACZ,aAAS,KAAK;AAAA,EAChB;AAEA,YAAU,iBAAiB,WAAW,aAAa;AACnD,YAAU,iBAAiB,eAAe,iBAAiB;AAC3D,YAAU,iBAAiB,SAAS,WAAW;AAC/C,OAAK,aAAa,iBAAiB,WAAW,aAAa;AAE3D,SAAO;AAAA,IACL,qBAAqB,MAAM;AAAA,IAC3B,gBAAgB,CAAC,MAAM,aAAa,CAAC;AAAA,IACrC,UAAU,GAAG;AACX,eAAS;AAAA,IACX;AAAA,IACA,SAAS,WAAW,WAAW;AAC7B,cAAQ;AACR,kBAAY;AACZ,oBAAc;AACd,UAAI,UAAU,SAAS,GAAG;AACxB,qBAAa,UAAU,CAAC,EAAE,KAAK;AAAA,MACjC,OAAO;AACL,qBAAa,IAAI;AAAA,MACnB;AAAA,IACF;AAAA,IACA,UAAU,IAAI;AACZ,WAAK,IAAI,EAAE;AACX,aAAO,MAAM,KAAK,OAAO,EAAE;AAAA,IAC7B;AAAA,IACA,UAAU;AACR,gBAAU,oBAAoB,WAAW,aAAa;AACtD,gBAAU,oBAAoB,eAAe,iBAAiB;AAC9D,gBAAU,oBAAoB,SAAS,WAAW;AAClD,WAAK,aAAa,oBAAoB,WAAW,aAAa;AAC9D,WAAK,MAAM;AAAA,IACb;AAAA,EACF;AACF;;;ADzLA,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;AAEA,SAAS,kBAAkB,MAAgB,KAAkC;AAC3E,MAAI,KAAK,WAAY,QAAO,gBAAgB,KAAK,WAAW,OAAO,IAAI;AACvE,MAAI,KAAK,SAAS;AAChB,UAAM,OAAO,KAAK,QAAQ;AAC1B,QAAI,gBAAgB,YAAY;AAC9B,YAAM,WAAW,KAAK,aAAa,OAAO,KAAK;AAC/C,YAAM,WAAW,SACd,QAAQ,+BAA+B,EAAE,EACzC,KAAK;AACR,WAAK,aAAa,SAAS,GAAG,UAAU,qBAAqB,CAAC;AAAA,IAChE;AACA,WAAO;AAAA;AAAA;AAAA;AAAA,SAIF,IAAI;AAAA;AAAA,EAEX;AACA,SAAO,YAAY,KAAKC,SAAQ,qBAAqB,CAAC;AACxD;AASA,SAAS,YAAY,SAAsB,MAA8B;AACvE,QAAM,gBAAgB,UAA0B;AAChD,QAAM,cAAc,UAA0B;AAC9C,QAAM,aAAa,UAA0B;AAC7C,QAAM,aAAa,UAAuB;AAE1C;AAAA,IACE;AAAA;AAAA,UAEM,IAAI,UAAU,CAAC;AAAA;AAAA,kCAES,QAAQ,EAAE;AAAA;AAAA;AAAA,YAGhC,IAAI,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA,iBAIb,IAAI,WAAW,CAAC;AAAA;AAAA,gBAEjB,IAAI,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQ3B;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS,WAAW;AAAA,IACpB,YAAY,cAAc;AAAA,IAC1B,UAAU,YAAY;AAAA,IACtB,SAAS,WAAW;AAAA,EACtB;AACF;AAQA,SAAS,cACP,SACA,KACA,eACA,YACA,SACU;AACV,QAAM,YAAY,oBAAI,IAAyB;AAC/C,QAAM,eAAe,oBAAI,IAAsB;AAC/C,QAAM,aAAa,oBAAI,IAAyB;AAChD,UAAQ,gBAAgB;AAExB,MAAI,cAAc,WAAW,GAAG;AAC9B,UAAMC,QAAO,SAAS,uBAAuB;AAC7C;AAAA,MACE,aAAa,QAAQ,cAAc,cAAc,iBAAiB;AAAA,MAClEA;AAAA,IACF;AACA,YAAQ,OAAOA,KAAI;AACnB,WAAO,EAAE,WAAW,cAAc,WAAW;AAAA,EAC/C;AAEA,QAAM,UAAU,oBAAI,IAAwB;AAC5C,aAAW,QAAQ,eAAe;AAChC,UAAM,MAAM,KAAK,SAAS;AAC1B,UAAM,SAAS,QAAQ,IAAI,GAAG,KAAK,CAAC;AACpC,WAAO,KAAK,IAAI;AAChB,YAAQ,IAAI,KAAK,MAAM;AAAA,EACzB;AAEA,QAAM,OAAO,SAAS,uBAAuB;AAC7C;AAAA,IACE;AAAA;AAAA,UAEM,MAAM,KAAK,QAAQ,QAAQ,CAAC,EAAE;AAAA,MAC9B,CAAC,CAAC,OAAO,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA,2CAIa,KAAK;AAAA;AAAA,gBAEhC,QACE,iBAAiB,sBAAsB,IAAI,KAAK,UAChD,OAAO;AAAA;AAAA;AAAA,wCAGe,SAAS,WAAW;AAAA;AAAA,kBAE1C,MAAM,IAAI,CAAC,SAAS;AACpB,cAAM,SAAS,KAAK,UAChB,iBAAiB,KAAK,SAAS,IAAI,QAAQ,IAC3C;AACJ,eAAO;AAAA;AAAA,8BAEK;AAAA,UACN;AAAA,UACA;AAAA,UACA,UAAU;AAAA,QACZ,CAAC;AAAA,6CACsB,OAAO,IAAI,CAAC;AAAA,8BAC3B,SAAS,qBAAqB,EAAE;AAAA,8CAChB,KAAK,KAAK;AAAA;AAAA,wBAEhC,OAAO;AAAA,UACP,SAAS,kBAAkB,MAAM,GAAG;AAAA,UACpC,OAAO,KAAK;AAAA,UACZ,UAAU,KAAK;AAAA,UACf,UAAU,KAAK,YAAY,KAAK;AAAA,QAClC,CAAC,CAAC;AAAA;AAAA;AAAA,MAGR,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAIV,CAAC;AAAA;AAAA;AAAA,IAGL;AAAA,EACF;AAEA,UAAQ,OAAO,IAAI;AAEnB,aAAWC,OAAM,QAAQ;AAAA,IACvB;AAAA,EACF,GAAG;AACD,UAAM,KAAKA,IAAG,aAAa,uBAAuB,KAAK;AACvD,eAAW,IAAI,IAAIA,GAAE;AAAA,EACvB;AACA,aAAWA,OAAM,QAAQ;AAAA,IACvB;AAAA,EACF,GAAG;AACD,UAAM,QAAQA,IAAG,aAAa,uBAAuB;AACrD,cAAU,IAAI,OAAOA,GAAE;AACvB,UAAM,OAAO,WAAW,IAAI,KAAK;AACjC,QAAI,KAAM,cAAa,IAAI,OAAO,IAAI;AAAA,EACxC;AAEA,SAAO,EAAE,WAAW,cAAc,WAAW;AAC/C;AAIO,SAAS,kBACd,SACA,KACA,MACgB;AAChB,QAAM,MAAM,QAAQ;AACpB,QAAM,aAAa,QAAQ,eAAe;AAC1C,QAAM,WAAW,aAAc,QAAQ,UAAU,gBAAiB;AAClE,MAAI,gBAAqC;AACzC,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,aACJ,QAAQ,qBAAqB,UAC7B,WAAW,IAAI,QAAQ,gBAAgB;AAEzC,QAAM,EAAE,SAAS,YAAY,UAAU,QAAQ,IAAI,YAAY,SAAS,IAAI;AAE5E,MAAI,OAAO,cAAc,SAAS,KAAK,eAAe,YAAY,OAAO;AAEzE,QAAM,aAA6B,qBAAqB;AAAA,IACtD,WAAW,QAAQ;AAAA,IACnB,WAAW;AAAA,IACX,OAAO;AAAA,IACP,WAAW,KAAK;AAAA,IAChB,kBAAkB,aAAa,QAAQ,mBAAmB;AAAA,IAC1D,UAAU,CAAC,UAAU;AACnB,YAAM,OAAO,WAAW,IAAI,KAAK;AACjC,UAAI,QAAQ,QAAQ,SAAU,SAAQ,SAAS,IAAI;AAAA,IACrD;AAAA,IACA,mBAAmB,CAAC,UAAU;AAC5B,YAAM,OAAO,QAAQ,WAAW,IAAI,KAAK,IAAI;AAC7C,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,IACA,aAAa,aAAa,IAAI,cAAc;AAAA,EAC9C,CAAC;AAGD,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;AAGhE,MAAI,CAAC,YAAY;AACf,0BAAsB,MAAM,QAAQ,MAAM,EAAE,eAAe,KAAK,CAAC,CAAC;AAAA,EACpE;AAGA,QAAM,qBAAqB,IAAI,iBAAiB,MAAM;AACpD,eAAW,UAAU,CAAC,KAAK,MAAM;AAAA,EACnC,CAAC;AACD,qBAAmB,QAAQ,MAAM;AAAA,IAC/B,YAAY;AAAA,IACZ,iBAAiB,CAAC,QAAQ;AAAA,EAC5B,CAAC;AAGD,QAAM,UAAU,gBAAgB;AAAA,IAC9B,MAAM,WAAW,QAAQ;AAAA,IACzB,MAAM,IAAI,UAAU,KAAK;AAAA,IACzB,MAAM,mBAAmB,WAAW;AAAA,IACpC;AAAA,IACA,MAAM,cAAc,WAAW;AAAA,IAC/BA,YAAW;AAAA,IACX,MAAM;AACJ,WAAK,UAAU,MAAM;AACrB,WAAK,aAAa,MAAM;AACxB,WAAK,WAAW,MAAM;AACtB,WAAK,gBAAgB;AAAA,IACvB;AAAA,EACF,CAAC;AAGD,MAAI,cAAc,cAAc,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAM;AAE/D,QAAM,WAAW,WACb,CAAC,UAAwB;AACvB,UAAM,OAAO,IAAI,OAAO,CAAC,SAAS,SAAS,MAAM,KAAK,CAAC;AACvD,UAAM,UAAU,KAAK,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAM;AACpD,QAAI,YAAY,YAAa;AAC7B,kBAAc;AACd,WAAO,cAAc,SAAS,KAAK,MAAM,YAAY,OAAO;AAC5D,oBAAgB;AAChB,eAAW,SAAS,eAAe,KAAK,SAAS;AAAA,EACnD,IACA;AAGJ,QAAM,eAAe;AAAA,IACnB,MAAM;AACJ,YAAM,QAAQ,WAAW,oBAAoB;AAC7C,UAAI,CAAC,MAAO,QAAO;AACnB,YAAM,OAAO,WAAW,IAAI,KAAK;AACjC,UAAI,CAAC,QAAQ,CAAC,QAAQ,SAAU,QAAO;AACvC,aAAO,EAAE,OAAO,UAAU,SAAS,MAAM,QAAQ,SAAU,IAAI,EAAE;AAAA,IACnE;AAAA,IACA,UAAU,IAAgB;AACxB,aAAO,WAAW,UAAU,EAAE;AAAA,IAChC;AAAA,EACF;AAEA,QAAM,mBAAmB;AAAA,IACvB,MAA8B;AAC5B,YAAM,QAAQ,WAAW,oBAAoB;AAC7C,UAAI,CAAC,MAAO,QAAO,CAAC;AACpB,aAAO,WAAW,IAAI,KAAK,GAAG,WAAW,CAAC;AAAA,IAC5C;AAAA,IACA,UAAU,IAAgB;AACxB,aAAO,WAAW,UAAU,EAAE;AAAA,IAChC;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,UAAU,cAAc,iBAAiB;AAC7D;;;AExUO,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,EAC/C;AACF;;;ACvBA,IAAM,oBAAoB;AAC1B,IAAM,aAAa;AA4BZ,SAAS,WACd,OACA,MACA,MACqB;AACrB,QAAM,gBAAgB,UAA0B;AAChD,QAAM,UAAU,UAA0B;AAG1C,QAAM,WAAW,SAAS,uBAAuB;AACjD;AAAA,IACE;AAAA;AAAA,UAEM,IAAI,aAAa,CAAC;AAAA;AAAA,gBAEZ,iBAAiB;AAAA;AAAA;AAAA,YAGrB,IAAI,OAAO,CAAC;AAAA;AAAA,+BAEO,KAAK,EAAE;AAAA,kBACpB,UAAU;AAAA;AAAA;AAAA;AAAA,IAIxB;AAAA,EACF;AAEA,QAAM,aAAa,cAAc;AACjC,QAAM,OAAO,QAAQ;AACrB,OAAK,UAAU,YAAY,QAAQ;AAEnC,QAAM,MAAM,KAAK,cAAc;AAC/B,QAAMC,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,MAAM,KAAK,QAAQ,SAAS,EAAE;AAAA,IAC9B,OAAO,KAAK;AAAA,IACZ,MAAM,CAAC,WAAW;AAChB,UAAI,CAAC,KAAK,MAAM,IAAI,OAAO,EAAE,EAAG;AAChC,WAAK,QAAQ,KAAK,WAAW,SAAS;AAAA,QACpC,IAAI,OAAO;AAAA,QACX,KAAK,OAAO,OAAO;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,IACA,KAAK,MAAM,KAAK,QAAQ,KAAK,WAAW,gBAAgB;AAAA,IACxD,OAAO,MAAM,KAAK,QAAQ,KAAK,WAAW,QAAQ;AAAA,IAClD,cAAc,CAAC,MAAiB,KAAK,QAAQ,UAAU,IAAI,CAAC;AAAA,IAC5D,aAAa,KAAK;AAAA,IAClB,WAAW,KAAK;AAAA,IAChB,UAAU,MAAM,KAAK,QAAQ,SAAS,EAAE;AAAA,IACxC,iBAAiB,KAAK;AAAA,IACtB,eAAe,KAAK;AAAA,IACpB,UAAU,KAAK;AAAA,EACjB;AAEA,MAAI;AACJ,MAAI;AACF,QAAI,KAAK,QAAQ;AACf,YAAM,SAAS,KAAK,OAAO,KAAK,IAAI;AACpC,YAAM,UAAU,OAAO,WAAW,aAAa,SAAS,MAAM;AAAA,MAAC;AAC/D,sBAAgB;AAAA,QACd,SAAS,MAAM;AACb,cAAI;AACF,oBAAQ;AAAA,UACV,UAAE;AACA,iBAAK,gBAAgB;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,YAAM,UAAU,KAAK,QAAQ,GAAG;AAChC,sBAAgB,cAAc,SAAS,KAAK,IAAI;AAAA,IAClD;AAAA,EACF,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;;;ACpMA,SAAS,WAAW,cAAc;;;ACAlC,YAAY,UAAU;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;AAAA,EACZ,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,MAAI,aAAa,oBAAI,IAAyB;AAC9C,QAAM,UAAU,wBAAwB;AACxC,MAAI,UAAU;AACd,MAAI,aAAa,oBAAI,IAAyB;AAC9C,MAAI,eAAe,oBAAI,IAA6B;AACpD,QAAM,WAAsB,CAAC;AAG7B,QAAM,aAAa,UAA6B;AAChD,QAAM,gBAAgB,UAA0B;AAChD,QAAM,WAAW,UAA0B;AAC3C,QAAM,UAAU,UAA4B;AAG5C,QAAM,WAAW,SAAS,uBAAuB;AACjD;AAAA,IACE;AAAA,aACS,IAAI,aAAa,CAAC;AAAA;AAAA,YAEnB,IAAI,UAAU,CAAC;AAAA;AAAA;AAAA,kBAGT,aAAa;AAAA;AAAA;AAAA,YAGnB,OAAO,oBAAoB,MAAM,YAAY,gBAAgB,CAAC,CAAC;AAAA;AAAA;AAAA,YAG/D,IAAI,QAAQ,CAAC;AAAA,mBACN,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,cAKrB,IAAI,OAAO,CAAC;AAAA,qBACL,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQhC;AAAA,EACF;AAEA,QAAM,UAAU,WAAW;AAC3B,QAAM,aAAa,cAAc;AACjC,QAAM,QAAQ,SAAS;AACvB,QAAM,OAAO,QAAQ;AAErB,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,WAAW,IAAI,QAAQ,KAAK;AAC3C,UAAI,CAAC,OAAQ;AACb,YAAM,SAAS,OAAO,QAAQ;AAC9B,UAAI,kBAAkB,SAAS;AAC7B,cAAM,UAAU,aAAa,IAAI,OAAO,EAAE;AAC1C,YAAI,SAAS;AACX,gBAAM,WAAW,QAAQ;AACzB,kBAAQ,cAAc;AACtB,qBAAW,MAAM;AACf,oBAAQ,cAAc;AAAA,UACxB,GAAG,GAAG;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,WAAS,QAAQ,KAAmB;AAClC,YAAQ,WAAW;AACnB,iBAAa,oBAAI,IAAI;AACrB,mBAAe,oBAAI,IAAI;AAEvB;AAAA,MACE,OAAO,MAAM;AAAA,QACX,CAAC,SACC;AAAA,oBACU,GAAG,iBAAiB,qBAAqB,CAAC;AAAA;AAAA,mCAE3B,KAAK,EAAE;AAAA;AAAA,MAEpC,CAAC;AAAA,MACD;AAAA,IACF;AAEA,UAAM,OAAO,KAAK,iBAA8B,wBAAwB;AACxE,SAAK,QAAQ,CAAC,KAAK,MAAM;AACvB,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,UAAU,KAAK,UAAU,eAAe,KAAK,OAAO,IAAI;AAC9D,YAAM,EAAE,OAAO,QAAQ,IAAI,kBAAkB,KAAK;AAAA,QAChD;AAAA,QACA,OAAO,KAAK;AAAA,QACZ,UAAU,KAAK,YAAY,KAAK,YAAY;AAAA,MAC9C,CAAC;AACD,iBAAW,IAAI,KAAK,IAAI,GAAG;AAC3B,mBAAa,IAAI,KAAK,IAAI,OAAO;AAAA,IACnC,CAAC;AAED,cAAU;AAAA,EACZ;AAEA,WAASC,cAAmB;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,IAAAA,YAAW;AAAA,EACb;AAEA,UAAQ,SAAS,KAAK,CAAC;AACvB,EAAAA,YAAW;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,mBAAa,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAClD,YAAM,MAAM,SAAS,KAAK;AAC1B,UAAI,QAAQ,QAAS;AACrB,cAAQ,GAAG;AACX,MAAAA,YAAW;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;;;AHxNA,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,OACY;AACZ,QAAM,cAAc,UAA0B;AAC9C,QAAM,cAAc,UAA0B;AAC9C,QAAM,WAAW,UAA0B;AAC3C,QAAM,YAAY,UAAuB;AACzC,QAAM,aAAa,UAA6B;AAChD,QAAM,gBAAgB,UAA2B;AACjD,QAAM,iBAAiB,UAA4B;AACnD,QAAM,iBAAiB,UAA0B;AACjD,QAAM,mBAAmB,UAA0B;AACnD,QAAM,gBAAgB,UAA0B;AAChD,QAAM,iBAAiB,UAA0B;AACjD,QAAM,sBAAsB,UAA0B;AAEtD,QAAM,eAAe,mBAAmB;AAAA,IACtC,cAAc,CAAC,SAAS;AACtB,UAAI,iBAAiB;AACnB,yBAAiB,MAAM,MAAM,gBAAgB,OAAO,SAAS;AAC/D,UAAI,CAAC;AACH;AAAA,UAAsB,MACpB,eAAe,OAAO,MAAM,EAAE,eAAe,KAAK,CAAC;AAAA,QACrD;AAAA,IACJ;AAAA,EACF,CAAC;AAED,QAAM,OAAO,gBAAgB;AAC7B,OAAK,aAAa,qCAAqC,EAAE;AAEzD,QAAM,cAAc,MAAM,UAAU,OAAO;AAC3C,QAAM,gBAAgB,MAAM;AAC1B,QAAI,eAAe;AACjB,gBAAU,cAAc,eAAe,MAAM,KAAK;AAAA,EACtD;AACA,QAAM,kBAAkB,CAAC,MAAkB;AACzC,QAAI,EAAE,WAAW,YAAY,MAAO,WAAU,gBAAgB;AAAA,EAChE;AAEA;AAAA,IACE;AAAA;AAAA,UAEM,IAAI,WAAW,CAAC;AAAA;AAAA,gBAEV,cAAc;AAAA,0BACJ,QAAQ;AAAA;AAAA;AAAA,UAGxB,IAAI,WAAW,CAAC;AAAA;AAAA,gBAEV,cAAc;AAAA,0BACJ,QAAQ;AAAA,iBACjB,eAAe;AAAA;AAAA,eAEjB,IAAI,QAAQ,CAAC,sCAAsC,WAAW;AAAA;AAAA,cAE/D,IAAI,SAAS,CAAC;AAAA;AAAA,oBAER,YAAY;AAAA;AAAA,sDAEsB,oBAAoB;AAAA;AAAA,kBAExD,IAAI,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA,wBAIT,iBAAiB;AAAA;AAAA,yBAEhB,WAAW;AAAA;AAAA,kBAElB,KAAK,WAAW,eAAe,CAAC;AAAA;AAAA;AAAA,kBAGhC,IAAI,aAAa,CAAC;AAAA;AAAA;AAAA,wBAGZ,sBAAsB;AAAA,mBAC3B,KAAK,QAAQ,iBAAiB,CAAC;AAAA;AAAA;AAAA,kBAGhC,IAAI,cAAc,CAAC;AAAA;AAAA;AAAA;AAAA,wBAIb,kBAAkB;AAAA,yBACjB,aAAa;AAAA;AAAA;AAAA,kBAGpB,IAAI,cAAc,CAAC;AAAA;AAAA,wBAEb,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAM5B,IAAI,gBAAgB,CAAC;AAAA;AAAA,oBAEf,oBAAoB;AAAA;AAAA,uDAEe,YAAY;AAAA;AAAA,gBAEnD,IAAI,aAAa,CAAC;AAAA;AAAA,sBAEZ,iBAAiB;AAAA;AAAA;AAAA,gBAGvB,IAAI,cAAc,CAAC;AAAA;AAAA,sBAEb,iBAAiB;AAAA;AAAA;AAAA,iBAGtB,IAAI,mBAAmB,CAAC;AAAA;AAAA;AAAA;AAAA,IAIrC;AAAA,EACF;AAGA,sBAAoB,MAAO,YAAY,aAAa,OAAO;AAE3D,QAAM,WAAW,YAAY;AAC7B,QAAM,QAAQ,SAAS;AACvB,QAAM,SAAS,UAAU;AACzB,QAAM,UAAU,WAAW;AAC3B,QAAM,aAAa,cAAc;AACjC,QAAM,cAAc,eAAe;AACnC,QAAM,cAAc,eAAe;AACnC,QAAM,gBAAgB,iBAAiB;AACvC,QAAM,aAAa,cAAc;AACjC,QAAM,cAAc,eAAe;AACnC,QAAM,WAAW,YAAY;AAE7B,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,mBAAa,QAAQ;AACrB,eAAS,OAAO;AAChB,eAAS,OAAO;AAAA,IAClB;AAAA,EACF;AACF;AAEA,SAAS,kBAA+B;AACtC,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,OAAK,aAAa,8BAA8B,EAAE;AAClD,OAAK,aAAa,eAAe,MAAM;AACvC,OAAK,YAAY;AACjB;AAAA,IACE;AAAA;AAAA;AAAA;AAAA;AAAA,gBAKY,eAAe;AAAA;AAAA,UAErB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAMD;AAAA;AAAA;AAAA,IAGL;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,WAAW,KAAa,OAA4B;AAClE,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,OAAK,YAAY;AACjB,SAAO,aAAa,KAAK,UAAU,OAAO,GAAG,CAAC,IAAI,IAAI;AACtD,SAAO;AACT;AAEO,SAAS,sBAAmC;AACjD,QAAM,MAAM,SAAS,cAAc,MAAM;AACzC,MAAI,aAAa,eAAe,MAAM;AACtC,MAAI,YAAY;AAChB,SAAO;AACT;AAQO,SAAS,uBACd,KACA,OACA,SACkB;AAClB,QAAM,MAAM,SAAS,cAAc,QAAQ;AAC3C,MAAI,aAAa,QAAQ,QAAQ;AACjC,MAAI,aAAa,cAAc,KAAK;AACpC,MAAI,YAAY;AAEhB,QAAM,UAAU,UAA2B;AAC3C,SAAO,aAAa,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,OAAO,GAAG,CAAC,IAAI,GAAG;AACrE,MAAI,iBAAiB,SAAS,OAAO;AAErC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,SAAS,MAAc;AACrB,UAAI,QAAQ,MAAO,SAAQ,MAAM,cAAc;AAC/C,UAAI,aAAa,cAAc,IAAI;AAAA,IACrC;AAAA,IACA,YAAY,UAAmB;AAC7B,UAAI,WAAW;AACf,UAAI,aAAa,iBAAiB,OAAO,QAAQ,CAAC;AAAA,IACpD;AAAA,EACF;AACF;;;AIpRA,IAAM,iBAAiB;AA2BvB,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;AACA,QAAI,YAAY,UAAU,CAAC,gBAAgB,MAAM,IAAI,GAAG;AACtD,YAAM,WAAW,MAAM,KAAK;AAAA,QAC1B;AAAA,MACF;AACA,gBAAU,MAAM,EAAE,eAAe,KAAK,CAAC;AAAA,IACzC;AAAA,EACF;AACA,QAAM;AACN,MAAI,OAAO,0BAA0B,YAAY;AAC/C,0BAAsB,KAAK;AAAA,EAC7B;AACF;AAEA,SAAS,gBAAgB,MAA4B;AACnD,QAAM,WAAW,KAAK,YAAY;AAClC,QAAM,SACJ,oBAAoB,aAChB,SAAS,gBACT,SAAS;AACf,SAAO,kBAAkB,eAAe,KAAK,SAAS,MAAM;AAC9D;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,UAAU,IAAI;AAC3D,QAAM,QAAQ,QAAQ,SAAS;AAC/B,QAAM,MAAM,QAAQ,OAAO,UAAU;AACrC,QAAM,gBAAgB,QAAQ;AAE9B,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,MAAM,IAAI,QAAQ,IAAI,SAAS;AACvC,cAAI,MAAM,UAAU,GAAG;AACrB,oBAAQ,KAAK,WAAW,YAAY;AAAA,UACtC,OAAO;AACL,oBAAQ,KAAK,WAAW,gBAAgB;AAAA,UAC1C;AAAA,QACF;AAAA,QACA,iBAAiB,MAAM,QAAQ,KAAK,WAAW,QAAQ;AAAA,QACvD,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,kBAAQ,KAAK,WAAW,SAAS;AAAA,YAC/B,IAAI;AAAA,YACJ,KAAK;AAAA,UACP,CAAC;AAAA,QACH;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;AACvB,WAAU,SAAS,SAAS;AAAA,EAC9B;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,WAAK,YAAY,QAAQ,YAAY,KAAK;AAC1C,sBAAgB,IAAI,UAAU,MAAM;AAClC,cAAM,OAAO,IAAI,IAAI;AACrB,aAAK,SAAS,MAAM,SAAS,aAAa;AAC1C,aAAK,YAAY,MAAM,YAAY,KAAK;AAAA,MAC1C,CAAC;AAAA,IACH,WAAW,WAAW;AACpB,kBAAY,KAAK,WAAW,UAAU,KAAK,UAAU,KAAK,CAAC;AAAA,IAC7D;AAEA,UAAM,iBAAiB,oBAAoB;AAC3C,UAAMA,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,WAASC,UAAe;AACtB,QAAI,CAAC,UAAU,YAAa;AAC5B,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,MACzDF,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;AAAA,UACA;AAAA,UACA,eAAe,MAAM,EAAE;AAAA,UACvB,iBAAiB,QAAQ,oBAAoB,MAAM,MAAM;AAAA,UAAC;AAAA,UAC1D;AAAA,UACA,UAAU,QAAQ;AAAA,QACpB,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,EAAAE,QAAO;AACP,QAAM,cAAc,QAAQ,UAAUA,OAAM;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;;;AC7aO,IAAM,oBAAoB;AAAA,EAC/B,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,eAAe;AAAA,EACf,aAAa;AAAA,EACb,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,aAAa;AAAA,EACb,cAAc;AAAA,EACd,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,SAAS;AACX;AAEO,IAAM,qBAAiD;AAAA,EAC5D,SAAS,kBAAkB;AAAA,EAC3B,SAAS,kBAAkB;AAAA,EAC3B,MAAM,kBAAkB;AAAA,EACxB,QAAQ,kBAAkB;AAAA,EAC1B,QAAQ,kBAAkB;AAAA,EAC1B,WAAW,kBAAkB;AAAA,EAC7B,MAAM,kBAAkB;AAAA,EACxB,OAAO,kBAAkB;AAC3B;AAEO,IAAM,uBAAmD;AAAA,EAC9D,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,MAAM;AAAA,EACN,OAAO;AACT;AAEO,IAAMC,yBAAwC;AAAA,EACnD,IAAI,kBAAkB;AAAA,EACtB,KAAK;AACP;AAEO,SAAS,WAAWC,MAA8C;AACvE,MAAI,CAACA,KAAK,QAAOD;AACjB,SAAO,EAAE,IAAI,mBAAmBC,KAAI,IAAI,GAAG,KAAK,KAAK;AACvD;AAEO,SAAS,aAAaA,MAA8C;AACzE,MAAI,CAACA,KAAK,QAAOD;AACjB,SAAO,EAAE,IAAI,qBAAqBC,KAAI,IAAI,GAAG,KAAAA,KAAI;AACnD;;;AC1DA;AAAA,EACE;AAAA,EACA;AAAA,EACA,eAAAC;AAAA,EACA,QAAAC;AAAA,EACA;AAAA,EACA,iBAAiBC;AAAA,OAEZ;AASP,IAAI,kBAAiC;AACrC,IAAI,eAAoC;AAEjC,SAAS,iBAAiB,UAAkB,QAA0B;AAC3E,oBAAkB;AAClB,iBAAe;AACjB;AAEA,SAAS,YAAY,UAAgC;AACnD,SAAO,MAAM;AACX,UAAMC,OAAMC,qBAAoB,QAAQ;AACxC,IAAAD,KAAI,aAAa,eAAe,MAAM;AACtC,WAAO,eAAeA,IAAG;AAAA,EAC3B;AACF;AAEA,SAAS,cAA2B;AAClC,QAAM,UAAUC,qBAAoB,YAAY;AAChD,UAAQ,aAAa,SAAS,cAAc;AAC5C,SAAO,eAAe,OAAO;AAC/B;AAEA,IAAM,UAAqE;AAAA,EACzE,EAAE,OAAO,SAAS,OAAO,SAAS,MAAMC,aAAY;AAAA,EACpD,EAAE,OAAO,aAAa,OAAO,aAAa,MAAM,OAAO;AAAA,EACvD,EAAE,OAAO,aAAa,OAAO,aAAa,MAAMC,MAAK;AAAA,EACrD,EAAE,OAAO,YAAY,OAAO,aAAa,MAAM,IAAI;AACrD;AAEO,IAAM,oBAA0B;AAAA,EACrC,IAAI,kBAAkB;AAAA,EACtB,SAAS,MAAM;AAAA,EACf,QAAQ,CAACC,SAASA,OAAM,EAAE,IAAI,kBAAkB,cAAc,KAAAA,KAAI,IAAI;AAAA,EACtE,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,aAAa,CAAC,SACZ,KAAK,cAA2B,2BAA2B;AAAA,EAC7D,SAAS,OAAO,EAAE,MAAM,QAAQ,IAAI,UAAU,OAAO,CAAC,EAAE;AAAA,EACxD,OAAO,KAAkB,MAA4B;AACnD,QAAI,OAAO;AAEX,UAAM,QAAoB,QAAQ,IAAI,CAAC,OAAO;AAAA,MAC5C,OAAO,EAAE;AAAA,MACT,OAAO,EAAE;AAAA,MACT,SAAS,YAAY,EAAE,IAAI;AAAA,IAC7B,EAAE;AAEF,UAAM,UAAuB;AAAA,MAC3B,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,YAAY;AAAA,MACZ;AAAA,MACA,YAAY;AAAA,MACZ,UAAU,OAAO,SAAS;AACxB,YAAI,QAAQ,CAAC,mBAAmB,CAAC,IAAI,SAAS,cAAe;AAC7D,eAAO;AAEP,cAAM,MAAM,KAAK;AAAA,UACf,2BAA2B,KAAK,KAAK;AAAA,QACvC;AACA,cAAM,eAAe,KAAK,cAAc,yBAAyB;AACjE,YAAI,OAAO,cAAc;AACvB,uBAAa,YAAY,YAAY,CAAC;AACtC,cAAI,MAAM,UAAU;AACpB,cAAI,MAAM,gBAAgB;AAAA,QAC5B;AAEA,YAAI;AACF,gBAAM,IAAI,SAAS;AAAA,YACjB;AAAA,YACA,KAAK;AAAA,UACP;AACA,gBAAM,OAAO;AACb,4BAAkB;AAClB,yBAAe;AACf,iBAAO;AAAA,QACT,QAAQ;AACN,iBAAO;AACP,cAAI,KAAK;AACP,gBAAI,MAAM,UAAU;AACpB,gBAAI,MAAM,gBAAgB;AAC1B,kBAAM,SAAS,QAAQ,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,KAAK;AACzD,gBAAI,QAAQ;AACV,oBAAM,OAAO,IAAI,cAAc,yBAAyB;AACxD,kBAAI;AACF,qBAAK;AAAA,kBACH,eAAeH,qBAAoB,OAAO,IAAI,CAAC;AAAA,gBACjD;AAAA,YACJ;AAAA,UACF;AACA,gBAAM,QAAQ,SAAS,cAAc,GAAG;AACxC,gBAAM,YAAY;AAClB,gBAAM,cAAc;AACpB,eAAK,cAAc,2BAA2B,GAAG,QAAQ,KAAK;AAC9D,qBAAW,MAAM,MAAM,OAAO,GAAG,GAAI;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAEA,UAAM,UAAU,kBAAkB,SAAS,KAAK,IAAI;AACpD,WAAO,QAAQ;AAAA,EACjB;AACF;;;ACvHA;AAAA,EACE;AAAA,EACA,QAAAI;AAAA,EACA;AAAA,EACA,wBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAAC;AAAA,EACA,iBAAiBC;AAAA,OACZ;;;ACPA,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;AAMA,SAAS,iBACP,UACuC;AACvC,MAAI,OAAO,aAAa,YAAa,QAAO;AAC5C,QAAM,WAAW,SAAS,YAAY;AACtC,QAAM,SAAS,SAAS,KAAK,OAAO;AACpC,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;AACT;AAGO,SAAS,kBAAkB,KAAiC;AACjE,SAAO,iBAAiB,IAAI,QAAQ,GAAG,QAAQ;AACjD;AAGO,SAAS,qBACd,UACe;AACf,SAAO,iBAAiB,QAAQ,GAAG,QAAQ;AAC7C;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,eAAWC,QAAO,WAAW,MAAM,YAAY,CAAC,GAAG;AACjD,UAAIA,KAAI,SAAS,aAAaA,KAAI,SAAS,SAAU;AACrD,YAAM,SAAS,IAAI,SAAS,IAAIA,KAAI,MAAMA,KAAI,EAAE;AAChD,UAAI,CAAC,OAAQ;AACb,YAAM,MAAM,GAAGA,KAAI,IAAI,IAAIA,KAAI,EAAE;AACjC,UAAI,KAAK,IAAI,GAAG,EAAG;AACnB,WAAK,IAAI,GAAG;AACZ,eAAS,KAAK,EAAE,QAAQ,KAAAA,KAAI,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;;;AFvFA,SAAS,WAAW,UAAmC;AACrD,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM,MAAMC,qBAAoB,YAAY;AAAA,IAC5C,SAAS;AAAA,EACX;AACF;AAEA,SAAS,eAAeC,MAAgB,KAA+B;AACrE,QAAM,QAAQ,IAAI,MAAM,WAAWA,IAAG;AACtC,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO,QAAQ,0BAA0B;AAAA,IACzC,UAAU;AAAA,IACV,MAAM,MAAMD,qBAAoB,QAAQ,UAAU,IAAI;AAAA,IACtD,SAAS,MAAM;AACb,UAAI,MAAM,eAAeC,IAAG;AAC5B,UAAI,MAAM;AACV,UAAI,KAAK,EAAE,IAAI,kBAAkB,gBAAgB,KAAK,KAAK,CAAC;AAAA,IAC9D;AAAA,EACF;AACF;AAEA,SAAS,cACPA,MACA,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,MAAMD,qBAAoBE,KAAI;AAAA,QACpC,MAAM,UAAU;AACd,cAAI;AACF,kBAAM,UAAU,UAAU,UAAU,IAAI;AAAA,UAC1C,QAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACA,UAAQ,KAAK;AAAA,IACX,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM,MAAMF,qBAAoBG,qBAAoB;AAAA,IACpD,SAAS,MAAM,IAAI,KAAK,EAAE,IAAI,kBAAkB,QAAQ,KAAAF,KAAI,CAAC;AAAA,EAC/D,CAAC;AACD,MACG,IAAI,OAA+B,aAAa,gBAAgB,GAAG,SACpE;AACA,YAAQ,KAAK;AAAA,MACX,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,MAAM,MAAMD,qBAAoBI,WAAU;AAAA,MAC1C,SAAS,MAAM,IAAI,KAAK,EAAE,IAAI,kBAAkB,YAAY,KAAAH,KAAI,CAAC;AAAA,IACnE,CAAC;AAAA,EACH;AACA,UAAQ,KAAK,eAAeA,MAAK,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,QAAMA,OAAiB,EAAE,MAAM,QAAQ,IAAI,KAAK,GAAG;AACnD,QAAM,WAAW,MAAM,IAAI,MAAM,SAASA,IAAG;AAC7C,QAAM,OAAoB;AAAA,IACxB,OAAO,UAAUA,KAAI,IAAI,IAAIA,KAAI,EAAE;AAAA,IACnC,OAAO,YAAY,IAAI;AAAA,IACvB,OAAO;AAAA,IACP,KAAK,GAAGA,KAAI,IAAI,IAAIA,KAAI,EAAE;AAAA,IAC1B,SAASA;AAAA,IACT,YAAY,EAAE,QAAQ,KAAK;AAAA,IAC3B,SAAS,cAAcA,MAAK,MAAM,KAAK,QAAQ;AAAA,IAC/C,SAAS,EAAE,MAAM,UAAU,KAAAA,KAAI;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,MAAMD,qBAAoB,OAAO;AAAA,IAC1C,SAAS,YAAY,QAAQ;AAAA,IAC7B,SAAS,EAAE,MAAM,QAAQ,IAAI,kBAAkB,YAAY;AAAA,EAC7D;AACF;AAEA,IAAM,yBAAsC,oBAAI,IAAI;AAAA,EAClD,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AACpB,CAAC;AAED,SAAS,kBAAkB,KAAiC;AAC1D,QAAM,MAAqB,CAAC;AAC5B,aAAW,QAAQ,IAAI,MAAM,KAAK,GAAG;AACnC,QAAI,uBAAuB,IAAI,KAAK,EAAE,EAAG;AACzC,QAAI,CAAC,KAAK,QAAS;AACnB,UAAM,WAAW,MAAM,IAAI,KAAK,EAAE,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC;AAC1D,UAAM,WACJ,OAAO,KAAK,QAAQ,aAAa,aAC7B,KAAK,QAAQ,SAAS,IACtB,KAAK,QAAQ;AACnB,QAAI,KAAK;AAAA,MACP,OAAO,QAAQ,KAAK,EAAE;AAAA,MACtB,OAAO,KAAK,QAAQ;AAAA,MACpB;AAAA,MACA,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,iBAAWC,QAAO,IAAI,MAAM,UAAU,GAAG;AACvC,YAAIA,KAAI,SAAS,QAAS;AAC1B,cAAM,SAAS,IAAI,SAAS,IAAIA,KAAI,MAAMA,KAAI,EAAE;AAChD,YAAI,CAAC,OAAQ;AACb,cAAM,QAAQ,WAAWA,KAAI,IAAI;AACjC,cAAM,WAAW,MAAM,IAAI,MAAM,SAASA,IAAG;AAC7C,cAAM,KAAK;AAAA,UACT,OAAO,YAAYA,KAAI,IAAI,IAAIA,KAAI,EAAE;AAAA,UACrC,OAAO,YAAY,MAAM;AAAA,UACzB,KAAK,GAAGA,KAAI,IAAI,IAAIA,KAAI,EAAE;AAAA,UAC1B,OAAO,eAAe;AAAA,UACtB,SAASA;AAAA,UACT,YAAY,EAAE,OAAO;AAAA,UACrB,SAAS,MAAMD,qBAAoB,MAAM,IAAI;AAAA,UAC7C,SAAS,cAAcC,MAAK,QAAQ,KAAK,QAAQ;AAAA,UACjD,SAAS,EAAE,MAAM,UAAU,KAAAA,KAAI;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;AAEpC,iBAAWA,QAAO,IAAI,MAAM,QAAQ,GAAG;AACrC,YAAIA,KAAI,SAAS,QAAS;AAC1B,YAAI,OAAO,IAAI,GAAGA,KAAI,IAAI,IAAIA,KAAI,EAAE,EAAE,EAAG;AACzC,cAAM,SAAS,IAAI,SAAS,IAAIA,KAAI,MAAMA,KAAI,EAAE;AAChD,YAAI,CAAC,OAAQ;AACb,cAAM,QAAQ,WAAWA,KAAI,IAAI;AACjC,cAAM,WAAW,MAAM,IAAI,MAAM,SAASA,IAAG;AAC7C,cAAM,KAAK;AAAA,UACT,OAAO,UAAUA,KAAI,IAAI,IAAIA,KAAI,EAAE;AAAA,UACnC,OAAO,YAAY,MAAM;AAAA,UACzB,KAAK,GAAGA,KAAI,IAAI,IAAIA,KAAI,EAAE;AAAA,UAC1B,OAAO,eAAe;AAAA,UACtB,SAASA;AAAA,UACT,YAAY,EAAE,OAAO;AAAA,UACrB,SAAS,MAAMD,qBAAoB,MAAM,IAAI;AAAA,UAC7C,SAAS,cAAcC,MAAK,QAAQ,KAAK,QAAQ;AAAA,UACjD,SAAS,EAAE,MAAM,UAAU,KAAAA,KAAI;AAAA,QACjC,CAAC;AAAA,MACH;AAEA,YAAM,aAAa,oBAAI,IAAoB;AAC3C,iBAAW,QAAQ,OAAO;AACxB,cAAM,IAAI,KAAK,SAAS;AACxB,YAAI,CAAC,WAAW,IAAI,CAAC,EAAG,YAAW,IAAI,GAAG,WAAW,IAAI;AAAA,MAC3D;AACA,YAAM;AAAA,QACJ,CAAC,GAAG,OACD,WAAW,IAAI,EAAE,SAAS,EAAE,KAAK,MACjC,WAAW,IAAI,EAAE,SAAS,EAAE,KAAK;AAAA,MACtC;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,MAAM,SAAS,QAAQ,QAAQ,GAAG;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AGtSA,SAAS,gBAAgB;AAWzB,SAAS,uBAAuBI,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,SAAO,SAAS,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;;;AC3CO,SAAS,qBAAqB,MAEnB;AAChB,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,SAAO;AAAA,IACL,KAAK,KAAK,QAAQ;AAAA,IAClB,OAAO,MAAM,WAAW,KAAK,KAAK;AAAA,IAClC,WAAW,KAAK,aAAa;AAAA,IAC7B,WAAW,KAAK;AAAA,IAChB,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAClC,UAAU;AAAA,MACR,GAAG,KAAK,cAAc;AAAA,MACtB,GAAG,KAAK,eAAe;AAAA,IACzB;AAAA,EACF;AACF;;;ACvBO,SAAS,YACd,KACA,MACmB;AACnB,MAAI,CAAC,KAAM,QAAO,CAAC;AACnB,QAAM,MAAgB,CAAC;AACvB,aAAWC,QAAO,MAAM;AACtB,UAAM,SAAS,IAAI,SAAS,IAAIA,KAAI,MAAMA,KAAI,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;;;ACjBA,IAAMC,oBAA4C,oBAAI,IAAI;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,eAA4B,CAAC,EAAE,KAAK,UAAK,OAAO,OAAO,CAAC;AAEvD,SAAS,eAAeC,MAAgB,KAA8B;AAC3E,QAAM,aAAa,GAAGA,KAAI,IAAI,IAAIA,KAAI,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,aAAaA,MAA8B;AACzD,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM,EAAE,IAAI,kBAAkB,QAAQ,KAAAA,KAAI;AAAA,IAC1C,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,QAAQ,kBAAkB;AAAA,MAC1B,SAASA,KAAI;AAAA,IACf;AAAA,EACF;AACF;AAEO,SAAS,kBACdA,MACA,OACc;AACd,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MACE,SAAS,OAAQ,UAAU,IAAI,WAAW,GAAG,KAAK,WAAY;AAAA,IAChE,MAAM,EAAE,IAAI,kBAAkB,eAAe,KAAAA,KAAI;AAAA,IACjD,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,QAAQ,kBAAkB;AAAA,MAC1B,SAASA,KAAI;AAAA,IACf;AAAA,EACF;AACF;AAEO,SAAS,WAAWA,MAA8B;AACvD,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM,EAAE,IAAI,kBAAkB,YAAY,KAAAA,KAAI;AAAA,IAC9C,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,QAAQ,kBAAkB;AAAA,MAC1B,SAASA,KAAI;AAAA,IACf;AAAA,EACF;AACF;AAEO,SAAS,sBAAsBA,MAAgB,KAAwB;AAC5E,QAAM,WAAW,qBAAqB;AACtC,QAAM,aAAa,eAAe,GAAG;AACrC,QAAM,QAAkB;AAAA,IACtB,QAAQA,KAAI,IAAI,KAAKA,KAAI,EAAE;AAAA,IAC3B,eAAeA,KAAI,IAAI;AAAA,IACvB,eAAeA,KAAI,EAAE;AAAA,IACrB,GAAI,aAAa,CAAC,mBAAmB,UAAU,IAAI,IAAI,CAAC;AAAA,IACxD;AAAA,IACA,cAAc,SAAS,GAAG;AAAA,IAC1B,eAAe,SAAS,SAAS,EAAE;AAAA,IACnC,GAAI,SAAS,YAAY,CAAC,qBAAqB,SAAS,SAAS,EAAE,IAAI,CAAC;AAAA,IACxE,mBAAmB,SAAS,SAAS,CAAC,OAAI,SAAS,SAAS,CAAC;AAAA,IAC7D,qBAAqB,SAAS,SAAS;AAAA,IACvC,oBAAoB,SAAS,SAAS;AAAA,EACxC;AACA,SAAO,MAAM,KAAK,IAAI,IAAI;AAC5B;AAEO,SAAS,mBACdA,MACA,KACc;AACd,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM,sBAAsBA,MAAK,GAAG;AAAA,IACpC,QAAQ,EAAE,MAAM,YAAY,UAAU,YAAY;AAAA,EACpD;AACF;AAEO,SAAS,uBAAuBA,MAA8B;AACnE,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,WAAWA;AAAA,IACX,QAAQ,EAAE,MAAM,YAAY,UAAU,YAAY;AAAA,EACpD;AACF;AAEO,SAAS,qBAAqBA,MAA8B;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,qBAAqBA,IAAG,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,CAACA,SAAQA,KAAI,SAAS;AAAA,IAC/B,QAAQ;AAAA,IACR,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,CAAC;AACjC,YAAM,QAAQ,IAAI;AAGlB,cAAQ,KAAK,EAAE,GAAG,aAAa,IAAI,GAAG,GAAG,OAAO,SAAS,CAAC;AAC1D,YAAM,cAAc,IAAI,SAAS,WAAW,MAAM,IAAI,IAAI,EAAE,EAAE;AAC9D,UAAI,cAAc,GAAG;AACnB,gBAAQ,KAAK;AAAA,UACX,GAAG,kBAAkB,IAAI,KAAK,WAAW;AAAA,UACzC,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AACA,UAAI,OAAO,aAAa,gBAAgB,GAAG,SAAS;AAClD,gBAAQ,KAAK,EAAE,GAAG,WAAW,IAAI,GAAG,GAAG,OAAO,SAAS,CAAC;AAAA,MAC1D;AAGA,UAAID,kBAAiB,IAAI,IAAI,KAAK,qBAAqB,IAAI,GAAG,GAAG;AAC/D,gBAAQ,KAAK,EAAE,GAAG,uBAAuB,IAAI,GAAG,GAAG,OAAO,UAAU,CAAC;AACrE,gBAAQ,KAAK,EAAE,GAAG,qBAAqB,IAAI,GAAG,GAAG,OAAO,UAAU,CAAC;AAAA,MACrE;AACA,cAAQ,KAAK;AAAA,QACX,GAAG,eAAe,IAAI,KAAK,WAAW,GAAG;AAAA,QACzC,OAAO;AAAA,MACT,CAAC;AACD,cAAQ,KAAK;AAAA,QACX,GAAG,mBAAmB,IAAI,KAAK,WAAW,GAAG;AAAA,QAC7C,OAAO;AAAA,MACT,CAAC;AAED,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,UAAI,CAACA,kBAAiB,IAAI,IAAI,GAAG;AAC/B,iBAAS,KAAK;AAAA,UACZ,IAAI;AAAA,UACJ,OAAO,eAAe;AAAA,UACtB,UAAU,YAAY,KAAK,MAAM,QAAQ;AAAA,UACzC,YAAY;AAAA,QACd,CAAC;AAAA,MACH;AACA,UAAIA,kBAAiB,IAAI,IAAI,KAAK,MAAM,UAAU,QAAQ;AACxD,cAAM,kBAAkB,KAAK,SAC1B,IAAI,CAAC,QAAQ,IAAI,SAAS,IAAI,WAAW,GAAG,CAAC,EAC7C,OAAO,CAAC,MAAkC,CAAC,CAAC,CAAC;AAChD,YAAI,gBAAgB,SAAS,GAAG;AAC9B,mBAAS,KAAK;AAAA,YACZ,IAAI;AAAA,YACJ,OAAO;AAAA,YACP,UAAU;AAAA,YACV,YAAY;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF;AACA,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;;;ACzRA,SAAS,kBAAkB,KAAkBE,MAA0B;AACrE,QAAMC,MAAK,qBAAqBD,IAAG;AACnC,MAAI,CAACC,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,KAAkBD,MAA+B;AACtE,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO,eAAe;AAAA,IACtB,UAAU,kBAAkB,KAAKA,IAAG;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,CAAC,sBAAsB,KAAK,OAAO,EAAE,CAAC;AACxE,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;AACnB,CAAC;AAEM,IAAM,mBAAmB,uBAAuB;AAAA,EACrD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,eAAe;AACjB,CAAC;AAEM,IAAM,sBAAsB,uBAAuB;AAAA,EACxD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,eAAe;AAAA,EACf,iBAAiB;AACnB,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;;;ACrFD,SAAS,OAAO,QAA4B;AAC1C,QAAME,OAAiB,EAAE,MAAM,OAAO,MAAM,IAAI,UAAU,MAAM,EAAE;AAClE,SAAO;AAAA,IACL,OAAO,UAAUA,KAAI,IAAI,IAAIA,KAAI,EAAE;AAAA,IACnC,OAAO,YAAY,MAAM;AAAA,IACzB,KAAK,GAAGA,KAAI,IAAI,IAAIA,KAAI,EAAE;AAAA,IAC1B,SAASA;AAAA,IACT,YAAY,EAAE,OAAO;AAAA,IACrB,KAAAA;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,QAAQ,MAAMC;AAAA,IACd,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,MAAM,SAAU,KAAoB,GAAG;AAAA,MACjE;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;;;ACnEA,IAAI,aAA4B;AAEzB,SAAS,oBAAoB,IAAkB;AACpD,eAAa;AACf;AAEA,SAAS,WAAW,KAAuC;AACzD,MAAI,CAAC,IAAI,OAAO,CAAC,WAAY,QAAO;AACpC,QAAM,UAAU,IAAI,SAAS,WAAW,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;AAChE,SAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,OAAO,UAAU,KAAK;AACrD;AAEO,IAAM,mBAAyB;AAAA,EACpC,IAAI,kBAAkB;AAAA,EACtB,SAAS,MAAM;AAAA,EACf,QAAQ,CAACC,UAAS,EAAE,IAAI,kBAAkB,eAAe,KAAAA,KAAI;AAAA,EAC7D,YAAY;AAAA,EACZ,aAAa,CAAC,SACZ,KAAK;AAAA,IACH;AAAA,EACF;AAAA,EACF,SAAS,CAAC,QAAuB;AAC/B,UAAM,SAAS,WAAW,GAAG;AAC7B,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,QACL,MAAM;AAAA,QACN,YAAY,IAAI,KAAK,QAAQ;AAAA,QAC7B,UAAU,IAAI,OAAO;AAAA,MACvB;AAAA,IACF;AAEA,UAAM,YACH,YAAuC,OAAO,IAAI,KAAK,OAAO;AACjE,UAAM,WACH,gBAA2C,OAAO,QAAQ,KAC3D,OAAO;AAET,UAAM,WAA4B,CAAC;AAEnC,QAAI,OAAO,MAAM;AACf,eAAS,KAAK,EAAE,IAAI,eAAe,MAAM,OAAO,KAAK,CAAC;AAAA,IACxD;AAEA,QAAI,OAAO,YAAY;AACrB,eAAS,KAAK,EAAE,IAAI,cAAc,KAAK,OAAO,WAAW,CAAC;AAAA,IAC5D;AAEA,UAAM,cAAuD,CAAC;AAC9D,QAAI,OAAO,IAAK,aAAY,KAAK,EAAE,OAAO,OAAO,OAAO,OAAO,IAAI,CAAC;AACpE,QAAI,OAAO,MAAO,aAAY,KAAK,EAAE,OAAO,SAAS,OAAO,OAAO,MAAM,CAAC;AAC1E,QAAI,OAAO;AACT,kBAAY,KAAK,EAAE,OAAO,QAAQ,OAAO,OAAO,UAAU,CAAC;AAC7D,QAAI,YAAY,SAAS,GAAG;AAC1B,eAAS,KAAK,EAAE,IAAI,YAAY,SAAS,YAAY,CAAC;AAAA,IACxD;AAEA,UAAM,UAA0B,CAAC;AACjC,QAAI,IAAI,SAAS,eAAe;AAC9B,cAAQ,KAAK;AAAA,QACX,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,KAAK,MAAM;AACT,2BAAiB,OAAO,IAAI,MAAM,IAAI,IAAI,CAAC;AAC3C,cAAI,KAAK,EAAE,IAAI,kBAAkB,cAAc,CAAC;AAAA,QAClD;AAAA,MACF,CAAC;AAAA,IACH;AACA,QAAI,OAAO,KAAK;AACd,cAAQ,KAAK;AAAA,QACX,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,MAAM,OAAO;AAAA,MACf,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAY,IAAI,KAAK,QAAQ;AAAA,MAC7B,OAAO,OAAO,SAAS;AAAA,MACvB,UAAU;AAAA,QACR,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,YAAY,MAAM;AAAA,UAClB,aAAa,OAAO,SAAS;AAAA,QAC/B,EACG,OAAO,OAAO,EACd,KAAK,QAAK;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;AChGA,SAAS,aAAa,QAAsB,KAA4B;AACtE,QAAM,YACH,YAAuC,OAAO,IAAI,KAAK,OAAO;AACjE,QAAM,WACH,gBAA2C,OAAO,QAAQ,KAC3D,OAAO;AACT,QAAM,MAAM,OAAO,SAAS,OAAO;AACnC,QAAM,QAAQ,IAAI,SAAS,KAAK,IAAI,MAAM,GAAG,EAAE,IAAI,WAAM;AACzD,QAAM,OAAO,IAAI,KAAK,QAAQ;AAC9B,QAAM,UAAyB,CAAC;AAEhC,MAAI,IAAI,SAAS,eAAe;AAC9B,YAAQ,KAAK;AAAA,MACX,IAAI,WAAW,OAAO,EAAE;AAAA,MACxB,OAAO;AAAA,MACP,SAAS,MAAM;AACb,yBAAiB,OAAO,IAAI,MAAM,IAAI,IAAI,CAAC;AAC3C,YAAI,KAAK,EAAE,IAAI,kBAAkB,cAAc,CAAC;AAAA,MAClD;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,OAAO,UAAU,OAAO,EAAE;AAAA,IAC1B,OAAO,SAAS;AAAA,IAChB,UAAU;AAAA,MACR,YAAY,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA,aAAa,OAAO,SAAS;AAAA,IAC/B,EACG,OAAO,OAAO,EACd,KAAK,QAAK;AAAA,IACb,KAAK,UAAU,OAAO,EAAE;AAAA,IACxB,SAAS,MAAM,eAAe,IAAI;AAAA,IAClC;AAAA,EACF;AACF;AAEO,IAAM,oBAA0B;AAAA,EACrC,IAAI,kBAAkB;AAAA,EACtB,SAAS,MAAM;AAAA,EACf,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,OAAO,CAAC,EAAE,KAAK,UAAK,OAAO,SAAS,CAAC;AAAA,EACrC,aAAa,MAAM;AAAA,EACnB,SAAS,CAAC,QAAkC;AAC1C,UAAMC,OAAM,IAAI;AAChB,UAAM,UAAUA,OAAM,IAAI,SAAS,WAAWA,KAAI,MAAMA,KAAI,EAAE,IAAI,CAAC;AACnE,UAAM,QAAQ,QAAQ,IAAI,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAErD,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAI;AAAA,MACJ;AAAA,MACA,YAAY;AAAA,MACZ,QAAQ,CAAC,MAAM,UACb,aAAa,GAAG,KAAK,KAAK,IAAI,KAAK,YAAY,EAAE,IAAI,KAAK;AAAA,MAC5D,UAAU,CAAC,SAAS;AAClB,4BAAoB,KAAK,MAAM,QAAQ,YAAY,EAAE,CAAC;AACtD,YAAI,KAAK,EAAE,IAAI,kBAAkB,cAAc,KAAAA,KAAI,CAAC;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACF;;;AChFA,SAAS,WAAAC,UAAS,iBAAiBC,4BAA2B;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,KAAAC,MAAK,KAAK,IAAI;AAC9B,QAAM,OAAwB;AAAA,IAC5B,OAAO,UAAUA,KAAI,IAAI,IAAIA,KAAI,EAAE;AAAA,IACnC,OAAO,YAAY,QAAQ,IAAI;AAAA,IAC/B,OAAO,kBAAkB,OAAO,IAAI,KAAK,WAAW,OAAO,IAAI;AAAA,IAC/D,KAAK,GAAGA,KAAI,IAAI,IAAIA,KAAI,EAAE;AAAA,IAC1B,SAASA;AAAA,IACT,YAAY,EAAE,QAAQ,KAAK;AAAA,IAC3B,KAAAA;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,QAAQ,MAAMC;AAAA,EACd,SAAS;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM,MAAMC,qBAAoBC,QAAO;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,QAAQJ,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,MAAM,SAAU,KAAyB,GAAG;AAAA,IACtE;AAAA,EACF;AACF;;;ACzGA,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,SAASK,YAAW,GAAmB;AACrC,SAAO,EAAE,WAAW,IAAI,IAAI,EAAE,CAAC,EAAE,YAAY,IAAI,EAAE,MAAM,CAAC;AAC5D;AAEO,SAAS,sBAAsB,SAAgC;AACpE,QAAM,UAAU,QAAQ,SAAS,GAAGA,YAAW,QAAQ,IAAI,CAAC;AAC5D,QAAM,MAAM,QAAQ;AACpB,QAAM,QAAkB;AAAA,IACtB,KAAK,OAAO;AAAA,IACZ;AAAA,IACA,eAAe,QAAQ,IAAI;AAAA,IAC3B,GAAI,QAAQ,WAAW,CAAC,mBAAmB,QAAQ,QAAQ,EAAE,IAAI,CAAC;AAAA,IAClE,mBAAmB,QAAQ,MAAM;AAAA,IACjC;AAAA,IACA;AAAA,IACA,QAAQ,QAAQ;AAAA,IAChB;AAAA,IACA;AAAA,IACA,cAAc,KAAK,GAAG;AAAA,IACtB,GAAI,KAAK,YAAY,CAAC,qBAAqB,IAAI,SAAS,EAAE,IAAI,CAAC;AAAA,IAC/D,mBAAmB,KAAK,SAAS,CAAC,OAAI,KAAK,SAAS,CAAC;AAAA,IACrD,qBAAqB,KAAK,SAAS;AAAA,IACnC,oBAAoB,KAAK,SAAS;AAAA,EACpC;AACA,SAAO,MAAM,KAAK,IAAI,IAAI;AAC5B;;;AC3BA,SAAS,SAAS;AAGX,IAAM,eAAe,EAAE,OAAO;AAAA,EACnC,MAAM,EAAE,KAAK,CAAC,OAAO,WAAW,YAAY,CAAC;AAAA,EAC7C,UAAU,EAAE,KAAK,CAAC,OAAO,UAAU,QAAQ,UAAU,CAAC,EAAE,SAAS;AAAA,EACjE,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS,2BAA2B,CAAC;AACxE,CAAC;AAEM,IAAM,eAA4B;AAAA,EACvC;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,cAAc,OAAO,aAAa;AAAA,IAC7C;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;;;ACxBA,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,eAAeC,MAAoC;AAC1D,QAAM,OAAO,aAAa,IAAIA,KAAI,IAAI;AACtC,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,SAAS;AAAA,IACd,IAAI,IAAI,KAAK,IAAI,OAAOA,KAAI,EAAE,CAAC;AAAA,EACjC;AACF;AAkDA,SAAS,aACP,KACA,aACA,QACA,QACA,gBACA,YACe;AACf,QAAM,UAAU,qBAAqB,EAAE,UAAU,IAAI,SAAS,CAAC;AAC/D,QAAM,QAAQ,OAAO,OAAO,SAAS,EAAE,EAAE,KAAK;AAC9C,QAAM,OAAO,OAAO,OAAO,QAAQ,EAAE,EAAE,KAAK;AAE5C,QAAM,WAAsC,IAAI,OAC5C,EAAE,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,QAAQ,OAAU,IACpD;AAEJ,QAAM,UAAyB;AAAA,IAC7B,MAAO,OAAO,QAAkC;AAAA,IAChD,UAAW,OAAO,YAA0C;AAAA,IAC5D,OAAO,SAAS;AAAA,IAChB,MAAM,SAAS,GAAG,MAAM,GAAG,IAAI,KAAK;AAAA,IACpC,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,IAAI,OAAO,EAAE,QAAQ,IAAI,KAAK,GAAG,IAAI;AAAA,EACjD;AACA,SAAO,iBAAiB,eAAe,SAAS,KAAK,MAAM,IAAI;AACjE;AAEA,eAAe,aAAa,SAAmD;AAC7E,QAAM,WAAW,sBAAsB,OAAO;AAC9C,QAAM,SAAS,MAAM,gBAAgB,QAAQ;AAC7C,MAAI,CAAC,OAAQ,SAAQ,IAAI,+BAA+B,QAAQ;AAChE,SAAO;AAAA,IACL,QAAQ,SAAS,YAAY;AAAA,IAC7B,SAAS,SAAS,wBAAwB;AAAA,EAC5C;AACF;AAEO,SAAS,iBAAiB,QAAsC;AACrE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;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,QAAQ;AAAA,IACR,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,YAAM,QAAQ,aAAa,GAAG;AAC9B,YAAM,QAAQ,cAAc,YAAY,GAAG,IAAI,CAAC;AAChD,YAAM,SAAsB,CAAC,GAAG,OAAO,GAAI,cAAc,YAAa;AAEtE,YAAM,cAAc,IAAI,OAAO,QAAQD,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,OAAO,QAAQ,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,CAAC,OAAO;AACV,qBAAO,aAAa,OAAO;AAAA,YAC7B;AACA,gBAAI;AACF,oBAAM,SAAU,MAAM,MAAM,QAAQ;AAAA,gBAClC;AAAA,cACF;AACA,kBAAI,gBAAgB;AACpB,kBAAI,cAAe,QAAO,cAAc,MAAM;AAC9C,qBAAO;AAAA,gBACL,QAAQ;AAAA,gBACR,SAAS,aAAa,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;;;ACvNO,IAAM,aAAa,iBAAiB;AAAA,EACzC,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,UAAU,SAAS,cAAc;AAAA,EACxD,cAAc,CAAC,WAAW;AACxB,UAAM,YACJ,OAAO,cAAc,MAAM,OAAO,aAAa,MAC3C,OAAO,aAAa,MACpB;AACN,WAAO,YAAY,qBAAqB,SAAS,MAAM;AAAA,EACzD;AAAA,EACA,cAAc,CAAC,QAAQ;AACrB,UAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,WAAO,WAAW,OAAO;AAAA,EAC3B;AACF,CAAC;;;ACRD,IAAM,aAAa,aAAa,KAAK,EAAE,MAAM,KAAK,CAAC;AAEnD,IAAM,iBAAiB,aAAa;AAAA,EAClC,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,SAAS;AACzC;AAEA,SAAS,sBAAsB,QAA+B;AAC5D,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,iBAAiB,iBAAiB;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,sBAAsB,SAAS,cAAc;AAAA,EACpE,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,aAAa,CAAC,QAAQ;AACpB,UAAM,QAAQ,IAAI;AAClB,UAAM,SAAS,OAAO,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,UAAM,QAAQ,IAAI;AAClB,UAAM,SAAS,OAAO,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,WAA2C;AACzD,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,WAAyB;AACtC,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;;;AC/ED,IAAM,aAAwC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,iBAAuB;AAAA,EAClC,IAAI;AAAA,EACJ,SAAS,CAACE,SAAQA,KAAI,SAAS;AAAA,EAC/B,QAAQ;AAAA,EACR,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,aAAa,IAAI,GAAG;AAAA,IACtB;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;;;ACtGA,SAASC,QAAO,MAAsB;AACpC,QAAMC,OAAiB,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,SAASA;AAAA,IACT,YAAY,EAAE,QAAQ,KAAK;AAAA,IAC3B,KAAAA;AAAA,EACF;AACF;AAEO,IAAM,YAAkB;AAAA,EAC7B,IAAI,kBAAkB;AAAA,EACtB,SAAS,EAAE,OAAO,QAAQ;AAAA,EAC1B,QAAQ,MAAMC;AAAA,EACd,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,IAAIF,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,MAAM,SAAU,KAAkB,GAAG;AAAA,IAC/D;AAAA,EACF;AACF;;;ACzDA,SAAS,UAAU,iBAAiBG,4BAA2B;AAW/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,QAAQ,MAAMC;AAAA,EACd,SAAS;AAAA,IACP,OAAO;AAAA,IACP,OAAO,eAAe;AAAA,IACtB,MAAM,MAAMC,qBAAoB,QAAQ;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;;;AChFA,SAAS,WAAW,SAAAC,QAAO,iBAAiBC,6BAA2B;AAyBvE,SAAS,mBAAmB,KAAoC;AAC9D,QAAM,QAA0B,CAAC;AACjC,QAAM,gBAAgB,oBAAI,IAAY;AAEtC,aAAW,QAAQ,cAAc;AAC/B,eAAW,UAAU,IAAI,SAAS,KAAK,IAAI,GAAG;AAC5C,YAAM,KAAK,QAAQ,SAAU,OAAmC,KAAK;AACrE,UAAI,CAAC,GAAI;AACT,YAAM,UAAU,IAAI,SAAS,WAAW,MAAM,EAAE;AAChD,oBAAc,IAAI,GAAG,IAAI,IAAI,EAAE,EAAE;AACjC,YAAMC,OAAiB,EAAE,MAAM,GAAG;AAClC,iBAAW,UAAU,SAAS;AAC5B,cAAM,YACH,YAAuC,OAAO,IAAI,KAAK,OAAO;AACjE,cAAM,WACH,gBAA2C,OAAO,QAAQ,KAC3D,OAAO;AACT,cAAM,MAAM,OAAO,SAAS,OAAO;AACnC,cAAM,QAAQ,IAAI,SAAS,KAAK,IAAI,MAAM,GAAG,EAAE,IAAI,WAAM;AACzD,cAAM,aAAa,YAAY,MAAgB;AAC/C,cAAM,KAAK;AAAA,UACT,OAAO,UAAU,OAAO,EAAE;AAAA,UAC1B,OAAO,SAAS;AAAA,UAChB,UAAU;AAAA,YACR;AAAA,YACA,YAAY,MAAM;AAAA,YAClB;AAAA,YACA;AAAA,YACA,aAAa,OAAO,SAAS;AAAA,UAC/B,EACG,OAAO,OAAO,EACd,KAAK,QAAK;AAAA,UACb,KAAK,UAAU,OAAO,EAAE;AAAA,UACxB,OAAO,GAAG,IAAI,KAAK,UAAU;AAAA,UAC7B,SAAS,MAAM,eAAe,IAAI;AAAA,UAClC,KAAAA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,aAAW,OAAO,IAAI,SAAS,eAAe,GAAG;AAC/C,QAAI,cAAc,IAAI,GAAG,EAAG;AAC5B,UAAM,SAAS,kBAAkB,GAAG;AACpC,QAAI,IAAI,SAAS,IAAI,OAAO,MAAM,OAAO,EAAE,EAAG;AAC9C,UAAM,UAAU,IAAI,SAAS,WAAW,OAAO,MAAM,OAAO,EAAE;AAC9D,UAAMA,OAAiB;AACvB,eAAW,UAAU,SAAS;AAC5B,YAAM,YACH,YAAuC,OAAO,IAAI,KAAK,OAAO;AACjE,YAAM,WACH,gBAA2C,OAAO,QAAQ,KAC3D,OAAO;AACT,YAAM,MAAM,OAAO,SAAS,OAAO;AACnC,YAAM,QAAQ,IAAI,SAAS,KAAK,IAAI,MAAM,GAAG,EAAE,IAAI,WAAM;AACzD,YAAM,KAAK;AAAA,QACT,OAAO,UAAU,OAAO,EAAE;AAAA,QAC1B,OAAO,SAAS;AAAA,QAChB,UAAU;AAAA,UACR,GAAG,OAAO,IAAI,IAAI,OAAO,EAAE;AAAA,UAC3B,YAAY,MAAM;AAAA,UAClB;AAAA,UACA;AAAA,UACA,aAAa,OAAO,SAAS;AAAA,QAC/B,EACG,OAAO,OAAO,EACd,KAAK,QAAK;AAAA,QACb,KAAK,UAAU,OAAO,EAAE;AAAA,QACxB,OAAO;AAAA,QACP,SAAS,MAAMC,sBAAoB,SAAS;AAAA,QAC5C,KAAAD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,kBAAwB;AAAA,EACnC,IAAI,kBAAkB;AAAA,EACtB,SAAS,MAAM;AAAA,EACf,QAAQ,MAAME;AAAA,EACd,SAAS;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM,MAAMD,sBAAoBE,MAAK;AAAA,EACvC;AAAA,EACA,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,OAAO,CAAC,EAAE,KAAK,UAAK,OAAO,SAAS,CAAC;AAAA,EACrC,aAAa,MAAM;AAAA,EACnB,SAAS,CAAC,QAAkC;AAC1C,UAAM,QAAQ,mBAAmB,GAAG;AAEpC,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAI;AAAA,MACJ;AAAA,MACA,YAAY;AAAA,MACZ,QAAQ,CAAC,MAAM,UACb;AAAA,QACE,GAAG,KAAK,KAAK,IAAI,KAAK,YAAY,EAAE,IAAI,KAAK,SAAS,EAAE;AAAA,QACxD;AAAA,MACF;AAAA,MACF,UAAU,CAAC,SAAS;AAClB,4BAAoB,KAAK,MAAM,QAAQ,YAAY,EAAE,CAAC;AACtD,YAAI,KAAK;AAAA,UACP,IAAI,kBAAkB;AAAA,UACtB,KAAM,KAAwB;AAAA,QAChC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;;;AC1IA;AAAA,EACE;AAAA,EACA;AAAA,EACA,UAAAC;AAAA,EACA;AAAA,EACA,iBAAiBC;AAAA,OAEZ;;;ACLA,SAAS,gBAAgB,SAAuB;AACrD,MAAI,OAAO,aAAa,YAAa;AACrC,QAAM,OAAO,WAAW;AACxB,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,aAAa,oBAAoB,EAAE;AACzC,SAAO,OAAO,MAAM,OAAO;AAAA,IACzB,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,OAAO,OAAO,YAAY;AAAA,IAC1B,YAAY,OAAO,8BAA8B;AAAA,IACjD,QAAQ,OACJ,kCACA;AAAA,IACJ,cAAc;AAAA,IACd,WAAW,OACP,iEACA;AAAA,IACJ,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,YAAY;AAAA,EACd,CAAwC;AACxC,QAAM,cAAc;AACpB,WAAS,KAAK,YAAY,KAAK;AAE/B,wBAAsB,MAAM;AAC1B,UAAM,MAAM,UAAU;AACtB,UAAM,MAAM,YAAY;AAAA,EAC1B,CAAC;AAED,aAAW,MAAM;AACf,UAAM,MAAM,UAAU;AACtB,UAAM,MAAM,YAAY;AACxB,eAAW,MAAM,MAAM,OAAO,GAAG,GAAG;AAAA,EACtC,GAAG,IAAI;AACT;;;AD3BA,IAAM,iBAAiB;AAEvB,SAAS,WAAyB;AAChC,MAAI;AACF,UAAM,IAAI,aAAa,QAAQ,cAAc;AAC7C,QAAI,MAAM,WAAW,MAAM,cAAc,MAAM,YAAa,QAAO;AAAA,EACrE,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAEA,SAAS,UAAU,MAA0B;AAC3C,MAAI;AACF,iBAAa,QAAQ,gBAAgB,IAAI;AAAA,EAC3C,QAAQ;AAAA,EAER;AACF;AAEA,IAAM,QAKA;AAAA,EACJ;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAMC;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AACF;AAEA,SAASC,aAAY,UAAoB,QAA6B;AACpE,SAAO,MAAM;AACX,UAAMC,OAAMC,sBAAoB,SAAS,QAAQ,QAAQ;AACzD,IAAAD,KAAI,aAAa,eAAe,MAAM;AACtC,WAAO,eAAeA,IAAG;AAAA,EAC3B;AACF;AAEO,IAAM,kBAAwB;AAAA,EACnC,IAAI,kBAAkB;AAAA,EACtB,SAAS,MAAM;AAAA,EACf,QAAQ,MAAME;AAAA,EACd,SAAS;AAAA,IACP,OAAO;AAAA,IACP,OAAO,eAAe;AAAA,IACtB,MAAM,MAAMD,sBAAoB,QAAQ;AAAA,EAC1C;AAAA,EACA,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,aAAa,CAAC,SACZ,KAAK,cAA2B,2BAA2B;AAAA,EAC7D,SAAS,CAAC,QAAkC;AAC1C,UAAM,UAAU,SAAS;AACzB,UAAM,QAAoB,MAAM,IAAI,CAAC,MAAM;AACzC,YAAM,SAAS,EAAE,UAAU;AAC3B,aAAO;AAAA,QACL,OAAO,EAAE;AAAA,QACT,OAAO,EAAE;AAAA,QACT,UAAU,EAAE;AAAA,QACZ,SAASF,aAAY,EAAE,MAAM,MAAM;AAAA,QACnC,UAAU,SACN;AAAA;AAAA,iBAGA;AAAA,MACN;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,YAAY;AAAA,MACZ;AAAA,MACA,YAAY;AAAA,MACZ,UAAU,CAAC,SAAS;AAClB,cAAM,OAAO,KAAK;AAClB,kBAAU,IAAI;AACd,YAAI,gBAAgB;AACpB,cAAM,YAAY,MAAM,KAAK,CAAC,MAAM,EAAE,UAAU,IAAI,EAAG;AACvD,wBAAgB,oBAAoB,SAAS,GAAG;AAChD,YAAI,IAAI;AAAA,MACV;AAAA,IACF;AAAA,EACF;AACF;;;AEtDO,SAAS,kBAAkB,UAAoC;AACpE,SAAO;AAAA,IACL;AAAA,IACA,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,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACMO,SAAS,YAAY,UAA8B,CAAC,GAAU;AACnE,QAAM,WAAW,eAAe;AAEhC,QAAM,eAA8C,EAAE,SAAS,KAAK;AACpE,QAAM,aAA0C,EAAE,SAAS,KAAK;AAChE,QAAM,cAA4C,EAAE,SAAS,KAAK;AAElE,QAAM,eAAe,CAAC,QAAgC;AACpD,UAAM,UAAU,WAAW;AAC3B,QAAI,CAAC,QAAS;AACd,UAAMI,OAAM,IAAI,aAAa,IAAI;AACjC,QAAI,CAACA,KAAK;AACV,UAAMC,MAAK,IAAI,WAAW,qBAAqBD,IAAG;AAClD,QAAI,CAACC,KAAI;AACP,cAAQ,KAAK;AACb;AAAA,IACF;AACA,UAAM,SAAS,IAAI,cAAc;AACjC,YAAQ,KAAKA,KAAI;AAAA,MACf,OAAO,IAAI,SAAS,WAAWD,KAAI,IAAI,EAAE;AAAA,MACzC,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,cAAc;AAAA,IAC5B,OAAO,QAAQ;AAAA,IACf,eAAe,QAAQ;AAAA,IACvB,MAAM,QAAQ;AAAA,IACd,kBAAkB,MAAM,aAAa,SAAS,MAAM;AAAA,IACpD,oBAAoB,MAAM,aAAa,SAAS,QAAQ;AAAA,IACxD,eAAe;AAAA,IACf,eAAe,MAAM,WAAW,SAAS,KAAK;AAAA,IAC9C,iBAAiB;AAAA,EACnB,CAAC;AACD,QAAM,QAAQ,aAAa,EAAE,QAAQ,CAAC;AACtC,QAAM,QAAQ,QAAQ,SAAS;AAC/B,QAAM,aAAa,qBAAqB,QAAQ,QAAQ,UAAU,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,IAAI,IAAI;AAAA,EACxE;AACA,MAAI,QAAQ,OAAO;AACjB,eAAW,QAAQ,QAAQ,MAAO,OAAM,IAAI,IAAI;AAAA,EAClD;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,cAAc,MAClB,OAAO,aAAa,cAAc,SAAS,WAAW;AAExD,UAAM,kBAAkB,MACtB,QAAQ,WAAW,KAAK,qBAAqB,QAAQ,KAAK,YAAY;AAExE,UAAM,qBAAqB,MAAgB;AACzC,UAAI,OAAO,aAAa,YAAa,QAAO,CAAC;AAC7C,YAAM,WAAW,mBAAmB,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG;AACnE,YAAM,QAAQ,SAAS,iBAA8B,QAAQ;AAC7D,YAAM,MAAgB,CAAC;AACvB,YAAM,OAAO,oBAAI,IAAY;AAC7B,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,QAAQ,uBAAuB,EAAG;AAC3C,mBAAW,CAAC,MAAM,IAAI,KAAK,oBAAoB;AAC7C,gBAAM,KAAK,KAAK,aAAa,IAAI;AACjC,cAAI,CAAC,GAAI;AACT,gBAAM,MAAM,GAAG,IAAI,IAAI,EAAE;AACzB,cAAI,CAAC,KAAK,IAAI,GAAG,GAAG;AAClB,iBAAK,IAAI,GAAG;AACZ,gBAAI,KAAK,GAAG;AAAA,UACd;AACA;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,UAAM,eAAe,OAClB,OAAO,iBAAiB,cACpB,aAAa,QAAQ,sBAAsB,IAC5C,SAAS;AAEf,QAAI,UAAkC;AACtC,QAAI,SAAS,QAAQ,MAAM;AACzB,gBAAU,MAAM,SAAS,QAAQ;AAAA,QAC/B,MAAM,QAAQ;AAAA,QACd,OAAO,gBAAgB;AAAA,MACzB,CAAC;AACD,mBAAa,IAAI,MAAM,SAAS,WAAW,CAAC;AAAA,IAC9C;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;AAAA,MACA,WAAW;AAAA,QACT,UAAU,CAAC,UAAU;AACnB,gBAAM,QAAQ,MAAM,QAAQ,MAAM,GAAG;AACrC,cAAI,CAAC,MAAO;AACZ,kBAAQ,OAAO,MAAM,GAAG;AACxB,gBAAM,QAAQ,EAAE,IAAI,MAAM,KAAK,IAAI,KAAK,MAAM,IAAI;AAClD,kBAAQ,KAAK,WAAW,aAAa,MAAM,WAAW,KAAK,CAAC;AAAA,QAC9D;AAAA,MACF;AAAA,IACF,CAAC;AACD,iBAAa,MAAM,KAAK;AACxB,iBAAa,UAAU,MAAM;AAC7B,eAAW,UAAU,MAAM;AAC3B,UAAM,QAAQ,YAAY,MAAM,QAAQ,UAAU,MAAM;AACxD,iBAAa,IAAI,KAAK;AACtB,iBAAa,IAAI,MAAM;AACrB,mBAAa,UAAU;AACvB,iBAAW,UAAU;AAAA,IACvB,CAAC;AAED,UAAM,YAAiC;AAAA,MACrC,KAAKA,MAAK,MAAM;AACd,cAAMC,MAAK,qBAAqBD,IAAG;AACnC,YAAI,CAACC,KAAI;AACP,kBAAQ,UAAU,QAAQ;AAC1B;AAAA,QACF;AACA,gBAAQ,UAAU,MAAMD,MAAKC,KAAI,MAAM,SAAS,IAAI;AAAA,MACtD;AAAA,MACA,OAAO;AACL,gBAAQ,UAAU,QAAQ;AAAA,MAC5B;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,QAAI,cAAwD;AAE5D,UAAM,YAAY,gBAAgB;AAAA,MAChC,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,QAAQ;AAAA,MAClB,iBAAiB,CAAC,YAAY;AAC5B,YAAI,CAAC,YAAa,QAAO,MAAM;AAAA,QAAC;AAChC,eAAO,YAAY,gBAAgB,OAAO;AAAA,MAC5C;AAAA,MACA,eAAe,MAAM,YAAY,SAAS,QAAQ;AAAA,MAClD,UAAU;AAAA,IACZ,CAAC;AACD,iBAAa,IAAI,SAAS;AAE1B,QAAI,YAAY;AACd,oBAAc,eAAe;AAAA,QAC3B;AAAA,QACA;AAAA,QACA,iBAAiB,MAAM,UAAU,gBAAgB;AAAA,QACjD,aAAa,MAAM,YAAY;AAAA,QAC/B,UAAU,QAAQ;AAAA,MACpB,CAAC;AACD,mBAAa,IAAI,WAAW;AAAA,IAC9B;AAEA,QAAI,YAAY;AACd,YAAM,wBAAwB,MAAY;AACxC,cAAM,QAAQ,YAAY;AAC1B,YAAI,CAAC,MAAO;AACZ,cAAM,WAAW,oBAAI,IAGnB;AACF,mBAAW,OAAO,MAAM,WAAW,GAAG;AACpC,gBAAM,MAAM,IAAI,UAAU;AAC1B,cAAI,CAAC,IAAK;AACV,gBAAM,OAAO,SAAS,IAAI,GAAG;AAC7B,cAAI,KAAM,MAAK,KAAK,GAAG;AAAA,cAClB,UAAS,IAAI,KAAK,CAAC,GAAG,CAAC;AAAA,QAC9B;AACA,mBAAW,CAAC,KAAK,IAAI,KAAK,UAAU;AAClC,gBAAMD,OAAM,kBAAkB,GAAG;AACjC,mBAAS,WAAWA,KAAI,MAAMA,KAAI,IAAI,IAAI;AAAA,QAC5C;AAAA,MACF;AAEA,UAAI,OAAO;AACT,iBAAS,gBAAgB,OAAO,UAAU,WAAW;AACnD,sBAAY,SAAS,UAAU,QAAQ;AACvC,gBAAM,MAAM,KAAK;AAAA,YACf;AAAA,YACA;AAAA,UACF;AACA,gCAAsB;AAAA,QACxB;AAAA,MACF;AAEA,YAAM,WAAqB,eAAe;AAAA,QACxC,WAAW;AAAA,QACX,eAAe,QAAQ,KAAK,UAAU;AAAA,QACtC,iBAAiB,CAAC,aAAa,aAAa;AAC1C,gBAAMA,OAAM,kBAAkB,WAAW;AACzC,8BAAoB,QAAQ;AAC5B,gBAAM,QAAQ,EAAE,IAAI,kBAAkB,cAAc,KAAAA,KAAI;AACxD,kBAAQ,KAAK,WAAW,aAAa,MAAM,WAAW,KAAK,CAAC;AAAA,QAC9D;AAAA,QACA,YAAY,CAAC,QAAQ,gBAAgB;AACnC,gBAAM,UAAU,WAAW;AAC3B,cAAI,CAAC,QAAS;AACd,cAAI,CAAC,UAAU,CAAC,aAAa;AAC3B,oBAAQ,KAAK;AACb;AAAA,UACF;AACA,kBAAQ,KAAK,QAAQ;AAAA,YACnB,OAAO,WAAW,IAAI,YAAY;AAAA,UACpC,CAAC;AAAA,QACH;AAAA,QACA,eAAe;AAAA,MACjB,CAAC;AACD,YAAM,QAAQ,YAAY,QAAQ;AAClC,kBAAY,UAAU;AAEtB,mBAAa,IAAI,MAAM;AACrB,iBAAS,QAAQ;AACjB,oBAAY,UAAU;AACtB,iBAAS,gBAAgB;AAAA,MAC3B,CAAC;AAED,UAAI,OAAO;AACT,cAAM,SAAS,SAAS,YAAY;AAAA,UAClC;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS,CAAC,QAAQ,QAAQ,KAAK,4BAA4B,GAAG;AAAA,QAChE,CAAC;AACD,qBAAa,IAAI,MAAM;AAEvB,YAAI,WAAW,OAAO,WAAW,aAAa;AAC5C,gBAAM,gBAAgB,MAAY;AAChC,kBAAM,QAAQ,gBAAgB;AAC9B,qBAAS,UAAU,KAAK;AACxB,iBAAK,SAAS,QAAQ;AAAA,UACxB;AACA,gBAAM,cAAc,gBAAgB,aAAa;AACjD,uBAAa,IAAI,WAAW;AAAA,QAC9B;AAAA,MACF;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;AAAA,IACA;AAAA,IACA,IAAI,aAAa;AACf,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":["DEFAULT_LIMIT","createStore","createStore","ref","createStore","el","svg","render","ref","el","MousePointerClick","createLucideElement","mode","createLucideElement","MousePointerClick","Sparkles","createLucideElement","Sparkles","el","svg","createLucideElement","fetch","ref","el","createLucideElement","svg","createLucideElement","ref","connect","machine","Highlighter","StickyNote","createLucideElement","idx","ref","Highlighter","StickyNote","icon","ref","svg","createLucideElement","Circle","el","Circle","frag","el","scrollArea","scrollArea","applyProps","sameRef","viewActions","render","COMMAND_PALETTE_ENTRY","ref","CircleCheck","Copy","createLucideElement","svg","createLucideElement","CircleCheck","Copy","ref","Copy","MessageCircleWarning","TicketPlus","createLucideElement","ref","createLucideElement","ref","Copy","MessageCircleWarning","TicketPlus","el","ref","DOM_BACKED_KINDS","ref","ref","el","ref","COMMAND_PALETTE_ENTRY","ref","ref","Compass","createLucideElement","toItem","ref","COMMAND_PALETTE_ENTRY","createLucideElement","Compass","capitalize","DOM_BACKED_KINDS","ref","ref","toItem","ref","COMMAND_PALETTE_ENTRY","createLucideElement","COMMAND_PALETTE_ENTRY","createLucideElement","Inbox","createLucideElement","ref","createLucideElement","COMMAND_PALETTE_ENTRY","Inbox","MapPin","createLucideElement","MapPin","leadingIcon","svg","createLucideElement","COMMAND_PALETTE_ENTRY","ref","el"]}