@agent-native/core 0.12.30 → 0.12.32

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 (82) hide show
  1. package/dist/agent/run-manager.d.ts.map +1 -1
  2. package/dist/agent/run-manager.js +21 -5
  3. package/dist/agent/run-manager.js.map +1 -1
  4. package/dist/client/AgentPanel.d.ts.map +1 -1
  5. package/dist/client/AgentPanel.js +10 -3
  6. package/dist/client/AgentPanel.js.map +1 -1
  7. package/dist/client/AssistantChat.d.ts.map +1 -1
  8. package/dist/client/AssistantChat.js +234 -23
  9. package/dist/client/AssistantChat.js.map +1 -1
  10. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  11. package/dist/client/MultiTabAssistantChat.js +9 -8
  12. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  13. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  14. package/dist/client/agent-chat-adapter.js +23 -4
  15. package/dist/client/agent-chat-adapter.js.map +1 -1
  16. package/dist/client/components/ui/hover-card.d.ts +7 -0
  17. package/dist/client/components/ui/hover-card.d.ts.map +1 -0
  18. package/dist/client/components/ui/hover-card.js +10 -0
  19. package/dist/client/components/ui/hover-card.js.map +1 -0
  20. package/dist/client/composer/TiptapComposer.js +1 -1
  21. package/dist/client/composer/TiptapComposer.js.map +1 -1
  22. package/dist/client/dev-overlay/DevOverlay.d.ts.map +1 -1
  23. package/dist/client/dev-overlay/DevOverlay.js +5 -1
  24. package/dist/client/dev-overlay/DevOverlay.js.map +1 -1
  25. package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
  26. package/dist/client/extensions/ExtensionsSidebarSection.js +3 -2
  27. package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
  28. package/dist/client/guided-questions.d.ts +77 -0
  29. package/dist/client/guided-questions.d.ts.map +1 -0
  30. package/dist/client/guided-questions.js +295 -0
  31. package/dist/client/guided-questions.js.map +1 -0
  32. package/dist/client/index.d.ts +1 -0
  33. package/dist/client/index.d.ts.map +1 -1
  34. package/dist/client/index.js +1 -0
  35. package/dist/client/index.js.map +1 -1
  36. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  37. package/dist/client/org/OrgSwitcher.js +8 -1
  38. package/dist/client/org/OrgSwitcher.js.map +1 -1
  39. package/dist/client/settings/SettingsPanel.d.ts +3 -1
  40. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  41. package/dist/client/settings/SettingsPanel.js +78 -12
  42. package/dist/client/settings/SettingsPanel.js.map +1 -1
  43. package/dist/client/settings/SettingsSection.d.ts +2 -1
  44. package/dist/client/settings/SettingsSection.d.ts.map +1 -1
  45. package/dist/client/settings/SettingsSection.js +2 -2
  46. package/dist/client/settings/SettingsSection.js.map +1 -1
  47. package/dist/client/sharing/ShareButton.d.ts +4 -0
  48. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  49. package/dist/client/sharing/ShareButton.js +76 -32
  50. package/dist/client/sharing/ShareButton.js.map +1 -1
  51. package/dist/client/sharing/ShareButton.spec.js +54 -7
  52. package/dist/client/sharing/ShareButton.spec.js.map +1 -1
  53. package/dist/client/sse-event-processor.d.ts.map +1 -1
  54. package/dist/client/sse-event-processor.js +42 -5
  55. package/dist/client/sse-event-processor.js.map +1 -1
  56. package/dist/client/use-db-sync.d.ts +12 -2
  57. package/dist/client/use-db-sync.d.ts.map +1 -1
  58. package/dist/client/use-db-sync.js +195 -53
  59. package/dist/client/use-db-sync.js.map +1 -1
  60. package/dist/server/core-routes-plugin.js +2 -2
  61. package/dist/server/core-routes-plugin.js.map +1 -1
  62. package/dist/server/google-auth-plugin.d.ts.map +1 -1
  63. package/dist/server/google-auth-plugin.js +18 -2
  64. package/dist/server/google-auth-plugin.js.map +1 -1
  65. package/dist/server/index.d.ts +2 -1
  66. package/dist/server/index.d.ts.map +1 -1
  67. package/dist/server/index.js +2 -1
  68. package/dist/server/index.js.map +1 -1
  69. package/dist/server/onboarding-html.d.ts.map +1 -1
  70. package/dist/server/onboarding-html.js +18 -2
  71. package/dist/server/onboarding-html.js.map +1 -1
  72. package/dist/server/poll-events.d.ts +12 -0
  73. package/dist/server/poll-events.d.ts.map +1 -0
  74. package/dist/server/poll-events.js +41 -0
  75. package/dist/server/poll-events.js.map +1 -0
  76. package/dist/server/poll.d.ts +4 -0
  77. package/dist/server/poll.d.ts.map +1 -1
  78. package/dist/server/poll.js +19 -12
  79. package/dist/server/poll.js.map +1 -1
  80. package/dist/templates/default/react-router.config.ts +1 -0
  81. package/package.json +2 -1
  82. package/src/templates/default/react-router.config.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"DevOverlay.js","sourceRoot":"","sources":["../../../src/client/dev-overlay/DevOverlay.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * <DevOverlay /> — the framework dev/configuration panel.\n *\n * Templates render this once at the root of their app. The user toggles it\n * with Cmd+Ctrl+A (also exposed as `useDevOverlayShortcut`). Panels register\n * via `registerDevPanel`; values for option-style controls persist to\n * localStorage via `useDevOption`.\n *\n * Visibility note: the overlay only mounts when the host explicitly opens it\n * via the keybinding (or the `open` prop). It is dev-only by convention —\n * shipping with the keybinding active in prod is fine because nothing renders\n * unless invoked.\n */\n\nimport {\n useCallback,\n useEffect,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\nimport {\n IconChevronDown,\n IconChevronRight,\n IconLoader2,\n IconRefresh,\n IconTrash,\n IconX,\n} from \"@tabler/icons-react\";\nimport { listDevPanels, subscribeDevPanels } from \"./registry.js\";\nimport {\n clearAllDevOverlayStorage,\n useDevOption,\n DEV_OVERLAY_STORAGE_PREFIX,\n} from \"./use-dev-option.js\";\nimport { useDevOverlayShortcut } from \"./use-dev-overlay-shortcut.js\";\nimport type {\n DevActionOption,\n DevBooleanOption,\n DevOption,\n DevPanel,\n DevSelectOption,\n DevStringOption,\n} from \"./types.js\";\nimport \"./builtins.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\nconst PANEL_OPEN_KEY = `${DEV_OVERLAY_STORAGE_PREFIX}open`;\nconst COLLAPSED_KEY_PREFIX = `${DEV_OVERLAY_STORAGE_PREFIX}collapsed-`;\n\nexport interface DevOverlayProps {\n /**\n * Force-control the overlay's visibility. When omitted the overlay manages\n * its own state and listens to Cmd+Ctrl+A.\n */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function DevOverlay({ open, onOpenChange }: DevOverlayProps = {}) {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = open !== undefined;\n const isOpen = isControlled ? open : internalOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n useDevOverlayShortcut(useCallback(() => setOpen(!isOpen), [isOpen, setOpen]));\n\n // Esc closes (only when overlay is the topmost UI — skip when typing).\n useEffect(() => {\n if (!isOpen) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n const target = e.target as HTMLElement | null;\n if (\n target &&\n (target.tagName === \"INPUT\" ||\n target.tagName === \"TEXTAREA\" ||\n target.isContentEditable)\n ) {\n return;\n }\n setOpen(false);\n };\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, [isOpen, setOpen]);\n\n if (!isOpen) return null;\n return <DevOverlayPanel onClose={() => setOpen(false)} />;\n}\n\nfunction DevOverlayPanel({ onClose }: { onClose: () => void }) {\n const panels = useSyncExternalStore(\n subscribeDevPanels,\n listDevPanels,\n listDevPanels,\n );\n\n return (\n <TooltipProvider delayDuration={200}>\n <div style={styles.shell} role=\"dialog\" aria-label=\"Dev overlay\">\n <div style={styles.header}>\n <div>\n <div style={styles.headerTitle}>Dev Overlay</div>\n <div style={styles.headerSub}>Cmd+Ctrl+A · localStorage-backed</div>\n </div>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n style={styles.iconBtn}\n onClick={onClose}\n aria-label=\"Close\"\n >\n <IconX size={16} />\n </button>\n </TooltipTrigger>\n <TooltipContent>Close (Esc)</TooltipContent>\n </Tooltip>\n </div>\n\n <div style={styles.body}>\n {panels.length === 0 ? (\n <div style={styles.empty}>\n No panels registered. Call <code>registerDevPanel(...)</code> from\n your template to add options here.\n </div>\n ) : (\n panels.map((panel) => <DevPanelCard key={panel.id} panel={panel} />)\n )}\n </div>\n\n <div style={styles.footer}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n style={{ ...styles.footerBtn, ...styles.footerBtnDanger }}\n onClick={() => {\n clearAllDevOverlayStorage();\n }}\n >\n <IconTrash size={13} />\n Clear all dev-overlay values\n </button>\n </TooltipTrigger>\n <TooltipContent>\n Reset every dev-overlay value back to its default\n </TooltipContent>\n </Tooltip>\n </div>\n </div>\n </TooltipProvider>\n );\n}\n\nfunction DevPanelCard({ panel }: { panel: DevPanel }) {\n const [collapsedRaw, setCollapsedRaw] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n try {\n return (\n window.localStorage.getItem(`${COLLAPSED_KEY_PREFIX}${panel.id}`) ===\n \"1\"\n );\n } catch {\n return false;\n }\n });\n const setCollapsed = (next: boolean) => {\n setCollapsedRaw(next);\n try {\n window.localStorage.setItem(\n `${COLLAPSED_KEY_PREFIX}${panel.id}`,\n next ? \"1\" : \"0\",\n );\n } catch {\n // ignore — collapsed state is just UX sugar\n }\n };\n\n return (\n <div style={styles.panel}>\n <button\n type=\"button\"\n style={styles.panelHeader}\n onClick={() => setCollapsed(!collapsedRaw)}\n >\n {collapsedRaw ? (\n <IconChevronRight size={14} />\n ) : (\n <IconChevronDown size={14} />\n )}\n <span style={styles.panelLabel}>{panel.label}</span>\n </button>\n {!collapsedRaw && (\n <div style={styles.panelBody}>\n {panel.description && (\n <div style={styles.panelDesc}>{panel.description}</div>\n )}\n {(panel.options ?? []).map((option) => (\n <DevOptionRow key={option.id} panelId={panel.id} option={option} />\n ))}\n {panel.render ? (\n <div style={styles.customRender}>{panel.render()}</div>\n ) : null}\n </div>\n )}\n </div>\n );\n}\n\nfunction DevOptionRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevOption;\n}) {\n if (option.type === \"boolean\") {\n return <DevBooleanRow panelId={panelId} option={option} />;\n }\n if (option.type === \"select\") {\n return <DevSelectRow panelId={panelId} option={option} />;\n }\n if (option.type === \"string\") {\n return <DevStringRow panelId={panelId} option={option} />;\n }\n return <DevActionRow option={option} />;\n}\n\nfunction DevBooleanRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevBooleanOption;\n}) {\n const [value, setValue] = useDevOption(\n panelId,\n option.id,\n option.default ?? false,\n );\n return (\n <label style={styles.row}>\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <input\n type=\"checkbox\"\n checked={!!value}\n onChange={(e) => {\n const next = e.target.checked;\n setValue(next);\n option.onChange?.(next);\n }}\n style={styles.checkbox}\n />\n </label>\n );\n}\n\nfunction DevSelectRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevSelectOption;\n}) {\n const [value, setValue] = useDevOption(\n panelId,\n option.id,\n option.default ?? option.choices[0]?.value ?? \"\",\n );\n return (\n <div style={styles.row}>\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <select\n value={value}\n onChange={(e) => {\n const next = e.target.value;\n setValue(next);\n option.onChange?.(next);\n }}\n style={styles.select}\n >\n {option.choices.map((c) => (\n <option key={c.value} value={c.value}>\n {c.label}\n </option>\n ))}\n </select>\n </div>\n );\n}\n\nfunction DevStringRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevStringOption;\n}) {\n const [value, setValue] = useDevOption(\n panelId,\n option.id,\n option.default ?? \"\",\n );\n return (\n <div\n style={{ ...styles.row, alignItems: \"stretch\", flexDirection: \"column\" }}\n >\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <input\n type=\"text\"\n value={value}\n placeholder={option.placeholder}\n onChange={(e) => {\n const next = e.target.value;\n setValue(next);\n option.onChange?.(next);\n }}\n style={styles.input}\n />\n </div>\n );\n}\n\nfunction DevActionRow({ option }: { option: DevActionOption }) {\n const [busy, setBusy] = useState(false);\n return (\n <div style={styles.row}>\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <button\n type=\"button\"\n disabled={busy}\n onClick={async () => {\n setBusy(true);\n try {\n await option.onClick();\n } finally {\n setBusy(false);\n }\n }}\n style={{\n ...styles.actionBtn,\n ...(option.destructive ? styles.actionBtnDanger : {}),\n }}\n >\n {busy ? (\n <IconLoader2\n size={13}\n style={{ animation: \"spin 1s linear infinite\" }}\n />\n ) : (\n <IconRefresh size={13} />\n )}\n {option.buttonLabel ?? option.label}\n </button>\n </div>\n );\n}\n\n// Shadow / border styles tuned to read well over both light and dark app\n// chrome — the overlay is dev-only so we don't bother with theme tokens.\nconst styles: Record<string, React.CSSProperties> = {\n shell: {\n position: \"fixed\",\n top: 16,\n right: 16,\n width: 380,\n maxWidth: \"calc(100vw - 32px)\",\n // Sized to content; capped so it never spills off-screen on small windows.\n maxHeight: \"calc(100vh - 32px)\",\n background: \"rgba(20, 20, 23, 0.96)\",\n color: \"#f4f4f5\",\n border: \"1px solid rgba(255,255,255,0.08)\",\n borderRadius: 12,\n boxShadow: \"0 24px 60px rgba(0,0,0,0.5)\",\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, system-ui, 'Segoe UI', sans-serif\",\n fontSize: 13,\n zIndex: 2147483646,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n },\n header: {\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n padding: \"14px 16px\",\n borderBottom: \"1px solid rgba(255,255,255,0.06)\",\n },\n headerTitle: { fontWeight: 600, fontSize: 14 },\n headerSub: { fontSize: 11, opacity: 0.55, marginTop: 2 },\n iconBtn: {\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n cursor: \"pointer\",\n padding: 4,\n borderRadius: 6,\n display: \"inline-flex\",\n alignItems: \"center\",\n },\n body: {\n padding: 12,\n overflowY: \"auto\",\n flex: 1,\n // Required to let `overflow-y: auto` actually scroll inside a flex column.\n // Without this, flex children grow to fit content and the scroll never\n // engages.\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n },\n empty: {\n padding: 16,\n fontSize: 12,\n opacity: 0.7,\n background: \"rgba(255,255,255,0.03)\",\n borderRadius: 8,\n border: \"1px dashed rgba(255,255,255,0.1)\",\n },\n panel: {\n background: \"rgba(255,255,255,0.03)\",\n border: \"1px solid rgba(255,255,255,0.06)\",\n borderRadius: 8,\n overflow: \"hidden\",\n },\n panelHeader: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n width: \"100%\",\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n padding: \"10px 12px\",\n cursor: \"pointer\",\n fontSize: 13,\n textAlign: \"left\",\n },\n panelLabel: { fontWeight: 600 },\n panelBody: {\n padding: \"0 12px 12px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 10,\n },\n panelDesc: { fontSize: 11, opacity: 0.65, lineHeight: 1.4 },\n customRender: { marginTop: 4 },\n row: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n },\n rowLabels: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n flex: 1,\n minWidth: 0,\n },\n rowLabel: { fontSize: 13 },\n rowDesc: { fontSize: 11, opacity: 0.6, lineHeight: 1.4 },\n checkbox: {\n width: 16,\n height: 16,\n cursor: \"pointer\",\n accentColor: \"#3b82f6\",\n },\n select: {\n background: \"rgba(255,255,255,0.06)\",\n color: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.1)\",\n borderRadius: 6,\n padding: \"4px 8px\",\n fontSize: 12,\n minWidth: 120,\n cursor: \"pointer\",\n },\n input: {\n background: \"rgba(255,255,255,0.06)\",\n color: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.1)\",\n borderRadius: 6,\n padding: \"6px 8px\",\n fontSize: 12,\n width: \"100%\",\n boxSizing: \"border-box\",\n },\n actionBtn: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n background: \"rgba(59,130,246,0.15)\",\n color: \"#bfdbfe\",\n border: \"1px solid rgba(59,130,246,0.3)\",\n borderRadius: 6,\n padding: \"5px 10px\",\n fontSize: 12,\n cursor: \"pointer\",\n fontWeight: 500,\n },\n actionBtnDanger: {\n background: \"rgba(239,68,68,0.15)\",\n color: \"#fecaca\",\n border: \"1px solid rgba(239,68,68,0.3)\",\n },\n footer: {\n padding: 10,\n borderTop: \"1px solid rgba(255,255,255,0.06)\",\n display: \"flex\",\n justifyContent: \"flex-end\",\n },\n footerBtn: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n background: \"transparent\",\n color: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.12)\",\n borderRadius: 6,\n padding: \"5px 10px\",\n fontSize: 11,\n cursor: \"pointer\",\n },\n footerBtnDanger: { color: \"#fecaca\", borderColor: \"rgba(239,68,68,0.3)\" },\n};\n\n// Inject keyframes for the spinner once.\nif (\n typeof document !== \"undefined\" &&\n !document.getElementById(\"agent-native-dev-overlay-keyframes\")\n) {\n const styleEl = document.createElement(\"style\");\n styleEl.id = \"agent-native-dev-overlay-keyframes\";\n styleEl.textContent = \"@keyframes spin { to { transform: rotate(360deg); } }\";\n document.head.appendChild(styleEl);\n}\n\n// `ReactNode` is intentionally re-imported here so the file is self-contained\n// when consumed via the package's exports map.\nexport type { ReactNode };\n"]}
1
+ {"version":3,"file":"DevOverlay.js","sourceRoot":"","sources":["../../../src/client/dev-overlay/DevOverlay.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * <DevOverlay /> — the framework dev/configuration panel.\n *\n * Templates render this once at the root of their app. The user toggles it\n * with Cmd+Ctrl+A (also exposed as `useDevOverlayShortcut`). Panels register\n * via `registerDevPanel`; values for option-style controls persist to\n * localStorage via `useDevOption`.\n *\n * Visibility note: the overlay only mounts when the host explicitly opens it\n * via the keybinding (or the `open` prop). It is dev-only by convention —\n * shipping with the keybinding active in prod is fine because nothing renders\n * unless invoked.\n */\n\nimport {\n useCallback,\n useEffect,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\nimport {\n IconChevronDown,\n IconChevronRight,\n IconLoader2,\n IconRefresh,\n IconTrash,\n IconX,\n} from \"@tabler/icons-react\";\nimport { listDevPanels, subscribeDevPanels } from \"./registry.js\";\nimport {\n clearAllDevOverlayStorage,\n useDevOption,\n DEV_OVERLAY_STORAGE_PREFIX,\n} from \"./use-dev-option.js\";\nimport { useDevOverlayShortcut } from \"./use-dev-overlay-shortcut.js\";\nimport type {\n DevActionOption,\n DevBooleanOption,\n DevOption,\n DevPanel,\n DevSelectOption,\n DevStringOption,\n} from \"./types.js\";\nimport \"./builtins.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\nconst PANEL_OPEN_KEY = `${DEV_OVERLAY_STORAGE_PREFIX}open`;\nconst COLLAPSED_KEY_PREFIX = `${DEV_OVERLAY_STORAGE_PREFIX}collapsed-`;\n\nexport interface DevOverlayProps {\n /**\n * Force-control the overlay's visibility. When omitted the overlay manages\n * its own state and listens to Cmd+Ctrl+A.\n */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function DevOverlay({ open, onOpenChange }: DevOverlayProps = {}) {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = open !== undefined;\n const isOpen = isControlled ? open : internalOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n useDevOverlayShortcut(useCallback(() => setOpen(!isOpen), [isOpen, setOpen]));\n\n // Esc closes (only when overlay is the topmost UI — skip when typing).\n useEffect(() => {\n if (!isOpen) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n const target = e.target as HTMLElement | null;\n if (\n target &&\n (target.tagName === \"INPUT\" ||\n target.tagName === \"TEXTAREA\" ||\n target.isContentEditable)\n ) {\n return;\n }\n setOpen(false);\n };\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, [isOpen, setOpen]);\n\n if (!isOpen) return null;\n return <DevOverlayPanel onClose={() => setOpen(false)} />;\n}\n\nfunction DevOverlayPanel({ onClose }: { onClose: () => void }) {\n const panels = useSyncExternalStore(\n subscribeDevPanels,\n listDevPanels,\n listDevPanels,\n );\n const shortcutHint =\n typeof navigator !== \"undefined\" &&\n /Mac|iPhone|iPad/.test(navigator.userAgent)\n ? \"Cmd+Ctrl+A\"\n : \"Ctrl+Alt+A\";\n\n return (\n <TooltipProvider delayDuration={200}>\n <div style={styles.shell} role=\"dialog\" aria-label=\"Dev overlay\">\n <div style={styles.header}>\n <div>\n <div style={styles.headerTitle}>Dev Overlay</div>\n <div style={styles.headerSub}>\n {shortcutHint} · localStorage-backed\n </div>\n </div>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n style={styles.iconBtn}\n onClick={onClose}\n aria-label=\"Close\"\n >\n <IconX size={16} />\n </button>\n </TooltipTrigger>\n <TooltipContent>Close (Esc)</TooltipContent>\n </Tooltip>\n </div>\n\n <div style={styles.body}>\n {panels.length === 0 ? (\n <div style={styles.empty}>\n No panels registered. Call <code>registerDevPanel(...)</code> from\n your template to add options here.\n </div>\n ) : (\n panels.map((panel) => <DevPanelCard key={panel.id} panel={panel} />)\n )}\n </div>\n\n <div style={styles.footer}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n style={{ ...styles.footerBtn, ...styles.footerBtnDanger }}\n onClick={() => {\n clearAllDevOverlayStorage();\n }}\n >\n <IconTrash size={13} />\n Clear all dev-overlay values\n </button>\n </TooltipTrigger>\n <TooltipContent>\n Reset every dev-overlay value back to its default\n </TooltipContent>\n </Tooltip>\n </div>\n </div>\n </TooltipProvider>\n );\n}\n\nfunction DevPanelCard({ panel }: { panel: DevPanel }) {\n const [collapsedRaw, setCollapsedRaw] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n try {\n return (\n window.localStorage.getItem(`${COLLAPSED_KEY_PREFIX}${panel.id}`) ===\n \"1\"\n );\n } catch {\n return false;\n }\n });\n const setCollapsed = (next: boolean) => {\n setCollapsedRaw(next);\n try {\n window.localStorage.setItem(\n `${COLLAPSED_KEY_PREFIX}${panel.id}`,\n next ? \"1\" : \"0\",\n );\n } catch {\n // ignore — collapsed state is just UX sugar\n }\n };\n\n return (\n <div style={styles.panel}>\n <button\n type=\"button\"\n style={styles.panelHeader}\n onClick={() => setCollapsed(!collapsedRaw)}\n >\n {collapsedRaw ? (\n <IconChevronRight size={14} />\n ) : (\n <IconChevronDown size={14} />\n )}\n <span style={styles.panelLabel}>{panel.label}</span>\n </button>\n {!collapsedRaw && (\n <div style={styles.panelBody}>\n {panel.description && (\n <div style={styles.panelDesc}>{panel.description}</div>\n )}\n {(panel.options ?? []).map((option) => (\n <DevOptionRow key={option.id} panelId={panel.id} option={option} />\n ))}\n {panel.render ? (\n <div style={styles.customRender}>{panel.render()}</div>\n ) : null}\n </div>\n )}\n </div>\n );\n}\n\nfunction DevOptionRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevOption;\n}) {\n if (option.type === \"boolean\") {\n return <DevBooleanRow panelId={panelId} option={option} />;\n }\n if (option.type === \"select\") {\n return <DevSelectRow panelId={panelId} option={option} />;\n }\n if (option.type === \"string\") {\n return <DevStringRow panelId={panelId} option={option} />;\n }\n return <DevActionRow option={option} />;\n}\n\nfunction DevBooleanRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevBooleanOption;\n}) {\n const [value, setValue] = useDevOption(\n panelId,\n option.id,\n option.default ?? false,\n );\n return (\n <label style={styles.row}>\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <input\n type=\"checkbox\"\n checked={!!value}\n onChange={(e) => {\n const next = e.target.checked;\n setValue(next);\n option.onChange?.(next);\n }}\n style={styles.checkbox}\n />\n </label>\n );\n}\n\nfunction DevSelectRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevSelectOption;\n}) {\n const [value, setValue] = useDevOption(\n panelId,\n option.id,\n option.default ?? option.choices[0]?.value ?? \"\",\n );\n return (\n <div style={styles.row}>\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <select\n value={value}\n onChange={(e) => {\n const next = e.target.value;\n setValue(next);\n option.onChange?.(next);\n }}\n style={styles.select}\n >\n {option.choices.map((c) => (\n <option key={c.value} value={c.value}>\n {c.label}\n </option>\n ))}\n </select>\n </div>\n );\n}\n\nfunction DevStringRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevStringOption;\n}) {\n const [value, setValue] = useDevOption(\n panelId,\n option.id,\n option.default ?? \"\",\n );\n return (\n <div\n style={{ ...styles.row, alignItems: \"stretch\", flexDirection: \"column\" }}\n >\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <input\n type=\"text\"\n value={value}\n placeholder={option.placeholder}\n onChange={(e) => {\n const next = e.target.value;\n setValue(next);\n option.onChange?.(next);\n }}\n style={styles.input}\n />\n </div>\n );\n}\n\nfunction DevActionRow({ option }: { option: DevActionOption }) {\n const [busy, setBusy] = useState(false);\n return (\n <div style={styles.row}>\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <button\n type=\"button\"\n disabled={busy}\n onClick={async () => {\n setBusy(true);\n try {\n await option.onClick();\n } finally {\n setBusy(false);\n }\n }}\n style={{\n ...styles.actionBtn,\n ...(option.destructive ? styles.actionBtnDanger : {}),\n }}\n >\n {busy ? (\n <IconLoader2\n size={13}\n style={{ animation: \"spin 1s linear infinite\" }}\n />\n ) : (\n <IconRefresh size={13} />\n )}\n {option.buttonLabel ?? option.label}\n </button>\n </div>\n );\n}\n\n// Shadow / border styles tuned to read well over both light and dark app\n// chrome — the overlay is dev-only so we don't bother with theme tokens.\nconst styles: Record<string, React.CSSProperties> = {\n shell: {\n position: \"fixed\",\n top: 16,\n right: 16,\n width: 380,\n maxWidth: \"calc(100vw - 32px)\",\n // Sized to content; capped so it never spills off-screen on small windows.\n maxHeight: \"calc(100vh - 32px)\",\n background: \"rgba(20, 20, 23, 0.96)\",\n color: \"#f4f4f5\",\n border: \"1px solid rgba(255,255,255,0.08)\",\n borderRadius: 12,\n boxShadow: \"0 24px 60px rgba(0,0,0,0.5)\",\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, system-ui, 'Segoe UI', sans-serif\",\n fontSize: 13,\n zIndex: 2147483646,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n },\n header: {\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n padding: \"14px 16px\",\n borderBottom: \"1px solid rgba(255,255,255,0.06)\",\n },\n headerTitle: { fontWeight: 600, fontSize: 14 },\n headerSub: { fontSize: 11, opacity: 0.55, marginTop: 2 },\n iconBtn: {\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n cursor: \"pointer\",\n padding: 4,\n borderRadius: 6,\n display: \"inline-flex\",\n alignItems: \"center\",\n },\n body: {\n padding: 12,\n overflowY: \"auto\",\n flex: 1,\n // Required to let `overflow-y: auto` actually scroll inside a flex column.\n // Without this, flex children grow to fit content and the scroll never\n // engages.\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n },\n empty: {\n padding: 16,\n fontSize: 12,\n opacity: 0.7,\n background: \"rgba(255,255,255,0.03)\",\n borderRadius: 8,\n border: \"1px dashed rgba(255,255,255,0.1)\",\n },\n panel: {\n background: \"rgba(255,255,255,0.03)\",\n border: \"1px solid rgba(255,255,255,0.06)\",\n borderRadius: 8,\n overflow: \"hidden\",\n },\n panelHeader: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n width: \"100%\",\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n padding: \"10px 12px\",\n cursor: \"pointer\",\n fontSize: 13,\n textAlign: \"left\",\n },\n panelLabel: { fontWeight: 600 },\n panelBody: {\n padding: \"0 12px 12px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 10,\n },\n panelDesc: { fontSize: 11, opacity: 0.65, lineHeight: 1.4 },\n customRender: { marginTop: 4 },\n row: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n },\n rowLabels: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n flex: 1,\n minWidth: 0,\n },\n rowLabel: { fontSize: 13 },\n rowDesc: { fontSize: 11, opacity: 0.6, lineHeight: 1.4 },\n checkbox: {\n width: 16,\n height: 16,\n cursor: \"pointer\",\n accentColor: \"#3b82f6\",\n },\n select: {\n background: \"rgba(255,255,255,0.06)\",\n color: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.1)\",\n borderRadius: 6,\n padding: \"4px 8px\",\n fontSize: 12,\n minWidth: 120,\n cursor: \"pointer\",\n },\n input: {\n background: \"rgba(255,255,255,0.06)\",\n color: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.1)\",\n borderRadius: 6,\n padding: \"6px 8px\",\n fontSize: 12,\n width: \"100%\",\n boxSizing: \"border-box\",\n },\n actionBtn: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n background: \"rgba(59,130,246,0.15)\",\n color: \"#bfdbfe\",\n border: \"1px solid rgba(59,130,246,0.3)\",\n borderRadius: 6,\n padding: \"5px 10px\",\n fontSize: 12,\n cursor: \"pointer\",\n fontWeight: 500,\n },\n actionBtnDanger: {\n background: \"rgba(239,68,68,0.15)\",\n color: \"#fecaca\",\n border: \"1px solid rgba(239,68,68,0.3)\",\n },\n footer: {\n padding: 10,\n borderTop: \"1px solid rgba(255,255,255,0.06)\",\n display: \"flex\",\n justifyContent: \"flex-end\",\n },\n footerBtn: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n background: \"transparent\",\n color: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.12)\",\n borderRadius: 6,\n padding: \"5px 10px\",\n fontSize: 11,\n cursor: \"pointer\",\n },\n footerBtnDanger: { color: \"#fecaca\", borderColor: \"rgba(239,68,68,0.3)\" },\n};\n\n// Inject keyframes for the spinner once.\nif (\n typeof document !== \"undefined\" &&\n !document.getElementById(\"agent-native-dev-overlay-keyframes\")\n) {\n const styleEl = document.createElement(\"style\");\n styleEl.id = \"agent-native-dev-overlay-keyframes\";\n styleEl.textContent = \"@keyframes spin { to { transform: rotate(360deg); } }\";\n document.head.appendChild(styleEl);\n}\n\n// `ReactNode` is intentionally re-imported here so the file is self-contained\n// when consumed via the package's exports map.\nexport type { ReactNode };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ExtensionsSidebarSection.d.ts","sourceRoot":"","sources":["../../../src/client/extensions/ExtensionsSidebarSection.tsx"],"names":[],"mappings":"AAuLA,wBAAgB,wBAAwB,4CAmgBvC"}
1
+ {"version":3,"file":"ExtensionsSidebarSection.d.ts","sourceRoot":"","sources":["../../../src/client/extensions/ExtensionsSidebarSection.tsx"],"names":[],"mappings":"AA6LA,wBAAgB,wBAAwB,4CAghBvC"}
@@ -3,11 +3,12 @@ import { agentNativePath } from "../api-path.js";
3
3
  import { useState, useCallback, useMemo } from "react";
4
4
  import { useQuery, useQueryClient } from "@tanstack/react-query";
5
5
  import { Link, useLocation, useNavigate } from "react-router";
6
- import { IconChevronDown, IconPlus, IconSettings, IconStar, IconStarFilled, IconTrash, IconDots, IconPencil, IconGripVertical, IconTool, } from "@tabler/icons-react";
6
+ import { IconChevronDown, IconPlus, IconSettings, IconStar, IconStarFilled, IconTrash, IconDots, IconInfoCircle, IconPencil, IconGripVertical, IconTool, } from "@tabler/icons-react";
7
7
  import { cn } from "../utils.js";
8
8
  import { sendToAgentChat } from "../agent-chat.js";
9
9
  import { PromptComposer } from "../composer/PromptComposer.js";
10
10
  import { Popover, PopoverContent, PopoverTrigger, } from "../components/ui/popover.js";
11
+ import { HoverCard, HoverCardContent, HoverCardTrigger, } from "../components/ui/hover-card.js";
11
12
  import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "../components/ui/dropdown-menu.js";
12
13
  import { applyToolsOrder, getToolsOrder, setToolsOrder, } from "./extension-order.js";
13
14
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "../components/ui/tooltip.js";
@@ -271,7 +272,7 @@ export function ExtensionsSidebarSection() {
271
272
  };
272
273
  return (_jsx(TooltipProvider, { delayDuration: 200, children: _jsxs("div", { className: "relative min-w-0 py-1", children: [_jsxs("div", { className: cn("group/extensions-section relative flex w-full min-w-0 items-center rounded-md text-sm font-medium transition-all hover:text-primary", location.pathname.startsWith("/extensions")
273
274
  ? "text-sidebar-accent-foreground"
274
- : "text-muted-foreground hover:bg-sidebar-accent/50", extensionsOpen && sortedTools.length > 0 && "mb-1"), children: [_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: "flex min-w-0 flex-1 items-center gap-3 px-3 py-1.5 pr-24 text-left", "aria-label": "About extensions", children: [_jsx(IconTool, { className: "h-4 w-4 shrink-0" }), _jsx("span", { className: "min-w-0 whitespace-nowrap", children: "Extensions" })] }) }), _jsxs(PopoverContent, { side: "right", align: "start", className: "w-72 space-y-3 p-3", children: [_jsxs("div", { children: [_jsx("p", { className: "text-sm font-semibold text-foreground", children: "Extensions" }), _jsx("p", { className: "mt-1 text-xs leading-relaxed text-muted-foreground", children: "Build small sandboxed apps that can read app data, call actions, and save their own state." })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Link, { to: "/extensions", className: "inline-flex h-8 items-center rounded-md border px-2.5 text-xs font-medium text-foreground transition-colors hover:bg-accent", children: "Open extensions" }), _jsx("a", { href: "https://agent-native.com/docs/extensions", target: "_blank", rel: "noopener noreferrer", className: "inline-flex h-8 items-center rounded-md px-2.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground", children: "Learn more" })] })] })] }), _jsxs("div", { className: "absolute right-1 top-1/2 flex -translate-y-1/2 items-center", children: [_jsx(ExtensionSortMenu, { value: sortModeState, onChange: setExtensionSortMode }), _jsxs(Popover, { open: showCreate, onOpenChange: setShowCreate, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx("button", { type: "button", className: "inline-flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-md text-muted-foreground/70 transition-colors hover:bg-accent hover:text-accent-foreground", "aria-label": "New extension", children: _jsx(IconPlus, { className: "h-3.5 w-3.5" }) }) }), _jsxs(PopoverContent, { side: "right", align: "start", className: "w-[420px] p-3", children: [_jsx("p", { className: "px-1 pb-2 text-sm font-semibold text-foreground", children: "New extension" }), _jsx(PromptComposer, { autoFocus: true, placeholder: "Describe what you'd like to build...", draftScope: "extensions:sidebar-create", onSubmit: handleCreate })] })] }), _jsx("button", { type: "button", onClick: toggleExtensionsOpen, className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground", "aria-label": extensionsOpen ? "Collapse extensions" : "Expand extensions", "aria-expanded": extensionsOpen, children: _jsx(IconChevronDown, { className: cn("h-3.5 w-3.5 shrink-0 transition-transform", !extensionsOpen && "-rotate-90") }) })] })] }), extensionsOpen &&
275
+ : "text-muted-foreground hover:bg-sidebar-accent/50", extensionsOpen && sortedTools.length > 0 && "mb-1"), children: [_jsx("button", { type: "button", onClick: toggleExtensionsOpen, className: "absolute inset-0 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", "aria-label": extensionsOpen ? "Collapse extensions" : "Expand extensions", "aria-expanded": extensionsOpen }), _jsxs("div", { className: "pointer-events-none relative z-10 flex min-w-0 flex-1 items-center gap-3 px-3 py-1.5 pr-24", children: [_jsx(IconTool, { className: "h-4 w-4 shrink-0" }), _jsx("span", { className: "min-w-0 whitespace-nowrap", children: "Extensions" }), _jsxs(HoverCard, { openDelay: 250, closeDelay: 120, children: [_jsx(HoverCardTrigger, { asChild: true, children: _jsx("button", { type: "button", className: "pointer-events-auto -ml-1 inline-flex h-5 w-5 shrink-0 items-center justify-center rounded-md text-muted-foreground/45 transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", "aria-label": "About extensions", children: _jsx(IconInfoCircle, { className: "h-3.5 w-3.5" }) }) }), _jsxs(HoverCardContent, { side: "right", align: "start", sideOffset: 8, className: "w-72 space-y-3 p-3", children: [_jsxs("div", { children: [_jsx("p", { className: "text-sm font-semibold text-foreground", children: "Extensions" }), _jsx("p", { className: "mt-1 text-xs leading-relaxed text-muted-foreground", children: "Build small sandboxed apps that can read app data, call actions, and save their own state." })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Link, { to: "/extensions", className: "inline-flex h-8 items-center rounded-md border px-2.5 text-xs font-medium text-foreground transition-colors hover:bg-accent", children: "Open extensions" }), _jsx("a", { href: "https://agent-native.com/docs/extensions", target: "_blank", rel: "noopener noreferrer", className: "inline-flex h-8 items-center rounded-md px-2.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground", children: "Learn more" })] })] })] })] }), _jsxs("div", { className: "absolute right-1 top-1/2 z-20 flex -translate-y-1/2 items-center", children: [_jsx(ExtensionSortMenu, { value: sortModeState, onChange: setExtensionSortMode }), _jsxs(Popover, { open: showCreate, onOpenChange: setShowCreate, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx("button", { type: "button", className: "inline-flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-md text-muted-foreground/70 transition-colors hover:bg-accent hover:text-accent-foreground", "aria-label": "New extension", children: _jsx(IconPlus, { className: "h-3.5 w-3.5" }) }) }), _jsxs(PopoverContent, { side: "right", align: "start", className: "w-[420px] p-3", children: [_jsx("p", { className: "px-1 pb-2 text-sm font-semibold text-foreground", children: "New extension" }), _jsx(PromptComposer, { autoFocus: true, placeholder: "Describe what you'd like to build...", draftScope: "extensions:sidebar-create", onSubmit: handleCreate })] })] }), _jsx("button", { type: "button", onClick: toggleExtensionsOpen, className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground", "aria-label": extensionsOpen ? "Collapse extensions" : "Expand extensions", "aria-expanded": extensionsOpen, children: _jsx(IconChevronDown, { className: cn("h-3.5 w-3.5 shrink-0 transition-transform", !extensionsOpen && "-rotate-90") }) })] })] }), extensionsOpen &&
275
276
  (isLoading ? (_jsx("div", { className: "min-w-0 space-y-0.5 px-0.5", children: [1, 2, 3].map((i) => (_jsx("div", { className: "flex items-center rounded-md px-2 py-1.5", children: _jsx("div", { className: "h-3 rounded bg-muted animate-pulse", style: { width: `${60 + i * 20}px` } }) }, i))) })) : sortedTools.length === 0 ? null : (_jsxs("div", { className: "min-w-0 space-y-0.5 px-0.5", children: [visibleTools.map((extension) => {
276
277
  const isActive = location.pathname === `/extensions/${extension.id}` ||
277
278
  location.pathname === `/extensions/${extension.id}/edit`;
@@ -1 +1 @@
1
- {"version":3,"file":"ExtensionsSidebarSection.js","sourceRoot":"","sources":["../../../src/client/extensions/ExtensionsSidebarSection.tsx"],"names":[],"mappings":"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","sourcesContent":["import { agentNativePath } from \"../api-path.js\";\nimport { useState, useCallback, useMemo } from \"react\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { Link, useLocation, useNavigate } from \"react-router\";\nimport {\n IconChevronDown,\n IconPlus,\n IconSettings,\n IconStar,\n IconStarFilled,\n IconTrash,\n IconDots,\n IconPencil,\n IconGripVertical,\n IconTool,\n} from \"@tabler/icons-react\";\nimport { cn } from \"../utils.js\";\nimport { sendToAgentChat } from \"../agent-chat.js\";\nimport { PromptComposer } from \"../composer/PromptComposer.js\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../components/ui/dropdown-menu.js\";\nimport {\n applyToolsOrder,\n getToolsOrder,\n setToolsOrder,\n} from \"./extension-order.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport {\n extensionPopularityOf,\n useExtensionPopularity,\n} from \"./extension-popularity.js\";\nimport {\n deleteOrHideExtension,\n invalidateExtensionRemoval,\n} from \"./delete-extension.js\";\n\ninterface Extension {\n id: string;\n name: string;\n description?: string;\n icon?: string;\n canDelete?: boolean;\n}\n\nconst FAVORITES_KEY = \"extensions-favorites\";\nconst COLLAPSED_EXTENSION_COUNT = 3;\nconst EXTENSIONS_OPEN_KEY = \"extensions-sidebar-open\";\nconst EXTENSIONS_SORT_MODE_KEY = \"extensions-sort-mode\";\n\ntype ExtensionSortMode = \"most-used\" | \"alphabetical\" | \"manual\";\n\nfunction getFavorites(): Set<string> {\n try {\n const raw = localStorage.getItem(FAVORITES_KEY);\n if (!raw) return new Set();\n const parsed = JSON.parse(raw);\n return new Set(Array.isArray(parsed) ? parsed : []);\n } catch {\n return new Set();\n }\n}\n\nfunction saveFavorites(ids: Set<string>) {\n try {\n localStorage.setItem(FAVORITES_KEY, JSON.stringify(Array.from(ids)));\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction getStoredBoolean(key: string, fallback: boolean): boolean {\n if (typeof window === \"undefined\") return fallback;\n const raw = window.localStorage.getItem(key);\n if (raw === \"true\") return true;\n if (raw === \"false\") return false;\n return fallback;\n}\n\nfunction setStoredBoolean(key: string, value: boolean): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(key, String(value));\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction getSortMode(): ExtensionSortMode {\n if (typeof window === \"undefined\") return \"most-used\";\n const raw = window.localStorage.getItem(EXTENSIONS_SORT_MODE_KEY);\n if (raw === \"alphabetical\" || raw === \"manual\" || raw === \"most-used\") {\n return raw;\n }\n return \"most-used\";\n}\n\nfunction setSortMode(mode: ExtensionSortMode): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(EXTENSIONS_SORT_MODE_KEY, mode);\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction sortByName<T extends { id: string; name: string }>(items: T[]): T[] {\n return [...items].sort((a, b) => {\n const name = a.name.localeCompare(b.name);\n return name !== 0 ? name : a.id.localeCompare(b.id);\n });\n}\n\nfunction ExtensionSortMenu({\n value,\n onChange,\n}: {\n value: ExtensionSortMode;\n onChange: (value: ExtensionSortMode) => void;\n}) {\n return (\n <DropdownMenu>\n <Tooltip>\n <TooltipTrigger asChild>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground/45 opacity-0 transition-all hover:bg-accent hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring group-hover/extensions-section:opacity-100\"\n aria-label=\"Extensions sort options\"\n >\n <IconSettings className=\"h-3.5 w-3.5\" />\n </button>\n </DropdownMenuTrigger>\n </TooltipTrigger>\n <TooltipContent>Extensions sort</TooltipContent>\n </Tooltip>\n <DropdownMenuContent side=\"right\" align=\"start\" className=\"w-44\">\n <DropdownMenuLabel>Sort by</DropdownMenuLabel>\n <DropdownMenuRadioGroup\n value={value}\n onValueChange={(next) => {\n if (\n next === \"most-used\" ||\n next === \"alphabetical\" ||\n next === \"manual\"\n ) {\n onChange(next);\n }\n }}\n >\n <DropdownMenuRadioItem value=\"most-used\">\n Most used\n </DropdownMenuRadioItem>\n <DropdownMenuRadioItem value=\"alphabetical\">\n Alphabetical\n </DropdownMenuRadioItem>\n <DropdownMenuSeparator />\n <DropdownMenuRadioItem value=\"manual\">\n Manual order\n </DropdownMenuRadioItem>\n </DropdownMenuRadioGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport function ExtensionsSidebarSection() {\n const location = useLocation();\n const navigate = useNavigate();\n const queryClient = useQueryClient();\n const popularity = useExtensionPopularity();\n const [favoriteIds, setFavoriteIds] = useState<Set<string>>(() =>\n typeof window !== \"undefined\" ? getFavorites() : new Set(),\n );\n const [extensionsOpen, setExtensionsOpen] = useState(() =>\n getStoredBoolean(EXTENSIONS_OPEN_KEY, true),\n );\n const [sortModeState, setSortModeState] =\n useState<ExtensionSortMode>(getSortMode);\n const [menuOpenId, setMenuOpenId] = useState<string | null>(null);\n const [renamingId, setRenamingId] = useState<string | null>(null);\n const [renameValue, setRenameValue] = useState(\"\");\n const [showCreate, setShowCreate] = useState(false);\n const [toolOrderState, setToolOrderState] = useState<string[]>(() =>\n typeof window !== \"undefined\" ? getToolsOrder() : [],\n );\n const [draggingId, setDraggingId] = useState<string | null>(null);\n const [dragOverId, setDragOverId] = useState<string | null>(null);\n const [showAllExtensions, setShowAllExtensions] = useState(false);\n\n const { data: extensions, isLoading } = useQuery<Extension[]>({\n queryKey: [\"extensions\"],\n queryFn: async () => {\n const res = await fetch(agentNativePath(\"/_agent-native/extensions\"));\n if (!res.ok) return [];\n return res.json();\n },\n });\n\n const toggleFavorite = useCallback((id: string) => {\n setFavoriteIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n saveFavorites(next);\n return next;\n });\n }, []);\n\n const setExtensionSortMode = useCallback((mode: ExtensionSortMode) => {\n setSortMode(mode);\n setSortModeState(mode);\n }, []);\n\n const toggleExtensionsOpen = useCallback(() => {\n setExtensionsOpen((current) => {\n const next = !current;\n setStoredBoolean(EXTENSIONS_OPEN_KEY, next);\n return next;\n });\n }, []);\n\n const handleDelete = useCallback(\n async (extension: Extension) => {\n const extensionId = extension.id;\n setMenuOpenId(null);\n const prev = queryClient.getQueryData<Extension[]>([\"extensions\"]);\n queryClient.setQueryData<Extension[]>([\"extensions\"], (old) =>\n (old ?? []).filter((t) => t.id !== extensionId),\n );\n try {\n await deleteOrHideExtension(extension);\n invalidateExtensionRemoval(queryClient, extensionId);\n setFavoriteIds((prev) => {\n const next = new Set(prev);\n next.delete(extensionId);\n saveFavorites(next);\n return next;\n });\n setToolOrderState((prev) => {\n const next = prev.filter((id) => id !== extensionId);\n if (next.length !== prev.length) setToolsOrder(next);\n return next;\n });\n if (\n location.pathname === `/extensions/${extensionId}` ||\n location.pathname === `/extensions/${extensionId}/edit`\n ) {\n navigate(\"/extensions\");\n }\n } catch {\n if (prev) queryClient.setQueryData([\"extensions\"], prev);\n }\n },\n [location.pathname, navigate, queryClient],\n );\n\n const startRename = useCallback((extension: Extension) => {\n setMenuOpenId(null);\n setRenameValue(extension.name);\n setRenamingId(extension.id);\n }, []);\n\n const submitRename = useCallback(\n async (extensionId: string) => {\n const trimmed = renameValue.trim();\n setRenamingId(null);\n if (!trimmed) return;\n const prev = queryClient.getQueryData<Extension[]>([\"extensions\"]);\n const existing = prev?.find((t) => t.id === extensionId);\n if (!existing || trimmed === existing.name) return;\n queryClient.setQueryData<Extension[]>([\"extensions\"], (old) =>\n (old ?? []).map((t) =>\n t.id === extensionId ? { ...t, name: trimmed } : t,\n ),\n );\n queryClient.setQueryData<Extension>([\"extension\", extensionId], (old) =>\n old ? { ...old, name: trimmed } : old,\n );\n try {\n await fetch(\n agentNativePath(`/_agent-native/extensions/${extensionId}`),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ name: trimmed }),\n },\n );\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n queryClient.invalidateQueries({ queryKey: [\"extension\", extensionId] });\n } catch {\n if (prev) queryClient.setQueryData([\"extensions\"], prev);\n queryClient.invalidateQueries({ queryKey: [\"extension\", extensionId] });\n }\n },\n [renameValue, queryClient],\n );\n\n const sortedTools = useMemo(() => {\n if (!extensions) return [];\n if (sortModeState === \"alphabetical\") {\n return sortByName(extensions);\n }\n const mostUsed = [...extensions].sort((a, b) => {\n const aPop = extensionPopularityOf(popularity, a.id);\n const bPop = extensionPopularityOf(popularity, b.id);\n if (aPop !== bPop) return bPop - aPop;\n const aFav = favoriteIds.has(a.id) ? 0 : 1;\n const bFav = favoriteIds.has(b.id) ? 0 : 1;\n if (aFav !== bFav) return aFav - bFav;\n return a.name.localeCompare(b.name);\n });\n return sortModeState === \"manual\" && toolOrderState.length > 0\n ? applyToolsOrder(mostUsed, toolOrderState)\n : mostUsed;\n }, [extensions, favoriteIds, popularity, sortModeState, toolOrderState]);\n\n const activeExtensionId = useMemo(\n () =>\n sortedTools.find(\n (extension) =>\n location.pathname === `/extensions/${extension.id}` ||\n location.pathname === `/extensions/${extension.id}/edit`,\n )?.id ?? null,\n [location.pathname, sortedTools],\n );\n\n const visibleTools = useMemo(() => {\n if (showAllExtensions || sortedTools.length <= COLLAPSED_EXTENSION_COUNT) {\n return sortedTools;\n }\n\n const defaultVisible = sortedTools.slice(0, COLLAPSED_EXTENSION_COUNT);\n if (!activeExtensionId) return defaultVisible;\n\n const activeTool = sortedTools.find(\n (extension) => extension.id === activeExtensionId,\n );\n if (!activeTool || defaultVisible.some((tool) => tool.id === activeTool.id))\n return defaultVisible;\n\n return [\n ...defaultVisible.slice(0, COLLAPSED_EXTENSION_COUNT - 1),\n activeTool,\n ];\n }, [activeExtensionId, showAllExtensions, sortedTools]);\n\n const hasMoreExtensions = sortedTools.length > COLLAPSED_EXTENSION_COUNT;\n\n const reorderTool = useCallback(\n (activeId: string, overId: string) => {\n if (activeId === overId) return;\n const ids = sortedTools.map((extension) => extension.id);\n const oldIndex = ids.indexOf(activeId);\n const newIndex = ids.indexOf(overId);\n if (oldIndex === -1 || newIndex === -1) return;\n const next = [...ids];\n const [moved] = next.splice(oldIndex, 1);\n if (!moved) return;\n next.splice(newIndex, 0, moved);\n setToolsOrder(next);\n setToolOrderState(next);\n setExtensionSortMode(\"manual\");\n },\n [setExtensionSortMode, sortedTools],\n );\n\n const handleCreate = (text: string) => {\n const trimmed = text.trim();\n if (!trimmed) return;\n sendToAgentChat({\n message: `Create an extension: ${trimmed}`,\n submit: true,\n openSidebar: true,\n newTab: true,\n });\n setShowCreate(false);\n };\n\n return (\n <TooltipProvider delayDuration={200}>\n <div className=\"relative min-w-0 py-1\">\n <div\n className={cn(\n \"group/extensions-section relative flex w-full min-w-0 items-center rounded-md text-sm font-medium transition-all hover:text-primary\",\n location.pathname.startsWith(\"/extensions\")\n ? \"text-sidebar-accent-foreground\"\n : \"text-muted-foreground hover:bg-sidebar-accent/50\",\n extensionsOpen && sortedTools.length > 0 && \"mb-1\",\n )}\n >\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"flex min-w-0 flex-1 items-center gap-3 px-3 py-1.5 pr-24 text-left\"\n aria-label=\"About extensions\"\n >\n <IconTool className=\"h-4 w-4 shrink-0\" />\n <span className=\"min-w-0 whitespace-nowrap\">Extensions</span>\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"right\"\n align=\"start\"\n className=\"w-72 space-y-3 p-3\"\n >\n <div>\n <p className=\"text-sm font-semibold text-foreground\">\n Extensions\n </p>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">\n Build small sandboxed apps that can read app data, call\n actions, and save their own state.\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Link\n to=\"/extensions\"\n className=\"inline-flex h-8 items-center rounded-md border px-2.5 text-xs font-medium text-foreground transition-colors hover:bg-accent\"\n >\n Open extensions\n </Link>\n <a\n href=\"https://agent-native.com/docs/extensions\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex h-8 items-center rounded-md px-2.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\"\n >\n Learn more\n </a>\n </div>\n </PopoverContent>\n </Popover>\n <div className=\"absolute right-1 top-1/2 flex -translate-y-1/2 items-center\">\n <ExtensionSortMenu\n value={sortModeState}\n onChange={setExtensionSortMode}\n />\n <Popover open={showCreate} onOpenChange={setShowCreate}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-md text-muted-foreground/70 transition-colors hover:bg-accent hover:text-accent-foreground\"\n aria-label=\"New extension\"\n >\n <IconPlus className=\"h-3.5 w-3.5\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"right\"\n align=\"start\"\n className=\"w-[420px] p-3\"\n >\n <p className=\"px-1 pb-2 text-sm font-semibold text-foreground\">\n New extension\n </p>\n <PromptComposer\n autoFocus\n placeholder=\"Describe what you'd like to build...\"\n draftScope=\"extensions:sidebar-create\"\n onSubmit={handleCreate}\n />\n </PopoverContent>\n </Popover>\n <button\n type=\"button\"\n onClick={toggleExtensionsOpen}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground\"\n aria-label={\n extensionsOpen ? \"Collapse extensions\" : \"Expand extensions\"\n }\n aria-expanded={extensionsOpen}\n >\n <IconChevronDown\n className={cn(\n \"h-3.5 w-3.5 shrink-0 transition-transform\",\n !extensionsOpen && \"-rotate-90\",\n )}\n />\n </button>\n </div>\n </div>\n\n {extensionsOpen &&\n (isLoading ? (\n <div className=\"min-w-0 space-y-0.5 px-0.5\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"flex items-center rounded-md px-2 py-1.5\"\n >\n <div\n className=\"h-3 rounded bg-muted animate-pulse\"\n style={{ width: `${60 + i * 20}px` }}\n />\n </div>\n ))}\n </div>\n ) : sortedTools.length === 0 ? null : (\n <div className=\"min-w-0 space-y-0.5 px-0.5\">\n {visibleTools.map((extension) => {\n const isActive =\n location.pathname === `/extensions/${extension.id}` ||\n location.pathname === `/extensions/${extension.id}/edit`;\n const isFav = favoriteIds.has(extension.id);\n const isRenamingThis = renamingId === extension.id;\n const actionsVisible =\n menuOpenId === extension.id || isRenamingThis;\n\n return (\n <div\n key={extension.id}\n onDragOver={(e) => {\n if (!draggingId || draggingId === extension.id) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = \"move\";\n setDragOverId(extension.id);\n }}\n onDragLeave={() => {\n setDragOverId((current) =>\n current === extension.id ? null : current,\n );\n }}\n onDrop={(e) => {\n e.preventDefault();\n const activeId =\n draggingId || e.dataTransfer.getData(\"text/plain\");\n setDraggingId(null);\n setDragOverId(null);\n if (activeId) reorderTool(activeId, extension.id);\n }}\n className={cn(\n \"group/extension relative flex items-center min-w-0 rounded-md\",\n draggingId === extension.id && \"opacity-50\",\n dragOverId === extension.id &&\n draggingId !== extension.id &&\n \"bg-accent/60\",\n )}\n >\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n draggable\n onDragStart={(e) => {\n setDraggingId(extension.id);\n setDragOverId(null);\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", extension.id);\n }}\n onDragEnd={() => {\n setDraggingId(null);\n setDragOverId(null);\n }}\n className=\"-ml-2 cursor-grab rounded p-0.5 text-muted-foreground/30 opacity-0 transition-colors hover:text-muted-foreground/70 active:cursor-grabbing group-hover/extension:opacity-100 group-focus-within/extension:opacity-100\"\n aria-label={`Reorder ${extension.name}`}\n >\n <IconGripVertical className=\"h-3 w-3\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Drag to reorder</TooltipContent>\n </Tooltip>\n <Link\n to={`/extensions/${extension.id}`}\n className={cn(\n \"flex min-w-0 flex-1 items-center rounded-md px-2 py-1.5 pr-12 text-xs transition-[padding,color,background-color] md:pr-2 md:group-hover/extension:pr-12 md:group-focus-within/extension:pr-12\",\n actionsVisible && \"md:pr-12\",\n isActive\n ? \"bg-accent text-accent-foreground font-medium\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-accent-foreground\",\n )}\n >\n {isRenamingThis ? (\n <input\n autoFocus\n value={renameValue}\n onChange={(e) => setRenameValue(e.target.value)}\n onBlur={() => submitRename(extension.id)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") submitRename(extension.id);\n if (e.key === \"Escape\") setRenamingId(null);\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n className=\"min-w-0 flex-1 truncate border-b border-primary bg-transparent px-0 py-0 text-xs outline-none\"\n />\n ) : (\n <span className=\"block truncate\">{extension.name}</span>\n )}\n </Link>\n\n <div\n className={cn(\n \"pointer-events-none absolute right-1 top-1/2 flex -translate-y-1/2 items-center gap-0.5 opacity-100 transition-opacity md:opacity-0 md:group-hover/extension:opacity-100 md:group-focus-within/extension:opacity-100\",\n actionsVisible && \"md:opacity-100\",\n )}\n >\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n toggleFavorite(extension.id);\n }}\n className={cn(\n \"pointer-events-auto cursor-pointer rounded p-0.5 transition-colors\",\n isFav\n ? \"text-yellow-500\"\n : \"text-muted-foreground/40 hover:text-yellow-500\",\n )}\n aria-label={isFav ? \"Unfavorite\" : \"Favorite\"}\n >\n {isFav ? (\n <IconStarFilled className=\"h-3 w-3\" />\n ) : (\n <IconStar className=\"h-3 w-3\" />\n )}\n </button>\n\n <DropdownMenu\n open={menuOpenId === extension.id}\n onOpenChange={(open) =>\n setMenuOpenId(open ? extension.id : null)\n }\n >\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"pointer-events-auto cursor-pointer rounded p-0.5 text-muted-foreground/40 transition-colors hover:text-foreground\"\n aria-label=\"Extension actions\"\n >\n <IconDots className=\"h-3 w-3\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n sideOffset={4}\n className=\"min-w-[140px]\"\n >\n <DropdownMenuItem\n onSelect={() => startRename(extension)}\n >\n <IconPencil className=\"h-3.5 w-3.5\" />\n Rename\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => handleDelete(extension)}\n className=\"text-destructive focus:text-destructive\"\n >\n <IconTrash className=\"h-3.5 w-3.5\" />\n {extension.canDelete === false\n ? \"Remove from my list\"\n : \"Delete\"}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n );\n })}\n {hasMoreExtensions && (\n <button\n type=\"button\"\n aria-expanded={showAllExtensions}\n onClick={() => setShowAllExtensions((current) => !current)}\n className=\"ml-5 mt-1 inline-flex h-5 items-center rounded px-1.5 text-[11px] font-medium text-muted-foreground/60 transition-colors hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\"\n >\n {showAllExtensions ? \"show less\" : \"show more\"}\n </button>\n )}\n </div>\n ))}\n </div>\n </TooltipProvider>\n );\n}\n"]}
1
+ {"version":3,"file":"ExtensionsSidebarSection.js","sourceRoot":"","sources":["../../../src/client/extensions/ExtensionsSidebarSection.tsx"],"names":[],"mappings":"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","sourcesContent":["import { agentNativePath } from \"../api-path.js\";\nimport { useState, useCallback, useMemo } from \"react\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { Link, useLocation, useNavigate } from \"react-router\";\nimport {\n IconChevronDown,\n IconPlus,\n IconSettings,\n IconStar,\n IconStarFilled,\n IconTrash,\n IconDots,\n IconInfoCircle,\n IconPencil,\n IconGripVertical,\n IconTool,\n} from \"@tabler/icons-react\";\nimport { cn } from \"../utils.js\";\nimport { sendToAgentChat } from \"../agent-chat.js\";\nimport { PromptComposer } from \"../composer/PromptComposer.js\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\nimport {\n HoverCard,\n HoverCardContent,\n HoverCardTrigger,\n} from \"../components/ui/hover-card.js\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../components/ui/dropdown-menu.js\";\nimport {\n applyToolsOrder,\n getToolsOrder,\n setToolsOrder,\n} from \"./extension-order.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport {\n extensionPopularityOf,\n useExtensionPopularity,\n} from \"./extension-popularity.js\";\nimport {\n deleteOrHideExtension,\n invalidateExtensionRemoval,\n} from \"./delete-extension.js\";\n\ninterface Extension {\n id: string;\n name: string;\n description?: string;\n icon?: string;\n canDelete?: boolean;\n}\n\nconst FAVORITES_KEY = \"extensions-favorites\";\nconst COLLAPSED_EXTENSION_COUNT = 3;\nconst EXTENSIONS_OPEN_KEY = \"extensions-sidebar-open\";\nconst EXTENSIONS_SORT_MODE_KEY = \"extensions-sort-mode\";\n\ntype ExtensionSortMode = \"most-used\" | \"alphabetical\" | \"manual\";\n\nfunction getFavorites(): Set<string> {\n try {\n const raw = localStorage.getItem(FAVORITES_KEY);\n if (!raw) return new Set();\n const parsed = JSON.parse(raw);\n return new Set(Array.isArray(parsed) ? parsed : []);\n } catch {\n return new Set();\n }\n}\n\nfunction saveFavorites(ids: Set<string>) {\n try {\n localStorage.setItem(FAVORITES_KEY, JSON.stringify(Array.from(ids)));\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction getStoredBoolean(key: string, fallback: boolean): boolean {\n if (typeof window === \"undefined\") return fallback;\n const raw = window.localStorage.getItem(key);\n if (raw === \"true\") return true;\n if (raw === \"false\") return false;\n return fallback;\n}\n\nfunction setStoredBoolean(key: string, value: boolean): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(key, String(value));\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction getSortMode(): ExtensionSortMode {\n if (typeof window === \"undefined\") return \"most-used\";\n const raw = window.localStorage.getItem(EXTENSIONS_SORT_MODE_KEY);\n if (raw === \"alphabetical\" || raw === \"manual\" || raw === \"most-used\") {\n return raw;\n }\n return \"most-used\";\n}\n\nfunction setSortMode(mode: ExtensionSortMode): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(EXTENSIONS_SORT_MODE_KEY, mode);\n } catch {\n // localStorage unavailable — ignore\n }\n}\n\nfunction sortByName<T extends { id: string; name: string }>(items: T[]): T[] {\n return [...items].sort((a, b) => {\n const name = a.name.localeCompare(b.name);\n return name !== 0 ? name : a.id.localeCompare(b.id);\n });\n}\n\nfunction ExtensionSortMenu({\n value,\n onChange,\n}: {\n value: ExtensionSortMode;\n onChange: (value: ExtensionSortMode) => void;\n}) {\n return (\n <DropdownMenu>\n <Tooltip>\n <TooltipTrigger asChild>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground/45 opacity-0 transition-all hover:bg-accent hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring group-hover/extensions-section:opacity-100\"\n aria-label=\"Extensions sort options\"\n >\n <IconSettings className=\"h-3.5 w-3.5\" />\n </button>\n </DropdownMenuTrigger>\n </TooltipTrigger>\n <TooltipContent>Extensions sort</TooltipContent>\n </Tooltip>\n <DropdownMenuContent side=\"right\" align=\"start\" className=\"w-44\">\n <DropdownMenuLabel>Sort by</DropdownMenuLabel>\n <DropdownMenuRadioGroup\n value={value}\n onValueChange={(next) => {\n if (\n next === \"most-used\" ||\n next === \"alphabetical\" ||\n next === \"manual\"\n ) {\n onChange(next);\n }\n }}\n >\n <DropdownMenuRadioItem value=\"most-used\">\n Most used\n </DropdownMenuRadioItem>\n <DropdownMenuRadioItem value=\"alphabetical\">\n Alphabetical\n </DropdownMenuRadioItem>\n <DropdownMenuSeparator />\n <DropdownMenuRadioItem value=\"manual\">\n Manual order\n </DropdownMenuRadioItem>\n </DropdownMenuRadioGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport function ExtensionsSidebarSection() {\n const location = useLocation();\n const navigate = useNavigate();\n const queryClient = useQueryClient();\n const popularity = useExtensionPopularity();\n const [favoriteIds, setFavoriteIds] = useState<Set<string>>(() =>\n typeof window !== \"undefined\" ? getFavorites() : new Set(),\n );\n const [extensionsOpen, setExtensionsOpen] = useState(() =>\n getStoredBoolean(EXTENSIONS_OPEN_KEY, true),\n );\n const [sortModeState, setSortModeState] =\n useState<ExtensionSortMode>(getSortMode);\n const [menuOpenId, setMenuOpenId] = useState<string | null>(null);\n const [renamingId, setRenamingId] = useState<string | null>(null);\n const [renameValue, setRenameValue] = useState(\"\");\n const [showCreate, setShowCreate] = useState(false);\n const [toolOrderState, setToolOrderState] = useState<string[]>(() =>\n typeof window !== \"undefined\" ? getToolsOrder() : [],\n );\n const [draggingId, setDraggingId] = useState<string | null>(null);\n const [dragOverId, setDragOverId] = useState<string | null>(null);\n const [showAllExtensions, setShowAllExtensions] = useState(false);\n\n const { data: extensions, isLoading } = useQuery<Extension[]>({\n queryKey: [\"extensions\"],\n queryFn: async () => {\n const res = await fetch(agentNativePath(\"/_agent-native/extensions\"));\n if (!res.ok) return [];\n return res.json();\n },\n });\n\n const toggleFavorite = useCallback((id: string) => {\n setFavoriteIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n saveFavorites(next);\n return next;\n });\n }, []);\n\n const setExtensionSortMode = useCallback((mode: ExtensionSortMode) => {\n setSortMode(mode);\n setSortModeState(mode);\n }, []);\n\n const toggleExtensionsOpen = useCallback(() => {\n setExtensionsOpen((current) => {\n const next = !current;\n setStoredBoolean(EXTENSIONS_OPEN_KEY, next);\n return next;\n });\n }, []);\n\n const handleDelete = useCallback(\n async (extension: Extension) => {\n const extensionId = extension.id;\n setMenuOpenId(null);\n const prev = queryClient.getQueryData<Extension[]>([\"extensions\"]);\n queryClient.setQueryData<Extension[]>([\"extensions\"], (old) =>\n (old ?? []).filter((t) => t.id !== extensionId),\n );\n try {\n await deleteOrHideExtension(extension);\n invalidateExtensionRemoval(queryClient, extensionId);\n setFavoriteIds((prev) => {\n const next = new Set(prev);\n next.delete(extensionId);\n saveFavorites(next);\n return next;\n });\n setToolOrderState((prev) => {\n const next = prev.filter((id) => id !== extensionId);\n if (next.length !== prev.length) setToolsOrder(next);\n return next;\n });\n if (\n location.pathname === `/extensions/${extensionId}` ||\n location.pathname === `/extensions/${extensionId}/edit`\n ) {\n navigate(\"/extensions\");\n }\n } catch {\n if (prev) queryClient.setQueryData([\"extensions\"], prev);\n }\n },\n [location.pathname, navigate, queryClient],\n );\n\n const startRename = useCallback((extension: Extension) => {\n setMenuOpenId(null);\n setRenameValue(extension.name);\n setRenamingId(extension.id);\n }, []);\n\n const submitRename = useCallback(\n async (extensionId: string) => {\n const trimmed = renameValue.trim();\n setRenamingId(null);\n if (!trimmed) return;\n const prev = queryClient.getQueryData<Extension[]>([\"extensions\"]);\n const existing = prev?.find((t) => t.id === extensionId);\n if (!existing || trimmed === existing.name) return;\n queryClient.setQueryData<Extension[]>([\"extensions\"], (old) =>\n (old ?? []).map((t) =>\n t.id === extensionId ? { ...t, name: trimmed } : t,\n ),\n );\n queryClient.setQueryData<Extension>([\"extension\", extensionId], (old) =>\n old ? { ...old, name: trimmed } : old,\n );\n try {\n await fetch(\n agentNativePath(`/_agent-native/extensions/${extensionId}`),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ name: trimmed }),\n },\n );\n queryClient.invalidateQueries({ queryKey: [\"extensions\"] });\n queryClient.invalidateQueries({ queryKey: [\"extension\", extensionId] });\n } catch {\n if (prev) queryClient.setQueryData([\"extensions\"], prev);\n queryClient.invalidateQueries({ queryKey: [\"extension\", extensionId] });\n }\n },\n [renameValue, queryClient],\n );\n\n const sortedTools = useMemo(() => {\n if (!extensions) return [];\n if (sortModeState === \"alphabetical\") {\n return sortByName(extensions);\n }\n const mostUsed = [...extensions].sort((a, b) => {\n const aPop = extensionPopularityOf(popularity, a.id);\n const bPop = extensionPopularityOf(popularity, b.id);\n if (aPop !== bPop) return bPop - aPop;\n const aFav = favoriteIds.has(a.id) ? 0 : 1;\n const bFav = favoriteIds.has(b.id) ? 0 : 1;\n if (aFav !== bFav) return aFav - bFav;\n return a.name.localeCompare(b.name);\n });\n return sortModeState === \"manual\" && toolOrderState.length > 0\n ? applyToolsOrder(mostUsed, toolOrderState)\n : mostUsed;\n }, [extensions, favoriteIds, popularity, sortModeState, toolOrderState]);\n\n const activeExtensionId = useMemo(\n () =>\n sortedTools.find(\n (extension) =>\n location.pathname === `/extensions/${extension.id}` ||\n location.pathname === `/extensions/${extension.id}/edit`,\n )?.id ?? null,\n [location.pathname, sortedTools],\n );\n\n const visibleTools = useMemo(() => {\n if (showAllExtensions || sortedTools.length <= COLLAPSED_EXTENSION_COUNT) {\n return sortedTools;\n }\n\n const defaultVisible = sortedTools.slice(0, COLLAPSED_EXTENSION_COUNT);\n if (!activeExtensionId) return defaultVisible;\n\n const activeTool = sortedTools.find(\n (extension) => extension.id === activeExtensionId,\n );\n if (!activeTool || defaultVisible.some((tool) => tool.id === activeTool.id))\n return defaultVisible;\n\n return [\n ...defaultVisible.slice(0, COLLAPSED_EXTENSION_COUNT - 1),\n activeTool,\n ];\n }, [activeExtensionId, showAllExtensions, sortedTools]);\n\n const hasMoreExtensions = sortedTools.length > COLLAPSED_EXTENSION_COUNT;\n\n const reorderTool = useCallback(\n (activeId: string, overId: string) => {\n if (activeId === overId) return;\n const ids = sortedTools.map((extension) => extension.id);\n const oldIndex = ids.indexOf(activeId);\n const newIndex = ids.indexOf(overId);\n if (oldIndex === -1 || newIndex === -1) return;\n const next = [...ids];\n const [moved] = next.splice(oldIndex, 1);\n if (!moved) return;\n next.splice(newIndex, 0, moved);\n setToolsOrder(next);\n setToolOrderState(next);\n setExtensionSortMode(\"manual\");\n },\n [setExtensionSortMode, sortedTools],\n );\n\n const handleCreate = (text: string) => {\n const trimmed = text.trim();\n if (!trimmed) return;\n sendToAgentChat({\n message: `Create an extension: ${trimmed}`,\n submit: true,\n openSidebar: true,\n newTab: true,\n });\n setShowCreate(false);\n };\n\n return (\n <TooltipProvider delayDuration={200}>\n <div className=\"relative min-w-0 py-1\">\n <div\n className={cn(\n \"group/extensions-section relative flex w-full min-w-0 items-center rounded-md text-sm font-medium transition-all hover:text-primary\",\n location.pathname.startsWith(\"/extensions\")\n ? \"text-sidebar-accent-foreground\"\n : \"text-muted-foreground hover:bg-sidebar-accent/50\",\n extensionsOpen && sortedTools.length > 0 && \"mb-1\",\n )}\n >\n <button\n type=\"button\"\n onClick={toggleExtensionsOpen}\n className=\"absolute inset-0 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n aria-label={\n extensionsOpen ? \"Collapse extensions\" : \"Expand extensions\"\n }\n aria-expanded={extensionsOpen}\n />\n <div className=\"pointer-events-none relative z-10 flex min-w-0 flex-1 items-center gap-3 px-3 py-1.5 pr-24\">\n <IconTool className=\"h-4 w-4 shrink-0\" />\n <span className=\"min-w-0 whitespace-nowrap\">Extensions</span>\n <HoverCard openDelay={250} closeDelay={120}>\n <HoverCardTrigger asChild>\n <button\n type=\"button\"\n className=\"pointer-events-auto -ml-1 inline-flex h-5 w-5 shrink-0 items-center justify-center rounded-md text-muted-foreground/45 transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n aria-label=\"About extensions\"\n >\n <IconInfoCircle className=\"h-3.5 w-3.5\" />\n </button>\n </HoverCardTrigger>\n <HoverCardContent\n side=\"right\"\n align=\"start\"\n sideOffset={8}\n className=\"w-72 space-y-3 p-3\"\n >\n <div>\n <p className=\"text-sm font-semibold text-foreground\">\n Extensions\n </p>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">\n Build small sandboxed apps that can read app data, call\n actions, and save their own state.\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Link\n to=\"/extensions\"\n className=\"inline-flex h-8 items-center rounded-md border px-2.5 text-xs font-medium text-foreground transition-colors hover:bg-accent\"\n >\n Open extensions\n </Link>\n <a\n href=\"https://agent-native.com/docs/extensions\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex h-8 items-center rounded-md px-2.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\"\n >\n Learn more\n </a>\n </div>\n </HoverCardContent>\n </HoverCard>\n </div>\n <div className=\"absolute right-1 top-1/2 z-20 flex -translate-y-1/2 items-center\">\n <ExtensionSortMenu\n value={sortModeState}\n onChange={setExtensionSortMode}\n />\n <Popover open={showCreate} onOpenChange={setShowCreate}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-md text-muted-foreground/70 transition-colors hover:bg-accent hover:text-accent-foreground\"\n aria-label=\"New extension\"\n >\n <IconPlus className=\"h-3.5 w-3.5\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"right\"\n align=\"start\"\n className=\"w-[420px] p-3\"\n >\n <p className=\"px-1 pb-2 text-sm font-semibold text-foreground\">\n New extension\n </p>\n <PromptComposer\n autoFocus\n placeholder=\"Describe what you'd like to build...\"\n draftScope=\"extensions:sidebar-create\"\n onSubmit={handleCreate}\n />\n </PopoverContent>\n </Popover>\n <button\n type=\"button\"\n onClick={toggleExtensionsOpen}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground\"\n aria-label={\n extensionsOpen ? \"Collapse extensions\" : \"Expand extensions\"\n }\n aria-expanded={extensionsOpen}\n >\n <IconChevronDown\n className={cn(\n \"h-3.5 w-3.5 shrink-0 transition-transform\",\n !extensionsOpen && \"-rotate-90\",\n )}\n />\n </button>\n </div>\n </div>\n\n {extensionsOpen &&\n (isLoading ? (\n <div className=\"min-w-0 space-y-0.5 px-0.5\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"flex items-center rounded-md px-2 py-1.5\"\n >\n <div\n className=\"h-3 rounded bg-muted animate-pulse\"\n style={{ width: `${60 + i * 20}px` }}\n />\n </div>\n ))}\n </div>\n ) : sortedTools.length === 0 ? null : (\n <div className=\"min-w-0 space-y-0.5 px-0.5\">\n {visibleTools.map((extension) => {\n const isActive =\n location.pathname === `/extensions/${extension.id}` ||\n location.pathname === `/extensions/${extension.id}/edit`;\n const isFav = favoriteIds.has(extension.id);\n const isRenamingThis = renamingId === extension.id;\n const actionsVisible =\n menuOpenId === extension.id || isRenamingThis;\n\n return (\n <div\n key={extension.id}\n onDragOver={(e) => {\n if (!draggingId || draggingId === extension.id) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = \"move\";\n setDragOverId(extension.id);\n }}\n onDragLeave={() => {\n setDragOverId((current) =>\n current === extension.id ? null : current,\n );\n }}\n onDrop={(e) => {\n e.preventDefault();\n const activeId =\n draggingId || e.dataTransfer.getData(\"text/plain\");\n setDraggingId(null);\n setDragOverId(null);\n if (activeId) reorderTool(activeId, extension.id);\n }}\n className={cn(\n \"group/extension relative flex items-center min-w-0 rounded-md\",\n draggingId === extension.id && \"opacity-50\",\n dragOverId === extension.id &&\n draggingId !== extension.id &&\n \"bg-accent/60\",\n )}\n >\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n draggable\n onDragStart={(e) => {\n setDraggingId(extension.id);\n setDragOverId(null);\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", extension.id);\n }}\n onDragEnd={() => {\n setDraggingId(null);\n setDragOverId(null);\n }}\n className=\"-ml-2 cursor-grab rounded p-0.5 text-muted-foreground/30 opacity-0 transition-colors hover:text-muted-foreground/70 active:cursor-grabbing group-hover/extension:opacity-100 group-focus-within/extension:opacity-100\"\n aria-label={`Reorder ${extension.name}`}\n >\n <IconGripVertical className=\"h-3 w-3\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Drag to reorder</TooltipContent>\n </Tooltip>\n <Link\n to={`/extensions/${extension.id}`}\n className={cn(\n \"flex min-w-0 flex-1 items-center rounded-md px-2 py-1.5 pr-12 text-xs transition-[padding,color,background-color] md:pr-2 md:group-hover/extension:pr-12 md:group-focus-within/extension:pr-12\",\n actionsVisible && \"md:pr-12\",\n isActive\n ? \"bg-accent text-accent-foreground font-medium\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-accent-foreground\",\n )}\n >\n {isRenamingThis ? (\n <input\n autoFocus\n value={renameValue}\n onChange={(e) => setRenameValue(e.target.value)}\n onBlur={() => submitRename(extension.id)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") submitRename(extension.id);\n if (e.key === \"Escape\") setRenamingId(null);\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n className=\"min-w-0 flex-1 truncate border-b border-primary bg-transparent px-0 py-0 text-xs outline-none\"\n />\n ) : (\n <span className=\"block truncate\">{extension.name}</span>\n )}\n </Link>\n\n <div\n className={cn(\n \"pointer-events-none absolute right-1 top-1/2 flex -translate-y-1/2 items-center gap-0.5 opacity-100 transition-opacity md:opacity-0 md:group-hover/extension:opacity-100 md:group-focus-within/extension:opacity-100\",\n actionsVisible && \"md:opacity-100\",\n )}\n >\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n toggleFavorite(extension.id);\n }}\n className={cn(\n \"pointer-events-auto cursor-pointer rounded p-0.5 transition-colors\",\n isFav\n ? \"text-yellow-500\"\n : \"text-muted-foreground/40 hover:text-yellow-500\",\n )}\n aria-label={isFav ? \"Unfavorite\" : \"Favorite\"}\n >\n {isFav ? (\n <IconStarFilled className=\"h-3 w-3\" />\n ) : (\n <IconStar className=\"h-3 w-3\" />\n )}\n </button>\n\n <DropdownMenu\n open={menuOpenId === extension.id}\n onOpenChange={(open) =>\n setMenuOpenId(open ? extension.id : null)\n }\n >\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className=\"pointer-events-auto cursor-pointer rounded p-0.5 text-muted-foreground/40 transition-colors hover:text-foreground\"\n aria-label=\"Extension actions\"\n >\n <IconDots className=\"h-3 w-3\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n sideOffset={4}\n className=\"min-w-[140px]\"\n >\n <DropdownMenuItem\n onSelect={() => startRename(extension)}\n >\n <IconPencil className=\"h-3.5 w-3.5\" />\n Rename\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => handleDelete(extension)}\n className=\"text-destructive focus:text-destructive\"\n >\n <IconTrash className=\"h-3.5 w-3.5\" />\n {extension.canDelete === false\n ? \"Remove from my list\"\n : \"Delete\"}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n );\n })}\n {hasMoreExtensions && (\n <button\n type=\"button\"\n aria-expanded={showAllExtensions}\n onClick={() => setShowAllExtensions((current) => !current)}\n className=\"ml-5 mt-1 inline-flex h-5 items-center rounded px-1.5 text-[11px] font-medium text-muted-foreground/60 transition-colors hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\"\n >\n {showAllExtensions ? \"show less\" : \"show more\"}\n </button>\n )}\n </div>\n ))}\n </div>\n </TooltipProvider>\n );\n}\n"]}
@@ -0,0 +1,77 @@
1
+ export type GuidedQuestionType = "text-options" | "color-options" | "slider" | "file" | "freeform";
2
+ export interface GuidedQuestionOption {
3
+ label: string;
4
+ value: string;
5
+ color?: string;
6
+ icon?: string;
7
+ description?: string;
8
+ recommended?: boolean;
9
+ }
10
+ export interface GuidedQuestion {
11
+ id: string;
12
+ type: GuidedQuestionType;
13
+ header?: string;
14
+ question: string;
15
+ description?: string;
16
+ options?: GuidedQuestionOption[];
17
+ choices?: GuidedQuestionOption[];
18
+ multiSelect?: boolean;
19
+ min?: number;
20
+ max?: number;
21
+ step?: number;
22
+ required?: boolean;
23
+ placeholder?: string;
24
+ allowOther?: boolean;
25
+ includeExplore?: boolean;
26
+ includeDecide?: boolean;
27
+ }
28
+ export type GuidedQuestionAnswers = Record<string, unknown>;
29
+ export interface GuidedQuestionPayload {
30
+ questions: GuidedQuestion[];
31
+ title?: string;
32
+ description?: string;
33
+ skipLabel?: string;
34
+ submitLabel?: string;
35
+ }
36
+ export declare function isOtherGuidedAnswer(value: unknown): value is string;
37
+ export declare function getOtherGuidedAnswerText(value: unknown): string;
38
+ export declare function makeOtherGuidedAnswer(text?: string): string;
39
+ export declare function hasGuidedAnswer(value: unknown): boolean;
40
+ export declare function formatGuidedAnswerValue(value: unknown): unknown;
41
+ export declare function normalizeGuidedAnswers(answers: GuidedQuestionAnswers): GuidedQuestionAnswers;
42
+ export declare function formatGuidedAnswersForAgent(answers: GuidedQuestionAnswers): string;
43
+ export interface GuidedQuestionFlowProps {
44
+ questions: GuidedQuestion[];
45
+ onSubmit: (answers: GuidedQuestionAnswers) => void;
46
+ onSkip: () => void;
47
+ title?: string;
48
+ description?: string;
49
+ skipLabel?: string;
50
+ submitLabel?: string;
51
+ className?: string;
52
+ }
53
+ export declare function GuidedQuestionFlow({ questions, onSubmit, onSkip, title, description, skipLabel, submitLabel, className, }: GuidedQuestionFlowProps): import("react/jsx-runtime").JSX.Element;
54
+ export interface UseGuidedQuestionFlowOptions {
55
+ stateKey?: string;
56
+ queryKey?: readonly unknown[];
57
+ refetchInterval?: number | false;
58
+ submitMessage?: string;
59
+ skipMessage?: string;
60
+ buildSubmitContext?: (args: {
61
+ answers: GuidedQuestionAnswers;
62
+ formattedAnswers: string;
63
+ }) => string;
64
+ buildSkipContext?: () => string;
65
+ }
66
+ export declare function useGuidedQuestionFlow({ stateKey, queryKey, refetchInterval, submitMessage, skipMessage, buildSubmitContext, buildSkipContext, }?: UseGuidedQuestionFlowOptions): {
67
+ payload: GuidedQuestionPayload;
68
+ questions: GuidedQuestion[];
69
+ title: string;
70
+ description: string;
71
+ skipLabel: string;
72
+ submitLabel: string;
73
+ clear: () => void;
74
+ handleSubmit: (answers: GuidedQuestionAnswers) => void;
75
+ handleSkip: () => void;
76
+ };
77
+ //# sourceMappingURL=guided-questions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guided-questions.d.ts","sourceRoot":"","sources":["../../src/client/guided-questions.tsx"],"names":[],"mappings":"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"}