@flanksource/clicky-ui 0.3.58 → 0.3.60

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 (504) hide show
  1. package/NOTICE.md +58 -0
  2. package/dist/clicky.cjs +3 -1
  3. package/dist/clicky.d.ts +1 -0
  4. package/dist/clicky.d.ts.map +1 -1
  5. package/dist/clicky.js +3 -1
  6. package/dist/data/Clicky.cjs +23 -270
  7. package/dist/data/Clicky.cjs.map +1 -1
  8. package/dist/data/Clicky.d.ts +5 -29
  9. package/dist/data/Clicky.d.ts.map +1 -1
  10. package/dist/data/Clicky.js +11 -259
  11. package/dist/data/Clicky.js.map +1 -1
  12. package/dist/data/PromptBanner.model.cjs +10 -0
  13. package/dist/data/PromptBanner.model.cjs.map +1 -1
  14. package/dist/data/PromptBanner.model.d.ts +2 -0
  15. package/dist/data/PromptBanner.model.d.ts.map +1 -1
  16. package/dist/data/PromptBanner.model.js +10 -1
  17. package/dist/data/PromptBanner.model.js.map +1 -1
  18. package/dist/data/PromptDialog.cjs +16 -49
  19. package/dist/data/PromptDialog.cjs.map +1 -1
  20. package/dist/data/PromptDialog.d.ts +7 -1
  21. package/dist/data/PromptDialog.d.ts.map +1 -1
  22. package/dist/data/PromptDialog.js +17 -50
  23. package/dist/data/PromptDialog.js.map +1 -1
  24. package/dist/data/PromptForm.cjs +79 -0
  25. package/dist/data/PromptForm.cjs.map +1 -0
  26. package/dist/data/PromptForm.d.ts +26 -0
  27. package/dist/data/PromptForm.d.ts.map +1 -0
  28. package/dist/data/PromptForm.js +79 -0
  29. package/dist/data/PromptForm.js.map +1 -0
  30. package/dist/data/PromptIndicator.cjs +82 -0
  31. package/dist/data/PromptIndicator.cjs.map +1 -0
  32. package/dist/data/PromptIndicator.d.ts +19 -0
  33. package/dist/data/PromptIndicator.d.ts.map +1 -0
  34. package/dist/data/PromptIndicator.js +82 -0
  35. package/dist/data/PromptIndicator.js.map +1 -0
  36. package/dist/data/PromptList.cjs +67 -0
  37. package/dist/data/PromptList.cjs.map +1 -0
  38. package/dist/data/PromptList.d.ts +13 -0
  39. package/dist/data/PromptList.d.ts.map +1 -0
  40. package/dist/data/PromptList.js +67 -0
  41. package/dist/data/PromptList.js.map +1 -0
  42. package/dist/data/clicky-download.cjs +251 -0
  43. package/dist/data/clicky-download.cjs.map +1 -0
  44. package/dist/data/clicky-download.d.ts +55 -0
  45. package/dist/data/clicky-download.d.ts.map +1 -0
  46. package/dist/data/clicky-download.js +244 -0
  47. package/dist/data/clicky-download.js.map +1 -0
  48. package/dist/data/git/GitChangeList.cjs +11 -4
  49. package/dist/data/git/GitChangeList.cjs.map +1 -1
  50. package/dist/data/git/GitChangeList.d.ts +2 -35
  51. package/dist/data/git/GitChangeList.d.ts.map +1 -1
  52. package/dist/data/git/GitChangeList.js +11 -4
  53. package/dist/data/git/GitChangeList.js.map +1 -1
  54. package/dist/data/git/GitLink.cjs +13 -0
  55. package/dist/data/git/GitLink.cjs.map +1 -0
  56. package/dist/data/git/GitLink.d.ts +8 -0
  57. package/dist/data/git/GitLink.d.ts.map +1 -0
  58. package/dist/data/git/GitLink.js +13 -0
  59. package/dist/data/git/GitLink.js.map +1 -0
  60. package/dist/data/git/git-links.cjs +54 -0
  61. package/dist/data/git/git-links.cjs.map +1 -0
  62. package/dist/data/git/git-links.d.ts +4 -0
  63. package/dist/data/git/git-links.d.ts.map +1 -0
  64. package/dist/data/git/git-links.js +53 -0
  65. package/dist/data/git/git-links.js.map +1 -0
  66. package/dist/data/git/index.d.ts +3 -0
  67. package/dist/data/git/index.d.ts.map +1 -1
  68. package/dist/data/git/types.d.ts +54 -0
  69. package/dist/data/git/types.d.ts.map +1 -0
  70. package/dist/data/test-runner/MatrixMarks.cjs +4 -3
  71. package/dist/data/test-runner/MatrixMarks.cjs.map +1 -1
  72. package/dist/data/test-runner/MatrixMarks.d.ts +7 -4
  73. package/dist/data/test-runner/MatrixMarks.d.ts.map +1 -1
  74. package/dist/data/test-runner/MatrixMarks.js +4 -3
  75. package/dist/data/test-runner/MatrixMarks.js.map +1 -1
  76. package/dist/data/test-runner/TestRunSummary.cjs +1 -1
  77. package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
  78. package/dist/data/test-runner/TestRunSummary.js +1 -1
  79. package/dist/data/test-runner/TestRunSummary.js.map +1 -1
  80. package/dist/data/test-runner/TestTree.cjs +1 -1
  81. package/dist/data/test-runner/TestTree.cjs.map +1 -1
  82. package/dist/data/test-runner/TestTree.js +1 -1
  83. package/dist/data/test-runner/TestTree.js.map +1 -1
  84. package/dist/data/test-runner/TestTreeNode.cjs +2 -2
  85. package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
  86. package/dist/data/test-runner/TestTreeNode.js +2 -2
  87. package/dist/data/test-runner/TestTreeNode.js.map +1 -1
  88. package/dist/data/test-runner/adapter.cjs +7 -0
  89. package/dist/data/test-runner/adapter.cjs.map +1 -1
  90. package/dist/data/test-runner/adapter.d.ts +7 -0
  91. package/dist/data/test-runner/adapter.d.ts.map +1 -1
  92. package/dist/data/test-runner/adapter.js +7 -0
  93. package/dist/data/test-runner/adapter.js.map +1 -1
  94. package/dist/data/test-runner/index.d.ts +1 -1
  95. package/dist/data/test-runner/index.d.ts.map +1 -1
  96. package/dist/data/test-runner/marks.cjs +3 -3
  97. package/dist/data/test-runner/marks.cjs.map +1 -1
  98. package/dist/data/test-runner/marks.js +3 -3
  99. package/dist/data/test-runner/marks.js.map +1 -1
  100. package/dist/data/test-runner/matrix-marks.cjs +12 -3
  101. package/dist/data/test-runner/matrix-marks.cjs.map +1 -1
  102. package/dist/data/test-runner/matrix-marks.d.ts +13 -0
  103. package/dist/data/test-runner/matrix-marks.d.ts.map +1 -1
  104. package/dist/data/test-runner/matrix-marks.js +12 -3
  105. package/dist/data/test-runner/matrix-marks.js.map +1 -1
  106. package/dist/data/test-runner/status.cjs +1 -1
  107. package/dist/data/test-runner/status.cjs.map +1 -1
  108. package/dist/data/test-runner/status.js +1 -1
  109. package/dist/data/test-runner/status.js.map +1 -1
  110. package/dist/data/test-runner/types.d.ts +2 -0
  111. package/dist/data/test-runner/types.d.ts.map +1 -1
  112. package/dist/data/traces/index.d.ts +2 -0
  113. package/dist/data/traces/index.d.ts.map +1 -1
  114. package/dist/data/traces/otel/OtelTraceDetail.cjs +102 -78
  115. package/dist/data/traces/otel/OtelTraceDetail.cjs.map +1 -1
  116. package/dist/data/traces/otel/OtelTraceDetail.d.ts +6 -2
  117. package/dist/data/traces/otel/OtelTraceDetail.d.ts.map +1 -1
  118. package/dist/data/traces/otel/OtelTraceDetail.js +102 -78
  119. package/dist/data/traces/otel/OtelTraceDetail.js.map +1 -1
  120. package/dist/data/traces/otel/OtelTraceTable.cjs +43 -7
  121. package/dist/data/traces/otel/OtelTraceTable.cjs.map +1 -1
  122. package/dist/data/traces/otel/OtelTraceTable.d.ts +14 -3
  123. package/dist/data/traces/otel/OtelTraceTable.d.ts.map +1 -1
  124. package/dist/data/traces/otel/OtelTraceTable.js +44 -8
  125. package/dist/data/traces/otel/OtelTraceTable.js.map +1 -1
  126. package/dist/data/traces/otel/profile-listing.cjs +61 -0
  127. package/dist/data/traces/otel/profile-listing.cjs.map +1 -0
  128. package/dist/data/traces/otel/profile-listing.d.ts +23 -0
  129. package/dist/data/traces/otel/profile-listing.d.ts.map +1 -0
  130. package/dist/data/traces/otel/profile-listing.js +60 -0
  131. package/dist/data/traces/otel/profile-listing.js.map +1 -0
  132. package/dist/data/traces/otel/profile-spans.cjs +22 -0
  133. package/dist/data/traces/otel/profile-spans.cjs.map +1 -0
  134. package/dist/data/traces/otel/profile-spans.d.ts +4 -0
  135. package/dist/data/traces/otel/profile-spans.d.ts.map +1 -0
  136. package/dist/data/traces/otel/profile-spans.js +22 -0
  137. package/dist/data/traces/otel/profile-spans.js.map +1 -0
  138. package/dist/data/traces/otel/span-traces.cjs +7 -1
  139. package/dist/data/traces/otel/span-traces.cjs.map +1 -1
  140. package/dist/data/traces/otel/span-traces.d.ts +2 -0
  141. package/dist/data/traces/otel/span-traces.d.ts.map +1 -1
  142. package/dist/data/traces/otel/span-traces.js +7 -2
  143. package/dist/data/traces/otel/span-traces.js.map +1 -1
  144. package/dist/data/useClickyTableMenu.cjs +33 -0
  145. package/dist/data/useClickyTableMenu.cjs.map +1 -0
  146. package/dist/data/useClickyTableMenu.d.ts +17 -0
  147. package/dist/data/useClickyTableMenu.d.ts.map +1 -0
  148. package/dist/data/useClickyTableMenu.js +33 -0
  149. package/dist/data/useClickyTableMenu.js.map +1 -0
  150. package/dist/data/verification/adapterViews.cjs +3 -1
  151. package/dist/data/verification/adapterViews.cjs.map +1 -1
  152. package/dist/data/verification/adapterViews.d.ts +5 -2
  153. package/dist/data/verification/adapterViews.d.ts.map +1 -1
  154. package/dist/data/verification/adapterViews.js +4 -2
  155. package/dist/data/verification/adapterViews.js.map +1 -1
  156. package/dist/data/verification/adapters.cjs +28 -7
  157. package/dist/data/verification/adapters.cjs.map +1 -1
  158. package/dist/data/verification/adapters.d.ts +7 -1
  159. package/dist/data/verification/adapters.d.ts.map +1 -1
  160. package/dist/data/verification/adapters.js +28 -7
  161. package/dist/data/verification/adapters.js.map +1 -1
  162. package/dist/data/verification/stepKind.cjs +1 -0
  163. package/dist/data/verification/stepKind.cjs.map +1 -1
  164. package/dist/data/verification/stepKind.d.ts.map +1 -1
  165. package/dist/data/verification/stepKind.js +1 -0
  166. package/dist/data/verification/stepKind.js.map +1 -1
  167. package/dist/data/verification/stepKindViews.cjs +17 -0
  168. package/dist/data/verification/stepKindViews.cjs.map +1 -1
  169. package/dist/data/verification/stepKindViews.d.ts +4 -0
  170. package/dist/data/verification/stepKindViews.d.ts.map +1 -1
  171. package/dist/data/verification/stepKindViews.js +17 -1
  172. package/dist/data/verification/stepKindViews.js.map +1 -1
  173. package/dist/data/version-info.cjs +3 -3
  174. package/dist/data/version-info.js +3 -3
  175. package/dist/data.cjs +121 -2
  176. package/dist/data.d.ts +3 -0
  177. package/dist/data.d.ts.map +1 -1
  178. package/dist/data.js +55 -3
  179. package/dist/git.cjs +6 -0
  180. package/dist/git.d.ts +4 -0
  181. package/dist/git.d.ts.map +1 -0
  182. package/dist/git.js +3 -0
  183. package/dist/hooks/use-prompts.cjs +18 -11
  184. package/dist/hooks/use-prompts.cjs.map +1 -1
  185. package/dist/hooks/use-prompts.d.ts.map +1 -1
  186. package/dist/hooks/use-prompts.js +18 -11
  187. package/dist/hooks/use-prompts.js.map +1 -1
  188. package/dist/icons/components/UiApi.cjs +37 -0
  189. package/dist/icons/components/UiApi.cjs.map +1 -0
  190. package/dist/icons/components/UiApi.d.ts +9 -0
  191. package/dist/icons/components/UiApi.d.ts.map +1 -0
  192. package/dist/icons/components/UiApi.js +35 -0
  193. package/dist/icons/components/UiApi.js.map +1 -0
  194. package/dist/icons/components/UiApiBridge.cjs +38 -0
  195. package/dist/icons/components/UiApiBridge.cjs.map +1 -0
  196. package/dist/icons/components/UiApiBridge.d.ts +9 -0
  197. package/dist/icons/components/UiApiBridge.d.ts.map +1 -0
  198. package/dist/icons/components/UiApiBridge.js +36 -0
  199. package/dist/icons/components/UiApiBridge.js.map +1 -0
  200. package/dist/icons/components/UiApiGateway.cjs +33 -0
  201. package/dist/icons/components/UiApiGateway.cjs.map +1 -0
  202. package/dist/icons/components/UiApiGateway.d.ts +9 -0
  203. package/dist/icons/components/UiApiGateway.d.ts.map +1 -0
  204. package/dist/icons/components/UiApiGateway.js +31 -0
  205. package/dist/icons/components/UiApiGateway.js.map +1 -0
  206. package/dist/icons/components/UiApiRequest.cjs +37 -0
  207. package/dist/icons/components/UiApiRequest.cjs.map +1 -0
  208. package/dist/icons/components/UiApiRequest.d.ts +9 -0
  209. package/dist/icons/components/UiApiRequest.d.ts.map +1 -0
  210. package/dist/icons/components/UiApiRequest.js +35 -0
  211. package/dist/icons/components/UiApiRequest.js.map +1 -0
  212. package/dist/icons/components/UiArrowDecision.cjs +51 -0
  213. package/dist/icons/components/UiArrowDecision.cjs.map +1 -0
  214. package/dist/icons/components/UiArrowDecision.d.ts +15 -0
  215. package/dist/icons/components/UiArrowDecision.d.ts.map +1 -0
  216. package/dist/icons/components/UiArrowDecision.js +48 -0
  217. package/dist/icons/components/UiArrowDecision.js.map +1 -0
  218. package/dist/icons/components/UiArrowSquareIn.cjs +51 -0
  219. package/dist/icons/components/UiArrowSquareIn.cjs.map +1 -0
  220. package/dist/icons/components/UiArrowSquareIn.d.ts +15 -0
  221. package/dist/icons/components/UiArrowSquareIn.d.ts.map +1 -0
  222. package/dist/icons/components/UiArrowSquareIn.js +48 -0
  223. package/dist/icons/components/UiArrowSquareIn.js.map +1 -0
  224. package/dist/icons/components/UiBatchCheck.cjs +55 -0
  225. package/dist/icons/components/UiBatchCheck.cjs.map +1 -0
  226. package/dist/icons/components/UiBatchCheck.d.ts +15 -0
  227. package/dist/icons/components/UiBatchCheck.d.ts.map +1 -0
  228. package/dist/icons/components/UiBatchCheck.js +52 -0
  229. package/dist/icons/components/UiBatchCheck.js.map +1 -0
  230. package/dist/icons/components/UiBatchJob.cjs +39 -0
  231. package/dist/icons/components/UiBatchJob.cjs.map +1 -0
  232. package/dist/icons/components/UiBatchJob.d.ts +9 -0
  233. package/dist/icons/components/UiBatchJob.d.ts.map +1 -0
  234. package/dist/icons/components/UiBatchJob.js +37 -0
  235. package/dist/icons/components/UiBatchJob.js.map +1 -0
  236. package/dist/icons/components/UiBatchRequest.cjs +39 -0
  237. package/dist/icons/components/UiBatchRequest.cjs.map +1 -0
  238. package/dist/icons/components/UiBatchRequest.d.ts +9 -0
  239. package/dist/icons/components/UiBatchRequest.d.ts.map +1 -0
  240. package/dist/icons/components/UiBatchRequest.js +37 -0
  241. package/dist/icons/components/UiBatchRequest.js.map +1 -0
  242. package/dist/icons/components/UiBpmnConditional.cjs +29 -0
  243. package/dist/icons/components/UiBpmnConditional.cjs.map +1 -0
  244. package/dist/icons/components/UiBpmnConditional.d.ts +9 -0
  245. package/dist/icons/components/UiBpmnConditional.d.ts.map +1 -0
  246. package/dist/icons/components/UiBpmnConditional.js +27 -0
  247. package/dist/icons/components/UiBpmnConditional.js.map +1 -0
  248. package/dist/icons/components/UiBranchFlow.cjs +33 -0
  249. package/dist/icons/components/UiBranchFlow.cjs.map +1 -0
  250. package/dist/icons/components/UiBranchFlow.d.ts +9 -0
  251. package/dist/icons/components/UiBranchFlow.d.ts.map +1 -0
  252. package/dist/icons/components/UiBranchFlow.js +31 -0
  253. package/dist/icons/components/UiBranchFlow.js.map +1 -0
  254. package/dist/icons/components/UiClassicBatch.cjs +29 -0
  255. package/dist/icons/components/UiClassicBatch.cjs.map +1 -0
  256. package/dist/icons/components/UiClassicBatch.d.ts +9 -0
  257. package/dist/icons/components/UiClassicBatch.d.ts.map +1 -0
  258. package/dist/icons/components/UiClassicBatch.js +27 -0
  259. package/dist/icons/components/UiClassicBatch.js.map +1 -0
  260. package/dist/icons/components/UiCodeFile.cjs +29 -0
  261. package/dist/icons/components/UiCodeFile.cjs.map +1 -0
  262. package/dist/icons/components/UiCodeFile.d.ts +9 -0
  263. package/dist/icons/components/UiCodeFile.d.ts.map +1 -0
  264. package/dist/icons/components/UiCodeFile.js +27 -0
  265. package/dist/icons/components/UiCodeFile.js.map +1 -0
  266. package/dist/icons/components/UiColumnsLayout.cjs +29 -0
  267. package/dist/icons/components/UiColumnsLayout.cjs.map +1 -0
  268. package/dist/icons/components/UiColumnsLayout.d.ts +9 -0
  269. package/dist/icons/components/UiColumnsLayout.d.ts.map +1 -0
  270. package/dist/icons/components/UiColumnsLayout.js +27 -0
  271. package/dist/icons/components/UiColumnsLayout.js.map +1 -0
  272. package/dist/icons/components/UiCondition.cjs +37 -0
  273. package/dist/icons/components/UiCondition.cjs.map +1 -0
  274. package/dist/icons/components/UiCondition.d.ts +9 -0
  275. package/dist/icons/components/UiCondition.d.ts.map +1 -0
  276. package/dist/icons/components/UiCondition.js +35 -0
  277. package/dist/icons/components/UiCondition.js.map +1 -0
  278. package/dist/icons/components/UiConditions.cjs +29 -0
  279. package/dist/icons/components/UiConditions.cjs.map +1 -0
  280. package/dist/icons/components/UiConditions.d.ts +9 -0
  281. package/dist/icons/components/UiConditions.d.ts.map +1 -0
  282. package/dist/icons/components/UiConditions.js +27 -0
  283. package/dist/icons/components/UiConditions.js.map +1 -0
  284. package/dist/icons/components/UiDelayQueue.cjs +40 -0
  285. package/dist/icons/components/UiDelayQueue.cjs.map +1 -0
  286. package/dist/icons/components/UiDelayQueue.d.ts +9 -0
  287. package/dist/icons/components/UiDelayQueue.d.ts.map +1 -0
  288. package/dist/icons/components/UiDelayQueue.js +38 -0
  289. package/dist/icons/components/UiDelayQueue.js.map +1 -0
  290. package/dist/icons/components/UiDynamicForm.cjs +51 -0
  291. package/dist/icons/components/UiDynamicForm.cjs.map +1 -0
  292. package/dist/icons/components/UiDynamicForm.d.ts +15 -0
  293. package/dist/icons/components/UiDynamicForm.d.ts.map +1 -0
  294. package/dist/icons/components/UiDynamicForm.js +48 -0
  295. package/dist/icons/components/UiDynamicForm.js.map +1 -0
  296. package/dist/icons/components/UiFlowArrow.cjs +51 -0
  297. package/dist/icons/components/UiFlowArrow.cjs.map +1 -0
  298. package/dist/icons/components/UiFlowArrow.d.ts +15 -0
  299. package/dist/icons/components/UiFlowArrow.d.ts.map +1 -0
  300. package/dist/icons/components/UiFlowArrow.js +48 -0
  301. package/dist/icons/components/UiFlowArrow.js.map +1 -0
  302. package/dist/icons/components/UiFormFields.cjs +33 -0
  303. package/dist/icons/components/UiFormFields.cjs.map +1 -0
  304. package/dist/icons/components/UiFormFields.d.ts +9 -0
  305. package/dist/icons/components/UiFormFields.d.ts.map +1 -0
  306. package/dist/icons/components/UiFormFields.js +31 -0
  307. package/dist/icons/components/UiFormFields.js.map +1 -0
  308. package/dist/icons/components/UiFormStep.cjs +38 -0
  309. package/dist/icons/components/UiFormStep.cjs.map +1 -0
  310. package/dist/icons/components/UiFormStep.d.ts +9 -0
  311. package/dist/icons/components/UiFormStep.d.ts.map +1 -0
  312. package/dist/icons/components/UiFormStep.js +36 -0
  313. package/dist/icons/components/UiFormStep.js.map +1 -0
  314. package/dist/icons/components/UiGatewayApi.cjs +32 -0
  315. package/dist/icons/components/UiGatewayApi.cjs.map +1 -0
  316. package/dist/icons/components/UiGatewayApi.d.ts +9 -0
  317. package/dist/icons/components/UiGatewayApi.d.ts.map +1 -0
  318. package/dist/icons/components/UiGatewayApi.js +30 -0
  319. package/dist/icons/components/UiGatewayApi.js.map +1 -0
  320. package/dist/icons/components/UiImportArrow.cjs +29 -0
  321. package/dist/icons/components/UiImportArrow.cjs.map +1 -0
  322. package/dist/icons/components/UiImportArrow.d.ts +9 -0
  323. package/dist/icons/components/UiImportArrow.d.ts.map +1 -0
  324. package/dist/icons/components/UiImportArrow.js +27 -0
  325. package/dist/icons/components/UiImportArrow.js.map +1 -0
  326. package/dist/icons/components/UiInputField.cjs +33 -0
  327. package/dist/icons/components/UiInputField.cjs.map +1 -0
  328. package/dist/icons/components/UiInputField.d.ts +9 -0
  329. package/dist/icons/components/UiInputField.d.ts.map +1 -0
  330. package/dist/icons/components/UiInputField.js +31 -0
  331. package/dist/icons/components/UiInputField.js.map +1 -0
  332. package/dist/icons/components/UiInsertTable.cjs +29 -0
  333. package/dist/icons/components/UiInsertTable.cjs.map +1 -0
  334. package/dist/icons/components/UiInsertTable.d.ts +9 -0
  335. package/dist/icons/components/UiInsertTable.d.ts.map +1 -0
  336. package/dist/icons/components/UiInsertTable.js +27 -0
  337. package/dist/icons/components/UiInsertTable.js.map +1 -0
  338. package/dist/icons/components/UiLayoutTemplate.cjs +32 -0
  339. package/dist/icons/components/UiLayoutTemplate.cjs.map +1 -0
  340. package/dist/icons/components/UiLayoutTemplate.d.ts +9 -0
  341. package/dist/icons/components/UiLayoutTemplate.d.ts.map +1 -0
  342. package/dist/icons/components/UiLayoutTemplate.js +30 -0
  343. package/dist/icons/components/UiLayoutTemplate.js.map +1 -0
  344. package/dist/icons/components/UiLayoutWindow.cjs +56 -0
  345. package/dist/icons/components/UiLayoutWindow.cjs.map +1 -0
  346. package/dist/icons/components/UiLayoutWindow.d.ts +15 -0
  347. package/dist/icons/components/UiLayoutWindow.d.ts.map +1 -0
  348. package/dist/icons/components/UiLayoutWindow.js +53 -0
  349. package/dist/icons/components/UiLayoutWindow.js.map +1 -0
  350. package/dist/icons/components/UiListEnd.cjs +33 -0
  351. package/dist/icons/components/UiListEnd.cjs.map +1 -0
  352. package/dist/icons/components/UiListEnd.d.ts +9 -0
  353. package/dist/icons/components/UiListEnd.d.ts.map +1 -0
  354. package/dist/icons/components/UiListEnd.js +31 -0
  355. package/dist/icons/components/UiListEnd.js.map +1 -0
  356. package/dist/icons/components/UiListEndLine.cjs +51 -0
  357. package/dist/icons/components/UiListEndLine.cjs.map +1 -0
  358. package/dist/icons/components/UiListEndLine.d.ts +15 -0
  359. package/dist/icons/components/UiListEndLine.d.ts.map +1 -0
  360. package/dist/icons/components/UiListEndLine.js +48 -0
  361. package/dist/icons/components/UiListEndLine.js.map +1 -0
  362. package/dist/icons/components/UiListNumbers.cjs +51 -0
  363. package/dist/icons/components/UiListNumbers.cjs.map +1 -0
  364. package/dist/icons/components/UiListNumbers.d.ts +15 -0
  365. package/dist/icons/components/UiListNumbers.d.ts.map +1 -0
  366. package/dist/icons/components/UiListNumbers.js +48 -0
  367. package/dist/icons/components/UiListNumbers.js.map +1 -0
  368. package/dist/icons/components/UiLowPriority.cjs +29 -0
  369. package/dist/icons/components/UiLowPriority.cjs.map +1 -0
  370. package/dist/icons/components/UiLowPriority.d.ts +9 -0
  371. package/dist/icons/components/UiLowPriority.d.ts.map +1 -0
  372. package/dist/icons/components/UiLowPriority.js +27 -0
  373. package/dist/icons/components/UiLowPriority.js.map +1 -0
  374. package/dist/icons/components/UiMergeQueue.cjs +38 -0
  375. package/dist/icons/components/UiMergeQueue.cjs.map +1 -0
  376. package/dist/icons/components/UiMergeQueue.d.ts +9 -0
  377. package/dist/icons/components/UiMergeQueue.d.ts.map +1 -0
  378. package/dist/icons/components/UiMergeQueue.js +36 -0
  379. package/dist/icons/components/UiMergeQueue.js.map +1 -0
  380. package/dist/icons/components/UiPipelineStage.cjs +33 -0
  381. package/dist/icons/components/UiPipelineStage.cjs.map +1 -0
  382. package/dist/icons/components/UiPipelineStage.d.ts +9 -0
  383. package/dist/icons/components/UiPipelineStage.d.ts.map +1 -0
  384. package/dist/icons/components/UiPipelineStage.js +31 -0
  385. package/dist/icons/components/UiPipelineStage.js.map +1 -0
  386. package/dist/icons/components/UiPlaylistRemove.cjs +29 -0
  387. package/dist/icons/components/UiPlaylistRemove.cjs.map +1 -0
  388. package/dist/icons/components/UiPlaylistRemove.d.ts +9 -0
  389. package/dist/icons/components/UiPlaylistRemove.d.ts.map +1 -0
  390. package/dist/icons/components/UiPlaylistRemove.js +27 -0
  391. package/dist/icons/components/UiPlaylistRemove.js.map +1 -0
  392. package/dist/icons/components/UiReportForms.cjs +51 -0
  393. package/dist/icons/components/UiReportForms.cjs.map +1 -0
  394. package/dist/icons/components/UiReportForms.d.ts +15 -0
  395. package/dist/icons/components/UiReportForms.d.ts.map +1 -0
  396. package/dist/icons/components/UiReportForms.js +48 -0
  397. package/dist/icons/components/UiReportForms.js.map +1 -0
  398. package/dist/icons/components/UiScreenTemplate.cjs +29 -0
  399. package/dist/icons/components/UiScreenTemplate.cjs.map +1 -0
  400. package/dist/icons/components/UiScreenTemplate.d.ts +9 -0
  401. package/dist/icons/components/UiScreenTemplate.d.ts.map +1 -0
  402. package/dist/icons/components/UiScreenTemplate.js +27 -0
  403. package/dist/icons/components/UiScreenTemplate.js.map +1 -0
  404. package/dist/icons/components/UiServices.cjs +29 -0
  405. package/dist/icons/components/UiServices.cjs.map +1 -0
  406. package/dist/icons/components/UiServices.d.ts +9 -0
  407. package/dist/icons/components/UiServices.d.ts.map +1 -0
  408. package/dist/icons/components/UiServices.js +27 -0
  409. package/dist/icons/components/UiServices.js.map +1 -0
  410. package/dist/icons/components/UiSkipCircle.cjs +51 -0
  411. package/dist/icons/components/UiSkipCircle.cjs.map +1 -0
  412. package/dist/icons/components/UiSkipCircle.d.ts +15 -0
  413. package/dist/icons/components/UiSkipCircle.d.ts.map +1 -0
  414. package/dist/icons/components/UiSkipCircle.js +48 -0
  415. package/dist/icons/components/UiSkipCircle.js.map +1 -0
  416. package/dist/icons/components/UiTaskBatch.cjs +33 -0
  417. package/dist/icons/components/UiTaskBatch.cjs.map +1 -0
  418. package/dist/icons/components/UiTaskBatch.d.ts +9 -0
  419. package/dist/icons/components/UiTaskBatch.d.ts.map +1 -0
  420. package/dist/icons/components/UiTaskBatch.js +31 -0
  421. package/dist/icons/components/UiTaskBatch.js.map +1 -0
  422. package/dist/icons/components/UiTodoList.cjs +29 -0
  423. package/dist/icons/components/UiTodoList.cjs.map +1 -0
  424. package/dist/icons/components/UiTodoList.d.ts +9 -0
  425. package/dist/icons/components/UiTodoList.d.ts.map +1 -0
  426. package/dist/icons/components/UiTodoList.js +27 -0
  427. package/dist/icons/components/UiTodoList.js.map +1 -0
  428. package/dist/icons/components/UiTrayArrowDown.cjs +51 -0
  429. package/dist/icons/components/UiTrayArrowDown.cjs.map +1 -0
  430. package/dist/icons/components/UiTrayArrowDown.d.ts +15 -0
  431. package/dist/icons/components/UiTrayArrowDown.d.ts.map +1 -0
  432. package/dist/icons/components/UiTrayArrowDown.js +48 -0
  433. package/dist/icons/components/UiTrayArrowDown.js.map +1 -0
  434. package/dist/icons/components/UiVault.cjs +51 -0
  435. package/dist/icons/components/UiVault.cjs.map +1 -0
  436. package/dist/icons/components/UiVault.d.ts +15 -0
  437. package/dist/icons/components/UiVault.d.ts.map +1 -0
  438. package/dist/icons/components/UiVault.js +48 -0
  439. package/dist/icons/components/UiVault.js.map +1 -0
  440. package/dist/icons/components/UiWebServiceDefinition.cjs +39 -0
  441. package/dist/icons/components/UiWebServiceDefinition.cjs.map +1 -0
  442. package/dist/icons/components/UiWebServiceDefinition.d.ts +9 -0
  443. package/dist/icons/components/UiWebServiceDefinition.d.ts.map +1 -0
  444. package/dist/icons/components/UiWebServiceDefinition.js +37 -0
  445. package/dist/icons/components/UiWebServiceDefinition.js.map +1 -0
  446. package/dist/icons/components/UiWebhook.cjs +29 -0
  447. package/dist/icons/components/UiWebhook.cjs.map +1 -0
  448. package/dist/icons/components/UiWebhook.d.ts +9 -0
  449. package/dist/icons/components/UiWebhook.d.ts.map +1 -0
  450. package/dist/icons/components/UiWebhook.js +27 -0
  451. package/dist/icons/components/UiWebhook.js.map +1 -0
  452. package/dist/icons/components/UiWebhookLine.cjs +51 -0
  453. package/dist/icons/components/UiWebhookLine.cjs.map +1 -0
  454. package/dist/icons/components/UiWebhookLine.d.ts +15 -0
  455. package/dist/icons/components/UiWebhookLine.d.ts.map +1 -0
  456. package/dist/icons/components/UiWebhookLine.js +48 -0
  457. package/dist/icons/components/UiWebhookLine.js.map +1 -0
  458. package/dist/icons/index.d.ts +58 -0
  459. package/dist/icons/index.d.ts.map +1 -1
  460. package/dist/icons/registry.cjs +90 -0
  461. package/dist/icons/registry.cjs.map +1 -1
  462. package/dist/icons/registry.d.ts.map +1 -1
  463. package/dist/icons/registry.js +90 -0
  464. package/dist/icons/registry.js.map +1 -1
  465. package/dist/icons.cjs +103 -0
  466. package/dist/icons.js +46 -1
  467. package/dist/index.cjs +128 -3
  468. package/dist/index.js +59 -4
  469. package/dist/overlay/DropdownMenu.cjs +17 -14
  470. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  471. package/dist/overlay/DropdownMenu.d.ts +1 -0
  472. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  473. package/dist/overlay/DropdownMenu.js +18 -15
  474. package/dist/overlay/DropdownMenu.js.map +1 -1
  475. package/dist/rpc/EntityExplorerApp.cjs +49 -12
  476. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  477. package/dist/rpc/EntityExplorerApp.d.ts +10 -1
  478. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  479. package/dist/rpc/EntityExplorerApp.js +51 -14
  480. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  481. package/dist/rpc/EntitySurface.cjs +38 -0
  482. package/dist/rpc/EntitySurface.cjs.map +1 -0
  483. package/dist/rpc/EntitySurface.d.ts +17 -0
  484. package/dist/rpc/EntitySurface.d.ts.map +1 -0
  485. package/dist/rpc/EntitySurface.js +38 -0
  486. package/dist/rpc/EntitySurface.js.map +1 -0
  487. package/dist/rpc/ExplorerNav.cjs +48 -0
  488. package/dist/rpc/ExplorerNav.cjs.map +1 -0
  489. package/dist/rpc/ExplorerNav.d.ts +12 -0
  490. package/dist/rpc/ExplorerNav.d.ts.map +1 -0
  491. package/dist/rpc/ExplorerNav.js +48 -0
  492. package/dist/rpc/ExplorerNav.js.map +1 -0
  493. package/dist/rpc/explorer-nav-context.cjs +5 -0
  494. package/dist/rpc/explorer-nav-context.cjs.map +1 -0
  495. package/dist/rpc/explorer-nav-context.d.ts +11 -0
  496. package/dist/rpc/explorer-nav-context.d.ts.map +1 -0
  497. package/dist/rpc/explorer-nav-context.js +6 -0
  498. package/dist/rpc/explorer-nav-context.js.map +1 -0
  499. package/dist/rpc.cjs +4 -0
  500. package/dist/rpc.d.ts +2 -0
  501. package/dist/rpc.d.ts.map +1 -1
  502. package/dist/rpc.js +3 -1
  503. package/dist/styles.css +1 -1
  504. package/package.json +6 -1
@@ -0,0 +1,82 @@
1
+ const require_utils = require("../lib/utils.cjs");
2
+ const require_UiQuestion = require("../icons/components/UiQuestion.cjs");
3
+ const require_use_prompts = require("../hooks/use-prompts.cjs");
4
+ const require_Icon = require("./Icon.cjs");
5
+ const require_button = require("../components/button.cjs");
6
+ const require_DropdownMenu = require("../overlay/DropdownMenu.cjs");
7
+ const require_marks = require("./test-runner/marks.cjs");
8
+ const require_PromptDialog = require("./PromptDialog.cjs");
9
+ const require_PromptBanner_model = require("./PromptBanner.model.cjs");
10
+ const require_PromptList = require("./PromptList.cjs");
11
+ let react = require("react");
12
+ let react_jsx_runtime = require("react/jsx-runtime");
13
+ // src/data/PromptIndicator.tsx
14
+ function PromptIndicator({ basePath = "/api/todos", enabled, className, lookupFetcher, autoOpen = false, state: _ignoredState, ...filter }) {
15
+ const { prompts, pending } = require_use_prompts.usePrompts({
16
+ ...filter,
17
+ basePath,
18
+ ...enabled !== void 0 ? { enabled } : {}
19
+ });
20
+ const [active, setActive] = (0, react.useState)(null);
21
+ const [activeBase, setActiveBase] = (0, react.useState)(basePath);
22
+ if (activeBase !== basePath) {
23
+ setActiveBase(basePath);
24
+ setActive(null);
25
+ }
26
+ const ordered = (0, react.useMemo)(() => require_PromptBanner_model.orderPrompts(prompts), [prompts]);
27
+ const count = (0, react.useMemo)(() => require_PromptBanner_model.summarizePrompts(prompts).pending, [prompts]);
28
+ const autoOpened = (0, react.useRef)(/* @__PURE__ */ new Set());
29
+ const unopened = autoOpen ? pending.find((prompt) => !autoOpened.current.has(prompt.id)) : void 0;
30
+ (0, react.useEffect)(() => {
31
+ if (!unopened || active) return;
32
+ autoOpened.current.add(unopened.id);
33
+ setActive(unopened);
34
+ }, [unopened, active]);
35
+ const closePrompt = (id) => setActive((current) => current?.id === id ? null : current);
36
+ const label = count > 0 ? `${count} pending` : "Prompts";
37
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_DropdownMenu.DropdownMenu, {
38
+ role: "dialog",
39
+ menuLabel: "Prompts",
40
+ align: "right",
41
+ menuClassName: "w-80 max-w-[calc(100vw-2rem)] p-1",
42
+ trigger: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_button.Button, {
43
+ type: "button",
44
+ variant: "ghost",
45
+ size: "sm",
46
+ title: count > 0 ? `${label} — answer from the list` : "No pending prompts",
47
+ className: require_utils.cn("gap-1.5", count > 0 ? require_marks.TEST_OUTCOMES.warned.className : "text-muted-foreground", className),
48
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
49
+ className: "relative inline-flex",
50
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
51
+ icon: require_UiQuestion.UiQuestion,
52
+ className: "size-4"
53
+ }), count > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
54
+ "data-prompt-pulse": "",
55
+ "aria-hidden": true,
56
+ className: "absolute -right-0.5 -top-0.5 size-1.5 animate-pulse rounded-full bg-current"
57
+ }) : null]
58
+ }), label]
59
+ }),
60
+ children: (close) => ordered.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
61
+ className: "px-2 py-1.5 text-xs text-muted-foreground",
62
+ children: "No prompts"
63
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PromptList.PromptList, {
64
+ prompts: ordered,
65
+ activeId: active?.id,
66
+ className: "border-0",
67
+ onSelect: (prompt) => {
68
+ close();
69
+ setActive(prompt);
70
+ }
71
+ })
72
+ }), active ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PromptDialog.PromptDialog, {
73
+ prompt: active,
74
+ basePath,
75
+ open: true,
76
+ onClose: () => closePrompt(active.id),
77
+ lookupFetcher
78
+ }, active.id) : null] });
79
+ }
80
+ exports.PromptIndicator = PromptIndicator;
81
+
82
+ //# sourceMappingURL=PromptIndicator.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptIndicator.cjs","names":["usePrompts","useState","useMemo","orderPrompts","summarizePrompts","useRef","_Fragment","DropdownMenu","Button","cn","TEST_OUTCOMES","Icon","UiQuestion","PromptList","PromptDialog"],"sources":["../../src/data/PromptIndicator.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Button } from \"../components/button\";\nimport { DropdownMenu } from \"../overlay/DropdownMenu\";\nimport { Icon } from \"./Icon\";\nimport { UiQuestion } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { usePrompts, type PromptFilter, type PromptSnapshot } from \"../hooks/use-prompts\";\nimport type { LookupFetcher } from \"../components/json-schema-form-runtime-types\";\nimport { PromptDialog } from \"./PromptDialog\";\nimport { PromptList } from \"./PromptList\";\nimport { orderPrompts, summarizePrompts } from \"./PromptBanner.model\";\nimport { TEST_OUTCOMES } from \"./test-runner/marks\";\n\nexport interface PromptIndicatorProps extends PromptFilter {\n /** Base path the prompt API is mounted under, e.g. \"/api/todos\". */\n basePath?: string | undefined;\n enabled?: boolean | undefined;\n /** Classes for the trigger button. */\n className?: string | undefined;\n /** Passed to the answer dialog to resolve the schema's `x-clicky-lookup` fields. */\n lookupFetcher?: LookupFetcher | undefined;\n /**\n * Open each prompt's answer dialog once, as soon as it becomes pending:\n * closing it without answering leaves it pending in the panel rather than\n * reopening it.\n */\n autoOpen?: boolean | undefined;\n}\n\n// PromptIndicator is the compact form of PromptBanner for a header: \"N pending\"\n// in amber while prompts wait, a muted \"Prompts\" otherwise. It toggles a panel\n// listing the scope's prompts (pending first), and a pending one opens the\n// answer dialog.\nexport function PromptIndicator({\n basePath = \"/api/todos\",\n enabled,\n className,\n lookupFetcher,\n autoOpen = false,\n state: _ignoredState,\n ...filter\n}: PromptIndicatorProps) {\n const { prompts, pending } = usePrompts({ ...filter, basePath, ...(enabled !== undefined ? { enabled } : {}) });\n const [active, setActive] = useState<PromptSnapshot | null>(null);\n // An open prompt belongs to the API it came from; answering it on another would post its id there.\n const [activeBase, setActiveBase] = useState(basePath);\n if (activeBase !== basePath) {\n setActiveBase(basePath);\n setActive(null);\n }\n const ordered = useMemo(() => orderPrompts(prompts), [prompts]);\n const count = useMemo(() => summarizePrompts(prompts).pending, [prompts]);\n\n const autoOpened = useRef(new Set<string>());\n const unopened = autoOpen ? pending.find((prompt) => !autoOpened.current.has(prompt.id)) : undefined;\n useEffect(() => {\n if (!unopened || active) return;\n autoOpened.current.add(unopened.id);\n setActive(unopened);\n }, [unopened, active]);\n\n // A dialog's answer can land after it was closed and another opened: clear only the prompt it was for.\n const closePrompt = (id: string) => setActive((current) => (current?.id === id ? null : current));\n\n const label = count > 0 ? `${count} pending` : \"Prompts\";\n return (\n <>\n <DropdownMenu\n role=\"dialog\"\n menuLabel=\"Prompts\"\n align=\"right\"\n menuClassName=\"w-80 max-w-[calc(100vw-2rem)] p-1\"\n trigger={\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n title={count > 0 ? `${label} — answer from the list` : \"No pending prompts\"}\n className={cn(\"gap-1.5\", count > 0 ? TEST_OUTCOMES.warned.className : \"text-muted-foreground\", className)}\n >\n <span className=\"relative inline-flex\">\n <Icon icon={UiQuestion} className=\"size-4\" />\n {count > 0 ? (\n <span data-prompt-pulse=\"\" aria-hidden className=\"absolute -right-0.5 -top-0.5 size-1.5 animate-pulse rounded-full bg-current\" />\n ) : null}\n </span>\n {label}\n </Button>\n }\n >\n {(close) =>\n ordered.length === 0 ? (\n <div className=\"px-2 py-1.5 text-xs text-muted-foreground\">No prompts</div>\n ) : (\n <PromptList\n prompts={ordered}\n activeId={active?.id}\n className=\"border-0\"\n onSelect={(prompt) => {\n close();\n setActive(prompt);\n }}\n />\n )\n }\n </DropdownMenu>\n {active ? (\n <PromptDialog\n key={active.id}\n prompt={active}\n basePath={basePath}\n open={true}\n onClose={() => closePrompt(active.id)}\n lookupFetcher={lookupFetcher}\n />\n ) : null}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAiCA,SAAgB,gBAAgB,EAC9B,WAAW,cACX,SACA,WACA,eACA,WAAW,OACX,OAAO,eACP,GAAG,UACoB;CACvB,MAAM,EAAE,SAAS,YAAYA,oBAAAA,WAAW;EAAE,GAAG;EAAQ;EAAU,GAAI,YAAY,KAAA,IAAY,EAAE,QAAQ,IAAI,CAAC;CAAG,CAAC;CAC9G,MAAM,CAAC,QAAQ,cAAA,GAAaC,MAAAA,SAAAA,CAAgC,IAAI;CAEhE,MAAM,CAAC,YAAY,kBAAA,GAAiBA,MAAAA,SAAAA,CAAS,QAAQ;CACrD,IAAI,eAAe,UAAU;EAC3B,cAAc,QAAQ;EACtB,UAAU,IAAI;CAChB;CACA,MAAM,WAAA,GAAUC,MAAAA,QAAAA,OAAcC,2BAAAA,aAAa,OAAO,GAAG,CAAC,OAAO,CAAC;CAC9D,MAAM,SAAA,GAAQD,MAAAA,QAAAA,OAAcE,2BAAAA,iBAAiB,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;CAExE,MAAM,cAAA,GAAaC,MAAAA,OAAAA,iBAAO,IAAI,IAAY,CAAC;CAC3C,MAAM,WAAW,WAAW,QAAQ,MAAM,WAAW,CAAC,WAAW,QAAQ,IAAI,OAAO,EAAE,CAAC,IAAI,KAAA;CAC3F,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,CAAC,YAAY,QAAQ;EACzB,WAAW,QAAQ,IAAI,SAAS,EAAE;EAClC,UAAU,QAAQ;CACpB,GAAG,CAAC,UAAU,MAAM,CAAC;CAGrB,MAAM,eAAe,OAAe,WAAW,YAAa,SAAS,OAAO,KAAK,OAAO,OAAQ;CAEhG,MAAM,QAAQ,QAAQ,IAAI,GAAG,MAAM,YAAY;CAC/C,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,qBAAAA,cAAD;EACE,MAAK;EACL,WAAU;EACV,OAAM;EACN,eAAc;EACd,SACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,eAAAA,QAAD;GACE,MAAK;GACL,SAAQ;GACR,MAAK;GACL,OAAO,QAAQ,IAAI,GAAG,MAAM,2BAA2B;GACvD,WAAWC,cAAAA,GAAG,WAAW,QAAQ,IAAIC,cAAAA,cAAc,OAAO,YAAY,yBAAyB,SAAS;GAL1G,UAAA,CAOE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;IAAM,WAAU;IAAhB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,MAAD;KAAM,MAAMC,mBAAAA;KAAY,WAAU;IAAU,CAAA,GAC3C,QAAQ,IACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,qBAAkB;KAAG,eAAA;KAAY,WAAU;IAA+E,CAAA,IAC9H,IACA;GACL,CAAA,GAAA,KACK;;EAGR,WAAA,UACA,QAAQ,WAAW,IACjB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GAA4C,UAAA;EAAe,CAAA,IAE1E,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,YAAD;GACE,SAAS;GACT,UAAU,QAAQ;GAClB,WAAU;GACV,WAAW,WAAW;IACpB,MAAM;IACN,UAAU,MAAM;GAClB;EACD,CAAA;CAGO,CAAA,GACb,SACC,iBAAA,GAAA,kBAAA,IAAA,CAACC,qBAAAA,cAAD;EAEE,QAAQ;EACE;EACV,MAAM;EACN,eAAe,YAAY,OAAO,EAAE;EACrB;CAChB,GANM,OAAO,EAMb,IACC,IACJ,EAAA,CAAA;AAEN"}
@@ -0,0 +1,19 @@
1
+ import { PromptFilter } from '../hooks/use-prompts.js';
2
+ import { LookupFetcher } from '../components/json-schema-form-runtime-types.js';
3
+ export interface PromptIndicatorProps extends PromptFilter {
4
+ /** Base path the prompt API is mounted under, e.g. "/api/todos". */
5
+ basePath?: string | undefined;
6
+ enabled?: boolean | undefined;
7
+ /** Classes for the trigger button. */
8
+ className?: string | undefined;
9
+ /** Passed to the answer dialog to resolve the schema's `x-clicky-lookup` fields. */
10
+ lookupFetcher?: LookupFetcher | undefined;
11
+ /**
12
+ * Open each prompt's answer dialog once, as soon as it becomes pending:
13
+ * closing it without answering leaves it pending in the panel rather than
14
+ * reopening it.
15
+ */
16
+ autoOpen?: boolean | undefined;
17
+ }
18
+ export declare function PromptIndicator({ basePath, enabled, className, lookupFetcher, autoOpen, state: _ignoredState, ...filter }: PromptIndicatorProps): import("react").JSX.Element;
19
+ //# sourceMappingURL=PromptIndicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptIndicator.d.ts","sourceRoot":"","sources":["../../src/data/PromptIndicator.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAc,KAAK,YAAY,EAAuB,MAAM,sBAAsB,CAAC;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAMlF,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,oFAAoF;IACpF,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAMD,wBAAgB,eAAe,CAAC,EAC9B,QAAuB,EACvB,OAAO,EACP,SAAS,EACT,aAAa,EACb,QAAgB,EAChB,KAAK,EAAE,aAAa,EACpB,GAAG,MAAM,EACV,EAAE,oBAAoB,+BA6EtB"}
@@ -0,0 +1,82 @@
1
+ import { cn } from "../lib/utils.js";
2
+ import { UiQuestion } from "../icons/components/UiQuestion.js";
3
+ import { usePrompts } from "../hooks/use-prompts.js";
4
+ import { Icon } from "./Icon.js";
5
+ import { Button } from "../components/button.js";
6
+ import { DropdownMenu } from "../overlay/DropdownMenu.js";
7
+ import { TEST_OUTCOMES } from "./test-runner/marks.js";
8
+ import { PromptDialog } from "./PromptDialog.js";
9
+ import { orderPrompts, summarizePrompts } from "./PromptBanner.model.js";
10
+ import { PromptList } from "./PromptList.js";
11
+ import { useEffect, useMemo, useRef, useState } from "react";
12
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
13
+ // src/data/PromptIndicator.tsx
14
+ function PromptIndicator({ basePath = "/api/todos", enabled, className, lookupFetcher, autoOpen = false, state: _ignoredState, ...filter }) {
15
+ const { prompts, pending } = usePrompts({
16
+ ...filter,
17
+ basePath,
18
+ ...enabled !== void 0 ? { enabled } : {}
19
+ });
20
+ const [active, setActive] = useState(null);
21
+ const [activeBase, setActiveBase] = useState(basePath);
22
+ if (activeBase !== basePath) {
23
+ setActiveBase(basePath);
24
+ setActive(null);
25
+ }
26
+ const ordered = useMemo(() => orderPrompts(prompts), [prompts]);
27
+ const count = useMemo(() => summarizePrompts(prompts).pending, [prompts]);
28
+ const autoOpened = useRef(/* @__PURE__ */ new Set());
29
+ const unopened = autoOpen ? pending.find((prompt) => !autoOpened.current.has(prompt.id)) : void 0;
30
+ useEffect(() => {
31
+ if (!unopened || active) return;
32
+ autoOpened.current.add(unopened.id);
33
+ setActive(unopened);
34
+ }, [unopened, active]);
35
+ const closePrompt = (id) => setActive((current) => current?.id === id ? null : current);
36
+ const label = count > 0 ? `${count} pending` : "Prompts";
37
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(DropdownMenu, {
38
+ role: "dialog",
39
+ menuLabel: "Prompts",
40
+ align: "right",
41
+ menuClassName: "w-80 max-w-[calc(100vw-2rem)] p-1",
42
+ trigger: /* @__PURE__ */ jsxs(Button, {
43
+ type: "button",
44
+ variant: "ghost",
45
+ size: "sm",
46
+ title: count > 0 ? `${label} — answer from the list` : "No pending prompts",
47
+ className: cn("gap-1.5", count > 0 ? TEST_OUTCOMES.warned.className : "text-muted-foreground", className),
48
+ children: [/* @__PURE__ */ jsxs("span", {
49
+ className: "relative inline-flex",
50
+ children: [/* @__PURE__ */ jsx(Icon, {
51
+ icon: UiQuestion,
52
+ className: "size-4"
53
+ }), count > 0 ? /* @__PURE__ */ jsx("span", {
54
+ "data-prompt-pulse": "",
55
+ "aria-hidden": true,
56
+ className: "absolute -right-0.5 -top-0.5 size-1.5 animate-pulse rounded-full bg-current"
57
+ }) : null]
58
+ }), label]
59
+ }),
60
+ children: (close) => ordered.length === 0 ? /* @__PURE__ */ jsx("div", {
61
+ className: "px-2 py-1.5 text-xs text-muted-foreground",
62
+ children: "No prompts"
63
+ }) : /* @__PURE__ */ jsx(PromptList, {
64
+ prompts: ordered,
65
+ activeId: active?.id,
66
+ className: "border-0",
67
+ onSelect: (prompt) => {
68
+ close();
69
+ setActive(prompt);
70
+ }
71
+ })
72
+ }), active ? /* @__PURE__ */ jsx(PromptDialog, {
73
+ prompt: active,
74
+ basePath,
75
+ open: true,
76
+ onClose: () => closePrompt(active.id),
77
+ lookupFetcher
78
+ }, active.id) : null] });
79
+ }
80
+ export { PromptIndicator };
81
+
82
+ //# sourceMappingURL=PromptIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptIndicator.js","names":["_Fragment"],"sources":["../../src/data/PromptIndicator.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Button } from \"../components/button\";\nimport { DropdownMenu } from \"../overlay/DropdownMenu\";\nimport { Icon } from \"./Icon\";\nimport { UiQuestion } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { usePrompts, type PromptFilter, type PromptSnapshot } from \"../hooks/use-prompts\";\nimport type { LookupFetcher } from \"../components/json-schema-form-runtime-types\";\nimport { PromptDialog } from \"./PromptDialog\";\nimport { PromptList } from \"./PromptList\";\nimport { orderPrompts, summarizePrompts } from \"./PromptBanner.model\";\nimport { TEST_OUTCOMES } from \"./test-runner/marks\";\n\nexport interface PromptIndicatorProps extends PromptFilter {\n /** Base path the prompt API is mounted under, e.g. \"/api/todos\". */\n basePath?: string | undefined;\n enabled?: boolean | undefined;\n /** Classes for the trigger button. */\n className?: string | undefined;\n /** Passed to the answer dialog to resolve the schema's `x-clicky-lookup` fields. */\n lookupFetcher?: LookupFetcher | undefined;\n /**\n * Open each prompt's answer dialog once, as soon as it becomes pending:\n * closing it without answering leaves it pending in the panel rather than\n * reopening it.\n */\n autoOpen?: boolean | undefined;\n}\n\n// PromptIndicator is the compact form of PromptBanner for a header: \"N pending\"\n// in amber while prompts wait, a muted \"Prompts\" otherwise. It toggles a panel\n// listing the scope's prompts (pending first), and a pending one opens the\n// answer dialog.\nexport function PromptIndicator({\n basePath = \"/api/todos\",\n enabled,\n className,\n lookupFetcher,\n autoOpen = false,\n state: _ignoredState,\n ...filter\n}: PromptIndicatorProps) {\n const { prompts, pending } = usePrompts({ ...filter, basePath, ...(enabled !== undefined ? { enabled } : {}) });\n const [active, setActive] = useState<PromptSnapshot | null>(null);\n // An open prompt belongs to the API it came from; answering it on another would post its id there.\n const [activeBase, setActiveBase] = useState(basePath);\n if (activeBase !== basePath) {\n setActiveBase(basePath);\n setActive(null);\n }\n const ordered = useMemo(() => orderPrompts(prompts), [prompts]);\n const count = useMemo(() => summarizePrompts(prompts).pending, [prompts]);\n\n const autoOpened = useRef(new Set<string>());\n const unopened = autoOpen ? pending.find((prompt) => !autoOpened.current.has(prompt.id)) : undefined;\n useEffect(() => {\n if (!unopened || active) return;\n autoOpened.current.add(unopened.id);\n setActive(unopened);\n }, [unopened, active]);\n\n // A dialog's answer can land after it was closed and another opened: clear only the prompt it was for.\n const closePrompt = (id: string) => setActive((current) => (current?.id === id ? null : current));\n\n const label = count > 0 ? `${count} pending` : \"Prompts\";\n return (\n <>\n <DropdownMenu\n role=\"dialog\"\n menuLabel=\"Prompts\"\n align=\"right\"\n menuClassName=\"w-80 max-w-[calc(100vw-2rem)] p-1\"\n trigger={\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n title={count > 0 ? `${label} — answer from the list` : \"No pending prompts\"}\n className={cn(\"gap-1.5\", count > 0 ? TEST_OUTCOMES.warned.className : \"text-muted-foreground\", className)}\n >\n <span className=\"relative inline-flex\">\n <Icon icon={UiQuestion} className=\"size-4\" />\n {count > 0 ? (\n <span data-prompt-pulse=\"\" aria-hidden className=\"absolute -right-0.5 -top-0.5 size-1.5 animate-pulse rounded-full bg-current\" />\n ) : null}\n </span>\n {label}\n </Button>\n }\n >\n {(close) =>\n ordered.length === 0 ? (\n <div className=\"px-2 py-1.5 text-xs text-muted-foreground\">No prompts</div>\n ) : (\n <PromptList\n prompts={ordered}\n activeId={active?.id}\n className=\"border-0\"\n onSelect={(prompt) => {\n close();\n setActive(prompt);\n }}\n />\n )\n }\n </DropdownMenu>\n {active ? (\n <PromptDialog\n key={active.id}\n prompt={active}\n basePath={basePath}\n open={true}\n onClose={() => closePrompt(active.id)}\n lookupFetcher={lookupFetcher}\n />\n ) : null}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAiCA,SAAgB,gBAAgB,EAC9B,WAAW,cACX,SACA,WACA,eACA,WAAW,OACX,OAAO,eACP,GAAG,UACoB;CACvB,MAAM,EAAE,SAAS,YAAY,WAAW;EAAE,GAAG;EAAQ;EAAU,GAAI,YAAY,KAAA,IAAY,EAAE,QAAQ,IAAI,CAAC;CAAG,CAAC;CAC9G,MAAM,CAAC,QAAQ,aAAa,SAAgC,IAAI;CAEhE,MAAM,CAAC,YAAY,iBAAiB,SAAS,QAAQ;CACrD,IAAI,eAAe,UAAU;EAC3B,cAAc,QAAQ;EACtB,UAAU,IAAI;CAChB;CACA,MAAM,UAAU,cAAc,aAAa,OAAO,GAAG,CAAC,OAAO,CAAC;CAC9D,MAAM,QAAQ,cAAc,iBAAiB,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;CAExE,MAAM,aAAa,uBAAO,IAAI,IAAY,CAAC;CAC3C,MAAM,WAAW,WAAW,QAAQ,MAAM,WAAW,CAAC,WAAW,QAAQ,IAAI,OAAO,EAAE,CAAC,IAAI,KAAA;CAC3F,gBAAgB;EACd,IAAI,CAAC,YAAY,QAAQ;EACzB,WAAW,QAAQ,IAAI,SAAS,EAAE;EAClC,UAAU,QAAQ;CACpB,GAAG,CAAC,UAAU,MAAM,CAAC;CAGrB,MAAM,eAAe,OAAe,WAAW,YAAa,SAAS,OAAO,KAAK,OAAO,OAAQ;CAEhG,MAAM,QAAQ,QAAQ,IAAI,GAAG,MAAM,YAAY;CAC/C,OACE,qBAAAA,YAAA,EAAA,UAAA,CACE,oBAAC,cAAD;EACE,MAAK;EACL,WAAU;EACV,OAAM;EACN,eAAc;EACd,SACE,qBAAC,QAAD;GACE,MAAK;GACL,SAAQ;GACR,MAAK;GACL,OAAO,QAAQ,IAAI,GAAG,MAAM,2BAA2B;GACvD,WAAW,GAAG,WAAW,QAAQ,IAAI,cAAc,OAAO,YAAY,yBAAyB,SAAS;GAL1G,UAAA,CAOE,qBAAC,QAAD;IAAM,WAAU;IAAhB,UAAA,CACE,oBAAC,MAAD;KAAM,MAAM;KAAY,WAAU;IAAU,CAAA,GAC3C,QAAQ,IACP,oBAAC,QAAD;KAAM,qBAAkB;KAAG,eAAA;KAAY,WAAU;IAA+E,CAAA,IAC9H,IACA;GACL,CAAA,GAAA,KACK;;EAGR,WAAA,UACA,QAAQ,WAAW,IACjB,oBAAC,OAAD;GAAK,WAAU;GAA4C,UAAA;EAAe,CAAA,IAE1E,oBAAC,YAAD;GACE,SAAS;GACT,UAAU,QAAQ;GAClB,WAAU;GACV,WAAW,WAAW;IACpB,MAAM;IACN,UAAU,MAAM;GAClB;EACD,CAAA;CAGO,CAAA,GACb,SACC,oBAAC,cAAD;EAEE,QAAQ;EACE;EACV,MAAM;EACN,eAAe,YAAY,OAAO,EAAE;EACrB;CAChB,GANM,OAAO,EAMb,IACC,IACJ,EAAA,CAAA;AAEN"}
@@ -0,0 +1,67 @@
1
+ const require_utils = require("../lib/utils.cjs");
2
+ const require_UiClose = require("../icons/components/UiClose.cjs");
3
+ const require_UiCheck = require("../icons/components/UiCheck.cjs");
4
+ const require_UiComment = require("../icons/components/UiComment.cjs");
5
+ const require_UiHourglass = require("../icons/components/UiHourglass.cjs");
6
+ const require_Icon = require("./Icon.cjs");
7
+ const require_PromptBanner_model = require("./PromptBanner.model.cjs");
8
+ let react_jsx_runtime = require("react/jsx-runtime");
9
+ // src/data/PromptList.tsx
10
+ /** Each prompt's state, title, kind and answer summary — the list PromptBanner and PromptIndicator share. */
11
+ function PromptList({ prompts, activeId, onSelect, className }) {
12
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ol", {
13
+ className: require_utils.cn("divide-y divide-border overflow-hidden rounded-md border border-border bg-background text-xs", className),
14
+ children: prompts.map((prompt) => {
15
+ const rowClass = require_utils.cn("flex w-full min-w-0 items-start gap-2 px-2 py-1.5 text-left", prompt.id === activeId && "bg-muted/60");
16
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: onSelect && prompt.state === "pending" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
17
+ type: "button",
18
+ className: require_utils.cn(rowClass, "hover:bg-muted focus-visible:bg-muted focus-visible:outline-none"),
19
+ onClick: () => onSelect(prompt),
20
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PromptRow, { prompt })
21
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
22
+ className: rowClass,
23
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PromptRow, { prompt })
24
+ }) }, prompt.id);
25
+ })
26
+ });
27
+ }
28
+ function PromptRow({ prompt }) {
29
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PromptStateIcon, { prompt }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
30
+ className: "block min-w-0 flex-1",
31
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
32
+ className: "flex min-w-0 items-center gap-2",
33
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
34
+ className: "truncate font-medium text-foreground",
35
+ "data-testid": "prompt-list-title",
36
+ children: prompt.title
37
+ }), prompt.kind ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
38
+ className: "shrink-0 text-muted-foreground",
39
+ children: prompt.kind
40
+ }) : null]
41
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
42
+ className: "mt-0.5 block truncate text-muted-foreground",
43
+ children: require_PromptBanner_model.summarizePromptAnswer(prompt)
44
+ })]
45
+ })] });
46
+ }
47
+ function PromptStateIcon({ prompt }) {
48
+ if (prompt.state === "answered") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
49
+ icon: require_UiCheck.UiCheck,
50
+ className: "mt-0.5 size-3.5 shrink-0 text-emerald-600"
51
+ });
52
+ if (prompt.state === "cancelled" || prompt.state === "expired") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
53
+ icon: require_UiClose.UiClose,
54
+ className: "mt-0.5 size-3.5 shrink-0 text-rose-600"
55
+ });
56
+ if (prompt.kind === "comment") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
57
+ icon: require_UiComment.UiComment,
58
+ className: "mt-0.5 size-3.5 shrink-0"
59
+ });
60
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
61
+ icon: require_UiHourglass.UiHourglass,
62
+ className: "mt-0.5 size-3.5 shrink-0"
63
+ });
64
+ }
65
+ exports.PromptList = PromptList;
66
+
67
+ //# sourceMappingURL=PromptList.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptList.cjs","names":["cn","_Fragment","summarizePromptAnswer","Icon","UiCheck","UiClose","UiComment","UiHourglass"],"sources":["../../src/data/PromptList.tsx"],"sourcesContent":["import { Icon } from \"./Icon\";\nimport { UiCheck, UiClose, UiComment, UiHourglass } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport type { PromptSnapshot } from \"../hooks/use-prompts\";\nimport { summarizePromptAnswer } from \"./PromptBanner.model\";\n\nexport interface PromptListProps {\n /** Rendered in the given order; `orderPrompts` puts pending first. */\n prompts: readonly PromptSnapshot[];\n /** Highlights the prompt currently being answered. */\n activeId?: string | undefined;\n /** Makes each pending prompt a button that answers it; answered and closed prompts stay read-only. */\n onSelect?: ((prompt: PromptSnapshot) => void) | undefined;\n className?: string | undefined;\n}\n\n/** Each prompt's state, title, kind and answer summary — the list PromptBanner and PromptIndicator share. */\nexport function PromptList({ prompts, activeId, onSelect, className }: PromptListProps) {\n return (\n <ol className={cn(\"divide-y divide-border overflow-hidden rounded-md border border-border bg-background text-xs\", className)}>\n {prompts.map((prompt) => {\n const rowClass = cn(\"flex w-full min-w-0 items-start gap-2 px-2 py-1.5 text-left\", prompt.id === activeId && \"bg-muted/60\");\n return (\n <li key={prompt.id}>\n {onSelect && prompt.state === \"pending\" ? (\n <button type=\"button\" className={cn(rowClass, \"hover:bg-muted focus-visible:bg-muted focus-visible:outline-none\")} onClick={() => onSelect(prompt)}>\n <PromptRow prompt={prompt} />\n </button>\n ) : (\n <div className={rowClass}>\n <PromptRow prompt={prompt} />\n </div>\n )}\n </li>\n );\n })}\n </ol>\n );\n}\n\nfunction PromptRow({ prompt }: { prompt: PromptSnapshot }) {\n return (\n <>\n <PromptStateIcon prompt={prompt} />\n <span className=\"block min-w-0 flex-1\">\n <span className=\"flex min-w-0 items-center gap-2\">\n <span className=\"truncate font-medium text-foreground\" data-testid=\"prompt-list-title\">{prompt.title}</span>\n {prompt.kind ? <span className=\"shrink-0 text-muted-foreground\">{prompt.kind}</span> : null}\n </span>\n <span className=\"mt-0.5 block truncate text-muted-foreground\">{summarizePromptAnswer(prompt)}</span>\n </span>\n </>\n );\n}\n\nfunction PromptStateIcon({ prompt }: { prompt: PromptSnapshot }) {\n if (prompt.state === \"answered\") return <Icon icon={UiCheck} className=\"mt-0.5 size-3.5 shrink-0 text-emerald-600\" />;\n if (prompt.state === \"cancelled\" || prompt.state === \"expired\") {\n return <Icon icon={UiClose} className=\"mt-0.5 size-3.5 shrink-0 text-rose-600\" />;\n }\n if (prompt.kind === \"comment\") return <Icon icon={UiComment} className=\"mt-0.5 size-3.5 shrink-0\" />;\n return <Icon icon={UiHourglass} className=\"mt-0.5 size-3.5 shrink-0\" />;\n}\n"],"mappings":";;;;;;;;;;AAiBA,SAAgB,WAAW,EAAE,SAAS,UAAU,UAAU,aAA8B;CACtF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;EAAI,WAAWA,cAAAA,GAAG,gGAAgG,SAAS;EACxH,UAAA,QAAQ,KAAK,WAAW;GACvB,MAAM,WAAWA,cAAAA,GAAG,+DAA+D,OAAO,OAAO,YAAY,aAAa;GAC1H,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UACG,YAAY,OAAO,UAAU,YAC5B,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAAQ,MAAK;IAAS,WAAWA,cAAAA,GAAG,UAAU,kEAAkE;IAAG,eAAe,SAAS,MAAM;IAC/I,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAmB,OAAS,CAAA;GACtB,CAAA,IAER,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAW;IACd,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAmB,OAAS,CAAA;GACzB,CAAA,EAEL,GAVK,OAAO,EAUZ;EAER,CAAC;CACC,CAAA;AAER;AAEA,SAAS,UAAU,EAAE,UAAsC;CACzD,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD,EAAyB,OAAS,CAAA,GAClC,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;EAAM,WAAU;EAAhB,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAuC,eAAY;IAAqB,UAAA,OAAO;GAAY,CAAA,GAC1G,OAAO,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAkC,UAAA,OAAO;GAAW,CAAA,IAAI,IACnF;EACN,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAA+C,UAAAC,2BAAAA,sBAAsB,MAAM;EAAQ,CAAA,CAC/F;CACN,CAAA,CAAA,EAAA,CAAA;AAEN;AAEA,SAAS,gBAAgB,EAAE,UAAsC;CAC/D,IAAI,OAAO,UAAU,YAAY,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,MAAD;EAAM,MAAMC,gBAAAA;EAAS,WAAU;CAA6C,CAAA;CACpH,IAAI,OAAO,UAAU,eAAe,OAAO,UAAU,WACnD,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACD,aAAAA,MAAD;EAAM,MAAME,gBAAAA;EAAS,WAAU;CAA0C,CAAA;CAElF,IAAI,OAAO,SAAS,WAAW,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACF,aAAAA,MAAD;EAAM,MAAMG,kBAAAA;EAAW,WAAU;CAA4B,CAAA;CACnG,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACH,aAAAA,MAAD;EAAM,MAAMI,oBAAAA;EAAa,WAAU;CAA4B,CAAA;AACxE"}
@@ -0,0 +1,13 @@
1
+ import { PromptSnapshot } from '../hooks/use-prompts.js';
2
+ export interface PromptListProps {
3
+ /** Rendered in the given order; `orderPrompts` puts pending first. */
4
+ prompts: readonly PromptSnapshot[];
5
+ /** Highlights the prompt currently being answered. */
6
+ activeId?: string | undefined;
7
+ /** Makes each pending prompt a button that answers it; answered and closed prompts stay read-only. */
8
+ onSelect?: ((prompt: PromptSnapshot) => void) | undefined;
9
+ className?: string | undefined;
10
+ }
11
+ /** Each prompt's state, title, kind and answer summary — the list PromptBanner and PromptIndicator share. */
12
+ export declare function PromptList({ prompts, activeId, onSelect, className }: PromptListProps): import("react").JSX.Element;
13
+ //# sourceMappingURL=PromptList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptList.d.ts","sourceRoot":"","sources":["../../src/data/PromptList.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IACnC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,sGAAsG;IACtG,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC1D,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,6GAA6G;AAC7G,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,eAAe,+BAqBrF"}
@@ -0,0 +1,67 @@
1
+ import { cn } from "../lib/utils.js";
2
+ import { UiClose } from "../icons/components/UiClose.js";
3
+ import { UiCheck } from "../icons/components/UiCheck.js";
4
+ import { UiComment } from "../icons/components/UiComment.js";
5
+ import { UiHourglass } from "../icons/components/UiHourglass.js";
6
+ import { Icon } from "./Icon.js";
7
+ import { summarizePromptAnswer } from "./PromptBanner.model.js";
8
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
+ // src/data/PromptList.tsx
10
+ /** Each prompt's state, title, kind and answer summary — the list PromptBanner and PromptIndicator share. */
11
+ function PromptList({ prompts, activeId, onSelect, className }) {
12
+ return /* @__PURE__ */ jsx("ol", {
13
+ className: cn("divide-y divide-border overflow-hidden rounded-md border border-border bg-background text-xs", className),
14
+ children: prompts.map((prompt) => {
15
+ const rowClass = cn("flex w-full min-w-0 items-start gap-2 px-2 py-1.5 text-left", prompt.id === activeId && "bg-muted/60");
16
+ return /* @__PURE__ */ jsx("li", { children: onSelect && prompt.state === "pending" ? /* @__PURE__ */ jsx("button", {
17
+ type: "button",
18
+ className: cn(rowClass, "hover:bg-muted focus-visible:bg-muted focus-visible:outline-none"),
19
+ onClick: () => onSelect(prompt),
20
+ children: /* @__PURE__ */ jsx(PromptRow, { prompt })
21
+ }) : /* @__PURE__ */ jsx("div", {
22
+ className: rowClass,
23
+ children: /* @__PURE__ */ jsx(PromptRow, { prompt })
24
+ }) }, prompt.id);
25
+ })
26
+ });
27
+ }
28
+ function PromptRow({ prompt }) {
29
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(PromptStateIcon, { prompt }), /* @__PURE__ */ jsxs("span", {
30
+ className: "block min-w-0 flex-1",
31
+ children: [/* @__PURE__ */ jsxs("span", {
32
+ className: "flex min-w-0 items-center gap-2",
33
+ children: [/* @__PURE__ */ jsx("span", {
34
+ className: "truncate font-medium text-foreground",
35
+ "data-testid": "prompt-list-title",
36
+ children: prompt.title
37
+ }), prompt.kind ? /* @__PURE__ */ jsx("span", {
38
+ className: "shrink-0 text-muted-foreground",
39
+ children: prompt.kind
40
+ }) : null]
41
+ }), /* @__PURE__ */ jsx("span", {
42
+ className: "mt-0.5 block truncate text-muted-foreground",
43
+ children: summarizePromptAnswer(prompt)
44
+ })]
45
+ })] });
46
+ }
47
+ function PromptStateIcon({ prompt }) {
48
+ if (prompt.state === "answered") return /* @__PURE__ */ jsx(Icon, {
49
+ icon: UiCheck,
50
+ className: "mt-0.5 size-3.5 shrink-0 text-emerald-600"
51
+ });
52
+ if (prompt.state === "cancelled" || prompt.state === "expired") return /* @__PURE__ */ jsx(Icon, {
53
+ icon: UiClose,
54
+ className: "mt-0.5 size-3.5 shrink-0 text-rose-600"
55
+ });
56
+ if (prompt.kind === "comment") return /* @__PURE__ */ jsx(Icon, {
57
+ icon: UiComment,
58
+ className: "mt-0.5 size-3.5 shrink-0"
59
+ });
60
+ return /* @__PURE__ */ jsx(Icon, {
61
+ icon: UiHourglass,
62
+ className: "mt-0.5 size-3.5 shrink-0"
63
+ });
64
+ }
65
+ export { PromptList };
66
+
67
+ //# sourceMappingURL=PromptList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptList.js","names":["_Fragment"],"sources":["../../src/data/PromptList.tsx"],"sourcesContent":["import { Icon } from \"./Icon\";\nimport { UiCheck, UiClose, UiComment, UiHourglass } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport type { PromptSnapshot } from \"../hooks/use-prompts\";\nimport { summarizePromptAnswer } from \"./PromptBanner.model\";\n\nexport interface PromptListProps {\n /** Rendered in the given order; `orderPrompts` puts pending first. */\n prompts: readonly PromptSnapshot[];\n /** Highlights the prompt currently being answered. */\n activeId?: string | undefined;\n /** Makes each pending prompt a button that answers it; answered and closed prompts stay read-only. */\n onSelect?: ((prompt: PromptSnapshot) => void) | undefined;\n className?: string | undefined;\n}\n\n/** Each prompt's state, title, kind and answer summary — the list PromptBanner and PromptIndicator share. */\nexport function PromptList({ prompts, activeId, onSelect, className }: PromptListProps) {\n return (\n <ol className={cn(\"divide-y divide-border overflow-hidden rounded-md border border-border bg-background text-xs\", className)}>\n {prompts.map((prompt) => {\n const rowClass = cn(\"flex w-full min-w-0 items-start gap-2 px-2 py-1.5 text-left\", prompt.id === activeId && \"bg-muted/60\");\n return (\n <li key={prompt.id}>\n {onSelect && prompt.state === \"pending\" ? (\n <button type=\"button\" className={cn(rowClass, \"hover:bg-muted focus-visible:bg-muted focus-visible:outline-none\")} onClick={() => onSelect(prompt)}>\n <PromptRow prompt={prompt} />\n </button>\n ) : (\n <div className={rowClass}>\n <PromptRow prompt={prompt} />\n </div>\n )}\n </li>\n );\n })}\n </ol>\n );\n}\n\nfunction PromptRow({ prompt }: { prompt: PromptSnapshot }) {\n return (\n <>\n <PromptStateIcon prompt={prompt} />\n <span className=\"block min-w-0 flex-1\">\n <span className=\"flex min-w-0 items-center gap-2\">\n <span className=\"truncate font-medium text-foreground\" data-testid=\"prompt-list-title\">{prompt.title}</span>\n {prompt.kind ? <span className=\"shrink-0 text-muted-foreground\">{prompt.kind}</span> : null}\n </span>\n <span className=\"mt-0.5 block truncate text-muted-foreground\">{summarizePromptAnswer(prompt)}</span>\n </span>\n </>\n );\n}\n\nfunction PromptStateIcon({ prompt }: { prompt: PromptSnapshot }) {\n if (prompt.state === \"answered\") return <Icon icon={UiCheck} className=\"mt-0.5 size-3.5 shrink-0 text-emerald-600\" />;\n if (prompt.state === \"cancelled\" || prompt.state === \"expired\") {\n return <Icon icon={UiClose} className=\"mt-0.5 size-3.5 shrink-0 text-rose-600\" />;\n }\n if (prompt.kind === \"comment\") return <Icon icon={UiComment} className=\"mt-0.5 size-3.5 shrink-0\" />;\n return <Icon icon={UiHourglass} className=\"mt-0.5 size-3.5 shrink-0\" />;\n}\n"],"mappings":";;;;;;;;;;AAiBA,SAAgB,WAAW,EAAE,SAAS,UAAU,UAAU,aAA8B;CACtF,OACE,oBAAC,MAAD;EAAI,WAAW,GAAG,gGAAgG,SAAS;EACxH,UAAA,QAAQ,KAAK,WAAW;GACvB,MAAM,WAAW,GAAG,+DAA+D,OAAO,OAAO,YAAY,aAAa;GAC1H,OACE,oBAAC,MAAD,EAAA,UACG,YAAY,OAAO,UAAU,YAC5B,oBAAC,UAAD;IAAQ,MAAK;IAAS,WAAW,GAAG,UAAU,kEAAkE;IAAG,eAAe,SAAS,MAAM;IAC/I,UAAA,oBAAC,WAAD,EAAmB,OAAS,CAAA;GACtB,CAAA,IAER,oBAAC,OAAD;IAAK,WAAW;IACd,UAAA,oBAAC,WAAD,EAAmB,OAAS,CAAA;GACzB,CAAA,EAEL,GAVK,OAAO,EAUZ;EAER,CAAC;CACC,CAAA;AAER;AAEA,SAAS,UAAU,EAAE,UAAsC;CACzD,OACE,qBAAAA,UAAA,EAAA,UAAA,CACE,oBAAC,iBAAD,EAAyB,OAAS,CAAA,GAClC,qBAAC,QAAD;EAAM,WAAU;EAAhB,UAAA,CACE,qBAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACE,oBAAC,QAAD;IAAM,WAAU;IAAuC,eAAY;IAAqB,UAAA,OAAO;GAAY,CAAA,GAC1G,OAAO,OAAO,oBAAC,QAAD;IAAM,WAAU;IAAkC,UAAA,OAAO;GAAW,CAAA,IAAI,IACnF;EACN,CAAA,GAAA,oBAAC,QAAD;GAAM,WAAU;GAA+C,UAAA,sBAAsB,MAAM;EAAQ,CAAA,CAC/F;CACN,CAAA,CAAA,EAAA,CAAA;AAEN;AAEA,SAAS,gBAAgB,EAAE,UAAsC;CAC/D,IAAI,OAAO,UAAU,YAAY,OAAO,oBAAC,MAAD;EAAM,MAAM;EAAS,WAAU;CAA6C,CAAA;CACpH,IAAI,OAAO,UAAU,eAAe,OAAO,UAAU,WACnD,OAAO,oBAAC,MAAD;EAAM,MAAM;EAAS,WAAU;CAA0C,CAAA;CAElF,IAAI,OAAO,SAAS,WAAW,OAAO,oBAAC,MAAD;EAAM,MAAM;EAAW,WAAU;CAA4B,CAAA;CACnG,OAAO,oBAAC,MAAD;EAAM,MAAM;EAAa,WAAU;CAA4B,CAAA;AACxE"}