@flanksource/clicky-ui 0.3.6 → 0.3.7

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 (215) hide show
  1. package/README.md +42 -0
  2. package/dist/components/DateField.d.ts +1 -1
  3. package/dist/components/DatePicker.d.ts +1 -1
  4. package/dist/components/DateTimePicker.d.ts +1 -1
  5. package/dist/components/FormLookupProvider.cjs +12 -0
  6. package/dist/components/FormLookupProvider.cjs.map +1 -0
  7. package/dist/components/FormLookupProvider.d.ts +7 -0
  8. package/dist/components/FormLookupProvider.d.ts.map +1 -0
  9. package/dist/components/FormLookupProvider.js +12 -0
  10. package/dist/components/FormLookupProvider.js.map +1 -0
  11. package/dist/components/JsonSchemaForm.cjs +2 -2
  12. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  13. package/dist/components/JsonSchemaForm.js +1 -1
  14. package/dist/components/JsonSchemaForm.js.map +1 -1
  15. package/dist/components/ListMenu.cjs +145 -0
  16. package/dist/components/ListMenu.cjs.map +1 -0
  17. package/dist/components/ListMenu.d.ts +54 -0
  18. package/dist/components/ListMenu.d.ts.map +1 -0
  19. package/dist/components/ListMenu.js +145 -0
  20. package/dist/components/ListMenu.js.map +1 -0
  21. package/dist/components/MdxEditorField.cjs +128 -0
  22. package/dist/components/MdxEditorField.cjs.map +1 -0
  23. package/dist/components/MdxEditorField.d.ts +4 -0
  24. package/dist/components/MdxEditorField.d.ts.map +1 -0
  25. package/dist/components/MdxEditorField.js +106 -0
  26. package/dist/components/MdxEditorField.js.map +1 -0
  27. package/dist/components/MdxEditorToolbar.cjs +76 -0
  28. package/dist/components/MdxEditorToolbar.cjs.map +1 -0
  29. package/dist/components/MdxEditorToolbar.d.ts +8 -0
  30. package/dist/components/MdxEditorToolbar.d.ts.map +1 -0
  31. package/dist/components/MdxEditorToolbar.js +76 -0
  32. package/dist/components/MdxEditorToolbar.js.map +1 -0
  33. package/dist/components/button-variants.d.ts +1 -1
  34. package/dist/components/button.d.ts +1 -1
  35. package/dist/components/form-lookup-context.cjs +1 -8
  36. package/dist/components/form-lookup-context.cjs.map +1 -1
  37. package/dist/components/form-lookup-context.d.ts +1 -5
  38. package/dist/components/form-lookup-context.d.ts.map +1 -1
  39. package/dist/components/form-lookup-context.js +1 -8
  40. package/dist/components/form-lookup-context.js.map +1 -1
  41. package/dist/components/jotai-bindings-core.cjs +197 -0
  42. package/dist/components/jotai-bindings-core.cjs.map +1 -0
  43. package/dist/components/jotai-bindings-core.d.ts +45 -0
  44. package/dist/components/jotai-bindings-core.d.ts.map +1 -0
  45. package/dist/components/jotai-bindings-core.js +197 -0
  46. package/dist/components/jotai-bindings-core.js.map +1 -0
  47. package/dist/components/jotai-bindings.cjs +17 -0
  48. package/dist/components/jotai-bindings.cjs.map +1 -0
  49. package/dist/components/jotai-bindings.d.ts +4 -0
  50. package/dist/components/jotai-bindings.d.ts.map +1 -0
  51. package/dist/components/jotai-bindings.js +17 -0
  52. package/dist/components/jotai-bindings.js.map +1 -0
  53. package/dist/components/json-schema-form-fields.cjs +37 -0
  54. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  55. package/dist/components/json-schema-form-fields.d.ts +6 -0
  56. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  57. package/dist/components/json-schema-form-fields.js +38 -1
  58. package/dist/components/json-schema-form-fields.js.map +1 -1
  59. package/dist/components/json-schema-form-render.cjs +3 -1
  60. package/dist/components/json-schema-form-render.cjs.map +1 -1
  61. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  62. package/dist/components/json-schema-form-render.js +4 -2
  63. package/dist/components/json-schema-form-render.js.map +1 -1
  64. package/dist/components/json-schema-form-resolve.cjs +9 -0
  65. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  66. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  67. package/dist/components/json-schema-form-resolve.js +9 -0
  68. package/dist/components/json-schema-form-resolve.js.map +1 -1
  69. package/dist/components/json-schema-form-types.d.ts +4 -1
  70. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  71. package/dist/components/mdx-editor-field-plugins.cjs +124 -0
  72. package/dist/components/mdx-editor-field-plugins.cjs.map +1 -0
  73. package/dist/components/mdx-editor-field-plugins.d.ts +6 -0
  74. package/dist/components/mdx-editor-field-plugins.d.ts.map +1 -0
  75. package/dist/components/mdx-editor-field-plugins.js +124 -0
  76. package/dist/components/mdx-editor-field-plugins.js.map +1 -0
  77. package/dist/components/mdx-editor-options.d.ts +77 -0
  78. package/dist/components/mdx-editor-options.d.ts.map +1 -0
  79. package/dist/components/use-list-menu-selection.cjs +77 -0
  80. package/dist/components/use-list-menu-selection.cjs.map +1 -0
  81. package/dist/components/use-list-menu-selection.d.ts +40 -0
  82. package/dist/components/use-list-menu-selection.d.ts.map +1 -0
  83. package/dist/components/use-list-menu-selection.js +77 -0
  84. package/dist/components/use-list-menu-selection.js.map +1 -0
  85. package/dist/components.cjs +10 -1
  86. package/dist/components.cjs.map +1 -1
  87. package/dist/components.d.ts +4 -1
  88. package/dist/components.d.ts.map +1 -1
  89. package/dist/components.js +10 -1
  90. package/dist/components.js.map +1 -1
  91. package/dist/data/MarkdownEditor.model.d.ts +1 -1
  92. package/dist/data/PromptBanner.cjs +199 -0
  93. package/dist/data/PromptBanner.cjs.map +1 -0
  94. package/dist/data/PromptBanner.d.ts +17 -0
  95. package/dist/data/PromptBanner.d.ts.map +1 -0
  96. package/dist/data/PromptBanner.js +199 -0
  97. package/dist/data/PromptBanner.js.map +1 -0
  98. package/dist/data/PromptBanner.model.cjs +132 -0
  99. package/dist/data/PromptBanner.model.cjs.map +1 -0
  100. package/dist/data/PromptBanner.model.d.ts +23 -0
  101. package/dist/data/PromptBanner.model.d.ts.map +1 -0
  102. package/dist/data/PromptBanner.model.js +132 -0
  103. package/dist/data/PromptBanner.model.js.map +1 -0
  104. package/dist/data/PromptDialog.cjs +43 -0
  105. package/dist/data/PromptDialog.cjs.map +1 -0
  106. package/dist/data/PromptDialog.d.ts +14 -0
  107. package/dist/data/PromptDialog.d.ts.map +1 -0
  108. package/dist/data/PromptDialog.js +43 -0
  109. package/dist/data/PromptDialog.js.map +1 -0
  110. package/dist/data/TaskManager.cjs +8 -1
  111. package/dist/data/TaskManager.cjs.map +1 -1
  112. package/dist/data/TaskManager.d.ts.map +1 -1
  113. package/dist/data/TaskManager.js +8 -1
  114. package/dist/data/TaskManager.js.map +1 -1
  115. package/dist/data/TaskProgress.cjs +15 -2
  116. package/dist/data/TaskProgress.cjs.map +1 -1
  117. package/dist/data/TaskProgress.d.ts +0 -10
  118. package/dist/data/TaskProgress.d.ts.map +1 -1
  119. package/dist/data/TaskProgress.js +15 -2
  120. package/dist/data/TaskProgress.js.map +1 -1
  121. package/dist/data/ai/ChatWindow.cjs +53 -9
  122. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  123. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  124. package/dist/data/ai/ChatWindow.js +53 -9
  125. package/dist/data/ai/ChatWindow.js.map +1 -1
  126. package/dist/data/ai/ToolPreferences.cjs +232 -39
  127. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  128. package/dist/data/ai/ToolPreferences.d.ts +4 -7
  129. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  130. package/dist/data/ai/ToolPreferences.js +234 -41
  131. package/dist/data/ai/ToolPreferences.js.map +1 -1
  132. package/dist/data/chat/clickyOperationsToTools.cjs +89 -3
  133. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
  134. package/dist/data/chat/clickyOperationsToTools.d.ts +1 -1
  135. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
  136. package/dist/data/chat/clickyOperationsToTools.js +89 -3
  137. package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
  138. package/dist/data/chat/types.cjs.map +1 -1
  139. package/dist/data/chat/types.d.ts +7 -1
  140. package/dist/data/chat/types.d.ts.map +1 -1
  141. package/dist/data/chat/types.js.map +1 -1
  142. package/dist/data/task-status.cjs +19 -12
  143. package/dist/data/task-status.cjs.map +1 -1
  144. package/dist/data/task-status.d.ts +2 -1
  145. package/dist/data/task-status.d.ts.map +1 -1
  146. package/dist/data/task-status.js +19 -12
  147. package/dist/data/task-status.js.map +1 -1
  148. package/dist/data/test-runner/TestRunner.fixtures.d.ts +11 -4
  149. package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
  150. package/dist/data/version-info.cjs +3 -3
  151. package/dist/data/version-info.js +3 -3
  152. package/dist/data.cjs +7 -0
  153. package/dist/data.cjs.map +1 -1
  154. package/dist/data.d.ts +3 -0
  155. package/dist/data.d.ts.map +1 -1
  156. package/dist/data.js +7 -0
  157. package/dist/data.js.map +1 -1
  158. package/dist/hooks/use-prompts.cjs +83 -0
  159. package/dist/hooks/use-prompts.cjs.map +1 -0
  160. package/dist/hooks/use-prompts.d.ts +43 -0
  161. package/dist/hooks/use-prompts.d.ts.map +1 -0
  162. package/dist/hooks/use-prompts.js +83 -0
  163. package/dist/hooks/use-prompts.js.map +1 -0
  164. package/dist/hooks.cjs +3 -0
  165. package/dist/hooks.cjs.map +1 -1
  166. package/dist/hooks.d.ts +1 -0
  167. package/dist/hooks.d.ts.map +1 -1
  168. package/dist/hooks.js +3 -0
  169. package/dist/hooks.js.map +1 -1
  170. package/dist/index.cjs +17 -1
  171. package/dist/index.cjs.map +1 -1
  172. package/dist/index.js +17 -1
  173. package/dist/index.js.map +1 -1
  174. package/dist/jotai.cjs +9 -0
  175. package/dist/jotai.cjs.map +1 -0
  176. package/dist/jotai.d.ts +4 -0
  177. package/dist/jotai.d.ts.map +1 -0
  178. package/dist/jotai.js +9 -0
  179. package/dist/jotai.js.map +1 -0
  180. package/dist/lib/utils.cjs +18 -1
  181. package/dist/lib/utils.cjs.map +1 -1
  182. package/dist/lib/utils.d.ts.map +1 -1
  183. package/dist/lib/utils.js +18 -1
  184. package/dist/lib/utils.js.map +1 -1
  185. package/dist/mdx-editor.cjs +5 -0
  186. package/dist/mdx-editor.cjs.map +1 -0
  187. package/dist/mdx-editor.css +2 -0
  188. package/dist/mdx-editor.d.ts +2 -0
  189. package/dist/mdx-editor.d.ts.map +1 -0
  190. package/dist/mdx-editor.js +5 -0
  191. package/dist/mdx-editor.js.map +1 -0
  192. package/dist/rpc/apiClient.cjs +1 -1
  193. package/dist/rpc/apiClient.cjs.map +1 -1
  194. package/dist/rpc/apiClient.js +1 -1
  195. package/dist/rpc/apiClient.js.map +1 -1
  196. package/dist/rpc/surfaceIconMap.cjs +12 -1
  197. package/dist/rpc/surfaceIconMap.cjs.map +1 -1
  198. package/dist/rpc/surfaceIconMap.d.ts.map +1 -1
  199. package/dist/rpc/surfaceIconMap.js +12 -1
  200. package/dist/rpc/surfaceIconMap.js.map +1 -1
  201. package/dist/rpc/types.cjs.map +1 -1
  202. package/dist/rpc/types.d.ts +1 -0
  203. package/dist/rpc/types.d.ts.map +1 -1
  204. package/dist/rpc/types.js.map +1 -1
  205. package/dist/styles.css +1 -1
  206. package/oxlint-plugins/README.md +148 -0
  207. package/oxlint-plugins/clicky-ui-no-adhoc-overlay.js +88 -0
  208. package/oxlint-plugins/clicky-ui-prefer-components.js +46 -0
  209. package/oxlint-plugins/clicky-ui-prefer-icons.js +121 -0
  210. package/oxlint-plugins/clicky-ui-prefer-tailwind.js +98 -0
  211. package/oxlint-plugins/clicky-ui-prefer-theme.js +134 -0
  212. package/oxlint-plugins/clicky-ui-shared.js +132 -0
  213. package/oxlint-plugins/clicky-ui.js +34 -0
  214. package/oxlint-plugins/no-iconify-names.js +37 -0
  215. package/package.json +21 -1
package/dist/data.js CHANGED
@@ -60,6 +60,9 @@ import { allGroupsTerminal, isTerminalStatus } from "./data/TaskSnapshot.js";
60
60
  import { bucketTasks, logLevelColor, taskSegments, taskStatusBg, taskStatusColor, taskStatusIcon } from "./data/task-status.js";
61
61
  import { TaskProgress } from "./data/TaskProgress.js";
62
62
  import { TaskManager } from "./data/TaskManager.js";
63
+ import { PromptDialog } from "./data/PromptDialog.js";
64
+ import { PromptBanner } from "./data/PromptBanner.js";
65
+ import { answerPrompt, usePrompts } from "./hooks/use-prompts.js";
63
66
  import { DiagnosticsTree } from "./data/diagnostics/DiagnosticsTree.js";
64
67
  import { DiagnosticsDetailPanel } from "./data/diagnostics/DiagnosticsDetailPanel.js";
65
68
  import { countProcesses, findProcessByPID, processLabel, processStateColor, processStateIcon } from "./data/diagnostics/utils.js";
@@ -397,6 +400,8 @@ export {
397
400
  PrettyStackTrace,
398
401
  ProgressBar,
399
402
  ProgressBars,
403
+ PromptBanner,
404
+ PromptDialog,
400
405
  Properties,
401
406
  RadialGauge,
402
407
  STATUS_TOKEN_GROUPS,
@@ -926,6 +931,7 @@ export {
926
931
  WorkloadCard,
927
932
  allGroupsTerminal,
928
933
  annotateRoutePaths,
934
+ answerPrompt,
929
935
  assignAxes,
930
936
  badgeVariants,
931
937
  bucketTasks,
@@ -1014,6 +1020,7 @@ export {
1014
1020
  taskStatusIcon,
1015
1021
  testStatus,
1016
1022
  totalDuration,
1023
+ usePrompts,
1017
1024
  useTagActions,
1018
1025
  useTagActionsValue,
1019
1026
  useTestRunner,
package/dist/data.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"data.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ const DEFAULT_BASE = "/api/todos";
5
+ const DEFAULT_POLL_MS = 2e3;
6
+ function hasEventSource() {
7
+ return typeof globalThis !== "undefined" && typeof globalThis.EventSource !== "undefined";
8
+ }
9
+ function filterQuery(filter) {
10
+ const params = new URLSearchParams();
11
+ if (filter.owner) params.set("owner", filter.owner);
12
+ if (filter.kind) params.set("kind", filter.kind);
13
+ if (filter.state) params.set("state", filter.state);
14
+ for (const [k, v] of Object.entries(filter.labels ?? {})) params.append("label", `${k}=${v}`);
15
+ return params.toString();
16
+ }
17
+ async function answerPrompt(basePath, id, answer) {
18
+ const res = await fetch(`${basePath}/prompts/${encodeURIComponent(id)}/answer`, {
19
+ method: "POST",
20
+ headers: { "Content-Type": "application/json" },
21
+ body: JSON.stringify(answer)
22
+ });
23
+ if (!res.ok) {
24
+ throw new Error(await res.text() || `answer failed: ${res.status}`);
25
+ }
26
+ }
27
+ function usePrompts(options = {}) {
28
+ const {
29
+ owner,
30
+ kind,
31
+ state: stateFilter,
32
+ labels,
33
+ basePath = DEFAULT_BASE,
34
+ enabled = true,
35
+ pollMs = DEFAULT_POLL_MS,
36
+ forcePoll = false
37
+ } = options;
38
+ const [prompts, setPrompts] = react.useState([]);
39
+ const [status, setStatus] = react.useState("idle");
40
+ const labelsKey = JSON.stringify(labels ?? {});
41
+ react.useEffect(() => {
42
+ if (!enabled) return;
43
+ const query = filterQuery({ owner, kind, state: stateFilter, labels });
44
+ if (forcePoll || !hasEventSource()) {
45
+ let stopped = false;
46
+ let timer;
47
+ const tick = async () => {
48
+ try {
49
+ const res = await fetch(`${basePath}/prompts${query ? `?${query}` : ""}`, {
50
+ headers: { Accept: "application/json" }
51
+ });
52
+ if (res.ok) {
53
+ setPrompts(await res.json());
54
+ setStatus("polling");
55
+ }
56
+ } catch {
57
+ setStatus("connection lost — retrying");
58
+ }
59
+ if (!stopped) timer = setTimeout(tick, pollMs);
60
+ };
61
+ void tick();
62
+ return () => {
63
+ stopped = true;
64
+ if (timer) clearTimeout(timer);
65
+ };
66
+ }
67
+ const es = new EventSource(`${basePath}/prompts/stream${query ? `?${query}` : ""}`);
68
+ setStatus("connected");
69
+ es.addEventListener("prompts", (e) => {
70
+ try {
71
+ setPrompts(JSON.parse(e.data));
72
+ } catch {
73
+ }
74
+ });
75
+ es.onerror = () => setStatus("connection lost — retrying");
76
+ return () => es.close();
77
+ }, [owner, kind, stateFilter, labelsKey, basePath, enabled, pollMs, forcePoll]);
78
+ const pending = prompts.filter((p) => p.state === "pending");
79
+ return { prompts, pending, status };
80
+ }
81
+ exports.answerPrompt = answerPrompt;
82
+ exports.usePrompts = usePrompts;
83
+ //# sourceMappingURL=use-prompts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-prompts.cjs","sources":["../../src/hooks/use-prompts.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { JsonSchemaObject } from \"../components/json-schema-form-types\";\n\n// use-prompts is the generic clicky-ui client for the clicky `prompt` manager\n// (the Go-side question/elicitation broker). Like use-task-runs it is SSE-first —\n// it subscribes to the manager's SSEHandler (event: prompts carrying the full\n// filtered listing) and falls back to polling the JSON endpoint. It speaks only\n// PromptSnapshot, no app concepts; producers (commit checks, tool approvals, AI\n// elicitation) are indistinguishable here.\n\n/** PromptSnapshot mirrors the Go prompt.PromptSnapshot wire shape. */\nexport interface PromptSnapshot {\n id: string;\n kind?: string;\n title: string;\n description?: string;\n schema: JsonSchemaObject;\n /** pending | answered | cancelled | expired */\n state: string;\n value?: Record<string, unknown>;\n cancelled?: boolean;\n owner?: string;\n labels?: Record<string, string>;\n createdAt?: string;\n resolvedAt?: string;\n}\n\nexport interface PromptFilter {\n owner?: string | undefined;\n kind?: string | undefined;\n state?: string | undefined;\n labels?: Record<string, string> | undefined;\n}\n\nexport interface UsePromptsOptions extends PromptFilter {\n /** Base path the prompt API is mounted under, e.g. \"/api/todos\". */\n basePath?: string | undefined;\n enabled?: boolean | undefined;\n pollMs?: number | undefined;\n forcePoll?: boolean | undefined;\n}\n\nexport interface UsePromptsResult {\n prompts: PromptSnapshot[];\n /** Pending prompts only (state === \"pending\"), newest first. */\n pending: PromptSnapshot[];\n status: string;\n}\n\nconst DEFAULT_BASE = \"/api/todos\";\nconst DEFAULT_POLL_MS = 2_000;\n\nfunction hasEventSource(): boolean {\n return typeof globalThis !== \"undefined\" && typeof globalThis.EventSource !== \"undefined\";\n}\n\nfunction filterQuery(filter: PromptFilter): string {\n const params = new URLSearchParams();\n if (filter.owner) params.set(\"owner\", filter.owner);\n if (filter.kind) params.set(\"kind\", filter.kind);\n if (filter.state) params.set(\"state\", filter.state);\n for (const [k, v] of Object.entries(filter.labels ?? {})) params.append(\"label\", `${k}=${v}`);\n return params.toString();\n}\n\n/** Resolve a prompt by id with an answer (or cancel it). */\nexport async function answerPrompt(\n basePath: string,\n id: string,\n answer: { values?: Record<string, unknown>; cancelled?: boolean },\n): Promise<void> {\n const res = await fetch(`${basePath}/prompts/${encodeURIComponent(id)}/answer`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(answer),\n });\n if (!res.ok) {\n throw new Error((await res.text()) || `answer failed: ${res.status}`);\n }\n}\n\n// usePrompts subscribes to the filtered prompt listing. The stream has no\n// completion terminal — a dashboard stays subscribed to observe new prompts.\nexport function usePrompts(options: UsePromptsOptions = {}): UsePromptsResult {\n const {\n owner,\n kind,\n state: stateFilter,\n labels,\n basePath = DEFAULT_BASE,\n enabled = true,\n pollMs = DEFAULT_POLL_MS,\n forcePoll = false,\n } = options;\n\n const [prompts, setPrompts] = useState<PromptSnapshot[]>([]);\n const [status, setStatus] = useState(\"idle\");\n\n const labelsKey = JSON.stringify(labels ?? {});\n useEffect(() => {\n if (!enabled) return;\n const query = filterQuery({ owner, kind, state: stateFilter, labels });\n\n if (forcePoll || !hasEventSource()) {\n let stopped = false;\n let timer: ReturnType<typeof setTimeout> | undefined;\n const tick = async () => {\n try {\n const res = await fetch(`${basePath}/prompts${query ? `?${query}` : \"\"}`, {\n headers: { Accept: \"application/json\" },\n });\n if (res.ok) {\n setPrompts((await res.json()) as PromptSnapshot[]);\n setStatus(\"polling\");\n }\n } catch {\n setStatus(\"connection lost — retrying\");\n }\n if (!stopped) timer = setTimeout(tick, pollMs);\n };\n void tick();\n return () => {\n stopped = true;\n if (timer) clearTimeout(timer);\n };\n }\n\n const es = new EventSource(`${basePath}/prompts/stream${query ? `?${query}` : \"\"}`);\n setStatus(\"connected\");\n es.addEventListener(\"prompts\", (e) => {\n try {\n setPrompts(JSON.parse((e as MessageEvent).data) as PromptSnapshot[]);\n } catch {\n /* ignore malformed frame */\n }\n });\n es.onerror = () => setStatus(\"connection lost — retrying\");\n return () => es.close();\n }, [owner, kind, stateFilter, labelsKey, basePath, enabled, pollMs, forcePoll]);\n\n const pending = prompts.filter((p) => p.state === \"pending\");\n return { prompts, pending, status };\n}\n"],"names":["useState","useEffect"],"mappings":";;;AAiDA,MAAM,eAAe;AACrB,MAAM,kBAAkB;AAExB,SAAS,iBAA0B;AACjC,SAAO,OAAO,eAAe,eAAe,OAAO,WAAW,gBAAgB;AAChF;AAEA,SAAS,YAAY,QAA8B;AACjD,QAAM,SAAS,IAAI,gBAAA;AACnB,MAAI,OAAO,MAAO,QAAO,IAAI,SAAS,OAAO,KAAK;AAClD,MAAI,OAAO,KAAM,QAAO,IAAI,QAAQ,OAAO,IAAI;AAC/C,MAAI,OAAO,MAAO,QAAO,IAAI,SAAS,OAAO,KAAK;AAClD,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,OAAO,UAAU,CAAA,CAAE,UAAU,OAAO,SAAS,GAAG,CAAC,IAAI,CAAC,EAAE;AAC5F,SAAO,OAAO,SAAA;AAChB;AAGA,eAAsB,aACpB,UACA,IACA,QACe;AACf,QAAM,MAAM,MAAM,MAAM,GAAG,QAAQ,YAAY,mBAAmB,EAAE,CAAC,WAAW;AAAA,IAC9E,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,IAC3B,MAAM,KAAK,UAAU,MAAM;AAAA,EAAA,CAC5B;AACD,MAAI,CAAC,IAAI,IAAI;AACX,UAAM,IAAI,MAAO,MAAM,IAAI,UAAW,kBAAkB,IAAI,MAAM,EAAE;AAAA,EACtE;AACF;AAIO,SAAS,WAAW,UAA6B,IAAsB;AAC5E,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,WAAW;AAAA,IACX,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,EAAA,IACV;AAEJ,QAAM,CAAC,SAAS,UAAU,IAAIA,MAAAA,SAA2B,CAAA,CAAE;AAC3D,QAAM,CAAC,QAAQ,SAAS,IAAIA,MAAAA,SAAS,MAAM;AAE3C,QAAM,YAAY,KAAK,UAAU,UAAU,CAAA,CAAE;AAC7CC,QAAAA,UAAU,MAAM;AACd,QAAI,CAAC,QAAS;AACd,UAAM,QAAQ,YAAY,EAAE,OAAO,MAAM,OAAO,aAAa,QAAQ;AAErE,QAAI,aAAa,CAAC,kBAAkB;AAClC,UAAI,UAAU;AACd,UAAI;AACJ,YAAM,OAAO,YAAY;AACvB,YAAI;AACF,gBAAM,MAAM,MAAM,MAAM,GAAG,QAAQ,WAAW,QAAQ,IAAI,KAAK,KAAK,EAAE,IAAI;AAAA,YACxE,SAAS,EAAE,QAAQ,mBAAA;AAAA,UAAmB,CACvC;AACD,cAAI,IAAI,IAAI;AACV,uBAAY,MAAM,IAAI,MAA2B;AACjD,sBAAU,SAAS;AAAA,UACrB;AAAA,QACF,QAAQ;AACN,oBAAU,4BAA4B;AAAA,QACxC;AACA,YAAI,CAAC,QAAS,SAAQ,WAAW,MAAM,MAAM;AAAA,MAC/C;AACA,WAAK,KAAA;AACL,aAAO,MAAM;AACX,kBAAU;AACV,YAAI,oBAAoB,KAAK;AAAA,MAC/B;AAAA,IACF;AAEA,UAAM,KAAK,IAAI,YAAY,GAAG,QAAQ,kBAAkB,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE;AAClF,cAAU,WAAW;AACrB,OAAG,iBAAiB,WAAW,CAAC,MAAM;AACpC,UAAI;AACF,mBAAW,KAAK,MAAO,EAAmB,IAAI,CAAqB;AAAA,MACrE,QAAQ;AAAA,MAER;AAAA,IACF,CAAC;AACD,OAAG,UAAU,MAAM,UAAU,4BAA4B;AACzD,WAAO,MAAM,GAAG,MAAA;AAAA,EAClB,GAAG,CAAC,OAAO,MAAM,aAAa,WAAW,UAAU,SAAS,QAAQ,SAAS,CAAC;AAE9E,QAAM,UAAU,QAAQ,OAAO,CAAC,MAAM,EAAE,UAAU,SAAS;AAC3D,SAAO,EAAE,SAAS,SAAS,OAAA;AAC7B;;;"}
@@ -0,0 +1,43 @@
1
+ import { JsonSchemaObject } from '../components/json-schema-form-types';
2
+ /** PromptSnapshot mirrors the Go prompt.PromptSnapshot wire shape. */
3
+ export interface PromptSnapshot {
4
+ id: string;
5
+ kind?: string;
6
+ title: string;
7
+ description?: string;
8
+ schema: JsonSchemaObject;
9
+ /** pending | answered | cancelled | expired */
10
+ state: string;
11
+ value?: Record<string, unknown>;
12
+ cancelled?: boolean;
13
+ owner?: string;
14
+ labels?: Record<string, string>;
15
+ createdAt?: string;
16
+ resolvedAt?: string;
17
+ }
18
+ export interface PromptFilter {
19
+ owner?: string | undefined;
20
+ kind?: string | undefined;
21
+ state?: string | undefined;
22
+ labels?: Record<string, string> | undefined;
23
+ }
24
+ export interface UsePromptsOptions extends PromptFilter {
25
+ /** Base path the prompt API is mounted under, e.g. "/api/todos". */
26
+ basePath?: string | undefined;
27
+ enabled?: boolean | undefined;
28
+ pollMs?: number | undefined;
29
+ forcePoll?: boolean | undefined;
30
+ }
31
+ export interface UsePromptsResult {
32
+ prompts: PromptSnapshot[];
33
+ /** Pending prompts only (state === "pending"), newest first. */
34
+ pending: PromptSnapshot[];
35
+ status: string;
36
+ }
37
+ /** Resolve a prompt by id with an answer (or cancel it). */
38
+ export declare function answerPrompt(basePath: string, id: string, answer: {
39
+ values?: Record<string, unknown>;
40
+ cancelled?: boolean;
41
+ }): Promise<void>;
42
+ export declare function usePrompts(options?: UsePromptsOptions): UsePromptsResult;
43
+ //# sourceMappingURL=use-prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-prompts.d.ts","sourceRoot":"","sources":["../../src/hooks/use-prompts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAS7E,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,gEAAgE;IAChE,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAkBD,4DAA4D;AAC5D,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAChE,OAAO,CAAC,IAAI,CAAC,CASf;AAID,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CA2D5E"}
@@ -0,0 +1,83 @@
1
+ import { useState, useEffect } from "react";
2
+ const DEFAULT_BASE = "/api/todos";
3
+ const DEFAULT_POLL_MS = 2e3;
4
+ function hasEventSource() {
5
+ return typeof globalThis !== "undefined" && typeof globalThis.EventSource !== "undefined";
6
+ }
7
+ function filterQuery(filter) {
8
+ const params = new URLSearchParams();
9
+ if (filter.owner) params.set("owner", filter.owner);
10
+ if (filter.kind) params.set("kind", filter.kind);
11
+ if (filter.state) params.set("state", filter.state);
12
+ for (const [k, v] of Object.entries(filter.labels ?? {})) params.append("label", `${k}=${v}`);
13
+ return params.toString();
14
+ }
15
+ async function answerPrompt(basePath, id, answer) {
16
+ const res = await fetch(`${basePath}/prompts/${encodeURIComponent(id)}/answer`, {
17
+ method: "POST",
18
+ headers: { "Content-Type": "application/json" },
19
+ body: JSON.stringify(answer)
20
+ });
21
+ if (!res.ok) {
22
+ throw new Error(await res.text() || `answer failed: ${res.status}`);
23
+ }
24
+ }
25
+ function usePrompts(options = {}) {
26
+ const {
27
+ owner,
28
+ kind,
29
+ state: stateFilter,
30
+ labels,
31
+ basePath = DEFAULT_BASE,
32
+ enabled = true,
33
+ pollMs = DEFAULT_POLL_MS,
34
+ forcePoll = false
35
+ } = options;
36
+ const [prompts, setPrompts] = useState([]);
37
+ const [status, setStatus] = useState("idle");
38
+ const labelsKey = JSON.stringify(labels ?? {});
39
+ useEffect(() => {
40
+ if (!enabled) return;
41
+ const query = filterQuery({ owner, kind, state: stateFilter, labels });
42
+ if (forcePoll || !hasEventSource()) {
43
+ let stopped = false;
44
+ let timer;
45
+ const tick = async () => {
46
+ try {
47
+ const res = await fetch(`${basePath}/prompts${query ? `?${query}` : ""}`, {
48
+ headers: { Accept: "application/json" }
49
+ });
50
+ if (res.ok) {
51
+ setPrompts(await res.json());
52
+ setStatus("polling");
53
+ }
54
+ } catch {
55
+ setStatus("connection lost — retrying");
56
+ }
57
+ if (!stopped) timer = setTimeout(tick, pollMs);
58
+ };
59
+ void tick();
60
+ return () => {
61
+ stopped = true;
62
+ if (timer) clearTimeout(timer);
63
+ };
64
+ }
65
+ const es = new EventSource(`${basePath}/prompts/stream${query ? `?${query}` : ""}`);
66
+ setStatus("connected");
67
+ es.addEventListener("prompts", (e) => {
68
+ try {
69
+ setPrompts(JSON.parse(e.data));
70
+ } catch {
71
+ }
72
+ });
73
+ es.onerror = () => setStatus("connection lost — retrying");
74
+ return () => es.close();
75
+ }, [owner, kind, stateFilter, labelsKey, basePath, enabled, pollMs, forcePoll]);
76
+ const pending = prompts.filter((p) => p.state === "pending");
77
+ return { prompts, pending, status };
78
+ }
79
+ export {
80
+ answerPrompt,
81
+ usePrompts
82
+ };
83
+ //# sourceMappingURL=use-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-prompts.js","sources":["../../src/hooks/use-prompts.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { JsonSchemaObject } from \"../components/json-schema-form-types\";\n\n// use-prompts is the generic clicky-ui client for the clicky `prompt` manager\n// (the Go-side question/elicitation broker). Like use-task-runs it is SSE-first —\n// it subscribes to the manager's SSEHandler (event: prompts carrying the full\n// filtered listing) and falls back to polling the JSON endpoint. It speaks only\n// PromptSnapshot, no app concepts; producers (commit checks, tool approvals, AI\n// elicitation) are indistinguishable here.\n\n/** PromptSnapshot mirrors the Go prompt.PromptSnapshot wire shape. */\nexport interface PromptSnapshot {\n id: string;\n kind?: string;\n title: string;\n description?: string;\n schema: JsonSchemaObject;\n /** pending | answered | cancelled | expired */\n state: string;\n value?: Record<string, unknown>;\n cancelled?: boolean;\n owner?: string;\n labels?: Record<string, string>;\n createdAt?: string;\n resolvedAt?: string;\n}\n\nexport interface PromptFilter {\n owner?: string | undefined;\n kind?: string | undefined;\n state?: string | undefined;\n labels?: Record<string, string> | undefined;\n}\n\nexport interface UsePromptsOptions extends PromptFilter {\n /** Base path the prompt API is mounted under, e.g. \"/api/todos\". */\n basePath?: string | undefined;\n enabled?: boolean | undefined;\n pollMs?: number | undefined;\n forcePoll?: boolean | undefined;\n}\n\nexport interface UsePromptsResult {\n prompts: PromptSnapshot[];\n /** Pending prompts only (state === \"pending\"), newest first. */\n pending: PromptSnapshot[];\n status: string;\n}\n\nconst DEFAULT_BASE = \"/api/todos\";\nconst DEFAULT_POLL_MS = 2_000;\n\nfunction hasEventSource(): boolean {\n return typeof globalThis !== \"undefined\" && typeof globalThis.EventSource !== \"undefined\";\n}\n\nfunction filterQuery(filter: PromptFilter): string {\n const params = new URLSearchParams();\n if (filter.owner) params.set(\"owner\", filter.owner);\n if (filter.kind) params.set(\"kind\", filter.kind);\n if (filter.state) params.set(\"state\", filter.state);\n for (const [k, v] of Object.entries(filter.labels ?? {})) params.append(\"label\", `${k}=${v}`);\n return params.toString();\n}\n\n/** Resolve a prompt by id with an answer (or cancel it). */\nexport async function answerPrompt(\n basePath: string,\n id: string,\n answer: { values?: Record<string, unknown>; cancelled?: boolean },\n): Promise<void> {\n const res = await fetch(`${basePath}/prompts/${encodeURIComponent(id)}/answer`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(answer),\n });\n if (!res.ok) {\n throw new Error((await res.text()) || `answer failed: ${res.status}`);\n }\n}\n\n// usePrompts subscribes to the filtered prompt listing. The stream has no\n// completion terminal — a dashboard stays subscribed to observe new prompts.\nexport function usePrompts(options: UsePromptsOptions = {}): UsePromptsResult {\n const {\n owner,\n kind,\n state: stateFilter,\n labels,\n basePath = DEFAULT_BASE,\n enabled = true,\n pollMs = DEFAULT_POLL_MS,\n forcePoll = false,\n } = options;\n\n const [prompts, setPrompts] = useState<PromptSnapshot[]>([]);\n const [status, setStatus] = useState(\"idle\");\n\n const labelsKey = JSON.stringify(labels ?? {});\n useEffect(() => {\n if (!enabled) return;\n const query = filterQuery({ owner, kind, state: stateFilter, labels });\n\n if (forcePoll || !hasEventSource()) {\n let stopped = false;\n let timer: ReturnType<typeof setTimeout> | undefined;\n const tick = async () => {\n try {\n const res = await fetch(`${basePath}/prompts${query ? `?${query}` : \"\"}`, {\n headers: { Accept: \"application/json\" },\n });\n if (res.ok) {\n setPrompts((await res.json()) as PromptSnapshot[]);\n setStatus(\"polling\");\n }\n } catch {\n setStatus(\"connection lost — retrying\");\n }\n if (!stopped) timer = setTimeout(tick, pollMs);\n };\n void tick();\n return () => {\n stopped = true;\n if (timer) clearTimeout(timer);\n };\n }\n\n const es = new EventSource(`${basePath}/prompts/stream${query ? `?${query}` : \"\"}`);\n setStatus(\"connected\");\n es.addEventListener(\"prompts\", (e) => {\n try {\n setPrompts(JSON.parse((e as MessageEvent).data) as PromptSnapshot[]);\n } catch {\n /* ignore malformed frame */\n }\n });\n es.onerror = () => setStatus(\"connection lost — retrying\");\n return () => es.close();\n }, [owner, kind, stateFilter, labelsKey, basePath, enabled, pollMs, forcePoll]);\n\n const pending = prompts.filter((p) => p.state === \"pending\");\n return { prompts, pending, status };\n}\n"],"names":[],"mappings":";AAiDA,MAAM,eAAe;AACrB,MAAM,kBAAkB;AAExB,SAAS,iBAA0B;AACjC,SAAO,OAAO,eAAe,eAAe,OAAO,WAAW,gBAAgB;AAChF;AAEA,SAAS,YAAY,QAA8B;AACjD,QAAM,SAAS,IAAI,gBAAA;AACnB,MAAI,OAAO,MAAO,QAAO,IAAI,SAAS,OAAO,KAAK;AAClD,MAAI,OAAO,KAAM,QAAO,IAAI,QAAQ,OAAO,IAAI;AAC/C,MAAI,OAAO,MAAO,QAAO,IAAI,SAAS,OAAO,KAAK;AAClD,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,OAAO,UAAU,CAAA,CAAE,UAAU,OAAO,SAAS,GAAG,CAAC,IAAI,CAAC,EAAE;AAC5F,SAAO,OAAO,SAAA;AAChB;AAGA,eAAsB,aACpB,UACA,IACA,QACe;AACf,QAAM,MAAM,MAAM,MAAM,GAAG,QAAQ,YAAY,mBAAmB,EAAE,CAAC,WAAW;AAAA,IAC9E,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,IAC3B,MAAM,KAAK,UAAU,MAAM;AAAA,EAAA,CAC5B;AACD,MAAI,CAAC,IAAI,IAAI;AACX,UAAM,IAAI,MAAO,MAAM,IAAI,UAAW,kBAAkB,IAAI,MAAM,EAAE;AAAA,EACtE;AACF;AAIO,SAAS,WAAW,UAA6B,IAAsB;AAC5E,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,WAAW;AAAA,IACX,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,EAAA,IACV;AAEJ,QAAM,CAAC,SAAS,UAAU,IAAI,SAA2B,CAAA,CAAE;AAC3D,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,MAAM;AAE3C,QAAM,YAAY,KAAK,UAAU,UAAU,CAAA,CAAE;AAC7C,YAAU,MAAM;AACd,QAAI,CAAC,QAAS;AACd,UAAM,QAAQ,YAAY,EAAE,OAAO,MAAM,OAAO,aAAa,QAAQ;AAErE,QAAI,aAAa,CAAC,kBAAkB;AAClC,UAAI,UAAU;AACd,UAAI;AACJ,YAAM,OAAO,YAAY;AACvB,YAAI;AACF,gBAAM,MAAM,MAAM,MAAM,GAAG,QAAQ,WAAW,QAAQ,IAAI,KAAK,KAAK,EAAE,IAAI;AAAA,YACxE,SAAS,EAAE,QAAQ,mBAAA;AAAA,UAAmB,CACvC;AACD,cAAI,IAAI,IAAI;AACV,uBAAY,MAAM,IAAI,MAA2B;AACjD,sBAAU,SAAS;AAAA,UACrB;AAAA,QACF,QAAQ;AACN,oBAAU,4BAA4B;AAAA,QACxC;AACA,YAAI,CAAC,QAAS,SAAQ,WAAW,MAAM,MAAM;AAAA,MAC/C;AACA,WAAK,KAAA;AACL,aAAO,MAAM;AACX,kBAAU;AACV,YAAI,oBAAoB,KAAK;AAAA,MAC/B;AAAA,IACF;AAEA,UAAM,KAAK,IAAI,YAAY,GAAG,QAAQ,kBAAkB,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE;AAClF,cAAU,WAAW;AACrB,OAAG,iBAAiB,WAAW,CAAC,MAAM;AACpC,UAAI;AACF,mBAAW,KAAK,MAAO,EAAmB,IAAI,CAAqB;AAAA,MACrE,QAAQ;AAAA,MAER;AAAA,IACF,CAAC;AACD,OAAG,UAAU,MAAM,UAAU,4BAA4B;AACzD,WAAO,MAAM,GAAG,MAAA;AAAA,EAClB,GAAG,CAAC,OAAO,MAAM,aAAa,WAAW,UAAU,SAAS,QAAQ,SAAS,CAAC;AAE9E,QAAM,UAAU,QAAQ,OAAO,CAAC,MAAM,EAAE,UAAU,SAAS;AAC3D,SAAO,EAAE,SAAS,SAAS,OAAA;AAC7B;"}
package/dist/hooks.cjs CHANGED
@@ -7,6 +7,7 @@ const densityProvider = require("./hooks/density-provider.cjs");
7
7
  const useSort = require("./hooks/use-sort.cjs");
8
8
  const useHistoryRoute = require("./hooks/use-history-route.cjs");
9
9
  const useTaskRun = require("./hooks/use-task-run.cjs");
10
+ const usePrompts = require("./hooks/use-prompts.cjs");
10
11
  exports.useOptionalTheme = useTheme.useOptionalTheme;
11
12
  exports.useResolvedTheme = useTheme.useResolvedTheme;
12
13
  exports.useTheme = useTheme.useTheme;
@@ -19,4 +20,6 @@ exports.useSort = useSort.useSort;
19
20
  exports.useHistoryRoute = useHistoryRoute.useHistoryRoute;
20
21
  exports.useTaskRun = useTaskRun.useTaskRun;
21
22
  exports.useTaskRuns = useTaskRun.useTaskRuns;
23
+ exports.answerPrompt = usePrompts.answerPrompt;
24
+ exports.usePrompts = usePrompts.usePrompts;
22
25
  //# sourceMappingURL=hooks.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"hooks.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/hooks.d.ts CHANGED
@@ -5,4 +5,5 @@ export { DensityProvider, DensityValueProvider, type DensityProviderProps, } fro
5
5
  export { useSort, type SortDir, type SortState, type UseSortOptions, type UseSortReturn, } from './hooks/use-sort';
6
6
  export { useHistoryRoute, type UseHistoryRouteOptions } from './hooks/use-history-route';
7
7
  export { useTaskRun, useTaskRuns, type UseTaskRunOptions, type UseTaskRunResult, type UseTaskRunsOptions, type UseTaskRunsResult, type TaskTransportOptions, } from './hooks/use-task-run';
8
+ export { usePrompts, answerPrompt, type PromptSnapshot, type PromptFilter, type UsePromptsOptions, type UsePromptsResult, } from './hooks/use-prompts';
8
9
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,KAAK,EACV,KAAK,aAAa,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,KAAK,oBAAoB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,OAAO,EACP,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EACL,UAAU,EACV,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,KAAK,EACV,KAAK,aAAa,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,KAAK,oBAAoB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,OAAO,EACP,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EACL,UAAU,EACV,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,qBAAqB,CAAC"}
package/dist/hooks.js CHANGED
@@ -5,14 +5,17 @@ import { DensityProvider, DensityValueProvider } from "./hooks/density-provider.
5
5
  import { useSort } from "./hooks/use-sort.js";
6
6
  import { useHistoryRoute } from "./hooks/use-history-route.js";
7
7
  import { useTaskRun, useTaskRuns } from "./hooks/use-task-run.js";
8
+ import { answerPrompt, usePrompts } from "./hooks/use-prompts.js";
8
9
  export {
9
10
  DensityProvider,
10
11
  DensityValueProvider,
11
12
  ThemeProvider,
13
+ answerPrompt,
12
14
  useDensity,
13
15
  useDensityValue,
14
16
  useHistoryRoute,
15
17
  useOptionalTheme,
18
+ usePrompts,
16
19
  useResolvedTheme,
17
20
  useSort,
18
21
  useTaskRun,
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
1
+ {"version":3,"file":"hooks.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
package/dist/index.cjs CHANGED
@@ -11,6 +11,7 @@ const densityProvider = require("./hooks/density-provider.cjs");
11
11
  const useSort = require("./hooks/use-sort.cjs");
12
12
  const useHistoryRoute = require("./hooks/use-history-route.cjs");
13
13
  const useTaskRun = require("./hooks/use-task-run.cjs");
14
+ const usePrompts = require("./hooks/use-prompts.cjs");
14
15
  const button = require("./components/button.cjs");
15
16
  const loading = require("./components/loading.cjs");
16
17
  const buttonVariants = require("./components/button-variants.cjs");
@@ -41,7 +42,10 @@ const SecretKeySelector = require("./components/SecretKeySelector.cjs");
41
42
  const themeSwitcher = require("./components/theme-switcher.cjs");
42
43
  const densitySwitcher = require("./components/density-switcher.cjs");
43
44
  const iconMenuPicker = require("./components/icon-menu-picker.cjs");
45
+ const ListMenu = require("./components/ListMenu.cjs");
46
+ const useListMenuSelection = require("./components/use-list-menu-selection.cjs");
44
47
  const JsonSchemaForm = require("./components/JsonSchemaForm.cjs");
48
+ const FormLookupProvider = require("./components/FormLookupProvider.cjs");
45
49
  const formLookupContext = require("./components/form-lookup-context.cjs");
46
50
  const jsonSchemaFormSize = require("./components/json-schema-form-size.cjs");
47
51
  const jsonSchemaFormPreferences = require("./components/json-schema-form-preferences.cjs");
@@ -122,6 +126,8 @@ const TaskSnapshot = require("./data/TaskSnapshot.cjs");
122
126
  const taskStatus = require("./data/task-status.cjs");
123
127
  const TaskProgress = require("./data/TaskProgress.cjs");
124
128
  const TaskManager = require("./data/TaskManager.cjs");
129
+ const PromptDialog = require("./data/PromptDialog.cjs");
130
+ const PromptBanner = require("./data/PromptBanner.cjs");
125
131
  const DiagnosticsTree = require("./data/diagnostics/DiagnosticsTree.cjs");
126
132
  const DiagnosticsDetailPanel = require("./data/diagnostics/DiagnosticsDetailPanel.cjs");
127
133
  const utils$1 = require("./data/diagnostics/utils.cjs");
@@ -477,6 +483,8 @@ exports.useSort = useSort.useSort;
477
483
  exports.useHistoryRoute = useHistoryRoute.useHistoryRoute;
478
484
  exports.useTaskRun = useTaskRun.useTaskRun;
479
485
  exports.useTaskRuns = useTaskRun.useTaskRuns;
486
+ exports.answerPrompt = usePrompts.answerPrompt;
487
+ exports.usePrompts = usePrompts.usePrompts;
480
488
  exports.Button = button.Button;
481
489
  exports.Loading = loading.Loading;
482
490
  exports.LoadingDots = loading.LoadingDots;
@@ -512,8 +520,14 @@ exports.SecretKeySelector = SecretKeySelector.SecretKeySelector;
512
520
  exports.ThemeSwitcher = themeSwitcher.ThemeSwitcher;
513
521
  exports.DensitySwitcher = densitySwitcher.DensitySwitcher;
514
522
  exports.IconMenuPicker = iconMenuPicker.IconMenuPicker;
523
+ exports.ListMenu = ListMenu.ListMenu;
524
+ exports.ListMenuActionBar = ListMenu.ListMenuActionBar;
525
+ exports.ListMenuHeader = ListMenu.ListMenuHeader;
526
+ exports.ListMenuItem = ListMenu.ListMenuItem;
527
+ exports.ListMenuSection = ListMenu.ListMenuSection;
528
+ exports.useListMenuSelection = useListMenuSelection.useListMenuSelection;
515
529
  exports.JsonSchemaForm = JsonSchemaForm.JsonSchemaForm;
516
- exports.FormLookupProvider = formLookupContext.FormLookupProvider;
530
+ exports.FormLookupProvider = FormLookupProvider.FormLookupProvider;
517
531
  exports.resolveLookupScope = formLookupContext.resolveLookupScope;
518
532
  exports.useLookupFetcher = formLookupContext.useLookupFetcher;
519
533
  exports.DEFAULT_FORM_SIZE = jsonSchemaFormSize.DEFAULT_FORM_SIZE;
@@ -637,6 +651,8 @@ exports.taskStatusColor = taskStatus.taskStatusColor;
637
651
  exports.taskStatusIcon = taskStatus.taskStatusIcon;
638
652
  exports.TaskProgress = TaskProgress.TaskProgress;
639
653
  exports.TaskManager = TaskManager.TaskManager;
654
+ exports.PromptDialog = PromptDialog.PromptDialog;
655
+ exports.PromptBanner = PromptBanner.PromptBanner;
640
656
  exports.DiagnosticsTree = DiagnosticsTree.DiagnosticsTree;
641
657
  exports.DiagnosticsDetailPanel = DiagnosticsDetailPanel.DiagnosticsDetailPanel;
642
658
  exports.countProcesses = utils$1.countProcesses;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.js CHANGED
@@ -9,6 +9,7 @@ import { DensityProvider, DensityValueProvider } from "./hooks/density-provider.
9
9
  import { useSort } from "./hooks/use-sort.js";
10
10
  import { useHistoryRoute } from "./hooks/use-history-route.js";
11
11
  import { useTaskRun, useTaskRuns } from "./hooks/use-task-run.js";
12
+ import { answerPrompt, usePrompts } from "./hooks/use-prompts.js";
12
13
  import { Button } from "./components/button.js";
13
14
  import { Loading, LoadingDots } from "./components/loading.js";
14
15
  import { buttonVariants } from "./components/button-variants.js";
@@ -39,8 +40,11 @@ import { SecretKeySelector } from "./components/SecretKeySelector.js";
39
40
  import { ThemeSwitcher } from "./components/theme-switcher.js";
40
41
  import { DensitySwitcher } from "./components/density-switcher.js";
41
42
  import { IconMenuPicker } from "./components/icon-menu-picker.js";
43
+ import { ListMenu, ListMenuActionBar, ListMenuHeader, ListMenuItem, ListMenuSection } from "./components/ListMenu.js";
44
+ import { useListMenuSelection } from "./components/use-list-menu-selection.js";
42
45
  import { JsonSchemaForm } from "./components/JsonSchemaForm.js";
43
- import { FormLookupProvider, resolveLookupScope, useLookupFetcher } from "./components/form-lookup-context.js";
46
+ import { FormLookupProvider } from "./components/FormLookupProvider.js";
47
+ import { resolveLookupScope, useLookupFetcher } from "./components/form-lookup-context.js";
44
48
  import { DEFAULT_FORM_SIZE } from "./components/json-schema-form-size.js";
45
49
  import { DEFAULT_PREFERENCES_STORAGE_KEY, readPreferences, writePreferences } from "./components/json-schema-form-preferences.js";
46
50
  import { effectiveProperties, isOpenStringMap, matchesIf, resolveControl } from "./components/json-schema-form-resolve.js";
@@ -120,6 +124,8 @@ import { allGroupsTerminal, isTerminalStatus } from "./data/TaskSnapshot.js";
120
124
  import { bucketTasks, logLevelColor, taskSegments, taskStatusBg, taskStatusColor, taskStatusIcon } from "./data/task-status.js";
121
125
  import { TaskProgress } from "./data/TaskProgress.js";
122
126
  import { TaskManager } from "./data/TaskManager.js";
127
+ import { PromptDialog } from "./data/PromptDialog.js";
128
+ import { PromptBanner } from "./data/PromptBanner.js";
123
129
  import { DiagnosticsTree } from "./data/diagnostics/DiagnosticsTree.js";
124
130
  import { DiagnosticsDetailPanel } from "./data/diagnostics/DiagnosticsDetailPanel.js";
125
131
  import { countProcesses, findProcessByPID, processLabel, processStateColor, processStateIcon } from "./data/diagnostics/utils.js";
@@ -533,6 +539,11 @@ export {
533
539
  JvmStackTrace,
534
540
  KeyValueList,
535
541
  LabelIcon,
542
+ ListMenu,
543
+ ListMenuActionBar,
544
+ ListMenuHeader,
545
+ ListMenuItem,
546
+ ListMenuSection,
536
547
  Loading,
537
548
  LoadingDots,
538
549
  LogViewer,
@@ -557,6 +568,8 @@ export {
557
568
  PrettyStackTrace,
558
569
  ProgressBar,
559
570
  ProgressBars,
571
+ PromptBanner,
572
+ PromptDialog,
560
573
  Properties,
561
574
  RadialGauge,
562
575
  RangeSlider,
@@ -1107,6 +1120,7 @@ export {
1107
1120
  WorkloadPicker,
1108
1121
  allGroupsTerminal,
1109
1122
  annotateRoutePaths,
1123
+ answerPrompt,
1110
1124
  applyCommentFilters,
1111
1125
  applyFilterExtensions,
1112
1126
  assignAxes,
@@ -1260,6 +1274,7 @@ export {
1260
1274
  useDensityValue,
1261
1275
  useForm,
1262
1276
  useHistoryRoute,
1277
+ useListMenuSelection,
1263
1278
  useLookupFetcher,
1264
1279
  useMemoryRouter,
1265
1280
  useModalStack,
@@ -1267,6 +1282,7 @@ export {
1267
1282
  useOperationById,
1268
1283
  useOperations,
1269
1284
  useOptionalTheme,
1285
+ usePrompts,
1270
1286
  useResolvedTheme,
1271
1287
  useRouter,
1272
1288
  useSort,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/jotai.cjs ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jotaiBindings = require("./components/jotai-bindings.cjs");
4
+ const jotaiBindingsCore = require("./components/jotai-bindings-core.cjs");
5
+ exports.JotaiFilterBar = jotaiBindings.JotaiFilterBar;
6
+ exports.JotaiJsonSchemaForm = jotaiBindings.JotaiJsonSchemaForm;
7
+ exports.useJotaiFilterBarProps = jotaiBindingsCore.useJotaiFilterBarProps;
8
+ exports.useJotaiJsonSchemaFormProps = jotaiBindingsCore.useJotaiJsonSchemaFormProps;
9
+ //# sourceMappingURL=jotai.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jotai.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -0,0 +1,4 @@
1
+ export { JotaiFilterBar, JotaiJsonSchemaForm, } from './components/jotai-bindings';
2
+ export { useJotaiFilterBarProps, useJotaiJsonSchemaFormProps, } from './components/jotai-bindings-core';
3
+ export type { JotaiFilterBarBooleanFilter, JotaiFilterBarEnumFilter, JotaiFilterBarFilter, JotaiFilterBarLookupFilter, JotaiFilterBarLookupMultiFilter, JotaiFilterBarMultiFilter, JotaiFilterBarNestedMultiFilter, JotaiFilterBarNumberFilter, JotaiFilterBarProps, JotaiFilterBarRangeProps, JotaiFilterBarRangeValue, JotaiFilterBarSearchProps, JotaiFilterBarSelectMultiFilter, JotaiFilterBarTextFilter, JotaiJsonSchemaFormAtom, JotaiJsonSchemaFormProps, JotaiWritableAtom, } from './components/jotai-bindings-core';
4
+ //# sourceMappingURL=jotai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jotai.d.ts","sourceRoot":"","sources":["../src/jotai.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,2BAA2B,EAC3B,wBAAwB,EACxB,oBAAoB,EACpB,0BAA0B,EAC1B,+BAA+B,EAC/B,yBAAyB,EACzB,+BAA+B,EAC/B,0BAA0B,EAC1B,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,EACzB,+BAA+B,EAC/B,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,kCAAkC,CAAC"}
package/dist/jotai.js ADDED
@@ -0,0 +1,9 @@
1
+ import { JotaiFilterBar, JotaiJsonSchemaForm } from "./components/jotai-bindings.js";
2
+ import { useJotaiFilterBarProps, useJotaiJsonSchemaFormProps } from "./components/jotai-bindings-core.js";
3
+ export {
4
+ JotaiFilterBar,
5
+ JotaiJsonSchemaForm,
6
+ useJotaiFilterBarProps,
7
+ useJotaiJsonSchemaFormProps
8
+ };
9
+ //# sourceMappingURL=jotai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jotai.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -2,8 +2,25 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const clsx = require("clsx");
4
4
  const tailwindMerge = require("tailwind-merge");
5
+ const DENSITY = ["density-1", "density-2", "density-3", "density-4"];
6
+ const twMerge = tailwindMerge.extendTailwindMerge({
7
+ extend: {
8
+ classGroups: {
9
+ h: [{ h: ["control-h", ...DENSITY] }],
10
+ w: [{ w: ["control-h"] }],
11
+ p: [{ p: DENSITY }],
12
+ px: [{ px: ["control-px", ...DENSITY] }],
13
+ py: [{ py: DENSITY }],
14
+ m: [{ m: DENSITY }],
15
+ mt: [{ mt: DENSITY }],
16
+ mb: [{ mb: DENSITY }],
17
+ gap: [{ gap: DENSITY }],
18
+ "font-size": [{ text: ["density-base"] }]
19
+ }
20
+ }
21
+ });
5
22
  function cn(...inputs) {
6
- return tailwindMerge.twMerge(clsx.clsx(inputs));
23
+ return twMerge(clsx.clsx(inputs));
7
24
  }
8
25
  exports.cn = cn;
9
26
  //# sourceMappingURL=utils.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","sources":["../../src/lib/utils.ts"],"sourcesContent":["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"],"names":["twMerge","clsx"],"mappings":";;;;AAGO,SAAS,MAAM,QAA8B;AAClD,SAAOA,cAAAA,QAAQC,UAAK,MAAM,CAAC;AAC7B;;"}
1
+ {"version":3,"file":"utils.cjs","sources":["../../src/lib/utils.ts"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\n// The design system exposes density-aware utilities backed by CSS variables\n// (h-control-h, px-control-px, gap-density-2, text-density-base, …). Plain\n// tailwind-merge doesn't know these belong to the height/width/spacing/font-size\n// scales, so it can't tell that a consumer's `h-auto`/`px-3`/etc. is meant to\n// override a component's base `h-control-h`/`px-control-px` — it keeps both and\n// the base wins. Registering the tokens with their class groups lets overrides\n// win as intended. Keep this list in sync with the tokens in tailwind-preset.ts.\nconst DENSITY = [\"density-1\", \"density-2\", \"density-3\", \"density-4\"];\nconst twMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n h: [{ h: [\"control-h\", ...DENSITY] }],\n w: [{ w: [\"control-h\"] }],\n p: [{ p: DENSITY }],\n px: [{ px: [\"control-px\", ...DENSITY] }],\n py: [{ py: DENSITY }],\n m: [{ m: DENSITY }],\n mt: [{ mt: DENSITY }],\n mb: [{ mb: DENSITY }],\n gap: [{ gap: DENSITY }],\n \"font-size\": [{ text: [\"density-base\"] }],\n },\n },\n});\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"],"names":["extendTailwindMerge","clsx"],"mappings":";;;;AAUA,MAAM,UAAU,CAAC,aAAa,aAAa,aAAa,WAAW;AACnE,MAAM,UAAUA,cAAAA,oBAAoB;AAAA,EAClC,QAAQ;AAAA,IACN,aAAa;AAAA,MACX,GAAG,CAAC,EAAE,GAAG,CAAC,aAAa,GAAG,OAAO,GAAG;AAAA,MACpC,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,GAAG;AAAA,MACxB,GAAG,CAAC,EAAE,GAAG,SAAS;AAAA,MAClB,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,GAAG;AAAA,MACvC,IAAI,CAAC,EAAE,IAAI,SAAS;AAAA,MACpB,GAAG,CAAC,EAAE,GAAG,SAAS;AAAA,MAClB,IAAI,CAAC,EAAE,IAAI,SAAS;AAAA,MACpB,IAAI,CAAC,EAAE,IAAI,SAAS;AAAA,MACpB,KAAK,CAAC,EAAE,KAAK,SAAS;AAAA,MACtB,aAAa,CAAC,EAAE,MAAM,CAAC,cAAc,GAAG;AAAA,IAAA;AAAA,EAC1C;AAEJ,CAAC;AAEM,SAAS,MAAM,QAA8B;AAClD,SAAO,QAAQC,UAAK,MAAM,CAAC;AAC7B;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAElD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AA4B7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAElD"}
package/dist/lib/utils.js CHANGED
@@ -1,5 +1,22 @@
1
1
  import { clsx } from "clsx";
2
- import { twMerge } from "tailwind-merge";
2
+ import { extendTailwindMerge } from "tailwind-merge";
3
+ const DENSITY = ["density-1", "density-2", "density-3", "density-4"];
4
+ const twMerge = extendTailwindMerge({
5
+ extend: {
6
+ classGroups: {
7
+ h: [{ h: ["control-h", ...DENSITY] }],
8
+ w: [{ w: ["control-h"] }],
9
+ p: [{ p: DENSITY }],
10
+ px: [{ px: ["control-px", ...DENSITY] }],
11
+ py: [{ py: DENSITY }],
12
+ m: [{ m: DENSITY }],
13
+ mt: [{ mt: DENSITY }],
14
+ mb: [{ mb: DENSITY }],
15
+ gap: [{ gap: DENSITY }],
16
+ "font-size": [{ text: ["density-base"] }]
17
+ }
18
+ }
19
+ });
3
20
  function cn(...inputs) {
4
21
  return twMerge(clsx(inputs));
5
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../src/lib/utils.ts"],"sourcesContent":["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"],"names":[],"mappings":";;AAGO,SAAS,MAAM,QAA8B;AAClD,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;"}
1
+ {"version":3,"file":"utils.js","sources":["../../src/lib/utils.ts"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\n// The design system exposes density-aware utilities backed by CSS variables\n// (h-control-h, px-control-px, gap-density-2, text-density-base, …). Plain\n// tailwind-merge doesn't know these belong to the height/width/spacing/font-size\n// scales, so it can't tell that a consumer's `h-auto`/`px-3`/etc. is meant to\n// override a component's base `h-control-h`/`px-control-px` — it keeps both and\n// the base wins. Registering the tokens with their class groups lets overrides\n// win as intended. Keep this list in sync with the tokens in tailwind-preset.ts.\nconst DENSITY = [\"density-1\", \"density-2\", \"density-3\", \"density-4\"];\nconst twMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n h: [{ h: [\"control-h\", ...DENSITY] }],\n w: [{ w: [\"control-h\"] }],\n p: [{ p: DENSITY }],\n px: [{ px: [\"control-px\", ...DENSITY] }],\n py: [{ py: DENSITY }],\n m: [{ m: DENSITY }],\n mt: [{ mt: DENSITY }],\n mb: [{ mb: DENSITY }],\n gap: [{ gap: DENSITY }],\n \"font-size\": [{ text: [\"density-base\"] }],\n },\n },\n});\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"],"names":[],"mappings":";;AAUA,MAAM,UAAU,CAAC,aAAa,aAAa,aAAa,WAAW;AACnE,MAAM,UAAU,oBAAoB;AAAA,EAClC,QAAQ;AAAA,IACN,aAAa;AAAA,MACX,GAAG,CAAC,EAAE,GAAG,CAAC,aAAa,GAAG,OAAO,GAAG;AAAA,MACpC,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,GAAG;AAAA,MACxB,GAAG,CAAC,EAAE,GAAG,SAAS;AAAA,MAClB,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,GAAG;AAAA,MACvC,IAAI,CAAC,EAAE,IAAI,SAAS;AAAA,MACpB,GAAG,CAAC,EAAE,GAAG,SAAS;AAAA,MAClB,IAAI,CAAC,EAAE,IAAI,SAAS;AAAA,MACpB,IAAI,CAAC,EAAE,IAAI,SAAS;AAAA,MACpB,KAAK,CAAC,EAAE,KAAK,SAAS;AAAA,MACtB,aAAa,CAAC,EAAE,MAAM,CAAC,cAAc,GAAG;AAAA,IAAA;AAAA,EAC1C;AAEJ,CAAC;AAEM,SAAS,MAAM,QAA8B;AAClD,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const MdxEditorField = require("./components/MdxEditorField.cjs");
4
+ exports.MdxEditorField = MdxEditorField.MdxEditorField;
5
+ //# sourceMappingURL=mdx-editor.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdx-editor.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}