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
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/react/UidexDevtools.tsx","../../src/core/menu.ts","../../src/ui/MenuBar.tsx","../../src/ui/hooks/useDrag.ts","../../src/ui/coss/tooltip.tsx","../../src/ui/utils.ts","../../src/ui/coss/menu.tsx","../../src/core/utils.ts","../../src/core/overlay.ts","../../src/core/inspector.ts","../../src/core/modal.ts","../../src/ui/DialogHost.tsx","../../src/ui/command-palette/CommandPalette.tsx","../../src/ui/coss/command.tsx","../../src/ui/coss/autocomplete.tsx","../../src/ui/coss/input.tsx","../../src/ui/coss/scroll-area.tsx","../../src/ui/page-dialog/PageDialog.tsx","../../src/ui/modal/store.ts","../../src/ui/coss/dialog.tsx","../../src/ui/coss/button.tsx","../../src/ui/coss/spinner.tsx","../../src/ui/coss/input-group.tsx","../../src/ui/coss/textarea.tsx","../../src/ui/shared/MarkdownContent.tsx","../../src/ui/coss/checkbox.tsx","../../src/ui/shared/chips.tsx","../../src/ui/coss/badge.tsx","../../src/ui/feedback-dialog/FeedbackDialog.tsx","../../src/core/registry.ts","../../src/core/ingest.ts","../../src/ui/modal/feedback-utils.ts","../../src/ui/coss/separator.tsx","../../src/ui/component-dialog/ComponentDialog.tsx","../../src/ui/feature-dialog/FeatureDialog.tsx","../../src/ui/ui-dialog/UiDialog.tsx","../../src/core/css-text.ts","../../src/core/shadow.ts","../../src/core/cursor-tooltip.ts","../../src/core/uidex-ui.ts","../../src/react/create-devtools.tsx","../../src/react/UidexOverlay.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef } from 'react';\nimport { UidexUI } from '../core/uidex-ui';\nimport type {\n UidexMap,\n UidexPage,\n UidexFeature,\n PrimitiveEntry,\n UidexConfig,\n ButtonPosition,\n KeyboardShortcut,\n IngestConfig,\n FeedbackReport,\n FeedbackResult,\n UidexTheme,\n} from '../core/types';\n\nexport interface UidexDevtoolsProps {\n components?: UidexMap;\n pages?: UidexPage[];\n features?: UidexFeature[];\n uiComponents?: PrimitiveEntry[];\n config?: UidexConfig;\n buttonPosition?: ButtonPosition;\n /** Theme for the devtools widget. Default: 'auto'. */\n theme?: UidexTheme;\n disabled?: boolean;\n onSelect?: (id: string) => void;\n /** Keyboard shortcut to toggle inspect mode. Default: Shift+Cmd+U. Set to false to disable. */\n inspectShortcut?: KeyboardShortcut | false;\n /** Ingest configuration for submitting feedback to a server. */\n ingest?: IngestConfig;\n /** Called after feedback submission with the report and result. */\n onSubmit?: (report: FeedbackReport, result: FeedbackResult) => void;\n}\n\nexport function UidexDevtools({\n components,\n pages,\n features,\n uiComponents,\n config,\n buttonPosition = 'bottom-right',\n theme,\n disabled = false,\n onSelect,\n inspectShortcut,\n ingest,\n onSubmit,\n}: UidexDevtoolsProps) {\n const uiRef = useRef<UidexUI | null>(null);\n\n // Stabilize inspectShortcut so a new object with identical values\n // doesn't trigger a full teardown/rebuild of UidexUI.\n const stableShortcut = useMemo(\n () => inspectShortcut,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n inspectShortcut === false\n ? false\n : `${inspectShortcut?.key}:${inspectShortcut?.ctrlKey}:${inspectShortcut?.shiftKey}:${inspectShortcut?.altKey}:${inspectShortcut?.metaKey}`,\n ]\n );\n\n // Stabilize ingest so a new object with identical values doesn't\n // trigger a full teardown/rebuild (which would lose captured logs).\n const stableIngest = useMemo(\n () => ingest,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n ingest\n ? `${ingest.endpoint}:${ingest.apiKey}:${ingest.environment}:${ingest.appVersion}:${ingest.captureConsole}:${ingest.captureNetwork}:${ingest.reporter?.email}:${ingest.reporter?.name}`\n : undefined,\n ]\n );\n\n // Use a ref for onSubmit so re-renders with a new callback don't\n // trigger teardown/rebuild.\n const onSubmitRef = useRef(onSubmit);\n onSubmitRef.current = onSubmit;\n\n useEffect(() => {\n if (disabled) {\n return;\n }\n\n const ui = new UidexUI({\n components,\n pages,\n features,\n uiComponents,\n config,\n buttonPosition,\n theme,\n onSelect,\n inspectShortcut: stableShortcut,\n ingest: stableIngest,\n onSubmit: (...args) => onSubmitRef.current?.(...args),\n });\n\n ui.mount();\n uiRef.current = ui;\n\n return () => {\n ui.destroy();\n uiRef.current = null;\n };\n }, [\n components,\n pages,\n features,\n uiComponents,\n config,\n buttonPosition,\n theme,\n disabled,\n onSelect,\n stableShortcut,\n stableIngest,\n ]);\n\n return null;\n}\n","import { createRoot, type Root } from 'react-dom/client';\nimport { createElement } from 'react';\nimport type { ButtonPosition } from './types';\nimport { MenuBar, type MenuBarProps } from '../ui/MenuBar';\n\nexport const POSITION_CLASSES: Record<ButtonPosition, string> = {\n 'bottom-right': 'uidex-bottom-right',\n 'bottom-left': 'uidex-bottom-left',\n 'top-right': 'uidex-top-right',\n 'top-left': 'uidex-top-left',\n};\n\ntype ActiveMode = 'inspect' | 'copy' | 'feedback' | null;\n\nexport interface MenuOptions {\n onInspectCycle?: () => void;\n onModeSelect?: (mode: 'inspect' | 'copy' | 'feedback' | null) => void;\n onPageClick?: () => void;\n onCommandClick?: () => void;\n}\n\nexport class Menu {\n private host: HTMLDivElement | null = null;\n private root: Root | null = null;\n private options: MenuOptions;\n\n private activeMode: ActiveMode = null;\n private hasPages = false;\n private positionClass = '';\n private container: HTMLElement | null = null;\n\n constructor(options: MenuOptions = {}) {\n this.options = options;\n }\n\n setPosition(position: ButtonPosition): void {\n this.positionClass = POSITION_CLASSES[position];\n this.render();\n }\n\n getContainer(): HTMLDivElement | null {\n return this.host?.querySelector('.uidex-container') ?? null;\n }\n\n setActiveMode(mode: ActiveMode): void {\n this.activeMode = mode;\n this.render();\n }\n\n setHasPages(has: boolean): void {\n this.hasPages = has;\n this.render();\n }\n\n setContainer(el: HTMLElement | null): void {\n this.container = el;\n this.render();\n }\n\n create(): HTMLDivElement {\n this.host = document.createElement('div');\n this.root = createRoot(this.host);\n this.render();\n return this.host;\n }\n\n destroy(): void {\n const root = this.root;\n const host = this.host;\n this.root = null;\n this.host = null;\n // Defer unmount to avoid \"synchronously unmount during render\" in Strict Mode\n if (root) {\n queueMicrotask(() => root.unmount());\n }\n if (host?.parentNode) {\n host.parentNode.removeChild(host);\n }\n }\n\n private render(): void {\n if (!this.root) return;\n\n const props: MenuBarProps = {\n onInspectCycle: this.options.onInspectCycle,\n onModeSelect: this.options.onModeSelect,\n onPageClick: this.options.onPageClick,\n onCommandClick: this.options.onCommandClick,\n activeMode: this.activeMode,\n hasPages: this.hasPages,\n positionClass: this.positionClass,\n container: this.container,\n };\n\n this.root.render(createElement(MenuBar, props));\n }\n}\n","import { useState, useRef, useCallback } from 'react';\nimport type React from 'react';\nimport { useDrag } from './hooks/useDrag';\nimport { Tooltip, TooltipTrigger, TooltipPopup, TooltipProvider } from './coss/tooltip';\nimport { Menu, MenuPopup, MenuGroup, MenuRadioGroup, MenuRadioItem, MenuGroupLabel, MenuSeparator } from './coss/menu';\n\ntype ActiveMode = 'inspect' | 'copy' | 'feedback' | null;\n\nfunction IconBase({ children }: { children: React.ReactNode }) {\n return (\n <svg\n className=\"uidex-trigger-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n {children}\n </svg>\n );\n}\n\nfunction SelectIcon() {\n return (\n <IconBase>\n <path d=\"M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z\" />\n <path d=\"M13 13l6 6\" />\n </IconBase>\n );\n}\n\nfunction CopyIcon() {\n return (\n <IconBase>\n <rect x={9} y={9} width={13} height={13} rx={2} />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </IconBase>\n );\n}\n\nfunction FeedbackIcon() {\n return (\n <IconBase>\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </IconBase>\n );\n}\n\nfunction PageIcon() {\n return (\n <IconBase>\n <path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </IconBase>\n );\n}\n\nfunction CommandIcon() {\n return (\n <IconBase>\n <circle cx={11} cy={11} r={8} />\n <line x1={21} y1={21} x2={16.65} y2={16.65} />\n </IconBase>\n );\n}\n\nconst INSPECT_ICON: Record<string, () => React.ReactElement> = {\n inspect: SelectIcon,\n copy: CopyIcon,\n feedback: FeedbackIcon,\n};\n\nconst INSPECT_LABEL: Record<string, string> = {\n inspect: 'Inspect mode',\n copy: 'Copy mode',\n feedback: 'Feedback mode',\n};\n\n\ninterface TriggerButtonProps {\n modifier: string;\n ariaLabel: string;\n title: string;\n icon: React.ReactNode;\n onClick: () => void;\n toggle?: boolean;\n active?: boolean;\n hidden?: boolean;\n container?: HTMLElement | null;\n}\n\nfunction TriggerButton({\n modifier,\n ariaLabel,\n title,\n icon,\n onClick,\n toggle = false,\n active = false,\n hidden = false,\n container,\n}: TriggerButtonProps) {\n if (hidden) return null;\n\n const className = [\n 'uidex-trigger-btn',\n `uidex-trigger-btn--${modifier}`,\n active ? 'uidex-trigger-btn--active' : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Tooltip>\n <TooltipTrigger\n render={\n <button\n className={className}\n aria-label={ariaLabel}\n aria-pressed={toggle ? active : undefined}\n onClick={onClick}\n />\n }\n >\n {icon}\n </TooltipTrigger>\n <TooltipPopup container={container} positionMethod=\"fixed\">{title}</TooltipPopup>\n </Tooltip>\n );\n}\n\n\nexport interface MenuBarProps {\n onInspectCycle?: () => void;\n onModeSelect?: (mode: ActiveMode) => void;\n onPageClick?: () => void;\n onCommandClick?: () => void;\n activeMode?: ActiveMode;\n hasPages?: boolean;\n positionClass?: string;\n container?: HTMLElement | null;\n}\n\nexport function MenuBar({\n onInspectCycle,\n onModeSelect,\n onPageClick,\n onCommandClick,\n activeMode = null,\n hasPages = false,\n positionClass = '',\n container,\n}: MenuBarProps) {\n const { containerRef, handlePointerDown, didDrag } = useDrag();\n const [menuOpen, setMenuOpen] = useState(false);\n const anchorRef = useRef<{ getBoundingClientRect: () => DOMRect } | null>(null);\n\n const guardClick = (handler?: () => void) => () => {\n if (didDrag()) return;\n handler?.();\n };\n\n const handleContextMenu = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n // Anchor the menu at the cursor position\n const x = e.clientX;\n const y = e.clientY;\n anchorRef.current = {\n getBoundingClientRect: () => new DOMRect(x, y, 0, 0),\n };\n setMenuOpen(true);\n }, []);\n\n const handleModeChange = useCallback((value: string | number | readonly string[] | undefined) => {\n if (typeof value !== 'string') return;\n const mode = value === 'off' ? null : (value as ActiveMode);\n onModeSelect?.(mode);\n setMenuOpen(false);\n }, [onModeSelect]);\n\n const InspectIconComponent = activeMode\n ? INSPECT_ICON[activeMode] ?? SelectIcon\n : SelectIcon;\n const inspectTitle = activeMode\n ? INSPECT_LABEL[activeMode] ?? 'Inspect mode'\n : 'Inspect mode';\n\n const buttons: TriggerButtonProps[] = [\n {\n modifier: 'inspect',\n ariaLabel: inspectTitle,\n title: inspectTitle,\n icon: <InspectIconComponent />,\n onClick: guardClick(onInspectCycle),\n toggle: true,\n active: activeMode !== null,\n container,\n },\n {\n modifier: 'page',\n ariaLabel: 'View page',\n title: 'View page',\n icon: <PageIcon />,\n onClick: guardClick(onPageClick),\n hidden: !hasPages,\n container,\n },\n {\n modifier: 'command',\n ariaLabel: 'Search components',\n title: 'Search components',\n icon: <CommandIcon />,\n onClick: guardClick(onCommandClick),\n container,\n },\n ];\n\n const visibleButtons = buttons.filter((b) => !b.hidden);\n\n return (\n <div className={`uidex-container${positionClass ? ` ${positionClass}` : ''}`} ref={containerRef}>\n <TooltipProvider>\n <div\n className=\"uidex-trigger-group\"\n onPointerDown={(e) => {\n // Only drag on primary button (left click)\n if (e.button === 0) handlePointerDown(e);\n }}\n onContextMenu={handleContextMenu}\n >\n {visibleButtons.flatMap((btn, i) => {\n const el = <TriggerButton key={btn.modifier} {...btn} />;\n return i > 0\n ? [<div key={`d-${btn.modifier}`} className=\"uidex-trigger-divider\" />, el]\n : [el];\n })}\n </div>\n </TooltipProvider>\n\n <Menu open={menuOpen} onOpenChange={setMenuOpen}>\n <MenuPopup\n anchor={anchorRef.current}\n side=\"top\"\n align=\"start\"\n sideOffset={8}\n container={container}\n >\n <MenuGroup>\n <MenuGroupLabel>Mode</MenuGroupLabel>\n <MenuRadioGroup\n value={activeMode ?? 'off'}\n onValueChange={handleModeChange}\n >\n <MenuRadioItem value=\"inspect\">\n Inspect\n </MenuRadioItem>\n <MenuRadioItem value=\"copy\">\n Copy ID\n </MenuRadioItem>\n <MenuRadioItem value=\"feedback\">\n Feedback\n </MenuRadioItem>\n <MenuSeparator />\n <MenuRadioItem value=\"off\">\n Off\n </MenuRadioItem>\n </MenuRadioGroup>\n </MenuGroup>\n </MenuPopup>\n </Menu>\n </div>\n );\n}\n","import { useRef, useCallback, useEffect } from 'react';\nimport { POSITION_CLASSES } from '../../core/menu';\nimport type { ButtonPosition } from '../../core/types';\n\nconst DRAG_THRESHOLD = 4;\n\nexport function useDrag() {\n const containerRef = useRef<HTMLDivElement>(null);\n const dragState = useRef({\n isDragging: false,\n hasDragged: false,\n startX: 0,\n startY: 0,\n startLeft: 0,\n startTop: 0,\n });\n\n const snapToCorner = useCallback(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const rect = container.getBoundingClientRect();\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n const vpW = window.innerWidth;\n const vpH = window.innerHeight;\n\n const isRight = centerX > vpW / 2;\n const isBottom = centerY > vpH / 2;\n\n let corner: ButtonPosition;\n if (isBottom && isRight) corner = 'bottom-right';\n else if (isBottom && !isRight) corner = 'bottom-left';\n else if (!isBottom && isRight) corner = 'top-right';\n else corner = 'top-left';\n\n container.style.left = '';\n container.style.top = '';\n container.style.right = '';\n container.style.bottom = '';\n\n container.classList.add(POSITION_CLASSES[corner]);\n }, []);\n\n const handlePointerMove = useCallback((e: PointerEvent) => {\n const state = dragState.current;\n const container = containerRef.current;\n if (!state.isDragging || !container) return;\n\n const dx = e.clientX - state.startX;\n const dy = e.clientY - state.startY;\n\n if (!state.hasDragged && Math.abs(dx) < DRAG_THRESHOLD && Math.abs(dy) < DRAG_THRESHOLD) return;\n state.hasDragged = true;\n\n const newLeft = state.startLeft + dx;\n const newTop = state.startTop + dy;\n\n container.classList.remove(\n 'uidex-bottom-right',\n 'uidex-bottom-left',\n 'uidex-top-right',\n 'uidex-top-left',\n );\n\n container.style.left = `${newLeft}px`;\n container.style.top = `${newTop}px`;\n container.style.right = 'auto';\n container.style.bottom = 'auto';\n }, []);\n\n const handlePointerUp = useCallback(() => {\n const state = dragState.current;\n const container = containerRef.current;\n if (!state.isDragging || !container) return;\n\n state.isDragging = false;\n container.classList.remove('uidex-container--dragging');\n\n document.removeEventListener('pointermove', handlePointerMove);\n document.removeEventListener('pointerup', handlePointerUp);\n\n if (!state.hasDragged) return;\n snapToCorner();\n }, [handlePointerMove, snapToCorner]);\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n const container = containerRef.current;\n if (!container) return;\n\n const state = dragState.current;\n state.hasDragged = false;\n state.isDragging = true;\n state.startX = e.clientX;\n state.startY = e.clientY;\n\n const rect = container.getBoundingClientRect();\n state.startLeft = rect.left;\n state.startTop = rect.top;\n\n container.classList.add('uidex-container--dragging');\n\n document.addEventListener('pointermove', handlePointerMove);\n document.addEventListener('pointerup', handlePointerUp);\n },\n [handlePointerMove, handlePointerUp],\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n document.removeEventListener('pointermove', handlePointerMove);\n document.removeEventListener('pointerup', handlePointerUp);\n };\n }, [handlePointerMove, handlePointerUp]);\n\n return {\n containerRef,\n handlePointerDown,\n /** True if the current/last pointer interaction was a drag (not a click) */\n didDrag: () => dragState.current.hasDragged,\n };\n}\n","\"use client\";\n\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\";\nimport type React from \"react\";\nimport { cn } from \"../utils\";\n\nexport const TooltipProvider: typeof TooltipPrimitive.Provider =\n TooltipPrimitive.Provider;\n\nexport const Tooltip: typeof TooltipPrimitive.Root = TooltipPrimitive.Root;\n\nexport function TooltipTrigger(\n props: TooltipPrimitive.Trigger.Props,\n): React.ReactElement {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nexport function TooltipPopup({\n className,\n align = \"center\",\n sideOffset = 4,\n side = \"top\",\n anchor,\n container,\n positionMethod,\n children,\n ...props\n}: TooltipPrimitive.Popup.Props & {\n align?: TooltipPrimitive.Positioner.Props[\"align\"];\n side?: TooltipPrimitive.Positioner.Props[\"side\"];\n sideOffset?: TooltipPrimitive.Positioner.Props[\"sideOffset\"];\n anchor?: TooltipPrimitive.Positioner.Props[\"anchor\"];\n positionMethod?: TooltipPrimitive.Positioner.Props[\"positionMethod\"];\n container?: HTMLElement | null;\n}): React.ReactElement {\n return (\n <TooltipPrimitive.Portal container={container}>\n <TooltipPrimitive.Positioner\n align={align}\n anchor={anchor}\n className=\"z-50 transition-[top,left,right,bottom,transform] data-instant:transition-none\"\n collisionAvoidance={{ side: \"flip\", align: \"shift\" }}\n collisionPadding={8}\n data-slot=\"tooltip-positioner\"\n positionMethod={positionMethod}\n side={side}\n sideOffset={sideOffset}\n >\n <TooltipPrimitive.Popup\n className={cn(\n \"relative flex origin-(--transform-origin) text-balance rounded-md border bg-popover not-dark:bg-clip-padding text-popover-foreground text-xs shadow-md/5 transition-[scale,opacity] data-ending-style:scale-98 data-starting-style:scale-98 data-ending-style:opacity-0 data-starting-style:opacity-0 data-instant:duration-0 px-2 py-1\",\n className,\n )}\n data-slot=\"tooltip-popup\"\n {...props}\n >\n {children}\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { TooltipPrimitive };\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs))\n}\n\n/** Convert kebab-case ID to title case: \"org-dashboard\" → \"Org Dashboard\" */\nexport function humanizeId(id: string): string {\n return id\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n}\n","\"use client\";\n\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\";\nimport type * as React from \"react\";\nimport { cn } from \"../utils\";\n\nexport const Menu: typeof MenuPrimitive.Root = MenuPrimitive.Root;\n\nexport function MenuTrigger({\n className,\n children,\n ...props\n}: MenuPrimitive.Trigger.Props): React.ReactElement {\n return (\n <MenuPrimitive.Trigger\n className={className}\n data-slot=\"menu-trigger\"\n {...props}\n >\n {children}\n </MenuPrimitive.Trigger>\n );\n}\n\nexport function MenuPopup({\n children,\n className,\n sideOffset = 4,\n align = \"center\",\n alignOffset,\n side = \"bottom\",\n anchor,\n container,\n ...props\n}: MenuPrimitive.Popup.Props & {\n align?: MenuPrimitive.Positioner.Props[\"align\"];\n sideOffset?: MenuPrimitive.Positioner.Props[\"sideOffset\"];\n alignOffset?: MenuPrimitive.Positioner.Props[\"alignOffset\"];\n side?: MenuPrimitive.Positioner.Props[\"side\"];\n anchor?: MenuPrimitive.Positioner.Props[\"anchor\"];\n container?: HTMLElement | null;\n}): React.ReactElement {\n return (\n <MenuPrimitive.Portal container={container}>\n <MenuPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n anchor={anchor}\n className=\"z-50\"\n data-slot=\"menu-positioner\"\n side={side}\n sideOffset={sideOffset}\n >\n <MenuPrimitive.Popup\n className={cn(\n \"relative flex not-[class*='w-']:min-w-32 origin-(--transform-origin) rounded-lg border bg-popover not-dark:bg-clip-padding shadow-lg/5 outline-none before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] focus:outline-none dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n )}\n data-slot=\"menu-popup\"\n {...props}\n >\n <div className=\"max-h-(--available-height) w-full overflow-y-auto p-1\">\n {children}\n </div>\n </MenuPrimitive.Popup>\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n );\n}\n\nexport function MenuGroup(\n props: MenuPrimitive.Group.Props,\n): React.ReactElement {\n return <MenuPrimitive.Group data-slot=\"menu-group\" {...props} />;\n}\n\nexport function MenuItem({\n className,\n ...props\n}: MenuPrimitive.Item.Props): React.ReactElement {\n return (\n <MenuPrimitive.Item\n className={cn(\n \"flex min-h-8 cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-sm text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:opacity-64 [&>svg:not([class*='size-'])]:size-4 [&>svg]:pointer-events-none [&>svg]:-mx-0.5 [&>svg]:shrink-0\",\n className,\n )}\n data-slot=\"menu-item\"\n {...props}\n />\n );\n}\n\nexport function MenuRadioGroup(\n props: MenuPrimitive.RadioGroup.Props,\n): React.ReactElement {\n return <MenuPrimitive.RadioGroup data-slot=\"menu-radio-group\" {...props} />;\n}\n\nexport function MenuRadioItem({\n className,\n children,\n ...props\n}: MenuPrimitive.RadioItem.Props): React.ReactElement {\n return (\n <MenuPrimitive.RadioItem\n className={cn(\n \"grid min-h-8 cursor-default grid-cols-[.75rem_1fr] items-center gap-2 rounded-sm py-1 ps-2 pe-4 text-sm text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:opacity-64 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n data-slot=\"menu-radio-item\"\n {...props}\n >\n <MenuPrimitive.RadioItemIndicator className=\"col-start-1 -ms-0.5\">\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"24\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M5.252 12.7 10.2 18.63 18.748 5.37\" />\n </svg>\n </MenuPrimitive.RadioItemIndicator>\n <span className=\"col-start-2\">{children}</span>\n </MenuPrimitive.RadioItem>\n );\n}\n\nexport function MenuCheckboxItem({\n className,\n children,\n ...props\n}: MenuPrimitive.CheckboxItem.Props): React.ReactElement {\n return (\n <MenuPrimitive.CheckboxItem\n className={cn(\n \"grid min-h-8 cursor-default grid-cols-[.75rem_1fr] items-center gap-2 rounded-sm py-1 ps-2 pe-4 text-sm text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:opacity-64 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n data-slot=\"menu-checkbox-item\"\n {...props}\n >\n <MenuPrimitive.CheckboxItemIndicator className=\"col-start-1 -ms-0.5\" keepMounted>\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"24\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M5.252 12.7 10.2 18.63 18.748 5.37\" />\n </svg>\n </MenuPrimitive.CheckboxItemIndicator>\n <span className=\"col-start-2\">{children}</span>\n </MenuPrimitive.CheckboxItem>\n );\n}\n\nexport function MenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props): React.ReactElement {\n return (\n <MenuPrimitive.Separator\n className={cn(\"mx-2 my-1 h-px bg-border\", className)}\n data-slot=\"menu-separator\"\n {...props}\n />\n );\n}\n\nexport function MenuGroupLabel({\n className,\n ...props\n}: MenuPrimitive.GroupLabel.Props): React.ReactElement {\n return (\n <MenuPrimitive.GroupLabel\n className={cn(\n \"px-2 py-1.5 font-medium text-muted-foreground text-xs\",\n className,\n )}\n data-slot=\"menu-label\"\n {...props}\n />\n );\n}\n\nexport { MenuPrimitive };\n","export function classNames(\n ...classes: (string | undefined | null | false)[]\n): string {\n return classes.filter(Boolean).join(' ');\n}\n\nexport function getContrastColor(hexColor: string): string {\n const hex = hexColor.replace('#', '');\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n return luminance > 0.5 ? '#000000' : '#ffffff';\n}\n\nexport function hexToRgba(hex: string, alpha: number): string {\n const hexValue = hex.replace('#', '');\n const r = parseInt(hexValue.substring(0, 2), 16);\n const g = parseInt(hexValue.substring(2, 4), 16);\n const b = parseInt(hexValue.substring(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\nexport const OVERLAY_COLORS = {\n component: '#3b82f6',\n block: '#c084fc',\n gap: '#f59e0b',\n} as const;\n\nexport const LABEL_FONT =\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace';\n\nexport function applyLabelStyles(el: HTMLElement, color: string): void {\n el.style.position = 'absolute';\n el.style.fontFamily = LABEL_FONT;\n el.style.fontSize = '11px';\n el.style.fontWeight = '500';\n el.style.padding = '2px 6px';\n el.style.borderRadius = '6px';\n el.style.whiteSpace = 'nowrap';\n el.style.backgroundColor = color;\n el.style.color = getContrastColor(color);\n}\n\nexport function resolveColor(\n color: string | undefined,\n colorMap?: Record<string, string>\n): string | undefined {\n if (!color) return undefined;\n if (color.startsWith('#')) return color;\n return colorMap?.[color] ?? color;\n}\n","import type { OverlayOptions } from './types';\nimport { resolveColor, hexToRgba, OVERLAY_COLORS } from './utils';\n\nconst DEFAULT_COLOR = OVERLAY_COLORS.component;\nconst DEFAULT_BORDER_STYLE = 'solid';\nconst DEFAULT_BORDER_WIDTH = 2;\nconst DEFAULT_FILL_OPACITY = 0.08;\n\nexport class Overlay {\n private element: HTMLDivElement | null = null;\n private target: HTMLElement | null = null;\n private baseOptions: OverlayOptions;\n private options: OverlayOptions;\n private boundUpdatePosition: () => void;\n private rafId: number | null = null;\n\n constructor(options: OverlayOptions = {}) {\n this.baseOptions = options;\n this.options = options;\n this.boundUpdatePosition = () => {\n if (this.rafId !== null) return;\n this.rafId = requestAnimationFrame(() => {\n this.rafId = null;\n this.updatePosition();\n });\n };\n }\n\n show(target: HTMLElement, overrides?: Partial<OverlayOptions>): void {\n this.target = target;\n\n if (!this.element) {\n this.createElement();\n }\n\n // Reset to base options, then apply per-call overrides\n this.options = { ...this.baseOptions };\n if (overrides) {\n this.options = { ...this.options, ...overrides };\n }\n\n this.updateStyles();\n this.updatePosition();\n this.addListeners();\n\n if (this.element && !this.element.parentNode) {\n document.body.appendChild(this.element);\n }\n }\n\n hide(): void {\n this.removeListeners();\n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n this.target = null;\n }\n\n destroy(): void {\n this.hide();\n this.element = null;\n }\n\n updateOptions(options: Partial<OverlayOptions>): void {\n this.baseOptions = { ...this.baseOptions, ...options };\n this.options = { ...this.options, ...options };\n this.updateStyles();\n }\n\n private createElement(): void {\n this.element = document.createElement('div');\n this.element.className = 'uidex-overlay';\n this.element.setAttribute('data-testid', 'annotation-overlay');\n\n // Critical positioning styles are set inline because the overlay\n // lives in document.body, outside the Shadow DOM where the CSS is.\n this.element.style.position = 'fixed';\n this.element.style.pointerEvents = 'none';\n this.element.style.zIndex = '2147483645';\n\n this.updateStyles();\n }\n\n private updateStyles(): void {\n if (!this.element) return;\n\n const {\n color,\n borderStyle = DEFAULT_BORDER_STYLE,\n borderWidth = DEFAULT_BORDER_WIDTH,\n colors,\n } = this.options;\n\n const resolvedColor = resolveColor(color, colors) ?? DEFAULT_COLOR;\n const opacity = this.options.opacity;\n const fillOpacity = this.options.fillOpacity ?? DEFAULT_FILL_OPACITY;\n\n this.element.style.borderColor = resolvedColor;\n this.element.style.borderWidth = `${borderWidth}px`;\n this.element.style.borderStyle = borderStyle;\n this.element.style.opacity = opacity != null ? String(opacity) : '';\n this.element.style.backgroundColor = hexToRgba(resolvedColor, fillOpacity);\n }\n\n private updatePosition(): void {\n if (!this.element || !this.target) return;\n\n const rect = this.target.getBoundingClientRect();\n const pad = this.options.padding ?? 0;\n\n // position: fixed is viewport-relative, matching getBoundingClientRect()\n this.element.style.top = `${rect.top - pad}px`;\n this.element.style.left = `${rect.left - pad}px`;\n this.element.style.width = `${rect.width + pad * 2}px`;\n this.element.style.height = `${rect.height + pad * 2}px`;\n }\n\n private addListeners(): void {\n window.addEventListener('resize', this.boundUpdatePosition);\n window.addEventListener('scroll', this.boundUpdatePosition, {\n capture: true,\n passive: true,\n });\n }\n\n private removeListeners(): void {\n window.removeEventListener('resize', this.boundUpdatePosition);\n window.removeEventListener('scroll', this.boundUpdatePosition, {\n capture: true,\n } as EventListenerOptions);\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n }\n}\n","import type { KeyboardShortcut } from './types';\n\nconst DEFAULT_SHORTCUT: KeyboardShortcut = {\n key: 'u',\n shiftKey: true,\n metaKey: true,\n};\n\nconst INSPECTING_CLASS = 'uidex-inspecting';\nconst INSPECTING_STYLE_ID = 'uidex-inspecting-style';\nconst INSPECTING_CSS = `body.${INSPECTING_CLASS},body.${INSPECTING_CLASS} *{cursor:crosshair!important}`;\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n return (\n target.isContentEditable ||\n target.getAttribute('contenteditable') === 'true' ||\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.tagName === 'SELECT'\n );\n}\n\nfunction matchesShortcut(\n e: KeyboardEvent,\n shortcut: KeyboardShortcut\n): boolean {\n return (\n e.key.toLowerCase() === shortcut.key.toLowerCase() &&\n !!e.ctrlKey === !!shortcut.ctrlKey &&\n !!e.shiftKey === !!shortcut.shiftKey &&\n !!e.altKey === !!shortcut.altKey &&\n !!e.metaKey === !!shortcut.metaKey\n );\n}\n\ninterface AncestorResult {\n element: HTMLElement;\n id: string;\n parentBlock?: { element: HTMLElement; id: string };\n}\n\nfunction findAnnotatedAncestor(\n target: EventTarget\n): AncestorResult | null {\n if (!(target instanceof Element)) return null;\n if (target.closest('.uidex-container')) return null;\n\n // Prefer the closest interactive element, fall back to block\n const annotated = target.closest('[data-uidex]');\n if (annotated instanceof HTMLElement) {\n const id = annotated.getAttribute('data-uidex');\n if (id) {\n const result: AncestorResult = { element: annotated, id };\n // Find nearest parent block for context highlighting\n const block = annotated.parentElement?.closest('[data-uidex-block]');\n if (block instanceof HTMLElement) {\n const blockId = block.getAttribute('data-uidex-block');\n if (blockId) {\n result.parentBlock = { element: block, id: blockId };\n }\n }\n return result;\n }\n }\n\n const block = target.closest('[data-uidex-block]');\n if (block instanceof HTMLElement) {\n const id = block.getAttribute('data-uidex-block');\n if (id) return { element: block, id };\n }\n\n return null;\n}\n\nexport interface InspectorOptions {\n shortcut?: KeyboardShortcut;\n onHighlight?: (\n element: HTMLElement | null,\n id: string | null,\n parentBlock?: { element: HTMLElement; id: string } | null,\n cursor?: { x: number; y: number } | null\n ) => void;\n onSelect?: (element: HTMLElement, id: string, opts?: { persistent?: boolean }) => void;\n onActivate?: () => void;\n onDeactivate?: () => void;\n}\n\nexport class Inspector {\n private active = false;\n private shortcut: KeyboardShortcut;\n private currentTarget: HTMLElement | null = null;\n\n private onHighlight: InspectorOptions['onHighlight'];\n private onSelect: InspectorOptions['onSelect'];\n private onActivate: InspectorOptions['onActivate'];\n private onDeactivate: InspectorOptions['onDeactivate'];\n\n private boundKeyDown: (e: KeyboardEvent) => void;\n private boundMouseMove: (e: MouseEvent) => void;\n private boundClick: (e: MouseEvent) => void;\n\n constructor(options: InspectorOptions = {}) {\n this.shortcut = options.shortcut ?? DEFAULT_SHORTCUT;\n this.onHighlight = options.onHighlight;\n this.onSelect = options.onSelect;\n this.onActivate = options.onActivate;\n this.onDeactivate = options.onDeactivate;\n\n this.boundKeyDown = this.handleKeyDown.bind(this);\n this.boundMouseMove = this.handleMouseMove.bind(this);\n this.boundClick = this.handleClick.bind(this);\n }\n\n mount(): void {\n document.addEventListener('keydown', this.boundKeyDown);\n\n // Inject inspect-mode cursor style into the document (not shadow DOM)\n if (!document.getElementById(INSPECTING_STYLE_ID)) {\n const style = document.createElement('style');\n style.id = INSPECTING_STYLE_ID;\n style.textContent = INSPECTING_CSS;\n document.head.appendChild(style);\n }\n }\n\n destroy(): void {\n if (this.active) {\n this.deactivate();\n }\n document.removeEventListener('keydown', this.boundKeyDown);\n document.getElementById(INSPECTING_STYLE_ID)?.remove();\n }\n\n activate(): void {\n if (this.active) return;\n this.active = true;\n this.currentTarget = null;\n\n document.addEventListener('mousemove', this.boundMouseMove);\n document.addEventListener('click', this.boundClick, true);\n document.body.classList.add(INSPECTING_CLASS);\n\n this.onActivate?.();\n }\n\n deactivate(): void {\n if (!this.active) return;\n this.active = false;\n this.currentTarget = null;\n\n document.removeEventListener('mousemove', this.boundMouseMove);\n document.removeEventListener('click', this.boundClick, true);\n document.body.classList.remove(INSPECTING_CLASS);\n\n this.onHighlight?.(null, null);\n this.onDeactivate?.();\n }\n\n isActive(): boolean {\n return this.active;\n }\n\n private handleKeyDown(e: KeyboardEvent): void {\n if (this.active && e.key === 'Escape') {\n e.preventDefault();\n this.deactivate();\n return;\n }\n\n if (isEditableTarget(e.target)) return;\n\n if (matchesShortcut(e, this.shortcut)) {\n e.preventDefault();\n if (this.active) {\n this.deactivate();\n } else {\n this.activate();\n }\n }\n }\n\n private handleMouseMove(e: MouseEvent): void {\n const result = findAnnotatedAncestor(e.target!);\n const cursor = { x: e.clientX, y: e.clientY };\n\n if (result) {\n if (result.element !== this.currentTarget) {\n this.currentTarget = result.element;\n this.onHighlight?.(result.element, result.id, result.parentBlock, cursor);\n } else {\n // Same element but cursor moved — update cursor position\n this.onHighlight?.(result.element, result.id, result.parentBlock, cursor);\n }\n } else if (this.currentTarget) {\n this.currentTarget = null;\n this.onHighlight?.(null, null, null, null);\n }\n }\n\n private handleClick(e: MouseEvent): void {\n if (!(e.target instanceof Element)) return;\n\n // Don't intercept clicks on uidex's own UI\n if (e.target.closest('.uidex-container')) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n const persistent = e.shiftKey;\n const result = findAnnotatedAncestor(e.target);\n if (result) {\n this.onSelect?.(result.element, result.id, persistent ? { persistent: true } : undefined);\n }\n\n if (!persistent) {\n this.deactivate();\n }\n }\n}\n","import { createRoot, type Root } from 'react-dom/client';\nimport { createElement } from 'react';\nimport {\n createDialogStore,\n type DialogStore,\n DialogHost,\n} from '../ui/DialogHost';\nimport type { ModalData, ModalOptions } from '../ui/modal/store';\n\nexport type { ModalData, ModalOptions } from '../ui/modal/store';\nexport type { ModalPage, ModalFeature } from '../ui/modal/store';\n\nexport class ModalManager {\n private container: HTMLElement | null = null;\n private host: HTMLDivElement | null = null;\n private root: Root | null = null;\n private store: DialogStore;\n private options: ModalOptions;\n\n constructor(options: ModalOptions = {}) {\n this.options = options;\n this.store = createDialogStore();\n }\n\n setContainer(el: HTMLElement): void {\n this.container = el;\n }\n\n setData(data: ModalData): void {\n this.store.setState({ data });\n }\n\n openCommand(): void {\n this.ensureMounted();\n // Mutual exclusion: close page when opening command\n this.store.setState({\n commandOpen: true,\n pageOpen: false,\n });\n }\n\n openPage(dir?: string): void {\n this.ensureMounted();\n // Mutual exclusion: close command when opening page\n this.store.setState({\n pageOpen: true,\n commandOpen: false,\n pageDir: dir ?? null,\n });\n }\n\n openComponent(id: string): void {\n this.ensureMounted();\n this.store.setState({\n componentOpen: true,\n componentTargetId: id,\n commandOpen: false,\n pageOpen: false,\n });\n }\n\n openUi(filePath: string): void {\n this.ensureMounted();\n this.store.setState({\n uiOpen: true,\n uiFilePath: filePath,\n commandOpen: false,\n pageOpen: false,\n componentOpen: false,\n });\n }\n\n openFeedback(id: string): void {\n this.ensureMounted();\n this.store.setState({\n feedbackOpen: true,\n feedbackTargetId: id,\n });\n }\n\n closeAll(): void {\n this.store.setState({\n commandOpen: false,\n pageOpen: false,\n feedbackOpen: false,\n componentOpen: false,\n uiOpen: false,\n feedbackTargetId: null,\n componentTargetId: null,\n uiFilePath: null,\n });\n }\n\n isOpen(): boolean {\n const state = this.store.getState();\n return state.commandOpen || state.pageOpen || state.feedbackOpen || state.componentOpen || state.uiOpen;\n }\n\n destroy(): void {\n this.closeAll();\n const root = this.root;\n const host = this.host;\n this.root = null;\n this.host = null;\n if (root) {\n queueMicrotask(() => root.unmount());\n }\n if (host?.parentNode) {\n host.parentNode.removeChild(host);\n }\n }\n\n private ensureMounted(): void {\n if (this.root) return;\n\n const target = this.container ?? document.body;\n this.host = document.createElement('div');\n target.appendChild(this.host);\n this.root = createRoot(this.host);\n this.render();\n }\n\n private render(): void {\n if (!this.root) return;\n this.root.render(\n createElement(DialogHost, {\n store: this.store,\n options: this.options,\n container: this.container,\n }),\n );\n }\n}\n\n// Keep backward-compatible export name\nexport { ModalManager as Modal };\n","import { useSyncExternalStore } from 'react';\nimport type { ModalData, ModalOptions } from './modal/store';\nimport { CommandPalette } from './command-palette/CommandPalette';\nimport { PageDialog } from './page-dialog/PageDialog';\nimport { FeedbackDialog } from './feedback-dialog/FeedbackDialog';\nimport { ComponentDialog } from './component-dialog/ComponentDialog';\nimport { FeatureDialog } from './feature-dialog/FeatureDialog';\nimport { UiDialog } from './ui-dialog/UiDialog';\n\nexport type NavigationEntry =\n | { type: 'component'; id: string }\n | { type: 'page'; dir: string }\n | { type: 'feature'; dir: string }\n | { type: 'ui'; filePath: string };\n\nexport interface DialogHostState {\n commandOpen: boolean;\n pageOpen: boolean;\n feedbackOpen: boolean;\n componentOpen: boolean;\n featureOpen: boolean;\n uiOpen: boolean;\n feedbackTargetId: string | null;\n componentTargetId: string | null;\n pageDir: string | null;\n featureDir: string | null;\n uiFilePath: string | null;\n navigationHistory: NavigationEntry[];\n data: ModalData;\n}\n\nconst DEFAULT_DATA: ModalData = {\n pages: [],\n features: [],\n components: {},\n presentIds: new Set(),\n blockContainment: new Map(),\n uiComponents: new Map(),\n};\n\nexport function createDialogStore() {\n let state: DialogHostState = {\n commandOpen: false,\n pageOpen: false,\n feedbackOpen: false,\n componentOpen: false,\n featureOpen: false,\n uiOpen: false,\n feedbackTargetId: null,\n componentTargetId: null,\n pageDir: null,\n featureDir: null,\n uiFilePath: null,\n navigationHistory: [],\n data: DEFAULT_DATA,\n };\n\n const listeners = new Set<() => void>();\n\n function getState(): DialogHostState {\n return state;\n }\n\n function setState(partial: Partial<DialogHostState>) {\n const keys = Object.keys(partial) as (keyof DialogHostState)[];\n const changed = keys.some((k) => partial[k] !== state[k]);\n if (!changed) return;\n state = { ...state, ...partial };\n listeners.forEach((l) => l());\n }\n\n function subscribe(listener: () => void) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n\n return { getState, setState, subscribe };\n}\n\nexport type DialogStore = ReturnType<typeof createDialogStore>;\n\nfunction useDialogStore(store: DialogStore): DialogHostState {\n return useSyncExternalStore(store.subscribe, store.getState);\n}\n\ninterface DialogHostProps {\n store: DialogStore;\n options: ModalOptions;\n container?: HTMLElement | null;\n}\n\nexport function DialogHost({ store, options, container }: DialogHostProps) {\n const state = useDialogStore(store);\n\n const handleCloseCommand = () => {\n store.setState({ commandOpen: false, navigationHistory: [] });\n };\n\n const handleClosePage = () => {\n store.setState({ pageOpen: false, navigationHistory: [] });\n };\n\n const handleCloseFeedback = () => {\n store.setState({ feedbackOpen: false, feedbackTargetId: null, navigationHistory: [] });\n };\n\n const handleCloseComponent = () => {\n store.setState({ componentOpen: false, componentTargetId: null, navigationHistory: [] });\n };\n\n const handleCloseFeature = () => {\n store.setState({ featureOpen: false, featureDir: null, navigationHistory: [] });\n };\n\n const handleCloseUi = () => {\n store.setState({ uiOpen: false, uiFilePath: null, navigationHistory: [] });\n };\n\n // Capture current dialog as a navigation entry for the back stack\n const getCurrentEntry = (): NavigationEntry | null => {\n const s = store.getState();\n if (s.componentOpen && s.componentTargetId) return { type: 'component', id: s.componentTargetId };\n if (s.pageOpen && s.pageDir) return { type: 'page', dir: s.pageDir };\n if (s.featureOpen && s.featureDir) return { type: 'feature', dir: s.featureDir };\n if (s.uiOpen && s.uiFilePath) return { type: 'ui', filePath: s.uiFilePath };\n return null;\n };\n\n const closeAllDialogs = {\n commandOpen: false,\n pageOpen: false,\n feedbackOpen: false,\n componentOpen: false,\n featureOpen: false,\n uiOpen: false,\n feedbackTargetId: null,\n componentTargetId: null,\n pageDir: null,\n featureDir: null,\n uiFilePath: null,\n };\n\n const handleOpenComponent = (id: string) => {\n const current = getCurrentEntry();\n const history = current\n ? [...store.getState().navigationHistory, current]\n : store.getState().navigationHistory;\n store.setState({\n ...closeAllDialogs,\n componentOpen: true,\n componentTargetId: id,\n navigationHistory: history,\n });\n };\n\n const handleOpenPage = (dir: string) => {\n const current = getCurrentEntry();\n const history = current\n ? [...store.getState().navigationHistory, current]\n : store.getState().navigationHistory;\n store.setState({\n ...closeAllDialogs,\n pageOpen: true,\n pageDir: dir,\n navigationHistory: history,\n });\n };\n\n const handleOpenFeature = (dir: string) => {\n const current = getCurrentEntry();\n const history = current\n ? [...store.getState().navigationHistory, current]\n : store.getState().navigationHistory;\n store.setState({\n ...closeAllDialogs,\n featureOpen: true,\n featureDir: dir,\n navigationHistory: history,\n });\n };\n\n const handleOpenUi = (filePath: string) => {\n const current = getCurrentEntry();\n const history = current\n ? [...store.getState().navigationHistory, current]\n : store.getState().navigationHistory;\n store.setState({\n ...closeAllDialogs,\n uiOpen: true,\n uiFilePath: filePath,\n navigationHistory: history,\n });\n };\n\n // @ts-expect-error scaffolded for dialog back-button wiring — unused until dialog back-buttons are wired\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const handleBack = () => {\n const history = [...store.getState().navigationHistory];\n const prev = history.pop();\n if (!prev) return;\n const base = { ...closeAllDialogs, navigationHistory: history };\n switch (prev.type) {\n case 'component':\n store.setState({ ...base, componentOpen: true, componentTargetId: prev.id });\n break;\n case 'page':\n store.setState({ ...base, pageOpen: true, pageDir: prev.dir });\n break;\n case 'feature':\n store.setState({ ...base, featureOpen: true, featureDir: prev.dir });\n break;\n case 'ui':\n store.setState({ ...base, uiOpen: true, uiFilePath: prev.filePath });\n break;\n }\n };\n\n return (\n <>\n {state.commandOpen && (\n <CommandPalette\n open={state.commandOpen}\n onClose={handleCloseCommand}\n data={state.data}\n onSelectComponent={handleOpenComponent}\n onLocate={options.onLocate}\n onOpenFeature={handleOpenFeature}\n container={container}\n />\n )}\n {state.pageOpen && state.data.pages.length > 0 && (\n <PageDialog\n open={state.pageOpen}\n onClose={handleClosePage}\n data={state.data}\n initialPageDir={state.pageDir}\n onSelectComponent={handleOpenComponent}\n onOpenFeature={handleOpenFeature}\n container={container}\n />\n )}\n {state.componentOpen && state.componentTargetId && (\n <ComponentDialog\n open={state.componentOpen}\n onClose={handleCloseComponent}\n targetId={state.componentTargetId}\n data={state.data}\n onSelectComponent={handleOpenComponent}\n onOpenPage={handleOpenPage}\n onOpenFeature={handleOpenFeature}\n container={container}\n />\n )}\n {state.featureOpen && state.featureDir && (\n <FeatureDialog\n open={state.featureOpen}\n onClose={handleCloseFeature}\n featureDir={state.featureDir}\n data={state.data}\n onSelectComponent={handleOpenComponent}\n onOpenPage={handleOpenPage}\n container={container}\n />\n )}\n {state.uiOpen && state.uiFilePath && (\n <UiDialog\n open={state.uiOpen}\n onClose={handleCloseUi}\n filePath={state.uiFilePath}\n data={state.data}\n onSelectComponent={handleOpenComponent}\n onOpenFeature={handleOpenFeature}\n onOpenPage={handleOpenPage}\n onOpenUi={handleOpenUi}\n container={container}\n />\n )}\n {state.feedbackOpen && state.feedbackTargetId && (\n <FeedbackDialog\n open={state.feedbackOpen}\n onClose={handleCloseFeedback}\n targetId={state.feedbackTargetId}\n data={state.data}\n options={options}\n container={container}\n />\n )}\n </>\n );\n}\n","import { useState, useMemo, useCallback, useRef } from 'react';\nimport type { ModalData } from '../modal/store';\nimport {\n CommandDialog,\n CommandDialogPopup,\n Command,\n CommandInput,\n CommandPanel,\n CommandList,\n CommandGroup,\n CommandGroupLabel,\n CommandItem,\n CommandEmpty,\n CommandFooter,\n CommandSeparator,\n} from '../coss/command';\nimport { BoxIcon, BlocksIcon, SparklesIcon } from 'lucide-react';\nimport { cn, humanizeId } from '../utils';\n\ninterface CommandPaletteProps {\n open: boolean;\n onClose: () => void;\n data: ModalData;\n onSelectComponent: (id: string) => void;\n onLocate?: (id: string) => void;\n onOpenFeature: (dir: string) => void;\n container?: HTMLElement | null;\n}\n\ninterface PaletteItem {\n value: string;\n label: string;\n present: boolean;\n}\n\nexport function CommandPalette({\n open,\n onClose,\n data,\n onSelectComponent,\n onLocate,\n onOpenFeature,\n container,\n}: CommandPaletteProps) {\n const [query, setQuery] = useState('');\n const shiftHeldRef = useRef(false);\n\n const { componentItems, blockItems, featureItems } = useMemo(() => {\n const componentItems: PaletteItem[] = [];\n const blockItems: PaletteItem[] = [];\n const featureItems: PaletteItem[] = [];\n\n for (const id of Object.keys(data.components)) {\n const kind = data.components[id]?.[0]?.kind;\n const item: PaletteItem = {\n value: id,\n label: humanizeId(id),\n present: data.presentIds.has(id),\n };\n if (kind === 'block') {\n blockItems.push(item);\n } else {\n componentItems.push(item);\n }\n }\n\n for (const feature of data.features) {\n featureItems.push({\n value: `feature:${feature.dir}`,\n label: feature.title,\n present: true,\n });\n }\n\n return { componentItems, blockItems, featureItems };\n }, [data]);\n\n const filtered = useMemo(() => {\n const q = query.toLowerCase();\n const filter = (items: PaletteItem[]) =>\n q ? items.filter((i) => i.label.toLowerCase().includes(q)) : items;\n return {\n componentItems: filter(componentItems),\n blockItems: filter(blockItems),\n featureItems: filter(featureItems),\n };\n }, [componentItems, blockItems, featureItems, query]);\n\n const hasResults =\n filtered.componentItems.length > 0 ||\n filtered.blockItems.length > 0 ||\n filtered.featureItems.length > 0;\n\n const handleValueChange = useCallback(\n (value: string | null) => {\n if (!value) return;\n if (value.startsWith('feature:')) {\n const dir = value.slice('feature:'.length);\n onOpenFeature(dir);\n return;\n }\n if (shiftHeldRef.current && onLocate) {\n onLocate(value);\n onClose();\n return;\n }\n onSelectComponent(value);\n },\n [onOpenFeature, onSelectComponent, onLocate, onClose],\n );\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n shiftHeldRef.current = e.shiftKey;\n }, []);\n\n const handleItemClick = useCallback((value: string, e: React.MouseEvent) => {\n shiftHeldRef.current = e.shiftKey;\n handleValueChange(value);\n }, [handleValueChange]);\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen) {\n onClose();\n setQuery('');\n }\n };\n\n return (\n <CommandDialog open={open} onOpenChange={handleOpenChange}>\n <CommandDialogPopup container={container}>\n <Command onValueChange={handleValueChange}>\n <CommandInput\n placeholder=\"Search components, blocks, features...\"\n value={query}\n onChange={(e) => setQuery((e.target as HTMLInputElement).value)}\n onKeyDown={handleKeyDown}\n />\n\n <CommandPanel>\n <CommandList>\n {!hasResults && (\n <CommandEmpty>No results found.</CommandEmpty>\n )}\n\n {filtered.componentItems.length > 0 && (\n <CommandGroup>\n <CommandGroupLabel>Components</CommandGroupLabel>\n {filtered.componentItems.map((item) => (\n <CommandItem\n key={item.value}\n value={item.value}\n className={cn(!item.present && 'opacity-50')}\n onClick={(e) => handleItemClick(item.value, e)}\n >\n <BoxIcon className=\"size-4 shrink-0\" />\n {item.label}\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n\n {filtered.blockItems.length > 0 && (\n <>\n {filtered.componentItems.length > 0 && (\n <CommandSeparator />\n )}\n <CommandGroup>\n <CommandGroupLabel>Blocks</CommandGroupLabel>\n {filtered.blockItems.map((item) => (\n <CommandItem\n key={item.value}\n value={item.value}\n className={cn(!item.present && 'opacity-50')}\n onClick={(e) => handleItemClick(item.value, e)}\n >\n <BlocksIcon className=\"size-4 shrink-0\" />\n {item.label}\n </CommandItem>\n ))}\n </CommandGroup>\n </>\n )}\n\n {filtered.featureItems.length > 0 && (\n <>\n {(filtered.componentItems.length > 0 ||\n filtered.blockItems.length > 0) && <CommandSeparator />}\n <CommandGroup>\n <CommandGroupLabel>Features</CommandGroupLabel>\n {filtered.featureItems.map((item) => (\n <CommandItem\n key={item.value}\n value={item.value}\n onClick={(e) => handleItemClick(item.value, e)}\n >\n <SparklesIcon className=\"size-4 shrink-0\" />\n {item.label}\n </CommandItem>\n ))}\n </CommandGroup>\n </>\n )}\n </CommandList>\n </CommandPanel>\n\n <CommandFooter>\n <span className=\"inline-flex items-center gap-1.5\">\n <kbd className=\"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border/50 px-1 font-mono text-[10px]\">\n ↑↓\n </kbd>\n Navigate\n </span>\n <span className=\"inline-flex items-center gap-1.5\">\n <kbd className=\"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border/50 px-1 font-mono text-[10px]\">\n ↵\n </kbd>\n Select\n </span>\n {onLocate && (\n <span className=\"inline-flex items-center gap-1.5\">\n <kbd className=\"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border/50 px-1 font-mono text-[10px]\">\n ⇧↵\n </kbd>\n Locate\n </span>\n )}\n <span className=\"inline-flex items-center gap-1.5\">\n <kbd className=\"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border/50 px-1 font-mono text-[10px]\">\n Esc\n </kbd>\n Close\n </span>\n </CommandFooter>\n </Command>\n </CommandDialogPopup>\n </CommandDialog>\n );\n}\n","\"use client\";\n\nimport { Dialog as CommandDialogPrimitive } from \"@base-ui/react/dialog\";\nimport { SearchIcon } from \"lucide-react\";\nimport type * as React from \"react\";\nimport { cn } from \"../utils\";\nimport {\n Autocomplete,\n AutocompleteCollection,\n AutocompleteEmpty,\n AutocompleteGroup,\n AutocompleteGroupLabel,\n AutocompleteInput,\n AutocompleteItem,\n AutocompleteList,\n AutocompleteSeparator,\n} from \"./autocomplete\";\n\nexport const CommandDialog: typeof CommandDialogPrimitive.Root =\n CommandDialogPrimitive.Root;\n\nexport const CommandDialogPortal: typeof CommandDialogPrimitive.Portal =\n CommandDialogPrimitive.Portal;\n\nexport const CommandCreateHandle: typeof CommandDialogPrimitive.createHandle =\n CommandDialogPrimitive.createHandle;\n\nexport function CommandDialogTrigger(\n props: CommandDialogPrimitive.Trigger.Props,\n): React.ReactElement {\n return (\n <CommandDialogPrimitive.Trigger\n data-slot=\"command-dialog-trigger\"\n {...props}\n />\n );\n}\n\nexport function CommandDialogBackdrop({\n className,\n ...props\n}: CommandDialogPrimitive.Backdrop.Props): React.ReactElement {\n return (\n <CommandDialogPrimitive.Backdrop\n className={cn(\n \"fixed inset-0 z-50 bg-black/32 backdrop-blur-sm transition-all duration-200 data-ending-style:opacity-0 data-starting-style:opacity-0\",\n className,\n )}\n data-slot=\"command-dialog-backdrop\"\n {...props}\n />\n );\n}\n\nexport function CommandDialogViewport({\n className,\n ...props\n}: CommandDialogPrimitive.Viewport.Props): React.ReactElement {\n return (\n <CommandDialogPrimitive.Viewport\n className={cn(\n \"fixed inset-0 z-50 flex flex-col items-center px-4 py-[max(--spacing(4),4vh)] sm:py-[10vh]\",\n className,\n )}\n data-slot=\"command-dialog-viewport\"\n {...props}\n />\n );\n}\n\nexport function CommandDialogPopup({\n className,\n children,\n container,\n ...props\n}: CommandDialogPrimitive.Popup.Props & {\n container?: HTMLElement | null;\n}): React.ReactElement {\n return (\n <CommandDialogPortal container={container}>\n <CommandDialogBackdrop />\n <CommandDialogViewport>\n <CommandDialogPrimitive.Popup\n className={cn(\n \"relative row-start-2 flex max-h-105 min-h-0 w-full min-w-0 max-w-xl -translate-y-[calc(1.25rem*var(--nested-dialogs))] scale-[calc(1-0.1*var(--nested-dialogs))] flex-col rounded-2xl border bg-popover not-dark:bg-clip-padding text-popover-foreground opacity-[calc(1-0.1*var(--nested-dialogs))] shadow-lg/5 outline-none transition-[scale,opacity,translate] duration-200 ease-in-out will-change-transform before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-2xl)-1px)] before:bg-muted/72 before:shadow-[0_1px_--theme(--color-black/4%)] data-nested:data-ending-style:translate-y-8 data-nested:data-starting-style:translate-y-8 data-nested-dialog-open:origin-top data-ending-style:scale-98 data-starting-style:scale-98 data-ending-style:opacity-0 data-starting-style:opacity-0 **:data-[slot=scroll-area-viewport]:data-has-overflow-y:pe-1 dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n )}\n data-slot=\"command-dialog-popup\"\n {...props}\n >\n {children}\n </CommandDialogPrimitive.Popup>\n </CommandDialogViewport>\n </CommandDialogPortal>\n );\n}\n\nexport function Command({\n autoHighlight = \"always\",\n keepHighlight = true,\n ...props\n}: React.ComponentProps<typeof Autocomplete>): React.ReactElement {\n return (\n <Autocomplete\n autoHighlight={autoHighlight}\n inline\n keepHighlight={keepHighlight}\n open\n {...props}\n />\n );\n}\n\nexport function CommandInput({\n className,\n placeholder = undefined,\n ...props\n}: React.ComponentProps<typeof AutocompleteInput>): React.ReactElement {\n return (\n <div className=\"px-2.5 py-1.5\">\n <AutocompleteInput\n autoFocus\n className={cn(\n \"border-transparent! bg-transparent! shadow-none before:hidden has-focus-visible:ring-0\",\n className,\n )}\n placeholder={placeholder}\n size=\"lg\"\n startAddon={<SearchIcon />}\n {...props}\n />\n </div>\n );\n}\n\nexport function CommandList({\n className,\n ...props\n}: Omit<React.ComponentProps<typeof AutocompleteList>, 'children'> & {\n children?: React.ReactNode | ((item: any, index: number) => React.ReactNode);\n}): React.ReactElement {\n return (\n <AutocompleteList\n className={cn(\"not-empty:scroll-py-2 not-empty:p-2\", className)}\n data-slot=\"command-list\"\n {...props}\n />\n );\n}\n\nexport function CommandEmpty({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompleteEmpty>): React.ReactElement {\n return (\n <AutocompleteEmpty\n className={cn(\"not-empty:py-6\", className)}\n data-slot=\"command-empty\"\n {...props}\n />\n );\n}\n\nexport function CommandPanel({\n className,\n ...props\n}: React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(\n \"relative -mx-px not-has-[+[data-slot=command-footer]]:-mb-px min-h-0 rounded-t-xl not-has-[+[data-slot=command-footer]]:rounded-b-2xl border border-b-0 bg-popover bg-clip-padding shadow-xs/5 [clip-path:inset(0_1px)] not-has-[+[data-slot=command-footer]]:[clip-path:inset(0_1px_1px_1px_round_0_0_calc(var(--radius-2xl)-1px)_calc(var(--radius-2xl)-1px))] before:pointer-events-none before:absolute before:inset-0 before:rounded-t-[calc(var(--radius-xl)-1px)] **:data-[slot=scroll-area-scrollbar]:mt-2\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompleteGroup> & {\n items?: readonly any[];\n}): React.ReactElement {\n return (\n <AutocompleteGroup\n className={className}\n data-slot=\"command-group\"\n {...props}\n />\n );\n}\n\nexport function CommandGroupLabel({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompleteGroupLabel>): React.ReactElement {\n return (\n <AutocompleteGroupLabel\n className={className}\n data-slot=\"command-group-label\"\n {...props}\n />\n );\n}\n\nexport function CommandCollection({\n ...props\n}: React.ComponentProps<typeof AutocompleteCollection> & {\n children?: React.ReactNode | ((item: any, index: number) => React.ReactNode);\n}): React.ReactElement {\n return <AutocompleteCollection data-slot=\"command-collection\" {...props} />;\n}\n\nexport function CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompleteItem>): React.ReactElement {\n return (\n <AutocompleteItem\n className={cn(\"gap-2 py-1.5\", className)}\n data-slot=\"command-item\"\n {...props}\n />\n );\n}\n\nexport function CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompleteSeparator>): React.ReactElement {\n return (\n <AutocompleteSeparator\n className={cn(\"my-2\", className)}\n data-slot=\"command-separator\"\n {...props}\n />\n );\n}\n\nexport function CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"kbd\">): React.ReactElement {\n return (\n <kbd\n className={cn(\n \"ms-auto font-medium font-sans text-muted-foreground/72 text-xs tracking-widest\",\n className,\n )}\n data-slot=\"command-shortcut\"\n {...props}\n />\n );\n}\n\nexport function CommandFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(\n \"flex items-center justify-between gap-2 rounded-b-[calc(var(--radius-2xl)-1px)] border-t px-5 py-3 text-muted-foreground text-xs\",\n className,\n )}\n data-slot=\"command-footer\"\n {...props}\n />\n );\n}\n\nexport { CommandDialogPrimitive };\n","\"use client\";\n\nimport { Autocomplete as AutocompletePrimitive } from \"@base-ui/react/autocomplete\";\nimport { ChevronsUpDownIcon, XIcon } from \"lucide-react\";\nimport type React from \"react\";\nimport { cn } from \"../utils\";\nimport { Input } from \"./input\";\nimport { ScrollArea } from \"./scroll-area\";\n\nexport const Autocomplete: typeof AutocompletePrimitive.Root =\n AutocompletePrimitive.Root;\n\nexport function AutocompleteInput({\n className,\n showTrigger = false,\n showClear = false,\n startAddon,\n size,\n triggerProps,\n clearProps,\n ...props\n}: Omit<AutocompletePrimitive.Input.Props, \"size\"> & {\n showTrigger?: boolean;\n showClear?: boolean;\n startAddon?: React.ReactNode;\n size?: \"sm\" | \"default\" | \"lg\" | number;\n ref?: React.Ref<HTMLInputElement>;\n triggerProps?: AutocompletePrimitive.Trigger.Props;\n clearProps?: AutocompletePrimitive.Clear.Props;\n}): React.ReactElement {\n const sizeValue = (size ?? \"default\") as \"sm\" | \"default\" | \"lg\" | number;\n\n return (\n <AutocompletePrimitive.InputGroup\n className=\"relative not-has-[>*.w-full]:w-fit w-full text-foreground has-disabled:opacity-64\"\n data-slot=\"autocomplete-input-group\"\n >\n {startAddon && (\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-y-0 start-px z-10 flex items-center ps-[calc(--spacing(3)-1px)] opacity-80 has-[+[data-size=sm]]:ps-[calc(--spacing(2.5)-1px)] [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:-mx-0.5\"\n data-slot=\"autocomplete-start-addon\"\n >\n {startAddon}\n </div>\n )}\n <AutocompletePrimitive.Input\n className={cn(\n startAddon &&\n \"data-[size=sm]:*:data-[slot=autocomplete-input]:ps-[calc(--spacing(7.5)-1px)] *:data-[slot=autocomplete-input]:ps-[calc(--spacing(8.5)-1px)] sm:data-[size=sm]:*:data-[slot=autocomplete-input]:ps-[calc(--spacing(7)-1px)] sm:*:data-[slot=autocomplete-input]:ps-[calc(--spacing(8)-1px)]\",\n sizeValue === \"sm\"\n ? \"has-[+[data-slot=autocomplete-trigger],+[data-slot=autocomplete-clear]]:*:data-[slot=autocomplete-input]:pe-6.5\"\n : \"has-[+[data-slot=autocomplete-trigger],+[data-slot=autocomplete-clear]]:*:data-[slot=autocomplete-input]:pe-7\",\n className,\n )}\n data-slot=\"autocomplete-input\"\n render={<Input nativeInput size={sizeValue} />}\n {...props}\n />\n {showTrigger && (\n <AutocompleteTrigger\n className={cn(\n \"absolute top-1/2 inline-flex size-8 shrink-0 -translate-y-1/2 cursor-pointer items-center justify-center rounded-md border border-transparent opacity-80 outline-none transition-colors pointer-coarse:after:absolute pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 hover:opacity-100 has-[+[data-slot=autocomplete-clear]]:hidden sm:size-7 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n sizeValue === \"sm\" ? \"end-0\" : \"end-0.5\",\n )}\n {...triggerProps}\n >\n <AutocompletePrimitive.Icon data-slot=\"autocomplete-icon\">\n <ChevronsUpDownIcon />\n </AutocompletePrimitive.Icon>\n </AutocompleteTrigger>\n )}\n {showClear && (\n <AutocompleteClear\n className={cn(\n \"absolute top-1/2 inline-flex size-8 shrink-0 -translate-y-1/2 cursor-pointer items-center justify-center rounded-md border border-transparent opacity-80 outline-none transition-colors pointer-coarse:after:absolute pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 hover:opacity-100 has-[+[data-slot=autocomplete-clear]]:hidden sm:size-7 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n sizeValue === \"sm\" ? \"end-0\" : \"end-0.5\",\n )}\n {...clearProps}\n >\n <XIcon />\n </AutocompleteClear>\n )}\n </AutocompletePrimitive.InputGroup>\n );\n}\n\nexport function AutocompletePopup({\n className,\n children,\n side = \"bottom\",\n sideOffset = 4,\n alignOffset,\n align = \"start\",\n anchor,\n ...props\n}: AutocompletePrimitive.Popup.Props & {\n align?: AutocompletePrimitive.Positioner.Props[\"align\"];\n sideOffset?: AutocompletePrimitive.Positioner.Props[\"sideOffset\"];\n alignOffset?: AutocompletePrimitive.Positioner.Props[\"alignOffset\"];\n side?: AutocompletePrimitive.Positioner.Props[\"side\"];\n anchor?: AutocompletePrimitive.Positioner.Props[\"anchor\"];\n}): React.ReactElement {\n return (\n <AutocompletePrimitive.Portal>\n <AutocompletePrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n anchor={anchor}\n className=\"z-50 select-none\"\n data-slot=\"autocomplete-positioner\"\n side={side}\n sideOffset={sideOffset}\n >\n <span\n className={cn(\n \"relative flex max-h-full min-w-(--anchor-width) max-w-(--available-width) origin-(--transform-origin) rounded-lg border bg-popover not-dark:bg-clip-padding shadow-lg/5 transition-[scale,opacity] before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n )}\n >\n <AutocompletePrimitive.Popup\n className=\"flex max-h-[min(var(--available-height),23rem)] flex-1 flex-col text-foreground\"\n data-slot=\"autocomplete-popup\"\n {...props}\n >\n {children}\n </AutocompletePrimitive.Popup>\n </span>\n </AutocompletePrimitive.Positioner>\n </AutocompletePrimitive.Portal>\n );\n}\n\nexport function AutocompleteItem({\n className,\n children,\n ...props\n}: AutocompletePrimitive.Item.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Item\n className={cn(\n \"flex min-h-8 cursor-default select-none items-center rounded-sm px-2 py-1 text-base outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm\",\n className,\n )}\n data-slot=\"autocomplete-item\"\n {...props}\n >\n {children}\n </AutocompletePrimitive.Item>\n );\n}\n\nexport function AutocompleteSeparator({\n className,\n ...props\n}: AutocompletePrimitive.Separator.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Separator\n className={cn(\"mx-2 my-1 h-px bg-border last:hidden\", className)}\n data-slot=\"autocomplete-separator\"\n {...props}\n />\n );\n}\n\nexport function AutocompleteGroup({\n className,\n ...props\n}: AutocompletePrimitive.Group.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Group\n className={cn(\"[[role=group]+&]:mt-1.5\", className)}\n data-slot=\"autocomplete-group\"\n {...props}\n />\n );\n}\n\nexport function AutocompleteGroupLabel({\n className,\n ...props\n}: AutocompletePrimitive.GroupLabel.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.GroupLabel\n className={cn(\n \"px-2 py-1.5 font-medium text-muted-foreground text-xs\",\n className,\n )}\n data-slot=\"autocomplete-group-label\"\n {...props}\n />\n );\n}\n\nexport function AutocompleteEmpty({\n className,\n ...props\n}: AutocompletePrimitive.Empty.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Empty\n className={cn(\n \"not-empty:p-2 text-center text-base text-muted-foreground sm:text-sm\",\n className,\n )}\n data-slot=\"autocomplete-empty\"\n {...props}\n />\n );\n}\n\nexport function AutocompleteRow({\n className,\n ...props\n}: AutocompletePrimitive.Row.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Row\n className={className}\n data-slot=\"autocomplete-row\"\n {...props}\n />\n );\n}\n\nexport function AutocompleteValue({\n ...props\n}: AutocompletePrimitive.Value.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Value data-slot=\"autocomplete-value\" {...props} />\n );\n}\n\nexport function AutocompleteList({\n className,\n ...props\n}: AutocompletePrimitive.List.Props): React.ReactElement {\n return (\n <ScrollArea scrollbarGutter scrollFade>\n <AutocompletePrimitive.List\n className={cn(\n \"not-empty:scroll-py-1 not-empty:p-1 in-data-has-overflow-y:pe-3\",\n className,\n )}\n data-slot=\"autocomplete-list\"\n {...props}\n />\n </ScrollArea>\n );\n}\n\nexport function AutocompleteClear({\n className,\n ...props\n}: AutocompletePrimitive.Clear.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Clear\n className={cn(\n \"absolute end-0.5 top-1/2 inline-flex size-8 shrink-0 -translate-y-1/2 cursor-pointer items-center justify-center rounded-md border border-transparent opacity-80 outline-none transition-[color,background-color,box-shadow,opacity] pointer-coarse:after:absolute pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 hover:opacity-100 sm:size-7 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n data-slot=\"autocomplete-clear\"\n {...props}\n >\n <XIcon />\n </AutocompletePrimitive.Clear>\n );\n}\n\nexport function AutocompleteStatus({\n className,\n ...props\n}: AutocompletePrimitive.Status.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Status\n className={cn(\n \"px-3 py-2 font-medium text-muted-foreground text-xs empty:m-0 empty:p-0\",\n className,\n )}\n data-slot=\"autocomplete-status\"\n {...props}\n />\n );\n}\n\nexport function AutocompleteCollection({\n ...props\n}: AutocompletePrimitive.Collection.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Collection\n data-slot=\"autocomplete-collection\"\n {...props}\n />\n );\n}\n\nexport function AutocompleteTrigger({\n className,\n children,\n ...props\n}: AutocompletePrimitive.Trigger.Props): React.ReactElement {\n return (\n <AutocompletePrimitive.Trigger\n className={className}\n data-slot=\"autocomplete-trigger\"\n {...props}\n >\n {children}\n </AutocompletePrimitive.Trigger>\n );\n}\n\nexport const useAutocompleteFilter: typeof AutocompletePrimitive.useFilter =\n AutocompletePrimitive.useFilter;\n\nexport { AutocompletePrimitive };\n","\"use client\";\n\nimport { Input as InputPrimitive } from \"@base-ui/react/input\";\nimport type * as React from \"react\";\nimport { cn } from \"../utils\";\n\nexport type InputProps = Omit<\n InputPrimitive.Props & React.RefAttributes<HTMLInputElement>,\n \"size\"\n> & {\n size?: \"sm\" | \"default\" | \"lg\" | number;\n unstyled?: boolean;\n nativeInput?: boolean;\n};\n\nexport function Input({\n className,\n size = \"default\",\n unstyled = false,\n nativeInput = false,\n ...props\n}: InputProps): React.ReactElement {\n const inputClassName = cn(\n \"h-8.5 w-full min-w-0 rounded-[inherit] px-[calc(--spacing(3)-1px)] leading-8.5 outline-none [transition:background-color_5000000s_ease-in-out_0s] placeholder:text-muted-foreground/72 sm:h-7.5 sm:leading-7.5\",\n size === \"sm\" &&\n \"h-7.5 px-[calc(--spacing(2.5)-1px)] leading-7.5 sm:h-6.5 sm:leading-6.5\",\n size === \"lg\" && \"h-9.5 leading-9.5 sm:h-8.5 sm:leading-8.5\",\n props.type === \"search\" &&\n \"[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none [&::-webkit-search-results-button]:appearance-none [&::-webkit-search-results-decoration]:appearance-none\",\n props.type === \"file\" &&\n \"text-muted-foreground file:me-3 file:bg-transparent file:font-medium file:text-foreground file:text-sm\",\n );\n\n return (\n <span\n className={\n cn(\n !unstyled &&\n \"relative inline-flex w-full rounded-lg border border-input bg-background not-dark:bg-clip-padding text-base text-foreground shadow-xs/5 ring-ring/24 transition-shadow before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] not-has-disabled:not-has-focus-visible:not-has-aria-invalid:before:shadow-[0_1px_--theme(--color-black/4%)] has-focus-visible:has-aria-invalid:border-destructive/64 has-focus-visible:has-aria-invalid:ring-destructive/16 has-aria-invalid:border-destructive/36 has-focus-visible:border-ring has-autofill:bg-foreground/4 has-disabled:opacity-64 has-[:disabled,:focus-visible,[aria-invalid]]:shadow-none has-focus-visible:ring-[3px] sm:text-sm dark:bg-input/32 dark:has-autofill:bg-foreground/8 dark:has-aria-invalid:ring-destructive/24 dark:not-has-disabled:not-has-focus-visible:not-has-aria-invalid:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n ) || undefined\n }\n data-size={size}\n data-slot=\"input-control\"\n >\n {nativeInput ? (\n <input\n className={inputClassName}\n data-slot=\"input\"\n size={typeof size === \"number\" ? size : undefined}\n {...props}\n />\n ) : (\n <InputPrimitive\n className={inputClassName}\n data-slot=\"input\"\n size={typeof size === \"number\" ? size : undefined}\n {...props}\n />\n )}\n </span>\n );\n}\n\nexport { InputPrimitive };\n","\"use client\";\n\nimport { ScrollArea as ScrollAreaPrimitive } from \"@base-ui/react/scroll-area\";\nimport type React from \"react\";\nimport { cn } from \"../utils\";\n\nexport function ScrollArea({\n className,\n children,\n scrollFade = false,\n scrollbarGutter = false,\n ...props\n}: ScrollAreaPrimitive.Root.Props & {\n scrollFade?: boolean;\n scrollbarGutter?: boolean;\n}): React.ReactElement {\n return (\n <ScrollAreaPrimitive.Root\n className={cn(\"size-full min-h-0\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n className={cn(\n \"h-full rounded-[inherit] outline-none transition-shadows focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background data-has-overflow-y:overscroll-y-contain data-has-overflow-x:overscroll-x-contain\",\n scrollFade &&\n \"mask-t-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-y-start)))] mask-b-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-y-end)))] mask-l-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-x-start)))] mask-r-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-x-end)))] [--fade-size:1.5rem]\",\n scrollbarGutter &&\n \"data-has-overflow-y:pe-2.5 data-has-overflow-x:pb-2.5\",\n )}\n data-slot=\"scroll-area-viewport\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar orientation=\"vertical\" />\n <ScrollBar orientation=\"horizontal\" />\n <ScrollAreaPrimitive.Corner data-slot=\"scroll-area-corner\" />\n </ScrollAreaPrimitive.Root>\n );\n}\n\nexport function ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: ScrollAreaPrimitive.Scrollbar.Props): React.ReactElement {\n return (\n <ScrollAreaPrimitive.Scrollbar\n className={cn(\n \"m-1 flex opacity-0 transition-opacity delay-300 data-[orientation=horizontal]:h-1.5 data-[orientation=vertical]:w-1.5 data-[orientation=horizontal]:flex-col data-hovering:opacity-100 data-scrolling:opacity-100 data-hovering:delay-0 data-scrolling:delay-0 data-hovering:duration-100 data-scrolling:duration-100\",\n className,\n )}\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb\n className=\"relative flex-1 rounded-full bg-foreground/20\"\n data-slot=\"scroll-area-thumb\"\n />\n </ScrollAreaPrimitive.Scrollbar>\n );\n}\n\nexport { ScrollAreaPrimitive };\n","import { useState, useMemo } from 'react';\nimport { CopyIcon, CheckIcon } from 'lucide-react';\nimport type { ModalData } from '../modal/store';\nimport { formatPageDir } from '../modal/store';\nimport {\n Dialog,\n DialogPopup,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogPanel,\n} from '../coss/dialog';\nimport { Button } from '../coss/button';\nimport {\n InputGroup,\n InputGroupInput,\n InputGroupAddon,\n} from '../coss/input-group';\nimport { MarkdownContent } from '../shared/MarkdownContent';\nimport { FeatureChips, ChipSection, EntityIcon } from '../shared/chips';\n\ninterface PageDialogProps {\n open: boolean;\n onClose: () => void;\n data: ModalData;\n initialPageDir?: string | null;\n onSelectComponent: (id: string) => void;\n onOpenFeature: (dir: string) => void;\n container?: HTMLElement | null;\n}\n\nfunction getBestMatchPage(data: ModalData) {\n if (data.pages.length === 0) return null;\n\n let best = data.pages[0];\n let bestCount = -1;\n for (const page of data.pages) {\n const count = page.componentIds.filter((id) =>\n data.presentIds.has(id),\n ).length;\n if (count > bestCount) {\n bestCount = count;\n best = page;\n }\n }\n return best;\n}\n\nexport function PageDialog({\n open,\n onClose,\n data,\n initialPageDir,\n onSelectComponent,\n onOpenFeature,\n container,\n}: PageDialogProps) {\n const page = useMemo(() => {\n if (initialPageDir) {\n return data.pages.find((p) => p.dir === initialPageDir) ?? getBestMatchPage(data);\n }\n return getBestMatchPage(data);\n }, [data, initialPageDir]);\n\n const [copied, setCopied] = useState(false);\n\n if (!page) return null;\n\n const pageDir = formatPageDir(page.dir);\n const pageComponentSet = new Set(page.componentIds);\n const relatedFeatures = data.features.filter((f) =>\n f.componentIds.some((cid) => pageComponentSet.has(cid)),\n );\n const pageBlockIds = page.componentIds.filter(\n (id) => data.components[id]?.[0]?.kind === 'block',\n );\n const pageComponentIds = page.componentIds.filter(\n (id) => data.components[id]?.[0]?.kind !== 'block',\n );\n\n const description = page.description;\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen) onClose();\n };\n\n const handleCopyPath = () => {\n navigator.clipboard.writeText(pageDir).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }).catch(() => {});\n };\n\n return (\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogPopup container={container}>\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <EntityIcon kind=\"page\" />\n {page.title}\n </DialogTitle>\n {description && (\n <DialogDescription>{description}</DialogDescription>\n )}\n </DialogHeader>\n\n <DialogPanel>\n <InputGroup>\n <InputGroupInput\n readOnly\n value={pageDir}\n className=\"font-mono text-xs\"\n size=\"sm\"\n />\n <InputGroupAddon align=\"inline-end\">\n <Button\n size=\"icon\"\n variant=\"ghost\"\n aria-label=\"Copy page path\"\n onClick={handleCopyPath}\n >\n {copied ? <CheckIcon /> : <CopyIcon />}\n </Button>\n </InputGroupAddon>\n </InputGroup>\n\n {page.content.trim() && (\n <div className=\"mt-4\">\n <MarkdownContent content={page.content} skipDescription />\n </div>\n )}\n\n {relatedFeatures.length > 0 && (\n <FeatureChips\n features={relatedFeatures}\n onFeatureClick={onOpenFeature}\n />\n )}\n\n {pageBlockIds.length > 0 && (\n <ChipSection\n label=\"Blocks\"\n ids={pageBlockIds}\n variant=\"blocks\"\n presentIds={data.presentIds}\n onComponentClick={onSelectComponent}\n />\n )}\n\n {pageComponentIds.length > 0 && (\n <ChipSection\n label=\"Components\"\n ids={pageComponentIds}\n variant=\"components\"\n presentIds={data.presentIds}\n onComponentClick={onSelectComponent}\n />\n )}\n </DialogPanel>\n </DialogPopup>\n </Dialog>\n );\n}\n","import type {\n UidexMap,\n UidexPage,\n UidexFeature,\n PrimitiveEntry,\n IngestConfig,\n FeedbackReport,\n FeedbackResult,\n ConsoleLogEntry,\n NetworkErrorEntry,\n} from '../../core/types';\n\nexport type ModalPage = UidexPage & { title: string; description?: string };\nexport type ModalFeature = UidexFeature & { title: string };\n\nexport interface ModalData {\n pages: ModalPage[];\n features: ModalFeature[];\n components: UidexMap;\n presentIds: Set<string>;\n blockContainment: Map<string, string[]>;\n uiComponents: Map<string, PrimitiveEntry>;\n}\n\nexport interface ModalOptions {\n onComponentNavigate?: (id: string) => void;\n onLocate?: (id: string) => void;\n elementGetter?: (id: string) => Element | null;\n ingest?: IngestConfig;\n onSubmit?: (report: FeedbackReport, result: FeedbackResult) => void;\n sessionId?: string;\n getConsoleLogs?: () => ConsoleLogEntry[];\n getNetworkErrors?: () => NetworkErrorEntry[];\n}\n\nexport function formatPageDir(dir: string): string {\n const parts = dir.split('/');\n const route = parts.slice(1).join('/');\n return '/' + route;\n}\n","\"use client\";\n\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\";\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { XIcon } from \"lucide-react\";\nimport type React from \"react\";\nimport { cn } from \"../utils\";\nimport { Button } from \"./button\";\nimport { ScrollArea } from \"./scroll-area\";\n\nexport const DialogCreateHandle: typeof DialogPrimitive.createHandle =\n DialogPrimitive.createHandle;\n\nexport const Dialog: typeof DialogPrimitive.Root = DialogPrimitive.Root;\n\nexport const DialogPortal: typeof DialogPrimitive.Portal =\n DialogPrimitive.Portal;\n\nexport function DialogTrigger(\n props: DialogPrimitive.Trigger.Props,\n): React.ReactElement {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nexport function DialogClose(\n props: DialogPrimitive.Close.Props,\n): React.ReactElement {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nexport function DialogBackdrop({\n className,\n ...props\n}: DialogPrimitive.Backdrop.Props): React.ReactElement {\n return (\n <DialogPrimitive.Backdrop\n className={cn(\n \"fixed inset-0 z-50 bg-black/32 backdrop-blur-sm transition-all duration-200 data-ending-style:opacity-0 data-starting-style:opacity-0\",\n className,\n )}\n data-slot=\"dialog-backdrop\"\n {...props}\n />\n );\n}\n\nexport function DialogViewport({\n className,\n ...props\n}: DialogPrimitive.Viewport.Props): React.ReactElement {\n return (\n <DialogPrimitive.Viewport\n className={cn(\n \"fixed inset-0 z-50 grid grid-rows-[1fr_auto_3fr] justify-items-center p-4\",\n className,\n )}\n data-slot=\"dialog-viewport\"\n {...props}\n />\n );\n}\n\nexport function DialogPopup({\n className,\n children,\n showCloseButton = true,\n bottomStickOnMobile = true,\n closeProps,\n container,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean;\n bottomStickOnMobile?: boolean;\n closeProps?: DialogPrimitive.Close.Props;\n container?: HTMLElement | null;\n}): React.ReactElement {\n return (\n <DialogPortal container={container}>\n <DialogBackdrop />\n <DialogViewport\n className={cn(\n bottomStickOnMobile &&\n \"max-sm:grid-rows-[1fr_auto] max-sm:p-0 max-sm:pt-12\",\n )}\n >\n <DialogPrimitive.Popup\n className={cn(\n \"relative row-start-2 flex max-h-full min-h-0 w-full min-w-0 max-w-lg origin-center flex-col rounded-2xl border bg-popover not-dark:bg-clip-padding text-popover-foreground opacity-[calc(1-var(--nested-dialogs))] shadow-lg/5 outline-none transition-[scale,opacity,translate] duration-200 ease-in-out will-change-transform before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-2xl)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] data-ending-style:opacity-0 data-starting-style:opacity-0 sm:scale-[calc(1-0.1*var(--nested-dialogs))] sm:data-ending-style:scale-98 sm:data-starting-style:scale-98 dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n bottomStickOnMobile &&\n \"max-sm:max-w-none max-sm:origin-bottom max-sm:rounded-none max-sm:border-x-0 max-sm:border-t max-sm:border-b-0 max-sm:data-ending-style:translate-y-4 max-sm:data-starting-style:translate-y-4 max-sm:before:hidden max-sm:before:rounded-none\",\n className,\n )}\n data-slot=\"dialog-popup\"\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n aria-label=\"Close\"\n className=\"absolute end-2 top-2\"\n render={<Button size=\"icon\" variant=\"ghost\" />}\n {...closeProps}\n >\n <XIcon />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogViewport>\n </DialogPortal>\n );\n}\n\nexport function DialogHeader({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">): React.ReactElement {\n const defaultProps = {\n className: cn(\n \"flex flex-col gap-2 p-6 in-[[data-slot=dialog-popup]:has([data-slot=dialog-panel])]:pb-3 max-sm:pb-4\",\n className,\n ),\n \"data-slot\": \"dialog-header\",\n };\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n });\n}\n\nexport function DialogFooter({\n className,\n variant = \"default\",\n render,\n ...props\n}: useRender.ComponentProps<\"div\"> & {\n variant?: \"default\" | \"bare\";\n}): React.ReactElement {\n const defaultProps = {\n className: cn(\n \"flex flex-col-reverse gap-2 px-6 sm:flex-row sm:justify-end sm:rounded-b-[calc(var(--radius-2xl)-1px)]\",\n variant === \"default\" && \"border-t bg-muted/72 py-4\",\n variant === \"bare\" &&\n \"in-[[data-slot=dialog-popup]:has([data-slot=dialog-panel])]:pt-3 pt-4 pb-6\",\n className,\n ),\n \"data-slot\": \"dialog-footer\",\n };\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n });\n}\n\nexport function DialogTitle({\n className,\n ...props\n}: DialogPrimitive.Title.Props): React.ReactElement {\n return (\n <DialogPrimitive.Title\n className={cn(\n \"font-heading font-semibold text-xl leading-none\",\n className,\n )}\n data-slot=\"dialog-title\"\n {...props}\n />\n );\n}\n\nexport function DialogDescription({\n className,\n ...props\n}: DialogPrimitive.Description.Props): React.ReactElement {\n return (\n <DialogPrimitive.Description\n className={cn(\"text-muted-foreground text-sm\", className)}\n data-slot=\"dialog-description\"\n {...props}\n />\n );\n}\n\nexport function DialogPanel({\n className,\n scrollFade = true,\n render,\n ...props\n}: useRender.ComponentProps<\"div\"> & {\n scrollFade?: boolean;\n}): React.ReactElement {\n const defaultProps = {\n className: cn(\n \"p-6 in-[[data-slot=dialog-popup]:has([data-slot=dialog-header])]:pt-1 in-[[data-slot=dialog-popup]:has([data-slot=dialog-footer]:not(.border-t))]:pb-1\",\n className,\n ),\n \"data-slot\": \"dialog-panel\",\n };\n\n return (\n <ScrollArea scrollFade={scrollFade}>\n {useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(defaultProps, props),\n render,\n })}\n </ScrollArea>\n );\n}\n\nexport {\n DialogPrimitive,\n DialogBackdrop as DialogOverlay,\n DialogPopup as DialogContent,\n};\n","\"use client\";\n\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { Spinner } from \"./spinner\";\n\nexport const buttonVariants = cva(\n \"relative inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-lg border font-medium text-base outline-none transition-shadow before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-64 data-loading:select-none data-loading:text-transparent sm:text-sm [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:-mx-0.5 [&_svg]:shrink-0\",\n {\n defaultVariants: {\n size: \"default\",\n variant: \"default\",\n },\n variants: {\n size: {\n default: \"h-9 px-[calc(--spacing(3)-1px)] sm:h-8\",\n icon: \"size-9 sm:size-8\",\n \"icon-lg\": \"size-10 sm:size-9\",\n \"icon-sm\": \"size-8 sm:size-7\",\n \"icon-xl\":\n \"size-11 sm:size-10 [&_svg:not([class*='size-'])]:size-5 sm:[&_svg:not([class*='size-'])]:size-4.5\",\n \"icon-xs\":\n \"size-7 rounded-md before:rounded-[calc(var(--radius-md)-1px)] sm:size-6 not-in-data-[slot=input-group]:[&_svg:not([class*='size-'])]:size-4 sm:not-in-data-[slot=input-group]:[&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-10 px-[calc(--spacing(3.5)-1px)] sm:h-9\",\n sm: \"h-8 gap-1.5 px-[calc(--spacing(2.5)-1px)] sm:h-7\",\n xl: \"h-11 px-[calc(--spacing(4)-1px)] text-lg sm:h-10 sm:text-base [&_svg:not([class*='size-'])]:size-5 sm:[&_svg:not([class*='size-'])]:size-4.5\",\n xs: \"h-7 gap-1 rounded-md px-[calc(--spacing(2)-1px)] text-sm before:rounded-[calc(var(--radius-md)-1px)] sm:h-6 sm:text-xs [&_svg:not([class*='size-'])]:size-4 sm:[&_svg:not([class*='size-'])]:size-3.5\",\n },\n variant: {\n default:\n \"not-disabled:inset-shadow-[0_1px_--theme(--color-white/16%)] border-primary bg-primary text-primary-foreground shadow-primary/24 shadow-xs hover:bg-primary/90 data-pressed:bg-primary/90 *:data-[slot=button-loading-indicator]:text-primary-foreground [:active,[data-pressed]]:inset-shadow-[0_1px_--theme(--color-black/8%)] [:disabled,:active,[data-pressed]]:shadow-none\",\n destructive:\n \"not-disabled:inset-shadow-[0_1px_--theme(--color-white/16%)] border-destructive bg-destructive text-white shadow-destructive/24 shadow-xs hover:bg-destructive/90 data-pressed:bg-destructive/90 *:data-[slot=button-loading-indicator]:text-white [:active,[data-pressed]]:inset-shadow-[0_1px_--theme(--color-black/8%)] [:disabled,:active,[data-pressed]]:shadow-none\",\n \"destructive-outline\":\n \"border-input bg-popover not-dark:bg-clip-padding text-destructive-foreground shadow-xs/5 not-disabled:not-active:not-data-pressed:before:shadow-[0_1px_--theme(--color-black/4%)] hover:border-destructive/32 hover:bg-destructive/4 data-pressed:border-destructive/32 data-pressed:bg-destructive/4 *:data-[slot=button-loading-indicator]:text-foreground dark:bg-input/32 dark:not-disabled:before:shadow-[0_-1px_--theme(--color-white/2%)] dark:not-disabled:not-active:not-data-pressed:before:shadow-[0_-1px_--theme(--color-white/6%)] [:disabled,:active,[data-pressed]]:shadow-none\",\n ghost:\n \"border-transparent text-foreground hover:bg-accent data-pressed:bg-accent *:data-[slot=button-loading-indicator]:text-foreground\",\n link: \"border-transparent text-foreground underline-offset-4 hover:underline data-pressed:underline *:data-[slot=button-loading-indicator]:text-foreground\",\n outline:\n \"border-input bg-popover not-dark:bg-clip-padding text-foreground shadow-xs/5 not-disabled:not-active:not-data-pressed:before:shadow-[0_1px_--theme(--color-black/4%)] hover:bg-accent/50 data-pressed:bg-accent/50 *:data-[slot=button-loading-indicator]:text-foreground dark:bg-input/32 dark:data-pressed:bg-input/64 dark:hover:bg-input/64 dark:not-disabled:before:shadow-[0_-1px_--theme(--color-white/2%)] dark:not-disabled:not-active:not-data-pressed:before:shadow-[0_-1px_--theme(--color-white/6%)] [:disabled,:active,[data-pressed]]:shadow-none\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/90 data-pressed:bg-secondary/90 *:data-[slot=button-loading-indicator]:text-secondary-foreground [:active,[data-pressed]]:bg-secondary/80\",\n },\n },\n },\n);\n\nexport interface ButtonProps extends useRender.ComponentProps<\"button\"> {\n variant?: VariantProps<typeof buttonVariants>[\"variant\"];\n size?: VariantProps<typeof buttonVariants>[\"size\"];\n loading?: boolean;\n}\n\nexport function Button({\n className,\n variant,\n size,\n render,\n children,\n loading = false,\n disabled: disabledProp,\n ...props\n}: ButtonProps): React.ReactElement {\n const isDisabled: boolean = Boolean(loading || disabledProp);\n const typeValue: React.ButtonHTMLAttributes<HTMLButtonElement>[\"type\"] =\n render ? undefined : \"button\";\n\n const defaultProps = {\n children: (\n <>\n {children}\n {loading && (\n <Spinner\n className=\"pointer-events-none absolute\"\n data-slot=\"button-loading-indicator\"\n />\n )}\n </>\n ),\n className: cn(buttonVariants({ className, size, variant })),\n \"aria-disabled\": loading || undefined,\n \"data-loading\": loading ? \"\" : undefined,\n \"data-slot\": \"button\",\n disabled: isDisabled,\n type: typeValue,\n };\n\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(defaultProps, props),\n render,\n });\n}\n","import { Loader2Icon } from \"lucide-react\";\nimport type React from \"react\";\nimport { cn } from \"../utils\";\n\nexport function Spinner({\n className,\n ...props\n}: React.ComponentProps<typeof Loader2Icon>): React.ReactElement {\n return (\n <Loader2Icon\n aria-label=\"Loading\"\n className={cn(\"animate-spin\", className)}\n role=\"status\"\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { Input, type InputProps } from \"./input\";\nimport { Textarea, type TextareaProps } from \"./textarea\";\n\nconst inputGroupAddonVariants = cva(\n \"flex h-auto cursor-text select-none items-center justify-center gap-2 leading-none [&>kbd]:rounded-[calc(var(--radius)-5px)] in-[[data-slot=input-group]:has([data-slot=input-control],[data-slot=textarea-control])]:[&_svg:not([class*='size-'])]:size-4.5 sm:in-[[data-slot=input-group]:has([data-slot=input-control],[data-slot=textarea-control])]:[&_svg:not([class*='size-'])]:size-4 [&_svg]:-mx-0.5 not-has-[button]:**:[svg:not([class*='opacity-'])]:opacity-80\",\n {\n defaultVariants: {\n align: \"inline-start\",\n },\n variants: {\n align: {\n \"block-end\":\n \"order-last w-full justify-start px-[calc(--spacing(3)-1px)] pb-[calc(--spacing(3)-1px)] [.border-t]:pt-[calc(--spacing(3)-1px)] [[data-size=sm]+&]:px-[calc(--spacing(2.5)-1px)]\",\n \"block-start\":\n \"order-first w-full justify-start px-[calc(--spacing(3)-1px)] pt-[calc(--spacing(3)-1px)] [.border-b]:pb-[calc(--spacing(3)-1px)] [[data-size=sm]+&]:px-[calc(--spacing(2.5)-1px)]\",\n \"inline-end\":\n \"order-last pe-[calc(--spacing(3)-1px)] has-[>:last-child[data-slot=badge]]:-me-1.5 has-[>button]:-me-2 has-[>kbd:last-child]:me-[-0.35rem] [[data-size=sm]+&]:pe-[calc(--spacing(2.5)-1px)]\",\n \"inline-start\":\n \"order-first ps-[calc(--spacing(3)-1px)] has-[>:last-child[data-slot=badge]]:-ms-1.5 has-[>button]:-ms-2 has-[>kbd:last-child]:ms-[-0.35rem] [[data-size=sm]+&]:ps-[calc(--spacing(2.5)-1px)]\",\n },\n },\n },\n);\n\nexport function InputGroup({\n className,\n ...props\n}: React.ComponentProps<\"div\">): React.ReactElement {\n return (\n <div\n className={cn(\n \"relative inline-flex w-full min-w-0 items-center rounded-lg border border-input bg-background not-dark:bg-clip-padding text-base text-foreground shadow-xs/5 ring-ring/24 transition-shadow before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] not-has-[input:disabled,textarea:disabled]:not-has-[input:focus-visible,textarea:focus-visible]:not-has-[input[aria-invalid],textarea[aria-invalid]]:before:shadow-[0_1px_--theme(--color-black/4%)] has-[input:focus-visible,textarea:focus-visible]:has-[input[aria-invalid],textarea[aria-invalid]]:border-destructive/64 has-[input:focus-visible,textarea:focus-visible]:has-[input[aria-invalid],textarea[aria-invalid]]:ring-destructive/16 has-[textarea]:h-auto has-data-[align=block-end]:h-auto has-data-[align=block-start]:h-auto has-data-[align=block-end]:flex-col has-data-[align=block-start]:flex-col has-[input:focus-visible,textarea:focus-visible]:border-ring has-[input[aria-invalid],textarea[aria-invalid]]:border-destructive/36 has-autofill:bg-foreground/4 has-[input:disabled,textarea:disabled]:opacity-64 has-[input:disabled,textarea:disabled,input:focus-visible,textarea:focus-visible,input[aria-invalid],textarea[aria-invalid]]:shadow-none has-[input:focus-visible,textarea:focus-visible]:ring-[3px] sm:text-sm dark:bg-input/32 dark:has-autofill:bg-foreground/8 dark:has-[input[aria-invalid],textarea[aria-invalid]]:ring-destructive/24 dark:not-has-[input:disabled,textarea:disabled]:not-has-[input:focus-visible,textarea:focus-visible]:not-has-[input[aria-invalid],textarea[aria-invalid]]:before:shadow-[0_-1px_--theme(--color-white/6%)] has-data-[align=inline-start]:**:[[data-size=sm]_input]:ps-1.5 has-data-[align=inline-end]:**:[[data-size=sm]_input]:pe-1.5 *:[[data-slot=input-control],[data-slot=textarea-control]]:contents *:[[data-slot=input-control],[data-slot=textarea-control]]:before:hidden has-[[data-align=block-start],[data-align=block-end]]:**:[input]:h-auto has-data-[align=inline-start]:**:[input]:ps-2 has-data-[align=inline-end]:**:[input]:pe-2 has-data-[align=block-end]:**:[input]:pt-1.5 has-data-[align=block-start]:**:[input]:pb-1.5 **:[textarea]:min-h-20.5 **:[textarea]:resize-none **:[textarea]:py-[calc(--spacing(3)-1px)] **:[textarea]:max-sm:min-h-23.5 **:[textarea_button]:rounded-[calc(var(--radius-md)-1px)]\",\n className,\n )}\n data-slot=\"input-group\"\n role=\"group\"\n {...props}\n />\n );\n}\n\nexport function InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> &\n VariantProps<typeof inputGroupAddonVariants>): React.ReactElement {\n return (\n <div\n className={cn(inputGroupAddonVariants({ align }), className)}\n data-align={align}\n data-slot=\"input-group-addon\"\n onMouseDown={(e: React.MouseEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n const isInteractive = target.closest(\n \"button, a, input, select, textarea, [role='button'], [role='combobox'], [role='listbox'], [data-slot='select-trigger']\",\n );\n if (isInteractive) return;\n e.preventDefault();\n const parent = e.currentTarget.parentElement;\n const input = parent?.querySelector<\n HTMLInputElement | HTMLTextAreaElement\n >(\"input, textarea\");\n if (input && !parent?.querySelector(\"input:focus, textarea:focus\")) {\n input.focus();\n }\n }}\n {...props}\n />\n );\n}\n\nexport function InputGroupText({\n className,\n ...props\n}: React.ComponentProps<\"span\">): React.ReactElement {\n return (\n <span\n className={cn(\n \"line-clamp-1 flex items-center gap-2 whitespace-nowrap text-muted-foreground leading-none in-[[data-slot=input-group]:has([data-slot=input-control],[data-slot=textarea-control])]:[&_svg:not([class*='size-'])]:size-4.5 sm:in-[[data-slot=input-group]:has([data-slot=input-control],[data-slot=textarea-control])]:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:-mx-0.5\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function InputGroupInput({\n className,\n ...props\n}: InputProps): React.ReactElement {\n return <Input className={className} unstyled {...props} />;\n}\n\nexport function InputGroupTextarea({\n className,\n ...props\n}: TextareaProps): React.ReactElement {\n return <Textarea className={className} unstyled {...props} />;\n}\n","\"use client\";\n\nimport { Field as FieldPrimitive } from \"@base-ui/react/field\";\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport type * as React from \"react\";\nimport { cn } from \"../utils\";\n\nexport type TextareaProps = React.ComponentPropsWithoutRef<\"textarea\"> &\n React.RefAttributes<HTMLTextAreaElement> & {\n size?: \"sm\" | \"default\" | \"lg\" | number;\n unstyled?: boolean;\n };\n\nexport function Textarea({\n className,\n size = \"default\",\n unstyled = false,\n ref,\n ...props\n}: TextareaProps): React.ReactElement {\n return (\n <span\n className={\n cn(\n !unstyled &&\n \"relative inline-flex w-full rounded-lg border border-input bg-background not-dark:bg-clip-padding text-base text-foreground shadow-xs/5 ring-ring/24 transition-shadow before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] has-focus-visible:has-aria-invalid:border-destructive/64 has-focus-visible:has-aria-invalid:ring-destructive/16 has-aria-invalid:border-destructive/36 has-focus-visible:border-ring has-disabled:opacity-64 has-[:disabled,:focus-visible,[aria-invalid]]:shadow-none has-focus-visible:ring-[3px] not-has-disabled:has-not-focus-visible:not-has-aria-invalid:before:shadow-[0_1px_--theme(--color-black/4%)] sm:text-sm dark:bg-input/32 dark:has-aria-invalid:ring-destructive/24 dark:not-has-disabled:has-not-focus-visible:not-has-aria-invalid:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n className,\n ) || undefined\n }\n data-size={size}\n data-slot=\"textarea-control\"\n >\n <FieldPrimitive.Control\n ref={ref}\n value={props.value}\n defaultValue={props.defaultValue}\n disabled={props.disabled}\n id={props.id}\n name={props.name}\n render={(defaultProps: React.ComponentProps<\"textarea\">) => (\n <textarea\n className={cn(\n \"field-sizing-content min-h-17.5 w-full rounded-[inherit] px-[calc(--spacing(3)-1px)] py-[calc(--spacing(1.5)-1px)] outline-none max-sm:min-h-20.5\",\n size === \"sm\" &&\n \"min-h-16.5 px-[calc(--spacing(2.5)-1px)] py-[calc(--spacing(1)-1px)] max-sm:min-h-19.5\",\n size === \"lg\" &&\n \"min-h-18.5 py-[calc(--spacing(2)-1px)] max-sm:min-h-21.5\",\n )}\n data-slot=\"textarea\"\n {...mergeProps(defaultProps, props)}\n />\n )}\n />\n </span>\n );\n}\n\nexport { FieldPrimitive };\n","import { useState, useMemo } from 'react';\nimport { Checkbox } from '../coss/checkbox';\n\ninterface ParsedLine {\n type: 'heading' | 'checkbox' | 'bullet' | 'blockquote' | 'paragraph';\n text: string;\n level?: number;\n defaultChecked?: boolean;\n}\n\n/** Strip the leading blockquote (used as description) from content. */\nfunction stripLeadingBlockquote(content: string): string {\n const lines = content.split('\\n');\n let i = 0;\n // Skip blank lines at start\n while (i < lines.length && lines[i].trim() === '') i++;\n // Skip title heading if present\n if (i < lines.length && /^#\\s+/.test(lines[i])) i++;\n // Skip blank lines between title and blockquote\n while (i < lines.length && lines[i].trim() === '') i++;\n // Skip blockquote lines\n if (i < lines.length && (lines[i].startsWith('> ') || lines[i] === '>')) {\n while (i < lines.length && (lines[i].startsWith('> ') || lines[i] === '>')) i++;\n return lines.slice(i).join('\\n');\n }\n return content;\n}\n\nfunction parseLines(content: string, skipDescription: boolean): ParsedLine[] {\n const result: ParsedLine[] = [];\n const lines = (skipDescription ? stripLeadingBlockquote(content) : content).split('\\n');\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n const headingMatch = line.match(/^(#{1,4})\\s+(.+)/);\n if (headingMatch) {\n if (headingMatch[1].length === 1) continue;\n result.push({ type: 'heading', text: headingMatch[2], level: headingMatch[1].length });\n continue;\n }\n\n if (line.match(/^- \\[[ x]\\]/)) {\n result.push({\n type: 'checkbox',\n text: line.replace(/^- \\[[ x]\\]\\s*/, ''),\n defaultChecked: line.includes('[x]'),\n });\n continue;\n }\n\n if (line.startsWith('> ') || line === '>') {\n const parts: string[] = [];\n let j = i;\n while (j < lines.length && (lines[j].startsWith('> ') || lines[j] === '>')) {\n parts.push(lines[j] === '>' ? '' : lines[j].slice(2));\n j++;\n }\n result.push({ type: 'blockquote', text: parts.join(' ').trim() });\n i = j - 1;\n continue;\n }\n\n if (line.startsWith('- ')) {\n result.push({ type: 'bullet', text: line.slice(2) });\n continue;\n }\n\n if (line.trim()) {\n result.push({ type: 'paragraph', text: line });\n }\n }\n\n return result;\n}\n\nfunction CheckboxItem({ text, defaultChecked }: { text: string; defaultChecked: boolean }) {\n const [checked, setChecked] = useState(defaultChecked);\n return (\n <label className=\"flex items-center gap-2 py-0.5 cursor-pointer\">\n <Checkbox checked={checked} onCheckedChange={(v) => setChecked(v === true)} />\n <span className={checked ? 'text-sm text-muted-foreground line-through' : 'text-sm'}>\n {text}\n </span>\n </label>\n );\n}\n\nexport function MarkdownContent({ content, skipDescription }: { content: string; skipDescription?: boolean }) {\n const parsed = useMemo(() => parseLines(content, skipDescription ?? false), [content, skipDescription]);\n\n return (\n <div className=\"flex flex-col\">\n {parsed.map((line, i) => {\n switch (line.type) {\n case 'heading': {\n const Tag = `h${line.level}` as 'h2' | 'h3' | 'h4';\n const sizeClass =\n line.level === 2 ? 'text-lg font-semibold' :\n line.level === 3 ? 'text-base font-semibold' :\n 'text-sm font-semibold';\n return <Tag key={i} className={`${sizeClass} mt-4 mb-1`}>{line.text}</Tag>;\n }\n case 'checkbox':\n return <CheckboxItem key={i} text={line.text} defaultChecked={line.defaultChecked!} />;\n case 'blockquote':\n return (\n <blockquote key={i} className=\"border-l-2 border-border pl-3 py-0.5 text-sm italic text-muted-foreground\">\n {line.text}\n </blockquote>\n );\n case 'bullet':\n return (\n <div key={i} className=\"text-sm pl-4 py-0.5 before:content-['·'] before:absolute before:left-1.5 relative\">\n {line.text}\n </div>\n );\n case 'paragraph':\n return <p key={i} className=\"text-sm text-foreground py-0.5\">{line.text}</p>;\n }\n })}\n </div>\n );\n}\n","\"use client\";\n\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\";\nimport type React from \"react\";\nimport { cn } from \"../utils\";\n\nexport function Checkbox({\n className,\n ...props\n}: CheckboxPrimitive.Root.Props): React.ReactElement {\n return (\n <CheckboxPrimitive.Root\n className={cn(\n \"relative inline-flex size-4.5 shrink-0 items-center justify-center rounded-[.25rem] border border-input bg-background not-dark:bg-clip-padding shadow-xs/5 outline-none ring-ring transition-shadow before:pointer-events-none before:absolute before:inset-0 before:rounded-[3px] not-data-disabled:not-data-checked:not-aria-invalid:before:shadow-[0_1px_--theme(--color-black/4%)] focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-offset-background aria-invalid:border-destructive/36 focus-visible:aria-invalid:border-destructive/64 focus-visible:aria-invalid:ring-destructive/48 data-disabled:cursor-not-allowed data-disabled:opacity-64 sm:size-4 dark:not-data-checked:bg-input/32 dark:aria-invalid:ring-destructive/24 dark:not-data-disabled:not-data-checked:not-aria-invalid:before:shadow-[0_-1px_--theme(--color-white/6%)] [[data-disabled],[data-checked],[aria-invalid]]:shadow-none\",\n className,\n )}\n data-slot=\"checkbox\"\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className=\"absolute -inset-px flex items-center justify-center rounded-[.25rem] text-primary-foreground data-unchecked:hidden data-checked:bg-primary data-indeterminate:text-foreground\"\n data-slot=\"checkbox-indicator\"\n render={(\n props: React.ComponentProps<\"span\">,\n state: CheckboxPrimitive.Indicator.State,\n ) => (\n <span {...props}>\n {state.indeterminate ? (\n <svg\n aria-hidden=\"true\"\n className=\"size-3.5 sm:size-3\"\n fill=\"none\"\n height=\"24\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"3\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M5.252 12h13.496\" />\n </svg>\n ) : (\n <svg\n aria-hidden=\"true\"\n className=\"size-3.5 sm:size-3\"\n fill=\"none\"\n height=\"24\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"3\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M5.252 12.7 10.2 18.63 18.748 5.37\" />\n </svg>\n )}\n </span>\n )}\n />\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { CheckboxPrimitive };\n","import { useState } from 'react';\nimport { CopyIcon, CheckIcon, BoxIcon, BlocksIcon, SparklesIcon, FileTextIcon, PaletteIcon } from 'lucide-react';\nimport { Badge, type BadgeProps } from '../coss/badge';\nimport { Button } from '../coss/button';\nimport {\n InputGroup,\n InputGroupInput,\n InputGroupAddon,\n} from '../coss/input-group';\nimport { cn, humanizeId } from '../utils';\n\nexport function stripScopePrefix(scope: string): string {\n const idx = scope.indexOf(':');\n return idx >= 0 ? scope.substring(idx + 1) : scope;\n}\n\nexport function CodeBlock({ text }: { text: string }) {\n return (\n <span className=\"text-sm text-muted-foreground\">{text}</span>\n );\n}\n\nexport function SourceRow({ filePath, line }: { filePath: string; line: number }) {\n const [copied, setCopied] = useState(false);\n const text = `${filePath}:${line}`;\n\n const handleCopy = () => {\n navigator.clipboard.writeText(text).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }).catch(() => {});\n };\n\n return (\n <InputGroup>\n <InputGroupInput\n readOnly\n value={text}\n className=\"font-mono text-xs\"\n size=\"sm\"\n />\n <InputGroupAddon align=\"inline-end\">\n <Button\n size=\"icon\"\n variant=\"ghost\"\n aria-label=\"Copy\"\n onClick={handleCopy}\n >\n {copied ? <CheckIcon /> : <CopyIcon />}\n </Button>\n </InputGroupAddon>\n </InputGroup>\n );\n}\n\nexport function EnvironmentSection() {\n const viewport = `${window.innerWidth} \\u00d7 ${window.innerHeight} viewport`;\n const url = window.location.hostname + window.location.pathname;\n const browserName = /Firefox/.test(navigator.userAgent)\n ? 'Firefox'\n : /Edg/.test(navigator.userAgent)\n ? 'Edge'\n : /Chrome/.test(navigator.userAgent)\n ? 'Chrome'\n : /Safari/.test(navigator.userAgent)\n ? 'Safari'\n : 'Unknown';\n\n return (\n <div className=\"flex flex-col gap-1 mt-3\">\n <span className=\"text-xs font-medium text-muted-foreground\">Environment</span>\n {[viewport, browserName, url].map((item, i) => (\n <span key={i} className=\"text-sm text-muted-foreground\">{item}</span>\n ))}\n </div>\n );\n}\n\nexport type EntityKind = 'component' | 'block' | 'feature' | 'page' | 'primitive';\n\nconst entityIcons: Record<EntityKind, React.ComponentType<{ className?: string }>> = {\n component: BoxIcon,\n block: BlocksIcon,\n feature: SparklesIcon,\n page: FileTextIcon,\n primitive: PaletteIcon,\n};\n\nconst entitySquareClasses: Record<EntityKind, string> = {\n component: 'bg-info/8 text-info-foreground dark:bg-info/16',\n block: 'bg-purple/8 text-purple-foreground dark:bg-purple/16',\n feature: 'bg-warning/8 text-warning-foreground dark:bg-warning/16',\n page: 'bg-success/8 text-success-foreground dark:bg-success/16',\n primitive: 'bg-accent/8 text-accent-foreground dark:bg-accent/16',\n};\n\nexport interface EntityBadgeProps extends Omit<BadgeProps, 'variant'> {\n kind: EntityKind;\n}\n\nexport function EntityBadge({ kind, children, ...props }: EntityBadgeProps) {\n const Icon = entityIcons[kind];\n return (\n <Badge variant={kind} {...props}>\n <Icon />\n {children}\n </Badge>\n );\n}\n\n/** Themed square icon for dialog headers. */\nexport function EntityIcon({ kind, className }: { kind: EntityKind; className?: string }) {\n const Icon = entityIcons[kind];\n return (\n <div className={cn('flex size-7 shrink-0 items-center justify-center rounded-sm', entitySquareClasses[kind], className)}>\n <Icon className=\"size-4\" />\n </div>\n );\n}\n\nexport function FeatureChips({\n features,\n onFeatureClick,\n}: {\n features: { title: string; dir: string }[];\n onFeatureClick: (dir: string) => void;\n}) {\n return (\n <div className=\"flex flex-col gap-1.5 mt-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">Features</span>\n <div className=\"flex flex-wrap gap-1.5\">\n {features.map((f) => (\n <EntityBadge\n key={f.dir}\n kind=\"feature\"\n render={<button type=\"button\" />}\n onClick={() => onFeatureClick(f.dir)}\n >\n {f.title}\n </EntityBadge>\n ))}\n </div>\n </div>\n );\n}\n\nexport function ChipSection({\n label,\n ids,\n variant,\n presentIds,\n onComponentClick,\n}: {\n label: string;\n ids: string[];\n variant: 'blocks' | 'components';\n presentIds: Set<string>;\n onComponentClick: (id: string) => void;\n}) {\n return (\n <div className=\"flex flex-col gap-1.5 mt-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">{label}</span>\n <div className=\"flex flex-wrap gap-1.5\">\n {ids.map((id) => (\n <EntityBadge\n key={id}\n kind={variant === 'blocks' ? 'block' : 'component'}\n render={<button type=\"button\" />}\n className={!presentIds.has(id) ? 'opacity-50' : ''}\n onClick={() => onComponentClick(id)}\n >\n {humanizeId(id)}\n </EntityBadge>\n ))}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type React from \"react\";\nimport { cn } from \"../utils\";\n\nexport const badgeVariants = cva(\n \"relative inline-flex shrink-0 items-center justify-center gap-1 whitespace-nowrap rounded-sm border border-transparent font-medium outline-none transition-shadow focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-64 [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-3.5 sm:[&_svg:not([class*='size-'])]:size-3 [&_svg]:pointer-events-none [&_svg]:shrink-0 [button&,a&]:cursor-pointer [button&,a&]:pointer-coarse:after:absolute [button&,a&]:pointer-coarse:after:size-full [button&,a&]:pointer-coarse:after:min-h-11 [button&,a&]:pointer-coarse:after:min-w-11\",\n {\n defaultVariants: {\n size: \"default\",\n variant: \"default\",\n },\n variants: {\n size: {\n default:\n \"h-5.5 min-w-5.5 px-[calc(--spacing(1)-1px)] text-sm sm:h-4.5 sm:min-w-4.5 sm:text-xs\",\n lg: \"h-6.5 min-w-6.5 px-[calc(--spacing(1.5)-1px)] text-base sm:h-5.5 sm:min-w-5.5 sm:text-sm\",\n sm: \"h-5 min-w-5 rounded-[.25rem] px-[calc(--spacing(1)-1px)] text-xs sm:h-4 sm:min-w-4 sm:text-[.625rem]\",\n },\n variant: {\n default:\n \"bg-primary text-primary-foreground [button&,a&]:hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white [button&,a&]:hover:bg-destructive/90\",\n error:\n \"bg-destructive/8 text-destructive-foreground dark:bg-destructive/16\",\n info: \"bg-info/8 text-info-foreground dark:bg-info/16\",\n outline:\n \"border-input bg-background text-foreground dark:bg-input/32 [button&,a&]:hover:bg-accent/50 dark:[button&,a&]:hover:bg-input/48\",\n secondary:\n \"bg-secondary text-secondary-foreground [button&,a&]:hover:bg-secondary/90\",\n success: \"bg-success/8 text-success-foreground dark:bg-success/16\",\n warning: \"bg-warning/8 text-warning-foreground dark:bg-warning/16\",\n\n // Entity-type variants\n component: \"bg-info/8 text-info-foreground dark:bg-info/16\",\n block: \"bg-purple/8 text-purple-foreground dark:bg-purple/16\",\n feature: \"bg-warning/8 text-warning-foreground dark:bg-warning/16\",\n page: \"bg-success/8 text-success-foreground dark:bg-success/16\",\n primitive: \"bg-accent/8 text-accent-foreground dark:bg-accent/16\",\n },\n },\n },\n);\n\nexport interface BadgeProps extends useRender.ComponentProps<\"span\"> {\n variant?: VariantProps<typeof badgeVariants>[\"variant\"];\n size?: VariantProps<typeof badgeVariants>[\"size\"];\n}\n\nexport function Badge({\n className,\n variant,\n size,\n render,\n ...props\n}: BadgeProps): React.ReactElement {\n const defaultProps = {\n className: cn(badgeVariants({ className, size, variant })),\n \"data-slot\": \"badge\",\n };\n\n return useRender({\n defaultTagName: \"span\",\n props: mergeProps<\"span\">(defaultProps, props),\n render,\n });\n}\n","import { useState, useRef } from 'react';\nimport type {\n FeedbackReport,\n FeedbackType,\n FeedbackSeverity,\n} from '../../core/types';\nimport { submitFeedback } from '../../core/ingest';\nimport type { ModalData, ModalOptions } from '../modal/store';\nimport {\n captureElementScreenshot,\n collectEnv,\n describeElement,\n} from '../modal/feedback-utils';\nimport {\n Dialog,\n DialogPopup,\n DialogHeader,\n DialogTitle,\n DialogPanel,\n DialogFooter,\n} from '../coss/dialog';\nimport { Input } from '../coss/input';\nimport { Textarea } from '../coss/textarea';\nimport { Button } from '../coss/button';\nimport { Checkbox } from '../coss/checkbox';\nimport { Separator } from '../coss/separator';\nimport { EntityBadge } from '../shared/chips';\nimport { humanizeId } from '../utils';\n\ninterface FeedbackDialogProps {\n open: boolean;\n onClose: () => void;\n targetId: string;\n data: ModalData;\n options: ModalOptions;\n container?: HTMLElement | null;\n}\n\nexport function FeedbackDialog({\n open,\n onClose,\n targetId,\n data,\n options,\n container,\n}: FeedbackDialogProps) {\n const locations = data.components[targetId] ?? [];\n const kind = (locations[0]?.kind ?? 'component') as 'component' | 'block';\n const element = options.elementGetter?.(targetId) ?? null;\n\n const [type, setType] = useState<FeedbackType>('bug');\n const [severity, setSeverity] = useState<FeedbackSeverity>('medium');\n const [title, setTitle] = useState('');\n const [description, setDescription] = useState('');\n const [reporterName, setReporterName] = useState('');\n const [reporterEmail, setReporterEmail] = useState('');\n const [includeScreenshot, setIncludeScreenshot] = useState(true);\n const [submitState, setSubmitState] = useState<\n 'idle' | 'capturing' | 'submitting' | 'success' | 'error'\n >('idle');\n const descRef = useRef<HTMLTextAreaElement>(null);\n\n const showReporterFields = options.ingest && !options.ingest.reporter;\n\n const handleSubmit = async () => {\n if (!description.trim()) {\n descRef.current?.focus();\n return;\n }\n\n setSubmitState('capturing');\n\n let screenshot: string | undefined;\n if (includeScreenshot) {\n const freshElement =\n options.elementGetter?.(targetId) ?? element;\n if (freshElement) {\n screenshot =\n (await captureElementScreenshot(freshElement)) ?? undefined;\n }\n }\n\n const env = collectEnv();\n const page = data.pages.find((p) =>\n p.componentIds.includes(targetId),\n );\n const { ingest } = options;\n\n const resolvedEmail =\n ingest?.reporter?.email || reporterEmail.trim() || undefined;\n const resolvedName =\n ingest?.reporter?.name || reporterName.trim() || undefined;\n const titleValue = title.trim();\n\n const report: FeedbackReport = {\n type,\n severity,\n ...(titleValue ? { title: titleValue } : {}),\n description: description.trim(),\n componentId: targetId,\n element: element ? describeElement(element) : null,\n sources: locations.map((l) => ({\n filePath: l.filePath,\n line: l.line,\n })),\n url: env.url,\n path: window.location.pathname,\n route: page?.dir ?? null,\n timestamp: new Date().toISOString(),\n pageTitle: document.title,\n ...(page?.description ? { pageDescription: page.description } : {}),\n locale: navigator.language,\n sessionId: options.sessionId ?? '',\n viewport: env.viewport,\n screen: env.screen,\n userAgent: env.userAgent,\n screenshot,\n ...(resolvedEmail ? { reporterEmail: resolvedEmail } : {}),\n ...(resolvedName ? { reporterName: resolvedName } : {}),\n ...(ingest?.environment\n ? { environment: ingest.environment }\n : {}),\n ...(ingest?.appVersion ? { appVersion: ingest.appVersion } : {}),\n ...(ingest?.metadata ? { metadata: ingest.metadata } : {}),\n };\n\n const consoleLogs = options.getConsoleLogs?.();\n if (consoleLogs && consoleLogs.length > 0) {\n report.consoleLogs = consoleLogs;\n }\n const networkErrors = options.getNetworkErrors?.();\n if (networkErrors && networkErrors.length > 0) {\n report.networkErrors = networkErrors;\n }\n\n if (ingest) {\n setSubmitState('submitting');\n try {\n const serverResult = await submitFeedback(\n ingest.endpoint,\n ingest.apiKey,\n report,\n );\n options.onSubmit?.(report, {\n ok: true,\n id: serverResult.id,\n sequenceNumber: serverResult.sequenceNumber,\n });\n setSubmitState('success');\n setTimeout(() => onClose(), 1500);\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : 'Unknown error';\n console.warn(\n '[uidex] Feedback submission failed:',\n errorMessage,\n );\n options.onSubmit?.(report, { ok: false, error: errorMessage });\n setSubmitState('error');\n }\n } else {\n if (!options.onSubmit) {\n console.log('[uidex] Feedback submitted:', report);\n }\n options.onSubmit?.(report, { ok: true, id: '', sequenceNumber: 0 });\n setSubmitState('success');\n }\n };\n\n const buttonLabel =\n submitState === 'capturing'\n ? 'Capturing\\u2026'\n : submitState === 'submitting'\n ? 'Submitting\\u2026'\n : submitState === 'success'\n ? 'Submitted!'\n : submitState === 'error'\n ? 'Failed \\u2014 retry?'\n : 'Submit';\n\n const isDisabled =\n submitState === 'capturing' || submitState === 'submitting';\n\n // Context section\n const parentFeatures = data.features.filter((f) =>\n f.componentIds.includes(targetId),\n );\n const parentPage = data.pages.find((p) =>\n p.componentIds.includes(targetId),\n );\n const doc = locations.find((l) => l.doc)?.doc;\n const hasContext =\n parentFeatures.length > 0 || parentPage || doc;\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen) onClose();\n };\n\n return (\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogPopup container={container} showCloseButton>\n <DialogHeader>\n <div className=\"flex items-center gap-2\">\n <DialogTitle>Feedback</DialogTitle>\n <EntityBadge kind={kind} size=\"sm\">{humanizeId(targetId)}</EntityBadge>\n </div>\n </DialogHeader>\n\n <DialogPanel>\n {/* Context */}\n {parentFeatures.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5 mb-2\">\n {parentFeatures.map((f) => (\n <EntityBadge key={f.dir} kind=\"feature\">{f.title}</EntityBadge>\n ))}\n </div>\n )}\n {parentPage && (\n <div className=\"flex flex-wrap gap-1.5 mb-2\">\n <EntityBadge kind=\"page\">{parentPage.title}</EntityBadge>\n </div>\n )}\n {doc && <p className=\"text-sm text-muted-foreground mt-2\">{doc}</p>}\n {hasContext && <Separator className=\"my-3\" />}\n\n {/* Form */}\n <form\n className=\"flex flex-col gap-3\"\n onSubmit={(e) => e.preventDefault()}\n >\n <div className=\"flex flex-col gap-1.5\">\n <label className=\"text-sm font-medium\">Type</label>\n <select\n className=\"h-8.5 w-full rounded-lg border border-input bg-background px-3 text-sm text-foreground shadow-xs/5 outline-none ring-ring/24 transition-shadow focus-visible:border-ring focus-visible:ring-[3px] sm:h-7.5\"\n value={type}\n onChange={(e) => setType(e.target.value as FeedbackType)}\n >\n <option value=\"bug\">Bug Report</option>\n <option value=\"feature\">Feature Request</option>\n <option value=\"improvement\">Improvement</option>\n <option value=\"question\">Question</option>\n </select>\n </div>\n\n <div className=\"flex flex-col gap-1.5\">\n <label className=\"text-sm font-medium\">Severity</label>\n <select\n className=\"h-8.5 w-full rounded-lg border border-input bg-background px-3 text-sm text-foreground shadow-xs/5 outline-none ring-ring/24 transition-shadow focus-visible:border-ring focus-visible:ring-[3px] sm:h-7.5\"\n value={severity}\n onChange={(e) =>\n setSeverity(e.target.value as FeedbackSeverity)\n }\n >\n <option value=\"low\">Low</option>\n <option value=\"medium\">Medium</option>\n <option value=\"high\">High</option>\n <option value=\"critical\">Critical</option>\n </select>\n </div>\n\n <div className=\"flex flex-col gap-1.5\">\n <label className=\"text-sm font-medium\">Title</label>\n <Input\n placeholder=\"Brief summary (optional)\"\n maxLength={200}\n value={title}\n onChange={(e) => setTitle((e.target as HTMLInputElement).value)}\n />\n </div>\n\n <div className=\"flex flex-col gap-1.5\">\n <label className=\"text-sm font-medium\">Description</label>\n <Textarea\n ref={descRef}\n placeholder=\"Describe the issue or idea...\"\n rows={4}\n value={description}\n onChange={(e) => setDescription((e.target as HTMLTextAreaElement).value)}\n />\n </div>\n\n {showReporterFields && (\n <div className=\"flex flex-col gap-1.5\">\n <label className=\"text-sm font-medium\">Reporter</label>\n <Input\n placeholder=\"Name (optional)\"\n value={reporterName}\n onChange={(e) => setReporterName((e.target as HTMLInputElement).value)}\n />\n <Input\n type=\"email\"\n placeholder=\"Email (optional)\"\n value={reporterEmail}\n onChange={(e) => setReporterEmail((e.target as HTMLInputElement).value)}\n />\n </div>\n )}\n\n <label className=\"inline-flex items-center gap-2 text-sm font-medium cursor-pointer\">\n <Checkbox\n checked={includeScreenshot}\n onCheckedChange={(checked) => setIncludeScreenshot(checked === true)}\n />\n Include screenshot\n </label>\n </form>\n </DialogPanel>\n\n <DialogFooter variant=\"bare\">\n <Button\n disabled={isDisabled}\n onClick={handleSubmit}\n >\n {buttonLabel}\n </Button>\n </DialogFooter>\n </DialogPopup>\n </Dialog>\n );\n}\n","import type { UidexMap, UidexPage, UidexFeature, GitContext } from './types';\n\nlet registeredComponents: UidexMap | null = null;\nlet registeredPages: UidexPage[] | null = null;\nlet registeredFeatures: UidexFeature[] | null = null;\nlet registeredGitContext: GitContext | null = null;\n\nexport function registerComponents(components: UidexMap): void {\n registeredComponents = components;\n}\n\nexport function getComponents(): UidexMap | null {\n return registeredComponents;\n}\n\nexport function registerPages(pages: UidexPage[]): void {\n registeredPages = pages;\n}\n\nexport function getPages(): UidexPage[] | null {\n return registeredPages;\n}\n\nexport function registerFeatures(features: UidexFeature[]): void {\n registeredFeatures = features;\n}\n\nexport function getFeatures(): UidexFeature[] | null {\n return registeredFeatures;\n}\n\nexport function registerGitContext(ctx: GitContext): void {\n registeredGitContext = ctx;\n}\n\nexport function getGitContext(): GitContext | null {\n return registeredGitContext;\n}\n","import type {\n ConsoleLogEntry,\n NetworkErrorEntry,\n FeedbackReport,\n} from './types';\nimport { getGitContext } from './registry';\n\nconst MAX_CONSOLE_LOGS = 50;\nconst MAX_NETWORK_ERRORS = 20;\n\n// Saved before any interception so submitFeedback always uses the real fetch.\nlet nativeFetch: typeof fetch | null = null;\n\nfunction safeStringify(value: unknown): string {\n if (typeof value === 'string') return value;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport class IngestCapture {\n private consoleLogs: ConsoleLogEntry[] = [];\n private networkErrors: NetworkErrorEntry[] = [];\n private originalConsoleWarn: typeof console.warn | null = null;\n private originalConsoleError: typeof console.error | null = null;\n private originalFetch: typeof fetch | null = null;\n\n constructor(\n private captureConsole: boolean,\n private captureNetwork: boolean\n ) {}\n\n start(): void {\n this.consoleLogs = [];\n this.networkErrors = [];\n if (this.captureConsole) this.interceptConsole();\n if (this.captureNetwork) this.interceptNetwork();\n }\n\n stop(): void {\n this.restoreConsole();\n this.restoreNetwork();\n }\n\n getConsoleLogs(): ConsoleLogEntry[] {\n return [...this.consoleLogs];\n }\n\n getNetworkErrors(): NetworkErrorEntry[] {\n return [...this.networkErrors];\n }\n\n private interceptConsole(): void {\n if (this.originalConsoleWarn) return;\n this.originalConsoleWarn = console.warn;\n this.originalConsoleError = console.error;\n\n console.warn = (...args: unknown[]) => {\n this.addConsoleLog('warn', args);\n this.originalConsoleWarn!.apply(console, args);\n };\n\n console.error = (...args: unknown[]) => {\n this.addConsoleLog('error', args);\n this.originalConsoleError!.apply(console, args);\n };\n }\n\n private addConsoleLog(level: 'warn' | 'error', args: unknown[]): void {\n this.consoleLogs.push({\n level,\n message: args.map(safeStringify).join(' '),\n timestamp: new Date().toISOString(),\n });\n if (this.consoleLogs.length > MAX_CONSOLE_LOGS) {\n this.consoleLogs.shift();\n }\n }\n\n private restoreConsole(): void {\n if (this.originalConsoleWarn) {\n console.warn = this.originalConsoleWarn;\n this.originalConsoleWarn = null;\n }\n if (this.originalConsoleError) {\n console.error = this.originalConsoleError;\n this.originalConsoleError = null;\n }\n }\n\n private interceptNetwork(): void {\n if (this.originalFetch) return;\n this.originalFetch = window.fetch;\n if (!nativeFetch) nativeFetch = this.originalFetch;\n\n window.fetch = async (...args: Parameters<typeof fetch>) => {\n try {\n const response = await this.originalFetch!.apply(window, args);\n if (!response.ok) {\n this.addNetworkError(\n args[0],\n args[1]?.method,\n response.status,\n response.statusText\n );\n }\n return response;\n } catch (error) {\n this.addNetworkError(\n args[0],\n args[1]?.method,\n null,\n error instanceof Error ? error.message : 'Network error'\n );\n throw error;\n }\n };\n }\n\n private addNetworkError(\n input: RequestInfo | URL,\n method: string | undefined,\n status: number | null,\n statusText: string\n ): void {\n let url: string;\n if (typeof input === 'string') {\n url = input;\n } else if (input instanceof URL) {\n url = input.href;\n } else {\n url = (input as Request).url;\n method ??= (input as Request).method;\n }\n this.networkErrors.push({\n url,\n method: method ?? 'GET',\n status,\n statusText,\n timestamp: new Date().toISOString(),\n });\n if (this.networkErrors.length > MAX_NETWORK_ERRORS) {\n this.networkErrors.shift();\n }\n }\n\n private restoreNetwork(): void {\n if (this.originalFetch) {\n window.fetch = this.originalFetch;\n this.originalFetch = null;\n }\n }\n}\n\nexport function generateSessionId(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nexport async function submitFeedback(\n endpoint: string,\n apiKey: string,\n report: FeedbackReport\n): Promise<{ id: string; sequenceNumber: number }> {\n // Enrich report with git context from registry if not explicitly set\n const gitCtx = getGitContext();\n const enriched = { ...report };\n if (gitCtx) {\n if (!enriched.gitBranch && gitCtx.branch) {\n enriched.gitBranch = gitCtx.branch;\n }\n if (!enriched.gitCommit && gitCtx.commit) {\n enriched.gitCommit = gitCtx.commit;\n }\n }\n\n // Use the native fetch to avoid self-capture by IngestCapture.\n const fetchFn = nativeFetch ?? fetch;\n const response = await fetchFn(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify(enriched),\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => '');\n throw new Error(`Ingest failed (${response.status}): ${text}`);\n }\n\n return response.json();\n}\n","const VISUAL_PROPS = [\n 'display', 'position', 'box-sizing', 'width', 'min-width', 'max-width',\n 'height', 'min-height', 'max-height', 'margin', 'padding', 'border',\n 'border-radius', 'overflow', 'flex-direction', 'flex-wrap', 'flex-grow',\n 'flex-shrink', 'flex-basis', 'align-items', 'justify-content', 'gap',\n 'grid-template-columns', 'grid-template-rows', 'grid-column', 'grid-row',\n 'color', 'background', 'background-color', 'background-image',\n 'font-family', 'font-size', 'font-weight', 'font-style', 'line-height',\n 'letter-spacing', 'text-align', 'text-decoration', 'text-transform',\n 'white-space', 'word-break', 'opacity', 'visibility', 'transform',\n 'box-shadow', 'text-shadow', 'vertical-align', 'list-style', 'text-overflow',\n];\n\nfunction inlineComputedStyles(source: Element, target: Element): void {\n if (source instanceof HTMLElement && target instanceof HTMLElement) {\n const computed = window.getComputedStyle(source);\n for (const prop of VISUAL_PROPS) {\n const value = computed.getPropertyValue(prop);\n if (value) {\n target.style.setProperty(prop, value);\n }\n }\n }\n const srcChildren = source.children;\n const tgtChildren = target.children;\n for (let i = 0; i < srcChildren.length; i++) {\n if (tgtChildren[i]) {\n inlineComputedStyles(srcChildren[i], tgtChildren[i]);\n }\n }\n}\n\nexport async function captureElementScreenshot(\n element: Element,\n): Promise<string | null> {\n try {\n const rect = element.getBoundingClientRect();\n const width = Math.ceil(rect.width);\n const height = Math.ceil(rect.height);\n if (width <= 0 || height <= 0 || width > 4096 || height > 4096)\n return null;\n\n const clone = element.cloneNode(true) as Element;\n inlineComputedStyles(element, clone);\n\n const wrapper = document.createElement('div');\n wrapper.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');\n wrapper.style.width = `${width}px`;\n wrapper.style.height = `${height}px`;\n wrapper.style.overflow = 'hidden';\n wrapper.appendChild(clone);\n\n const serialized = new XMLSerializer().serializeToString(wrapper);\n const svg =\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\">` +\n `<foreignObject width=\"100%\" height=\"100%\">` +\n serialized +\n `</foreignObject></svg>`;\n\n const img = new Image();\n img.src =\n 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg);\n\n return await Promise.race([\n new Promise<string | null>((resolve) => {\n img.onload = () => {\n try {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n if (!ctx) return resolve(null);\n ctx.drawImage(img, 0, 0);\n resolve(canvas.toDataURL('image/png'));\n } catch {\n resolve(null);\n }\n };\n img.onerror = () => resolve(null);\n }),\n new Promise<null>((resolve) =>\n setTimeout(() => resolve(null), 5000),\n ),\n ]);\n } catch {\n return null;\n }\n}\n\nexport function collectEnv() {\n return {\n viewport: { width: window.innerWidth, height: window.innerHeight },\n screen: { width: screen.width, height: screen.height },\n userAgent: navigator.userAgent,\n browserName: getBrowserName(),\n url: window.location.href,\n };\n}\n\nfunction getBrowserName(): string {\n const ua = navigator.userAgent;\n if (ua.includes('Firefox/')) return 'Firefox';\n if (ua.includes('Edg/')) return 'Edge';\n if (ua.includes('Chrome/')) return 'Chrome';\n if (ua.includes('Safari/') && !ua.includes('Chrome')) return 'Safari';\n return 'Unknown browser';\n}\n\nexport function describeElement(element: Element): string {\n const tag = element.tagName.toLowerCase();\n const id = element.id ? `#${element.id}` : '';\n const classes = element.className\n ? `.${String(element.className).split(/\\s+/).join('.')}`\n : '';\n return `<${tag}${id}${classes}>`;\n}\n","import { Separator as SeparatorPrimitive } from \"@base-ui/react/separator\";\nimport type React from \"react\";\nimport { cn } from \"../utils\";\n\nexport function Separator({\n className,\n orientation = \"horizontal\",\n ...props\n}: SeparatorPrimitive.Props): React.ReactElement {\n return (\n <SeparatorPrimitive\n className={cn(\n \"shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:not-[[class^='h-']]:not-[[class*='_h-']]:self-stretch\",\n className,\n )}\n data-slot=\"separator\"\n orientation={orientation}\n {...props}\n />\n );\n}\n\nexport { SeparatorPrimitive };\n","import { useMemo } from 'react';\nimport type { ModalData } from '../modal/store';\nimport {\n Dialog,\n DialogPopup,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogPanel,\n} from '../coss/dialog';\nimport { FeatureChips, ChipSection, EntityBadge, EntityIcon, SourceRow, stripScopePrefix } from '../shared/chips';\nimport { humanizeId } from '../utils';\n\ninterface ComponentDialogProps {\n open: boolean;\n onClose: () => void;\n targetId: string;\n data: ModalData;\n onSelectComponent: (id: string) => void;\n onOpenPage: (dir: string) => void;\n onOpenFeature: (dir: string) => void;\n container?: HTMLElement | null;\n}\n\nexport function ComponentDialog({\n open,\n onClose,\n targetId,\n data,\n onSelectComponent,\n onOpenPage,\n onOpenFeature,\n container,\n}: ComponentDialogProps) {\n const locations = data.components[targetId] ?? [];\n const kind = locations[0]?.kind ?? 'component';\n const doc = locations[0]?.doc;\n const scopes = locations[0]?.scopes ?? [];\n const present = data.presentIds.has(targetId);\n\n const displayTitle = humanizeId(targetId);\n\n const parentFeatures = useMemo(\n () => data.features.filter((f) => f.componentIds.includes(targetId)),\n [data.features, targetId],\n );\n\n const parentPages = useMemo(\n () => data.pages.filter((p) => p.componentIds.includes(targetId)),\n [data.pages, targetId],\n );\n\n const blockChildren = useMemo(() => {\n if (kind !== 'block') return [];\n return data.blockContainment.get(targetId) ?? [];\n }, [kind, targetId, data.blockContainment]);\n\n const parentBlock = useMemo(() => {\n if (kind === 'block') return null;\n for (const [blockId, children] of data.blockContainment) {\n if (children.includes(targetId)) return blockId;\n }\n return null;\n }, [kind, targetId, data.blockContainment]);\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen) onClose();\n };\n\n return (\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogPopup container={container} className=\"max-w-sm\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <EntityIcon kind={kind} />\n {displayTitle}\n {!present && (\n <span className=\"text-xs italic text-muted-foreground\">\n absent\n </span>\n )}\n </DialogTitle>\n {doc && <DialogDescription>{doc}</DialogDescription>}\n </DialogHeader>\n <DialogPanel>\n <div className=\"flex flex-col gap-3\">\n {locations.length > 0 && (\n <Section label=\"Source\">\n {locations.map((loc, i) => (\n <SourceRow\n key={i}\n filePath={loc.filePath}\n line={loc.line}\n />\n ))}\n </Section>\n )}\n\n {scopes.length > 0 && (\n <Section label=\"Scopes\">\n <div className=\"flex flex-wrap gap-1.5\">\n {scopes.map((scope) => {\n const isGlobal = scope === 'global';\n const label = stripScopePrefix(scope);\n const badgeKind = scope.startsWith('feature:') ? 'feature' as const : scope.startsWith('page:') ? 'page' as const : 'component' as const;\n return isGlobal ? (\n <EntityBadge key={scope} kind=\"component\">\n global\n </EntityBadge>\n ) : (\n <EntityBadge\n key={scope}\n kind={badgeKind}\n render={<button type=\"button\" />}\n onClick={() => {\n if (scope.startsWith('feature:')) {\n const feature = data.features.find((f) => f.dir.split('/').pop() === label);\n if (feature) onOpenFeature(feature.dir);\n } else if (scope.startsWith('page:')) {\n const page = data.pages.find((p) => p.dir.split('/').pop() === label);\n if (page) onOpenPage(page.dir);\n }\n }}\n >\n {label}\n </EntityBadge>\n );\n })}\n </div>\n </Section>\n )}\n\n {parentBlock && (\n <Section label=\"Parent block\">\n <EntityBadge\n kind=\"block\"\n className=\"w-fit\"\n render={<button type=\"button\" />}\n onClick={() => onSelectComponent(parentBlock)}\n >\n {humanizeId(parentBlock)}\n </EntityBadge>\n </Section>\n )}\n\n {blockChildren.length > 0 && (\n <ChipSection\n label=\"Contains\"\n ids={blockChildren}\n variant=\"components\"\n presentIds={data.presentIds}\n onComponentClick={onSelectComponent}\n />\n )}\n\n {parentFeatures.length > 0 && (\n <FeatureChips\n features={parentFeatures}\n onFeatureClick={onOpenFeature}\n />\n )}\n\n {parentPages.length > 0 && (\n <Section label=\"Pages\">\n <div className=\"flex flex-wrap gap-1.5\">\n {parentPages.map((p) => (\n <EntityBadge\n key={p.dir}\n kind=\"page\"\n render={<button type=\"button\" />}\n onClick={() => onOpenPage(p.dir)}\n >\n {p.title}\n </EntityBadge>\n ))}\n </div>\n </Section>\n )}\n </div>\n </DialogPanel>\n </DialogPopup>\n </Dialog>\n );\n}\n\nfunction Section({\n label,\n children,\n}: {\n label: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-muted-foreground\">{label}</span>\n {children}\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport type { ModalData } from '../modal/store';\nimport {\n Dialog,\n DialogPopup,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogPanel,\n} from '../coss/dialog';\nimport { MarkdownContent } from '../shared/MarkdownContent';\nimport { ChipSection, EntityBadge, EntityIcon } from '../shared/chips';\n\ninterface FeatureDialogProps {\n open: boolean;\n onClose: () => void;\n featureDir: string;\n data: ModalData;\n onSelectComponent: (id: string) => void;\n onOpenPage: (dir: string) => void;\n container?: HTMLElement | null;\n}\n\nexport function FeatureDialog({\n open,\n onClose,\n featureDir,\n data,\n onSelectComponent,\n onOpenPage,\n container,\n}: FeatureDialogProps) {\n const feature = useMemo(\n () => data.features.find((f) => f.dir === featureDir) ?? null,\n [data.features, featureDir],\n );\n\n const parentPages = useMemo(() => {\n if (!feature) return [];\n const featureComponentSet = new Set(feature.componentIds);\n return data.pages.filter((p) =>\n p.componentIds.some((cid) => featureComponentSet.has(cid)),\n );\n }, [data.pages, feature]);\n\n if (!feature) return null;\n\n const blockIds = feature.componentIds.filter(\n (id) => data.components[id]?.[0]?.kind === 'block',\n );\n const componentIds = feature.componentIds.filter(\n (id) => data.components[id]?.[0]?.kind !== 'block',\n );\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen) onClose();\n };\n\n return (\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogPopup container={container}>\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <EntityIcon kind=\"feature\" />\n {feature.title}\n </DialogTitle>\n {feature.description && (\n <DialogDescription>{feature.description}</DialogDescription>\n )}\n </DialogHeader>\n\n <DialogPanel>\n {feature.content.trim() && (\n <div>\n <MarkdownContent content={feature.content} skipDescription />\n </div>\n )}\n\n {blockIds.length > 0 && (\n <ChipSection\n label=\"Blocks\"\n ids={blockIds}\n variant=\"blocks\"\n presentIds={data.presentIds}\n onComponentClick={onSelectComponent}\n />\n )}\n\n {componentIds.length > 0 && (\n <ChipSection\n label=\"Components\"\n ids={componentIds}\n variant=\"components\"\n presentIds={data.presentIds}\n onComponentClick={onSelectComponent}\n />\n )}\n\n {parentPages.length > 0 && (\n <Section label=\"Pages\">\n <div className=\"flex flex-wrap gap-1.5\">\n {parentPages.map((p) => (\n <EntityBadge\n key={p.dir}\n kind=\"page\"\n render={<button type=\"button\" />}\n onClick={() => onOpenPage(p.dir)}\n >\n {p.title}\n </EntityBadge>\n ))}\n </div>\n </Section>\n )}\n </DialogPanel>\n </DialogPopup>\n </Dialog>\n );\n}\n\nfunction Section({\n label,\n children,\n}: {\n label: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-muted-foreground\">{label}</span>\n {children}\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport type { ModalData } from '../modal/store';\nimport type { PrimitiveEntry } from '../../core/types';\nimport {\n Dialog,\n DialogPopup,\n DialogHeader,\n DialogTitle,\n DialogPanel,\n} from '../coss/dialog';\nimport { EntityBadge, EntityIcon, stripScopePrefix } from '../shared/chips';\n\ninterface UiDialogProps {\n open: boolean;\n onClose: () => void;\n filePath: string;\n data: ModalData;\n onSelectComponent: (id: string) => void;\n onOpenFeature: (dir: string) => void;\n onOpenPage: (dir: string) => void;\n onOpenUi: (filePath: string) => void;\n container?: HTMLElement | null;\n}\n\nexport function UiDialog({\n open,\n onClose,\n filePath,\n data,\n onSelectComponent,\n onOpenFeature,\n onOpenPage,\n onOpenUi,\n container,\n}: UiDialogProps) {\n const primitive = data.uiComponents.get(filePath) ?? null;\n\n const composedPrimitives = useMemo(() => {\n if (!primitive) return [];\n return primitive.composes\n .map((fp) => data.uiComponents.get(fp))\n .filter((p): p is PrimitiveEntry => p != null);\n }, [primitive, data.uiComponents]);\n\n const usedByFiles = useMemo(() => {\n if (!primitive) return [];\n return primitive.usedBy;\n }, [primitive]);\n\n // Build a reverse index so each usedBy file lookup is O(1) instead of O(n)\n const filePathToComponentId = useMemo(() => {\n const map = new Map<string, string>();\n for (const [id, locs] of Object.entries(data.components)) {\n for (const loc of locs) {\n if (!map.has(loc.filePath)) map.set(loc.filePath, id);\n }\n }\n return map;\n }, [data.components]);\n\n // Find the feature or page dir that matches this scope\n const navigateToScope = useMemo(() => {\n if (!primitive || primitive.scope === 'global') return null;\n const scopeName = stripScopePrefix(primitive.scope);\n if (primitive.scope.startsWith('feature:')) {\n const feature = data.features.find((f) => {\n const dirName = f.dir.split('/').pop();\n return dirName === scopeName;\n });\n return feature ? { type: 'feature' as const, dir: feature.dir } : null;\n }\n if (primitive.scope.startsWith('page:')) {\n const page = data.pages.find((p) => {\n const dirName = p.dir.split('/').pop();\n return dirName === scopeName;\n });\n return page ? { type: 'page' as const, dir: page.dir } : null;\n }\n return null;\n }, [primitive, data.features, data.pages]);\n\n if (!primitive) return null;\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen) onClose();\n };\n\n const handleBelongsToClick = () => {\n if (!navigateToScope) return;\n if (navigateToScope.type === 'feature') {\n onOpenFeature(navigateToScope.dir);\n } else {\n onOpenPage(navigateToScope.dir);\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogPopup container={container} className=\"max-w-sm\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <EntityIcon kind=\"primitive\" />\n {primitive.name}\n </DialogTitle>\n </DialogHeader>\n <DialogPanel>\n <div className=\"flex flex-col gap-3\">\n {/* Source */}\n <Section label=\"Source\">\n <span className=\"text-sm text-muted-foreground font-mono\">\n {primitive.filePath}\n </span>\n </Section>\n\n {/* Belongs to */}\n <Section label=\"Belongs to\">\n {primitive.scope === 'global' ? (\n <span className=\"text-sm text-muted-foreground\">global</span>\n ) : (\n <EntityBadge\n kind={primitive.scope.startsWith('feature:') ? 'feature' : 'page'}\n className=\"w-fit\"\n render={navigateToScope ? <button type=\"button\" /> : undefined}\n onClick={navigateToScope ? handleBelongsToClick : undefined}\n >\n {stripScopePrefix(primitive.scope)}\n </EntityBadge>\n )}\n </Section>\n\n {/* Composes */}\n {composedPrimitives.length > 0 && (\n <Section label=\"Composes\">\n <div className=\"flex flex-wrap gap-1.5\">\n {composedPrimitives.map((p) => (\n <EntityBadge\n key={p.filePath}\n kind=\"primitive\"\n render={<button type=\"button\" />}\n onClick={() => onOpenUi(p.filePath)}\n >\n {p.name}\n </EntityBadge>\n ))}\n </div>\n </Section>\n )}\n\n {/* Used by */}\n {usedByFiles.length > 0 && (\n <Section label=\"Used by\">\n <div className=\"flex flex-col gap-1\">\n {usedByFiles.map((fp) => {\n const componentId = filePathToComponentId.get(fp);\n\n return (\n <span\n key={fp}\n className={`text-sm font-mono ${componentId ? 'text-foreground cursor-pointer hover:underline' : 'text-muted-foreground'}`}\n role={componentId ? 'button' : undefined}\n tabIndex={componentId ? 0 : undefined}\n onClick={componentId ? () => onSelectComponent(componentId) : undefined}\n onKeyDown={componentId ? (e) => { if (e.key === 'Enter') onSelectComponent(componentId); } : undefined}\n >\n {fp}\n </span>\n );\n })}\n </div>\n </Section>\n )}\n\n {usedByFiles.length === 0 && composedPrimitives.length === 0 && (\n <span className=\"text-sm italic text-muted-foreground\">\n No consumers found\n </span>\n )}\n </div>\n </DialogPanel>\n </DialogPopup>\n </Dialog>\n );\n}\n\nfunction Section({\n label,\n children,\n}: {\n label: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-muted-foreground\">{label}</span>\n {children}\n </div>\n );\n}\n","// AUTO-GENERATED — do not edit. Run `npm run generate:css` to regenerate.\n// Sources: src/core/style.css, src/ui/tailwind.out.css\nconst cssText = \"/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\\n@layer properties;\\n@layer theme, base, components, utilities;\\n@layer theme {\\n :root, :host {\\n --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,\\n \\\"Segoe UI\\\", Roboto, sans-serif;\\n --font-mono: ui-monospace, SFMono-Regular, \\\"SF Mono\\\", Menlo, Consolas,\\n monospace;\\n --color-red-500: oklch(63.7% 0.237 25.331);\\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-400: oklch(76.5% 0.177 163.223);\\n --color-emerald-500: oklch(69.6% 0.17 162.48);\\n --color-emerald-600: oklch(59.6% 0.145 163.225);\\n --color-emerald-700: oklch(50.8% 0.118 165.612);\\n --color-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-neutral-50: oklch(98.5% 0 0);\\n --color-neutral-100: oklch(97% 0 0);\\n --color-neutral-400: oklch(70.8% 0 0);\\n --color-neutral-500: oklch(55.6% 0 0);\\n --color-neutral-800: oklch(26.9% 0 0);\\n --color-neutral-950: oklch(14.5% 0 0);\\n --color-black: #000;\\n --color-white: #fff;\\n --spacing: 0.25rem;\\n --container-sm: 24rem;\\n --container-md: 28rem;\\n --container-lg: 32rem;\\n --container-xl: 36rem;\\n --container-2xl: 42rem;\\n --container-3xl: 48rem;\\n --container-6xl: 72rem;\\n --text-xs: 0.75rem;\\n --text-xs--line-height: calc(1 / 0.75);\\n --text-sm: 0.875rem;\\n --text-sm--line-height: calc(1.25 / 0.875);\\n --text-base: 1rem;\\n --text-base--line-height: calc(1.5 / 1);\\n --text-lg: 1.125rem;\\n --text-lg--line-height: calc(1.75 / 1.125);\\n --text-xl: 1.25rem;\\n --text-xl--line-height: calc(1.75 / 1.25);\\n --text-2xl: 1.5rem;\\n --text-2xl--line-height: calc(2 / 1.5);\\n --text-3xl: 1.875rem;\\n --text-3xl--line-height: calc(2.25 / 1.875);\\n --text-4xl: 2.25rem;\\n --text-4xl--line-height: calc(2.5 / 2.25);\\n --text-5xl: 3rem;\\n --text-5xl--line-height: 1;\\n --font-weight-medium: 500;\\n --font-weight-semibold: 600;\\n --font-weight-bold: 700;\\n --tracking-tight: -0.025em;\\n --tracking-wide: 0.025em;\\n --tracking-widest: 0.1em;\\n --leading-relaxed: 1.625;\\n --leading-loose: 2;\\n --radius-sm: calc(var(--radius) * 0.6);\\n --radius-md: calc(var(--radius) * 0.8);\\n --radius-lg: var(--radius);\\n --radius-xl: calc(var(--radius) * 1.4);\\n --radius-2xl: calc(var(--radius) * 1.8);\\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\\n --animate-spin: spin 1s linear infinite;\\n --blur-sm: 8px;\\n --default-transition-duration: 150ms;\\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n --default-font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,\\n \\\"Segoe UI\\\", Roboto, sans-serif;\\n --default-mono-font-family: ui-monospace, SFMono-Regular, \\\"SF Mono\\\", Menlo, Consolas,\\n 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 .collapse {\\n visibility: collapse;\\n }\\n .visible {\\n visibility: visible;\\n }\\n .absolute {\\n position: absolute;\\n }\\n .fixed {\\n position: fixed;\\n }\\n .relative {\\n position: relative;\\n }\\n .static {\\n position: static;\\n }\\n .sticky {\\n position: sticky;\\n }\\n .-inset-px {\\n inset: -1px;\\n }\\n .inset-0 {\\n inset: calc(var(--spacing) * 0);\\n }\\n .inset-x-0 {\\n inset-inline: calc(var(--spacing) * 0);\\n }\\n .inset-y-0 {\\n inset-block: calc(var(--spacing) * 0);\\n }\\n .start {\\n inset-inline-start: var(--spacing);\\n }\\n .start-px {\\n inset-inline-start: 1px;\\n }\\n .end {\\n inset-inline-end: var(--spacing);\\n }\\n .end-0 {\\n inset-inline-end: calc(var(--spacing) * 0);\\n }\\n .end-0\\\\.5 {\\n inset-inline-end: calc(var(--spacing) * 0.5);\\n }\\n .end-2 {\\n inset-inline-end: calc(var(--spacing) * 2);\\n }\\n .top-0 {\\n top: calc(var(--spacing) * 0);\\n }\\n .top-1\\\\/2 {\\n top: calc(1 / 2 * 100%);\\n }\\n .top-2 {\\n top: calc(var(--spacing) * 2);\\n }\\n .top-14 {\\n top: calc(var(--spacing) * 14);\\n }\\n .bottom-0 {\\n bottom: calc(var(--spacing) * 0);\\n }\\n .isolate {\\n isolation: isolate;\\n }\\n .z-10 {\\n z-index: 10;\\n }\\n .z-50 {\\n z-index: 50;\\n }\\n .order-first {\\n order: -9999;\\n }\\n .order-last {\\n order: 9999;\\n }\\n .col-start-1 {\\n grid-column-start: 1;\\n }\\n .col-start-2 {\\n grid-column-start: 2;\\n }\\n .row-start-2 {\\n grid-row-start: 2;\\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 .m-1 {\\n margin: calc(var(--spacing) * 1);\\n }\\n .-mx-px {\\n margin-inline: -1px;\\n }\\n .mx-2 {\\n margin-inline: calc(var(--spacing) * 2);\\n }\\n .mx-auto {\\n margin-inline: auto;\\n }\\n .my-0\\\\.5 {\\n margin-block: calc(var(--spacing) * 0.5);\\n }\\n .my-1 {\\n margin-block: calc(var(--spacing) * 1);\\n }\\n .my-2 {\\n margin-block: calc(var(--spacing) * 2);\\n }\\n .my-3 {\\n margin-block: calc(var(--spacing) * 3);\\n }\\n .my-4 {\\n margin-block: calc(var(--spacing) * 4);\\n }\\n .my-6 {\\n margin-block: calc(var(--spacing) * 6);\\n }\\n .my-8 {\\n margin-block: calc(var(--spacing) * 8);\\n }\\n .-ms-0\\\\.5 {\\n margin-inline-start: calc(var(--spacing) * -0.5);\\n }\\n .ms-auto {\\n margin-inline-start: auto;\\n }\\n .-me-1 {\\n margin-inline-end: calc(var(--spacing) * -1);\\n }\\n .mt-1 {\\n margin-top: calc(var(--spacing) * 1);\\n }\\n .mt-2 {\\n margin-top: calc(var(--spacing) * 2);\\n }\\n .mt-3 {\\n margin-top: calc(var(--spacing) * 3);\\n }\\n .mt-4 {\\n margin-top: calc(var(--spacing) * 4);\\n }\\n .mt-6 {\\n margin-top: calc(var(--spacing) * 6);\\n }\\n .mt-8 {\\n margin-top: calc(var(--spacing) * 8);\\n }\\n .mt-12 {\\n margin-top: calc(var(--spacing) * 12);\\n }\\n .mr-6 {\\n margin-right: calc(var(--spacing) * 6);\\n }\\n .mb-1 {\\n margin-bottom: calc(var(--spacing) * 1);\\n }\\n .mb-2 {\\n margin-bottom: calc(var(--spacing) * 2);\\n }\\n .mb-3 {\\n margin-bottom: calc(var(--spacing) * 3);\\n }\\n .mb-4 {\\n margin-bottom: calc(var(--spacing) * 4);\\n }\\n .mb-8 {\\n margin-bottom: calc(var(--spacing) * 8);\\n }\\n .ml-0\\\\.5 {\\n margin-left: calc(var(--spacing) * 0.5);\\n }\\n .ml-4 {\\n margin-left: calc(var(--spacing) * 4);\\n }\\n .ml-6 {\\n margin-left: calc(var(--spacing) * 6);\\n }\\n .ml-auto {\\n margin-left: auto;\\n }\\n .line-clamp-1 {\\n overflow: hidden;\\n display: -webkit-box;\\n -webkit-box-orient: vertical;\\n -webkit-line-clamp: 1;\\n }\\n .block {\\n display: block;\\n }\\n .contents {\\n display: contents;\\n }\\n .flex {\\n display: flex;\\n }\\n .grid {\\n display: grid;\\n }\\n .hidden {\\n display: none;\\n }\\n .inline {\\n display: inline;\\n }\\n .inline-flex {\\n display: inline-flex;\\n }\\n .list-item {\\n display: list-item;\\n }\\n .table {\\n display: table;\\n }\\n .field-sizing-content {\\n field-sizing: content;\\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-4\\\\.5 {\\n width: calc(var(--spacing) * 4.5);\\n height: calc(var(--spacing) * 4.5);\\n }\\n .size-5 {\\n width: calc(var(--spacing) * 5);\\n height: calc(var(--spacing) * 5);\\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 .size-10 {\\n width: calc(var(--spacing) * 10);\\n height: calc(var(--spacing) * 10);\\n }\\n .size-11 {\\n width: calc(var(--spacing) * 11);\\n height: calc(var(--spacing) * 11);\\n }\\n .size-16 {\\n width: calc(var(--spacing) * 16);\\n height: calc(var(--spacing) * 16);\\n }\\n .size-full {\\n width: 100%;\\n height: 100%;\\n }\\n .h-4 {\\n height: calc(var(--spacing) * 4);\\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-6\\\\.5 {\\n height: calc(var(--spacing) * 6.5);\\n }\\n .h-7 {\\n height: calc(var(--spacing) * 7);\\n }\\n .h-7\\\\.5 {\\n height: calc(var(--spacing) * 7.5);\\n }\\n .h-8 {\\n height: calc(var(--spacing) * 8);\\n }\\n .h-8\\\\.5 {\\n height: calc(var(--spacing) * 8.5);\\n }\\n .h-9 {\\n height: calc(var(--spacing) * 9);\\n }\\n .h-9\\\\.5 {\\n height: calc(var(--spacing) * 9.5);\\n }\\n .h-10 {\\n height: calc(var(--spacing) * 10);\\n }\\n .h-11 {\\n height: calc(var(--spacing) * 11);\\n }\\n .h-14 {\\n height: calc(var(--spacing) * 14);\\n }\\n .h-64 {\\n height: calc(var(--spacing) * 64);\\n }\\n .h-\\\\[26px\\\\] {\\n height: 26px;\\n }\\n .h-\\\\[calc\\\\(100svh-3\\\\.5rem\\\\)\\\\] {\\n height: calc(100svh - 3.5rem);\\n }\\n .h-auto {\\n height: auto;\\n }\\n .h-full {\\n height: 100%;\\n }\\n .h-px {\\n height: 1px;\\n }\\n .max-h-\\\\(--available-height\\\\) {\\n max-height: var(--available-height);\\n }\\n .max-h-105 {\\n max-height: calc(var(--spacing) * 105);\\n }\\n .max-h-\\\\[min\\\\(var\\\\(--available-height\\\\)\\\\,23rem\\\\)\\\\] {\\n max-height: min(var(--available-height), 23rem);\\n }\\n .max-h-full {\\n max-height: 100%;\\n }\\n .min-h-0 {\\n min-height: calc(var(--spacing) * 0);\\n }\\n .min-h-8 {\\n min-height: calc(var(--spacing) * 8);\\n }\\n .min-h-9 {\\n min-height: calc(var(--spacing) * 9);\\n }\\n .min-h-10 {\\n min-height: calc(var(--spacing) * 10);\\n }\\n .min-h-16\\\\.5 {\\n min-height: calc(var(--spacing) * 16.5);\\n }\\n .min-h-17\\\\.5 {\\n min-height: calc(var(--spacing) * 17.5);\\n }\\n .min-h-18\\\\.5 {\\n min-height: calc(var(--spacing) * 18.5);\\n }\\n .min-h-svh {\\n min-height: 100svh;\\n }\\n .w-1\\\\/2 {\\n width: calc(1 / 2 * 100%);\\n }\\n .w-19 {\\n width: calc(var(--spacing) * 19);\\n }\\n .w-32 {\\n width: calc(var(--spacing) * 32);\\n }\\n .w-56 {\\n width: calc(var(--spacing) * 56);\\n }\\n .w-80 {\\n width: calc(var(--spacing) * 80);\\n }\\n .w-\\\\[22px\\\\] {\\n width: 22px;\\n }\\n .w-\\\\[72px\\\\] {\\n width: 72px;\\n }\\n .w-fit {\\n width: fit-content;\\n }\\n .w-full {\\n width: 100%;\\n }\\n .w-max {\\n width: max-content;\\n }\\n .w-px {\\n width: 1px;\\n }\\n .max-w-\\\\(--available-width\\\\) {\\n max-width: var(--available-width);\\n }\\n .max-w-2xl {\\n max-width: var(--container-2xl);\\n }\\n .max-w-3xl {\\n max-width: var(--container-3xl);\\n }\\n .max-w-6xl {\\n max-width: var(--container-6xl);\\n }\\n .max-w-54 {\\n max-width: calc(var(--spacing) * 54);\\n }\\n .max-w-96 {\\n max-width: calc(var(--spacing) * 96);\\n }\\n .max-w-lg {\\n max-width: var(--container-lg);\\n }\\n .max-w-md {\\n max-width: var(--container-md);\\n }\\n .max-w-none {\\n max-width: none;\\n }\\n .max-w-sm {\\n max-width: var(--container-sm);\\n }\\n .max-w-xl {\\n max-width: var(--container-xl);\\n }\\n .min-w-\\\\(--anchor-width\\\\) {\\n min-width: var(--anchor-width);\\n }\\n .min-w-0 {\\n min-width: calc(var(--spacing) * 0);\\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-6\\\\.5 {\\n min-width: calc(var(--spacing) * 6.5);\\n }\\n .min-w-8 {\\n min-width: calc(var(--spacing) * 8);\\n }\\n .min-w-9 {\\n min-width: calc(var(--spacing) * 9);\\n }\\n .min-w-10 {\\n min-width: calc(var(--spacing) * 10);\\n }\\n .min-w-36 {\\n min-width: calc(var(--spacing) * 36);\\n }\\n .flex-1 {\\n flex: 1;\\n }\\n .flex-shrink {\\n flex-shrink: 1;\\n }\\n .shrink-0 {\\n flex-shrink: 0;\\n }\\n .flex-grow {\\n flex-grow: 1;\\n }\\n .table-fixed {\\n table-layout: fixed;\\n }\\n .origin-\\\\(--transform-origin\\\\) {\\n transform-origin: var(--transform-origin);\\n }\\n .origin-center {\\n transform-origin: center;\\n }\\n .-translate-y-1\\\\/2 {\\n --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n .-translate-y-\\\\[calc\\\\(1\\\\.25rem\\\\*var\\\\(--nested-dialogs\\\\)\\\\)\\\\] {\\n --tw-translate-y: calc(calc(1.25rem * var(--nested-dialogs)) * -1);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n .scale-\\\\[calc\\\\(1-0\\\\.1\\\\*var\\\\(--nested-dialogs\\\\)\\\\)\\\\] {\\n scale: calc(1 - 0.1 * var(--nested-dialogs));\\n }\\n .transform {\\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\\n }\\n .animate-spin {\\n animation: var(--animate-spin);\\n }\\n .cursor-default {\\n cursor: default;\\n }\\n .cursor-pointer {\\n cursor: pointer;\\n }\\n .cursor-text {\\n cursor: text;\\n }\\n .resize {\\n resize: both;\\n }\\n .list-decimal {\\n list-style-type: decimal;\\n }\\n .list-disc {\\n list-style-type: disc;\\n }\\n .grid-cols-\\\\[\\\\.75rem_1fr\\\\] {\\n grid-template-columns: .75rem 1fr;\\n }\\n .grid-cols-\\\\[1rem_1fr\\\\] {\\n grid-template-columns: 1rem 1fr;\\n }\\n .grid-rows-\\\\[1fr_auto_3fr\\\\] {\\n grid-template-rows: 1fr auto 3fr;\\n }\\n .flex-col {\\n flex-direction: column;\\n }\\n .flex-col-reverse {\\n flex-direction: column-reverse;\\n }\\n .flex-wrap {\\n flex-wrap: wrap;\\n }\\n .items-baseline {\\n align-items: baseline;\\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-end {\\n justify-content: flex-end;\\n }\\n .justify-start {\\n justify-content: flex-start;\\n }\\n .justify-items-center {\\n justify-items: center;\\n }\\n .gap-1 {\\n gap: calc(var(--spacing) * 1);\\n }\\n .gap-1\\\\.5 {\\n gap: calc(var(--spacing) * 1.5);\\n }\\n .gap-2 {\\n gap: calc(var(--spacing) * 2);\\n }\\n .gap-3 {\\n gap: calc(var(--spacing) * 3);\\n }\\n .gap-4 {\\n gap: calc(var(--spacing) * 4);\\n }\\n .gap-6 {\\n gap: calc(var(--spacing) * 6);\\n }\\n .space-y-1 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-2 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-3 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-4 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-6 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-8 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .-space-x-3 {\\n :where(& > :not(:last-child)) {\\n --tw-space-x-reverse: 0;\\n margin-inline-start: calc(calc(var(--spacing) * -3) * var(--tw-space-x-reverse));\\n margin-inline-end: calc(calc(var(--spacing) * -3) * calc(1 - var(--tw-space-x-reverse)));\\n }\\n }\\n .divide-y {\\n :where(& > :not(:last-child)) {\\n --tw-divide-y-reverse: 0;\\n border-bottom-style: var(--tw-border-style);\\n border-top-style: var(--tw-border-style);\\n border-top-width: calc(1px * var(--tw-divide-y-reverse));\\n border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\\n }\\n }\\n .divide-border {\\n :where(& > :not(:last-child)) {\\n border-color: var(--border);\\n }\\n }\\n .self-stretch {\\n align-self: stretch;\\n }\\n .truncate {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n }\\n .overflow-hidden {\\n overflow: hidden;\\n }\\n .overflow-x-auto {\\n overflow-x: auto;\\n }\\n .overflow-y-auto {\\n overflow-y: auto;\\n }\\n .rounded {\\n border-radius: 0.25rem;\\n }\\n .rounded-2xl {\\n border-radius: calc(var(--radius) * 1.8);\\n }\\n .rounded-\\\\[\\\\.25rem\\\\] {\\n border-radius: .25rem;\\n }\\n .rounded-\\\\[inherit\\\\] {\\n border-radius: inherit;\\n }\\n .rounded-full {\\n border-radius: calc(infinity * 1px);\\n }\\n .rounded-lg {\\n border-radius: var(--radius);\\n }\\n .rounded-md {\\n border-radius: calc(var(--radius) * 0.8);\\n }\\n .rounded-none {\\n border-radius: 0;\\n }\\n .rounded-sm {\\n border-radius: calc(var(--radius) * 0.6);\\n }\\n .rounded-xl {\\n border-radius: calc(var(--radius) * 1.4);\\n }\\n .rounded-t-xl {\\n border-top-left-radius: calc(var(--radius) * 1.4);\\n border-top-right-radius: calc(var(--radius) * 1.4);\\n }\\n .rounded-b-\\\\[calc\\\\(var\\\\(--radius-2xl\\\\)-1px\\\\)\\\\] {\\n border-bottom-right-radius: calc(var(--radius-2xl) - 1px);\\n border-bottom-left-radius: calc(var(--radius-2xl) - 1px);\\n }\\n .border {\\n border-style: var(--tw-border-style);\\n border-width: 1px;\\n }\\n .border-t {\\n border-top-style: var(--tw-border-style);\\n border-top-width: 1px;\\n }\\n .border-r {\\n border-right-style: var(--tw-border-style);\\n border-right-width: 1px;\\n }\\n .border-b {\\n border-bottom-style: var(--tw-border-style);\\n border-bottom-width: 1px;\\n }\\n .border-b-0 {\\n border-bottom-style: var(--tw-border-style);\\n border-bottom-width: 0px;\\n }\\n .border-l {\\n border-left-style: var(--tw-border-style);\\n border-left-width: 1px;\\n }\\n .border-l-2 {\\n border-left-style: var(--tw-border-style);\\n border-left-width: 2px;\\n }\\n .border-dashed {\\n --tw-border-style: dashed;\\n border-style: dashed;\\n }\\n .border-none {\\n --tw-border-style: none;\\n border-style: none;\\n }\\n .border-amber-500\\\\/20 {\\n border-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 20%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n border-color: color-mix(in oklab, var(--color-amber-500) 20%, transparent);\\n }\\n }\\n .border-blue-500\\\\/20 {\\n border-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 20%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n border-color: color-mix(in oklab, var(--color-blue-500) 20%, transparent);\\n }\\n }\\n .border-border {\\n border-color: var(--border);\\n }\\n .border-border\\\\/50 {\\n border-color: var(--border);\\n @supports (color: color-mix(in lab, red, red)) {\\n border-color: color-mix(in oklab, var(--border) 50%, transparent);\\n }\\n }\\n .border-destructive {\\n border-color: var(--destructive);\\n }\\n .border-emerald-500\\\\/20 {\\n border-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 20%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n border-color: color-mix(in oklab, var(--color-emerald-500) 20%, transparent);\\n }\\n }\\n .border-emerald-500\\\\/30 {\\n border-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 30%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n border-color: color-mix(in oklab, var(--color-emerald-500) 30%, transparent);\\n }\\n }\\n .border-input {\\n border-color: var(--input);\\n }\\n .border-primary {\\n border-color: var(--primary);\\n }\\n .border-primary\\\\/30 {\\n border-color: var(--primary);\\n @supports (color: color-mix(in lab, red, red)) {\\n border-color: color-mix(in oklab, var(--primary) 30%, transparent);\\n }\\n }\\n .border-ring {\\n border-color: var(--ring);\\n }\\n .border-transparent {\\n border-color: transparent;\\n }\\n .border-transparent\\\\! {\\n border-color: transparent !important;\\n }\\n .bg-accent\\\\/8 {\\n background-color: var(--accent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--accent) 8%, transparent);\\n }\\n }\\n .bg-amber-500\\\\/5 {\\n background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 5%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-amber-500) 5%, transparent);\\n }\\n }\\n .bg-background {\\n background-color: var(--background);\\n }\\n .bg-background\\\\/80 {\\n background-color: var(--background);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--background) 80%, transparent);\\n }\\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-500 {\\n background-color: var(--color-blue-500);\\n }\\n .bg-blue-500\\\\/5 {\\n background-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 5%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-blue-500) 5%, transparent);\\n }\\n }\\n .bg-border {\\n background-color: var(--border);\\n }\\n .bg-card {\\n background-color: var(--card);\\n }\\n .bg-destructive {\\n background-color: var(--destructive);\\n }\\n .bg-destructive\\\\/8 {\\n background-color: var(--destructive);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--destructive) 8%, transparent);\\n }\\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-500\\\\/5 {\\n background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 5%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-emerald-500) 5%, transparent);\\n }\\n }\\n .bg-emerald-500\\\\/10 {\\n background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 10%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-emerald-500) 10%, transparent);\\n }\\n }\\n .bg-foreground\\\\/20 {\\n background-color: var(--foreground);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--foreground) 20%, transparent);\\n }\\n }\\n .bg-info\\\\/8 {\\n background-color: var(--info);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--info) 8%, transparent);\\n }\\n }\\n .bg-muted {\\n background-color: var(--muted);\\n }\\n .bg-muted\\\\/30 {\\n background-color: var(--muted);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--muted) 30%, transparent);\\n }\\n }\\n .bg-muted\\\\/72 {\\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 .bg-popover {\\n background-color: var(--popover);\\n }\\n .bg-primary {\\n background-color: var(--primary);\\n }\\n .bg-primary\\\\/10 {\\n background-color: var(--primary);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--primary) 10%, transparent);\\n }\\n }\\n .bg-purple\\\\/8 {\\n background-color: var(--purple);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--purple) 8%, transparent);\\n }\\n }\\n .bg-secondary {\\n background-color: var(--secondary);\\n }\\n .bg-success\\\\/8 {\\n background-color: var(--success);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--success) 8%, transparent);\\n }\\n }\\n .bg-transparent\\\\! {\\n background-color: transparent !important;\\n }\\n .bg-warning\\\\/8 {\\n background-color: var(--warning);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--warning) 8%, transparent);\\n }\\n }\\n .mask-t-from-\\\\[calc\\\\(100\\\\%-min\\\\(var\\\\(--fade-size\\\\)\\\\,var\\\\(--scroll-area-overflow-y-start\\\\)\\\\)\\\\)\\\\] {\\n mask-image: var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic);\\n mask-composite: intersect;\\n --tw-mask-linear: var(--tw-mask-left), var(--tw-mask-right), var(--tw-mask-bottom), var(--tw-mask-top);\\n --tw-mask-top: linear-gradient(to top, var(--tw-mask-top-from-color) var(--tw-mask-top-from-position), var(--tw-mask-top-to-color) var(--tw-mask-top-to-position));\\n --tw-mask-top-from-position: calc(100% - min(var(--fade-size), var(--scroll-area-overflow-y-start)));\\n }\\n .mask-r-from-\\\\[calc\\\\(100\\\\%-min\\\\(var\\\\(--fade-size\\\\)\\\\,var\\\\(--scroll-area-overflow-x-end\\\\)\\\\)\\\\)\\\\] {\\n mask-image: var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic);\\n mask-composite: intersect;\\n --tw-mask-linear: var(--tw-mask-left), var(--tw-mask-right), var(--tw-mask-bottom), var(--tw-mask-top);\\n --tw-mask-right: linear-gradient(to right, var(--tw-mask-right-from-color) var(--tw-mask-right-from-position), var(--tw-mask-right-to-color) var(--tw-mask-right-to-position));\\n --tw-mask-right-from-position: calc(100% - min(var(--fade-size), var(--scroll-area-overflow-x-end)));\\n }\\n .mask-b-from-\\\\[calc\\\\(100\\\\%-min\\\\(var\\\\(--fade-size\\\\)\\\\,var\\\\(--scroll-area-overflow-y-end\\\\)\\\\)\\\\)\\\\] {\\n mask-image: var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic);\\n mask-composite: intersect;\\n --tw-mask-linear: var(--tw-mask-left), var(--tw-mask-right), var(--tw-mask-bottom), var(--tw-mask-top);\\n --tw-mask-bottom: linear-gradient(to bottom, var(--tw-mask-bottom-from-color) var(--tw-mask-bottom-from-position), var(--tw-mask-bottom-to-color) var(--tw-mask-bottom-to-position));\\n --tw-mask-bottom-from-position: calc(100% - min(var(--fade-size), var(--scroll-area-overflow-y-end)));\\n }\\n .mask-l-from-\\\\[calc\\\\(100\\\\%-min\\\\(var\\\\(--fade-size\\\\)\\\\,var\\\\(--scroll-area-overflow-x-start\\\\)\\\\)\\\\)\\\\] {\\n mask-image: var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic);\\n mask-composite: intersect;\\n --tw-mask-linear: var(--tw-mask-left), var(--tw-mask-right), var(--tw-mask-bottom), var(--tw-mask-top);\\n --tw-mask-left: linear-gradient(to left, var(--tw-mask-left-from-color) var(--tw-mask-left-from-position), var(--tw-mask-left-to-color) var(--tw-mask-left-to-position));\\n --tw-mask-left-from-position: calc(100% - min(var(--fade-size), var(--scroll-area-overflow-x-start)));\\n }\\n .bg-clip-padding {\\n background-clip: padding-box;\\n }\\n .p-0 {\\n padding: calc(var(--spacing) * 0);\\n }\\n .p-1 {\\n padding: calc(var(--spacing) * 1);\\n }\\n .p-4 {\\n padding: calc(var(--spacing) * 4);\\n }\\n .p-6 {\\n padding: calc(var(--spacing) * 6);\\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-4 {\\n padding-inline: calc(var(--spacing) * 4);\\n }\\n .px-5 {\\n padding-inline: calc(var(--spacing) * 5);\\n }\\n .px-6 {\\n padding-inline: calc(var(--spacing) * 6);\\n }\\n .px-\\\\[calc\\\\(--spacing\\\\(1\\\\)-1px\\\\)\\\\] {\\n padding-inline: calc(calc(var(--spacing) * 1) - 1px);\\n }\\n .px-\\\\[calc\\\\(--spacing\\\\(1\\\\.5\\\\)-1px\\\\)\\\\] {\\n padding-inline: calc(calc(var(--spacing) * 1.5) - 1px);\\n }\\n .px-\\\\[calc\\\\(--spacing\\\\(2\\\\)-1px\\\\)\\\\] {\\n padding-inline: calc(calc(var(--spacing) * 2) - 1px);\\n }\\n .px-\\\\[calc\\\\(--spacing\\\\(2\\\\.5\\\\)-1px\\\\)\\\\] {\\n padding-inline: calc(calc(var(--spacing) * 2.5) - 1px);\\n }\\n .px-\\\\[calc\\\\(--spacing\\\\(3\\\\)-1px\\\\)\\\\] {\\n padding-inline: calc(calc(var(--spacing) * 3) - 1px);\\n }\\n .px-\\\\[calc\\\\(--spacing\\\\(3\\\\.5\\\\)-1px\\\\)\\\\] {\\n padding-inline: calc(calc(var(--spacing) * 3.5) - 1px);\\n }\\n .px-\\\\[calc\\\\(--spacing\\\\(4\\\\)-1px\\\\)\\\\] {\\n padding-inline: calc(calc(var(--spacing) * 4) - 1px);\\n }\\n .py-0\\\\.5 {\\n padding-block: calc(var(--spacing) * 0.5);\\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-2\\\\.5 {\\n padding-block: calc(var(--spacing) * 2.5);\\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-8 {\\n padding-block: calc(var(--spacing) * 8);\\n }\\n .py-12 {\\n padding-block: calc(var(--spacing) * 12);\\n }\\n .py-20 {\\n padding-block: calc(var(--spacing) * 20);\\n }\\n .py-\\\\[calc\\\\(--spacing\\\\(1\\\\)-1px\\\\)\\\\] {\\n padding-block: calc(calc(var(--spacing) * 1) - 1px);\\n }\\n .py-\\\\[calc\\\\(--spacing\\\\(1\\\\.5\\\\)-1px\\\\)\\\\] {\\n padding-block: calc(calc(var(--spacing) * 1.5) - 1px);\\n }\\n .py-\\\\[calc\\\\(--spacing\\\\(2\\\\)-1px\\\\)\\\\] {\\n padding-block: calc(calc(var(--spacing) * 2) - 1px);\\n }\\n .py-\\\\[max\\\\(--spacing\\\\(4\\\\)\\\\,4vh\\\\)\\\\] {\\n padding-block: max(calc(var(--spacing) * 4), 4vh);\\n }\\n .ps-2 {\\n padding-inline-start: calc(var(--spacing) * 2);\\n }\\n .ps-\\\\[calc\\\\(--spacing\\\\(3\\\\)-1px\\\\)\\\\] {\\n padding-inline-start: calc(calc(var(--spacing) * 3) - 1px);\\n }\\n .pe-4 {\\n padding-inline-end: calc(var(--spacing) * 4);\\n }\\n .pe-\\\\[calc\\\\(--spacing\\\\(3\\\\)-1px\\\\)\\\\] {\\n padding-inline-end: calc(calc(var(--spacing) * 3) - 1px);\\n }\\n .pt-0 {\\n padding-top: calc(var(--spacing) * 0);\\n }\\n .pt-2 {\\n padding-top: calc(var(--spacing) * 2);\\n }\\n .pt-4 {\\n padding-top: calc(var(--spacing) * 4);\\n }\\n .pt-20 {\\n padding-top: calc(var(--spacing) * 20);\\n }\\n .pt-\\\\[calc\\\\(--spacing\\\\(3\\\\)-1px\\\\)\\\\] {\\n padding-top: calc(calc(var(--spacing) * 3) - 1px);\\n }\\n .pr-4 {\\n padding-right: calc(var(--spacing) * 4);\\n }\\n .pb-2 {\\n padding-bottom: calc(var(--spacing) * 2);\\n }\\n .pb-6 {\\n padding-bottom: calc(var(--spacing) * 6);\\n }\\n .pb-\\\\[calc\\\\(--spacing\\\\(3\\\\)-1px\\\\)\\\\] {\\n padding-bottom: calc(calc(var(--spacing) * 3) - 1px);\\n }\\n .pl-3 {\\n padding-left: calc(var(--spacing) * 3);\\n }\\n .pl-4 {\\n padding-left: calc(var(--spacing) * 4);\\n }\\n .pl-6 {\\n padding-left: calc(var(--spacing) * 6);\\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,\\n monospace;\\n }\\n .font-sans {\\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,\\n \\\"Segoe UI\\\", Roboto, sans-serif;\\n }\\n .text-2xl {\\n font-size: var(--text-2xl);\\n line-height: var(--tw-leading, var(--text-2xl--line-height));\\n }\\n .text-3xl {\\n font-size: var(--text-3xl);\\n line-height: var(--tw-leading, var(--text-3xl--line-height));\\n }\\n .text-4xl {\\n font-size: var(--text-4xl);\\n line-height: var(--tw-leading, var(--text-4xl--line-height));\\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-lg {\\n font-size: var(--text-lg);\\n line-height: var(--tw-leading, var(--text-lg--line-height));\\n }\\n .text-sm {\\n font-size: var(--text-sm);\\n line-height: var(--tw-leading, var(--text-sm--line-height));\\n }\\n .text-xl {\\n font-size: var(--text-xl);\\n line-height: var(--tw-leading, var(--text-xl--line-height));\\n }\\n .text-xs {\\n font-size: var(--text-xs);\\n line-height: var(--tw-leading, var(--text-xs--line-height));\\n }\\n .text-\\\\[10px\\\\] {\\n font-size: 10px;\\n }\\n .text-\\\\[11px\\\\] {\\n font-size: 11px;\\n }\\n .leading-7 {\\n --tw-leading: calc(var(--spacing) * 7);\\n line-height: calc(var(--spacing) * 7);\\n }\\n .leading-7\\\\.5 {\\n --tw-leading: calc(var(--spacing) * 7.5);\\n line-height: calc(var(--spacing) * 7.5);\\n }\\n .leading-8\\\\.5 {\\n --tw-leading: calc(var(--spacing) * 8.5);\\n line-height: calc(var(--spacing) * 8.5);\\n }\\n .leading-9\\\\.5 {\\n --tw-leading: calc(var(--spacing) * 9.5);\\n line-height: calc(var(--spacing) * 9.5);\\n }\\n .leading-loose {\\n --tw-leading: var(--leading-loose);\\n line-height: var(--leading-loose);\\n }\\n .leading-none {\\n --tw-leading: 1;\\n line-height: 1;\\n }\\n .leading-relaxed {\\n --tw-leading: var(--leading-relaxed);\\n line-height: var(--leading-relaxed);\\n }\\n .font-bold {\\n --tw-font-weight: var(--font-weight-bold);\\n font-weight: var(--font-weight-bold);\\n }\\n .font-medium {\\n --tw-font-weight: var(--font-weight-medium);\\n font-weight: var(--font-weight-medium);\\n }\\n .font-semibold {\\n --tw-font-weight: var(--font-weight-semibold);\\n font-weight: var(--font-weight-semibold);\\n }\\n .tracking-tight {\\n --tw-tracking: var(--tracking-tight);\\n letter-spacing: var(--tracking-tight);\\n }\\n .tracking-wide {\\n --tw-tracking: var(--tracking-wide);\\n letter-spacing: var(--tracking-wide);\\n }\\n .tracking-widest {\\n --tw-tracking: var(--tracking-widest);\\n letter-spacing: var(--tracking-widest);\\n }\\n .text-balance {\\n text-wrap: balance;\\n }\\n .whitespace-nowrap {\\n white-space: nowrap;\\n }\\n .text-accent-foreground {\\n color: var(--accent-foreground);\\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-card-foreground {\\n color: var(--card-foreground);\\n }\\n .text-destructive {\\n color: var(--destructive);\\n }\\n .text-destructive-foreground {\\n color: var(--destructive-foreground);\\n }\\n .text-emerald-600 {\\n color: var(--color-emerald-600);\\n }\\n .text-emerald-700 {\\n color: var(--color-emerald-700);\\n }\\n .text-foreground {\\n color: var(--foreground);\\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\\\\/72 {\\n color: var(--muted-foreground);\\n @supports (color: color-mix(in lab, red, red)) {\\n color: color-mix(in oklab, var(--muted-foreground) 72%, transparent);\\n }\\n }\\n .text-popover-foreground {\\n color: var(--popover-foreground);\\n }\\n .text-primary {\\n color: var(--primary);\\n }\\n .text-primary-foreground {\\n color: var(--primary-foreground);\\n }\\n .text-purple-foreground {\\n color: var(--purple-foreground);\\n }\\n .text-secondary-foreground {\\n color: var(--secondary-foreground);\\n }\\n .text-success-foreground {\\n color: var(--success-foreground);\\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 .uppercase {\\n text-transform: uppercase;\\n }\\n .italic {\\n font-style: italic;\\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 .antialiased {\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n }\\n .opacity-0 {\\n opacity: 0%;\\n }\\n .opacity-50 {\\n opacity: 50%;\\n }\\n .opacity-80 {\\n opacity: 80%;\\n }\\n .opacity-\\\\[calc\\\\(1-0\\\\.1\\\\*var\\\\(--nested-dialogs\\\\)\\\\)\\\\] {\\n opacity: calc(1 - 0.1 * var(--nested-dialogs));\\n }\\n .opacity-\\\\[calc\\\\(1-var\\\\(--nested-dialogs\\\\)\\\\)\\\\] {\\n opacity: calc(1 - var(--nested-dialogs));\\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-md\\\\/5 {\\n --tw-shadow-alpha: 5%;\\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%)), 0 2px 4px -2px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%));\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n .shadow-xs\\\\/5 {\\n --tw-shadow-alpha: 5%;\\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.05) l a b / 5%));\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n .shadow {\\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n .shadow-none {\\n --tw-shadow: 0 0 #0000;\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n .shadow-xs {\\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n .ring {\\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n .ring-1 {\\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 .ring-2 {\\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 .shadow-destructive\\\\/24 {\\n --tw-shadow-color: var(--destructive);\\n @supports (color: color-mix(in lab, red, red)) {\\n --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--destructive) 24%, transparent) var(--tw-shadow-alpha), transparent);\\n }\\n }\\n .shadow-primary\\\\/24 {\\n --tw-shadow-color: var(--primary);\\n @supports (color: color-mix(in lab, red, red)) {\\n --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--primary) 24%, transparent) var(--tw-shadow-alpha), transparent);\\n }\\n }\\n .ring-background {\\n --tw-ring-color: var(--background);\\n }\\n .ring-ring {\\n --tw-ring-color: var(--ring);\\n }\\n .ring-ring\\\\/24 {\\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) 24%, transparent);\\n }\\n }\\n .ring-ring\\\\/50 {\\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) 50%, transparent);\\n }\\n }\\n .outline {\\n outline-style: var(--tw-outline-style);\\n outline-width: 1px;\\n }\\n .invert {\\n --tw-invert: invert(100%);\\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-\\\\[color\\\\,background-color\\\\,box-shadow\\\\,opacity\\\\] {\\n transition-property: color,background-color,box-shadow,opacity;\\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-\\\\[scale\\\\,opacity\\\\,translate\\\\] {\\n transition-property: scale,opacity,translate;\\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-\\\\[scale\\\\,opacity\\\\] {\\n transition-property: scale,opacity;\\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-\\\\[top\\\\,left\\\\,right\\\\,bottom\\\\,transform\\\\] {\\n transition-property: top,left,right,bottom,transform;\\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-all {\\n transition-property: all;\\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-opacity {\\n transition-property: opacity;\\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 .transition-transform {\\n transition-property: transform, translate, scale, rotate;\\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\\n transition-duration: var(--tw-duration, var(--default-transition-duration));\\n }\\n .delay-300 {\\n transition-delay: 300ms;\\n }\\n .duration-200 {\\n --tw-duration: 200ms;\\n transition-duration: 200ms;\\n }\\n .ease-in-out {\\n --tw-ease: var(--ease-in-out);\\n transition-timing-function: var(--ease-in-out);\\n }\\n .will-change-transform {\\n will-change: transform;\\n }\\n .delay-300 {\\n animation-delay: calc(300*1ms);\\n animation-delay: .3s;\\n --tw-animation-delay: calc(300*1ms);\\n --tw-animation-delay: .3s;\\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 .\\\\[--fade-size\\\\:1\\\\.5rem\\\\] {\\n --fade-size: 1.5rem;\\n }\\n .\\\\[clip-path\\\\:inset\\\\(0_1px\\\\)\\\\] {\\n clip-path: inset(0 1px);\\n }\\n .\\\\[counter-reset\\\\:step\\\\] {\\n counter-reset: step;\\n }\\n .\\\\[transition\\\\:background-color_5000000s_ease-in-out_0s\\\\] {\\n transition: background-color 5000000s ease-in-out 0s;\\n }\\n .running {\\n animation-play-state: running;\\n }\\n .not-empty\\\\:scroll-py-1 {\\n &:not(*:empty) {\\n scroll-padding-block: calc(var(--spacing) * 1);\\n }\\n }\\n .not-empty\\\\:scroll-py-2 {\\n &:not(*:empty) {\\n scroll-padding-block: calc(var(--spacing) * 2);\\n }\\n }\\n .not-empty\\\\:p-1 {\\n &:not(*:empty) {\\n padding: calc(var(--spacing) * 1);\\n }\\n }\\n .not-empty\\\\:p-2 {\\n &:not(*:empty) {\\n padding: calc(var(--spacing) * 2);\\n }\\n }\\n .not-empty\\\\:py-6 {\\n &:not(*:empty) {\\n padding-block: calc(var(--spacing) * 6);\\n }\\n }\\n .not-disabled\\\\:inset-shadow-\\\\[0_1px_--theme\\\\(--color-white\\\\/16\\\\%\\\\)\\\\] {\\n &:not(*:disabled) {\\n --tw-inset-shadow: inset 0 1px var(--tw-inset-shadow-color, color-mix(in srgb, #fff 16%, transparent));\\n @supports (color: color-mix(in lab, red, red)) {\\n --tw-inset-shadow: inset 0 1px var(--tw-inset-shadow-color, color-mix(in oklab, var(--color-white) 16%, 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 .not-in-data-\\\\[slot\\\\=field\\\\]\\\\:mb-2 {\\n &:not(:where(*[data-slot=\\\"field\\\"]) *) {\\n margin-bottom: calc(var(--spacing) * 2);\\n }\\n }\\n .not-has-\\\\[\\\\+\\\\[data-slot\\\\=command-footer\\\\]\\\\]\\\\:-mb-px {\\n &:not(*:has(+[data-slot=command-footer])) {\\n margin-bottom: -1px;\\n }\\n }\\n .not-has-\\\\[\\\\+\\\\[data-slot\\\\=command-footer\\\\]\\\\]\\\\:rounded-b-2xl {\\n &:not(*:has(+[data-slot=command-footer])) {\\n border-bottom-right-radius: calc(var(--radius) * 1.8);\\n border-bottom-left-radius: calc(var(--radius) * 1.8);\\n }\\n }\\n .not-has-\\\\[\\\\+\\\\[data-slot\\\\=command-footer\\\\]\\\\]\\\\:\\\\[clip-path\\\\:inset\\\\(0_1px_1px_1px_round_0_0_calc\\\\(var\\\\(--radius-2xl\\\\)-1px\\\\)_calc\\\\(var\\\\(--radius-2xl\\\\)-1px\\\\)\\\\)\\\\] {\\n &:not(*:has(+[data-slot=command-footer])) {\\n clip-path: inset(0 1px 1px 1px round 0 0 calc(var(--radius-2xl) - 1px) calc(var(--radius-2xl) - 1px));\\n }\\n }\\n .not-has-\\\\[\\\\>\\\\*\\\\.w-full\\\\]\\\\:w-fit {\\n &:not(*:has(>*.w-full)) {\\n width: fit-content;\\n }\\n }\\n .not-dark\\\\:bg-clip-padding {\\n &:not(*:is(.dark *)) {\\n background-clip: padding-box;\\n }\\n }\\n .not-\\\\[class\\\\*\\\\=\\\\'w-\\\\'\\\\]\\\\:min-w-32 {\\n &:not(*:is(class*='w-')) {\\n min-width: calc(var(--spacing) * 32);\\n }\\n }\\n .group-hover\\\\:translate-x-0\\\\.5 {\\n &:is(:where(.group):hover *) {\\n @media (hover: hover) {\\n --tw-translate-x: calc(var(--spacing) * 0.5);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n }\\n }\\n .group-hover\\\\:opacity-100 {\\n &:is(:where(.group):hover *) {\\n @media (hover: hover) {\\n opacity: 100%;\\n }\\n }\\n }\\n .file\\\\:me-3 {\\n &::file-selector-button {\\n margin-inline-end: calc(var(--spacing) * 3);\\n }\\n }\\n .file\\\\:bg-transparent {\\n &::file-selector-button {\\n background-color: transparent;\\n }\\n }\\n .file\\\\:text-sm {\\n &::file-selector-button {\\n font-size: var(--text-sm);\\n line-height: var(--tw-leading, var(--text-sm--line-height));\\n }\\n }\\n .file\\\\:font-medium {\\n &::file-selector-button {\\n --tw-font-weight: var(--font-weight-medium);\\n font-weight: var(--font-weight-medium);\\n }\\n }\\n .file\\\\:text-foreground {\\n &::file-selector-button {\\n color: var(--foreground);\\n }\\n }\\n .placeholder\\\\:text-muted-foreground {\\n &::placeholder {\\n color: var(--muted-foreground);\\n }\\n }\\n .placeholder\\\\:text-muted-foreground\\\\/72 {\\n &::placeholder {\\n color: var(--muted-foreground);\\n @supports (color: color-mix(in lab, red, red)) {\\n color: color-mix(in oklab, var(--muted-foreground) 72%, transparent);\\n }\\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\\\\:inset-x-px {\\n &::before {\\n content: var(--tw-content);\\n inset-inline: 1px;\\n }\\n }\\n .before\\\\:top-px {\\n &::before {\\n content: var(--tw-content);\\n top: 1px;\\n }\\n }\\n .before\\\\:bottom-px {\\n &::before {\\n content: var(--tw-content);\\n bottom: 1px;\\n }\\n }\\n .before\\\\:left-1\\\\.5 {\\n &::before {\\n content: var(--tw-content);\\n left: calc(var(--spacing) * 1.5);\\n }\\n }\\n .before\\\\:hidden {\\n &::before {\\n content: var(--tw-content);\\n display: none;\\n }\\n }\\n .before\\\\:h-\\\\[200\\\\%\\\\] {\\n &::before {\\n content: var(--tw-content);\\n height: 200%;\\n }\\n }\\n .before\\\\:rounded-\\\\[3px\\\\] {\\n &::before {\\n content: var(--tw-content);\\n border-radius: 3px;\\n }\\n }\\n .before\\\\:rounded-\\\\[calc\\\\(var\\\\(--radius-2xl\\\\)-1px\\\\)\\\\] {\\n &::before {\\n content: var(--tw-content);\\n border-radius: calc(var(--radius-2xl) - 1px);\\n }\\n }\\n .before\\\\:rounded-\\\\[calc\\\\(var\\\\(--radius-lg\\\\)-1px\\\\)\\\\] {\\n &::before {\\n content: var(--tw-content);\\n border-radius: calc(var(--radius-lg) - 1px);\\n }\\n }\\n .before\\\\:rounded-\\\\[calc\\\\(var\\\\(--radius-md\\\\)-1px\\\\)\\\\] {\\n &::before {\\n content: var(--tw-content);\\n border-radius: calc(var(--radius-md) - 1px);\\n }\\n }\\n .before\\\\:rounded-t-\\\\[calc\\\\(var\\\\(--radius-lg\\\\)-1px\\\\)\\\\] {\\n &::before {\\n content: var(--tw-content);\\n border-top-left-radius: calc(var(--radius-lg) - 1px);\\n border-top-right-radius: calc(var(--radius-lg) - 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\\\\:rounded-b-\\\\[calc\\\\(var\\\\(--radius-lg\\\\)-1px\\\\)\\\\] {\\n &::before {\\n content: var(--tw-content);\\n border-bottom-right-radius: calc(var(--radius-lg) - 1px);\\n border-bottom-left-radius: calc(var(--radius-lg) - 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\\\\:bg-linear-to-b {\\n &::before {\\n content: var(--tw-content);\\n --tw-gradient-position: to bottom;\\n @supports (background-image: linear-gradient(in lab, red, red)) {\\n --tw-gradient-position: to bottom in oklab;\\n }\\n background-image: linear-gradient(var(--tw-gradient-stops));\\n }\\n }\\n .before\\\\:bg-linear-to-t {\\n &::before {\\n content: var(--tw-content);\\n --tw-gradient-position: to top;\\n @supports (background-image: linear-gradient(in lab, red, red)) {\\n --tw-gradient-position: to top in oklab;\\n }\\n background-image: linear-gradient(var(--tw-gradient-stops));\\n }\\n }\\n .before\\\\:from-popover {\\n &::before {\\n content: var(--tw-content);\\n --tw-gradient-from: var(--popover);\\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\\n }\\n }\\n .before\\\\:from-50\\\\% {\\n &::before {\\n content: var(--tw-content);\\n --tw-gradient-from-position: 50%;\\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 .before\\\\:content-\\\\[\\\\'·\\\\'\\\\] {\\n &::before {\\n --tw-content: '·';\\n content: var(--tw-content);\\n }\\n }\\n .not-has-disabled\\\\:not-has-focus-visible\\\\:not-has-aria-invalid\\\\:before\\\\:shadow-\\\\[0_1px_--theme\\\\(--color-black\\\\/4\\\\%\\\\)\\\\] {\\n &:not(*:has(*:disabled)) {\\n &:not(*:has(*:focus-visible)) {\\n &:not(*:has(*[aria-invalid=\\\"true\\\"])) {\\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 }\\n }\\n }\\n .not-has-\\\\[input\\\\:disabled\\\\,textarea\\\\:disabled\\\\]\\\\:not-has-\\\\[input\\\\:focus-visible\\\\,textarea\\\\:focus-visible\\\\]\\\\:not-has-\\\\[input\\\\[aria-invalid\\\\]\\\\,textarea\\\\[aria-invalid\\\\]\\\\]\\\\:before\\\\:shadow-\\\\[0_1px_--theme\\\\(--color-black\\\\/4\\\\%\\\\)\\\\] {\\n &:not(*:has(*:is(input:disabled,textarea:disabled))) {\\n &:not(*:has(*:is(input:focus-visible,textarea:focus-visible))) {\\n &:not(*:has(*:is(input[aria-invalid],textarea[aria-invalid]))) {\\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 }\\n }\\n }\\n .not-disabled\\\\:not-active\\\\:not-data-pressed\\\\:before\\\\:shadow-\\\\[0_1px_--theme\\\\(--color-black\\\\/4\\\\%\\\\)\\\\] {\\n &:not(*:disabled) {\\n &:not(*:active) {\\n &:not(*[data-pressed]) {\\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 }\\n }\\n }\\n .not-data-disabled\\\\:not-focus-visible\\\\:not-aria-invalid\\\\:not-data-pressed\\\\:before\\\\:shadow-\\\\[0_1px_--theme\\\\(--color-black\\\\/4\\\\%\\\\)\\\\] {\\n &:not(*:where([data-disabled=\\\"true\\\"]), *:where([data-disabled]:not([data-disabled=\\\"false\\\"]))) {\\n &:not(*:focus-visible) {\\n &:not(*[aria-invalid=\\\"true\\\"]) {\\n &:not(*[data-pressed]) {\\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 }\\n }\\n }\\n }\\n .not-data-disabled\\\\:not-data-checked\\\\:not-aria-invalid\\\\:before\\\\:shadow-\\\\[0_1px_--theme\\\\(--color-black\\\\/4\\\\%\\\\)\\\\] {\\n &:not(*:where([data-disabled=\\\"true\\\"]), *:where([data-disabled]:not([data-disabled=\\\"false\\\"]))) {\\n &:not(*:where([data-state=\\\"checked\\\"]), *:where([data-checked]:not([data-checked=\\\"false\\\"]))) {\\n &:not(*[aria-invalid=\\\"true\\\"]) {\\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 }\\n }\\n }\\n .last\\\\:hidden {\\n &:last-child {\\n display: none;\\n }\\n }\\n .empty\\\\:m-0 {\\n &:empty {\\n margin: calc(var(--spacing) * 0);\\n }\\n }\\n .empty\\\\:p-0 {\\n &:empty {\\n padding: calc(var(--spacing) * 0);\\n }\\n }\\n .hover\\\\:border-destructive\\\\/32 {\\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) 32%, transparent);\\n }\\n }\\n }\\n }\\n .hover\\\\:border-foreground\\\\/20 {\\n &:hover {\\n @media (hover: hover) {\\n border-color: var(--foreground);\\n @supports (color: color-mix(in lab, red, red)) {\\n border-color: color-mix(in oklab, var(--foreground) 20%, 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-accent\\\\/50 {\\n &:hover {\\n @media (hover: hover) {\\n background-color: var(--accent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--accent) 50%, transparent);\\n }\\n }\\n }\\n }\\n .hover\\\\:bg-destructive\\\\/4 {\\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) 4%, transparent);\\n }\\n }\\n }\\n }\\n .hover\\\\:bg-destructive\\\\/20 {\\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) 20%, 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-muted {\\n &:hover {\\n @media (hover: hover) {\\n background-color: var(--muted);\\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\\\\/80 {\\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) 80%, 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-destructive {\\n &:hover {\\n @media (hover: hover) {\\n color: var(--destructive);\\n }\\n }\\n }\\n .hover\\\\:text-foreground {\\n &:hover {\\n @media (hover: hover) {\\n color: var(--foreground);\\n }\\n }\\n }\\n .hover\\\\:text-primary {\\n &:hover {\\n @media (hover: hover) {\\n color: var(--primary);\\n }\\n }\\n }\\n .hover\\\\:underline {\\n &:hover {\\n @media (hover: hover) {\\n text-decoration-line: underline;\\n }\\n }\\n }\\n .hover\\\\:opacity-100 {\\n &:hover {\\n @media (hover: hover) {\\n opacity: 100%;\\n }\\n }\\n }\\n .focus\\\\:border-ring {\\n &:focus {\\n border-color: var(--ring);\\n }\\n }\\n .focus\\\\:ring-1 {\\n &:focus {\\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 }\\n .focus\\\\:ring-ring\\\\/50 {\\n &:focus {\\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) 50%, transparent);\\n }\\n }\\n }\\n .focus\\\\:outline-none {\\n &:focus {\\n --tw-outline-style: none;\\n outline-style: none;\\n }\\n }\\n .focus-visible\\\\:border-destructive\\\\/40 {\\n &:focus-visible {\\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 .focus-visible\\\\:border-ring {\\n &:focus-visible {\\n border-color: var(--ring);\\n }\\n }\\n .focus-visible\\\\:ring-1 {\\n &:focus-visible {\\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 }\\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-destructive\\\\/20 {\\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 .focus-visible\\\\:ring-ring {\\n &:focus-visible {\\n --tw-ring-color: var(--ring);\\n }\\n }\\n .focus-visible\\\\:ring-ring\\\\/50 {\\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) 50%, 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 .active\\\\:translate-y-px {\\n &:active {\\n --tw-translate-y: 1px;\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n }\\n .disabled\\\\:pointer-events-none {\\n &:disabled {\\n pointer-events: none;\\n }\\n }\\n .disabled\\\\:opacity-50 {\\n &:disabled {\\n opacity: 50%;\\n }\\n }\\n .disabled\\\\:opacity-64 {\\n &:disabled {\\n opacity: 64%;\\n }\\n }\\n .in-data-has-overflow-y\\\\:pe-3 {\\n :where(*[data-has-overflow-y]) & {\\n padding-inline-end: calc(var(--spacing) * 3);\\n }\\n }\\n .in-data-placeholder\\\\:text-muted-foreground\\\\/72 {\\n :where(*[data-placeholder]) & {\\n color: var(--muted-foreground);\\n @supports (color: color-mix(in lab, red, red)) {\\n color: color-mix(in oklab, var(--muted-foreground) 72%, transparent);\\n }\\n }\\n }\\n .in-data-\\\\[side\\\\=none\\\\]\\\\:min-w-\\\\[calc\\\\(var\\\\(--anchor-width\\\\)\\\\+1\\\\.25rem\\\\)\\\\] {\\n :where(*[data-side=\\\"none\\\"]) & {\\n min-width: calc(var(--anchor-width) + 1.25rem);\\n }\\n }\\n .in-\\\\[\\\\[data-slot\\\\=button\\\\]\\\\:hover\\\\]\\\\:translate-x-0\\\\.5 {\\n :where(*:is([data-slot=button]:hover)) & {\\n --tw-translate-x: calc(var(--spacing) * 0.5);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n }\\n .in-\\\\[\\\\[data-slot\\\\=dialog-popup\\\\]\\\\:has\\\\(\\\\[data-slot\\\\=dialog-footer\\\\]\\\\:not\\\\(\\\\.border-t\\\\)\\\\)\\\\]\\\\:pb-1 {\\n :where(*:is([data-slot=dialog-popup]:has([data-slot=dialog-footer]:not(.border-t)))) & {\\n padding-bottom: calc(var(--spacing) * 1);\\n }\\n }\\n .in-\\\\[\\\\[data-slot\\\\=dialog-popup\\\\]\\\\:has\\\\(\\\\[data-slot\\\\=dialog-header\\\\]\\\\)\\\\]\\\\:pt-1 {\\n :where(*:is([data-slot=dialog-popup]:has([data-slot=dialog-header]))) & {\\n padding-top: calc(var(--spacing) * 1);\\n }\\n }\\n .in-\\\\[\\\\[data-slot\\\\=dialog-popup\\\\]\\\\:has\\\\(\\\\[data-slot\\\\=dialog-panel\\\\]\\\\)\\\\]\\\\:pt-3 {\\n :where(*:is([data-slot=dialog-popup]:has([data-slot=dialog-panel]))) & {\\n padding-top: calc(var(--spacing) * 3);\\n }\\n }\\n .in-\\\\[\\\\[data-slot\\\\=dialog-popup\\\\]\\\\:has\\\\(\\\\[data-slot\\\\=dialog-panel\\\\]\\\\)\\\\]\\\\:pb-3 {\\n :where(*:is([data-slot=dialog-popup]:has([data-slot=dialog-panel]))) & {\\n padding-bottom: calc(var(--spacing) * 3);\\n }\\n }\\n .not-has-disabled\\\\:has-not-focus-visible\\\\:not-has-aria-invalid\\\\:before\\\\:shadow-\\\\[0_1px_--theme\\\\(--color-black\\\\/4\\\\%\\\\)\\\\] {\\n &:not(*:has(*:disabled)) {\\n &:has(*:not(*:focus-visible)) {\\n &:not(*:has(*[aria-invalid=\\\"true\\\"])) {\\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 }\\n }\\n }\\n .has-autofill\\\\:bg-foreground\\\\/4 {\\n &:has(*:autofill) {\\n background-color: var(--foreground);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--foreground) 4%, transparent);\\n }\\n }\\n }\\n .has-focus-visible\\\\:border-ring {\\n &:has(*:focus-visible) {\\n border-color: var(--ring);\\n }\\n }\\n .has-focus-visible\\\\:ring-0 {\\n &:has(*:focus-visible) {\\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + 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 .has-focus-visible\\\\:ring-\\\\[3px\\\\] {\\n &:has(*: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 .has-disabled\\\\:opacity-64 {\\n &:has(*:disabled) {\\n opacity: 64%;\\n }\\n }\\n .has-aria-invalid\\\\:border-destructive\\\\/36 {\\n &:has(*[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) 36%, transparent);\\n }\\n }\\n }\\n .has-focus-visible\\\\:has-aria-invalid\\\\:border-destructive\\\\/64 {\\n &:has(*:focus-visible) {\\n &:has(*[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) 64%, transparent);\\n }\\n }\\n }\\n }\\n .has-focus-visible\\\\:has-aria-invalid\\\\:ring-destructive\\\\/16 {\\n &:has(*:focus-visible) {\\n &:has(*[aria-invalid=\\\"true\\\"]) {\\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) 16%, transparent);\\n }\\n }\\n }\\n }\\n .has-data-\\\\[align\\\\=block-end\\\\]\\\\:h-auto {\\n &:has(*[data-align=\\\"block-end\\\"]) {\\n height: auto;\\n }\\n }\\n .has-data-\\\\[align\\\\=block-end\\\\]\\\\:flex-col {\\n &:has(*[data-align=\\\"block-end\\\"]) {\\n flex-direction: column;\\n }\\n }\\n .has-data-\\\\[align\\\\=block-start\\\\]\\\\:h-auto {\\n &:has(*[data-align=\\\"block-start\\\"]) {\\n height: auto;\\n }\\n }\\n .has-data-\\\\[align\\\\=block-start\\\\]\\\\:flex-col {\\n &:has(*[data-align=\\\"block-start\\\"]) {\\n flex-direction: column;\\n }\\n }\\n .has-data-\\\\[icon\\\\=inline-end\\\\]\\\\:pr-1\\\\.5 {\\n &:has(*[data-icon=\\\"inline-end\\\"]) {\\n padding-right: calc(var(--spacing) * 1.5);\\n }\\n }\\n .has-data-\\\\[icon\\\\=inline-end\\\\]\\\\:pr-2 {\\n &:has(*[data-icon=\\\"inline-end\\\"]) {\\n padding-right: calc(var(--spacing) * 2);\\n }\\n }\\n .has-data-\\\\[icon\\\\=inline-end\\\\]\\\\:pr-3 {\\n &:has(*[data-icon=\\\"inline-end\\\"]) {\\n padding-right: calc(var(--spacing) * 3);\\n }\\n }\\n .has-data-\\\\[icon\\\\=inline-start\\\\]\\\\:pl-1\\\\.5 {\\n &:has(*[data-icon=\\\"inline-start\\\"]) {\\n padding-left: calc(var(--spacing) * 1.5);\\n }\\n }\\n .has-data-\\\\[icon\\\\=inline-start\\\\]\\\\:pl-2 {\\n &:has(*[data-icon=\\\"inline-start\\\"]) {\\n padding-left: calc(var(--spacing) * 2);\\n }\\n }\\n .has-data-\\\\[icon\\\\=inline-start\\\\]\\\\:pl-3 {\\n &:has(*[data-icon=\\\"inline-start\\\"]) {\\n padding-left: calc(var(--spacing) * 3);\\n }\\n }\\n .has-\\\\[\\\\:disabled\\\\,\\\\:focus-visible\\\\,\\\\[aria-invalid\\\\]\\\\]\\\\:shadow-none {\\n &:has(*:is(:disabled,:focus-visible,[aria-invalid])) {\\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 }\\n .has-\\\\[input\\\\:disabled\\\\,textarea\\\\:disabled\\\\]\\\\:opacity-64 {\\n &:has(*:is(input:disabled,textarea:disabled)) {\\n opacity: 64%;\\n }\\n }\\n .has-\\\\[input\\\\:disabled\\\\,textarea\\\\:disabled\\\\,input\\\\:focus-visible\\\\,textarea\\\\:focus-visible\\\\,input\\\\[aria-invalid\\\\]\\\\,textarea\\\\[aria-invalid\\\\]\\\\]\\\\:shadow-none {\\n &:has(*:is(input:disabled,textarea:disabled,input:focus-visible,textarea:focus-visible,input[aria-invalid],textarea[aria-invalid])) {\\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 }\\n .has-\\\\[input\\\\:focus-visible\\\\,textarea\\\\:focus-visible\\\\]\\\\:border-ring {\\n &:has(*:is(input:focus-visible,textarea:focus-visible)) {\\n border-color: var(--ring);\\n }\\n }\\n .has-\\\\[input\\\\:focus-visible\\\\,textarea\\\\:focus-visible\\\\]\\\\:ring-\\\\[3px\\\\] {\\n &:has(*:is(input:focus-visible,textarea: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 .has-\\\\[input\\\\[aria-invalid\\\\]\\\\,textarea\\\\[aria-invalid\\\\]\\\\]\\\\:border-destructive\\\\/36 {\\n &:has(*:is(input[aria-invalid],textarea[aria-invalid])) {\\n border-color: var(--destructive);\\n @supports (color: color-mix(in lab, red, red)) {\\n border-color: color-mix(in oklab, var(--destructive) 36%, transparent);\\n }\\n }\\n }\\n .has-\\\\[input\\\\:focus-visible\\\\,textarea\\\\:focus-visible\\\\]\\\\:has-\\\\[input\\\\[aria-invalid\\\\]\\\\,textarea\\\\[aria-invalid\\\\]\\\\]\\\\:border-destructive\\\\/64 {\\n &:has(*:is(input:focus-visible,textarea:focus-visible)) {\\n &:has(*:is(input[aria-invalid],textarea[aria-invalid])) {\\n border-color: var(--destructive);\\n @supports (color: color-mix(in lab, red, red)) {\\n border-color: color-mix(in oklab, var(--destructive) 64%, transparent);\\n }\\n }\\n }\\n }\\n .has-\\\\[input\\\\:focus-visible\\\\,textarea\\\\:focus-visible\\\\]\\\\:has-\\\\[input\\\\[aria-invalid\\\\]\\\\,textarea\\\\[aria-invalid\\\\]\\\\]\\\\:ring-destructive\\\\/16 {\\n &:has(*:is(input:focus-visible,textarea:focus-visible)) {\\n &:has(*:is(input[aria-invalid],textarea[aria-invalid])) {\\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) 16%, transparent);\\n }\\n }\\n }\\n }\\n .has-\\\\[textarea\\\\]\\\\:h-auto {\\n &:has(*:is(textarea)) {\\n height: auto;\\n }\\n }\\n .has-\\\\[\\\\+\\\\[data-size\\\\=sm\\\\]\\\\]\\\\:ps-\\\\[calc\\\\(--spacing\\\\(2\\\\.5\\\\)-1px\\\\)\\\\] {\\n &:has(+[data-size=sm]) {\\n padding-inline-start: calc(calc(var(--spacing) * 2.5) - 1px);\\n }\\n }\\n .has-\\\\[\\\\+\\\\[data-slot\\\\=autocomplete-clear\\\\]\\\\]\\\\:hidden {\\n &:has(+[data-slot=autocomplete-clear]) {\\n display: none;\\n }\\n }\\n .has-\\\\[\\\\>\\\\:last-child\\\\[data-slot\\\\=badge\\\\]\\\\]\\\\:-ms-1\\\\.5 {\\n &:has(>:last-child[data-slot=badge]) {\\n margin-inline-start: calc(var(--spacing) * -1.5);\\n }\\n }\\n .has-\\\\[\\\\>\\\\:last-child\\\\[data-slot\\\\=badge\\\\]\\\\]\\\\:-me-1\\\\.5 {\\n &:has(>:last-child[data-slot=badge]) {\\n margin-inline-end: calc(var(--spacing) * -1.5);\\n }\\n }\\n .has-\\\\[\\\\>button\\\\]\\\\:-ms-2 {\\n &:has(>button) {\\n margin-inline-start: calc(var(--spacing) * -2);\\n }\\n }\\n .has-\\\\[\\\\>button\\\\]\\\\:-me-2 {\\n &:has(>button) {\\n margin-inline-end: calc(var(--spacing) * -2);\\n }\\n }\\n .has-\\\\[\\\\>kbd\\\\:last-child\\\\]\\\\:ms-\\\\[-0\\\\.35rem\\\\] {\\n &:has(>kbd:last-child) {\\n margin-inline-start: -0.35rem;\\n }\\n }\\n .has-\\\\[\\\\>kbd\\\\:last-child\\\\]\\\\:me-\\\\[-0\\\\.35rem\\\\] {\\n &:has(>kbd:last-child) {\\n margin-inline-end: -0.35rem;\\n }\\n }\\n .aria-expanded\\\\:bg-muted {\\n &[aria-expanded=\\\"true\\\"] {\\n background-color: var(--muted);\\n }\\n }\\n .aria-expanded\\\\:bg-secondary {\\n &[aria-expanded=\\\"true\\\"] {\\n background-color: var(--secondary);\\n }\\n }\\n .aria-expanded\\\\:text-foreground {\\n &[aria-expanded=\\\"true\\\"] {\\n color: var(--foreground);\\n }\\n }\\n .aria-expanded\\\\:text-secondary-foreground {\\n &[aria-expanded=\\\"true\\\"] {\\n color: var(--secondary-foreground);\\n }\\n }\\n .aria-invalid\\\\:border-destructive {\\n &[aria-invalid=\\\"true\\\"] {\\n border-color: var(--destructive);\\n }\\n }\\n .aria-invalid\\\\:border-destructive\\\\/36 {\\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) 36%, transparent);\\n }\\n }\\n }\\n .aria-invalid\\\\:ring-1 {\\n &[aria-invalid=\\\"true\\\"] {\\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 }\\n .aria-invalid\\\\:ring-destructive\\\\/20 {\\n &[aria-invalid=\\\"true\\\"] {\\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 .focus-visible\\\\:aria-invalid\\\\:border-destructive\\\\/64 {\\n &:focus-visible {\\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) 64%, transparent);\\n }\\n }\\n }\\n }\\n .focus-visible\\\\:aria-invalid\\\\:ring-destructive\\\\/16 {\\n &:focus-visible {\\n &[aria-invalid=\\\"true\\\"] {\\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) 16%, transparent);\\n }\\n }\\n }\\n }\\n .focus-visible\\\\:aria-invalid\\\\:ring-destructive\\\\/48 {\\n &:focus-visible {\\n &[aria-invalid=\\\"true\\\"] {\\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) 48%, transparent);\\n }\\n }\\n }\\n }\\n .data-ending-style\\\\:scale-98 {\\n &[data-ending-style] {\\n --tw-scale-x: 98%;\\n --tw-scale-y: 98%;\\n --tw-scale-z: 98%;\\n scale: var(--tw-scale-x) var(--tw-scale-y);\\n }\\n }\\n .data-ending-style\\\\:opacity-0 {\\n &[data-ending-style] {\\n opacity: 0%;\\n }\\n }\\n .data-has-overflow-x\\\\:overscroll-x-contain {\\n &[data-has-overflow-x] {\\n overscroll-behavior-x: contain;\\n }\\n }\\n .data-has-overflow-x\\\\:pb-2\\\\.5 {\\n &[data-has-overflow-x] {\\n padding-bottom: calc(var(--spacing) * 2.5);\\n }\\n }\\n .data-has-overflow-y\\\\:overscroll-y-contain {\\n &[data-has-overflow-y] {\\n overscroll-behavior-y: contain;\\n }\\n }\\n .data-has-overflow-y\\\\:pe-2\\\\.5 {\\n &[data-has-overflow-y] {\\n padding-inline-end: calc(var(--spacing) * 2.5);\\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 .data-hovering\\\\:opacity-100 {\\n &[data-hovering] {\\n opacity: 100%;\\n }\\n }\\n .data-hovering\\\\:delay-0 {\\n &[data-hovering] {\\n transition-delay: 0ms;\\n }\\n }\\n .data-hovering\\\\:duration-100 {\\n &[data-hovering] {\\n --tw-duration: 100ms;\\n transition-duration: 100ms;\\n }\\n }\\n .data-hovering\\\\:delay-0 {\\n &[data-hovering] {\\n animation-delay: calc(0*1ms);\\n animation-delay: 0s;\\n --tw-animation-delay: calc(0*1ms);\\n --tw-animation-delay: 0s;\\n }\\n }\\n .data-indeterminate\\\\:text-foreground {\\n &[data-indeterminate] {\\n color: var(--foreground);\\n }\\n }\\n .data-instant\\\\:transition-none {\\n &[data-instant] {\\n transition-property: none;\\n }\\n }\\n .data-instant\\\\:duration-0 {\\n &[data-instant] {\\n --tw-duration: 0ms;\\n transition-duration: 0ms;\\n }\\n }\\n .data-loading\\\\:text-transparent {\\n &[data-loading] {\\n color: transparent;\\n }\\n }\\n .data-loading\\\\:select-none {\\n &[data-loading] {\\n -webkit-user-select: none;\\n user-select: none;\\n }\\n }\\n .data-nested\\\\:data-ending-style\\\\:translate-y-8 {\\n &[data-nested] {\\n &[data-ending-style] {\\n --tw-translate-y: calc(var(--spacing) * 8);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n }\\n }\\n .data-nested-dialog-open\\\\:origin-top {\\n &[data-nested-dialog-open] {\\n transform-origin: top;\\n }\\n }\\n .data-placeholder\\\\:text-muted-foreground {\\n &[data-placeholder] {\\n color: var(--muted-foreground);\\n }\\n }\\n .data-pressed\\\\:border-destructive\\\\/32 {\\n &[data-pressed] {\\n border-color: var(--destructive);\\n @supports (color: color-mix(in lab, red, red)) {\\n border-color: color-mix(in oklab, var(--destructive) 32%, transparent);\\n }\\n }\\n }\\n .data-pressed\\\\:bg-accent {\\n &[data-pressed] {\\n background-color: var(--accent);\\n }\\n }\\n .data-pressed\\\\:bg-accent\\\\/50 {\\n &[data-pressed] {\\n background-color: var(--accent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--accent) 50%, transparent);\\n }\\n }\\n }\\n .data-pressed\\\\:bg-destructive\\\\/4 {\\n &[data-pressed] {\\n background-color: var(--destructive);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--destructive) 4%, transparent);\\n }\\n }\\n }\\n .data-pressed\\\\:bg-destructive\\\\/90 {\\n &[data-pressed] {\\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 .data-pressed\\\\:bg-input\\\\/64 {\\n &[data-pressed] {\\n background-color: var(--input);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--input) 64%, transparent);\\n }\\n }\\n }\\n .data-pressed\\\\:bg-primary\\\\/90 {\\n &[data-pressed] {\\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 .data-pressed\\\\:bg-secondary\\\\/90 {\\n &[data-pressed] {\\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 .data-pressed\\\\:text-accent-foreground {\\n &[data-pressed] {\\n color: var(--accent-foreground);\\n }\\n }\\n .data-pressed\\\\:underline {\\n &[data-pressed] {\\n text-decoration-line: underline;\\n }\\n }\\n .data-scrolling\\\\:opacity-100 {\\n &[data-scrolling] {\\n opacity: 100%;\\n }\\n }\\n .data-scrolling\\\\:delay-0 {\\n &[data-scrolling] {\\n transition-delay: 0ms;\\n }\\n }\\n .data-scrolling\\\\:duration-100 {\\n &[data-scrolling] {\\n --tw-duration: 100ms;\\n transition-duration: 100ms;\\n }\\n }\\n .data-scrolling\\\\:delay-0 {\\n &[data-scrolling] {\\n animation-delay: calc(0*1ms);\\n animation-delay: 0s;\\n --tw-animation-delay: calc(0*1ms);\\n --tw-animation-delay: 0s;\\n }\\n }\\n .data-starting-style\\\\:scale-98 {\\n &[data-starting-style] {\\n --tw-scale-x: 98%;\\n --tw-scale-y: 98%;\\n --tw-scale-z: 98%;\\n scale: var(--tw-scale-x) var(--tw-scale-y);\\n }\\n }\\n .data-starting-style\\\\:opacity-0 {\\n &[data-starting-style] {\\n opacity: 0%;\\n }\\n }\\n .data-nested\\\\:data-starting-style\\\\:translate-y-8 {\\n &[data-nested] {\\n &[data-starting-style] {\\n --tw-translate-y: calc(var(--spacing) * 8);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n }\\n }\\n .data-\\\\[orientation\\\\=horizontal\\\\]\\\\:h-1\\\\.5 {\\n &[data-orientation=\\\"horizontal\\\"] {\\n height: calc(var(--spacing) * 1.5);\\n }\\n }\\n .data-\\\\[orientation\\\\=horizontal\\\\]\\\\:h-px {\\n &[data-orientation=\\\"horizontal\\\"] {\\n height: 1px;\\n }\\n }\\n .data-\\\\[orientation\\\\=horizontal\\\\]\\\\:w-full {\\n &[data-orientation=\\\"horizontal\\\"] {\\n width: 100%;\\n }\\n }\\n .data-\\\\[orientation\\\\=horizontal\\\\]\\\\:flex-col {\\n &[data-orientation=\\\"horizontal\\\"] {\\n flex-direction: column;\\n }\\n }\\n .data-\\\\[orientation\\\\=vertical\\\\]\\\\:w-1\\\\.5 {\\n &[data-orientation=\\\"vertical\\\"] {\\n width: calc(var(--spacing) * 1.5);\\n }\\n }\\n .data-\\\\[orientation\\\\=vertical\\\\]\\\\:w-px {\\n &[data-orientation=\\\"vertical\\\"] {\\n width: 1px;\\n }\\n }\\n .data-\\\\[orientation\\\\=vertical\\\\]\\\\:not-\\\\[\\\\[class\\\\^\\\\=\\\\'h-\\\\'\\\\]\\\\]\\\\:not-\\\\[\\\\[class\\\\*\\\\=\\\\'_h-\\\\'\\\\]\\\\]\\\\:self-stretch {\\n &[data-orientation=\\\"vertical\\\"] {\\n &:not(*:is([class^='h-'])) {\\n &:not(*:is([class*=' h-'])) {\\n align-self: stretch;\\n }\\n }\\n }\\n }\\n .\\\\*\\\\:data-\\\\[slot\\\\=autocomplete-input\\\\]\\\\:ps-\\\\[calc\\\\(--spacing\\\\(8\\\\.5\\\\)-1px\\\\)\\\\] {\\n :is(& > *) {\\n &[data-slot=\\\"autocomplete-input\\\"] {\\n padding-inline-start: calc(calc(var(--spacing) * 8.5) - 1px);\\n }\\n }\\n }\\n .has-\\\\[\\\\+\\\\[data-slot\\\\=autocomplete-trigger\\\\]\\\\,\\\\+\\\\[data-slot\\\\=autocomplete-clear\\\\]\\\\]\\\\:\\\\*\\\\:data-\\\\[slot\\\\=autocomplete-input\\\\]\\\\:pe-6\\\\.5 {\\n &:has(+[data-slot=autocomplete-trigger],+[data-slot=autocomplete-clear]) {\\n :is(& > *) {\\n &[data-slot=\\\"autocomplete-input\\\"] {\\n padding-inline-end: calc(var(--spacing) * 6.5);\\n }\\n }\\n }\\n }\\n .has-\\\\[\\\\+\\\\[data-slot\\\\=autocomplete-trigger\\\\]\\\\,\\\\+\\\\[data-slot\\\\=autocomplete-clear\\\\]\\\\]\\\\:\\\\*\\\\:data-\\\\[slot\\\\=autocomplete-input\\\\]\\\\:pe-7 {\\n &:has(+[data-slot=autocomplete-trigger],+[data-slot=autocomplete-clear]) {\\n :is(& > *) {\\n &[data-slot=\\\"autocomplete-input\\\"] {\\n padding-inline-end: calc(var(--spacing) * 7);\\n }\\n }\\n }\\n }\\n .data-\\\\[size\\\\=sm\\\\]\\\\:\\\\*\\\\:data-\\\\[slot\\\\=autocomplete-input\\\\]\\\\:ps-\\\\[calc\\\\(--spacing\\\\(7\\\\.5\\\\)-1px\\\\)\\\\] {\\n &[data-size=\\\"sm\\\"] {\\n :is(& > *) {\\n &[data-slot=\\\"autocomplete-input\\\"] {\\n padding-inline-start: calc(calc(var(--spacing) * 7.5) - 1px);\\n }\\n }\\n }\\n }\\n .\\\\*\\\\:data-\\\\[slot\\\\=button-loading-indicator\\\\]\\\\:text-foreground {\\n :is(& > *) {\\n &[data-slot=\\\"button-loading-indicator\\\"] {\\n color: var(--foreground);\\n }\\n }\\n }\\n .\\\\*\\\\:data-\\\\[slot\\\\=button-loading-indicator\\\\]\\\\:text-primary-foreground {\\n :is(& > *) {\\n &[data-slot=\\\"button-loading-indicator\\\"] {\\n color: var(--primary-foreground);\\n }\\n }\\n }\\n .\\\\*\\\\:data-\\\\[slot\\\\=button-loading-indicator\\\\]\\\\:text-secondary-foreground {\\n :is(& > *) {\\n &[data-slot=\\\"button-loading-indicator\\\"] {\\n color: var(--secondary-foreground);\\n }\\n }\\n }\\n .\\\\*\\\\:data-\\\\[slot\\\\=button-loading-indicator\\\\]\\\\:text-white {\\n :is(& > *) {\\n &[data-slot=\\\"button-loading-indicator\\\"] {\\n color: var(--color-white);\\n }\\n }\\n }\\n .\\\\*\\\\*\\\\:data-\\\\[slot\\\\=scroll-area-scrollbar\\\\]\\\\:mt-2 {\\n :is(& *) {\\n &[data-slot=\\\"scroll-area-scrollbar\\\"] {\\n margin-top: calc(var(--spacing) * 2);\\n }\\n }\\n }\\n .\\\\*\\\\*\\\\:data-\\\\[slot\\\\=scroll-area-viewport\\\\]\\\\:data-has-overflow-y\\\\:pe-1 {\\n :is(& *) {\\n &[data-slot=\\\"scroll-area-viewport\\\"] {\\n &[data-has-overflow-y] {\\n padding-inline-end: calc(var(--spacing) * 1);\\n }\\n }\\n }\\n }\\n .max-sm\\\\:min-h-19\\\\.5 {\\n @media (width < 40rem) {\\n min-height: calc(var(--spacing) * 19.5);\\n }\\n }\\n .max-sm\\\\:min-h-20\\\\.5 {\\n @media (width < 40rem) {\\n min-height: calc(var(--spacing) * 20.5);\\n }\\n }\\n .max-sm\\\\:min-h-21\\\\.5 {\\n @media (width < 40rem) {\\n min-height: calc(var(--spacing) * 21.5);\\n }\\n }\\n .max-sm\\\\:max-w-none {\\n @media (width < 40rem) {\\n max-width: none;\\n }\\n }\\n .max-sm\\\\:origin-bottom {\\n @media (width < 40rem) {\\n transform-origin: bottom;\\n }\\n }\\n .max-sm\\\\:grid-rows-\\\\[1fr_auto\\\\] {\\n @media (width < 40rem) {\\n grid-template-rows: 1fr auto;\\n }\\n }\\n .max-sm\\\\:rounded-none {\\n @media (width < 40rem) {\\n border-radius: 0;\\n }\\n }\\n .max-sm\\\\:border-x-0 {\\n @media (width < 40rem) {\\n border-inline-style: var(--tw-border-style);\\n border-inline-width: 0px;\\n }\\n }\\n .max-sm\\\\:border-t {\\n @media (width < 40rem) {\\n border-top-style: var(--tw-border-style);\\n border-top-width: 1px;\\n }\\n }\\n .max-sm\\\\:border-b-0 {\\n @media (width < 40rem) {\\n border-bottom-style: var(--tw-border-style);\\n border-bottom-width: 0px;\\n }\\n }\\n .max-sm\\\\:p-0 {\\n @media (width < 40rem) {\\n padding: calc(var(--spacing) * 0);\\n }\\n }\\n .max-sm\\\\:pt-12 {\\n @media (width < 40rem) {\\n padding-top: calc(var(--spacing) * 12);\\n }\\n }\\n .max-sm\\\\:pb-4 {\\n @media (width < 40rem) {\\n padding-bottom: calc(var(--spacing) * 4);\\n }\\n }\\n .max-sm\\\\:before\\\\:hidden {\\n @media (width < 40rem) {\\n &::before {\\n content: var(--tw-content);\\n display: none;\\n }\\n }\\n }\\n .max-sm\\\\:before\\\\:rounded-none {\\n @media (width < 40rem) {\\n &::before {\\n content: var(--tw-content);\\n border-radius: 0;\\n }\\n }\\n }\\n .max-sm\\\\:data-ending-style\\\\:translate-y-4 {\\n @media (width < 40rem) {\\n &[data-ending-style] {\\n --tw-translate-y: calc(var(--spacing) * 4);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n }\\n }\\n .max-sm\\\\:data-starting-style\\\\:translate-y-4 {\\n @media (width < 40rem) {\\n &[data-starting-style] {\\n --tw-translate-y: calc(var(--spacing) * 4);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n }\\n }\\n .sm\\\\:size-3 {\\n @media (width >= 40rem) {\\n width: calc(var(--spacing) * 3);\\n height: calc(var(--spacing) * 3);\\n }\\n }\\n .sm\\\\:size-4 {\\n @media (width >= 40rem) {\\n width: calc(var(--spacing) * 4);\\n height: calc(var(--spacing) * 4);\\n }\\n }\\n .sm\\\\:size-6 {\\n @media (width >= 40rem) {\\n width: calc(var(--spacing) * 6);\\n height: calc(var(--spacing) * 6);\\n }\\n }\\n .sm\\\\:size-7 {\\n @media (width >= 40rem) {\\n width: calc(var(--spacing) * 7);\\n height: calc(var(--spacing) * 7);\\n }\\n }\\n .sm\\\\:size-8 {\\n @media (width >= 40rem) {\\n width: calc(var(--spacing) * 8);\\n height: calc(var(--spacing) * 8);\\n }\\n }\\n .sm\\\\:size-9 {\\n @media (width >= 40rem) {\\n width: calc(var(--spacing) * 9);\\n height: calc(var(--spacing) * 9);\\n }\\n }\\n .sm\\\\:size-10 {\\n @media (width >= 40rem) {\\n width: calc(var(--spacing) * 10);\\n height: calc(var(--spacing) * 10);\\n }\\n }\\n .sm\\\\:h-4 {\\n @media (width >= 40rem) {\\n height: calc(var(--spacing) * 4);\\n }\\n }\\n .sm\\\\:h-4\\\\.5 {\\n @media (width >= 40rem) {\\n height: calc(var(--spacing) * 4.5);\\n }\\n }\\n .sm\\\\:h-5\\\\.5 {\\n @media (width >= 40rem) {\\n height: calc(var(--spacing) * 5.5);\\n }\\n }\\n .sm\\\\:h-6 {\\n @media (width >= 40rem) {\\n height: calc(var(--spacing) * 6);\\n }\\n }\\n .sm\\\\:h-6\\\\.5 {\\n @media (width >= 40rem) {\\n height: calc(var(--spacing) * 6.5);\\n }\\n }\\n .sm\\\\:h-7 {\\n @media (width >= 40rem) {\\n height: calc(var(--spacing) * 7);\\n }\\n }\\n .sm\\\\:h-7\\\\.5 {\\n @media (width >= 40rem) {\\n height: calc(var(--spacing) * 7.5);\\n }\\n }\\n .sm\\\\:h-8 {\\n @media (width >= 40rem) {\\n height: calc(var(--spacing) * 8);\\n }\\n }\\n .sm\\\\:h-8\\\\.5 {\\n @media (width >= 40rem) {\\n height: calc(var(--spacing) * 8.5);\\n }\\n }\\n .sm\\\\:h-9 {\\n @media (width >= 40rem) {\\n height: calc(var(--spacing) * 9);\\n }\\n }\\n .sm\\\\:h-10 {\\n @media (width >= 40rem) {\\n height: calc(var(--spacing) * 10);\\n }\\n }\\n .sm\\\\:min-h-7 {\\n @media (width >= 40rem) {\\n min-height: calc(var(--spacing) * 7);\\n }\\n }\\n .sm\\\\:min-h-8 {\\n @media (width >= 40rem) {\\n min-height: calc(var(--spacing) * 8);\\n }\\n }\\n .sm\\\\:min-h-9 {\\n @media (width >= 40rem) {\\n min-height: calc(var(--spacing) * 9);\\n }\\n }\\n .sm\\\\:min-w-4 {\\n @media (width >= 40rem) {\\n min-width: calc(var(--spacing) * 4);\\n }\\n }\\n .sm\\\\:min-w-4\\\\.5 {\\n @media (width >= 40rem) {\\n min-width: calc(var(--spacing) * 4.5);\\n }\\n }\\n .sm\\\\:min-w-5\\\\.5 {\\n @media (width >= 40rem) {\\n min-width: calc(var(--spacing) * 5.5);\\n }\\n }\\n .sm\\\\:min-w-7 {\\n @media (width >= 40rem) {\\n min-width: calc(var(--spacing) * 7);\\n }\\n }\\n .sm\\\\:min-w-8 {\\n @media (width >= 40rem) {\\n min-width: calc(var(--spacing) * 8);\\n }\\n }\\n .sm\\\\:min-w-9 {\\n @media (width >= 40rem) {\\n min-width: calc(var(--spacing) * 9);\\n }\\n }\\n .sm\\\\:scale-\\\\[calc\\\\(1-0\\\\.1\\\\*var\\\\(--nested-dialogs\\\\)\\\\)\\\\] {\\n @media (width >= 40rem) {\\n scale: calc(1 - 0.1 * var(--nested-dialogs));\\n }\\n }\\n .sm\\\\:grid-cols-2 {\\n @media (width >= 40rem) {\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n }\\n }\\n .sm\\\\:flex-row {\\n @media (width >= 40rem) {\\n flex-direction: row;\\n }\\n }\\n .sm\\\\:justify-between {\\n @media (width >= 40rem) {\\n justify-content: space-between;\\n }\\n }\\n .sm\\\\:justify-end {\\n @media (width >= 40rem) {\\n justify-content: flex-end;\\n }\\n }\\n .sm\\\\:rounded-b-\\\\[calc\\\\(var\\\\(--radius-2xl\\\\)-1px\\\\)\\\\] {\\n @media (width >= 40rem) {\\n border-bottom-right-radius: calc(var(--radius-2xl) - 1px);\\n border-bottom-left-radius: calc(var(--radius-2xl) - 1px);\\n }\\n }\\n .sm\\\\:px-6 {\\n @media (width >= 40rem) {\\n padding-inline: calc(var(--spacing) * 6);\\n }\\n }\\n .sm\\\\:py-28 {\\n @media (width >= 40rem) {\\n padding-block: calc(var(--spacing) * 28);\\n }\\n }\\n .sm\\\\:py-\\\\[10vh\\\\] {\\n @media (width >= 40rem) {\\n padding-block: 10vh;\\n }\\n }\\n .sm\\\\:text-3xl {\\n @media (width >= 40rem) {\\n font-size: var(--text-3xl);\\n line-height: var(--tw-leading, var(--text-3xl--line-height));\\n }\\n }\\n .sm\\\\:text-5xl {\\n @media (width >= 40rem) {\\n font-size: var(--text-5xl);\\n line-height: var(--tw-leading, var(--text-5xl--line-height));\\n }\\n }\\n .sm\\\\:text-base {\\n @media (width >= 40rem) {\\n font-size: var(--text-base);\\n line-height: var(--tw-leading, var(--text-base--line-height));\\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 .sm\\\\:text-xs {\\n @media (width >= 40rem) {\\n font-size: var(--text-xs);\\n line-height: var(--tw-leading, var(--text-xs--line-height));\\n }\\n }\\n .sm\\\\:text-\\\\[\\\\.625rem\\\\] {\\n @media (width >= 40rem) {\\n font-size: .625rem;\\n }\\n }\\n .sm\\\\:leading-6\\\\.5 {\\n @media (width >= 40rem) {\\n --tw-leading: calc(var(--spacing) * 6.5);\\n line-height: calc(var(--spacing) * 6.5);\\n }\\n }\\n .sm\\\\:leading-7\\\\.5 {\\n @media (width >= 40rem) {\\n --tw-leading: calc(var(--spacing) * 7.5);\\n line-height: calc(var(--spacing) * 7.5);\\n }\\n }\\n .sm\\\\:leading-8\\\\.5 {\\n @media (width >= 40rem) {\\n --tw-leading: calc(var(--spacing) * 8.5);\\n line-height: calc(var(--spacing) * 8.5);\\n }\\n }\\n .sm\\\\:data-ending-style\\\\:scale-98 {\\n @media (width >= 40rem) {\\n &[data-ending-style] {\\n --tw-scale-x: 98%;\\n --tw-scale-y: 98%;\\n --tw-scale-z: 98%;\\n scale: var(--tw-scale-x) var(--tw-scale-y);\\n }\\n }\\n }\\n .sm\\\\:data-starting-style\\\\:scale-98 {\\n @media (width >= 40rem) {\\n &[data-starting-style] {\\n --tw-scale-x: 98%;\\n --tw-scale-y: 98%;\\n --tw-scale-z: 98%;\\n scale: var(--tw-scale-x) var(--tw-scale-y);\\n }\\n }\\n }\\n .sm\\\\:\\\\*\\\\:data-\\\\[slot\\\\=autocomplete-input\\\\]\\\\:ps-\\\\[calc\\\\(--spacing\\\\(8\\\\)-1px\\\\)\\\\] {\\n @media (width >= 40rem) {\\n :is(& > *) {\\n &[data-slot=\\\"autocomplete-input\\\"] {\\n padding-inline-start: calc(calc(var(--spacing) * 8) - 1px);\\n }\\n }\\n }\\n }\\n .sm\\\\:data-\\\\[size\\\\=sm\\\\]\\\\:\\\\*\\\\:data-\\\\[slot\\\\=autocomplete-input\\\\]\\\\:ps-\\\\[calc\\\\(--spacing\\\\(7\\\\)-1px\\\\)\\\\] {\\n @media (width >= 40rem) {\\n &[data-size=\\\"sm\\\"] {\\n :is(& > *) {\\n &[data-slot=\\\"autocomplete-input\\\"] {\\n padding-inline-start: calc(calc(var(--spacing) * 7) - 1px);\\n }\\n }\\n }\\n }\\n }\\n .md\\\\:block {\\n @media (width >= 48rem) {\\n display: block;\\n }\\n }\\n .md\\\\:flex {\\n @media (width >= 48rem) {\\n display: flex;\\n }\\n }\\n .md\\\\:hidden {\\n @media (width >= 48rem) {\\n display: none;\\n }\\n }\\n .md\\\\:inline-flex {\\n @media (width >= 48rem) {\\n display: inline-flex;\\n }\\n }\\n .md\\\\:pl-8 {\\n @media (width >= 48rem) {\\n padding-left: calc(var(--spacing) * 8);\\n }\\n }\\n .lg\\\\:grid-cols-3 {\\n @media (width >= 64rem) {\\n grid-template-columns: repeat(3, minmax(0, 1fr));\\n }\\n }\\n .dark\\\\:block {\\n &:is(.dark *) {\\n display: block;\\n }\\n }\\n .dark\\\\:hidden {\\n &:is(.dark *) {\\n display: none;\\n }\\n }\\n .dark\\\\:border-input {\\n &:is(.dark *) {\\n border-color: var(--input);\\n }\\n }\\n .dark\\\\:bg-accent\\\\/16 {\\n &:is(.dark *) {\\n background-color: var(--accent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--accent) 16%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-destructive\\\\/16 {\\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) 16%, 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-info\\\\/16 {\\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) 16%, 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-input\\\\/32 {\\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) 32%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-purple\\\\/16 {\\n &:is(.dark *) {\\n background-color: var(--purple);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--purple) 16%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-success\\\\/16 {\\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) 16%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-warning\\\\/16 {\\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) 16%, transparent);\\n }\\n }\\n }\\n .dark\\\\:text-amber-400 {\\n &:is(.dark *) {\\n color: var(--color-amber-400);\\n }\\n }\\n .dark\\\\:text-blue-400 {\\n &:is(.dark *) {\\n color: var(--color-blue-400);\\n }\\n }\\n .dark\\\\:text-emerald-400 {\\n &:is(.dark *) {\\n color: var(--color-emerald-400);\\n }\\n }\\n .dark\\\\:not-data-checked\\\\:bg-input\\\\/32 {\\n &:is(.dark *) {\\n &:not(*:where([data-state=\\\"checked\\\"]), *:where([data-checked]:not([data-checked=\\\"false\\\"]))) {\\n background-color: var(--input);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--input) 32%, 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 .dark\\\\:not-disabled\\\\:before\\\\:shadow-\\\\[0_-1px_--theme\\\\(--color-white\\\\/2\\\\%\\\\)\\\\] {\\n &:is(.dark *) {\\n &:not(*:disabled) {\\n &::before {\\n content: var(--tw-content);\\n --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in srgb, #fff 2%, 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) 2%, 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 }\\n .dark\\\\:not-has-disabled\\\\:not-has-focus-visible\\\\:not-has-aria-invalid\\\\:before\\\\:shadow-\\\\[0_-1px_--theme\\\\(--color-white\\\\/6\\\\%\\\\)\\\\] {\\n &:is(.dark *) {\\n &:not(*:has(*:disabled)) {\\n &:not(*:has(*:focus-visible)) {\\n &:not(*:has(*[aria-invalid=\\\"true\\\"])) {\\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 }\\n }\\n }\\n .dark\\\\:not-has-\\\\[input\\\\:disabled\\\\,textarea\\\\:disabled\\\\]\\\\:not-has-\\\\[input\\\\:focus-visible\\\\,textarea\\\\:focus-visible\\\\]\\\\:not-has-\\\\[input\\\\[aria-invalid\\\\]\\\\,textarea\\\\[aria-invalid\\\\]\\\\]\\\\:before\\\\:shadow-\\\\[0_-1px_--theme\\\\(--color-white\\\\/6\\\\%\\\\)\\\\] {\\n &:is(.dark *) {\\n &:not(*:has(*:is(input:disabled,textarea:disabled))) {\\n &:not(*:has(*:is(input:focus-visible,textarea:focus-visible))) {\\n &:not(*:has(*:is(input[aria-invalid],textarea[aria-invalid]))) {\\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 }\\n }\\n }\\n .dark\\\\:not-disabled\\\\:not-data-pressed\\\\:before\\\\:shadow-\\\\[0_-1px_--theme\\\\(--color-white\\\\/2\\\\%\\\\)\\\\] {\\n &:is(.dark *) {\\n &:not(*:disabled) {\\n &:not(*[data-pressed]) {\\n &::before {\\n content: var(--tw-content);\\n --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in srgb, #fff 2%, 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) 2%, 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 }\\n }\\n .dark\\\\:not-disabled\\\\:not-active\\\\:not-data-pressed\\\\:before\\\\:shadow-\\\\[0_-1px_--theme\\\\(--color-white\\\\/6\\\\%\\\\)\\\\] {\\n &:is(.dark *) {\\n &:not(*:disabled) {\\n &:not(*:active) {\\n &:not(*[data-pressed]) {\\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 }\\n }\\n }\\n .dark\\\\:not-data-disabled\\\\:not-focus-visible\\\\:not-aria-invalid\\\\:not-data-pressed\\\\:before\\\\:shadow-\\\\[0_-1px_--theme\\\\(--color-white\\\\/6\\\\%\\\\)\\\\] {\\n &:is(.dark *) {\\n &:not(*:where([data-disabled=\\\"true\\\"]), *:where([data-disabled]:not([data-disabled=\\\"false\\\"]))) {\\n &:not(*:focus-visible) {\\n &:not(*[aria-invalid=\\\"true\\\"]) {\\n &:not(*[data-pressed]) {\\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 }\\n }\\n }\\n }\\n .dark\\\\:not-data-disabled\\\\:not-data-checked\\\\:not-aria-invalid\\\\:before\\\\:shadow-\\\\[0_-1px_--theme\\\\(--color-white\\\\/6\\\\%\\\\)\\\\] {\\n &:is(.dark *) {\\n &:not(*:where([data-disabled=\\\"true\\\"]), *:where([data-disabled]:not([data-disabled=\\\"false\\\"]))) {\\n &:not(*:where([data-state=\\\"checked\\\"]), *:where([data-checked]:not([data-checked=\\\"false\\\"]))) {\\n &:not(*[aria-invalid=\\\"true\\\"]) {\\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 }\\n }\\n }\\n .dark\\\\:hover\\\\:bg-destructive\\\\/30 {\\n &:is(.dark *) {\\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) 30%, transparent);\\n }\\n }\\n }\\n }\\n }\\n .dark\\\\:hover\\\\:bg-input\\\\/50 {\\n &:is(.dark *) {\\n &:hover {\\n @media (hover: hover) {\\n background-color: var(--input);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--input) 50%, transparent);\\n }\\n }\\n }\\n }\\n }\\n .dark\\\\:hover\\\\:bg-input\\\\/64 {\\n &:is(.dark *) {\\n &:hover {\\n @media (hover: hover) {\\n background-color: var(--input);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--input) 64%, transparent);\\n }\\n }\\n }\\n }\\n }\\n .dark\\\\:hover\\\\:bg-muted\\\\/50 {\\n &:is(.dark *) {\\n &:hover {\\n @media (hover: hover) {\\n background-color: var(--muted);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--muted) 50%, transparent);\\n }\\n }\\n }\\n }\\n }\\n .dark\\\\:focus-visible\\\\:ring-destructive\\\\/40 {\\n &:is(.dark *) {\\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) 40%, transparent);\\n }\\n }\\n }\\n }\\n .dark\\\\:not-has-disabled\\\\:has-not-focus-visible\\\\:not-has-aria-invalid\\\\:before\\\\:shadow-\\\\[0_-1px_--theme\\\\(--color-white\\\\/6\\\\%\\\\)\\\\] {\\n &:is(.dark *) {\\n &:not(*:has(*:disabled)) {\\n &:has(*:not(*:focus-visible)) {\\n &:not(*:has(*[aria-invalid=\\\"true\\\"])) {\\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 }\\n }\\n }\\n .dark\\\\:has-autofill\\\\:bg-foreground\\\\/8 {\\n &:is(.dark *) {\\n &:has(*:autofill) {\\n background-color: var(--foreground);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--foreground) 8%, transparent);\\n }\\n }\\n }\\n }\\n .dark\\\\:has-aria-invalid\\\\:ring-destructive\\\\/24 {\\n &:is(.dark *) {\\n &:has(*[aria-invalid=\\\"true\\\"]) {\\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) 24%, transparent);\\n }\\n }\\n }\\n }\\n .dark\\\\:has-\\\\[input\\\\[aria-invalid\\\\]\\\\,textarea\\\\[aria-invalid\\\\]\\\\]\\\\:ring-destructive\\\\/24 {\\n &:is(.dark *) {\\n &:has(*:is(input[aria-invalid],textarea[aria-invalid])) {\\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) 24%, transparent);\\n }\\n }\\n }\\n }\\n .dark\\\\:aria-invalid\\\\:border-destructive\\\\/50 {\\n &:is(.dark *) {\\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) 50%, transparent);\\n }\\n }\\n }\\n }\\n .dark\\\\:aria-invalid\\\\:ring-destructive\\\\/24 {\\n &:is(.dark *) {\\n &[aria-invalid=\\\"true\\\"] {\\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) 24%, transparent);\\n }\\n }\\n }\\n }\\n .dark\\\\:aria-invalid\\\\:ring-destructive\\\\/40 {\\n &:is(.dark *) {\\n &[aria-invalid=\\\"true\\\"] {\\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) 40%, transparent);\\n }\\n }\\n }\\n }\\n .dark\\\\:data-pressed\\\\:bg-input {\\n &:is(.dark *) {\\n &[data-pressed] {\\n background-color: var(--input);\\n }\\n }\\n }\\n .dark\\\\:data-pressed\\\\:bg-input\\\\/64 {\\n &:is(.dark *) {\\n &[data-pressed] {\\n background-color: var(--input);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--input) 64%, transparent);\\n }\\n }\\n }\\n }\\n .pointer-coarse\\\\:after\\\\:absolute {\\n @media (pointer: coarse) {\\n &::after {\\n content: var(--tw-content);\\n position: absolute;\\n }\\n }\\n }\\n .pointer-coarse\\\\:after\\\\:size-full {\\n @media (pointer: coarse) {\\n &::after {\\n content: var(--tw-content);\\n width: 100%;\\n height: 100%;\\n }\\n }\\n }\\n .pointer-coarse\\\\:after\\\\:min-h-11 {\\n @media (pointer: coarse) {\\n &::after {\\n content: var(--tw-content);\\n min-height: calc(var(--spacing) * 11);\\n }\\n }\\n }\\n .pointer-coarse\\\\:after\\\\:min-w-11 {\\n @media (pointer: coarse) {\\n &::after {\\n content: var(--tw-content);\\n min-width: calc(var(--spacing) * 11);\\n }\\n }\\n }\\n .data-checked\\\\:bg-primary {\\n &:where([data-state=\\\"checked\\\"]), &:where([data-checked]:not([data-checked=\\\"false\\\"])) {\\n background-color: var(--primary);\\n }\\n }\\n .data-unchecked\\\\:hidden {\\n &:where([data-state=\\\"unchecked\\\"]), &:where([data-unchecked]:not([data-unchecked=\\\"false\\\"])) {\\n display: none;\\n }\\n }\\n .data-disabled\\\\:pointer-events-none {\\n &:where([data-disabled=\\\"true\\\"]), &:where([data-disabled]:not([data-disabled=\\\"false\\\"])) {\\n pointer-events: none;\\n }\\n }\\n .data-disabled\\\\:cursor-not-allowed {\\n &:where([data-disabled=\\\"true\\\"]), &:where([data-disabled]:not([data-disabled=\\\"false\\\"])) {\\n cursor: not-allowed;\\n }\\n }\\n .data-disabled\\\\:opacity-64 {\\n &:where([data-disabled=\\\"true\\\"]), &:where([data-disabled]:not([data-disabled=\\\"false\\\"])) {\\n opacity: 64%;\\n }\\n }\\n .\\\\[\\\\&_p\\\\]\\\\:m-0 {\\n & p {\\n margin: calc(var(--spacing) * 0);\\n }\\n }\\n .\\\\[\\\\&_pre\\\\]\\\\:\\\\!bg-transparent {\\n & pre {\\n background-color: transparent !important;\\n }\\n }\\n .\\\\[\\\\&_pre\\\\]\\\\:\\\\!p-0 {\\n & pre {\\n padding: calc(var(--spacing) * 0) !important;\\n }\\n }\\n .\\\\[\\\\&_svg\\\\]\\\\:pointer-events-none {\\n & svg {\\n pointer-events: none;\\n }\\n }\\n .\\\\[\\\\&_svg\\\\]\\\\:-mx-0\\\\.5 {\\n & svg {\\n margin-inline: calc(var(--spacing) * -0.5);\\n }\\n }\\n .\\\\[\\\\&_svg\\\\]\\\\:shrink-0 {\\n & svg {\\n flex-shrink: 0;\\n }\\n }\\n .\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'opacity-\\\\'\\\\]\\\\)\\\\]\\\\:opacity-80 {\\n & svg:not([class*='opacity-']) {\\n opacity: 80%;\\n }\\n }\\n .\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-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-3\\\\.5 {\\n & svg:not([class*='size-']) {\\n width: calc(var(--spacing) * 3.5);\\n height: calc(var(--spacing) * 3.5);\\n }\\n }\\n .\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-4 {\\n & svg:not([class*='size-']) {\\n width: calc(var(--spacing) * 4);\\n height: calc(var(--spacing) * 4);\\n }\\n }\\n .\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-4\\\\.5 {\\n & svg:not([class*='size-']) {\\n width: calc(var(--spacing) * 4.5);\\n height: calc(var(--spacing) * 4.5);\\n }\\n }\\n .\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-5 {\\n & svg:not([class*='size-']) {\\n width: calc(var(--spacing) * 5);\\n height: calc(var(--spacing) * 5);\\n }\\n }\\n .not-in-data-\\\\[slot\\\\=input-group\\\\]\\\\:\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-4 {\\n &:not(:where(*[data-slot=\\\"input-group\\\"]) *) {\\n & svg:not([class*='size-']) {\\n width: calc(var(--spacing) * 4);\\n height: calc(var(--spacing) * 4);\\n }\\n }\\n }\\n .in-\\\\[\\\\[data-slot\\\\=input-group\\\\]\\\\:has\\\\(\\\\[data-slot\\\\=input-control\\\\]\\\\,\\\\[data-slot\\\\=textarea-control\\\\]\\\\)\\\\]\\\\:\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-4\\\\.5 {\\n :where(*:is([data-slot=input-group]:has([data-slot=input-control],[data-slot=textarea-control]))) & {\\n & svg:not([class*='size-']) {\\n width: calc(var(--spacing) * 4.5);\\n height: calc(var(--spacing) * 4.5);\\n }\\n }\\n }\\n .sm\\\\:\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-3 {\\n @media (width >= 40rem) {\\n & svg:not([class*='size-']) {\\n width: calc(var(--spacing) * 3);\\n height: calc(var(--spacing) * 3);\\n }\\n }\\n }\\n .sm\\\\:\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-3\\\\.5 {\\n @media (width >= 40rem) {\\n & svg:not([class*='size-']) {\\n width: calc(var(--spacing) * 3.5);\\n height: calc(var(--spacing) * 3.5);\\n }\\n }\\n }\\n .sm\\\\:\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-4 {\\n @media (width >= 40rem) {\\n & svg:not([class*='size-']) {\\n width: calc(var(--spacing) * 4);\\n height: calc(var(--spacing) * 4);\\n }\\n }\\n }\\n .sm\\\\:\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-4\\\\.5 {\\n @media (width >= 40rem) {\\n & svg:not([class*='size-']) {\\n width: calc(var(--spacing) * 4.5);\\n height: calc(var(--spacing) * 4.5);\\n }\\n }\\n }\\n .sm\\\\:not-in-data-\\\\[slot\\\\=input-group\\\\]\\\\:\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-3\\\\.5 {\\n @media (width >= 40rem) {\\n &:not(:where(*[data-slot=\\\"input-group\\\"]) *) {\\n & svg:not([class*='size-']) {\\n width: calc(var(--spacing) * 3.5);\\n height: calc(var(--spacing) * 3.5);\\n }\\n }\\n }\\n }\\n .sm\\\\:in-\\\\[\\\\[data-slot\\\\=input-group\\\\]\\\\:has\\\\(\\\\[data-slot\\\\=input-control\\\\]\\\\,\\\\[data-slot\\\\=textarea-control\\\\]\\\\)\\\\]\\\\:\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-4 {\\n @media (width >= 40rem) {\\n :where(*:is([data-slot=input-group]:has([data-slot=input-control],[data-slot=textarea-control]))) & {\\n & svg:not([class*='size-']) {\\n width: calc(var(--spacing) * 4);\\n height: calc(var(--spacing) * 4);\\n }\\n }\\n }\\n }\\n .\\\\[\\\\&\\\\:\\\\:-webkit-search-cancel-button\\\\]\\\\:appearance-none {\\n &::-webkit-search-cancel-button {\\n appearance: none;\\n }\\n }\\n .\\\\[\\\\&\\\\:\\\\:-webkit-search-decoration\\\\]\\\\:appearance-none {\\n &::-webkit-search-decoration {\\n appearance: none;\\n }\\n }\\n .\\\\[\\\\&\\\\:\\\\:-webkit-search-results-button\\\\]\\\\:appearance-none {\\n &::-webkit-search-results-button {\\n appearance: none;\\n }\\n }\\n .\\\\[\\\\&\\\\:\\\\:-webkit-search-results-decoration\\\\]\\\\:appearance-none {\\n &::-webkit-search-results-decoration {\\n appearance: none;\\n }\\n }\\n .\\\\[\\\\.border-b\\\\]\\\\:pb-\\\\[calc\\\\(--spacing\\\\(3\\\\)-1px\\\\)\\\\] {\\n &:is(.border-b) {\\n padding-bottom: calc(calc(var(--spacing) * 3) - 1px);\\n }\\n }\\n .\\\\[\\\\.border-t\\\\]\\\\:pt-\\\\[calc\\\\(--spacing\\\\(3\\\\)-1px\\\\)\\\\] {\\n &:is(.border-t) {\\n padding-top: calc(calc(var(--spacing) * 3) - 1px);\\n }\\n }\\n .\\\\[\\\\:active\\\\,\\\\[data-pressed\\\\]\\\\]\\\\:bg-secondary\\\\/80 {\\n &:is(:active,[data-pressed]) {\\n background-color: var(--secondary);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--secondary) 80%, transparent);\\n }\\n }\\n }\\n .\\\\[\\\\:active\\\\,\\\\[data-pressed\\\\]\\\\]\\\\:inset-shadow-\\\\[0_1px_--theme\\\\(--color-black\\\\/8\\\\%\\\\)\\\\] {\\n &:is(:active,[data-pressed]) {\\n --tw-inset-shadow: inset 0 1px var(--tw-inset-shadow-color, color-mix(in srgb, #000 8%, transparent));\\n @supports (color: color-mix(in lab, red, red)) {\\n --tw-inset-shadow: inset 0 1px var(--tw-inset-shadow-color, color-mix(in oklab, var(--color-black) 8%, 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 .\\\\[\\\\:disabled\\\\,\\\\:active\\\\,\\\\[data-pressed\\\\]\\\\]\\\\:shadow-none {\\n &:is(:disabled,:active,[data-pressed]) {\\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 }\\n .\\\\[\\\\[data-disabled\\\\]\\\\,\\\\:focus-visible\\\\,\\\\[aria-invalid\\\\]\\\\,\\\\[data-pressed\\\\]\\\\]\\\\:shadow-none {\\n &:is([data-disabled],:focus-visible,[aria-invalid],[data-pressed]) {\\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 }\\n .\\\\[\\\\[data-disabled\\\\]\\\\,\\\\[data-checked\\\\]\\\\,\\\\[aria-invalid\\\\]\\\\]\\\\:shadow-none {\\n &:is([data-disabled],[data-checked],[aria-invalid]) {\\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 }\\n .has-data-\\\\[align\\\\=inline-end\\\\]\\\\:\\\\*\\\\*\\\\:\\\\[\\\\[data-size\\\\=sm\\\\]_input\\\\]\\\\:pe-1\\\\.5 {\\n &:has(*[data-align=\\\"inline-end\\\"]) {\\n :is(& *) {\\n &:is([data-size=sm] input) {\\n padding-inline-end: calc(var(--spacing) * 1.5);\\n }\\n }\\n }\\n }\\n .has-data-\\\\[align\\\\=inline-start\\\\]\\\\:\\\\*\\\\*\\\\:\\\\[\\\\[data-size\\\\=sm\\\\]_input\\\\]\\\\:ps-1\\\\.5 {\\n &:has(*[data-align=\\\"inline-start\\\"]) {\\n :is(& *) {\\n &:is([data-size=sm] input) {\\n padding-inline-start: calc(var(--spacing) * 1.5);\\n }\\n }\\n }\\n }\\n .\\\\*\\\\:\\\\[\\\\[data-slot\\\\=input-control\\\\]\\\\,\\\\[data-slot\\\\=textarea-control\\\\]\\\\]\\\\:contents {\\n :is(& > *) {\\n &:is([data-slot=input-control],[data-slot=textarea-control]) {\\n display: contents;\\n }\\n }\\n }\\n .\\\\*\\\\:\\\\[\\\\[data-slot\\\\=input-control\\\\]\\\\,\\\\[data-slot\\\\=textarea-control\\\\]\\\\]\\\\:before\\\\:hidden {\\n :is(& > *) {\\n &:is([data-slot=input-control],[data-slot=textarea-control]) {\\n &::before {\\n content: var(--tw-content);\\n display: none;\\n }\\n }\\n }\\n }\\n .\\\\[a\\\\]\\\\:hover\\\\:bg-primary\\\\/80 {\\n &:is(a) {\\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) 80%, transparent);\\n }\\n }\\n }\\n }\\n }\\n .has-data-\\\\[align\\\\=block-end\\\\]\\\\:\\\\*\\\\*\\\\:\\\\[input\\\\]\\\\:pt-1\\\\.5 {\\n &:has(*[data-align=\\\"block-end\\\"]) {\\n :is(& *) {\\n &:is(input) {\\n padding-top: calc(var(--spacing) * 1.5);\\n }\\n }\\n }\\n }\\n .has-data-\\\\[align\\\\=block-start\\\\]\\\\:\\\\*\\\\*\\\\:\\\\[input\\\\]\\\\:pb-1\\\\.5 {\\n &:has(*[data-align=\\\"block-start\\\"]) {\\n :is(& *) {\\n &:is(input) {\\n padding-bottom: calc(var(--spacing) * 1.5);\\n }\\n }\\n }\\n }\\n .has-data-\\\\[align\\\\=inline-end\\\\]\\\\:\\\\*\\\\*\\\\:\\\\[input\\\\]\\\\:pe-2 {\\n &:has(*[data-align=\\\"inline-end\\\"]) {\\n :is(& *) {\\n &:is(input) {\\n padding-inline-end: calc(var(--spacing) * 2);\\n }\\n }\\n }\\n }\\n .has-data-\\\\[align\\\\=inline-start\\\\]\\\\:\\\\*\\\\*\\\\:\\\\[input\\\\]\\\\:ps-2 {\\n &:has(*[data-align=\\\"inline-start\\\"]) {\\n :is(& *) {\\n &:is(input) {\\n padding-inline-start: calc(var(--spacing) * 2);\\n }\\n }\\n }\\n }\\n .has-\\\\[\\\\[data-align\\\\=block-start\\\\]\\\\,\\\\[data-align\\\\=block-end\\\\]\\\\]\\\\:\\\\*\\\\*\\\\:\\\\[input\\\\]\\\\:h-auto {\\n &:has(*:is([data-align=block-start],[data-align=block-end])) {\\n :is(& *) {\\n &:is(input) {\\n height: auto;\\n }\\n }\\n }\\n }\\n .not-has-\\\\[button\\\\]\\\\:\\\\*\\\\*\\\\:\\\\[svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'opacity-\\\\'\\\\]\\\\)\\\\]\\\\:opacity-80 {\\n &:not(*:has(*:is(button))) {\\n :is(& *) {\\n &:is(svg:not([class*='opacity-'])) {\\n opacity: 80%;\\n }\\n }\\n }\\n }\\n .\\\\*\\\\*\\\\:\\\\[textarea_button\\\\]\\\\:rounded-\\\\[calc\\\\(var\\\\(--radius-md\\\\)-1px\\\\)\\\\] {\\n :is(& *) {\\n &:is(textarea button) {\\n border-radius: calc(var(--radius-md) - 1px);\\n }\\n }\\n }\\n .\\\\*\\\\*\\\\:\\\\[textarea\\\\]\\\\:min-h-20\\\\.5 {\\n :is(& *) {\\n &:is(textarea) {\\n min-height: calc(var(--spacing) * 20.5);\\n }\\n }\\n }\\n .\\\\*\\\\*\\\\:\\\\[textarea\\\\]\\\\:resize-none {\\n :is(& *) {\\n &:is(textarea) {\\n resize: none;\\n }\\n }\\n }\\n .\\\\*\\\\*\\\\:\\\\[textarea\\\\]\\\\:py-\\\\[calc\\\\(--spacing\\\\(3\\\\)-1px\\\\)\\\\] {\\n :is(& *) {\\n &:is(textarea) {\\n padding-block: calc(calc(var(--spacing) * 3) - 1px);\\n }\\n }\\n }\\n .\\\\*\\\\*\\\\:\\\\[textarea\\\\]\\\\:max-sm\\\\:min-h-23\\\\.5 {\\n :is(& *) {\\n &:is(textarea) {\\n @media (width < 40rem) {\\n min-height: calc(var(--spacing) * 23.5);\\n }\\n }\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:mt-6 {\\n &>h3 {\\n margin-top: calc(var(--spacing) * 6);\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:mb-2 {\\n &>h3 {\\n margin-bottom: calc(var(--spacing) * 2);\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:text-base {\\n &>h3 {\\n font-size: var(--text-base);\\n line-height: var(--tw-leading, var(--text-base--line-height));\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:font-semibold {\\n &>h3 {\\n --tw-font-weight: var(--font-weight-semibold);\\n font-weight: var(--font-weight-semibold);\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:before\\\\:absolute {\\n &>h3 {\\n &::before {\\n content: var(--tw-content);\\n position: absolute;\\n }\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:before\\\\:-ml-\\\\[calc\\\\(1\\\\.5rem\\\\+1px\\\\+0\\\\.5rem\\\\)\\\\] {\\n &>h3 {\\n &::before {\\n content: var(--tw-content);\\n margin-left: calc(calc(1.5rem + 1px + 0.5rem) * -1);\\n }\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:before\\\\:flex {\\n &>h3 {\\n &::before {\\n content: var(--tw-content);\\n display: flex;\\n }\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:before\\\\:size-6 {\\n &>h3 {\\n &::before {\\n content: var(--tw-content);\\n width: calc(var(--spacing) * 6);\\n height: calc(var(--spacing) * 6);\\n }\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:before\\\\:items-center {\\n &>h3 {\\n &::before {\\n content: var(--tw-content);\\n align-items: center;\\n }\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:before\\\\:justify-center {\\n &>h3 {\\n &::before {\\n content: var(--tw-content);\\n justify-content: center;\\n }\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:before\\\\:rounded-full {\\n &>h3 {\\n &::before {\\n content: var(--tw-content);\\n border-radius: calc(infinity * 1px);\\n }\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:before\\\\:bg-primary {\\n &>h3 {\\n &::before {\\n content: var(--tw-content);\\n background-color: var(--primary);\\n }\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:before\\\\:text-xs {\\n &>h3 {\\n &::before {\\n content: var(--tw-content);\\n font-size: var(--text-xs);\\n line-height: var(--tw-leading, var(--text-xs--line-height));\\n }\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:before\\\\:font-semibold {\\n &>h3 {\\n &::before {\\n content: var(--tw-content);\\n --tw-font-weight: var(--font-weight-semibold);\\n font-weight: var(--font-weight-semibold);\\n }\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:before\\\\:text-primary-foreground {\\n &>h3 {\\n &::before {\\n content: var(--tw-content);\\n color: var(--primary-foreground);\\n }\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:before\\\\:content-\\\\[counter\\\\(step\\\\)\\\\] {\\n &>h3 {\\n &::before {\\n --tw-content: counter(step);\\n content: var(--tw-content);\\n }\\n }\\n }\\n .\\\\[\\\\&\\\\>h3\\\\]\\\\:before\\\\:\\\\[counter-increment\\\\:step\\\\] {\\n &>h3 {\\n &::before {\\n content: var(--tw-content);\\n counter-increment: step;\\n }\\n }\\n }\\n .\\\\[\\\\&\\\\>kbd\\\\]\\\\:rounded-\\\\[calc\\\\(var\\\\(--radius\\\\)-5px\\\\)\\\\] {\\n &>kbd {\\n border-radius: calc(var(--radius) - 5px);\\n }\\n }\\n .\\\\[\\\\&\\\\>svg\\\\]\\\\:pointer-events-none {\\n &>svg {\\n pointer-events: none;\\n }\\n }\\n .\\\\[\\\\&\\\\>svg\\\\]\\\\:-mx-0\\\\.5 {\\n &>svg {\\n margin-inline: calc(var(--spacing) * -0.5);\\n }\\n }\\n .\\\\[\\\\&\\\\>svg\\\\]\\\\:shrink-0 {\\n &>svg {\\n flex-shrink: 0;\\n }\\n }\\n .\\\\[\\\\&\\\\>svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-4 {\\n &>svg:not([class*='size-']) {\\n width: calc(var(--spacing) * 4);\\n height: calc(var(--spacing) * 4);\\n }\\n }\\n .\\\\[\\\\[data-size\\\\=sm\\\\]\\\\+\\\\&\\\\]\\\\:px-\\\\[calc\\\\(--spacing\\\\(2\\\\.5\\\\)-1px\\\\)\\\\] {\\n [data-size=sm]+& {\\n padding-inline: calc(calc(var(--spacing) * 2.5) - 1px);\\n }\\n }\\n .\\\\[\\\\[data-size\\\\=sm\\\\]\\\\+\\\\&\\\\]\\\\:ps-\\\\[calc\\\\(--spacing\\\\(2\\\\.5\\\\)-1px\\\\)\\\\] {\\n [data-size=sm]+& {\\n padding-inline-start: calc(calc(var(--spacing) * 2.5) - 1px);\\n }\\n }\\n .\\\\[\\\\[data-size\\\\=sm\\\\]\\\\+\\\\&\\\\]\\\\:pe-\\\\[calc\\\\(--spacing\\\\(2\\\\.5\\\\)-1px\\\\)\\\\] {\\n [data-size=sm]+& {\\n padding-inline-end: calc(calc(var(--spacing) * 2.5) - 1px);\\n }\\n }\\n .\\\\[\\\\[role\\\\=group\\\\]\\\\+\\\\&\\\\]\\\\:mt-1\\\\.5 {\\n [role=group]+& {\\n margin-top: calc(var(--spacing) * 1.5);\\n }\\n }\\n .\\\\[button\\\\&\\\\,a\\\\&\\\\]\\\\:cursor-pointer {\\n button&,a& {\\n cursor: pointer;\\n }\\n }\\n .\\\\[button\\\\&\\\\,a\\\\&\\\\]\\\\:hover\\\\:bg-accent\\\\/50 {\\n button&,a& {\\n &:hover {\\n @media (hover: hover) {\\n background-color: var(--accent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--accent) 50%, transparent);\\n }\\n }\\n }\\n }\\n }\\n .\\\\[button\\\\&\\\\,a\\\\&\\\\]\\\\:hover\\\\:bg-destructive\\\\/90 {\\n button&,a& {\\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 }\\n .\\\\[button\\\\&\\\\,a\\\\&\\\\]\\\\:hover\\\\:bg-primary\\\\/90 {\\n button&,a& {\\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 }\\n .\\\\[button\\\\&\\\\,a\\\\&\\\\]\\\\:hover\\\\:bg-secondary\\\\/90 {\\n button&,a& {\\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 }\\n .dark\\\\:\\\\[button\\\\&\\\\,a\\\\&\\\\]\\\\:hover\\\\:bg-input\\\\/48 {\\n &:is(.dark *) {\\n button&,a& {\\n &:hover {\\n @media (hover: hover) {\\n background-color: var(--input);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--input) 48%, transparent);\\n }\\n }\\n }\\n }\\n }\\n }\\n .\\\\[button\\\\&\\\\,a\\\\&\\\\]\\\\:pointer-coarse\\\\:after\\\\:absolute {\\n button&,a& {\\n @media (pointer: coarse) {\\n &::after {\\n content: var(--tw-content);\\n position: absolute;\\n }\\n }\\n }\\n }\\n .\\\\[button\\\\&\\\\,a\\\\&\\\\]\\\\:pointer-coarse\\\\:after\\\\:size-full {\\n button&,a& {\\n @media (pointer: coarse) {\\n &::after {\\n content: var(--tw-content);\\n width: 100%;\\n height: 100%;\\n }\\n }\\n }\\n }\\n .\\\\[button\\\\&\\\\,a\\\\&\\\\]\\\\:pointer-coarse\\\\:after\\\\:min-h-11 {\\n button&,a& {\\n @media (pointer: coarse) {\\n &::after {\\n content: var(--tw-content);\\n min-height: calc(var(--spacing) * 11);\\n }\\n }\\n }\\n }\\n .\\\\[button\\\\&\\\\,a\\\\&\\\\]\\\\:pointer-coarse\\\\:after\\\\:min-w-11 {\\n button&,a& {\\n @media (pointer: coarse) {\\n &::after {\\n content: var(--tw-content);\\n min-width: calc(var(--spacing) * 11);\\n }\\n }\\n }\\n }\\n}\\n@property --tw-animation-delay {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0s;\\n}\\n@property --tw-animation-direction {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: normal;\\n}\\n@property --tw-animation-duration {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-animation-fill-mode {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: none;\\n}\\n@property --tw-animation-iteration-count {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 1;\\n}\\n@property --tw-enter-blur {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-enter-opacity {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 1;\\n}\\n@property --tw-enter-rotate {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-enter-scale {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 1;\\n}\\n@property --tw-enter-translate-x {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-enter-translate-y {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-exit-blur {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-exit-opacity {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 1;\\n}\\n@property --tw-exit-rotate {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-exit-scale {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 1;\\n}\\n@property --tw-exit-translate-x {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-exit-translate-y {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@layer base {\\n *, ::after, ::before {\\n border-color: var(--color-border, currentColor);\\n }\\n}\\n:where(:host, :root) {\\n --background: #141414;\\n --foreground: #f5f5f5;\\n --card: #181818;\\n --card-foreground: #f5f5f5;\\n --popover: #1e1e1e;\\n --popover-foreground: #f5f5f5;\\n --primary: #f5f5f5;\\n --primary-foreground: #262626;\\n --secondary: rgba(255, 255, 255, 0.04);\\n --secondary-foreground: #f5f5f5;\\n --muted: rgba(255, 255, 255, 0.04);\\n --muted-foreground: #7f7f7f;\\n --accent: rgba(255, 255, 255, 0.04);\\n --accent-foreground: #f5f5f5;\\n --destructive: #f87171;\\n --destructive-foreground: #f87171;\\n --border: rgba(255, 255, 255, 0.06);\\n --input: rgba(255, 255, 255, 0.08);\\n --ring: #737373;\\n --warning: #fbbf24;\\n --warning-foreground: #fbbf24;\\n --success: #34d399;\\n --success-foreground: #34d399;\\n --info: #60a5fa;\\n --info-foreground: #60a5fa;\\n --purple: #a78bfa;\\n --purple-foreground: #a78bfa;\\n --radius: 0.625rem;\\n}\\n:host(.light) {\\n --background: #ffffff;\\n --foreground: #262626;\\n --card: #ffffff;\\n --card-foreground: #262626;\\n --popover: #ffffff;\\n --popover-foreground: #262626;\\n --primary: #262626;\\n --primary-foreground: #fafafa;\\n --secondary: rgba(0, 0, 0, 0.04);\\n --secondary-foreground: #262626;\\n --muted: rgba(0, 0, 0, 0.04);\\n --muted-foreground: #6b6b6b;\\n --accent: rgba(0, 0, 0, 0.04);\\n --accent-foreground: #262626;\\n --destructive: #ef4444;\\n --destructive-foreground: #b91c1c;\\n --border: rgba(0, 0, 0, 0.08);\\n --input: rgba(0, 0, 0, 0.1);\\n --ring: #a3a3a3;\\n --warning: #f59e0b;\\n --warning-foreground: #92400e;\\n --success: #10b981;\\n --success-foreground: #065f46;\\n --info: #3b82f6;\\n --info-foreground: #1e40af;\\n --purple: #8b5cf6;\\n --purple-foreground: #5b21b6;\\n}\\n@property --tw-translate-x {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-translate-y {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-translate-z {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-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-space-y-reverse {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-space-x-reverse {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-divide-y-reverse {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-border-style {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: solid;\\n}\\n@property --tw-mask-linear {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: linear-gradient(#fff, #fff);\\n}\\n@property --tw-mask-radial {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: linear-gradient(#fff, #fff);\\n}\\n@property --tw-mask-conic {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: linear-gradient(#fff, #fff);\\n}\\n@property --tw-mask-left {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: linear-gradient(#fff, #fff);\\n}\\n@property --tw-mask-right {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: linear-gradient(#fff, #fff);\\n}\\n@property --tw-mask-bottom {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: linear-gradient(#fff, #fff);\\n}\\n@property --tw-mask-top {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: linear-gradient(#fff, #fff);\\n}\\n@property --tw-mask-top-from-position {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0%;\\n}\\n@property --tw-mask-top-to-position {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 100%;\\n}\\n@property --tw-mask-top-from-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: black;\\n}\\n@property --tw-mask-top-to-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: transparent;\\n}\\n@property --tw-mask-right-from-position {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0%;\\n}\\n@property --tw-mask-right-to-position {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 100%;\\n}\\n@property --tw-mask-right-from-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: black;\\n}\\n@property --tw-mask-right-to-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: transparent;\\n}\\n@property --tw-mask-bottom-from-position {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0%;\\n}\\n@property --tw-mask-bottom-to-position {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 100%;\\n}\\n@property --tw-mask-bottom-from-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: black;\\n}\\n@property --tw-mask-bottom-to-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: transparent;\\n}\\n@property --tw-mask-left-from-position {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0%;\\n}\\n@property --tw-mask-left-to-position {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 100%;\\n}\\n@property --tw-mask-left-from-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: black;\\n}\\n@property --tw-mask-left-to-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: transparent;\\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-duration {\\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@property --tw-gradient-position {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-gradient-from {\\n syntax: \\\"<color>\\\";\\n inherits: false;\\n initial-value: #0000;\\n}\\n@property --tw-gradient-via {\\n syntax: \\\"<color>\\\";\\n inherits: false;\\n initial-value: #0000;\\n}\\n@property --tw-gradient-to {\\n syntax: \\\"<color>\\\";\\n inherits: false;\\n initial-value: #0000;\\n}\\n@property --tw-gradient-stops {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-gradient-via-stops {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-gradient-from-position {\\n syntax: \\\"<length-percentage>\\\";\\n inherits: false;\\n initial-value: 0%;\\n}\\n@property --tw-gradient-via-position {\\n syntax: \\\"<length-percentage>\\\";\\n inherits: false;\\n initial-value: 50%;\\n}\\n@property --tw-gradient-to-position {\\n syntax: \\\"<length-percentage>\\\";\\n inherits: false;\\n initial-value: 100%;\\n}\\n@property --tw-scale-x {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 1;\\n}\\n@property --tw-scale-y {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 1;\\n}\\n@property --tw-scale-z {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 1;\\n}\\n@keyframes spin {\\n to {\\n transform: rotate(360deg);\\n }\\n}\\n@layer properties {\\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\\n *, ::before, ::after, ::backdrop {\\n --tw-translate-x: 0;\\n --tw-translate-y: 0;\\n --tw-translate-z: 0;\\n --tw-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-space-y-reverse: 0;\\n --tw-space-x-reverse: 0;\\n --tw-divide-y-reverse: 0;\\n --tw-border-style: solid;\\n --tw-mask-linear: linear-gradient(#fff, #fff);\\n --tw-mask-radial: linear-gradient(#fff, #fff);\\n --tw-mask-conic: linear-gradient(#fff, #fff);\\n --tw-mask-left: linear-gradient(#fff, #fff);\\n --tw-mask-right: linear-gradient(#fff, #fff);\\n --tw-mask-bottom: linear-gradient(#fff, #fff);\\n --tw-mask-top: linear-gradient(#fff, #fff);\\n --tw-mask-top-from-position: 0%;\\n --tw-mask-top-to-position: 100%;\\n --tw-mask-top-from-color: black;\\n --tw-mask-top-to-color: transparent;\\n --tw-mask-right-from-position: 0%;\\n --tw-mask-right-to-position: 100%;\\n --tw-mask-right-from-color: black;\\n --tw-mask-right-to-color: transparent;\\n --tw-mask-bottom-from-position: 0%;\\n --tw-mask-bottom-to-position: 100%;\\n --tw-mask-bottom-from-color: black;\\n --tw-mask-bottom-to-color: transparent;\\n --tw-mask-left-from-position: 0%;\\n --tw-mask-left-to-position: 100%;\\n --tw-mask-left-from-color: black;\\n --tw-mask-left-to-color: transparent;\\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-duration: initial;\\n --tw-ease: initial;\\n --tw-content: \\\"\\\";\\n --tw-gradient-position: initial;\\n --tw-gradient-from: #0000;\\n --tw-gradient-via: #0000;\\n --tw-gradient-to: #0000;\\n --tw-gradient-stops: initial;\\n --tw-gradient-via-stops: initial;\\n --tw-gradient-from-position: 0%;\\n --tw-gradient-via-position: 50%;\\n --tw-gradient-to-position: 100%;\\n --tw-scale-x: 1;\\n --tw-scale-y: 1;\\n --tw-scale-z: 1;\\n --tw-animation-delay: 0s;\\n --tw-animation-direction: normal;\\n --tw-animation-duration: initial;\\n --tw-animation-fill-mode: none;\\n --tw-animation-iteration-count: 1;\\n --tw-enter-blur: 0;\\n --tw-enter-opacity: 1;\\n --tw-enter-rotate: 0;\\n --tw-enter-scale: 1;\\n --tw-enter-translate-x: 0;\\n --tw-enter-translate-y: 0;\\n --tw-exit-blur: 0;\\n --tw-exit-opacity: 1;\\n --tw-exit-rotate: 0;\\n --tw-exit-scale: 1;\\n --tw-exit-translate-x: 0;\\n --tw-exit-translate-y: 0;\\n }\\n }\\n}\\n\\n/* ============================================================\\n Design tokens — COSS defaults + uidex category colors\\n :host for Shadow DOM, :where(:root) for standalone use.\\n Dark theme default. Light theme via :host(.light).\\n ============================================================ */\\n\\n:where(:host, :root) {\\n --background: #141414;\\n --foreground: #f5f5f5;\\n --card: #181818;\\n --card-foreground: #f5f5f5;\\n --popover: #1e1e1e;\\n --popover-foreground: #f5f5f5;\\n --primary: #f5f5f5;\\n --primary-foreground: #262626;\\n --secondary: rgba(255, 255, 255, 0.04);\\n --secondary-foreground: #f5f5f5;\\n --muted: rgba(255, 255, 255, 0.04);\\n --muted-foreground: #7f7f7f;\\n --accent: rgba(255, 255, 255, 0.04);\\n --accent-foreground: #f5f5f5;\\n --destructive: #f87171;\\n --destructive-foreground: #f87171;\\n --border: rgba(255, 255, 255, 0.06);\\n --input: rgba(255, 255, 255, 0.08);\\n --ring: #737373;\\n --info: #60a5fa;\\n --radius: 0.625rem;\\n --radius-sm: 6px;\\n --radius-md: 8px;\\n --radius-lg: 10px;\\n --radius-xl: 14px;\\n --radius-2xl: 16px;\\n --font-sans: ui-sans-serif, system-ui, -apple-system,\\n BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\\n --font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo,\\n Consolas, monospace;\\n\\n /* Uidex category colors */\\n --uidex-component: #34d399;\\n --uidex-feature: #a78bfa;\\n --uidex-block: #c084fc;\\n}\\n\\n/* ——— Light theme ——— */\\n:host(.light) {\\n --background: #ffffff;\\n --foreground: #262626;\\n --card: #ffffff;\\n --card-foreground: #262626;\\n --popover: #ffffff;\\n --popover-foreground: #262626;\\n --primary: #262626;\\n --primary-foreground: #fafafa;\\n --secondary: rgba(0, 0, 0, 0.04);\\n --secondary-foreground: #262626;\\n --muted: rgba(0, 0, 0, 0.04);\\n --muted-foreground: #6b6b6b;\\n --accent: rgba(0, 0, 0, 0.04);\\n --accent-foreground: #262626;\\n --destructive: #ef4444;\\n --destructive-foreground: #b91c1c;\\n --border: rgba(0, 0, 0, 0.08);\\n --input: rgba(0, 0, 0, 0.1);\\n --ring: #a3a3a3;\\n --info: #3b82f6;\\n --warning: #f59e0b;\\n --warning-foreground: #92400e;\\n --success: #10b981;\\n --success-foreground: #065f46;\\n --info-foreground: #1e40af;\\n --purple: #8b5cf6;\\n --purple-foreground: #5b21b6;\\n}\\n\\n/* ============================================================\\n Reset — match Tailwind preflight (border-box + no margin)\\n ============================================================ */\\n\\n*,\\n*::before,\\n*::after {\\n box-sizing: border-box;\\n}\\n\\n/* ============================================================\\n Icon\\n ============================================================ */\\n\\n.uidex-icon {\\n flex-shrink: 0;\\n pointer-events: none;\\n}\\n\\n/* ============================================================\\n Button — mirrors COSS button.tsx variants\\n ============================================================ */\\n\\n.uidex-btn {\\n position: relative;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: 8px;\\n border-radius: var(--radius-lg);\\n border: 1px solid transparent;\\n font-size: 14px;\\n font-weight: 500;\\n font-family: var(--font-sans);\\n white-space: nowrap;\\n cursor: pointer;\\n outline: none;\\n transition:\\n background-color 0.2s ease-in-out,\\n color 0.2s ease-in-out,\\n box-shadow 0.2s ease-in-out,\\n border-color 0.2s ease-in-out;\\n -webkit-font-smoothing: antialiased;\\n}\\n\\n.uidex-btn::before {\\n content: '';\\n position: absolute;\\n inset: 0;\\n pointer-events: none;\\n border-radius: calc(var(--radius-lg) - 1px);\\n}\\n\\n.uidex-btn:focus-visible {\\n outline: 2px solid var(--ring);\\n outline-offset: 1px;\\n}\\n\\n.uidex-btn:disabled {\\n opacity: 0.64;\\n pointer-events: none;\\n}\\n\\n/* Default variant — primary fill */\\n.uidex-btn--default {\\n border-color: var(--primary);\\n background: var(--primary);\\n color: var(--primary-foreground);\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05),\\n 0 1px 2px color-mix(in srgb, var(--primary) 24%, transparent);\\n}\\n\\n.uidex-btn--default::before {\\n box-shadow: inset 0 1px color-mix(in srgb, var(--primary-foreground) 16%, transparent);\\n}\\n\\n.uidex-btn--default:hover {\\n opacity: 0.9;\\n}\\n\\n.uidex-btn--default:active {\\n box-shadow: none;\\n}\\n\\n.uidex-btn--default:active::before {\\n box-shadow: inset 0 1px rgba(0, 0, 0, 0.08);\\n}\\n\\n/* Ghost variant */\\n.uidex-btn--ghost {\\n background: transparent;\\n color: var(--foreground);\\n}\\n\\n.uidex-btn--ghost::before {\\n display: none;\\n}\\n\\n.uidex-btn--ghost:hover {\\n background: var(--accent);\\n}\\n\\n/* Outline variant */\\n.uidex-btn--outline {\\n border-color: var(--input);\\n background: var(--popover);\\n color: var(--foreground);\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\\n}\\n\\n.uidex-btn--outline::before {\\n box-shadow: 0 -1px var(--border);\\n}\\n\\n.uidex-btn--outline:hover {\\n background: var(--input);\\n}\\n\\n.uidex-btn--outline:active {\\n box-shadow: none;\\n}\\n\\n/* Destructive variant */\\n.uidex-btn--destructive {\\n border-color: var(--destructive);\\n background: var(--destructive);\\n color: #ffffff;\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\\n}\\n\\n.uidex-btn--destructive::before {\\n box-shadow: inset 0 1px color-mix(in srgb, var(--primary-foreground) 16%, transparent);\\n}\\n\\n.uidex-btn--destructive:hover {\\n opacity: 0.9;\\n}\\n\\n/* Button sizes */\\n.uidex-btn--size-default {\\n height: 36px;\\n padding: 0 12px;\\n}\\n\\n.uidex-btn--size-sm {\\n height: 32px;\\n padding: 0 10px;\\n gap: 6px;\\n}\\n\\n.uidex-btn--size-xs {\\n height: 28px;\\n padding: 0 8px;\\n gap: 4px;\\n font-size: 12px;\\n border-radius: var(--radius-md);\\n}\\n\\n.uidex-btn--size-xs::before {\\n border-radius: calc(var(--radius-md) - 1px);\\n}\\n\\n.uidex-btn--size-icon {\\n width: 36px;\\n height: 36px;\\n padding: 0;\\n}\\n\\n.uidex-btn--size-icon-sm {\\n width: 32px;\\n height: 32px;\\n padding: 0;\\n}\\n\\n.uidex-btn--size-icon-xs {\\n width: 24px;\\n height: 24px;\\n padding: 0;\\n border-radius: var(--radius-md);\\n}\\n\\n.uidex-btn--size-icon-xs .uidex-icon {\\n width: 14px;\\n height: 14px;\\n}\\n\\n.uidex-btn .uidex-icon {\\n width: 16px;\\n height: 16px;\\n opacity: 0.8;\\n}\\n\\n.uidex-btn--size-xs .uidex-icon {\\n width: 14px;\\n height: 14px;\\n}\\n\\n/* ============================================================\\n Dialog — mirrors COSS dialog.tsx\\n ============================================================ */\\n\\n.uidex-dialog-backdrop {\\n position: fixed;\\n inset: 0;\\n z-index: 2147483646;\\n pointer-events: auto;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: rgba(0, 0, 0, 0.32);\\n backdrop-filter: blur(4px);\\n -webkit-backdrop-filter: blur(4px);\\n opacity: 0;\\n transition: opacity 0.2s ease-in-out;\\n}\\n\\n.uidex-dialog-backdrop--open {\\n opacity: 1;\\n}\\n\\n.uidex-dialog {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n background: var(--popover);\\n color: var(--popover-foreground);\\n border: 1px solid var(--border);\\n border-radius: var(--radius-2xl);\\n max-width: calc(100vw - 32px);\\n max-height: calc(100vh - 64px);\\n font-family: var(--font-sans);\\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -2px rgba(0, 0, 0, 0.05);\\n overflow: hidden;\\n -webkit-font-smoothing: antialiased;\\n opacity: 0;\\n transform: scale(0.98);\\n transform-origin: center;\\n will-change: transform;\\n transition:\\n opacity 0.2s ease-in-out,\\n transform 0.2s ease-in-out;\\n}\\n\\n.uidex-dialog--open {\\n opacity: 1;\\n transform: none;\\n}\\n\\n.uidex-dialog::before {\\n content: '';\\n position: absolute;\\n inset: 0;\\n pointer-events: none;\\n border-radius: calc(var(--radius-2xl) - 1px);\\n box-shadow: 0 -1px var(--border);\\n}\\n\\n/* Panel variant — sidebar layout */\\n.uidex-dialog--panel {\\n width: calc(100vw - 32px);\\n max-width: 720px;\\n height: calc(100vh - 64px);\\n max-height: 600px;\\n}\\n\\n/* Feedback variant — single column */\\n.uidex-dialog--feedback {\\n width: calc(100vw - 32px);\\n max-width: 400px;\\n}\\n\\n.uidex-dialog-header {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n padding: 16px 24px;\\n padding-right: 48px;\\n border-bottom: 1px solid var(--border);\\n}\\n\\n.uidex-dialog-title {\\n margin: 0;\\n font-size: 20px;\\n font-weight: 600;\\n line-height: 1;\\n color: var(--foreground);\\n font-family: var(--font-sans);\\n}\\n\\n.uidex-dialog-body {\\n flex: 1;\\n min-height: 0;\\n overflow-y: auto;\\n scrollbar-width: thin;\\n scrollbar-color: rgba(128, 128, 128, 0.2) transparent;\\n}\\n\\n.uidex-dialog-body::-webkit-scrollbar {\\n width: 6px;\\n}\\n\\n.uidex-dialog-body::-webkit-scrollbar-track {\\n background: transparent;\\n}\\n\\n.uidex-dialog-body::-webkit-scrollbar-thumb {\\n background: rgba(128, 128, 128, 0.2);\\n border-radius: 9999px;\\n}\\n\\n.uidex-dialog-footer {\\n display: flex;\\n align-items: center;\\n justify-content: flex-end;\\n gap: 8px;\\n padding: 16px 24px;\\n border-top: 1px solid var(--border);\\n background: var(--muted);\\n border-radius: 0 0 calc(var(--radius-2xl) - 1px)\\n calc(var(--radius-2xl) - 1px);\\n}\\n\\n.uidex-dialog-close {\\n position: absolute;\\n right: 8px;\\n top: 8px;\\n z-index: 1;\\n}\\n\\n/* ——— Panel body layout (sidebar + main) ——— */\\n.uidex-panel-body {\\n display: flex;\\n flex: 1;\\n min-height: 0;\\n}\\n\\n.uidex-panel-sidebar {\\n width: 200px;\\n flex-shrink: 0;\\n border-right: 1px solid var(--border);\\n overflow-y: auto;\\n padding: 0;\\n scrollbar-width: thin;\\n scrollbar-color: rgba(128, 128, 128, 0.2) transparent;\\n}\\n\\n.uidex-panel-sidebar::-webkit-scrollbar {\\n width: 6px;\\n}\\n\\n.uidex-panel-sidebar::-webkit-scrollbar-track {\\n background: transparent;\\n}\\n\\n.uidex-panel-sidebar::-webkit-scrollbar-thumb {\\n background: rgba(128, 128, 128, 0.2);\\n border-radius: 9999px;\\n}\\n\\n.uidex-panel-main {\\n flex: 1;\\n min-width: 0;\\n overflow-y: auto;\\n padding: 24px;\\n scrollbar-width: thin;\\n scrollbar-color: rgba(128, 128, 128, 0.2) transparent;\\n}\\n\\n.uidex-panel-main::-webkit-scrollbar {\\n width: 6px;\\n}\\n\\n.uidex-panel-main::-webkit-scrollbar-track {\\n background: transparent;\\n}\\n\\n.uidex-panel-main::-webkit-scrollbar-thumb {\\n background: rgba(128, 128, 128, 0.2);\\n border-radius: 9999px;\\n}\\n\\n.uidex-control--flex-fill {\\n flex: 1;\\n min-width: 0;\\n}\\n\\n.uidex-dialog-body--padded {\\n padding: 12px 16px;\\n}\\n\\n/* ============================================================\\n Control wrapper — shared base for input, textarea, select\\n ============================================================ */\\n\\n.uidex-control {\\n position: relative;\\n display: inline-flex;\\n width: 100%;\\n border-radius: var(--radius-lg);\\n border: 1px solid var(--input);\\n background: var(--background);\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\\n transition:\\n border-color 0.2s ease-in-out,\\n box-shadow 0.2s ease-in-out;\\n}\\n\\n.uidex-control::before {\\n content: '';\\n position: absolute;\\n inset: 0;\\n pointer-events: none;\\n border-radius: calc(var(--radius-lg) - 1px);\\n box-shadow: 0 -1px var(--border);\\n}\\n\\n.uidex-control:focus-within {\\n border-color: var(--ring);\\n outline: 3px solid color-mix(in srgb, var(--ring) 24%, transparent);\\n outline-offset: -1px;\\n box-shadow: none;\\n}\\n\\n.uidex-control:focus-within::before {\\n box-shadow: none;\\n}\\n\\n/* ——— Input ——— */\\n\\n.uidex-input {\\n width: 100%;\\n min-width: 0;\\n height: 30px;\\n padding: 0 10px;\\n border: none;\\n border-radius: inherit;\\n background: transparent;\\n color: var(--foreground);\\n font-size: 14px;\\n font-family: var(--font-sans);\\n outline: none;\\n line-height: 30px;\\n}\\n\\n.uidex-input::placeholder {\\n color: var(--muted-foreground);\\n opacity: 0.72;\\n}\\n\\n.uidex-control--sm .uidex-input {\\n height: 26px;\\n line-height: 26px;\\n padding: 0 8px;\\n}\\n\\n/* ——— Textarea ——— */\\n\\n.uidex-textarea {\\n width: 100%;\\n min-width: 0;\\n padding: 8px 10px;\\n border: none;\\n border-radius: inherit;\\n background: transparent;\\n color: var(--foreground);\\n font-size: 14px;\\n font-family: var(--font-sans);\\n outline: none;\\n line-height: 1.5;\\n resize: vertical;\\n min-height: 80px;\\n}\\n\\n.uidex-textarea::placeholder {\\n color: var(--muted-foreground);\\n opacity: 0.72;\\n}\\n\\n/* ——— Select ——— */\\n\\n.uidex-select {\\n width: 100%;\\n height: 30px;\\n padding: 0 26px 0 10px;\\n border: none;\\n border-radius: inherit;\\n background: transparent;\\n color: var(--foreground);\\n font-size: 14px;\\n font-family: var(--font-sans);\\n outline: none;\\n appearance: none;\\n cursor: pointer;\\n background-image: url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 256 256'%3E%3Cpath fill='%237f7f7f' d='M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80a8,8,0,0,1,11.32-11.32L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z'/%3E%3C/svg%3E\\\");\\n background-repeat: no-repeat;\\n background-position: right 6px center;\\n background-size: 16px;\\n}\\n\\n/* ============================================================\\n Badge — mirrors COSS badge.tsx\\n ============================================================ */\\n\\n.uidex-badge {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: 4px;\\n height: 18px;\\n min-width: 18px;\\n padding: 0 4px;\\n border-radius: var(--radius-sm);\\n border: 1px solid transparent;\\n font-size: 12px;\\n font-weight: 500;\\n font-family: var(--font-sans);\\n white-space: nowrap;\\n}\\n\\n.uidex-badge--sm {\\n height: 16px;\\n min-width: 16px;\\n font-size: 10px;\\n}\\n\\n.uidex-badge--default {\\n background: var(--primary);\\n color: var(--primary-foreground);\\n}\\n\\n.uidex-badge--outline {\\n border-color: var(--input);\\n background: var(--background);\\n color: var(--foreground);\\n}\\n\\n.uidex-badge--pages {\\n color: var(--info);\\n border-color: color-mix(\\n in srgb,\\n var(--info) 30%,\\n transparent\\n );\\n}\\n\\n.uidex-badge--features {\\n color: var(--uidex-feature);\\n border-color: color-mix(\\n in srgb,\\n var(--uidex-feature) 30%,\\n transparent\\n );\\n}\\n\\n.uidex-badge--components {\\n color: var(--uidex-component);\\n border-color: color-mix(\\n in srgb,\\n var(--uidex-component) 30%,\\n transparent\\n );\\n}\\n\\n.uidex-badge--blocks {\\n color: var(--uidex-block);\\n border-color: color-mix(\\n in srgb,\\n var(--uidex-block) 30%,\\n transparent\\n );\\n}\\n\\n.uidex-badge--spaced {\\n margin-bottom: 12px;\\n}\\n\\n/* ============================================================\\n Chip — small clickable tags\\n ============================================================ */\\n\\n.uidex-chip {\\n display: inline-flex;\\n align-items: center;\\n padding: 2px 6px;\\n border-radius: var(--radius-sm);\\n border: 1px solid var(--border);\\n background: transparent;\\n font-family: var(--font-sans);\\n font-size: 12px;\\n color: var(--foreground);\\n transition: background-color 0.2s ease-in-out;\\n}\\n\\n.uidex-chip:hover {\\n background: var(--accent);\\n}\\n\\n.uidex-chip--dimmed {\\n opacity: 0.4;\\n}\\n\\n.uidex-chip--pages {\\n color: var(--info);\\n border-color: color-mix(\\n in srgb,\\n var(--info) 30%,\\n transparent\\n );\\n}\\n\\n.uidex-chip--features {\\n color: var(--uidex-feature);\\n border-color: color-mix(\\n in srgb,\\n var(--uidex-feature) 30%,\\n transparent\\n );\\n}\\n\\n.uidex-chip--components {\\n color: var(--uidex-component);\\n border-color: color-mix(\\n in srgb,\\n var(--uidex-component) 30%,\\n transparent\\n );\\n}\\n\\n.uidex-chip--blocks {\\n color: var(--uidex-block);\\n border-color: color-mix(\\n in srgb,\\n var(--uidex-block) 30%,\\n transparent\\n );\\n}\\n\\n.uidex-chip-group {\\n display: flex;\\n flex-wrap: wrap;\\n gap: 4px;\\n}\\n\\n.uidex-chip-group--spaced {\\n margin-bottom: 8px;\\n}\\n\\n/* ============================================================\\n Separator\\n ============================================================ */\\n\\n.uidex-separator {\\n background: var(--border);\\n height: 1px;\\n width: 100%;\\n flex-shrink: 0;\\n}\\n\\n.uidex-separator--vertical {\\n width: 1px;\\n height: auto;\\n align-self: stretch;\\n}\\n\\n/* ============================================================\\n Code block\\n ============================================================ */\\n\\n.uidex-code {\\n display: block;\\n font-family: var(--font-mono);\\n font-size: 14px;\\n color: var(--foreground);\\n background: var(--card);\\n padding: 6px 10px;\\n border-radius: var(--radius-md);\\n border: 1px solid var(--border);\\n word-break: break-all;\\n}\\n\\n.uidex-code--inline {\\n display: inline;\\n border: none;\\n background: none;\\n padding: 0;\\n word-break: normal;\\n}\\n\\n/* ============================================================\\n Label — section heading, muted small text\\n ============================================================ */\\n\\n.uidex-label {\\n font-size: 12px;\\n font-weight: 500;\\n color: var(--muted-foreground);\\n margin-bottom: 6px;\\n}\\n\\n/* ============================================================\\n Field — form label + control wrapper\\n ============================================================ */\\n\\n.uidex-field {\\n display: flex;\\n flex-direction: column;\\n gap: 4px;\\n}\\n\\n.uidex-field-label {\\n font-size: 14px;\\n font-weight: 500;\\n color: var(--muted-foreground);\\n}\\n\\n/* ============================================================\\n Form\\n ============================================================ */\\n\\n.uidex-form {\\n display: flex;\\n flex-direction: column;\\n gap: 12px;\\n}\\n\\n/* ============================================================\\n Toggle — checkbox + label\\n ============================================================ */\\n\\n.uidex-toggle {\\n display: inline-flex;\\n align-items: flex-start;\\n gap: 8px;\\n cursor: pointer;\\n}\\n\\n.uidex-toggle-checkbox,\\n.uidex-checklist-checkbox {\\n -webkit-appearance: none;\\n appearance: none;\\n flex-shrink: 0;\\n margin: 0;\\n width: 16px;\\n height: 16px;\\n border: 1px solid var(--input);\\n border-radius: 4px;\\n background: var(--background);\\n cursor: pointer;\\n position: relative;\\n transition: background-color 0.15s ease-in-out,\\n border-color 0.15s ease-in-out;\\n}\\n\\n.uidex-toggle-checkbox:checked,\\n.uidex-checklist-checkbox:checked {\\n background: var(--primary);\\n border-color: var(--primary);\\n}\\n\\n.uidex-toggle-checkbox:checked::after,\\n.uidex-checklist-checkbox:checked::after {\\n content: '';\\n position: absolute;\\n inset: 0;\\n background: var(--primary-foreground);\\n -webkit-mask-image: url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5.252 12.7 10.2 18.63 18.748 5.37'/%3E%3C/svg%3E\\\");\\n mask-image: url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5.252 12.7 10.2 18.63 18.748 5.37'/%3E%3C/svg%3E\\\");\\n -webkit-mask-size: 12px;\\n mask-size: 12px;\\n -webkit-mask-repeat: no-repeat;\\n mask-repeat: no-repeat;\\n -webkit-mask-position: center;\\n mask-position: center;\\n}\\n\\n.uidex-toggle-checkbox:focus-visible,\\n.uidex-checklist-checkbox:focus-visible {\\n outline: 2px solid var(--ring);\\n outline-offset: 1px;\\n}\\n\\n.uidex-toggle-text {\\n font-size: 14px;\\n line-height: 16px;\\n font-weight: 500;\\n color: var(--foreground);\\n}\\n\\n/* ============================================================\\n Section — content grouping\\n ============================================================ */\\n\\n.uidex-section {\\n margin-bottom: 12px;\\n}\\n\\n.uidex-section:last-child {\\n margin-bottom: 0;\\n}\\n\\n.uidex-section--spaced {\\n margin-top: 12px;\\n}\\n\\n/* ============================================================\\n Container — fixed position for trigger group\\n ============================================================ */\\n\\n.uidex-container {\\n position: fixed;\\n z-index: 2147483644;\\n pointer-events: auto;\\n font-family: var(--font-sans);\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n\\n.uidex-bottom-right {\\n bottom: 20px;\\n right: 20px;\\n}\\n.uidex-bottom-left {\\n bottom: 20px;\\n left: 20px;\\n}\\n.uidex-top-right {\\n top: 20px;\\n right: 20px;\\n}\\n.uidex-top-left {\\n top: 20px;\\n left: 20px;\\n}\\n\\n/* ============================================================\\n Trigger button group — COSS outline button group\\n ============================================================ */\\n\\n.uidex-trigger-group {\\n position: relative;\\n display: flex;\\n align-items: center;\\n border-radius: var(--radius-lg);\\n background: var(--popover);\\n border: 1px solid var(--input);\\n overflow: hidden;\\n user-select: none;\\n height: 32px;\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\\n}\\n\\n.uidex-trigger-group::before {\\n content: '';\\n position: absolute;\\n inset: 0;\\n pointer-events: none;\\n border-radius: calc(var(--radius-lg) - 1px);\\n box-shadow: 0 -1px var(--border);\\n}\\n\\n.uidex-trigger-btn {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n gap: 6px;\\n height: 100%;\\n padding: 0 10px;\\n border: none;\\n background: transparent;\\n color: var(--muted-foreground);\\n font-size: 14px;\\n font-weight: 500;\\n font-family: var(--font-sans);\\n cursor: pointer;\\n outline: none;\\n transition:\\n background-color 0.2s ease-in-out,\\n color 0.2s ease-in-out;\\n}\\n\\n.uidex-trigger-btn:hover {\\n background: var(--accent);\\n color: var(--foreground);\\n}\\n\\n.uidex-trigger-btn:active {\\n background: var(--input);\\n}\\n\\n.uidex-trigger-btn--active {\\n color: var(--foreground);\\n background: var(--input);\\n}\\n\\n.uidex-trigger-btn--active:hover {\\n background: var(--accent);\\n}\\n\\n.uidex-trigger-btn:focus-visible {\\n outline: 2px solid var(--ring);\\n outline-offset: -2px;\\n}\\n\\n.uidex-trigger-icon {\\n width: 14px;\\n height: 14px;\\n flex-shrink: 0;\\n opacity: 0.8;\\n}\\n\\n.uidex-trigger-divider {\\n width: 1px;\\n height: 16px;\\n background: var(--border);\\n flex-shrink: 0;\\n}\\n\\n/* Draggable */\\n.uidex-container--dragging {\\n transition: none !important;\\n}\\n\\n.uidex-container--dragging .uidex-trigger-btn {\\n cursor: grabbing !important;\\n}\\n\\n/* ============================================================\\n Inspect mode cursor\\n ============================================================ */\\n\\nbody.uidex-inspecting,\\nbody.uidex-inspecting * {\\n cursor: crosshair !important;\\n}\\n\\n/* ============================================================\\n Sidebar navigation\\n ============================================================ */\\n\\n.uidex-sidebar-back {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n padding: 8px;\\n margin: 0;\\n border-bottom: 1px solid var(--border);\\n font-size: 14px;\\n font-weight: 600;\\n color: var(--muted-foreground);\\n cursor: pointer;\\n transition: color 0.2s ease-in-out;\\n position: sticky;\\n top: 0;\\n background: var(--popover);\\n z-index: 1;\\n}\\n\\n.uidex-sidebar-back:hover {\\n color: var(--foreground);\\n}\\n\\n.uidex-sidebar-back-icon {\\n width: 16px;\\n height: 16px;\\n flex-shrink: 0;\\n}\\n\\n.uidex-sidebar-root-item {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n padding: 8px;\\n margin: 0 4px;\\n border-radius: var(--radius-lg);\\n min-height: 32px;\\n font-size: 14px;\\n font-weight: 500;\\n color: var(--foreground);\\n cursor: pointer;\\n transition: background-color 0.2s ease-in-out;\\n}\\n\\n.uidex-sidebar-root-item:hover {\\n background: var(--accent);\\n}\\n\\n.uidex-sidebar-root-item--active {\\n background: var(--input);\\n}\\n\\n.uidex-sidebar-root-label {\\n flex: 0 0 auto;\\n}\\n\\n.uidex-sidebar-count {\\n font-size: 12px;\\n color: var(--muted-foreground);\\n font-weight: 400;\\n}\\n\\n.uidex-sidebar-chevron {\\n margin-left: auto;\\n color: var(--muted-foreground);\\n}\\n\\n.uidex-sidebar-chevron .uidex-icon {\\n width: 16px;\\n height: 16px;\\n}\\n\\n.uidex-sidebar-item {\\n display: flex;\\n align-items: center;\\n padding: 8px;\\n margin: 0 4px;\\n border-radius: var(--radius-lg);\\n min-height: 32px;\\n font-size: 14px;\\n color: var(--foreground);\\n cursor: pointer;\\n transition: background-color 0.2s ease-in-out;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n\\n.uidex-sidebar-item:hover {\\n background: var(--accent);\\n}\\n\\n.uidex-sidebar-item--active {\\n background: var(--input);\\n color: var(--foreground);\\n font-weight: 500;\\n}\\n\\n.uidex-sidebar-item--active:hover {\\n background: var(--input);\\n}\\n\\n.uidex-sidebar-item--dimmed {\\n opacity: 0.5;\\n}\\n\\n.uidex-sidebar-item--mono {\\n font-family: var(--font-mono);\\n}\\n\\n.uidex-sidebar-item--grouped {\\n padding-left: 28px;\\n}\\n\\n/* Sidebar category colors */\\n.uidex-sidebar-item--pages.uidex-sidebar-item--active {\\n color: var(--info);\\n}\\n\\n.uidex-sidebar-item--features.uidex-sidebar-item--active {\\n color: var(--uidex-feature);\\n}\\n\\n.uidex-sidebar-item--components.uidex-sidebar-item--active {\\n color: var(--uidex-component);\\n}\\n\\n.uidex-sidebar-item--blocks.uidex-sidebar-item--active {\\n color: var(--uidex-block);\\n}\\n\\n.uidex-sidebar-root-item--pages .uidex-sidebar-root-label {\\n color: var(--info);\\n}\\n\\n.uidex-sidebar-root-item--features .uidex-sidebar-root-label {\\n color: var(--uidex-feature);\\n}\\n\\n.uidex-sidebar-root-item--components .uidex-sidebar-root-label {\\n color: var(--uidex-component);\\n}\\n\\n.uidex-sidebar-root-item--blocks .uidex-sidebar-root-label {\\n color: var(--uidex-block);\\n}\\n\\n.uidex-sidebar-item--block {\\n color: var(--uidex-block);\\n font-style: italic;\\n}\\n\\n.uidex-sidebar-item--block.uidex-sidebar-item--active {\\n color: var(--uidex-block);\\n}\\n\\n/* Sidebar component groups */\\n.uidex-sidebar-group-header {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n padding: 8px;\\n margin: 0 4px;\\n border-radius: var(--radius-lg);\\n min-height: 32px;\\n font-size: 14px;\\n font-weight: 600;\\n color: var(--foreground);\\n cursor: pointer;\\n transition: background-color 0.2s ease-in-out;\\n user-select: none;\\n}\\n\\n.uidex-sidebar-group-header:hover {\\n background: var(--accent);\\n}\\n\\n.uidex-sidebar-group-chevron {\\n font-size: 16px;\\n line-height: 1;\\n color: var(--muted-foreground);\\n width: 16px;\\n text-align: center;\\n flex-shrink: 0;\\n transition: transform 0.2s ease-in-out;\\n transform: rotate(0deg);\\n}\\n\\n.uidex-sidebar-group-header--expanded .uidex-sidebar-group-chevron {\\n transform: rotate(90deg);\\n}\\n\\n.uidex-sidebar-group-count {\\n margin-left: auto;\\n font-size: 12px;\\n font-weight: 400;\\n color: var(--muted-foreground);\\n}\\n\\n/* ============================================================\\n Search\\n ============================================================ */\\n\\n/* ============================================================\\n Main content\\n ============================================================ */\\n\\n.uidex-main-title {\\n margin: 0 0 8px;\\n font-size: 20px;\\n font-weight: 600;\\n line-height: 1;\\n color: var(--foreground);\\n}\\n\\n.uidex-main-title--mono {\\n font-family: var(--font-mono);\\n}\\n\\n.uidex-absent-notice {\\n font-size: 14px;\\n color: var(--muted-foreground);\\n font-style: italic;\\n margin-bottom: 12px;\\n}\\n\\n/* ============================================================\\n Page markdown content\\n ============================================================ */\\n\\n.uidex-page-content {\\n font-size: 14px;\\n line-height: 1.6;\\n color: var(--foreground);\\n}\\n\\n.uidex-page-content h2,\\n.uidex-page-content h3,\\n.uidex-page-content h4,\\n.uidex-page-content h5,\\n.uidex-page-content h6 {\\n margin: 12px 0 6px;\\n font-size: 14px;\\n font-weight: 600;\\n color: var(--foreground);\\n}\\n\\n.uidex-page-content h2 {\\n font-size: 16px;\\n}\\n\\n.uidex-page-content p {\\n margin: 0 0 8px;\\n}\\n\\n.uidex-checklist {\\n list-style: none;\\n margin: 0 0 8px;\\n padding-left: 0;\\n}\\n\\n.uidex-checklist-item {\\n margin-bottom: 4px;\\n}\\n\\n.uidex-checklist-label {\\n display: inline-flex;\\n align-items: flex-start;\\n gap: 8px;\\n cursor: pointer;\\n font-size: 14px;\\n line-height: 16px;\\n font-weight: 500;\\n color: var(--foreground);\\n}\\n\\n/* checkbox styles in shared .uidex-toggle-checkbox / .uidex-checklist-checkbox block above */\\n\\n/* ============================================================\\n Empty state\\n ============================================================ */\\n\\n.uidex-empty-message {\\n padding: 16px 12px;\\n color: var(--muted-foreground);\\n font-size: 14px;\\n text-align: center;\\n}\\n\\n/* ============================================================\\n Input group — mirrors COSS InputGroup (input + inline addon)\\n ============================================================ */\\n\\n.uidex-input-group {\\n display: inline-flex;\\n width: 100%;\\n min-width: 0;\\n align-items: center;\\n border-radius: var(--radius-lg);\\n border: 1px solid var(--input);\\n background: var(--background);\\n font-size: 14px;\\n color: var(--foreground);\\n margin-bottom: 6px;\\n box-shadow: 0 -1px var(--border);\\n}\\n\\n.uidex-input-group:last-child {\\n margin-bottom: 0;\\n}\\n\\n.uidex-input-group-text {\\n flex: 1;\\n min-width: 0;\\n height: 30px;\\n padding: 0 11px;\\n font-size: 14px;\\n line-height: 30px;\\n word-break: break-all;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n\\n.uidex-input-group-addon {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding-right: 7px;\\n flex-shrink: 0;\\n}\\n\\n/* ============================================================\\n Environment info\\n ============================================================ */\\n\\n.uidex-env-item {\\n font-size: 14px;\\n color: var(--muted-foreground);\\n line-height: 1.6;\\n}\\n\\n/* ============================================================\\n Doc/description text\\n ============================================================ */\\n\\n.uidex-doc {\\n margin: 0;\\n font-size: 14px;\\n line-height: 1.5;\\n color: var(--muted-foreground);\\n}\\n\\n.uidex-doc--spaced {\\n margin-bottom: 12px;\\n}\\n\\n/* ============================================================\\n Header spacer (flex grow to push close button right)\\n ============================================================ */\\n\\n.uidex-header-spacer {\\n flex: 1;\\n}\\n\\n/* ============================================================\\n Graph visualization\\n ============================================================ */\\n\\n.uidex-graph {\\n margin-top: 8px;\\n}\\n\\n.uidex-graph-svg {\\n display: block;\\n}\\n\\n.uidex-graph-header {\\n font-size: 10px;\\n font-weight: 600;\\n}\\n\\n.uidex-graph-header--pages {\\n fill: var(--info);\\n}\\n.uidex-graph-header--features {\\n fill: var(--uidex-feature);\\n}\\n.uidex-graph-header--blocks {\\n fill: var(--uidex-block);\\n}\\n.uidex-graph-header--components {\\n fill: var(--uidex-component);\\n}\\n\\n.uidex-graph-node {\\n cursor: pointer;\\n}\\n\\n.uidex-graph-node rect {\\n fill: var(--card);\\n stroke: var(--border);\\n stroke-width: 1;\\n rx: 6;\\n ry: 6;\\n}\\n\\n.uidex-graph-node:hover rect {\\n fill: var(--accent);\\n}\\n\\n.uidex-graph-node--page rect {\\n stroke: color-mix(\\n in srgb,\\n var(--info) 50%,\\n transparent\\n );\\n}\\n.uidex-graph-node--feature rect {\\n stroke: color-mix(\\n in srgb,\\n var(--uidex-feature) 50%,\\n transparent\\n );\\n}\\n.uidex-graph-node--block rect {\\n stroke: color-mix(\\n in srgb,\\n var(--uidex-block) 50%,\\n transparent\\n );\\n}\\n.uidex-graph-node--component rect {\\n stroke: color-mix(\\n in srgb,\\n var(--uidex-component) 50%,\\n transparent\\n );\\n}\\n\\n.uidex-graph-label {\\n font-size: 10px;\\n font-family: var(--font-mono);\\n fill: var(--foreground);\\n}\\n\\n.uidex-graph-edge {\\n fill: none;\\n stroke-width: 1;\\n opacity: 0.3;\\n}\\n\\n.uidex-graph-edge--page {\\n stroke: var(--info);\\n}\\n.uidex-graph-edge--feature {\\n stroke: var(--uidex-feature);\\n}\\n.uidex-graph-edge--block {\\n stroke: var(--uidex-block);\\n stroke-dasharray: 4 3;\\n}\\n\\n.uidex-graph-svg.uidex-graph--hover .uidex-graph-edge {\\n opacity: 0.08;\\n}\\n.uidex-graph-svg.uidex-graph--hover .uidex-graph-node {\\n opacity: 0.3;\\n}\\n.uidex-graph-svg.uidex-graph--hover .uidex-graph-edge--highlighted {\\n opacity: 0.6;\\n stroke-width: 1.5;\\n}\\n.uidex-graph-svg.uidex-graph--hover .uidex-graph-node--highlighted {\\n opacity: 1;\\n}\\n\\n.uidex-graph-note {\\n font-size: 14px;\\n color: var(--muted-foreground);\\n margin-top: 12px;\\n font-style: italic;\\n}\\n\\n/* ============================================================\\n Responsive\\n ============================================================ */\\n\\n@media (max-width: 600px) {\\n .uidex-dialog--panel {\\n width: auto;\\n }\\n\\n .uidex-panel-body {\\n flex-direction: column;\\n }\\n\\n .uidex-panel-sidebar {\\n width: auto;\\n max-height: 200px;\\n border-right: none;\\n border-bottom: 1px solid var(--border);\\n }\\n}\\n\\n/* ============================================================\\n Overlay — renders in document.body outside Shadow DOM.\\n All styles set inline in overlay.ts. These classes retained\\n for consumers who import style.css standalone.\\n ============================================================ */\\n\\n.uidex-overlay {\\n position: fixed;\\n pointer-events: none;\\n z-index: 2147483645;\\n}\\n\";\nexport default cssText;\n","import cssText from './css-text';\n\n/**\n * Injects the uidex styles into a shadow root as a <style> element.\n * This isolates all uidex CSS from the host page.\n */\nexport function injectStyles(shadowRoot: ShadowRoot): void {\n const style = document.createElement('style');\n style.textContent = cssText;\n shadowRoot.appendChild(style);\n}\n","import { getContrastColor, LABEL_FONT } from './utils';\n\nconst OFFSET = 12;\nconst Z_INDEX = '2147483645';\n\nexport class CursorTooltip {\n private element: HTMLDivElement | null = null;\n\n show(x: number, y: number, label: string, color: string): void {\n if (!this.element) {\n this.createElement();\n }\n\n const el = this.element!;\n el.textContent = label;\n el.style.backgroundColor = color;\n el.style.color = getContrastColor(color);\n\n // Center below cursor\n const width = el.offsetWidth || 80;\n const height = el.offsetHeight || 22;\n\n let left = x - width / 2;\n let top = y + OFFSET;\n\n // Clamp to viewport edges\n if (left < 0) left = 0;\n if (left + width > window.innerWidth) left = window.innerWidth - width;\n if (top + height > window.innerHeight) {\n top = y - OFFSET - height;\n }\n\n el.style.left = `${left}px`;\n el.style.top = `${top}px`;\n\n if (!el.parentNode) {\n document.body.appendChild(el);\n }\n }\n\n hide(): void {\n if (this.element?.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n }\n\n destroy(): void {\n this.hide();\n this.element = null;\n }\n\n private createElement(): void {\n this.element = document.createElement('div');\n this.element.className = 'uidex-cursor-tooltip';\n this.element.setAttribute('data-testid', 'cursor-tooltip');\n\n this.element.style.position = 'fixed';\n this.element.style.pointerEvents = 'none';\n this.element.style.zIndex = Z_INDEX;\n this.element.style.fontFamily = LABEL_FONT;\n this.element.style.fontSize = '11px';\n this.element.style.fontWeight = '500';\n this.element.style.padding = '2px 6px';\n this.element.style.borderRadius = '6px';\n this.element.style.whiteSpace = 'nowrap';\n this.element.style.boxShadow = '0 1px 3px rgba(0,0,0,0.2)';\n }\n}\n","import type { UidexUIOptions, UidexMap, UidexTheme } from './types';\nimport { Menu } from './menu';\nimport { Overlay } from './overlay';\nimport { Inspector } from './inspector';\nimport { ModalManager } from './modal';\nimport { getComponents, getPages, getFeatures } from './registry';\nimport { injectStyles } from './shadow';\nimport { IngestCapture, generateSessionId } from './ingest';\nimport { CursorTooltip } from './cursor-tooltip';\nimport { OVERLAY_COLORS, resolveColor } from './utils';\n\ntype ActiveMode = 'inspect' | 'copy' | 'feedback';\n\nconst MODE_CYCLE: (ActiveMode | null)[] = ['inspect', 'copy', 'feedback', null];\n\nexport class UidexUI {\n private menu: Menu;\n private overlay: Overlay;\n private blockOverlay: Overlay;\n private modal: ModalManager;\n private inspector: Inspector | null;\n private options: UidexUIOptions;\n private mounted = false;\n private shadowHost: HTMLElement | null = null;\n private shadowRoot: ShadowRoot | null = null;\n private themeWrapper: HTMLElement | null = null;\n private observer: MutationObserver | null = null;\n private refreshTimer: ReturnType<typeof setTimeout> | null = null;\n private copyTimer: ReturnType<typeof setTimeout> | null = null;\n private currentPresentIds: string[] = [];\n private activeMode: ActiveMode | null = null;\n private sessionId: string;\n private capture: IngestCapture | null = null;\n private theme: UidexTheme;\n private mediaQuery: MediaQueryList | null = null;\n private boundMediaChange: (() => void) | null = null;\n private classObserver: MutationObserver | null = null;\n private cursorTooltip: CursorTooltip;\n private pinnedOverlays: Overlay[] = [];\n\n constructor(options: UidexUIOptions = {}) {\n this.options = options;\n this.sessionId = generateSessionId();\n this.theme = options.theme ?? 'auto';\n\n if (options.ingest?.captureConsole || options.ingest?.captureNetwork) {\n this.capture = new IngestCapture(\n options.ingest.captureConsole ?? false,\n options.ingest.captureNetwork ?? false\n );\n }\n\n this.overlay = new Overlay(this.overlayConfig);\n\n this.blockOverlay = new Overlay({\n color: OVERLAY_COLORS.block,\n borderStyle: 'solid',\n borderWidth: 2,\n colors: options.config?.colors,\n opacity: 0.5,\n padding: 4,\n fillOpacity: 0.04,\n });\n\n this.cursorTooltip = new CursorTooltip();\n\n this.modal = new ModalManager({\n onComponentNavigate: (id) => {\n this.scrollAndHighlight(id);\n this.options.onSelect?.(id);\n },\n onLocate: (id) => this.scrollAndHighlight(id),\n elementGetter: (id) => this.findElement(id),\n ingest: options.ingest,\n onSubmit: options.onSubmit,\n sessionId: this.sessionId,\n getConsoleLogs: () => this.capture?.getConsoleLogs() ?? [],\n getNetworkErrors: () => this.capture?.getNetworkErrors() ?? [],\n });\n\n this.menu = new Menu({\n onInspectCycle: () => this.cycleMode(),\n onModeSelect: (mode) => this.setMode(mode),\n onPageClick: () => this.handlePageClick(),\n onCommandClick: () => this.handleCommandClick(),\n });\n\n if (options.inspectShortcut === false) {\n this.inspector = null;\n } else {\n this.inspector = new Inspector({\n shortcut: options.inspectShortcut,\n onHighlight: (element, id, parentBlock, cursor) =>\n this.handleHighlight(element, id, parentBlock, cursor),\n onSelect: (element, id, opts) => this.handleSelect(element, id, opts),\n onActivate: () => {\n this.menu.setActiveMode(this.activeMode);\n },\n onDeactivate: () => {\n this.overlay.hide();\n this.blockOverlay.hide();\n this.cursorTooltip.hide();\n this.lastHighlightedElement = null;\n this.clearPinnedOverlays();\n this.activeMode = null;\n this.menu.setActiveMode(null);\n },\n });\n }\n }\n\n mount(container?: HTMLElement): void {\n if (this.mounted) return;\n\n const components = this.getComponentsMap();\n const componentIds = Object.keys(components);\n\n if (componentIds.length === 0) return;\n\n // Create Shadow DOM host — zero-size, no layout impact,\n // but allows pointer events to reach fixed-position children (modal backdrop).\n this.shadowHost = document.createElement('div');\n this.shadowHost.id = 'uidex-root';\n // Fixed position keeps the host out of document flow so it cannot\n // contribute to scrollable overflow. Children (also fixed) position\n // relative to the viewport regardless of the host's box.\n this.shadowHost.style.position = 'fixed';\n this.shadowHost.style.top = '0';\n this.shadowHost.style.left = '0';\n this.shadowHost.style.width = '0';\n this.shadowHost.style.height = '0';\n this.shadowHost.style.pointerEvents = 'none';\n this.shadowHost.style.zIndex = '2147483646';\n\n this.shadowRoot = this.shadowHost.attachShadow({ mode: 'open' });\n\n // Inject styles into shadow root\n injectStyles(this.shadowRoot);\n\n // Theme wrapper — lives inside shadow root, provides:\n // • pointer-events: auto (shadow host is pointer-events: none)\n // • .dark class for Tailwind dark: variants (CSS vars use :host(.light))\n // • Portal container for Base UI dialogs\n this.themeWrapper = document.createElement('div');\n this.themeWrapper.style.pointerEvents = 'auto';\n this.shadowRoot.appendChild(this.themeWrapper);\n\n // Apply theme (toggles classes on shadowHost + themeWrapper)\n this.applyTheme();\n\n // Filter to only components present in the DOM right now\n const presentIds = this.scanPresentIds(componentIds);\n\n const position = this.options.buttonPosition ?? 'bottom-right';\n this.menu.setPosition(position);\n const menuContainer = this.menu.create();\n\n // Mount shadow host and UI inside theme wrapper\n const mountTarget = container ?? document.body;\n mountTarget.appendChild(this.shadowHost);\n this.themeWrapper.appendChild(menuContainer);\n\n // Theme wrapper is the portal container for tooltips and dialogs\n this.menu.setContainer(this.themeWrapper);\n this.modal.setContainer(this.themeWrapper);\n\n // Provide modal with current data\n this.updateModalData(presentIds);\n\n // Update menu with page availability\n const pages = this.getPagesArray();\n this.menu.setHasPages(pages.length > 0);\n\n this.inspector?.mount();\n this.capture?.start();\n\n // Watch for DOM changes (SPA navigation, dynamic rendering)\n this.startObserving();\n\n this.mounted = true;\n }\n\n /** Change the widget theme at runtime. */\n setTheme(theme: UidexTheme): void {\n this.theme = theme;\n this.applyTheme();\n }\n\n private resolveAutoTheme(): 'dark' | 'light' {\n const { classList } = document.documentElement;\n if (classList.contains('dark')) return 'dark';\n if (classList.contains('light')) return 'light';\n // No theme class — fall back to OS preference\n return typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light';\n }\n\n private cleanupThemeListeners(): void {\n if (this.boundMediaChange && this.mediaQuery) {\n this.mediaQuery.removeEventListener('change', this.boundMediaChange);\n this.boundMediaChange = null;\n this.mediaQuery = null;\n }\n if (this.classObserver) {\n this.classObserver.disconnect();\n this.classObserver = null;\n }\n }\n\n private applyTheme(): void {\n if (!this.shadowHost) return;\n\n this.cleanupThemeListeners();\n\n const applyResolved = (isLight: boolean) => {\n this.shadowHost?.classList.toggle('light', isLight);\n this.themeWrapper?.classList.toggle('dark', !isLight);\n };\n\n if (this.theme === 'light') {\n applyResolved(true);\n } else if (this.theme === 'auto') {\n let currentResolved = this.resolveAutoTheme();\n applyResolved(currentResolved === 'light');\n\n const checkAndApply = () => {\n const next = this.resolveAutoTheme();\n if (next !== currentResolved) {\n currentResolved = next;\n applyResolved(next === 'light');\n }\n };\n\n this.classObserver = new MutationObserver(checkAndApply);\n this.classObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n\n if (typeof window.matchMedia !== 'function') return;\n this.mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n this.boundMediaChange = checkAndApply;\n this.mediaQuery.addEventListener('change', this.boundMediaChange);\n } else {\n applyResolved(false);\n }\n }\n\n destroy(): void {\n if (!this.mounted) return;\n\n this.cleanupThemeListeners();\n this.stopObserving();\n this.capture?.stop();\n if (this.copyTimer !== null) {\n clearTimeout(this.copyTimer);\n this.copyTimer = null;\n }\n this.inspector?.destroy();\n this.menu.destroy();\n this.overlay.destroy();\n this.blockOverlay.destroy();\n this.cursorTooltip.destroy();\n this.modal.destroy();\n\n if (this.shadowHost && this.shadowHost.parentNode) {\n this.shadowHost.parentNode.removeChild(this.shadowHost);\n }\n this.shadowHost = null;\n this.shadowRoot = null;\n this.themeWrapper = null;\n this.mounted = false;\n }\n\n startInspect(): void {\n this.inspector?.activate();\n }\n\n stopInspect(): void {\n this.clearPinnedOverlays();\n this.inspector?.deactivate();\n }\n\n isInspecting(): boolean {\n return this.inspector?.isActive() ?? false;\n }\n\n /** Open the command palette. */\n openCommand(): void {\n this.modal.openCommand();\n }\n\n /** Open the page dialog. */\n openPage(dir?: string): void {\n this.modal.openPage(dir);\n }\n\n /** Cycle through inspect modes: inspect → copy → feedback → off. */\n private cycleMode(): void {\n const currentIdx = MODE_CYCLE.indexOf(this.activeMode);\n const nextMode = MODE_CYCLE[(currentIdx + 1) % MODE_CYCLE.length];\n this.setMode(nextMode);\n }\n\n /** Set a specific inspect mode directly. */\n private setMode(mode: ActiveMode | null): void {\n if (mode) {\n this.activeMode = mode;\n if (!this.inspector?.isActive()) this.inspector?.activate();\n this.menu.setActiveMode(this.activeMode);\n } else {\n this.activeMode = null;\n this.inspector?.deactivate();\n // menu.setActiveMode(null) is handled by inspector's onDeactivate callback\n }\n }\n\n private getComponentsMap(): UidexMap {\n return this.options.components ?? getComponents() ?? {};\n }\n\n private getPagesArray() {\n return this.options.pages ?? getPages() ?? [];\n }\n\n private getFeaturesArray() {\n return this.options.features ?? getFeatures() ?? [];\n }\n\n private extractPageTitle(content: string): string {\n const match = content.match(/^#\\s+(.+)/m);\n return match ? match[1].trim() : 'Untitled';\n }\n\n /** Page button handler. */\n private handlePageClick(): void {\n this.inspector?.deactivate();\n this.overlay.hide();\n const matchedDir = this.matchCurrentRoute();\n this.modal.openPage(matchedDir ?? undefined);\n }\n\n /** Match current URL pathname to a page dir. */\n private matchCurrentRoute(): string | null {\n const pathname = window.location.pathname;\n const pages = this.getPagesArray();\n for (const page of pages) {\n const route = this.formatRoute(page.dir);\n if (this.routeMatches(route, pathname)) {\n return page.dir;\n }\n }\n return null;\n }\n\n /** Format a page dir as a route by stripping prefix segments and route groups. */\n private formatRoute(dir: string): string {\n const parts = dir.split('/');\n // Strip leading prefix segments (e.g. \"src\", \"app\") and route groups like \"(container)\"\n const routeParts = parts.filter(\n (seg) => seg !== 'src' && seg !== 'app' && !seg.startsWith('('),\n );\n return '/' + routeParts.join('/');\n }\n\n /** Check if a route pattern matches a pathname, handling dynamic segments. */\n private routeMatches(route: string, pathname: string): boolean {\n const routeParts = route.split('/');\n const pathParts = pathname.split('/');\n if (routeParts.length !== pathParts.length) return false;\n return routeParts.every(\n (seg, i) => seg.startsWith('[') || seg === pathParts[i],\n );\n }\n\n /** Command button handler. */\n private handleCommandClick(): void {\n this.inspector?.deactivate();\n this.overlay.hide();\n this.modal.openCommand();\n }\n\n /** Selection handler — routes by active mode. */\n private handleSelect(element: HTMLElement | null, id: string, opts?: { persistent?: boolean }): void {\n if (opts?.persistent) {\n // Pin overlay without opening modal or deactivating\n if (element) {\n const pin = new Overlay(this.overlayConfig);\n pin.show(element);\n this.pinnedOverlays.push(pin);\n }\n return;\n }\n\n this.clearPinnedOverlays();\n\n switch (this.activeMode) {\n case 'inspect': {\n this.overlay.hide();\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n this.overlay.show(element);\n }\n // Route by kind: primitive -> UiDialog, component/block -> ComponentDialog\n const components = this.getComponentsMap();\n const kind = components[id]?.[0]?.kind;\n if (kind === 'primitive') {\n const filePath = components[id]?.[0]?.filePath;\n if (filePath) {\n this.modal.openUi(filePath);\n } else {\n this.modal.openComponent(id);\n }\n } else {\n this.modal.openComponent(id);\n }\n this.options.onSelect?.(id);\n break;\n }\n case 'copy':\n this.handleCopySelect(element, id);\n break;\n case 'feedback':\n this.overlay.hide();\n this.modal.openFeedback(id);\n break;\n }\n }\n\n private clearPinnedOverlays(): void {\n for (const pin of this.pinnedOverlays) {\n pin.destroy();\n }\n this.pinnedOverlays = [];\n }\n\n private handleCopySelect(element: HTMLElement | null, id: string): void {\n const components = this.getComponentsMap();\n const locations = components[id];\n if (!locations || locations.length === 0) return;\n\n const loc = locations[0];\n const text = `${loc.filePath}:${loc.line}`;\n navigator.clipboard.writeText(text).catch(() => {});\n\n // Flash \"Copied!\" on overlay, then hide\n const target = element ?? this.findElement(id);\n if (target instanceof HTMLElement) {\n this.overlay.show(target);\n this.copyTimer = setTimeout(() => {\n this.copyTimer = null;\n this.overlay.hide();\n }, 600);\n }\n }\n\n private findElement(id: string): Element | null {\n const components = this.getComponentsMap();\n const locations = components[id];\n const kind = locations?.[0]?.kind ?? 'component';\n const attr = kind === 'block' ? 'data-uidex-block' : 'data-uidex';\n return document.querySelector(`[${attr}=\"${id}\"]`);\n }\n\n private scrollAndHighlight(id: string): void {\n const element = this.findElement(id);\n if (element && typeof element.scrollIntoView === 'function') {\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n if (element instanceof HTMLElement) {\n this.overlay.show(element);\n }\n }\n\n private get overlayConfig() {\n return {\n color: this.options.config?.defaults?.color,\n borderStyle: this.options.config?.defaults?.borderStyle,\n borderWidth: this.options.config?.defaults?.borderWidth,\n colors: this.options.config?.colors,\n };\n }\n\n private lastHighlightedElement: HTMLElement | null = null;\n\n private handleHighlight(\n element: HTMLElement | null,\n id: string | null,\n _parentBlock?: { element: HTMLElement; id: string } | null,\n cursor?: { x: number; y: number } | null\n ): void {\n if (id && element) {\n const components = this.getComponentsMap();\n const kind = components[id]?.[0]?.kind ?? 'component';\n const color = resolveColor(\n this.options.config?.defaults?.color,\n this.options.config?.colors\n ) ?? (kind === 'block' ? OVERLAY_COLORS.block : OVERLAY_COLORS.component);\n\n // Only update overlay when the highlighted element changes\n if (element !== this.lastHighlightedElement) {\n this.lastHighlightedElement = element;\n if (kind === 'block') {\n this.overlay.show(element, {\n borderStyle: 'solid',\n color: OVERLAY_COLORS.block,\n });\n this.blockOverlay.hide();\n } else {\n this.overlay.show(element);\n this.blockOverlay.hide();\n }\n }\n\n // Always update cursor tooltip position\n if (cursor) {\n this.cursorTooltip.show(cursor.x, cursor.y, id, color);\n }\n } else {\n this.lastHighlightedElement = null;\n this.overlay.hide();\n this.blockOverlay.hide();\n this.cursorTooltip.hide();\n }\n }\n\n /** Detect which components live inside which blocks via DOM ancestry. */\n private scanBlockContainment(): Map<string, string[]> {\n const containmentSets = new Map<string, Set<string>>();\n for (const el of document.querySelectorAll('[data-uidex]')) {\n const componentId = el.getAttribute('data-uidex');\n if (!componentId) continue;\n const blockAncestor =\n el.parentElement?.closest('[data-uidex-block]');\n if (!blockAncestor) continue;\n const blockId = blockAncestor.getAttribute('data-uidex-block');\n if (!blockId) continue;\n let children = containmentSets.get(blockId);\n if (!children) {\n children = new Set();\n containmentSets.set(blockId, children);\n }\n children.add(componentId);\n }\n const containment = new Map<string, string[]>();\n for (const [blockId, children] of containmentSets) {\n containment.set(blockId, [...children]);\n }\n return containment;\n }\n\n /** Push current pages/features/components/presentIds to the modal. */\n private updateModalData(presentIds: string[]): void {\n const pages = this.getPagesArray();\n const features = this.getFeaturesArray();\n const components = this.getComponentsMap();\n const blockContainment = this.scanBlockContainment();\n\n // Build uiComponents map keyed by filePath\n const uiComponentsMap = new Map<string, import('./types').PrimitiveEntry>();\n const uiArr = this.options.uiComponents ?? [];\n for (const p of uiArr) {\n uiComponentsMap.set(p.filePath, p);\n }\n\n this.modal.setData({\n pages: pages.map((p) => ({\n title: this.extractPageTitle(p.content),\n dir: p.dir,\n content: p.content,\n componentIds: p.componentIds,\n ...(p.rootId ? { rootId: p.rootId } : {}),\n ...(p.description ? { description: p.description } : {}),\n })),\n features: features.map((f) => ({\n title: this.extractPageTitle(f.content),\n dir: f.dir,\n content: f.content,\n componentIds: f.componentIds,\n })),\n components,\n presentIds: new Set(presentIds),\n blockContainment,\n uiComponents: uiComponentsMap,\n });\n\n // Update menu page visibility\n this.menu.setHasPages(pages.length > 0);\n }\n\n // ——— DOM observation for SPA navigation ———\n\n /** Scan which registered component IDs are currently in the DOM. */\n private scanPresentIds(allIds?: string[]): string[] {\n const componentIds = allIds ?? Object.keys(this.getComponentsMap());\n\n // Also consider page rootIds as known IDs\n const pages = this.getPagesArray();\n const rootIds = pages.map((p) => p.rootId).filter(Boolean) as string[];\n const knownIds = new Set([...componentIds, ...rootIds]);\n\n // Single querySelectorAll for both annotation types\n const found = new Set<string>();\n for (const el of document.querySelectorAll(\n '[data-uidex],[data-uidex-block]'\n )) {\n const id =\n el.getAttribute('data-uidex') ?? el.getAttribute('data-uidex-block');\n if (id) found.add(id);\n }\n\n const presentIds = [...knownIds].filter((id) => found.has(id));\n this.currentPresentIds = presentIds;\n return presentIds;\n }\n\n /** Schedule a debounced refresh of the modal data after DOM mutations. */\n private scheduleRefresh(): void {\n if (this.refreshTimer !== null) return;\n this.refreshTimer = setTimeout(() => {\n this.refreshTimer = null;\n this.refresh();\n }, 100);\n }\n\n /** Re-scan the DOM and update modal data if the set of present IDs changed. */\n private refresh(): void {\n const oldIds = this.currentPresentIds;\n const newIds = this.scanPresentIds();\n\n // Quick equality check — same length and same elements\n if (\n newIds.length === oldIds.length &&\n newIds.every((id, i) => id === oldIds[i])\n ) {\n return;\n }\n\n this.updateModalData(newIds);\n }\n\n private startObserving(): void {\n this.observer = new MutationObserver(() => this.scheduleRefresh());\n this.observer.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['data-uidex', 'data-uidex-block'],\n });\n }\n\n private stopObserving(): void {\n if (this.refreshTimer !== null) {\n clearTimeout(this.refreshTimer);\n this.refreshTimer = null;\n }\n this.observer?.disconnect();\n this.observer = null;\n }\n}\n\nexport function createUidexUI(options: UidexUIOptions = {}): UidexUI {\n return new UidexUI(options);\n}\n","import { UidexDevtools } from './UidexDevtools';\nimport type { UidexDevtoolsProps } from './UidexDevtools';\nimport type { UidexMap, UidexPage, UidexFeature, PrimitiveEntry } from '../core/types';\n\ntype DataProps = 'components' | 'pages' | 'features' | 'uiComponents';\n\nexport function createUidexDevtools(data: {\n components: UidexMap;\n pages?: UidexPage[];\n features?: UidexFeature[];\n uiComponents?: PrimitiveEntry[];\n}) {\n function Devtools(props: Omit<UidexDevtoolsProps, DataProps>) {\n return UidexDevtools({ ...data, ...props });\n }\n Devtools.displayName = 'UidexDevtools';\n return Devtools;\n}\n","import { useEffect, useRef } from 'react';\nimport { Overlay } from '../core/overlay';\nimport type { BorderStyle } from '../core/types';\n\nexport interface UidexOverlayProps {\n target: HTMLElement | null;\n color?: string;\n borderStyle?: BorderStyle;\n borderWidth?: number;\n colors?: Record<string, string>;\n}\n\nexport function UidexOverlay({\n target,\n color,\n borderStyle,\n borderWidth,\n colors,\n}: UidexOverlayProps) {\n const overlayRef = useRef<Overlay | null>(null);\n\n // Create overlay once on mount\n useEffect(() => {\n const overlay = new Overlay();\n overlayRef.current = overlay;\n\n return () => {\n overlay.destroy();\n overlayRef.current = null;\n };\n }, []);\n\n // Update options when they change\n useEffect(() => {\n overlayRef.current?.updateOptions({\n color,\n borderStyle,\n borderWidth,\n colors,\n });\n }, [color, borderStyle, borderWidth, colors]);\n\n // Show/hide overlay when target changes\n useEffect(() => {\n if (!overlayRef.current) return;\n\n if (target) {\n overlayRef.current.show(target);\n } else {\n overlayRef.current.hide();\n }\n }, [target]);\n\n return null;\n}\n"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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","names":["useEffect","useMemo","useRef","useRef","useCallback","jsx","jsx","jsx","jsx","jsx","jsxs","useRef","useCallback","Menu","block","createRoot","createElement","useState","useCallback","useRef","jsx","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","jsxs","useState","useRef","componentItems","blockItems","featureItems","useCallback","useState","useMemo","CopyIcon","CheckIcon","mergeProps","useRender","XIcon","jsx","Fragment","jsx","jsxs","jsx","jsxs","jsx","jsxs","XIcon","useRender","mergeProps","cva","mergeProps","jsx","mergeProps","jsx","cva","jsx","useState","useMemo","jsx","props","jsx","jsxs","useState","useMemo","useState","CopyIcon","BoxIcon","BlocksIcon","SparklesIcon","mergeProps","useRender","cva","cva","useRender","mergeProps","jsx","jsxs","useState","jsxs","jsx","CopyIcon","BoxIcon","BlocksIcon","SparklesIcon","jsxs","jsx","jsx","jsxs","useMemo","useState","CheckIcon","CopyIcon","useState","useRef","jsx","jsx","jsxs","useState","useRef","useMemo","jsx","jsxs","useMemo","useMemo","jsx","jsxs","useMemo","Section","useMemo","jsx","jsxs","useMemo","Section","Fragment","jsx","jsxs","createRoot","createElement","Menu","useRef","useMemo","useEffect","useEffect","useRef","useRef","useEffect"]}
1
+ {"version":3,"sources":["../../src/react/provider.tsx","../../src/cloud/types.ts","../../src/cloud/client.ts","../../src/cloud/sdk-cloud.ts","../../src/entities/types.ts","../../src/entities/registry.ts","../../src/entities/style.ts","../../src/entities/display-name.ts","../../src/views/built-in/ids.ts","../../src/internal/clipboard.ts","../../src/internal/dark-mode.ts","../../src/ui/toast.ts","../../src/views/built-in/feedback/markdown.ts","../../src/views/built-in/feedback/schema.ts","../../src/views/built-in/feedback/snapshot.ts","../../src/views/built-in/feedback/view-builder.ts","../../src/views/built-in/feedback/sdk-feedback.ts","../../src/ingest/console.ts","../../src/ingest/native-fetch.ts","../../src/ingest/network.ts","../../src/ingest/index.ts","../../src/internal/cleanup.ts","../../src/session/store.ts","../../src/flows/highlight.ts","../../src/flows/surface.ts","../../src/styles/tailwind.built.css","../../src/surface/constants.ts","../../src/surface/host.ts","../../src/surface/cursor-tooltip.ts","../../src/surface/inspector.ts","../../src/surface/menu-bar.ts","../../src/surface/overlay.ts","../../src/surface/theme.ts","../../src/surface/shell.ts","../../src/surface/keys.ts","../../src/internal/dev.ts","../../src/views/core/types.ts","../../src/views/core/registry.ts","../../src/internal/cn.ts","../../src/internal/el.ts","../../src/ui/cva.ts","../../src/ui/badge.ts","../../src/views/primitives/chip.ts","../../src/views/primitives/kind-icon.ts","../../src/views/primitives/icon-tile.ts","../../src/views/primitives/kind-chip.ts","../../src/machines/scroll-area.ts","../../src/machines/machine.ts","../../src/machines/normalize.ts","../../src/views/builder/spread-props.ts","../../src/views/render/custom.ts","../../src/views/render/detail.ts","../../src/views/builder/filter.ts","../../src/views/labels.ts","../../src/ui/button.ts","../../src/ui/list-item.ts","../../src/views/primitives/button.ts","../../src/ui/kbd.ts","../../src/views/primitives/row.ts","../../src/views/primitives/entity-link.ts","../../src/views/primitives/section.ts","../../src/views/primitives/text.ts","../../src/views/render/form.ts","../../src/flows/form.ts","../../src/ui/field.ts","../../src/ui/form.ts","../../src/ui/input.ts","../../src/ui/select.ts","../../src/machines/combobox.ts","../../src/views/render/list.ts","../../src/views/render/index.ts","../../src/views/core/mount.ts","../../src/views/core/shell.ts","../../src/machines/menu.ts","../../src/ui/menu.ts","../../src/views/core/actions-popup.ts","../../src/views/core/stack.ts","../../src/views/built-in/command-palette.ts","../../src/views/builder/page-context.ts","../../src/views/builder/format-location.ts","../../src/views/builder/resolve.ts","../../src/views/builder/detail-builder.ts","../../src/views/built-in/entity-detail.ts","../../src/views/built-in/explore-page.ts","../../src/views/built-in/feedback/host-feedback.ts","../../src/views/built-in/flow-detail.ts","../../src/views/built-in/glossary.ts","../../src/views/built-in/index.ts","../../src/create-uidex.ts","../../src/react/hooks.ts","../../src/react/mount.tsx","../../src/react/create-react-view.tsx","../../src/react/kind-chip.tsx"],"sourcesContent":["\"use client\"\n\nimport { createContext, useEffect, useState, type ReactNode } from \"react\"\nimport { cloud as createCloud } from \"uidex/cloud\"\nimport {\n createUidex,\n type CreateUidexOptions,\n type Uidex,\n} from \"../create-uidex\"\nimport type { CloudAdapter } from \"../views\"\n\nexport const UidexContext = createContext<Uidex | null>(null)\n\nexport interface UidexProviderProps {\n /**\n * Pre-built uidex instance (e.g. the `uidex` export from `uidex.gen.ts`).\n * When provided, `projectKey`, `cloud`, and `config` are ignored.\n */\n instance?: Uidex\n projectKey?: string\n cloud?: CloudAdapter | null\n config?: Omit<CreateUidexOptions, \"cloud\">\n children?: ReactNode\n}\n\nexport function UidexProvider({\n instance: externalInstance,\n projectKey,\n cloud,\n config,\n children,\n}: UidexProviderProps) {\n const [ownedInstance] = useState<Uidex | null>(() => {\n if (externalInstance) return null\n const resolvedCloud: CloudAdapter | null =\n cloud !== undefined\n ? cloud\n : projectKey\n ? createCloud({ projectKey })\n : null\n return createUidex({ ...config, cloud: resolvedCloud })\n })\n\n const instance = externalInstance ?? ownedInstance!\n\n useEffect(() => {\n if (!ownedInstance) return\n return () => {\n ownedInstance.unmount()\n }\n }, [ownedInstance])\n\n return (\n <UidexContext.Provider value={instance}>{children}</UidexContext.Provider>\n )\n}\n","export type {\n CloudAdapter,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigEpic,\n SourceRef,\n} from \"../ingest/feedback-contract\"\n\nexport const DEFAULT_CLOUD_ENDPOINT = \"https://app.uidex.dev\"\n\nexport interface CloudOptions {\n projectKey: string\n endpoint?: string\n fetch?: typeof fetch\n}\n\nexport class CloudError extends Error {\n readonly status: number\n readonly retryAfter?: number\n readonly details?: unknown\n\n constructor(\n message: string,\n options: { status: number; retryAfter?: number; details?: unknown }\n ) {\n super(message)\n this.name = \"CloudError\"\n this.status = options.status\n this.retryAfter = options.retryAfter\n this.details = options.details\n }\n}\n","import {\n CloudError,\n DEFAULT_CLOUD_ENDPOINT,\n type CloudAdapter,\n type CloudOptions,\n type FeedbackPayload,\n type FeedbackResult,\n type IngestConfig,\n} from \"./types\"\n\nfunction resolveFetch(override?: typeof fetch): typeof fetch {\n if (override) return override\n if (\n typeof globalThis !== \"undefined\" &&\n typeof globalThis.fetch === \"function\"\n ) {\n return globalThis.fetch.bind(globalThis)\n }\n throw new Error(\n \"uidex/cloud: global fetch is not available; pass a `fetch` override\"\n )\n}\n\nfunction trimEndpoint(endpoint: string): string {\n return endpoint.endsWith(\"/\") ? endpoint.slice(0, -1) : endpoint\n}\n\nfunction parseRetryAfter(header: string | null): number | undefined {\n if (!header) return undefined\n const seconds = Number(header)\n if (Number.isFinite(seconds) && seconds >= 0) return seconds\n const date = Date.parse(header)\n if (Number.isFinite(date)) {\n const delta = Math.ceil((date - Date.now()) / 1000)\n return delta > 0 ? delta : 0\n }\n return undefined\n}\n\nasync function readBody(response: Response): Promise<unknown> {\n const text = await response.text()\n if (!text) return undefined\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n}\n\nfunction errorMessage(body: unknown, fallback: string): string {\n if (\n body &&\n typeof body === \"object\" &&\n \"error\" in body &&\n typeof (body as { error: unknown }).error === \"string\"\n ) {\n return (body as { error: string }).error\n }\n return fallback\n}\n\nexport function cloud(options: CloudOptions): CloudAdapter {\n const projectKey = options.projectKey\n if (!projectKey) {\n throw new Error(\"uidex/cloud: `projectKey` is required\")\n }\n const endpoint = trimEndpoint(options.endpoint ?? DEFAULT_CLOUD_ENDPOINT)\n const fetchImpl = resolveFetch(options.fetch)\n const authHeader = `Bearer ${projectKey}`\n\n async function submit(payload: FeedbackPayload): Promise<FeedbackResult> {\n const response = await fetchImpl(`${endpoint}/api/ingest`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: authHeader,\n },\n body: JSON.stringify(payload),\n })\n\n const body = await readBody(response)\n\n if (!response.ok) {\n const retryAfter =\n response.status === 429\n ? parseRetryAfter(response.headers.get(\"Retry-After\"))\n : undefined\n throw new CloudError(\n errorMessage(body, `Feedback submission failed (${response.status})`),\n { status: response.status, retryAfter, details: body }\n )\n }\n\n if (!body || typeof body !== \"object\") {\n throw new CloudError(\"Feedback submission returned an empty response\", {\n status: response.status,\n })\n }\n return body as FeedbackResult\n }\n\n async function getConfig(): Promise<IngestConfig> {\n const response = await fetchImpl(`${endpoint}/api/ingest/config`, {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n Authorization: authHeader,\n },\n })\n\n const body = await readBody(response)\n\n if (!response.ok) {\n const retryAfter =\n response.status === 429\n ? parseRetryAfter(response.headers.get(\"Retry-After\"))\n : undefined\n throw new CloudError(\n errorMessage(body, `Ingest config request failed (${response.status})`),\n { status: response.status, retryAfter, details: body }\n )\n }\n\n if (!body || typeof body !== \"object\") {\n throw new CloudError(\"Ingest config returned an empty response\", {\n status: response.status,\n })\n }\n return body as IngestConfig\n }\n\n return {\n feedback: { submit },\n integrations: { getConfig },\n }\n}\n","import { cloud } from \"./client\"\nimport type { CloudAdapter } from \"./types\"\n\nexport const sdkCloud: CloudAdapter = cloud({\n projectKey: UIDEX_SDK_CLOUD_PROJECT_KEY,\n endpoint: UIDEX_SDK_CLOUD_ENDPOINT,\n})\n","export const ENTITY_KINDS = [\n \"route\",\n \"page\",\n \"feature\",\n \"widget\",\n \"region\",\n \"element\",\n \"primitive\",\n \"flow\",\n] as const\n\nexport type EntityKind = (typeof ENTITY_KINDS)[number]\n\nexport type Scope = string\n\nexport interface Location {\n file: string\n line?: number\n column?: number\n}\n\nexport interface EntityRef {\n kind: EntityKind\n id: string\n}\n\nexport interface Metadata {\n name?: string\n description?: string\n acceptance?: string[]\n notes?: string\n composes?: EntityRef[]\n flows?: readonly string[]\n features?: string[]\n widgets?: string[]\n}\n\ninterface EntityWithMetaBase {\n id: string\n loc?: Location\n scopes?: Scope[]\n meta?: Metadata\n}\n\nexport interface Route {\n kind: \"route\"\n path: string\n page: string\n}\n\nexport interface Flow {\n kind: \"flow\"\n id: string\n loc: Location\n touches: string[]\n}\n\nexport interface Page extends EntityWithMetaBase {\n kind: \"page\"\n}\n\nexport interface Feature extends EntityWithMetaBase {\n kind: \"feature\"\n}\n\nexport interface Widget extends EntityWithMetaBase {\n kind: \"widget\"\n}\n\nexport interface Region extends EntityWithMetaBase {\n kind: \"region\"\n}\n\nexport interface Element extends EntityWithMetaBase {\n kind: \"element\"\n}\n\nexport interface Primitive extends EntityWithMetaBase {\n kind: \"primitive\"\n}\n\nexport type Entity =\n | Route\n | Page\n | Feature\n | Widget\n | Region\n | Element\n | Primitive\n | Flow\n\nexport type EntityByKind<K extends EntityKind> = Extract<Entity, { kind: K }>\n\nexport type MetaEntityKind = Exclude<EntityKind, \"route\" | \"flow\">\n\nexport function isMetaKind(kind: EntityKind): kind is MetaEntityKind {\n return kind !== \"route\" && kind !== \"flow\"\n}\n\nexport function isMetaEntity(\n entity: Entity\n): entity is Extract<Entity, { kind: MetaEntityKind }> {\n return isMetaKind(entity.kind)\n}\n\nexport function entityKey(entity: Entity): string {\n return entity.kind === \"route\" ? entity.path : entity.id\n}\n\nexport function sameRef(a: EntityRef | null, b: EntityRef | null): boolean {\n if (a === b) return true\n if (a === null || b === null) return false\n return a.kind === b.kind && a.id === b.id\n}\n\nexport class UnknownEntityKindError extends Error {\n readonly kind: string\n constructor(kind: string) {\n super(`Unknown entity kind: ${kind}`)\n this.name = \"UnknownEntityKindError\"\n this.kind = kind\n }\n}\n\nconst KIND_SET: ReadonlySet<string> = new Set<string>(ENTITY_KINDS)\n\nexport function assertEntityKind(kind: string): asserts kind is EntityKind {\n if (!KIND_SET.has(kind)) throw new UnknownEntityKindError(kind)\n}\n","import {\n assertEntityKind,\n entityKey,\n isMetaEntity,\n isMetaKind,\n type Entity,\n type EntityByKind,\n type EntityKind,\n type Flow,\n type Metadata,\n type Scope,\n} from \"./types\"\n\nexport interface Registry {\n add(entity: Entity): void\n get<K extends EntityKind>(kind: K, id: string): EntityByKind<K> | undefined\n list<K extends EntityKind>(kind: K): ReadonlyArray<EntityByKind<K>>\n query(predicate: (entity: Entity) => boolean): Entity[]\n byScope(scope: Scope): Entity[]\n touchedBy(flowId: string): Entity[]\n}\n\ntype KindStore = {\n [K in EntityKind]: Map<string, EntityByKind<K>>\n}\n\nfunction emptyStore(): KindStore {\n return {\n route: new Map(),\n page: new Map(),\n feature: new Map(),\n widget: new Map(),\n region: new Map(),\n element: new Map(),\n primitive: new Map(),\n flow: new Map(),\n }\n}\n\nfunction computeFlowIds(flows: Iterable<Flow>, targetId: string): string[] {\n const ids: string[] = []\n for (const flow of flows) {\n if (flow.touches.includes(targetId)) ids.push(flow.id)\n }\n return ids\n}\n\nfunction freezeEntity<E extends Entity>(entity: E, flows: Iterable<Flow>): E {\n if (!isMetaKind(entity.kind)) return entity\n const withMeta = entity as Extract<Entity, { meta?: Metadata }>\n if (withMeta.meta === undefined) return entity\n const computedFlows = Object.freeze(computeFlowIds(flows, withMeta.id))\n const mergedMeta: Metadata = { ...withMeta.meta, flows: computedFlows }\n return { ...entity, meta: Object.freeze(mergedMeta) } as E\n}\n\nexport function createRegistry(): Registry {\n const store = emptyStore()\n let flowsCache: Flow[] | null = null\n\n const getFlows = (): Flow[] => {\n if (flowsCache === null) flowsCache = Array.from(store.flow.values())\n return flowsCache\n }\n\n const add = (entity: Entity): void => {\n assertEntityKind(entity.kind)\n const key = entityKey(entity)\n ;(store[entity.kind] as Map<string, Entity>).set(key, entity)\n flowsCache = null\n }\n\n const get = <K extends EntityKind>(\n kind: K,\n id: string\n ): EntityByKind<K> | undefined => {\n assertEntityKind(kind)\n const raw = store[kind].get(id) as EntityByKind<K> | undefined\n if (raw === undefined) return undefined\n return freezeEntity(raw, getFlows())\n }\n\n const list = <K extends EntityKind>(\n kind: K\n ): ReadonlyArray<EntityByKind<K>> => {\n assertEntityKind(kind)\n const flows = getFlows()\n return Array.from(store[kind].values(), (e) =>\n freezeEntity(e as EntityByKind<K>, flows)\n )\n }\n\n const allEntities = function* (): Generator<Entity> {\n for (const kind of Object.keys(store) as EntityKind[]) {\n for (const entity of store[kind].values()) {\n yield entity as Entity\n }\n }\n }\n\n const query = (predicate: (entity: Entity) => boolean): Entity[] => {\n const flows = getFlows()\n const result: Entity[] = []\n for (const entity of allEntities()) {\n if (predicate(entity)) result.push(freezeEntity(entity, flows))\n }\n return result\n }\n\n const byScope = (scope: Scope): Entity[] =>\n query(\n (entity) =>\n \"scopes\" in entity &&\n Array.isArray(entity.scopes) &&\n entity.scopes.includes(scope)\n )\n\n const touchedBy = (flowId: string): Entity[] => {\n const flow = store.flow.get(flowId)\n if (flow === undefined) return []\n const ids = new Set(flow.touches)\n return query((entity) => {\n if (!isMetaEntity(entity)) return false\n return ids.has(entity.id)\n })\n }\n\n return { add, get, list, query, byScope, touchedBy }\n}\n","import {\n Circle,\n FileText,\n type IconNode,\n LayoutGrid,\n LayoutPanelTop,\n MousePointerClick,\n Route as RouteIcon,\n Sparkles,\n Workflow,\n} from \"lucide\"\nimport type { EntityKind } from \"./types\"\n\nexport interface KindStyleEntry {\n icon: IconNode\n tone: string\n chip: string\n color: string\n label: string\n}\n\nexport const KIND_STYLE: Record<EntityKind, KindStyleEntry> = {\n route: {\n icon: RouteIcon,\n tone: \"text-blue-700 dark:text-blue-300\",\n chip: \"bg-blue-400/20 text-blue-700 group-data-hover:bg-blue-400/30 dark:bg-blue-400/10 dark:text-blue-300 dark:group-data-hover:bg-blue-400/15\",\n color: \"#60a5fa\",\n label: \"Route\",\n },\n page: {\n icon: FileText,\n tone: \"text-emerald-700 dark:text-emerald-300\",\n chip: \"bg-emerald-400/20 text-emerald-700 group-data-hover:bg-emerald-400/30 dark:bg-emerald-400/10 dark:text-emerald-300 dark:group-data-hover:bg-emerald-400/15\",\n color: \"#34d399\",\n label: \"Page\",\n },\n feature: {\n icon: Sparkles,\n tone: \"text-amber-700 dark:text-amber-300\",\n chip: \"bg-amber-400/20 text-amber-700 group-data-hover:bg-amber-400/30 dark:bg-amber-400/10 dark:text-amber-300 dark:group-data-hover:bg-amber-400/15\",\n color: \"#fbbf24\",\n label: \"Feature\",\n },\n widget: {\n icon: LayoutGrid,\n tone: \"text-violet-700 dark:text-violet-300\",\n chip: \"bg-violet-400/20 text-violet-700 group-data-hover:bg-violet-400/30 dark:bg-violet-400/10 dark:text-violet-300 dark:group-data-hover:bg-violet-400/15\",\n color: \"#a78bfa\",\n label: \"Widget\",\n },\n region: {\n icon: LayoutPanelTop,\n tone: \"text-cyan-700 dark:text-cyan-300\",\n chip: \"bg-cyan-400/20 text-cyan-700 group-data-hover:bg-cyan-400/30 dark:bg-cyan-400/10 dark:text-cyan-300 dark:group-data-hover:bg-cyan-400/15\",\n color: \"#22d3ee\",\n label: \"Region\",\n },\n element: {\n icon: MousePointerClick,\n tone: \"text-rose-700 dark:text-rose-300\",\n chip: \"bg-rose-400/20 text-rose-700 group-data-hover:bg-rose-400/30 dark:bg-rose-400/10 dark:text-rose-300 dark:group-data-hover:bg-rose-400/15\",\n color: \"#fb7185\",\n label: \"Element\",\n },\n primitive: {\n icon: Circle,\n tone: \"text-slate-700 dark:text-slate-300\",\n chip: \"bg-slate-400/20 text-slate-700 group-data-hover:bg-slate-400/30 dark:bg-slate-400/10 dark:text-slate-300 dark:group-data-hover:bg-slate-400/15\",\n color: \"#94a3b8\",\n label: \"Primitive\",\n },\n flow: {\n icon: Workflow,\n tone: \"text-fuchsia-700 dark:text-fuchsia-300\",\n chip: \"bg-fuchsia-400/20 text-fuchsia-700 group-data-hover:bg-fuchsia-400/30 dark:bg-fuchsia-400/10 dark:text-fuchsia-300 dark:group-data-hover:bg-fuchsia-400/15\",\n color: \"#e879f9\",\n label: \"Flow\",\n },\n}\n","import type { Entity } from \"./types\"\n\nexport function prettify(id: string): string {\n const parts = id.split(/[-_]+/).filter(Boolean)\n const words = parts.flatMap((part) => part.split(/(?=[A-Z])/).filter(Boolean))\n if (words.length === 0) return \"\"\n return words\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(\" \")\n}\n\nexport function displayName(entity: Entity, node?: Element | null): string {\n if (entity.kind === \"route\") return prettify(entity.page)\n if (entity.kind !== \"flow\") {\n const authored = entity.meta?.name\n if (authored) return authored\n }\n const aria = node?.getAttribute(\"aria-label\")?.trim()\n if (aria) return aria\n return prettify(entity.id)\n}\n","export const BUILT_IN_VIEW_IDS = {\n commandPalette: \"command-palette\",\n explorePage: \"explore-page\",\n feedback: \"feedback\",\n glossary: \"glossary\",\n sdkFeedback: \"sdk-feedback\",\n} as const\n","export async function copyToClipboard(text: string): Promise<boolean> {\n try {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text)\n return true\n }\n } catch {\n // fall through to legacy path\n }\n try {\n if (typeof document === \"undefined\") return false\n const textarea = document.createElement(\"textarea\")\n textarea.value = text\n textarea.setAttribute(\"readonly\", \"\")\n textarea.style.position = \"fixed\"\n textarea.style.opacity = \"0\"\n document.body.appendChild(textarea)\n textarea.select()\n const ok = document.execCommand(\"copy\")\n document.body.removeChild(textarea)\n return ok\n } catch {\n return false\n }\n}\n","export function isDarkMode(): boolean {\n if (typeof document !== \"undefined\") {\n const root = document.documentElement\n if (root?.classList.contains(\"dark\")) return true\n if (root?.classList.contains(\"light\")) return false\n }\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\"\n ) {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n }\n return false\n}\n","import { isDarkMode } from \"../internal/dark-mode\"\n\nexport function showCopiedToast(message: string): void {\n if (typeof document === \"undefined\") return\n const dark = isDarkMode()\n const toast = document.createElement(\"div\")\n toast.setAttribute(\"data-uidex-toast\", \"\")\n Object.assign(toast.style, {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%) scale(0.96)\",\n padding: \"12px 20px\",\n fontSize: \"14px\",\n fontFamily: \"ui-sans-serif, system-ui, sans-serif\",\n fontWeight: \"500\",\n color: dark ? \"#0a0a0a\" : \"#fafafa\",\n background: dark ? \"rgba(255, 255, 255, 0.98)\" : \"rgba(28, 28, 30, 0.95)\",\n border: dark\n ? \"1px solid rgba(0, 0, 0, 0.08)\"\n : \"1px solid rgba(255, 255, 255, 0.08)\",\n borderRadius: \"10px\",\n boxShadow: dark\n ? \"0 8px 24px rgba(0, 0, 0, 0.35), 0 2px 6px rgba(0, 0, 0, 0.2)\"\n : \"0 8px 24px rgba(0, 0, 0, 0.35), 0 2px 6px rgba(0, 0, 0, 0.25)\",\n zIndex: \"2147483647\",\n pointerEvents: \"none\",\n opacity: \"0\",\n transition: \"opacity 120ms ease-out, transform 160ms ease-out\",\n whiteSpace: \"nowrap\",\n } satisfies Partial<CSSStyleDeclaration>)\n toast.textContent = message\n document.body.appendChild(toast)\n\n requestAnimationFrame(() => {\n toast.style.opacity = \"1\"\n toast.style.transform = \"translate(-50%, -50%) scale(1)\"\n })\n\n setTimeout(() => {\n toast.style.opacity = \"0\"\n toast.style.transform = \"translate(-50%, -50%) scale(0.96)\"\n setTimeout(() => toast.remove(), 200)\n }, 1200)\n}\n","import type { FeedbackPayload } from \"../../core/types\"\n\nfunction capitalize(s: string): string {\n return s.length === 0 ? s : s[0].toUpperCase() + s.slice(1)\n}\n\nexport function renderPayloadMarkdown(payload: FeedbackPayload): string {\n const heading = payload.title ?? `${capitalize(payload.type)} Feedback`\n const lines: string[] = [\n `# ${heading}`,\n \"\",\n `- **Type:** ${payload.type}`,\n `- **Severity:** ${payload.severity}`,\n `- **Component:** \\`${payload.componentId}\\``,\n \"\",\n \"## Description\",\n \"\",\n payload.description || \"_(no description)_\",\n \"\",\n \"## Context\",\n \"\",\n `- **URL:** ${payload.url}`,\n `- **Path:** ${payload.path}`,\n ...(payload.pageTitle ? [`- **Page title:** ${payload.pageTitle}`] : []),\n `- **Viewport:** ${payload.viewport.width}×${payload.viewport.height}`,\n `- **Screen:** ${payload.screen.width}×${payload.screen.height}`,\n `- **User agent:** ${payload.userAgent}`,\n `- **Timestamp:** ${payload.timestamp}`,\n ]\n return lines.join(\"\\n\") + \"\\n\"\n}\n","import { z } from \"zod\"\nimport type { FormField } from \"../../core/surface\"\n\nexport const feedbackSchema = z.object({\n type: z.enum([\"bug\", \"feature\", \"improvement\", \"question\"]),\n severity: z.enum([\"low\", \"medium\", \"high\", \"critical\"]),\n title: z.string().optional(),\n description: z\n .string()\n .trim()\n .min(1, { message: \"Description is required.\" }),\n})\n\nexport const feedbackFields: FormField[] = [\n {\n kind: \"select\",\n name: \"type\",\n label: \"Type\",\n options: [\n { value: \"bug\", label: \"Bug\" },\n { value: \"feature\", label: \"Feature\" },\n { value: \"improvement\", label: \"Improvement\" },\n { value: \"question\", label: \"Question\" },\n ],\n },\n {\n kind: \"select\",\n name: \"severity\",\n label: \"Severity\",\n value: \"medium\",\n options: [\n { value: \"low\", label: \"Low\" },\n { value: \"medium\", label: \"Medium\" },\n { value: \"high\", label: \"High\" },\n { value: \"critical\", label: \"Critical\" },\n ],\n },\n {\n kind: \"text\",\n name: \"title\",\n label: \"Title\",\n placeholder: \"Short summary (optional)\",\n },\n {\n kind: \"textarea\",\n name: \"description\",\n label: \"Description\",\n placeholder: \"Describe what happened…\",\n required: true,\n },\n]\n","export interface FeedbackContextSnapshot {\n url: string\n path: string\n userAgent: string\n pageTitle: string | undefined\n timestamp: string\n viewport: { width: number; height: number }\n screen: { width: number; height: number }\n}\n\nexport function collectFeedbackContextSnapshot(): FeedbackContextSnapshot {\n const nav = typeof navigator !== \"undefined\" ? navigator : undefined\n const loc = typeof location !== \"undefined\" ? location : undefined\n const win = typeof window !== \"undefined\" ? window : undefined\n const doc = typeof document !== \"undefined\" ? document : undefined\n const viewport = {\n width: win?.innerWidth ?? 0,\n height: win?.innerHeight ?? 0,\n }\n const screenSize = {\n width: typeof screen !== \"undefined\" ? screen.width : 0,\n height: typeof screen !== \"undefined\" ? screen.height : 0,\n }\n return {\n url: loc?.href ?? \"\",\n path: loc?.pathname ?? \"\",\n userAgent: nav?.userAgent ?? \"\",\n pageTitle: doc?.title,\n timestamp: new Date().toISOString(),\n viewport,\n screen: screenSize,\n }\n}\n","import { copyToClipboard } from \"../../../internal/clipboard\"\nimport { showCopiedToast } from \"../../../ui/toast\"\nimport type { FormField, FormSurface, FormValue } from \"../../core/surface\"\nimport type {\n CloudAdapter,\n FeedbackPayload,\n FeedbackResult,\n View,\n ViewContext,\n} from \"../../core/types\"\nimport { renderPayloadMarkdown } from \"./markdown\"\nimport { feedbackFields, feedbackSchema } from \"./schema\"\nimport { collectFeedbackContextSnapshot } from \"./snapshot\"\n\nexport interface CreateFeedbackViewConfig {\n id: string\n resolveCloud: (\n ctx: ViewContext\n ) => CloudAdapter<unknown, unknown, unknown> | null\n componentId: (ctx: ViewContext) => string\n submitLabels: { ready: string; noCloud: string }\n successToast: (result: FeedbackResult) => string\n failureToast: (err: unknown) => string\n /**\n * Optional prefix prepended to `description` before submit/fallback-copy.\n * Used by sdk-feedback to stamp the SDK version in every report.\n */\n prependDescription?: () => string\n}\n\nfunction buildPayload(\n componentId: string,\n values: Record<string, FormValue>,\n prefix: string\n): FeedbackPayload {\n const snapshot = collectFeedbackContextSnapshot()\n const title = String(values.title ?? \"\").trim()\n const description = String(values.description ?? \"\").trim()\n return {\n type: (values.type as FeedbackPayload[\"type\"]) ?? \"bug\",\n severity: (values.severity as FeedbackPayload[\"severity\"]) ?? \"medium\",\n title: title || undefined,\n description: prefix ? `${prefix}${description}` : description,\n componentId,\n ...snapshot,\n }\n}\n\nasync function copyFallback(\n payload: FeedbackPayload,\n ctx: ViewContext,\n toastMessage: string\n): Promise<void> {\n const markdown = renderPayloadMarkdown(payload)\n const copied = await copyToClipboard(markdown)\n if (!copied) console.log(\"[uidex] feedback markdown:\\n\" + markdown)\n ctx.close()\n showCopiedToast(copied ? toastMessage : \"Copy failed\")\n}\n\nexport function createFeedbackView(config: CreateFeedbackViewConfig): View {\n const {\n id,\n resolveCloud,\n componentId,\n submitLabels,\n successToast,\n failureToast,\n prependDescription,\n } = config\n\n const fields: FormField[] = feedbackFields\n\n return {\n id,\n matches: () => false,\n searchable: false,\n hints: (ctx) => [\n {\n key: \"⌘↵\",\n label: resolveCloud(ctx) ? submitLabels.ready : submitLabels.noCloud,\n },\n ],\n focusTarget: (host) =>\n host.querySelector<HTMLElement>(\n \"[data-uidex-form='feedback'] select, [data-uidex-form='feedback'] input, [data-uidex-form='feedback'] textarea\"\n ),\n surface: (ctx): FormSurface => {\n const cloud = resolveCloud(ctx)\n return {\n kind: \"form\",\n id: \"feedback\",\n fields,\n schema: feedbackSchema,\n submit: {\n label: cloud ? submitLabels.ready : submitLabels.noCloud,\n onSubmit: async (values) => {\n const prefix = prependDescription ? prependDescription() : \"\"\n const payload = buildPayload(componentId(ctx), values, prefix)\n if (!cloud) {\n await copyFallback(payload, ctx, \"Copied to Clipboard\")\n return\n }\n try {\n const result = (await cloud.feedback.submit(\n payload\n )) as FeedbackResult\n ctx.close()\n showCopiedToast(successToast(result))\n return\n } catch (err) {\n await copyFallback(payload, ctx, failureToast(err))\n return\n }\n },\n },\n }\n },\n }\n}\n","import type { ShellAction, ViewContext } from \"../../core/types\"\nimport { BUILT_IN_VIEW_IDS } from \"../ids\"\nimport { createFeedbackView } from \"./view-builder\"\n\nexport function resolveSdkComponentId(ctx: ViewContext): string {\n const stack = ctx.getStack()\n const underlying = stack[stack.length - 2]\n return underlying ? `uidex-sdk:${underlying.id}` : \"uidex-sdk\"\n}\n\nfunction successToast(): string {\n return \"Thanks — your report was sent to uidex\"\n}\n\nexport const sdkFeedbackView = createFeedbackView({\n id: BUILT_IN_VIEW_IDS.sdkFeedback,\n resolveCloud: (ctx) => ctx.sdkCloud,\n componentId: (ctx) => resolveSdkComponentId(ctx),\n submitLabels: { ready: \"Send feedback\", noCloud: \"Copy report\" },\n successToast,\n failureToast: () => \"Couldn't reach uidex — copied report to clipboard\",\n prependDescription: () => `uidex-sdk v${UIDEX_SDK_VERSION}\\n\\n`,\n})\n\nexport function reportUidexIssueAction(ctx: ViewContext): ShellAction {\n return {\n id: \"report-uidex-issue\",\n label: \"Report uidex issue\",\n perform: () => ctx.push({ id: BUILT_IN_VIEW_IDS.sdkFeedback, ref: null }),\n intent: { kind: \"push\", viewId: BUILT_IN_VIEW_IDS.sdkFeedback },\n }\n}\n","export type ConsoleLevel = \"warn\" | \"error\"\n\nexport interface ConsoleEntry {\n level: ConsoleLevel\n message: string\n timestamp: string\n}\n\nexport interface ConsoleCaptureOptions {\n limit?: number\n target?: Console\n now?: () => Date\n}\n\nexport interface ConsoleCapture {\n start(): void\n stop(): void\n readonly isActive: boolean\n entries(): readonly ConsoleEntry[]\n clear(): void\n}\n\nconst DEFAULT_LIMIT = 50\nconst LEVELS: readonly ConsoleLevel[] = [\"warn\", \"error\"]\n\nfunction formatMessage(args: readonly unknown[]): string {\n return args\n .map((arg) => {\n if (typeof arg === \"string\") return arg\n if (arg instanceof Error) return arg.stack ?? arg.message\n try {\n return JSON.stringify(arg)\n } catch {\n return String(arg)\n }\n })\n .join(\" \")\n}\n\nexport function createConsoleCapture(\n options: ConsoleCaptureOptions = {}\n): ConsoleCapture {\n const limit = options.limit ?? DEFAULT_LIMIT\n const target = options.target ?? console\n const now = options.now ?? (() => new Date())\n const buffer: ConsoleEntry[] = []\n const originals: Partial<Record<ConsoleLevel, (...args: unknown[]) => void>> =\n {}\n let active = false\n\n function record(level: ConsoleLevel, args: readonly unknown[]): void {\n const entry: ConsoleEntry = {\n level,\n message: formatMessage(args),\n timestamp: now().toISOString(),\n }\n buffer.push(entry)\n if (buffer.length > limit) buffer.splice(0, buffer.length - limit)\n }\n\n function start(): void {\n if (active) return\n for (const level of LEVELS) {\n const original = target[level] as (...args: unknown[]) => void\n originals[level] = original\n const wrapped = (...args: unknown[]): void => {\n record(level, args)\n original.call(target, ...args)\n }\n ;(target as unknown as Record<string, unknown>)[level] = wrapped\n }\n active = true\n }\n\n function stop(): void {\n if (!active) return\n for (const level of LEVELS) {\n const original = originals[level]\n if (original) {\n ;(target as unknown as Record<string, unknown>)[level] = original\n }\n delete originals[level]\n }\n active = false\n }\n\n return {\n start,\n stop,\n get isActive() {\n return active\n },\n entries() {\n return buffer.slice()\n },\n clear() {\n buffer.length = 0\n },\n }\n}\n","// Captured at module load so `cloud.feedback.submit` (and anything else that\n// routes through this reference) is never observed by runtime fetch wrappers.\nexport const nativeFetch: typeof fetch | undefined =\n typeof globalThis !== \"undefined\" && typeof globalThis.fetch === \"function\"\n ? globalThis.fetch.bind(globalThis)\n : undefined\n\nexport function getNativeFetch(): typeof fetch | undefined {\n return nativeFetch\n}\n","import { nativeFetch } from \"./native-fetch\"\n\nexport interface NetworkEntry {\n method: string\n url: string\n status: number\n timestamp: string\n error?: string\n}\n\nexport interface NetworkCaptureOptions {\n limit?: number\n target?: {\n fetch?: typeof fetch\n }\n now?: () => Date\n}\n\nexport interface NetworkCapture {\n start(): void\n stop(): void\n readonly isActive: boolean\n entries(): readonly NetworkEntry[]\n clear(): void\n}\n\nconst DEFAULT_LIMIT = 20\n\nfunction resolveMethod(input: RequestInfo | URL, init?: RequestInit): string {\n if (init?.method) return init.method.toUpperCase()\n if (\n typeof input !== \"string\" &&\n !(input instanceof URL) &&\n \"method\" in input\n ) {\n return (input as Request).method.toUpperCase()\n }\n return \"GET\"\n}\n\nfunction resolveUrl(input: RequestInfo | URL): string {\n if (typeof input === \"string\") return input\n if (input instanceof URL) return input.toString()\n return (input as Request).url\n}\n\nexport function createNetworkCapture(\n options: NetworkCaptureOptions = {}\n): NetworkCapture {\n const limit = options.limit ?? DEFAULT_LIMIT\n const target = (options.target ?? globalThis) as {\n fetch?: typeof fetch\n }\n const now = options.now ?? (() => new Date())\n const buffer: NetworkEntry[] = []\n let original: typeof fetch | undefined\n let active = false\n\n function push(entry: NetworkEntry): void {\n buffer.push(entry)\n if (buffer.length > limit) buffer.splice(0, buffer.length - limit)\n }\n\n function start(): void {\n if (active) return\n const baseline = target.fetch ?? nativeFetch\n if (!baseline) return\n original = baseline\n const wrapped: typeof fetch = async (input, init) => {\n const method = resolveMethod(input, init)\n const url = resolveUrl(input)\n try {\n const res = await baseline(input, init)\n if (res.status >= 400) {\n push({\n method,\n url,\n status: res.status,\n timestamp: now().toISOString(),\n })\n }\n return res\n } catch (err) {\n push({\n method,\n url,\n status: 0,\n timestamp: now().toISOString(),\n error: err instanceof Error ? err.message : String(err),\n })\n throw err\n }\n }\n target.fetch = wrapped\n active = true\n }\n\n function stop(): void {\n if (!active) return\n if (original) target.fetch = original\n original = undefined\n active = false\n }\n\n return {\n start,\n stop,\n get isActive() {\n return active\n },\n entries() {\n return buffer.slice()\n },\n clear() {\n buffer.length = 0\n },\n }\n}\n","import type { SessionStore } from \"../session\"\nimport {\n createConsoleCapture,\n type ConsoleCapture,\n type ConsoleCaptureOptions,\n} from \"./console\"\nimport {\n createNetworkCapture,\n type NetworkCapture,\n type NetworkCaptureOptions,\n} from \"./network\"\n\nexport type { ConsoleEntry, ConsoleLevel, ConsoleCapture } from \"./console\"\nexport type { NetworkEntry, NetworkCapture } from \"./network\"\nexport { createConsoleCapture } from \"./console\"\nexport { createNetworkCapture } from \"./network\"\nexport { getNativeFetch, nativeFetch } from \"./native-fetch\"\nexport type {\n CloudAdapter,\n ConsoleLogEntry,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigEpic,\n NetworkErrorEntry,\n SourceRef,\n Viewport,\n} from \"./feedback-contract\"\n\nexport interface IngestOptions {\n captureConsole?: boolean\n captureNetwork?: boolean\n consoleLimit?: number\n networkLimit?: number\n consoleTarget?: ConsoleCaptureOptions[\"target\"]\n networkTarget?: NetworkCaptureOptions[\"target\"]\n now?: () => Date\n}\n\nexport interface Ingest {\n start(): void\n stop(): void\n readonly isActive: boolean\n readonly console: ConsoleCapture | null\n readonly network: NetworkCapture | null\n}\n\nexport interface CreateIngestOptions extends IngestOptions {\n session?: SessionStore\n}\n\nexport function createIngest(options: CreateIngestOptions = {}): Ingest {\n const { session, ...opts } = options\n const wantConsole = opts.captureConsole !== false\n const wantNetwork = opts.captureNetwork !== false\n\n const consoleCapture: ConsoleCapture | null = wantConsole\n ? createConsoleCapture({\n limit: opts.consoleLimit,\n target: opts.consoleTarget,\n now: opts.now,\n })\n : null\n const networkCapture: NetworkCapture | null = wantNetwork\n ? createNetworkCapture({\n limit: opts.networkLimit,\n target: opts.networkTarget,\n now: opts.now,\n })\n : null\n\n let active = false\n\n function start(): void {\n if (active) return\n consoleCapture?.start()\n networkCapture?.start()\n active = Boolean(consoleCapture?.isActive || networkCapture?.isActive)\n if (active) session?.getState().actions.setIngest(true)\n }\n\n function stop(): void {\n if (!active) return\n consoleCapture?.stop()\n networkCapture?.stop()\n active = false\n session?.getState().actions.setIngest(false)\n }\n\n return {\n start,\n stop,\n get isActive() {\n return active\n },\n console: consoleCapture,\n network: networkCapture,\n }\n}\n\nexport function resolveIngestOptions(\n explicit: IngestOptions | null | undefined,\n hasCloud: boolean\n): IngestOptions | null {\n if (explicit === null) return null\n if (explicit === undefined) {\n return hasCloud ? { captureConsole: true, captureNetwork: true } : null\n }\n if (explicit.captureConsole === false && explicit.captureNetwork === false) {\n return null\n }\n return explicit\n}\n","export type Cleanup = () => void\n\nexport interface Disposable {\n destroy(): void\n}\n\nexport interface CleanupStack {\n add(cleanup: Cleanup | Disposable | null | undefined): void\n drain(): void\n}\n\nexport function createCleanupStack(): CleanupStack {\n const stack: Cleanup[] = []\n return {\n add(cleanup) {\n if (!cleanup) return\n if (typeof cleanup === \"function\") stack.push(cleanup)\n else stack.push(() => cleanup.destroy())\n },\n drain() {\n for (let i = stack.length - 1; i >= 0; i--) {\n try {\n stack[i]()\n } catch (err) {\n console.error(\"[uidex] cleanup threw\", err)\n }\n }\n stack.length = 0\n },\n }\n}\n\nexport function composeCleanups(cleanups: readonly Cleanup[]): Cleanup {\n return () => {\n for (let i = cleanups.length - 1; i >= 0; i--) {\n try {\n cleanups[i]?.()\n } catch (err) {\n console.error(\"[uidex] cleanup threw\", err)\n }\n }\n }\n}\n","import { createActor, type Actor } from \"xstate\"\nimport { createStore, type StoreApi } from \"zustand/vanilla\"\n\nimport { sameRef } from \"../entities\"\nimport { highlightMachine, type HighlightContext } from \"../flows/highlight\"\nimport {\n surfaceMachine,\n type SurfaceEvent,\n type SurfaceInput,\n} from \"../flows/surface\"\nimport type {\n ResolvedTheme,\n SessionSnapshot,\n SessionState,\n ThemePreference,\n ViewStackEntry,\n} from \"./types\"\n\nexport type SessionStore = StoreApi<SessionState> & {\n send(event: SurfaceEvent): void\n}\n\nexport interface SurfaceBindings {\n mountInspector?: () => void\n destroyInspector?: () => void\n openActionsPopup?: () => void\n closePopup?: () => void\n}\n\nexport interface HighlightBindings {\n showOverlay?: (context: HighlightContext) => void\n hideOverlay?: () => void\n updateOverlay?: (context: HighlightContext) => void\n}\n\nexport interface SessionBindings {\n surface?: SurfaceBindings\n highlight?: HighlightBindings\n}\n\nexport interface CreateSessionOptions extends Partial<SessionSnapshot> {\n detectTheme?: () => ResolvedTheme\n /**\n * Action implementations injected into the surface machine and its\n * highlight child actor. Implementations may be closures that read from\n * mutable refs filled in after `createSession` returns (e.g., the SDK's\n * shell isn't available until `mount`).\n */\n bindings?: SessionBindings\n}\n\nconst defaultSnapshot: SessionSnapshot = {\n hover: null,\n selection: null,\n stack: [],\n pinnedHighlight: null,\n inspectorActive: false,\n theme: \"auto\",\n resolvedTheme: \"light\",\n ingestActive: false,\n}\n\nexport function resolveTheme(\n preference: ThemePreference,\n detect?: () => ResolvedTheme\n): ResolvedTheme {\n if (preference !== \"auto\") return preference\n if (detect) return detect()\n if (\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as { matchMedia?: unknown }).matchMedia === \"function\"\n ) {\n const mql = (\n globalThis as {\n matchMedia: (q: string) => { matches: boolean }\n }\n ).matchMedia(\"(prefers-color-scheme: dark)\")\n return mql.matches ? \"dark\" : \"light\"\n }\n return \"light\"\n}\n\ntype SurfaceActor = Actor<typeof surfaceMachine>\n\nfunction projectFromActor(actor: SurfaceActor): SessionSnapshot {\n const sn = actor.getSnapshot()\n const child = sn.children.highlight\n const childSnapshot = child?.getSnapshot()\n const pinned =\n childSnapshot && childSnapshot.value === \"pinned\"\n ? childSnapshot.context.pinnedRef\n : null\n return {\n hover: sn.context.hover,\n selection: sn.context.selection,\n stack: sn.context.stack,\n pinnedHighlight: pinned,\n inspectorActive: sn.matches(\"inspecting\"),\n theme: sn.context.theme,\n resolvedTheme: sn.context.resolvedTheme,\n ingestActive: sn.context.ingestActive,\n }\n}\n\nexport function createSession(\n options: CreateSessionOptions = {}\n): SessionStore {\n const { detectTheme, bindings, ...overrides } = options\n const initialPref: ThemePreference = overrides.theme ?? defaultSnapshot.theme\n const initialResolved: ResolvedTheme =\n overrides.resolvedTheme ?? resolveTheme(initialPref, detectTheme)\n const initialStack: ViewStackEntry[] = overrides.stack ?? []\n\n const input: SurfaceInput = {\n hover: overrides.hover ?? null,\n selection: overrides.selection ?? null,\n pinnedHighlight: null,\n theme: initialPref,\n resolvedTheme: initialResolved,\n ingestActive: overrides.ingestActive ?? false,\n }\n\n const providedHighlight = highlightMachine.provide({\n actions: {\n showOverlay: ({ context }) => bindings?.highlight?.showOverlay?.(context),\n hideOverlay: () => bindings?.highlight?.hideOverlay?.(),\n updateOverlay: ({ context }) =>\n bindings?.highlight?.updateOverlay?.(context),\n },\n })\n\n const providedSurface = surfaceMachine.provide({\n actions: {\n mountInspector: () => bindings?.surface?.mountInspector?.(),\n destroyInspector: () => bindings?.surface?.destroyInspector?.(),\n openActionsPopup: () => bindings?.surface?.openActionsPopup?.(),\n closePopup: () => bindings?.surface?.closePopup?.(),\n },\n actors: {\n highlight: providedHighlight,\n },\n })\n\n const actor = createActor(providedSurface, { input })\n actor.start()\n\n // Hydrate initial state via events (idle.entry resets stack, so we cannot\n // pass it through input).\n if (initialStack.length > 0) {\n actor.send({ type: \"OPEN_PALETTE\" })\n for (let i = 1; i < initialStack.length; i++) {\n actor.send({ type: \"PUSH_VIEW\", entry: initialStack[i] })\n }\n } else if (overrides.inspectorActive) {\n actor.send({ type: \"TOGGLE_INSPECTOR\" })\n }\n if (overrides.pinnedHighlight) {\n actor.send({ type: \"PIN\", ref: overrides.pinnedHighlight })\n }\n\n const store = createStore<SessionState>((_set, get) => ({\n ...projectFromActor(actor),\n actions: {\n hover(ref) {\n if (sameRef(get().hover, ref)) return\n if (ref === null) {\n actor.send({ type: \"UNHOVER\" })\n } else {\n actor.send({ type: \"HOVER\", ref, element: null })\n }\n },\n select(ref) {\n if (sameRef(get().selection, ref)) return\n actor.send({ type: \"SET_SELECTION\", ref })\n },\n pushStack(entry) {\n if (entry.id === \"command-palette\" && get().stack.length === 0) {\n actor.send({ type: \"OPEN_PALETTE\" })\n } else {\n actor.send({ type: \"PUSH_VIEW\", entry })\n }\n },\n popStack() {\n const sn = actor.getSnapshot()\n if (sn.matches(\"palette\")) {\n actor.send({ type: \"ESC\" })\n } else if (sn.matches(\"viewing\")) {\n actor.send({ type: \"POP_VIEW\" })\n }\n },\n clearStack() {\n if (get().stack.length === 0) return\n actor.send({ type: \"CLOSE\" })\n },\n openView(id, ref) {\n const resolvedRef = ref === undefined ? get().selection : ref\n get().actions.pushStack({ id, ref: resolvedRef })\n },\n closeView() {\n get().actions.clearStack()\n },\n setInspectorActive(active) {\n if (get().inspectorActive === active) return\n actor.send({ type: \"TOGGLE_INSPECTOR\" })\n },\n toggleInspector() {\n actor.send({ type: \"TOGGLE_INSPECTOR\" })\n },\n pinHighlight(ref) {\n if (sameRef(get().pinnedHighlight, ref)) return\n actor.send({ type: \"PIN\", ref })\n },\n clearPinnedHighlight() {\n if (get().pinnedHighlight === null) return\n actor.send({ type: \"UNPIN\" })\n },\n setTheme(theme, resolved) {\n const state = get()\n const nextResolved = resolved ?? resolveTheme(theme, detectTheme)\n if (state.theme === theme && state.resolvedTheme === nextResolved)\n return\n actor.send({ type: \"SET_THEME\", theme, resolvedTheme: nextResolved })\n },\n setIngest(active) {\n if (get().ingestActive === active) return\n actor.send({ type: \"SET_INGEST\", active })\n },\n },\n }))\n\n const projectAndSet = (): void => {\n const next = projectFromActor(actor)\n const prev = store.getState()\n const updates: Partial<SessionSnapshot> = {}\n if (!sameRef(prev.hover, next.hover)) updates.hover = next.hover\n if (!sameRef(prev.selection, next.selection))\n updates.selection = next.selection\n if (prev.stack !== next.stack) updates.stack = next.stack\n if (!sameRef(prev.pinnedHighlight, next.pinnedHighlight))\n updates.pinnedHighlight = next.pinnedHighlight\n if (prev.inspectorActive !== next.inspectorActive)\n updates.inspectorActive = next.inspectorActive\n if (prev.theme !== next.theme) updates.theme = next.theme\n if (prev.resolvedTheme !== next.resolvedTheme)\n updates.resolvedTheme = next.resolvedTheme\n if (prev.ingestActive !== next.ingestActive)\n updates.ingestActive = next.ingestActive\n if (Object.keys(updates).length === 0) return\n store.setState(updates)\n }\n actor.subscribe(projectAndSet)\n\n const session = store as SessionStore\n session.send = (event) => actor.send(event)\n return session\n}\n","import { assign, setup } from \"xstate\"\n\nimport type { EntityRef } from \"../entities/types\"\n\nexport interface HighlightContext {\n ref: EntityRef | null\n element: HTMLElement | null\n pinnedRef: EntityRef | null\n color: string | null\n}\n\nexport type HighlightEvent =\n | {\n type: \"HOVER\"\n ref: EntityRef\n element: HTMLElement\n color?: string | null\n }\n | { type: \"UNHOVER\" }\n | { type: \"PIN\"; ref?: EntityRef }\n | { type: \"UNPIN\" }\n\nconst initialContext: HighlightContext = {\n ref: null,\n element: null,\n pinnedRef: null,\n color: null,\n}\n\nexport const highlightMachine = setup({\n types: {} as {\n context: HighlightContext\n events: HighlightEvent\n },\n actions: {\n showOverlay: () => {},\n hideOverlay: () => {},\n updateOverlay: () => {},\n },\n}).createMachine({\n id: \"highlight\",\n initial: \"none\",\n context: initialContext,\n states: {\n none: {\n entry: [\n assign({\n ref: null,\n element: null,\n pinnedRef: null,\n color: null,\n }),\n { type: \"hideOverlay\" },\n ],\n on: {\n HOVER: {\n target: \"transient\",\n actions: assign(({ event }) => ({\n ref: event.ref,\n element: event.element,\n color: event.color ?? null,\n })),\n },\n PIN: {\n target: \"pinned\",\n actions: assign(({ context, event }) => ({\n ref: event.ref ?? context.ref,\n pinnedRef: event.ref ?? context.ref,\n })),\n },\n },\n },\n transient: {\n entry: { type: \"showOverlay\" },\n on: {\n HOVER: {\n actions: [\n assign(({ event }) => ({\n ref: event.ref,\n element: event.element,\n color: event.color ?? null,\n })),\n { type: \"updateOverlay\" },\n ],\n },\n UNHOVER: { target: \"none\" },\n PIN: {\n target: \"pinned\",\n actions: assign(({ context, event }) => ({\n pinnedRef: event.ref ?? context.ref,\n })),\n },\n },\n },\n pinned: {\n entry: { type: \"showOverlay\" },\n on: {\n UNPIN: { target: \"none\" },\n },\n },\n },\n})\n","import { assign, forwardTo, sendTo, setup } from \"xstate\"\n\nimport type { EntityRef } from \"../entities/types\"\nimport type {\n ResolvedTheme,\n ThemePreference,\n ViewStackEntry,\n} from \"../session/types\"\nimport { highlightMachine } from \"./highlight\"\n\nexport interface SurfaceContext {\n stack: ViewStackEntry[]\n hover: EntityRef | null\n selection: EntityRef | null\n pinnedHighlight: EntityRef | null\n theme: ThemePreference\n resolvedTheme: ResolvedTheme\n ingestActive: boolean\n}\n\nexport type SurfaceEvent =\n | { type: \"TOGGLE_INSPECTOR\" }\n | { type: \"OPEN_PALETTE\" }\n | { type: \"PUSH_VIEW\"; entry: ViewStackEntry }\n | { type: \"POP_VIEW\" }\n | { type: \"CLOSE\" }\n | { type: \"ESC\" }\n | { type: \"CMD_K\" }\n | { type: \"SELECT\"; ref: EntityRef | null; entry: ViewStackEntry }\n | { type: \"SET_SELECTION\"; ref: EntityRef | null }\n | {\n type: \"HOVER\"\n ref: EntityRef\n element: HTMLElement | null\n color?: string | null\n }\n | { type: \"UNHOVER\" }\n | { type: \"PIN\"; ref?: EntityRef }\n | { type: \"UNPIN\" }\n | {\n type: \"SET_THEME\"\n theme: ThemePreference\n resolvedTheme: ResolvedTheme\n }\n | { type: \"SET_INGEST\"; active: boolean }\n\nexport type SurfaceInput = Partial<SurfaceContext>\n\nconst initialContext: SurfaceContext = {\n stack: [],\n hover: null,\n selection: null,\n pinnedHighlight: null,\n theme: \"auto\",\n resolvedTheme: \"light\",\n ingestActive: false,\n}\n\nexport const surfaceMachine = setup({\n types: {} as {\n context: SurfaceContext\n events: SurfaceEvent\n children: { highlight: \"highlight\" }\n },\n actors: {\n highlight: highlightMachine,\n },\n actions: {\n mountInspector: () => {},\n destroyInspector: () => {},\n openActionsPopup: () => {},\n closePopup: () => {},\n },\n guards: {\n hasPinnedHighlight: ({ context }) => context.pinnedHighlight !== null,\n hasActions: () => false,\n popupOpen: () => false,\n stackDeeperThanTwo: ({ context }) => context.stack.length > 2,\n stackEqualsTwo: ({ context }) => context.stack.length === 2,\n stackEqualsOne: ({ context }) => context.stack.length === 1,\n paletteAtBottomDepthTwo: ({ context }) =>\n context.stack.length === 2 && context.stack[0]?.id === \"command-palette\",\n },\n}).createMachine({\n id: \"surface\",\n initial: \"idle\",\n context: ({ input }) => ({\n ...initialContext,\n ...((input as SurfaceInput | undefined) ?? {}),\n }),\n invoke: {\n id: \"highlight\",\n src: \"highlight\",\n },\n on: {\n HOVER: {\n actions: [\n assign(({ event }) => ({ hover: event.ref })),\n forwardTo(\"highlight\"),\n ],\n },\n UNHOVER: {\n actions: [assign({ hover: null }), forwardTo(\"highlight\")],\n },\n PIN: {\n actions: [\n assign(({ context, event }) => ({\n pinnedHighlight: event.ref ?? context.hover,\n })),\n forwardTo(\"highlight\"),\n ],\n },\n UNPIN: {\n actions: [assign({ pinnedHighlight: null }), forwardTo(\"highlight\")],\n },\n SET_SELECTION: {\n actions: assign(({ event }) => ({ selection: event.ref })),\n },\n SET_THEME: {\n actions: assign(({ event }) => ({\n theme: event.theme,\n resolvedTheme: event.resolvedTheme,\n })),\n },\n SET_INGEST: {\n actions: assign(({ event }) => ({ ingestActive: event.active })),\n },\n },\n states: {\n idle: {\n entry: assign({ stack: [] }),\n on: {\n TOGGLE_INSPECTOR: { target: \"inspecting\" },\n OPEN_PALETTE: { target: \"palette\" },\n PUSH_VIEW: {\n target: \"viewing\",\n actions: assign(({ event }) => ({ stack: [event.entry] })),\n },\n ESC: {\n guard: \"hasPinnedHighlight\",\n actions: [\n assign({ pinnedHighlight: null }),\n sendTo(\"highlight\", { type: \"UNPIN\" }),\n ],\n },\n },\n },\n inspecting: {\n entry: { type: \"mountInspector\" },\n exit: { type: \"destroyInspector\" },\n on: {\n SELECT: {\n target: \"viewing\",\n actions: assign(({ context, event }) => ({\n selection: event.ref,\n stack: [...context.stack, event.entry],\n })),\n },\n PUSH_VIEW: {\n target: \"viewing\",\n actions: assign(({ event }) => ({ stack: [event.entry] })),\n },\n TOGGLE_INSPECTOR: { target: \"idle\" },\n OPEN_PALETTE: { target: \"palette\" },\n ESC: { target: \"idle\" },\n },\n },\n palette: {\n entry: assign({ stack: [{ id: \"command-palette\", ref: null }] }),\n on: {\n PUSH_VIEW: {\n target: \"viewing\",\n actions: assign(({ context, event }) => ({\n stack: [...context.stack, event.entry],\n })),\n },\n CLOSE: { target: \"idle\" },\n ESC: { target: \"idle\" },\n CMD_K: [\n {\n guard: \"hasActions\",\n actions: { type: \"openActionsPopup\" },\n },\n { target: \"idle\" },\n ],\n },\n },\n viewing: {\n on: {\n PUSH_VIEW: {\n actions: assign(({ context, event }) => ({\n stack: [...context.stack, event.entry],\n })),\n },\n POP_VIEW: [\n {\n guard: \"stackDeeperThanTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"paletteAtBottomDepthTwo\",\n target: \"palette\",\n },\n {\n guard: \"stackEqualsTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"stackEqualsOne\",\n target: \"idle\",\n },\n ],\n CLOSE: { target: \"idle\" },\n ESC: [\n {\n guard: \"popupOpen\",\n actions: { type: \"closePopup\" },\n },\n {\n guard: \"stackDeeperThanTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"paletteAtBottomDepthTwo\",\n target: \"palette\",\n },\n {\n guard: \"stackEqualsTwo\",\n actions: assign(({ context }) => ({\n stack: context.stack.slice(0, -1),\n })),\n },\n {\n guard: \"stackEqualsOne\",\n target: \"idle\",\n },\n ],\n },\n },\n },\n})\n","/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-amber-300: oklch(87.9% 0.169 91.605);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-500: oklch(76.9% 0.188 70.08);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-emerald-300: oklch(84.5% 0.143 164.978);\n --color-emerald-400: oklch(76.5% 0.177 163.223);\n --color-emerald-500: oklch(69.6% 0.17 162.48);\n --color-emerald-700: oklch(50.8% 0.118 165.612);\n --color-cyan-300: oklch(86.5% 0.127 207.078);\n --color-cyan-400: oklch(78.9% 0.154 211.53);\n --color-cyan-700: oklch(52% 0.105 223.128);\n --color-blue-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-violet-300: oklch(81.1% 0.111 293.571);\n --color-violet-400: oklch(70.2% 0.183 293.541);\n --color-violet-700: oklch(49.1% 0.27 292.581);\n --color-fuchsia-300: oklch(83.3% 0.145 321.434);\n --color-fuchsia-400: oklch(74% 0.238 322.16);\n --color-fuchsia-700: oklch(51.8% 0.253 323.949);\n --color-rose-300: oklch(81% 0.117 11.638);\n --color-rose-400: oklch(71.2% 0.194 13.428);\n --color-rose-700: oklch(51.4% 0.222 16.935);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-neutral-50: oklch(98.5% 0 0);\n --color-neutral-100: oklch(97% 0 0);\n --color-neutral-400: oklch(70.8% 0 0);\n --color-neutral-500: oklch(55.6% 0 0);\n --color-neutral-800: oklch(26.9% 0 0);\n --color-neutral-950: oklch(14.5% 0 0);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-xl: 36rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --tracking-widest: 0.1em;\n --leading-relaxed: 1.625;\n --radius-xl: calc(var(--radius) * 1.4);\n --radius-2xl: calc(var(--radius) * 1.8);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --blur-sm: 8px;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\",\n Roboto, sans-serif;\n --default-mono-font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n --color-border: var(--border);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .pointer-events-none {\n pointer-events: none;\n }\n .invisible {\n visibility: hidden;\n }\n .visible {\n visibility: visible;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border-width: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .start {\n inset-inline-start: var(--spacing);\n }\n .end {\n inset-inline-end: var(--spacing);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .right-3 {\n right: calc(var(--spacing) * 3);\n }\n .bottom-12 {\n bottom: calc(var(--spacing) * 12);\n }\n .z-10 {\n z-index: 10;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .-mx-px {\n margin-inline: -1px;\n }\n .mx-1 {\n margin-inline: calc(var(--spacing) * 1);\n }\n .mx-2 {\n margin-inline: calc(var(--spacing) * 2);\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .ms-auto {\n margin-inline-start: auto;\n }\n .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n .ml-auto {\n margin-left: auto;\n }\n .block {\n display: block;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .hidden {\n display: none;\n }\n .inline {\n display: inline;\n }\n .inline-block {\n display: inline-block;\n }\n .inline-flex {\n display: inline-flex;\n }\n .list-item {\n display: list-item;\n }\n .table {\n display: table;\n }\n .size-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n height: calc(var(--spacing) * 3.5);\n }\n .size-4 {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n .size-6 {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n .size-7 {\n width: calc(var(--spacing) * 7);\n height: calc(var(--spacing) * 7);\n }\n .size-8 {\n width: calc(var(--spacing) * 8);\n height: calc(var(--spacing) * 8);\n }\n .size-9 {\n width: calc(var(--spacing) * 9);\n height: calc(var(--spacing) * 9);\n }\n .h-3\\.5 {\n height: calc(var(--spacing) * 3.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-4\\.5 {\n height: calc(var(--spacing) * 4.5);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-5\\.5 {\n height: calc(var(--spacing) * 5.5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-7 {\n height: calc(var(--spacing) * 7);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-\\[26rem\\] {\n height: 26rem;\n }\n .h-auto {\n height: auto;\n }\n .h-full {\n height: 100%;\n }\n .h-px {\n height: 1px;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-7 {\n min-height: calc(var(--spacing) * 7);\n }\n .min-h-8 {\n min-height: calc(var(--spacing) * 8);\n }\n .min-h-20 {\n min-height: calc(var(--spacing) * 20);\n }\n .w-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-56 {\n width: calc(var(--spacing) * 56);\n }\n .w-auto {\n width: auto;\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-xl {\n max-width: var(--container-xl);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-4 {\n min-width: calc(var(--spacing) * 4);\n }\n .min-w-4\\.5 {\n min-width: calc(var(--spacing) * 4.5);\n }\n .min-w-5 {\n min-width: calc(var(--spacing) * 5);\n }\n .min-w-5\\.5 {\n min-width: calc(var(--spacing) * 5.5);\n }\n .min-w-32 {\n min-width: calc(var(--spacing) * 32);\n }\n .flex-1 {\n flex: 1;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\n }\n .cursor-default {\n cursor: default;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize {\n resize: both;\n }\n .scroll-py-2 {\n scroll-padding-block: calc(var(--spacing) * 2);\n }\n .list-none {\n list-style-type: none;\n }\n .appearance-none {\n appearance: none;\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-row {\n flex-direction: row;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .items-center {\n align-items: center;\n }\n .items-start {\n align-items: flex-start;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-start {\n justify-content: flex-start;\n }\n .gap-0 {\n gap: calc(var(--spacing) * 0);\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .self-start {\n align-self: flex-start;\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: calc(var(--radius) * 1.8);\n }\n .rounded-\\[0\\.25rem\\] {\n border-radius: 0.25rem;\n }\n .rounded-lg {\n border-radius: var(--radius);\n }\n .rounded-md {\n border-radius: calc(var(--radius) * 0.8);\n }\n .rounded-sm {\n border-radius: calc(var(--radius) * 0.6);\n }\n .rounded-t-xl {\n border-top-left-radius: calc(var(--radius) * 1.4);\n border-top-right-radius: calc(var(--radius) * 1.4);\n }\n .rounded-b-\\[calc\\(var\\(--radius-2xl\\)-1px\\)\\] {\n border-bottom-right-radius: calc(var(--radius-2xl) - 1px);\n border-bottom-left-radius: calc(var(--radius-2xl) - 1px);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-b-0 {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 0px;\n }\n .border-border {\n border-color: var(--border);\n }\n .border-destructive {\n border-color: var(--destructive);\n }\n .border-input {\n border-color: var(--input);\n }\n .border-primary {\n border-color: var(--primary);\n }\n .border-transparent {\n border-color: transparent;\n }\n .bg-amber-400\\/20 {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 20%, transparent);\n }\n }\n .bg-background {\n background-color: var(--background);\n }\n .bg-black\\/32 {\n background-color: color-mix(in srgb, #000 32%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 32%, transparent);\n }\n }\n .bg-blue-400\\/20 {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 20%, transparent);\n }\n }\n .bg-border {\n background-color: var(--border);\n }\n .bg-cyan-400\\/20 {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 20%, transparent);\n }\n }\n .bg-destructive {\n background-color: var(--destructive);\n }\n .bg-destructive\\/10 {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n }\n }\n .bg-emerald-400\\/20 {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 20%, transparent);\n }\n }\n .bg-fuchsia-400\\/20 {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 20%, transparent);\n }\n }\n .bg-info\\/10 {\n background-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--info) 10%, transparent);\n }\n }\n .bg-muted {\n background-color: var(--muted);\n }\n .bg-popover {\n background-color: var(--popover);\n }\n .bg-primary {\n background-color: var(--primary);\n }\n .bg-rose-400\\/20 {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 20%, transparent);\n }\n }\n .bg-secondary {\n background-color: var(--secondary);\n }\n .bg-slate-400\\/20 {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 20%, transparent);\n }\n }\n .bg-success\\/10 {\n background-color: var(--success);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--success) 10%, transparent);\n }\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-violet-400\\/20 {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 20%, transparent);\n }\n }\n .bg-warning\\/10 {\n background-color: var(--warning);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--warning) 10%, transparent);\n }\n }\n .bg-clip-padding {\n background-clip: padding-box;\n }\n .bg-\\[right_0\\.5rem_center\\] {\n background-position: right 0.5rem center;\n }\n .bg-no-repeat {\n background-repeat: no-repeat;\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .px-0 {\n padding-inline: calc(var(--spacing) * 0);\n }\n .px-1 {\n padding-inline: calc(var(--spacing) * 1);\n }\n .px-1\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-2\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-3\\.5 {\n padding-inline: calc(var(--spacing) * 3.5);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-5 {\n padding-inline: calc(var(--spacing) * 5);\n }\n .py-0 {\n padding-block: calc(var(--spacing) * 0);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-\\[max\\(1rem\\,4vh\\)\\] {\n padding-block: max(1rem, 4vh);\n }\n .ps-2 {\n padding-inline-start: calc(var(--spacing) * 2);\n }\n .pe-3 {\n padding-inline-end: calc(var(--spacing) * 3);\n }\n .pr-8 {\n padding-right: calc(var(--spacing) * 8);\n }\n .pl-3 {\n padding-left: calc(var(--spacing) * 3);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .font-mono {\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n }\n .font-sans {\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\",\n Roboto, sans-serif;\n }\n .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n .text-base\\/4\\.5 {\n font-size: var(--text-base);\n line-height: calc(var(--spacing) * 4.5);\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .text-\\[0\\.625rem\\] {\n font-size: 0.625rem;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-normal {\n --tw-font-weight: var(--font-weight-normal);\n font-weight: var(--font-weight-normal);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-widest {\n --tw-tracking: var(--tracking-widest);\n letter-spacing: var(--tracking-widest);\n }\n .break-words {\n overflow-wrap: break-word;\n }\n .whitespace-normal {\n white-space: normal;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .text-amber-700 {\n color: var(--color-amber-700);\n }\n .text-blue-700 {\n color: var(--color-blue-700);\n }\n .text-cyan-700 {\n color: var(--color-cyan-700);\n }\n .text-destructive-foreground {\n color: var(--destructive-foreground);\n }\n .text-emerald-700 {\n color: var(--color-emerald-700);\n }\n .text-foreground {\n color: var(--foreground);\n }\n .text-fuchsia-700 {\n color: var(--color-fuchsia-700);\n }\n .text-info-foreground {\n color: var(--info-foreground);\n }\n .text-muted-foreground {\n color: var(--muted-foreground);\n }\n .text-muted-foreground\\/70 {\n color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--muted-foreground) 70%, transparent);\n }\n }\n .text-popover-foreground {\n color: var(--popover-foreground);\n }\n .text-primary-foreground {\n color: var(--primary-foreground);\n }\n .text-rose-700 {\n color: var(--color-rose-700);\n }\n .text-secondary-foreground {\n color: var(--secondary-foreground);\n }\n .text-slate-700 {\n color: var(--color-slate-700);\n }\n .text-success-foreground {\n color: var(--success-foreground);\n }\n .text-violet-700 {\n color: var(--color-violet-700);\n }\n .text-warning-foreground {\n color: var(--warning-foreground);\n }\n .text-white {\n color: var(--color-white);\n }\n .lowercase {\n text-transform: lowercase;\n }\n .line-through {\n text-decoration-line: line-through;\n }\n .underline {\n text-decoration-line: underline;\n }\n .underline-offset-4 {\n text-underline-offset: 4px;\n }\n .accent-accent {\n accent-color: var(--accent);\n }\n .accent-primary {\n accent-color: var(--primary);\n }\n .opacity-80 {\n opacity: 80%;\n }\n .shadow-lg\\/5 {\n --tw-shadow-alpha: 5%;\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%)), 0 4px 6px -4px var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.1) l a b / 5%));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs\\/5 {\n --tw-shadow-alpha: 5%;\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, oklab(from rgb(0 0 0 / 0.05) l a b / 5%));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-none {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs {\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .filter {\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .backdrop-blur-sm {\n --tw-backdrop-blur: blur(var(--blur-sm));\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-shadow {\n transition-property: box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .ease-out {\n --tw-ease: var(--ease-out);\n transition-timing-function: var(--ease-out);\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n .\\[clip-path\\:inset\\(0_1px\\)\\] {\n clip-path: inset(0 1px);\n }\n .not-dark\\:bg-clip-padding {\n &:not(*:is(.dark *)) {\n background-clip: padding-box;\n }\n }\n .group-data-hover\\:bg-amber-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-blue-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-cyan-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-emerald-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-fuchsia-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-rose-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-slate-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 30%, transparent);\n }\n }\n }\n .group-data-hover\\:bg-violet-400\\/30 {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 30%, transparent);\n }\n }\n }\n .placeholder\\:text-muted-foreground {\n &::placeholder {\n color: var(--muted-foreground);\n }\n }\n .before\\:pointer-events-none {\n &::before {\n content: var(--tw-content);\n pointer-events: none;\n }\n }\n .before\\:absolute {\n &::before {\n content: var(--tw-content);\n position: absolute;\n }\n }\n .before\\:inset-0 {\n &::before {\n content: var(--tw-content);\n inset: calc(var(--spacing) * 0);\n }\n }\n .before\\:rounded-\\[calc\\(var\\(--radius-2xl\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-radius: calc(var(--radius-2xl) - 1px);\n }\n }\n .before\\:rounded-t-\\[calc\\(var\\(--radius-xl\\)-1px\\)\\] {\n &::before {\n content: var(--tw-content);\n border-top-left-radius: calc(var(--radius-xl) - 1px);\n border-top-right-radius: calc(var(--radius-xl) - 1px);\n }\n }\n .before\\:bg-muted\\/72 {\n &::before {\n content: var(--tw-content);\n background-color: var(--muted);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--muted) 72%, transparent);\n }\n }\n }\n .before\\:shadow-\\[0_1px_--theme\\(--color-black\\/4\\%\\)\\] {\n &::before {\n content: var(--tw-content);\n --tw-shadow: 0 1px var(--tw-shadow-color, color-mix(in srgb, #000 4%, transparent));\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow: 0 1px var(--tw-shadow-color, color-mix(in oklab, var(--color-black) 4%, transparent));\n }\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-within\\:border-ring {\n &:focus-within {\n border-color: var(--ring);\n }\n }\n .focus-within\\:bg-accent {\n &:focus-within {\n background-color: var(--accent);\n }\n }\n .focus-within\\:text-accent-foreground {\n &:focus-within {\n color: var(--accent-foreground);\n }\n }\n .focus-within\\:ring-\\[3px\\] {\n &:focus-within {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-within\\:ring-ring\\/30 {\n &:focus-within {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 30%, transparent);\n }\n }\n }\n .hover\\:border-destructive\\/30 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--destructive) 30%, transparent);\n }\n }\n }\n }\n .hover\\:bg-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n .hover\\:bg-destructive\\/5 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 5%, transparent);\n }\n }\n }\n }\n .hover\\:bg-destructive\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-primary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-secondary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:text-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n .hover\\:underline {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n .focus\\:bg-accent {\n &:focus {\n background-color: var(--accent);\n }\n }\n .focus\\:text-accent-foreground {\n &:focus {\n color: var(--accent-foreground);\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .focus-visible\\:border-ring {\n &:focus-visible {\n border-color: var(--ring);\n }\n }\n .focus-visible\\:ring-2 {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-\\[3px\\] {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-ring {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n }\n }\n .focus-visible\\:ring-ring\\/30 {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 30%, transparent);\n }\n }\n }\n .focus-visible\\:ring-offset-1 {\n &:focus-visible {\n --tw-ring-offset-width: 1px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n }\n .focus-visible\\:ring-offset-background {\n &:focus-visible {\n --tw-ring-offset-color: var(--background);\n }\n }\n .disabled\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\:cursor-not-allowed {\n &:disabled {\n cursor: not-allowed;\n }\n }\n .disabled\\:opacity-60 {\n &:disabled {\n opacity: 60%;\n }\n }\n .has-disabled\\:opacity-60 {\n &:has(*:disabled) {\n opacity: 60%;\n }\n }\n .aria-invalid\\:border-destructive\\/40 {\n &[aria-invalid=\"true\"] {\n border-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n .aria-invalid\\:focus-visible\\:ring-destructive\\/20 {\n &[aria-invalid=\"true\"] {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n }\n .data-\\[disabled\\]\\:pointer-events-none {\n &[data-disabled] {\n pointer-events: none;\n }\n }\n .data-\\[disabled\\]\\:opacity-60 {\n &[data-disabled] {\n opacity: 60%;\n }\n }\n .data-\\[disabled\\]\\:opacity-64 {\n &[data-disabled] {\n opacity: 64%;\n }\n }\n .data-\\[highlighted\\]\\:bg-accent {\n &[data-highlighted] {\n background-color: var(--accent);\n }\n }\n .data-\\[highlighted\\]\\:text-accent-foreground {\n &[data-highlighted] {\n color: var(--accent-foreground);\n }\n }\n .sm\\:min-h-7 {\n @media (width >= 40rem) {\n min-height: calc(var(--spacing) * 7);\n }\n }\n .sm\\:py-\\[10vh\\] {\n @media (width >= 40rem) {\n padding-block: 10vh;\n }\n }\n .sm\\:text-sm {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .sm\\:text-sm\\/4 {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: calc(var(--spacing) * 4);\n }\n }\n .dark\\:bg-amber-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-blue-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-cyan-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-destructive\\/20 {\n &:is(.dark *) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .dark\\:bg-emerald-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-fuchsia-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-info\\/20 {\n &:is(.dark *) {\n background-color: var(--info);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--info) 20%, transparent);\n }\n }\n }\n .dark\\:bg-input\\/30 {\n &:is(.dark *) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n .dark\\:bg-rose-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-slate-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-success\\/20 {\n &:is(.dark *) {\n background-color: var(--success);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--success) 20%, transparent);\n }\n }\n }\n .dark\\:bg-violet-400\\/10 {\n &:is(.dark *) {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 10%, transparent);\n }\n }\n }\n .dark\\:bg-warning\\/20 {\n &:is(.dark *) {\n background-color: var(--warning);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--warning) 20%, transparent);\n }\n }\n }\n .dark\\:text-amber-300 {\n &:is(.dark *) {\n color: var(--color-amber-300);\n }\n }\n .dark\\:text-blue-300 {\n &:is(.dark *) {\n color: var(--color-blue-300);\n }\n }\n .dark\\:text-cyan-300 {\n &:is(.dark *) {\n color: var(--color-cyan-300);\n }\n }\n .dark\\:text-emerald-300 {\n &:is(.dark *) {\n color: var(--color-emerald-300);\n }\n }\n .dark\\:text-fuchsia-300 {\n &:is(.dark *) {\n color: var(--color-fuchsia-300);\n }\n }\n .dark\\:text-rose-300 {\n &:is(.dark *) {\n color: var(--color-rose-300);\n }\n }\n .dark\\:text-slate-300 {\n &:is(.dark *) {\n color: var(--color-slate-300);\n }\n }\n .dark\\:text-violet-300 {\n &:is(.dark *) {\n color: var(--color-violet-300);\n }\n }\n .dark\\:group-data-hover\\:bg-amber-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(82.8% 0.189 84.429) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-amber-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-blue-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.7% 0.165 254.624) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-blue-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-cyan-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-cyan-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-emerald-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(76.5% 0.177 163.223) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-emerald-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-fuchsia-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(74% 0.238 322.16) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-fuchsia-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-rose-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(71.2% 0.194 13.428) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-rose-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-slate-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.4% 0.04 256.788) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-slate-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:group-data-hover\\:bg-violet-400\\/15 {\n &:is(.dark *) {\n &:is(:where(.group)[data-hover] *) {\n background-color: color-mix(in srgb, oklch(70.2% 0.183 293.541) 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-violet-400) 15%, transparent);\n }\n }\n }\n }\n .dark\\:before\\:shadow-\\[0_-1px_--theme\\(--color-white\\/6\\%\\)\\] {\n &:is(.dark *) {\n &::before {\n content: var(--tw-content);\n --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in srgb, #fff 6%, transparent));\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow: 0 -1px var(--tw-shadow-color, color-mix(in oklab, var(--color-white) 6%, transparent));\n }\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .\\[\\&_svg\\]\\:pointer-events-none {\n & svg {\n pointer-events: none;\n }\n }\n .\\[\\&_svg\\]\\:shrink-0 {\n & svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'opacity-\\'\\]\\)\\]\\:opacity-80 {\n & svg:not([class*='opacity-']) {\n opacity: 80%;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n}\n@layer base {\n *, ::after, ::before {\n border-color: var(--color-border, currentColor);\n }\n}\n@layer components {\n .uidex-scrollbar {\n scrollbar-width: thin;\n scrollbar-color: var(--muted-foreground) transparent;\n @supports (color: color-mix(in lab, red, red)) {\n scrollbar-color: color-mix(in srgb, var(--muted-foreground) 40%, transparent) transparent;\n }\n }\n .uidex-scrollbar::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n .uidex-scrollbar::-webkit-scrollbar-track {\n background: transparent;\n }\n .uidex-scrollbar::-webkit-scrollbar-thumb {\n background-color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix( in srgb, var(--muted-foreground) 35%, transparent );\n }\n border-radius: 9999px;\n border: 2px solid transparent;\n background-clip: content-box;\n }\n .uidex-scrollbar::-webkit-scrollbar-thumb:hover {\n background-color: var(--muted-foreground);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix( in srgb, var(--muted-foreground) 60%, transparent );\n }\n }\n .uidex-scrollbar::-webkit-scrollbar-corner {\n background: transparent;\n }\n}\n:where(:host, :root) {\n --background: color-mix(\n in srgb,\n oklch(14.5% 0 0) 95%,\n #fff\n );\n @supports (color: color-mix(in lab, red, red)) {\n --background: color-mix(\n in srgb,\n var(--color-neutral-950) 95%,\n var(--color-white)\n );\n }\n --foreground: var(--color-neutral-100);\n --card: var(--background);\n @supports (color: color-mix(in lab, red, red)) {\n --card: color-mix(in srgb, var(--background) 98%, var(--color-white));\n }\n --card-foreground: var(--color-neutral-100);\n --popover: var(--background);\n @supports (color: color-mix(in lab, red, red)) {\n --popover: color-mix(in srgb, var(--background) 98%, var(--color-white));\n }\n --popover-foreground: var(--color-neutral-100);\n --primary: var(--color-neutral-100);\n --primary-foreground: var(--color-neutral-800);\n --secondary: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --secondary: color-mix(in srgb, var(--color-white) 4%, transparent);\n }\n --secondary-foreground: var(--color-neutral-100);\n --muted: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --muted: color-mix(in srgb, var(--color-white) 4%, transparent);\n }\n --muted-foreground: color-mix(\n in srgb,\n oklch(55.6% 0 0) 90%,\n #fff\n );\n @supports (color: color-mix(in lab, red, red)) {\n --muted-foreground: color-mix(\n in srgb,\n var(--color-neutral-500) 90%,\n var(--color-white)\n );\n }\n --accent: color-mix(in srgb, #fff 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --accent: color-mix(in srgb, var(--color-white) 4%, transparent);\n }\n --accent-foreground: var(--color-neutral-100);\n --destructive: color-mix(\n in srgb,\n oklch(63.7% 0.237 25.331) 90%,\n #fff\n );\n @supports (color: color-mix(in lab, red, red)) {\n --destructive: color-mix(\n in srgb,\n var(--color-red-500) 90%,\n var(--color-white)\n );\n }\n --destructive-foreground: var(--color-red-400);\n --border: color-mix(in srgb, #fff 6%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --border: color-mix(in srgb, var(--color-white) 6%, transparent);\n }\n --input: color-mix(in srgb, #fff 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --input: color-mix(in srgb, var(--color-white) 8%, transparent);\n }\n --ring: var(--color-neutral-500);\n --info: var(--color-blue-500);\n --info-foreground: var(--color-blue-400);\n --success: var(--color-emerald-500);\n --success-foreground: var(--color-emerald-400);\n --warning: var(--color-amber-500);\n --warning-foreground: var(--color-amber-400);\n --radius: 0.625rem;\n}\n:host(.light) {\n --background: var(--color-white);\n --foreground: var(--color-neutral-800);\n --card: var(--color-white);\n --card-foreground: var(--color-neutral-800);\n --popover: var(--color-white);\n --popover-foreground: var(--color-neutral-800);\n --primary: var(--color-neutral-800);\n --primary-foreground: var(--color-neutral-50);\n --secondary: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --secondary: color-mix(in srgb, var(--color-black) 4%, transparent);\n }\n --secondary-foreground: var(--color-neutral-800);\n --muted: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --muted: color-mix(in srgb, var(--color-black) 4%, transparent);\n }\n --muted-foreground: color-mix(\n in srgb,\n oklch(55.6% 0 0) 90%,\n #000\n );\n @supports (color: color-mix(in lab, red, red)) {\n --muted-foreground: color-mix(\n in srgb,\n var(--color-neutral-500) 90%,\n var(--color-black)\n );\n }\n --accent: color-mix(in srgb, #000 4%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --accent: color-mix(in srgb, var(--color-black) 4%, transparent);\n }\n --accent-foreground: var(--color-neutral-800);\n --destructive: var(--color-red-500);\n --destructive-foreground: var(--color-red-700);\n --border: color-mix(in srgb, #000 8%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --border: color-mix(in srgb, var(--color-black) 8%, transparent);\n }\n --input: color-mix(in srgb, #000 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --input: color-mix(in srgb, var(--color-black) 10%, transparent);\n }\n --ring: var(--color-neutral-400);\n --info: var(--color-blue-500);\n --info-foreground: var(--color-blue-700);\n --success: var(--color-emerald-500);\n --success-foreground: var(--color-emerald-700);\n --warning: var(--color-amber-500);\n --warning-foreground: var(--color-amber-700);\n}\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-content {\n syntax: \"*\";\n initial-value: \"\";\n inherits: false;\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-ease: initial;\n --tw-content: \"\";\n }\n }\n}\n","export const SURFACE_HOST_CLASS = \"uidex-surface-host\"\nexport const SURFACE_CONTAINER_CLASS = \"uidex-container\"\n\nexport const Z_BASE = 2147483644\nexport const Z_OVERLAY = 2147483645\nexport const Z_CHROME = 2147483646\n\nexport const SURFACE_IGNORE_SELECTOR = `.${SURFACE_HOST_CLASS},.${SURFACE_CONTAINER_CLASS}`\n\nimport type { EntityKind } from \"../entities\"\n\nexport const UIDEX_ATTR_TO_KIND: ReadonlyArray<readonly [string, EntityKind]> =\n [\n [\"data-uidex\", \"element\"],\n [\"data-uidex-region\", \"region\"],\n [\"data-uidex-widget\", \"widget\"],\n [\"data-uidex-primitive\", \"primitive\"],\n ]\n","import type { ResolvedTheme } from \"../session\"\nimport builtinCss from \"../styles/tailwind.built.css\"\nimport { SURFACE_HOST_CLASS, Z_BASE } from \"./constants\"\n\nexport interface SurfaceHost {\n readonly hostEl: HTMLElement\n readonly shadowRoot: ShadowRoot\n readonly chromeEl: HTMLElement\n applyTheme(theme: ResolvedTheme): void\n destroy(): void\n}\n\nexport interface SurfaceHostOptions {\n mount: Element\n stylesheets?: string[]\n initialTheme?: ResolvedTheme\n}\n\nexport function createSurfaceHost(options: SurfaceHostOptions): SurfaceHost {\n const { mount, stylesheets = [], initialTheme = \"light\" } = options\n\n const hostEl = document.createElement(\"div\")\n hostEl.classList.add(SURFACE_HOST_CLASS)\n hostEl.style.position = \"fixed\"\n hostEl.style.inset = \"0\"\n hostEl.style.pointerEvents = \"none\"\n hostEl.style.zIndex = String(Z_BASE)\n hostEl.classList.add(initialTheme)\n\n const shadow = hostEl.attachShadow({ mode: \"open\" })\n\n applyStylesheets(shadow, [builtinCss, ...stylesheets])\n\n const chromeEl = document.createElement(\"div\")\n chromeEl.classList.add(\"uidex-chrome\")\n chromeEl.style.pointerEvents = \"auto\"\n shadow.appendChild(chromeEl)\n\n mount.appendChild(hostEl)\n\n return {\n hostEl,\n shadowRoot: shadow,\n chromeEl,\n applyTheme(theme) {\n hostEl.classList.remove(\"light\", \"dark\")\n hostEl.classList.add(theme)\n },\n destroy() {\n hostEl.remove()\n },\n }\n}\n\nfunction applyStylesheets(shadow: ShadowRoot, stylesheets: string[]): void {\n if (stylesheets.length === 0) return\n\n const adoptable = supportsConstructableStylesheets(shadow)\n if (adoptable) {\n const sheets: CSSStyleSheet[] = []\n for (const css of stylesheets) {\n const sheet = new CSSStyleSheet()\n sheet.replaceSync(css)\n sheets.push(sheet)\n }\n shadow.adoptedStyleSheets = [...shadow.adoptedStyleSheets, ...sheets]\n return\n }\n\n for (const css of stylesheets) {\n const style = document.createElement(\"style\")\n style.textContent = css\n shadow.appendChild(style)\n }\n}\n\nfunction supportsConstructableStylesheets(shadow: ShadowRoot): boolean {\n if (typeof CSSStyleSheet === \"undefined\") return false\n if (!(\"adoptedStyleSheets\" in shadow)) return false\n try {\n const probe = new CSSStyleSheet()\n probe.replaceSync(\"\")\n return true\n } catch {\n return false\n }\n}\n","import { createElement as createLucideElement } from \"lucide\"\nimport { displayName, KIND_STYLE, type Entity } from \"../entities\"\nimport type { SessionStore } from \"../session\"\nimport { Z_CHROME } from \"./constants\"\n\nconst DEFAULT_TOOLTIP_COLOR = \"#34d399\"\nconst TOOLTIP_OFFSET = 16\nconst ARROW_SIZE = 5\n\nexport type CursorTooltipContent =\n | { entity: Entity; node?: Element | null }\n | string\n\nexport interface CursorTooltip {\n destroy(): void\n /** Present content for the current cursor position. */\n update(\n content: CursorTooltipContent | null,\n cursor: { x: number; y: number } | null\n ): void\n}\n\nexport interface CursorTooltipDeps {\n container: Element\n session: SessionStore\n}\n\nexport function createCursorTooltip(deps: CursorTooltipDeps): CursorTooltip {\n const { container } = deps\n\n const el = document.createElement(\"div\")\n el.setAttribute(\"data-uidex-cursor-tooltip\", \"\")\n el.style.position = \"fixed\"\n el.style.pointerEvents = \"none\"\n el.style.zIndex = String(Z_CHROME)\n el.style.padding = \"4px 8px\"\n el.style.fontSize = \"12px\"\n el.style.fontFamily = \"ui-sans-serif, system-ui, sans-serif\"\n el.style.borderRadius = \"6px\"\n el.style.background = DEFAULT_TOOLTIP_COLOR\n el.style.color = \"#0a0a0a\"\n el.style.display = \"none\"\n el.style.whiteSpace = \"nowrap\"\n el.style.transform = \"translate(-50%, 0)\"\n el.style.alignItems = \"center\"\n el.style.gap = \"6px\"\n\n const arrow = document.createElement(\"div\")\n arrow.setAttribute(\"data-uidex-cursor-tooltip-arrow\", \"\")\n arrow.style.position = \"absolute\"\n arrow.style.left = \"50%\"\n arrow.style.bottom = \"100%\"\n arrow.style.width = \"0\"\n arrow.style.height = \"0\"\n arrow.style.transform = \"translate(-50%, 0)\"\n arrow.style.borderLeft = `${ARROW_SIZE}px solid transparent`\n arrow.style.borderRight = `${ARROW_SIZE}px solid transparent`\n arrow.style.borderBottom = `${ARROW_SIZE}px solid ${DEFAULT_TOOLTIP_COLOR}`\n el.appendChild(arrow)\n\n const body = document.createElement(\"span\")\n body.setAttribute(\"data-uidex-cursor-tooltip-body\", \"\")\n body.style.display = \"inline-flex\"\n body.style.alignItems = \"center\"\n body.style.gap = \"6px\"\n el.appendChild(body)\n\n container.appendChild(el)\n\n let currentContent: CursorTooltipContent | null = null\n let currentCursor: { x: number; y: number } | null = null\n\n const applyColor = (color: string): void => {\n el.style.background = color\n arrow.style.borderBottom = `${ARROW_SIZE}px solid ${color}`\n }\n\n const renderBody = (): void => {\n body.replaceChildren()\n if (typeof currentContent === \"string\") {\n applyColor(DEFAULT_TOOLTIP_COLOR)\n body.append(document.createTextNode(currentContent))\n return\n }\n if (!currentContent) return\n const { entity, node } = currentContent\n const style = KIND_STYLE[entity.kind]\n applyColor(style?.color ?? DEFAULT_TOOLTIP_COLOR)\n if (style) {\n const svg = createLucideElement(style.icon)\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"width\", \"14\")\n svg.setAttribute(\"height\", \"14\")\n svg.style.display = \"block\"\n body.append(svg)\n }\n const label = displayName(entity, node)\n body.append(document.createTextNode(label))\n const rawId = entity.kind === \"route\" ? entity.path : entity.id\n if (rawId && rawId !== label) {\n const subordinate = document.createElement(\"span\")\n subordinate.setAttribute(\"data-uidex-cursor-tooltip-id\", \"\")\n subordinate.style.opacity = \"0.65\"\n subordinate.style.fontFamily =\n \"ui-monospace, SFMono-Regular, Menlo, monospace\"\n subordinate.style.fontSize = \"11px\"\n subordinate.textContent = rawId\n body.append(subordinate)\n }\n }\n\n const render = (): void => {\n if (!currentContent || !currentCursor) {\n el.style.display = \"none\"\n return\n }\n renderBody()\n el.style.display = \"inline-flex\"\n el.style.left = `${currentCursor.x}px`\n el.style.top = `${currentCursor.y + TOOLTIP_OFFSET}px`\n }\n\n return {\n update(content, cursor) {\n currentContent = content\n currentCursor = cursor\n render()\n },\n destroy() {\n el.remove()\n currentContent = null\n currentCursor = null\n },\n }\n}\n","import { displayName, type Entity, type EntityRef } from \"../entities\"\nimport type { Registry } from \"../entities\"\nimport type { SessionStore } from \"../session\"\nimport { SURFACE_IGNORE_SELECTOR, UIDEX_ATTR_TO_KIND } from \"./constants\"\nimport type { Overlay, OverlayShowOptions } from \"./overlay\"\n\nexport interface InspectorMatch {\n element: HTMLElement\n ref: EntityRef\n entity: Entity\n /** Display name resolved via `displayName(entity, element)`. */\n label: string\n}\n\nexport interface InspectorOptions {\n session: SessionStore\n registry?: Registry\n resolve?: (target: Element) => InspectorMatch | null\n onHover?: (\n match: InspectorMatch | null,\n cursor: { x: number; y: number } | null\n ) => void\n onSelect?: (match: InspectorMatch, cursor: { x: number; y: number }) => void\n}\n\nexport interface Inspector {\n mount(): void\n destroy(): void\n}\n\nfunction entityForRef(ref: EntityRef, registry?: Registry): Entity {\n if (registry) {\n const found = registry.get(ref.kind, ref.id)\n if (found) return found\n }\n if (ref.kind === \"route\") return { kind: \"route\", path: ref.id, page: ref.id }\n if (ref.kind === \"flow\") {\n return { kind: \"flow\", id: ref.id, loc: { file: \"\" }, touches: [] }\n }\n return { kind: ref.kind, id: ref.id }\n}\n\nexport function defaultResolveMatch(\n target: Element,\n registry?: Registry\n): InspectorMatch | null {\n if (target.closest(SURFACE_IGNORE_SELECTOR)) return null\n let node: Element | null = target\n while (node) {\n if (node instanceof HTMLElement) {\n for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {\n const id = node.getAttribute(attr)\n if (id) {\n const ref: EntityRef = { kind, id }\n const entity = entityForRef(ref, registry)\n return {\n element: node,\n ref,\n entity,\n label: displayName(entity, node),\n }\n }\n }\n }\n node = node.parentElement\n }\n return null\n}\n\nexport function resolveEntityElement(ref: EntityRef): HTMLElement | null {\n const entry = UIDEX_ATTR_TO_KIND.find(([, kind]) => kind === ref.kind)\n if (!entry) return null\n const [attr] = entry\n const selector = `[${attr}=\"${CSS.escape(ref.id)}\"]`\n const el = document.querySelector(selector)\n if (el instanceof HTMLElement && el.isConnected) return el\n return null\n}\n\nexport interface HighlightControllerLike {\n show(ref: EntityRef, opts?: OverlayShowOptions): void\n hide(): void\n}\n\nexport function createHighlightController(\n overlay: Overlay\n): HighlightControllerLike {\n let lastKey: string | null = null\n return {\n show(ref, opts) {\n const el = resolveEntityElement(ref)\n if (!el) {\n lastKey = null\n overlay.hide()\n return\n }\n const key = `${ref.kind}:${ref.id}`\n if (key === lastKey && overlay.isVisible) return\n lastKey = key\n overlay.show(el, opts)\n },\n hide() {\n lastKey = null\n overlay.hide()\n },\n }\n}\n\nexport function createInspector(options: InspectorOptions): Inspector {\n const {\n session,\n registry,\n resolve = (target) => defaultResolveMatch(target, registry),\n onHover,\n onSelect,\n } = options\n\n let mounted = false\n let currentEl: HTMLElement | null = null\n let cursorStyleEl: HTMLStyleElement | null = null\n\n const onMouseMove = (e: MouseEvent): void => {\n if (!(e.target instanceof Element)) return\n const match = resolve(e.target)\n const cursor = { x: e.clientX, y: e.clientY }\n if (match) {\n if (match.element !== currentEl) {\n currentEl = match.element\n session.getState().actions.hover(match.ref)\n }\n onHover?.(match, cursor)\n } else if (currentEl) {\n currentEl = null\n session.getState().actions.hover(null)\n onHover?.(null, cursor)\n }\n }\n\n const onClick = (e: MouseEvent): void => {\n if (!(e.target instanceof Element)) return\n if (e.target.closest(SURFACE_IGNORE_SELECTOR)) return\n const match = resolve(e.target)\n if (!match) return\n e.preventDefault()\n e.stopPropagation()\n session.getState().actions.select(match.ref)\n onSelect?.(match, { x: e.clientX, y: e.clientY })\n }\n\n return {\n mount() {\n if (mounted) return\n mounted = true\n if (typeof document !== \"undefined\") {\n cursorStyleEl = document.createElement(\"style\")\n cursorStyleEl.setAttribute(\"data-uidex-inspector-cursor\", \"\")\n cursorStyleEl.textContent =\n \"html, body, body * { cursor: crosshair !important; }\"\n document.head.appendChild(cursorStyleEl)\n }\n document.addEventListener(\"mousemove\", onMouseMove)\n document.addEventListener(\"click\", onClick, true)\n },\n destroy() {\n if (!mounted) return\n mounted = false\n currentEl = null\n if (cursorStyleEl) {\n cursorStyleEl.remove()\n cursorStyleEl = null\n }\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"click\", onClick, true)\n session.getState().actions.hover(null)\n onHover?.(null, null)\n },\n }\n}\n","import type { SessionStore } from \"../session\"\nimport { Z_CHROME } from \"./constants\"\n\nexport type Corner = \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n\nexport interface MenuBarOptions {\n container: Element\n session: SessionStore\n initialCorner?: Corner\n appTitle?: string\n}\n\nexport interface MenuBar {\n destroy(): void\n snapTo(corner: Corner): void\n snapToNearest(x: number, y: number): void\n readonly corner: Corner\n readonly root: HTMLElement\n}\n\nexport function createMenuBar(options: MenuBarOptions): MenuBar {\n const {\n container,\n session,\n initialCorner = \"bottom-right\",\n appTitle,\n } = options\n\n const root = document.createElement(\"div\")\n root.setAttribute(\"data-uidex-menubar\", \"\")\n root.setAttribute(\"role\", \"toolbar\")\n Object.assign(root.style, {\n position: \"fixed\",\n zIndex: String(Z_CHROME),\n pointerEvents: \"auto\",\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"6px\",\n borderRadius: \"8px\",\n background: \"rgba(20, 20, 20, 0.92)\",\n color: \"#f5f5f5\",\n fontFamily: \"ui-sans-serif, system-ui, sans-serif\",\n fontSize: \"12px\",\n userSelect: \"none\",\n cursor: \"grab\",\n })\n\n const buttonStyle = {\n background: \"rgba(255,255,255,0.08)\",\n color: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.12)\",\n borderRadius: \"6px\",\n padding: \"4px 8px\",\n font: \"inherit\",\n cursor: \"pointer\",\n }\n const buttonActiveStyle = {\n background: \"rgba(120, 180, 255, 0.28)\",\n borderColor: \"rgba(120, 180, 255, 0.55)\",\n }\n\n if (appTitle) {\n const titleEl = document.createElement(\"span\")\n titleEl.setAttribute(\"data-uidex-menubar-title\", \"\")\n titleEl.textContent = appTitle\n Object.assign(titleEl.style, {\n padding: \"0 6px 0 4px\",\n fontWeight: \"600\",\n letterSpacing: \"0.01em\",\n whiteSpace: \"nowrap\",\n })\n root.appendChild(titleEl)\n }\n\n const highlightDot = document.createElement(\"span\")\n highlightDot.setAttribute(\"data-uidex-menubar-highlight-indicator\", \"\")\n highlightDot.setAttribute(\"aria-label\", \"Element highlighted (press Esc)\")\n highlightDot.setAttribute(\"role\", \"status\")\n Object.assign(highlightDot.style, {\n display: \"none\",\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n margin: \"0 2px 0 4px\",\n background: \"rgba(120, 180, 255, 0.85)\",\n boxShadow: \"0 0 6px rgba(120, 180, 255, 0.75)\",\n flex: \"0 0 auto\",\n })\n root.appendChild(highlightDot)\n\n const inspectBtn = document.createElement(\"button\")\n inspectBtn.type = \"button\"\n inspectBtn.setAttribute(\"data-uidex-menubar-inspect\", \"\")\n inspectBtn.textContent = \"Inspect\"\n Object.assign(inspectBtn.style, buttonStyle)\n inspectBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n session.send({ type: \"TOGGLE_INSPECTOR\" })\n })\n root.appendChild(inspectBtn)\n\n const paletteBtn = document.createElement(\"button\")\n paletteBtn.type = \"button\"\n paletteBtn.setAttribute(\"data-uidex-menubar-palette\", \"\")\n paletteBtn.textContent = \"⌘K\"\n Object.assign(paletteBtn.style, buttonStyle)\n paletteBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation()\n if (session.getState().stack.length > 0) {\n session.send({ type: \"CLOSE\" })\n } else {\n session.send({ type: \"OPEN_PALETTE\" })\n }\n })\n root.appendChild(paletteBtn)\n container.appendChild(root)\n\n const syncButtonStates = (): void => {\n const state = session.getState()\n inspectBtn.setAttribute(\n \"data-uidex-menubar-inspect-active\",\n state.inspectorActive ? \"true\" : \"false\"\n )\n Object.assign(\n inspectBtn.style,\n state.inspectorActive ? buttonActiveStyle : buttonStyle\n )\n const top = state.stack[state.stack.length - 1] ?? null\n const paletteOpen = top?.id === \"command-palette\"\n paletteBtn.setAttribute(\n \"data-uidex-menubar-palette-active\",\n paletteOpen ? \"true\" : \"false\"\n )\n Object.assign(\n paletteBtn.style,\n paletteOpen ? buttonActiveStyle : buttonStyle\n )\n const highlightActive = state.pinnedHighlight !== null\n highlightDot.setAttribute(\n \"data-uidex-menubar-highlight-active\",\n highlightActive ? \"true\" : \"false\"\n )\n highlightDot.style.display = highlightActive ? \"inline-block\" : \"none\"\n }\n syncButtonStates()\n const unsubscribeSession = session.subscribe(syncButtonStates)\n\n let corner: Corner = initialCorner\n const applyCorner = (): void => {\n const offset = \"16px\"\n root.style.top = corner.startsWith(\"top\") ? offset : \"\"\n root.style.bottom = corner.startsWith(\"bottom\") ? offset : \"\"\n root.style.left = corner.endsWith(\"left\") ? offset : \"\"\n root.style.right = corner.endsWith(\"right\") ? offset : \"\"\n root.setAttribute(\"data-uidex-menubar-corner\", corner)\n }\n applyCorner()\n\n let dragging = false\n let startX = 0\n let startY = 0\n let originLeft = 0\n let originTop = 0\n\n const onMouseMove = (e: MouseEvent): void => {\n if (!dragging) return\n root.style.left = `${originLeft + e.clientX - startX}px`\n root.style.top = `${originTop + e.clientY - startY}px`\n }\n\n const onMouseUp = (e: MouseEvent): void => {\n if (!dragging) return\n dragging = false\n root.style.cursor = \"grab\"\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"mouseup\", onMouseUp)\n snapToNearest(e.clientX, e.clientY)\n }\n\n const onMouseDown = (e: MouseEvent): void => {\n if (e.target instanceof HTMLElement && e.target.closest(\"button\")) return\n const rect = root.getBoundingClientRect()\n dragging = true\n originLeft = rect.left\n originTop = rect.top\n startX = e.clientX\n startY = e.clientY\n root.style.cursor = \"grabbing\"\n Object.assign(root.style, {\n top: `${originTop}px`,\n left: `${originLeft}px`,\n bottom: \"\",\n right: \"\",\n })\n document.addEventListener(\"mousemove\", onMouseMove)\n document.addEventListener(\"mouseup\", onMouseUp)\n e.preventDefault()\n }\n root.addEventListener(\"mousedown\", onMouseDown)\n\n function snapTo(next: Corner): void {\n corner = next\n applyCorner()\n }\n\n function snapToNearest(x: number, y: number): void {\n const horizontal = x / (window.innerWidth || 1) < 0.5 ? \"left\" : \"right\"\n const vertical = y / (window.innerHeight || 1) < 0.5 ? \"top\" : \"bottom\"\n snapTo(`${vertical}-${horizontal}` as Corner)\n }\n\n return {\n destroy() {\n unsubscribeSession()\n root.removeEventListener(\"mousedown\", onMouseDown)\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"mouseup\", onMouseUp)\n root.remove()\n },\n snapTo,\n snapToNearest,\n get corner() {\n return corner\n },\n get root() {\n return root\n },\n }\n}\n","import { Z_OVERLAY } from \"./constants\"\n\nexport interface OverlayShowOptions {\n label?: string\n color?: string\n padding?: number\n borderStyle?: string\n borderWidth?: number\n fillOpacity?: number\n}\n\nexport interface Overlay {\n show(target: Element, options?: OverlayShowOptions): void\n hide(): void\n destroy(): void\n readonly isVisible: boolean\n}\n\ninterface OverlayDeps {\n container: Element\n}\n\nconst DEFAULT_COLOR = \"#34d399\"\nconst DEFAULT_BORDER_WIDTH = 2\nconst DEFAULT_FILL_OPACITY = 0.08\n\nexport function createOverlay(deps: OverlayDeps): Overlay {\n const { container } = deps\n\n const box = document.createElement(\"div\")\n box.setAttribute(\"data-uidex-overlay\", \"\")\n box.style.position = \"fixed\"\n box.style.pointerEvents = \"none\"\n box.style.zIndex = String(Z_OVERLAY)\n box.style.boxSizing = \"border-box\"\n box.style.display = \"none\"\n\n const label = document.createElement(\"div\")\n label.setAttribute(\"data-uidex-overlay-label\", \"\")\n label.style.position = \"absolute\"\n label.style.left = \"0\"\n label.style.bottom = \"100%\"\n label.style.padding = \"2px 6px\"\n label.style.fontSize = \"11px\"\n label.style.fontFamily = \"ui-sans-serif, system-ui, sans-serif\"\n label.style.lineHeight = \"1\"\n label.style.whiteSpace = \"nowrap\"\n label.style.color = \"#0a0a0a\"\n label.style.display = \"none\"\n\n box.appendChild(label)\n container.appendChild(box)\n\n let target: Element | null = null\n let opts: Required<OverlayShowOptions> = {\n label: \"\",\n color: DEFAULT_COLOR,\n padding: 0,\n borderStyle: \"solid\",\n borderWidth: DEFAULT_BORDER_WIDTH,\n fillOpacity: DEFAULT_FILL_OPACITY,\n }\n\n let rafId: number | null = null\n let attached = false\n\n const schedule = (): void => {\n if (rafId !== null) return\n rafId =\n typeof requestAnimationFrame === \"function\"\n ? requestAnimationFrame(() => {\n rafId = null\n updatePosition()\n })\n : (setTimeout(() => {\n rafId = null\n updatePosition()\n }, 0) as unknown as number)\n }\n\n const cancelSchedule = (): void => {\n if (rafId === null) return\n if (typeof cancelAnimationFrame === \"function\") cancelAnimationFrame(rafId)\n else clearTimeout(rafId as unknown as ReturnType<typeof setTimeout>)\n rafId = null\n }\n\n const onScroll = (): void => schedule()\n const onResize = (): void => schedule()\n\n const attach = (): void => {\n if (attached) return\n attached = true\n window.addEventListener(\"resize\", onResize)\n window.addEventListener(\"scroll\", onScroll, {\n capture: true,\n passive: true,\n })\n }\n\n const detach = (): void => {\n if (!attached) return\n attached = false\n window.removeEventListener(\"resize\", onResize)\n window.removeEventListener(\"scroll\", onScroll, {\n capture: true,\n } as EventListenerOptions)\n cancelSchedule()\n }\n\n function updatePosition(): void {\n if (!target) return\n const rect = target.getBoundingClientRect()\n const pad = opts.padding\n box.style.top = `${rect.top - pad}px`\n box.style.left = `${rect.left - pad}px`\n box.style.width = `${rect.width + pad * 2}px`\n box.style.height = `${rect.height + pad * 2}px`\n }\n\n function applyStyles(): void {\n box.style.borderColor = opts.color\n box.style.borderStyle = opts.borderStyle\n box.style.borderWidth = `${opts.borderWidth}px`\n box.style.backgroundColor = rgbaFromColor(opts.color, opts.fillOpacity)\n if (opts.label) {\n label.textContent = opts.label\n label.style.backgroundColor = opts.color\n label.style.display = \"\"\n } else {\n label.textContent = \"\"\n label.style.display = \"none\"\n }\n }\n\n return {\n show(nextTarget, showOpts) {\n target = nextTarget\n opts = {\n label: showOpts?.label ?? \"\",\n color: showOpts?.color ?? DEFAULT_COLOR,\n padding: showOpts?.padding ?? 0,\n borderStyle: showOpts?.borderStyle ?? \"solid\",\n borderWidth: showOpts?.borderWidth ?? DEFAULT_BORDER_WIDTH,\n fillOpacity: showOpts?.fillOpacity ?? DEFAULT_FILL_OPACITY,\n }\n applyStyles()\n updatePosition()\n box.style.display = \"\"\n attach()\n },\n hide() {\n target = null\n box.style.display = \"none\"\n detach()\n },\n destroy() {\n detach()\n box.remove()\n target = null\n },\n get isVisible() {\n return target !== null\n },\n }\n}\n\nfunction rgbaFromColor(color: string, alpha: number): string {\n if (color.startsWith(\"#\")) {\n const hex = color.slice(1)\n const bigint = parseInt(\n hex.length === 3\n ? hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : hex,\n 16\n )\n const r = (bigint >> 16) & 255\n const g = (bigint >> 8) & 255\n const b = bigint & 255\n return `rgba(${r}, ${g}, ${b}, ${alpha})`\n }\n return color\n}\n","import type { ResolvedTheme, SessionStore, ThemePreference } from \"../session\"\n\nexport interface ThemeDetector {\n destroy(): void\n /** Resolve the current theme preference against the environment. */\n readonly resolved: ResolvedTheme\n}\n\nexport interface ThemeDetectorDeps {\n session: SessionStore\n onResolve?: (theme: ResolvedTheme) => void\n}\n\ntype HtmlClassToken = \"dark\" | \"light\"\n\nexport function createThemeDetector(deps: ThemeDetectorDeps): ThemeDetector {\n const { session, onResolve } = deps\n\n let resolved: ResolvedTheme = session.getState().resolvedTheme\n\n const detect = (preference: ThemePreference): ResolvedTheme => {\n if (preference !== \"auto\") return preference\n const htmlToken = readHtmlClassToken()\n if (htmlToken) return htmlToken\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\"\n ) {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\"\n }\n return \"light\"\n }\n\n const push = (): void => {\n const preference = session.getState().theme\n const next = detect(preference)\n if (next === resolved) return\n resolved = next\n session.getState().actions.setTheme(preference, next)\n onResolve?.(next)\n }\n\n push()\n\n let mql: MediaQueryList | null = null\n const mqlListener = (): void => push()\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\"\n ) {\n mql = window.matchMedia(\"(prefers-color-scheme: dark)\")\n if (typeof mql.addEventListener === \"function\") {\n mql.addEventListener(\"change\", mqlListener)\n } else if (typeof mql.addListener === \"function\") {\n // Safari < 14\n mql.addListener(mqlListener)\n }\n }\n\n let observer: MutationObserver | null = null\n if (\n typeof MutationObserver !== \"undefined\" &&\n typeof document !== \"undefined\"\n ) {\n observer = new MutationObserver(() => push())\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"class\"],\n })\n }\n\n const unsubscribe = session.subscribe((state, prev) => {\n if (state.theme !== prev.theme) push()\n })\n\n return {\n destroy() {\n unsubscribe()\n if (mql) {\n if (typeof mql.removeEventListener === \"function\") {\n mql.removeEventListener(\"change\", mqlListener)\n } else if (typeof mql.removeListener === \"function\") {\n mql.removeListener(mqlListener)\n }\n }\n observer?.disconnect()\n },\n get resolved() {\n return resolved\n },\n }\n}\n\nfunction readHtmlClassToken(): HtmlClassToken | null {\n if (typeof document === \"undefined\") return null\n const root = document.documentElement\n if (!root) return null\n if (root.classList.contains(\"dark\")) return \"dark\"\n if (root.classList.contains(\"light\")) return \"light\"\n return null\n}\n","import { KIND_STYLE, type Registry } from \"../entities\"\nimport { createCleanupStack, type CleanupStack } from \"../internal/cleanup\"\nimport type { SessionStore } from \"../session\"\nimport { createCursorTooltip, type CursorTooltip } from \"./cursor-tooltip\"\nimport { createSurfaceHost, type SurfaceHost } from \"./host\"\nimport {\n createInspector,\n type Inspector,\n type InspectorOptions,\n} from \"./inspector\"\nimport { createMenuBar, type Corner, type MenuBar } from \"./menu-bar\"\nimport { createOverlay, type Overlay } from \"./overlay\"\nimport { createThemeDetector, type ThemeDetector } from \"./theme\"\n\nexport interface CreateSurfaceShellOptions {\n mount: Element\n registry: Registry\n session: SessionStore\n stylesheets?: string[]\n initialCorner?: Corner\n appTitle?: string\n /**\n * Additional inspector wiring. Hover is pre-wired to overlay + tooltip; pass\n * `onSelect` (and `onAfterHover`) to extend behaviour without rebuilding the\n * host.\n */\n inspector?: Pick<InspectorOptions, \"onSelect\"> & {\n onAfterHover?: InspectorOptions[\"onHover\"]\n }\n}\n\nexport interface SurfaceShell {\n host: SurfaceHost\n overlay: Overlay\n tooltip: CursorTooltip\n inspector: Inspector\n menuBar: MenuBar\n themeDetector: ThemeDetector\n cleanup: CleanupStack\n destroy(): void\n}\n\n/**\n * Builds the chrome bundle shared by `createUidex` and `createHeadless`:\n * host + theme detector + overlay + cursor tooltip + inspector + menu bar.\n * Returns a cleanup stack so callers can register their own teardown in LIFO\n * order, then call `destroy()` once to drain the whole thing.\n */\nexport function createSurfaceShell(\n options: CreateSurfaceShellOptions\n): SurfaceShell {\n const cleanup = createCleanupStack()\n\n const host = createSurfaceHost({\n mount: options.mount,\n stylesheets: options.stylesheets,\n initialTheme: options.session.getState().resolvedTheme,\n })\n cleanup.add(host)\n\n const themeDetector = createThemeDetector({\n session: options.session,\n onResolve: (theme) => host.applyTheme(theme),\n })\n cleanup.add(themeDetector)\n\n const overlay = createOverlay({ container: host.chromeEl })\n cleanup.add(overlay)\n\n const tooltip = createCursorTooltip({\n container: host.chromeEl,\n session: options.session,\n })\n cleanup.add(tooltip)\n\n const afterHover = options.inspector?.onAfterHover\n const inspector = createInspector({\n session: options.session,\n registry: options.registry,\n onSelect: options.inspector?.onSelect,\n onHover: (match, cursor) => {\n if (!match) {\n overlay.hide()\n tooltip.update(null, cursor)\n } else {\n overlay.show(match.element, {\n color: KIND_STYLE[match.ref.kind].color,\n })\n tooltip.update({ entity: match.entity, node: match.element }, cursor)\n }\n afterHover?.(match, cursor)\n },\n })\n cleanup.add(inspector)\n\n const menuBar = createMenuBar({\n container: host.chromeEl,\n session: options.session,\n initialCorner: options.initialCorner,\n appTitle: options.appTitle,\n })\n cleanup.add(menuBar)\n\n return {\n host,\n overlay,\n tooltip,\n inspector,\n menuBar,\n themeDetector,\n cleanup,\n destroy: cleanup.drain,\n }\n}\n","import type { SurfaceEvent } from \"../flows/surface\"\nimport type { SessionStore } from \"../session\"\nimport type { ActionsPopupHandle } from \"../views/core/actions-popup\"\n\nexport interface BindShadowKeysOptions {\n shadowRoot: ShadowRoot\n session: SessionStore\n getActionsPopup: () => ActionsPopupHandle | null\n}\n\nexport function bindShadowKeys(options: BindShadowKeysOptions): () => void {\n const { shadowRoot, session, getActionsPopup } = options\n const send = (event: SurfaceEvent): void => session.send(event)\n\n const onKeydown = (e: KeyboardEvent): void => {\n const isMod = e.metaKey || e.ctrlKey\n const isCmdK = isMod && !e.altKey && !e.shiftKey && e.key === \"k\"\n const isCmdBracket = isMod && !e.altKey && !e.shiftKey && e.key === \"[\"\n const isEsc = e.key === \"Escape\"\n const isPopKey = isEsc || isCmdBracket\n if (!isCmdK && !isPopKey) return\n\n const popup = getActionsPopup()\n if (popup?.isOpen()) {\n if (popup.handleKey(e)) {\n e.preventDefault()\n e.stopPropagation()\n return\n }\n if (isPopKey || isCmdK) {\n popup.close()\n e.preventDefault()\n e.stopPropagation()\n }\n return\n }\n\n if (isCmdK) {\n const state = session.getState()\n e.preventDefault()\n e.stopPropagation()\n send(\n state.stack.length === 0 ? { type: \"OPEN_PALETTE\" } : { type: \"CMD_K\" }\n )\n return\n }\n\n const state = session.getState()\n const hasWork =\n state.stack.length > 0 ||\n state.pinnedHighlight !== null ||\n state.inspectorActive\n if (!hasWork) return\n e.preventDefault()\n e.stopPropagation()\n send({ type: \"ESC\" })\n }\n\n shadowRoot.addEventListener(\"keydown\", onKeydown as EventListener, {\n capture: true,\n })\n return () => {\n shadowRoot.removeEventListener(\n \"keydown\",\n onKeydown as EventListener,\n {\n capture: true,\n } as EventListenerOptions\n )\n }\n}\n","export function detectDev(): boolean {\n try {\n if (\n typeof process !== \"undefined\" &&\n typeof process.env?.NODE_ENV === \"string\"\n ) {\n return process.env.NODE_ENV !== \"production\"\n }\n } catch {\n /* ignore */\n }\n return true\n}\n","import type {\n CloudAdapter,\n ConsoleLogEntry,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigEpic,\n NetworkErrorEntry,\n SourceRef,\n Viewport,\n} from \"../../ingest/feedback-contract\"\nimport type { EntityKind, EntityRef, Registry } from \"../../entities\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport type { OverlayShowOptions } from \"../../surface/overlay\"\nimport type { ViewSurface } from \"./surface\"\n\nexport type {\n CloudAdapter,\n ConsoleLogEntry,\n FeedbackExternalLink,\n FeedbackPayload,\n FeedbackResult,\n FeedbackSuggestedTarget,\n IngestConfig,\n IngestConfigEpic,\n NetworkErrorEntry,\n SourceRef,\n Viewport,\n}\n\nexport interface ViewPalette {\n label: string\n group?: string\n /**\n * Leading-icon factory rendered as a rounded-square tile on the palette\n * row. Called fresh per render (so a returned SVG isn't reparented).\n */\n icon?: () => Node\n shortcut?: string\n}\n\nexport interface ViewDirectory {\n list(): readonly View[]\n}\n\nexport interface ViewPushTarget {\n id: string\n ref?: EntityRef | null\n}\n\nexport interface HighlightController {\n show(ref: EntityRef, opts?: OverlayShowOptions): void\n hide(): void\n}\n\nexport interface ViewContext {\n ref: EntityRef | null\n registry: Registry\n cloud: CloudAdapter<unknown, unknown, unknown> | null\n sdkCloud: CloudAdapter\n views: ViewDirectory\n /** Push a view onto the stack. Unregistered ids are a no-op. */\n push: (target: ViewPushTarget) => void\n /** Pop the top view off the stack. No-op when the stack is empty. */\n pop: () => void\n /** Clear the entire view stack. */\n close: () => void\n /** Resolve the first view matching `ref` and push it onto the stack. */\n navigate: (ref: EntityRef) => void\n /** Pin the overlay to `ref` until the user presses Esc. */\n pinHighlight: (ref: EntityRef) => void\n /** Shell-owned search input. The shell dispatches its value into the active surface. */\n searchInput: HTMLInputElement\n /** Drives the Surface's singleton overlay from inside a custom surface. */\n highlight: HighlightController\n /** Snapshot of the current view stack (top-most last). */\n getStack: () => readonly ViewStackEntry[]\n}\n\nexport interface ShellHint {\n key: string\n label: string\n}\n\nexport type ShellActionIntent =\n | { kind: \"push\"; viewId: string; refKind?: EntityKind }\n | { kind: \"pop\" }\n | { kind: \"close\" }\n | { kind: \"navigate\"; refKind?: EntityKind }\n | { kind: \"external\"; describe: string }\n\nexport interface ShellAction {\n id: string\n label: string\n shortcut?: string\n perform: () => void | Promise<void>\n intent?: ShellActionIntent\n}\n\nexport type Cleanup = () => void\n\nexport interface View {\n id: string\n matches?: (ref: EntityRef) => boolean\n palette?: ViewPalette\n title?: string | ((ctx: ViewContext) => string)\n /** Show the shell search input when this view is on top. Default: true. */\n searchable?: boolean\n hints?: ShellHint[] | ((ctx: ViewContext) => ShellHint[])\n actions?: (ctx: ViewContext) => ShellAction[]\n /**\n * Element focused when this view becomes the top of the stack. The shell\n * falls back to the first focusable element in the host when omitted, or\n * when the declared target has been removed from the host.\n */\n focusTarget?: (root: HTMLElement, ctx: ViewContext) => HTMLElement | null\n surface: (ctx: ViewContext) => ViewSurface\n}\n\nexport class ViewValidationError extends Error {\n constructor(message: string) {\n super(message)\n this.name = \"ViewValidationError\"\n }\n}\n","import type { EntityRef } from \"../../entities\"\nimport { detectDev } from \"../../internal/dev\"\nimport type { SessionStore } from \"../../session\"\nimport { ViewValidationError, type View } from \"./types\"\n\nexport interface ViewRegistrar {\n register(view: View): void\n unregister(id: string): void\n list(): readonly View[]\n get(id: string): View | undefined\n findMatch(ref: EntityRef): View | null\n navigate(ref: EntityRef): void\n}\n\nexport interface ViewRegistrarOptions {\n session: SessionStore\n dev?: boolean\n}\n\nexport function createViewRegistrar(\n options: ViewRegistrarOptions\n): ViewRegistrar {\n const views: View[] = []\n const dev = options.dev ?? detectDev()\n\n function validate(view: View): void {\n if (\n view === null ||\n typeof view !== \"object\" ||\n typeof view.id !== \"string\" ||\n view.id.length === 0\n ) {\n throw new ViewValidationError(\"View must have a non-empty string id\")\n }\n if (typeof view.surface !== \"function\") {\n throw new ViewValidationError(\n `View ${view.id}: 'surface' must be a function`\n )\n }\n if (!view.matches && !view.palette) {\n throw new ViewValidationError(\n `View ${view.id}: at least one of 'matches' or 'palette' is required`\n )\n }\n }\n\n function warnOverlaps(incoming: View): void {\n if (!dev || !incoming.matches) return\n const selection = options.session.getState().selection\n if (!selection) return\n if (!incoming.matches(selection)) return\n for (const existing of views) {\n if (existing.id === incoming.id) continue\n if (!existing.matches) continue\n if (existing.matches(selection)) {\n console.warn(\n `[uidex] View \"${incoming.id}\" matches ref ${selection.kind}:${selection.id} ` +\n `also handled by view \"${existing.id}\"; last-registered wins.`\n )\n }\n }\n }\n\n function register(view: View): void {\n validate(view)\n warnOverlaps(view)\n const existingIdx = views.findIndex((p) => p.id === view.id)\n if (existingIdx >= 0) views.splice(existingIdx, 1)\n views.push(view)\n }\n\n function unregister(id: string): void {\n const idx = views.findIndex((p) => p.id === id)\n if (idx < 0) return\n views.splice(idx, 1)\n const state = options.session.getState()\n const top = state.stack[state.stack.length - 1] ?? null\n if (top?.id === id) state.actions.closeView()\n }\n\n function list(): readonly View[] {\n return views.slice()\n }\n\n function get(id: string): View | undefined {\n return views.find((p) => p.id === id)\n }\n\n function findMatch(ref: EntityRef): View | null {\n for (let i = views.length - 1; i >= 0; i--) {\n const view = views[i]\n if (view.matches && view.matches(ref)) return view\n }\n return null\n }\n\n function navigate(ref: EntityRef): void {\n const match = findMatch(ref)\n if (!match) return\n const state = options.session.getState()\n state.actions.select(ref)\n state.actions.pushStack({ id: match.id, ref })\n }\n\n return { register, unregister, list, get, findMatch, navigate }\n}\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs))\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"./cn\"\n\ntype Attrs = Record<\n string,\n string | number | boolean | null | undefined | Record<string, string | number>\n>\n\nexport interface ElementOptions {\n class?: ClassValue\n attrs?: Attrs\n text?: string\n html?: never\n dataset?: Record<string, string>\n style?: Partial<CSSStyleDeclaration>\n}\n\nexport type Child = Node | string | null | undefined | false\n\nexport function el<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n options: ElementOptions = {},\n children: Child | Child[] = []\n): HTMLElementTagNameMap[K] {\n const node = document.createElement(tag)\n if (options.class) node.className = cn(options.class)\n if (options.attrs) {\n for (const [key, value] of Object.entries(options.attrs)) {\n if (value === undefined || value === null || value === false) continue\n if (value === true) {\n node.setAttribute(key, \"\")\n } else {\n node.setAttribute(key, String(value))\n }\n }\n }\n if (options.dataset) {\n for (const [key, value] of Object.entries(options.dataset)) {\n node.dataset[key] = value\n }\n }\n if (options.style) {\n Object.assign(node.style, options.style)\n }\n if (options.text !== undefined) {\n node.textContent = options.text\n }\n const list = Array.isArray(children) ? children : [children]\n for (const child of list) {\n if (child === null || child === undefined || child === false) continue\n node.append(\n typeof child === \"string\" ? document.createTextNode(child) : child\n )\n }\n return node\n}\n","import type { ClassValue } from \"clsx\"\n\ntype VariantSet = Record<string, Record<string, ClassValue>>\n\ntype VariantValues<V extends VariantSet> = {\n [K in keyof V]?: keyof V[K]\n}\n\nexport interface CvaConfig<V extends VariantSet> {\n variants?: V\n defaultVariants?: VariantValues<V>\n}\n\nexport function cva<V extends VariantSet>(\n base: ClassValue,\n config: CvaConfig<V> = {}\n) {\n return (props: VariantValues<V> = {}): ClassValue[] => {\n const out: ClassValue[] = [base]\n const variants = config.variants\n if (!variants) return out\n for (const key of Object.keys(variants) as Array<keyof V>) {\n const picked =\n (props[key] as string | undefined) ??\n (config.defaultVariants?.[key] as string | undefined)\n if (picked === undefined) continue\n const cls = variants[key][picked as string]\n if (cls) out.push(cls)\n }\n return out\n }\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\nimport { cva } from \"./cva\"\n\nexport type BadgeVariant =\n | \"default\"\n | \"destructive\"\n | \"error\"\n | \"info\"\n | \"outline\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n\nexport type BadgeSize = \"default\" | \"sm\" | \"lg\"\n\nconst badgeBase =\n \"relative inline-flex shrink-0 items-center justify-center gap-1 whitespace-nowrap rounded-sm border border-transparent font-medium outline-none transition-shadow [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-3 [&_svg]:pointer-events-none [&_svg]:shrink-0\"\n\nexport const badgeVariants = cva(badgeBase, {\n defaultVariants: { size: \"default\", variant: \"default\" },\n variants: {\n size: {\n default: \"h-4.5 min-w-4.5 px-1 text-xs\",\n lg: \"h-5.5 min-w-5.5 px-1.5 text-sm\",\n sm: \"h-4 min-w-4 rounded-[0.25rem] px-1 text-[0.625rem]\",\n },\n variant: {\n default: \"bg-primary text-primary-foreground\",\n destructive: \"bg-destructive text-white\",\n error:\n \"bg-destructive/10 text-destructive-foreground dark:bg-destructive/20\",\n info: \"bg-info/10 text-info-foreground dark:bg-info/20\",\n outline: \"border-input bg-background text-foreground dark:bg-input/30\",\n secondary: \"bg-secondary text-secondary-foreground\",\n success: \"bg-success/10 text-success-foreground dark:bg-success/20\",\n warning: \"bg-warning/10 text-warning-foreground dark:bg-warning/20\",\n },\n },\n})\n\nexport interface CreateBadgeOptions extends Omit<ElementOptions, \"class\"> {\n variant?: BadgeVariant\n size?: BadgeSize\n class?: ClassValue\n}\n\nexport function createBadge(\n options: CreateBadgeOptions = {},\n children: Child | Child[] = []\n): HTMLSpanElement {\n const { variant, size, class: extra, attrs, ...rest } = options\n return el(\n \"span\",\n {\n ...rest,\n class: cn(badgeVariants({ variant, size }), extra),\n attrs: { \"data-slot\": \"badge\", ...attrs },\n },\n children\n )\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../../internal/el\"\nimport { createBadge } from \"../../ui/badge\"\n\nexport interface ChipOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nconst CHIP_CLASS =\n \"inline-flex items-center gap-1.5 text-xs font-medium text-muted-foreground\"\n\nexport function createChip(\n options: ChipOptions = {},\n children: Child | Child[] = []\n): HTMLSpanElement {\n const { class: extra, ...rest } = options\n return el(\"span\", { ...rest, class: cn(CHIP_CLASS, extra) }, children)\n}\n\nexport function createPillItem(options: ChipOptions = {}): HTMLLIElement {\n const { class: extra, text, attrs, ...rest } = options\n const li = el(\"li\", { ...rest, class: \"list-none\", attrs })\n const badge = createBadge(\n { variant: \"secondary\", size: \"default\", class: extra, text },\n []\n )\n li.append(badge)\n return li\n}\n","import { createElement as createLucideElement } from \"lucide\"\nimport { KIND_STYLE, type EntityKind } from \"../../entities\"\nimport { cn } from \"../../internal/cn\"\nimport { createBadge } from \"../../ui/badge\"\nimport { createIconTile } from \"./icon-tile\"\n\nexport function renderKindIcon(kind: EntityKind): SVGElement {\n const style = KIND_STYLE[kind]\n const svg = createLucideElement(style.icon)\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"class\", cn(\"h-4 w-4 shrink-0\", style.tone))\n return svg\n}\n\n/** Tile-wrapped kind icon for use as the leading slot on list/detail rows. */\nexport function renderKindIconTile(kind: EntityKind): HTMLElement {\n const style = KIND_STYLE[kind]\n return createIconTile(renderKindIcon(kind), { toneClass: style.chip })\n}\n\n/** Inline badge with the kind icon + label, built on the coss `createBadge`. */\nexport function renderKindBadge(kind: EntityKind): HTMLElement {\n const style = KIND_STYLE[kind]\n const icon = createLucideElement(style.icon)\n icon.setAttribute(\"aria-hidden\", \"true\")\n return createBadge(\n {\n class: style.chip,\n attrs: { \"data-uidex-kind-badge\": kind },\n },\n [icon, style.label]\n )\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\n\nconst TILE_CLASS =\n \"inline-flex size-6 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground\"\n\nconst ICON_SIZE_CLASS_RE = /\\b(h-\\d+|w-\\d+|size-\\d+)\\b/g\n\nexport interface IconTileOptions {\n extraClass?: ClassValue\n /** Tailwind color classes (bg/text/hover/dark) replacing the muted default. */\n toneClass?: ClassValue\n /** CSS color applied as a tinted background (supports hex/rgb/var). */\n tint?: string\n /** 0–100, default 15 — enough to read the hue without fighting contrast. */\n tintAlpha?: number\n}\n\nexport function createIconTile(\n inner: Node,\n options: IconTileOptions = {}\n): HTMLElement {\n if (inner instanceof SVGElement) {\n const existing = inner.getAttribute(\"class\") ?? \"\"\n const stripped = existing.replace(ICON_SIZE_CLASS_RE, \"\").trim()\n inner.setAttribute(\"class\", cn(stripped, \"size-3.5 opacity-80\"))\n }\n\n const tile = el(\n \"span\",\n {\n class: cn(TILE_CLASS, options.toneClass, options.extraClass),\n attrs: { \"data-slot\": \"icon-tile\", \"aria-hidden\": \"true\" },\n },\n [inner]\n )\n\n if (options.tint && !options.toneClass) {\n const pct = options.tintAlpha ?? 15\n tile.style.backgroundColor = `color-mix(in srgb, ${options.tint} ${pct}%, transparent)`\n }\n return tile\n}\n","import { displayName, KIND_STYLE, type Entity } from \"../../entities\"\nimport { el } from \"../../internal/el\"\nimport { createChip } from \"./chip\"\nimport { renderKindIcon } from \"./kind-icon\"\n\nexport interface KindChipOptions {\n entity: Entity\n label?: string\n withKindName?: boolean\n node?: Element | null\n}\n\nexport function renderKindChip(options: KindChipOptions): HTMLElement {\n const { entity, label, withKindName, node } = options\n const kind = entity.kind\n const style = KIND_STYLE[kind]\n const chip = createChip({ attrs: { \"data-uidex-kind-chip\": kind } })\n chip.append(renderKindIcon(kind))\n const resolved = label ?? displayName(entity, node)\n const text = withKindName\n ? resolved\n ? `${style.label} · ${resolved}`\n : style.label\n : resolved\n if (text) {\n chip.append(\n el(\"span\", {\n class: \"truncate\",\n text,\n })\n )\n }\n return chip\n}\n","import * as scrollArea from \"@zag-js/scroll-area\"\nimport { createMachineHandle, type MachineHandle } from \"./machine\"\nimport { normalizeProps, type DomProps } from \"./normalize\"\n\nexport type ScrollAreaProps = scrollArea.Props\nexport type ScrollAreaApi = scrollArea.Api<DomProps>\nexport type ScrollAreaHandle = MachineHandle<ScrollAreaApi>\n\nexport function createScrollArea(\n props: Partial<ScrollAreaProps> = {}\n): ScrollAreaHandle {\n return createMachineHandle(\n scrollArea.machine,\n scrollArea.connect,\n normalizeProps,\n props\n )\n}\n\nexport { scrollArea }\n","import {\n createScope,\n findTransition,\n getExitEnterStates,\n hasTag as hasTagFn,\n INIT_STATE,\n MachineStatus,\n matchesState,\n resolveStateValue,\n type Machine,\n type MachineSchema,\n type Service,\n} from \"@zag-js/core\"\nimport {\n compact,\n ensure,\n isFunction,\n isString,\n toArray,\n warn,\n} from \"@zag-js/utils\"\n\ntype AnyFn = (...args: unknown[]) => unknown\n\ninterface BindableOptions<V> {\n value?: V\n defaultValue?: V\n isEqual?: (a: V, b: V) => boolean\n onChange?: (next: V, prev: V) => void\n sync?: boolean\n debug?: string\n hash?: (value: V) => string\n}\n\ninterface Bindable<V> {\n initial: V\n ref: { current: V }\n get(): V\n set(value: V | ((prev: V) => V)): void\n invoke(next: V, prev: V): void\n hash(value: V): string\n}\n\ninterface BindableFactory {\n <V>(propsFn: () => BindableOptions<V>): Bindable<V>\n cleanup: (fn: () => void) => void\n ref: <V>(defaultValue: V) => { get: () => V; set: (next: V) => void }\n}\n\nfunction createBindable<V>(propsFn: () => BindableOptions<V>): Bindable<V> {\n const initial = (propsFn().value ?? propsFn().defaultValue) as V\n let local = initial\n const ref = { current: initial as V }\n const eq = () => propsFn().isEqual ?? Object.is\n\n const getControlled = () => propsFn().value !== undefined\n\n const setFn = (value: V | ((prev: V) => V)) => {\n const prev = ref.current\n const next = (isFunction(value) ? (value as (p: V) => V)(prev) : value) as V\n if (propsFn().debug) {\n console.log(`[bindable > ${propsFn().debug}] setValue`, { next, prev })\n }\n if (!getControlled()) {\n local = next\n ref.current = next\n }\n if (!eq()(next, prev)) {\n propsFn().onChange?.(next, prev)\n }\n }\n\n const get = () => (getControlled() ? (propsFn().value as V) : local)\n\n // Keep ref in sync when controlled value changes on subsequent reads.\n const syncRef = () => {\n const v = get()\n if (!eq()(v, ref.current)) ref.current = v\n }\n\n return {\n initial,\n ref: new Proxy(ref, {\n get(target, key) {\n if (key === \"current\") {\n syncRef()\n return target.current\n }\n return Reflect.get(target, key)\n },\n }),\n get,\n set: setFn,\n invoke(next, prev) {\n propsFn().onChange?.(next, prev)\n },\n hash(value) {\n return propsFn().hash?.(value) ?? String(value)\n },\n }\n}\n\nexport interface MachineRunner<T extends MachineSchema> {\n service: Service<T>\n start(): void\n stop(): void\n subscribe(listener: () => void): () => void\n update(next: Partial<T[\"props\"]>): void\n}\n\nexport interface MachineHandle<Api> {\n runner: MachineRunner<MachineSchema>\n api: () => Api\n destroy: () => void\n}\n\nexport function createMachineHandle<Props, Api>(\n zagMachine: unknown,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n connect: (service: any, normalize: any) => Api,\n normalize: unknown,\n props: Partial<Props> = {} as Partial<Props>\n): MachineHandle<Api> {\n const runner = createMachineRunner(\n zagMachine as Machine<MachineSchema>,\n props as never\n )\n runner.start()\n return {\n runner,\n api: () => connect(runner.service as never, normalize),\n destroy: () => runner.stop(),\n }\n}\n\ntype AnyMachine = Machine<MachineSchema>\n\nexport function createMachineRunner<T extends MachineSchema>(\n machineArg: Machine<T>,\n initialProps: Partial<T[\"props\"]> = {} as Partial<T[\"props\"]>\n): MachineRunner<T> {\n const machine = machineArg as AnyMachine\n let userProps = initialProps\n const unmountFns: Array<() => void> = []\n const listeners = new Set<() => void>()\n const notify = () => listeners.forEach((fn) => fn())\n\n const bindableFactory: BindableFactory = ((propsFn) =>\n createBindable(propsFn)) as BindableFactory\n bindableFactory.cleanup = (fn) => unmountFns.push(fn)\n bindableFactory.ref = <V>(defaultValue: V) => {\n let value = defaultValue\n return {\n get: () => value,\n set: (next: V) => {\n value = next\n },\n }\n }\n\n const debug = (...args: unknown[]) => {\n if ((machine as { debug?: boolean }).debug) {\n console.log(...args)\n }\n }\n\n const propsRef = { current: {} as T[\"props\"] }\n const prop = (key: string) =>\n (propsRef.current as Record<string, unknown>)[key]\n\n const refreshProps = () => {\n const scope = scopeRef.current\n const computedProps =\n (machine as { props?: AnyFn }).props?.({\n props: compact(userProps) as Record<string, unknown>,\n scope,\n }) ?? userProps\n propsRef.current = computedProps as T[\"props\"]\n }\n\n const defaultGetRootNode = () =>\n typeof document !== \"undefined\" ? document : (null as never)\n\n const scopeRef = {\n current: createScope({\n id: (initialProps as { id?: string }).id,\n ids: (initialProps as { ids?: Record<string, string> }).ids,\n getRootNode:\n (\n initialProps as {\n getRootNode?: () => Node | ShadowRoot | Document\n }\n ).getRootNode ?? defaultGetRootNode,\n }),\n }\n refreshProps()\n\n const effectsMap = new Map<string, () => void>()\n let transitionRef: {\n actions?: unknown\n target?: string\n reenter?: boolean\n } | null = null\n let previousEvent: { type: string } = { type: \"\" }\n let currentEvent: { type: string } = { type: \"\" }\n\n const getEvent = () => ({\n ...currentEvent,\n current() {\n return currentEvent\n },\n previous() {\n return previousEvent\n },\n })\n\n const getState = () => ({\n ...state,\n matches(...values: string[]) {\n return values.some((v) => matchesState(state.ref.current as string, v))\n },\n hasTag(tag: string) {\n return hasTagFn(machine, state.ref.current as string, tag)\n },\n })\n\n const getParams = () => ({\n state: getState(),\n context: ctx,\n event: getEvent(),\n prop,\n send,\n action,\n guard,\n track: trackFn,\n refs,\n computed,\n flush,\n scope: scopeRef.current,\n choose,\n })\n\n const action = (keys: unknown) => {\n const strs = (isFunction(keys) ? (keys as AnyFn)(getParams()) : keys) as\n | string[]\n | undefined\n if (!strs) return\n const fns = strs.map((s) => {\n const fn = (\n machine as { implementations?: { actions?: Record<string, AnyFn> } }\n ).implementations?.actions?.[s]\n if (!fn) warn(`[uidex] No implementation found for action \"${s}\"`)\n return fn\n })\n for (const fn of fns) fn?.(getParams())\n }\n\n const guard = (str: unknown) => {\n if (isFunction(str)) return (str as AnyFn)(getParams())\n return (\n machine as { implementations?: { guards?: Record<string, AnyFn> } }\n ).implementations?.guards?.[str as string](getParams())\n }\n\n const effect = (keys: unknown) => {\n const strs = (isFunction(keys) ? (keys as AnyFn)(getParams()) : keys) as\n | string[]\n | undefined\n if (!strs) return\n const fns = strs.map((s) => {\n const fn = (\n machine as { implementations?: { effects?: Record<string, AnyFn> } }\n ).implementations?.effects?.[s]\n if (!fn) warn(`[uidex] No implementation found for effect \"${s}\"`)\n return fn\n })\n const localCleanups: Array<() => void> = []\n for (const fn of fns) {\n const cleanup = fn?.(getParams())\n if (typeof cleanup === \"function\") {\n localCleanups.push(cleanup as () => void)\n }\n }\n return () => localCleanups.forEach((fn) => fn())\n }\n\n const choose = (transitions: unknown) =>\n (toArray(transitions) as Array<{ guard?: unknown }>).find((t) => {\n let result = !t.guard\n if (isString(t.guard)) result = !!guard(t.guard)\n else if (isFunction(t.guard)) result = !!(t.guard as AnyFn)(getParams())\n return result\n })\n\n const computed = (key: string) => {\n ensure(\n (machine as { computed?: unknown }).computed,\n () => `[uidex] No computed object found on machine`\n )\n const fn = (machine as { computed: Record<string, AnyFn> }).computed[key]\n return fn({\n context: ctx,\n event: getEvent(),\n prop,\n refs,\n scope: scopeRef.current,\n computed,\n })\n }\n\n const trackSites = new WeakMap<\n AnyFn,\n { deps: unknown[]; cleanup?: () => void; mounted: boolean }\n >()\n const trackFn = (deps: unknown[] | undefined, fn: AnyFn) => {\n let site = trackSites.get(fn)\n const current = (deps ?? []).map((d) =>\n typeof d === \"function\" ? (d as AnyFn)() : d\n )\n if (!site) {\n site = { deps: current, mounted: false }\n trackSites.set(fn, site)\n return\n }\n const changed =\n current.length !== site.deps.length ||\n current.some((v, i) => !Object.is(v, site!.deps[i]))\n if (changed && site.mounted) {\n site.cleanup?.()\n const cleanup = fn()\n site.cleanup =\n typeof cleanup === \"function\" ? (cleanup as () => void) : undefined\n }\n site.deps = current\n }\n\n const flush = (fn: () => void) => {\n queueMicrotask(() => fn())\n }\n\n // context ------------------------------------------------------------\n let contextFields: Record<string, Bindable<unknown>> = {}\n const ctxContextFn = (machine as { context?: AnyFn }).context\n if (ctxContextFn) {\n contextFields = ctxContextFn({\n prop,\n bindable: bindableFactory,\n scope: scopeRef.current,\n flush,\n getContext() {\n return ctx\n },\n getComputed() {\n return computed\n },\n getRefs() {\n return refs\n },\n getEvent() {\n return getEvent()\n },\n }) as Record<string, Bindable<unknown>>\n }\n\n const ctx = {\n get(key: string) {\n return contextFields[key]?.ref.current\n },\n set(key: string, value: unknown) {\n contextFields[key]?.set(value as never)\n },\n initial(key: string) {\n return contextFields[key]?.initial\n },\n hash(key: string) {\n const current = contextFields[key]?.get()\n return contextFields[key]?.hash(current as never) ?? \"\"\n },\n }\n\n // refs ---------------------------------------------------------------\n const refsInit =\n (machine as { refs?: AnyFn }).refs?.({ prop, context: ctx }) ?? {}\n const refsStore: Record<string, unknown> = { ...(refsInit as object) }\n const refs = {\n get(key: string) {\n return refsStore[key]\n },\n set(key: string, value: unknown) {\n refsStore[key] = value\n },\n }\n\n // state bindable -----------------------------------------------------\n const initialState = resolveStateValue(\n machine,\n (machine as { initialState: AnyFn }).initialState({ prop }) as string\n )\n const state = createBindable<string>(() => ({\n defaultValue: initialState as string,\n onChange(nextState: string, prevState: string) {\n const { exiting, entering } = getExitEnterStates(\n machine,\n prevState,\n nextState,\n transitionRef?.reenter\n ) as {\n exiting: Array<{ path: string; state?: { exit?: unknown } }>\n entering: Array<{\n path: string\n state?: { effects?: unknown; entry?: unknown }\n }>\n }\n exiting.forEach((item) => {\n const exitEffects = effectsMap.get(item.path)\n exitEffects?.()\n effectsMap.delete(item.path)\n })\n exiting.forEach((item) => {\n action(item.state?.exit)\n })\n action(transitionRef?.actions)\n entering.forEach((item) => {\n const cleanup = effect(item.state?.effects)\n if (cleanup) effectsMap.set(item.path, cleanup)\n })\n if (prevState === INIT_STATE) {\n action((machine as { entry?: unknown }).entry)\n const cleanup = effect((machine as { effects?: unknown }).effects)\n if (cleanup) effectsMap.set(INIT_STATE, cleanup)\n }\n entering.forEach((item) => {\n action(item.state?.entry)\n })\n notify()\n },\n }))\n\n let status: MachineStatus = MachineStatus.NotStarted\n let hydrated: string | undefined\n\n const getCurrentState = (): string => state.ref.current\n\n const send = (event: { type: string }) => {\n queueMicrotask(() => {\n if (status !== MachineStatus.Started) return\n previousEvent = currentEvent\n currentEvent = event\n const currentState = getCurrentState()\n const { transitions, source } = findTransition(\n machine,\n currentState,\n event.type\n )\n const transition = choose(transitions) as\n | { actions?: unknown; target?: string; reenter?: boolean }\n | undefined\n if (!transition) return\n transitionRef = transition\n const target = resolveStateValue(\n machine,\n (transition.target ?? currentState) as string,\n source as never\n )\n debug(\"transition\", event.type, transition.target || currentState)\n const changed = target !== currentState\n if (changed) {\n state.set(target as string)\n } else if (transition.reenter) {\n ;(state as unknown as { invoke: AnyFn }).invoke(\n currentState,\n currentState\n )\n } else {\n action(transition.actions ?? [])\n notify()\n }\n })\n }\n\n ;(machine as { watch?: AnyFn }).watch?.(getParams())\n\n const service: Service<T> = {\n state: getState() as Service<T>[\"state\"],\n send,\n context: ctx as Service<T>[\"context\"],\n prop: prop as Service<T>[\"prop\"],\n scope: scopeRef.current,\n refs: refs as Service<T>[\"refs\"],\n computed: computed as Service<T>[\"computed\"],\n event: getEvent() as Service<T>[\"event\"],\n getStatus: () => status,\n }\n\n Object.defineProperty(service, \"state\", {\n get: () => getState(),\n enumerable: true,\n })\n Object.defineProperty(service, \"event\", {\n get: () => getEvent(),\n enumerable: true,\n })\n\n return {\n service,\n start() {\n if (status === MachineStatus.Started) return\n status = MachineStatus.Started\n ;(state as unknown as { invoke: AnyFn }).invoke(\n hydrated ?? state.initial,\n INIT_STATE\n )\n notify()\n },\n stop() {\n if (status === MachineStatus.Stopped) return\n hydrated = getCurrentState()\n status = MachineStatus.Stopped\n effectsMap.forEach((fn) => fn())\n effectsMap.clear()\n transitionRef = null\n while (unmountFns.length) unmountFns.pop()?.()\n listeners.clear()\n queueMicrotask(() => {\n action((machine as { exit?: unknown }).exit)\n })\n },\n subscribe(listener) {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n update(next) {\n userProps = { ...userProps, ...next }\n refreshProps()\n notify()\n },\n }\n}\n","import {\n createNormalizer,\n type NormalizeProps,\n type PropTypes,\n} from \"@zag-js/types\"\n\ntype DomProps = PropTypes<Record<string, unknown>>\n\nexport const normalizeProps: NormalizeProps<DomProps> =\n createNormalizer<DomProps>((props) => props)\n\nexport type { DomProps }\n","import { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\n\n// Zag connect() returns React-style prop objects; this bridges them to imperative DOM APIs.\nexport function spreadProps(\n node: HTMLElement,\n props: Record<string, unknown>\n): Cleanup {\n const removers: Cleanup[] = []\n for (const [key, rawValue] of Object.entries(props)) {\n if (key === \"children\" || key === \"dangerouslySetInnerHTML\") continue\n if (key.startsWith(\"on\") && typeof rawValue === \"function\") {\n const eventName = key.slice(2).toLowerCase()\n // React aliases onChange to the `input` event for text-type inputs and\n // textareas so handlers fire on every keystroke. Native DOM `change`\n // only fires on blur, which breaks live-filter UIs like command palette.\n const isTextControl =\n (node instanceof HTMLInputElement &&\n node.type !== \"checkbox\" &&\n node.type !== \"radio\") ||\n node instanceof HTMLTextAreaElement\n const effectiveEvent =\n eventName === \"change\" && isTextControl ? \"input\" : eventName\n const listener = rawValue as EventListener\n node.addEventListener(effectiveEvent, listener)\n removers.push(() => node.removeEventListener(effectiveEvent, listener))\n continue\n }\n // zag's dataAttr/ariaAttr return undefined to mean \"remove\" — treat\n // undefined/null as attribute removal rather than no-op, otherwise\n // state toggles like data-highlighted stick once set.\n if (rawValue === undefined || rawValue === null) {\n node.removeAttribute(key)\n continue\n }\n if (typeof rawValue === \"boolean\") {\n if (rawValue) node.setAttribute(key, \"\")\n else node.removeAttribute(key)\n continue\n }\n if (key === \"style\" && typeof rawValue === \"object\") {\n Object.assign(node.style, rawValue as Record<string, string>)\n continue\n }\n if (key === \"className\" || key === \"class\") {\n node.setAttribute(\"class\", String(rawValue))\n continue\n }\n if (key === \"htmlFor\") {\n node.setAttribute(\"for\", String(rawValue))\n continue\n }\n if (key === \"tabIndex\") {\n node.tabIndex = Number(rawValue)\n continue\n }\n node.setAttribute(key, String(rawValue))\n }\n return composeCleanups(removers)\n}\n\nexport function createPersistentSpreads(): {\n apply(node: HTMLElement, props: Record<string, unknown>): void\n cleanupAll(): void\n} {\n const map = new Map<HTMLElement, Cleanup>()\n return {\n apply(node, props) {\n const prior = map.get(node)\n if (prior) prior()\n map.set(node, spreadProps(node, props))\n },\n cleanupAll() {\n for (const clean of map.values()) clean()\n map.clear()\n },\n }\n}\n","import type { CustomSurface } from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport type { MountedSurface } from \"./index\"\n\nexport function renderCustomSurface(\n surface: CustomSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n const result = surface.render(ctx, root)\n const cleanup = typeof result === \"function\" ? result : () => {}\n return {\n cleanup: () => {\n try {\n cleanup()\n } finally {\n root.replaceChildren()\n }\n },\n }\n}\n","import {\n ChevronDown,\n Copy,\n HelpCircle,\n MessageCircle,\n Target,\n createElement as createLucideElement,\n type IconNode,\n} from \"lucide\"\nimport {\n displayName,\n entityKey,\n type Entity,\n type EntityRef,\n type Flow,\n} from \"../../entities\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport { filterEntities, filterIds } from \"../builder/filter\"\nimport type {\n DetailAction,\n DetailActionIcon,\n DetailActionRunContext,\n DetailSection,\n DetailSubtitle,\n DetailSurface,\n} from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport { SECTION_LABELS } from \"../labels\"\nimport { createButton } from \"../primitives/button\"\nimport { createPillItem } from \"../primitives/chip\"\nimport { createEntityLink } from \"../primitives/entity-link\"\nimport { createIconTile } from \"../primitives/icon-tile\"\nimport {\n renderKindBadge,\n renderKindIcon,\n renderKindIconTile,\n} from \"../primitives/kind-icon\"\nimport { fillRow, fillRowWithHandle } from \"../primitives/row\"\nimport { createSection } from \"../primitives/section\"\nimport {\n createCaption,\n createDescription,\n createHeading,\n createMutedText,\n} from \"../primitives/text\"\nimport {\n LIST_GROUP_LABEL_CLASS,\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n} from \"../../ui/list-item\"\nimport type { MountedSurface } from \"./index\"\n\nconst ICON_MAP: Record<DetailActionIcon, IconNode> = {\n copy: Copy,\n \"message-circle\": MessageCircle,\n \"chevron-down\": ChevronDown,\n target: Target,\n}\n\nfunction iconFor(icon: DetailActionIcon | undefined): IconNode | null {\n return icon ? ICON_MAP[icon] : null\n}\n\nfunction renderSubtitle(subtitle: DetailSubtitle): HTMLElement {\n const text = subtitle.extra\n ? `${subtitle.rawId} · ${subtitle.extra}`\n : subtitle.rawId\n return createCaption({\n class: \"px-2\",\n attrs: { \"data-uidex-detail-subtitle\": \"\" },\n text,\n })\n}\n\nfunction renderNotFound(ref: EntityRef): HTMLElement {\n return createMutedText({\n class: \"p-4\",\n attrs: { \"data-uidex-detail-missing\": \"\" },\n text: `${ref.kind}: ${ref.id} not found in registry`,\n })\n}\n\ninterface RenderedActions {\n node: HTMLElement\n buttons: readonly HTMLButtonElement[]\n cleanup: Cleanup\n}\n\nfunction renderActions(\n actions: readonly DetailAction[],\n ctx: ViewContext,\n root: HTMLElement,\n heading?: string\n): RenderedActions {\n const cleanups: Cleanup[] = []\n const buttons: HTMLButtonElement[] = []\n\n const section = el(\"section\", {\n class: \"flex flex-col\",\n attrs: { \"data-uidex-detail-actions\": \"\" },\n })\n if (heading) {\n section.append(el(\"h3\", { class: LIST_GROUP_LABEL_CLASS, text: heading }))\n }\n const list = el(\"div\", {\n class: \"flex flex-col\",\n attrs: { role: \"listbox\", \"aria-label\": heading ?? \"Actions\" },\n })\n section.append(list)\n\n for (const action of actions) {\n const btn = createButton({\n variant: \"action\",\n attrs: {\n role: \"option\",\n tabindex: buttons.length === 0 ? \"0\" : \"-1\",\n \"data-uidex-detail-action\": action.id,\n \"aria-label\": action.ariaLabel ?? action.label,\n },\n })\n let leading: Node | undefined\n const icon = iconFor(action.icon)\n if (icon) {\n const svg = createLucideElement(icon)\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"class\", \"h-4 w-4 shrink-0\")\n leading = createIconTile(svg)\n }\n const { label: labelEl } = fillRowWithHandle(btn, {\n leading,\n label: action.label,\n trailing: action.hint,\n })\n\n let revertTimer: ReturnType<typeof setTimeout> | null = null\n const runCtx: DetailActionRunContext = {\n setLabel(next, durationMs) {\n if (revertTimer !== null) {\n clearTimeout(revertTimer)\n revertTimer = null\n }\n labelEl.textContent = next\n if (durationMs && durationMs > 0) {\n revertTimer = setTimeout(() => {\n labelEl.textContent = action.label\n revertTimer = null\n }, durationMs)\n }\n },\n }\n\n const onClick = async () => {\n if (\"copy\" in action) {\n try {\n await navigator.clipboard?.writeText(action.copy)\n runCtx.setLabel(\"Copied!\", 1200)\n } catch (err) {\n console.warn(\"[uidex] copy action: clipboard write failed\", err)\n runCtx.setLabel(\"Copy failed\", 1500)\n }\n } else if (\"scrollTo\" in action) {\n const target = root.querySelector<HTMLElement>(action.scrollTo)\n target?.scrollIntoView({ block: \"start\", behavior: \"smooth\" })\n } else if (\"push\" in action) {\n ctx.push({ id: action.push.id, ref: action.push.ref ?? null })\n } else if (\"navigate\" in action) {\n ctx.navigate(action.navigate)\n } else if (\"highlight\" in action) {\n ctx.pinHighlight(action.highlight)\n ctx.close()\n } else {\n await action.run(runCtx)\n }\n }\n btn.addEventListener(\"click\", onClick)\n cleanups.push(() => {\n btn.removeEventListener(\"click\", onClick)\n if (revertTimer !== null) clearTimeout(revertTimer)\n })\n buttons.push(btn)\n list.append(btn)\n }\n\n return { node: section, buttons, cleanup: composeCleanups(cleanups) }\n}\n\ninterface RenderedSection {\n node: HTMLElement\n cleanup: Cleanup\n}\n\nfunction renderRefList(\n ctx: ViewContext,\n label: string,\n entities: readonly Entity[],\n dataAttr: string\n): RenderedSection | null {\n if (entities.length === 0) return null\n const cleanups: Cleanup[] = []\n const items = entities.map((entity) => {\n const ref: EntityRef = { kind: entity.kind, id: entityKey(entity) }\n const link = createEntityLink({\n ctx,\n target: ref,\n label: displayName(entity),\n leading: renderKindIconTile(entity.kind),\n })\n cleanups.push(link.cleanup)\n return el(\"li\", {}, [link.node])\n })\n const node = createSection({ heading: label, dataAttr }, items)\n return { node, cleanup: composeCleanups(cleanups) }\n}\n\nfunction renderFlowList(\n ctx: ViewContext,\n flows: readonly Flow[]\n): RenderedSection | null {\n if (flows.length === 0) return null\n const cleanups: Cleanup[] = []\n const items = flows.map((flow) => {\n const link = createEntityLink({\n ctx,\n target: { kind: \"flow\", id: flow.id },\n label: displayName(flow),\n leading: renderKindIconTile(\"flow\"),\n })\n cleanups.push(link.cleanup)\n return el(\"li\", {}, [link.node])\n })\n const node = createSection(\n { heading: SECTION_LABELS.flows, dataAttr: \"data-uidex-detail-flows\" },\n items\n )\n return { node, cleanup: composeCleanups(cleanups) }\n}\n\nfunction renderTouches(\n ctx: ViewContext,\n entities: readonly Entity[],\n unresolved: readonly string[],\n query: string\n): RenderedSection {\n if (entities.length === 0 && unresolved.length === 0) {\n const section = el(\"section\", {\n class: \"flex flex-col gap-2\",\n attrs: { \"data-uidex-detail-touches\": \"\" },\n })\n section.append(\n createHeading({ text: SECTION_LABELS.touches }),\n createMutedText({\n attrs: { \"data-uidex-detail-empty\": \"\" },\n text: query ? \"No matches\" : \"No entities touched\",\n })\n )\n return { node: section, cleanup: () => {} }\n }\n\n const cleanups: Cleanup[] = []\n const items: HTMLElement[] = []\n for (const entity of entities) {\n const link = createEntityLink({\n ctx,\n target: { kind: entity.kind, id: entityKey(entity) },\n label: displayName(entity),\n leading: renderKindIconTile(entity.kind),\n })\n cleanups.push(link.cleanup)\n items.push(el(\"li\", {}, [link.node]))\n }\n for (const id of unresolved) {\n const host = el(\"li\", {\n class: cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"text-muted-foreground\"\n ),\n attrs: {\n \"data-uidex-detail-unresolved\": \"\",\n \"data-uidex-detail-row\": \"unresolved\",\n tabindex: \"-1\",\n },\n })\n const helpIcon = createLucideElement(HelpCircle)\n helpIcon.setAttribute(\"aria-hidden\", \"true\")\n helpIcon.setAttribute(\"class\", \"h-4 w-4 shrink-0\")\n fillRow(host, { leading: createIconTile(helpIcon), label: id })\n items.push(host)\n }\n const node = createSection(\n { heading: SECTION_LABELS.touches, dataAttr: \"data-uidex-detail-touches\" },\n items\n )\n return { node, cleanup: composeCleanups(cleanups) }\n}\n\nfunction renderRoutePaths(paths: readonly string[]): RenderedSection | null {\n if (paths.length === 0) return null\n const node = createSection(\n { heading: SECTION_LABELS.routes, dataAttr: \"data-uidex-detail-routes\" },\n paths.map((p) => {\n const host = el(\"li\", {\n class: cn(LIST_ITEM_CLASS, LIST_ITEM_INTERACTIVE_CLASS),\n attrs: {\n \"data-uidex-detail-row\": \"route\",\n tabindex: \"-1\",\n },\n })\n fillRow(host, {\n leading: renderKindIconTile(\"route\"),\n label: p,\n })\n return host\n })\n )\n return { node, cleanup: () => {} }\n}\n\nfunction renderAcceptanceChecklist(items: readonly string[]): HTMLElement {\n return createSection(\n {\n heading: SECTION_LABELS.acceptance,\n dataAttr: \"data-uidex-detail-acceptance\",\n },\n items.map((text, idx) => {\n const id = `uidex-acceptance-${idx}`\n const checkbox = el(\"input\", {\n attrs: {\n type: \"checkbox\",\n id,\n \"data-uidex-acceptance-item\": String(idx),\n },\n class:\n \"mt-1 h-3.5 w-3.5 shrink-0 cursor-pointer accent-accent focus:outline-none\",\n }) as HTMLInputElement\n const label = el(\"label\", {\n class: cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"w-full cursor-pointer items-start\"\n ),\n attrs: { for: id },\n })\n const { label: labelSpan } = fillRowWithHandle(label, {\n leading: checkbox,\n label: text,\n })\n labelSpan.className = \"min-w-0 flex-1 whitespace-normal break-words\"\n const syncChecked = (): void => {\n labelSpan.classList.toggle(\"line-through\", checkbox.checked)\n labelSpan.classList.toggle(\"text-muted-foreground\", checkbox.checked)\n }\n checkbox.addEventListener(\"change\", syncChecked)\n checkbox.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Enter\") {\n e.preventDefault()\n checkbox.checked = !checkbox.checked\n syncChecked()\n }\n })\n return el(\"li\", {}, [label])\n })\n )\n}\n\nfunction renderSection(\n section: DetailSection,\n ctx: ViewContext,\n query: string\n): RenderedSection | null {\n switch (section.id) {\n case \"description\": {\n if (!section.text) return null\n return {\n node: createDescription({\n class: \"px-2\",\n attrs: { \"data-uidex-detail-description\": \"\" },\n text: section.text,\n }),\n cleanup: () => {},\n }\n }\n case \"acceptance\": {\n if (section.items.length === 0) return null\n return {\n node: renderAcceptanceChecklist(section.items),\n cleanup: () => {},\n }\n }\n case \"scopes\": {\n if (section.scopes.length === 0) return null\n const node = el(\n \"ul\",\n {\n class: \"flex flex-wrap gap-1.5\",\n attrs: { \"data-uidex-detail-scopes\": \"\" },\n },\n section.scopes.map((s) => createPillItem({ text: s }))\n )\n return { node, cleanup: () => {} }\n }\n case \"composes\":\n return renderRefList(\n ctx,\n section.label,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities,\n \"data-uidex-detail-composes\"\n )\n case \"used-by\":\n return renderRefList(\n ctx,\n section.label,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities,\n \"data-uidex-detail-used-by\"\n )\n case \"flows\":\n return renderFlowList(\n ctx,\n section.filterable\n ? filterEntities(section.flows, query)\n : section.flows\n )\n case \"touches\":\n return renderTouches(\n ctx,\n section.filterable\n ? filterEntities(section.entities, query)\n : section.entities,\n section.filterable\n ? filterIds(section.unresolved, query)\n : section.unresolved,\n query\n )\n case \"routes\":\n return renderRoutePaths(\n section.filterable ? filterIds(section.paths, query) : section.paths\n )\n }\n}\n\nfunction hasFilterableSections(sections: readonly DetailSection[]): boolean {\n return sections.some((s) => \"filterable\" in s && s.filterable === true)\n}\n\nexport function renderDetailSurface(\n surface: DetailSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n if (surface.notFound) {\n root.append(renderNotFound(surface.notFound))\n return { cleanup: () => root.replaceChildren() }\n }\n\n const body = el(\"div\", {\n class: \"flex flex-col gap-3 px-2 py-4\",\n attrs: {\n \"data-uidex-detail-body\": \"\",\n \"data-uidex-detail-kind\": surface.entityKind,\n },\n })\n\n const cleanups: Cleanup[] = []\n\n const headerGroup = el(\"div\", {\n class: \"flex items-center gap-2 px-2\",\n })\n if (surface.title) {\n headerGroup.append(\n el(\"h2\", {\n class:\n \"min-w-0 flex-1 truncate text-base font-semibold text-foreground\",\n attrs: { \"data-uidex-detail-title\": \"\" },\n text: surface.title,\n })\n )\n }\n const kindBadge = renderKindBadge(surface.entityKind)\n kindBadge.classList.add(\"ml-auto\")\n headerGroup.append(kindBadge)\n body.append(headerGroup)\n\n if (surface.subtitle) body.append(renderSubtitle(surface.subtitle))\n\n let actionsNode: HTMLElement | null = null\n if (surface.actions && surface.actions.length > 0) {\n const rendered = renderActions(\n surface.actions,\n ctx,\n root,\n SECTION_LABELS.actions\n )\n cleanups.push(rendered.cleanup)\n actionsNode = rendered.node\n }\n\n const sections = surface.sections ?? []\n const filterable = hasFilterableSections(sections)\n\n const listsContainer = el(\"div\", {\n class: \"flex flex-col gap-3\",\n attrs: { \"data-uidex-detail-sections\": \"\" },\n })\n body.append(listsContainer)\n\n let sectionCleanup: Cleanup = () => {}\n let focusables: HTMLElement[] = []\n\n const focusAt = (rawIdx: number): void => {\n if (focusables.length === 0) return\n const idx = Math.max(0, Math.min(rawIdx, focusables.length - 1))\n for (let i = 0; i < focusables.length; i++) {\n focusables[i].tabIndex = i === idx ? 0 : -1\n }\n focusables[idx].focus()\n }\n\n const FOCUS_SELECTOR =\n \"button[data-uidex-detail-action], button[data-uidex-entity-link], input[data-uidex-acceptance-item], [data-uidex-detail-row]\"\n\n const refreshFocusSequence = (): void => {\n focusables = Array.from(\n listsContainer.querySelectorAll<HTMLElement>(FOCUS_SELECTOR)\n )\n for (let i = 0; i < focusables.length; i++) {\n focusables[i].tabIndex = i === 0 ? 0 : -1\n }\n }\n\n const onNavKeyDown = (e: KeyboardEvent): void => {\n if (\n e.key !== \"ArrowDown\" &&\n e.key !== \"ArrowUp\" &&\n e.key !== \"Home\" &&\n e.key !== \"End\"\n )\n return\n const rootNode = body.getRootNode()\n const active =\n rootNode instanceof ShadowRoot\n ? rootNode.activeElement\n : document.activeElement\n if (!(active instanceof HTMLElement)) return\n\n const inSearch = active === ctx.searchInput\n if (inSearch) {\n if (focusables.length === 0) return\n e.preventDefault()\n const idx =\n e.key === \"ArrowUp\" || e.key === \"End\" ? focusables.length - 1 : 0\n focusAt(idx)\n return\n }\n\n const idx = focusables.indexOf(active)\n if (idx === -1) return\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault()\n if (idx === 0) ctx.searchInput.focus()\n else focusAt(idx - 1)\n return\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault()\n if (idx < focusables.length - 1) focusAt(idx + 1)\n return\n }\n if (e.key === \"Home\") {\n e.preventDefault()\n focusAt(0)\n return\n }\n if (e.key === \"End\") {\n e.preventDefault()\n focusAt(focusables.length - 1)\n return\n }\n }\n\n body.addEventListener(\"keydown\", onNavKeyDown)\n ctx.searchInput.addEventListener(\"keydown\", onNavKeyDown)\n\n function renderSections(query: string): void {\n sectionCleanup()\n listsContainer.replaceChildren()\n const cs: Cleanup[] = []\n let hasFilterableSection = false\n let renderedFilterable = 0\n let actionsPlaced = false\n const placeActions = (): void => {\n if (actionsNode && !actionsPlaced) {\n listsContainer.append(actionsNode)\n actionsPlaced = true\n }\n }\n for (const section of sections) {\n const isFilterable =\n \"filterable\" in section && section.filterable === true\n if (isFilterable) hasFilterableSection = true\n const sectionQuery = isFilterable ? query : \"\"\n const out = renderSection(section, ctx, sectionQuery)\n if (!out) continue\n if (isFilterable) renderedFilterable++\n listsContainer.append(out.node)\n cs.push(out.cleanup)\n if (section.id === \"description\") placeActions()\n }\n if (!actionsPlaced && actionsNode) {\n listsContainer.prepend(actionsNode)\n actionsPlaced = true\n }\n if (query && hasFilterableSection && renderedFilterable === 0) {\n listsContainer.append(\n createMutedText({\n attrs: { \"data-uidex-detail-empty\": \"\" },\n text: \"No matches\",\n })\n )\n }\n sectionCleanup = composeCleanups(cs)\n refreshFocusSequence()\n }\n\n renderSections(\"\")\n\n root.append(body)\n\n const cleanup = composeCleanups([\n ...cleanups,\n () => sectionCleanup(),\n () => {\n body.removeEventListener(\"keydown\", onNavKeyDown)\n ctx.searchInput.removeEventListener(\"keydown\", onNavKeyDown)\n },\n () => root.replaceChildren(),\n ])\n\n const mounted: MountedSurface = { cleanup }\n if (filterable) {\n mounted.onSearch = renderSections\n }\n return mounted\n}\n","import { displayName, entityKey, type Entity } from \"../../entities\"\n\nexport function normalizeQuery(query: string): string {\n return query.trim().toLowerCase()\n}\n\nexport function matchesQuery(haystack: string, query: string): boolean {\n const q = normalizeQuery(query)\n if (!q) return true\n return haystack.toLowerCase().includes(q)\n}\n\nexport function filterEntities<E extends Entity>(\n entities: readonly E[],\n query: string\n): readonly E[] {\n const q = normalizeQuery(query)\n if (!q) return entities\n return entities.filter((e) => {\n const name = displayName(e).toLowerCase()\n const id = entityKey(e).toLowerCase()\n return (\n name.includes(q) || id.includes(q) || e.kind.toLowerCase().includes(q)\n )\n })\n}\n\nexport function filterIds(\n ids: readonly string[],\n query: string\n): readonly string[] {\n const q = normalizeQuery(query)\n if (!q) return ids\n return ids.filter((id) => id.toLowerCase().includes(q))\n}\n","export const SECTION_LABELS = {\n acceptance: \"Acceptance criteria\",\n actions: \"Actions\",\n contains: \"Contains\",\n usedBy: \"Used by\",\n flows: \"Flows\",\n touches: \"Touches\",\n routes: \"Routes\",\n} as const\n\nexport const PALETTE_GROUPS = {\n commands: \"Commands\",\n} as const\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\nimport { cva } from \"./cva\"\n\nexport type ButtonVariant =\n | \"default\"\n | \"destructive\"\n | \"destructive-outline\"\n | \"ghost\"\n | \"link\"\n | \"outline\"\n | \"secondary\"\n\nexport type ButtonSize =\n | \"default\"\n | \"sm\"\n | \"xs\"\n | \"lg\"\n | \"xl\"\n | \"icon\"\n | \"icon-sm\"\n | \"icon-lg\"\n | \"icon-xs\"\n\nconst buttonBase =\n \"focus-visible:ring-ring focus-visible:ring-offset-background disabled:opacity-60 relative inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-lg border text-sm font-medium outline-none transition-shadow focus-visible:ring-2 focus-visible:ring-offset-1 disabled:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg]:pointer-events-none [&_svg]:shrink-0\"\n\nexport const buttonVariants = cva(buttonBase, {\n defaultVariants: { size: \"default\", variant: \"default\" },\n variants: {\n size: {\n default: \"h-8 px-3\",\n sm: \"h-7 gap-1.5 px-2.5\",\n xs: \"h-6 gap-1 rounded-md px-2 text-xs\",\n lg: \"h-9 px-3.5\",\n xl: \"h-10 px-4 text-base\",\n icon: \"size-8\",\n \"icon-sm\": \"size-7\",\n \"icon-lg\": \"size-9\",\n \"icon-xs\": \"size-6 rounded-md\",\n },\n variant: {\n default:\n \"border-primary bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"border-destructive bg-destructive shadow-xs hover:bg-destructive/90 text-white\",\n \"destructive-outline\":\n \"border-input bg-popover text-destructive-foreground shadow-xs/5 hover:border-destructive/30 hover:bg-destructive/5 dark:bg-input/30\",\n ghost:\n \"text-foreground hover:bg-accent hover:text-accent-foreground border-transparent\",\n link: \"text-foreground border-transparent underline-offset-4 hover:underline\",\n outline:\n \"border-input bg-popover text-foreground shadow-xs/5 hover:bg-accent hover:text-accent-foreground dark:bg-input/30\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/90 border-transparent\",\n },\n },\n})\n\nexport interface CreateButtonOptions extends Omit<ElementOptions, \"class\"> {\n variant?: ButtonVariant\n size?: ButtonSize\n class?: ClassValue\n}\n\nexport function createButton(\n options: CreateButtonOptions = {},\n children: Child | Child[] = []\n): HTMLButtonElement {\n const { variant, size, class: extra, attrs, ...rest } = options\n return el(\n \"button\",\n {\n ...rest,\n class: cn(buttonVariants({ variant, size }), extra),\n attrs: { type: \"button\", \"data-slot\": \"button\", ...attrs },\n },\n children\n )\n}\n","export const LIST_ITEM_CLASS =\n \"flex min-h-8 cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-base outline-none sm:min-h-7 sm:text-sm\"\n\nexport const LIST_ITEM_STATE_CLASS =\n \"data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-64\"\n\nexport const LIST_ITEM_INTERACTIVE_CLASS =\n \"hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-within:bg-accent focus-within:text-accent-foreground\"\n\nexport const LIST_GROUP_LABEL_CLASS =\n \"text-muted-foreground px-2 py-1.5 text-xs font-medium\"\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../../internal/el\"\nimport {\n createButton as createUiButton,\n type ButtonSize,\n type ButtonVariant as UiButtonVariant,\n} from \"../../ui/button\"\nimport {\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n} from \"../../ui/list-item\"\n\n// `action` renders a button-shaped palette row so entity links, acceptance\n// rows, and detail actions share the list-item appearance.\nexport type ButtonVariant = \"primary\" | \"action\" | \"link\"\n\nconst VARIANT_MAP: Record<\n Exclude<ButtonVariant, \"action\">,\n { variant: UiButtonVariant; size?: ButtonSize; extra?: ClassValue }\n> = {\n primary: { variant: \"default\", size: \"default\", extra: \"self-start\" },\n link: {\n variant: \"link\",\n extra: \"h-auto w-auto justify-start px-0 py-0 font-normal shadow-none\",\n },\n}\n\nexport interface CreateButtonOptions extends Omit<ElementOptions, \"class\"> {\n variant: ButtonVariant\n class?: ClassValue\n}\n\nexport function createButton(\n options: CreateButtonOptions,\n children: Child | Child[] = []\n): HTMLButtonElement {\n const { variant, class: extraClass, attrs, ...rest } = options\n if (variant === \"action\") {\n return el(\n \"button\",\n {\n ...rest,\n class: cn(\n LIST_ITEM_CLASS,\n LIST_ITEM_INTERACTIVE_CLASS,\n \"w-full cursor-pointer text-left font-normal\",\n extraClass\n ),\n attrs: { type: \"button\", \"data-slot\": \"list-item-button\", ...attrs },\n },\n children\n )\n }\n const mapped = VARIANT_MAP[variant]\n return createUiButton(\n {\n ...rest,\n variant: mapped.variant,\n size: mapped.size,\n class: cn(mapped.extra, extraClass),\n attrs,\n },\n children\n )\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\n\nconst KBD_CLASS =\n \"bg-muted text-muted-foreground pointer-events-none inline-flex h-5 min-w-5 select-none items-center justify-center gap-1 rounded px-1 font-sans text-xs font-medium [&_svg:not([class*='size-'])]:size-3\"\n\nconst KBD_GROUP_CLASS = \"inline-flex items-center gap-1\"\n\nconst COMMAND_SHORTCUT_CLASS =\n \"text-muted-foreground/70 ms-auto font-sans text-xs font-medium tracking-widest\"\n\nexport interface CreateKbdOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport function createKbd(\n options: CreateKbdOptions = {},\n children: Child | Child[] = []\n): HTMLElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"kbd\",\n {\n ...rest,\n class: cn(KBD_CLASS, extra),\n attrs: { \"data-slot\": \"kbd\", ...attrs },\n },\n children\n )\n}\n\nexport function createKbdGroup(\n options: CreateKbdOptions = {},\n children: Child | Child[] = []\n): HTMLElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"kbd\",\n {\n ...rest,\n class: cn(KBD_GROUP_CLASS, extra),\n attrs: { \"data-slot\": \"kbd-group\", ...attrs },\n },\n children\n )\n}\n\n/**\n * Lighter shortcut text used inside command-palette rows (coss\n * `CommandShortcut`). No background pill — just muted mono-tracked type.\n */\nexport function createCommandShortcut(\n options: CreateKbdOptions = {},\n children: Child | Child[] = []\n): HTMLElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"kbd\",\n {\n ...rest,\n class: cn(COMMAND_SHORTCUT_CLASS, extra),\n attrs: { \"data-slot\": \"command-shortcut\", ...attrs },\n },\n children\n )\n}\n","import { el } from \"../../internal/el\"\nimport { createCommandShortcut } from \"../../ui/kbd\"\n\n// Rows are always single-line: `leading`, `label`, optional muted `subtitle`\n// suffix, `trailing` (kbd if string, else raw node).\nexport interface RowContent {\n leading?: Node | null\n label: string\n subtitle?: string\n trailing?: Node | string | null\n}\n\nconst LABEL_CLASS = \"min-w-0 flex-1 truncate\"\nconst SUBTITLE_CLASS = \"truncate text-xs text-muted-foreground\"\n\n/** Returns the mutable label `<span>` so callers can swap its text later. */\nexport function fillRowWithHandle(\n host: HTMLElement,\n content: RowContent\n): { label: HTMLSpanElement } {\n if (content.leading) host.append(content.leading)\n const label = el(\"span\", { class: LABEL_CLASS, text: content.label })\n host.append(label)\n if (content.subtitle) {\n host.append(\n el(\"span\", {\n class: SUBTITLE_CLASS,\n attrs: { \"data-uidex-row-subtitle\": \"\" },\n text: content.subtitle,\n })\n )\n }\n if (content.trailing != null) {\n host.append(\n typeof content.trailing === \"string\"\n ? createCommandShortcut({ text: content.trailing })\n : content.trailing\n )\n }\n return { label }\n}\n\n/**\n * Host is expected to provide its own `flex` container styling (alignment,\n * gap, padding). The row only injects the inner leading/label/trailing slots.\n */\nexport function fillRow(host: HTMLElement, content: RowContent): void {\n fillRowWithHandle(host, content)\n}\n","import type { ClassValue } from \"clsx\"\nimport { KIND_STYLE, type EntityRef } from \"../../entities\"\nimport type { Cleanup } from \"../../internal/cleanup\"\nimport type { ViewContext } from \"../core/types\"\nimport { createButton } from \"./button\"\nimport { fillRow } from \"./row\"\n\nexport interface EntityLinkOptions {\n ctx: ViewContext\n target: EntityRef\n label?: string\n leading?: Node | null\n class?: ClassValue\n}\n\nexport function createEntityLink(options: EntityLinkOptions): {\n node: HTMLButtonElement\n cleanup: Cleanup\n} {\n const { ctx, target, label, leading, class: extraClass } = options\n const node = createButton({\n variant: \"action\",\n class: [\"w-full\", extraClass],\n attrs: {\n \"data-uidex-entity-link\": \"\",\n \"data-uidex-ref-kind\": target.kind,\n \"data-uidex-ref-id\": target.id,\n },\n })\n fillRow(node, { leading, label: label ?? `${target.kind}: ${target.id}` })\n const onClick = () => ctx.navigate(target)\n const preview = (): void => {\n ctx.highlight.show(target, { color: KIND_STYLE[target.kind].color })\n }\n const restoreParent = (): void => {\n if (ctx.ref) {\n ctx.highlight.show(ctx.ref, { color: KIND_STYLE[ctx.ref.kind].color })\n } else {\n ctx.highlight.hide()\n }\n }\n node.addEventListener(\"click\", onClick)\n node.addEventListener(\"mouseenter\", preview)\n node.addEventListener(\"mouseleave\", restoreParent)\n node.addEventListener(\"focus\", preview)\n node.addEventListener(\"blur\", restoreParent)\n return {\n node,\n cleanup: () => {\n node.removeEventListener(\"click\", onClick)\n node.removeEventListener(\"mouseenter\", preview)\n node.removeEventListener(\"mouseleave\", restoreParent)\n node.removeEventListener(\"focus\", preview)\n node.removeEventListener(\"blur\", restoreParent)\n },\n }\n}\n","import { el, type Child } from \"../../internal/el\"\nimport { LIST_GROUP_LABEL_CLASS } from \"../../ui/list-item\"\n\nexport interface CreateSectionOptions {\n heading?: string\n dataAttr: string\n listClass?: string\n}\n\nexport function createSection(\n options: CreateSectionOptions,\n items: Child[]\n): HTMLElement {\n const { heading, dataAttr, listClass = \"flex flex-col\" } = options\n const children: Child[] = []\n if (heading) {\n children.push(el(\"h3\", { class: LIST_GROUP_LABEL_CLASS, text: heading }))\n }\n children.push(el(\"ul\", { class: listClass }, items))\n return el(\n \"section\",\n {\n class: \"flex flex-col\",\n attrs: { [dataAttr]: \"\" },\n },\n children\n )\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../../internal/cn\"\nimport { el, type ElementOptions } from \"../../internal/el\"\nimport { LIST_GROUP_LABEL_CLASS } from \"../../ui/list-item\"\n\nexport interface TextOptions extends Omit<ElementOptions, \"class\" | \"text\"> {\n text?: string\n class?: ClassValue\n}\n\nconst CAPTION_CLASS = \"font-mono text-xs text-muted-foreground\"\nconst MUTED_CLASS = \"text-sm text-muted-foreground\"\nconst DESCRIPTION_CLASS = \"text-sm leading-relaxed text-foreground\"\nconst HEADING_CLASS = LIST_GROUP_LABEL_CLASS\n\nexport function createCaption(options: TextOptions = {}): HTMLParagraphElement {\n const { class: extra, ...rest } = options\n return el(\"p\", { ...rest, class: cn(CAPTION_CLASS, extra) })\n}\n\nexport function createMutedText(\n options: TextOptions = {}\n): HTMLParagraphElement {\n const { class: extra, ...rest } = options\n return el(\"p\", { ...rest, class: cn(MUTED_CLASS, extra) })\n}\n\nexport function createDescription(\n options: TextOptions = {}\n): HTMLParagraphElement {\n const { class: extra, ...rest } = options\n return el(\"p\", { ...rest, class: cn(DESCRIPTION_CLASS, extra) })\n}\n\nexport function createHeading(options: TextOptions = {}): HTMLHeadingElement {\n const { class: extra, ...rest } = options\n return el(\"h3\", { ...rest, class: cn(HEADING_CLASS, extra) })\n}\n","import { createActor, fromPromise } from \"xstate\"\n\nimport { formMachine } from \"../../flows/form\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { el } from \"../../internal/el\"\nimport { createButton } from \"../../ui/button\"\nimport { createField, createFieldError, createFieldLabel } from \"../../ui/field\"\nimport { createForm } from \"../../ui/form\"\nimport { createInput, createTextarea } from \"../../ui/input\"\nimport { createNativeSelect } from \"../../ui/select\"\nimport type {\n FormField,\n FormSubmitResult,\n FormSurface,\n FormValue,\n StandardSchemaIssue,\n StandardSchemaV1,\n} from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport type { MountedSurface } from \"./index\"\n\ninterface FieldHandle {\n name: string\n node: HTMLElement\n control: HTMLElement\n errorNode: HTMLParagraphElement\n read(): FormValue\n reset(): void\n setError(message: string | null): void\n}\n\nlet fieldSeq = 0\nconst nextFieldId = (): string => `uidex-field-${++fieldSeq}`\n\nfunction issuePathRoot(issue: StandardSchemaIssue): string | undefined {\n const seg = issue.path?.[0]\n if (seg === undefined) return undefined\n if (typeof seg === \"object\" && seg !== null && \"key\" in seg) {\n return String(seg.key)\n }\n return String(seg)\n}\n\nasync function validateWithSchema(\n schema: StandardSchemaV1<Record<string, unknown>>,\n values: Record<string, FormValue>\n): Promise<Record<string, string> | null> {\n const result = await schema[\"~standard\"].validate(values)\n if (!(\"issues\" in result) || !result.issues) return null\n // First issue per field wins — later issues are usually noise once the\n // root cause is fixed and the user re-submits.\n const out: Record<string, string> = {}\n for (const issue of result.issues) {\n const key = issuePathRoot(issue)\n if (!key) continue\n if (out[key]) continue\n out[key] = issue.message\n }\n return Object.keys(out).length > 0 ? out : null\n}\n\nfunction renderField(\n field: FormField,\n initial: FormValue | undefined\n): FieldHandle {\n const controlId = nextFieldId()\n let control: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\n let read: () => FormValue\n let reset: () => void\n\n switch (field.kind) {\n case \"select\": {\n const node = createNativeSelect({\n attrs: {\n name: field.name,\n id: controlId,\n required: field.required ?? false,\n },\n })\n for (const opt of field.options) {\n node.append(\n el(\"option\", { attrs: { value: opt.value }, text: opt.label })\n )\n }\n const initialVal =\n typeof initial === \"string\"\n ? initial\n : typeof field.value === \"string\"\n ? field.value\n : field.options[0]?.value\n if (initialVal !== undefined) node.value = initialVal\n control = node\n read = () => node.value\n reset = () => {\n if (initialVal !== undefined) node.value = initialVal\n }\n break\n }\n case \"text\":\n case \"email\": {\n const node = createInput({\n attrs: {\n type: field.kind === \"email\" ? \"email\" : \"text\",\n name: field.name,\n id: controlId,\n placeholder: field.placeholder ?? \"\",\n required: field.required ?? false,\n },\n })\n const initialVal =\n typeof initial === \"string\"\n ? initial\n : typeof field.value === \"string\"\n ? field.value\n : \"\"\n node.value = initialVal\n control = node\n read = () => node.value\n reset = () => {\n node.value = initialVal\n }\n break\n }\n case \"textarea\": {\n const node = createTextarea({\n attrs: {\n name: field.name,\n id: controlId,\n placeholder: field.placeholder ?? \"\",\n required: field.required ?? false,\n rows: field.rows,\n },\n })\n const initialVal =\n typeof initial === \"string\"\n ? initial\n : typeof field.value === \"string\"\n ? field.value\n : \"\"\n node.value = initialVal\n control = node\n read = () => node.value\n reset = () => {\n node.value = initialVal\n }\n break\n }\n case \"checkbox\": {\n const input = el(\"input\", {\n attrs: {\n type: \"checkbox\",\n name: field.name,\n id: controlId,\n },\n class:\n \"border-input bg-popover size-4 cursor-pointer rounded-[0.25rem] border accent-primary\",\n }) as HTMLInputElement\n const initialVal =\n typeof initial === \"boolean\"\n ? initial\n : typeof field.value === \"boolean\"\n ? field.value\n : false\n input.checked = initialVal\n control = input\n read = () => input.checked\n reset = () => {\n input.checked = initialVal\n }\n break\n }\n }\n\n const errorNode = createFieldError()\n const field$ = createField(\n {\n name: field.name,\n class: field.kind === \"checkbox\" ? \"flex-row items-center gap-2\" : \"\",\n },\n []\n )\n\n if (field.kind === \"checkbox\") {\n field$.append(\n control,\n createFieldLabel({ htmlFor: controlId }, field.label)\n )\n } else {\n field$.append(\n createFieldLabel({ htmlFor: controlId }, field.label),\n control\n )\n }\n field$.append(errorNode)\n\n const setError = (message: string | null): void => {\n if (!message) {\n errorNode.hidden = true\n errorNode.textContent = \"\"\n control.removeAttribute(\"aria-invalid\")\n return\n }\n errorNode.hidden = false\n errorNode.textContent = message\n control.setAttribute(\"aria-invalid\", \"true\")\n }\n\n return {\n name: field.name,\n node: field$,\n control,\n errorNode,\n read,\n reset,\n setError,\n }\n}\n\nexport function renderFormSurface(\n surface: FormSurface,\n _ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n const cleanups: Cleanup[] = []\n const fields = surface.fields.map((field) =>\n renderField(field, surface.initial?.[field.name])\n )\n const fieldByName = new Map(fields.map((f) => [f.name, f]))\n\n const status = el(\"p\", {\n class: \"text-muted-foreground text-xs\",\n attrs: {\n \"data-uidex-form-status\": \"\",\n \"aria-live\": \"polite\",\n },\n })\n\n // sr-only preserves native form-submit semantics (Enter in input,\n // `requestSubmit()`) and screen-reader announcement without the button\n // showing — the shell footer surfaces the primary-action hint.\n const submit = createButton({\n variant: \"default\",\n class: \"sr-only\",\n attrs: {\n type: \"submit\",\n \"data-uidex-form-submit\": \"\",\n },\n text: surface.submit.label,\n })\n\n const form = createForm({ attrs: { \"data-uidex-form\": surface.id } }, [\n ...fields.map((f) => f.node),\n submit,\n status,\n ])\n\n function clearAllFieldErrors(): void {\n for (const f of fields) f.setError(null)\n }\n\n function applyFieldErrors(errs: Record<string, string> | undefined): void {\n clearAllFieldErrors()\n if (!errs) return\n for (const [name, message] of Object.entries(errs)) {\n fieldByName.get(name)?.setError(message)\n }\n }\n\n function setStatus(result: FormSubmitResult | null): void {\n status.replaceChildren()\n status.classList.remove(\"text-destructive-foreground\")\n status.classList.add(\"text-muted-foreground\")\n if (!result) return\n if (result.status === \"error\") {\n status.classList.remove(\"text-muted-foreground\")\n status.classList.add(\"text-destructive-foreground\")\n if (!result.fieldErrors) {\n status.textContent = result.message\n }\n return\n }\n if (result.link) {\n status.append(\n document.createTextNode(`${result.message ?? \"Submitted.\"} `),\n el(\"a\", {\n class: \"text-foreground underline underline-offset-4\",\n attrs: {\n href: result.link.url,\n target: \"_blank\",\n rel: \"noreferrer\",\n },\n text: result.link.label ?? \"Open link\",\n })\n )\n } else {\n status.textContent = result.message ?? \"Submitted.\"\n }\n }\n\n const actor = createActor(\n formMachine.provide({\n actions: {\n disableSubmitButton: () => {\n submit.disabled = true\n submit.setAttribute(\"data-loading\", \"\")\n },\n enableSubmitButton: () => {\n submit.disabled = false\n submit.removeAttribute(\"data-loading\")\n },\n showSuccessStatus: ({ context }) => {\n setStatus(context.result)\n clearAllFieldErrors()\n },\n showErrorStatus: ({ context }) => {\n const message =\n context.result?.status === \"error\"\n ? context.result\n : context.errorMessage\n ? { status: \"error\" as const, message: context.errorMessage }\n : null\n setStatus(message)\n },\n applyFieldErrors: ({ context }) => {\n applyFieldErrors(context.fieldErrors ?? undefined)\n },\n clearStatus: () => {\n setStatus(null)\n },\n clearFieldErrors: () => {\n clearAllFieldErrors()\n },\n resetFields: ({ context }) => {\n if (\n context.result?.status === \"success\" &&\n context.result.resetFields\n ) {\n for (const name of context.result.resetFields) {\n fieldByName.get(name)?.reset()\n }\n }\n },\n },\n actors: {\n validate: fromPromise<\n Record<string, string> | null,\n { values: Record<string, FormValue> }\n >(async ({ input }) => {\n if (!surface.schema) return null\n return validateWithSchema(surface.schema, input.values)\n }),\n submit: fromPromise<\n FormSubmitResult,\n { values: Record<string, FormValue> }\n >(\n async ({ input }) =>\n (await surface.submit.onSubmit(input.values)) ?? {\n status: \"success\",\n }\n ),\n },\n })\n )\n actor.start()\n cleanups.push(() => actor.stop())\n\n const onSubmit = (e: SubmitEvent): void => {\n e.preventDefault()\n const values: Record<string, FormValue> = {}\n surface.fields.forEach((field, i) => {\n values[field.name] = fields[i].read()\n })\n const snapshot = actor.getSnapshot()\n if (snapshot.matches(\"success\") || snapshot.matches(\"error\")) {\n actor.send({ type: \"RETRY\" })\n }\n actor.send({ type: \"SUBMIT\", values })\n }\n form.addEventListener(\"submit\", onSubmit)\n cleanups.push(() => form.removeEventListener(\"submit\", onSubmit))\n\n // Submit = Cmd/Ctrl+Enter. Plain Enter in a text input would otherwise\n // implicit-submit, so swallow it; textareas keep Enter = newline.\n const onFormKeyDown = (e: KeyboardEvent): void => {\n if (e.key !== \"Enter\") return\n const isMod = e.metaKey || e.ctrlKey\n if (isMod) {\n e.preventDefault()\n if (typeof form.requestSubmit === \"function\") form.requestSubmit()\n else form.dispatchEvent(new Event(\"submit\", { cancelable: true }))\n return\n }\n if (\n e.target instanceof HTMLInputElement &&\n e.target.type !== \"checkbox\" &&\n e.target.type !== \"radio\"\n ) {\n e.preventDefault()\n }\n }\n form.addEventListener(\"keydown\", onFormKeyDown)\n cleanups.push(() => form.removeEventListener(\"keydown\", onFormKeyDown))\n\n const section = el(\n \"section\",\n {\n class: \"p-4\",\n attrs: { \"data-uidex-form-surface\": surface.id },\n },\n [form]\n )\n root.append(section)\n\n return {\n cleanup: composeCleanups([...cleanups, () => root.replaceChildren()]),\n }\n}\n","import { assign, enqueueActions, fromPromise, setup } from \"xstate\"\n\nimport type { FormSubmitResult, FormValue } from \"../views/core/surface\"\n\nexport interface FormContext {\n values: Record<string, FormValue> | null\n result: FormSubmitResult | null\n fieldErrors: Record<string, string> | null\n errorMessage: string | null\n}\n\nexport type FormEvent =\n | { type: \"SUBMIT\"; values: Record<string, FormValue> }\n | { type: \"VALID\" }\n | { type: \"INVALID\"; fieldErrors: Record<string, string> }\n | { type: \"OK\"; result: FormSubmitResult }\n | { type: \"FAIL\"; result: FormSubmitResult }\n | { type: \"RETRY\" }\n\nexport interface ValidateInput {\n values: Record<string, FormValue>\n}\n\nexport interface SubmitInput {\n values: Record<string, FormValue>\n}\n\nconst initialContext: FormContext = {\n values: null,\n result: null,\n fieldErrors: null,\n errorMessage: null,\n}\n\nexport const formMachine = setup({\n types: {} as {\n context: FormContext\n events: FormEvent\n },\n actions: {\n disableSubmitButton: () => {},\n enableSubmitButton: () => {},\n showSuccessStatus: () => {},\n showErrorStatus: () => {},\n resetFields: () => {},\n applyFieldErrors: () => {},\n clearStatus: () => {},\n clearFieldErrors: () => {},\n },\n actors: {\n validate: fromPromise<Record<string, string> | null, ValidateInput>(\n async () => null\n ),\n submit: fromPromise<FormSubmitResult, SubmitInput>(async () => ({\n status: \"success\",\n })),\n },\n}).createMachine({\n id: \"form\",\n initial: \"idle\",\n context: initialContext,\n states: {\n idle: {\n entry: [\n assign(() => ({\n fieldErrors: null,\n errorMessage: null,\n })),\n { type: \"clearStatus\" },\n { type: \"clearFieldErrors\" },\n ],\n on: {\n SUBMIT: {\n target: \"validating\",\n actions: assign(({ event }) => ({\n values: event.values,\n result: null,\n fieldErrors: null,\n errorMessage: null,\n })),\n },\n },\n },\n validating: {\n invoke: {\n src: \"validate\",\n input: ({ context }) => ({ values: context.values ?? {} }),\n onDone: {\n actions: enqueueActions(({ event, enqueue }) => {\n const errors = event.output\n if (!errors) {\n enqueue.raise({ type: \"VALID\" })\n } else {\n enqueue.raise({ type: \"INVALID\", fieldErrors: errors })\n }\n }),\n },\n onError: {\n actions: enqueueActions(({ event, enqueue }) => {\n const error = event.error\n const message =\n error instanceof Error ? error.message : String(error)\n enqueue.raise({\n type: \"FAIL\",\n result: { status: \"error\", message },\n })\n }),\n },\n },\n on: {\n VALID: { target: \"submitting\" },\n INVALID: {\n target: \"error\",\n actions: assign(({ event }) => ({\n fieldErrors: event.fieldErrors,\n errorMessage: \"Please fix the errors above.\",\n result: {\n status: \"error\",\n message: \"Please fix the errors above.\",\n fieldErrors: event.fieldErrors,\n },\n })),\n },\n FAIL: {\n target: \"error\",\n actions: assign(({ event }) => ({\n result: event.result,\n errorMessage:\n event.result.status === \"error\" ? event.result.message : null,\n fieldErrors:\n event.result.status === \"error\"\n ? (event.result.fieldErrors ?? null)\n : null,\n })),\n },\n },\n },\n submitting: {\n entry: { type: \"disableSubmitButton\" },\n exit: { type: \"enableSubmitButton\" },\n invoke: {\n src: \"submit\",\n input: ({ context }) => ({ values: context.values ?? {} }),\n onDone: {\n actions: enqueueActions(({ event, enqueue }) => {\n const result = event.output\n if (result.status === \"success\") {\n enqueue.raise({ type: \"OK\", result })\n } else {\n enqueue.raise({ type: \"FAIL\", result })\n }\n }),\n },\n onError: {\n actions: enqueueActions(({ event, enqueue }) => {\n const error = event.error\n const message =\n error instanceof Error ? error.message : String(error)\n enqueue.raise({\n type: \"FAIL\",\n result: { status: \"error\", message },\n })\n }),\n },\n },\n on: {\n OK: {\n target: \"success\",\n actions: assign(({ event }) => ({\n result: event.result,\n fieldErrors: null,\n errorMessage: null,\n })),\n },\n FAIL: {\n target: \"error\",\n actions: assign(({ event }) => ({\n result: event.result,\n errorMessage:\n event.result.status === \"error\" ? event.result.message : null,\n fieldErrors:\n event.result.status === \"error\"\n ? (event.result.fieldErrors ?? null)\n : null,\n })),\n },\n },\n },\n success: {\n entry: [{ type: \"showSuccessStatus\" }, { type: \"resetFields\" }],\n on: {\n RETRY: { target: \"idle\" },\n },\n },\n error: {\n entry: [{ type: \"showErrorStatus\" }, { type: \"applyFieldErrors\" }],\n on: {\n RETRY: { target: \"idle\" },\n },\n },\n },\n})\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\n\nconst FIELD_ROOT_CLASS = \"flex flex-col items-start gap-2\"\nconst FIELD_LABEL_CLASS =\n \"text-base/4.5 text-foreground inline-flex items-center gap-2 font-medium sm:text-sm/4\"\nconst FIELD_DESCRIPTION_CLASS = \"text-muted-foreground text-xs\"\nconst FIELD_ERROR_CLASS = \"text-destructive-foreground text-xs\"\n\nexport interface CreateFieldOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n name?: string\n}\n\nexport function createField(\n options: CreateFieldOptions = {},\n children: Child | Child[] = []\n): HTMLDivElement {\n const { class: extra, name, attrs, ...rest } = options\n return el(\n \"div\",\n {\n ...rest,\n class: cn(FIELD_ROOT_CLASS, extra),\n attrs: {\n \"data-slot\": \"field\",\n \"data-uidex-primitive\": \"field\",\n ...(name ? { \"data-uidex-field-name\": name } : {}),\n ...attrs,\n },\n },\n children\n ) as HTMLDivElement\n}\n\nexport interface CreateFieldLabelOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n /** When provided, the `<label for>` attribute is set so clicking focuses the control. */\n htmlFor?: string\n}\n\nexport function createFieldLabel(\n options: CreateFieldLabelOptions = {},\n children: Child | Child[] = []\n): HTMLLabelElement {\n const { class: extra, htmlFor, attrs, ...rest } = options\n return el(\n \"label\",\n {\n ...rest,\n class: cn(FIELD_LABEL_CLASS, extra),\n attrs: {\n \"data-slot\": \"field-label\",\n ...(htmlFor ? { for: htmlFor } : {}),\n ...attrs,\n },\n },\n children\n ) as HTMLLabelElement\n}\n\nexport function createFieldDescription(\n options: CreateFieldOptions = {},\n children: Child | Child[] = []\n): HTMLParagraphElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"p\",\n {\n ...rest,\n class: cn(FIELD_DESCRIPTION_CLASS, extra),\n attrs: { \"data-slot\": \"field-description\", ...attrs },\n },\n children\n ) as HTMLParagraphElement\n}\n\nexport function createFieldError(\n options: CreateFieldOptions = {}\n): HTMLParagraphElement {\n const { class: extra, attrs, ...rest } = options\n const node = el(\"p\", {\n ...rest,\n class: cn(FIELD_ERROR_CLASS, extra),\n attrs: {\n \"data-slot\": \"field-error\",\n role: \"alert\",\n \"aria-live\": \"polite\",\n ...attrs,\n },\n }) as HTMLParagraphElement\n node.hidden = true\n return node\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type Child, type ElementOptions } from \"../internal/el\"\n\nconst FORM_CLASS = \"flex w-full flex-col gap-4\"\n\nexport interface CreateFormOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport function createForm(\n options: CreateFormOptions = {},\n children: Child | Child[] = []\n): HTMLFormElement {\n const { class: extra, attrs, ...rest } = options\n return el(\n \"form\",\n {\n ...rest,\n class: cn(FORM_CLASS, extra),\n attrs: {\n \"data-slot\": \"form\",\n \"data-uidex-primitive\": \"form\",\n noValidate: true,\n ...attrs,\n },\n },\n children\n ) as HTMLFormElement\n}\n","import type { ClassValue } from \"clsx\"\nimport { cn } from \"../internal/cn\"\nimport { el, type ElementOptions } from \"../internal/el\"\n\nconst FIELD_CLASS =\n \"border-input bg-popover text-foreground shadow-xs/5 placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive/40 aria-invalid:focus-visible:ring-destructive/20 dark:bg-input/30 inline-flex w-full rounded-lg border text-sm outline-none transition-shadow focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-60\"\n\nexport interface CreateInputOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport function createInput(\n options: CreateInputOptions = {}\n): HTMLInputElement {\n const { class: extra, attrs, ...rest } = options\n return el(\"input\", {\n ...rest,\n class: cn(FIELD_CLASS, \"h-8 px-3\", extra),\n attrs: { \"data-slot\": \"input\", ...attrs },\n }) as HTMLInputElement\n}\n\nexport function createTextarea(\n options: CreateInputOptions = {}\n): HTMLTextAreaElement {\n const { class: extra, attrs, ...rest } = options\n return el(\"textarea\", {\n ...rest,\n class: cn(FIELD_CLASS, \"min-h-20 px-3 py-2\", extra),\n attrs: { \"data-slot\": \"textarea\", ...attrs },\n }) as HTMLTextAreaElement\n}\n","import type { ClassValue } from \"clsx\"\nimport { ChevronsUpDown, createElement as createLucideElement } from \"lucide\"\nimport { cn } from \"../internal/cn\"\nimport { el, type ElementOptions } from \"../internal/el\"\n\nconst SELECT_WRAP_CLASS =\n \"border-input bg-popover text-foreground shadow-xs/5 focus-within:border-ring focus-within:ring-ring/30 aria-invalid:border-destructive/40 dark:bg-input/30 relative inline-flex h-8 w-full items-center rounded-lg border text-sm outline-none transition-shadow focus-within:ring-[3px] has-disabled:opacity-60\"\n\nconst SELECT_CONTROL_CLASS =\n \"absolute inset-0 h-full w-full cursor-pointer appearance-none bg-transparent px-3 pr-8 text-sm text-foreground outline-none disabled:cursor-not-allowed\"\n\nconst NATIVE_SELECT_CLASS =\n \"border-input bg-popover text-foreground shadow-xs/5 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive/40 dark:bg-input/30 inline-flex h-8 w-full cursor-pointer appearance-none rounded-lg border bg-[right_0.5rem_center] bg-no-repeat pl-3 pr-8 text-sm outline-none transition-shadow focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-60\"\n\nconst SELECT_CHEVRON_CLASS =\n \"pointer-events-none absolute right-2 size-4 text-muted-foreground opacity-80\"\n\nexport interface CreateSelectOptions extends Omit<ElementOptions, \"class\"> {\n class?: ClassValue\n}\n\nexport interface SelectHandle {\n wrapper: HTMLElement\n control: HTMLSelectElement\n}\n\n/**\n * Coss-styled select composed of a wrapper `<span>` carrying the\n * border/shadow/chevron and a native `<select>` inside. Use when you can\n * control where the full handle mounts.\n */\nexport function createSelect(options: CreateSelectOptions = {}): SelectHandle {\n const { class: extra, attrs, ...rest } = options\n const control = el(\"select\", {\n ...rest,\n class: SELECT_CONTROL_CLASS,\n attrs: { \"data-slot\": \"select\", ...attrs },\n }) as HTMLSelectElement\n const chevron = createLucideElement(ChevronsUpDown)\n chevron.setAttribute(\"aria-hidden\", \"true\")\n chevron.setAttribute(\"class\", SELECT_CHEVRON_CLASS)\n const wrapper = el(\n \"span\",\n {\n class: cn(SELECT_WRAP_CLASS, extra),\n attrs: { \"data-slot\": \"select-control\" },\n },\n [control, chevron]\n )\n return { wrapper, control }\n}\n\n/**\n * Bare coss-styled native `<select>` — no wrapper, no chevron. Use when the\n * consumer expects a single self-styled element (e.g. the generic form\n * renderer in `views/render/form.ts`).\n */\nexport function createNativeSelect(\n options: CreateSelectOptions = {}\n): HTMLSelectElement {\n const { class: extra, attrs, ...rest } = options\n return el(\"select\", {\n ...rest,\n class: cn(NATIVE_SELECT_CLASS, extra),\n attrs: { \"data-slot\": \"select\", ...attrs },\n }) as HTMLSelectElement\n}\n","import * as combobox from \"@zag-js/combobox\"\nimport { createMachineRunner } from \"./machine\"\nimport { normalizeProps, type DomProps } from \"./normalize\"\n\nexport type ComboboxProps<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n> = combobox.Props<T>\nexport type ComboboxApi<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n> = combobox.Api<DomProps, T>\n\nexport function createCombobox<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n>(props: Partial<ComboboxProps<T>>) {\n const runner = createMachineRunner(\n combobox.machine as unknown as Parameters<typeof createMachineRunner>[0],\n props as never\n )\n runner.start()\n return {\n runner,\n api: () =>\n combobox.connect(\n runner.service as never,\n normalizeProps\n ) as ComboboxApi<T>,\n destroy: () => runner.stop(),\n }\n}\n\nexport type ComboboxHandle<\n T extends combobox.CollectionItem = combobox.CollectionItem,\n> = ReturnType<typeof createCombobox<T>>\n\nexport { combobox }\n","import { KIND_STYLE } from \"../../entities\"\nimport { combobox, createCombobox } from \"../../machines/combobox\"\nimport { createScrollArea } from \"../../machines/scroll-area\"\nimport { composeCleanups, type Cleanup } from \"../../internal/cleanup\"\nimport { cn } from \"../../internal/cn\"\nimport { el } from \"../../internal/el\"\nimport { matchesQuery } from \"../builder/filter\"\nimport { createPersistentSpreads, spreadProps } from \"../builder/spread-props\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { ViewContext } from \"../core/types\"\nimport { createElement as createLucideElement, Circle } from \"lucide\"\nimport { createIconTile } from \"../primitives/icon-tile\"\nimport { renderKindIconTile } from \"../primitives/kind-icon\"\nimport { fillRow } from \"../primitives/row\"\nimport { createMutedText } from \"../primitives/text\"\nimport {\n LIST_GROUP_LABEL_CLASS,\n LIST_ITEM_CLASS,\n LIST_ITEM_STATE_CLASS,\n} from \"../../ui/list-item\"\nimport type { MountedSurface } from \"./index\"\n\nfunction defaultFilter(item: ListItem, query: string): boolean {\n return matchesQuery(\n `${item.label} ${item.value} ${item.group ?? \"\"} ${item.subtitle ?? \"\"}`,\n query\n )\n}\n\nfunction rowTag(item: ListItem): string {\n return item.tag ?? item.value\n}\n\nexport function renderListSurface(\n surface: ListSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n const all = surface.items\n const filterFn = surface.filter ?? defaultFilter\n let filteredItems: readonly ListItem[] = all\n\n const allByValue = new Map(all.map((i) => [i.value, i]))\n\n const getRootNode = (): ShadowRoot | Document => {\n const rn = root.getRootNode()\n if (rn instanceof ShadowRoot || rn instanceof Document) return rn\n return root.ownerDocument ?? document\n }\n\n const makeCollection = (items: readonly ListItem[]) =>\n combobox.collection({\n items: items as ListItem[],\n itemToValue: (item) => item.value,\n itemToString: (item) => item.label,\n })\n\n const hasDefault =\n surface.defaultHighlight !== undefined &&\n allByValue.has(surface.defaultHighlight)\n\n const handle = createCombobox<ListItem>({\n id: surface.id,\n getRootNode,\n collection: makeCollection(all),\n defaultOpen: true,\n defaultHighlightedValue: hasDefault ? surface.defaultHighlight : undefined,\n openOnClick: true,\n inputBehavior: \"autohighlight\",\n selectionBehavior: \"preserve\",\n closeOnSelect: false,\n disableLayer: true,\n onSelect: ({ itemValue }) => {\n const item = allByValue.get(itemValue)\n if (!item || !surface.onSelect) return\n surface.onSelect(item)\n },\n onHighlightChange: ({ highlightedValue }) => {\n const item = highlightedValue\n ? allByValue.get(highlightedValue)\n : undefined\n if (item?.preview) {\n ctx.highlight.show(item.preview, {\n color: KIND_STYLE[item.preview.kind].color,\n })\n } else {\n ctx.highlight.hide()\n }\n },\n })\n\n const section = el(\"section\", {\n class: \"flex h-full flex-col overflow-hidden\",\n attrs: { \"data-uidex-list-surface\": surface.id },\n })\n\n const scrollRoot = el(\"div\", {\n class: \"flex-1 min-h-0\",\n attrs: { \"data-uidex-list-scroll-root\": \"\" },\n })\n\n const viewport = el(\"div\", { class: \"uidex-scrollbar h-full w-full\" })\n\n const content = el(\"div\", {\n class: \"scroll-py-2 p-2\",\n attrs: { \"data-uidex-list-content\": \"\" },\n })\n\n viewport.append(content)\n scrollRoot.append(viewport)\n section.append(scrollRoot)\n root.append(section)\n\n const scrollArea = createScrollArea({\n id: `${surface.id}-scroll`,\n getRootNode,\n })\n const scrollSpreads = createPersistentSpreads()\n const applyScrollProps = (): void => {\n const api = scrollArea.api()\n scrollSpreads.apply(\n scrollRoot,\n api.getRootProps() as Record<string, unknown>\n )\n scrollSpreads.apply(\n viewport,\n api.getViewportProps() as Record<string, unknown>\n )\n }\n applyScrollProps()\n const unsubScroll = scrollArea.runner.subscribe(applyScrollProps)\n\n const shellSpreads = createPersistentSpreads()\n const itemSpreads = createPersistentSpreads()\n const groupSpreads = createPersistentSpreads()\n let inputSpreadCleanup: Cleanup = () => {}\n\n const itemNodes = new Map<string, HTMLElement>()\n const itemForValue = new Map<string, ListItem>()\n const groupNodes = new Map<string, HTMLElement>()\n let listEl: HTMLElement | null = null\n let lastCollectionKey = \"\"\n let lastHighlight: string | null = null\n\n const isHidden = (): boolean => root.hasAttribute(\"hidden\")\n\n const collectionKey = (items: readonly ListItem[]): string =>\n items.map((i) => i.value).join(\"\\x00\")\n\n const clearInputSpread = (): void => {\n inputSpreadCleanup()\n inputSpreadCleanup = () => {}\n }\n\n const applyInputSpread = (): void => {\n inputSpreadCleanup()\n const api = handle.api()\n const inputProps = api.getInputProps() as Record<string, unknown>\n // The shell owns the input's placeholder; zag emits `placeholder: undefined`\n // when no prop is passed, which would strip our attribute on re-apply.\n delete inputProps.placeholder\n inputSpreadCleanup = spreadProps(ctx.searchInput, inputProps)\n }\n\n const visibilityObserver = new MutationObserver(() => {\n if (isHidden()) {\n // The stack's syncHighlight owns the overlay while a child view is on\n // top — don't clobber its ref-based highlight here.\n clearInputSpread()\n } else {\n applyInputSpread()\n }\n })\n visibilityObserver.observe(root, {\n attributes: true,\n attributeFilter: [\"hidden\"],\n })\n\n function buildItemBody(itemEl: HTMLElement, item: ListItem): void {\n const leading = resolveLeadingTile(item)\n fillRow(itemEl, {\n leading,\n label: item.label,\n subtitle: item.subtitle,\n trailing: item.shortcut,\n })\n }\n\n function resolveLeadingTile(item: ListItem): HTMLElement {\n if (item.entityChip) return renderKindIconTile(item.entityChip.entity.kind)\n if (item.leading) return createIconTile(item.leading())\n const fallback = createLucideElement(Circle)\n fallback.setAttribute(\"aria-hidden\", \"true\")\n fallback.setAttribute(\"class\", \"size-4\")\n return createIconTile(fallback)\n }\n\n function buildItems(): void {\n itemSpreads.cleanupAll()\n groupSpreads.cleanupAll()\n itemNodes.clear()\n itemForValue.clear()\n groupNodes.clear()\n listEl = null\n content.replaceChildren()\n\n const visible = filteredItems\n if (visible.length === 0) {\n content.append(\n createMutedText({\n class: \"p-4 text-center\",\n attrs: { \"data-uidex-list-empty\": \"\" },\n text: surface.emptyLabel ?? \"No matches\",\n })\n )\n return\n }\n\n const byGroup = new Map<string, ListItem[]>()\n for (const item of visible) {\n const key = item.group ?? \"\"\n const bucket = byGroup.get(key) ?? []\n bucket.push(item)\n byGroup.set(key, bucket)\n }\n\n const list = el(\"ul\", {\n class: \"flex flex-col gap-1\",\n attrs: { \"data-uidex-list-groups\": \"\" },\n })\n listEl = list\n\n for (const [group, items] of byGroup) {\n const groupEl = el(\"li\", {\n class: \"flex flex-col gap-1 py-1\",\n attrs: {\n \"data-uidex-list-group\": \"\",\n \"data-uidex-list-group-name\": group,\n },\n })\n const groupHeading = group\n ? el(\"h3\", { class: LIST_GROUP_LABEL_CLASS, text: group })\n : null\n const groupList = el(\"ul\", { class: \"flex flex-col\" })\n groupNodes.set(group || \"ungrouped\", groupList)\n for (const item of items) {\n const itemEl = el(\"li\", {\n class: cn(LIST_ITEM_CLASS, LIST_ITEM_STATE_CLASS),\n attrs: { \"data-uidex-list-item\": rowTag(item) },\n })\n itemNodes.set(item.value, itemEl)\n itemForValue.set(item.value, item)\n buildItemBody(itemEl, item)\n groupList.append(itemEl)\n }\n if (groupHeading) groupEl.append(groupHeading)\n groupEl.append(groupList)\n list.append(groupEl)\n }\n\n content.append(list)\n }\n\n function applyProps(): void {\n const api = handle.api()\n shellSpreads.apply(section, api.getRootProps() as Record<string, unknown>)\n if (!isHidden()) applyInputSpread()\n shellSpreads.apply(\n content,\n api.getContentProps() as Record<string, unknown>\n )\n if (listEl) {\n shellSpreads.apply(listEl, api.getListProps() as Record<string, unknown>)\n for (const [id, groupList] of groupNodes) {\n groupSpreads.apply(\n groupList,\n api.getItemGroupProps({ id }) as Record<string, unknown>\n )\n }\n }\n for (const [value, itemEl] of itemNodes) {\n const item = itemForValue.get(value)\n if (!item) continue\n itemSpreads.apply(\n itemEl,\n api.getItemProps({ item }) as Record<string, unknown>\n )\n }\n }\n\n function maybeScrollHighlight(): void {\n const api = handle.api()\n const next = api.highlightedValue ?? null\n if (next === lastHighlight) return\n lastHighlight = next\n if (!next) return\n const node = itemNodes.get(next)\n node?.scrollIntoView({ block: \"nearest\" })\n }\n\n function tick(): void {\n const wantKey = collectionKey(filteredItems)\n if (wantKey !== lastCollectionKey) {\n buildItems()\n lastCollectionKey = wantKey\n }\n applyProps()\n maybeScrollHighlight()\n }\n\n const unsub = handle.runner.subscribe(tick)\n\n buildItems()\n lastCollectionKey = collectionKey(filteredItems)\n applyProps()\n if (hasDefault && surface.defaultHighlight) {\n handle.api().setHighlightValue(surface.defaultHighlight)\n const highlightedEl = itemNodes.get(surface.defaultHighlight)\n highlightedEl?.scrollIntoView({ block: \"nearest\" })\n lastHighlight = surface.defaultHighlight\n }\n\n const cleanup = composeCleanups([\n handle.destroy,\n () => ctx.highlight.hide(),\n unsubScroll,\n () => scrollSpreads.cleanupAll(),\n scrollArea.destroy,\n () => visibilityObserver.disconnect(),\n clearInputSpread,\n unsub,\n () => {\n itemSpreads.cleanupAll()\n groupSpreads.cleanupAll()\n shellSpreads.cleanupAll()\n itemNodes.clear()\n itemForValue.clear()\n groupNodes.clear()\n root.replaceChildren()\n },\n ])\n\n const onSearch = (query: string): void => {\n const next = all.filter((item) => filterFn(item, query))\n const nextKey = collectionKey(next)\n if (nextKey === lastCollectionKey) return\n filteredItems = next\n handle.runner.update({ collection: makeCollection(filteredItems) })\n }\n\n return { cleanup, onSearch }\n}\n","import type { Cleanup, ViewContext } from \"../core/types\"\nimport type { ViewSurface } from \"../core/surface\"\nimport { renderCustomSurface } from \"./custom\"\nimport { renderDetailSurface } from \"./detail\"\nimport { renderFormSurface } from \"./form\"\nimport { renderListSurface } from \"./list\"\n\nexport interface MountedSurface {\n cleanup: Cleanup\n onSearch?: (query: string) => void\n}\n\nexport function renderSurface(\n surface: ViewSurface,\n ctx: ViewContext,\n root: HTMLElement\n): MountedSurface {\n switch (surface.kind) {\n case \"list\":\n return renderListSurface(surface, ctx, root)\n case \"detail\":\n return renderDetailSurface(surface, ctx, root)\n case \"form\":\n return renderFormSurface(surface, ctx, root)\n case \"custom\":\n return renderCustomSurface(surface, ctx, root)\n }\n}\n","import type { EntityRef, Registry } from \"../../entities\"\nimport type { Cleanup } from \"../../internal/cleanup\"\nimport {\n createScrollArea,\n type ScrollAreaHandle,\n} from \"../../machines/scroll-area\"\nimport type { SessionStore } from \"../../session\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport { createPersistentSpreads } from \"../builder/spread-props\"\nimport { renderSurface, type MountedSurface } from \"../render\"\nimport type { ViewRegistrar } from \"./registry\"\nimport type {\n CloudAdapter,\n HighlightController,\n View,\n ViewContext,\n} from \"./types\"\n\nconst SCROLL_ROOT_CLASS = \"absolute inset-0\"\nconst HOST_CLASS = \"uidex-scrollbar h-full w-full\"\n\nexport interface MountedEntry {\n id: string\n ref: EntityRef | null\n view: View\n host: HTMLElement\n scrollRoot: HTMLElement\n scrollArea: ScrollAreaHandle\n scrollCleanup: Cleanup\n ctx: ViewContext\n mounted: MountedSurface\n}\n\nexport interface MountEntryDeps {\n container: HTMLElement\n searchInput: HTMLInputElement\n views: ViewRegistrar\n session: SessionStore\n registry: Registry\n cloud: CloudAdapter | null\n sdkCloud: CloudAdapter\n highlight: HighlightController\n nextScrollSeq(): number\n}\n\nexport function mountEntry(\n entry: ViewStackEntry,\n view: View,\n deps: MountEntryDeps\n): MountedEntry | null {\n const scrollRoot = document.createElement(\"div\")\n scrollRoot.setAttribute(\"data-uidex-view-scroll-root\", \"\")\n scrollRoot.className = SCROLL_ROOT_CLASS\n\n const host = document.createElement(\"div\")\n host.setAttribute(\"data-uidex-view-slot\", \"\")\n host.setAttribute(\"data-uidex-view-id\", view.id)\n host.className = HOST_CLASS\n scrollRoot.appendChild(host)\n deps.container.appendChild(scrollRoot)\n\n const seq = deps.nextScrollSeq()\n const scrollArea = createScrollArea({\n id: `uidex-view-scroll-${view.id}-${seq}`,\n getRootNode: () => {\n const rn = scrollRoot.getRootNode()\n if (rn instanceof ShadowRoot || rn instanceof Document) return rn\n return scrollRoot.ownerDocument ?? document\n },\n })\n\n const scrollSpreads = createPersistentSpreads()\n const applyScrollProps = (): void => {\n const api = scrollArea.api()\n scrollSpreads.apply(\n scrollRoot,\n api.getRootProps() as Record<string, unknown>\n )\n // Zag's getRootProps sets inline `position: relative`, which beats the\n // `absolute inset-0` utility class and collapses the viewport to 0px.\n scrollRoot.style.position = \"absolute\"\n scrollSpreads.apply(host, api.getViewportProps() as Record<string, unknown>)\n }\n applyScrollProps()\n const unsubScroll = scrollArea.runner.subscribe(applyScrollProps)\n const scrollCleanup: Cleanup = () => {\n unsubScroll()\n scrollSpreads.cleanupAll()\n }\n\n const ctx: ViewContext = {\n ref: entry.ref,\n registry: deps.registry,\n cloud: deps.cloud,\n sdkCloud: deps.sdkCloud,\n views: {\n list: () => deps.views.list(),\n },\n push: (target) => {\n if (!deps.views.get(target.id)) return\n deps.session.getState().actions.pushStack({\n id: target.id,\n ref: target.ref ?? null,\n })\n },\n pop: () => deps.session.getState().actions.popStack(),\n close: () => deps.session.getState().actions.clearStack(),\n navigate: (r: EntityRef) => deps.views.navigate(r),\n pinHighlight: (r: EntityRef) =>\n deps.session.getState().actions.pinHighlight(r),\n searchInput: deps.searchInput,\n highlight: deps.highlight,\n getStack: () => deps.session.getState().stack,\n }\n\n let surfaceResult: MountedSurface\n try {\n const surface = view.surface(ctx)\n surfaceResult = renderSurface(surface, ctx, host)\n } catch (err) {\n console.error(`[uidex] View \"${view.id}\" surface() threw`, err)\n scrollCleanup()\n scrollArea.destroy()\n scrollRoot.remove()\n return null\n }\n\n return {\n id: view.id,\n ref: entry.ref,\n view,\n host,\n scrollRoot,\n scrollArea,\n scrollCleanup,\n ctx,\n mounted: surfaceResult,\n }\n}\n\nexport function cleanupMountedEntry(entry: MountedEntry): void {\n try {\n entry.mounted.cleanup()\n } catch (err) {\n console.error(\"[uidex] View cleanup threw\", err)\n }\n entry.scrollCleanup()\n entry.scrollArea.destroy()\n entry.scrollRoot.remove()\n}\n\nexport function setEntryVisibility(\n entry: MountedEntry,\n visible: boolean\n): void {\n if (visible) {\n entry.host.removeAttribute(\"hidden\")\n entry.host.removeAttribute(\"inert\")\n entry.host.removeAttribute(\"aria-hidden\")\n } else {\n entry.host.setAttribute(\"hidden\", \"\")\n entry.host.setAttribute(\"inert\", \"\")\n entry.host.setAttribute(\"aria-hidden\", \"true\")\n }\n}\n","import { ArrowLeft, Search, createElement as createLucideElement } from \"lucide\"\nimport { Z_CHROME } from \"../../surface/constants\"\nimport { createActionsPopup, type ActionsPopupHandle } from \"./actions-popup\"\nimport { createKbd } from \"../../ui/kbd\"\n\nconst BACKDROP_CLASS = \"fixed inset-0 bg-black/32 backdrop-blur-sm\"\n\nconst VIEWPORT_CLASS =\n \"fixed inset-0 flex flex-col items-center px-4 py-[max(1rem,4vh)] sm:py-[10vh]\"\n\nconst FRAME_CLASS =\n \"relative flex h-[26rem] w-full min-w-0 max-w-xl flex-col rounded-2xl border bg-popover text-popover-foreground shadow-lg/5 outline-none not-dark:bg-clip-padding before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-2xl)-1px)] before:bg-muted/72 before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\"\n\nconst HEADER_CLASS = \"flex shrink-0 items-center gap-1 px-2.5 py-1.5\"\n\nconst SEARCH_WRAPPER_CLASS =\n \"flex h-9 w-full items-center gap-0 text-foreground\"\n\nconst BACK_BUTTON_CLASS =\n \"inline-flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-md bg-muted text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n\nconst BACK_ICON_CLASS = \"size-4 opacity-80\"\n\nconst SEARCH_ICON_WRAP_CLASS =\n \"inline-flex size-7 shrink-0 items-center justify-center text-muted-foreground\"\n\nconst SEARCH_ICON_CLASS = \"size-4 opacity-80\"\n\nconst LOGO_CLASS =\n \"inline-flex shrink-0 items-center justify-center text-muted-foreground\"\n\nconst LOGO_ICON_CLASS = \"size-4\"\n\nconst SEARCH_INPUT_CLASS =\n \"text-foreground min-w-0 flex-1 bg-transparent ps-2 pe-3 text-sm placeholder:text-muted-foreground focus:outline-none\"\n\nconst HEADER_TITLE_CLASS =\n \"text-foreground min-w-0 flex-1 truncate px-3 text-sm\"\n\nconst HOST_CONTAINER_CLASS =\n \"relative -mx-px min-h-0 flex-1 overflow-hidden rounded-t-xl border border-b-0 bg-popover bg-clip-padding shadow-xs/5 [clip-path:inset(0_1px)] before:pointer-events-none before:absolute before:inset-0 before:rounded-t-[calc(var(--radius-xl)-1px)]\"\n\nconst FOOTER_CLASS =\n \"text-muted-foreground flex items-center justify-between gap-2 rounded-b-[calc(var(--radius-2xl)-1px)] border-t px-5 py-3 text-xs\"\n\nconst FOOTER_SIDE_CLASS = \"flex min-w-0 items-center gap-2\"\n\nconst HINT_CLASS =\n \"inline-flex items-center gap-1.5 text-xs text-muted-foreground\"\n\nconst ACTIONS_TRIGGER_CLASS =\n \"inline-flex h-6 shrink-0 cursor-pointer items-center gap-1.5 rounded-md px-2 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n\nexport interface StackShellCallbacks {\n onBack(): void\n onBackdropClick(): void\n onSearchInput(value: string): void\n}\n\nexport interface StackShell {\n backdrop: HTMLElement\n frame: HTMLElement\n header: HTMLElement\n backBtn: HTMLButtonElement\n logo: HTMLElement\n searchIcon: HTMLElement\n headerTitle: HTMLElement\n searchInput: HTMLInputElement\n hostContainer: HTMLElement\n footerLeft: HTMLElement\n footerRight: HTMLElement\n actionsPopup: ActionsPopupHandle\n destroy(): void\n}\n\nexport function createStackShell(\n container: HTMLElement,\n callbacks: StackShellCallbacks\n): StackShell {\n const backdrop = document.createElement(\"div\")\n backdrop.setAttribute(\"data-uidex-view-backdrop\", \"\")\n backdrop.className = BACKDROP_CLASS\n backdrop.style.zIndex = String(Z_CHROME)\n\n const frame = document.createElement(\"div\")\n frame.setAttribute(\"data-uidex-view-stack-frame\", \"\")\n frame.className = FRAME_CLASS\n\n const header = document.createElement(\"header\")\n header.setAttribute(\"data-uidex-view-stack-header\", \"\")\n header.className = HEADER_CLASS\n\n const backBtn = document.createElement(\"button\")\n backBtn.setAttribute(\"type\", \"button\")\n backBtn.setAttribute(\"data-uidex-view-stack-back\", \"\")\n backBtn.setAttribute(\"aria-label\", \"Back\")\n backBtn.className = BACK_BUTTON_CLASS\n const backIcon = createLucideElement(ArrowLeft)\n backIcon.setAttribute(\"aria-hidden\", \"true\")\n backIcon.setAttribute(\"class\", BACK_ICON_CLASS)\n backBtn.append(backIcon)\n backBtn.hidden = true\n const onBackClick = () => callbacks.onBack()\n backBtn.addEventListener(\"click\", onBackClick)\n\n const logo = createUidexLogo()\n logo.setAttribute(\"data-uidex-view-stack-footer-logo\", \"\")\n const searchIcon = createSearchIcon()\n\n const searchInput = document.createElement(\"input\")\n searchInput.setAttribute(\"type\", \"text\")\n searchInput.setAttribute(\"data-uidex-search-input\", \"\")\n searchInput.setAttribute(\"placeholder\", \"Search for command...\")\n searchInput.className = SEARCH_INPUT_CLASS\n const onSearchInput = () => callbacks.onSearchInput(searchInput.value)\n searchInput.addEventListener(\"input\", onSearchInput)\n\n const headerTitle = document.createElement(\"div\")\n headerTitle.setAttribute(\"data-uidex-view-stack-title\", \"\")\n headerTitle.className = HEADER_TITLE_CLASS\n headerTitle.hidden = true\n\n const searchWrap = document.createElement(\"div\")\n searchWrap.setAttribute(\"data-uidex-view-stack-search\", \"\")\n searchWrap.className = SEARCH_WRAPPER_CLASS\n searchWrap.append(backBtn, searchIcon, searchInput, headerTitle)\n header.append(searchWrap)\n\n const hostContainer = document.createElement(\"div\")\n hostContainer.setAttribute(\"data-uidex-view-stack-hosts\", \"\")\n hostContainer.className = HOST_CONTAINER_CLASS\n\n const footer = document.createElement(\"footer\")\n footer.setAttribute(\"data-uidex-view-stack-footer\", \"\")\n footer.className = FOOTER_CLASS\n\n const footerLeft = document.createElement(\"div\")\n footerLeft.setAttribute(\"data-uidex-view-stack-footer-left\", \"\")\n footerLeft.className = FOOTER_SIDE_CLASS\n\n const footerRight = document.createElement(\"div\")\n footerRight.setAttribute(\"data-uidex-view-stack-footer-right\", \"\")\n footerRight.className = FOOTER_SIDE_CLASS\n\n footer.append(footerLeft, footerRight)\n\n const actionsPopup = createActionsPopup()\n\n frame.append(header, hostContainer, footer, actionsPopup.element)\n\n const viewport = document.createElement(\"div\")\n viewport.setAttribute(\"data-uidex-view-viewport\", \"\")\n viewport.className = VIEWPORT_CLASS\n viewport.style.zIndex = String(Z_CHROME)\n viewport.append(frame)\n const onViewportClick = (e: MouseEvent) => {\n if (e.target === viewport) callbacks.onBackdropClick()\n }\n viewport.addEventListener(\"click\", onViewportClick)\n\n container.append(backdrop, viewport)\n\n return {\n backdrop,\n frame,\n header,\n backBtn,\n logo,\n searchIcon,\n headerTitle,\n searchInput,\n hostContainer,\n footerLeft,\n footerRight,\n actionsPopup,\n destroy() {\n backBtn.removeEventListener(\"click\", onBackClick)\n viewport.removeEventListener(\"click\", onViewportClick)\n searchInput.removeEventListener(\"input\", onSearchInput)\n actionsPopup.destroy()\n viewport.remove()\n backdrop.remove()\n },\n }\n}\n\nfunction createSearchIcon(): HTMLElement {\n const wrap = document.createElement(\"span\")\n wrap.setAttribute(\"data-uidex-view-stack-search-icon\", \"\")\n wrap.setAttribute(\"aria-hidden\", \"true\")\n wrap.className = SEARCH_ICON_WRAP_CLASS\n const icon = createLucideElement(Search)\n icon.setAttribute(\"aria-hidden\", \"true\")\n icon.setAttribute(\"class\", SEARCH_ICON_CLASS)\n wrap.append(icon)\n return wrap\n}\n\nfunction createUidexLogo(): HTMLElement {\n const wrap = document.createElement(\"span\")\n wrap.setAttribute(\"data-uidex-view-stack-logo\", \"\")\n wrap.setAttribute(\"aria-hidden\", \"true\")\n wrap.className = LOGO_CLASS\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\")\n svg.setAttribute(\"viewBox\", \"0 0 30 36\")\n svg.setAttribute(\"fill\", \"currentColor\")\n svg.setAttribute(\"aria-hidden\", \"true\")\n svg.setAttribute(\"class\", LOGO_ICON_CLASS)\n const back = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\")\n back.setAttribute(\"x\", \"1\")\n back.setAttribute(\"y\", \"5\")\n back.setAttribute(\"width\", \"22\")\n back.setAttribute(\"height\", \"28\")\n back.setAttribute(\"rx\", \"3\")\n back.setAttribute(\"fill\", \"currentColor\")\n back.setAttribute(\"opacity\", \"0.18\")\n back.setAttribute(\"transform\", \"rotate(-6, 12, 19)\")\n const front = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\")\n front.setAttribute(\"x\", \"7\")\n front.setAttribute(\"y\", \"1\")\n front.setAttribute(\"width\", \"22\")\n front.setAttribute(\"height\", \"28\")\n front.setAttribute(\"rx\", \"3\")\n front.setAttribute(\"fill\", \"currentColor\")\n svg.append(back, front)\n wrap.append(svg)\n return wrap\n}\n\nexport function createHint(key: string, label: string): HTMLElement {\n const wrap = document.createElement(\"span\")\n wrap.className = HINT_CLASS\n const text = document.createElement(\"span\")\n text.textContent = label\n const kbd = createKbd({ text: key })\n wrap.append(text, kbd)\n return wrap\n}\n\nexport function createFooterDivider(): HTMLElement {\n const sep = document.createElement(\"span\")\n sep.setAttribute(\"aria-hidden\", \"true\")\n sep.className = \"mx-1 h-4 w-px bg-border\"\n return sep\n}\n\nexport function createActionsButton(onClick: () => void): HTMLButtonElement {\n const btn = document.createElement(\"button\")\n btn.setAttribute(\"type\", \"button\")\n btn.setAttribute(\"data-uidex-actions-trigger\", \"\")\n btn.setAttribute(\"aria-label\", \"Actions\")\n btn.className = ACTIONS_TRIGGER_CLASS\n const text = document.createElement(\"span\")\n text.textContent = \"Actions\"\n const kbd = createKbd({ text: \"⌘K\" })\n btn.append(text, kbd)\n btn.addEventListener(\"click\", onClick)\n return btn\n}\n","import * as menu from \"@zag-js/menu\"\nimport { createMachineHandle, type MachineHandle } from \"./machine\"\nimport { normalizeProps, type DomProps } from \"./normalize\"\n\nexport type MenuProps = menu.Props\nexport type MenuApi = menu.Api<DomProps>\nexport type MenuHandle = MachineHandle<MenuApi>\n\nexport function createMenu(props: Partial<MenuProps> = {}): MenuHandle {\n return createMachineHandle(menu.machine, menu.connect, normalizeProps, props)\n}\n\nexport { menu }\n","import { cn } from \"../internal/cn\"\nimport { composeCleanups, type Cleanup } from \"../internal/cleanup\"\nimport { el } from \"../internal/el\"\nimport { createMenu as createMenuMachine, menu } from \"../machines/menu\"\nimport { createPersistentSpreads } from \"../views/builder/spread-props\"\nimport { createCommandShortcut } from \"./kbd\"\nimport { LIST_GROUP_LABEL_CLASS } from \"./list-item\"\n\nexport const MENU_POPUP_CLASS =\n \"bg-popover text-popover-foreground shadow-lg border-border flex min-w-32 flex-col overflow-hidden rounded-lg border outline-none\"\n\nexport const MENU_LIST_CLASS = \"flex flex-col p-1\"\n\nexport const MENU_ITEM_CLASS =\n \"text-foreground data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-60 flex min-h-7 cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-sm outline-none\"\n\nexport const MENU_GROUP_LABEL_CLASS = LIST_GROUP_LABEL_CLASS\n\nexport const MENU_SEPARATOR_CLASS = \"bg-border mx-2 my-1 h-px\"\n\nexport interface MenuItemDescriptor {\n id: string\n label: string\n shortcut?: string\n disabled?: boolean\n trailing?: Node | null\n onSelect?: () => void\n}\n\nexport interface CreateUiMenuOptions {\n id?: string\n getRootNode?: () => ShadowRoot | Document\n items: MenuItemDescriptor[]\n label?: string\n ariaLabel?: string\n onSelect?(itemId: string): void\n}\n\nexport interface UiMenuHandle {\n /** Popup root; caller positions this inside its own container. */\n readonly popup: HTMLElement\n /** The ul element carrying item rows. */\n readonly list: HTMLElement\n open(): void\n close(): void\n isOpen(): boolean\n /** Forward a keydown from an owned surface (Arrow/Enter/Escape/typeahead). */\n handleKey(e: KeyboardEvent): boolean\n setItems(next: MenuItemDescriptor[]): void\n destroy(): void\n}\n\n// `getPositionerProps` is deliberately skipped so callers own absolute\n// positioning inside their own containers (the palette shell frame, etc.).\nexport function createUiMenu(options: CreateUiMenuOptions): UiMenuHandle {\n let items = options.items\n const spreads = createPersistentSpreads()\n let lastKey = \"\"\n let rowByValue = new Map<string, HTMLElement>()\n const cleanups: Cleanup[] = []\n\n const popup = el(\"div\", {\n class: cn(MENU_POPUP_CLASS, \"hidden\"),\n attrs: { \"data-uidex-primitive\": \"menu\", \"data-slot\": \"menu-popup\" },\n })\n\n const list = el(\"ul\", {\n class: MENU_LIST_CLASS,\n attrs: {\n role: \"menu\",\n \"aria-label\": options.ariaLabel ?? options.label ?? \"Menu\",\n \"data-slot\": \"menu-list\",\n },\n })\n\n popup.append(list)\n\n const handle = createMenuMachine({\n id: options.id,\n getRootNode: options.getRootNode,\n closeOnSelect: true,\n onSelect: (details) => {\n const picked = items.find((it) => it.id === details.value)\n picked?.onSelect?.()\n options.onSelect?.(details.value)\n },\n onOpenChange: ({ open }) => {\n popup.classList.toggle(\"hidden\", !open)\n },\n })\n\n function rebuild(): void {\n spreads.cleanupAll()\n list.replaceChildren()\n rowByValue = new Map()\n for (const item of items) {\n const row = el(\"li\", {\n class: MENU_ITEM_CLASS,\n attrs: {\n \"data-slot\": \"menu-item\",\n \"data-uidex-menu-item\": item.id,\n },\n })\n const label = el(\"span\", {\n class: \"flex-1 truncate\",\n text: item.label,\n })\n row.append(label)\n if (item.trailing) row.append(item.trailing)\n else if (item.shortcut) {\n row.append(createCommandShortcut({ text: item.shortcut }))\n }\n rowByValue.set(item.id, row)\n list.append(row)\n }\n lastKey = items.map((i) => i.id).join(\"\\x00\")\n }\n\n function applyProps(): void {\n const api = handle.api()\n spreads.apply(list, api.getContentProps() as Record<string, unknown>)\n for (const item of items) {\n const row = rowByValue.get(item.id)\n if (!row) continue\n spreads.apply(\n row,\n api.getItemProps({\n value: item.id,\n valueText: item.label,\n disabled: item.disabled ?? false,\n }) as Record<string, unknown>\n )\n }\n }\n\n function tick(): void {\n const wantKey = items.map((i) => i.id).join(\"\\x00\")\n if (wantKey !== lastKey) rebuild()\n applyProps()\n }\n\n rebuild()\n applyProps()\n\n const unsub = handle.runner.subscribe(tick)\n cleanups.push(unsub)\n\n function nextId(currentId: string | null, delta: number): string | null {\n if (items.length === 0) return null\n if (!currentId) {\n return delta > 0 ? items[0].id : items[items.length - 1].id\n }\n const idx = items.findIndex((it) => it.id === currentId)\n if (idx === -1) return items[0].id\n const next = (idx + delta + items.length) % items.length\n return items[next].id\n }\n\n function runHighlighted(): void {\n const api = handle.api()\n const cur = api.highlightedValue\n if (!cur) return\n const item = items.find((it) => it.id === cur)\n if (!item || item.disabled) return\n item.onSelect?.()\n options.onSelect?.(cur)\n api.setOpen(false)\n }\n\n function handleKey(e: KeyboardEvent): boolean {\n const api = handle.api()\n if (!api.open) return false\n switch (e.key) {\n case \"ArrowDown\": {\n const next = nextId(api.highlightedValue, 1)\n if (next) api.setHighlightedValue(next)\n return true\n }\n case \"ArrowUp\": {\n const next = nextId(api.highlightedValue, -1)\n if (next) api.setHighlightedValue(next)\n return true\n }\n case \"Home\": {\n if (items[0]) api.setHighlightedValue(items[0].id)\n return true\n }\n case \"End\": {\n const last = items[items.length - 1]\n if (last) api.setHighlightedValue(last.id)\n return true\n }\n case \"Enter\":\n runHighlighted()\n return true\n case \"Escape\":\n api.setOpen(false)\n return true\n default:\n return false\n }\n }\n\n return {\n popup,\n list,\n open: () => handle.api().setOpen(true),\n close: () => handle.api().setOpen(false),\n isOpen: () => handle.api().open,\n handleKey,\n setItems(next) {\n const wantKey = next.map((i) => i.id).join(\"\\x00\")\n items = next\n if (wantKey === lastKey) return\n rebuild()\n applyProps()\n },\n destroy: () => {\n composeCleanups(cleanups)()\n spreads.cleanupAll()\n handle.destroy()\n popup.remove()\n },\n }\n}\n\nexport { menu as menuMachine }\n","import { el } from \"../../internal/el\"\nimport { createKbd } from \"../../ui/kbd\"\nimport {\n createUiMenu,\n MENU_GROUP_LABEL_CLASS,\n MENU_SEPARATOR_CLASS,\n type MenuItemDescriptor,\n type UiMenuHandle,\n} from \"../../ui/menu\"\nimport type { ShellAction } from \"./types\"\n\nconst POPUP_POSITION_CLASS = \"absolute bottom-12 right-3 z-10 w-56\"\n\nexport interface ActionsPopupHandle {\n readonly element: HTMLElement\n open(actions: ShellAction[]): void\n close(): void\n isOpen(): boolean\n handleKey(e: KeyboardEvent): boolean\n destroy(): void\n}\n\nfunction toDescriptors(actions: ShellAction[]): MenuItemDescriptor[] {\n return actions.map((action) => ({\n id: action.id,\n label: action.label,\n shortcut: action.shortcut,\n // Keep the pill-kbd look inside the actions popup; the menu's default\n // shortcut renders as the lighter `command-shortcut` style.\n trailing: action.shortcut ? createKbd({ text: action.shortcut }) : null,\n onSelect: () => void action.perform(),\n }))\n}\n\nexport function createActionsPopup(): ActionsPopupHandle {\n const menu: UiMenuHandle = createUiMenu({\n items: [],\n ariaLabel: \"Actions\",\n })\n menu.popup.classList.add(...POPUP_POSITION_CLASS.split(\" \"))\n\n const heading = el(\"div\", {\n class: MENU_GROUP_LABEL_CLASS,\n text: \"Actions\",\n attrs: { \"data-slot\": \"menu-group-label\" },\n })\n const separator = el(\"div\", {\n class: MENU_SEPARATOR_CLASS,\n attrs: { role: \"separator\" },\n })\n menu.popup.prepend(separator)\n menu.popup.prepend(heading)\n\n return {\n element: menu.popup,\n open(actions) {\n menu.setItems(toDescriptors(actions))\n menu.open()\n },\n close: menu.close,\n isOpen: menu.isOpen,\n handleKey: (e) => menu.handleKey(e),\n destroy: menu.destroy,\n }\n}\n","import { KIND_STYLE, type Registry } from \"../../entities\"\nimport { detectDev } from \"../../internal/dev\"\nimport type { SessionStore } from \"../../session\"\nimport type { ViewStackEntry } from \"../../session/types\"\nimport { renderKindChip } from \"../primitives/kind-chip\"\nimport type { ActionsPopupHandle } from \"./actions-popup\"\nimport {\n cleanupMountedEntry,\n mountEntry,\n setEntryVisibility,\n type MountedEntry,\n} from \"./mount\"\nimport type { ViewRegistrar } from \"./registry\"\nimport {\n createActionsButton,\n createFooterDivider,\n createHint,\n createStackShell,\n type StackShell,\n} from \"./shell\"\nimport type {\n CloudAdapter,\n HighlightController,\n ShellAction,\n ShellHint,\n View,\n ViewContext,\n} from \"./types\"\n\nconst SOFT_STACK_CAP = 10\n\nexport interface ViewStackOptions {\n container: HTMLElement\n views: ViewRegistrar\n session: SessionStore\n registry: Registry\n cloud?: CloudAdapter | null\n sdkCloud: CloudAdapter\n highlight: HighlightController\n globalActions?: (ctx: ViewContext) => ShellAction[]\n dev?: boolean\n}\n\nexport interface ViewStack {\n /**\n * The actions popup belonging to the currently mounted stack shell, or\n * `null` when the shell is not mounted. Exposed so the unified shadow-root\n * keydown handler can intercept keys while the popup is open.\n */\n getActionsPopup(): ActionsPopupHandle | null\n destroy(): void\n}\n\nfunction resolveViewFocusTarget(entry: MountedEntry): HTMLElement | null {\n const fn = entry.view.focusTarget\n if (!fn) return null\n try {\n const target = fn(entry.host, entry.ctx)\n if (target && entry.host.contains(target)) return target\n } catch (err) {\n console.error(`[uidex] view \"${entry.view.id}\" focusTarget() threw`, err)\n }\n return null\n}\n\nfunction focusTopAfterChange(\n entry: MountedEntry,\n searchInput: HTMLInputElement\n): void {\n const preferred = resolveViewFocusTarget(entry)\n const target =\n preferred && preferred !== searchInput ? preferred : searchInput\n const focus = () => {\n try {\n target.focus({ preventScroll: true })\n } catch {\n /* ignore */\n }\n }\n focus()\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(focus)\n }\n}\n\nfunction sameRef(a: MountedEntry[\"ref\"], b: MountedEntry[\"ref\"]): boolean {\n if (a === b) return true\n if (a === null || b === null) return false\n return a.kind === b.kind && a.id === b.id\n}\n\nfunction resolveHints(view: View, ctx: ViewContext): ShellHint[] {\n const h = view.hints\n if (!h) return []\n if (typeof h === \"function\") {\n try {\n return h(ctx) ?? []\n } catch (err) {\n console.error(`[uidex] view \"${view.id}\" hints() threw`, err)\n return []\n }\n }\n return h\n}\n\nfunction resolveTitle(view: View, ctx: ViewContext): string {\n const t = view.title\n if (!t) return \"\"\n if (typeof t === \"function\") {\n try {\n return t(ctx) ?? \"\"\n } catch (err) {\n console.error(`[uidex] view \"${view.id}\" title() threw`, err)\n return \"\"\n }\n }\n return t\n}\n\nfunction resolveActions(\n view: View,\n ctx: ViewContext,\n globalActions?: (ctx: ViewContext) => ShellAction[]\n): ShellAction[] {\n const result: ShellAction[] = []\n const fn = view.actions\n if (fn) {\n try {\n const viewActions = fn(ctx) ?? []\n result.push(...viewActions)\n } catch (err) {\n console.error(`[uidex] view \"${view.id}\" actions() threw`, err)\n }\n }\n if (globalActions) {\n try {\n const globals = globalActions(ctx) ?? []\n result.push(...globals)\n } catch (err) {\n console.error(`[uidex] globalActions() threw`, err)\n }\n }\n return result\n}\n\nexport function createViewStack(options: ViewStackOptions): ViewStack {\n const { container, views, session, registry, highlight, sdkCloud } = options\n const cloud = options.cloud ?? null\n const dev = options.dev ?? detectDev()\n\n const mounted: MountedEntry[] = []\n\n let shell: StackShell | null = null\n let warnedForDepth = 0\n let lastStack: readonly ViewStackEntry[] | null = null\n let pendingFallbackQuery: string | null = null\n let scrollAreaSeq = 0\n\n function ensureShell(): StackShell {\n if (shell) return shell\n shell = createStackShell(container, {\n onBack: () => session.getState().actions.popStack(),\n onBackdropClick: () => session.getState().actions.clearStack(),\n onSearchInput: (value) => {\n const top = mounted[mounted.length - 1]\n if (!top) return\n if (top.mounted.onSearch) {\n top.mounted.onSearch(value)\n return\n }\n if (top.view.id === \"command-palette\") return\n pendingFallbackQuery = value\n session\n .getState()\n .actions.pushStack({ id: \"command-palette\", ref: null })\n },\n })\n return shell\n }\n\n function destroyShell(): void {\n shell?.destroy()\n shell = null\n pendingFallbackQuery = null\n }\n\n function syncHighlight(): void {\n const top = mounted[mounted.length - 1]\n if (!top || !top.view.matches || !top.ctx.ref) {\n highlight.hide()\n return\n }\n highlight.show(top.ctx.ref, {\n color: KIND_STYLE[top.ctx.ref.kind].color,\n })\n }\n\n function updateChrome(): void {\n if (!shell) return\n const top = mounted[mounted.length - 1]\n if (!top) return\n\n const atRoot = mounted.length <= 1\n shell.backBtn.hidden = atRoot\n shell.searchIcon.hidden = !atRoot\n\n const searchable = top.view.searchable !== false\n shell.searchInput.hidden = !searchable\n const titleText = searchable ? \"\" : resolveTitle(top.view, top.ctx)\n shell.headerTitle.textContent = titleText\n shell.headerTitle.hidden = searchable || !titleText\n\n shell.footerLeft.replaceChildren()\n const refEntity = top.ctx.ref\n ? top.ctx.registry.get(top.ctx.ref.kind, top.ctx.ref.id)\n : null\n if (refEntity) {\n shell.footerLeft.append(\n renderKindChip({\n entity: refEntity,\n withKindName: true,\n })\n )\n } else {\n shell.footerLeft.append(shell.logo)\n }\n\n shell.footerRight.replaceChildren()\n // Only surface the primary \"Enter\" hint for the top view — arrows/tab/esc\n // are implicit keyboard conventions and don't need chrome explaining them.\n const enterHint = resolveHints(top.view, top.ctx).find((h) =>\n h.key.includes(\"↵\")\n )\n if (enterHint) {\n shell.footerRight.append(createHint(enterHint.key, enterHint.label))\n }\n\n const actions = resolveActions(top.view, top.ctx, options.globalActions)\n if (actions.length > 0) {\n if (enterHint) shell.footerRight.append(createFooterDivider())\n shell.footerRight.append(\n createActionsButton(() => shell?.actionsPopup.open(actions))\n )\n }\n }\n\n function render(): void {\n const stack = session.getState().stack\n if (stack === lastStack) return\n lastStack = stack\n\n if (dev && stack.length > SOFT_STACK_CAP && stack.length > warnedForDepth) {\n console.warn(\n `[uidex] View stack depth ${stack.length} exceeds soft cap of ${SOFT_STACK_CAP}`\n )\n warnedForDepth = stack.length\n }\n if (stack.length <= SOFT_STACK_CAP) warnedForDepth = 0\n\n const resolved: Array<{ entry: ViewStackEntry; view: View }> = []\n for (const entry of stack) {\n const view = views.get(entry.id)\n if (view) resolved.push({ entry, view })\n }\n\n const priorTop = mounted[mounted.length - 1] ?? null\n\n let commonPrefix = 0\n while (\n commonPrefix < resolved.length &&\n commonPrefix < mounted.length &&\n mounted[commonPrefix].id === resolved[commonPrefix].view.id &&\n sameRef(mounted[commonPrefix].ref, resolved[commonPrefix].entry.ref)\n ) {\n commonPrefix++\n }\n\n const popped = mounted.splice(commonPrefix)\n for (let i = popped.length - 1; i >= 0; i--) {\n cleanupMountedEntry(popped[i])\n }\n\n if (resolved.length > commonPrefix) {\n const active = ensureShell()\n for (let i = commonPrefix; i < resolved.length; i++) {\n const record = mountEntry(resolved[i].entry, resolved[i].view, {\n container: active.hostContainer,\n searchInput: active.searchInput,\n views,\n session,\n registry,\n cloud,\n sdkCloud,\n highlight,\n nextScrollSeq: () => ++scrollAreaSeq,\n })\n if (record) mounted.push(record)\n }\n }\n\n if (shell?.actionsPopup.isOpen() && popped.length > 0) {\n shell.actionsPopup.close()\n }\n\n if (mounted.length === 0) {\n destroyShell()\n highlight.hide()\n return\n }\n const topIndex = mounted.length - 1\n for (let i = 0; i < mounted.length; i++) {\n setEntryVisibility(mounted[i], i === topIndex)\n }\n updateChrome()\n syncHighlight()\n\n const newTop = mounted[topIndex]\n if (newTop !== priorTop && shell) {\n const fallbackQuery = pendingFallbackQuery\n pendingFallbackQuery = null\n const initialQuery = fallbackQuery ?? \"\"\n if (fallbackQuery === null) {\n shell.searchInput.value = \"\"\n }\n try {\n newTop.mounted.onSearch?.(initialQuery)\n } catch (err) {\n console.error(`[uidex] view \"${newTop.view.id}\" onSearch threw`, err)\n }\n focusTopAfterChange(newTop, shell.searchInput)\n }\n }\n\n render()\n const unsubscribe = session.subscribe(render)\n\n return {\n getActionsPopup() {\n return shell?.actionsPopup ?? null\n },\n destroy() {\n unsubscribe()\n while (mounted.length > 0) {\n const entry = mounted.pop()!\n cleanupMountedEntry(entry)\n }\n destroyShell()\n highlight.hide()\n },\n }\n}\n","import { Compass, createElement as createLucideElement } from \"lucide\"\nimport type { EntityRef, Page } from \"../../entities\"\nimport { matchesQuery } from \"../builder/filter\"\nimport { buildPageRouteMap, collectPageContext } from \"../builder/page-context\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { PALETTE_GROUPS } from \"../labels\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\ntype PaletteItemPayload =\n | { type: \"view\"; id: string; ref?: EntityRef | null }\n | { type: \"entity\"; ref: EntityRef }\n\ninterface PaletteItem extends ListItem {\n payload: PaletteItemPayload\n}\n\nconst CURRENT_PAGE_GROUP = PALETTE_GROUPS.commands\n\nfunction pageDetailsRow(\n page: Page,\n pageRoutes: ReadonlyMap<string, string>\n): PaletteItem {\n const ref: EntityRef = { kind: \"page\", id: page.id }\n const item: PaletteItem = {\n value: `entity:${ref.kind}:${ref.id}`,\n label: \"Page Details\",\n group: CURRENT_PAGE_GROUP,\n tag: `${ref.kind}:${ref.id}`,\n preview: ref,\n entityChip: { entity: page },\n payload: { type: \"entity\", ref },\n }\n const path = pageRoutes.get(page.id)\n if (path) item.subtitle = path\n return item\n}\n\nfunction explorePageRow(totalOnPage: number): PaletteItem {\n return {\n value: `view:${BUILT_IN_VIEW_IDS.explorePage}`,\n label: \"Explore page\",\n subtitle: totalOnPage === 1 ? \"1 item\" : `${totalOnPage} items`,\n group: CURRENT_PAGE_GROUP,\n tag: BUILT_IN_VIEW_IDS.explorePage,\n leading: () => createLucideElement(Compass),\n payload: { type: \"view\", id: BUILT_IN_VIEW_IDS.explorePage },\n }\n}\n\nfunction collectNavigation(ctx: ViewContext): PaletteItem[] {\n const out: PaletteItem[] = []\n for (const view of ctx.views.list()) {\n if (view.id === BUILT_IN_VIEW_IDS.commandPalette) continue\n // Explore page is reachable from the root row above; don't duplicate.\n if (view.id === BUILT_IN_VIEW_IDS.explorePage) continue\n if (!view.palette) continue\n out.push({\n value: `view:${view.id}`,\n label: view.palette.label,\n group: view.palette.group ?? PALETTE_GROUPS.commands,\n shortcut: view.palette.shortcut,\n tag: view.id,\n leading: view.palette.icon,\n payload: { type: \"view\", id: view.id },\n })\n }\n return out\n}\n\nexport const commandPaletteView: View = {\n id: BUILT_IN_VIEW_IDS.commandPalette,\n palette: { label: \"Command palette\", shortcut: \"Cmd+K\" },\n title: \"Command palette\",\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx): ListSurface => {\n const pageCtx = collectPageContext(ctx)\n const pageRoutes = buildPageRouteMap(ctx)\n\n const items: PaletteItem[] = []\n\n if (pageCtx.pageEntity) {\n items.push(pageDetailsRow(pageCtx.pageEntity, pageRoutes))\n }\n\n const onPageCount = pageCtx.composed.length + pageCtx.dom.length\n if (onPageCount > 0) items.push(explorePageRow(onPageCount))\n\n items.push(...collectNavigation(ctx))\n\n const initialHighlight = ctx.ref\n ? `entity:${ctx.ref.kind}:${ctx.ref.id}`\n : undefined\n\n const filter = (item: ListItem, query: string): boolean => {\n const palette = item as PaletteItem\n const rawId =\n palette.payload.type === \"entity\" ? palette.payload.ref.id : \"\"\n return matchesQuery(`${item.label} ${rawId} ${item.group ?? \"\"}`, query)\n }\n\n return {\n kind: \"list\",\n id: \"uidex-command-palette\",\n items,\n defaultHighlight: initialHighlight,\n filter,\n onSelect: (item) => {\n const palette = item as PaletteItem\n if (palette.payload.type === \"view\") {\n ctx.push({ id: palette.payload.id, ref: palette.payload.ref ?? null })\n return\n }\n ctx.navigate(palette.payload.ref)\n },\n }\n },\n}\n","import type { Entity, EntityRef, Page } from \"../../entities\"\nimport {\n SURFACE_IGNORE_SELECTOR,\n UIDEX_ATTR_TO_KIND,\n} from \"../../surface/constants\"\nimport type { ViewContext } from \"../core/types\"\n\nconst ON_THIS_PAGE_SELECTOR = UIDEX_ATTR_TO_KIND.map(\n ([attr]) => `[${attr}]`\n).join(\",\")\n\nfunction routePatternToRegex(pattern: string): RegExp {\n if (pattern === \"/\") return /^\\/$/\n const parts = pattern.split(\"/\").filter(Boolean)\n const regexParts = parts.map((seg) => {\n if (/^\\[\\.{3}[^\\]]+\\]$/.test(seg)) return \".+\"\n if (/^\\[[^\\]]+\\]$/.test(seg)) return \"[^/]+\"\n return seg.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n })\n return new RegExp(`^/${regexParts.join(\"/\")}/?$`)\n}\n\n/** Resolve the page entity for the current URL by walking the registry's routes. */\nexport function findCurrentPageId(ctx: ViewContext): string | null {\n if (typeof location === \"undefined\") return null\n const pathname = location.pathname || \"/\"\n const routes = ctx.registry.list(\"route\")\n let best: { path: string; page: string } | null = null\n for (const route of routes) {\n if (!routePatternToRegex(route.path).test(pathname)) continue\n if (!best || route.path.length > best.path.length) {\n best = { path: route.path, page: route.page }\n }\n }\n return best?.page ?? null\n}\n\n/** First route path per page id, for subtitle rendering in palette rows. */\nexport function buildPageRouteMap(\n ctx: ViewContext\n): ReadonlyMap<string, string> {\n const map = new Map<string, string>()\n for (const route of ctx.registry.list(\"route\")) {\n if (!map.has(route.page)) map.set(route.page, route.path)\n }\n return map\n}\n\nexport interface PageEntityHit {\n entity: Entity\n ref: EntityRef\n /** DOM node that surfaced this entity, if discovered via `data-uidex*` scan. */\n node?: Element | null\n}\n\nexport interface PageContext {\n pageId: string | null\n pageEntity: Page | null\n /** Features / widgets the page entity declares via `uidex.composes`. */\n composed: PageEntityHit[]\n /** Entities discovered by scanning the DOM for `data-uidex*` attributes. */\n dom: PageEntityHit[]\n}\n\n/**\n * Collect the entities relevant to the current page: the page entity itself,\n * its declared composes (features + widgets), and anything discovered via the\n * DOM scan. Dedup by `kind:id`; the page entity always wins over DOM dups.\n */\nexport function collectPageContext(ctx: ViewContext): PageContext {\n const seen = new Set<string>()\n const composed: PageEntityHit[] = []\n const dom: PageEntityHit[] = []\n\n const pageId = findCurrentPageId(ctx)\n const pageEntity = pageId ? (ctx.registry.get(\"page\", pageId) ?? null) : null\n\n if (pageEntity) {\n seen.add(`page:${pageEntity.id}`)\n for (const ref of pageEntity.meta?.composes ?? []) {\n if (ref.kind !== \"feature\" && ref.kind !== \"widget\") continue\n const entity = ctx.registry.get(ref.kind, ref.id)\n if (!entity) continue\n const key = `${ref.kind}:${ref.id}`\n if (seen.has(key)) continue\n seen.add(key)\n composed.push({ entity, ref })\n }\n }\n\n if (typeof document !== \"undefined\") {\n const nodes = document.querySelectorAll<HTMLElement>(ON_THIS_PAGE_SELECTOR)\n for (const node of nodes) {\n if (node.closest(SURFACE_IGNORE_SELECTOR)) continue\n for (const [attr, kind] of UIDEX_ATTR_TO_KIND) {\n const id = node.getAttribute(attr)\n if (!id) continue\n const entity = ctx.registry.get(kind, id)\n if (!entity) continue\n const key = `${kind}:${id}`\n if (seen.has(key)) break\n seen.add(key)\n dom.push({ entity, ref: { kind, id }, node })\n break\n }\n }\n }\n\n return { pageId, pageEntity, composed, dom }\n}\n","import type { Location } from \"../../entities\"\n\nexport function formatLocation(loc: Location | undefined): string | null {\n if (!loc) return null\n const suffix =\n loc.line !== undefined\n ? loc.column !== undefined\n ? `:${loc.line}:${loc.column}`\n : `:${loc.line}`\n : \"\"\n return `${loc.file}${suffix}`\n}\n","import {\n isMetaKind,\n type Entity,\n type EntityKind,\n type EntityRef,\n type Flow,\n} from \"../../entities\"\nimport type { ViewContext } from \"../core/types\"\n\nexport function resolveRefs(\n ctx: ViewContext,\n refs: readonly EntityRef[] | undefined\n): readonly Entity[] {\n if (!refs) return []\n const out: Entity[] = []\n for (const ref of refs) {\n const entity = ctx.registry.get(ref.kind, ref.id)\n if (entity) out.push(entity)\n }\n return out\n}\n\nexport function resolveFlows(\n ctx: ViewContext,\n flowIds: readonly string[] | undefined\n): readonly Flow[] {\n if (!flowIds) return []\n const out: Flow[] = []\n for (const id of flowIds) {\n const flow = ctx.registry.get(\"flow\", id)\n if (flow) out.push(flow)\n }\n return out\n}\n\ninterface HasComposes {\n meta?: { composes?: readonly EntityRef[] }\n}\n\nexport function collectUsedBy(\n ctx: ViewContext,\n targetKind: EntityKind,\n targetId: string\n): readonly Entity[] {\n const out: Entity[] = []\n const seen = new Set<string>()\n for (const candidate of ctx.registry.query((e) => {\n if (!isMetaKind(e.kind)) return false\n const composes = (e as HasComposes).meta?.composes\n if (!composes) return false\n return composes.some((c) => c.kind === targetKind && c.id === targetId)\n })) {\n const key = `${candidate.kind}:${candidate.id}`\n if (seen.has(key)) continue\n seen.add(key)\n out.push(candidate)\n }\n return out\n}\n\nexport function collectFlowsTouching(\n ctx: ViewContext,\n targetId: string\n): readonly Flow[] {\n const out: Flow[] = []\n for (const flow of ctx.registry.list(\"flow\")) {\n if (flow.touches.includes(targetId)) out.push(flow)\n }\n return out\n}\n","import {\n displayName,\n type EntityByKind,\n type EntityKind,\n type EntityRef,\n type Location,\n type MetaEntityKind,\n} from \"../../entities\"\nimport type {\n DetailAction,\n DetailSection,\n DetailSubtitle,\n DetailSurface,\n} from \"../core/surface\"\nimport { BUILT_IN_VIEW_IDS } from \"../built-in/ids\"\nimport type { ShellHint, View, ViewContext } from \"../core/types\"\nimport { SECTION_LABELS } from \"../labels\"\nimport { formatLocation } from \"./format-location\"\nimport { resolveFlows, resolveRefs } from \"./resolve\"\n\ntype MetaEntity = EntityByKind<MetaEntityKind>\n\nconst DOM_BACKED_KINDS: ReadonlySet<EntityKind> = new Set([\n \"element\",\n \"region\",\n \"widget\",\n \"primitive\",\n])\n\nconst DETAIL_HINTS: readonly ShellHint[] = [{ key: \"↵\", label: \"Open\" }]\n\nexport function copyPathAction(\n ref: EntityRef,\n loc?: Location,\n labelOverride?: string\n): DetailAction {\n const path = `${ref.kind}:${ref.id}`\n return {\n id: \"copy-path\",\n label: labelOverride ?? formatLocation(loc) ?? path,\n ariaLabel: `Copy path ${path}`,\n icon: \"copy\",\n copy: path,\n intent: { kind: \"external\", describe: \"clipboard\" },\n }\n}\n\nexport function feedbackAction(ref: EntityRef): DetailAction {\n return {\n id: \"report-feedback\",\n label: \"Report feedback\",\n icon: \"message-circle\",\n push: { id: BUILT_IN_VIEW_IDS.feedback, ref },\n intent: {\n kind: \"push\",\n viewId: BUILT_IN_VIEW_IDS.feedback,\n refKind: ref.kind,\n },\n }\n}\n\nexport function highlightElementAction(ref: EntityRef): DetailAction {\n return {\n id: \"highlight-element\",\n label: \"Highlight element\",\n icon: \"target\",\n highlight: ref,\n intent: { kind: \"external\", describe: \"highlight\" },\n }\n}\n\nexport interface EntityDetailViewConfig<K extends MetaEntityKind> {\n id: string\n kind: K\n fallbackTitle: string\n /** Render the acceptance section when the entity declares acceptance. Default: true. */\n offerAcceptance?: boolean\n /** Extra sections inserted between the acceptance section and composes. */\n extraSections?(\n ctx: ViewContext,\n entity: EntityByKind<K>\n ): readonly DetailSection[]\n /** Override subtitle. Default: `{ rawId: entity.id }`. */\n subtitle?(\n ctx: ViewContext,\n entity: EntityByKind<K>\n ): DetailSubtitle | undefined\n}\n\nexport function createEntityDetailView<K extends MetaEntityKind>(\n config: EntityDetailViewConfig<K>\n): View {\n const { kind, fallbackTitle, offerAcceptance = true } = config\n return {\n id: config.id,\n matches: (ref) => ref.kind === kind,\n hints: DETAIL_HINTS,\n title: (ctx) => {\n if (!ctx.ref) return fallbackTitle\n const entity = ctx.registry.get(kind, ctx.ref.id)\n return entity ? displayName(entity) : ctx.ref.id\n },\n focusTarget: (host) =>\n host.querySelector<HTMLButtonElement>(\n \"[data-uidex-detail-actions] [data-uidex-detail-action]\"\n ),\n surface: (ctx): DetailSurface => {\n if (!ctx.ref || ctx.ref.kind !== kind) {\n return { kind: \"detail\", entityKind: kind }\n }\n const entity = ctx.registry.get(kind, ctx.ref.id) as\n | EntityByKind<K>\n | undefined\n if (!entity) {\n return { kind: \"detail\", entityKind: kind, notFound: ctx.ref }\n }\n // MetaEntityKind excludes route/flow, so entity always has meta/loc/scopes.\n const metaEntity = entity as MetaEntity\n const meta = metaEntity.meta\n\n const actions: DetailAction[] = [\n copyPathAction(ctx.ref, undefined, \"Copy path\"),\n ]\n if (DOM_BACKED_KINDS.has(kind)) {\n actions.push(highlightElementAction(ctx.ref))\n }\n actions.push(feedbackAction(ctx.ref))\n\n const sections: DetailSection[] = []\n if (metaEntity.scopes?.length) {\n sections.push({ id: \"scopes\", scopes: metaEntity.scopes })\n }\n if (meta?.description) {\n sections.push({ id: \"description\", text: meta.description })\n }\n if (offerAcceptance && meta?.acceptance?.length) {\n sections.push({ id: \"acceptance\", items: meta.acceptance })\n }\n for (const s of config.extraSections?.(ctx, entity) ?? []) {\n sections.push(s)\n }\n sections.push({\n id: \"composes\",\n label: SECTION_LABELS.contains,\n entities: resolveRefs(ctx, meta?.composes),\n filterable: true,\n })\n sections.push({\n id: \"flows\",\n flows: resolveFlows(ctx, meta?.flows),\n filterable: true,\n })\n\n return {\n kind: \"detail\",\n entityKind: kind,\n title: displayName(metaEntity),\n subtitle: config.subtitle?.(ctx, entity),\n actions,\n sections,\n }\n },\n }\n}\n","import type { EntityKind } from \"../../entities\"\nimport { createEntityDetailView } from \"../builder/detail-builder\"\nimport { collectFlowsTouching, collectUsedBy } from \"../builder/resolve\"\nimport type { DetailSection } from \"../core/surface\"\nimport { SECTION_LABELS } from \"../labels\"\n\nfunction usedBySection(\n ctx: Parameters<typeof collectUsedBy>[0],\n kind: EntityKind,\n id: string\n): DetailSection {\n return {\n id: \"used-by\",\n label: SECTION_LABELS.usedBy,\n entities: collectUsedBy(ctx, kind, id),\n filterable: true,\n }\n}\n\nfunction touchedByFlowsSection(\n ctx: Parameters<typeof collectFlowsTouching>[0],\n id: string\n): DetailSection {\n return {\n id: \"flows\",\n flows: collectFlowsTouching(ctx, id),\n filterable: true,\n }\n}\n\nexport const componentDetailView = createEntityDetailView({\n id: \"component-detail\",\n kind: \"element\",\n fallbackTitle: \"Component\",\n extraSections: (ctx, entity) => [\n usedBySection(ctx, \"element\", entity.id),\n touchedByFlowsSection(ctx, entity.id),\n ],\n})\n\nexport const featureDetailView = createEntityDetailView({\n id: \"feature-detail\",\n kind: \"feature\",\n fallbackTitle: \"Feature\",\n extraSections: (ctx, entity) => [usedBySection(ctx, \"feature\", entity.id)],\n})\n\nexport const regionDetailView = createEntityDetailView({\n id: \"region-detail\",\n kind: \"region\",\n fallbackTitle: \"Region\",\n offerAcceptance: false,\n extraSections: (ctx, entity) => [usedBySection(ctx, \"region\", entity.id)],\n})\n\nexport const widgetDetailView = createEntityDetailView({\n id: \"widget-detail\",\n kind: \"widget\",\n fallbackTitle: \"Widget\",\n extraSections: (ctx, entity) => [usedBySection(ctx, \"widget\", entity.id)],\n})\n\nexport const primitiveDetailView = createEntityDetailView({\n id: \"primitive-detail\",\n kind: \"primitive\",\n fallbackTitle: \"Primitive\",\n offerAcceptance: false,\n extraSections: (ctx, entity) => [usedBySection(ctx, \"primitive\", entity.id)],\n})\n\nexport const pageDetailView = createEntityDetailView({\n id: \"page-detail\",\n kind: \"page\",\n fallbackTitle: \"Page\",\n offerAcceptance: true,\n extraSections: (ctx, entity): DetailSection[] => {\n const paths = ctx.registry\n .list(\"route\")\n .filter((r) => r.page === entity.id)\n .map((r) => r.path)\n return [{ id: \"routes\", paths, filterable: true }]\n },\n})\n","import { Compass, createElement as createLucideElement } from \"lucide\"\nimport {\n displayName,\n ENTITY_KINDS,\n type Entity,\n type EntityRef,\n} from \"../../entities\"\nimport { matchesQuery } from \"../builder/filter\"\nimport {\n buildPageRouteMap,\n collectPageContext,\n type PageEntityHit,\n} from \"../builder/page-context\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View, ViewContext } from \"../core/types\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\ninterface ExplorePageItem extends ListItem {\n ref: EntityRef\n}\n\nconst KIND_ORDER: ReadonlyMap<string, number> = new Map(\n ENTITY_KINDS.map((kind, index) => [kind, index])\n)\n\nconst KIND_GROUP_LABELS: Partial<Record<Entity[\"kind\"], string>> = {\n feature: \"Features\",\n widget: \"Widgets\",\n region: \"Regions\",\n element: \"Elements\",\n primitive: \"Primitives\",\n page: \"Pages\",\n route: \"Routes\",\n flow: \"Flows\",\n}\n\nfunction capitalize(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n\nfunction toItem(\n hit: PageEntityHit,\n pageRoutes: ReadonlyMap<string, string>\n): ExplorePageItem {\n const { entity, ref, node } = hit\n const item: ExplorePageItem = {\n value: `entity:${ref.kind}:${ref.id}`,\n label: displayName(entity, node),\n group: KIND_GROUP_LABELS[entity.kind] ?? capitalize(entity.kind),\n tag: `${ref.kind}:${ref.id}`,\n preview: ref,\n entityChip: { entity, node },\n ref,\n }\n if (entity.kind === \"route\") {\n item.subtitle = entity.path\n } else if (entity.kind === \"page\") {\n const path = pageRoutes.get(entity.id)\n if (path) item.subtitle = path\n }\n return item\n}\n\nexport const explorePageView: View = {\n id: BUILT_IN_VIEW_IDS.explorePage,\n palette: {\n label: \"Explore page\",\n shortcut: \"\",\n icon: () => createLucideElement(Compass),\n },\n title: \"Explore page\",\n hints: [{ key: \"↵\", label: \"Select\" }],\n focusTarget: () => null,\n surface: (ctx: ViewContext): ListSurface => {\n const { composed, dom } = collectPageContext(ctx)\n const pageRoutes = buildPageRouteMap(ctx)\n\n const items: ExplorePageItem[] = [\n ...composed.map((hit) => toItem(hit, pageRoutes)),\n ...dom.map((hit) => toItem(hit, pageRoutes)),\n ].sort((a, b) => {\n const ak = KIND_ORDER.get(a.ref.kind) ?? Number.MAX_SAFE_INTEGER\n const bk = KIND_ORDER.get(b.ref.kind) ?? Number.MAX_SAFE_INTEGER\n if (ak !== bk) return ak - bk\n return a.label.localeCompare(b.label)\n })\n\n const filter = (item: ListItem, query: string): boolean => {\n const row = item as ExplorePageItem\n return matchesQuery(\n `${item.label} ${row.ref.id} ${item.group ?? \"\"}`,\n query\n )\n }\n\n return {\n kind: \"list\",\n id: \"uidex-explore-page\",\n items,\n emptyLabel: \"No uidex-annotated elements on this page\",\n filter,\n onSelect: (item) => ctx.navigate((item as ExplorePageItem).ref),\n }\n },\n}\n","import { BUILT_IN_VIEW_IDS } from \"../ids\"\nimport { createFeedbackView } from \"./view-builder\"\n\nexport const feedbackView = createFeedbackView({\n id: BUILT_IN_VIEW_IDS.feedback,\n resolveCloud: (ctx) => ctx.cloud,\n componentId: (ctx) => (ctx.ref ? `${ctx.ref.kind}:${ctx.ref.id}` : \"unknown\"),\n submitLabels: { ready: \"Send feedback\", noCloud: \"Copy report\" },\n successToast: (result) => {\n const ticketKey =\n result.externalLink?.ok && result.externalLink.key\n ? result.externalLink.key\n : null\n return ticketKey\n ? `Feedback submitted (${ticketKey})`\n : \"Feedback submitted\"\n },\n failureToast: (err) => {\n const message = err instanceof Error ? err.message : String(err)\n return `Failed: ${message}`\n },\n})\n","import {\n displayName,\n entityKey,\n isMetaEntity,\n type Entity,\n} from \"../../entities\"\nimport type {\n DetailAction,\n DetailSection,\n DetailSurface,\n} from \"../core/surface\"\nimport type { View } from \"../core/types\"\nimport { copyPathAction, feedbackAction } from \"../builder/detail-builder\"\n\nexport const flowDetailView: View = {\n id: \"flow-detail\",\n matches: (ref) => ref.kind === \"flow\",\n title: (ctx) => {\n if (!ctx.ref) return \"Flow\"\n const entity = ctx.registry.get(\"flow\", ctx.ref.id)\n return entity ? displayName(entity) : ctx.ref.id\n },\n focusTarget: (host) =>\n host.querySelector<HTMLButtonElement>(\n \"[data-uidex-detail-actions] [data-uidex-detail-action]\"\n ),\n surface: (ctx): DetailSurface => {\n if (!ctx.ref || ctx.ref.kind !== \"flow\") {\n return { kind: \"detail\", entityKind: \"flow\" }\n }\n const flow = ctx.registry.get(\"flow\", ctx.ref.id)\n if (!flow) {\n return { kind: \"detail\", entityKind: \"flow\", notFound: ctx.ref }\n }\n\n const touched: Entity[] = []\n const seen = new Set<string>()\n for (const touchedEntity of ctx.registry.touchedBy(flow.id)) {\n if (!isMetaEntity(touchedEntity)) continue\n const key = `${touchedEntity.kind}:${touchedEntity.id}`\n if (seen.has(key)) continue\n seen.add(key)\n touched.push(touchedEntity)\n }\n const touchedIds = new Set(touched.map((t) => entityKey(t)))\n const unresolved = flow.touches.filter((id) => !touchedIds.has(id))\n\n const actions: DetailAction[] = [\n copyPathAction(ctx.ref, flow.loc),\n feedbackAction(ctx.ref),\n ]\n\n const sections: DetailSection[] = [\n {\n id: \"touches\",\n entities: touched,\n unresolved,\n filterable: true,\n },\n ]\n\n return {\n kind: \"detail\",\n entityKind: \"flow\",\n title: displayName(flow),\n actions,\n sections,\n }\n },\n}\n","import { BookOpen, createElement as createLucideElement } from \"lucide\"\nimport {\n ENTITY_KINDS,\n KIND_STYLE,\n type Entity,\n type EntityKind,\n} from \"../../entities\"\nimport type { ListItem, ListSurface } from \"../core/surface\"\nimport type { View } from \"../core/types\"\nimport { PALETTE_GROUPS } from \"../labels\"\nimport { BUILT_IN_VIEW_IDS } from \"./ids\"\n\nconst DESCRIPTIONS: Record<EntityKind, string> = {\n route: \"URL to page mapping, derived from the framework router.\",\n page: \"Route-rendered top-level. Declared via uidex module export.\",\n feature: \"Cross-cutting capability spanning multiple pages.\",\n widget: \"Composite behavioural unit (player, picker, editor).\",\n region: \"Structural area. HTML5 landmark or data-uidex-region.\",\n element: \"Interactive DOM node tagged with data-uidex.\",\n primitive: \"Reusable presentational component under src/components/ui.\",\n flow: \"End-to-end user journey defined by a Playwright describe.\",\n}\n\nfunction syntheticEntity(kind: EntityKind): Entity {\n if (kind === \"route\") return { kind: \"route\", path: kind, page: kind }\n if (kind === \"flow\")\n return { kind: \"flow\", id: kind, loc: { file: \"\" }, touches: [] }\n return { kind, id: kind }\n}\n\nexport const glossaryView: View = {\n id: BUILT_IN_VIEW_IDS.glossary,\n palette: {\n label: \"Glossary\",\n group: PALETTE_GROUPS.commands,\n icon: () => createLucideElement(BookOpen),\n },\n title: \"Glossary\",\n hints: [],\n focusTarget: () => null,\n surface: (): ListSurface => {\n const items: ListItem[] = ENTITY_KINDS.map((kind) => ({\n value: `glossary:${kind}`,\n label: KIND_STYLE[kind].label,\n subtitle: DESCRIPTIONS[kind],\n tag: kind,\n entityChip: { entity: syntheticEntity(kind) },\n }))\n return {\n kind: \"list\",\n id: \"uidex-glossary\",\n items,\n }\n },\n}\n","export { BUILT_IN_VIEW_IDS } from \"./ids\"\n\nimport { commandPaletteView } from \"./command-palette\"\nimport {\n componentDetailView,\n featureDetailView,\n pageDetailView,\n primitiveDetailView,\n regionDetailView,\n widgetDetailView,\n} from \"./entity-detail\"\nimport { explorePageView } from \"./explore-page\"\nimport { feedbackView } from \"./feedback/host-feedback\"\nimport { sdkFeedbackView } from \"./feedback/sdk-feedback\"\nimport { flowDetailView } from \"./flow-detail\"\nimport { glossaryView } from \"./glossary\"\n\nexport { commandPaletteView } from \"./command-palette\"\nexport {\n componentDetailView,\n featureDetailView,\n pageDetailView,\n primitiveDetailView,\n regionDetailView,\n widgetDetailView,\n} from \"./entity-detail\"\nexport { explorePageView } from \"./explore-page\"\nexport { feedbackView } from \"./feedback/host-feedback\"\nexport { sdkFeedbackView } from \"./feedback/sdk-feedback\"\nexport { flowDetailView } from \"./flow-detail\"\nexport { glossaryView } from \"./glossary\"\n\nexport const DEFAULT_VIEWS = [\n commandPaletteView,\n explorePageView,\n componentDetailView,\n pageDetailView,\n featureDetailView,\n widgetDetailView,\n flowDetailView,\n primitiveDetailView,\n regionDetailView,\n feedbackView,\n sdkFeedbackView,\n glossaryView,\n] as const\n","import { sdkCloud } from \"./cloud/sdk-cloud\"\nimport { createRegistry, KIND_STYLE, type Registry } from \"./entities\"\nimport { reportUidexIssueAction } from \"./views/built-in/feedback/sdk-feedback\"\nimport {\n createIngest,\n resolveIngestOptions,\n type Ingest,\n type IngestOptions,\n} from \"./ingest\"\nimport type { HighlightContext } from \"./flows/highlight\"\nimport { createCleanupStack } from \"./internal/cleanup\"\nimport {\n createSession,\n type ResolvedTheme,\n type SessionStore,\n type ThemePreference,\n} from \"./session\"\nimport {\n bindShadowKeys,\n createSurfaceShell,\n resolveEntityElement,\n type Corner,\n type Inspector,\n type Overlay,\n} from \"./surface\"\nimport {\n createViewRegistrar,\n createViewStack,\n DEFAULT_VIEWS,\n type CloudAdapter,\n type HighlightController,\n type View,\n type ViewRegistrar,\n} from \"./views\"\n\nexport interface CreateUidexOptions {\n theme?: ThemePreference\n resolvedTheme?: ResolvedTheme\n stylesheets?: string[]\n initialCorner?: Corner\n /** Shown as a label at the start of the menu bar. */\n appTitle?: string\n cloud?: CloudAdapter | null\n dev?: boolean\n /** Register bundled default views. Defaults to `true`. */\n defaultViews?: boolean\n /** Additional views to register (after defaults). */\n views?: readonly View[]\n /**\n * Override ingest behaviour. When `cloud` is non-null, ingest auto-enables\n * (both console and network capture). Pass `null` to disable entirely, or\n * an options object to override either channel.\n */\n ingest?: IngestOptions | null\n}\n\nexport interface Uidex {\n mount(target?: Element): void\n unmount(): void\n readonly registry: Registry\n readonly session: SessionStore\n readonly views: ViewRegistrar\n readonly cloud: CloudAdapter | null\n readonly ingest: Ingest | null\n readonly shadowRoot: ShadowRoot | null\n}\n\nexport function createUidex(options: CreateUidexOptions = {}): Uidex {\n const registry = createRegistry()\n\n // Mutable refs filled in during mount(); session bindings close over them so\n // the surface machine's actions can mount the inspector and drive the\n // overlay once the shell exists.\n const inspectorRef: { current: Inspector | null } = { current: null }\n const overlayRef: { current: Overlay | null } = { current: null }\n\n const applyOverlay = (ctx: HighlightContext): void => {\n const overlay = overlayRef.current\n if (!overlay) return\n const ref = ctx.pinnedRef ?? ctx.ref\n if (!ref) return\n const el = ctx.element ?? resolveEntityElement(ref)\n if (!el) {\n overlay.hide()\n return\n }\n overlay.show(el, { color: ctx.color ?? KIND_STYLE[ref.kind].color })\n }\n\n const session = createSession({\n theme: options.theme,\n resolvedTheme: options.resolvedTheme,\n bindings: {\n surface: {\n mountInspector: () => inspectorRef.current?.mount(),\n destroyInspector: () => inspectorRef.current?.destroy(),\n },\n highlight: {\n showOverlay: applyOverlay,\n hideOverlay: () => overlayRef.current?.hide(),\n updateOverlay: applyOverlay,\n },\n },\n })\n const views = createViewRegistrar({ session, dev: options.dev })\n const cloud = options.cloud ?? null\n const ingestOpts = resolveIngestOptions(options.ingest, cloud !== null)\n const ingest = ingestOpts ? createIngest({ session, ...ingestOpts }) : null\n\n if (options.defaultViews !== false) {\n for (const view of DEFAULT_VIEWS) views.register(view)\n }\n if (options.views) {\n for (const view of options.views) views.register(view)\n }\n\n let shadowRoot: ShadowRoot | null = null\n const mountCleanup = createCleanupStack()\n let mounted = false\n\n function mount(target?: Element): void {\n if (mounted) return\n const mountTarget =\n target ?? (typeof document !== \"undefined\" ? document.body : null)\n if (!mountTarget) {\n throw new Error(\"createUidex: no mount target available\")\n }\n\n const shell = createSurfaceShell({\n mount: mountTarget,\n registry,\n session,\n stylesheets: options.stylesheets,\n initialCorner: options.initialCorner,\n appTitle: options.appTitle,\n inspector: {\n onSelect: (match) => {\n const view = views.findMatch(match.ref)\n if (!view) return\n session.send({\n type: \"SELECT\",\n ref: match.ref,\n entry: { id: view.id, ref: match.ref },\n })\n },\n },\n })\n shadowRoot = shell.host.shadowRoot\n inspectorRef.current = shell.inspector\n overlayRef.current = shell.overlay\n mountCleanup.add(shell)\n mountCleanup.add(() => {\n inspectorRef.current = null\n overlayRef.current = null\n })\n\n const highlight: HighlightController = {\n show(ref, opts) {\n const el = resolveEntityElement(ref)\n if (!el) {\n session.send({ type: \"UNHOVER\" })\n return\n }\n session.send({\n type: \"HOVER\",\n ref,\n element: el,\n color: opts?.color ?? null,\n })\n },\n hide() {\n session.send({ type: \"UNHOVER\" })\n },\n }\n\n const viewContainer = document.createElement(\"div\")\n viewContainer.setAttribute(\"data-uidex-views\", \"\")\n shell.host.chromeEl.appendChild(viewContainer)\n mountCleanup.add(() => viewContainer.remove())\n\n const viewStack = createViewStack({\n container: viewContainer,\n views,\n session,\n registry,\n cloud,\n sdkCloud,\n highlight,\n globalActions: (ctx) => [reportUidexIssueAction(ctx)],\n })\n mountCleanup.add(viewStack)\n\n if (shadowRoot) {\n mountCleanup.add(\n bindShadowKeys({\n shadowRoot,\n session,\n getActionsPopup: () => viewStack.getActionsPopup(),\n })\n )\n }\n\n if (ingest) {\n ingest.start()\n mountCleanup.add(() => ingest.stop())\n }\n\n mounted = true\n }\n\n function unmount(): void {\n if (!mounted) return\n mountCleanup.drain()\n shadowRoot = null\n mounted = false\n }\n\n return {\n mount,\n unmount,\n registry,\n session,\n views,\n cloud,\n ingest,\n get shadowRoot() {\n return shadowRoot\n },\n }\n}\n","import { useContext } from \"react\"\nimport type { Uidex } from \"../create-uidex\"\nimport { UidexContext } from \"./provider\"\n\nexport class UidexContextError extends Error {\n constructor(hookName: string) {\n super(\n `${hookName} must be called inside <UidexProvider>. Wrap your tree with <UidexProvider>.`\n )\n this.name = \"UidexContextError\"\n }\n}\n\nexport function useUidex(): Uidex {\n const ctx = useContext(UidexContext)\n if (!ctx) throw new UidexContextError(\"useUidex\")\n return ctx\n}\n","import { useEffect, useRef } from \"react\"\nimport { useUidex } from \"./hooks\"\n\nexport interface UidexMountProps {\n className?: string\n}\n\nexport function UidexMount({ className }: UidexMountProps) {\n const uidex = useUidex()\n const ref = useRef<HTMLDivElement | null>(null)\n\n useEffect(() => {\n const node = ref.current\n if (!node) return\n uidex.mount(node)\n return () => {\n uidex.unmount()\n }\n }, [uidex])\n\n return <div ref={ref} className={className} data-uidex-mount=\"\" />\n}\n","import { createElement, type ComponentType } from \"react\"\nimport { createRoot } from \"react-dom/client\"\nimport type { EntityRef } from \"../entities\"\nimport type { View, ViewContext, ViewPalette } from \"../views\"\n\nexport interface ReactViewDef {\n id: string\n matches?: (ref: EntityRef) => boolean\n palette?: ViewPalette\n component: ComponentType<{ ctx: ViewContext }>\n}\n\nexport function createReactView(def: ReactViewDef): View {\n return {\n id: def.id,\n matches: def.matches,\n palette: def.palette,\n surface: () => ({\n kind: \"custom\",\n render(ctx, root) {\n const reactRoot = createRoot(root)\n reactRoot.render(createElement(def.component, { ctx }))\n return () => {\n reactRoot.unmount()\n }\n },\n }),\n }\n}\n","\"use client\"\n\nimport { clsx } from \"clsx\"\nimport {\n Circle,\n FileText,\n LayoutGrid,\n LayoutPanelTop,\n MousePointerClick,\n Route as RouteIcon,\n Sparkles,\n Workflow,\n type LucideIcon,\n} from \"lucide-react\"\nimport type { ReactElement } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\nimport { KIND_STYLE, type EntityKind } from \"../entities\"\n\nconst REACT_ICONS: Record<EntityKind, LucideIcon> = {\n route: RouteIcon,\n page: FileText,\n feature: Sparkles,\n widget: LayoutGrid,\n region: LayoutPanelTop,\n element: MousePointerClick,\n primitive: Circle,\n flow: Workflow,\n}\n\nexport interface KindChipProps {\n kind: EntityKind\n label?: string\n withKindName?: boolean\n className?: string\n}\n\nexport function KindChip({\n kind,\n label,\n withKindName,\n className,\n}: KindChipProps): ReactElement {\n const style = KIND_STYLE[kind]\n const Icon = REACT_ICONS[kind]\n const text = withKindName\n ? label\n ? `${style.label} · ${label}`\n : style.label\n : label\n return (\n <span\n data-uidex-kind-chip={kind}\n className={twMerge(\n clsx(\n \"text-muted-foreground inline-flex items-center gap-1.5 text-xs font-medium\",\n className\n )\n )}\n >\n <Icon\n aria-hidden=\"true\"\n className={twMerge(clsx(\"h-4 w-4 shrink-0\", style.tone))}\n />\n {text ? <span className=\"truncate\">{text}</span> : null}\n </span>\n )\n}\n"],"mappings":"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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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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":["successToast","cloud","DEFAULT_LIMIT","assign","setup","initialContext","setup","assign","el","el","state","createLucideElement","createLucideElement","connect","machine","createLucideElement","createButton","createButton","createButton","createLucideElement","idx","createActor","fromPromise","assign","setup","initialContext","createLucideElement","createActor","fromPromise","createLucideElement","Circle","scrollArea","createLucideElement","Circle","scrollArea","createLucideElement","menu","createLucideElement","sameRef","sdkCloud","cloud","createLucideElement","createLucideElement","Compass","createLucideElement","capitalize","createLucideElement","Compass","createLucideElement","createLucideElement","el","cloud","cloud","useEffect","jsx","useEffect","clsx","Circle","FileText","LayoutGrid","LayoutPanelTop","MousePointerClick","RouteIcon","Sparkles","Workflow","twMerge","jsx","RouteIcon","FileText","Sparkles","LayoutGrid","LayoutPanelTop","MousePointerClick","Circle","Workflow","twMerge","clsx"]}