uidex 0.4.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/cli/cli.cjs +1111 -87
- package/dist/cli/cli.cjs.map +1 -1
- package/dist/cloud/index.cjs +375 -72
- package/dist/cloud/index.cjs.map +1 -1
- package/dist/cloud/index.d.cts +82 -0
- package/dist/cloud/index.d.ts +82 -0
- package/dist/cloud/index.js +376 -71
- package/dist/cloud/index.js.map +1 -1
- package/dist/headless/index.cjs +623 -469
- package/dist/headless/index.cjs.map +1 -1
- package/dist/headless/index.d.cts +77 -75
- package/dist/headless/index.d.ts +77 -75
- package/dist/headless/index.js +627 -469
- package/dist/headless/index.js.map +1 -1
- package/dist/index.cjs +4258 -2884
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +275 -234
- package/dist/index.d.ts +275 -234
- package/dist/index.js +4280 -2890
- package/dist/index.js.map +1 -1
- package/dist/playwright/index.cjs +4 -4
- package/dist/playwright/index.cjs.map +1 -1
- package/dist/playwright/index.js +3 -3
- package/dist/playwright/index.js.map +1 -1
- package/dist/playwright/reporter.cjs +3 -3
- package/dist/playwright/reporter.cjs.map +1 -1
- package/dist/playwright/reporter.js +3 -3
- package/dist/playwright/reporter.js.map +1 -1
- package/dist/react/index.cjs +4299 -2906
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +206 -200
- package/dist/react/index.d.ts +206 -200
- package/dist/react/index.js +4339 -2926
- package/dist/react/index.js.map +1 -1
- package/dist/scan/index.cjs +201 -49
- package/dist/scan/index.cjs.map +1 -1
- package/dist/scan/index.d.cts +27 -1
- package/dist/scan/index.d.ts +27 -1
- package/dist/scan/index.js +200 -48
- package/dist/scan/index.js.map +1 -1
- package/package.json +8 -14
- package/templates/claude/api.md +110 -0
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/react/provider.tsx","../../src/cloud/types.ts","../../src/cloud/client.ts","../../src/cloud/sdk-cloud.ts","../../src/entities/types.ts","../../src/entities/registry.ts","../../src/entities/style.ts","../../src/entities/display-name.ts","../../src/ingest/console.ts","../../src/ingest/native-fetch.ts","../../src/ingest/network.ts","../../src/ingest/index.ts","../../src/internal/cleanup.ts","../../src/session/store.ts","../../src/flows/highlight.ts","../../src/flows/surface.ts","../../src/styles/tailwind.built.css","../../src/surface/constants.ts","../../src/surface/host.ts","../../src/surface/cursor-tooltip.ts","../../src/surface/inspector.ts","../../src/surface/menu-bar.ts","../../src/internal/cn.ts","../../src/internal/el.ts","../../src/surface/keys.ts","../../src/surface/overlay.ts","../../src/surface/theme.ts","../../src/surface/shell.ts","../../src/internal/dev.ts","../../src/views/core/types.ts","../../src/views/core/registry.ts","../../src/ui/cva.ts","../../src/ui/badge.ts","../../src/views/primitives/chip.ts","../../src/views/primitives/kind-icon.ts","../../src/views/primitives/icon-tile.ts","../../src/views/primitives/kind-chip.ts","../../src/machines/scroll-area.ts","../../src/machines/machine.ts","../../src/machines/normalize.ts","../../src/views/builder/spread-props.ts","../../src/views/render/custom.ts","../../src/views/render/detail.ts","../../src/views/builder/filter.ts","../../src/views/labels.ts","../../src/ui/button.ts","../../src/ui/list-item.ts","../../src/views/primitives/button.ts","../../src/views/primitives/entity-presence.ts","../../src/ui/kbd.ts","../../src/views/primitives/row.ts","../../src/views/primitives/entity-link.ts","../../src/views/primitives/section.ts","../../src/views/primitives/text.ts","../../src/views/render/form.ts","../../src/flows/form.ts","../../src/machines/dialog.ts","../../src/ui/field.ts","../../src/ui/form.ts","../../src/ui/input.ts","../../src/ui/select.ts","../../src/machines/combobox.ts","../../src/views/render/list.ts","../../src/views/render/index.ts","../../src/views/core/mount.ts","../../src/views/core/shell.ts","../../src/machines/menu.ts","../../src/ui/menu.ts","../../src/views/core/actions-popup.ts","../../src/views/core/stack.ts","../../src/views/built-in/ids.ts","../../src/views/built-in/command-palette.ts","../../src/views/builder/format-location.ts","../../src/views/builder/page-context.ts","../../src/internal/screenshot.ts","../../src/views/built-in/feedback/snapshot.ts","../../src/views/builder/resolve.ts","../../src/views/builder/detail-builder.ts","../../src/views/built-in/entity-detail.ts","../../src/views/built-in/entity-kind-list.ts","../../src/views/built-in/explore-page.ts","../../src/internal/clipboard.ts","../../src/views/built-in/feedback/markdown.ts","../../src/views/built-in/feedback/schema.ts","../../src/views/built-in/feedback/view-builder.ts","../../src/views/built-in/feedback/host-feedback.ts","../../src/views/built-in/feedback/jira-feedback.ts","../../src/views/built-in/feedback/sdk-feedback.ts","../../src/views/built-in/flow-detail.ts","../../src/views/built-in/flows.ts","../../src/views/built-in/glossary.ts","../../src/views/built-in/index.ts","../../src/create-uidex.ts","../../src/react/hooks.ts","../../src/react/mount.tsx","../../src/react/create-react-view.tsx","../../src/react/kind-chip.tsx"],"sourcesContent":["\"use client\"\n\nimport { createContext, useEffect, useState, type ReactNode } from \"react\"\nimport { cloud as createCloud } from \"uidex/cloud\"\nimport {\n createUidex,\n type CreateUidexOptions,\n type Uidex,\n} from \"../create-uidex\"\nimport type { CloudAdapter } from \"../views\"\n\nexport const UidexContext = createContext<Uidex | null>(null)\n\nexport interface UidexProviderProps {\n /**\n * Pre-built uidex instance (e.g. the `uidex` export from `uidex.gen.ts`).\n * When provided, `projectKey`, `cloud`, and `config` are ignored.\n */\n instance?: Uidex\n projectKey?: string\n cloud?: CloudAdapter | null\n config?: Omit<CreateUidexOptions, \"cloud\">\n children?: ReactNode\n}\n\nexport function UidexProvider({\n instance: externalInstance,\n projectKey,\n cloud,\n config,\n children,\n}: UidexProviderProps) {\n const [ownedInstance] = useState<Uidex | null>(() => {\n if (externalInstance) return null\n const resolvedCloud: CloudAdapter | null =\n cloud !== undefined\n ? cloud\n : projectKey\n ? createCloud({ projectKey })\n : null\n return createUidex({ ...config, cloud: resolvedCloud })\n })\n\n const instance = externalInstance ?? ownedInstance!\n\n useEffect(() => {\n if (!ownedInstance) return\n return () => {\n ownedInstance.unmount()\n }\n }, [ownedInstance])\n\n return (\n <UidexContext.Provider value={instance}>{children}</UidexContext.Provider>\n )\n}\n","export type {\n CloudAdapter,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigIssue,\n SourceRef,\n} from \"../ingest/feedback-contract\"\n\nexport const DEFAULT_CLOUD_ENDPOINT = \"https://app.uidex.dev\"\n\nexport interface CloudOptions {\n projectKey: string\n endpoint?: string\n fetch?: typeof fetch\n}\n\nexport class CloudError extends Error {\n readonly status: number\n readonly retryAfter?: number\n readonly details?: unknown\n\n constructor(\n message: string,\n options: { status: number; retryAfter?: number; details?: unknown }\n ) {\n super(message)\n this.name = \"CloudError\"\n this.status = options.status\n this.retryAfter = options.retryAfter\n this.details = options.details\n }\n}\n","import {\n CloudError,\n DEFAULT_CLOUD_ENDPOINT,\n type CloudAdapter,\n type CloudOptions,\n type FeedbackPayload,\n type FeedbackResult,\n type IngestConfig,\n} from \"./types\"\n\nfunction resolveFetch(override?: typeof fetch): typeof fetch {\n if (override) return override\n if (\n typeof globalThis !== \"undefined\" &&\n typeof globalThis.fetch === \"function\"\n ) {\n return globalThis.fetch.bind(globalThis)\n }\n throw new Error(\n \"uidex/cloud: global fetch is not available; pass a `fetch` override\"\n )\n}\n\nfunction trimEndpoint(endpoint: string): string {\n return endpoint.endsWith(\"/\") ? endpoint.slice(0, -1) : endpoint\n}\n\nfunction parseRetryAfter(header: string | null): number | undefined {\n if (!header) return undefined\n const seconds = Number(header)\n if (Number.isFinite(seconds) && seconds >= 0) return seconds\n const date = Date.parse(header)\n if (Number.isFinite(date)) {\n const delta = Math.ceil((date - Date.now()) / 1000)\n return delta > 0 ? delta : 0\n }\n return undefined\n}\n\nasync function readBody(response: Response): Promise<unknown> {\n const text = await response.text()\n if (!text) return undefined\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n}\n\nfunction errorMessage(body: unknown, fallback: string): string {\n if (\n body &&\n typeof body === \"object\" &&\n \"error\" in body &&\n typeof (body as { error: unknown }).error === \"string\"\n ) {\n return (body as { error: string }).error\n }\n return fallback\n}\n\nexport function cloud(options: CloudOptions): CloudAdapter {\n let cachedConfig: Promise<IngestConfig> | null = null\n let resolvedConfig: IngestConfig | null = null\n\n const projectKey = options.projectKey\n if (!projectKey) {\n throw new Error(\"uidex/cloud: `projectKey` is required\")\n }\n const endpoint = trimEndpoint(options.endpoint ?? DEFAULT_CLOUD_ENDPOINT)\n const fetchImpl = resolveFetch(options.fetch)\n const authHeader = `Bearer ${projectKey}`\n\n async function submit(payload: FeedbackPayload): Promise<FeedbackResult> {\n const response = await fetchImpl(`${endpoint}/api/ingest`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: authHeader,\n },\n body: JSON.stringify(payload),\n })\n\n const body = await readBody(response)\n\n if (!response.ok) {\n const retryAfter =\n response.status === 429\n ? parseRetryAfter(response.headers.get(\"Retry-After\"))\n : undefined\n throw new CloudError(\n errorMessage(body, `Feedback submission failed (${response.status})`),\n { status: response.status, retryAfter, details: body }\n )\n }\n\n if (!body || typeof body !== \"object\") {\n throw new CloudError(\"Feedback submission returned an empty response\", {\n status: response.status,\n })\n }\n return body as FeedbackResult\n }\n\n async function fetchConfig(): Promise<IngestConfig> {\n const response = await fetchImpl(`${endpoint}/api/ingest/config`, {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n Authorization: authHeader,\n },\n })\n\n const body = await readBody(response)\n\n if (!response.ok) {\n const retryAfter =\n response.status === 429\n ? parseRetryAfter(response.headers.get(\"Retry-After\"))\n : undefined\n throw new CloudError(\n errorMessage(body, `Ingest config request failed (${response.status})`),\n { status: response.status, retryAfter, details: body }\n )\n }\n\n if (!body || typeof body !== \"object\") {\n throw new CloudError(\"Ingest config returned an empty response\", {\n status: response.status,\n })\n }\n return body as IngestConfig\n }\n\n function startFetch(): Promise<IngestConfig> {\n const promise = fetchConfig()\n promise.then(\n (config) => {\n resolvedConfig = config\n },\n () => {}\n )\n return promise\n }\n\n cachedConfig = startFetch()\n\n function getConfig(): Promise<IngestConfig> {\n return cachedConfig ?? (cachedConfig = startFetch())\n }\n\n function getCachedConfig(): IngestConfig | null {\n return resolvedConfig\n }\n\n return {\n feedback: { submit },\n integrations: { getConfig, getCachedConfig },\n }\n}\n","import { cloud } from \"./client\"\nimport type { CloudAdapter } from \"./types\"\n\nexport const sdkCloud: CloudAdapter = cloud({\n projectKey: UIDEX_SDK_CLOUD_PROJECT_KEY,\n endpoint: UIDEX_SDK_CLOUD_ENDPOINT,\n})\n","export const ENTITY_KINDS = [\n \"route\",\n \"page\",\n \"feature\",\n \"widget\",\n \"region\",\n \"element\",\n \"primitive\",\n \"flow\",\n] as const\n\nexport type EntityKind = (typeof ENTITY_KINDS)[number]\n\nexport type Scope = string\n\nexport interface Location {\n file: string\n line?: number\n column?: number\n}\n\nexport interface EntityRef {\n kind: EntityKind\n id: string\n}\n\nexport interface Metadata {\n name?: string\n description?: string\n acceptance?: string[]\n notes?: string\n composes?: EntityRef[]\n flows?: readonly string[]\n features?: string[]\n widgets?: string[]\n}\n\ninterface EntityWithMetaBase {\n id: string\n loc?: Location\n scopes?: Scope[]\n meta?: Metadata\n}\n\nexport interface Route {\n kind: \"route\"\n path: string\n page: string\n}\n\nexport interface FlowStep {\n entityId: string\n action?: string\n}\n\nexport interface Flow {\n kind: \"flow\"\n id: string\n loc: Location\n touches: string[]\n steps: FlowStep[]\n}\n\nexport interface Page extends EntityWithMetaBase {\n kind: \"page\"\n}\n\nexport interface Feature extends EntityWithMetaBase {\n kind: \"feature\"\n}\n\nexport interface Widget extends EntityWithMetaBase {\n kind: \"widget\"\n}\n\nexport interface Region extends EntityWithMetaBase {\n kind: \"region\"\n}\n\nexport interface Element extends EntityWithMetaBase {\n kind: \"element\"\n}\n\nexport interface Primitive extends EntityWithMetaBase {\n kind: \"primitive\"\n}\n\nexport type Entity =\n | Route\n | Page\n | Feature\n | Widget\n | Region\n | Element\n | Primitive\n | Flow\n\nexport type EntityByKind<K extends EntityKind> = Extract<Entity, { kind: K }>\n\nexport type MetaEntityKind = Exclude<EntityKind, \"route\" | \"flow\">\n\nexport function isMetaKind(kind: EntityKind): kind is MetaEntityKind {\n return kind !== \"route\" && kind !== \"flow\"\n}\n\nexport function isMetaEntity(\n entity: Entity\n): entity is Extract<Entity, { kind: MetaEntityKind }> {\n return isMetaKind(entity.kind)\n}\n\nexport function entityKey(entity: Entity): string {\n return entity.kind === \"route\" ? entity.path : entity.id\n}\n\nexport function sameRef(a: EntityRef | null, b: EntityRef | null): boolean {\n if (a === b) return true\n if (a === null || b === null) return false\n return a.kind === b.kind && a.id === b.id\n}\n\nexport class UnknownEntityKindError extends Error {\n readonly kind: string\n constructor(kind: string) {\n super(`Unknown entity kind: ${kind}`)\n this.name = \"UnknownEntityKindError\"\n this.kind = kind\n }\n}\n\nconst KIND_SET: ReadonlySet<string> = new Set<string>(ENTITY_KINDS)\n\nexport function assertEntityKind(kind: string): asserts kind is EntityKind {\n if (!KIND_SET.has(kind)) throw new UnknownEntityKindError(kind)\n}\n","import {\n assertEntityKind,\n entityKey,\n isMetaEntity,\n isMetaKind,\n type Entity,\n type EntityByKind,\n type EntityKind,\n type Flow,\n type Metadata,\n type Scope,\n} from \"./types\"\n\nexport interface Registry {\n add(entity: Entity): void\n get<K extends EntityKind>(kind: K, id: string): EntityByKind<K> | undefined\n list<K extends EntityKind>(kind: K): ReadonlyArray<EntityByKind<K>>\n query(predicate: (entity: Entity) => boolean): Entity[]\n byScope(scope: Scope): Entity[]\n touchedBy(flowId: string): Entity[]\n}\n\ntype KindStore = {\n [K in EntityKind]: Map<string, EntityByKind<K>>\n}\n\nfunction emptyStore(): KindStore {\n return {\n route: new Map(),\n page: new Map(),\n feature: new Map(),\n widget: new Map(),\n region: new Map(),\n element: new Map(),\n primitive: new Map(),\n flow: new Map(),\n }\n}\n\nfunction computeFlowIds(flows: Iterable<Flow>, targetId: string): string[] {\n const ids: string[] = []\n for (const flow of flows) {\n if (flow.touches.includes(targetId)) ids.push(flow.id)\n }\n return ids\n}\n\nfunction freezeEntity<E extends Entity>(entity: E, flows: Iterable<Flow>): E {\n if (!isMetaKind(entity.kind)) return entity\n const withMeta = entity as Extract<Entity, { meta?: Metadata }>\n if (withMeta.meta === undefined) return entity\n const computedFlows = Object.freeze(computeFlowIds(flows, withMeta.id))\n const mergedMeta: Metadata = { ...withMeta.meta, flows: computedFlows }\n return { ...entity, meta: Object.freeze(mergedMeta) } as E\n}\n\nexport function createRegistry(): Registry {\n const store = emptyStore()\n let flowsCache: Flow[] | null = null\n\n const getFlows = (): Flow[] => {\n if (flowsCache === null) flowsCache = Array.from(store.flow.values())\n return flowsCache\n }\n\n const add = (entity: Entity): void => {\n assertEntityKind(entity.kind)\n const key = entityKey(entity)\n ;(store[entity.kind] as Map<string, Entity>).set(key, entity)\n flowsCache = null\n }\n\n const get = <K extends EntityKind>(\n kind: K,\n id: string\n ): EntityByKind<K> | undefined => {\n assertEntityKind(kind)\n const raw = store[kind].get(id) as EntityByKind<K> | undefined\n if (raw === undefined) return undefined\n return freezeEntity(raw, getFlows())\n }\n\n const list = <K extends EntityKind>(\n kind: K\n ): ReadonlyArray<EntityByKind<K>> => {\n assertEntityKind(kind)\n const flows = getFlows()\n return Array.from(store[kind].values(), (e) =>\n freezeEntity(e as EntityByKind<K>, flows)\n )\n }\n\n const allEntities = function* (): Generator<Entity> {\n for (const kind of Object.keys(store) as EntityKind[]) {\n for (const entity of store[kind].values()) {\n yield entity as Entity\n }\n }\n }\n\n const query = (predicate: (entity: Entity) => boolean): Entity[] => {\n const flows = getFlows()\n const result: Entity[] = []\n for (const entity of allEntities()) {\n if (predicate(entity)) result.push(freezeEntity(entity, flows))\n }\n return result\n }\n\n const byScope = (scope: Scope): Entity[] =>\n query(\n (entity) =>\n \"scopes\" in entity &&\n Array.isArray(entity.scopes) &&\n entity.scopes.includes(scope)\n )\n\n const touchedBy = (flowId: string): Entity[] => {\n const flow = store.flow.get(flowId)\n if (flow === undefined) return []\n const ids = new Set(flow.touches)\n return query((entity) => {\n if (!isMetaEntity(entity)) return false\n return ids.has(entity.id)\n })\n }\n\n return { add, get, list, query, byScope, touchedBy }\n}\n","import {\n Circle,\n FileText,\n type IconNode,\n LayoutGrid,\n LayoutPanelTop,\n MousePointerClick,\n Route as RouteIcon,\n Sparkles,\n Workflow,\n} from \"lucide\"\nimport type { EntityKind } from \"./types\"\n\nexport interface KindStyleEntry {\n icon: IconNode\n tone: string\n chip: string\n color: string\n label: string\n}\n\nexport const KIND_STYLE: Record<EntityKind, KindStyleEntry> = {\n route: {\n icon: RouteIcon,\n tone: \"text-blue-700 dark:text-blue-400\",\n chip: \"bg-blue-50 text-blue-700 inset-ring inset-ring-blue-700/10 group-data-hover:bg-blue-100 dark:bg-blue-400/10 dark:text-blue-400 dark:inset-ring-blue-400/30 dark:group-data-hover:bg-blue-400/20\",\n color: \"#60a5fa\",\n label: \"Route\",\n },\n page: {\n icon: FileText,\n tone: \"text-emerald-700 dark:text-emerald-400\",\n chip: \"bg-emerald-50 text-emerald-700 inset-ring inset-ring-emerald-600/20 group-data-hover:bg-emerald-100 dark:bg-emerald-400/10 dark:text-emerald-400 dark:inset-ring-emerald-500/20 dark:group-data-hover:bg-emerald-400/20\",\n color: \"#34d399\",\n label: \"Page\",\n },\n feature: {\n icon: Sparkles,\n tone: \"text-amber-700 dark:text-amber-500\",\n chip: \"bg-amber-50 text-amber-800 inset-ring inset-ring-amber-600/20 group-data-hover:bg-amber-100 dark:bg-amber-400/10 dark:text-amber-500 dark:inset-ring-amber-400/20 dark:group-data-hover:bg-amber-400/20\",\n color: \"#fbbf24\",\n label: \"Feature\",\n },\n widget: {\n icon: LayoutGrid,\n tone: \"text-violet-700 dark:text-violet-400\",\n chip: \"bg-violet-50 text-violet-700 inset-ring inset-ring-violet-700/10 group-data-hover:bg-violet-100 dark:bg-violet-400/10 dark:text-violet-400 dark:inset-ring-violet-400/30 dark:group-data-hover:bg-violet-400/20\",\n color: \"#a78bfa\",\n label: \"Widget\",\n },\n region: {\n icon: LayoutPanelTop,\n tone: \"text-cyan-700 dark:text-cyan-400\",\n chip: \"bg-cyan-50 text-cyan-700 inset-ring inset-ring-cyan-700/10 group-data-hover:bg-cyan-100 dark:bg-cyan-400/10 dark:text-cyan-400 dark:inset-ring-cyan-400/30 dark:group-data-hover:bg-cyan-400/20\",\n color: \"#22d3ee\",\n label: \"Region\",\n },\n element: {\n icon: MousePointerClick,\n tone: \"text-rose-700 dark:text-rose-400\",\n chip: \"bg-rose-50 text-rose-700 inset-ring inset-ring-rose-600/10 group-data-hover:bg-rose-100 dark:bg-rose-400/10 dark:text-rose-400 dark:inset-ring-rose-400/20 dark:group-data-hover:bg-rose-400/20\",\n color: \"#fb7185\",\n label: \"Element\",\n },\n primitive: {\n icon: Circle,\n tone: \"text-slate-600 dark:text-slate-400\",\n chip: \"bg-slate-50 text-slate-600 inset-ring inset-ring-slate-500/10 group-data-hover:bg-slate-100 dark:bg-slate-400/10 dark:text-slate-400 dark:inset-ring-slate-400/20 dark:group-data-hover:bg-slate-400/20\",\n color: \"#94a3b8\",\n label: \"Primitive\",\n },\n flow: {\n icon: Workflow,\n tone: \"text-fuchsia-700 dark:text-fuchsia-400\",\n chip: \"bg-fuchsia-50 text-fuchsia-700 inset-ring inset-ring-fuchsia-700/10 group-data-hover:bg-fuchsia-100 dark:bg-fuchsia-400/10 dark:text-fuchsia-400 dark:inset-ring-fuchsia-400/20 dark:group-data-hover:bg-fuchsia-400/20\",\n color: \"#e879f9\",\n label: \"Flow\",\n },\n}\n","import type { Entity } from \"./types\"\n\nexport function prettify(id: string): string {\n const parts = id.split(/[-_]+/).filter(Boolean)\n const words = parts.flatMap((part) => part.split(/(?=[A-Z])/).filter(Boolean))\n if (words.length === 0) return \"\"\n return words\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(\" \")\n}\n\nexport function displayName(entity: Entity, node?: Element | null): string {\n if (entity.kind === \"route\") return prettify(entity.page)\n if (entity.kind !== \"flow\") {\n const authored = entity.meta?.name\n if (authored) return authored\n }\n const aria = node?.getAttribute(\"aria-label\")?.trim()\n if (aria) return aria\n return prettify(entity.id)\n}\n","export type ConsoleLevel = \"warn\" | \"error\"\n\nexport interface ConsoleEntry {\n level: ConsoleLevel\n message: string\n timestamp: string\n}\n\nexport interface ConsoleCaptureOptions {\n limit?: number\n target?: Console\n now?: () => Date\n}\n\nexport interface ConsoleCapture {\n start(): void\n stop(): void\n readonly isActive: boolean\n entries(): readonly ConsoleEntry[]\n clear(): void\n}\n\nconst DEFAULT_LIMIT = 50\nconst LEVELS: readonly ConsoleLevel[] = [\"warn\", \"error\"]\n\nfunction formatMessage(args: readonly unknown[]): string {\n return args\n .map((arg) => {\n if (typeof arg === \"string\") return arg\n if (arg instanceof Error) return arg.stack ?? arg.message\n try {\n return JSON.stringify(arg)\n } catch {\n return String(arg)\n }\n })\n .join(\" \")\n}\n\nexport function createConsoleCapture(\n options: ConsoleCaptureOptions = {}\n): ConsoleCapture {\n const limit = options.limit ?? DEFAULT_LIMIT\n const target = options.target ?? console\n const now = options.now ?? (() => new Date())\n const buffer: ConsoleEntry[] = []\n const originals: Partial<Record<ConsoleLevel, (...args: unknown[]) => void>> =\n {}\n let active = false\n\n function record(level: ConsoleLevel, args: readonly unknown[]): void {\n const entry: ConsoleEntry = {\n level,\n message: formatMessage(args),\n timestamp: now().toISOString(),\n }\n buffer.push(entry)\n if (buffer.length > limit) buffer.splice(0, buffer.length - limit)\n }\n\n function start(): void {\n if (active) return\n for (const level of LEVELS) {\n const original = target[level] as (...args: unknown[]) => void\n originals[level] = original\n const wrapped = (...args: unknown[]): void => {\n record(level, args)\n original.call(target, ...args)\n }\n ;(target as unknown as Record<string, unknown>)[level] = wrapped\n }\n active = true\n }\n\n function stop(): void {\n if (!active) return\n for (const level of LEVELS) {\n const original = originals[level]\n if (original) {\n ;(target as unknown as Record<string, unknown>)[level] = original\n }\n delete originals[level]\n }\n active = false\n }\n\n return {\n start,\n stop,\n get isActive() {\n return active\n },\n entries() {\n return buffer.slice()\n },\n clear() {\n buffer.length = 0\n },\n }\n}\n","// Captured at module load so `cloud.feedback.submit` (and anything else that\n// routes through this reference) is never observed by runtime fetch wrappers.\nexport const nativeFetch: typeof fetch | undefined =\n typeof globalThis !== \"undefined\" && typeof globalThis.fetch === \"function\"\n ? globalThis.fetch.bind(globalThis)\n : undefined\n\nexport function getNativeFetch(): typeof fetch | undefined {\n return nativeFetch\n}\n","import { nativeFetch } from \"./native-fetch\"\n\nexport interface NetworkEntry {\n method: string\n url: string\n status: number\n timestamp: string\n error?: string\n}\n\nexport interface NetworkCaptureOptions {\n limit?: number\n target?: {\n fetch?: typeof fetch\n }\n now?: () => Date\n}\n\nexport interface NetworkCapture {\n start(): void\n stop(): void\n readonly isActive: boolean\n entries(): readonly NetworkEntry[]\n clear(): void\n}\n\nconst DEFAULT_LIMIT = 20\n\nfunction resolveMethod(input: RequestInfo | URL, init?: RequestInit): string {\n if (init?.method) return init.method.toUpperCase()\n if (\n typeof input !== \"string\" &&\n !(input instanceof URL) &&\n \"method\" in input\n ) {\n return (input as Request).method.toUpperCase()\n }\n return \"GET\"\n}\n\nfunction resolveUrl(input: RequestInfo | URL): string {\n if (typeof input === \"string\") return input\n if (input instanceof URL) return input.toString()\n return (input as Request).url\n}\n\nexport function createNetworkCapture(\n options: NetworkCaptureOptions = {}\n): NetworkCapture {\n const limit = options.limit ?? DEFAULT_LIMIT\n const target = (options.target ?? globalThis) as {\n fetch?: typeof fetch\n }\n const now = options.now ?? (() => new Date())\n const buffer: NetworkEntry[] = []\n let original: typeof fetch | undefined\n let active = false\n\n function push(entry: NetworkEntry): void {\n buffer.push(entry)\n if (buffer.length > limit) buffer.splice(0, buffer.length - limit)\n }\n\n function start(): void {\n if (active) return\n const baseline = target.fetch ?? nativeFetch\n if (!baseline) return\n original = baseline\n const wrapped: typeof fetch = async (input, init) => {\n const method = resolveMethod(input, init)\n const url = resolveUrl(input)\n try {\n const res = await baseline(input, init)\n if (res.status >= 400) {\n push({\n method,\n url,\n status: res.status,\n timestamp: now().toISOString(),\n })\n }\n return res\n } catch (err) {\n push({\n method,\n url,\n status: 0,\n timestamp: now().toISOString(),\n error: err instanceof Error ? err.message : String(err),\n })\n throw err\n }\n }\n target.fetch = wrapped\n active = true\n }\n\n function stop(): void {\n if (!active) return\n if (original) target.fetch = original\n original = undefined\n active = false\n }\n\n return {\n start,\n stop,\n get isActive() {\n return active\n },\n entries() {\n return buffer.slice()\n },\n clear() {\n buffer.length = 0\n },\n }\n}\n","import type { SessionStore } from \"../session\"\nimport {\n createConsoleCapture,\n type ConsoleCapture,\n type ConsoleCaptureOptions,\n} from \"./console\"\nimport {\n createNetworkCapture,\n type NetworkCapture,\n type NetworkCaptureOptions,\n} from \"./network\"\n\nexport type { ConsoleEntry, ConsoleLevel, ConsoleCapture } from \"./console\"\nexport type { NetworkEntry, NetworkCapture } from \"./network\"\nexport { createConsoleCapture } from \"./console\"\nexport { createNetworkCapture } from \"./network\"\nexport { getNativeFetch, nativeFetch } from \"./native-fetch\"\nexport type {\n CloudAdapter,\n ConsoleLogEntry,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigIssue,\n NetworkErrorEntry,\n SourceRef,\n Viewport,\n} from \"./feedback-contract\"\n\nexport interface IngestOptions {\n captureConsole?: boolean\n captureNetwork?: boolean\n consoleLimit?: number\n networkLimit?: number\n consoleTarget?: ConsoleCaptureOptions[\"target\"]\n networkTarget?: NetworkCaptureOptions[\"target\"]\n now?: () => Date\n}\n\nexport interface Ingest {\n start(): void\n stop(): void\n readonly isActive: boolean\n readonly console: ConsoleCapture | null\n readonly network: NetworkCapture | null\n}\n\nexport interface CreateIngestOptions extends IngestOptions {\n session?: SessionStore\n}\n\nexport function createIngest(options: CreateIngestOptions = {}): Ingest {\n const { session, ...opts } = options\n const wantConsole = opts.captureConsole !== false\n const wantNetwork = opts.captureNetwork !== false\n\n const consoleCapture: ConsoleCapture | null = wantConsole\n ? createConsoleCapture({\n limit: opts.consoleLimit,\n target: opts.consoleTarget,\n now: opts.now,\n })\n : null\n const networkCapture: NetworkCapture | null = wantNetwork\n ? createNetworkCapture({\n limit: opts.networkLimit,\n target: opts.networkTarget,\n now: opts.now,\n })\n : null\n\n let active = false\n\n function start(): void {\n if (active) return\n consoleCapture?.start()\n networkCapture?.start()\n active = Boolean(consoleCapture?.isActive || networkCapture?.isActive)\n if (active) session?.getState().actions.setIngest(true)\n }\n\n function stop(): void {\n if (!active) return\n consoleCapture?.stop()\n networkCapture?.stop()\n active = false\n session?.getState().actions.setIngest(false)\n }\n\n return {\n start,\n stop,\n get isActive() {\n return active\n },\n console: consoleCapture,\n network: networkCapture,\n }\n}\n\nexport function resolveIngestOptions(\n explicit: IngestOptions | null | undefined,\n hasCloud: boolean\n): IngestOptions | null {\n if (explicit === null) return null\n if (explicit === undefined) {\n return hasCloud ? { captureConsole: true, captureNetwork: true } : null\n }\n if (explicit.captureConsole === false && explicit.captureNetwork === false) {\n return null\n }\n return explicit\n}\n","export type Cleanup = () => void\n\nexport interface Disposable {\n destroy(): void\n}\n\nexport interface CleanupStack {\n add(cleanup: Cleanup | Disposable | null | undefined): void\n drain(): void\n}\n\nexport function createCleanupStack(): CleanupStack {\n const stack: Cleanup[] = []\n return {\n add(cleanup) {\n if (!cleanup) return\n if (typeof cleanup === \"function\") stack.push(cleanup)\n else stack.push(() => cleanup.destroy())\n },\n drain() {\n for (let i = stack.length - 1; i >= 0; i--) {\n try {\n stack[i]()\n } catch (err) {\n console.error(\"[uidex] cleanup threw\", err)\n }\n }\n stack.length = 0\n },\n }\n}\n\nexport function composeCleanups(cleanups: readonly Cleanup[]): Cleanup {\n return () => {\n for (let i = cleanups.length - 1; i >= 0; i--) {\n try {\n cleanups[i]?.()\n } catch (err) {\n console.error(\"[uidex] cleanup threw\", err)\n }\n }\n }\n}\n","import { createActor, type Actor } from \"xstate\"\nimport { createStore, type StoreApi } from \"zustand/vanilla\"\n\nimport { sameRef } from \"../entities\"\nimport { highlightMachine, type HighlightContext } from \"../flows/highlight\"\nimport {\n surfaceMachine,\n type SurfaceEvent,\n type SurfaceInput,\n} from \"../flows/surface\"\nimport type {\n ResolvedTheme,\n SessionSnapshot,\n SessionState,\n ThemePreference,\n ViewStackEntry,\n} from \"./types\"\n\nexport type SessionStore = StoreApi<SessionState> & {\n send(event: SurfaceEvent): void\n}\n\nexport interface SurfaceBindings {\n mountInspector?: () => void\n destroyInspector?: () => void\n openActionsPopup?: () => void\n closePopup?: () => void\n}\n\nexport interface HighlightBindings {\n showOverlay?: (context: HighlightContext) => void\n hideOverlay?: () => void\n updateOverlay?: (context: HighlightContext) => void\n}\n\nexport interface SessionBindings {\n surface?: SurfaceBindings\n highlight?: HighlightBindings\n}\n\nexport interface CreateSessionOptions extends Partial<SessionSnapshot> {\n detectTheme?: () => ResolvedTheme\n /**\n * Action implementations injected into the surface machine and its\n * highlight child actor. Implementations may be closures that read from\n * mutable refs filled in after `createSession` returns (e.g., the SDK's\n * shell isn't available until `mount`).\n */\n bindings?: SessionBindings\n}\n\nconst defaultSnapshot: SessionSnapshot = {\n hover: null,\n selection: null,\n stack: [],\n pinnedHighlight: null,\n inspectorActive: false,\n theme: \"auto\",\n resolvedTheme: \"light\",\n ingestActive: false,\n}\n\nexport function resolveTheme(\n preference: ThemePreference,\n detect?: () => ResolvedTheme\n): ResolvedTheme {\n if (preference !== \"auto\") return preference\n if (detect) return detect()\n if (\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as { matchMedia?: unknown }).matchMedia === \"function\"\n ) {\n const mql = (\n globalThis as {\n matchMedia: (q: string) => { matches: boolean }\n }\n ).matchMedia(\"(prefers-color-scheme: dark)\")\n return mql.matches ? \"dark\" : \"light\"\n }\n return \"light\"\n}\n\ntype SurfaceActor = Actor<typeof surfaceMachine>\n\nfunction projectFromActor(actor: SurfaceActor): SessionSnapshot {\n const sn = actor.getSnapshot()\n const child = sn.children.highlight\n const childSnapshot = child?.getSnapshot()\n const pinned =\n childSnapshot && childSnapshot.value === \"pinned\"\n ? childSnapshot.context.pinnedRef\n : null\n return {\n hover: sn.context.hover,\n selection: sn.context.selection,\n stack: sn.context.stack,\n pinnedHighlight: pinned,\n inspectorActive: sn.matches(\"inspecting\"),\n theme: sn.context.theme,\n resolvedTheme: sn.context.resolvedTheme,\n ingestActive: sn.context.ingestActive,\n }\n}\n\nexport function createSession(\n options: CreateSessionOptions = {}\n): SessionStore {\n const { detectTheme, bindings, ...overrides } = options\n const initialPref: ThemePreference = overrides.theme ?? defaultSnapshot.theme\n const initialResolved: ResolvedTheme =\n overrides.resolvedTheme ?? resolveTheme(initialPref, detectTheme)\n const initialStack: ViewStackEntry[] = overrides.stack ?? []\n\n const input: SurfaceInput = {\n hover: overrides.hover ?? null,\n selection: overrides.selection ?? null,\n pinnedHighlight: null,\n theme: initialPref,\n resolvedTheme: initialResolved,\n ingestActive: overrides.ingestActive ?? false,\n }\n\n const providedHighlight = highlightMachine.provide({\n actions: {\n showOverlay: ({ context }) => bindings?.highlight?.showOverlay?.(context),\n hideOverlay: () => bindings?.highlight?.hideOverlay?.(),\n updateOverlay: ({ context }) =>\n bindings?.highlight?.updateOverlay?.(context),\n },\n })\n\n const providedSurface = surfaceMachine.provide({\n actions: {\n mountInspector: () => bindings?.surface?.mountInspector?.(),\n destroyInspector: () => bindings?.surface?.destroyInspector?.(),\n openActionsPopup: () => bindings?.surface?.openActionsPopup?.(),\n closePopup: () => bindings?.surface?.closePopup?.(),\n },\n actors: {\n highlight: providedHighlight,\n },\n })\n\n const actor = createActor(providedSurface, { input })\n actor.start()\n\n // Hydrate initial state via events (idle.entry resets stack, so we cannot\n // pass it through input).\n if (initialStack.length > 0) {\n actor.send({ type: \"OPEN_PALETTE\" })\n for (let i = 1; i < initialStack.length; i++) {\n actor.send({ type: \"PUSH_VIEW\", entry: initialStack[i] })\n }\n } else if (overrides.inspectorActive) {\n actor.send({ type: \"TOGGLE_INSPECTOR\" })\n }\n if (overrides.pinnedHighlight) {\n actor.send({ type: \"PIN\", ref: overrides.pinnedHighlight })\n }\n\n const store = createStore<SessionState>((_set, get) => ({\n ...projectFromActor(actor),\n actions: {\n hover(ref) {\n if (sameRef(get().hover, ref)) return\n if (ref === null) {\n actor.send({ type: \"UNHOVER\" })\n } else {\n actor.send({ type: \"HOVER\", ref, element: null })\n }\n },\n select(ref) {\n if (sameRef(get().selection, ref)) return\n actor.send({ type: \"SET_SELECTION\", ref })\n },\n pushStack(entry) {\n if (entry.id === \"command-palette\" && get().stack.length === 0) {\n actor.send({ type: \"OPEN_PALETTE\" })\n } else {\n actor.send({ type: \"PUSH_VIEW\", entry })\n }\n },\n popStack() {\n const sn = actor.getSnapshot()\n if (sn.matches(\"palette\")) {\n actor.send({ type: \"ESC\" })\n } else if (sn.matches(\"viewing\")) {\n actor.send({ type: \"POP_VIEW\" })\n }\n },\n clearStack() {\n if (get().stack.length === 0) return\n actor.send({ type: \"CLOSE\" })\n },\n openView(id, ref) {\n const resolvedRef = ref === undefined ? get().selection : ref\n get().actions.pushStack({ id, ref: resolvedRef })\n },\n closeView() {\n get().actions.clearStack()\n },\n setInspectorActive(active) {\n if (get().inspectorActive === active) return\n actor.send({ type: \"TOGGLE_INSPECTOR\" })\n },\n toggleInspector() {\n actor.send({ type: \"TOGGLE_INSPECTOR\" })\n },\n pinHighlight(ref) {\n if (sameRef(get().pinnedHighlight, ref)) return\n actor.send({ type: \"PIN\", ref })\n },\n clearPinnedHighlight() {\n if (get().pinnedHighlight === null) return\n actor.send({ type: \"UNPIN\" })\n },\n setTheme(theme, resolved) {\n const state = get()\n const nextResolved = resolved ?? resolveTheme(theme, detectTheme)\n if (state.theme === theme && state.resolvedTheme === nextResolved)\n return\n actor.send({ type: \"SET_THEME\", theme, resolvedTheme: nextResolved })\n },\n setIngest(active) {\n if (get().ingestActive === active) return\n actor.send({ type: \"SET_INGEST\", active })\n },\n },\n }))\n\n const projectAndSet = (): void => {\n const next = projectFromActor(actor)\n const prev = store.getState()\n const updates: Partial<SessionSnapshot> = {}\n if (!sameRef(prev.hover, next.hover)) updates.hover = next.hover\n if (!sameRef(prev.selection, next.selection))\n updates.selection = next.selection\n if (prev.stack !== next.stack) updates.stack = next.stack\n if (!sameRef(prev.pinnedHighlight, next.pinnedHighlight))\n updates.pinnedHighlight = next.pinnedHighlight\n if (prev.inspectorActive !== next.inspectorActive)\n updates.inspectorActive = next.inspectorActive\n if (prev.theme !== next.theme) updates.theme = next.theme\n if (prev.resolvedTheme !== next.resolvedTheme)\n updates.resolvedTheme = next.resolvedTheme\n if (prev.ingestActive !== next.ingestActive)\n updates.ingestActive = next.ingestActive\n if (Object.keys(updates).length === 0) return\n store.setState(updates)\n }\n actor.subscribe(projectAndSet)\n\n const session = store as SessionStore\n session.send = (event) => actor.send(event)\n return session\n}\n","import { assign, setup } from \"xstate\"\n\nimport type { EntityRef } from \"../entities/types\"\n\nexport interface HighlightContext {\n ref: EntityRef | null\n element: HTMLElement | null\n pinnedRef: EntityRef | null\n color: string | null\n}\n\nexport type HighlightEvent =\n | {\n type: \"HOVER\"\n ref: EntityRef\n element: HTMLElement\n color?: string | null\n }\n | { type: \"UNHOVER\" }\n | { type: \"PIN\"; ref?: EntityRef }\n | { type: \"UNPIN\" }\n\nconst initialContext: HighlightContext = {\n ref: null,\n element: null,\n pinnedRef: null,\n color: null,\n}\n\nexport const highlightMachine = setup({\n types: {} as {\n context: HighlightContext\n events: HighlightEvent\n },\n actions: {\n showOverlay: () => {},\n hideOverlay: () => {},\n updateOverlay: () => {},\n },\n}).createMachine({\n id: \"highlight\",\n initial: \"none\",\n context: initialContext,\n states: {\n none: {\n entry: [\n assign({\n ref: null,\n element: null,\n pinnedRef: null,\n color: null,\n }),\n { type: \"hideOverlay\" },\n ],\n on: {\n HOVER: {\n target: \"transient\",\n actions: assign(({ event }) => ({\n ref: event.ref,\n element: event.element,\n color: event.color ?? null,\n })),\n },\n PIN: {\n target: \"pinned\",\n actions: assign(({ context, event }) => ({\n ref: event.ref ?? context.ref,\n pinnedRef: event.ref ?? context.ref,\n })),\n },\n },\n },\n transient: {\n entry: { type: \"showOverlay\" },\n on: {\n HOVER: {\n actions: [\n assign(({ event }) => ({\n ref: event.ref,\n element: event.element,\n color: event.color ?? null,\n })),\n { type: \"updateOverlay\" },\n ],\n },\n UNHOVER: { target: \"none\" },\n PIN: {\n target: \"pinned\",\n actions: assign(({ context, event }) => ({\n pinnedRef: event.ref ?? context.ref,\n })),\n },\n },\n },\n pinned: {\n entry: { type: \"showOverlay\" },\n on: {\n UNPIN: { target: \"none\" },\n },\n },\n },\n})\n","import { assign, forwardTo, sendTo, setup } from \"xstate\"\n\nimport type { EntityRef } from \"../entities/types\"\nimport type {\n ResolvedTheme,\n ThemePreference,\n ViewStackEntry,\n} from \"../session/types\"\nimport { highlightMachine } from \"./highlight\"\n\nexport interface SurfaceContext {\n stack: ViewStackEntry[]\n hover: EntityRef | null\n selection: EntityRef | null\n pinnedHighlight: EntityRef | null\n theme: ThemePreference\n resolvedTheme: ResolvedTheme\n ingestActive: boolean\n}\n\nexport type SurfaceEvent =\n | { type: \"TOGGLE_INSPECTOR\" }\n | { type: \"OPEN_PALETTE\" }\n | { type: \"PUSH_VIEW\"; entry: ViewStackEntry }\n | { type: \"POP_VIEW\" }\n | { type: \"CLOSE\" }\n | { type: \"ESC\" }\n | { type: \"CMD_K\" }\n | { type: \"SELECT\"; ref: EntityRef | null; entry: ViewStackEntry }\n | { type: \"SET_SELECTION\"; ref: EntityRef | null }\n | {\n type: \"HOVER\"\n ref: EntityRef\n element: HTMLElement | null\n color?: string | null\n }\n | { type: \"UNHOVER\" }\n | { type: \"PIN\"; ref?: EntityRef }\n | { type: \"UNPIN\" }\n | {\n type: \"SET_THEME\"\n theme: ThemePreference\n resolvedTheme: ResolvedTheme\n }\n | { type: \"SET_INGEST\"; active: boolean }\n\nexport type SurfaceInput = Partial<SurfaceContext>\n\nconst initialContext: SurfaceContext = {\n stack: [],\n hover: null,\n selection: null,\n pinnedHighlight: null,\n theme: \"auto\",\n resolvedTheme: \"light\",\n ingestActive: false,\n}\n\nexport const surfaceMachine = setup({\n types: {} as {\n context: SurfaceContext\n events: SurfaceEvent\n children: { highlight: \"highlight\" }\n },\n actors: {\n highlight: highlightMachine,\n },\n actions: {\n mountInspector: () => {},\n destroyInspector: () => {},\n openActionsPopup: () => {},\n closePopup: () => {},\n },\n guards: {\n hasPinnedHighlight: ({ context }) => context.pinnedHighlight !== null,\n hasActions: () => false,\n popupOpen: () => false,\n stackDeeperThanTwo: ({ context }) => context.stack.length > 2,\n stackEqualsTwo: ({ context }) => context.stack.length === 2,\n stackEqualsOne: ({ context }) => context.stack.length === 1,\n paletteAtBottomDepthTwo: ({ context }) =>\n context.stack.length === 2 && context.stack[0]?.id === \"command-palette\",\n },\n}).createMachine({\n id: \"surface\",\n initial: \"idle\",\n context: ({ input }) => ({\n ...initialContext,\n ...((input as SurfaceInput | undefined) ?? {}),\n }),\n invoke: {\n id: \"highlight\",\n src: \"highlight\",\n },\n on: {\n HOVER: {\n actions: [\n assign(({ event }) => ({ hover: event.ref })),\n forwardTo(\"highlight\"),\n ],\n },\n UNHOVER: {\n actions: [assign({ hover: null }), forwardTo(\"highlight\")],\n },\n PIN: {\n actions: [\n assign(({ context, event }) => ({\n pinnedHighlight: event.ref ?? context.hover,\n })),\n forwardTo(\"highlight\"),\n ],\n },\n UNPIN: {\n actions: [assign({ pinnedHighlight: null }), forwardTo(\"highlight\")],\n },\n SET_SELECTION: {\n actions: assign(({ event }) => ({ selection: event.ref })),\n },\n SET_THEME: {\n actions: assign(({ event }) => ({\n theme: event.theme,\n resolvedTheme: event.resolvedTheme,\n })),\n },\n SET_INGEST: {\n actions: assign(({ event }) => ({ ingestActive: event.active })),\n },\n },\n states: {\n idle: {\n entry: assign({ stack: [] }),\n on: {\n TOGGLE_INSPECTOR: { target: \"inspecting\" },\n OPEN_PALETTE: { target: \"palette\" },\n PUSH_VIEW: {\n target: \"viewing\",\n actions: assign(({ event }) => ({ stack: [event.entry] })),\n },\n ESC: {\n guard: \"hasPinnedHighlight\",\n actions: [\n assign({ pinnedHighlight: null }),\n sendTo(\"highlight\", { type: \"UNPIN\" }),\n ],\n },\n },\n },\n inspecting: {\n entry: { type: \"mountInspector\" },\n exit: { type: \"destroyInspector\" },\n on: {\n SELECT: {\n target: \"viewing\",\n actions: assign(({ context, event }) => ({\n selection: event.ref,\n stack: [...context.stack, event.entry],\n })),\n },\n PUSH_VIEW: {\n target: \"viewing\",\n actions: assign(({ event }) => ({ stack: [event.entry] })),\n },\n TOGGLE_INSPECTOR: { target: \"idle\" },\n OPEN_PALETTE: { target: \"palette\" },\n ESC: { target: \"idle\" },\n },\n },\n palette: {\n entry: assign({ stack: [{ id: \"command-palette\", ref: null }] }),\n on: {\n PUSH_VIEW: {\n target: \"viewing\",\n actions: assign(({ context, event }) => ({\n stack: [...context.stack, event.entry],\n })),\n },\n CLOSE: { target: \"idle\" },\n ESC: { target: \"idle\" },\n CMD_K: [\n {\n guard: \"hasActions\",\n actions: { type: \"openActionsPopup\" },\n },\n { target: \"idle\" },\n ],\n },\n },\n viewing: {\n on: {\n PUSH_VIEW: {\n actions: assign(({ context, event }) => ({\n stack: [...context.stack, event.entry],\n })),\n },\n POP_VIEW: [\n {\n guard: \"stackDeeperThanTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"paletteAtBottomDepthTwo\",\n target: \"palette\",\n },\n {\n guard: \"stackEqualsTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"stackEqualsOne\",\n target: \"idle\",\n },\n ],\n CLOSE: { target: \"idle\" },\n ESC: [\n {\n guard: \"popupOpen\",\n actions: { type: \"closePopup\" },\n },\n {\n guard: \"stackDeeperThanTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"paletteAtBottomDepthTwo\",\n target: \"palette\",\n },\n {\n guard: \"stackEqualsTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"stackEqualsOne\",\n target: \"idle\",\n },\n ],\n },\n },\n },\n})\n","/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-amber-50: oklch(98.7% 0.022 95.277);\n --color-amber-100: oklch(96.2% 0.059 95.617);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-500: oklch(76.9% 0.188 70.08);\n --color-amber-600: oklch(66.6% 0.179 58.318);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-amber-800: oklch(47.3% 0.137 46.201);\n --color-emerald-50: oklch(97.9% 0.021 166.113);\n --color-emerald-100: oklch(95% 0.052 163.051);\n --color-emerald-400: oklch(76.5% 0.177 163.223);\n --color-emerald-500: oklch(69.6% 0.17 162.48);\n --color-emerald-600: oklch(59.6% 0.145 163.225);\n --color-emerald-700: oklch(50.8% 0.118 165.612);\n --color-cyan-50: oklch(98.4% 0.019 200.873);\n --color-cyan-100: oklch(95.6% 0.045 203.388);\n --color-cyan-400: oklch(78.9% 0.154 211.53);\n --color-cyan-700: oklch(52% 0.105 223.128);\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-100: oklch(93.2% 0.032 255.585);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-violet-50: oklch(96.9% 0.016 293.756);\n --color-violet-100: oklch(94.3% 0.029 294.588);\n --color-violet-400: oklch(70.2% 0.183 293.541);\n --color-violet-700: oklch(49.1% 0.27 292.581);\n --color-fuchsia-50: oklch(97.7% 0.017 320.058);\n --color-fuchsia-100: oklch(95.2% 0.037 318.852);\n --color-fuchsia-400: oklch(74% 0.238 322.16);\n --color-fuchsia-700: oklch(51.8% 0.253 323.949);\n --color-rose-50: oklch(96.9% 0.015 12.422);\n --color-rose-100: oklch(94.1% 0.03 12.58);\n --color-rose-400: oklch(71.2% 0.194 13.428);\n --color-rose-600: oklch(58.6% 0.253 17.585);\n --color-rose-700: oklch(51.4% 0.222 16.935);\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-neutral-50: oklch(98.5% 0 0);\n --color-neutral-100: oklch(97% 0 0);\n --color-neutral-400: oklch(70.8% 0 0);\n --color-neutral-500: oklch(55.6% 0 0);\n --color-neutral-800: oklch(26.9% 0 0);\n --color-neutral-950: oklch(14.5% 0 0);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-sm: 24rem;\n --container-xl: 36rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --tracking-tight: -0.025em;\n --tracking-widest: 0.1em;\n --leading-relaxed: 1.625;\n --radius-md: calc(var(--radius) * 0.8);\n --radius-lg: var(--radius);\n --radius-xl: calc(var(--radius) * 1.4);\n --radius-2xl: calc(var(--radius) * 1.8);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --animate-spin: spin 1s linear infinite;\n --blur-sm: 8px;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\",\n Roboto, sans-serif;\n --default-mono-font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n --color-muted: var(--muted);\n --color-border: var(--border);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .pointer-events-none {\n pointer-events: none;\n }\n .\\!visible {\n visibility: visible !important;\n }\n .invisible {\n visibility: hidden;\n }\n .visible {\n visibility: visible;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border-width: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .start {\n inset-inline-start: var(--spacing);\n }\n .end {\n inset-inline-end: var(--spacing);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .bottom-px {\n bottom: 1px;\n }\n .z-1 {\n z-index: 1;\n }\n .z-10 {\n z-index: 10;\n }\n .z-\\[2147483647\\] {\n z-index: 2147483647;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .-mx-px {\n margin-inline: -1px;\n }\n .mx-1 {\n margin-inline: calc(var(--spacing) * 1);\n }\n .mx-2 {\n margin-inline: calc(var(--spacing) * 2);\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .ms-auto {\n margin-inline-start: auto;\n }\n .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n .ml-auto {\n margin-left: auto;\n }\n .block {\n display: block;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .hidden {\n display: none;\n }\n .inline {\n display: inline;\n }\n .inline-flex {\n display: inline-flex;\n }\n .list-item {\n display: list-item;\n }\n .table {\n display: table;\n }\n .size-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n height: calc(var(--spacing) * 3.5);\n }\n .size-4 {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n .size-6 {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n .size-7 {\n width: calc(var(--spacing) * 7);\n height: calc(var(--spacing) * 7);\n }\n .size-8 {\n width: calc(var(--spacing) * 8);\n height: calc(var(--spacing) * 8);\n }\n .size-9 {\n width: calc(var(--spacing) * 9);\n height: calc(var(--spacing) * 9);\n }\n .h-3\\.5 {\n height: calc(var(--spacing) * 3.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-4\\.5 {\n height: calc(var(--spacing) * 4.5);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-5\\.5 {\n height: calc(var(--spacing) * 5.5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-7 {\n height: calc(var(--spacing) * 7);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-\\[26rem\\] {\n height: 26rem;\n }\n .h-auto {\n height: auto;\n }\n .h-full {\n height: 100%;\n }\n .h-px {\n height: 1px;\n }\n .max-h-32 {\n max-height: calc(var(--spacing) * 32);\n }\n .max-h-full {\n max-height: 100%;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-7 {\n min-height: calc(var(--spacing) * 7);\n }\n .min-h-8 {\n min-height: calc(var(--spacing) * 8);\n }\n .min-h-20 {\n min-height: calc(var(--spacing) * 20);\n }\n .w-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-20 {\n width: calc(var(--spacing) * 20);\n }\n .w-36 {\n width: calc(var(--spacing) * 36);\n }\n .w-56 {\n width: calc(var(--spacing) * 56);\n }\n .w-auto {\n width: auto;\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-full {\n max-width: 100%;\n }\n .max-w-sm {\n max-width: var(--container-sm);\n }\n .max-w-xl {\n max-width: var(--container-xl);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-4 {\n min-width: calc(var(--spacing) * 4);\n }\n .min-w-4\\.5 {\n min-width: calc(var(--spacing) * 4.5);\n }\n .min-w-5 {\n min-width: calc(var(--spacing) * 5);\n }\n .min-w-5\\.5 {\n min-width: calc(var(--spacing) * 5.5);\n }\n .min-w-32 {\n min-width: calc(var(--spacing) * 32);\n }\n .flex-1 {\n flex: 1;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .origin-bottom-left {\n transform-origin: 0 100%;\n }\n .origin-bottom-right {\n transform-origin: 100% 100%;\n }\n .-translate-x-0\\.5 {\n --tw-translate-x: calc(var(--spacing) * -0.5);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-0\\.5 {\n --tw-translate-x: calc(var(--spacing) * 0.5);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .scale-84 {\n --tw-scale-x: 84%;\n --tw-scale-y: 84%;\n --tw-scale-z: 84%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .-rotate-10 {\n rotate: calc(10deg * -1);\n }\n .rotate-10 {\n rotate: 10deg;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\n }\n .animate-skeleton {\n animation: skeleton 2s -1s infinite linear;\n }\n .animate-spin {\n animation: var(--animate-spin);\n }\n .cursor-default {\n cursor: default;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize {\n resize: both;\n }\n .scroll-py-2 {\n scroll-padding-block: calc(var(--spacing) * 2);\n }\n .list-none {\n list-style-type: none;\n }\n .appearance-none {\n appearance: none;\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-row {\n flex-direction: row;\n }\n .items-center {\n align-items: center;\n }\n .items-start {\n align-items: flex-start;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-start {\n justify-content: flex-start;\n }\n .gap-0 {\n gap: calc(var(--spacing) * 0);\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .self-start {\n align-self: flex-start;\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: calc(var(--radius) * 1.8);\n }\n .rounded-\\[0\\.25rem\\] {\n border-radius: 0.25rem;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius);\n }\n .rounded-md {\n border-radius: calc(var(--radius) * 0.8);\n }\n .rounded-sm {\n border-radius: calc(var(--radius) * 0.6);\n }\n .rounded-xl {\n border-radius: calc(var(--radius) * 1.4);\n }\n .rounded-t-xl {\n border-top-left-radius: calc(var(--radius) * 1.4);\n border-top-right-radius: calc(var(--radius) * 1.4);\n }\n .rounded-b-\\[calc\\(var\\(--radius-2xl\\)-1px\\)\\] {\n border-bottom-right-radius: calc(var(--radius-2xl) - 1px);\n border-bottom-left-radius: calc(var(--radius-2xl) - 1px);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-b-0 {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 0px;\n }\n .border-amber-500\\/40 {\n border-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-amber-500) 40%, transparent);\n }\n }\n .border-border {\n border-color: var(--border);\n }\n .border-destructive {\n border-color: var(--destructive);\n }\n .border-info\\/40 {\n border-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--info) 40%, transparent);\n }\n }\n .border-input {\n border-color: var(--input);\n }\n .border-primary {\n border-color: var(--primary);\n }\n .border-transparent {\n border-color: transparent;\n }\n .bg-amber-50 {\n background-color: var(--color-amber-50);\n }\n .bg-amber-500\\/15 {\n background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-500) 15%, transparent);\n }\n }\n .bg-background {\n background-color: var(--background);\n }\n .bg-black\\/32 {\n background-color: color-mix(in srgb, #000 32%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 32%, transparent);\n }\n }\n .bg-black\\/80 {\n background-color: color-mix(in srgb, #000 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 80%, transparent);\n }\n }\n .bg-blue-50 {\n background-color: var(--color-blue-50);\n }\n .bg-border {\n background-color: var(--border);\n }\n .bg-card {\n background-color: var(--card);\n }\n .bg-cyan-50 {\n background-color: var(--color-cyan-50);\n }\n .bg-destructive {\n background-color: var(--destructive);\n }\n .bg-destructive\\/10 {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n }\n }\n .bg-emerald-50 {\n background-color: var(--color-emerald-50);\n }\n .bg-fuchsia-50 {\n background-color: var(--color-fuchsia-50);\n }\n .bg-info\\/10 {\n background-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--info) 10%, transparent);\n }\n }\n .bg-info\\/15 {\n background-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--info) 15%, transparent);\n }\n }\n .bg-muted {\n background-color: var(--muted);\n }\n .bg-popover {\n background-color: var(--popover);\n }\n .bg-primary {\n background-color: var(--primary);\n }\n .bg-rose-50 {\n background-color: var(--color-rose-50);\n }\n .bg-secondary {\n background-color: var(--secondary);\n }\n .bg-slate-50 {\n background-color: var(--color-slate-50);\n }\n .bg-success\\/10 {\n background-color: var(--success);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--success) 10%, transparent);\n }\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-violet-50 {\n background-color: var(--color-violet-50);\n }\n .bg-warning\\/10 {\n background-color: var(--warning);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--warning) 10%, transparent);\n }\n }\n .bg-clip-padding {\n background-clip: padding-box;\n }\n .bg-\\[right_0\\.5rem_center\\] {\n background-position: right 0.5rem center;\n }\n .bg-no-repeat {\n background-repeat: no-repeat;\n }\n .object-cover {\n object-fit: cover;\n }\n .object-top {\n object-position: top;\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-1\\.5 {\n padding: calc(var(--spacing) * 1.5);\n }\n .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .p-6 {\n padding: calc(var(--spacing) * 6);\n }\n .px-0 {\n padding-inline: calc(var(--spacing) * 0);\n }\n .px-1 {\n padding-inline: calc(var(--spacing) * 1);\n }\n .px-1\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-2\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-3\\.5 {\n padding-inline: calc(var(--spacing) * 3.5);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .py-0 {\n padding-block: calc(var(--spacing) * 0);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-12 {\n padding-block: calc(var(--spacing) * 12);\n }\n .py-\\[max\\(1rem\\,4vh\\)\\] {\n padding-block: max(1rem, 4vh);\n }\n .ps-2 {\n padding-inline-start: calc(var(--spacing) * 2);\n }\n .pe-3 {\n padding-inline-end: calc(var(--spacing) * 3);\n }\n .pr-8 {\n padding-right: calc(var(--spacing) * 8);\n }\n .pl-3 {\n padding-left: calc(var(--spacing) * 3);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .font-mono {\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n }\n .font-sans {\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\",\n Roboto, sans-serif;\n }\n .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n .text-base\\/4\\.5 {\n font-size: var(--text-base);\n line-height: calc(var(--spacing) * 4.5);\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .text-\\[0\\.625rem\\] {\n font-size: 0.625rem;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-normal {\n --tw-font-weight: var(--font-weight-normal);\n font-weight: var(--font-weight-normal);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-tight {\n --tw-tracking: var(--tracking-tight);\n letter-spacing: var(--tracking-tight);\n }\n .tracking-widest {\n --tw-tracking: var(--tracking-widest);\n letter-spacing: var(--tracking-widest);\n }\n .text-balance {\n text-wrap: balance;\n }\n .break-words {\n overflow-wrap: break-word;\n }\n .whitespace-normal {\n white-space: normal;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .text-amber-600 {\n color: var(--color-amber-600);\n }\n .text-amber-700 {\n color: var(--color-amber-700);\n }\n .text-amber-800 {\n color: var(--color-amber-800);\n }\n .text-blue-700 {\n color: var(--color-blue-700);\n }\n .text-cyan-700 {\n color: var(--color-cyan-700);\n }\n .text-destructive-foreground {\n color: var(--destructive-foreground);\n }\n .text-emerald-700 {\n color: var(--color-emerald-700);\n }\n .text-foreground {\n color: var(--foreground);\n }\n .text-fuchsia-700 {\n color: var(--color-fuchsia-700);\n }\n .text-info-foreground {\n color: var(--info-foreground);\n }\n .text-muted-foreground {\n color: var(--muted-foreground);\n }\n .text-muted-foreground\\/70 {\n color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--muted-foreground) 70%, transparent);\n }\n }\n .text-popover-foreground {\n color: var(--popover-foreground);\n }\n .text-primary-foreground {\n color: var(--primary-foreground);\n }\n .text-rose-700 {\n color: var(--color-rose-700);\n }\n .text-secondary-foreground {\n color: var(--secondary-foreground);\n }\n .text-slate-600 {\n color: var(--color-slate-600);\n }\n .text-success-foreground {\n color: var(--success-foreground);\n }\n .text-violet-700 {\n color: var(--color-violet-700);\n }\n .text-warning-foreground {\n color: var(--warning-foreground);\n }\n .text-white {\n color: var(--color-white);\n }\n .lowercase {\n text-transform: lowercase;\n }\n .ordinal {\n --tw-ordinal: ordinal;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .line-through {\n text-decoration-line: line-through;\n }\n .underline {\n text-decoration-line: underline;\n }\n .underline-offset-4 {\n text-underline-offset: 4px;\n }\n .accent-accent {\n accent-color: var(--accent);\n }\n .accent-primary {\n accent-color: var(--primary);\n }\n .opacity-50 {\n opacity: 50%;\n }\n .opacity-80 {\n opacity: 80%;\n }\n .shadow-lg\\/5 {\n --tw-shadow-alpha: 5%;\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%)), 0 4px 6px -4px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-sm\\/5 {\n --tw-shadow-alpha: 5%;\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%)), 0 1px 2px -1px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs\\/5 {\n --tw-shadow-alpha: 5%;\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.05) l a b / 5%));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-none {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs {\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .inset-ring {\n --tw-inset-ring-shadow: inset 0 0 0 1px var(--tw-inset-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .inset-ring-amber-600\\/20 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(66.6% 0.179 58.318) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-amber-600) 20%, transparent);\n }\n }\n .inset-ring-blue-700\\/10 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(48.8% 0.243 264.376) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-blue-700) 10%, transparent);\n }\n }\n .inset-ring-cyan-700\\/10 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(52% 0.105 223.128) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-cyan-700) 10%, transparent);\n }\n }\n .inset-ring-emerald-600\\/20 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(59.6% 0.145 163.225) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-emerald-600) 20%, transparent);\n }\n }\n .inset-ring-fuchsia-700\\/10 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(51.8% 0.253 323.949) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-fuchsia-700) 10%, transparent);\n }\n }\n .inset-ring-rose-600\\/10 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(58.6% 0.253 17.585) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-rose-600) 10%, transparent);\n }\n }\n .inset-ring-slate-500\\/10 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(55.4% 0.046 257.417) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-slate-500) 10%, transparent);\n }\n }\n .inset-ring-violet-700\\/10 {\n --tw-inset-ring-color: color-mix(in srgb, oklch(49.1% 0.27 292.581) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-violet-700) 10%, transparent);\n }\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .filter {\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .backdrop-blur-sm {\n --tw-backdrop-blur: blur(var(--blur-sm));\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-shadow {\n transition-property: box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .ease-out {\n --tw-ease: var(--ease-out);\n transition-timing-function: var(--ease-out);\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n .\\[--skeleton-highlight\\:--alpha\\(var\\(--color-white\\)\\/64\\%\\)\\] {\n --skeleton-highlight: color-mix(in srgb, #fff 64%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --skeleton-highlight: color-mix(in oklab, var(--color-white) 64%, transparent);\n }\n }\n .\\[background\\:linear-gradient\\(120deg\\,transparent_40\\%\\,var\\(--skeleton-highlight\\)\\,transparent_60\\%\\)_var\\(--color-muted\\)_0_0\\/200\\%_100\\%_fixed\\] {\n background: linear-gradient(120deg,transparent 40%,var(--skeleton-highlight),transparent 60%) var(--color-muted) 0 0/200% 100% fixed;\n }\n .\\[clip-path\\:inset\\(0_1px\\)\\] {\n clip-path: inset(0 1px);\n }\n .not-dark\\:bg-clip-padding {\n &:not(*:is(.dark *, :host(.dark) *)) {\n background-clip: padding-box;\n }\n }\n .group-data-hover\\:bg-amber-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-amber-100);\n }\n }\n .group-data-hover\\:bg-blue-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-blue-100);\n }\n }\n .group-data-hover\\:bg-cyan-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-cyan-100);\n }\n }\n .group-data-hover\\:bg-emerald-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-emerald-100);\n }\n }\n .group-data-hover\\:bg-fuchsia-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-fuchsia-100);\n }\n }\n .group-data-hover\\:bg-rose-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-rose-100);\n }\n }\n .group-data-hover\\:bg-slate-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-slate-100);\n }\n }\n .group-data-hover\\:bg-violet-100 {\n &:is(:where(.group)[data-hover] *) {\n background-color: var(--color-violet-100);\n }\n }\n .placeholder\\:text-muted-foreground {\n &::placeholder {\n color: var(--muted-foreground);\n }\n }\n .before\\:pointer-events-none {\n &::before {\n content: var(--tw-content);\n pointer-events: none;\n }\n }\n .before\\:absolute {\n &::before {\n content: var(--tw-content);\n position: absolute;\n }\n }\n .before\\:inset-0 {\n &::before {\n content: var(--tw-content);\n inset: calc(var(--spacing) * 0);\n }\n }\n .before\\:rounded-\\[calc\\(var\\(--radius-2xl\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-radius: calc(var(--radius-2xl) - 1px);\n }\n }\n .before\\:rounded-\\[calc\\(var\\(--radius-lg\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-radius: calc(var(--radius-lg) - 1px);\n }\n }\n .before\\:rounded-\\[calc\\(var\\(--radius-md\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-radius: calc(var(--radius-md) - 1px);\n }\n }\n .before\\:rounded-\\[calc\\(var\\(--radius-xl\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-radius: calc(var(--radius-xl) - 1px);\n }\n }\n .before\\:rounded-t-\\[calc\\(var\\(--radius-xl\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-top-left-radius: calc(var(--radius-xl) - 1px);\n border-top-right-radius: calc(var(--radius-xl) - 1px);\n }\n }\n .before\\:bg-muted\\/72 {\n &::before {\n content: var(--tw-content);\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 72%, transparent);\n }\n }\n }\n .before\\:shadow-\\[0_1px_--theme\\(--color-black\\/4\\%\\)\\] {\n &::before {\n content: var(--tw-content);\n --tw-shadow: 0 1px var(--tw-shadow-color, color-mix(in srgb, #000 4%, transparent));\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow: 0 1px var(--tw-shadow-color, color-mix(in oklab, var(--color-black) 4%, transparent));\n }\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-within\\:border-ring {\n &:focus-within {\n border-color: var(--ring);\n }\n }\n .focus-within\\:bg-accent {\n &:focus-within {\n background-color: var(--accent);\n }\n }\n .focus-within\\:text-accent-foreground {\n &:focus-within {\n color: var(--accent-foreground);\n }\n }\n .focus-within\\:ring-\\[3px\\] {\n &:focus-within {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-within\\:ring-ring\\/30 {\n &:focus-within {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 30%, transparent);\n }\n }\n }\n .hover\\:border-destructive\\/30 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--destructive) 30%, transparent);\n }\n }\n }\n }\n .hover\\:bg-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n .hover\\:bg-amber-500\\/20 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-500) 20%, transparent);\n }\n }\n }\n }\n .hover\\:bg-destructive\\/5 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 5%, transparent);\n }\n }\n }\n }\n .hover\\:bg-destructive\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-info\\/20 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--info) 20%, transparent);\n }\n }\n }\n }\n .hover\\:bg-primary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-secondary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:text-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n .hover\\:underline {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n .focus\\:bg-accent {\n &:focus {\n background-color: var(--accent);\n }\n }\n .focus\\:text-accent-foreground {\n &:focus {\n color: var(--accent-foreground);\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .focus-visible\\:border-ring {\n &:focus-visible {\n border-color: var(--ring);\n }\n }\n .focus-visible\\:ring-2 {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-\\[3px\\] {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-ring {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n }\n }\n .focus-visible\\:ring-ring\\/30 {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 30%, transparent);\n }\n }\n }\n .focus-visible\\:ring-offset-1 {\n &:focus-visible {\n --tw-ring-offset-width: 1px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n }\n .focus-visible\\:ring-offset-background {\n &:focus-visible {\n --tw-ring-offset-color: var(--background);\n }\n }\n .disabled\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\:cursor-not-allowed {\n &:disabled {\n cursor: not-allowed;\n }\n }\n .disabled\\:opacity-60 {\n &:disabled {\n opacity: 60%;\n }\n }\n .has-disabled\\:opacity-60 {\n &:has(*:disabled) {\n opacity: 60%;\n }\n }\n .aria-invalid\\:border-destructive\\/40 {\n &[aria-invalid=\"true\"] {\n border-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n .aria-invalid\\:focus-visible\\:ring-destructive\\/20 {\n &[aria-invalid=\"true\"] {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n }\n .data-\\[disabled\\]\\:pointer-events-none {\n &[data-disabled] {\n pointer-events: none;\n }\n }\n .data-\\[disabled\\]\\:opacity-64 {\n &[data-disabled] {\n opacity: 64%;\n }\n }\n .data-\\[highlighted\\]\\:bg-accent {\n &[data-highlighted] {\n background-color: var(--accent);\n }\n }\n .data-\\[highlighted\\]\\:text-accent-foreground {\n &[data-highlighted] {\n color: var(--accent-foreground);\n }\n }\n .sm\\:min-h-7 {\n @media (width >= 40rem) {\n min-height: calc(var(--spacing) * 7);\n }\n }\n .sm\\:py-\\[10vh\\] {\n @media (width >= 40rem) {\n padding-block: 10vh;\n }\n }\n .sm\\:text-sm {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .sm\\:text-sm\\/4 {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: calc(var(--spacing) * 4);\n }\n }\n .dark\\:bg-amber-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-blue-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-cyan-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-destructive\\/20 {\n &:is(.dark *, :host(.dark) *) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-fuchsia-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-info\\/20 {\n &:is(.dark *, :host(.dark) *) {\n background-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--info) 20%, transparent);\n }\n }\n }\n .dark\\:bg-input\\/30 {\n &:is(.dark *, :host(.dark) *) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n .dark\\:bg-rose-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-slate-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-success\\/20 {\n &:is(.dark *, :host(.dark) *) {\n background-color: var(--success);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--success) 20%, transparent);\n }\n }\n }\n .dark\\:bg-violet-400\\/10 {\n &:is(.dark *, :host(.dark) *) {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-warning\\/20 {\n &:is(.dark *, :host(.dark) *) {\n background-color: var(--warning);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--warning) 20%, transparent);\n }\n }\n }\n .dark\\:text-amber-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-amber-400);\n }\n }\n .dark\\:text-amber-500 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-amber-500);\n }\n }\n .dark\\:text-blue-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-blue-400);\n }\n }\n .dark\\:text-cyan-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-cyan-400);\n }\n }\n .dark\\:text-emerald-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-emerald-400);\n }\n }\n .dark\\:text-fuchsia-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-fuchsia-400);\n }\n }\n .dark\\:text-rose-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-rose-400);\n }\n }\n .dark\\:text-slate-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-slate-400);\n }\n }\n .dark\\:text-violet-400 {\n &:is(.dark *, :host(.dark) *) {\n color: var(--color-violet-400);\n }\n }\n .dark\\:inset-ring-amber-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-amber-400) 20%, transparent);\n }\n }\n }\n .dark\\:inset-ring-blue-400\\/30 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-blue-400) 30%, transparent);\n }\n }\n }\n .dark\\:inset-ring-cyan-400\\/30 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-cyan-400) 30%, transparent);\n }\n }\n }\n .dark\\:inset-ring-emerald-500\\/20 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-emerald-500) 20%, transparent);\n }\n }\n }\n .dark\\:inset-ring-fuchsia-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(74% 0.238 322.16) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-fuchsia-400) 20%, transparent);\n }\n }\n }\n .dark\\:inset-ring-rose-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-rose-400) 20%, transparent);\n }\n }\n }\n .dark\\:inset-ring-slate-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-slate-400) 20%, transparent);\n }\n }\n }\n .dark\\:inset-ring-violet-400\\/30 {\n &:is(.dark *, :host(.dark) *) {\n --tw-inset-ring-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-inset-ring-color: color-mix(in oklab, var(--color-violet-400) 30%, transparent);\n }\n }\n }\n .dark\\:\\[--skeleton-highlight\\:--alpha\\(var\\(--color-white\\)\\/4\\%\\)\\] {\n &:is(.dark *, :host(.dark) *) {\n --skeleton-highlight: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --skeleton-highlight: color-mix(in oklab, var(--color-white) 4%, transparent);\n }\n }\n }\n .dark\\:group-data-hover\\:bg-amber-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-blue-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-cyan-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-emerald-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-fuchsia-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-rose-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-slate-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-violet-400\\/20 {\n &:is(.dark *, :host(.dark) *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 20%, transparent);\n }\n }\n }\n }\n .dark\\:before\\:shadow-\\[0_-1px_--theme\\(--color-white\\/6\\%\\)\\] {\n &:is(.dark *, :host(.dark) *) {\n &::before {\n content: var(--tw-content);\n --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in srgb, #fff 6%, transparent));\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in oklab, var(--color-white) 6%, transparent));\n }\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .\\[\\&_svg\\]\\:pointer-events-none {\n & svg {\n pointer-events: none;\n }\n }\n .\\[\\&_svg\\]\\:shrink-0 {\n & svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'opacity-\\'\\]\\)\\]\\:opacity-80 {\n & svg:not([class*='opacity-']) {\n opacity: 80%;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4\\.5 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4.5);\n height: calc(var(--spacing) * 4.5);\n }\n }\n .\\[\\&\\>svg\\]\\:pointer-events-none {\n &>svg {\n pointer-events: none;\n }\n }\n .\\[\\&\\>svg\\]\\:-mx-0\\.5 {\n &>svg {\n margin-inline: calc(var(--spacing) * -0.5);\n }\n }\n .\\[\\&\\>svg\\]\\:shrink-0 {\n &>svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&\\>svg\\:not\\(\\[class\\*\\=\\'opacity-\\'\\]\\)\\]\\:opacity-80 {\n &>svg:not([class*='opacity-']) {\n opacity: 80%;\n }\n }\n .\\[\\&\\>svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n &>svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n}\n@layer base {\n *, ::after, ::before {\n border-color: var(--color-border, currentColor);\n }\n}\n@layer components {\n [data-highlighted] {\n background-color: var(--accent);\n color: var(--accent-foreground);\n transition: background-color 150ms ease-out;\n }\n [data-kbd-nav] [data-highlighted]:not([data-kbd-highlighted]) {\n background-color: transparent;\n color: inherit;\n }\n [data-kbd-highlighted] {\n background-color: var(--accent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in srgb, var(--accent) 200%, transparent);\n }\n color: var(--accent-foreground);\n }\n .uidex-item-interactive:hover {\n background-color: var(--accent);\n color: var(--accent-foreground);\n }\n [data-kbd-nav] .uidex-item-interactive:hover:not(:focus):not(:focus-within) {\n background-color: transparent;\n color: inherit;\n }\n .uidex-scrollbar {\n scrollbar-width: thin;\n scrollbar-color: var(--muted-foreground) transparent;\n @supports (color: color-mix(in lab, red, red)) {\n scrollbar-color: color-mix(in srgb, var(--muted-foreground) 40%, transparent) transparent;\n }\n }\n .uidex-scrollbar::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n .uidex-scrollbar::-webkit-scrollbar-track {\n background: transparent;\n }\n .uidex-scrollbar::-webkit-scrollbar-thumb {\n background-color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix( in srgb, var(--muted-foreground) 35%, transparent );\n }\n border-radius: 9999px;\n border: 2px solid transparent;\n background-clip: content-box;\n }\n .uidex-scrollbar::-webkit-scrollbar-thumb:hover {\n background-color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix( in srgb, var(--muted-foreground) 60%, transparent );\n }\n }\n .uidex-scrollbar::-webkit-scrollbar-corner {\n background: transparent;\n }\n}\n@keyframes skeleton {\n to {\n background-position: -200% 0;\n }\n}\n:where(:host, :root) {\n --background: color-mix(\n in srgb,\n oklch(14.5% 0 0) 95%,\n #fff\n );\n @supports (color: color-mix(in lab, red, red)) {\n --background: color-mix(\n in srgb,\n var(--color-neutral-950) 95%,\n var(--color-white)\n );\n }\n --foreground: var(--color-neutral-100);\n --card: var(--background);\n @supports (color: color-mix(in lab, red, red)) {\n --card: color-mix(in srgb, var(--background) 98%, var(--color-white));\n }\n --card-foreground: var(--color-neutral-100);\n --popover: var(--background);\n @supports (color: color-mix(in lab, red, red)) {\n --popover: color-mix(in srgb, var(--background) 98%, var(--color-white));\n }\n --popover-foreground: var(--color-neutral-100);\n --primary: var(--color-neutral-100);\n --primary-foreground: var(--color-neutral-800);\n --secondary: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --secondary: color-mix(in srgb, var(--color-white) 4%, transparent);\n }\n --secondary-foreground: var(--color-neutral-100);\n --muted: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --muted: color-mix(in srgb, var(--color-white) 4%, transparent);\n }\n --muted-foreground: color-mix(\n in srgb,\n oklch(55.6% 0 0) 90%,\n #fff\n );\n @supports (color: color-mix(in lab, red, red)) {\n --muted-foreground: color-mix(\n in srgb,\n var(--color-neutral-500) 90%,\n var(--color-white)\n );\n }\n --accent: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --accent: color-mix(in srgb, var(--color-white) 4%, transparent);\n }\n --accent-foreground: var(--color-neutral-100);\n --destructive: color-mix(\n in srgb,\n oklch(63.7% 0.237 25.331) 90%,\n #fff\n );\n @supports (color: color-mix(in lab, red, red)) {\n --destructive: color-mix(\n in srgb,\n var(--color-red-500) 90%,\n var(--color-white)\n );\n }\n --destructive-foreground: var(--color-red-400);\n --border: color-mix(in srgb, #fff 6%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --border: color-mix(in srgb, var(--color-white) 6%, transparent);\n }\n --input: color-mix(in srgb, #fff 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --input: color-mix(in srgb, var(--color-white) 8%, transparent);\n }\n --ring: var(--color-neutral-500);\n --info: var(--color-blue-500);\n --info-foreground: var(--color-blue-400);\n --success: var(--color-emerald-500);\n --success-foreground: var(--color-emerald-400);\n --warning: var(--color-amber-500);\n --warning-foreground: var(--color-amber-400);\n --radius: 0.625rem;\n}\n:host(.light) {\n --background: var(--color-white);\n --foreground: var(--color-neutral-800);\n --card: var(--color-white);\n --card-foreground: var(--color-neutral-800);\n --popover: var(--color-white);\n --popover-foreground: var(--color-neutral-800);\n --primary: var(--color-neutral-800);\n --primary-foreground: var(--color-neutral-50);\n --secondary: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --secondary: color-mix(in srgb, var(--color-black) 4%, transparent);\n }\n --secondary-foreground: var(--color-neutral-800);\n --muted: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --muted: color-mix(in srgb, var(--color-black) 4%, transparent);\n }\n --muted-foreground: color-mix(\n in srgb,\n oklch(55.6% 0 0) 90%,\n #000\n );\n @supports (color: color-mix(in lab, red, red)) {\n --muted-foreground: color-mix(\n in srgb,\n var(--color-neutral-500) 90%,\n var(--color-black)\n );\n }\n --accent: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --accent: color-mix(in srgb, var(--color-black) 4%, transparent);\n }\n --accent-foreground: var(--color-neutral-800);\n --destructive: var(--color-red-500);\n --destructive-foreground: var(--color-red-700);\n --border: color-mix(in srgb, #000 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --border: color-mix(in srgb, var(--color-black) 8%, transparent);\n }\n --input: color-mix(in srgb, #000 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --input: color-mix(in srgb, var(--color-black) 10%, transparent);\n }\n --ring: var(--color-neutral-400);\n --info: var(--color-blue-500);\n --info-foreground: var(--color-blue-700);\n --success: var(--color-emerald-500);\n --success-foreground: var(--color-emerald-700);\n --warning: var(--color-amber-500);\n --warning-foreground: var(--color-amber-700);\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-scale-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ordinal {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-slashed-zero {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-figure {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-spacing {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-fraction {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-content {\n syntax: \"*\";\n initial-value: \"\";\n inherits: false;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-ordinal: initial;\n --tw-slashed-zero: initial;\n --tw-numeric-figure: initial;\n --tw-numeric-spacing: initial;\n --tw-numeric-fraction: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-ease: initial;\n --tw-content: \"\";\n }\n }\n}\n","export const SURFACE_HOST_CLASS = \"uidex-surface-host\"\nexport const SURFACE_CONTAINER_CLASS = \"uidex-container\"\n\nexport const Z_BASE = 2147483644\nexport const Z_OVERLAY = 2147483645\nexport const Z_CHROME = 2147483646\n\nexport const SURFACE_IGNORE_SELECTOR = `.${SURFACE_HOST_CLASS},.${SURFACE_CONTAINER_CLASS}`\n\nimport type { EntityKind } from \"../entities\"\n\nexport const UIDEX_ATTR_TO_KIND: ReadonlyArray<readonly [string, EntityKind]> =\n [\n [\"data-uidex\", \"element\"],\n [\"data-uidex-region\", \"region\"],\n [\"data-uidex-widget\", \"widget\"],\n [\"data-uidex-primitive\", \"primitive\"],\n ]\n","import type { ResolvedTheme } from \"../session\"\nimport builtinCss from \"../styles/tailwind.built.css\"\nimport { SURFACE_HOST_CLASS, Z_BASE } from \"./constants\"\n\nexport interface SurfaceHost {\n readonly hostEl: HTMLElement\n readonly shadowRoot: ShadowRoot\n readonly chromeEl: HTMLElement\n applyTheme(theme: ResolvedTheme): void\n destroy(): void\n}\n\nexport interface SurfaceHostOptions {\n mount: Element\n stylesheets?: string[]\n initialTheme?: ResolvedTheme\n}\n\nexport function createSurfaceHost(options: SurfaceHostOptions): SurfaceHost {\n const { mount, stylesheets = [], initialTheme = \"light\" } = options\n\n const hostEl = document.createElement(\"div\")\n hostEl.classList.add(SURFACE_HOST_CLASS)\n hostEl.style.position = \"fixed\"\n hostEl.style.inset = \"0\"\n hostEl.style.pointerEvents = \"none\"\n hostEl.style.zIndex = String(Z_BASE)\n hostEl.classList.add(initialTheme)\n\n const shadow = hostEl.attachShadow({ mode: \"open\" })\n\n applyStylesheets(shadow, [builtinCss, ...stylesheets])\n\n const chromeEl = document.createElement(\"div\")\n chromeEl.classList.add(\"uidex-chrome\")\n chromeEl.style.pointerEvents = \"auto\"\n shadow.appendChild(chromeEl)\n\n mount.appendChild(hostEl)\n\n return {\n hostEl,\n shadowRoot: shadow,\n chromeEl,\n applyTheme(theme) {\n hostEl.classList.remove(\"light\", \"dark\")\n hostEl.classList.add(theme)\n },\n destroy() {\n hostEl.remove()\n },\n }\n}\n\nfunction applyStylesheets(shadow: ShadowRoot, stylesheets: string[]): void {\n if (stylesheets.length === 0) return\n\n const adoptable = supportsConstructableStylesheets(shadow)\n if (adoptable) {\n const sheets: CSSStyleSheet[] = []\n for (const css of stylesheets) {\n const sheet = new CSSStyleSheet()\n sheet.replaceSync(css)\n sheets.push(sheet)\n }\n shadow.adoptedStyleSheets = [...shadow.adoptedStyleSheets, ...sheets]\n return\n }\n\n for (const css of stylesheets) {\n const style = document.createElement(\"style\")\n style.textContent = css\n shadow.appendChild(style)\n }\n}\n\nfunction supportsConstructableStylesheets(shadow: ShadowRoot): boolean {\n if (typeof CSSStyleSheet === \"undefined\") return false\n if (!(\"adoptedStyleSheets\" in shadow)) return false\n try {\n const probe = new CSSStyleSheet()\n probe.replaceSync(\"\")\n return true\n } catch {\n return false\n }\n}\n","import { createElement as createLucideElement } from \"lucide\"\nimport { displayName, KIND_STYLE, type Entity } from \"../entities\"\nimport type { SessionStore } from \"../session\"\nimport { Z_CHROME } from \"./constants\"\n\nconst DEFAULT_TOOLTIP_COLOR = \"#34d399\"\nconst TOOLTIP_OFFSET = 16\nconst ARROW_SIZE = 5\n\nexport type CursorTooltipContent =\n | {\n entity: Entity\n node?: Element | null\n layer?: { index: number; total: number }\n }\n | string\n\nexport interface CursorTooltip {\n destroy(): void\n /** Present content for the current cursor position. */\n update(\n content: CursorTooltipContent | null,\n cursor: { x: number; y: number } | null\n ): void\n}\n\nexport interface CursorTooltipDeps {\n container: Element\n session: SessionStore\n}\n\nexport function createCursorTooltip(deps: CursorTooltipDeps): CursorTooltip {\n const { container } = deps\n\n const el = document.createElement(\"div\")\n el.setAttribute(\"data-uidex-cursor-tooltip\", \"\")\n el.style.position = \"fixed\"\n el.style.pointerEvents = \"none\"\n el.style.zIndex = String(Z_CHROME)\n el.style.padding = \"4px 8px\"\n el.style.fontSize = \"12px\"\n el.style.fontFamily = \"ui-sans-serif, system-ui, sans-serif\"\n el.style.borderRadius = \"6px\"\n el.style.background = DEFAULT_TOOLTIP_COLOR\n el.style.color = \"#0a0a0a\"\n el.style.display = \"none\"\n el.style.whiteSpace = \"nowrap\"\n el.style.transform = \"translate(-50%, 0)\"\n el.style.alignItems = \"center\"\n el.style.gap = \"6px\"\n\n const arrow = document.createElement(\"div\")\n arrow.setAttribute(\"data-uidex-cursor-tooltip-arrow\", \"\")\n arrow.style.position = \"absolute\"\n arrow.style.left = \"50%\"\n arrow.style.bottom = \"100%\"\n arrow.style.width = \"0\"\n arrow.style.height = \"0\"\n arrow.style.transform = \"translate(-50%, 0)\"\n arrow.style.borderLeft = `${ARROW_SIZE}px solid transparent`\n arrow.style.borderRight = `${ARROW_SIZE}px solid transparent`\n arrow.style.borderBottom = `${ARROW_SIZE}px solid ${DEFAULT_TOOLTIP_COLOR}`\n el.appendChild(arrow)\n\n const body = document.createElement(\"span\")\n body.setAttribute(\"data-uidex-cursor-tooltip-body\", \"\")\n body.style.display = \"inline-flex\"\n body.style.alignItems = \"center\"\n body.style.gap = \"6px\"\n el.appendChild(body)\n\n container.appendChild(el)\n\n let currentContent: CursorTooltipContent | null = null\n let currentCursor: { x: number; y: number } | null = null\n\n const applyColor = (color: string): void => {\n el.style.background = color\n arrow.style.borderBottom = `${ARROW_SIZE}px solid ${color}`\n }\n\n const renderBody = (): void => {\n body.replaceChildren()\n if (typeof currentContent === \"string\") {\n applyColor(DEFAULT_TOOLTIP_COLOR)\n body.append(document.createTextNode(currentContent))\n return\n }\n if (!currentContent) return\n const { entity, node } = currentContent\n const style = KIND_STYLE[entity.kind]\n applyColor(style?.color ?? DEFAULT_TOOLTIP_COLOR)\n if (style) {\n const svg = createLucideElement(style.icon)\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"width\", \"14\")\n svg.setAttribute(\"height\", \"14\")\n svg.style.display = \"block\"\n body.append(svg)\n }\n const label = displayName(entity, node)\n body.append(document.createTextNode(label))\n if (currentContent.layer) {\n const counter = document.createElement(\"span\")\n counter.setAttribute(\"data-uidex-cursor-tooltip-layer\", \"\")\n counter.style.fontFamily = \"ui-monospace, SFMono-Regular, Menlo, monospace\"\n counter.style.fontSize = \"10px\"\n counter.style.lineHeight = \"1\"\n counter.style.padding = \"2px 5px\"\n counter.style.borderRadius = \"4px\"\n counter.style.background = \"rgba(0,0,0,0.18)\"\n counter.textContent = `${currentContent.layer.index + 1}/${currentContent.layer.total}`\n body.append(counter)\n }\n }\n\n const render = (): void => {\n if (!currentContent || !currentCursor) {\n el.style.display = \"none\"\n return\n }\n renderBody()\n el.style.display = \"inline-flex\"\n el.style.left = `${currentCursor.x}px`\n el.style.top = `${currentCursor.y + TOOLTIP_OFFSET}px`\n }\n\n return {\n update(content, cursor) {\n currentContent = content\n currentCursor = cursor\n render()\n },\n destroy() {\n el.remove()\n currentContent = null\n currentCursor = null\n },\n }\n}\n","import { displayName, type Entity, type EntityRef } from \"../entities\"\nimport type { Registry } from \"../entities\"\nimport type { SessionStore } from \"../session\"\nimport { SURFACE_IGNORE_SELECTOR, UIDEX_ATTR_TO_KIND } from \"./constants\"\nimport type { Overlay, OverlayShowOptions } from \"./overlay\"\n\nexport interface InspectorMatch {\n element: HTMLElement\n ref: EntityRef\n entity: Entity\n /** Display name resolved via `displayName(entity, element)`. */\n label: string\n}\n\nexport interface InspectorMatchStack {\n matches: InspectorMatch[]\n index: number\n current: InspectorMatch\n}\n\nexport interface InspectorOptions {\n session: SessionStore\n registry?: Registry\n resolveAll?: (target: Element) => InspectorMatch[]\n onHover?: (\n stack: InspectorMatchStack | null,\n cursor: { x: number; y: number } | null\n ) => void\n onSelect?: (match: InspectorMatch, cursor: { x: number; y: number }) => void\n onCycle?: (\n stack: InspectorMatchStack,\n cursor: { x: number; y: number }\n ) => void\n}\n\nexport interface Inspector {\n mount(): void\n destroy(): void\n}\n\nfunction entityForRef(ref: EntityRef, registry?: Registry): Entity {\n if (registry) {\n const found = registry.get(ref.kind, ref.id)\n if (found) return found\n }\n if (ref.kind === \"route\") return { kind: \"route\", path: ref.id, page: ref.id }\n if (ref.kind === \"flow\") {\n return {\n kind: \"flow\",\n id: ref.id,\n loc: { file: \"\" },\n touches: [],\n steps: [],\n }\n }\n return { kind: ref.kind, id: ref.id }\n}\n\nexport function defaultResolveMatch(\n target: Element,\n registry?: Registry\n): InspectorMatch | null {\n if (target.closest(SURFACE_IGNORE_SELECTOR)) return null\n let node: Element | null = target\n while (node) {\n if (node instanceof HTMLElement) {\n for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {\n const id = node.getAttribute(attr)\n if (id) {\n const ref: EntityRef = { kind, id }\n const entity = entityForRef(ref, registry)\n return {\n element: node,\n ref,\n entity,\n label: displayName(entity, node),\n }\n }\n }\n }\n node = node.parentElement\n }\n return null\n}\n\nexport function defaultResolveAllMatches(\n target: Element,\n registry?: Registry\n): InspectorMatch[] {\n if (target.closest(SURFACE_IGNORE_SELECTOR)) return []\n const matches: InspectorMatch[] = []\n const seen = new Set<string>()\n let node: Element | null = target\n while (node) {\n if (node instanceof HTMLElement) {\n for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {\n const id = node.getAttribute(attr)\n if (id) {\n const key = `${kind}:${id}`\n if (!seen.has(key)) {\n seen.add(key)\n const ref: EntityRef = { kind, id }\n const entity = entityForRef(ref, registry)\n matches.push({\n element: node,\n ref,\n entity,\n label: displayName(entity, node),\n })\n }\n }\n }\n }\n node = node.parentElement\n }\n return matches\n}\n\nexport function resolveEntityElement(ref: EntityRef): HTMLElement | null {\n const entry = UIDEX_ATTR_TO_KIND.find(([, kind]) => kind === ref.kind)\n if (!entry) return null\n const [attr] = entry\n const selector = `[${attr}=\"${CSS.escape(ref.id)}\"]`\n const el = document.querySelector(selector)\n if (el instanceof HTMLElement && el.isConnected) return el\n return null\n}\n\nexport interface HighlightControllerLike {\n show(ref: EntityRef, opts?: OverlayShowOptions): void\n hide(): void\n}\n\nexport function createHighlightController(\n overlay: Overlay\n): HighlightControllerLike {\n let lastKey: string | null = null\n return {\n show(ref, opts) {\n const el = resolveEntityElement(ref)\n if (!el) {\n lastKey = null\n overlay.hide()\n return\n }\n const key = `${ref.kind}:${ref.id}`\n if (key === lastKey && overlay.isVisible) return\n lastKey = key\n overlay.show(el, opts)\n },\n hide() {\n lastKey = null\n overlay.hide()\n },\n }\n}\n\nexport function createInspector(options: InspectorOptions): Inspector {\n const {\n session,\n registry,\n resolveAll = (target) => defaultResolveAllMatches(target, registry),\n onHover,\n onSelect,\n onCycle,\n } = options\n\n let mounted = false\n let currentEl: HTMLElement | null = null\n let cursorStyleEl: HTMLStyleElement | null = null\n let stack: InspectorMatch[] = []\n let layerIndex = 0\n let lastCursor: { x: number; y: number } = { x: 0, y: 0 }\n\n const makeStack = (): InspectorMatchStack | null =>\n stack.length > 0\n ? { matches: stack, index: layerIndex, current: stack[layerIndex] }\n : null\n\n const onMouseMove = (e: MouseEvent): void => {\n if (!(e.target instanceof Element)) return\n const matches = resolveAll(e.target)\n const cursor = { x: e.clientX, y: e.clientY }\n lastCursor = cursor\n const topEl = matches.length > 0 ? matches[0].element : null\n if (topEl) {\n if (topEl !== currentEl) {\n currentEl = topEl\n stack = matches\n layerIndex = 0\n session.getState().actions.hover(stack[0].ref)\n }\n onHover?.(makeStack(), cursor)\n } else if (currentEl) {\n currentEl = null\n stack = []\n layerIndex = 0\n session.getState().actions.hover(null)\n onHover?.(null, cursor)\n }\n }\n\n const onClick = (e: MouseEvent): void => {\n if (!(e.target instanceof Element)) return\n if (e.target.closest(SURFACE_IGNORE_SELECTOR)) return\n if (stack.length === 0) return\n e.preventDefault()\n e.stopPropagation()\n const match = stack[layerIndex]\n session.getState().actions.select(match.ref)\n onSelect?.(match, { x: e.clientX, y: e.clientY })\n }\n\n const onContextMenu = (e: MouseEvent): void => {\n if (stack.length <= 1) return\n e.preventDefault()\n e.stopPropagation()\n layerIndex = (layerIndex + 1) % stack.length\n const match = stack[layerIndex]\n session.getState().actions.hover(match.ref)\n onCycle?.(makeStack()!, lastCursor)\n }\n\n return {\n mount() {\n if (mounted) return\n mounted = true\n if (typeof document !== \"undefined\") {\n cursorStyleEl = document.createElement(\"style\")\n cursorStyleEl.setAttribute(\"data-uidex-inspector-cursor\", \"\")\n cursorStyleEl.textContent =\n \"html, body, body * { cursor: crosshair !important; }\"\n document.head.appendChild(cursorStyleEl)\n }\n document.addEventListener(\"mousemove\", onMouseMove)\n document.addEventListener(\"click\", onClick, true)\n document.addEventListener(\"contextmenu\", onContextMenu, true)\n },\n destroy() {\n if (!mounted) return\n mounted = false\n currentEl = null\n stack = []\n layerIndex = 0\n if (cursorStyleEl) {\n cursorStyleEl.remove()\n cursorStyleEl = null\n }\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"click\", onClick, true)\n document.removeEventListener(\"contextmenu\", onContextMenu, true)\n session.getState().actions.hover(null)\n onHover?.(null, null)\n },\n }\n}\n","import {\n Command,\n Highlighter,\n MousePointerClick,\n createElement as createLucideElement,\n} from \"lucide\"\nimport { cn } from \"../internal/cn\"\nimport { el } from \"../internal/el\"\nimport type { SessionStore } from \"../session\"\nimport { Z_CHROME } from \"./constants\"\nimport { INSPECT_SHORTCUT, formatShortcutLabel } from \"./keys\"\n\nexport type Corner = \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n\nexport interface MenuBarOptions {\n container: Element\n session: SessionStore\n initialCorner?: Corner\n appTitle?: string\n}\n\nexport interface MenuBar {\n destroy(): void\n snapTo(corner: Corner): void\n snapToNearest(x: number, y: number): void\n readonly corner: Corner\n readonly root: HTMLElement\n}\n\nconst ROOT_CLASS =\n \"inline-flex items-center gap-1.5 rounded-xl border border-border bg-popover p-1.5 font-sans text-xs text-popover-foreground shadow-lg/5 select-none not-dark:bg-clip-padding before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-xl)-1px)] before:bg-muted/72 before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\"\n\nconst BUTTON_CLASS =\n \"relative z-1 inline-flex size-6 shrink-0 cursor-pointer items-center justify-center rounded-md border border-transparent text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n\nconst BUTTON_ACTIVE_CLASS =\n \"border-info/40 bg-info/15 text-info-foreground hover:bg-info/20\"\n\nconst TITLE_CLASS =\n \"relative z-1 whitespace-nowrap px-1.5 text-xs font-semibold tracking-tight text-foreground\"\n\nconst BUTTON_HIGHLIGHT_ACTIVE_CLASS =\n \"border-amber-500/40 bg-amber-500/15 text-amber-600 hover:bg-amber-500/20 dark:text-amber-400\"\n\nexport function createMenuBar(options: MenuBarOptions): MenuBar {\n const {\n container,\n session,\n initialCorner = \"bottom-right\",\n appTitle,\n } = options\n\n const root = el(\"div\", {\n class: ROOT_CLASS,\n attrs: {\n \"data-uidex-menubar\": \"\",\n role: \"toolbar\",\n },\n style: {\n position: \"fixed\",\n zIndex: String(Z_CHROME),\n pointerEvents: \"auto\",\n cursor: \"grab\",\n },\n })\n\n let titleEl: HTMLElement | null = null\n if (appTitle) {\n titleEl = el(\"span\", {\n class: TITLE_CLASS,\n attrs: { \"data-uidex-menubar-title\": \"\" },\n text: appTitle,\n })\n root.appendChild(titleEl)\n }\n\n const highlightIcon = createLucideElement(Highlighter)\n highlightIcon.setAttribute(\"class\", \"size-3.5\")\n highlightIcon.setAttribute(\"aria-hidden\", \"true\")\n const highlightBtn = el(\n \"button\",\n {\n class: BUTTON_CLASS,\n attrs: {\n type: \"button\",\n \"data-uidex-menubar-highlight\": \"\",\n \"aria-label\": \"Dismiss highlight\",\n },\n },\n highlightIcon\n )\n highlightBtn.hidden = true\n highlightBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n session.send({ type: \"UNPIN\" })\n })\n root.appendChild(highlightBtn)\n\n const inspectIcon = createLucideElement(MousePointerClick)\n inspectIcon.setAttribute(\"class\", \"size-3.5\")\n inspectIcon.setAttribute(\"aria-hidden\", \"true\")\n const inspectBtn = el(\n \"button\",\n {\n class: BUTTON_CLASS,\n attrs: {\n type: \"button\",\n \"data-uidex-menubar-inspect\": \"\",\n \"aria-label\": `Inspect (${formatShortcutLabel(INSPECT_SHORTCUT)})`,\n },\n },\n inspectIcon\n )\n inspectBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n session.send({ type: \"TOGGLE_INSPECTOR\" })\n })\n root.appendChild(inspectBtn)\n\n const paletteIcon = createLucideElement(Command)\n paletteIcon.setAttribute(\"class\", \"size-3.5\")\n paletteIcon.setAttribute(\"aria-hidden\", \"true\")\n const paletteBtn = el(\n \"button\",\n {\n class: BUTTON_CLASS,\n attrs: {\n type: \"button\",\n \"data-uidex-menubar-palette\": \"\",\n \"aria-label\": \"Command palette\",\n },\n },\n paletteIcon\n )\n paletteBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n if (session.getState().stack.length > 0) {\n session.send({ type: \"CLOSE\" })\n } else {\n session.send({ type: \"OPEN_PALETTE\" })\n }\n })\n root.appendChild(paletteBtn)\n container.appendChild(root)\n\n const syncButtonStates = (): void => {\n const state = session.getState()\n\n const inspectActive = state.inspectorActive\n inspectBtn.setAttribute(\n \"data-uidex-menubar-inspect-active\",\n inspectActive ? \"true\" : \"false\"\n )\n inspectBtn.className = cn(\n BUTTON_CLASS,\n inspectActive && BUTTON_ACTIVE_CLASS\n )\n\n const top = state.stack[state.stack.length - 1] ?? null\n const paletteOpen = top?.id === \"command-palette\"\n paletteBtn.setAttribute(\n \"data-uidex-menubar-palette-active\",\n paletteOpen ? \"true\" : \"false\"\n )\n paletteBtn.className = cn(BUTTON_CLASS, paletteOpen && BUTTON_ACTIVE_CLASS)\n\n const highlightActive = state.pinnedHighlight !== null\n highlightBtn.setAttribute(\n \"data-uidex-menubar-highlight-active\",\n highlightActive ? \"true\" : \"false\"\n )\n highlightBtn.className = cn(\n BUTTON_CLASS,\n highlightActive && BUTTON_HIGHLIGHT_ACTIVE_CLASS\n )\n highlightBtn.hidden = !highlightActive\n }\n syncButtonStates()\n const unsubscribeSession = session.subscribe(syncButtonStates)\n\n let corner: Corner = initialCorner\n const applyCorner = (): void => {\n const offset = \"16px\"\n root.style.top = corner.startsWith(\"top\") ? offset : \"\"\n root.style.bottom = corner.startsWith(\"bottom\") ? offset : \"\"\n root.style.left = corner.endsWith(\"left\") ? offset : \"\"\n root.style.right = corner.endsWith(\"right\") ? offset : \"\"\n root.setAttribute(\"data-uidex-menubar-corner\", corner)\n }\n applyCorner()\n\n let dragging = false\n let startX = 0\n let startY = 0\n let originLeft = 0\n let originTop = 0\n\n const onMouseMove = (e: MouseEvent): void => {\n if (!dragging) return\n root.style.left = `${originLeft + e.clientX - startX}px`\n root.style.top = `${originTop + e.clientY - startY}px`\n }\n\n const onMouseUp = (e: MouseEvent): void => {\n if (!dragging) return\n dragging = false\n root.style.cursor = \"grab\"\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"mouseup\", onMouseUp)\n snapToNearest(e.clientX, e.clientY)\n }\n\n const onMouseDown = (e: MouseEvent): void => {\n if (e.target instanceof HTMLElement && e.target.closest(\"button\")) return\n const rect = root.getBoundingClientRect()\n dragging = true\n originLeft = rect.left\n originTop = rect.top\n startX = e.clientX\n startY = e.clientY\n root.style.cursor = \"grabbing\"\n Object.assign(root.style, {\n top: `${originTop}px`,\n left: `${originLeft}px`,\n bottom: \"\",\n right: \"\",\n })\n document.addEventListener(\"mousemove\", onMouseMove)\n document.addEventListener(\"mouseup\", onMouseUp)\n e.preventDefault()\n }\n root.addEventListener(\"mousedown\", onMouseDown)\n\n function snapTo(next: Corner): void {\n corner = next\n applyCorner()\n }\n\n function snapToNearest(x: number, y: number): void {\n const horizontal = x / (window.innerWidth || 1) < 0.5 ? \"left\" : \"right\"\n const vertical = y / (window.innerHeight || 1) < 0.5 ? \"top\" : \"bottom\"\n snapTo(`${vertical}-${horizontal}` as Corner)\n }\n\n return {\n destroy() {\n unsubscribeSession()\n root.removeEventListener(\"mousedown\", onMouseDown)\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"mouseup\", onMouseUp)\n root.remove()\n },\n snapTo,\n snapToNearest,\n get corner() {\n return corner\n },\n get root() {\n return root\n },\n }\n}\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs))\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"./cn\"\n\ntype Attrs = Record<\n string,\n string | number | boolean | null | undefined | Record<string, string | number>\n>\n\nexport interface ElementOptions {\n class?: ClassValue\n attrs?: Attrs\n text?: string\n html?: never\n dataset?: Record<string, string>\n style?: Partial<CSSStyleDeclaration>\n}\n\nexport type Child = Node | string | null | undefined | false\n\nexport function el<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n options: ElementOptions = {},\n children: Child | Child[] = []\n): HTMLElementTagNameMap[K] {\n const node = document.createElement(tag)\n if (options.class) node.className = cn(options.class)\n if (options.attrs) {\n for (const [key, value] of Object.entries(options.attrs)) {\n if (value === undefined || value === null || value === false) continue\n if (value === true) {\n node.setAttribute(key, \"\")\n } else {\n node.setAttribute(key, String(value))\n }\n }\n }\n if (options.dataset) {\n for (const [key, value] of Object.entries(options.dataset)) {\n node.dataset[key] = value\n }\n }\n if (options.style) {\n Object.assign(node.style, options.style)\n }\n if (options.text !== undefined) {\n node.textContent = options.text\n }\n const list = Array.isArray(children) ? children : [children]\n for (const child of list) {\n if (child === null || child === undefined || child === false) continue\n node.append(\n typeof child === \"string\" ? document.createTextNode(child) : child\n )\n }\n return node\n}\n","import type { SurfaceEvent } from \"../flows/surface\"\nimport type { SessionStore } from \"../session\"\nimport type { ActionsPopupHandle } from \"../views/core/actions-popup\"\n\nexport interface PaletteShortcut {\n /** The key value (e.g. \"k\", \"j\", \";\"). Matched case-insensitively. */\n key: string\n /** Require Cmd (Mac) / Ctrl (Win/Linux). Default: true. */\n mod?: boolean\n /** Require Shift. Default: false. */\n shift?: boolean\n}\n\nconst DEFAULT_SHORTCUT: PaletteShortcut = { key: \"k\" }\n\nexport const ACTIONS_SHORTCUT: PaletteShortcut = { key: \"j\" }\n\nexport const INSPECT_SHORTCUT: PaletteShortcut = { key: \"i\" }\n\nexport function formatShortcutLabel(shortcut: PaletteShortcut): string {\n const parts: string[] = []\n if (shortcut.mod !== false) parts.push(\"⌘\")\n if (shortcut.shift) parts.push(\"⇧\")\n parts.push(shortcut.key.toUpperCase())\n return parts.join(\"\")\n}\n\nfunction matchesShortcut(e: KeyboardEvent, shortcut: PaletteShortcut): boolean {\n const wantMod = shortcut.mod !== false\n const wantShift = shortcut.shift === true\n const hasMod = e.metaKey || e.ctrlKey\n return (\n hasMod === wantMod &&\n e.shiftKey === wantShift &&\n !e.altKey &&\n e.key.toLowerCase() === shortcut.key.toLowerCase()\n )\n}\n\nexport interface BindShadowKeysOptions {\n shadowRoot: ShadowRoot\n session: SessionStore\n getActionsPopup: () => ActionsPopupHandle | null\n shortcut?: PaletteShortcut\n}\n\nexport function bindShadowKeys(options: BindShadowKeysOptions): () => void {\n const { shadowRoot, session, getActionsPopup } = options\n const shortcut = options.shortcut ?? DEFAULT_SHORTCUT\n const send = (event: SurfaceEvent): void => session.send(event)\n\n const onKeydown = (e: KeyboardEvent): void => {\n const isMod = e.metaKey || e.ctrlKey\n const isCmdK = matchesShortcut(e, shortcut)\n const isCmdDot = matchesShortcut(e, ACTIONS_SHORTCUT)\n const isCmdI = matchesShortcut(e, INSPECT_SHORTCUT)\n const isCmdBracket = isMod && !e.altKey && !e.shiftKey && e.key === \"[\"\n const isEsc = e.key === \"Escape\"\n const isPopKey = isEsc || isCmdBracket\n if (!isCmdK && !isCmdDot && !isCmdI && !isPopKey) return\n\n const popup = getActionsPopup()\n if (popup?.isOpen()) {\n if (isPopKey || isCmdK || isCmdDot) {\n popup.close()\n e.preventDefault()\n e.stopPropagation()\n }\n return\n }\n\n if (isCmdDot) {\n if (popup) {\n e.preventDefault()\n e.stopPropagation()\n popup.open()\n }\n return\n }\n\n if (isCmdI) {\n e.preventDefault()\n e.stopPropagation()\n send({ type: \"TOGGLE_INSPECTOR\" })\n return\n }\n\n if (isCmdK) {\n const state = session.getState()\n e.preventDefault()\n e.stopPropagation()\n send(\n state.stack.length === 0 ? { type: \"OPEN_PALETTE\" } : { type: \"CMD_K\" }\n )\n return\n }\n\n const state = session.getState()\n const hasWork =\n state.stack.length > 0 ||\n state.pinnedHighlight !== null ||\n state.inspectorActive\n if (!hasWork) return\n e.preventDefault()\n e.stopPropagation()\n send({ type: \"ESC\" })\n }\n\n // Listen on document so shortcuts work when focus is on the host page,\n // and on the shadow root so they work when focus is inside the overlay.\n const doc = shadowRoot.ownerDocument\n doc.addEventListener(\"keydown\", onKeydown, { capture: true })\n shadowRoot.addEventListener(\"keydown\", onKeydown as EventListener, {\n capture: true,\n })\n return () => {\n doc.removeEventListener(\"keydown\", onKeydown, { capture: true })\n shadowRoot.removeEventListener(\n \"keydown\",\n onKeydown as EventListener,\n {\n capture: true,\n } as EventListenerOptions\n )\n }\n}\n","import { Z_OVERLAY } from \"./constants\"\n\nexport interface OverlayShowOptions {\n label?: string\n color?: string\n padding?: number\n borderStyle?: string\n borderWidth?: number\n fillOpacity?: number\n backdrop?: boolean\n}\n\nexport interface Overlay {\n show(target: Element, options?: OverlayShowOptions): void\n hide(): void\n destroy(): void\n onDismiss: (() => void) | null\n readonly isVisible: boolean\n}\n\ninterface OverlayDeps {\n container: Element\n}\n\nconst DEFAULT_COLOR = \"#34d399\"\nconst DEFAULT_BORDER_WIDTH = 2\nconst DEFAULT_FILL_OPACITY = 0.08\nconst BACKDROP_OPACITY = 0.45\n\nexport function createOverlay(deps: OverlayDeps): Overlay {\n const { container } = deps\n\n const backdrop = document.createElement(\"div\")\n backdrop.setAttribute(\"data-uidex-overlay-backdrop\", \"\")\n backdrop.style.position = \"fixed\"\n backdrop.style.inset = \"0\"\n backdrop.style.zIndex = String(Z_OVERLAY)\n backdrop.style.backgroundColor = `rgba(0, 0, 0, ${BACKDROP_OPACITY})`\n backdrop.style.display = \"none\"\n backdrop.style.pointerEvents = \"auto\"\n backdrop.style.cursor = \"default\"\n backdrop.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n overlay.onDismiss?.()\n })\n container.appendChild(backdrop)\n\n const box = document.createElement(\"div\")\n box.setAttribute(\"data-uidex-overlay\", \"\")\n box.style.position = \"fixed\"\n box.style.pointerEvents = \"none\"\n box.style.zIndex = String(Z_OVERLAY + 1)\n box.style.boxSizing = \"border-box\"\n box.style.display = \"none\"\n\n const label = document.createElement(\"div\")\n label.setAttribute(\"data-uidex-overlay-label\", \"\")\n label.style.position = \"absolute\"\n label.style.left = \"0\"\n label.style.bottom = \"100%\"\n label.style.padding = \"2px 6px\"\n label.style.fontSize = \"11px\"\n label.style.fontFamily = \"ui-sans-serif, system-ui, sans-serif\"\n label.style.lineHeight = \"1\"\n label.style.whiteSpace = \"nowrap\"\n label.style.color = \"#0a0a0a\"\n label.style.display = \"none\"\n\n box.appendChild(label)\n container.appendChild(box)\n\n let target: Element | null = null\n let opts: Required<OverlayShowOptions> = {\n label: \"\",\n color: DEFAULT_COLOR,\n padding: 0,\n borderStyle: \"solid\",\n borderWidth: DEFAULT_BORDER_WIDTH,\n fillOpacity: DEFAULT_FILL_OPACITY,\n backdrop: false,\n }\n\n let rafId: number | null = null\n let attached = false\n\n const schedule = (): void => {\n if (rafId !== null) return\n rafId =\n typeof requestAnimationFrame === \"function\"\n ? requestAnimationFrame(() => {\n rafId = null\n updatePosition()\n })\n : (setTimeout(() => {\n rafId = null\n updatePosition()\n }, 0) as unknown as number)\n }\n\n const cancelSchedule = (): void => {\n if (rafId === null) return\n if (typeof cancelAnimationFrame === \"function\") cancelAnimationFrame(rafId)\n else clearTimeout(rafId as unknown as ReturnType<typeof setTimeout>)\n rafId = null\n }\n\n const onScroll = (): void => schedule()\n const onResize = (): void => schedule()\n\n const attach = (): void => {\n if (attached) return\n attached = true\n window.addEventListener(\"resize\", onResize)\n window.addEventListener(\"scroll\", onScroll, {\n capture: true,\n passive: true,\n })\n }\n\n const detach = (): void => {\n if (!attached) return\n attached = false\n window.removeEventListener(\"resize\", onResize)\n window.removeEventListener(\"scroll\", onScroll, {\n capture: true,\n } as EventListenerOptions)\n cancelSchedule()\n }\n\n function updatePosition(): void {\n if (!target) return\n const rect = target.getBoundingClientRect()\n const pad = opts.padding\n const top = rect.top - pad\n const left = rect.left - pad\n const w = rect.width + pad * 2\n const h = rect.height + pad * 2\n box.style.top = `${top}px`\n box.style.left = `${left}px`\n box.style.width = `${w}px`\n box.style.height = `${h}px`\n\n if (opts.backdrop) {\n const vw = window.innerWidth\n const vh = window.innerHeight\n backdrop.style.clipPath = cutoutPath(vw, vh, left, top, w, h)\n }\n }\n\n function applyStyles(): void {\n box.style.borderColor = opts.color\n box.style.borderStyle = opts.borderStyle\n box.style.borderWidth = `${opts.borderWidth}px`\n box.style.backgroundColor = rgbaFromColor(opts.color, opts.fillOpacity)\n box.style.borderRadius = \"6px\"\n if (opts.label) {\n label.textContent = opts.label\n label.style.backgroundColor = opts.color\n label.style.display = \"\"\n } else {\n label.textContent = \"\"\n label.style.display = \"none\"\n }\n backdrop.style.display = opts.backdrop ? \"\" : \"none\"\n if (!opts.backdrop) {\n backdrop.style.clipPath = \"\"\n }\n }\n\n const overlay: Overlay = {\n onDismiss: null,\n show(nextTarget, showOpts) {\n target = nextTarget\n opts = {\n label: showOpts?.label ?? \"\",\n color: showOpts?.color ?? DEFAULT_COLOR,\n padding: showOpts?.padding ?? 0,\n borderStyle: showOpts?.borderStyle ?? \"solid\",\n borderWidth: showOpts?.borderWidth ?? DEFAULT_BORDER_WIDTH,\n fillOpacity: showOpts?.fillOpacity ?? DEFAULT_FILL_OPACITY,\n backdrop: showOpts?.backdrop ?? false,\n }\n applyStyles()\n updatePosition()\n box.style.display = \"\"\n attach()\n },\n hide() {\n target = null\n box.style.display = \"none\"\n backdrop.style.display = \"none\"\n backdrop.style.clipPath = \"\"\n detach()\n },\n destroy() {\n detach()\n box.remove()\n backdrop.remove()\n target = null\n },\n get isVisible() {\n return target !== null\n },\n }\n\n return overlay\n}\n\n/**\n * Build a `path(evenodd, ...)` that covers the full viewport with a\n * rectangular cutout. Two separate subpaths (each with their own M/Z)\n * avoid the bridging-line artifacts that `polygon()` creates.\n */\nfunction cutoutPath(\n vw: number,\n vh: number,\n x: number,\n y: number,\n w: number,\n h: number\n): string {\n const outer = `M0 0H${vw}V${vh}H0Z`\n const inner = `M${x} ${y}V${y + h}H${x + w}V${y}Z`\n return `path(evenodd,\"${outer}${inner}\")`\n}\n\nfunction rgbaFromColor(color: string, alpha: number): string {\n if (color.startsWith(\"#\")) {\n const hex = color.slice(1)\n const bigint = parseInt(\n hex.length === 3\n ? hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : hex,\n 16\n )\n const r = (bigint >> 16) & 255\n const g = (bigint >> 8) & 255\n const b = bigint & 255\n return `rgba(${r}, ${g}, ${b}, ${alpha})`\n }\n return color\n}\n","import type { ResolvedTheme, SessionStore, ThemePreference } from \"../session\"\n\nexport interface ThemeDetector {\n destroy(): void\n /** Resolve the current theme preference against the environment. */\n readonly resolved: ResolvedTheme\n}\n\nexport interface ThemeDetectorDeps {\n session: SessionStore\n onResolve?: (theme: ResolvedTheme) => void\n}\n\ntype HtmlClassToken = \"dark\" | \"light\"\n\nexport function createThemeDetector(deps: ThemeDetectorDeps): ThemeDetector {\n const { session, onResolve } = deps\n\n let resolved: ResolvedTheme = session.getState().resolvedTheme\n\n const detect = (preference: ThemePreference): ResolvedTheme => {\n if (preference !== \"auto\") return preference\n const htmlToken = readHtmlClassToken()\n if (htmlToken) return htmlToken\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\"\n ) {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\"\n }\n return \"light\"\n }\n\n const push = (): void => {\n const preference = session.getState().theme\n const next = detect(preference)\n if (next === resolved) return\n resolved = next\n session.getState().actions.setTheme(preference, next)\n onResolve?.(next)\n }\n\n push()\n\n let mql: MediaQueryList | null = null\n const mqlListener = (): void => push()\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\"\n ) {\n mql = window.matchMedia(\"(prefers-color-scheme: dark)\")\n if (typeof mql.addEventListener === \"function\") {\n mql.addEventListener(\"change\", mqlListener)\n } else if (typeof mql.addListener === \"function\") {\n // Safari < 14\n mql.addListener(mqlListener)\n }\n }\n\n let observer: MutationObserver | null = null\n if (\n typeof MutationObserver !== \"undefined\" &&\n typeof document !== \"undefined\"\n ) {\n observer = new MutationObserver(() => push())\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"class\"],\n })\n }\n\n const unsubscribe = session.subscribe((state, prev) => {\n if (state.theme !== prev.theme) push()\n })\n\n return {\n destroy() {\n unsubscribe()\n if (mql) {\n if (typeof mql.removeEventListener === \"function\") {\n mql.removeEventListener(\"change\", mqlListener)\n } else if (typeof mql.removeListener === \"function\") {\n mql.removeListener(mqlListener)\n }\n }\n observer?.disconnect()\n },\n get resolved() {\n return resolved\n },\n }\n}\n\nfunction readHtmlClassToken(): HtmlClassToken | null {\n if (typeof document === \"undefined\") return null\n const root = document.documentElement\n if (!root) return null\n if (root.classList.contains(\"dark\")) return \"dark\"\n if (root.classList.contains(\"light\")) return \"light\"\n return null\n}\n","import { KIND_STYLE, type Registry } from \"../entities\"\nimport { createCleanupStack, type CleanupStack } from \"../internal/cleanup\"\nimport type { SessionStore } from \"../session\"\nimport { createCursorTooltip, type CursorTooltip } from \"./cursor-tooltip\"\nimport { createSurfaceHost, type SurfaceHost } from \"./host\"\nimport {\n createInspector,\n type Inspector,\n type InspectorMatch,\n type InspectorMatchStack,\n type InspectorOptions,\n} from \"./inspector\"\nimport { createMenuBar, type Corner, type MenuBar } from \"./menu-bar\"\nimport { createOverlay, type Overlay } from \"./overlay\"\nimport { createThemeDetector, type ThemeDetector } from \"./theme\"\n\nexport interface CreateSurfaceShellOptions {\n mount: Element\n registry: Registry\n session: SessionStore\n stylesheets?: string[]\n initialCorner?: Corner\n appTitle?: string\n /**\n * Additional inspector wiring. Hover is pre-wired to overlay + tooltip; pass\n * `onSelect` (and `onAfterHover`) to extend behaviour without rebuilding the\n * host.\n */\n inspector?: Pick<InspectorOptions, \"onSelect\"> & {\n onAfterHover?: (\n match: InspectorMatch | null,\n cursor: { x: number; y: number } | null\n ) => void\n }\n}\n\nexport interface SurfaceShell {\n host: SurfaceHost\n overlay: Overlay\n tooltip: CursorTooltip\n inspector: Inspector\n menuBar: MenuBar\n themeDetector: ThemeDetector\n cleanup: CleanupStack\n destroy(): void\n}\n\n/**\n * Builds the chrome bundle shared by `createUidex` and `createHeadless`:\n * host + theme detector + overlay + cursor tooltip + inspector + menu bar.\n * Returns a cleanup stack so callers can register their own teardown in LIFO\n * order, then call `destroy()` once to drain the whole thing.\n */\nexport function createSurfaceShell(\n options: CreateSurfaceShellOptions\n): SurfaceShell {\n const cleanup = createCleanupStack()\n\n const host = createSurfaceHost({\n mount: options.mount,\n stylesheets: options.stylesheets,\n initialTheme: options.session.getState().resolvedTheme,\n })\n cleanup.add(host)\n\n const themeDetector = createThemeDetector({\n session: options.session,\n onResolve: (theme) => host.applyTheme(theme),\n })\n cleanup.add(themeDetector)\n\n const overlay = createOverlay({ container: host.chromeEl })\n cleanup.add(overlay)\n\n const tooltip = createCursorTooltip({\n container: host.chromeEl,\n session: options.session,\n })\n cleanup.add(tooltip)\n\n const afterHover = options.inspector?.onAfterHover\n\n const showStack = (\n stack: InspectorMatchStack | null,\n cursor: { x: number; y: number } | null\n ): void => {\n if (!stack) {\n overlay.hide()\n tooltip.update(null, cursor)\n return\n }\n const { current } = stack\n overlay.show(current.element, {\n color: KIND_STYLE[current.ref.kind].color,\n })\n tooltip.update(\n {\n entity: current.entity,\n node: current.element,\n layer:\n stack.matches.length > 1\n ? { index: stack.index, total: stack.matches.length }\n : undefined,\n },\n cursor\n )\n }\n\n const inspector = createInspector({\n session: options.session,\n registry: options.registry,\n onSelect: options.inspector?.onSelect,\n onHover: (stack, cursor) => {\n showStack(stack, cursor)\n afterHover?.(stack?.current ?? null, cursor)\n },\n onCycle: (stack, cursor) => {\n showStack(stack, cursor)\n },\n })\n cleanup.add(inspector)\n\n const menuBar = createMenuBar({\n container: host.chromeEl,\n session: options.session,\n initialCorner: options.initialCorner,\n appTitle: options.appTitle,\n })\n cleanup.add(menuBar)\n\n return {\n host,\n overlay,\n tooltip,\n inspector,\n menuBar,\n themeDetector,\n cleanup,\n destroy: cleanup.drain,\n }\n}\n","export function detectDev(): boolean {\n try {\n if (\n typeof process !== \"undefined\" &&\n typeof process.env?.NODE_ENV === \"string\"\n ) {\n return process.env.NODE_ENV !== \"production\"\n }\n } catch {\n /* ignore */\n }\n return true\n}\n","import type {\n CloudAdapter,\n ConsoleLogEntry,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigIssue,\n NetworkErrorEntry,\n SourceRef,\n Viewport,\n} from \"../../ingest/feedback-contract\"\nimport type { EntityKind, EntityRef, Registry } from \"../../entities\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport type { OverlayShowOptions } from \"../../surface/overlay\"\nimport type { ViewSurface } from \"./surface\"\n\nexport type {\n CloudAdapter,\n ConsoleLogEntry,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigIssue,\n NetworkErrorEntry,\n SourceRef,\n Viewport,\n}\n\nexport interface ViewPalette {\n label: string\n group?: string\n /**\n * Leading-icon factory rendered as a rounded-square tile on the palette\n * row. Called fresh per render (so a returned SVG isn't reparented).\n */\n icon?: () => Node\n shortcut?: string\n}\n\nexport interface ViewDirectory {\n list(): readonly View[]\n recents(): readonly EntityRef[]\n favorites(): readonly EntityRef[]\n}\n\nexport interface ViewPushTarget {\n id: string\n ref?: EntityRef | null\n}\n\nexport interface HighlightController {\n show(ref: EntityRef, opts?: OverlayShowOptions): void\n hide(): void\n}\n\nexport interface ViewContext {\n ref: EntityRef | null\n registry: Registry\n cloud: CloudAdapter<unknown, unknown, unknown> | null\n sdkCloud: CloudAdapter\n views: ViewDirectory\n /** Push a view onto the stack. Unregistered ids are a no-op. */\n push: (target: ViewPushTarget) => void\n /** Pop the top view off the stack. No-op when the stack is empty. */\n pop: () => void\n /** Clear the entire view stack. */\n close: () => void\n /** Resolve the first view matching `ref` and push it onto the stack. */\n navigate: (ref: EntityRef) => void\n /** Pin the overlay to `ref` until the user presses Esc. */\n pinHighlight: (ref: EntityRef) => void\n /** Toggle favorite status for an entity ref. */\n toggleFavorite: (ref: EntityRef) => void\n /** Check if an entity ref is favorited. */\n isFavorite: (ref: EntityRef) => boolean\n /** Shell-owned search input. The shell dispatches its value into the active surface. */\n searchInput: HTMLInputElement\n /** Drives the Surface's singleton overlay from inside a custom surface. */\n highlight: HighlightController\n /** Snapshot of the current view stack (top-most last). */\n getStack: () => readonly ViewStackEntry[]\n}\n\nexport interface ShellHint {\n key: string\n label: string\n}\n\nexport type ShellActionIntent =\n | { kind: \"push\"; viewId: string; refKind?: EntityKind }\n | { kind: \"pop\" }\n | { kind: \"close\" }\n | { kind: \"navigate\"; refKind?: EntityKind }\n | { kind: \"external\"; describe: string }\n\nexport interface ShellAction {\n id: string\n label: string\n shortcut?: string\n icon?: () => Node\n perform: () => void | Promise<void>\n intent?: ShellActionIntent\n}\n\nexport type Cleanup = () => void\n\nexport interface View {\n id: string\n matches?: (ref: EntityRef) => boolean\n palette?: ViewPalette\n title?: string | ((ctx: ViewContext) => string)\n /** Show the shell search input when this view is on top. Default: true. */\n searchable?: boolean\n hints?: ShellHint[] | ((ctx: ViewContext) => ShellHint[])\n actions?: (ctx: ViewContext) => ShellAction[]\n /**\n * Element focused when this view becomes the top of the stack. The shell\n * falls back to the first focusable element in the host when omitted, or\n * when the declared target has been removed from the host.\n */\n focusTarget?: (root: HTMLElement, ctx: ViewContext) => HTMLElement | null\n surface: (ctx: ViewContext) => ViewSurface\n}\n\nexport class ViewValidationError extends Error {\n constructor(message: string) {\n super(message)\n this.name = \"ViewValidationError\"\n }\n}\n","import { sameRef, type EntityRef } from \"../../entities\"\nimport { detectDev } from \"../../internal/dev\"\nimport type { SessionStore } from \"../../session\"\nimport { ViewValidationError, type View } from \"./types\"\n\nexport interface ViewRegistrar {\n register(view: View): void\n unregister(id: string): void\n list(): readonly View[]\n get(id: string): View | undefined\n findMatch(ref: EntityRef): View | null\n navigate(ref: EntityRef): void\n recents(): readonly EntityRef[]\n favorites(): readonly EntityRef[]\n toggleFavorite(ref: EntityRef): void\n isFavorite(ref: EntityRef): boolean\n}\n\nexport interface ViewRegistrarOptions {\n session: SessionStore\n dev?: boolean\n}\n\nexport function createViewRegistrar(\n options: ViewRegistrarOptions\n): ViewRegistrar {\n const FAVORITES_KEY = \"uidex:favorites\"\n const views: View[] = []\n const recentRefs: EntityRef[] = []\n const favoriteRefs: EntityRef[] = []\n const MAX_RECENTS = 8\n const dev = options.dev ?? detectDev()\n\n try {\n const stored = localStorage.getItem(FAVORITES_KEY)\n if (stored) {\n const parsed = JSON.parse(stored) as EntityRef[]\n favoriteRefs.push(...parsed)\n }\n } catch {\n /* ignore — localStorage unavailable or corrupt */\n }\n\n function persistFavorites(): void {\n try {\n localStorage.setItem(FAVORITES_KEY, JSON.stringify(favoriteRefs))\n } catch {\n /* ignore */\n }\n }\n\n function validate(view: View): void {\n if (\n view === null ||\n typeof view !== \"object\" ||\n typeof view.id !== \"string\" ||\n view.id.length === 0\n ) {\n throw new ViewValidationError(\"View must have a non-empty string id\")\n }\n if (typeof view.surface !== \"function\") {\n throw new ViewValidationError(\n `View ${view.id}: 'surface' must be a function`\n )\n }\n if (!view.matches && !view.palette) {\n throw new ViewValidationError(\n `View ${view.id}: at least one of 'matches' or 'palette' is required`\n )\n }\n }\n\n function warnOverlaps(incoming: View): void {\n if (!dev || !incoming.matches) return\n const selection = options.session.getState().selection\n if (!selection) return\n if (!incoming.matches(selection)) return\n for (const existing of views) {\n if (existing.id === incoming.id) continue\n if (!existing.matches) continue\n if (existing.matches(selection)) {\n console.warn(\n `[uidex] View \"${incoming.id}\" matches ref ${selection.kind}:${selection.id} ` +\n `also handled by view \"${existing.id}\"; last-registered wins.`\n )\n }\n }\n }\n\n function register(view: View): void {\n validate(view)\n warnOverlaps(view)\n const existingIdx = views.findIndex((p) => p.id === view.id)\n if (existingIdx >= 0) views.splice(existingIdx, 1)\n views.push(view)\n }\n\n function unregister(id: string): void {\n const idx = views.findIndex((p) => p.id === id)\n if (idx < 0) return\n views.splice(idx, 1)\n const state = options.session.getState()\n const top = state.stack[state.stack.length - 1] ?? null\n if (top?.id === id) state.actions.closeView()\n }\n\n function list(): readonly View[] {\n return views.slice()\n }\n\n function get(id: string): View | undefined {\n return views.find((p) => p.id === id)\n }\n\n function findMatch(ref: EntityRef): View | null {\n for (let i = views.length - 1; i >= 0; i--) {\n const view = views[i]\n if (view.matches && view.matches(ref)) return view\n }\n return null\n }\n\n function trackRecent(ref: EntityRef): void {\n const idx = recentRefs.findIndex((r) => sameRef(r, ref))\n if (idx >= 0) recentRefs.splice(idx, 1)\n recentRefs.unshift(ref)\n if (recentRefs.length > MAX_RECENTS) recentRefs.length = MAX_RECENTS\n }\n\n function navigate(ref: EntityRef): void {\n const match = findMatch(ref)\n if (!match) return\n trackRecent(ref)\n const state = options.session.getState()\n state.actions.select(ref)\n state.actions.pushStack({ id: match.id, ref })\n }\n\n function recents(): readonly EntityRef[] {\n return recentRefs\n }\n\n function favorites(): readonly EntityRef[] {\n return favoriteRefs\n }\n\n function toggleFavorite(ref: EntityRef): void {\n const idx = favoriteRefs.findIndex((r) => sameRef(r, ref))\n if (idx >= 0) {\n favoriteRefs.splice(idx, 1)\n } else {\n favoriteRefs.unshift(ref)\n }\n persistFavorites()\n }\n\n function isFavorite(ref: EntityRef): boolean {\n return favoriteRefs.some((r) => sameRef(r, ref))\n }\n\n return {\n register,\n unregister,\n list,\n get,\n findMatch,\n navigate,\n recents,\n favorites,\n toggleFavorite,\n isFavorite,\n }\n}\n","import type { ClassValue } from \"clsx\"\n\ntype VariantSet = Record<string, Record<string, ClassValue>>\n\ntype VariantValues<V extends VariantSet> = {\n [K in keyof V]?: keyof V[K]\n}\n\nexport interface CvaConfig<V extends VariantSet> {\n variants?: V\n defaultVariants?: VariantValues<V>\n}\n\nexport function cva<V extends VariantSet>(\n base: ClassValue,\n config: CvaConfig<V> = {}\n) {\n return (props: VariantValues<V> = {}): ClassValue[] => {\n const out: ClassValue[] = [base]\n const variants = config.variants\n if (!variants) return out\n for (const key of Object.keys(variants) as Array<keyof V>) {\n const picked =\n (props[key] as string | undefined) ??\n (config.defaultVariants?.[key] as string | undefined)\n if (picked === undefined) continue\n const cls = variants[key][picked as string]\n if (cls) out.push(cls)\n }\n return out\n }\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\nimport { cva } from \"./cva\"\n\nexport type BadgeVariant =\n | \"default\"\n | \"destructive\"\n | \"error\"\n | \"info\"\n | \"outline\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n\nexport type BadgeSize = \"default\" | \"sm\" | \"lg\"\n\nconst badgeBase =\n \"relative inline-flex shrink-0 items-center justify-center gap-1 whitespace-nowrap rounded-sm border border-transparent font-medium outline-none transition-shadow [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-3 [&_svg]:pointer-events-none [&_svg]:shrink-0\"\n\nexport const badgeVariants = cva(badgeBase, {\n defaultVariants: { size: \"default\", variant: \"default\" },\n variants: {\n size: {\n default: \"h-4.5 min-w-4.5 px-1 text-xs\",\n lg: \"h-5.5 min-w-5.5 px-1.5 text-sm\",\n sm: \"h-4 min-w-4 rounded-[0.25rem] px-1 text-[0.625rem]\",\n },\n variant: {\n default: \"bg-primary text-primary-foreground\",\n destructive: \"bg-destructive text-white\",\n error:\n \"bg-destructive/10 text-destructive-foreground dark:bg-destructive/20\",\n info: \"bg-info/10 text-info-foreground dark:bg-info/20\",\n outline: \"border-input bg-background text-foreground dark:bg-input/30\",\n secondary: \"bg-secondary text-secondary-foreground\",\n success: \"bg-success/10 text-success-foreground dark:bg-success/20\",\n warning: \"bg-warning/10 text-warning-foreground dark:bg-warning/20\",\n },\n },\n})\n\nexport interface CreateBadgeOptions extends Omit<ElementOptions, \"class\"> {\n variant?: BadgeVariant\n size?: BadgeSize\n class?: ClassValue\n}\n\nexport function createBadge(\n options: CreateBadgeOptions = {},\n children: Child | Child[] = []\n): HTMLSpanElement {\n const { variant, size, class: extra, attrs, ...rest } = options\n return el(\n \"span\",\n {\n ...rest,\n class: cn(badgeVariants({ variant, size }), extra),\n attrs: { \"data-slot\": \"badge\", ...attrs },\n },\n children\n )\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../../internal/el\"\nimport { createBadge } from \"../../ui/badge\"\n\nexport interface ChipOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nconst CHIP_CLASS =\n \"inline-flex items-center gap-1.5 text-xs font-medium text-muted-foreground\"\n\nexport function createChip(\n options: ChipOptions = {},\n children: Child | Child[] = []\n): HTMLSpanElement {\n const { class: extra, ...rest } = options\n return el(\"span\", { ...rest, class: cn(CHIP_CLASS, extra) }, children)\n}\n\nexport function createPillItem(options: ChipOptions = {}): HTMLLIElement {\n const { class: extra, text, attrs, ...rest } = options\n const li = el(\"li\", { ...rest, class: \"list-none\", attrs })\n const badge = createBadge(\n { variant: \"secondary\", size: \"default\", class: extra, text },\n []\n )\n li.append(badge)\n return li\n}\n","import { createElement as createLucideElement } from \"lucide\"\nimport { KIND_STYLE, type EntityKind } from \"../../entities\"\nimport { cn } from \"../../internal/cn\"\nimport { createBadge } from \"../../ui/badge\"\nimport { createIconTile } from \"./icon-tile\"\n\nexport function renderKindIcon(kind: EntityKind): SVGElement {\n const style = KIND_STYLE[kind]\n const svg = createLucideElement(style.icon)\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"class\", cn(\"h-4 w-4 shrink-0\", style.tone))\n return svg\n}\n\n/** Tile-wrapped kind icon for use as the leading slot on list/detail rows. */\nexport function renderKindIconTile(kind: EntityKind): HTMLElement {\n const style = KIND_STYLE[kind]\n return createIconTile(renderKindIcon(kind), { toneClass: style.chip })\n}\n\n/** Inline badge with the kind icon + label, built on the coss `createBadge`. */\nexport function renderKindBadge(kind: EntityKind): HTMLElement {\n const style = KIND_STYLE[kind]\n const icon = createLucideElement(style.icon)\n icon.setAttribute(\"aria-hidden\", \"true\")\n return createBadge(\n {\n class: style.chip,\n attrs: { \"data-uidex-kind-badge\": kind },\n },\n [icon, style.label]\n )\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\n\nconst TILE_CLASS =\n \"inline-flex size-6 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground\"\n\nconst ICON_SIZE_CLASS_RE = /\\b(h-\\d+|w-\\d+|size-\\d+)\\b/g\n\nexport interface IconTileOptions {\n extraClass?: ClassValue\n /** Tailwind color classes (bg/text/hover/dark) replacing the muted default. */\n toneClass?: ClassValue\n /** CSS color applied as a tinted background (supports hex/rgb/var). */\n tint?: string\n /** 0–100, default 15 — enough to read the hue without fighting contrast. */\n tintAlpha?: number\n}\n\nexport function createIconTile(\n inner: Node,\n options: IconTileOptions = {}\n): HTMLElement {\n if (inner instanceof SVGElement) {\n const existing = inner.getAttribute(\"class\") ?? \"\"\n const stripped = existing.replace(ICON_SIZE_CLASS_RE, \"\").trim()\n inner.setAttribute(\"class\", cn(stripped, \"size-3.5 opacity-80\"))\n }\n\n const tile = el(\n \"span\",\n {\n class: cn(TILE_CLASS, options.toneClass, options.extraClass),\n attrs: { \"data-slot\": \"icon-tile\", \"aria-hidden\": \"true\" },\n },\n [inner]\n )\n\n if (options.tint && !options.toneClass) {\n const pct = options.tintAlpha ?? 15\n tile.style.backgroundColor = `color-mix(in srgb, ${options.tint} ${pct}%, transparent)`\n }\n return tile\n}\n","import { displayName, KIND_STYLE, type Entity } from \"../../entities\"\nimport { el } from \"../../internal/el\"\nimport { createChip } from \"./chip\"\nimport { renderKindIcon } from \"./kind-icon\"\n\nexport interface KindChipOptions {\n entity: Entity\n label?: string\n withKindName?: boolean\n node?: Element | null\n}\n\nexport function renderKindChip(options: KindChipOptions): HTMLElement {\n const { entity, label, withKindName, node } = options\n const kind = entity.kind\n const style = KIND_STYLE[kind]\n const chip = createChip({ attrs: { \"data-uidex-kind-chip\": kind } })\n chip.append(renderKindIcon(kind))\n const resolved = label ?? displayName(entity, node)\n const text = withKindName\n ? resolved\n ? `${style.label} · ${resolved}`\n : style.label\n : resolved\n if (text) {\n chip.append(\n el(\"span\", {\n class: \"truncate\",\n text,\n })\n )\n }\n return chip\n}\n","import * as scrollArea from \"@zag-js/scroll-area\"\nimport { createMachineHandle, type MachineHandle } from \"./machine\"\nimport { normalizeProps, type DomProps } from \"./normalize\"\n\nexport type ScrollAreaProps = scrollArea.Props\nexport type ScrollAreaApi = scrollArea.Api<DomProps>\nexport type ScrollAreaHandle = MachineHandle<ScrollAreaApi>\n\nexport function createScrollArea(\n props: Partial<ScrollAreaProps> = {}\n): ScrollAreaHandle {\n return createMachineHandle(\n scrollArea.machine,\n scrollArea.connect,\n normalizeProps,\n props\n )\n}\n\nexport { scrollArea }\n","import {\n createScope,\n findTransition,\n getExitEnterStates,\n hasTag as hasTagFn,\n INIT_STATE,\n MachineStatus,\n matchesState,\n resolveStateValue,\n type Machine,\n type MachineSchema,\n type Service,\n} from \"@zag-js/core\"\nimport {\n compact,\n ensure,\n isFunction,\n isString,\n toArray,\n warn,\n} from \"@zag-js/utils\"\n\ntype AnyFn = (...args: unknown[]) => unknown\n\ninterface BindableOptions<V> {\n value?: V\n defaultValue?: V\n isEqual?: (a: V, b: V) => boolean\n onChange?: (next: V, prev: V) => void\n sync?: boolean\n debug?: string\n hash?: (value: V) => string\n}\n\ninterface Bindable<V> {\n initial: V\n ref: { current: V }\n get(): V\n set(value: V | ((prev: V) => V)): void\n invoke(next: V, prev: V): void\n hash(value: V): string\n}\n\ninterface BindableFactory {\n <V>(propsFn: () => BindableOptions<V>): Bindable<V>\n cleanup: (fn: () => void) => void\n ref: <V>(defaultValue: V) => { get: () => V; set: (next: V) => void }\n}\n\nfunction createBindable<V>(propsFn: () => BindableOptions<V>): Bindable<V> {\n const initial = (propsFn().value ?? propsFn().defaultValue) as V\n let local = initial\n const ref = { current: initial as V }\n const eq = () => propsFn().isEqual ?? Object.is\n\n const getControlled = () => propsFn().value !== undefined\n\n const setFn = (value: V | ((prev: V) => V)) => {\n const prev = ref.current\n const next = (isFunction(value) ? (value as (p: V) => V)(prev) : value) as V\n if (propsFn().debug) {\n console.log(`[bindable > ${propsFn().debug}] setValue`, { next, prev })\n }\n if (!getControlled()) {\n local = next\n ref.current = next\n }\n if (!eq()(next, prev)) {\n propsFn().onChange?.(next, prev)\n }\n }\n\n const get = () => (getControlled() ? (propsFn().value as V) : local)\n\n // Keep ref in sync when controlled value changes on subsequent reads.\n const syncRef = () => {\n const v = get()\n if (!eq()(v, ref.current)) ref.current = v\n }\n\n return {\n initial,\n ref: new Proxy(ref, {\n get(target, key) {\n if (key === \"current\") {\n syncRef()\n return target.current\n }\n return Reflect.get(target, key)\n },\n }),\n get,\n set: setFn,\n invoke(next, prev) {\n propsFn().onChange?.(next, prev)\n },\n hash(value) {\n return propsFn().hash?.(value) ?? String(value)\n },\n }\n}\n\nexport interface MachineRunner<T extends MachineSchema> {\n service: Service<T>\n start(): void\n stop(): void\n subscribe(listener: () => void): () => void\n update(next: Partial<T[\"props\"]>): void\n}\n\nexport interface MachineHandle<Api> {\n runner: MachineRunner<MachineSchema>\n api: () => Api\n destroy: () => void\n}\n\nexport function createMachineHandle<Props, Api>(\n zagMachine: unknown,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n connect: (service: any, normalize: any) => Api,\n normalize: unknown,\n props: Partial<Props> = {} as Partial<Props>\n): MachineHandle<Api> {\n const runner = createMachineRunner(\n zagMachine as Machine<MachineSchema>,\n props as never\n )\n runner.start()\n return {\n runner,\n api: () => connect(runner.service as never, normalize),\n destroy: () => runner.stop(),\n }\n}\n\ntype AnyMachine = Machine<MachineSchema>\n\nexport function createMachineRunner<T extends MachineSchema>(\n machineArg: Machine<T>,\n initialProps: Partial<T[\"props\"]> = {} as Partial<T[\"props\"]>\n): MachineRunner<T> {\n const machine = machineArg as AnyMachine\n let userProps = initialProps\n const unmountFns: Array<() => void> = []\n const listeners = new Set<() => void>()\n const notify = () => listeners.forEach((fn) => fn())\n\n const bindableFactory: BindableFactory = ((propsFn) =>\n createBindable(propsFn)) as BindableFactory\n bindableFactory.cleanup = (fn) => unmountFns.push(fn)\n bindableFactory.ref = <V>(defaultValue: V) => {\n let value = defaultValue\n return {\n get: () => value,\n set: (next: V) => {\n value = next\n },\n }\n }\n\n const debug = (...args: unknown[]) => {\n if ((machine as { debug?: boolean }).debug) {\n console.log(...args)\n }\n }\n\n const propsRef = { current: {} as T[\"props\"] }\n const prop = (key: string) =>\n (propsRef.current as Record<string, unknown>)[key]\n\n const refreshProps = () => {\n const scope = scopeRef.current\n const computedProps =\n (machine as { props?: AnyFn }).props?.({\n props: compact(userProps) as Record<string, unknown>,\n scope,\n }) ?? userProps\n propsRef.current = computedProps as T[\"props\"]\n }\n\n const defaultGetRootNode = () =>\n typeof document !== \"undefined\" ? document : (null as never)\n\n const scopeRef = {\n current: createScope({\n id: (initialProps as { id?: string }).id,\n ids: (initialProps as { ids?: Record<string, string> }).ids,\n getRootNode:\n (\n initialProps as {\n getRootNode?: () => Node | ShadowRoot | Document\n }\n ).getRootNode ?? defaultGetRootNode,\n }),\n }\n refreshProps()\n\n const effectsMap = new Map<string, () => void>()\n let transitionRef: {\n actions?: unknown\n target?: string\n reenter?: boolean\n } | null = null\n let previousEvent: { type: string } = { type: \"\" }\n let currentEvent: { type: string } = { type: \"\" }\n\n const getEvent = () => ({\n ...currentEvent,\n current() {\n return currentEvent\n },\n previous() {\n return previousEvent\n },\n })\n\n const getState = () => ({\n ...state,\n matches(...values: string[]) {\n return values.some((v) => matchesState(state.ref.current as string, v))\n },\n hasTag(tag: string) {\n return hasTagFn(machine, state.ref.current as string, tag)\n },\n })\n\n const getParams = () => ({\n state: getState(),\n context: ctx,\n event: getEvent(),\n prop,\n send,\n action,\n guard,\n track: trackFn,\n refs,\n computed,\n flush,\n scope: scopeRef.current,\n choose,\n })\n\n const action = (keys: unknown) => {\n const strs = (isFunction(keys) ? (keys as AnyFn)(getParams()) : keys) as\n | string[]\n | undefined\n if (!strs) return\n const fns = strs.map((s) => {\n const fn = (\n machine as { implementations?: { actions?: Record<string, AnyFn> } }\n ).implementations?.actions?.[s]\n if (!fn) warn(`[uidex] No implementation found for action \"${s}\"`)\n return fn\n })\n for (const fn of fns) fn?.(getParams())\n }\n\n const guard = (str: unknown) => {\n if (isFunction(str)) return (str as AnyFn)(getParams())\n return (\n machine as { implementations?: { guards?: Record<string, AnyFn> } }\n ).implementations?.guards?.[str as string](getParams())\n }\n\n const effect = (keys: unknown) => {\n const strs = (isFunction(keys) ? (keys as AnyFn)(getParams()) : keys) as\n | string[]\n | undefined\n if (!strs) return\n const fns = strs.map((s) => {\n const fn = (\n machine as { implementations?: { effects?: Record<string, AnyFn> } }\n ).implementations?.effects?.[s]\n if (!fn) warn(`[uidex] No implementation found for effect \"${s}\"`)\n return fn\n })\n const localCleanups: Array<() => void> = []\n for (const fn of fns) {\n const cleanup = fn?.(getParams())\n if (typeof cleanup === \"function\") {\n localCleanups.push(cleanup as () => void)\n }\n }\n return () => localCleanups.forEach((fn) => fn())\n }\n\n const choose = (transitions: unknown) =>\n (toArray(transitions) as Array<{ guard?: unknown }>).find((t) => {\n let result = !t.guard\n if (isString(t.guard)) result = !!guard(t.guard)\n else if (isFunction(t.guard)) result = !!(t.guard as AnyFn)(getParams())\n return result\n })\n\n const computed = (key: string) => {\n ensure(\n (machine as { computed?: unknown }).computed,\n () => `[uidex] No computed object found on machine`\n )\n const fn = (machine as { computed: Record<string, AnyFn> }).computed[key]\n return fn({\n context: ctx,\n event: getEvent(),\n prop,\n refs,\n scope: scopeRef.current,\n computed,\n })\n }\n\n const trackSites = new WeakMap<\n AnyFn,\n { deps: unknown[]; cleanup?: () => void; mounted: boolean }\n >()\n const trackFn = (deps: unknown[] | undefined, fn: AnyFn) => {\n let site = trackSites.get(fn)\n const current = (deps ?? []).map((d) =>\n typeof d === \"function\" ? (d as AnyFn)() : d\n )\n if (!site) {\n site = { deps: current, mounted: false }\n trackSites.set(fn, site)\n return\n }\n const changed =\n current.length !== site.deps.length ||\n current.some((v, i) => !Object.is(v, site!.deps[i]))\n if (changed && site.mounted) {\n site.cleanup?.()\n const cleanup = fn()\n site.cleanup =\n typeof cleanup === \"function\" ? (cleanup as () => void) : undefined\n }\n site.deps = current\n }\n\n const flush = (fn: () => void) => {\n queueMicrotask(() => fn())\n }\n\n // context ------------------------------------------------------------\n let contextFields: Record<string, Bindable<unknown>> = {}\n const ctxContextFn = (machine as { context?: AnyFn }).context\n if (ctxContextFn) {\n contextFields = ctxContextFn({\n prop,\n bindable: bindableFactory,\n scope: scopeRef.current,\n flush,\n getContext() {\n return ctx\n },\n getComputed() {\n return computed\n },\n getRefs() {\n return refs\n },\n getEvent() {\n return getEvent()\n },\n }) as Record<string, Bindable<unknown>>\n }\n\n const ctx = {\n get(key: string) {\n return contextFields[key]?.ref.current\n },\n set(key: string, value: unknown) {\n contextFields[key]?.set(value as never)\n },\n initial(key: string) {\n return contextFields[key]?.initial\n },\n hash(key: string) {\n const current = contextFields[key]?.get()\n return contextFields[key]?.hash(current as never) ?? \"\"\n },\n }\n\n // refs ---------------------------------------------------------------\n const refsInit =\n (machine as { refs?: AnyFn }).refs?.({ prop, context: ctx }) ?? {}\n const refsStore: Record<string, unknown> = { ...(refsInit as object) }\n const refs = {\n get(key: string) {\n return refsStore[key]\n },\n set(key: string, value: unknown) {\n refsStore[key] = value\n },\n }\n\n // state bindable -----------------------------------------------------\n const initialState = resolveStateValue(\n machine,\n (machine as { initialState: AnyFn }).initialState({ prop }) as string\n )\n const state = createBindable<string>(() => ({\n defaultValue: initialState as string,\n onChange(nextState: string, prevState: string) {\n const { exiting, entering } = getExitEnterStates(\n machine,\n prevState,\n nextState,\n transitionRef?.reenter\n ) as {\n exiting: Array<{ path: string; state?: { exit?: unknown } }>\n entering: Array<{\n path: string\n state?: { effects?: unknown; entry?: unknown }\n }>\n }\n exiting.forEach((item) => {\n const exitEffects = effectsMap.get(item.path)\n exitEffects?.()\n effectsMap.delete(item.path)\n })\n exiting.forEach((item) => {\n action(item.state?.exit)\n })\n action(transitionRef?.actions)\n entering.forEach((item) => {\n const cleanup = effect(item.state?.effects)\n if (cleanup) effectsMap.set(item.path, cleanup)\n })\n if (prevState === INIT_STATE) {\n action((machine as { entry?: unknown }).entry)\n const cleanup = effect((machine as { effects?: unknown }).effects)\n if (cleanup) effectsMap.set(INIT_STATE, cleanup)\n }\n entering.forEach((item) => {\n action(item.state?.entry)\n })\n notify()\n },\n }))\n\n let status: MachineStatus = MachineStatus.NotStarted\n let hydrated: string | undefined\n\n const getCurrentState = (): string => state.ref.current\n\n const send = (event: { type: string }) => {\n queueMicrotask(() => {\n if (status !== MachineStatus.Started) return\n previousEvent = currentEvent\n currentEvent = event\n const currentState = getCurrentState()\n const { transitions, source } = findTransition(\n machine,\n currentState,\n event.type\n )\n const transition = choose(transitions) as\n | { actions?: unknown; target?: string; reenter?: boolean }\n | undefined\n if (!transition) return\n transitionRef = transition\n const target = resolveStateValue(\n machine,\n (transition.target ?? currentState) as string,\n source as never\n )\n debug(\"transition\", event.type, transition.target || currentState)\n const changed = target !== currentState\n if (changed) {\n state.set(target as string)\n } else if (transition.reenter) {\n ;(state as unknown as { invoke: AnyFn }).invoke(\n currentState,\n currentState\n )\n } else {\n action(transition.actions ?? [])\n notify()\n }\n })\n }\n\n ;(machine as { watch?: AnyFn }).watch?.(getParams())\n\n const service: Service<T> = {\n state: getState() as Service<T>[\"state\"],\n send,\n context: ctx as Service<T>[\"context\"],\n prop: prop as Service<T>[\"prop\"],\n scope: scopeRef.current,\n refs: refs as Service<T>[\"refs\"],\n computed: computed as Service<T>[\"computed\"],\n event: getEvent() as Service<T>[\"event\"],\n getStatus: () => status,\n }\n\n Object.defineProperty(service, \"state\", {\n get: () => getState(),\n enumerable: true,\n })\n Object.defineProperty(service, \"event\", {\n get: () => getEvent(),\n enumerable: true,\n })\n\n return {\n service,\n start() {\n if (status === MachineStatus.Started) return\n status = MachineStatus.Started\n ;(state as unknown as { invoke: AnyFn }).invoke(\n hydrated ?? state.initial,\n INIT_STATE\n )\n notify()\n },\n stop() {\n if (status === MachineStatus.Stopped) return\n hydrated = getCurrentState()\n status = MachineStatus.Stopped\n effectsMap.forEach((fn) => fn())\n effectsMap.clear()\n transitionRef = null\n while (unmountFns.length) unmountFns.pop()?.()\n listeners.clear()\n queueMicrotask(() => {\n action((machine as { exit?: unknown }).exit)\n })\n },\n subscribe(listener) {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n update(next) {\n userProps = { ...userProps, ...next }\n refreshProps()\n notify()\n },\n }\n}\n","import {\n createNormalizer,\n type NormalizeProps,\n type PropTypes,\n} from \"@zag-js/types\"\n\ntype DomProps = PropTypes<Record<string, unknown>>\n\nexport const normalizeProps: NormalizeProps<DomProps> =\n createNormalizer<DomProps>((props) => props)\n\nexport type { DomProps }\n","import { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\n\n// Zag connect() returns React-style prop objects; this bridges them to imperative DOM APIs.\nexport function spreadProps(\n node: HTMLElement,\n props: Record<string, unknown>\n): Cleanup {\n const removers: Cleanup[] = []\n for (const [key, rawValue] of Object.entries(props)) {\n if (key === \"children\" || key === \"dangerouslySetInnerHTML\") continue\n if (key.startsWith(\"on\") && typeof rawValue === \"function\") {\n const eventName = key.slice(2).toLowerCase()\n // React aliases onChange to the `input` event for text-type inputs and\n // textareas so handlers fire on every keystroke. Native DOM `change`\n // only fires on blur, which breaks live-filter UIs like command palette.\n const isTextControl =\n (node instanceof HTMLInputElement &&\n node.type !== \"checkbox\" &&\n node.type !== \"radio\") ||\n node instanceof HTMLTextAreaElement\n const effectiveEvent =\n eventName === \"change\" && isTextControl ? \"input\" : eventName\n const listener = rawValue as EventListener\n node.addEventListener(effectiveEvent, listener)\n removers.push(() => node.removeEventListener(effectiveEvent, listener))\n continue\n }\n // zag's dataAttr/ariaAttr return undefined to mean \"remove\" — treat\n // undefined/null as attribute removal rather than no-op, otherwise\n // state toggles like data-highlighted stick once set.\n if (rawValue === undefined || rawValue === null) {\n node.removeAttribute(key)\n continue\n }\n if (typeof rawValue === \"boolean\") {\n if (rawValue) node.setAttribute(key, \"\")\n else node.removeAttribute(key)\n continue\n }\n if (key === \"style\" && typeof rawValue === \"object\") {\n Object.assign(node.style, rawValue as Record<string, string>)\n continue\n }\n if (key === \"className\" || key === \"class\") {\n node.setAttribute(\"class\", String(rawValue))\n continue\n }\n if (key === \"htmlFor\") {\n node.setAttribute(\"for\", String(rawValue))\n continue\n }\n if (key === \"tabIndex\") {\n node.tabIndex = Number(rawValue)\n continue\n }\n node.setAttribute(key, String(rawValue))\n }\n return composeCleanups(removers)\n}\n\nexport function createPersistentSpreads(): {\n apply(node: HTMLElement, props: Record<string, unknown>): void\n cleanupAll(): void\n} {\n const map = new Map<HTMLElement, Cleanup>()\n return {\n apply(node, props) {\n const prior = map.get(node)\n if (prior) prior()\n map.set(node, spreadProps(node, props))\n },\n cleanupAll() {\n for (const clean of map.values()) clean()\n map.clear()\n },\n }\n}\n","import type { CustomSurface } from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport type { MountedSurface } from \"./index\"\n\nexport function renderCustomSurface(\n surface: CustomSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n const result = surface.render(ctx, root)\n const cleanup = typeof result === \"function\" ? result : () => {}\n return {\n cleanup: () => {\n try {\n cleanup()\n } finally {\n root.replaceChildren()\n }\n },\n }\n}\n","import {\n Camera,\n ChevronDown,\n Copy,\n Highlighter,\n MessageCircleWarning,\n TicketPlus,\n View,\n createElement as createLucideElement,\n type IconNode,\n} from \"lucide\"\nimport {\n displayName,\n entityKey,\n type Entity,\n type EntityRef,\n type Flow,\n} from \"../../entities\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport { filterEntities, filterIds, normalizeQuery } from \"../builder/filter\"\nimport type {\n DetailAction,\n DetailActionIcon,\n DetailActionRunContext,\n DetailSection,\n DetailSubtitle,\n DetailSurface,\n ResolvedFlowStep,\n} from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport { SECTION_LABELS } from \"../labels\"\nimport { createBadge } from \"../../ui/badge\"\nimport { createButton } from \"../primitives/button\"\nimport { createEntityLink } from \"../primitives/entity-link\"\nimport { createIconTile } from \"../primitives/icon-tile\"\nimport {\n renderKindBadge,\n renderKindIcon,\n renderKindIconTile,\n} from \"../primitives/kind-icon\"\nimport { fillRow, fillRowWithHandle } from \"../primitives/row\"\nimport { createSection } from \"../primitives/section\"\nimport {\n createCaption,\n createDescription,\n createHeading,\n createMutedText,\n} from \"../primitives/text\"\nimport {\n LIST_GROUP_LABEL_CLASS,\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n} from \"../../ui/list-item\"\nimport type { MountedSurface, SubmitIntent, SubmitIntentSource } from \"./index\"\n\nconst ICON_MAP: Record<DetailActionIcon, IconNode> = {\n copy: Copy,\n camera: Camera,\n \"message-circle-warning\": MessageCircleWarning,\n \"chevron-down\": ChevronDown,\n highlighter: Highlighter,\n \"ticket-plus\": TicketPlus,\n view: View,\n}\n\nfunction iconFor(icon: DetailActionIcon | undefined): IconNode | null {\n return icon ? ICON_MAP[icon] : null\n}\n\nfunction renderSubtitle(subtitle: DetailSubtitle): HTMLElement {\n const text = subtitle.extra\n ? `${subtitle.rawId} · ${subtitle.extra}`\n : subtitle.rawId\n return createCaption({\n class: \"px-2\",\n attrs: { \"data-uidex-detail-subtitle\": \"\" },\n text,\n })\n}\n\nfunction renderNotFound(ref: EntityRef): HTMLElement {\n return createMutedText({\n class: \"p-4\",\n attrs: { \"data-uidex-detail-missing\": \"\" },\n text: `${ref.kind}: ${ref.id} not found in registry`,\n })\n}\n\ninterface RenderedActions {\n node: HTMLElement\n buttons: readonly HTMLButtonElement[]\n cleanup: Cleanup\n}\n\nfunction renderActions(\n actions: readonly DetailAction[],\n ctx: ViewContext,\n root: HTMLElement,\n heading?: string\n): RenderedActions {\n const cleanups: Cleanup[] = []\n const buttons: HTMLButtonElement[] = []\n\n const section = el(\"section\", {\n class: \"flex flex-col\",\n attrs: { \"data-uidex-detail-actions\": \"\" },\n })\n if (heading) {\n section.append(el(\"h3\", { class: LIST_GROUP_LABEL_CLASS, text: heading }))\n }\n const list = el(\"div\", {\n class: \"flex flex-col\",\n attrs: { role: \"listbox\", \"aria-label\": heading ?? \"Actions\" },\n })\n section.append(list)\n\n for (const action of actions) {\n const btn = createButton({\n variant: \"action\",\n attrs: {\n role: \"option\",\n tabindex: buttons.length === 0 ? \"0\" : \"-1\",\n \"data-uidex-detail-action\": action.id,\n \"aria-label\": action.ariaLabel ?? action.label,\n },\n })\n let leading: Node | undefined\n const icon = iconFor(action.icon)\n if (icon) {\n const svg = createLucideElement(icon)\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"class\", \"h-4 w-4 shrink-0\")\n leading = createIconTile(svg)\n }\n const { label: labelEl } = fillRowWithHandle(btn, {\n leading,\n label: action.label,\n trailing: action.hint,\n })\n\n let revertTimer: ReturnType<typeof setTimeout> | null = null\n const runCtx: DetailActionRunContext = {\n setLabel(next, durationMs) {\n if (revertTimer !== null) {\n clearTimeout(revertTimer)\n revertTimer = null\n }\n labelEl.textContent = next\n if (durationMs && durationMs > 0) {\n revertTimer = setTimeout(() => {\n labelEl.textContent = action.label\n revertTimer = null\n }, durationMs)\n }\n },\n }\n\n const onClick = async () => {\n if (\"copy\" in action) {\n try {\n await navigator.clipboard?.writeText(action.copy)\n runCtx.setLabel(\"Copied!\", 1200)\n } catch (err) {\n console.warn(\"[uidex] copy action: clipboard write failed\", err)\n runCtx.setLabel(\"Copy failed\", 1500)\n }\n } else if (\"scrollTo\" in action) {\n const target = root.querySelector<HTMLElement>(action.scrollTo)\n target?.scrollIntoView({ block: \"start\", behavior: \"smooth\" })\n } else if (\"push\" in action) {\n ctx.push({ id: action.push.id, ref: action.push.ref ?? null })\n } else if (\"navigate\" in action) {\n ctx.navigate(action.navigate)\n } else if (\"highlight\" in action) {\n ctx.pinHighlight(action.highlight)\n ctx.close()\n } else {\n await action.run(runCtx)\n }\n }\n btn.addEventListener(\"click\", onClick)\n cleanups.push(() => {\n btn.removeEventListener(\"click\", onClick)\n if (revertTimer !== null) clearTimeout(revertTimer)\n })\n buttons.push(btn)\n list.append(btn)\n }\n\n return { node: section, buttons, cleanup: composeCleanups(cleanups) }\n}\n\ninterface RenderedSection {\n node: HTMLElement\n cleanup: Cleanup\n}\n\nfunction renderRefList(\n ctx: ViewContext,\n label: string,\n entities: readonly Entity[],\n dataAttr: string\n): RenderedSection | null {\n if (entities.length === 0) return null\n const cleanups: Cleanup[] = []\n const items = entities.map((entity) => {\n const ref: EntityRef = { kind: entity.kind, id: entityKey(entity) }\n const link = createEntityLink({\n ctx,\n target: ref,\n label: displayName(entity),\n leading: renderKindIconTile(entity.kind),\n })\n cleanups.push(link.cleanup)\n return el(\"li\", {}, [link.node])\n })\n const node = createSection({ heading: label, dataAttr }, items)\n return { node, cleanup: composeCleanups(cleanups) }\n}\n\nfunction renderFlowList(\n ctx: ViewContext,\n flows: readonly Flow[]\n): RenderedSection | null {\n if (flows.length === 0) return null\n const cleanups: Cleanup[] = []\n const items = flows.map((flow) => {\n const link = createEntityLink({\n ctx,\n target: { kind: \"flow\", id: flow.id },\n label: displayName(flow),\n leading: renderKindIconTile(\"flow\"),\n })\n cleanups.push(link.cleanup)\n return el(\"li\", {}, [link.node])\n })\n const node = createSection(\n { heading: SECTION_LABELS.flows, dataAttr: \"data-uidex-detail-flows\" },\n items\n )\n return { node, cleanup: composeCleanups(cleanups) }\n}\n\nfunction renderTouches(\n ctx: ViewContext,\n entities: readonly Entity[],\n query: string\n): RenderedSection {\n if (entities.length === 0) {\n const section = el(\"section\", {\n class: \"flex flex-col gap-2\",\n attrs: { \"data-uidex-detail-touches\": \"\" },\n })\n section.append(\n createHeading({ text: SECTION_LABELS.touches }),\n createMutedText({\n attrs: { \"data-uidex-detail-empty\": \"\" },\n text: query ? \"No matches\" : \"No entities touched\",\n })\n )\n return { node: section, cleanup: () => {} }\n }\n\n const cleanups: Cleanup[] = []\n const items: HTMLElement[] = []\n for (const entity of entities) {\n const link = createEntityLink({\n ctx,\n target: { kind: entity.kind, id: entityKey(entity) },\n label: displayName(entity),\n leading: renderKindIconTile(entity.kind),\n })\n cleanups.push(link.cleanup)\n items.push(el(\"li\", {}, [link.node]))\n }\n const node = createSection(\n { heading: SECTION_LABELS.touches, dataAttr: \"data-uidex-detail-touches\" },\n items\n )\n return { node, cleanup: composeCleanups(cleanups) }\n}\n\nfunction filterStepsBy<T>(\n items: readonly T[],\n query: string,\n fields: (item: T) => readonly (string | undefined)[]\n): readonly T[] {\n const q = normalizeQuery(query)\n if (!q) return items\n return items.filter((item) =>\n fields(item).some((field) => field?.toLowerCase().includes(q))\n )\n}\n\nconst resolvedStepFields = (step: ResolvedFlowStep) => [\n displayName(step.entity),\n entityKey(step.entity),\n step.entity.kind,\n step.action,\n]\n\nfunction renderActionBadge(action: string): HTMLElement {\n return createBadge(\n {\n variant: \"secondary\",\n size: \"sm\",\n class: \"font-mono\",\n attrs: { \"data-uidex-step-action\": action },\n text: action,\n },\n []\n )\n}\n\nconst STEP_ROW_CLASS = \"flex items-center gap-2 px-2\"\n\nconst STEP_ORDINAL_CLASS =\n \"relative z-10 inline-flex size-6 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground text-xs font-medium tabular-nums\"\n\nfunction renderSteps(\n ctx: ViewContext,\n steps: readonly ResolvedFlowStep[],\n query: string\n): RenderedSection {\n const section = el(\"section\", {\n class: \"flex flex-col\",\n attrs: { \"data-uidex-detail-steps\": \"\" },\n })\n section.append(createHeading({ text: SECTION_LABELS.steps }))\n\n if (steps.length === 0) {\n section.append(\n createMutedText({\n attrs: { \"data-uidex-detail-empty\": \"\" },\n text: query ? \"No matches\" : \"No steps recorded\",\n })\n )\n return { node: section, cleanup: () => {} }\n }\n\n const cleanups: Cleanup[] = []\n const list = el(\"ol\", { class: \"flex flex-col gap-1.5\" })\n\n for (const step of steps) {\n const li = el(\"li\", {\n class: STEP_ROW_CLASS,\n attrs: { \"data-uidex-step\": String(step.ordinal) },\n })\n\n li.append(\n el(\"span\", {\n class: STEP_ORDINAL_CLASS,\n attrs: { \"data-uidex-step-ordinal\": \"\", \"aria-hidden\": \"true\" },\n text: String(step.ordinal),\n })\n )\n\n const link = createEntityLink({\n ctx,\n target: { kind: step.entity.kind, id: entityKey(step.entity) },\n label: displayName(step.entity),\n leading: renderKindIconTile(step.entity.kind),\n class: \"min-w-0 flex-1\",\n })\n cleanups.push(link.cleanup)\n li.append(link.node)\n\n if (step.action) {\n li.append(renderActionBadge(step.action))\n }\n\n list.append(li)\n }\n\n section.append(list)\n return { node: section, cleanup: composeCleanups(cleanups) }\n}\n\nfunction renderRoutePaths(paths: readonly string[]): RenderedSection | null {\n if (paths.length === 0) return null\n const node = createSection(\n { heading: SECTION_LABELS.routes, dataAttr: \"data-uidex-detail-routes\" },\n paths.map((p) => {\n const host = el(\"li\", {\n class: cn(LIST_ITEM_CLASS, LIST_ITEM_INTERACTIVE_CLASS),\n attrs: {\n \"data-uidex-detail-row\": \"route\",\n tabindex: \"-1\",\n },\n })\n fillRow(host, {\n leading: renderKindIconTile(\"route\"),\n label: p,\n })\n return host\n })\n )\n return { node, cleanup: () => {} }\n}\n\nfunction renderAcceptanceChecklist(items: readonly string[]): HTMLElement {\n return createSection(\n {\n heading: SECTION_LABELS.acceptance,\n dataAttr: \"data-uidex-detail-acceptance\",\n },\n items.map((text, idx) => {\n const id = `uidex-acceptance-${idx}`\n const checkbox = el(\"input\", {\n attrs: {\n type: \"checkbox\",\n id,\n \"data-uidex-acceptance-item\": String(idx),\n },\n class:\n \"mt-1 h-3.5 w-3.5 shrink-0 cursor-pointer accent-accent focus:outline-none\",\n }) as HTMLInputElement\n const label = el(\"label\", {\n class: cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"w-full cursor-pointer items-start\"\n ),\n attrs: { for: id },\n })\n const { label: labelSpan } = fillRowWithHandle(label, {\n leading: checkbox,\n label: text,\n })\n labelSpan.className = \"min-w-0 flex-1 whitespace-normal break-words\"\n const syncChecked = (): void => {\n labelSpan.classList.toggle(\"line-through\", checkbox.checked)\n labelSpan.classList.toggle(\"text-muted-foreground\", checkbox.checked)\n }\n checkbox.addEventListener(\"change\", syncChecked)\n checkbox.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Enter\") {\n e.preventDefault()\n checkbox.checked = !checkbox.checked\n syncChecked()\n }\n })\n return el(\"li\", {}, [label])\n })\n )\n}\n\nfunction renderSection(\n section: DetailSection,\n ctx: ViewContext,\n query: string\n): RenderedSection | null {\n switch (section.id) {\n case \"description\": {\n if (!section.text) return null\n return {\n node: createDescription({\n class: \"px-2\",\n attrs: { \"data-uidex-detail-description\": \"\" },\n text: section.text,\n }),\n cleanup: () => {},\n }\n }\n case \"acceptance\": {\n if (section.items.length === 0) return null\n return {\n node: renderAcceptanceChecklist(section.items),\n cleanup: () => {},\n }\n }\n case \"composes\":\n return renderRefList(\n ctx,\n section.label,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities,\n \"data-uidex-detail-composes\"\n )\n case \"used-by\":\n return renderRefList(\n ctx,\n section.label,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities,\n \"data-uidex-detail-used-by\"\n )\n case \"flows\":\n return renderFlowList(\n ctx,\n section.filterable\n ? filterEntities(section.flows, query)\n : section.flows\n )\n case \"touches\":\n return renderTouches(\n ctx,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities,\n query\n )\n case \"steps\":\n return renderSteps(\n ctx,\n section.filterable\n ? filterStepsBy(section.steps, query, resolvedStepFields)\n : section.steps,\n query\n )\n case \"routes\":\n return renderRoutePaths(\n section.filterable ? filterIds(section.paths, query) : section.paths\n )\n }\n}\n\nfunction hasFilterableSections(sections: readonly DetailSection[]): boolean {\n return sections.some((s) => \"filterable\" in s && s.filterable === true)\n}\n\nexport function renderDetailSurface(\n surface: DetailSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n if (surface.notFound) {\n root.append(renderNotFound(surface.notFound))\n return { cleanup: () => root.replaceChildren() }\n }\n\n const body = el(\"div\", {\n class: \"flex flex-col gap-3 px-2 py-4\",\n attrs: {\n \"data-uidex-detail-body\": \"\",\n \"data-uidex-detail-kind\": surface.entityKind,\n },\n })\n\n const cleanups: Cleanup[] = []\n\n const headerGroup = el(\"div\", {\n class: \"flex items-center gap-2 px-2\",\n })\n if (surface.title) {\n headerGroup.append(\n el(\"h2\", {\n class:\n \"min-w-0 flex-1 truncate text-base font-semibold text-foreground\",\n attrs: { \"data-uidex-detail-title\": \"\" },\n text: surface.title,\n })\n )\n }\n const kindBadge = renderKindBadge(surface.entityKind)\n kindBadge.classList.add(\"ml-auto\")\n headerGroup.append(kindBadge)\n body.append(headerGroup)\n\n if (surface.subtitle) body.append(renderSubtitle(surface.subtitle))\n\n let actionsNode: HTMLElement | null = null\n if (surface.actions && surface.actions.length > 0) {\n const rendered = renderActions(\n surface.actions,\n ctx,\n root,\n SECTION_LABELS.actions\n )\n cleanups.push(rendered.cleanup)\n actionsNode = rendered.node\n }\n\n const sections = surface.sections ?? []\n const filterable = hasFilterableSections(sections)\n\n const listsContainer = el(\"div\", {\n class: \"flex flex-col gap-3\",\n attrs: { \"data-uidex-detail-sections\": \"\" },\n })\n body.append(listsContainer)\n\n let sectionCleanup: Cleanup = () => {}\n let focusables: HTMLElement[] = []\n\n const focusAt = (rawIdx: number): void => {\n if (focusables.length === 0) return\n const idx = Math.max(0, Math.min(rawIdx, focusables.length - 1))\n for (let i = 0; i < focusables.length; i++) {\n focusables[i].tabIndex = i === idx ? 0 : -1\n }\n focusables[idx].focus()\n }\n\n const FOCUS_SELECTOR =\n \"button[data-uidex-detail-action], button[data-uidex-entity-link], input[data-uidex-acceptance-item], [data-uidex-detail-row]\"\n\n const refreshFocusSequence = (): void => {\n focusables = Array.from(\n listsContainer.querySelectorAll<HTMLElement>(FOCUS_SELECTOR)\n )\n for (let i = 0; i < focusables.length; i++) {\n focusables[i].tabIndex = i === 0 ? 0 : -1\n }\n }\n\n const enterKbdMode = (): void => body.setAttribute(\"data-kbd-nav\", \"\")\n const exitKbdMode = (): void => body.removeAttribute(\"data-kbd-nav\")\n body.addEventListener(\"pointermove\", exitKbdMode)\n\n const onNavKeyDown = (e: KeyboardEvent): void => {\n if (\n e.key !== \"ArrowDown\" &&\n e.key !== \"ArrowUp\" &&\n e.key !== \"Home\" &&\n e.key !== \"End\"\n )\n return\n enterKbdMode()\n const rootNode = body.getRootNode()\n const active =\n rootNode instanceof ShadowRoot\n ? rootNode.activeElement\n : document.activeElement\n if (!(active instanceof HTMLElement)) return\n\n const inSearch = active === ctx.searchInput\n if (inSearch) {\n if (focusables.length === 0) return\n e.preventDefault()\n const idx =\n e.key === \"ArrowUp\" || e.key === \"End\" ? focusables.length - 1 : 0\n focusAt(idx)\n return\n }\n\n const idx = focusables.indexOf(active)\n if (idx === -1) return\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault()\n if (idx === 0) ctx.searchInput.focus()\n else focusAt(idx - 1)\n return\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault()\n if (idx < focusables.length - 1) focusAt(idx + 1)\n return\n }\n if (e.key === \"Home\") {\n e.preventDefault()\n focusAt(0)\n return\n }\n if (e.key === \"End\") {\n e.preventDefault()\n focusAt(focusables.length - 1)\n return\n }\n }\n\n body.addEventListener(\"keydown\", onNavKeyDown)\n ctx.searchInput.addEventListener(\"keydown\", onNavKeyDown)\n\n function renderSections(query: string): void {\n sectionCleanup()\n listsContainer.replaceChildren()\n const cs: Cleanup[] = []\n let hasFilterableSection = false\n let renderedFilterable = 0\n let actionsPlaced = false\n const placeActions = (): void => {\n if (actionsNode && !actionsPlaced) {\n listsContainer.append(actionsNode)\n actionsPlaced = true\n }\n }\n for (const section of sections) {\n const isFilterable =\n \"filterable\" in section && section.filterable === true\n if (isFilterable) hasFilterableSection = true\n const sectionQuery = isFilterable ? query : \"\"\n const out = renderSection(section, ctx, sectionQuery)\n if (!out) continue\n if (isFilterable) renderedFilterable++\n listsContainer.append(out.node)\n cs.push(out.cleanup)\n if (section.id === \"description\") placeActions()\n }\n if (!actionsPlaced && actionsNode) {\n listsContainer.prepend(actionsNode)\n actionsPlaced = true\n }\n if (query && hasFilterableSection && renderedFilterable === 0) {\n listsContainer.append(\n createMutedText({\n attrs: { \"data-uidex-detail-empty\": \"\" },\n text: \"No matches\",\n })\n )\n }\n sectionCleanup = composeCleanups(cs)\n refreshFocusSequence()\n }\n\n renderSections(\"\")\n\n root.append(body)\n\n const cleanup = composeCleanups([\n ...cleanups,\n () => sectionCleanup(),\n () => {\n body.removeEventListener(\"keydown\", onNavKeyDown)\n body.removeEventListener(\"pointermove\", exitKbdMode)\n ctx.searchInput.removeEventListener(\"keydown\", onNavKeyDown)\n },\n () => root.replaceChildren(),\n ])\n\n const actionLabelById = new Map<string, string>()\n if (surface.actions) {\n for (const action of surface.actions) {\n if (\"copy\" in action) actionLabelById.set(action.id, \"Copy\")\n else if (\"push\" in action) actionLabelById.set(action.id, \"Open\")\n else if (\"navigate\" in action) actionLabelById.set(action.id, \"Open\")\n else if (\"highlight\" in action)\n actionLabelById.set(action.id, \"Highlight\")\n else if (\"scrollTo\" in action) actionLabelById.set(action.id, \"Go to\")\n else actionLabelById.set(action.id, \"Run\")\n }\n }\n\n const getActiveInBody = (): HTMLElement | null => {\n const rootNode = body.getRootNode()\n const active =\n rootNode instanceof ShadowRoot\n ? rootNode.activeElement\n : document.activeElement\n if (active instanceof HTMLElement && body.contains(active)) return active\n return null\n }\n\n let cachedIntent: SubmitIntent | null = null\n\n const resolveIntent = (): SubmitIntent | null => {\n const active = getActiveInBody()\n if (!active) return null\n if (active instanceof HTMLInputElement && active.type === \"checkbox\") {\n return {\n label: active.checked ? \"Uncheck\" : \"Check\",\n perform: () => active.click(),\n }\n }\n const actionId = active.getAttribute(\"data-uidex-detail-action\")\n if (actionId) {\n return {\n label: actionLabelById.get(actionId) ?? \"Run\",\n perform: () => active.click(),\n }\n }\n if (active.hasAttribute(\"data-uidex-entity-link\")) {\n return { label: \"Open\", perform: () => active.click() }\n }\n return { label: \"Open\", perform: () => active.click() }\n }\n\n const submitIntent: SubmitIntentSource = {\n get: () => cachedIntent,\n subscribe(cb) {\n const update = () => {\n cachedIntent = resolveIntent()\n cb()\n }\n body.addEventListener(\"focusin\", update)\n body.addEventListener(\"change\", update)\n ctx.searchInput.addEventListener(\"focus\", update)\n update()\n return () => {\n body.removeEventListener(\"focusin\", update)\n body.removeEventListener(\"change\", update)\n ctx.searchInput.removeEventListener(\"focus\", update)\n }\n },\n }\n\n const mounted: MountedSurface = { cleanup, submitIntent }\n if (filterable) {\n mounted.onSearch = renderSections\n }\n return mounted\n}\n","import { displayName, entityKey, type Entity } from \"../../entities\"\n\nexport function normalizeQuery(query: string): string {\n return query.trim().toLowerCase()\n}\n\nexport function matchesQuery(haystack: string, query: string): boolean {\n const q = normalizeQuery(query)\n if (!q) return true\n return haystack.toLowerCase().includes(q)\n}\n\nexport function filterEntities<E extends Entity>(\n entities: readonly E[],\n query: string\n): readonly E[] {\n const q = normalizeQuery(query)\n if (!q) return entities\n return entities.filter((e) => {\n const name = displayName(e).toLowerCase()\n const id = entityKey(e).toLowerCase()\n return (\n name.includes(q) || id.includes(q) || e.kind.toLowerCase().includes(q)\n )\n })\n}\n\nexport function filterIds(\n ids: readonly string[],\n query: string\n): readonly string[] {\n const q = normalizeQuery(query)\n if (!q) return ids\n return ids.filter((id) => id.toLowerCase().includes(q))\n}\n","export const SECTION_LABELS = {\n acceptance: \"Acceptance criteria\",\n actions: \"Actions\",\n contains: \"Contains\",\n usedBy: \"Used by\",\n flows: \"Flows\",\n touches: \"Touches\",\n steps: \"Steps\",\n routes: \"Routes\",\n} as const\n\nexport const PALETTE_GROUPS = {\n commands: \"Commands\",\n currentPage: \"Current Page\",\n favorites: \"Favorites\",\n recents: \"Recents\",\n} as const\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\nimport { cva } from \"./cva\"\n\nexport type ButtonVariant =\n | \"default\"\n | \"destructive\"\n | \"destructive-outline\"\n | \"ghost\"\n | \"link\"\n | \"outline\"\n | \"secondary\"\n\nexport type ButtonSize =\n | \"default\"\n | \"sm\"\n | \"xs\"\n | \"lg\"\n | \"xl\"\n | \"icon\"\n | \"icon-sm\"\n | \"icon-lg\"\n | \"icon-xs\"\n\nconst buttonBase =\n \"focus-visible:ring-ring focus-visible:ring-offset-background disabled:opacity-60 relative inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-lg border text-sm font-medium outline-none transition-shadow focus-visible:ring-2 focus-visible:ring-offset-1 disabled:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg]:pointer-events-none [&_svg]:shrink-0\"\n\nexport const buttonVariants = cva(buttonBase, {\n defaultVariants: { size: \"default\", variant: \"default\" },\n variants: {\n size: {\n default: \"h-8 px-3\",\n sm: \"h-7 gap-1.5 px-2.5\",\n xs: \"h-6 gap-1 rounded-md px-2 text-xs\",\n lg: \"h-9 px-3.5\",\n xl: \"h-10 px-4 text-base\",\n icon: \"size-8\",\n \"icon-sm\": \"size-7\",\n \"icon-lg\": \"size-9\",\n \"icon-xs\": \"size-6 rounded-md\",\n },\n variant: {\n default:\n \"border-primary bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"border-destructive bg-destructive shadow-xs hover:bg-destructive/90 text-white\",\n \"destructive-outline\":\n \"border-input bg-popover text-destructive-foreground shadow-xs/5 hover:border-destructive/30 hover:bg-destructive/5 dark:bg-input/30\",\n ghost:\n \"text-foreground hover:bg-accent hover:text-accent-foreground border-transparent\",\n link: \"text-foreground border-transparent underline-offset-4 hover:underline\",\n outline:\n \"border-input bg-popover text-foreground shadow-xs/5 hover:bg-accent hover:text-accent-foreground dark:bg-input/30\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/90 border-transparent\",\n },\n },\n})\n\nexport interface CreateButtonOptions extends Omit<ElementOptions, \"class\"> {\n variant?: ButtonVariant\n size?: ButtonSize\n class?: ClassValue\n}\n\nexport function createButton(\n options: CreateButtonOptions = {},\n children: Child | Child[] = []\n): HTMLButtonElement {\n const { variant, size, class: extra, attrs, ...rest } = options\n return el(\n \"button\",\n {\n ...rest,\n class: cn(buttonVariants({ variant, size }), extra),\n attrs: { type: \"button\", \"data-slot\": \"button\", ...attrs },\n },\n children\n )\n}\n","export const LIST_ITEM_CLASS =\n \"flex min-h-8 cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-base outline-none sm:min-h-7 sm:text-sm\"\n\nexport const LIST_ITEM_STATE_CLASS =\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-64\"\n\nexport const LIST_ITEM_INTERACTIVE_CLASS =\n \"uidex-item-interactive focus:bg-accent focus:text-accent-foreground focus-within:bg-accent focus-within:text-accent-foreground\"\n\nexport const LIST_GROUP_LABEL_CLASS =\n \"text-muted-foreground px-2 py-1.5 text-xs font-medium\"\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../../internal/el\"\nimport {\n createButton as createUiButton,\n type ButtonSize,\n type ButtonVariant as UiButtonVariant,\n} from \"../../ui/button\"\nimport {\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n} from \"../../ui/list-item\"\n\n// `action` renders a button-shaped palette row so entity links, acceptance\n// rows, and detail actions share the list-item appearance.\nexport type ButtonVariant = \"primary\" | \"action\" | \"link\"\n\nconst VARIANT_MAP: Record<\n Exclude<ButtonVariant, \"action\">,\n { variant: UiButtonVariant; size?: ButtonSize; extra?: ClassValue }\n> = {\n primary: { variant: \"default\", size: \"default\", extra: \"self-start\" },\n link: {\n variant: \"link\",\n extra: \"h-auto w-auto justify-start px-0 py-0 font-normal shadow-none\",\n },\n}\n\nexport interface CreateButtonOptions extends Omit<ElementOptions, \"class\"> {\n variant: ButtonVariant\n class?: ClassValue\n}\n\nexport function createButton(\n options: CreateButtonOptions,\n children: Child | Child[] = []\n): HTMLButtonElement {\n const { variant, class: extraClass, attrs, ...rest } = options\n if (variant === \"action\") {\n return el(\n \"button\",\n {\n ...rest,\n class: cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"w-full cursor-pointer text-left font-normal\",\n extraClass\n ),\n attrs: { type: \"button\", \"data-slot\": \"list-item-button\", ...attrs },\n },\n children\n )\n }\n const mapped = VARIANT_MAP[variant]\n return createUiButton(\n {\n ...rest,\n variant: mapped.variant,\n size: mapped.size,\n class: cn(mapped.extra, extraClass),\n attrs,\n },\n children\n )\n}\n","import type { EntityRef, Registry } from \"../../entities\"\nimport { resolveEntityElement } from \"../../surface/inspector\"\n\nconst DOM_BACKED_KINDS: ReadonlySet<string> = new Set([\n \"element\",\n \"region\",\n \"widget\",\n \"primitive\",\n])\n\nconst TOUCH_RESOLVE_KINDS = [\n \"element\",\n \"widget\",\n \"region\",\n \"primitive\",\n] as const\n\nexport function isAbsentFromPage(ref: EntityRef, registry?: Registry): boolean {\n if (DOM_BACKED_KINDS.has(ref.kind)) {\n return !resolveEntityElement(ref)\n }\n if (ref.kind === \"flow\" && registry) {\n const flow = registry.get(\"flow\", ref.id)\n if (!flow) return true\n for (const touchId of flow.touches) {\n for (const kind of TOUCH_RESOLVE_KINDS) {\n const entity = registry.get(kind, touchId)\n if (entity && resolveEntityElement({ kind, id: touchId })) return false\n }\n }\n return true\n }\n return false\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\n\nconst KBD_CLASS =\n \"bg-muted text-muted-foreground pointer-events-none inline-flex h-5 min-w-5 select-none items-center justify-center gap-1 rounded px-1 font-sans text-xs font-medium [&_svg:not([class*='size-'])]:size-3\"\n\nconst KBD_GROUP_CLASS = \"inline-flex items-center gap-1\"\n\nconst COMMAND_SHORTCUT_CLASS =\n \"text-muted-foreground/70 ms-auto font-sans text-xs font-medium tracking-widest\"\n\nexport interface CreateKbdOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport function createKbd(\n options: CreateKbdOptions = {},\n children: Child | Child[] = []\n): HTMLElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"kbd\",\n {\n ...rest,\n class: cn(KBD_CLASS, extra),\n attrs: { \"data-slot\": \"kbd\", ...attrs },\n },\n children\n )\n}\n\nexport function createKbdGroup(\n options: CreateKbdOptions = {},\n children: Child | Child[] = []\n): HTMLElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"kbd\",\n {\n ...rest,\n class: cn(KBD_GROUP_CLASS, extra),\n attrs: { \"data-slot\": \"kbd-group\", ...attrs },\n },\n children\n )\n}\n\n/**\n * Lighter shortcut text used inside command-palette rows (coss\n * `CommandShortcut`). No background pill — just muted mono-tracked type.\n */\nexport function createCommandShortcut(\n options: CreateKbdOptions = {},\n children: Child | Child[] = []\n): HTMLElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"kbd\",\n {\n ...rest,\n class: cn(COMMAND_SHORTCUT_CLASS, extra),\n attrs: { \"data-slot\": \"command-shortcut\", ...attrs },\n },\n children\n )\n}\n","import { el } from \"../../internal/el\"\nimport { createCommandShortcut } from \"../../ui/kbd\"\n\n// Rows are always single-line: `leading`, `label`, optional muted `subtitle`\n// suffix, `trailing` (kbd if string, else raw node).\nexport interface RowContent {\n leading?: Node | null\n label: string\n subtitle?: string\n trailing?: Node | string | null\n}\n\nconst LABEL_CLASS = \"min-w-0 flex-1 truncate\"\nconst SUBTITLE_CLASS = \"truncate text-xs text-muted-foreground\"\n\n/** Returns the mutable label `<span>` so callers can swap its text later. */\nexport function fillRowWithHandle(\n host: HTMLElement,\n content: RowContent\n): { label: HTMLSpanElement } {\n if (content.leading) host.append(content.leading)\n const label = el(\"span\", { class: LABEL_CLASS, text: content.label })\n host.append(label)\n if (content.subtitle) {\n host.append(\n el(\"span\", {\n class: SUBTITLE_CLASS,\n attrs: { \"data-uidex-row-subtitle\": \"\" },\n text: content.subtitle,\n })\n )\n }\n if (content.trailing != null) {\n host.append(\n typeof content.trailing === \"string\"\n ? createCommandShortcut({ text: content.trailing })\n : content.trailing\n )\n }\n return { label }\n}\n\n/**\n * Host is expected to provide its own `flex` container styling (alignment,\n * gap, padding). The row only injects the inner leading/label/trailing slots.\n */\nexport function fillRow(host: HTMLElement, content: RowContent): void {\n fillRowWithHandle(host, content)\n}\n","import type { ClassValue } from \"clsx\"\nimport { KIND_STYLE, type EntityRef } from \"../../entities\"\nimport type { Cleanup } from \"../../internal/cleanup\"\nimport type { ViewContext } from \"../core/types\"\nimport { createButton } from \"./button\"\nimport { isAbsentFromPage } from \"./entity-presence\"\nimport { fillRow } from \"./row\"\n\nexport interface EntityLinkOptions {\n ctx: ViewContext\n target: EntityRef\n label?: string\n leading?: Node | null\n class?: ClassValue\n}\n\nexport function createEntityLink(options: EntityLinkOptions): {\n node: HTMLButtonElement\n cleanup: Cleanup\n} {\n const { ctx, target, label, leading, class: extraClass } = options\n const absent = isAbsentFromPage(target)\n const node = createButton({\n variant: \"action\",\n class: [\"w-full\", absent && \"opacity-50\", extraClass],\n attrs: {\n \"data-uidex-entity-link\": \"\",\n \"data-uidex-ref-kind\": target.kind,\n \"data-uidex-ref-id\": target.id,\n ...(absent ? { title: \"Not on this page\" } : {}),\n },\n })\n fillRow(node, { leading, label: label ?? `${target.kind}: ${target.id}` })\n const onClick = () => ctx.navigate(target)\n const preview = (): void => {\n ctx.highlight.show(target, { color: KIND_STYLE[target.kind].color })\n }\n const restoreParent = (): void => {\n if (ctx.ref) {\n ctx.highlight.show(ctx.ref, { color: KIND_STYLE[ctx.ref.kind].color })\n } else {\n ctx.highlight.hide()\n }\n }\n node.addEventListener(\"click\", onClick)\n node.addEventListener(\"mouseenter\", preview)\n node.addEventListener(\"mouseleave\", restoreParent)\n node.addEventListener(\"focus\", preview)\n node.addEventListener(\"blur\", restoreParent)\n return {\n node,\n cleanup: () => {\n node.removeEventListener(\"click\", onClick)\n node.removeEventListener(\"mouseenter\", preview)\n node.removeEventListener(\"mouseleave\", restoreParent)\n node.removeEventListener(\"focus\", preview)\n node.removeEventListener(\"blur\", restoreParent)\n },\n }\n}\n","import { el, type Child } from \"../../internal/el\"\nimport { LIST_GROUP_LABEL_CLASS } from \"../../ui/list-item\"\n\nexport interface CreateSectionOptions {\n heading?: string\n dataAttr: string\n listClass?: string\n}\n\nexport function createSection(\n options: CreateSectionOptions,\n items: Child[]\n): HTMLElement {\n const { heading, dataAttr, listClass = \"flex flex-col\" } = options\n const children: Child[] = []\n if (heading) {\n children.push(el(\"h3\", { class: LIST_GROUP_LABEL_CLASS, text: heading }))\n }\n children.push(el(\"ul\", { class: listClass }, items))\n return el(\n \"section\",\n {\n class: \"flex flex-col\",\n attrs: { [dataAttr]: \"\" },\n },\n children\n )\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type ElementOptions } from \"../../internal/el\"\nimport { LIST_GROUP_LABEL_CLASS } from \"../../ui/list-item\"\n\nexport interface TextOptions extends Omit<ElementOptions, \"class\" | \"text\"> {\n text?: string\n class?: ClassValue\n}\n\nconst CAPTION_CLASS = \"font-mono text-xs text-muted-foreground\"\nconst MUTED_CLASS = \"text-sm text-muted-foreground\"\nconst DESCRIPTION_CLASS = \"text-sm leading-relaxed text-foreground\"\nconst HEADING_CLASS = LIST_GROUP_LABEL_CLASS\n\nexport function createCaption(options: TextOptions = {}): HTMLParagraphElement {\n const { class: extra, ...rest } = options\n return el(\"p\", { ...rest, class: cn(CAPTION_CLASS, extra) })\n}\n\nexport function createMutedText(\n options: TextOptions = {}\n): HTMLParagraphElement {\n const { class: extra, ...rest } = options\n return el(\"p\", { ...rest, class: cn(MUTED_CLASS, extra) })\n}\n\nexport function createDescription(\n options: TextOptions = {}\n): HTMLParagraphElement {\n const { class: extra, ...rest } = options\n return el(\"p\", { ...rest, class: cn(DESCRIPTION_CLASS, extra) })\n}\n\nexport function createHeading(options: TextOptions = {}): HTMLHeadingElement {\n const { class: extra, ...rest } = options\n return el(\"h3\", { ...rest, class: cn(HEADING_CLASS, extra) })\n}\n","import {\n CircleCheck,\n CircleX,\n Loader2,\n createElement as createLucideElement,\n} from \"lucide\"\nimport { createActor, fromPromise } from \"xstate\"\n\nimport { formMachine } from \"../../flows/form\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { el } from \"../../internal/el\"\nimport { createDialog } from \"../../machines/dialog\"\nimport { spreadProps } from \"../builder/spread-props\"\nimport { buttonVariants, createButton } from \"../../ui/button\"\nimport { createField, createFieldError, createFieldLabel } from \"../../ui/field\"\nimport { createForm } from \"../../ui/form\"\nimport { createInput, createTextarea } from \"../../ui/input\"\nimport { createNativeSelect } from \"../../ui/select\"\nimport type {\n FormField,\n FormSubmitResult,\n FormSurface,\n FormValue,\n StandardSchemaIssue,\n StandardSchemaV1,\n} from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport type { MountedSurface, SubmitIntent } from \"./index\"\n\ninterface FieldHandle {\n name: string\n node: HTMLElement\n control: HTMLElement\n errorNode: HTMLParagraphElement\n read(): FormValue\n reset(): void\n setError(message: string | null): void\n}\n\nlet fieldSeq = 0\nconst nextFieldId = (): string => `uidex-field-${++fieldSeq}`\n\nfunction issuePathRoot(issue: StandardSchemaIssue): string | undefined {\n const seg = issue.path?.[0]\n if (seg === undefined) return undefined\n if (typeof seg === \"object\" && seg !== null && \"key\" in seg) {\n return String(seg.key)\n }\n return String(seg)\n}\n\nasync function validateWithSchema(\n schema: StandardSchemaV1<Record<string, unknown>>,\n values: Record<string, FormValue>\n): Promise<Record<string, string> | null> {\n const result = await schema[\"~standard\"].validate(values)\n if (!(\"issues\" in result) || !result.issues) return null\n // First issue per field wins — later issues are usually noise once the\n // root cause is fixed and the user re-submits.\n const out: Record<string, string> = {}\n for (const issue of result.issues) {\n const key = issuePathRoot(issue)\n if (!key) continue\n if (out[key]) continue\n out[key] = issue.message\n }\n return Object.keys(out).length > 0 ? out : null\n}\n\nfunction renderField(\n field: FormField,\n initial: FormValue | undefined\n): FieldHandle {\n const controlId = nextFieldId()\n let control: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\n let read: () => FormValue\n let reset: () => void\n\n switch (field.kind) {\n case \"select\": {\n const node = createNativeSelect({\n attrs: {\n name: field.name,\n id: controlId,\n required: field.required ?? false,\n },\n })\n for (const opt of field.options) {\n node.append(\n el(\"option\", { attrs: { value: opt.value }, text: opt.label })\n )\n }\n const initialVal =\n typeof initial === \"string\"\n ? initial\n : typeof field.value === \"string\"\n ? field.value\n : field.options[0]?.value\n if (initialVal !== undefined) node.value = initialVal\n control = node\n read = () => node.value\n reset = () => {\n if (initialVal !== undefined) node.value = initialVal\n }\n break\n }\n case \"text\":\n case \"email\": {\n const node = createInput({\n attrs: {\n type: field.kind === \"email\" ? \"email\" : \"text\",\n name: field.name,\n id: controlId,\n placeholder: field.placeholder ?? \"\",\n required: field.required ?? false,\n },\n })\n const initialVal =\n typeof initial === \"string\"\n ? initial\n : typeof field.value === \"string\"\n ? field.value\n : \"\"\n node.value = initialVal\n control = node\n read = () => node.value\n reset = () => {\n node.value = initialVal\n }\n break\n }\n case \"textarea\": {\n const node = createTextarea({\n attrs: {\n name: field.name,\n id: controlId,\n placeholder: field.placeholder ?? \"\",\n required: field.required ?? false,\n rows: field.rows,\n },\n })\n const initialVal =\n typeof initial === \"string\"\n ? initial\n : typeof field.value === \"string\"\n ? field.value\n : \"\"\n node.value = initialVal\n control = node\n read = () => node.value\n reset = () => {\n node.value = initialVal\n }\n break\n }\n case \"checkbox\": {\n const input = el(\"input\", {\n attrs: {\n type: \"checkbox\",\n name: field.name,\n id: controlId,\n },\n class:\n \"border-input bg-popover size-4 cursor-pointer rounded-[0.25rem] border accent-primary\",\n }) as HTMLInputElement\n const initialVal =\n typeof initial === \"boolean\"\n ? initial\n : typeof field.value === \"boolean\"\n ? field.value\n : false\n input.checked = initialVal\n control = input\n read = () => input.checked\n reset = () => {\n input.checked = initialVal\n }\n break\n }\n }\n\n const errorNode = createFieldError()\n const field$ = createField(\n {\n name: field.name,\n class: field.kind === \"checkbox\" ? \"flex-row items-center gap-2\" : \"\",\n },\n []\n )\n\n if (field.kind === \"checkbox\") {\n field$.append(\n control,\n createFieldLabel({ htmlFor: controlId }, field.label)\n )\n } else {\n field$.append(\n createFieldLabel({ htmlFor: controlId }, field.label),\n control\n )\n }\n field$.append(errorNode)\n\n const setError = (message: string | null): void => {\n if (!message) {\n errorNode.hidden = true\n errorNode.textContent = \"\"\n control.removeAttribute(\"aria-invalid\")\n return\n }\n errorNode.hidden = false\n errorNode.textContent = message\n control.setAttribute(\"aria-invalid\", \"true\")\n }\n\n return {\n name: field.name,\n node: field$,\n control,\n errorNode,\n read,\n reset,\n setError,\n }\n}\n\nexport function renderFormSurface(\n surface: FormSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n const cleanups: Cleanup[] = []\n const fields = surface.fields.map((field) =>\n renderField(field, surface.initial?.[field.name])\n )\n const fieldByName = new Map(fields.map((f) => [f.name, f]))\n\n const status = el(\"p\", {\n class: \"text-muted-foreground text-xs\",\n attrs: {\n \"data-uidex-form-status\": \"\",\n \"aria-live\": \"polite\",\n },\n })\n\n // sr-only preserves native form-submit semantics (Enter in input,\n // `requestSubmit()`) and screen-reader announcement without the button\n // showing — the shell footer surfaces the primary-action hint.\n const submit = createButton({\n variant: \"default\",\n class: \"sr-only\",\n attrs: {\n type: \"submit\",\n \"data-uidex-form-submit\": \"\",\n },\n text: surface.submit.label,\n })\n\n const screenshotLabel = el(\"span\", {\n class: \"text-muted-foreground text-xs font-medium\",\n text: \"Screenshot\",\n })\n const screenshotPreview = el(\"div\", {\n class: \"cursor-pointer overflow-hidden rounded-md border\",\n })\n const screenshotField = el(\n \"div\",\n {\n class: \"flex flex-col gap-1.5\",\n attrs: { hidden: true },\n },\n [screenshotLabel, screenshotPreview]\n )\n\n if (surface.screenshotPreview) {\n surface.screenshotPreview.then((dataUrl) => {\n if (!dataUrl) return\n const img = el(\"img\", {\n class: \"max-h-32 w-full object-cover object-top\",\n attrs: { src: dataUrl, alt: \"Screenshot preview\" },\n })\n screenshotPreview.append(img)\n screenshotField.hidden = false\n\n const lightbox = createDialog({\n id: \"uidex-screenshot-lightbox\",\n modal: true,\n closeOnInteractOutside: false,\n closeOnEscape: false,\n trapFocus: true,\n preventScroll: true,\n restoreFocus: true,\n \"aria-label\": \"Screenshot preview\",\n getRootNode: () =>\n screenshotPreview.getRootNode() as ShadowRoot | Document,\n })\n cleanups.push(() => lightbox.destroy())\n\n const backdropEl = el(\"div\", {\n class: \"fixed inset-0 z-[2147483647] bg-black/80 cursor-pointer\",\n attrs: { \"data-uidex-lightbox\": \"\" },\n })\n const positioner = el(\"div\", {\n class:\n \"fixed inset-0 z-[2147483647] flex items-center justify-center p-6 cursor-pointer\",\n })\n const content = el(\"div\", {\n class: \"flex items-center justify-center outline-none\",\n })\n const fullImg = el(\"img\", {\n class: \"max-h-full max-w-full rounded-lg\",\n attrs: { src: dataUrl, alt: \"Screenshot\" },\n })\n content.append(fullImg)\n positioner.append(content)\n\n const mountTarget = (() => {\n const rn = screenshotPreview.getRootNode()\n return rn instanceof ShadowRoot ? rn : (rn as Document).body\n })()\n mountTarget.append(backdropEl, positioner)\n backdropEl.hidden = true\n positioner.hidden = true\n\n let spreadCleanups: Cleanup[] = []\n function applyLightboxProps(): void {\n for (const c of spreadCleanups) c()\n spreadCleanups = []\n const api = lightbox.api()\n spreadCleanups.push(\n spreadProps(\n backdropEl,\n api.getBackdropProps() as Record<string, unknown>\n ),\n spreadProps(\n positioner,\n api.getPositionerProps() as Record<string, unknown>\n ),\n spreadProps(content, api.getContentProps() as Record<string, unknown>)\n )\n backdropEl.hidden = !api.open\n positioner.hidden = !api.open\n }\n applyLightboxProps()\n const unsubLightbox = lightbox.runner.subscribe(applyLightboxProps)\n cleanups.push(() => {\n unsubLightbox()\n for (const c of spreadCleanups) c()\n backdropEl.remove()\n positioner.remove()\n })\n\n const onEscapeCapture = (e: Event): void => {\n if ((e as KeyboardEvent).key !== \"Escape\") return\n if (!lightbox.api().open) return\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n lightbox.api().setOpen(false)\n }\n let suppressClickUntil = 0\n const onClickOutsideCapture = (e: Event): void => {\n if (Date.now() < suppressClickUntil) {\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n return\n }\n if (!lightbox.api().open) return\n if (fullImg.contains(e.target as Node)) return\n e.preventDefault()\n e.stopPropagation()\n e.stopImmediatePropagation()\n lightbox.api().setOpen(false)\n suppressClickUntil = Date.now() + 100\n }\n window.addEventListener(\"keydown\", onEscapeCapture, true)\n window.addEventListener(\"pointerdown\", onClickOutsideCapture, true)\n window.addEventListener(\"mousedown\", onClickOutsideCapture, true)\n window.addEventListener(\"click\", onClickOutsideCapture, true)\n cleanups.push(() => {\n window.removeEventListener(\"keydown\", onEscapeCapture, true)\n window.removeEventListener(\"pointerdown\", onClickOutsideCapture, true)\n window.removeEventListener(\"mousedown\", onClickOutsideCapture, true)\n window.removeEventListener(\"click\", onClickOutsideCapture, true)\n })\n\n spreadProps(\n screenshotPreview,\n lightbox.api().getTriggerProps() as Record<string, unknown>\n )\n })\n }\n\n const form = createForm({ attrs: { \"data-uidex-form\": surface.id } }, [\n ...(surface.screenshotPreview ? [screenshotField] : []),\n ...fields.map((f) => f.node),\n submit,\n status,\n ])\n\n const ICON_TILE =\n \"bg-card text-foreground shadow-sm/5 [&_svg:not([class*='size-'])]:size-4.5 relative flex size-9 shrink-0 items-center justify-center rounded-md border before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-md)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\"\n const ICON_TILE_GHOST =\n ICON_TILE + \" pointer-events-none absolute bottom-px shadow-none scale-84\"\n const EMPTY_ROOT =\n \"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 text-balance px-6 py-12 text-center\"\n\n function createIconMedia(icon: SVGSVGElement): HTMLElement {\n const left = el(\"div\", {\n class:\n ICON_TILE_GHOST + \" -rotate-10 origin-bottom-left -translate-x-0.5\",\n attrs: { \"aria-hidden\": \"true\" },\n })\n const right = el(\"div\", {\n class: ICON_TILE_GHOST + \" rotate-10 origin-bottom-right translate-x-0.5\",\n attrs: { \"aria-hidden\": \"true\" },\n })\n const tile = el(\"div\", { class: ICON_TILE }, [icon])\n return el(\"div\", { class: \"relative\" }, [left, right, tile])\n }\n\n // -- Loading view (hidden by default) --\n const SKELETON =\n \"animate-skeleton rounded-sm [--skeleton-highlight:--alpha(var(--color-white)/64%)] [background:linear-gradient(120deg,transparent_40%,var(--skeleton-highlight),transparent_60%)_var(--color-muted)_0_0/200%_100%_fixed] dark:[--skeleton-highlight:--alpha(var(--color-white)/4%)]\"\n const spinnerSvg = createLucideElement(Loader2)\n spinnerSvg.classList.add(\"animate-spin\")\n const loadingView = el(\n \"div\",\n { class: EMPTY_ROOT, attrs: { \"aria-live\": \"polite\", hidden: true } },\n [\n createIconMedia(spinnerSvg),\n el(\"div\", { class: \"flex max-w-sm flex-col items-center text-center\" }, [\n el(\"div\", { class: SKELETON + \" h-6 w-36 rounded-md\" }),\n ]),\n el(\n \"div\",\n {\n class:\n \"flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm\",\n },\n [el(\"div\", { class: SKELETON + \" h-7 w-20 rounded-lg\" })]\n ),\n ]\n )\n\n // -- Success view (hidden by default) --\n const checkSvg = createLucideElement(CircleCheck)\n const successTitle = el(\"div\", {\n class: \"font-heading text-xl font-semibold\",\n })\n const successLink = el(\"a\", {\n class: buttonVariants({ variant: \"outline\", size: \"sm\" }),\n attrs: { target: \"_blank\", rel: \"noreferrer\" },\n })\n const successActions = el(\n \"div\",\n {\n class:\n \"flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm\",\n },\n [successLink]\n )\n const successView = el(\n \"div\",\n { class: EMPTY_ROOT, attrs: { hidden: true } },\n [\n createIconMedia(checkSvg),\n el(\"div\", { class: \"flex max-w-sm flex-col items-center text-center\" }, [\n successTitle,\n ]),\n successActions,\n ]\n )\n\n // -- Error view (hidden by default) --\n const errorSvg = createLucideElement(CircleX)\n const errorTitle = el(\"div\", {\n class: \"font-heading text-xl font-semibold\",\n })\n const errorDescription = el(\"p\", {\n class: \"text-muted-foreground text-sm\",\n })\n const retryButton = createButton({\n variant: \"outline\",\n size: \"sm\",\n text: \"Try Again\",\n })\n const errorActions = el(\n \"div\",\n {\n class:\n \"flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm\",\n },\n [retryButton]\n )\n const errorView = el(\"div\", { class: EMPTY_ROOT, attrs: { hidden: true } }, [\n createIconMedia(errorSvg),\n el(\n \"div\",\n { class: \"flex max-w-sm flex-col items-center gap-1 text-center\" },\n [errorTitle, errorDescription]\n ),\n errorActions,\n ])\n\n function clearAllFieldErrors(): void {\n for (const f of fields) f.setError(null)\n }\n\n function applyFieldErrors(errs: Record<string, string> | undefined): void {\n clearAllFieldErrors()\n if (!errs) return\n for (const [name, message] of Object.entries(errs)) {\n fieldByName.get(name)?.setError(message)\n }\n }\n\n function setStatus(result: FormSubmitResult | null): void {\n status.replaceChildren()\n status.classList.remove(\"text-destructive-foreground\")\n status.classList.add(\"text-muted-foreground\")\n if (!result) return\n if (result.status === \"error\") {\n status.classList.remove(\"text-muted-foreground\")\n status.classList.add(\"text-destructive-foreground\")\n if (!result.fieldErrors) {\n status.textContent = result.message\n }\n return\n }\n if (result.link) {\n status.append(\n document.createTextNode(`${result.message ?? \"Submitted.\"} `),\n el(\"a\", {\n class: \"text-foreground underline underline-offset-4\",\n attrs: {\n href: result.link.url,\n target: \"_blank\",\n rel: \"noreferrer\",\n },\n text: result.link.label ?? \"Open link\",\n })\n )\n } else {\n status.textContent = result.message ?? \"Submitted.\"\n }\n }\n\n type FormViewState = \"form\" | \"loading\" | \"success\" | \"error\"\n function showView(state: FormViewState): void {\n form.hidden = state !== \"form\"\n loadingView.hidden = state !== \"loading\"\n successView.hidden = state !== \"success\"\n errorView.hidden = state !== \"error\"\n }\n\n function populateSuccess(result: FormSubmitResult | null): void {\n if (!result || result.status !== \"success\") return\n successTitle.textContent = result.message ?? \"Submitted\"\n if (result.link) {\n successLink.setAttribute(\"href\", result.link.url)\n successLink.textContent = result.link.label ?? \"Open link\"\n successActions.hidden = false\n } else {\n successActions.hidden = true\n }\n }\n\n function populateError(result: FormSubmitResult | null): void {\n if (!result || result.status !== \"error\") return\n errorTitle.textContent = \"Something went wrong\"\n errorDescription.textContent = result.message\n }\n\n const actor = createActor(\n formMachine.provide({\n actions: {\n disableSubmitButton: () => {\n submit.disabled = true\n submit.setAttribute(\"data-loading\", \"\")\n showView(\"loading\")\n },\n enableSubmitButton: () => {\n submit.disabled = false\n submit.removeAttribute(\"data-loading\")\n },\n showSuccessStatus: ({ context }) => {\n populateSuccess(context.result)\n showView(\"success\")\n clearAllFieldErrors()\n },\n showErrorStatus: ({ context }) => {\n const hasFieldErrors =\n context.fieldErrors && Object.keys(context.fieldErrors).length > 0\n if (hasFieldErrors) {\n const message =\n context.result?.status === \"error\"\n ? context.result\n : context.errorMessage\n ? {\n status: \"error\" as const,\n message: context.errorMessage,\n }\n : null\n setStatus(message)\n showView(\"form\")\n } else {\n populateError(context.result)\n showView(\"error\")\n }\n },\n applyFieldErrors: ({ context }) => {\n applyFieldErrors(context.fieldErrors ?? undefined)\n },\n clearStatus: () => {\n setStatus(null)\n showView(\"form\")\n },\n clearFieldErrors: () => {\n clearAllFieldErrors()\n },\n resetFields: ({ context }) => {\n if (\n context.result?.status === \"success\" &&\n context.result.resetFields\n ) {\n for (const name of context.result.resetFields) {\n fieldByName.get(name)?.reset()\n }\n }\n },\n },\n actors: {\n validate: fromPromise<\n Record<string, string> | null,\n { values: Record<string, FormValue> }\n >(async ({ input }) => {\n if (!surface.schema) return null\n return validateWithSchema(surface.schema, input.values)\n }),\n submit: fromPromise<\n FormSubmitResult,\n { values: Record<string, FormValue> }\n >(\n async ({ input }) =>\n (await surface.submit.onSubmit(input.values)) ?? {\n status: \"success\",\n }\n ),\n },\n })\n )\n actor.start()\n cleanups.push(() => actor.stop())\n\n const onSubmit = (e: SubmitEvent): void => {\n e.preventDefault()\n const values: Record<string, FormValue> = {}\n surface.fields.forEach((field, i) => {\n values[field.name] = fields[i].read()\n })\n const snapshot = actor.getSnapshot()\n if (snapshot.matches(\"success\")) return\n if (snapshot.matches(\"error\")) {\n actor.send({ type: \"RETRY\" })\n }\n actor.send({ type: \"SUBMIT\", values })\n }\n form.addEventListener(\"submit\", onSubmit)\n cleanups.push(() => form.removeEventListener(\"submit\", onSubmit))\n\n const triggerSubmit = (): void => {\n if (typeof form.requestSubmit === \"function\") form.requestSubmit()\n else form.dispatchEvent(new Event(\"submit\", { cancelable: true }))\n }\n\n // Submit = Cmd/Ctrl+Enter. Plain Enter in a text input would otherwise\n // implicit-submit, so swallow it; textareas keep Enter = newline.\n const onFormKeyDown = (e: KeyboardEvent): void => {\n if (e.key !== \"Enter\") return\n const isMod = e.metaKey || e.ctrlKey\n if (isMod) {\n e.preventDefault()\n const snap = actor.getSnapshot()\n if (snap.matches(\"success\")) {\n ctx.close()\n return\n }\n if (!snap.matches(\"idle\") && !snap.matches(\"error\")) return\n triggerSubmit()\n return\n }\n if (\n e.target instanceof HTMLInputElement &&\n e.target.type !== \"checkbox\" &&\n e.target.type !== \"radio\"\n ) {\n e.preventDefault()\n }\n }\n form.addEventListener(\"keydown\", onFormKeyDown)\n cleanups.push(() => form.removeEventListener(\"keydown\", onFormKeyDown))\n\n const section = el(\n \"section\",\n {\n class: \"flex min-h-0 flex-1 flex-col p-4\",\n attrs: { \"data-uidex-form-surface\": surface.id },\n },\n [form, loadingView, successView, errorView]\n )\n root.append(section)\n\n const retryFromError = (): void => {\n actor.send({ type: \"RETRY\" })\n }\n retryButton.addEventListener(\"click\", retryFromError)\n cleanups.push(() => retryButton.removeEventListener(\"click\", retryFromError))\n\n const subscribers = new Set<() => void>()\n const resolveIntent = (): SubmitIntent | null => {\n const snap = actor.getSnapshot()\n if (snap.matches(\"submitting\") || snap.matches(\"validating\")) {\n return { label: \"Submitting…\", perform: () => {} }\n }\n if (snap.matches(\"success\")) {\n return { label: \"Close\", perform: () => ctx.close() }\n }\n if (snap.matches(\"error\") && !snap.context.fieldErrors) {\n return { label: \"Try Again\", perform: retryFromError }\n }\n return { label: surface.submit.label, perform: triggerSubmit }\n }\n\n const actorSub = actor.subscribe(() => {\n for (const cb of subscribers) cb()\n })\n cleanups.push(() => actorSub.unsubscribe())\n\n return {\n cleanup: composeCleanups([...cleanups, () => root.replaceChildren()]),\n submitIntent: {\n get: resolveIntent,\n subscribe: (cb) => {\n subscribers.add(cb)\n return () => subscribers.delete(cb)\n },\n },\n }\n}\n","import { assign, enqueueActions, fromPromise, setup } from \"xstate\"\n\nimport type { FormSubmitResult, FormValue } from \"../views/core/surface\"\n\nexport interface FormContext {\n values: Record<string, FormValue> | null\n result: FormSubmitResult | null\n fieldErrors: Record<string, string> | null\n errorMessage: string | null\n}\n\nexport type FormEvent =\n | { type: \"SUBMIT\"; values: Record<string, FormValue> }\n | { type: \"VALID\" }\n | { type: \"INVALID\"; fieldErrors: Record<string, string> }\n | { type: \"OK\"; result: FormSubmitResult }\n | { type: \"FAIL\"; result: FormSubmitResult }\n | { type: \"RETRY\" }\n\nexport interface ValidateInput {\n values: Record<string, FormValue>\n}\n\nexport interface SubmitInput {\n values: Record<string, FormValue>\n}\n\nconst initialContext: FormContext = {\n values: null,\n result: null,\n fieldErrors: null,\n errorMessage: null,\n}\n\nexport const formMachine = setup({\n types: {} as {\n context: FormContext\n events: FormEvent\n },\n actions: {\n disableSubmitButton: () => {},\n enableSubmitButton: () => {},\n showSuccessStatus: () => {},\n showErrorStatus: () => {},\n resetFields: () => {},\n applyFieldErrors: () => {},\n clearStatus: () => {},\n clearFieldErrors: () => {},\n },\n actors: {\n validate: fromPromise<Record<string, string> | null, ValidateInput>(\n async () => null\n ),\n submit: fromPromise<FormSubmitResult, SubmitInput>(async () => ({\n status: \"success\",\n })),\n },\n}).createMachine({\n id: \"form\",\n initial: \"idle\",\n context: initialContext,\n states: {\n idle: {\n entry: [\n assign(() => ({\n fieldErrors: null,\n errorMessage: null,\n })),\n { type: \"clearStatus\" },\n { type: \"clearFieldErrors\" },\n ],\n on: {\n SUBMIT: {\n target: \"validating\",\n actions: assign(({ event }) => ({\n values: event.values,\n result: null,\n fieldErrors: null,\n errorMessage: null,\n })),\n },\n },\n },\n validating: {\n invoke: {\n src: \"validate\",\n input: ({ context }) => ({ values: context.values ?? {} }),\n onDone: {\n actions: enqueueActions(({ event, enqueue }) => {\n const errors = event.output\n if (!errors) {\n enqueue.raise({ type: \"VALID\" })\n } else {\n enqueue.raise({ type: \"INVALID\", fieldErrors: errors })\n }\n }),\n },\n onError: {\n actions: enqueueActions(({ event, enqueue }) => {\n const error = event.error\n const message =\n error instanceof Error ? error.message : String(error)\n enqueue.raise({\n type: \"FAIL\",\n result: { status: \"error\", message },\n })\n }),\n },\n },\n on: {\n VALID: { target: \"submitting\" },\n INVALID: {\n target: \"error\",\n actions: assign(({ event }) => ({\n fieldErrors: event.fieldErrors,\n errorMessage: \"Please fix the errors above.\",\n result: {\n status: \"error\",\n message: \"Please fix the errors above.\",\n fieldErrors: event.fieldErrors,\n },\n })),\n },\n FAIL: {\n target: \"error\",\n actions: assign(({ event }) => ({\n result: event.result,\n errorMessage:\n event.result.status === \"error\" ? event.result.message : null,\n fieldErrors:\n event.result.status === \"error\"\n ? (event.result.fieldErrors ?? null)\n : null,\n })),\n },\n },\n },\n submitting: {\n entry: { type: \"disableSubmitButton\" },\n exit: { type: \"enableSubmitButton\" },\n invoke: {\n src: \"submit\",\n input: ({ context }) => ({ values: context.values ?? {} }),\n onDone: {\n actions: enqueueActions(({ event, enqueue }) => {\n const result = event.output\n if (result.status === \"success\") {\n enqueue.raise({ type: \"OK\", result })\n } else {\n enqueue.raise({ type: \"FAIL\", result })\n }\n }),\n },\n onError: {\n actions: enqueueActions(({ event, enqueue }) => {\n const error = event.error\n const message =\n error instanceof Error ? error.message : String(error)\n enqueue.raise({\n type: \"FAIL\",\n result: { status: \"error\", message },\n })\n }),\n },\n },\n on: {\n OK: {\n target: \"success\",\n actions: assign(({ event }) => ({\n result: event.result,\n fieldErrors: null,\n errorMessage: null,\n })),\n },\n FAIL: {\n target: \"error\",\n actions: assign(({ event }) => ({\n result: event.result,\n errorMessage:\n event.result.status === \"error\" ? event.result.message : null,\n fieldErrors:\n event.result.status === \"error\"\n ? (event.result.fieldErrors ?? null)\n : null,\n })),\n },\n },\n },\n success: {\n entry: [{ type: \"showSuccessStatus\" }, { type: \"resetFields\" }],\n },\n error: {\n entry: [{ type: \"showErrorStatus\" }, { type: \"applyFieldErrors\" }],\n on: {\n RETRY: { target: \"idle\" },\n },\n },\n },\n})\n","import * as dialog from \"@zag-js/dialog\"\nimport { createMachineHandle, type MachineHandle } from \"./machine\"\nimport { normalizeProps, type DomProps } from \"./normalize\"\n\nexport type DialogProps = dialog.Props\nexport type DialogApi = dialog.Api<DomProps>\nexport type DialogHandle = MachineHandle<DialogApi>\n\nexport function createDialog(props: Partial<DialogProps> = {}): DialogHandle {\n return createMachineHandle(\n dialog.machine,\n dialog.connect,\n normalizeProps,\n props\n )\n}\n\nexport { dialog }\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\n\nconst FIELD_ROOT_CLASS = \"flex flex-col items-start gap-2\"\nconst FIELD_LABEL_CLASS =\n \"text-base/4.5 text-foreground inline-flex items-center gap-2 font-medium sm:text-sm/4\"\nconst FIELD_DESCRIPTION_CLASS = \"text-muted-foreground text-xs\"\nconst FIELD_ERROR_CLASS = \"text-destructive-foreground text-xs\"\n\nexport interface CreateFieldOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n name?: string\n}\n\nexport function createField(\n options: CreateFieldOptions = {},\n children: Child | Child[] = []\n): HTMLDivElement {\n const { class: extra, name, attrs, ...rest } = options\n return el(\n \"div\",\n {\n ...rest,\n class: cn(FIELD_ROOT_CLASS, extra),\n attrs: {\n \"data-slot\": \"field\",\n \"data-uidex-primitive\": \"field\",\n ...(name ? { \"data-uidex-field-name\": name } : {}),\n ...attrs,\n },\n },\n children\n ) as HTMLDivElement\n}\n\nexport interface CreateFieldLabelOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n /** When provided, the `<label for>` attribute is set so clicking focuses the control. */\n htmlFor?: string\n}\n\nexport function createFieldLabel(\n options: CreateFieldLabelOptions = {},\n children: Child | Child[] = []\n): HTMLLabelElement {\n const { class: extra, htmlFor, attrs, ...rest } = options\n return el(\n \"label\",\n {\n ...rest,\n class: cn(FIELD_LABEL_CLASS, extra),\n attrs: {\n \"data-slot\": \"field-label\",\n ...(htmlFor ? { for: htmlFor } : {}),\n ...attrs,\n },\n },\n children\n ) as HTMLLabelElement\n}\n\nexport function createFieldDescription(\n options: CreateFieldOptions = {},\n children: Child | Child[] = []\n): HTMLParagraphElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"p\",\n {\n ...rest,\n class: cn(FIELD_DESCRIPTION_CLASS, extra),\n attrs: { \"data-slot\": \"field-description\", ...attrs },\n },\n children\n ) as HTMLParagraphElement\n}\n\nexport function createFieldError(\n options: CreateFieldOptions = {}\n): HTMLParagraphElement {\n const { class: extra, attrs, ...rest } = options\n const node = el(\"p\", {\n ...rest,\n class: cn(FIELD_ERROR_CLASS, extra),\n attrs: {\n \"data-slot\": \"field-error\",\n role: \"alert\",\n \"aria-live\": \"polite\",\n ...attrs,\n },\n }) as HTMLParagraphElement\n node.hidden = true\n return node\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\n\nconst FORM_CLASS = \"flex w-full flex-col gap-4\"\n\nexport interface CreateFormOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport function createForm(\n options: CreateFormOptions = {},\n children: Child | Child[] = []\n): HTMLFormElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"form\",\n {\n ...rest,\n class: cn(FORM_CLASS, extra),\n attrs: {\n \"data-slot\": \"form\",\n \"data-uidex-primitive\": \"form\",\n noValidate: true,\n ...attrs,\n },\n },\n children\n ) as HTMLFormElement\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type ElementOptions } from \"../internal/el\"\n\nconst FIELD_CLASS =\n \"border-input bg-popover text-foreground shadow-xs/5 placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive/40 aria-invalid:focus-visible:ring-destructive/20 dark:bg-input/30 inline-flex w-full rounded-lg border text-sm outline-none transition-shadow focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-60\"\n\nexport interface CreateInputOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport function createInput(\n options: CreateInputOptions = {}\n): HTMLInputElement {\n const { class: extra, attrs, ...rest } = options\n return el(\"input\", {\n ...rest,\n class: cn(FIELD_CLASS, \"h-8 px-3\", extra),\n attrs: { \"data-slot\": \"input\", ...attrs },\n }) as HTMLInputElement\n}\n\nexport function createTextarea(\n options: CreateInputOptions = {}\n): HTMLTextAreaElement {\n const { class: extra, attrs, ...rest } = options\n return el(\"textarea\", {\n ...rest,\n class: cn(FIELD_CLASS, \"min-h-20 px-3 py-2\", extra),\n attrs: { \"data-slot\": \"textarea\", ...attrs },\n }) as HTMLTextAreaElement\n}\n","import type { ClassValue } from \"clsx\"\nimport { ChevronsUpDown, createElement as createLucideElement } from \"lucide\"\nimport { cn } from \"../internal/cn\"\nimport { el, type ElementOptions } from \"../internal/el\"\n\nconst SELECT_WRAP_CLASS =\n \"border-input bg-popover text-foreground shadow-xs/5 focus-within:border-ring focus-within:ring-ring/30 aria-invalid:border-destructive/40 dark:bg-input/30 relative inline-flex h-8 w-full items-center rounded-lg border text-sm outline-none transition-shadow focus-within:ring-[3px] has-disabled:opacity-60\"\n\nconst SELECT_CONTROL_CLASS =\n \"absolute inset-0 h-full w-full cursor-pointer appearance-none bg-transparent px-3 pr-8 text-sm text-foreground outline-none disabled:cursor-not-allowed\"\n\nconst NATIVE_SELECT_CLASS =\n \"border-input bg-popover text-foreground shadow-xs/5 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive/40 dark:bg-input/30 inline-flex h-8 w-full cursor-pointer appearance-none rounded-lg border bg-[right_0.5rem_center] bg-no-repeat pl-3 pr-8 text-sm outline-none transition-shadow focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-60\"\n\nconst SELECT_CHEVRON_CLASS =\n \"pointer-events-none absolute right-2 size-4 text-muted-foreground opacity-80\"\n\nexport interface CreateSelectOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport interface SelectHandle {\n wrapper: HTMLElement\n control: HTMLSelectElement\n}\n\n/**\n * Coss-styled select composed of a wrapper `<span>` carrying the\n * border/shadow/chevron and a native `<select>` inside. Use when you can\n * control where the full handle mounts.\n */\nexport function createSelect(options: CreateSelectOptions = {}): SelectHandle {\n const { class: extra, attrs, ...rest } = options\n const control = el(\"select\", {\n ...rest,\n class: SELECT_CONTROL_CLASS,\n attrs: { \"data-slot\": \"select\", ...attrs },\n }) as HTMLSelectElement\n const chevron = createLucideElement(ChevronsUpDown)\n chevron.setAttribute(\"aria-hidden\", \"true\")\n chevron.setAttribute(\"class\", SELECT_CHEVRON_CLASS)\n const wrapper = el(\n \"span\",\n {\n class: cn(SELECT_WRAP_CLASS, extra),\n attrs: { \"data-slot\": \"select-control\" },\n },\n [control, chevron]\n )\n return { wrapper, control }\n}\n\n/**\n * Bare coss-styled native `<select>` — no wrapper, no chevron. Use when the\n * consumer expects a single self-styled element (e.g. the generic form\n * renderer in `views/render/form.ts`).\n */\nexport function createNativeSelect(\n options: CreateSelectOptions = {}\n): HTMLSelectElement {\n const { class: extra, attrs, ...rest } = options\n return el(\"select\", {\n ...rest,\n class: cn(NATIVE_SELECT_CLASS, extra),\n attrs: { \"data-slot\": \"select\", ...attrs },\n }) as HTMLSelectElement\n}\n","import * as combobox from \"@zag-js/combobox\"\nimport { createMachineRunner } from \"./machine\"\nimport { normalizeProps, type DomProps } from \"./normalize\"\n\nexport type ComboboxProps<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n> = combobox.Props<T>\nexport type ComboboxApi<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n> = combobox.Api<DomProps, T>\n\nexport function createCombobox<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n>(props: Partial<ComboboxProps<T>>) {\n const runner = createMachineRunner(\n combobox.machine as unknown as Parameters<typeof createMachineRunner>[0],\n props as never\n )\n runner.start()\n return {\n runner,\n api: () =>\n combobox.connect(\n runner.service as never,\n normalizeProps\n ) as ComboboxApi<T>,\n destroy: () => runner.stop(),\n }\n}\n\nexport type ComboboxHandle<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n> = ReturnType<typeof createCombobox<T>>\n\nexport { combobox }\n","import { KIND_STYLE } from \"../../entities\"\nimport { combobox, createCombobox } from \"../../machines/combobox\"\nimport { createScrollArea } from \"../../machines/scroll-area\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport { matchesQuery } from \"../builder/filter\"\nimport { createPersistentSpreads, spreadProps } from \"../builder/spread-props\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { ShellAction, ViewContext } from \"../core/types\"\nimport { createElement as createLucideElement, Circle } from \"lucide\"\nimport { isAbsentFromPage } from \"../primitives/entity-presence\"\nimport { createIconTile } from \"../primitives/icon-tile\"\nimport { renderKindIconTile } from \"../primitives/kind-icon\"\nimport { fillRow } from \"../primitives/row\"\nimport { createMutedText } from \"../primitives/text\"\nimport {\n LIST_GROUP_LABEL_CLASS,\n LIST_ITEM_CLASS,\n LIST_ITEM_STATE_CLASS,\n} from \"../../ui/list-item\"\nimport type { MountedSurface } from \"./index\"\n\nfunction defaultFilter(item: ListItem, query: string): boolean {\n return matchesQuery(\n `${item.label} ${item.value} ${item.group ?? \"\"} ${item.subtitle ?? \"\"}`,\n query\n )\n}\n\nfunction rowTag(item: ListItem): string {\n return item.tag ?? item.value\n}\n\nexport function renderListSurface(\n surface: ListSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n const all = surface.items\n const filterFn = surface.filter ?? defaultFilter\n let filteredItems: readonly ListItem[] = all\n\n const allByValue = new Map(all.map((i) => [i.value, i]))\n\n const getRootNode = (): ShadowRoot | Document => {\n const rn = root.getRootNode()\n if (rn instanceof ShadowRoot || rn instanceof Document) return rn\n return root.ownerDocument ?? document\n }\n\n const makeCollection = (items: readonly ListItem[]) =>\n combobox.collection({\n items: items as ListItem[],\n itemToValue: (item) => item.value,\n itemToString: (item) => item.label,\n })\n\n const hasDefault =\n surface.defaultHighlight !== undefined &&\n allByValue.has(surface.defaultHighlight)\n\n const handle = createCombobox<ListItem>({\n id: surface.id,\n getRootNode,\n collection: makeCollection(all),\n defaultOpen: true,\n defaultHighlightedValue: hasDefault ? surface.defaultHighlight : undefined,\n openOnClick: true,\n inputBehavior: \"autohighlight\",\n selectionBehavior: \"preserve\",\n closeOnSelect: false,\n disableLayer: true,\n onSelect: ({ itemValue }) => {\n const item = allByValue.get(itemValue)\n if (!item || !surface.onSelect) return\n surface.onSelect(item)\n },\n onHighlightChange: ({ highlightedValue }) => {\n const item = highlightedValue\n ? allByValue.get(highlightedValue)\n : undefined\n if (item?.preview) {\n ctx.highlight.show(item.preview, {\n color: KIND_STYLE[item.preview.kind].color,\n })\n } else {\n ctx.highlight.hide()\n }\n },\n })\n\n const section = el(\"section\", {\n class: \"flex h-full flex-col overflow-hidden\",\n attrs: { \"data-uidex-list-surface\": surface.id },\n })\n\n let kbdHighlightEl: HTMLElement | null = null\n let kbdActive = false\n const setKbdHighlight = (value: string | null): void => {\n if (kbdHighlightEl) {\n kbdHighlightEl.removeAttribute(\"data-kbd-highlighted\")\n kbdHighlightEl = null\n }\n if (value) {\n const node = itemNodes.get(value)\n if (node) {\n node.setAttribute(\"data-kbd-highlighted\", \"\")\n kbdHighlightEl = node\n }\n }\n }\n const enterKbdMode = (): void => {\n if (!kbdActive) {\n kbdActive = true\n section.setAttribute(\"data-kbd-nav\", \"\")\n }\n }\n const exitKbdMode = (): void => {\n if (kbdActive) {\n kbdActive = false\n section.removeAttribute(\"data-kbd-nav\")\n }\n }\n section.addEventListener(\"keydown\", (e) => {\n if (\n e.key === \"ArrowDown\" ||\n e.key === \"ArrowUp\" ||\n e.key === \"Home\" ||\n e.key === \"End\"\n ) {\n enterKbdMode()\n requestAnimationFrame(() => {\n setKbdHighlight(handle.api().highlightedValue ?? null)\n })\n }\n })\n section.addEventListener(\"pointermove\", exitKbdMode)\n\n const scrollRoot = el(\"div\", {\n class: \"flex-1 min-h-0\",\n attrs: { \"data-uidex-list-scroll-root\": \"\" },\n })\n\n const viewport = el(\"div\", { class: \"uidex-scrollbar h-full w-full\" })\n\n const content = el(\"div\", {\n class: \"scroll-py-2 p-2\",\n attrs: { \"data-uidex-list-content\": \"\" },\n })\n\n viewport.append(content)\n scrollRoot.append(viewport)\n section.append(scrollRoot)\n root.append(section)\n\n const scrollArea = createScrollArea({\n id: `${surface.id}-scroll`,\n getRootNode,\n })\n const scrollSpreads = createPersistentSpreads()\n const applyScrollProps = (): void => {\n const api = scrollArea.api()\n scrollSpreads.apply(\n scrollRoot,\n api.getRootProps() as Record<string, unknown>\n )\n scrollSpreads.apply(\n viewport,\n api.getViewportProps() as Record<string, unknown>\n )\n }\n applyScrollProps()\n const unsubScroll = scrollArea.runner.subscribe(applyScrollProps)\n\n const shellSpreads = createPersistentSpreads()\n const itemSpreads = createPersistentSpreads()\n const groupSpreads = createPersistentSpreads()\n let inputSpreadCleanup: Cleanup = () => {}\n\n const itemNodes = new Map<string, HTMLElement>()\n const itemForValue = new Map<string, ListItem>()\n const groupNodes = new Map<string, HTMLElement>()\n let listEl: HTMLElement | null = null\n let lastCollectionKey = \"\"\n let lastHighlight: string | null = null\n\n const isHidden = (): boolean => root.hasAttribute(\"hidden\")\n\n const collectionKey = (items: readonly ListItem[]): string =>\n items.map((i) => i.value).join(\"\\x00\")\n\n const clearInputSpread = (): void => {\n inputSpreadCleanup()\n inputSpreadCleanup = () => {}\n }\n\n const applyInputSpread = (): void => {\n inputSpreadCleanup()\n const api = handle.api()\n const inputProps = api.getInputProps() as Record<string, unknown>\n // The shell owns the input's placeholder; zag emits `placeholder: undefined`\n // when no prop is passed, which would strip our attribute on re-apply.\n delete inputProps.placeholder\n inputSpreadCleanup = spreadProps(ctx.searchInput, inputProps)\n }\n\n const visibilityObserver = new MutationObserver(() => {\n if (isHidden()) {\n // The stack's syncHighlight owns the overlay while a child view is on\n // top — don't clobber its ref-based highlight here.\n clearInputSpread()\n } else {\n applyInputSpread()\n }\n })\n visibilityObserver.observe(root, {\n attributes: true,\n attributeFilter: [\"hidden\"],\n })\n\n function buildItemBody(itemEl: HTMLElement, item: ListItem): void {\n const leading = resolveLeadingTile(item)\n fillRow(itemEl, {\n leading,\n label: item.label,\n subtitle: item.subtitle,\n trailing: item.shortcut,\n })\n }\n\n function resolveLeadingTile(item: ListItem): HTMLElement {\n if (item.entityChip) return renderKindIconTile(item.entityChip.entity.kind)\n if (item.leading) return createIconTile(item.leading())\n const fallback = createLucideElement(Circle)\n fallback.setAttribute(\"aria-hidden\", \"true\")\n fallback.setAttribute(\"class\", \"size-4\")\n return createIconTile(fallback)\n }\n\n function buildItems(): void {\n itemSpreads.cleanupAll()\n groupSpreads.cleanupAll()\n itemNodes.clear()\n itemForValue.clear()\n groupNodes.clear()\n listEl = null\n content.replaceChildren()\n\n const visible = filteredItems\n if (visible.length === 0) {\n content.append(\n createMutedText({\n class: \"p-4 text-center\",\n attrs: { \"data-uidex-list-empty\": \"\" },\n text: surface.emptyLabel ?? \"No matches\",\n })\n )\n return\n }\n\n const byGroup = new Map<string, ListItem[]>()\n for (const item of visible) {\n const key = item.group ?? \"\"\n const bucket = byGroup.get(key) ?? []\n bucket.push(item)\n byGroup.set(key, bucket)\n }\n\n const list = el(\"ul\", {\n class: \"flex flex-col gap-1\",\n attrs: { \"data-uidex-list-groups\": \"\" },\n })\n listEl = list\n\n for (const [group, items] of byGroup) {\n const groupEl = el(\"li\", {\n class: \"flex flex-col gap-1 py-1\",\n attrs: {\n \"data-uidex-list-group\": \"\",\n \"data-uidex-list-group-name\": group,\n },\n })\n const groupHeading = group\n ? el(\"h3\", { class: LIST_GROUP_LABEL_CLASS, text: group })\n : null\n const groupList = el(\"ul\", { class: \"flex flex-col\" })\n groupNodes.set(group || \"ungrouped\", groupList)\n for (const item of items) {\n const absent = item.preview\n ? isAbsentFromPage(item.preview, ctx.registry)\n : false\n const itemEl = el(\"li\", {\n class: cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_STATE_CLASS,\n absent && \"opacity-50\"\n ),\n attrs: {\n \"data-uidex-list-item\": rowTag(item),\n ...(absent ? { title: \"Not on this page\" } : {}),\n },\n })\n itemNodes.set(item.value, itemEl)\n itemForValue.set(item.value, item)\n buildItemBody(itemEl, item)\n groupList.append(itemEl)\n }\n if (groupHeading) groupEl.append(groupHeading)\n groupEl.append(groupList)\n list.append(groupEl)\n }\n\n content.append(list)\n }\n\n function applyProps(): void {\n const api = handle.api()\n shellSpreads.apply(section, api.getRootProps() as Record<string, unknown>)\n if (!isHidden()) applyInputSpread()\n shellSpreads.apply(\n content,\n api.getContentProps() as Record<string, unknown>\n )\n if (listEl) {\n shellSpreads.apply(listEl, api.getListProps() as Record<string, unknown>)\n for (const [id, groupList] of groupNodes) {\n groupSpreads.apply(\n groupList,\n api.getItemGroupProps({ id }) as Record<string, unknown>\n )\n }\n }\n for (const [value, itemEl] of itemNodes) {\n const item = itemForValue.get(value)\n if (!item) continue\n itemSpreads.apply(\n itemEl,\n api.getItemProps({ item }) as Record<string, unknown>\n )\n }\n }\n\n function maybeScrollHighlight(): void {\n const api = handle.api()\n const next = api.highlightedValue ?? null\n if (next === lastHighlight) return\n lastHighlight = next\n if (!next) return\n const node = itemNodes.get(next)\n node?.scrollIntoView({ block: \"nearest\" })\n }\n\n function tick(): void {\n const wantKey = collectionKey(filteredItems)\n if (wantKey !== lastCollectionKey) {\n kbdHighlightEl = null\n buildItems()\n lastCollectionKey = wantKey\n setKbdHighlight(handle.api().highlightedValue ?? null)\n }\n applyProps()\n maybeScrollHighlight()\n }\n\n const unsub = handle.runner.subscribe(tick)\n\n buildItems()\n lastCollectionKey = collectionKey(filteredItems)\n applyProps()\n if (hasDefault && surface.defaultHighlight) {\n handle.api().setHighlightValue(surface.defaultHighlight)\n const highlightedEl = itemNodes.get(surface.defaultHighlight)\n highlightedEl?.scrollIntoView({ block: \"nearest\" })\n lastHighlight = surface.defaultHighlight\n setKbdHighlight(surface.defaultHighlight)\n }\n\n const cleanup = composeCleanups([\n handle.destroy,\n () => ctx.highlight.hide(),\n unsubScroll,\n () => scrollSpreads.cleanupAll(),\n scrollArea.destroy,\n () => visibilityObserver.disconnect(),\n clearInputSpread,\n unsub,\n () => section.removeEventListener(\"pointermove\", exitKbdMode),\n () => {\n itemSpreads.cleanupAll()\n groupSpreads.cleanupAll()\n shellSpreads.cleanupAll()\n itemNodes.clear()\n itemForValue.clear()\n groupNodes.clear()\n root.replaceChildren()\n },\n ])\n\n const onSearch = (query: string): void => {\n const next = all.filter((item) => filterFn(item, query))\n const nextKey = collectionKey(next)\n if (nextKey === lastCollectionKey) return\n filteredItems = next\n handle.runner.update({ collection: makeCollection(filteredItems) })\n }\n\n const submitIntent = {\n get() {\n const api = handle.api()\n const highlighted = api.highlightedValue\n if (!highlighted) return null\n const item = allByValue.get(highlighted)\n if (!item || !surface.onSelect) return null\n return {\n label: \"Select\",\n perform: () => surface.onSelect!(item),\n }\n },\n subscribe(cb: () => void) {\n return handle.runner.subscribe(cb)\n },\n }\n\n const highlightActions = {\n get(): readonly ShellAction[] {\n const api = handle.api()\n const highlighted = api.highlightedValue\n if (!highlighted) return []\n const item = allByValue.get(highlighted)\n return item?.actions ?? []\n },\n subscribe(cb: () => void) {\n return handle.runner.subscribe(cb)\n },\n }\n\n return { cleanup, onSearch, submitIntent, highlightActions }\n}\n","import type { Cleanup, ShellAction, ViewContext } from \"../core/types\"\nimport type { ViewSurface } from \"../core/surface\"\nimport { renderCustomSurface } from \"./custom\"\nimport { renderDetailSurface } from \"./detail\"\nimport { renderFormSurface } from \"./form\"\nimport { renderListSurface } from \"./list\"\n\nexport interface SubmitIntent {\n label: string\n perform: () => void\n}\n\nexport interface SubmitIntentSource {\n get(): SubmitIntent | null\n subscribe(cb: () => void): Cleanup\n}\n\nexport interface HighlightActionsSource {\n get(): readonly ShellAction[]\n subscribe(cb: () => void): Cleanup\n}\n\nexport interface MountedSurface {\n cleanup: Cleanup\n onSearch?: (query: string) => void\n submitIntent?: SubmitIntentSource\n highlightActions?: HighlightActionsSource\n}\n\nexport function renderSurface(\n surface: ViewSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n switch (surface.kind) {\n case \"list\":\n return renderListSurface(surface, ctx, root)\n case \"detail\":\n return renderDetailSurface(surface, ctx, root)\n case \"form\":\n return renderFormSurface(surface, ctx, root)\n case \"custom\":\n return renderCustomSurface(surface, ctx, root)\n }\n}\n","import type { EntityRef, Registry } from \"../../entities\"\nimport type { Cleanup } from \"../../internal/cleanup\"\nimport {\n createScrollArea,\n type ScrollAreaHandle,\n} from \"../../machines/scroll-area\"\nimport type { SessionStore } from \"../../session\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport { createPersistentSpreads } from \"../builder/spread-props\"\nimport { renderSurface, type MountedSurface } from \"../render\"\nimport type { ViewRegistrar } from \"./registry\"\nimport type {\n CloudAdapter,\n HighlightController,\n View,\n ViewContext,\n} from \"./types\"\n\nconst SCROLL_ROOT_CLASS = \"absolute inset-0\"\nconst HOST_CLASS = \"uidex-scrollbar h-full w-full\"\n\nexport interface MountedEntry {\n id: string\n ref: EntityRef | null\n view: View\n host: HTMLElement\n scrollRoot: HTMLElement\n scrollArea: ScrollAreaHandle\n scrollCleanup: Cleanup\n ctx: ViewContext\n mounted: MountedSurface\n}\n\nexport interface MountEntryDeps {\n container: HTMLElement\n searchInput: HTMLInputElement\n views: ViewRegistrar\n session: SessionStore\n registry: Registry\n cloud: CloudAdapter | null\n sdkCloud: CloudAdapter\n highlight: HighlightController\n nextScrollSeq(): number\n}\n\nexport function mountEntry(\n entry: ViewStackEntry,\n view: View,\n deps: MountEntryDeps\n): MountedEntry | null {\n const scrollRoot = document.createElement(\"div\")\n scrollRoot.setAttribute(\"data-uidex-view-scroll-root\", \"\")\n scrollRoot.className = SCROLL_ROOT_CLASS\n\n const host = document.createElement(\"div\")\n host.setAttribute(\"data-uidex-view-slot\", \"\")\n host.setAttribute(\"data-uidex-view-id\", view.id)\n host.className = HOST_CLASS\n scrollRoot.appendChild(host)\n deps.container.appendChild(scrollRoot)\n\n const seq = deps.nextScrollSeq()\n const scrollArea = createScrollArea({\n id: `uidex-view-scroll-${view.id}-${seq}`,\n getRootNode: () => {\n const rn = scrollRoot.getRootNode()\n if (rn instanceof ShadowRoot || rn instanceof Document) return rn\n return scrollRoot.ownerDocument ?? document\n },\n })\n\n const scrollSpreads = createPersistentSpreads()\n const applyScrollProps = (): void => {\n const api = scrollArea.api()\n scrollSpreads.apply(\n scrollRoot,\n api.getRootProps() as Record<string, unknown>\n )\n // Zag's getRootProps sets inline `position: relative`, which beats the\n // `absolute inset-0` utility class and collapses the viewport to 0px.\n scrollRoot.style.position = \"absolute\"\n scrollSpreads.apply(host, api.getViewportProps() as Record<string, unknown>)\n }\n applyScrollProps()\n const unsubScroll = scrollArea.runner.subscribe(applyScrollProps)\n const scrollCleanup: Cleanup = () => {\n unsubScroll()\n scrollSpreads.cleanupAll()\n }\n\n const ctx: ViewContext = {\n ref: entry.ref,\n registry: deps.registry,\n cloud: deps.cloud,\n sdkCloud: deps.sdkCloud,\n views: {\n list: () => deps.views.list(),\n recents: () => deps.views.recents(),\n favorites: () => deps.views.favorites(),\n },\n push: (target) => {\n if (!deps.views.get(target.id)) return\n deps.session.getState().actions.pushStack({\n id: target.id,\n ref: target.ref ?? null,\n })\n },\n pop: () => deps.session.getState().actions.popStack(),\n close: () => deps.session.getState().actions.clearStack(),\n navigate: (r: EntityRef) => deps.views.navigate(r),\n toggleFavorite: (r: EntityRef) => deps.views.toggleFavorite(r),\n isFavorite: (r: EntityRef) => deps.views.isFavorite(r),\n pinHighlight: (r: EntityRef) =>\n deps.session.getState().actions.pinHighlight(r),\n searchInput: deps.searchInput,\n highlight: deps.highlight,\n getStack: () => deps.session.getState().stack,\n }\n\n let surfaceResult: MountedSurface\n try {\n const surface = view.surface(ctx)\n surfaceResult = renderSurface(surface, ctx, host)\n } catch (err) {\n console.error(`[uidex] View \"${view.id}\" surface() threw`, err)\n scrollCleanup()\n scrollArea.destroy()\n scrollRoot.remove()\n return null\n }\n\n return {\n id: view.id,\n ref: entry.ref,\n view,\n host,\n scrollRoot,\n scrollArea,\n scrollCleanup,\n ctx,\n mounted: surfaceResult,\n }\n}\n\nexport function cleanupMountedEntry(entry: MountedEntry): void {\n try {\n entry.mounted.cleanup()\n } catch (err) {\n console.error(\"[uidex] View cleanup threw\", err)\n }\n entry.scrollCleanup()\n entry.scrollArea.destroy()\n entry.scrollRoot.remove()\n}\n\nexport function setEntryVisibility(\n entry: MountedEntry,\n visible: boolean\n): void {\n if (visible) {\n entry.host.removeAttribute(\"hidden\")\n entry.host.removeAttribute(\"inert\")\n entry.host.removeAttribute(\"aria-hidden\")\n } else {\n entry.host.setAttribute(\"hidden\", \"\")\n entry.host.setAttribute(\"inert\", \"\")\n entry.host.setAttribute(\"aria-hidden\", \"true\")\n }\n}\n","import { ArrowLeft, Search, createElement as createLucideElement } from \"lucide\"\nimport { Z_CHROME } from \"../../surface/constants\"\nimport type { PaletteShortcut } from \"../../surface/keys\"\nimport { createActionsPopup, type ActionsPopupHandle } from \"./actions-popup\"\nimport { createKbd } from \"../../ui/kbd\"\n\nconst BACKDROP_CLASS = \"fixed inset-0 bg-black/32 backdrop-blur-sm\"\n\nconst VIEWPORT_CLASS =\n \"fixed inset-0 flex flex-col items-center px-4 py-[max(1rem,4vh)] sm:py-[10vh]\"\n\nconst FRAME_CLASS =\n \"relative flex h-[26rem] w-full min-w-0 max-w-xl flex-col rounded-2xl border bg-popover text-popover-foreground shadow-lg/5 outline-none not-dark:bg-clip-padding before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-2xl)-1px)] before:bg-muted/72 before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\"\n\nconst HEADER_CLASS = \"flex shrink-0 items-center gap-1 px-2.5 py-1.5\"\n\nconst SEARCH_WRAPPER_CLASS =\n \"flex h-9 w-full items-center gap-0 text-foreground\"\n\nconst BACK_BUTTON_CLASS =\n \"inline-flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-md bg-muted text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n\nconst BACK_ICON_CLASS = \"size-4 opacity-80\"\n\nconst SEARCH_ICON_WRAP_CLASS =\n \"inline-flex size-7 shrink-0 items-center justify-center text-muted-foreground\"\n\nconst SEARCH_ICON_CLASS = \"size-4 opacity-80\"\n\nconst LOGO_CLASS =\n \"inline-flex shrink-0 items-center justify-center text-muted-foreground\"\n\nconst LOGO_ICON_CLASS = \"size-4\"\n\nconst SEARCH_INPUT_CLASS =\n \"text-foreground min-w-0 flex-1 bg-transparent ps-2 pe-3 text-sm placeholder:text-muted-foreground focus:outline-none\"\n\nconst HEADER_TITLE_CLASS =\n \"text-foreground min-w-0 flex-1 truncate px-3 text-sm\"\n\nconst HOST_CONTAINER_CLASS =\n \"relative -mx-px min-h-0 flex-1 overflow-hidden rounded-t-xl border border-b-0 bg-popover bg-clip-padding shadow-xs/5 [clip-path:inset(0_1px)] before:pointer-events-none before:absolute before:inset-0 before:rounded-t-[calc(var(--radius-xl)-1px)]\"\n\nconst FOOTER_CLASS =\n \"text-muted-foreground flex items-center justify-between gap-2 rounded-b-[calc(var(--radius-2xl)-1px)] border-t px-3 py-1.5 text-xs\"\n\nconst FOOTER_SIDE_CLASS = \"flex min-w-0 items-center\"\n\nconst HINT_CLASS =\n \"inline-flex items-center gap-1.5 text-xs text-muted-foreground\"\n\nconst ACTIONS_TRIGGER_CLASS =\n \"inline-flex shrink-0 cursor-pointer items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n\nexport interface StackShellCallbacks {\n onBack(): void\n onBackdropClick(): void\n onSearchInput(value: string): void\n}\n\nexport interface StackShell {\n backdrop: HTMLElement\n frame: HTMLElement\n header: HTMLElement\n backBtn: HTMLButtonElement\n logo: HTMLElement\n searchIcon: HTMLElement\n headerTitle: HTMLElement\n searchInput: HTMLInputElement\n hostContainer: HTMLElement\n footerLeft: HTMLElement\n footerRight: HTMLElement\n actionsPopup: ActionsPopupHandle\n destroy(): void\n}\n\nexport function createStackShell(\n container: HTMLElement,\n callbacks: StackShellCallbacks,\n opts?: { shortcut?: PaletteShortcut }\n): StackShell {\n const backdrop = document.createElement(\"div\")\n backdrop.setAttribute(\"data-uidex-view-backdrop\", \"\")\n backdrop.className = BACKDROP_CLASS\n backdrop.style.zIndex = String(Z_CHROME)\n\n const frame = document.createElement(\"div\")\n frame.setAttribute(\"data-uidex-view-stack-frame\", \"\")\n frame.className = FRAME_CLASS\n\n const header = document.createElement(\"header\")\n header.setAttribute(\"data-uidex-view-stack-header\", \"\")\n header.className = HEADER_CLASS\n\n const backBtn = document.createElement(\"button\")\n backBtn.setAttribute(\"type\", \"button\")\n backBtn.setAttribute(\"data-uidex-view-stack-back\", \"\")\n backBtn.setAttribute(\"aria-label\", \"Back\")\n backBtn.className = BACK_BUTTON_CLASS\n const backIcon = createLucideElement(ArrowLeft)\n backIcon.setAttribute(\"aria-hidden\", \"true\")\n backIcon.setAttribute(\"class\", BACK_ICON_CLASS)\n backBtn.append(backIcon)\n backBtn.hidden = true\n const onBackClick = () => callbacks.onBack()\n backBtn.addEventListener(\"click\", onBackClick)\n\n const logo = createUidexLogo()\n logo.setAttribute(\"data-uidex-view-stack-footer-logo\", \"\")\n const searchIcon = createSearchIcon()\n\n const searchInput = document.createElement(\"input\")\n searchInput.setAttribute(\"type\", \"text\")\n searchInput.setAttribute(\"data-uidex-search-input\", \"\")\n searchInput.setAttribute(\"placeholder\", \"Search for command...\")\n searchInput.className = SEARCH_INPUT_CLASS\n const onSearchInput = () => callbacks.onSearchInput(searchInput.value)\n searchInput.addEventListener(\"input\", onSearchInput)\n\n const headerTitle = document.createElement(\"div\")\n headerTitle.setAttribute(\"data-uidex-view-stack-title\", \"\")\n headerTitle.className = HEADER_TITLE_CLASS\n headerTitle.hidden = true\n\n const searchWrap = document.createElement(\"div\")\n searchWrap.setAttribute(\"data-uidex-view-stack-search\", \"\")\n searchWrap.className = SEARCH_WRAPPER_CLASS\n searchWrap.append(backBtn, searchIcon, searchInput, headerTitle)\n header.append(searchWrap)\n\n const hostContainer = document.createElement(\"div\")\n hostContainer.setAttribute(\"data-uidex-view-stack-hosts\", \"\")\n hostContainer.className = HOST_CONTAINER_CLASS\n\n const footer = document.createElement(\"footer\")\n footer.setAttribute(\"data-uidex-view-stack-footer\", \"\")\n footer.className = FOOTER_CLASS\n\n const footerLeft = document.createElement(\"div\")\n footerLeft.setAttribute(\"data-uidex-view-stack-footer-left\", \"\")\n footerLeft.className = FOOTER_SIDE_CLASS\n\n const footerRight = document.createElement(\"div\")\n footerRight.setAttribute(\"data-uidex-view-stack-footer-right\", \"\")\n footerRight.className = FOOTER_SIDE_CLASS\n\n footer.append(footerLeft, footerRight)\n\n const actionsPopup = createActionsPopup({\n onOpenChange: (open) => {\n hostContainer.style.pointerEvents = open ? \"none\" : \"\"\n if (!open)\n requestAnimationFrame(() => searchInput.focus({ preventScroll: true }))\n },\n })\n\n frame.append(header, hostContainer, footer, actionsPopup.element)\n\n const viewport = document.createElement(\"div\")\n viewport.setAttribute(\"data-uidex-view-viewport\", \"\")\n viewport.className = VIEWPORT_CLASS\n viewport.style.zIndex = String(Z_CHROME)\n viewport.append(frame)\n const onViewportClick = (e: MouseEvent) => {\n if (e.target === viewport) callbacks.onBackdropClick()\n }\n viewport.addEventListener(\"click\", onViewportClick)\n\n container.append(backdrop, viewport)\n\n return {\n backdrop,\n frame,\n header,\n backBtn,\n logo,\n searchIcon,\n headerTitle,\n searchInput,\n hostContainer,\n footerLeft,\n footerRight,\n actionsPopup,\n destroy() {\n backBtn.removeEventListener(\"click\", onBackClick)\n viewport.removeEventListener(\"click\", onViewportClick)\n searchInput.removeEventListener(\"input\", onSearchInput)\n actionsPopup.destroy()\n viewport.remove()\n backdrop.remove()\n },\n }\n}\n\nfunction createSearchIcon(): HTMLElement {\n const wrap = document.createElement(\"span\")\n wrap.setAttribute(\"data-uidex-view-stack-search-icon\", \"\")\n wrap.setAttribute(\"aria-hidden\", \"true\")\n wrap.className = SEARCH_ICON_WRAP_CLASS\n const icon = createLucideElement(Search)\n icon.setAttribute(\"aria-hidden\", \"true\")\n icon.setAttribute(\"class\", SEARCH_ICON_CLASS)\n wrap.append(icon)\n return wrap\n}\n\nfunction createUidexLogo(): HTMLElement {\n const wrap = document.createElement(\"span\")\n wrap.setAttribute(\"data-uidex-view-stack-logo\", \"\")\n wrap.setAttribute(\"aria-hidden\", \"true\")\n wrap.className = LOGO_CLASS\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\")\n svg.setAttribute(\"viewBox\", \"0 0 30 36\")\n svg.setAttribute(\"fill\", \"currentColor\")\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"class\", LOGO_ICON_CLASS)\n const back = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\")\n back.setAttribute(\"x\", \"1\")\n back.setAttribute(\"y\", \"5\")\n back.setAttribute(\"width\", \"22\")\n back.setAttribute(\"height\", \"28\")\n back.setAttribute(\"rx\", \"3\")\n back.setAttribute(\"fill\", \"currentColor\")\n back.setAttribute(\"opacity\", \"0.18\")\n back.setAttribute(\"transform\", \"rotate(-6, 12, 19)\")\n const front = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\")\n front.setAttribute(\"x\", \"7\")\n front.setAttribute(\"y\", \"1\")\n front.setAttribute(\"width\", \"22\")\n front.setAttribute(\"height\", \"28\")\n front.setAttribute(\"rx\", \"3\")\n front.setAttribute(\"fill\", \"currentColor\")\n svg.append(back, front)\n wrap.append(svg)\n return wrap\n}\n\nexport function createHint(key: string, label: string): HTMLElement {\n const wrap = document.createElement(\"span\")\n wrap.className = HINT_CLASS\n const text = document.createElement(\"span\")\n text.textContent = label\n const kbd = createKbd({ text: key })\n wrap.append(text, kbd)\n return wrap\n}\n\nexport function createFooterDivider(): HTMLElement {\n const sep = document.createElement(\"span\")\n sep.setAttribute(\"aria-hidden\", \"true\")\n sep.className = \"mx-1 h-4 w-px bg-border\"\n return sep\n}\n\nexport interface FooterHintButton {\n element: HTMLButtonElement\n setLabel(label: string): void\n}\n\nexport function createFooterHintButton(\n key: string,\n label: string,\n onClick: () => void\n): FooterHintButton {\n const btn = document.createElement(\"button\")\n btn.setAttribute(\"type\", \"button\")\n btn.setAttribute(\"aria-label\", label)\n btn.className = ACTIONS_TRIGGER_CLASS\n const text = document.createElement(\"span\")\n text.textContent = label\n const kbd = createKbd({ text: key })\n btn.append(text, kbd)\n btn.addEventListener(\"click\", onClick)\n return {\n element: btn,\n setLabel(next: string) {\n text.textContent = next\n btn.setAttribute(\"aria-label\", next)\n },\n }\n}\n","import * as menu from \"@zag-js/menu\"\nimport { createMachineHandle, type MachineHandle } from \"./machine\"\nimport { normalizeProps, type DomProps } from \"./normalize\"\n\nexport type MenuProps = menu.Props\nexport type MenuApi = menu.Api<DomProps>\nexport type MenuHandle = MachineHandle<MenuApi>\n\nexport function createMenu(props: Partial<MenuProps> = {}): MenuHandle {\n return createMachineHandle(menu.machine, menu.connect, normalizeProps, props)\n}\n\nexport { menu }\n","import { cn } from \"../internal/cn\"\nimport { composeCleanups, type Cleanup } from \"../internal/cleanup\"\nimport { el } from \"../internal/el\"\nimport { createMenu as createMenuMachine, menu } from \"../machines/menu\"\nimport { createPersistentSpreads } from \"../views/builder/spread-props\"\nimport { createCommandShortcut } from \"./kbd\"\nimport { LIST_GROUP_LABEL_CLASS } from \"./list-item\"\n\nexport const MENU_POPUP_CLASS =\n \"bg-popover shadow-lg/5 not-dark:bg-clip-padding relative flex min-w-32 rounded-lg border outline-none before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] focus:outline-none dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\"\n\nexport const MENU_LIST_CLASS = \"flex flex-col p-1\"\n\nexport const MENU_ITEM_CLASS =\n \"text-foreground data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-64 flex min-h-7 cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-sm outline-none [&>svg:not([class*='size-'])]:size-4 [&>svg:not([class*='opacity-'])]:opacity-80 [&>svg]:pointer-events-none [&>svg]:-mx-0.5 [&>svg]:shrink-0\"\n\nexport const MENU_GROUP_LABEL_CLASS = LIST_GROUP_LABEL_CLASS\n\nexport const MENU_SEPARATOR_CLASS = \"bg-border mx-2 my-1 h-px\"\n\nexport interface MenuItemDescriptor {\n id: string\n label: string\n shortcut?: string\n disabled?: boolean\n leading?: Node | null\n trailing?: Node | null\n onSelect?: () => void\n}\n\nexport interface CreateUiMenuOptions {\n id?: string\n getRootNode?: () => ShadowRoot | Document\n items: MenuItemDescriptor[]\n label?: string\n ariaLabel?: string\n onSelect?(itemId: string): void\n}\n\nexport interface UiMenuHandle {\n /** Popup root; caller positions this inside its own container. */\n readonly popup: HTMLElement\n /** The ul element carrying item rows. */\n readonly list: HTMLElement\n open(): void\n close(): void\n isOpen(): boolean\n /** Forward a keydown from an owned surface (Arrow/Enter/Escape/typeahead). */\n handleKey(e: KeyboardEvent): boolean\n setItems(next: MenuItemDescriptor[]): void\n destroy(): void\n}\n\n// `getPositionerProps` is deliberately skipped so callers own absolute\n// positioning inside their own containers (the palette shell frame, etc.).\nexport function createUiMenu(options: CreateUiMenuOptions): UiMenuHandle {\n let items = options.items\n const spreads = createPersistentSpreads()\n let lastKey = \"\"\n let rowByValue = new Map<string, HTMLElement>()\n const cleanups: Cleanup[] = []\n\n const popup = el(\"div\", {\n class: cn(MENU_POPUP_CLASS, \"hidden\"),\n attrs: { \"data-uidex-primitive\": \"menu\", \"data-slot\": \"menu-popup\" },\n })\n\n const list = el(\"ul\", {\n class: MENU_LIST_CLASS,\n attrs: {\n role: \"menu\",\n \"aria-label\": options.ariaLabel ?? options.label ?? \"Menu\",\n \"data-slot\": \"menu-list\",\n },\n })\n\n popup.append(list)\n\n const handle = createMenuMachine({\n id: options.id,\n getRootNode: options.getRootNode,\n closeOnSelect: true,\n onSelect: (details) => {\n const picked = items.find((it) => it.id === details.value)\n picked?.onSelect?.()\n options.onSelect?.(details.value)\n },\n onOpenChange: ({ open }) => {\n popup.classList.toggle(\"hidden\", !open)\n },\n })\n\n function rebuild(): void {\n spreads.cleanupAll()\n list.replaceChildren()\n rowByValue = new Map()\n for (const item of items) {\n const row = el(\"li\", {\n class: MENU_ITEM_CLASS,\n attrs: {\n \"data-slot\": \"menu-item\",\n \"data-uidex-menu-item\": item.id,\n },\n })\n if (item.leading) row.append(item.leading)\n const label = el(\"span\", {\n class: \"flex-1 truncate\",\n text: item.label,\n })\n row.append(label)\n if (item.trailing) row.append(item.trailing)\n else if (item.shortcut) {\n row.append(createCommandShortcut({ text: item.shortcut }))\n }\n rowByValue.set(item.id, row)\n list.append(row)\n }\n lastKey = items.map((i) => i.id).join(\"\\x00\")\n }\n\n function applyProps(): void {\n const api = handle.api()\n spreads.apply(list, api.getContentProps() as Record<string, unknown>)\n for (const item of items) {\n const row = rowByValue.get(item.id)\n if (!row) continue\n spreads.apply(\n row,\n api.getItemProps({\n value: item.id,\n valueText: item.label,\n disabled: item.disabled ?? false,\n }) as Record<string, unknown>\n )\n }\n }\n\n function tick(): void {\n const wantKey = items.map((i) => i.id).join(\"\\x00\")\n if (wantKey !== lastKey) rebuild()\n applyProps()\n }\n\n rebuild()\n applyProps()\n\n const unsub = handle.runner.subscribe(tick)\n cleanups.push(unsub)\n\n function nextId(currentId: string | null, delta: number): string | null {\n if (items.length === 0) return null\n if (!currentId) {\n return delta > 0 ? items[0].id : items[items.length - 1].id\n }\n const idx = items.findIndex((it) => it.id === currentId)\n if (idx === -1) return items[0].id\n const next = (idx + delta + items.length) % items.length\n return items[next].id\n }\n\n function runHighlighted(): void {\n const api = handle.api()\n const cur = api.highlightedValue\n if (!cur) return\n const item = items.find((it) => it.id === cur)\n if (!item || item.disabled) return\n item.onSelect?.()\n options.onSelect?.(cur)\n api.setOpen(false)\n }\n\n function handleKey(e: KeyboardEvent): boolean {\n const api = handle.api()\n if (!api.open) return false\n switch (e.key) {\n case \"ArrowDown\": {\n const next = nextId(api.highlightedValue, 1)\n if (next) api.setHighlightedValue(next)\n return true\n }\n case \"ArrowUp\": {\n const next = nextId(api.highlightedValue, -1)\n if (next) api.setHighlightedValue(next)\n return true\n }\n case \"Home\": {\n if (items[0]) api.setHighlightedValue(items[0].id)\n return true\n }\n case \"End\": {\n const last = items[items.length - 1]\n if (last) api.setHighlightedValue(last.id)\n return true\n }\n case \"Enter\":\n runHighlighted()\n return true\n case \"Escape\":\n api.setOpen(false)\n return true\n default:\n return false\n }\n }\n\n return {\n popup,\n list,\n open: () => handle.api().setOpen(true),\n close: () => handle.api().setOpen(false),\n isOpen: () => handle.api().open,\n handleKey,\n setItems(next) {\n const wantKey = next.map((i) => i.id).join(\"\\x00\")\n items = next\n if (wantKey === lastKey) return\n rebuild()\n applyProps()\n },\n destroy: () => {\n composeCleanups(cleanups)()\n spreads.cleanupAll()\n handle.destroy()\n popup.remove()\n },\n }\n}\n\nexport { menu as menuMachine }\n","import { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport {\n createMenu as createMenuMachine,\n type MenuApi,\n} from \"../../machines/menu\"\nimport { createPersistentSpreads } from \"../builder/spread-props\"\nimport {\n ACTIONS_SHORTCUT,\n formatShortcutLabel,\n type PaletteShortcut,\n} from \"../../surface/keys\"\nimport { createKbd } from \"../../ui/kbd\"\nimport { LIST_ITEM_CLASS, LIST_ITEM_STATE_CLASS } from \"../../ui/list-item\"\nimport {\n MENU_LIST_CLASS,\n MENU_POPUP_CLASS,\n type MenuItemDescriptor,\n} from \"../../ui/menu\"\nimport { createIconTile } from \"../primitives/icon-tile\"\nimport { fillRow } from \"../primitives/row\"\nimport type { ShellAction } from \"./types\"\n\nconst TRIGGER_CLASS =\n \"inline-flex shrink-0 cursor-pointer items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n\nexport interface ActionsPopupHandle {\n readonly trigger: HTMLButtonElement\n readonly element: HTMLElement\n setActions(actions: ShellAction[]): void\n open(): void\n close(): void\n isOpen(): boolean\n destroy(): void\n}\n\nfunction toDescriptors(actions: ShellAction[]): MenuItemDescriptor[] {\n return actions.map((action) => ({\n id: action.id,\n label: action.label,\n shortcut: action.shortcut,\n leading: action.icon?.() ?? null,\n trailing: action.shortcut ? createKbd({ text: action.shortcut }) : null,\n onSelect: () => void action.perform(),\n }))\n}\n\nfunction itemsKey(items: readonly MenuItemDescriptor[]): string {\n return items.map((i) => i.id).join(\"\\x00\")\n}\n\nexport function createActionsPopup(opts?: {\n shortcut?: PaletteShortcut\n onOpenChange?: (open: boolean) => void\n}): ActionsPopupHandle {\n let items: MenuItemDescriptor[] = []\n const spreads = createPersistentSpreads()\n let lastKey = \"\"\n let rowByValue = new Map<string, HTMLElement>()\n const cleanups: Cleanup[] = []\n\n const trigger = document.createElement(\"button\")\n trigger.setAttribute(\"type\", \"button\")\n trigger.setAttribute(\"data-uidex-actions-trigger\", \"\")\n trigger.className = TRIGGER_CLASS\n const triggerText = document.createElement(\"span\")\n triggerText.textContent = \"Actions\"\n const triggerKbd = createKbd({\n text: formatShortcutLabel(opts?.shortcut ?? ACTIONS_SHORTCUT),\n })\n trigger.append(triggerText, triggerKbd)\n\n const positioner = el(\"div\", {\n attrs: { \"data-slot\": \"menu-positioner\" },\n })\n\n const popup = el(\"div\", {\n class: `${MENU_POPUP_CLASS} w-56`,\n attrs: { \"data-uidex-primitive\": \"menu\", \"data-slot\": \"menu-popup\" },\n })\n\n const list = el(\"ul\", {\n class: `${MENU_LIST_CLASS} w-full`,\n attrs: {\n role: \"menu\",\n \"aria-label\": \"Actions\",\n \"data-slot\": \"menu-list\",\n },\n })\n\n popup.append(list)\n positioner.append(popup)\n\n const handle = createMenuMachine({\n getRootNode: () => {\n const rn = positioner.getRootNode()\n if (rn instanceof ShadowRoot || rn instanceof Document) return rn\n return positioner.ownerDocument ?? document\n },\n closeOnSelect: true,\n positioning: {\n placement: \"top-end\",\n gutter: 4,\n },\n onOpenChange: ({ open }: { open: boolean }) => opts?.onOpenChange?.(open),\n onSelect: (details: { value: string }) => {\n const picked = items.find((it) => it.id === details.value)\n picked?.onSelect?.()\n },\n })\n\n function rebuild(key: string): void {\n spreads.cleanupAll()\n list.replaceChildren()\n rowByValue = new Map()\n for (const item of items) {\n const row = el(\"li\", {\n class: cn(LIST_ITEM_CLASS, LIST_ITEM_STATE_CLASS),\n attrs: {\n \"data-slot\": \"menu-item\",\n \"data-uidex-menu-item\": item.id,\n },\n })\n const leading = item.leading ? createIconTile(item.leading) : null\n fillRow(row, {\n leading,\n label: item.label,\n trailing: item.shortcut ?? item.trailing ?? null,\n })\n rowByValue.set(item.id, row)\n list.append(row)\n }\n lastKey = key\n }\n\n function applyProps(): void {\n const api: MenuApi = handle.api()\n spreads.apply(trigger, api.getTriggerProps() as Record<string, unknown>)\n spreads.apply(\n positioner,\n api.getPositionerProps() as Record<string, unknown>\n )\n spreads.apply(popup, api.getContentProps() as Record<string, unknown>)\n for (const item of items) {\n const row = rowByValue.get(item.id)\n if (!row) continue\n spreads.apply(\n row,\n api.getItemProps({\n value: item.id,\n valueText: item.label,\n disabled: item.disabled ?? false,\n }) as Record<string, unknown>\n )\n }\n }\n\n function tick(): void {\n const key = itemsKey(items)\n if (key !== lastKey) rebuild(key)\n applyProps()\n }\n\n rebuild(itemsKey(items))\n applyProps()\n\n const unsub = handle.runner.subscribe(tick)\n cleanups.push(unsub)\n\n return {\n trigger,\n element: positioner,\n setActions(actions) {\n items = toDescriptors(actions)\n const key = itemsKey(items)\n if (key === lastKey) return\n rebuild(key)\n applyProps()\n },\n open: () => handle.api().setOpen(true),\n close: () => handle.api().setOpen(false),\n isOpen: () => handle.api().open,\n destroy: () => {\n composeCleanups(cleanups)()\n spreads.cleanupAll()\n handle.destroy()\n positioner.remove()\n },\n }\n}\n","import { KIND_STYLE, type Registry } from \"../../entities\"\nimport { detectDev } from \"../../internal/dev\"\nimport type { SessionStore } from \"../../session\"\nimport type { PaletteShortcut } from \"../../surface/keys\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport { renderKindChip } from \"../primitives/kind-chip\"\nimport type { ActionsPopupHandle } from \"./actions-popup\"\nimport {\n cleanupMountedEntry,\n mountEntry,\n setEntryVisibility,\n type MountedEntry,\n} from \"./mount\"\nimport type { ViewRegistrar } from \"./registry\"\nimport {\n createFooterDivider,\n createFooterHintButton,\n createHint,\n createStackShell,\n type StackShell,\n} from \"./shell\"\nimport type {\n CloudAdapter,\n HighlightController,\n ShellAction,\n ShellHint,\n View,\n ViewContext,\n} from \"./types\"\n\nconst SOFT_STACK_CAP = 10\n\nexport interface ViewStackOptions {\n container: HTMLElement\n views: ViewRegistrar\n session: SessionStore\n registry: Registry\n cloud?: CloudAdapter | null\n sdkCloud: CloudAdapter\n highlight: HighlightController\n globalActions?: (ctx: ViewContext) => ShellAction[]\n shortcut?: PaletteShortcut\n dev?: boolean\n}\n\nexport interface ViewStack {\n /**\n * The actions popup belonging to the currently mounted stack shell, or\n * `null` when the shell is not mounted. Exposed so the unified shadow-root\n * keydown handler can intercept keys while the popup is open.\n */\n getActionsPopup(): ActionsPopupHandle | null\n destroy(): void\n}\n\nfunction resolveViewFocusTarget(entry: MountedEntry): HTMLElement | null {\n const fn = entry.view.focusTarget\n if (!fn) return null\n try {\n const target = fn(entry.host, entry.ctx)\n if (target && entry.host.contains(target)) return target\n } catch (err) {\n console.error(`[uidex] view \"${entry.view.id}\" focusTarget() threw`, err)\n }\n return null\n}\n\nfunction focusTopAfterChange(\n entry: MountedEntry,\n searchInput: HTMLInputElement\n): void {\n const preferred = resolveViewFocusTarget(entry)\n const target =\n preferred && preferred !== searchInput ? preferred : searchInput\n const focus = () => {\n try {\n target.focus({ preventScroll: true })\n } catch {\n /* ignore */\n }\n }\n focus()\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(focus)\n }\n}\n\nfunction sameRef(a: MountedEntry[\"ref\"], b: MountedEntry[\"ref\"]): boolean {\n if (a === b) return true\n if (a === null || b === null) return false\n return a.kind === b.kind && a.id === b.id\n}\n\nfunction resolveHints(view: View, ctx: ViewContext): ShellHint[] {\n const h = view.hints\n if (!h) return []\n if (typeof h === \"function\") {\n try {\n return h(ctx) ?? []\n } catch (err) {\n console.error(`[uidex] view \"${view.id}\" hints() threw`, err)\n return []\n }\n }\n return h\n}\n\nfunction resolveTitle(view: View, ctx: ViewContext): string {\n const t = view.title\n if (!t) return \"\"\n if (typeof t === \"function\") {\n try {\n return t(ctx) ?? \"\"\n } catch (err) {\n console.error(`[uidex] view \"${view.id}\" title() threw`, err)\n return \"\"\n }\n }\n return t\n}\n\nfunction resolveActions(\n view: View,\n ctx: ViewContext,\n globalActions?: (ctx: ViewContext) => ShellAction[]\n): ShellAction[] {\n const result: ShellAction[] = []\n const fn = view.actions\n if (fn) {\n try {\n const viewActions = fn(ctx) ?? []\n result.push(...viewActions)\n } catch (err) {\n console.error(`[uidex] view \"${view.id}\" actions() threw`, err)\n }\n }\n if (globalActions) {\n try {\n const globals = globalActions(ctx) ?? []\n result.push(...globals)\n } catch (err) {\n console.error(`[uidex] globalActions() threw`, err)\n }\n }\n return result\n}\n\nexport function createViewStack(options: ViewStackOptions): ViewStack {\n const { container, views, session, registry, highlight, sdkCloud } = options\n const cloud = options.cloud ?? null\n const dev = options.dev ?? detectDev()\n\n const mounted: MountedEntry[] = []\n\n let shell: StackShell | null = null\n let warnedForDepth = 0\n let lastStack: readonly ViewStackEntry[] | null = null\n let pendingFallbackQuery: string | null = null\n let scrollAreaSeq = 0\n let hintChangeSub: (() => void) | null = null\n let highlightActionsSub: (() => void) | null = null\n\n function ensureShell(): StackShell {\n if (shell) return shell\n shell = createStackShell(\n container,\n {\n onBack: () => {\n const { actions, stack } = session.getState()\n if (stack.length <= 1) {\n actions.clearStack()\n actions.pushStack({ id: \"command-palette\", ref: null })\n } else {\n actions.popStack()\n }\n },\n onBackdropClick: () => session.getState().actions.clearStack(),\n onSearchInput: (value) => {\n const top = mounted[mounted.length - 1]\n if (!top) return\n if (top.mounted.onSearch) {\n top.mounted.onSearch(value)\n return\n }\n if (top.view.id === \"command-palette\") return\n pendingFallbackQuery = value\n session\n .getState()\n .actions.pushStack({ id: \"command-palette\", ref: null })\n },\n },\n { shortcut: options.shortcut }\n )\n return shell\n }\n\n function destroyShell(): void {\n hintChangeSub?.()\n hintChangeSub = null\n highlightActionsSub?.()\n highlightActionsSub = null\n shell?.destroy()\n shell = null\n pendingFallbackQuery = null\n }\n\n function syncHighlight(): void {\n const top = mounted[mounted.length - 1]\n if (!top || !top.view.matches || !top.ctx.ref) {\n highlight.hide()\n return\n }\n highlight.show(top.ctx.ref, {\n color: KIND_STYLE[top.ctx.ref.kind].color,\n })\n }\n\n function updateChrome(): void {\n if (!shell) return\n const top = mounted[mounted.length - 1]\n if (!top) return\n\n const atRoot = mounted.length <= 1 && top.view.id === \"command-palette\"\n shell.backBtn.hidden = atRoot\n shell.searchIcon.hidden = !atRoot\n\n const searchable = top.view.searchable !== false\n shell.searchInput.hidden = !searchable\n const titleText = searchable ? \"\" : resolveTitle(top.view, top.ctx)\n shell.headerTitle.textContent = titleText\n shell.headerTitle.hidden = searchable || !titleText\n\n shell.footerLeft.replaceChildren()\n const refEntity = top.ctx.ref\n ? top.ctx.registry.get(top.ctx.ref.kind, top.ctx.ref.id)\n : null\n if (refEntity) {\n shell.footerLeft.append(\n renderKindChip({\n entity: refEntity,\n withKindName: true,\n })\n )\n } else {\n shell.footerLeft.append(shell.logo)\n }\n\n hintChangeSub?.()\n hintChangeSub = null\n highlightActionsSub?.()\n highlightActionsSub = null\n\n shell.footerRight.replaceChildren()\n const footerItems: HTMLElement[] = []\n\n const enterHint = resolveHints(top.view, top.ctx).find((h) =>\n h.key.includes(\"↵\")\n )\n const src = top.mounted.submitIntent\n if (src) {\n const key = enterHint?.key ?? \"↵\"\n const intent = src.get()\n const fallbackLabel = enterHint?.label ?? \"Open\"\n const hint = createFooterHintButton(\n key,\n intent?.label ?? fallbackLabel,\n () => src.get()?.perform()\n )\n footerItems.push(hint.element)\n hintChangeSub = src.subscribe(() => {\n const next = src.get()\n hint.setLabel(next?.label ?? fallbackLabel)\n })\n } else if (enterHint) {\n footerItems.push(createHint(enterHint.key, enterHint.label))\n }\n\n const actionsDivider = createFooterDivider()\n const viewActions = resolveActions(top.view, top.ctx)\n const hlSrc = top.mounted.highlightActions\n\n const syncActions = (): void => {\n const hlActions = hlSrc?.get() ?? []\n const combined = [...hlActions, ...viewActions]\n shell!.actionsPopup.setActions(combined)\n const visible = combined.length > 0\n shell!.actionsPopup.trigger.hidden = !visible\n actionsDivider.hidden = !visible || footerItems.length === 0\n }\n\n if (hlSrc) {\n highlightActionsSub = hlSrc.subscribe(syncActions)\n }\n\n for (let i = 0; i < footerItems.length; i++) {\n if (i > 0) shell.footerRight.append(createFooterDivider())\n shell.footerRight.append(footerItems[i])\n }\n shell.footerRight.append(actionsDivider)\n shell.footerRight.append(shell.actionsPopup.trigger)\n syncActions()\n }\n\n function render(): void {\n const stack = session.getState().stack\n if (stack === lastStack) return\n lastStack = stack\n\n if (dev && stack.length > SOFT_STACK_CAP && stack.length > warnedForDepth) {\n console.warn(\n `[uidex] View stack depth ${stack.length} exceeds soft cap of ${SOFT_STACK_CAP}`\n )\n warnedForDepth = stack.length\n }\n if (stack.length <= SOFT_STACK_CAP) warnedForDepth = 0\n\n const resolved: Array<{ entry: ViewStackEntry; view: View }> = []\n for (const entry of stack) {\n const view = views.get(entry.id)\n if (view) resolved.push({ entry, view })\n }\n\n const priorTop = mounted[mounted.length - 1] ?? null\n\n let commonPrefix = 0\n while (\n commonPrefix < resolved.length &&\n commonPrefix < mounted.length &&\n mounted[commonPrefix].id === resolved[commonPrefix].view.id &&\n sameRef(mounted[commonPrefix].ref, resolved[commonPrefix].entry.ref)\n ) {\n commonPrefix++\n }\n\n const popped = mounted.splice(commonPrefix)\n for (let i = popped.length - 1; i >= 0; i--) {\n cleanupMountedEntry(popped[i])\n }\n\n if (resolved.length > commonPrefix) {\n const active = ensureShell()\n for (let i = commonPrefix; i < resolved.length; i++) {\n const record = mountEntry(resolved[i].entry, resolved[i].view, {\n container: active.hostContainer,\n searchInput: active.searchInput,\n views,\n session,\n registry,\n cloud,\n sdkCloud,\n highlight,\n nextScrollSeq: () => ++scrollAreaSeq,\n })\n if (record) mounted.push(record)\n }\n }\n\n if (shell?.actionsPopup.isOpen() && popped.length > 0) {\n shell.actionsPopup.close()\n }\n\n if (mounted.length === 0) {\n destroyShell()\n highlight.hide()\n return\n }\n const topIndex = mounted.length - 1\n for (let i = 0; i < mounted.length; i++) {\n setEntryVisibility(mounted[i], i === topIndex)\n }\n updateChrome()\n syncHighlight()\n\n const newTop = mounted[topIndex]\n if (newTop !== priorTop && shell) {\n const fallbackQuery = pendingFallbackQuery\n pendingFallbackQuery = null\n const initialQuery = fallbackQuery ?? \"\"\n if (fallbackQuery === null) {\n shell.searchInput.value = \"\"\n }\n try {\n newTop.mounted.onSearch?.(initialQuery)\n } catch (err) {\n console.error(`[uidex] view \"${newTop.view.id}\" onSearch threw`, err)\n }\n focusTopAfterChange(newTop, shell.searchInput)\n }\n }\n\n render()\n const unsubscribe = session.subscribe(render)\n\n return {\n getActionsPopup() {\n return shell?.actionsPopup ?? null\n },\n destroy() {\n unsubscribe()\n while (mounted.length > 0) {\n const entry = mounted.pop()!\n cleanupMountedEntry(entry)\n }\n destroyShell()\n highlight.hide()\n },\n }\n}\n","export const BUILT_IN_VIEW_IDS = {\n commandPalette: \"command-palette\",\n elements: \"elements\",\n explorePage: \"explore-page\",\n features: \"features\",\n feedback: \"feedback\",\n flows: \"flows\",\n glossary: \"glossary\",\n jiraFeedback: \"jira-feedback\",\n pages: \"pages\",\n primitives: \"primitives\",\n regions: \"regions\",\n sdkFeedback: \"sdk-feedback\",\n widgets: \"widgets\",\n} as const\n","import {\n Compass,\n Copy,\n ExternalLink,\n MessageCircleWarning,\n Star,\n StarOff,\n TicketPlus,\n Workflow,\n createElement as createLucideElement,\n} from \"lucide\"\nimport {\n displayName,\n KIND_STYLE,\n type Entity,\n type EntityKind,\n type EntityRef,\n type Page,\n} from \"../../entities\"\nimport { formatShortcutLabel, type PaletteShortcut } from \"../../surface/keys\"\nimport { matchesQuery } from \"../builder/filter\"\nimport { formatLocation } from \"../builder/format-location\"\nimport { buildPageRouteMap, collectPageContext } from \"../builder/page-context\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type {\n CloudAdapter,\n ShellAction,\n View,\n ViewContext,\n} from \"../core/types\"\nimport { PALETTE_GROUPS } from \"../labels\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\ntype PaletteItemPayload =\n | { type: \"view\"; id: string; ref?: EntityRef | null }\n | { type: \"entity\"; ref: EntityRef }\n\ninterface PaletteItem extends ListItem {\n payload: PaletteItemPayload\n}\n\nfunction openAction(onSelect: () => void): ShellAction {\n return {\n id: \"open\",\n label: \"Open\",\n icon: () => createLucideElement(ExternalLink),\n perform: onSelect,\n }\n}\n\nfunction favoriteAction(ref: EntityRef, ctx: ViewContext): ShellAction {\n const isFav = ctx.isFavorite(ref)\n return {\n id: \"toggle-favorite\",\n label: isFav ? \"Remove from Favorites\" : \"Add to Favorites\",\n shortcut: \"⇧⌘F\",\n icon: () => createLucideElement(isFav ? StarOff : Star),\n perform: () => {\n ctx.toggleFavorite(ref)\n ctx.close()\n ctx.push({ id: BUILT_IN_VIEW_IDS.commandPalette, ref: null })\n },\n }\n}\n\nfunction entityActions(\n ref: EntityRef,\n entity: Entity | undefined,\n ctx: ViewContext,\n onSelect: () => void\n): ShellAction[] {\n const actions: ShellAction[] = [openAction(onSelect)]\n if (entity && \"loc\" in entity && entity.loc) {\n const path = formatLocation(entity.loc)\n if (path) {\n actions.push({\n id: \"copy-path\",\n label: \"Copy Source Path\",\n icon: () => createLucideElement(Copy),\n perform: () => void navigator.clipboard.writeText(path),\n })\n }\n }\n actions.push({\n id: \"report-feedback\",\n label: \"Submit Report\",\n icon: () => createLucideElement(MessageCircleWarning),\n perform: () => ctx.push({ id: BUILT_IN_VIEW_IDS.feedback, ref }),\n })\n if (\n (ctx.cloud as CloudAdapter | null)?.integrations.getCachedConfig()?.hasJira\n ) {\n actions.push({\n id: \"create-jira-issue\",\n label: \"Submit Jira Bug\",\n icon: () => createLucideElement(TicketPlus),\n perform: () => ctx.push({ id: BUILT_IN_VIEW_IDS.jiraFeedback, ref }),\n })\n }\n actions.push(favoriteAction(ref, ctx))\n return actions\n}\n\nfunction viewActions(onSelect: () => void): ShellAction[] {\n return [openAction(onSelect)]\n}\n\nconst CURRENT_PAGE_GROUP = PALETTE_GROUPS.currentPage\n\nfunction pageDetailsRow(\n page: Page,\n pageRoutes: ReadonlyMap<string, string>,\n ctx: ViewContext\n): PaletteItem {\n const ref: EntityRef = { kind: \"page\", id: page.id }\n const onSelect = () => ctx.navigate(ref)\n const item: PaletteItem = {\n value: `entity:${ref.kind}:${ref.id}`,\n label: displayName(page),\n group: CURRENT_PAGE_GROUP,\n tag: `${ref.kind}:${ref.id}`,\n preview: ref,\n entityChip: { entity: page },\n actions: entityActions(ref, page, ctx, onSelect),\n payload: { type: \"entity\", ref },\n }\n const path = pageRoutes.get(page.id)\n if (path) item.subtitle = path\n return item\n}\n\nfunction explorePageRow(totalOnPage: number, ctx: ViewContext): PaletteItem {\n const onSelect = () =>\n ctx.push({ id: BUILT_IN_VIEW_IDS.explorePage, ref: null })\n return {\n value: `view:${BUILT_IN_VIEW_IDS.explorePage}`,\n label: \"Explore Page\",\n subtitle: totalOnPage === 1 ? \"1 item\" : `${totalOnPage} items`,\n group: CURRENT_PAGE_GROUP,\n tag: BUILT_IN_VIEW_IDS.explorePage,\n leading: () => createLucideElement(Compass),\n actions: viewActions(onSelect),\n payload: { type: \"view\", id: BUILT_IN_VIEW_IDS.explorePage },\n }\n}\n\nfunction flowsRow(count: number, ctx: ViewContext): PaletteItem {\n const onSelect = () => ctx.push({ id: BUILT_IN_VIEW_IDS.flows, ref: null })\n return {\n value: `view:${BUILT_IN_VIEW_IDS.flows}`,\n label: \"Flows\",\n subtitle: String(count),\n group: PALETTE_GROUPS.commands,\n tag: BUILT_IN_VIEW_IDS.flows,\n leading: () => createLucideElement(Workflow),\n actions: viewActions(onSelect),\n payload: { type: \"view\", id: BUILT_IN_VIEW_IDS.flows },\n }\n}\n\nconst ENTITY_KIND_VIEWS: { kind: EntityKind; viewId: string }[] = [\n { kind: \"page\", viewId: BUILT_IN_VIEW_IDS.pages },\n { kind: \"feature\", viewId: BUILT_IN_VIEW_IDS.features },\n { kind: \"widget\", viewId: BUILT_IN_VIEW_IDS.widgets },\n { kind: \"region\", viewId: BUILT_IN_VIEW_IDS.regions },\n { kind: \"element\", viewId: BUILT_IN_VIEW_IDS.elements },\n { kind: \"primitive\", viewId: BUILT_IN_VIEW_IDS.primitives },\n]\n\nfunction entityKindRow(\n kind: EntityKind,\n viewId: string,\n count: number,\n ctx: ViewContext\n): PaletteItem {\n const style = KIND_STYLE[kind]\n const onSelect = () => ctx.push({ id: viewId, ref: null })\n const label = style.label + \"s\"\n return {\n value: `view:${viewId}`,\n label,\n subtitle: String(count),\n group: PALETTE_GROUPS.commands,\n tag: viewId,\n leading: () => createLucideElement(style.icon),\n actions: viewActions(onSelect),\n payload: { type: \"view\", id: viewId },\n }\n}\n\nfunction collectNavigation(ctx: ViewContext): PaletteItem[] {\n const out: PaletteItem[] = []\n for (const view of ctx.views.list()) {\n if (view.id === BUILT_IN_VIEW_IDS.commandPalette) continue\n if (view.id === BUILT_IN_VIEW_IDS.explorePage) continue\n if (view.id === BUILT_IN_VIEW_IDS.flows) continue\n if (view.id === BUILT_IN_VIEW_IDS.elements) continue\n if (view.id === BUILT_IN_VIEW_IDS.widgets) continue\n if (view.id === BUILT_IN_VIEW_IDS.regions) continue\n if (view.id === BUILT_IN_VIEW_IDS.pages) continue\n if (view.id === BUILT_IN_VIEW_IDS.features) continue\n if (view.id === BUILT_IN_VIEW_IDS.primitives) continue\n if (!view.palette) continue\n const onSelect = () => ctx.push({ id: view.id, ref: null })\n out.push({\n value: `view:${view.id}`,\n label: view.palette.label,\n group: view.palette.group ?? PALETTE_GROUPS.commands,\n shortcut: view.palette.shortcut,\n tag: view.id,\n leading: view.palette.icon,\n actions: viewActions(onSelect),\n payload: { type: \"view\", id: view.id },\n })\n }\n return out\n}\n\nexport function createCommandPaletteView(shortcut?: PaletteShortcut): View {\n const shortcutLabel = formatShortcutLabel(shortcut ?? { key: \"k\" })\n return {\n id: BUILT_IN_VIEW_IDS.commandPalette,\n palette: { label: \"Command Palette\", shortcut: shortcutLabel },\n title: \"Command Palette\",\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx): ListSurface => {\n const pageCtx = collectPageContext(ctx)\n const pageRoutes = buildPageRouteMap(ctx)\n\n const items: PaletteItem[] = []\n const favSet = new Set(\n ctx.views.favorites().map((r) => `${r.kind}:${r.id}`)\n )\n\n for (const ref of ctx.views.favorites()) {\n if (ref.kind === \"route\") continue\n const entity = ctx.registry.get(ref.kind, ref.id)\n if (!entity) continue\n const style = KIND_STYLE[ref.kind]\n const onSelect = () => ctx.navigate(ref)\n items.push({\n value: `favorite:${ref.kind}:${ref.id}`,\n label: displayName(entity),\n tag: `${ref.kind}:${ref.id}`,\n group: PALETTE_GROUPS.favorites,\n preview: ref,\n entityChip: { entity },\n leading: () => createLucideElement(style.icon),\n actions: entityActions(ref, entity, ctx, onSelect),\n payload: { type: \"entity\", ref },\n })\n }\n\n if (pageCtx.pageEntity) {\n items.push(pageDetailsRow(pageCtx.pageEntity, pageRoutes, ctx))\n }\n\n const onPageCount = pageCtx.composed.length + pageCtx.dom.length\n if (onPageCount > 0) items.push(explorePageRow(onPageCount, ctx))\n\n items.push(...collectNavigation(ctx))\n for (const { kind, viewId } of ENTITY_KIND_VIEWS) {\n const count = ctx.registry.list(kind).length\n if (count > 0) items.push(entityKindRow(kind, viewId, count, ctx))\n }\n const flowCount = ctx.registry.list(\"flow\").length\n if (flowCount > 0) items.push(flowsRow(flowCount, ctx))\n\n const sdkFeedbackSelect = () =>\n ctx.push({ id: BUILT_IN_VIEW_IDS.sdkFeedback, ref: null })\n items.push({\n value: `view:${BUILT_IN_VIEW_IDS.sdkFeedback}`,\n label: \"Send Feedback\",\n group: PALETTE_GROUPS.commands,\n tag: BUILT_IN_VIEW_IDS.sdkFeedback,\n leading: () => createLucideElement(MessageCircleWarning),\n actions: viewActions(sdkFeedbackSelect),\n payload: { type: \"view\", id: BUILT_IN_VIEW_IDS.sdkFeedback },\n })\n\n for (const ref of ctx.views.recents()) {\n if (ref.kind === \"route\") continue\n if (favSet.has(`${ref.kind}:${ref.id}`)) continue\n const entity = ctx.registry.get(ref.kind, ref.id)\n if (!entity) continue\n const style = KIND_STYLE[ref.kind]\n const onSelect = () => ctx.navigate(ref)\n items.push({\n value: `recent:${ref.kind}:${ref.id}`,\n label: displayName(entity),\n tag: `${ref.kind}:${ref.id}`,\n group: PALETTE_GROUPS.recents,\n preview: ref,\n entityChip: { entity },\n leading: () => createLucideElement(style.icon),\n actions: entityActions(ref, entity, ctx, onSelect),\n payload: { type: \"entity\", ref },\n })\n }\n\n const initialHighlight = ctx.ref\n ? `entity:${ctx.ref.kind}:${ctx.ref.id}`\n : undefined\n\n const filter = (item: ListItem, query: string): boolean => {\n const palette = item as PaletteItem\n const rawId =\n palette.payload.type === \"entity\" ? palette.payload.ref.id : \"\"\n return matchesQuery(`${item.label} ${rawId} ${item.group ?? \"\"}`, query)\n }\n\n return {\n kind: \"list\",\n id: \"uidex-command-palette\",\n items,\n defaultHighlight: initialHighlight,\n filter,\n onSelect: (item) => {\n const palette = item as PaletteItem\n if (palette.payload.type === \"view\") {\n ctx.push({\n id: palette.payload.id,\n ref: palette.payload.ref ?? null,\n })\n return\n }\n ctx.navigate(palette.payload.ref)\n },\n }\n },\n }\n}\n","import type { Location } from \"../../entities\"\n\nexport function formatLocation(loc: Location | undefined): string | null {\n if (!loc) return null\n const suffix =\n loc.line !== undefined\n ? loc.column !== undefined\n ? `:${loc.line}:${loc.column}`\n : `:${loc.line}`\n : \"\"\n return `${loc.file}${suffix}`\n}\n","import type { Entity, EntityRef, Page } from \"../../entities\"\nimport {\n SURFACE_IGNORE_SELECTOR,\n UIDEX_ATTR_TO_KIND,\n} from \"../../surface/constants\"\nimport type { ViewContext } from \"../core/types\"\n\nconst ON_THIS_PAGE_SELECTOR = UIDEX_ATTR_TO_KIND.map(\n ([attr]) => `[${attr}]`\n).join(\",\")\n\nfunction routePatternToRegex(pattern: string): RegExp {\n if (pattern === \"/\") return /^\\/$/\n const parts = pattern.split(\"/\").filter(Boolean)\n const regexParts = parts.map((seg) => {\n if (/^\\[\\.{3}[^\\]]+\\]$/.test(seg)) return \".+\"\n if (/^\\[[^\\]]+\\]$/.test(seg)) return \"[^/]+\"\n return seg.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n })\n return new RegExp(`^/${regexParts.join(\"/\")}/?$`)\n}\n\n/** Resolve the page entity for the current URL by walking the registry's routes. */\nexport function findCurrentPageId(ctx: ViewContext): string | null {\n if (typeof location === \"undefined\") return null\n const pathname = location.pathname || \"/\"\n const routes = ctx.registry.list(\"route\")\n let best: { path: string; page: string } | null = null\n for (const route of routes) {\n if (!routePatternToRegex(route.path).test(pathname)) continue\n if (!best || route.path.length > best.path.length) {\n best = { path: route.path, page: route.page }\n }\n }\n return best?.page ?? null\n}\n\n/** First route path per page id, for subtitle rendering in palette rows. */\nexport function buildPageRouteMap(\n ctx: ViewContext\n): ReadonlyMap<string, string> {\n const map = new Map<string, string>()\n for (const route of ctx.registry.list(\"route\")) {\n if (!map.has(route.page)) map.set(route.page, route.path)\n }\n return map\n}\n\nexport interface PageEntityHit {\n entity: Entity\n ref: EntityRef\n /** DOM node that surfaced this entity, if discovered via `data-uidex*` scan. */\n node?: Element | null\n}\n\nexport interface PageContext {\n pageId: string | null\n pageEntity: Page | null\n /** Features / widgets the page entity declares via `uidex.composes`. */\n composed: PageEntityHit[]\n /** Entities discovered by scanning the DOM for `data-uidex*` attributes. */\n dom: PageEntityHit[]\n}\n\n/**\n * Collect the entities relevant to the current page: the page entity itself,\n * its declared composes (features + widgets), and anything discovered via the\n * DOM scan. Dedup by `kind:id`; the page entity always wins over DOM dups.\n */\nexport function collectPageContext(ctx: ViewContext): PageContext {\n const seen = new Set<string>()\n const composed: PageEntityHit[] = []\n const dom: PageEntityHit[] = []\n\n const pageId = findCurrentPageId(ctx)\n const pageEntity = pageId ? (ctx.registry.get(\"page\", pageId) ?? null) : null\n\n if (pageEntity) {\n seen.add(`page:${pageEntity.id}`)\n for (const ref of pageEntity.meta?.composes ?? []) {\n if (ref.kind !== \"feature\" && ref.kind !== \"widget\") continue\n const entity = ctx.registry.get(ref.kind, ref.id)\n if (!entity) continue\n const key = `${ref.kind}:${ref.id}`\n if (seen.has(key)) continue\n seen.add(key)\n composed.push({ entity, ref })\n }\n }\n\n if (typeof document !== \"undefined\") {\n const nodes = document.querySelectorAll<HTMLElement>(ON_THIS_PAGE_SELECTOR)\n for (const node of nodes) {\n if (node.closest(SURFACE_IGNORE_SELECTOR)) continue\n for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {\n const id = node.getAttribute(attr)\n if (!id) continue\n const entity = ctx.registry.get(kind, id)\n if (!entity) continue\n const key = `${kind}:${id}`\n if (seen.has(key)) break\n seen.add(key)\n dom.push({ entity, ref: { kind, id }, node })\n break\n }\n }\n }\n\n return { pageId, pageEntity, composed, dom }\n}\n","import { domToPng } from \"modern-screenshot\"\nimport {\n SURFACE_HOST_CLASS,\n SURFACE_CONTAINER_CLASS,\n} from \"../surface/constants\"\n\nexport interface CaptureScreenshotOptions {\n target?: HTMLElement\n maxWidth?: number\n}\n\nfunction resolveBackgroundColor(el: HTMLElement): string {\n let node: HTMLElement | null = el\n while (node) {\n const bg = getComputedStyle(node).backgroundColor\n if (bg && bg !== \"transparent\" && bg !== \"rgba(0, 0, 0, 0)\") return bg\n node = node.parentElement\n }\n return \"#ffffff\"\n}\n\nfunction isUidexChrome(node: Node): boolean {\n if (node.nodeType !== Node.ELEMENT_NODE) return false\n const el = node as Element\n if (el.shadowRoot !== null) return true\n const cls = el.classList\n return (\n cls.contains(SURFACE_HOST_CLASS) || cls.contains(SURFACE_CONTAINER_CLASS)\n )\n}\n\nexport async function captureScreenshot(\n options: CaptureScreenshotOptions = {}\n): Promise<string> {\n if (typeof document === \"undefined\") {\n throw new Error(\"captureScreenshot: no document available\")\n }\n const target = options.target ?? document.body\n if (!target) throw new Error(\"captureScreenshot: no target\")\n\n const width = target.scrollWidth || target.clientWidth\n const scale =\n options.maxWidth && width > options.maxWidth ? options.maxWidth / width : 1\n\n const padding = 16\n const height = target.scrollHeight || target.clientHeight\n\n return domToPng(target, {\n scale,\n width: width + padding * 2,\n height: height + padding * 2,\n backgroundColor: resolveBackgroundColor(target),\n style: { padding: `${padding}px` },\n filter: (node) => !isUidexChrome(node),\n })\n}\n","export interface FeedbackContextSnapshot {\n url: string\n path: string\n userAgent: string\n pageTitle: string | undefined\n timestamp: string\n viewport: { width: number; height: number }\n screen: { width: number; height: number }\n}\n\nexport function collectFeedbackContextSnapshot(): FeedbackContextSnapshot {\n const nav = typeof navigator !== \"undefined\" ? navigator : undefined\n const loc = typeof location !== \"undefined\" ? location : undefined\n const win = typeof window !== \"undefined\" ? window : undefined\n const doc = typeof document !== \"undefined\" ? document : undefined\n const viewport = {\n width: win?.innerWidth ?? 0,\n height: win?.innerHeight ?? 0,\n }\n const screenSize = {\n width: typeof screen !== \"undefined\" ? screen.width : 0,\n height: typeof screen !== \"undefined\" ? screen.height : 0,\n }\n return {\n url: loc?.href ?? \"\",\n path: loc?.pathname ?? \"\",\n userAgent: nav?.userAgent ?? \"\",\n pageTitle: doc?.title,\n timestamp: new Date().toISOString(),\n viewport,\n screen: screenSize,\n }\n}\n","import { type Entity, type EntityRef, type Flow } from \"../../entities\"\nimport type { ViewContext } from \"../core/types\"\n\nexport function resolveRefs(\n ctx: ViewContext,\n refs: readonly EntityRef[] | undefined\n): readonly Entity[] {\n if (!refs) return []\n const out: Entity[] = []\n for (const ref of refs) {\n const entity = ctx.registry.get(ref.kind, ref.id)\n if (entity) out.push(entity)\n }\n return out\n}\n\nexport function resolveFlows(\n ctx: ViewContext,\n flowIds: readonly string[] | undefined\n): readonly Flow[] {\n if (!flowIds) return []\n const out: Flow[] = []\n for (const id of flowIds) {\n const flow = ctx.registry.get(\"flow\", id)\n if (flow) out.push(flow)\n }\n return out\n}\n\nexport function collectFlowsTouching(\n ctx: ViewContext,\n targetId: string\n): readonly Flow[] {\n const out: Flow[] = []\n for (const flow of ctx.registry.list(\"flow\")) {\n if (flow.touches.includes(targetId)) out.push(flow)\n }\n return out\n}\n","import {\n displayName,\n type Entity,\n type EntityByKind,\n type EntityKind,\n type EntityRef,\n type Location,\n type MetaEntityKind,\n} from \"../../entities\"\nimport { captureScreenshot } from \"../../internal/screenshot\"\nimport { resolveEntityElement } from \"../../surface/inspector\"\nimport { UIDEX_ATTR_TO_KIND } from \"../../surface/constants\"\nimport { collectFeedbackContextSnapshot } from \"../built-in/feedback/snapshot\"\nimport type {\n DetailAction,\n DetailSection,\n DetailSubtitle,\n DetailSurface,\n} from \"../core/surface\"\nimport { BUILT_IN_VIEW_IDS } from \"../built-in/ids\"\nimport type { CloudAdapter, ShellHint, View, ViewContext } from \"../core/types\"\nimport { SECTION_LABELS } from \"../labels\"\nimport { formatLocation } from \"./format-location\"\nimport { resolveFlows, resolveRefs } from \"./resolve\"\n\ntype MetaEntity = EntityByKind<MetaEntityKind>\n\nfunction collectDomChildren(\n ctx: ViewContext,\n ref: EntityRef\n): readonly Entity[] {\n const root = resolveEntityElement(ref)\n if (!root) return []\n const children: Entity[] = []\n const seen = new Set<string>()\n for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {\n for (const node of root.querySelectorAll(`[${attr}]`)) {\n if (node === root) continue\n const id = node.getAttribute(attr)\n if (!id) continue\n const key = `${kind}:${id}`\n if (seen.has(key)) continue\n seen.add(key)\n const entity = ctx.registry.get(kind, id)\n if (entity) children.push(entity)\n }\n }\n return children\n}\n\nconst DOM_BACKED_KINDS: ReadonlySet<EntityKind> = new Set([\n \"element\",\n \"region\",\n \"widget\",\n \"primitive\",\n])\n\nconst DETAIL_HINTS: readonly ShellHint[] = [{ key: \"↵\", label: \"Open\" }]\n\nexport function copyPathAction(ref: EntityRef, loc?: Location): DetailAction {\n const identifier = `${ref.kind}:${ref.id}`\n const path = formatLocation(loc) ?? identifier\n return {\n id: \"copy-path\",\n label: \"Copy Source Path\",\n ariaLabel: `Copy path ${path}`,\n icon: \"copy\",\n copy: path,\n intent: { kind: \"external\", describe: \"clipboard\" },\n }\n}\n\nexport function feedbackAction(ref: EntityRef): DetailAction {\n return {\n id: \"report-feedback\",\n label: \"Submit Report\",\n icon: \"message-circle-warning\",\n push: { id: BUILT_IN_VIEW_IDS.feedback, ref },\n intent: {\n kind: \"push\",\n viewId: BUILT_IN_VIEW_IDS.feedback,\n refKind: ref.kind,\n },\n }\n}\n\nexport function jiraAction(ref: EntityRef): DetailAction {\n return {\n id: \"create-jira-issue\",\n label: \"Submit Jira Bug\",\n icon: \"ticket-plus\",\n push: { id: BUILT_IN_VIEW_IDS.jiraFeedback, ref },\n intent: {\n kind: \"push\",\n viewId: BUILT_IN_VIEW_IDS.jiraFeedback,\n refKind: ref.kind,\n },\n }\n}\n\nexport function buildSnapshotMarkdown(ref: EntityRef, loc?: Location): string {\n const snapshot = collectFeedbackContextSnapshot()\n const sourcePath = formatLocation(loc)\n const lines: string[] = [\n `#### ${ref.kind}: ${ref.id}`,\n `- **Kind:** ${ref.kind}`,\n `- **ID:** \\`${ref.id}\\``,\n ...(sourcePath ? [`- **Source:** \\`${sourcePath}\\``] : []),\n `#### Context`,\n `- **URL:** ${snapshot.url}`,\n `- **Path:** ${snapshot.path}`,\n ...(snapshot.pageTitle ? [`- **Page Title:** ${snapshot.pageTitle}`] : []),\n `- **Viewport:** ${snapshot.viewport.width}×${snapshot.viewport.height}`,\n `- **Screen:** ${snapshot.screen.width}×${snapshot.screen.height}`,\n `- **User Agent:** ${snapshot.userAgent}`,\n `- **Timestamp:** ${snapshot.timestamp}`,\n ]\n return lines.join(\"\\n\") + \"\\n\"\n}\n\nexport function copySnapshotAction(\n ref: EntityRef,\n loc?: Location\n): DetailAction {\n return {\n id: \"copy-snapshot\",\n label: \"Copy Markdown Snapshot\",\n icon: \"view\",\n copy: buildSnapshotMarkdown(ref, loc),\n intent: { kind: \"external\", describe: \"clipboard\" },\n }\n}\n\nexport function highlightElementAction(ref: EntityRef): DetailAction {\n return {\n id: \"highlight-element\",\n label: \"Highlight Element\",\n icon: \"highlighter\",\n highlight: ref,\n intent: { kind: \"external\", describe: \"highlight\" },\n }\n}\n\nexport function copyScreenshotAction(ref: EntityRef): DetailAction {\n return {\n id: \"copy-screenshot\",\n label: \"Copy Screenshot\",\n icon: \"camera\",\n intent: { kind: \"external\", describe: \"clipboard\" },\n run: async (ctx) => {\n try {\n ctx.setLabel(\"Capturing…\")\n const target = resolveEntityElement(ref) ?? undefined\n const dataUrl = await captureScreenshot({\n target,\n maxWidth: 1280,\n })\n const res = await fetch(dataUrl)\n const blob = await res.blob()\n await navigator.clipboard.write([\n new ClipboardItem({ [blob.type]: blob }),\n ])\n ctx.setLabel(\"Copied!\", 1200)\n } catch {\n ctx.setLabel(\"Copy failed\", 1500)\n }\n },\n }\n}\n\nexport interface EntityDetailViewConfig<K extends MetaEntityKind> {\n id: string\n kind: K\n fallbackTitle: string\n /** Render the acceptance section when the entity declares acceptance. Default: true. */\n offerAcceptance?: boolean\n /** Extra sections inserted between the acceptance section and composes. */\n extraSections?(\n ctx: ViewContext,\n entity: EntityByKind<K>\n ): readonly DetailSection[]\n /** Override subtitle. Default: `{ rawId: entity.id }`. */\n subtitle?(\n ctx: ViewContext,\n entity: EntityByKind<K>\n ): DetailSubtitle | undefined\n}\n\nexport function createEntityDetailView<K extends MetaEntityKind>(\n config: EntityDetailViewConfig<K>\n): View {\n const { kind, fallbackTitle, offerAcceptance = true } = config\n return {\n id: config.id,\n matches: (ref) => ref.kind === kind,\n hints: DETAIL_HINTS,\n title: (ctx) => {\n if (!ctx.ref) return fallbackTitle\n const entity = ctx.registry.get(kind, ctx.ref.id)\n return entity ? displayName(entity) : ctx.ref.id\n },\n focusTarget: (host) =>\n host.querySelector<HTMLButtonElement>(\n \"[data-uidex-detail-actions] [data-uidex-detail-action]\"\n ),\n surface: (ctx): DetailSurface => {\n if (!ctx.ref || ctx.ref.kind !== kind) {\n return { kind: \"detail\", entityKind: kind }\n }\n const entity = ctx.registry.get(kind, ctx.ref.id) as\n | EntityByKind<K>\n | undefined\n if (!entity) {\n return { kind: \"detail\", entityKind: kind, notFound: ctx.ref }\n }\n // MetaEntityKind excludes route/flow, so entity always has meta/loc.\n const metaEntity = entity as MetaEntity\n const meta = metaEntity.meta\n\n const actions: DetailAction[] = [\n copyPathAction(ctx.ref, metaEntity.loc),\n copySnapshotAction(ctx.ref, metaEntity.loc),\n ]\n if (DOM_BACKED_KINDS.has(kind) && resolveEntityElement(ctx.ref)) {\n actions.push(highlightElementAction(ctx.ref))\n actions.push(copyScreenshotAction(ctx.ref))\n }\n actions.push(feedbackAction(ctx.ref))\n const cloud = ctx.cloud as CloudAdapter | null\n if (cloud?.integrations.getCachedConfig()?.hasJira) {\n actions.push(jiraAction(ctx.ref))\n }\n\n const sections: DetailSection[] = []\n if (meta?.description) {\n sections.push({ id: \"description\", text: meta.description })\n }\n if (offerAcceptance && meta?.acceptance?.length) {\n sections.push({ id: \"acceptance\", items: meta.acceptance })\n }\n for (const s of config.extraSections?.(ctx, entity) ?? []) {\n sections.push(s)\n }\n sections.push({\n id: \"composes\",\n label: SECTION_LABELS.contains,\n entities: DOM_BACKED_KINDS.has(kind)\n ? collectDomChildren(ctx, ctx.ref)\n : resolveRefs(ctx, meta?.composes),\n filterable: true,\n })\n sections.push({\n id: \"flows\",\n flows: resolveFlows(ctx, meta?.flows),\n filterable: true,\n })\n\n return {\n kind: \"detail\",\n entityKind: kind,\n title: displayName(metaEntity),\n subtitle: config.subtitle?.(ctx, entity),\n actions,\n sections,\n }\n },\n }\n}\n","import type { Entity, EntityRef } from \"../../entities\"\nimport { resolveEntityElement } from \"../../surface/inspector\"\nimport { UIDEX_ATTR_TO_KIND } from \"../../surface/constants\"\nimport { createEntityDetailView } from \"../builder/detail-builder\"\nimport { collectFlowsTouching } from \"../builder/resolve\"\nimport type { DetailSection } from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport { SECTION_LABELS } from \"../labels\"\n\nfunction collectDomParents(ctx: ViewContext, ref: EntityRef): Entity[] {\n const el = resolveEntityElement(ref)\n if (!el) return []\n const parents: Entity[] = []\n const seen = new Set<string>()\n let node = el.parentElement\n while (node) {\n if (node instanceof HTMLElement) {\n for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {\n const id = node.getAttribute(attr)\n if (id) {\n const key = `${kind}:${id}`\n if (!seen.has(key)) {\n seen.add(key)\n const entity = ctx.registry.get(kind, id)\n if (entity) parents.push(entity)\n }\n }\n }\n }\n node = node.parentElement\n }\n return parents\n}\n\nfunction usedBySection(ctx: ViewContext, ref: EntityRef): DetailSection {\n return {\n id: \"used-by\",\n label: SECTION_LABELS.usedBy,\n entities: collectDomParents(ctx, ref),\n filterable: true,\n }\n}\n\nfunction touchedByFlowsSection(\n ctx: Parameters<typeof collectFlowsTouching>[0],\n id: string\n): DetailSection {\n return {\n id: \"flows\",\n flows: collectFlowsTouching(ctx, id),\n filterable: true,\n }\n}\n\nexport const componentDetailView = createEntityDetailView({\n id: \"component-detail\",\n kind: \"element\",\n fallbackTitle: \"Component\",\n extraSections: (ctx, entity) => [\n usedBySection(ctx, { kind: \"element\", id: entity.id }),\n touchedByFlowsSection(ctx, entity.id),\n ],\n})\n\nexport const featureDetailView = createEntityDetailView({\n id: \"feature-detail\",\n kind: \"feature\",\n fallbackTitle: \"Feature\",\n extraSections: (ctx, entity) => [\n usedBySection(ctx, { kind: \"feature\", id: entity.id }),\n ],\n})\n\nexport const regionDetailView = createEntityDetailView({\n id: \"region-detail\",\n kind: \"region\",\n fallbackTitle: \"Region\",\n offerAcceptance: false,\n extraSections: (ctx, entity) => [\n usedBySection(ctx, { kind: \"region\", id: entity.id }),\n ],\n})\n\nexport const widgetDetailView = createEntityDetailView({\n id: \"widget-detail\",\n kind: \"widget\",\n fallbackTitle: \"Widget\",\n extraSections: (ctx, entity) => [\n usedBySection(ctx, { kind: \"widget\", id: entity.id }),\n ],\n})\n\nexport const primitiveDetailView = createEntityDetailView({\n id: \"primitive-detail\",\n kind: \"primitive\",\n fallbackTitle: \"Primitive\",\n offerAcceptance: false,\n extraSections: (ctx, entity) => [\n usedBySection(ctx, { kind: \"primitive\", id: entity.id }),\n ],\n})\n\nexport const pageDetailView = createEntityDetailView({\n id: \"page-detail\",\n kind: \"page\",\n fallbackTitle: \"Page\",\n offerAcceptance: true,\n extraSections: (ctx, entity): DetailSection[] => {\n const paths = ctx.registry\n .list(\"route\")\n .filter((r) => r.page === entity.id)\n .map((r) => r.path)\n return [{ id: \"routes\", paths, filterable: true }]\n },\n})\n","import {\n displayName,\n entityKey,\n KIND_STYLE,\n type Entity,\n type EntityKind,\n type EntityRef,\n} from \"../../entities\"\nimport { matchesQuery } from \"../builder/filter\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\ninterface EntityItem extends ListItem {\n ref: EntityRef\n}\n\nfunction toItem(entity: Entity): EntityItem {\n const ref: EntityRef = { kind: entity.kind, id: entityKey(entity) }\n return {\n value: `entity:${ref.kind}:${ref.id}`,\n label: displayName(entity),\n tag: `${ref.kind}:${ref.id}`,\n preview: ref,\n entityChip: { entity },\n ref,\n }\n}\n\nfunction createEntityKindListView(kind: EntityKind, viewId: string): View {\n const style = KIND_STYLE[kind]\n return {\n id: viewId,\n palette: { label: style.label + \"s\" },\n title: style.label + \"s\",\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx: ViewContext): ListSurface => {\n const entities = ctx.registry.list(kind)\n const items: EntityItem[] = (entities as Entity[])\n .map(toItem)\n .sort((a, b) => a.label.localeCompare(b.label))\n\n return {\n kind: \"list\",\n id: `uidex-${kind}s`,\n items,\n emptyLabel: `No ${style.label.toLowerCase()}s registered`,\n filter: (item, query) =>\n matchesQuery(\n `${item.label} ${(item as EntityItem).ref.id} ${item.group ?? \"\"}`,\n query\n ),\n onSelect: (item) => ctx.navigate((item as EntityItem).ref),\n }\n },\n }\n}\n\nexport const elementsView = createEntityKindListView(\n \"element\",\n BUILT_IN_VIEW_IDS.elements\n)\nexport const widgetsView = createEntityKindListView(\n \"widget\",\n BUILT_IN_VIEW_IDS.widgets\n)\nexport const regionsView = createEntityKindListView(\n \"region\",\n BUILT_IN_VIEW_IDS.regions\n)\nexport const pagesView = createEntityKindListView(\n \"page\",\n BUILT_IN_VIEW_IDS.pages\n)\nexport const featuresView = createEntityKindListView(\n \"feature\",\n BUILT_IN_VIEW_IDS.features\n)\nexport const primitivesView = createEntityKindListView(\n \"primitive\",\n BUILT_IN_VIEW_IDS.primitives\n)\n","import { Compass, createElement as createLucideElement } from \"lucide\"\nimport {\n displayName,\n ENTITY_KINDS,\n type Entity,\n type EntityRef,\n} from \"../../entities\"\nimport { matchesQuery } from \"../builder/filter\"\nimport {\n buildPageRouteMap,\n collectPageContext,\n type PageEntityHit,\n} from \"../builder/page-context\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\ninterface ExplorePageItem extends ListItem {\n ref: EntityRef\n}\n\nconst KIND_ORDER: ReadonlyMap<string, number> = new Map(\n ENTITY_KINDS.map((kind, index) => [kind, index])\n)\n\nconst KIND_GROUP_LABELS: Partial<Record<Entity[\"kind\"], string>> = {\n feature: \"Features\",\n widget: \"Widgets\",\n region: \"Regions\",\n element: \"Elements\",\n primitive: \"Primitives\",\n page: \"Pages\",\n route: \"Routes\",\n flow: \"Flows\",\n}\n\nfunction capitalize(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n\nfunction toItem(\n hit: PageEntityHit,\n pageRoutes: ReadonlyMap<string, string>\n): ExplorePageItem {\n const { entity, ref, node } = hit\n const item: ExplorePageItem = {\n value: `entity:${ref.kind}:${ref.id}`,\n label: displayName(entity, node),\n group: KIND_GROUP_LABELS[entity.kind] ?? capitalize(entity.kind),\n tag: `${ref.kind}:${ref.id}`,\n preview: ref,\n entityChip: { entity, node },\n ref,\n }\n if (entity.kind === \"route\") {\n item.subtitle = entity.path\n } else if (entity.kind === \"page\") {\n const path = pageRoutes.get(entity.id)\n if (path) item.subtitle = path\n }\n return item\n}\n\nexport const explorePageView: View = {\n id: BUILT_IN_VIEW_IDS.explorePage,\n palette: {\n label: \"Explore Page\",\n shortcut: \"\",\n icon: () => createLucideElement(Compass),\n },\n title: \"Explore Page\",\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx: ViewContext): ListSurface => {\n const { composed, dom } = collectPageContext(ctx)\n const pageRoutes = buildPageRouteMap(ctx)\n\n const items: ExplorePageItem[] = [\n ...composed.map((hit) => toItem(hit, pageRoutes)),\n ...dom.map((hit) => toItem(hit, pageRoutes)),\n ].sort((a, b) => {\n const ak = KIND_ORDER.get(a.ref.kind) ?? Number.MAX_SAFE_INTEGER\n const bk = KIND_ORDER.get(b.ref.kind) ?? Number.MAX_SAFE_INTEGER\n if (ak !== bk) return ak - bk\n return a.label.localeCompare(b.label)\n })\n\n const filter = (item: ListItem, query: string): boolean => {\n const row = item as ExplorePageItem\n return matchesQuery(\n `${item.label} ${row.ref.id} ${item.group ?? \"\"}`,\n query\n )\n }\n\n return {\n kind: \"list\",\n id: \"uidex-explore-page\",\n items,\n emptyLabel: \"No uidex-annotated elements on this page\",\n filter,\n onSelect: (item) => ctx.navigate((item as ExplorePageItem).ref),\n }\n },\n}\n","export async function copyToClipboard(text: string): Promise<boolean> {\n try {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text)\n return true\n }\n } catch {\n // fall through to legacy path\n }\n try {\n if (typeof document === \"undefined\") return false\n const textarea = document.createElement(\"textarea\")\n textarea.value = text\n textarea.setAttribute(\"readonly\", \"\")\n textarea.style.position = \"fixed\"\n textarea.style.opacity = \"0\"\n document.body.appendChild(textarea)\n textarea.select()\n const ok = document.execCommand(\"copy\")\n document.body.removeChild(textarea)\n return ok\n } catch {\n return false\n }\n}\n","import type { FeedbackPayload } from \"../../core/types\"\n\nfunction capitalize(s: string): string {\n return s.length === 0 ? s : s[0].toUpperCase() + s.slice(1)\n}\n\nexport function renderPayloadMarkdown(payload: FeedbackPayload): string {\n const heading = payload.title ?? `${capitalize(payload.type)} Feedback`\n const lines: string[] = [\n `# ${heading}`,\n \"\",\n `- **Type:** ${payload.type}`,\n `- **Severity:** ${payload.severity}`,\n `- **Component:** \\`${payload.componentId}\\``,\n \"\",\n \"#### Description\",\n payload.description || \"_(no description)_\",\n \"\",\n \"#### Context\",\n `- **URL:** ${payload.url}`,\n `- **Path:** ${payload.path}`,\n ...(payload.pageTitle ? [`- **Page title:** ${payload.pageTitle}`] : []),\n `- **Viewport:** ${payload.viewport.width}×${payload.viewport.height}`,\n `- **Screen:** ${payload.screen.width}×${payload.screen.height}`,\n `- **User agent:** ${payload.userAgent}`,\n `- **Timestamp:** ${payload.timestamp}`,\n ]\n return lines.join(\"\\n\") + \"\\n\"\n}\n","import { z } from \"zod\"\nimport type { FormField } from \"../../core/surface\"\n\nexport const feedbackSchema = z.object({\n type: z.enum([\"bug\", \"feature\", \"improvement\", \"question\"]),\n severity: z.enum([\"low\", \"medium\", \"high\", \"critical\"]),\n title: z.string().optional(),\n description: z\n .string()\n .trim()\n .min(1, { message: \"Description is required.\" }),\n})\n\nexport const feedbackFields: FormField[] = [\n {\n kind: \"select\",\n name: \"type\",\n label: \"Type\",\n options: [\n { value: \"bug\", label: \"Bug\" },\n { value: \"feature\", label: \"Feature\" },\n { value: \"improvement\", label: \"Improvement\" },\n { value: \"question\", label: \"Question\" },\n ],\n },\n {\n kind: \"select\",\n name: \"severity\",\n label: \"Severity\",\n value: \"medium\",\n options: [\n { value: \"low\", label: \"Low\" },\n { value: \"medium\", label: \"Medium\" },\n { value: \"high\", label: \"High\" },\n { value: \"critical\", label: \"Critical\" },\n ],\n },\n {\n kind: \"text\",\n name: \"title\",\n label: \"Title\",\n placeholder: \"Short summary (optional)\",\n },\n {\n kind: \"textarea\",\n name: \"description\",\n label: \"Description\",\n placeholder: \"Describe what happened…\",\n required: true,\n },\n]\n","import { copyToClipboard } from \"../../../internal/clipboard\"\nimport { captureScreenshot } from \"../../../internal/screenshot\"\nimport type { EntityRef } from \"../../../entities\"\nimport { UIDEX_ATTR_TO_KIND } from \"../../../surface/constants\"\nimport type {\n FormField,\n FormSubmitResult,\n FormSurface,\n FormValue,\n} from \"../../core/surface\"\nimport type {\n CloudAdapter,\n FeedbackPayload,\n FeedbackResult,\n View,\n ViewContext,\n} from \"../../core/types\"\nimport { renderPayloadMarkdown } from \"./markdown\"\nimport { feedbackFields, feedbackSchema } from \"./schema\"\nimport { collectFeedbackContextSnapshot } from \"./snapshot\"\n\nconst DOM_BACKED_KINDS: ReadonlySet<string> = new Set([\n \"element\",\n \"region\",\n \"widget\",\n \"primitive\",\n])\n\nconst KIND_TO_ATTR = new Map(\n UIDEX_ATTR_TO_KIND.map(([attr, kind]) => [kind, attr])\n)\n\nfunction resolveElement(ref: EntityRef): HTMLElement | null {\n const attr = KIND_TO_ATTR.get(ref.kind)\n if (!attr) return null\n return document.querySelector<HTMLElement>(\n `[${attr}=\"${CSS.escape(ref.id)}\"]`\n )\n}\n\nexport interface CreateFeedbackViewConfig {\n id: string\n resolveCloud: (\n ctx: ViewContext\n ) => CloudAdapter<unknown, unknown, unknown> | null\n componentId: (ctx: ViewContext) => string\n submitLabels: { ready: string; noCloud: string }\n successToast: (result: FeedbackResult) => string\n failureToast: (err: unknown) => string\n /**\n * Override the inline result shown on success. Use to include a link\n * (e.g. Jira issue URL) or customise the message beyond `successToast`.\n */\n successResult?: (result: FeedbackResult) => FormSubmitResult\n /**\n * Optional prefix prepended to `description` before submit/fallback-copy.\n * Used by sdk-feedback to stamp the SDK version in every report.\n */\n prependDescription?: () => string\n /**\n * Extra form fields prepended before the base feedback fields.\n * Receives the view context so the field list can depend on runtime state\n * (e.g. cached integration config).\n */\n /**\n * Override the base feedback fields. Defaults to all four\n * (type, severity, title, description). Use to hide fields that are\n * hardcoded by the variant (e.g. Jira always sets type to \"bug\").\n */\n baseFields?: FormField[]\n extraFields?: (ctx: ViewContext) => FormField[]\n /**\n * Optional hook invoked after the base payload is built. Variants use this\n * to attach extra fields (e.g. `suggestedTarget` for the Jira view) without\n * duplicating snapshot logic. `values` contains all collected form values\n * including any extra fields.\n */\n augmentPayload?: (\n payload: FeedbackPayload,\n ctx: ViewContext,\n values: Record<string, FormValue>\n ) => FeedbackPayload\n /**\n * Override the default feedback schema. Use when the variant hides fields\n * that the base schema requires (e.g. Jira omits the \"type\" field).\n */\n schema?: FormSurface[\"schema\"]\n}\n\nfunction buildPayload(\n ctx: ViewContext,\n componentId: string,\n values: Record<string, FormValue>,\n prefix: string,\n augmentPayload: CreateFeedbackViewConfig[\"augmentPayload\"],\n screenshot?: string\n): FeedbackPayload {\n const snapshot = collectFeedbackContextSnapshot()\n const title = String(values.title ?? \"\").trim()\n const description = String(values.description ?? \"\").trim()\n const ref = ctx.ref\n const entity = ref ? ctx.registry.get(ref.kind, ref.id) : undefined\n const loc = entity && \"loc\" in entity ? entity.loc : undefined\n const sources = loc\n ? [{ filePath: loc.file, line: loc.line ?? 0 }]\n : undefined\n\n const payload: FeedbackPayload = {\n type: (values.type as FeedbackPayload[\"type\"]) ?? \"bug\",\n severity: (values.severity as FeedbackPayload[\"severity\"]) ?? \"medium\",\n title: title || undefined,\n description: prefix ? `${prefix}${description}` : description,\n componentId,\n screenshot,\n sources,\n ...snapshot,\n }\n return augmentPayload ? augmentPayload(payload, ctx, values) : payload\n}\n\nasync function copyFallback(\n payload: FeedbackPayload\n): Promise<FormSubmitResult> {\n const markdown = renderPayloadMarkdown(payload)\n const copied = await copyToClipboard(markdown)\n if (!copied) console.log(\"[uidex] feedback markdown:\\n\" + markdown)\n return {\n status: copied ? \"success\" : \"error\",\n message: copied ? \"Copied to clipboard\" : \"Copy failed\",\n } as FormSubmitResult\n}\n\nexport function createFeedbackView(config: CreateFeedbackViewConfig): View {\n const {\n id,\n resolveCloud,\n componentId,\n submitLabels,\n successToast,\n failureToast,\n prependDescription,\n baseFields,\n extraFields,\n augmentPayload,\n successResult,\n schema: schemaOverride,\n } = config\n\n return {\n id,\n matches: () => false,\n searchable: false,\n hints: (ctx) => [\n {\n key: \"⌘↵\",\n label: resolveCloud(ctx) ? submitLabels.ready : submitLabels.noCloud,\n },\n ],\n focusTarget: (host) =>\n host.querySelector<HTMLElement>(\n \"[data-uidex-form='feedback'] select, [data-uidex-form='feedback'] input, [data-uidex-form='feedback'] textarea\"\n ),\n surface: (ctx): FormSurface => {\n const cloud = resolveCloud(ctx)\n const extra = extraFields ? extraFields(ctx) : []\n const fields: FormField[] = [...extra, ...(baseFields ?? feedbackFields)]\n\n const isDomBacked = ctx.ref != null && DOM_BACKED_KINDS.has(ctx.ref.kind)\n const targetEl = ctx.ref && isDomBacked ? resolveElement(ctx.ref) : null\n const screenshotPromise = isDomBacked\n ? captureScreenshot({\n target: targetEl ?? undefined,\n maxWidth: 1280,\n }).catch(() => null)\n : null\n\n return {\n kind: \"form\",\n id: \"feedback\",\n fields,\n schema: schemaOverride ?? feedbackSchema,\n screenshotPreview: screenshotPromise ? screenshotPromise : undefined,\n submit: {\n label: cloud ? submitLabels.ready : submitLabels.noCloud,\n onSubmit: async (values) => {\n const screenshot = (await screenshotPromise) ?? undefined\n const prefix = prependDescription ? prependDescription() : \"\"\n const payload = buildPayload(\n ctx,\n componentId(ctx),\n values,\n prefix,\n augmentPayload,\n screenshot\n )\n if (!cloud) {\n return copyFallback(payload)\n }\n try {\n const result = (await cloud.feedback.submit(\n payload\n )) as FeedbackResult\n if (successResult) return successResult(result)\n return {\n status: \"success\" as const,\n message: successToast(result),\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n return {\n status: \"error\" as const,\n message: failureToast(err) ?? message,\n }\n }\n },\n },\n }\n },\n }\n}\n","import { BUILT_IN_VIEW_IDS } from \"../ids\"\nimport { createFeedbackView } from \"./view-builder\"\n\nexport const feedbackView = createFeedbackView({\n id: BUILT_IN_VIEW_IDS.feedback,\n resolveCloud: (ctx) => ctx.cloud,\n componentId: (ctx) => (ctx.ref ? `${ctx.ref.kind}:${ctx.ref.id}` : \"unknown\"),\n submitLabels: { ready: \"Submit Report\", noCloud: \"Copy Report\" },\n successToast: (result) => {\n const ticketKey =\n result.externalLink?.ok && result.externalLink.key\n ? result.externalLink.key\n : null\n return ticketKey\n ? `Feedback submitted (${ticketKey})`\n : \"Feedback submitted\"\n },\n failureToast: (err) => {\n const message = err instanceof Error ? err.message : String(err)\n return `Failed: ${message}`\n },\n})\n","import type { FormField, FormSubmitResult } from \"../../core/surface\"\nimport type {\n CloudAdapter,\n FeedbackResult,\n IngestConfig,\n IngestConfigIssue,\n} from \"../../core/types\"\nimport { BUILT_IN_VIEW_IDS } from \"../ids\"\nimport { feedbackFields, feedbackSchema } from \"./schema\"\nimport { createFeedbackView } from \"./view-builder\"\n\nconst jiraSchema = feedbackSchema.omit({ type: true })\n\nconst jiraBaseFields = feedbackFields.filter((f) => f.name !== \"type\")\n\nfunction buildParentIssueField(config: IngestConfig): FormField {\n const issues = config.parentIssues ?? []\n\n const options: { value: string; label: string }[] = [\n { value: \"\", label: \"None\" },\n ]\n\n const byType = new Map<string, IngestConfigIssue[]>()\n for (const issue of issues) {\n const group = byType.get(issue.issueType) ?? []\n group.push(issue)\n byType.set(issue.issueType, group)\n }\n for (const [type, group] of byType) {\n for (const issue of group) {\n options.push({\n value: issue.key,\n label: `[${type}] ${issue.key}: ${issue.summary}`,\n })\n }\n }\n\n return {\n kind: \"select\",\n name: \"parentIssue\",\n label: \"Parent Issue\",\n options,\n }\n}\n\nexport const jiraFeedbackView = createFeedbackView({\n id: BUILT_IN_VIEW_IDS.jiraFeedback,\n resolveCloud: (ctx) => ctx.cloud,\n componentId: (ctx) => (ctx.ref ? `${ctx.ref.kind}:${ctx.ref.id}` : \"unknown\"),\n submitLabels: { ready: \"Submit bug\", noCloud: \"Copy report\" },\n schema: jiraSchema,\n baseFields: jiraBaseFields,\n extraFields: (ctx) => {\n const cloud = ctx.cloud as CloudAdapter | null\n const config = cloud?.integrations.getCachedConfig() ?? null\n if (!config?.hasJira) return []\n return [buildParentIssueField(config)]\n },\n augmentPayload: (payload, ctx, values) => {\n const cloud = ctx.cloud as CloudAdapter | null\n const config = cloud?.integrations.getCachedConfig() ?? null\n if (!config?.hasJira || !config.integrationId) return payload\n const targetConfig: Record<string, unknown> = {}\n const parentKey = values.parentIssue as string | undefined\n if (parentKey) {\n const issue = config.parentIssues?.find((i) => i.key === parentKey)\n if (issue) targetConfig.epicId = issue.id\n }\n return {\n ...payload,\n type: \"bug\" as const,\n suggestedTarget: {\n integrationId: config.integrationId,\n targetConfig,\n },\n }\n },\n successResult: (result: FeedbackResult): FormSubmitResult => {\n const link = result.externalLink\n if (link?.ok && link.key) {\n return {\n status: \"success\",\n message: `Created ${link.key}`,\n link: link.url ? { url: link.url, label: link.key } : undefined,\n }\n }\n return {\n status: \"error\",\n message: \"Feedback saved — Jira issue creation failed\",\n }\n },\n successToast: (result: FeedbackResult) => {\n const link = result.externalLink\n if (link?.ok && link.key) return `Created ${link.key}`\n return \"Feedback saved — Jira Bug failed\"\n },\n failureToast: (err) => {\n const message = err instanceof Error ? err.message : String(err)\n return `Failed to create issue: ${message}`\n },\n})\n","import {\n MessageCircleWarning,\n createElement as createLucideElement,\n} from \"lucide\"\nimport type { ShellAction, ViewContext } from \"../../core/types\"\nimport { BUILT_IN_VIEW_IDS } from \"../ids\"\nimport { createFeedbackView } from \"./view-builder\"\n\nexport function resolveSdkComponentId(ctx: ViewContext): string {\n const stack = ctx.getStack()\n const underlying = stack[stack.length - 2]\n return underlying ? `uidex-sdk:${underlying.id}` : \"uidex-sdk\"\n}\n\nfunction successToast(): string {\n return \"Thanks — your report was sent to uidex\"\n}\n\nexport const sdkFeedbackView = createFeedbackView({\n id: BUILT_IN_VIEW_IDS.sdkFeedback,\n resolveCloud: (ctx) => ctx.sdkCloud,\n componentId: (ctx) => resolveSdkComponentId(ctx),\n submitLabels: { ready: \"Send feedback\", noCloud: \"Copy report\" },\n successToast,\n failureToast: () => \"Couldn't reach uidex — copied report to clipboard\",\n prependDescription: () => `uidex-sdk v${UIDEX_SDK_VERSION}\\n\\n`,\n})\n\nexport function reportUidexIssueAction(ctx: ViewContext): ShellAction {\n return {\n id: \"report-uidex-issue\",\n label: \"Report Uidex Issue\",\n icon: () => createLucideElement(MessageCircleWarning),\n perform: () => ctx.push({ id: BUILT_IN_VIEW_IDS.sdkFeedback, ref: null }),\n intent: { kind: \"push\", viewId: BUILT_IN_VIEW_IDS.sdkFeedback },\n }\n}\n","import {\n displayName,\n isMetaEntity,\n type Entity,\n type Flow,\n type FlowStep,\n type MetaEntityKind,\n type Registry,\n} from \"../../entities\"\nimport type {\n DetailAction,\n DetailSection,\n DetailSurface,\n ResolvedFlowStep,\n} from \"../core/surface\"\nimport type { View } from \"../core/types\"\nimport {\n copyPathAction,\n copySnapshotAction,\n feedbackAction,\n} from \"../builder/detail-builder\"\n\nconst STEP_KINDS: readonly MetaEntityKind[] = [\n \"element\",\n \"widget\",\n \"region\",\n \"page\",\n \"feature\",\n \"primitive\",\n]\n\nexport const flowDetailView: View = {\n id: \"flow-detail\",\n matches: (ref) => ref.kind === \"flow\",\n title: (ctx) => {\n if (!ctx.ref) return \"Flow\"\n const entity = ctx.registry.get(\"flow\", ctx.ref.id)\n return entity ? displayName(entity) : ctx.ref.id\n },\n focusTarget: (host) =>\n host.querySelector<HTMLButtonElement>(\n \"[data-uidex-detail-actions] [data-uidex-detail-action]\"\n ),\n surface: (ctx): DetailSurface => {\n if (!ctx.ref || ctx.ref.kind !== \"flow\") {\n return { kind: \"detail\", entityKind: \"flow\" }\n }\n const flow = ctx.registry.get(\"flow\", ctx.ref.id)\n if (!flow) {\n return { kind: \"detail\", entityKind: \"flow\", notFound: ctx.ref }\n }\n\n const actions: DetailAction[] = [\n copyPathAction(ctx.ref, flow.loc),\n copySnapshotAction(ctx.ref, flow.loc),\n feedbackAction(ctx.ref),\n ]\n\n const sections: DetailSection[] = [\n flow.steps.length > 0\n ? buildStepsSection(flow.steps, ctx.registry)\n : buildTouchesSection(flow, ctx.registry),\n ]\n\n return {\n kind: \"detail\",\n entityKind: \"flow\",\n title: displayName(flow),\n actions,\n sections,\n }\n },\n}\n\nfunction buildStepsSection(\n flowSteps: readonly FlowStep[],\n registry: Registry\n): DetailSection {\n const steps: ResolvedFlowStep[] = []\n flowSteps.forEach((step, index) => {\n const entity = resolveStepEntity(registry, step.entityId)\n if (entity) {\n steps.push({ ordinal: index + 1, entity, action: step.action })\n }\n })\n return { id: \"steps\", steps, filterable: true }\n}\n\nfunction resolveStepEntity(\n registry: Registry,\n entityId: string\n): Entity | undefined {\n for (const kind of STEP_KINDS) {\n const entity = registry.get(kind, entityId)\n if (entity) return entity\n }\n return undefined\n}\n\nfunction buildTouchesSection(flow: Flow, registry: Registry): DetailSection {\n const touched: Entity[] = []\n const seen = new Set<string>()\n for (const touchedEntity of registry.touchedBy(flow.id)) {\n if (!isMetaEntity(touchedEntity)) continue\n const key = `${touchedEntity.kind}:${touchedEntity.id}`\n if (seen.has(key)) continue\n seen.add(key)\n touched.push(touchedEntity)\n }\n return {\n id: \"touches\",\n entities: touched,\n filterable: true,\n }\n}\n","import { displayName, type EntityRef, type Flow } from \"../../entities\"\nimport { matchesQuery } from \"../builder/filter\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\ninterface FlowItem extends ListItem {\n ref: EntityRef\n}\n\nfunction toItem(flow: Flow): FlowItem {\n const ref: EntityRef = { kind: \"flow\", id: flow.id }\n return {\n value: `entity:flow:${flow.id}`,\n label: displayName(flow),\n subtitle: flow.loc.file || undefined,\n tag: `flow:${flow.id}`,\n preview: ref,\n entityChip: { entity: flow },\n ref,\n }\n}\n\nexport const flowsView: View = {\n id: BUILT_IN_VIEW_IDS.flows,\n palette: { label: \"Flows\" },\n title: \"Flows\",\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx: ViewContext): ListSurface => {\n const flows = ctx.registry.list(\"flow\")\n const items: FlowItem[] = flows\n .map(toItem)\n .sort((a, b) => a.label.localeCompare(b.label))\n\n const filter = (item: ListItem, query: string): boolean => {\n const row = item as FlowItem\n return matchesQuery(\n `${item.label} ${row.ref.id} ${item.group ?? \"\"}`,\n query\n )\n }\n\n return {\n kind: \"list\",\n id: \"uidex-flows\",\n items,\n emptyLabel: \"No flows registered\",\n filter,\n onSelect: (item) => ctx.navigate((item as FlowItem).ref),\n }\n },\n}\n","import { BookOpen, createElement as createLucideElement } from \"lucide\"\nimport { KIND_STYLE, type Entity, type EntityKind } from \"../../entities\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { PALETTE_GROUPS } from \"../labels\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\nconst KIND_TO_VIEW: Partial<Record<EntityKind, string>> = {\n element: BUILT_IN_VIEW_IDS.elements,\n widget: BUILT_IN_VIEW_IDS.widgets,\n region: BUILT_IN_VIEW_IDS.regions,\n page: BUILT_IN_VIEW_IDS.pages,\n feature: BUILT_IN_VIEW_IDS.features,\n primitive: BUILT_IN_VIEW_IDS.primitives,\n flow: BUILT_IN_VIEW_IDS.flows,\n}\n\nconst BROWSABLE_KINDS: EntityKind[] = [\n \"page\",\n \"feature\",\n \"widget\",\n \"region\",\n \"element\",\n \"primitive\",\n \"flow\",\n]\n\nfunction syntheticEntity(kind: EntityKind): Entity {\n if (kind === \"route\") return { kind: \"route\", path: kind, page: kind }\n if (kind === \"flow\")\n return {\n kind: \"flow\",\n id: kind,\n loc: { file: \"\" },\n touches: [],\n steps: [],\n }\n return { kind, id: kind }\n}\n\nexport const glossaryView: View = {\n id: BUILT_IN_VIEW_IDS.glossary,\n palette: {\n label: \"Glossary\",\n group: PALETTE_GROUPS.commands,\n icon: () => createLucideElement(BookOpen),\n },\n title: \"Glossary\",\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx: ViewContext): ListSurface => {\n const items: ListItem[] = BROWSABLE_KINDS.map((kind) => {\n const count =\n kind === \"flow\"\n ? ctx.registry.list(\"flow\").length\n : ctx.registry.list(kind).length\n return {\n value: `glossary:${kind}`,\n label: KIND_STYLE[kind].label + \"s\",\n subtitle: String(count),\n tag: kind,\n entityChip: { entity: syntheticEntity(kind) },\n }\n })\n return {\n kind: \"list\",\n id: \"uidex-glossary\",\n items,\n onSelect: (item) => {\n const kind = item.tag as EntityKind\n const viewId = KIND_TO_VIEW[kind]\n if (viewId) ctx.push({ id: viewId, ref: null })\n },\n }\n },\n}\n","export { BUILT_IN_VIEW_IDS } from \"./ids\"\n\nimport type { PaletteShortcut } from \"../../surface/keys\"\nimport { createCommandPaletteView } from \"./command-palette\"\nimport {\n componentDetailView,\n featureDetailView,\n pageDetailView,\n primitiveDetailView,\n regionDetailView,\n widgetDetailView,\n} from \"./entity-detail\"\nimport {\n elementsView,\n featuresView,\n pagesView,\n primitivesView,\n regionsView,\n widgetsView,\n} from \"./entity-kind-list\"\nimport { explorePageView } from \"./explore-page\"\nimport { feedbackView } from \"./feedback/host-feedback\"\nimport { jiraFeedbackView } from \"./feedback/jira-feedback\"\nimport { sdkFeedbackView } from \"./feedback/sdk-feedback\"\nimport { flowDetailView } from \"./flow-detail\"\nimport { flowsView } from \"./flows\"\nimport { glossaryView } from \"./glossary\"\n\nexport { createCommandPaletteView } from \"./command-palette\"\nexport {\n componentDetailView,\n featureDetailView,\n pageDetailView,\n primitiveDetailView,\n regionDetailView,\n widgetDetailView,\n} from \"./entity-detail\"\nexport {\n elementsView,\n featuresView,\n pagesView,\n primitivesView,\n regionsView,\n widgetsView,\n} from \"./entity-kind-list\"\nexport { explorePageView } from \"./explore-page\"\nexport { feedbackView } from \"./feedback/host-feedback\"\nexport { jiraFeedbackView } from \"./feedback/jira-feedback\"\nexport { sdkFeedbackView } from \"./feedback/sdk-feedback\"\nexport { flowDetailView } from \"./flow-detail\"\nexport { flowsView } from \"./flows\"\nexport { glossaryView } from \"./glossary\"\n\nimport type { View } from \"../core/types\"\n\nexport function buildDefaultViews(shortcut?: PaletteShortcut): View[] {\n return [\n createCommandPaletteView(shortcut),\n explorePageView,\n componentDetailView,\n pageDetailView,\n featureDetailView,\n widgetDetailView,\n flowDetailView,\n flowsView,\n elementsView,\n widgetsView,\n regionsView,\n pagesView,\n featuresView,\n primitivesView,\n primitiveDetailView,\n regionDetailView,\n feedbackView,\n jiraFeedbackView,\n sdkFeedbackView,\n glossaryView,\n ]\n}\n","import { sdkCloud } from \"./cloud/sdk-cloud\"\nimport { createRegistry, KIND_STYLE, type Registry } from \"./entities\"\nimport {\n createIngest,\n resolveIngestOptions,\n type Ingest,\n type IngestOptions,\n} from \"./ingest\"\nimport type { HighlightContext } from \"./flows/highlight\"\nimport { createCleanupStack } from \"./internal/cleanup\"\nimport {\n createSession,\n type ResolvedTheme,\n type SessionStore,\n type ThemePreference,\n} from \"./session\"\nimport {\n bindShadowKeys,\n createSurfaceShell,\n resolveEntityElement,\n type Corner,\n type Inspector,\n type Overlay,\n type PaletteShortcut,\n} from \"./surface\"\nimport {\n buildDefaultViews,\n createViewRegistrar,\n createViewStack,\n type CloudAdapter,\n type HighlightController,\n type View,\n type ViewRegistrar,\n} from \"./views\"\n\nexport interface CreateUidexOptions {\n theme?: ThemePreference\n resolvedTheme?: ResolvedTheme\n stylesheets?: string[]\n initialCorner?: Corner\n /** Shown as a label at the start of the menu bar. */\n appTitle?: string\n cloud?: CloudAdapter | null\n dev?: boolean\n /** Register bundled default views. Defaults to `true`. */\n defaultViews?: boolean\n /** Additional views to register (after defaults). */\n views?: readonly View[]\n /**\n * Override ingest behaviour. When `cloud` is non-null, ingest auto-enables\n * (both console and network capture). Pass `null` to disable entirely, or\n * an options object to override either channel.\n */\n ingest?: IngestOptions | null\n /** Keyboard shortcut for the command palette. Defaults to Cmd+K / Ctrl+K. */\n shortcut?: PaletteShortcut\n}\n\nexport interface Uidex {\n mount(target?: Element): void\n unmount(): void\n readonly registry: Registry\n readonly session: SessionStore\n readonly views: ViewRegistrar\n readonly cloud: CloudAdapter | null\n readonly ingest: Ingest | null\n readonly shadowRoot: ShadowRoot | null\n}\n\nexport function createUidex(options: CreateUidexOptions = {}): Uidex {\n const registry = createRegistry()\n\n // Mutable refs filled in during mount(); session bindings close over them so\n // the surface machine's actions can mount the inspector and drive the\n // overlay once the shell exists.\n const inspectorRef: { current: Inspector | null } = { current: null }\n const overlayRef: { current: Overlay | null } = { current: null }\n\n const applyOverlay = (ctx: HighlightContext): void => {\n const overlay = overlayRef.current\n if (!overlay) return\n const ref = ctx.pinnedRef ?? ctx.ref\n if (!ref) return\n const el = ctx.element ?? resolveEntityElement(ref)\n if (!el) {\n overlay.hide()\n return\n }\n const pinned = ctx.pinnedRef !== null\n overlay.show(el, {\n color: ctx.color ?? KIND_STYLE[ref.kind].color,\n backdrop: pinned,\n })\n }\n\n const session = createSession({\n theme: options.theme,\n resolvedTheme: options.resolvedTheme,\n bindings: {\n surface: {\n mountInspector: () => inspectorRef.current?.mount(),\n destroyInspector: () => inspectorRef.current?.destroy(),\n },\n highlight: {\n showOverlay: applyOverlay,\n hideOverlay: () => overlayRef.current?.hide(),\n updateOverlay: applyOverlay,\n },\n },\n })\n const views = createViewRegistrar({ session, dev: options.dev })\n const cloud = options.cloud ?? null\n const ingestOpts = resolveIngestOptions(options.ingest, cloud !== null)\n const ingest = ingestOpts ? createIngest({ session, ...ingestOpts }) : null\n\n if (options.defaultViews !== false) {\n for (const view of buildDefaultViews(options.shortcut)) views.register(view)\n }\n if (options.views) {\n for (const view of options.views) views.register(view)\n }\n\n let shadowRoot: ShadowRoot | null = null\n const mountCleanup = createCleanupStack()\n let mounted = false\n\n function mount(target?: Element): void {\n if (mounted) return\n const mountTarget =\n target ?? (typeof document !== \"undefined\" ? document.body : null)\n if (!mountTarget) {\n throw new Error(\"createUidex: no mount target available\")\n }\n\n const shell = createSurfaceShell({\n mount: mountTarget,\n registry,\n session,\n stylesheets: options.stylesheets,\n initialCorner: options.initialCorner,\n appTitle: options.appTitle,\n inspector: {\n onSelect: (match) => {\n const view = views.findMatch(match.ref)\n if (!view) return\n session.send({\n type: \"SELECT\",\n ref: match.ref,\n entry: { id: view.id, ref: match.ref },\n })\n },\n },\n })\n shadowRoot = shell.host.shadowRoot\n inspectorRef.current = shell.inspector\n overlayRef.current = shell.overlay\n shell.overlay.onDismiss = () => session.send({ type: \"UNPIN\" })\n mountCleanup.add(shell)\n mountCleanup.add(() => {\n inspectorRef.current = null\n overlayRef.current = null\n })\n\n const highlight: HighlightController = {\n show(ref, opts) {\n const el = resolveEntityElement(ref)\n if (!el) {\n session.send({ type: \"UNHOVER\" })\n return\n }\n session.send({\n type: \"HOVER\",\n ref,\n element: el,\n color: opts?.color ?? null,\n })\n },\n hide() {\n session.send({ type: \"UNHOVER\" })\n },\n }\n\n const viewContainer = document.createElement(\"div\")\n viewContainer.setAttribute(\"data-uidex-views\", \"\")\n shell.host.chromeEl.appendChild(viewContainer)\n mountCleanup.add(() => viewContainer.remove())\n\n const viewStack = createViewStack({\n container: viewContainer,\n views,\n session,\n registry,\n cloud,\n sdkCloud,\n highlight,\n shortcut: options.shortcut,\n })\n mountCleanup.add(viewStack)\n\n if (shadowRoot) {\n mountCleanup.add(\n bindShadowKeys({\n shadowRoot,\n session,\n getActionsPopup: () => viewStack.getActionsPopup(),\n shortcut: options.shortcut,\n })\n )\n }\n\n if (ingest) {\n ingest.start()\n mountCleanup.add(() => ingest.stop())\n }\n\n mounted = true\n }\n\n function unmount(): void {\n if (!mounted) return\n mountCleanup.drain()\n shadowRoot = null\n mounted = false\n }\n\n return {\n mount,\n unmount,\n registry,\n session,\n views,\n cloud,\n ingest,\n get shadowRoot() {\n return shadowRoot\n },\n }\n}\n","import { useContext } from \"react\"\nimport type { Uidex } from \"../create-uidex\"\nimport { UidexContext } from \"./provider\"\n\nexport class UidexContextError extends Error {\n constructor(hookName: string) {\n super(\n `${hookName} must be called inside <UidexProvider>. Wrap your tree with <UidexProvider>.`\n )\n this.name = \"UidexContextError\"\n }\n}\n\nexport function useUidex(): Uidex {\n const ctx = useContext(UidexContext)\n if (!ctx) throw new UidexContextError(\"useUidex\")\n return ctx\n}\n","import { useEffect, useRef } from \"react\"\nimport { useUidex } from \"./hooks\"\n\nexport interface UidexMountProps {\n className?: string\n}\n\nexport function UidexMount({ className }: UidexMountProps) {\n const uidex = useUidex()\n const ref = useRef<HTMLDivElement | null>(null)\n\n useEffect(() => {\n const node = ref.current\n if (!node) return\n uidex.mount(node)\n return () => {\n uidex.unmount()\n }\n }, [uidex])\n\n return <div ref={ref} className={className} data-uidex-mount=\"\" />\n}\n","import { createElement, type ComponentType } from \"react\"\nimport { createRoot } from \"react-dom/client\"\nimport type { EntityRef } from \"../entities\"\nimport type { View, ViewContext, ViewPalette } from \"../views\"\n\nexport interface ReactViewDef {\n id: string\n matches?: (ref: EntityRef) => boolean\n palette?: ViewPalette\n component: ComponentType<{ ctx: ViewContext }>\n}\n\nexport function createReactView(def: ReactViewDef): View {\n return {\n id: def.id,\n matches: def.matches,\n palette: def.palette,\n surface: () => ({\n kind: \"custom\",\n render(ctx, root) {\n const reactRoot = createRoot(root)\n reactRoot.render(createElement(def.component, { ctx }))\n return () => {\n reactRoot.unmount()\n }\n },\n }),\n }\n}\n","\"use client\"\n\nimport { clsx } from \"clsx\"\nimport {\n Circle,\n FileText,\n LayoutGrid,\n LayoutPanelTop,\n MousePointerClick,\n Route as RouteIcon,\n Sparkles,\n Workflow,\n type LucideIcon,\n} from \"lucide-react\"\nimport type { ReactElement } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\nimport { KIND_STYLE, type EntityKind } from \"../entities\"\n\nconst REACT_ICONS: Record<EntityKind, LucideIcon> = {\n route: RouteIcon,\n page: FileText,\n feature: Sparkles,\n widget: LayoutGrid,\n region: LayoutPanelTop,\n element: MousePointerClick,\n primitive: Circle,\n flow: Workflow,\n}\n\nexport interface KindChipProps {\n kind: EntityKind\n label?: string\n withKindName?: boolean\n className?: string\n}\n\nexport function KindChip({\n kind,\n label,\n withKindName,\n className,\n}: KindChipProps): ReactElement {\n const style = KIND_STYLE[kind]\n const Icon = REACT_ICONS[kind]\n const text = withKindName\n ? label\n ? `${style.label} · ${label}`\n : style.label\n : label\n return (\n <span\n data-uidex-kind-chip={kind}\n className={twMerge(\n clsx(\n \"text-muted-foreground inline-flex items-center gap-1.5 text-xs font-medium\",\n className\n )\n )}\n >\n <Icon\n aria-hidden=\"true\"\n className={twMerge(clsx(\"h-4 w-4 shrink-0\", style.tone))}\n />\n {text ? <span className=\"truncate\">{text}</span> : null}\n </span>\n )\n}\n"],"mappings":";;;;AAEA,SAAS,eAAe,WAAW,gBAAgC;AACnE,SAAS,SAAS,mBAAmB;;;ACQ9B,IAAM,yBAAyB;AAQ/B,IAAM,aAAN,cAAyB,MAAM;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EAET,YACE,SACA,SACA;AACA,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,SAAS,QAAQ;AACtB,SAAK,aAAa,QAAQ;AAC1B,SAAK,UAAU,QAAQ;AAAA,EACzB;AACF;;;ACxBA,SAAS,aAAa,UAAuC;AAC3D,MAAI,SAAU,QAAO;AACrB,MACE,OAAO,eAAe,eACtB,OAAO,WAAW,UAAU,YAC5B;AACA,WAAO,WAAW,MAAM,KAAK,UAAU;AAAA,EACzC;AACA,QAAM,IAAI;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,aAAa,UAA0B;AAC9C,SAAO,SAAS,SAAS,GAAG,IAAI,SAAS,MAAM,GAAG,EAAE,IAAI;AAC1D;AAEA,SAAS,gBAAgB,QAA2C;AAClE,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,UAAU,OAAO,MAAM;AAC7B,MAAI,OAAO,SAAS,OAAO,KAAK,WAAW,EAAG,QAAO;AACrD,QAAM,OAAO,KAAK,MAAM,MAAM;AAC9B,MAAI,OAAO,SAAS,IAAI,GAAG;AACzB,UAAM,QAAQ,KAAK,MAAM,OAAO,KAAK,IAAI,KAAK,GAAI;AAClD,WAAO,QAAQ,IAAI,QAAQ;AAAA,EAC7B;AACA,SAAO;AACT;AAEA,eAAe,SAAS,UAAsC;AAC5D,QAAM,OAAO,MAAM,SAAS,KAAK;AACjC,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,aAAa,MAAe,UAA0B;AAC7D,MACE,QACA,OAAO,SAAS,YAChB,WAAW,QACX,OAAQ,KAA4B,UAAU,UAC9C;AACA,WAAQ,KAA2B;AAAA,EACrC;AACA,SAAO;AACT;AAEO,SAAS,MAAM,SAAqC;AACzD,MAAI,eAA6C;AACjD,MAAI,iBAAsC;AAE1C,QAAM,aAAa,QAAQ;AAC3B,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AACA,QAAM,WAAW,aAAa,QAAQ,YAAY,sBAAsB;AACxE,QAAM,YAAY,aAAa,QAAQ,KAAK;AAC5C,QAAM,aAAa,UAAU,UAAU;AAEvC,iBAAe,OAAO,SAAmD;AACvE,UAAM,WAAW,MAAM,UAAU,GAAG,QAAQ,eAAe;AAAA,MACzD,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,eAAe;AAAA,MACjB;AAAA,MACA,MAAM,KAAK,UAAU,OAAO;AAAA,IAC9B,CAAC;AAED,UAAM,OAAO,MAAM,SAAS,QAAQ;AAEpC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,aACJ,SAAS,WAAW,MAChB,gBAAgB,SAAS,QAAQ,IAAI,aAAa,CAAC,IACnD;AACN,YAAM,IAAI;AAAA,QACR,aAAa,MAAM,+BAA+B,SAAS,MAAM,GAAG;AAAA,QACpE,EAAE,QAAQ,SAAS,QAAQ,YAAY,SAAS,KAAK;AAAA,MACvD;AAAA,IACF;AAEA,QAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC,YAAM,IAAI,WAAW,kDAAkD;AAAA,QACrE,QAAQ,SAAS;AAAA,MACnB,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAEA,iBAAe,cAAqC;AAClD,UAAM,WAAW,MAAM,UAAU,GAAG,QAAQ,sBAAsB;AAAA,MAChE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,QAAQ;AAAA,QACR,eAAe;AAAA,MACjB;AAAA,IACF,CAAC;AAED,UAAM,OAAO,MAAM,SAAS,QAAQ;AAEpC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,aACJ,SAAS,WAAW,MAChB,gBAAgB,SAAS,QAAQ,IAAI,aAAa,CAAC,IACnD;AACN,YAAM,IAAI;AAAA,QACR,aAAa,MAAM,iCAAiC,SAAS,MAAM,GAAG;AAAA,QACtE,EAAE,QAAQ,SAAS,QAAQ,YAAY,SAAS,KAAK;AAAA,MACvD;AAAA,IACF;AAEA,QAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC,YAAM,IAAI,WAAW,4CAA4C;AAAA,QAC/D,QAAQ,SAAS;AAAA,MACnB,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAEA,WAAS,aAAoC;AAC3C,UAAM,UAAU,YAAY;AAC5B,YAAQ;AAAA,MACN,CAAC,WAAW;AACV,yBAAiB;AAAA,MACnB;AAAA,MACA,MAAM;AAAA,MAAC;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,iBAAe,WAAW;AAE1B,WAAS,YAAmC;AAC1C,WAAO,iBAAiB,eAAe,WAAW;AAAA,EACpD;AAEA,WAAS,kBAAuC;AAC9C,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,UAAU,EAAE,OAAO;AAAA,IACnB,cAAc,EAAE,WAAW,gBAAgB;AAAA,EAC7C;AACF;;;AC5JO,IAAM,WAAyB,MAAM;AAAA,EAC1C,YAAY;AAAA,EACZ,UAAU;AACZ,CAAC;;;ACNM,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;;;AC5GA,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,SAAO,EAAE,KAAK,KAAK,MAAM,OAAO,SAAS,UAAU;AACrD;;;AChIA;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;;;ACqBN,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;;;AChEO,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,SAAS,EAAE,QAAQ,UAAU,IAAI;AAAA,EACxD;AAEA,WAAS,OAAa;AACpB,QAAI,CAAC,OAAQ;AACb,oBAAgB,KAAK;AACrB,oBAAgB,KAAK;AACrB,aAAS;AACT,aAAS,SAAS,EAAE,QAAQ,UAAU,KAAK;AAAA,EAC7C;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;;;ACvGO,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;;;AC1CA,SAAS,mBAA+B;AACxC,SAAS,mBAAkC;;;ACD3C,SAAS,QAAQ,aAAa;AAsB9B,IAAM,iBAAmC;AAAA,EACvC,KAAK;AAAA,EACL,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO;AACT;AAEO,IAAM,mBAAmB,MAAM;AAAA,EACpC,OAAO,CAAC;AAAA,EAIR,SAAS;AAAA,IACP,aAAa,MAAM;AAAA,IAAC;AAAA,IACpB,aAAa,MAAM;AAAA,IAAC;AAAA,IACpB,eAAe,MAAM;AAAA,IAAC;AAAA,EACxB;AACF,CAAC,EAAE,cAAc;AAAA,EACf,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,IACN,MAAM;AAAA,MACJ,OAAO;AAAA,QACL,OAAO;AAAA,UACL,KAAK;AAAA,UACL,SAAS;AAAA,UACT,WAAW;AAAA,UACX,OAAO;AAAA,QACT,CAAC;AAAA,QACD,EAAE,MAAM,cAAc;AAAA,MACxB;AAAA,MACA,IAAI;AAAA,QACF,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,SAAS,OAAO,CAAC,EAAE,MAAM,OAAO;AAAA,YAC9B,KAAK,MAAM;AAAA,YACX,SAAS,MAAM;AAAA,YACf,OAAO,MAAM,SAAS;AAAA,UACxB,EAAE;AAAA,QACJ;AAAA,QACA,KAAK;AAAA,UACH,QAAQ;AAAA,UACR,SAAS,OAAO,CAAC,EAAE,SAAS,MAAM,OAAO;AAAA,YACvC,KAAK,MAAM,OAAO,QAAQ;AAAA,YAC1B,WAAW,MAAM,OAAO,QAAQ;AAAA,UAClC,EAAE;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,OAAO,EAAE,MAAM,cAAc;AAAA,MAC7B,IAAI;AAAA,QACF,OAAO;AAAA,UACL,SAAS;AAAA,YACP,OAAO,CAAC,EAAE,MAAM,OAAO;AAAA,cACrB,KAAK,MAAM;AAAA,cACX,SAAS,MAAM;AAAA,cACf,OAAO,MAAM,SAAS;AAAA,YACxB,EAAE;AAAA,YACF,EAAE,MAAM,gBAAgB;AAAA,UAC1B;AAAA,QACF;AAAA,QACA,SAAS,EAAE,QAAQ,OAAO;AAAA,QAC1B,KAAK;AAAA,UACH,QAAQ;AAAA,UACR,SAAS,OAAO,CAAC,EAAE,SAAS,MAAM,OAAO;AAAA,YACvC,WAAW,MAAM,OAAO,QAAQ;AAAA,UAClC,EAAE;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,OAAO,EAAE,MAAM,cAAc;AAAA,MAC7B,IAAI;AAAA,QACF,OAAO,EAAE,QAAQ,OAAO;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;ACrGD,SAAS,UAAAC,SAAQ,WAAW,QAAQ,SAAAC,cAAa;AAgDjD,IAAMC,kBAAiC;AAAA,EACrC,OAAO,CAAC;AAAA,EACR,OAAO;AAAA,EACP,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,eAAe;AAAA,EACf,cAAc;AAChB;AAEO,IAAM,iBAAiBC,OAAM;AAAA,EAClC,OAAO,CAAC;AAAA,EAKR,QAAQ;AAAA,IACN,WAAW;AAAA,EACb;AAAA,EACA,SAAS;AAAA,IACP,gBAAgB,MAAM;AAAA,IAAC;AAAA,IACvB,kBAAkB,MAAM;AAAA,IAAC;AAAA,IACzB,kBAAkB,MAAM;AAAA,IAAC;AAAA,IACzB,YAAY,MAAM;AAAA,IAAC;AAAA,EACrB;AAAA,EACA,QAAQ;AAAA,IACN,oBAAoB,CAAC,EAAE,QAAQ,MAAM,QAAQ,oBAAoB;AAAA,IACjE,YAAY,MAAM;AAAA,IAClB,WAAW,MAAM;AAAA,IACjB,oBAAoB,CAAC,EAAE,QAAQ,MAAM,QAAQ,MAAM,SAAS;AAAA,IAC5D,gBAAgB,CAAC,EAAE,QAAQ,MAAM,QAAQ,MAAM,WAAW;AAAA,IAC1D,gBAAgB,CAAC,EAAE,QAAQ,MAAM,QAAQ,MAAM,WAAW;AAAA,IAC1D,yBAAyB,CAAC,EAAE,QAAQ,MAClC,QAAQ,MAAM,WAAW,KAAK,QAAQ,MAAM,CAAC,GAAG,OAAO;AAAA,EAC3D;AACF,CAAC,EAAE,cAAc;AAAA,EACf,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,SAAS,CAAC,EAAE,MAAM,OAAO;AAAA,IACvB,GAAGD;AAAA,IACH,GAAK,SAAsC,CAAC;AAAA,EAC9C;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,KAAK;AAAA,EACP;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,MACL,SAAS;AAAA,QACPE,QAAO,CAAC,EAAE,MAAM,OAAO,EAAE,OAAO,MAAM,IAAI,EAAE;AAAA,QAC5C,UAAU,WAAW;AAAA,MACvB;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,SAAS,CAACA,QAAO,EAAE,OAAO,KAAK,CAAC,GAAG,UAAU,WAAW,CAAC;AAAA,IAC3D;AAAA,IACA,KAAK;AAAA,MACH,SAAS;AAAA,QACPA,QAAO,CAAC,EAAE,SAAS,MAAM,OAAO;AAAA,UAC9B,iBAAiB,MAAM,OAAO,QAAQ;AAAA,QACxC,EAAE;AAAA,QACF,UAAU,WAAW;AAAA,MACvB;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,SAAS,CAACA,QAAO,EAAE,iBAAiB,KAAK,CAAC,GAAG,UAAU,WAAW,CAAC;AAAA,IACrE;AAAA,IACA,eAAe;AAAA,MACb,SAASA,QAAO,CAAC,EAAE,MAAM,OAAO,EAAE,WAAW,MAAM,IAAI,EAAE;AAAA,IAC3D;AAAA,IACA,WAAW;AAAA,MACT,SAASA,QAAO,CAAC,EAAE,MAAM,OAAO;AAAA,QAC9B,OAAO,MAAM;AAAA,QACb,eAAe,MAAM;AAAA,MACvB,EAAE;AAAA,IACJ;AAAA,IACA,YAAY;AAAA,MACV,SAASA,QAAO,CAAC,EAAE,MAAM,OAAO,EAAE,cAAc,MAAM,OAAO,EAAE;AAAA,IACjE;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,MACJ,OAAOA,QAAO,EAAE,OAAO,CAAC,EAAE,CAAC;AAAA,MAC3B,IAAI;AAAA,QACF,kBAAkB,EAAE,QAAQ,aAAa;AAAA,QACzC,cAAc,EAAE,QAAQ,UAAU;AAAA,QAClC,WAAW;AAAA,UACT,QAAQ;AAAA,UACR,SAASA,QAAO,CAAC,EAAE,MAAM,OAAO,EAAE,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE;AAAA,QAC3D;AAAA,QACA,KAAK;AAAA,UACH,OAAO;AAAA,UACP,SAAS;AAAA,YACPA,QAAO,EAAE,iBAAiB,KAAK,CAAC;AAAA,YAChC,OAAO,aAAa,EAAE,MAAM,QAAQ,CAAC;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY;AAAA,MACV,OAAO,EAAE,MAAM,iBAAiB;AAAA,MAChC,MAAM,EAAE,MAAM,mBAAmB;AAAA,MACjC,IAAI;AAAA,QACF,QAAQ;AAAA,UACN,QAAQ;AAAA,UACR,SAASA,QAAO,CAAC,EAAE,SAAS,MAAM,OAAO;AAAA,YACvC,WAAW,MAAM;AAAA,YACjB,OAAO,CAAC,GAAG,QAAQ,OAAO,MAAM,KAAK;AAAA,UACvC,EAAE;AAAA,QACJ;AAAA,QACA,WAAW;AAAA,UACT,QAAQ;AAAA,UACR,SAASA,QAAO,CAAC,EAAE,MAAM,OAAO,EAAE,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE;AAAA,QAC3D;AAAA,QACA,kBAAkB,EAAE,QAAQ,OAAO;AAAA,QACnC,cAAc,EAAE,QAAQ,UAAU;AAAA,QAClC,KAAK,EAAE,QAAQ,OAAO;AAAA,MACxB;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,OAAOA,QAAO,EAAE,OAAO,CAAC,EAAE,IAAI,mBAAmB,KAAK,KAAK,CAAC,EAAE,CAAC;AAAA,MAC/D,IAAI;AAAA,QACF,WAAW;AAAA,UACT,QAAQ;AAAA,UACR,SAASA,QAAO,CAAC,EAAE,SAAS,MAAM,OAAO;AAAA,YACvC,OAAO,CAAC,GAAG,QAAQ,OAAO,MAAM,KAAK;AAAA,UACvC,EAAE;AAAA,QACJ;AAAA,QACA,OAAO,EAAE,QAAQ,OAAO;AAAA,QACxB,KAAK,EAAE,QAAQ,OAAO;AAAA,QACtB,OAAO;AAAA,UACL;AAAA,YACE,OAAO;AAAA,YACP,SAAS,EAAE,MAAM,mBAAmB;AAAA,UACtC;AAAA,UACA,EAAE,QAAQ,OAAO;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,IAAI;AAAA,QACF,WAAW;AAAA,UACT,SAASA,QAAO,CAAC,EAAE,SAAS,MAAM,OAAO;AAAA,YACvC,OAAO,CAAC,GAAG,QAAQ,OAAO,MAAM,KAAK;AAAA,UACvC,EAAE;AAAA,QACJ;AAAA,QACA,UAAU;AAAA,UACR;AAAA,YACE,OAAO;AAAA,YACP,SAASA,QAAO,CAAC,EAAE,QAAQ,OAAO;AAAA,cAChC,OAAO,QAAQ,MAAM,MAAM,GAAG,EAAE;AAAA,YAClC,EAAE;AAAA,UACJ;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,QAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,SAASA,QAAO,CAAC,EAAE,QAAQ,OAAO;AAAA,cAChC,OAAO,QAAQ,MAAM,MAAM,GAAG,EAAE;AAAA,YAClC,EAAE;AAAA,UACJ;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,QACA,OAAO,EAAE,QAAQ,OAAO;AAAA,QACxB,KAAK;AAAA,UACH;AAAA,YACE,OAAO;AAAA,YACP,SAAS,EAAE,MAAM,aAAa;AAAA,UAChC;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,SAASA,QAAO,CAAC,EAAE,QAAQ,OAAO;AAAA,cAChC,OAAO,QAAQ,MAAM,MAAM,GAAG,EAAE;AAAA,YAClC,EAAE;AAAA,UACJ;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,QAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,SAASA,QAAO,CAAC,EAAE,QAAQ,OAAO;AAAA,cAChC,OAAO,QAAQ,MAAM,MAAM,GAAG,EAAE;AAAA,YAClC,EAAE;AAAA,UACJ;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;AFnMD,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;AAChB;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;AAIA,SAAS,iBAAiB,OAAsC;AAC9D,QAAM,KAAK,MAAM,YAAY;AAC7B,QAAM,QAAQ,GAAG,SAAS;AAC1B,QAAM,gBAAgB,OAAO,YAAY;AACzC,QAAM,SACJ,iBAAiB,cAAc,UAAU,WACrC,cAAc,QAAQ,YACtB;AACN,SAAO;AAAA,IACL,OAAO,GAAG,QAAQ;AAAA,IAClB,WAAW,GAAG,QAAQ;AAAA,IACtB,OAAO,GAAG,QAAQ;AAAA,IAClB,iBAAiB;AAAA,IACjB,iBAAiB,GAAG,QAAQ,YAAY;AAAA,IACxC,OAAO,GAAG,QAAQ;AAAA,IAClB,eAAe,GAAG,QAAQ;AAAA,IAC1B,cAAc,GAAG,QAAQ;AAAA,EAC3B;AACF;AAEO,SAAS,cACd,UAAgC,CAAC,GACnB;AACd,QAAM,EAAE,aAAa,UAAU,GAAG,UAAU,IAAI;AAChD,QAAM,cAA+B,UAAU,SAAS,gBAAgB;AACxE,QAAM,kBACJ,UAAU,iBAAiB,aAAa,aAAa,WAAW;AAClE,QAAM,eAAiC,UAAU,SAAS,CAAC;AAE3D,QAAM,QAAsB;AAAA,IAC1B,OAAO,UAAU,SAAS;AAAA,IAC1B,WAAW,UAAU,aAAa;AAAA,IAClC,iBAAiB;AAAA,IACjB,OAAO;AAAA,IACP,eAAe;AAAA,IACf,cAAc,UAAU,gBAAgB;AAAA,EAC1C;AAEA,QAAM,oBAAoB,iBAAiB,QAAQ;AAAA,IACjD,SAAS;AAAA,MACP,aAAa,CAAC,EAAE,QAAQ,MAAM,UAAU,WAAW,cAAc,OAAO;AAAA,MACxE,aAAa,MAAM,UAAU,WAAW,cAAc;AAAA,MACtD,eAAe,CAAC,EAAE,QAAQ,MACxB,UAAU,WAAW,gBAAgB,OAAO;AAAA,IAChD;AAAA,EACF,CAAC;AAED,QAAM,kBAAkB,eAAe,QAAQ;AAAA,IAC7C,SAAS;AAAA,MACP,gBAAgB,MAAM,UAAU,SAAS,iBAAiB;AAAA,MAC1D,kBAAkB,MAAM,UAAU,SAAS,mBAAmB;AAAA,MAC9D,kBAAkB,MAAM,UAAU,SAAS,mBAAmB;AAAA,MAC9D,YAAY,MAAM,UAAU,SAAS,aAAa;AAAA,IACpD;AAAA,IACA,QAAQ;AAAA,MACN,WAAW;AAAA,IACb;AAAA,EACF,CAAC;AAED,QAAM,QAAQ,YAAY,iBAAiB,EAAE,MAAM,CAAC;AACpD,QAAM,MAAM;AAIZ,MAAI,aAAa,SAAS,GAAG;AAC3B,UAAM,KAAK,EAAE,MAAM,eAAe,CAAC;AACnC,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,YAAM,KAAK,EAAE,MAAM,aAAa,OAAO,aAAa,CAAC,EAAE,CAAC;AAAA,IAC1D;AAAA,EACF,WAAW,UAAU,iBAAiB;AACpC,UAAM,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAAA,EACzC;AACA,MAAI,UAAU,iBAAiB;AAC7B,UAAM,KAAK,EAAE,MAAM,OAAO,KAAK,UAAU,gBAAgB,CAAC;AAAA,EAC5D;AAEA,QAAM,QAAQ,YAA0B,CAAC,MAAM,SAAS;AAAA,IACtD,GAAG,iBAAiB,KAAK;AAAA,IACzB,SAAS;AAAA,MACP,MAAM,KAAK;AACT,YAAI,QAAQ,IAAI,EAAE,OAAO,GAAG,EAAG;AAC/B,YAAI,QAAQ,MAAM;AAChB,gBAAM,KAAK,EAAE,MAAM,UAAU,CAAC;AAAA,QAChC,OAAO;AACL,gBAAM,KAAK,EAAE,MAAM,SAAS,KAAK,SAAS,KAAK,CAAC;AAAA,QAClD;AAAA,MACF;AAAA,MACA,OAAO,KAAK;AACV,YAAI,QAAQ,IAAI,EAAE,WAAW,GAAG,EAAG;AACnC,cAAM,KAAK,EAAE,MAAM,iBAAiB,IAAI,CAAC;AAAA,MAC3C;AAAA,MACA,UAAU,OAAO;AACf,YAAI,MAAM,OAAO,qBAAqB,IAAI,EAAE,MAAM,WAAW,GAAG;AAC9D,gBAAM,KAAK,EAAE,MAAM,eAAe,CAAC;AAAA,QACrC,OAAO;AACL,gBAAM,KAAK,EAAE,MAAM,aAAa,MAAM,CAAC;AAAA,QACzC;AAAA,MACF;AAAA,MACA,WAAW;AACT,cAAM,KAAK,MAAM,YAAY;AAC7B,YAAI,GAAG,QAAQ,SAAS,GAAG;AACzB,gBAAM,KAAK,EAAE,MAAM,MAAM,CAAC;AAAA,QAC5B,WAAW,GAAG,QAAQ,SAAS,GAAG;AAChC,gBAAM,KAAK,EAAE,MAAM,WAAW,CAAC;AAAA,QACjC;AAAA,MACF;AAAA,MACA,aAAa;AACX,YAAI,IAAI,EAAE,MAAM,WAAW,EAAG;AAC9B,cAAM,KAAK,EAAE,MAAM,QAAQ,CAAC;AAAA,MAC9B;AAAA,MACA,SAAS,IAAI,KAAK;AAChB,cAAM,cAAc,QAAQ,SAAY,IAAI,EAAE,YAAY;AAC1D,YAAI,EAAE,QAAQ,UAAU,EAAE,IAAI,KAAK,YAAY,CAAC;AAAA,MAClD;AAAA,MACA,YAAY;AACV,YAAI,EAAE,QAAQ,WAAW;AAAA,MAC3B;AAAA,MACA,mBAAmB,QAAQ;AACzB,YAAI,IAAI,EAAE,oBAAoB,OAAQ;AACtC,cAAM,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAAA,MACzC;AAAA,MACA,kBAAkB;AAChB,cAAM,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAAA,MACzC;AAAA,MACA,aAAa,KAAK;AAChB,YAAI,QAAQ,IAAI,EAAE,iBAAiB,GAAG,EAAG;AACzC,cAAM,KAAK,EAAE,MAAM,OAAO,IAAI,CAAC;AAAA,MACjC;AAAA,MACA,uBAAuB;AACrB,YAAI,IAAI,EAAE,oBAAoB,KAAM;AACpC,cAAM,KAAK,EAAE,MAAM,QAAQ,CAAC;AAAA,MAC9B;AAAA,MACA,SAAS,OAAO,UAAU;AACxB,cAAM,QAAQ,IAAI;AAClB,cAAM,eAAe,YAAY,aAAa,OAAO,WAAW;AAChE,YAAI,MAAM,UAAU,SAAS,MAAM,kBAAkB;AACnD;AACF,cAAM,KAAK,EAAE,MAAM,aAAa,OAAO,eAAe,aAAa,CAAC;AAAA,MACtE;AAAA,MACA,UAAU,QAAQ;AAChB,YAAI,IAAI,EAAE,iBAAiB,OAAQ;AACnC,cAAM,KAAK,EAAE,MAAM,cAAc,OAAO,CAAC;AAAA,MAC3C;AAAA,IACF;AAAA,EACF,EAAE;AAEF,QAAM,gBAAgB,MAAY;AAChC,UAAM,OAAO,iBAAiB,KAAK;AACnC,UAAM,OAAO,MAAM,SAAS;AAC5B,UAAM,UAAoC,CAAC;AAC3C,QAAI,CAAC,QAAQ,KAAK,OAAO,KAAK,KAAK,EAAG,SAAQ,QAAQ,KAAK;AAC3D,QAAI,CAAC,QAAQ,KAAK,WAAW,KAAK,SAAS;AACzC,cAAQ,YAAY,KAAK;AAC3B,QAAI,KAAK,UAAU,KAAK,MAAO,SAAQ,QAAQ,KAAK;AACpD,QAAI,CAAC,QAAQ,KAAK,iBAAiB,KAAK,eAAe;AACrD,cAAQ,kBAAkB,KAAK;AACjC,QAAI,KAAK,oBAAoB,KAAK;AAChC,cAAQ,kBAAkB,KAAK;AACjC,QAAI,KAAK,UAAU,KAAK,MAAO,SAAQ,QAAQ,KAAK;AACpD,QAAI,KAAK,kBAAkB,KAAK;AAC9B,cAAQ,gBAAgB,KAAK;AAC/B,QAAI,KAAK,iBAAiB,KAAK;AAC7B,cAAQ,eAAe,KAAK;AAC9B,QAAI,OAAO,KAAK,OAAO,EAAE,WAAW,EAAG;AACvC,UAAM,SAAS,OAAO;AAAA,EACxB;AACA,QAAM,UAAU,aAAa;AAE7B,QAAM,UAAU;AAChB,UAAQ,OAAO,CAAC,UAAU,MAAM,KAAK,KAAK;AAC1C,SAAO;AACT;;;AG/PA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","names":["DEFAULT_LIMIT","assign","setup","initialContext","setup","assign","el","el","MousePointerClick","createLucideElement","state","createLucideElement","MousePointerClick","createLucideElement","createLucideElement","connect","machine","Highlighter","createLucideElement","createButton","createButton","Highlighter","createButton","createLucideElement","idx","createLucideElement","createActor","fromPromise","assign","setup","initialContext","createLucideElement","createLucideElement","createActor","fromPromise","createLucideElement","Circle","scrollArea","createLucideElement","Circle","scrollArea","createLucideElement","createLucideElement","sameRef","viewActions","sdkCloud","cloud","Copy","MessageCircleWarning","TicketPlus","Workflow","createLucideElement","createLucideElement","Copy","MessageCircleWarning","TicketPlus","Workflow","el","DOM_BACKED_KINDS","cloud","el","Compass","createLucideElement","toItem","createLucideElement","Compass","capitalize","DOM_BACKED_KINDS","successToast","cloud","cloud","MessageCircleWarning","createLucideElement","toItem","createLucideElement","createLucideElement","el","cloud","cloud","useEffect","jsx","useEffect","clsx","Circle","FileText","LayoutGrid","LayoutPanelTop","MousePointerClick","RouteIcon","Sparkles","Workflow","twMerge","jsx","RouteIcon","FileText","Sparkles","LayoutGrid","LayoutPanelTop","MousePointerClick","Circle","Workflow","twMerge","clsx"]}
|
|
1
|
+
{"version":3,"sources":["../../src/integrations/react/provider.tsx","../../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","../../src/integrations/react/hooks.ts","../../src/integrations/react/mount.tsx","../../src/integrations/react/create-react-view.tsx","../../src/integrations/react/kind-chip.tsx","../../src/integrations/react/devtools.tsx"],"sourcesContent":["\"use client\"\n\nimport { createContext, useEffect, useState, type ReactNode } from \"react\"\nimport { cloud as createCloud } from \"uidex/cloud\"\nimport {\n createUidex,\n type CreateUidexOptions,\n type Uidex,\n} from \"../../browser/create-uidex\"\nimport type { UserIdentity } from \"../../shared/user\"\nimport type { CloudAdapter } from \"../../browser/views\"\n\nexport const UidexContext = createContext<Uidex | null>(null)\n\nexport interface UidexProviderProps {\n /**\n * Pre-built uidex instance (e.g. the `uidex` export from `uidex.gen.ts`).\n * When provided, `projectKey`, `cloud`, `user`, and `config` are ignored.\n */\n instance?: Uidex\n projectKey?: string\n cloud?: CloudAdapter | null\n user?: UserIdentity\n config?: Omit<CreateUidexOptions, \"cloud\" | \"user\">\n children?: ReactNode\n}\n\nexport function UidexProvider({\n instance: externalInstance,\n projectKey,\n cloud,\n user,\n config,\n children,\n}: UidexProviderProps) {\n const [ownedInstance] = useState<Uidex | null>(() => {\n if (externalInstance) return null\n const resolvedCloud: CloudAdapter | null =\n cloud !== undefined\n ? cloud\n : projectKey\n ? createCloud({ projectKey })\n : null\n return createUidex({ ...config, cloud: resolvedCloud, user })\n })\n\n const instance = externalInstance ?? ownedInstance!\n\n useEffect(() => {\n if (!ownedInstance) return\n return () => {\n ownedInstance.unmount()\n }\n }, [ownedInstance])\n\n return (\n <UidexContext.Provider value={instance}>{children}</UidexContext.Provider>\n )\n}\n","export const ENTITY_KINDS = [\n \"route\",\n \"page\",\n \"feature\",\n \"widget\",\n \"region\",\n \"element\",\n \"primitive\",\n \"flow\",\n] as const\n\nexport type EntityKind = (typeof ENTITY_KINDS)[number]\n\nexport type Scope = string\n\nexport interface Location {\n file: string\n line?: number\n column?: number\n}\n\nexport interface EntityRef {\n kind: EntityKind\n id: string\n}\n\nexport interface Metadata {\n name?: string\n description?: string\n acceptance?: string[]\n notes?: string\n composes?: EntityRef[]\n flows?: readonly string[]\n features?: string[]\n widgets?: string[]\n}\n\ninterface EntityWithMetaBase {\n id: string\n loc?: Location\n scopes?: Scope[]\n meta?: Metadata\n}\n\nexport interface Route {\n kind: \"route\"\n path: string\n page: string\n}\n\nexport interface FlowStep {\n entityId: string\n action?: string\n}\n\nexport interface Flow {\n kind: \"flow\"\n id: string\n loc: Location\n touches: string[]\n steps: FlowStep[]\n}\n\nexport interface Page extends EntityWithMetaBase {\n kind: \"page\"\n}\n\nexport interface Feature extends EntityWithMetaBase {\n kind: \"feature\"\n}\n\nexport interface Widget extends EntityWithMetaBase {\n kind: \"widget\"\n}\n\nexport interface Region extends EntityWithMetaBase {\n kind: \"region\"\n}\n\nexport interface Element extends EntityWithMetaBase {\n kind: \"element\"\n}\n\nexport interface Primitive extends EntityWithMetaBase {\n kind: \"primitive\"\n}\n\nexport type Entity =\n | Route\n | Page\n | Feature\n | Widget\n | Region\n | Element\n | Primitive\n | Flow\n\nexport type EntityByKind<K extends EntityKind> = Extract<Entity, { kind: K }>\n\nexport type MetaEntityKind = Exclude<EntityKind, \"route\" | \"flow\">\n\nexport function isMetaKind(kind: EntityKind): kind is MetaEntityKind {\n return kind !== \"route\" && kind !== \"flow\"\n}\n\nexport function isMetaEntity(\n entity: Entity\n): entity is Extract<Entity, { kind: MetaEntityKind }> {\n return isMetaKind(entity.kind)\n}\n\nexport function entityKey(entity: Entity): string {\n return entity.kind === \"route\" ? entity.path : entity.id\n}\n\nexport function sameRef(a: EntityRef | null, b: EntityRef | null): boolean {\n if (a === b) return true\n if (a === null || b === null) return false\n return a.kind === b.kind && a.id === b.id\n}\n\nexport class UnknownEntityKindError extends Error {\n readonly kind: string\n constructor(kind: string) {\n super(`Unknown entity kind: ${kind}`)\n this.name = \"UnknownEntityKindError\"\n this.kind = kind\n }\n}\n\nconst KIND_SET: ReadonlySet<string> = new Set<string>(ENTITY_KINDS)\n\nexport function assertEntityKind(kind: string): asserts kind is EntityKind {\n if (!KIND_SET.has(kind)) throw new UnknownEntityKindError(kind)\n}\n","import {\n assertEntityKind,\n entityKey,\n isMetaEntity,\n isMetaKind,\n type Entity,\n type EntityByKind,\n type EntityKind,\n type Flow,\n type Metadata,\n type Scope,\n} from \"./types\"\n\nexport interface 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","import { useContext } from \"react\"\nimport type { Uidex } from \"../../browser/create-uidex\"\nimport { UidexContext } from \"./provider\"\n\nexport class UidexContextError extends Error {\n constructor(hookName: string) {\n super(\n `${hookName} must be called inside <UidexProvider>. Wrap your tree with <UidexProvider>.`\n )\n this.name = \"UidexContextError\"\n }\n}\n\nexport function useUidex(): Uidex {\n const ctx = useContext(UidexContext)\n if (!ctx) throw new UidexContextError(\"useUidex\")\n return ctx\n}\n","import { useEffect, useRef } from \"react\"\nimport { useUidex } from \"./hooks\"\n\nexport interface UidexMountProps {\n className?: string\n}\n\nexport function UidexMount({ className }: UidexMountProps) {\n const uidex = useUidex()\n const ref = useRef<HTMLDivElement | null>(null)\n\n useEffect(() => {\n const node = ref.current\n if (!node) return\n uidex.mount(node)\n return () => {\n uidex.unmount()\n }\n }, [uidex])\n\n return <div ref={ref} className={className} data-uidex-mount=\"\" />\n}\n","import { createElement, type ComponentType } from \"react\"\nimport { createRoot } from \"react-dom/client\"\nimport type { EntityRef } from \"../../shared/entities\"\nimport type { View, ViewContext, ViewPalette } from \"../../browser/views\"\nimport type { ViewSurface } from \"../../browser/views/core/surface\"\n\nexport interface ReactViewDef {\n id: string\n matches?: (ref: EntityRef) => boolean\n palette?: ViewPalette\n component: ComponentType<{ ctx: ViewContext }>\n}\n\nconst EMPTY_SURFACE: ViewSurface = {\n kind: \"detail\",\n entityKind: \"element\",\n}\n\nexport function createReactView(def: ReactViewDef): View {\n return {\n id: def.id,\n matches: def.matches,\n palette: def.palette,\n surface: () => EMPTY_SURFACE,\n render(ctx, root) {\n const reactRoot = createRoot(root)\n reactRoot.render(createElement(def.component, { ctx }))\n return () => reactRoot.unmount()\n },\n }\n}\n","\"use client\"\n\nimport { clsx } from \"clsx\"\nimport {\n Circle,\n FileText,\n LayoutGrid,\n LayoutPanelTop,\n MousePointerClick,\n Route as RouteIcon,\n Sparkles,\n Workflow,\n type LucideIcon,\n} from \"lucide-react\"\nimport type { ReactElement } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\nimport { KIND_STYLE, type EntityKind } from \"../../shared/entities\"\n\nconst REACT_ICONS: Record<EntityKind, LucideIcon> = {\n route: RouteIcon,\n page: FileText,\n feature: Sparkles,\n widget: LayoutGrid,\n region: LayoutPanelTop,\n element: MousePointerClick,\n primitive: Circle,\n flow: Workflow,\n}\n\nexport interface KindChipProps {\n kind: EntityKind\n label?: string\n withKindName?: boolean\n className?: string\n}\n\nexport function KindChip({\n kind,\n label,\n withKindName,\n className,\n}: KindChipProps): ReactElement {\n const style = KIND_STYLE[kind]\n const Icon = REACT_ICONS[kind]\n const text = withKindName\n ? label\n ? `${style.label} · ${label}`\n : style.label\n : label\n return (\n <span\n data-uidex-kind-chip={kind}\n className={twMerge(\n clsx(\n \"text-muted-foreground inline-flex items-center gap-1.5 text-xs font-medium\",\n className\n )\n )}\n >\n <Icon\n aria-hidden=\"true\"\n className={twMerge(clsx(\"h-4 w-4 shrink-0\", style.tone))}\n />\n {text ? <span className=\"truncate\">{text}</span> : null}\n </span>\n )\n}\n","\"use client\"\n\nimport { useEffect, useState } from \"react\"\nimport { cloud as createCloud } from \"uidex/cloud\"\nimport {\n createUidex,\n type CreateUidexOptions,\n type Uidex,\n} from \"../../browser/create-uidex\"\nimport type { Registry } from \"../../shared/entities\"\nimport type { UserIdentity } from \"../../shared/user\"\nimport { UidexContext } from \"./provider\"\nimport { UidexMount } from \"./mount\"\n\nexport interface UidexDevtoolsProps {\n loadRegistry: (target: Registry) => Registry\n projectKey?: string\n endpoint?: string\n user?: UserIdentity\n git?: { branch?: string; commit?: string }\n config?: Omit<CreateUidexOptions, \"cloud\" | \"user\" | \"git\">\n}\n\nexport function UidexDevtools({\n loadRegistry,\n projectKey,\n endpoint,\n user,\n git,\n config,\n}: UidexDevtoolsProps) {\n const [instance, setInstance] = useState<Uidex | null>(null)\n\n useEffect(() => {\n const cloud = projectKey ? createCloud({ projectKey, endpoint, git }) : null\n const inst = createUidex({ ...config, cloud, user, git })\n loadRegistry(inst.registry)\n setInstance(inst)\n return () => {\n inst.unmount()\n }\n }, [projectKey, user?.id])\n\n if (!instance) return null\n\n return (\n <UidexContext.Provider value={instance}>\n <UidexMount />\n </UidexContext.Provider>\n )\n}\n"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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","names":["DEFAULT_LIMIT","createStore","createStore","ref","createStore","el","svg","render","ref","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","useEffect","jsx","ref","useEffect","createElement","clsx","Circle","FileText","LayoutGrid","LayoutPanelTop","MousePointerClick","RouteIcon","Sparkles","Workflow","twMerge","jsx","RouteIcon","FileText","Sparkles","LayoutGrid","LayoutPanelTop","MousePointerClick","Circle","Workflow","twMerge","clsx","useEffect","useState","createCloud","jsx","useState","useEffect","createCloud"]}
|