uidex 0.2.4 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +253 -353
  2. package/dist/cli/cli.cjs +3243 -0
  3. package/dist/cli/cli.cjs.map +1 -0
  4. package/dist/cloud/index.cjs +149 -0
  5. package/dist/cloud/index.cjs.map +1 -0
  6. package/dist/cloud/index.d.cts +108 -0
  7. package/dist/cloud/index.d.ts +108 -0
  8. package/dist/cloud/index.js +120 -0
  9. package/dist/cloud/index.js.map +1 -0
  10. package/dist/headless/index.cjs +3580 -0
  11. package/dist/headless/index.cjs.map +1 -0
  12. package/dist/headless/index.d.cts +214 -0
  13. package/dist/headless/index.d.ts +214 -0
  14. package/dist/headless/index.js +3562 -0
  15. package/dist/headless/index.js.map +1 -0
  16. package/dist/index.cjs +6902 -9801
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +901 -146
  19. package/dist/index.d.ts +901 -146
  20. package/dist/index.js +6896 -9805
  21. package/dist/index.js.map +1 -1
  22. package/dist/playwright/index.cjs +164 -24
  23. package/dist/playwright/index.cjs.map +1 -1
  24. package/dist/playwright/index.d.cts +30 -53
  25. package/dist/playwright/index.d.ts +30 -53
  26. package/dist/playwright/index.js +148 -21
  27. package/dist/playwright/index.js.map +1 -1
  28. package/dist/playwright/reporter.cjs +62 -28
  29. package/dist/playwright/reporter.cjs.map +1 -1
  30. package/dist/playwright/reporter.d.cts +24 -12
  31. package/dist/playwright/reporter.d.ts +24 -12
  32. package/dist/playwright/reporter.js +62 -28
  33. package/dist/playwright/reporter.js.map +1 -1
  34. package/dist/react/index.cjs +6936 -9808
  35. package/dist/react/index.cjs.map +1 -1
  36. package/dist/react/index.d.cts +673 -146
  37. package/dist/react/index.d.ts +673 -146
  38. package/dist/react/index.js +6980 -9811
  39. package/dist/react/index.js.map +1 -1
  40. package/dist/scan/index.cjs +3281 -0
  41. package/dist/scan/index.cjs.map +1 -0
  42. package/dist/scan/index.d.cts +373 -0
  43. package/dist/scan/index.d.ts +373 -0
  44. package/dist/scan/index.js +3224 -0
  45. package/dist/scan/index.js.map +1 -0
  46. package/package.json +71 -65
  47. package/templates/claude/audit.md +37 -0
  48. package/templates/claude/rules.md +212 -0
  49. package/claude/audit-command.md +0 -46
  50. package/claude/rules.md +0 -167
  51. package/dist/api/index.cjs +0 -254
  52. package/dist/api/index.cjs.map +0 -1
  53. package/dist/api/index.d.cts +0 -236
  54. package/dist/api/index.d.ts +0 -236
  55. package/dist/api/index.js +0 -226
  56. package/dist/api/index.js.map +0 -1
  57. package/dist/core/index.cjs +0 -11045
  58. package/dist/core/index.cjs.map +0 -1
  59. package/dist/core/index.d.cts +0 -424
  60. package/dist/core/index.d.ts +0 -424
  61. package/dist/core/index.global.js +0 -66516
  62. package/dist/core/index.global.js.map +0 -1
  63. package/dist/core/index.js +0 -10995
  64. package/dist/core/index.js.map +0 -1
  65. package/dist/core/style.css +0 -1529
  66. package/dist/scripts/cli.cjs +0 -3904
  67. package/uidex.schema.json +0 -93
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/entities/types.ts","../../src/entities/registry.ts","../../src/entities/style.ts","../../src/entities/display-name.ts","../../src/internal/cleanup.ts","../../src/session/store.ts","../../src/flows/highlight.ts","../../src/flows/surface.ts","../../src/styles/tailwind.built.css","../../src/surface/constants.ts","../../src/surface/host.ts","../../src/surface/cursor-tooltip.ts","../../src/surface/inspector.ts","../../src/surface/menu-bar.ts","../../src/surface/overlay.ts","../../src/surface/theme.ts","../../src/surface/shell.ts","../../src/headless/index.ts"],"sourcesContent":["export const ENTITY_KINDS = [\n \"route\",\n \"page\",\n \"feature\",\n \"widget\",\n \"region\",\n \"element\",\n \"primitive\",\n \"flow\",\n] as const\n\nexport type EntityKind = (typeof ENTITY_KINDS)[number]\n\nexport type Scope = string\n\nexport interface Location {\n file: string\n line?: number\n column?: number\n}\n\nexport interface EntityRef {\n kind: EntityKind\n id: string\n}\n\nexport interface Metadata {\n name?: string\n description?: string\n acceptance?: string[]\n notes?: string\n composes?: EntityRef[]\n flows?: readonly string[]\n features?: string[]\n widgets?: string[]\n}\n\ninterface EntityWithMetaBase {\n id: string\n loc?: Location\n scopes?: Scope[]\n meta?: Metadata\n}\n\nexport interface Route {\n kind: \"route\"\n path: string\n page: string\n}\n\nexport interface Flow {\n kind: \"flow\"\n id: string\n loc: Location\n touches: string[]\n}\n\nexport interface Page extends EntityWithMetaBase {\n kind: \"page\"\n}\n\nexport interface Feature extends EntityWithMetaBase {\n kind: \"feature\"\n}\n\nexport interface Widget extends EntityWithMetaBase {\n kind: \"widget\"\n}\n\nexport interface Region extends EntityWithMetaBase {\n kind: \"region\"\n}\n\nexport interface Element extends EntityWithMetaBase {\n kind: \"element\"\n}\n\nexport interface Primitive extends EntityWithMetaBase {\n kind: \"primitive\"\n}\n\nexport type Entity =\n | Route\n | Page\n | Feature\n | Widget\n | Region\n | Element\n | Primitive\n | Flow\n\nexport type EntityByKind<K extends EntityKind> = Extract<Entity, { kind: K }>\n\nexport type MetaEntityKind = Exclude<EntityKind, \"route\" | \"flow\">\n\nexport function isMetaKind(kind: EntityKind): kind is MetaEntityKind {\n return kind !== \"route\" && kind !== \"flow\"\n}\n\nexport function isMetaEntity(\n entity: Entity\n): entity is Extract<Entity, { kind: MetaEntityKind }> {\n return isMetaKind(entity.kind)\n}\n\nexport function entityKey(entity: Entity): string {\n return entity.kind === \"route\" ? entity.path : entity.id\n}\n\nexport function sameRef(a: EntityRef | null, b: EntityRef | null): boolean {\n if (a === b) return true\n if (a === null || b === null) return false\n return a.kind === b.kind && a.id === b.id\n}\n\nexport class UnknownEntityKindError extends Error {\n readonly kind: string\n constructor(kind: string) {\n super(`Unknown entity kind: ${kind}`)\n this.name = \"UnknownEntityKindError\"\n this.kind = kind\n }\n}\n\nconst KIND_SET: ReadonlySet<string> = new Set<string>(ENTITY_KINDS)\n\nexport function assertEntityKind(kind: string): asserts kind is EntityKind {\n if (!KIND_SET.has(kind)) throw new UnknownEntityKindError(kind)\n}\n","import {\n assertEntityKind,\n entityKey,\n isMetaEntity,\n isMetaKind,\n type Entity,\n type EntityByKind,\n type EntityKind,\n type Flow,\n type Metadata,\n type Scope,\n} from \"./types\"\n\nexport interface Registry {\n add(entity: Entity): void\n get<K extends EntityKind>(kind: K, id: string): EntityByKind<K> | undefined\n list<K extends EntityKind>(kind: K): ReadonlyArray<EntityByKind<K>>\n query(predicate: (entity: Entity) => boolean): Entity[]\n byScope(scope: Scope): Entity[]\n touchedBy(flowId: string): Entity[]\n}\n\ntype KindStore = {\n [K in EntityKind]: Map<string, EntityByKind<K>>\n}\n\nfunction emptyStore(): KindStore {\n return {\n route: new Map(),\n page: new Map(),\n feature: new Map(),\n widget: new Map(),\n region: new Map(),\n element: new Map(),\n primitive: new Map(),\n flow: new Map(),\n }\n}\n\nfunction computeFlowIds(flows: Iterable<Flow>, targetId: string): string[] {\n const ids: string[] = []\n for (const flow of flows) {\n if (flow.touches.includes(targetId)) ids.push(flow.id)\n }\n return ids\n}\n\nfunction freezeEntity<E extends Entity>(entity: E, flows: Iterable<Flow>): E {\n if (!isMetaKind(entity.kind)) return entity\n const withMeta = entity as Extract<Entity, { meta?: Metadata }>\n if (withMeta.meta === undefined) return entity\n const computedFlows = Object.freeze(computeFlowIds(flows, withMeta.id))\n const mergedMeta: Metadata = { ...withMeta.meta, flows: computedFlows }\n return { ...entity, meta: Object.freeze(mergedMeta) } as E\n}\n\nexport function createRegistry(): Registry {\n const store = emptyStore()\n let flowsCache: Flow[] | null = null\n\n const getFlows = (): Flow[] => {\n if (flowsCache === null) flowsCache = Array.from(store.flow.values())\n return flowsCache\n }\n\n const add = (entity: Entity): void => {\n assertEntityKind(entity.kind)\n const key = entityKey(entity)\n ;(store[entity.kind] as Map<string, Entity>).set(key, entity)\n flowsCache = null\n }\n\n const get = <K extends EntityKind>(\n kind: K,\n id: string\n ): EntityByKind<K> | undefined => {\n assertEntityKind(kind)\n const raw = store[kind].get(id) as EntityByKind<K> | undefined\n if (raw === undefined) return undefined\n return freezeEntity(raw, getFlows())\n }\n\n const list = <K extends EntityKind>(\n kind: K\n ): ReadonlyArray<EntityByKind<K>> => {\n assertEntityKind(kind)\n const flows = getFlows()\n return Array.from(store[kind].values(), (e) =>\n freezeEntity(e as EntityByKind<K>, flows)\n )\n }\n\n const allEntities = function* (): Generator<Entity> {\n for (const kind of Object.keys(store) as EntityKind[]) {\n for (const entity of store[kind].values()) {\n yield entity as Entity\n }\n }\n }\n\n const query = (predicate: (entity: Entity) => boolean): Entity[] => {\n const flows = getFlows()\n const result: Entity[] = []\n for (const entity of allEntities()) {\n if (predicate(entity)) result.push(freezeEntity(entity, flows))\n }\n return result\n }\n\n const byScope = (scope: Scope): Entity[] =>\n query(\n (entity) =>\n \"scopes\" in entity &&\n Array.isArray(entity.scopes) &&\n entity.scopes.includes(scope)\n )\n\n const touchedBy = (flowId: string): Entity[] => {\n const flow = store.flow.get(flowId)\n if (flow === undefined) return []\n const ids = new Set(flow.touches)\n return query((entity) => {\n if (!isMetaEntity(entity)) return false\n return ids.has(entity.id)\n })\n }\n\n return { add, get, list, query, byScope, touchedBy }\n}\n","import {\n Circle,\n FileText,\n type IconNode,\n LayoutGrid,\n LayoutPanelTop,\n MousePointerClick,\n Route as RouteIcon,\n Sparkles,\n Workflow,\n} from \"lucide\"\nimport type { EntityKind } from \"./types\"\n\nexport interface KindStyleEntry {\n icon: IconNode\n tone: string\n chip: string\n color: string\n label: string\n}\n\nexport const KIND_STYLE: Record<EntityKind, KindStyleEntry> = {\n route: {\n icon: RouteIcon,\n tone: \"text-blue-700 dark:text-blue-300\",\n chip: \"bg-blue-400/20 text-blue-700 group-data-hover:bg-blue-400/30 dark:bg-blue-400/10 dark:text-blue-300 dark:group-data-hover:bg-blue-400/15\",\n color: \"#60a5fa\",\n label: \"Route\",\n },\n page: {\n icon: FileText,\n tone: \"text-emerald-700 dark:text-emerald-300\",\n chip: \"bg-emerald-400/20 text-emerald-700 group-data-hover:bg-emerald-400/30 dark:bg-emerald-400/10 dark:text-emerald-300 dark:group-data-hover:bg-emerald-400/15\",\n color: \"#34d399\",\n label: \"Page\",\n },\n feature: {\n icon: Sparkles,\n tone: \"text-amber-700 dark:text-amber-300\",\n chip: \"bg-amber-400/20 text-amber-700 group-data-hover:bg-amber-400/30 dark:bg-amber-400/10 dark:text-amber-300 dark:group-data-hover:bg-amber-400/15\",\n color: \"#fbbf24\",\n label: \"Feature\",\n },\n widget: {\n icon: LayoutGrid,\n tone: \"text-violet-700 dark:text-violet-300\",\n chip: \"bg-violet-400/20 text-violet-700 group-data-hover:bg-violet-400/30 dark:bg-violet-400/10 dark:text-violet-300 dark:group-data-hover:bg-violet-400/15\",\n color: \"#a78bfa\",\n label: \"Widget\",\n },\n region: {\n icon: LayoutPanelTop,\n tone: \"text-cyan-700 dark:text-cyan-300\",\n chip: \"bg-cyan-400/20 text-cyan-700 group-data-hover:bg-cyan-400/30 dark:bg-cyan-400/10 dark:text-cyan-300 dark:group-data-hover:bg-cyan-400/15\",\n color: \"#22d3ee\",\n label: \"Region\",\n },\n element: {\n icon: MousePointerClick,\n tone: \"text-rose-700 dark:text-rose-300\",\n chip: \"bg-rose-400/20 text-rose-700 group-data-hover:bg-rose-400/30 dark:bg-rose-400/10 dark:text-rose-300 dark:group-data-hover:bg-rose-400/15\",\n color: \"#fb7185\",\n label: \"Element\",\n },\n primitive: {\n icon: Circle,\n tone: \"text-slate-700 dark:text-slate-300\",\n chip: \"bg-slate-400/20 text-slate-700 group-data-hover:bg-slate-400/30 dark:bg-slate-400/10 dark:text-slate-300 dark:group-data-hover:bg-slate-400/15\",\n color: \"#94a3b8\",\n label: \"Primitive\",\n },\n flow: {\n icon: Workflow,\n tone: \"text-fuchsia-700 dark:text-fuchsia-300\",\n chip: \"bg-fuchsia-400/20 text-fuchsia-700 group-data-hover:bg-fuchsia-400/30 dark:bg-fuchsia-400/10 dark:text-fuchsia-300 dark:group-data-hover:bg-fuchsia-400/15\",\n color: \"#e879f9\",\n label: \"Flow\",\n },\n}\n","import type { Entity } from \"./types\"\n\nexport function prettify(id: string): string {\n const parts = id.split(/[-_]+/).filter(Boolean)\n const words = parts.flatMap((part) => part.split(/(?=[A-Z])/).filter(Boolean))\n if (words.length === 0) return \"\"\n return words\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(\" \")\n}\n\nexport function displayName(entity: Entity, node?: Element | null): string {\n if (entity.kind === \"route\") return prettify(entity.page)\n if (entity.kind !== \"flow\") {\n const authored = entity.meta?.name\n if (authored) return authored\n }\n const aria = node?.getAttribute(\"aria-label\")?.trim()\n if (aria) return aria\n return prettify(entity.id)\n}\n","export type Cleanup = () => void\n\nexport interface Disposable {\n destroy(): void\n}\n\nexport interface CleanupStack {\n add(cleanup: Cleanup | Disposable | null | undefined): void\n drain(): void\n}\n\nexport function createCleanupStack(): CleanupStack {\n const stack: Cleanup[] = []\n return {\n add(cleanup) {\n if (!cleanup) return\n if (typeof cleanup === \"function\") stack.push(cleanup)\n else stack.push(() => cleanup.destroy())\n },\n drain() {\n for (let i = stack.length - 1; i >= 0; i--) {\n try {\n stack[i]()\n } catch (err) {\n console.error(\"[uidex] cleanup threw\", err)\n }\n }\n stack.length = 0\n },\n }\n}\n\nexport function composeCleanups(cleanups: readonly Cleanup[]): Cleanup {\n return () => {\n for (let i = cleanups.length - 1; i >= 0; i--) {\n try {\n cleanups[i]?.()\n } catch (err) {\n console.error(\"[uidex] cleanup threw\", err)\n }\n }\n }\n}\n","import { createActor, type Actor } from \"xstate\"\nimport { createStore, type StoreApi } from \"zustand/vanilla\"\n\nimport { sameRef } from \"../entities\"\nimport { highlightMachine, type HighlightContext } from \"../flows/highlight\"\nimport {\n surfaceMachine,\n type SurfaceEvent,\n type SurfaceInput,\n} from \"../flows/surface\"\nimport type {\n ResolvedTheme,\n SessionSnapshot,\n SessionState,\n ThemePreference,\n ViewStackEntry,\n} from \"./types\"\n\nexport type SessionStore = StoreApi<SessionState> & {\n send(event: SurfaceEvent): void\n}\n\nexport interface SurfaceBindings {\n mountInspector?: () => void\n destroyInspector?: () => void\n openActionsPopup?: () => void\n closePopup?: () => void\n}\n\nexport interface HighlightBindings {\n showOverlay?: (context: HighlightContext) => void\n hideOverlay?: () => void\n updateOverlay?: (context: HighlightContext) => void\n}\n\nexport interface SessionBindings {\n surface?: SurfaceBindings\n highlight?: HighlightBindings\n}\n\nexport interface CreateSessionOptions extends Partial<SessionSnapshot> {\n detectTheme?: () => ResolvedTheme\n /**\n * Action implementations injected into the surface machine and its\n * highlight child actor. Implementations may be closures that read from\n * mutable refs filled in after `createSession` returns (e.g., the SDK's\n * shell isn't available until `mount`).\n */\n bindings?: SessionBindings\n}\n\nconst defaultSnapshot: SessionSnapshot = {\n hover: null,\n selection: null,\n stack: [],\n pinnedHighlight: null,\n inspectorActive: false,\n theme: \"auto\",\n resolvedTheme: \"light\",\n ingestActive: false,\n}\n\nexport function resolveTheme(\n preference: ThemePreference,\n detect?: () => ResolvedTheme\n): ResolvedTheme {\n if (preference !== \"auto\") return preference\n if (detect) return detect()\n if (\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as { matchMedia?: unknown }).matchMedia === \"function\"\n ) {\n const mql = (\n globalThis as {\n matchMedia: (q: string) => { matches: boolean }\n }\n ).matchMedia(\"(prefers-color-scheme: dark)\")\n return mql.matches ? \"dark\" : \"light\"\n }\n return \"light\"\n}\n\ntype SurfaceActor = Actor<typeof surfaceMachine>\n\nfunction projectFromActor(actor: SurfaceActor): SessionSnapshot {\n const sn = actor.getSnapshot()\n const child = sn.children.highlight\n const childSnapshot = child?.getSnapshot()\n const pinned =\n childSnapshot && childSnapshot.value === \"pinned\"\n ? childSnapshot.context.pinnedRef\n : null\n return {\n hover: sn.context.hover,\n selection: sn.context.selection,\n stack: sn.context.stack,\n pinnedHighlight: pinned,\n inspectorActive: sn.matches(\"inspecting\"),\n theme: sn.context.theme,\n resolvedTheme: sn.context.resolvedTheme,\n ingestActive: sn.context.ingestActive,\n }\n}\n\nexport function createSession(\n options: CreateSessionOptions = {}\n): SessionStore {\n const { detectTheme, bindings, ...overrides } = options\n const initialPref: ThemePreference = overrides.theme ?? defaultSnapshot.theme\n const initialResolved: ResolvedTheme =\n overrides.resolvedTheme ?? resolveTheme(initialPref, detectTheme)\n const initialStack: ViewStackEntry[] = overrides.stack ?? []\n\n const input: SurfaceInput = {\n hover: overrides.hover ?? null,\n selection: overrides.selection ?? null,\n pinnedHighlight: null,\n theme: initialPref,\n resolvedTheme: initialResolved,\n ingestActive: overrides.ingestActive ?? false,\n }\n\n const providedHighlight = highlightMachine.provide({\n actions: {\n showOverlay: ({ context }) => bindings?.highlight?.showOverlay?.(context),\n hideOverlay: () => bindings?.highlight?.hideOverlay?.(),\n updateOverlay: ({ context }) =>\n bindings?.highlight?.updateOverlay?.(context),\n },\n })\n\n const providedSurface = surfaceMachine.provide({\n actions: {\n mountInspector: () => bindings?.surface?.mountInspector?.(),\n destroyInspector: () => bindings?.surface?.destroyInspector?.(),\n openActionsPopup: () => bindings?.surface?.openActionsPopup?.(),\n closePopup: () => bindings?.surface?.closePopup?.(),\n },\n actors: {\n highlight: providedHighlight,\n },\n })\n\n const actor = createActor(providedSurface, { input })\n actor.start()\n\n // Hydrate initial state via events (idle.entry resets stack, so we cannot\n // pass it through input).\n if (initialStack.length > 0) {\n actor.send({ type: \"OPEN_PALETTE\" })\n for (let i = 1; i < initialStack.length; i++) {\n actor.send({ type: \"PUSH_VIEW\", entry: initialStack[i] })\n }\n } else if (overrides.inspectorActive) {\n actor.send({ type: \"TOGGLE_INSPECTOR\" })\n }\n if (overrides.pinnedHighlight) {\n actor.send({ type: \"PIN\", ref: overrides.pinnedHighlight })\n }\n\n const store = createStore<SessionState>((_set, get) => ({\n ...projectFromActor(actor),\n actions: {\n hover(ref) {\n if (sameRef(get().hover, ref)) return\n if (ref === null) {\n actor.send({ type: \"UNHOVER\" })\n } else {\n actor.send({ type: \"HOVER\", ref, element: null })\n }\n },\n select(ref) {\n if (sameRef(get().selection, ref)) return\n actor.send({ type: \"SET_SELECTION\", ref })\n },\n pushStack(entry) {\n if (entry.id === \"command-palette\" && get().stack.length === 0) {\n actor.send({ type: \"OPEN_PALETTE\" })\n } else {\n actor.send({ type: \"PUSH_VIEW\", entry })\n }\n },\n popStack() {\n const sn = actor.getSnapshot()\n if (sn.matches(\"palette\")) {\n actor.send({ type: \"ESC\" })\n } else if (sn.matches(\"viewing\")) {\n actor.send({ type: \"POP_VIEW\" })\n }\n },\n clearStack() {\n if (get().stack.length === 0) return\n actor.send({ type: \"CLOSE\" })\n },\n openView(id, ref) {\n const resolvedRef = ref === undefined ? get().selection : ref\n get().actions.pushStack({ id, ref: resolvedRef })\n },\n closeView() {\n get().actions.clearStack()\n },\n setInspectorActive(active) {\n if (get().inspectorActive === active) return\n actor.send({ type: \"TOGGLE_INSPECTOR\" })\n },\n toggleInspector() {\n actor.send({ type: \"TOGGLE_INSPECTOR\" })\n },\n pinHighlight(ref) {\n if (sameRef(get().pinnedHighlight, ref)) return\n actor.send({ type: \"PIN\", ref })\n },\n clearPinnedHighlight() {\n if (get().pinnedHighlight === null) return\n actor.send({ type: \"UNPIN\" })\n },\n setTheme(theme, resolved) {\n const state = get()\n const nextResolved = resolved ?? resolveTheme(theme, detectTheme)\n if (state.theme === theme && state.resolvedTheme === nextResolved)\n return\n actor.send({ type: \"SET_THEME\", theme, resolvedTheme: nextResolved })\n },\n setIngest(active) {\n if (get().ingestActive === active) return\n actor.send({ type: \"SET_INGEST\", active })\n },\n },\n }))\n\n const projectAndSet = (): void => {\n const next = projectFromActor(actor)\n const prev = store.getState()\n const updates: Partial<SessionSnapshot> = {}\n if (!sameRef(prev.hover, next.hover)) updates.hover = next.hover\n if (!sameRef(prev.selection, next.selection))\n updates.selection = next.selection\n if (prev.stack !== next.stack) updates.stack = next.stack\n if (!sameRef(prev.pinnedHighlight, next.pinnedHighlight))\n updates.pinnedHighlight = next.pinnedHighlight\n if (prev.inspectorActive !== next.inspectorActive)\n updates.inspectorActive = next.inspectorActive\n if (prev.theme !== next.theme) updates.theme = next.theme\n if (prev.resolvedTheme !== next.resolvedTheme)\n updates.resolvedTheme = next.resolvedTheme\n if (prev.ingestActive !== next.ingestActive)\n updates.ingestActive = next.ingestActive\n if (Object.keys(updates).length === 0) return\n store.setState(updates)\n }\n actor.subscribe(projectAndSet)\n\n const session = store as SessionStore\n session.send = (event) => actor.send(event)\n return session\n}\n","import { assign, setup } from \"xstate\"\n\nimport type { EntityRef } from \"../entities/types\"\n\nexport interface HighlightContext {\n ref: EntityRef | null\n element: HTMLElement | null\n pinnedRef: EntityRef | null\n color: string | null\n}\n\nexport type HighlightEvent =\n | {\n type: \"HOVER\"\n ref: EntityRef\n element: HTMLElement\n color?: string | null\n }\n | { type: \"UNHOVER\" }\n | { type: \"PIN\"; ref?: EntityRef }\n | { type: \"UNPIN\" }\n\nconst initialContext: HighlightContext = {\n ref: null,\n element: null,\n pinnedRef: null,\n color: null,\n}\n\nexport const highlightMachine = setup({\n types: {} as {\n context: HighlightContext\n events: HighlightEvent\n },\n actions: {\n showOverlay: () => {},\n hideOverlay: () => {},\n updateOverlay: () => {},\n },\n}).createMachine({\n id: \"highlight\",\n initial: \"none\",\n context: initialContext,\n states: {\n none: {\n entry: [\n assign({\n ref: null,\n element: null,\n pinnedRef: null,\n color: null,\n }),\n { type: \"hideOverlay\" },\n ],\n on: {\n HOVER: {\n target: \"transient\",\n actions: assign(({ event }) => ({\n ref: event.ref,\n element: event.element,\n color: event.color ?? null,\n })),\n },\n PIN: {\n target: \"pinned\",\n actions: assign(({ context, event }) => ({\n ref: event.ref ?? context.ref,\n pinnedRef: event.ref ?? context.ref,\n })),\n },\n },\n },\n transient: {\n entry: { type: \"showOverlay\" },\n on: {\n HOVER: {\n actions: [\n assign(({ event }) => ({\n ref: event.ref,\n element: event.element,\n color: event.color ?? null,\n })),\n { type: \"updateOverlay\" },\n ],\n },\n UNHOVER: { target: \"none\" },\n PIN: {\n target: \"pinned\",\n actions: assign(({ context, event }) => ({\n pinnedRef: event.ref ?? context.ref,\n })),\n },\n },\n },\n pinned: {\n entry: { type: \"showOverlay\" },\n on: {\n UNPIN: { target: \"none\" },\n },\n },\n },\n})\n","import { assign, forwardTo, sendTo, setup } from \"xstate\"\n\nimport type { EntityRef } from \"../entities/types\"\nimport type {\n ResolvedTheme,\n ThemePreference,\n ViewStackEntry,\n} from \"../session/types\"\nimport { highlightMachine } from \"./highlight\"\n\nexport interface SurfaceContext {\n stack: ViewStackEntry[]\n hover: EntityRef | null\n selection: EntityRef | null\n pinnedHighlight: EntityRef | null\n theme: ThemePreference\n resolvedTheme: ResolvedTheme\n ingestActive: boolean\n}\n\nexport type SurfaceEvent =\n | { type: \"TOGGLE_INSPECTOR\" }\n | { type: \"OPEN_PALETTE\" }\n | { type: \"PUSH_VIEW\"; entry: ViewStackEntry }\n | { type: \"POP_VIEW\" }\n | { type: \"CLOSE\" }\n | { type: \"ESC\" }\n | { type: \"CMD_K\" }\n | { type: \"SELECT\"; ref: EntityRef | null; entry: ViewStackEntry }\n | { type: \"SET_SELECTION\"; ref: EntityRef | null }\n | {\n type: \"HOVER\"\n ref: EntityRef\n element: HTMLElement | null\n color?: string | null\n }\n | { type: \"UNHOVER\" }\n | { type: \"PIN\"; ref?: EntityRef }\n | { type: \"UNPIN\" }\n | {\n type: \"SET_THEME\"\n theme: ThemePreference\n resolvedTheme: ResolvedTheme\n }\n | { type: \"SET_INGEST\"; active: boolean }\n\nexport type SurfaceInput = Partial<SurfaceContext>\n\nconst initialContext: SurfaceContext = {\n stack: [],\n hover: null,\n selection: null,\n pinnedHighlight: null,\n theme: \"auto\",\n resolvedTheme: \"light\",\n ingestActive: false,\n}\n\nexport const surfaceMachine = setup({\n types: {} as {\n context: SurfaceContext\n events: SurfaceEvent\n children: { highlight: \"highlight\" }\n },\n actors: {\n highlight: highlightMachine,\n },\n actions: {\n mountInspector: () => {},\n destroyInspector: () => {},\n openActionsPopup: () => {},\n closePopup: () => {},\n },\n guards: {\n hasPinnedHighlight: ({ context }) => context.pinnedHighlight !== null,\n hasActions: () => false,\n popupOpen: () => false,\n stackDeeperThanTwo: ({ context }) => context.stack.length > 2,\n stackEqualsTwo: ({ context }) => context.stack.length === 2,\n stackEqualsOne: ({ context }) => context.stack.length === 1,\n paletteAtBottomDepthTwo: ({ context }) =>\n context.stack.length === 2 && context.stack[0]?.id === \"command-palette\",\n },\n}).createMachine({\n id: \"surface\",\n initial: \"idle\",\n context: ({ input }) => ({\n ...initialContext,\n ...((input as SurfaceInput | undefined) ?? {}),\n }),\n invoke: {\n id: \"highlight\",\n src: \"highlight\",\n },\n on: {\n HOVER: {\n actions: [\n assign(({ event }) => ({ hover: event.ref })),\n forwardTo(\"highlight\"),\n ],\n },\n UNHOVER: {\n actions: [assign({ hover: null }), forwardTo(\"highlight\")],\n },\n PIN: {\n actions: [\n assign(({ context, event }) => ({\n pinnedHighlight: event.ref ?? context.hover,\n })),\n forwardTo(\"highlight\"),\n ],\n },\n UNPIN: {\n actions: [assign({ pinnedHighlight: null }), forwardTo(\"highlight\")],\n },\n SET_SELECTION: {\n actions: assign(({ event }) => ({ selection: event.ref })),\n },\n SET_THEME: {\n actions: assign(({ event }) => ({\n theme: event.theme,\n resolvedTheme: event.resolvedTheme,\n })),\n },\n SET_INGEST: {\n actions: assign(({ event }) => ({ ingestActive: event.active })),\n },\n },\n states: {\n idle: {\n entry: assign({ stack: [] }),\n on: {\n TOGGLE_INSPECTOR: { target: \"inspecting\" },\n OPEN_PALETTE: { target: \"palette\" },\n PUSH_VIEW: {\n target: \"viewing\",\n actions: assign(({ event }) => ({ stack: [event.entry] })),\n },\n ESC: {\n guard: \"hasPinnedHighlight\",\n actions: [\n assign({ pinnedHighlight: null }),\n sendTo(\"highlight\", { type: \"UNPIN\" }),\n ],\n },\n },\n },\n inspecting: {\n entry: { type: \"mountInspector\" },\n exit: { type: \"destroyInspector\" },\n on: {\n SELECT: {\n target: \"viewing\",\n actions: assign(({ context, event }) => ({\n selection: event.ref,\n stack: [...context.stack, event.entry],\n })),\n },\n PUSH_VIEW: {\n target: \"viewing\",\n actions: assign(({ event }) => ({ stack: [event.entry] })),\n },\n TOGGLE_INSPECTOR: { target: \"idle\" },\n OPEN_PALETTE: { target: \"palette\" },\n ESC: { target: \"idle\" },\n },\n },\n palette: {\n entry: assign({ stack: [{ id: \"command-palette\", ref: null }] }),\n on: {\n PUSH_VIEW: {\n target: \"viewing\",\n actions: assign(({ context, event }) => ({\n stack: [...context.stack, event.entry],\n })),\n },\n CLOSE: { target: \"idle\" },\n ESC: { target: \"idle\" },\n CMD_K: [\n {\n guard: \"hasActions\",\n actions: { type: \"openActionsPopup\" },\n },\n { target: \"idle\" },\n ],\n },\n },\n viewing: {\n on: {\n PUSH_VIEW: {\n actions: assign(({ context, event }) => ({\n stack: [...context.stack, event.entry],\n })),\n },\n POP_VIEW: [\n {\n guard: \"stackDeeperThanTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"paletteAtBottomDepthTwo\",\n target: \"palette\",\n },\n {\n guard: \"stackEqualsTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"stackEqualsOne\",\n target: \"idle\",\n },\n ],\n CLOSE: { target: \"idle\" },\n ESC: [\n {\n guard: \"popupOpen\",\n actions: { type: \"closePopup\" },\n },\n {\n guard: \"stackDeeperThanTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"paletteAtBottomDepthTwo\",\n target: \"palette\",\n },\n {\n guard: \"stackEqualsTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"stackEqualsOne\",\n target: \"idle\",\n },\n ],\n },\n },\n },\n})\n","/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-amber-300: oklch(87.9% 0.169 91.605);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-500: oklch(76.9% 0.188 70.08);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-emerald-300: oklch(84.5% 0.143 164.978);\n --color-emerald-400: oklch(76.5% 0.177 163.223);\n --color-emerald-500: oklch(69.6% 0.17 162.48);\n --color-emerald-700: oklch(50.8% 0.118 165.612);\n --color-cyan-300: oklch(86.5% 0.127 207.078);\n --color-cyan-400: oklch(78.9% 0.154 211.53);\n --color-cyan-700: oklch(52% 0.105 223.128);\n --color-blue-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-violet-300: oklch(81.1% 0.111 293.571);\n --color-violet-400: oklch(70.2% 0.183 293.541);\n --color-violet-700: oklch(49.1% 0.27 292.581);\n --color-fuchsia-300: oklch(83.3% 0.145 321.434);\n --color-fuchsia-400: oklch(74% 0.238 322.16);\n --color-fuchsia-700: oklch(51.8% 0.253 323.949);\n --color-rose-300: oklch(81% 0.117 11.638);\n --color-rose-400: oklch(71.2% 0.194 13.428);\n --color-rose-700: oklch(51.4% 0.222 16.935);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-neutral-50: oklch(98.5% 0 0);\n --color-neutral-100: oklch(97% 0 0);\n --color-neutral-400: oklch(70.8% 0 0);\n --color-neutral-500: oklch(55.6% 0 0);\n --color-neutral-800: oklch(26.9% 0 0);\n --color-neutral-950: oklch(14.5% 0 0);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-xl: 36rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --tracking-widest: 0.1em;\n --leading-relaxed: 1.625;\n --radius-xl: calc(var(--radius) * 1.4);\n --radius-2xl: calc(var(--radius) * 1.8);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --blur-sm: 8px;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\",\n Roboto, sans-serif;\n --default-mono-font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n --color-border: var(--border);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .pointer-events-none {\n pointer-events: none;\n }\n .invisible {\n visibility: hidden;\n }\n .visible {\n visibility: visible;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border-width: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .start {\n inset-inline-start: var(--spacing);\n }\n .end {\n inset-inline-end: var(--spacing);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .right-3 {\n right: calc(var(--spacing) * 3);\n }\n .bottom-12 {\n bottom: calc(var(--spacing) * 12);\n }\n .z-10 {\n z-index: 10;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .-mx-px {\n margin-inline: -1px;\n }\n .mx-1 {\n margin-inline: calc(var(--spacing) * 1);\n }\n .mx-2 {\n margin-inline: calc(var(--spacing) * 2);\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .ms-auto {\n margin-inline-start: auto;\n }\n .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n .ml-auto {\n margin-left: auto;\n }\n .block {\n display: block;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .hidden {\n display: none;\n }\n .inline {\n display: inline;\n }\n .inline-block {\n display: inline-block;\n }\n .inline-flex {\n display: inline-flex;\n }\n .list-item {\n display: list-item;\n }\n .table {\n display: table;\n }\n .size-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n height: calc(var(--spacing) * 3.5);\n }\n .size-4 {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n .size-6 {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n .size-7 {\n width: calc(var(--spacing) * 7);\n height: calc(var(--spacing) * 7);\n }\n .size-8 {\n width: calc(var(--spacing) * 8);\n height: calc(var(--spacing) * 8);\n }\n .size-9 {\n width: calc(var(--spacing) * 9);\n height: calc(var(--spacing) * 9);\n }\n .h-3\\.5 {\n height: calc(var(--spacing) * 3.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-4\\.5 {\n height: calc(var(--spacing) * 4.5);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-5\\.5 {\n height: calc(var(--spacing) * 5.5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-7 {\n height: calc(var(--spacing) * 7);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-\\[26rem\\] {\n height: 26rem;\n }\n .h-auto {\n height: auto;\n }\n .h-full {\n height: 100%;\n }\n .h-px {\n height: 1px;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-7 {\n min-height: calc(var(--spacing) * 7);\n }\n .min-h-8 {\n min-height: calc(var(--spacing) * 8);\n }\n .min-h-20 {\n min-height: calc(var(--spacing) * 20);\n }\n .w-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-56 {\n width: calc(var(--spacing) * 56);\n }\n .w-auto {\n width: auto;\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-xl {\n max-width: var(--container-xl);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-4 {\n min-width: calc(var(--spacing) * 4);\n }\n .min-w-4\\.5 {\n min-width: calc(var(--spacing) * 4.5);\n }\n .min-w-5 {\n min-width: calc(var(--spacing) * 5);\n }\n .min-w-5\\.5 {\n min-width: calc(var(--spacing) * 5.5);\n }\n .min-w-32 {\n min-width: calc(var(--spacing) * 32);\n }\n .flex-1 {\n flex: 1;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\n }\n .cursor-default {\n cursor: default;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize {\n resize: both;\n }\n .scroll-py-2 {\n scroll-padding-block: calc(var(--spacing) * 2);\n }\n .list-none {\n list-style-type: none;\n }\n .appearance-none {\n appearance: none;\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-row {\n flex-direction: row;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .items-center {\n align-items: center;\n }\n .items-start {\n align-items: flex-start;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-start {\n justify-content: flex-start;\n }\n .gap-0 {\n gap: calc(var(--spacing) * 0);\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .self-start {\n align-self: flex-start;\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: calc(var(--radius) * 1.8);\n }\n .rounded-\\[0\\.25rem\\] {\n border-radius: 0.25rem;\n }\n .rounded-lg {\n border-radius: var(--radius);\n }\n .rounded-md {\n border-radius: calc(var(--radius) * 0.8);\n }\n .rounded-sm {\n border-radius: calc(var(--radius) * 0.6);\n }\n .rounded-t-xl {\n border-top-left-radius: calc(var(--radius) * 1.4);\n border-top-right-radius: calc(var(--radius) * 1.4);\n }\n .rounded-b-\\[calc\\(var\\(--radius-2xl\\)-1px\\)\\] {\n border-bottom-right-radius: calc(var(--radius-2xl) - 1px);\n border-bottom-left-radius: calc(var(--radius-2xl) - 1px);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-b-0 {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 0px;\n }\n .border-border {\n border-color: var(--border);\n }\n .border-destructive {\n border-color: var(--destructive);\n }\n .border-input {\n border-color: var(--input);\n }\n .border-primary {\n border-color: var(--primary);\n }\n .border-transparent {\n border-color: transparent;\n }\n .bg-amber-400\\/20 {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 20%, transparent);\n }\n }\n .bg-background {\n background-color: var(--background);\n }\n .bg-black\\/32 {\n background-color: color-mix(in srgb, #000 32%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 32%, transparent);\n }\n }\n .bg-blue-400\\/20 {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 20%, transparent);\n }\n }\n .bg-border {\n background-color: var(--border);\n }\n .bg-cyan-400\\/20 {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 20%, transparent);\n }\n }\n .bg-destructive {\n background-color: var(--destructive);\n }\n .bg-destructive\\/10 {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n }\n }\n .bg-emerald-400\\/20 {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 20%, transparent);\n }\n }\n .bg-fuchsia-400\\/20 {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 20%, transparent);\n }\n }\n .bg-info\\/10 {\n background-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--info) 10%, transparent);\n }\n }\n .bg-muted {\n background-color: var(--muted);\n }\n .bg-popover {\n background-color: var(--popover);\n }\n .bg-primary {\n background-color: var(--primary);\n }\n .bg-rose-400\\/20 {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 20%, transparent);\n }\n }\n .bg-secondary {\n background-color: var(--secondary);\n }\n .bg-slate-400\\/20 {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 20%, transparent);\n }\n }\n .bg-success\\/10 {\n background-color: var(--success);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--success) 10%, transparent);\n }\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-violet-400\\/20 {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 20%, transparent);\n }\n }\n .bg-warning\\/10 {\n background-color: var(--warning);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--warning) 10%, transparent);\n }\n }\n .bg-clip-padding {\n background-clip: padding-box;\n }\n .bg-\\[right_0\\.5rem_center\\] {\n background-position: right 0.5rem center;\n }\n .bg-no-repeat {\n background-repeat: no-repeat;\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .px-0 {\n padding-inline: calc(var(--spacing) * 0);\n }\n .px-1 {\n padding-inline: calc(var(--spacing) * 1);\n }\n .px-1\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-2\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-3\\.5 {\n padding-inline: calc(var(--spacing) * 3.5);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-5 {\n padding-inline: calc(var(--spacing) * 5);\n }\n .py-0 {\n padding-block: calc(var(--spacing) * 0);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-\\[max\\(1rem\\,4vh\\)\\] {\n padding-block: max(1rem, 4vh);\n }\n .ps-2 {\n padding-inline-start: calc(var(--spacing) * 2);\n }\n .pe-3 {\n padding-inline-end: calc(var(--spacing) * 3);\n }\n .pr-8 {\n padding-right: calc(var(--spacing) * 8);\n }\n .pl-3 {\n padding-left: calc(var(--spacing) * 3);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .font-mono {\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n }\n .font-sans {\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\",\n Roboto, sans-serif;\n }\n .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n .text-base\\/4\\.5 {\n font-size: var(--text-base);\n line-height: calc(var(--spacing) * 4.5);\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .text-\\[0\\.625rem\\] {\n font-size: 0.625rem;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-normal {\n --tw-font-weight: var(--font-weight-normal);\n font-weight: var(--font-weight-normal);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-widest {\n --tw-tracking: var(--tracking-widest);\n letter-spacing: var(--tracking-widest);\n }\n .break-words {\n overflow-wrap: break-word;\n }\n .whitespace-normal {\n white-space: normal;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .text-amber-700 {\n color: var(--color-amber-700);\n }\n .text-blue-700 {\n color: var(--color-blue-700);\n }\n .text-cyan-700 {\n color: var(--color-cyan-700);\n }\n .text-destructive-foreground {\n color: var(--destructive-foreground);\n }\n .text-emerald-700 {\n color: var(--color-emerald-700);\n }\n .text-foreground {\n color: var(--foreground);\n }\n .text-fuchsia-700 {\n color: var(--color-fuchsia-700);\n }\n .text-info-foreground {\n color: var(--info-foreground);\n }\n .text-muted-foreground {\n color: var(--muted-foreground);\n }\n .text-muted-foreground\\/70 {\n color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--muted-foreground) 70%, transparent);\n }\n }\n .text-popover-foreground {\n color: var(--popover-foreground);\n }\n .text-primary-foreground {\n color: var(--primary-foreground);\n }\n .text-rose-700 {\n color: var(--color-rose-700);\n }\n .text-secondary-foreground {\n color: var(--secondary-foreground);\n }\n .text-slate-700 {\n color: var(--color-slate-700);\n }\n .text-success-foreground {\n color: var(--success-foreground);\n }\n .text-violet-700 {\n color: var(--color-violet-700);\n }\n .text-warning-foreground {\n color: var(--warning-foreground);\n }\n .text-white {\n color: var(--color-white);\n }\n .lowercase {\n text-transform: lowercase;\n }\n .line-through {\n text-decoration-line: line-through;\n }\n .underline {\n text-decoration-line: underline;\n }\n .underline-offset-4 {\n text-underline-offset: 4px;\n }\n .accent-accent {\n accent-color: var(--accent);\n }\n .accent-primary {\n accent-color: var(--primary);\n }\n .opacity-80 {\n opacity: 80%;\n }\n .shadow-lg\\/5 {\n --tw-shadow-alpha: 5%;\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%)), 0 4px 6px -4px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs\\/5 {\n --tw-shadow-alpha: 5%;\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.05) l a b / 5%));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-none {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs {\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .filter {\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .backdrop-blur-sm {\n --tw-backdrop-blur: blur(var(--blur-sm));\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-shadow {\n transition-property: box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .ease-out {\n --tw-ease: var(--ease-out);\n transition-timing-function: var(--ease-out);\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n .\\[clip-path\\:inset\\(0_1px\\)\\] {\n clip-path: inset(0 1px);\n }\n .not-dark\\:bg-clip-padding {\n &:not(*:is(.dark *)) {\n background-clip: padding-box;\n }\n }\n .group-data-hover\\:bg-amber-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-blue-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-cyan-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-emerald-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-fuchsia-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-rose-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-slate-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-violet-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 30%, transparent);\n }\n }\n }\n .placeholder\\:text-muted-foreground {\n &::placeholder {\n color: var(--muted-foreground);\n }\n }\n .before\\:pointer-events-none {\n &::before {\n content: var(--tw-content);\n pointer-events: none;\n }\n }\n .before\\:absolute {\n &::before {\n content: var(--tw-content);\n position: absolute;\n }\n }\n .before\\:inset-0 {\n &::before {\n content: var(--tw-content);\n inset: calc(var(--spacing) * 0);\n }\n }\n .before\\:rounded-\\[calc\\(var\\(--radius-2xl\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-radius: calc(var(--radius-2xl) - 1px);\n }\n }\n .before\\:rounded-t-\\[calc\\(var\\(--radius-xl\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-top-left-radius: calc(var(--radius-xl) - 1px);\n border-top-right-radius: calc(var(--radius-xl) - 1px);\n }\n }\n .before\\:bg-muted\\/72 {\n &::before {\n content: var(--tw-content);\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 72%, transparent);\n }\n }\n }\n .before\\:shadow-\\[0_1px_--theme\\(--color-black\\/4\\%\\)\\] {\n &::before {\n content: var(--tw-content);\n --tw-shadow: 0 1px var(--tw-shadow-color, color-mix(in srgb, #000 4%, transparent));\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow: 0 1px var(--tw-shadow-color, color-mix(in oklab, var(--color-black) 4%, transparent));\n }\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-within\\:border-ring {\n &:focus-within {\n border-color: var(--ring);\n }\n }\n .focus-within\\:bg-accent {\n &:focus-within {\n background-color: var(--accent);\n }\n }\n .focus-within\\:text-accent-foreground {\n &:focus-within {\n color: var(--accent-foreground);\n }\n }\n .focus-within\\:ring-\\[3px\\] {\n &:focus-within {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-within\\:ring-ring\\/30 {\n &:focus-within {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 30%, transparent);\n }\n }\n }\n .hover\\:border-destructive\\/30 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--destructive) 30%, transparent);\n }\n }\n }\n }\n .hover\\:bg-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n .hover\\:bg-destructive\\/5 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 5%, transparent);\n }\n }\n }\n }\n .hover\\:bg-destructive\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-primary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-secondary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:text-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n .hover\\:underline {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n .focus\\:bg-accent {\n &:focus {\n background-color: var(--accent);\n }\n }\n .focus\\:text-accent-foreground {\n &:focus {\n color: var(--accent-foreground);\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .focus-visible\\:border-ring {\n &:focus-visible {\n border-color: var(--ring);\n }\n }\n .focus-visible\\:ring-2 {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-\\[3px\\] {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-ring {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n }\n }\n .focus-visible\\:ring-ring\\/30 {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 30%, transparent);\n }\n }\n }\n .focus-visible\\:ring-offset-1 {\n &:focus-visible {\n --tw-ring-offset-width: 1px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n }\n .focus-visible\\:ring-offset-background {\n &:focus-visible {\n --tw-ring-offset-color: var(--background);\n }\n }\n .disabled\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\:cursor-not-allowed {\n &:disabled {\n cursor: not-allowed;\n }\n }\n .disabled\\:opacity-60 {\n &:disabled {\n opacity: 60%;\n }\n }\n .has-disabled\\:opacity-60 {\n &:has(*:disabled) {\n opacity: 60%;\n }\n }\n .aria-invalid\\:border-destructive\\/40 {\n &[aria-invalid=\"true\"] {\n border-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n .aria-invalid\\:focus-visible\\:ring-destructive\\/20 {\n &[aria-invalid=\"true\"] {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n }\n .data-\\[disabled\\]\\:pointer-events-none {\n &[data-disabled] {\n pointer-events: none;\n }\n }\n .data-\\[disabled\\]\\:opacity-60 {\n &[data-disabled] {\n opacity: 60%;\n }\n }\n .data-\\[disabled\\]\\:opacity-64 {\n &[data-disabled] {\n opacity: 64%;\n }\n }\n .data-\\[highlighted\\]\\:bg-accent {\n &[data-highlighted] {\n background-color: var(--accent);\n }\n }\n .data-\\[highlighted\\]\\:text-accent-foreground {\n &[data-highlighted] {\n color: var(--accent-foreground);\n }\n }\n .sm\\:min-h-7 {\n @media (width >= 40rem) {\n min-height: calc(var(--spacing) * 7);\n }\n }\n .sm\\:py-\\[10vh\\] {\n @media (width >= 40rem) {\n padding-block: 10vh;\n }\n }\n .sm\\:text-sm {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .sm\\:text-sm\\/4 {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: calc(var(--spacing) * 4);\n }\n }\n .dark\\:bg-amber-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-blue-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-cyan-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-destructive\\/20 {\n &:is(.dark *) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-fuchsia-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-info\\/20 {\n &:is(.dark *) {\n background-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--info) 20%, transparent);\n }\n }\n }\n .dark\\:bg-input\\/30 {\n &:is(.dark *) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n .dark\\:bg-rose-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-slate-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-success\\/20 {\n &:is(.dark *) {\n background-color: var(--success);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--success) 20%, transparent);\n }\n }\n }\n .dark\\:bg-violet-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-warning\\/20 {\n &:is(.dark *) {\n background-color: var(--warning);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--warning) 20%, transparent);\n }\n }\n }\n .dark\\:text-amber-300 {\n &:is(.dark *) {\n color: var(--color-amber-300);\n }\n }\n .dark\\:text-blue-300 {\n &:is(.dark *) {\n color: var(--color-blue-300);\n }\n }\n .dark\\:text-cyan-300 {\n &:is(.dark *) {\n color: var(--color-cyan-300);\n }\n }\n .dark\\:text-emerald-300 {\n &:is(.dark *) {\n color: var(--color-emerald-300);\n }\n }\n .dark\\:text-fuchsia-300 {\n &:is(.dark *) {\n color: var(--color-fuchsia-300);\n }\n }\n .dark\\:text-rose-300 {\n &:is(.dark *) {\n color: var(--color-rose-300);\n }\n }\n .dark\\:text-slate-300 {\n &:is(.dark *) {\n color: var(--color-slate-300);\n }\n }\n .dark\\:text-violet-300 {\n &:is(.dark *) {\n color: var(--color-violet-300);\n }\n }\n .dark\\:group-data-hover\\:bg-amber-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-blue-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-cyan-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-emerald-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-fuchsia-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-rose-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-slate-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-violet-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:before\\:shadow-\\[0_-1px_--theme\\(--color-white\\/6\\%\\)\\] {\n &:is(.dark *) {\n &::before {\n content: var(--tw-content);\n --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in srgb, #fff 6%, transparent));\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in oklab, var(--color-white) 6%, transparent));\n }\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .\\[\\&_svg\\]\\:pointer-events-none {\n & svg {\n pointer-events: none;\n }\n }\n .\\[\\&_svg\\]\\:shrink-0 {\n & svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'opacity-\\'\\]\\)\\]\\:opacity-80 {\n & svg:not([class*='opacity-']) {\n opacity: 80%;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n}\n@layer base {\n *, ::after, ::before {\n border-color: var(--color-border, currentColor);\n }\n}\n@layer components {\n .uidex-scrollbar {\n scrollbar-width: thin;\n scrollbar-color: var(--muted-foreground) transparent;\n @supports (color: color-mix(in lab, red, red)) {\n scrollbar-color: color-mix(in srgb, var(--muted-foreground) 40%, transparent) transparent;\n }\n }\n .uidex-scrollbar::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n .uidex-scrollbar::-webkit-scrollbar-track {\n background: transparent;\n }\n .uidex-scrollbar::-webkit-scrollbar-thumb {\n background-color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix( in srgb, var(--muted-foreground) 35%, transparent );\n }\n border-radius: 9999px;\n border: 2px solid transparent;\n background-clip: content-box;\n }\n .uidex-scrollbar::-webkit-scrollbar-thumb:hover {\n background-color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix( in srgb, var(--muted-foreground) 60%, transparent );\n }\n }\n .uidex-scrollbar::-webkit-scrollbar-corner {\n background: transparent;\n }\n}\n:where(:host, :root) {\n --background: color-mix(\n in srgb,\n oklch(14.5% 0 0) 95%,\n #fff\n );\n @supports (color: color-mix(in lab, red, red)) {\n --background: color-mix(\n in srgb,\n var(--color-neutral-950) 95%,\n var(--color-white)\n );\n }\n --foreground: var(--color-neutral-100);\n --card: var(--background);\n @supports (color: color-mix(in lab, red, red)) {\n --card: color-mix(in srgb, var(--background) 98%, var(--color-white));\n }\n --card-foreground: var(--color-neutral-100);\n --popover: var(--background);\n @supports (color: color-mix(in lab, red, red)) {\n --popover: color-mix(in srgb, var(--background) 98%, var(--color-white));\n }\n --popover-foreground: var(--color-neutral-100);\n --primary: var(--color-neutral-100);\n --primary-foreground: var(--color-neutral-800);\n --secondary: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --secondary: color-mix(in srgb, var(--color-white) 4%, transparent);\n }\n --secondary-foreground: var(--color-neutral-100);\n --muted: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --muted: color-mix(in srgb, var(--color-white) 4%, transparent);\n }\n --muted-foreground: color-mix(\n in srgb,\n oklch(55.6% 0 0) 90%,\n #fff\n );\n @supports (color: color-mix(in lab, red, red)) {\n --muted-foreground: color-mix(\n in srgb,\n var(--color-neutral-500) 90%,\n var(--color-white)\n );\n }\n --accent: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --accent: color-mix(in srgb, var(--color-white) 4%, transparent);\n }\n --accent-foreground: var(--color-neutral-100);\n --destructive: color-mix(\n in srgb,\n oklch(63.7% 0.237 25.331) 90%,\n #fff\n );\n @supports (color: color-mix(in lab, red, red)) {\n --destructive: color-mix(\n in srgb,\n var(--color-red-500) 90%,\n var(--color-white)\n );\n }\n --destructive-foreground: var(--color-red-400);\n --border: color-mix(in srgb, #fff 6%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --border: color-mix(in srgb, var(--color-white) 6%, transparent);\n }\n --input: color-mix(in srgb, #fff 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --input: color-mix(in srgb, var(--color-white) 8%, transparent);\n }\n --ring: var(--color-neutral-500);\n --info: var(--color-blue-500);\n --info-foreground: var(--color-blue-400);\n --success: var(--color-emerald-500);\n --success-foreground: var(--color-emerald-400);\n --warning: var(--color-amber-500);\n --warning-foreground: var(--color-amber-400);\n --radius: 0.625rem;\n}\n:host(.light) {\n --background: var(--color-white);\n --foreground: var(--color-neutral-800);\n --card: var(--color-white);\n --card-foreground: var(--color-neutral-800);\n --popover: var(--color-white);\n --popover-foreground: var(--color-neutral-800);\n --primary: var(--color-neutral-800);\n --primary-foreground: var(--color-neutral-50);\n --secondary: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --secondary: color-mix(in srgb, var(--color-black) 4%, transparent);\n }\n --secondary-foreground: var(--color-neutral-800);\n --muted: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --muted: color-mix(in srgb, var(--color-black) 4%, transparent);\n }\n --muted-foreground: color-mix(\n in srgb,\n oklch(55.6% 0 0) 90%,\n #000\n );\n @supports (color: color-mix(in lab, red, red)) {\n --muted-foreground: color-mix(\n in srgb,\n var(--color-neutral-500) 90%,\n var(--color-black)\n );\n }\n --accent: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --accent: color-mix(in srgb, var(--color-black) 4%, transparent);\n }\n --accent-foreground: var(--color-neutral-800);\n --destructive: var(--color-red-500);\n --destructive-foreground: var(--color-red-700);\n --border: color-mix(in srgb, #000 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --border: color-mix(in srgb, var(--color-black) 8%, transparent);\n }\n --input: color-mix(in srgb, #000 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --input: color-mix(in srgb, var(--color-black) 10%, transparent);\n }\n --ring: var(--color-neutral-400);\n --info: var(--color-blue-500);\n --info-foreground: var(--color-blue-700);\n --success: var(--color-emerald-500);\n --success-foreground: var(--color-emerald-700);\n --warning: var(--color-amber-500);\n --warning-foreground: var(--color-amber-700);\n}\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-content {\n syntax: \"*\";\n initial-value: \"\";\n inherits: false;\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-ease: initial;\n --tw-content: \"\";\n }\n }\n}\n","export const SURFACE_HOST_CLASS = \"uidex-surface-host\"\nexport const SURFACE_CONTAINER_CLASS = \"uidex-container\"\n\nexport const Z_BASE = 2147483644\nexport const Z_OVERLAY = 2147483645\nexport const Z_CHROME = 2147483646\n\nexport const SURFACE_IGNORE_SELECTOR = `.${SURFACE_HOST_CLASS},.${SURFACE_CONTAINER_CLASS}`\n\nimport type { EntityKind } from \"../entities\"\n\nexport const UIDEX_ATTR_TO_KIND: ReadonlyArray<readonly [string, EntityKind]> =\n [\n [\"data-uidex\", \"element\"],\n [\"data-uidex-region\", \"region\"],\n [\"data-uidex-widget\", \"widget\"],\n [\"data-uidex-primitive\", \"primitive\"],\n ]\n","import type { ResolvedTheme } from \"../session\"\nimport builtinCss from \"../styles/tailwind.built.css\"\nimport { SURFACE_HOST_CLASS, Z_BASE } from \"./constants\"\n\nexport interface SurfaceHost {\n readonly hostEl: HTMLElement\n readonly shadowRoot: ShadowRoot\n readonly chromeEl: HTMLElement\n applyTheme(theme: ResolvedTheme): void\n destroy(): void\n}\n\nexport interface SurfaceHostOptions {\n mount: Element\n stylesheets?: string[]\n initialTheme?: ResolvedTheme\n}\n\nexport function createSurfaceHost(options: SurfaceHostOptions): SurfaceHost {\n const { mount, stylesheets = [], initialTheme = \"light\" } = options\n\n const hostEl = document.createElement(\"div\")\n hostEl.classList.add(SURFACE_HOST_CLASS)\n hostEl.style.position = \"fixed\"\n hostEl.style.inset = \"0\"\n hostEl.style.pointerEvents = \"none\"\n hostEl.style.zIndex = String(Z_BASE)\n hostEl.classList.add(initialTheme)\n\n const shadow = hostEl.attachShadow({ mode: \"open\" })\n\n applyStylesheets(shadow, [builtinCss, ...stylesheets])\n\n const chromeEl = document.createElement(\"div\")\n chromeEl.classList.add(\"uidex-chrome\")\n chromeEl.style.pointerEvents = \"auto\"\n shadow.appendChild(chromeEl)\n\n mount.appendChild(hostEl)\n\n return {\n hostEl,\n shadowRoot: shadow,\n chromeEl,\n applyTheme(theme) {\n hostEl.classList.remove(\"light\", \"dark\")\n hostEl.classList.add(theme)\n },\n destroy() {\n hostEl.remove()\n },\n }\n}\n\nfunction applyStylesheets(shadow: ShadowRoot, stylesheets: string[]): void {\n if (stylesheets.length === 0) return\n\n const adoptable = supportsConstructableStylesheets(shadow)\n if (adoptable) {\n const sheets: CSSStyleSheet[] = []\n for (const css of stylesheets) {\n const sheet = new CSSStyleSheet()\n sheet.replaceSync(css)\n sheets.push(sheet)\n }\n shadow.adoptedStyleSheets = [...shadow.adoptedStyleSheets, ...sheets]\n return\n }\n\n for (const css of stylesheets) {\n const style = document.createElement(\"style\")\n style.textContent = css\n shadow.appendChild(style)\n }\n}\n\nfunction supportsConstructableStylesheets(shadow: ShadowRoot): boolean {\n if (typeof CSSStyleSheet === \"undefined\") return false\n if (!(\"adoptedStyleSheets\" in shadow)) return false\n try {\n const probe = new CSSStyleSheet()\n probe.replaceSync(\"\")\n return true\n } catch {\n return false\n }\n}\n","import { createElement as createLucideElement } from \"lucide\"\nimport { displayName, KIND_STYLE, type Entity } from \"../entities\"\nimport type { SessionStore } from \"../session\"\nimport { Z_CHROME } from \"./constants\"\n\nconst DEFAULT_TOOLTIP_COLOR = \"#34d399\"\nconst TOOLTIP_OFFSET = 16\nconst ARROW_SIZE = 5\n\nexport type CursorTooltipContent =\n | { entity: Entity; node?: Element | null }\n | string\n\nexport interface CursorTooltip {\n destroy(): void\n /** Present content for the current cursor position. */\n update(\n content: CursorTooltipContent | null,\n cursor: { x: number; y: number } | null\n ): void\n}\n\nexport interface CursorTooltipDeps {\n container: Element\n session: SessionStore\n}\n\nexport function createCursorTooltip(deps: CursorTooltipDeps): CursorTooltip {\n const { container } = deps\n\n const el = document.createElement(\"div\")\n el.setAttribute(\"data-uidex-cursor-tooltip\", \"\")\n el.style.position = \"fixed\"\n el.style.pointerEvents = \"none\"\n el.style.zIndex = String(Z_CHROME)\n el.style.padding = \"4px 8px\"\n el.style.fontSize = \"12px\"\n el.style.fontFamily = \"ui-sans-serif, system-ui, sans-serif\"\n el.style.borderRadius = \"6px\"\n el.style.background = DEFAULT_TOOLTIP_COLOR\n el.style.color = \"#0a0a0a\"\n el.style.display = \"none\"\n el.style.whiteSpace = \"nowrap\"\n el.style.transform = \"translate(-50%, 0)\"\n el.style.alignItems = \"center\"\n el.style.gap = \"6px\"\n\n const arrow = document.createElement(\"div\")\n arrow.setAttribute(\"data-uidex-cursor-tooltip-arrow\", \"\")\n arrow.style.position = \"absolute\"\n arrow.style.left = \"50%\"\n arrow.style.bottom = \"100%\"\n arrow.style.width = \"0\"\n arrow.style.height = \"0\"\n arrow.style.transform = \"translate(-50%, 0)\"\n arrow.style.borderLeft = `${ARROW_SIZE}px solid transparent`\n arrow.style.borderRight = `${ARROW_SIZE}px solid transparent`\n arrow.style.borderBottom = `${ARROW_SIZE}px solid ${DEFAULT_TOOLTIP_COLOR}`\n el.appendChild(arrow)\n\n const body = document.createElement(\"span\")\n body.setAttribute(\"data-uidex-cursor-tooltip-body\", \"\")\n body.style.display = \"inline-flex\"\n body.style.alignItems = \"center\"\n body.style.gap = \"6px\"\n el.appendChild(body)\n\n container.appendChild(el)\n\n let currentContent: CursorTooltipContent | null = null\n let currentCursor: { x: number; y: number } | null = null\n\n const applyColor = (color: string): void => {\n el.style.background = color\n arrow.style.borderBottom = `${ARROW_SIZE}px solid ${color}`\n }\n\n const renderBody = (): void => {\n body.replaceChildren()\n if (typeof currentContent === \"string\") {\n applyColor(DEFAULT_TOOLTIP_COLOR)\n body.append(document.createTextNode(currentContent))\n return\n }\n if (!currentContent) return\n const { entity, node } = currentContent\n const style = KIND_STYLE[entity.kind]\n applyColor(style?.color ?? DEFAULT_TOOLTIP_COLOR)\n if (style) {\n const svg = createLucideElement(style.icon)\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"width\", \"14\")\n svg.setAttribute(\"height\", \"14\")\n svg.style.display = \"block\"\n body.append(svg)\n }\n const label = displayName(entity, node)\n body.append(document.createTextNode(label))\n const rawId = entity.kind === \"route\" ? entity.path : entity.id\n if (rawId && rawId !== label) {\n const subordinate = document.createElement(\"span\")\n subordinate.setAttribute(\"data-uidex-cursor-tooltip-id\", \"\")\n subordinate.style.opacity = \"0.65\"\n subordinate.style.fontFamily =\n \"ui-monospace, SFMono-Regular, Menlo, monospace\"\n subordinate.style.fontSize = \"11px\"\n subordinate.textContent = rawId\n body.append(subordinate)\n }\n }\n\n const render = (): void => {\n if (!currentContent || !currentCursor) {\n el.style.display = \"none\"\n return\n }\n renderBody()\n el.style.display = \"inline-flex\"\n el.style.left = `${currentCursor.x}px`\n el.style.top = `${currentCursor.y + TOOLTIP_OFFSET}px`\n }\n\n return {\n update(content, cursor) {\n currentContent = content\n currentCursor = cursor\n render()\n },\n destroy() {\n el.remove()\n currentContent = null\n currentCursor = null\n },\n }\n}\n","import { displayName, type Entity, type EntityRef } from \"../entities\"\nimport type { Registry } from \"../entities\"\nimport type { SessionStore } from \"../session\"\nimport { SURFACE_IGNORE_SELECTOR, UIDEX_ATTR_TO_KIND } from \"./constants\"\nimport type { Overlay, OverlayShowOptions } from \"./overlay\"\n\nexport interface InspectorMatch {\n element: HTMLElement\n ref: EntityRef\n entity: Entity\n /** Display name resolved via `displayName(entity, element)`. */\n label: string\n}\n\nexport interface InspectorOptions {\n session: SessionStore\n registry?: Registry\n resolve?: (target: Element) => InspectorMatch | null\n onHover?: (\n match: InspectorMatch | null,\n cursor: { x: number; y: number } | null\n ) => void\n onSelect?: (match: InspectorMatch, cursor: { x: number; y: number }) => void\n}\n\nexport interface Inspector {\n mount(): void\n destroy(): void\n}\n\nfunction entityForRef(ref: EntityRef, registry?: Registry): Entity {\n if (registry) {\n const found = registry.get(ref.kind, ref.id)\n if (found) return found\n }\n if (ref.kind === \"route\") return { kind: \"route\", path: ref.id, page: ref.id }\n if (ref.kind === \"flow\") {\n return { kind: \"flow\", id: ref.id, loc: { file: \"\" }, touches: [] }\n }\n return { kind: ref.kind, id: ref.id }\n}\n\nexport function defaultResolveMatch(\n target: Element,\n registry?: Registry\n): InspectorMatch | null {\n if (target.closest(SURFACE_IGNORE_SELECTOR)) return null\n let node: Element | null = target\n while (node) {\n if (node instanceof HTMLElement) {\n for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {\n const id = node.getAttribute(attr)\n if (id) {\n const ref: EntityRef = { kind, id }\n const entity = entityForRef(ref, registry)\n return {\n element: node,\n ref,\n entity,\n label: displayName(entity, node),\n }\n }\n }\n }\n node = node.parentElement\n }\n return null\n}\n\nexport function resolveEntityElement(ref: EntityRef): HTMLElement | null {\n const entry = UIDEX_ATTR_TO_KIND.find(([, kind]) => kind === ref.kind)\n if (!entry) return null\n const [attr] = entry\n const selector = `[${attr}=\"${CSS.escape(ref.id)}\"]`\n const el = document.querySelector(selector)\n if (el instanceof HTMLElement && el.isConnected) return el\n return null\n}\n\nexport interface HighlightControllerLike {\n show(ref: EntityRef, opts?: OverlayShowOptions): void\n hide(): void\n}\n\nexport function createHighlightController(\n overlay: Overlay\n): HighlightControllerLike {\n let lastKey: string | null = null\n return {\n show(ref, opts) {\n const el = resolveEntityElement(ref)\n if (!el) {\n lastKey = null\n overlay.hide()\n return\n }\n const key = `${ref.kind}:${ref.id}`\n if (key === lastKey && overlay.isVisible) return\n lastKey = key\n overlay.show(el, opts)\n },\n hide() {\n lastKey = null\n overlay.hide()\n },\n }\n}\n\nexport function createInspector(options: InspectorOptions): Inspector {\n const {\n session,\n registry,\n resolve = (target) => defaultResolveMatch(target, registry),\n onHover,\n onSelect,\n } = options\n\n let mounted = false\n let currentEl: HTMLElement | null = null\n let cursorStyleEl: HTMLStyleElement | null = null\n\n const onMouseMove = (e: MouseEvent): void => {\n if (!(e.target instanceof Element)) return\n const match = resolve(e.target)\n const cursor = { x: e.clientX, y: e.clientY }\n if (match) {\n if (match.element !== currentEl) {\n currentEl = match.element\n session.getState().actions.hover(match.ref)\n }\n onHover?.(match, cursor)\n } else if (currentEl) {\n currentEl = null\n session.getState().actions.hover(null)\n onHover?.(null, cursor)\n }\n }\n\n const onClick = (e: MouseEvent): void => {\n if (!(e.target instanceof Element)) return\n if (e.target.closest(SURFACE_IGNORE_SELECTOR)) return\n const match = resolve(e.target)\n if (!match) return\n e.preventDefault()\n e.stopPropagation()\n session.getState().actions.select(match.ref)\n onSelect?.(match, { x: e.clientX, y: e.clientY })\n }\n\n return {\n mount() {\n if (mounted) return\n mounted = true\n if (typeof document !== \"undefined\") {\n cursorStyleEl = document.createElement(\"style\")\n cursorStyleEl.setAttribute(\"data-uidex-inspector-cursor\", \"\")\n cursorStyleEl.textContent =\n \"html, body, body * { cursor: crosshair !important; }\"\n document.head.appendChild(cursorStyleEl)\n }\n document.addEventListener(\"mousemove\", onMouseMove)\n document.addEventListener(\"click\", onClick, true)\n },\n destroy() {\n if (!mounted) return\n mounted = false\n currentEl = null\n if (cursorStyleEl) {\n cursorStyleEl.remove()\n cursorStyleEl = null\n }\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"click\", onClick, true)\n session.getState().actions.hover(null)\n onHover?.(null, null)\n },\n }\n}\n","import type { SessionStore } from \"../session\"\nimport { Z_CHROME } from \"./constants\"\n\nexport type Corner = \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n\nexport interface MenuBarOptions {\n container: Element\n session: SessionStore\n initialCorner?: Corner\n appTitle?: string\n}\n\nexport interface MenuBar {\n destroy(): void\n snapTo(corner: Corner): void\n snapToNearest(x: number, y: number): void\n readonly corner: Corner\n readonly root: HTMLElement\n}\n\nexport function createMenuBar(options: MenuBarOptions): MenuBar {\n const {\n container,\n session,\n initialCorner = \"bottom-right\",\n appTitle,\n } = options\n\n const root = document.createElement(\"div\")\n root.setAttribute(\"data-uidex-menubar\", \"\")\n root.setAttribute(\"role\", \"toolbar\")\n Object.assign(root.style, {\n position: \"fixed\",\n zIndex: String(Z_CHROME),\n pointerEvents: \"auto\",\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"6px\",\n borderRadius: \"8px\",\n background: \"rgba(20, 20, 20, 0.92)\",\n color: \"#f5f5f5\",\n fontFamily: \"ui-sans-serif, system-ui, sans-serif\",\n fontSize: \"12px\",\n userSelect: \"none\",\n cursor: \"grab\",\n })\n\n const buttonStyle = {\n background: \"rgba(255,255,255,0.08)\",\n color: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.12)\",\n borderRadius: \"6px\",\n padding: \"4px 8px\",\n font: \"inherit\",\n cursor: \"pointer\",\n }\n const buttonActiveStyle = {\n background: \"rgba(120, 180, 255, 0.28)\",\n borderColor: \"rgba(120, 180, 255, 0.55)\",\n }\n\n if (appTitle) {\n const titleEl = document.createElement(\"span\")\n titleEl.setAttribute(\"data-uidex-menubar-title\", \"\")\n titleEl.textContent = appTitle\n Object.assign(titleEl.style, {\n padding: \"0 6px 0 4px\",\n fontWeight: \"600\",\n letterSpacing: \"0.01em\",\n whiteSpace: \"nowrap\",\n })\n root.appendChild(titleEl)\n }\n\n const highlightDot = document.createElement(\"span\")\n highlightDot.setAttribute(\"data-uidex-menubar-highlight-indicator\", \"\")\n highlightDot.setAttribute(\"aria-label\", \"Element highlighted (press Esc)\")\n highlightDot.setAttribute(\"role\", \"status\")\n Object.assign(highlightDot.style, {\n display: \"none\",\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n margin: \"0 2px 0 4px\",\n background: \"rgba(120, 180, 255, 0.85)\",\n boxShadow: \"0 0 6px rgba(120, 180, 255, 0.75)\",\n flex: \"0 0 auto\",\n })\n root.appendChild(highlightDot)\n\n const inspectBtn = document.createElement(\"button\")\n inspectBtn.type = \"button\"\n inspectBtn.setAttribute(\"data-uidex-menubar-inspect\", \"\")\n inspectBtn.textContent = \"Inspect\"\n Object.assign(inspectBtn.style, buttonStyle)\n inspectBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n session.send({ type: \"TOGGLE_INSPECTOR\" })\n })\n root.appendChild(inspectBtn)\n\n const paletteBtn = document.createElement(\"button\")\n paletteBtn.type = \"button\"\n paletteBtn.setAttribute(\"data-uidex-menubar-palette\", \"\")\n paletteBtn.textContent = \"⌘K\"\n Object.assign(paletteBtn.style, buttonStyle)\n paletteBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n if (session.getState().stack.length > 0) {\n session.send({ type: \"CLOSE\" })\n } else {\n session.send({ type: \"OPEN_PALETTE\" })\n }\n })\n root.appendChild(paletteBtn)\n container.appendChild(root)\n\n const syncButtonStates = (): void => {\n const state = session.getState()\n inspectBtn.setAttribute(\n \"data-uidex-menubar-inspect-active\",\n state.inspectorActive ? \"true\" : \"false\"\n )\n Object.assign(\n inspectBtn.style,\n state.inspectorActive ? buttonActiveStyle : buttonStyle\n )\n const top = state.stack[state.stack.length - 1] ?? null\n const paletteOpen = top?.id === \"command-palette\"\n paletteBtn.setAttribute(\n \"data-uidex-menubar-palette-active\",\n paletteOpen ? \"true\" : \"false\"\n )\n Object.assign(\n paletteBtn.style,\n paletteOpen ? buttonActiveStyle : buttonStyle\n )\n const highlightActive = state.pinnedHighlight !== null\n highlightDot.setAttribute(\n \"data-uidex-menubar-highlight-active\",\n highlightActive ? \"true\" : \"false\"\n )\n highlightDot.style.display = highlightActive ? \"inline-block\" : \"none\"\n }\n syncButtonStates()\n const unsubscribeSession = session.subscribe(syncButtonStates)\n\n let corner: Corner = initialCorner\n const applyCorner = (): void => {\n const offset = \"16px\"\n root.style.top = corner.startsWith(\"top\") ? offset : \"\"\n root.style.bottom = corner.startsWith(\"bottom\") ? offset : \"\"\n root.style.left = corner.endsWith(\"left\") ? offset : \"\"\n root.style.right = corner.endsWith(\"right\") ? offset : \"\"\n root.setAttribute(\"data-uidex-menubar-corner\", corner)\n }\n applyCorner()\n\n let dragging = false\n let startX = 0\n let startY = 0\n let originLeft = 0\n let originTop = 0\n\n const onMouseMove = (e: MouseEvent): void => {\n if (!dragging) return\n root.style.left = `${originLeft + e.clientX - startX}px`\n root.style.top = `${originTop + e.clientY - startY}px`\n }\n\n const onMouseUp = (e: MouseEvent): void => {\n if (!dragging) return\n dragging = false\n root.style.cursor = \"grab\"\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"mouseup\", onMouseUp)\n snapToNearest(e.clientX, e.clientY)\n }\n\n const onMouseDown = (e: MouseEvent): void => {\n if (e.target instanceof HTMLElement && e.target.closest(\"button\")) return\n const rect = root.getBoundingClientRect()\n dragging = true\n originLeft = rect.left\n originTop = rect.top\n startX = e.clientX\n startY = e.clientY\n root.style.cursor = \"grabbing\"\n Object.assign(root.style, {\n top: `${originTop}px`,\n left: `${originLeft}px`,\n bottom: \"\",\n right: \"\",\n })\n document.addEventListener(\"mousemove\", onMouseMove)\n document.addEventListener(\"mouseup\", onMouseUp)\n e.preventDefault()\n }\n root.addEventListener(\"mousedown\", onMouseDown)\n\n function snapTo(next: Corner): void {\n corner = next\n applyCorner()\n }\n\n function snapToNearest(x: number, y: number): void {\n const horizontal = x / (window.innerWidth || 1) < 0.5 ? \"left\" : \"right\"\n const vertical = y / (window.innerHeight || 1) < 0.5 ? \"top\" : \"bottom\"\n snapTo(`${vertical}-${horizontal}` as Corner)\n }\n\n return {\n destroy() {\n unsubscribeSession()\n root.removeEventListener(\"mousedown\", onMouseDown)\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"mouseup\", onMouseUp)\n root.remove()\n },\n snapTo,\n snapToNearest,\n get corner() {\n return corner\n },\n get root() {\n return root\n },\n }\n}\n","import { Z_OVERLAY } from \"./constants\"\n\nexport interface OverlayShowOptions {\n label?: string\n color?: string\n padding?: number\n borderStyle?: string\n borderWidth?: number\n fillOpacity?: number\n}\n\nexport interface Overlay {\n show(target: Element, options?: OverlayShowOptions): void\n hide(): void\n destroy(): void\n readonly isVisible: boolean\n}\n\ninterface OverlayDeps {\n container: Element\n}\n\nconst DEFAULT_COLOR = \"#34d399\"\nconst DEFAULT_BORDER_WIDTH = 2\nconst DEFAULT_FILL_OPACITY = 0.08\n\nexport function createOverlay(deps: OverlayDeps): Overlay {\n const { container } = deps\n\n const box = document.createElement(\"div\")\n box.setAttribute(\"data-uidex-overlay\", \"\")\n box.style.position = \"fixed\"\n box.style.pointerEvents = \"none\"\n box.style.zIndex = String(Z_OVERLAY)\n box.style.boxSizing = \"border-box\"\n box.style.display = \"none\"\n\n const label = document.createElement(\"div\")\n label.setAttribute(\"data-uidex-overlay-label\", \"\")\n label.style.position = \"absolute\"\n label.style.left = \"0\"\n label.style.bottom = \"100%\"\n label.style.padding = \"2px 6px\"\n label.style.fontSize = \"11px\"\n label.style.fontFamily = \"ui-sans-serif, system-ui, sans-serif\"\n label.style.lineHeight = \"1\"\n label.style.whiteSpace = \"nowrap\"\n label.style.color = \"#0a0a0a\"\n label.style.display = \"none\"\n\n box.appendChild(label)\n container.appendChild(box)\n\n let target: Element | null = null\n let opts: Required<OverlayShowOptions> = {\n label: \"\",\n color: DEFAULT_COLOR,\n padding: 0,\n borderStyle: \"solid\",\n borderWidth: DEFAULT_BORDER_WIDTH,\n fillOpacity: DEFAULT_FILL_OPACITY,\n }\n\n let rafId: number | null = null\n let attached = false\n\n const schedule = (): void => {\n if (rafId !== null) return\n rafId =\n typeof requestAnimationFrame === \"function\"\n ? requestAnimationFrame(() => {\n rafId = null\n updatePosition()\n })\n : (setTimeout(() => {\n rafId = null\n updatePosition()\n }, 0) as unknown as number)\n }\n\n const cancelSchedule = (): void => {\n if (rafId === null) return\n if (typeof cancelAnimationFrame === \"function\") cancelAnimationFrame(rafId)\n else clearTimeout(rafId as unknown as ReturnType<typeof setTimeout>)\n rafId = null\n }\n\n const onScroll = (): void => schedule()\n const onResize = (): void => schedule()\n\n const attach = (): void => {\n if (attached) return\n attached = true\n window.addEventListener(\"resize\", onResize)\n window.addEventListener(\"scroll\", onScroll, {\n capture: true,\n passive: true,\n })\n }\n\n const detach = (): void => {\n if (!attached) return\n attached = false\n window.removeEventListener(\"resize\", onResize)\n window.removeEventListener(\"scroll\", onScroll, {\n capture: true,\n } as EventListenerOptions)\n cancelSchedule()\n }\n\n function updatePosition(): void {\n if (!target) return\n const rect = target.getBoundingClientRect()\n const pad = opts.padding\n box.style.top = `${rect.top - pad}px`\n box.style.left = `${rect.left - pad}px`\n box.style.width = `${rect.width + pad * 2}px`\n box.style.height = `${rect.height + pad * 2}px`\n }\n\n function applyStyles(): void {\n box.style.borderColor = opts.color\n box.style.borderStyle = opts.borderStyle\n box.style.borderWidth = `${opts.borderWidth}px`\n box.style.backgroundColor = rgbaFromColor(opts.color, opts.fillOpacity)\n if (opts.label) {\n label.textContent = opts.label\n label.style.backgroundColor = opts.color\n label.style.display = \"\"\n } else {\n label.textContent = \"\"\n label.style.display = \"none\"\n }\n }\n\n return {\n show(nextTarget, showOpts) {\n target = nextTarget\n opts = {\n label: showOpts?.label ?? \"\",\n color: showOpts?.color ?? DEFAULT_COLOR,\n padding: showOpts?.padding ?? 0,\n borderStyle: showOpts?.borderStyle ?? \"solid\",\n borderWidth: showOpts?.borderWidth ?? DEFAULT_BORDER_WIDTH,\n fillOpacity: showOpts?.fillOpacity ?? DEFAULT_FILL_OPACITY,\n }\n applyStyles()\n updatePosition()\n box.style.display = \"\"\n attach()\n },\n hide() {\n target = null\n box.style.display = \"none\"\n detach()\n },\n destroy() {\n detach()\n box.remove()\n target = null\n },\n get isVisible() {\n return target !== null\n },\n }\n}\n\nfunction rgbaFromColor(color: string, alpha: number): string {\n if (color.startsWith(\"#\")) {\n const hex = color.slice(1)\n const bigint = parseInt(\n hex.length === 3\n ? hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : hex,\n 16\n )\n const r = (bigint >> 16) & 255\n const g = (bigint >> 8) & 255\n const b = bigint & 255\n return `rgba(${r}, ${g}, ${b}, ${alpha})`\n }\n return color\n}\n","import type { ResolvedTheme, SessionStore, ThemePreference } from \"../session\"\n\nexport interface ThemeDetector {\n destroy(): void\n /** Resolve the current theme preference against the environment. */\n readonly resolved: ResolvedTheme\n}\n\nexport interface ThemeDetectorDeps {\n session: SessionStore\n onResolve?: (theme: ResolvedTheme) => void\n}\n\ntype HtmlClassToken = \"dark\" | \"light\"\n\nexport function createThemeDetector(deps: ThemeDetectorDeps): ThemeDetector {\n const { session, onResolve } = deps\n\n let resolved: ResolvedTheme = session.getState().resolvedTheme\n\n const detect = (preference: ThemePreference): ResolvedTheme => {\n if (preference !== \"auto\") return preference\n const htmlToken = readHtmlClassToken()\n if (htmlToken) return htmlToken\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\"\n ) {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\"\n }\n return \"light\"\n }\n\n const push = (): void => {\n const preference = session.getState().theme\n const next = detect(preference)\n if (next === resolved) return\n resolved = next\n session.getState().actions.setTheme(preference, next)\n onResolve?.(next)\n }\n\n push()\n\n let mql: MediaQueryList | null = null\n const mqlListener = (): void => push()\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\"\n ) {\n mql = window.matchMedia(\"(prefers-color-scheme: dark)\")\n if (typeof mql.addEventListener === \"function\") {\n mql.addEventListener(\"change\", mqlListener)\n } else if (typeof mql.addListener === \"function\") {\n // Safari < 14\n mql.addListener(mqlListener)\n }\n }\n\n let observer: MutationObserver | null = null\n if (\n typeof MutationObserver !== \"undefined\" &&\n typeof document !== \"undefined\"\n ) {\n observer = new MutationObserver(() => push())\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"class\"],\n })\n }\n\n const unsubscribe = session.subscribe((state, prev) => {\n if (state.theme !== prev.theme) push()\n })\n\n return {\n destroy() {\n unsubscribe()\n if (mql) {\n if (typeof mql.removeEventListener === \"function\") {\n mql.removeEventListener(\"change\", mqlListener)\n } else if (typeof mql.removeListener === \"function\") {\n mql.removeListener(mqlListener)\n }\n }\n observer?.disconnect()\n },\n get resolved() {\n return resolved\n },\n }\n}\n\nfunction readHtmlClassToken(): HtmlClassToken | null {\n if (typeof document === \"undefined\") return null\n const root = document.documentElement\n if (!root) return null\n if (root.classList.contains(\"dark\")) return \"dark\"\n if (root.classList.contains(\"light\")) return \"light\"\n return null\n}\n","import { KIND_STYLE, type Registry } from \"../entities\"\nimport { createCleanupStack, type CleanupStack } from \"../internal/cleanup\"\nimport type { SessionStore } from \"../session\"\nimport { createCursorTooltip, type CursorTooltip } from \"./cursor-tooltip\"\nimport { createSurfaceHost, type SurfaceHost } from \"./host\"\nimport {\n createInspector,\n type Inspector,\n type InspectorOptions,\n} from \"./inspector\"\nimport { createMenuBar, type Corner, type MenuBar } from \"./menu-bar\"\nimport { createOverlay, type Overlay } from \"./overlay\"\nimport { createThemeDetector, type ThemeDetector } from \"./theme\"\n\nexport interface CreateSurfaceShellOptions {\n mount: Element\n registry: Registry\n session: SessionStore\n stylesheets?: string[]\n initialCorner?: Corner\n appTitle?: string\n /**\n * Additional inspector wiring. Hover is pre-wired to overlay + tooltip; pass\n * `onSelect` (and `onAfterHover`) to extend behaviour without rebuilding the\n * host.\n */\n inspector?: Pick<InspectorOptions, \"onSelect\"> & {\n onAfterHover?: InspectorOptions[\"onHover\"]\n }\n}\n\nexport interface SurfaceShell {\n host: SurfaceHost\n overlay: Overlay\n tooltip: CursorTooltip\n inspector: Inspector\n menuBar: MenuBar\n themeDetector: ThemeDetector\n cleanup: CleanupStack\n destroy(): void\n}\n\n/**\n * Builds the chrome bundle shared by `createUidex` and `createHeadless`:\n * host + theme detector + overlay + cursor tooltip + inspector + menu bar.\n * Returns a cleanup stack so callers can register their own teardown in LIFO\n * order, then call `destroy()` once to drain the whole thing.\n */\nexport function createSurfaceShell(\n options: CreateSurfaceShellOptions\n): SurfaceShell {\n const cleanup = createCleanupStack()\n\n const host = createSurfaceHost({\n mount: options.mount,\n stylesheets: options.stylesheets,\n initialTheme: options.session.getState().resolvedTheme,\n })\n cleanup.add(host)\n\n const themeDetector = createThemeDetector({\n session: options.session,\n onResolve: (theme) => host.applyTheme(theme),\n })\n cleanup.add(themeDetector)\n\n const overlay = createOverlay({ container: host.chromeEl })\n cleanup.add(overlay)\n\n const tooltip = createCursorTooltip({\n container: host.chromeEl,\n session: options.session,\n })\n cleanup.add(tooltip)\n\n const afterHover = options.inspector?.onAfterHover\n const inspector = createInspector({\n session: options.session,\n registry: options.registry,\n onSelect: options.inspector?.onSelect,\n onHover: (match, cursor) => {\n if (!match) {\n overlay.hide()\n tooltip.update(null, cursor)\n } else {\n overlay.show(match.element, {\n color: KIND_STYLE[match.ref.kind].color,\n })\n tooltip.update({ entity: match.entity, node: match.element }, cursor)\n }\n afterHover?.(match, cursor)\n },\n })\n cleanup.add(inspector)\n\n const menuBar = createMenuBar({\n container: host.chromeEl,\n session: options.session,\n initialCorner: options.initialCorner,\n appTitle: options.appTitle,\n })\n cleanup.add(menuBar)\n\n return {\n host,\n overlay,\n tooltip,\n inspector,\n menuBar,\n themeDetector,\n cleanup,\n destroy: cleanup.drain,\n }\n}\n","import { createRegistry, type Registry } from \"../entities\"\nimport { createCleanupStack } from \"../internal/cleanup\"\nimport {\n createSession,\n type ResolvedTheme,\n type SessionStore,\n type ThemePreference,\n} from \"../session\"\nimport {\n createSurfaceShell,\n type Corner,\n type OverlayShowOptions,\n} from \"../surface\"\n\nexport interface CreateHeadlessOptions {\n theme?: ThemePreference\n resolvedTheme?: ResolvedTheme\n stylesheets?: string[]\n initialCorner?: Corner\n appTitle?: string\n}\n\nexport interface HeadlessOverlay {\n show(target: Element, opts?: OverlayShowOptions): void\n hide(): void\n readonly isVisible: boolean\n}\n\nexport interface HeadlessInspector {\n start(): void\n stop(): void\n readonly isActive: boolean\n}\n\nexport interface Headless {\n mount(target?: Element): void\n unmount(): void\n readonly registry: Registry\n readonly session: SessionStore\n readonly overlay: HeadlessOverlay\n readonly inspector: HeadlessInspector\n readonly shadowRoot: ShadowRoot | null\n}\n\nexport function createHeadless(options: CreateHeadlessOptions = {}): Headless {\n const registry = createRegistry()\n const session = createSession({\n theme: options.theme,\n resolvedTheme: options.resolvedTheme,\n })\n\n const mountCleanup = createCleanupStack()\n let shadowRoot: ShadowRoot | null = null\n let shell: ReturnType<typeof createSurfaceShell> | null = null\n let mounted = false\n\n const overlayApi: HeadlessOverlay = {\n show(target, opts) {\n shell?.overlay.show(target, opts)\n },\n hide() {\n shell?.overlay.hide()\n },\n get isVisible() {\n return shell?.overlay.isVisible ?? false\n },\n }\n\n const inspectorApi: HeadlessInspector = {\n start() {},\n stop() {},\n get isActive() {\n return shell !== null\n },\n }\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(\"createHeadless: no mount target available\")\n }\n\n shell = createSurfaceShell({\n mount: mountTarget,\n registry,\n session,\n stylesheets: options.stylesheets,\n initialCorner: options.initialCorner,\n appTitle: options.appTitle,\n })\n shadowRoot = shell.host.shadowRoot\n shell.inspector.mount()\n mountCleanup.add(shell)\n mounted = true\n }\n\n function unmount(): void {\n if (!mounted) return\n mountCleanup.drain()\n shell = null\n shadowRoot = null\n mounted = false\n }\n\n return {\n mount,\n unmount,\n registry,\n session,\n overlay: overlayApi,\n inspector: inspectorApi,\n get shadowRoot() {\n return shadowRoot\n },\n }\n}\n"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","names":["assign","setup","initialContext","setup","assign"]}