@flanksource/clicky-ui 0.3.59 → 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 (428) hide show
  1. package/NOTICE.md +58 -0
  2. package/dist/data/Clicky.cjs +2 -1
  3. package/dist/data/Clicky.cjs.map +1 -1
  4. package/dist/data/Clicky.d.ts +2 -0
  5. package/dist/data/Clicky.d.ts.map +1 -1
  6. package/dist/data/Clicky.js +2 -1
  7. package/dist/data/Clicky.js.map +1 -1
  8. package/dist/data/PromptBanner.model.cjs +10 -0
  9. package/dist/data/PromptBanner.model.cjs.map +1 -1
  10. package/dist/data/PromptBanner.model.d.ts +2 -0
  11. package/dist/data/PromptBanner.model.d.ts.map +1 -1
  12. package/dist/data/PromptBanner.model.js +10 -1
  13. package/dist/data/PromptBanner.model.js.map +1 -1
  14. package/dist/data/PromptDialog.cjs +16 -49
  15. package/dist/data/PromptDialog.cjs.map +1 -1
  16. package/dist/data/PromptDialog.d.ts +7 -1
  17. package/dist/data/PromptDialog.d.ts.map +1 -1
  18. package/dist/data/PromptDialog.js +17 -50
  19. package/dist/data/PromptDialog.js.map +1 -1
  20. package/dist/data/PromptForm.cjs +79 -0
  21. package/dist/data/PromptForm.cjs.map +1 -0
  22. package/dist/data/PromptForm.d.ts +26 -0
  23. package/dist/data/PromptForm.d.ts.map +1 -0
  24. package/dist/data/PromptForm.js +79 -0
  25. package/dist/data/PromptForm.js.map +1 -0
  26. package/dist/data/PromptIndicator.cjs +82 -0
  27. package/dist/data/PromptIndicator.cjs.map +1 -0
  28. package/dist/data/PromptIndicator.d.ts +19 -0
  29. package/dist/data/PromptIndicator.d.ts.map +1 -0
  30. package/dist/data/PromptIndicator.js +82 -0
  31. package/dist/data/PromptIndicator.js.map +1 -0
  32. package/dist/data/PromptList.cjs +67 -0
  33. package/dist/data/PromptList.cjs.map +1 -0
  34. package/dist/data/PromptList.d.ts +13 -0
  35. package/dist/data/PromptList.d.ts.map +1 -0
  36. package/dist/data/PromptList.js +67 -0
  37. package/dist/data/PromptList.js.map +1 -0
  38. package/dist/data/git/GitChangeList.cjs +11 -4
  39. package/dist/data/git/GitChangeList.cjs.map +1 -1
  40. package/dist/data/git/GitChangeList.d.ts +2 -35
  41. package/dist/data/git/GitChangeList.d.ts.map +1 -1
  42. package/dist/data/git/GitChangeList.js +11 -4
  43. package/dist/data/git/GitChangeList.js.map +1 -1
  44. package/dist/data/git/GitLink.cjs +13 -0
  45. package/dist/data/git/GitLink.cjs.map +1 -0
  46. package/dist/data/git/GitLink.d.ts +8 -0
  47. package/dist/data/git/GitLink.d.ts.map +1 -0
  48. package/dist/data/git/GitLink.js +13 -0
  49. package/dist/data/git/GitLink.js.map +1 -0
  50. package/dist/data/git/git-links.cjs +54 -0
  51. package/dist/data/git/git-links.cjs.map +1 -0
  52. package/dist/data/git/git-links.d.ts +4 -0
  53. package/dist/data/git/git-links.d.ts.map +1 -0
  54. package/dist/data/git/git-links.js +53 -0
  55. package/dist/data/git/git-links.js.map +1 -0
  56. package/dist/data/git/index.d.ts +3 -0
  57. package/dist/data/git/index.d.ts.map +1 -1
  58. package/dist/data/git/types.d.ts +54 -0
  59. package/dist/data/git/types.d.ts.map +1 -0
  60. package/dist/data/test-runner/MatrixMarks.cjs +4 -3
  61. package/dist/data/test-runner/MatrixMarks.cjs.map +1 -1
  62. package/dist/data/test-runner/MatrixMarks.d.ts +7 -4
  63. package/dist/data/test-runner/MatrixMarks.d.ts.map +1 -1
  64. package/dist/data/test-runner/MatrixMarks.js +4 -3
  65. package/dist/data/test-runner/MatrixMarks.js.map +1 -1
  66. package/dist/data/test-runner/TestRunSummary.cjs +1 -1
  67. package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
  68. package/dist/data/test-runner/TestRunSummary.js +1 -1
  69. package/dist/data/test-runner/TestRunSummary.js.map +1 -1
  70. package/dist/data/test-runner/TestTree.cjs +1 -1
  71. package/dist/data/test-runner/TestTree.cjs.map +1 -1
  72. package/dist/data/test-runner/TestTree.js +1 -1
  73. package/dist/data/test-runner/TestTree.js.map +1 -1
  74. package/dist/data/test-runner/TestTreeNode.cjs +2 -2
  75. package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
  76. package/dist/data/test-runner/TestTreeNode.js +2 -2
  77. package/dist/data/test-runner/TestTreeNode.js.map +1 -1
  78. package/dist/data/test-runner/adapter.cjs +7 -0
  79. package/dist/data/test-runner/adapter.cjs.map +1 -1
  80. package/dist/data/test-runner/adapter.d.ts +7 -0
  81. package/dist/data/test-runner/adapter.d.ts.map +1 -1
  82. package/dist/data/test-runner/adapter.js +7 -0
  83. package/dist/data/test-runner/adapter.js.map +1 -1
  84. package/dist/data/test-runner/index.d.ts +1 -1
  85. package/dist/data/test-runner/index.d.ts.map +1 -1
  86. package/dist/data/test-runner/marks.cjs +3 -3
  87. package/dist/data/test-runner/marks.cjs.map +1 -1
  88. package/dist/data/test-runner/marks.js +3 -3
  89. package/dist/data/test-runner/marks.js.map +1 -1
  90. package/dist/data/test-runner/matrix-marks.cjs +12 -3
  91. package/dist/data/test-runner/matrix-marks.cjs.map +1 -1
  92. package/dist/data/test-runner/matrix-marks.d.ts +13 -0
  93. package/dist/data/test-runner/matrix-marks.d.ts.map +1 -1
  94. package/dist/data/test-runner/matrix-marks.js +12 -3
  95. package/dist/data/test-runner/matrix-marks.js.map +1 -1
  96. package/dist/data/test-runner/status.cjs +1 -1
  97. package/dist/data/test-runner/status.cjs.map +1 -1
  98. package/dist/data/test-runner/status.js +1 -1
  99. package/dist/data/test-runner/status.js.map +1 -1
  100. package/dist/data/test-runner/types.d.ts +2 -0
  101. package/dist/data/test-runner/types.d.ts.map +1 -1
  102. package/dist/data/verification/adapterViews.cjs +3 -1
  103. package/dist/data/verification/adapterViews.cjs.map +1 -1
  104. package/dist/data/verification/adapterViews.d.ts +5 -2
  105. package/dist/data/verification/adapterViews.d.ts.map +1 -1
  106. package/dist/data/verification/adapterViews.js +4 -2
  107. package/dist/data/verification/adapterViews.js.map +1 -1
  108. package/dist/data/verification/adapters.cjs +28 -7
  109. package/dist/data/verification/adapters.cjs.map +1 -1
  110. package/dist/data/verification/adapters.d.ts +7 -1
  111. package/dist/data/verification/adapters.d.ts.map +1 -1
  112. package/dist/data/verification/adapters.js +28 -7
  113. package/dist/data/verification/adapters.js.map +1 -1
  114. package/dist/data/verification/stepKind.cjs +1 -0
  115. package/dist/data/verification/stepKind.cjs.map +1 -1
  116. package/dist/data/verification/stepKind.d.ts.map +1 -1
  117. package/dist/data/verification/stepKind.js +1 -0
  118. package/dist/data/verification/stepKind.js.map +1 -1
  119. package/dist/data/verification/stepKindViews.cjs +17 -0
  120. package/dist/data/verification/stepKindViews.cjs.map +1 -1
  121. package/dist/data/verification/stepKindViews.d.ts +4 -0
  122. package/dist/data/verification/stepKindViews.d.ts.map +1 -1
  123. package/dist/data/verification/stepKindViews.js +17 -1
  124. package/dist/data/verification/stepKindViews.js.map +1 -1
  125. package/dist/data/version-info.cjs +3 -3
  126. package/dist/data/version-info.js +3 -3
  127. package/dist/data.cjs +114 -0
  128. package/dist/data.d.ts +3 -0
  129. package/dist/data.d.ts.map +1 -1
  130. package/dist/data.js +51 -1
  131. package/dist/git.cjs +6 -0
  132. package/dist/git.d.ts +4 -0
  133. package/dist/git.d.ts.map +1 -0
  134. package/dist/git.js +3 -0
  135. package/dist/hooks/use-prompts.cjs +18 -11
  136. package/dist/hooks/use-prompts.cjs.map +1 -1
  137. package/dist/hooks/use-prompts.d.ts.map +1 -1
  138. package/dist/hooks/use-prompts.js +18 -11
  139. package/dist/hooks/use-prompts.js.map +1 -1
  140. package/dist/icons/components/UiApi.cjs +37 -0
  141. package/dist/icons/components/UiApi.cjs.map +1 -0
  142. package/dist/icons/components/UiApi.d.ts +9 -0
  143. package/dist/icons/components/UiApi.d.ts.map +1 -0
  144. package/dist/icons/components/UiApi.js +35 -0
  145. package/dist/icons/components/UiApi.js.map +1 -0
  146. package/dist/icons/components/UiApiBridge.cjs +38 -0
  147. package/dist/icons/components/UiApiBridge.cjs.map +1 -0
  148. package/dist/icons/components/UiApiBridge.d.ts +9 -0
  149. package/dist/icons/components/UiApiBridge.d.ts.map +1 -0
  150. package/dist/icons/components/UiApiBridge.js +36 -0
  151. package/dist/icons/components/UiApiBridge.js.map +1 -0
  152. package/dist/icons/components/UiApiGateway.cjs +33 -0
  153. package/dist/icons/components/UiApiGateway.cjs.map +1 -0
  154. package/dist/icons/components/UiApiGateway.d.ts +9 -0
  155. package/dist/icons/components/UiApiGateway.d.ts.map +1 -0
  156. package/dist/icons/components/UiApiGateway.js +31 -0
  157. package/dist/icons/components/UiApiGateway.js.map +1 -0
  158. package/dist/icons/components/UiApiRequest.cjs +37 -0
  159. package/dist/icons/components/UiApiRequest.cjs.map +1 -0
  160. package/dist/icons/components/UiApiRequest.d.ts +9 -0
  161. package/dist/icons/components/UiApiRequest.d.ts.map +1 -0
  162. package/dist/icons/components/UiApiRequest.js +35 -0
  163. package/dist/icons/components/UiApiRequest.js.map +1 -0
  164. package/dist/icons/components/UiArrowDecision.cjs +51 -0
  165. package/dist/icons/components/UiArrowDecision.cjs.map +1 -0
  166. package/dist/icons/components/UiArrowDecision.d.ts +15 -0
  167. package/dist/icons/components/UiArrowDecision.d.ts.map +1 -0
  168. package/dist/icons/components/UiArrowDecision.js +48 -0
  169. package/dist/icons/components/UiArrowDecision.js.map +1 -0
  170. package/dist/icons/components/UiArrowSquareIn.cjs +51 -0
  171. package/dist/icons/components/UiArrowSquareIn.cjs.map +1 -0
  172. package/dist/icons/components/UiArrowSquareIn.d.ts +15 -0
  173. package/dist/icons/components/UiArrowSquareIn.d.ts.map +1 -0
  174. package/dist/icons/components/UiArrowSquareIn.js +48 -0
  175. package/dist/icons/components/UiArrowSquareIn.js.map +1 -0
  176. package/dist/icons/components/UiBatchCheck.cjs +55 -0
  177. package/dist/icons/components/UiBatchCheck.cjs.map +1 -0
  178. package/dist/icons/components/UiBatchCheck.d.ts +15 -0
  179. package/dist/icons/components/UiBatchCheck.d.ts.map +1 -0
  180. package/dist/icons/components/UiBatchCheck.js +52 -0
  181. package/dist/icons/components/UiBatchCheck.js.map +1 -0
  182. package/dist/icons/components/UiBatchJob.cjs +39 -0
  183. package/dist/icons/components/UiBatchJob.cjs.map +1 -0
  184. package/dist/icons/components/UiBatchJob.d.ts +9 -0
  185. package/dist/icons/components/UiBatchJob.d.ts.map +1 -0
  186. package/dist/icons/components/UiBatchJob.js +37 -0
  187. package/dist/icons/components/UiBatchJob.js.map +1 -0
  188. package/dist/icons/components/UiBatchRequest.cjs +39 -0
  189. package/dist/icons/components/UiBatchRequest.cjs.map +1 -0
  190. package/dist/icons/components/UiBatchRequest.d.ts +9 -0
  191. package/dist/icons/components/UiBatchRequest.d.ts.map +1 -0
  192. package/dist/icons/components/UiBatchRequest.js +37 -0
  193. package/dist/icons/components/UiBatchRequest.js.map +1 -0
  194. package/dist/icons/components/UiBpmnConditional.cjs +29 -0
  195. package/dist/icons/components/UiBpmnConditional.cjs.map +1 -0
  196. package/dist/icons/components/UiBpmnConditional.d.ts +9 -0
  197. package/dist/icons/components/UiBpmnConditional.d.ts.map +1 -0
  198. package/dist/icons/components/UiBpmnConditional.js +27 -0
  199. package/dist/icons/components/UiBpmnConditional.js.map +1 -0
  200. package/dist/icons/components/UiBranchFlow.cjs +33 -0
  201. package/dist/icons/components/UiBranchFlow.cjs.map +1 -0
  202. package/dist/icons/components/UiBranchFlow.d.ts +9 -0
  203. package/dist/icons/components/UiBranchFlow.d.ts.map +1 -0
  204. package/dist/icons/components/UiBranchFlow.js +31 -0
  205. package/dist/icons/components/UiBranchFlow.js.map +1 -0
  206. package/dist/icons/components/UiClassicBatch.cjs +29 -0
  207. package/dist/icons/components/UiClassicBatch.cjs.map +1 -0
  208. package/dist/icons/components/UiClassicBatch.d.ts +9 -0
  209. package/dist/icons/components/UiClassicBatch.d.ts.map +1 -0
  210. package/dist/icons/components/UiClassicBatch.js +27 -0
  211. package/dist/icons/components/UiClassicBatch.js.map +1 -0
  212. package/dist/icons/components/UiCodeFile.cjs +29 -0
  213. package/dist/icons/components/UiCodeFile.cjs.map +1 -0
  214. package/dist/icons/components/UiCodeFile.d.ts +9 -0
  215. package/dist/icons/components/UiCodeFile.d.ts.map +1 -0
  216. package/dist/icons/components/UiCodeFile.js +27 -0
  217. package/dist/icons/components/UiCodeFile.js.map +1 -0
  218. package/dist/icons/components/UiColumnsLayout.cjs +29 -0
  219. package/dist/icons/components/UiColumnsLayout.cjs.map +1 -0
  220. package/dist/icons/components/UiColumnsLayout.d.ts +9 -0
  221. package/dist/icons/components/UiColumnsLayout.d.ts.map +1 -0
  222. package/dist/icons/components/UiColumnsLayout.js +27 -0
  223. package/dist/icons/components/UiColumnsLayout.js.map +1 -0
  224. package/dist/icons/components/UiCondition.cjs +37 -0
  225. package/dist/icons/components/UiCondition.cjs.map +1 -0
  226. package/dist/icons/components/UiCondition.d.ts +9 -0
  227. package/dist/icons/components/UiCondition.d.ts.map +1 -0
  228. package/dist/icons/components/UiCondition.js +35 -0
  229. package/dist/icons/components/UiCondition.js.map +1 -0
  230. package/dist/icons/components/UiConditions.cjs +29 -0
  231. package/dist/icons/components/UiConditions.cjs.map +1 -0
  232. package/dist/icons/components/UiConditions.d.ts +9 -0
  233. package/dist/icons/components/UiConditions.d.ts.map +1 -0
  234. package/dist/icons/components/UiConditions.js +27 -0
  235. package/dist/icons/components/UiConditions.js.map +1 -0
  236. package/dist/icons/components/UiDelayQueue.cjs +40 -0
  237. package/dist/icons/components/UiDelayQueue.cjs.map +1 -0
  238. package/dist/icons/components/UiDelayQueue.d.ts +9 -0
  239. package/dist/icons/components/UiDelayQueue.d.ts.map +1 -0
  240. package/dist/icons/components/UiDelayQueue.js +38 -0
  241. package/dist/icons/components/UiDelayQueue.js.map +1 -0
  242. package/dist/icons/components/UiDynamicForm.cjs +51 -0
  243. package/dist/icons/components/UiDynamicForm.cjs.map +1 -0
  244. package/dist/icons/components/UiDynamicForm.d.ts +15 -0
  245. package/dist/icons/components/UiDynamicForm.d.ts.map +1 -0
  246. package/dist/icons/components/UiDynamicForm.js +48 -0
  247. package/dist/icons/components/UiDynamicForm.js.map +1 -0
  248. package/dist/icons/components/UiFlowArrow.cjs +51 -0
  249. package/dist/icons/components/UiFlowArrow.cjs.map +1 -0
  250. package/dist/icons/components/UiFlowArrow.d.ts +15 -0
  251. package/dist/icons/components/UiFlowArrow.d.ts.map +1 -0
  252. package/dist/icons/components/UiFlowArrow.js +48 -0
  253. package/dist/icons/components/UiFlowArrow.js.map +1 -0
  254. package/dist/icons/components/UiFormFields.cjs +33 -0
  255. package/dist/icons/components/UiFormFields.cjs.map +1 -0
  256. package/dist/icons/components/UiFormFields.d.ts +9 -0
  257. package/dist/icons/components/UiFormFields.d.ts.map +1 -0
  258. package/dist/icons/components/UiFormFields.js +31 -0
  259. package/dist/icons/components/UiFormFields.js.map +1 -0
  260. package/dist/icons/components/UiFormStep.cjs +38 -0
  261. package/dist/icons/components/UiFormStep.cjs.map +1 -0
  262. package/dist/icons/components/UiFormStep.d.ts +9 -0
  263. package/dist/icons/components/UiFormStep.d.ts.map +1 -0
  264. package/dist/icons/components/UiFormStep.js +36 -0
  265. package/dist/icons/components/UiFormStep.js.map +1 -0
  266. package/dist/icons/components/UiGatewayApi.cjs +32 -0
  267. package/dist/icons/components/UiGatewayApi.cjs.map +1 -0
  268. package/dist/icons/components/UiGatewayApi.d.ts +9 -0
  269. package/dist/icons/components/UiGatewayApi.d.ts.map +1 -0
  270. package/dist/icons/components/UiGatewayApi.js +30 -0
  271. package/dist/icons/components/UiGatewayApi.js.map +1 -0
  272. package/dist/icons/components/UiImportArrow.cjs +29 -0
  273. package/dist/icons/components/UiImportArrow.cjs.map +1 -0
  274. package/dist/icons/components/UiImportArrow.d.ts +9 -0
  275. package/dist/icons/components/UiImportArrow.d.ts.map +1 -0
  276. package/dist/icons/components/UiImportArrow.js +27 -0
  277. package/dist/icons/components/UiImportArrow.js.map +1 -0
  278. package/dist/icons/components/UiInputField.cjs +33 -0
  279. package/dist/icons/components/UiInputField.cjs.map +1 -0
  280. package/dist/icons/components/UiInputField.d.ts +9 -0
  281. package/dist/icons/components/UiInputField.d.ts.map +1 -0
  282. package/dist/icons/components/UiInputField.js +31 -0
  283. package/dist/icons/components/UiInputField.js.map +1 -0
  284. package/dist/icons/components/UiInsertTable.cjs +29 -0
  285. package/dist/icons/components/UiInsertTable.cjs.map +1 -0
  286. package/dist/icons/components/UiInsertTable.d.ts +9 -0
  287. package/dist/icons/components/UiInsertTable.d.ts.map +1 -0
  288. package/dist/icons/components/UiInsertTable.js +27 -0
  289. package/dist/icons/components/UiInsertTable.js.map +1 -0
  290. package/dist/icons/components/UiLayoutTemplate.cjs +32 -0
  291. package/dist/icons/components/UiLayoutTemplate.cjs.map +1 -0
  292. package/dist/icons/components/UiLayoutTemplate.d.ts +9 -0
  293. package/dist/icons/components/UiLayoutTemplate.d.ts.map +1 -0
  294. package/dist/icons/components/UiLayoutTemplate.js +30 -0
  295. package/dist/icons/components/UiLayoutTemplate.js.map +1 -0
  296. package/dist/icons/components/UiLayoutWindow.cjs +56 -0
  297. package/dist/icons/components/UiLayoutWindow.cjs.map +1 -0
  298. package/dist/icons/components/UiLayoutWindow.d.ts +15 -0
  299. package/dist/icons/components/UiLayoutWindow.d.ts.map +1 -0
  300. package/dist/icons/components/UiLayoutWindow.js +53 -0
  301. package/dist/icons/components/UiLayoutWindow.js.map +1 -0
  302. package/dist/icons/components/UiListEnd.cjs +33 -0
  303. package/dist/icons/components/UiListEnd.cjs.map +1 -0
  304. package/dist/icons/components/UiListEnd.d.ts +9 -0
  305. package/dist/icons/components/UiListEnd.d.ts.map +1 -0
  306. package/dist/icons/components/UiListEnd.js +31 -0
  307. package/dist/icons/components/UiListEnd.js.map +1 -0
  308. package/dist/icons/components/UiListEndLine.cjs +51 -0
  309. package/dist/icons/components/UiListEndLine.cjs.map +1 -0
  310. package/dist/icons/components/UiListEndLine.d.ts +15 -0
  311. package/dist/icons/components/UiListEndLine.d.ts.map +1 -0
  312. package/dist/icons/components/UiListEndLine.js +48 -0
  313. package/dist/icons/components/UiListEndLine.js.map +1 -0
  314. package/dist/icons/components/UiListNumbers.cjs +51 -0
  315. package/dist/icons/components/UiListNumbers.cjs.map +1 -0
  316. package/dist/icons/components/UiListNumbers.d.ts +15 -0
  317. package/dist/icons/components/UiListNumbers.d.ts.map +1 -0
  318. package/dist/icons/components/UiListNumbers.js +48 -0
  319. package/dist/icons/components/UiListNumbers.js.map +1 -0
  320. package/dist/icons/components/UiLowPriority.cjs +29 -0
  321. package/dist/icons/components/UiLowPriority.cjs.map +1 -0
  322. package/dist/icons/components/UiLowPriority.d.ts +9 -0
  323. package/dist/icons/components/UiLowPriority.d.ts.map +1 -0
  324. package/dist/icons/components/UiLowPriority.js +27 -0
  325. package/dist/icons/components/UiLowPriority.js.map +1 -0
  326. package/dist/icons/components/UiMergeQueue.cjs +38 -0
  327. package/dist/icons/components/UiMergeQueue.cjs.map +1 -0
  328. package/dist/icons/components/UiMergeQueue.d.ts +9 -0
  329. package/dist/icons/components/UiMergeQueue.d.ts.map +1 -0
  330. package/dist/icons/components/UiMergeQueue.js +36 -0
  331. package/dist/icons/components/UiMergeQueue.js.map +1 -0
  332. package/dist/icons/components/UiPipelineStage.cjs +33 -0
  333. package/dist/icons/components/UiPipelineStage.cjs.map +1 -0
  334. package/dist/icons/components/UiPipelineStage.d.ts +9 -0
  335. package/dist/icons/components/UiPipelineStage.d.ts.map +1 -0
  336. package/dist/icons/components/UiPipelineStage.js +31 -0
  337. package/dist/icons/components/UiPipelineStage.js.map +1 -0
  338. package/dist/icons/components/UiPlaylistRemove.cjs +29 -0
  339. package/dist/icons/components/UiPlaylistRemove.cjs.map +1 -0
  340. package/dist/icons/components/UiPlaylistRemove.d.ts +9 -0
  341. package/dist/icons/components/UiPlaylistRemove.d.ts.map +1 -0
  342. package/dist/icons/components/UiPlaylistRemove.js +27 -0
  343. package/dist/icons/components/UiPlaylistRemove.js.map +1 -0
  344. package/dist/icons/components/UiReportForms.cjs +51 -0
  345. package/dist/icons/components/UiReportForms.cjs.map +1 -0
  346. package/dist/icons/components/UiReportForms.d.ts +15 -0
  347. package/dist/icons/components/UiReportForms.d.ts.map +1 -0
  348. package/dist/icons/components/UiReportForms.js +48 -0
  349. package/dist/icons/components/UiReportForms.js.map +1 -0
  350. package/dist/icons/components/UiScreenTemplate.cjs +29 -0
  351. package/dist/icons/components/UiScreenTemplate.cjs.map +1 -0
  352. package/dist/icons/components/UiScreenTemplate.d.ts +9 -0
  353. package/dist/icons/components/UiScreenTemplate.d.ts.map +1 -0
  354. package/dist/icons/components/UiScreenTemplate.js +27 -0
  355. package/dist/icons/components/UiScreenTemplate.js.map +1 -0
  356. package/dist/icons/components/UiServices.cjs +29 -0
  357. package/dist/icons/components/UiServices.cjs.map +1 -0
  358. package/dist/icons/components/UiServices.d.ts +9 -0
  359. package/dist/icons/components/UiServices.d.ts.map +1 -0
  360. package/dist/icons/components/UiServices.js +27 -0
  361. package/dist/icons/components/UiServices.js.map +1 -0
  362. package/dist/icons/components/UiSkipCircle.cjs +51 -0
  363. package/dist/icons/components/UiSkipCircle.cjs.map +1 -0
  364. package/dist/icons/components/UiSkipCircle.d.ts +15 -0
  365. package/dist/icons/components/UiSkipCircle.d.ts.map +1 -0
  366. package/dist/icons/components/UiSkipCircle.js +48 -0
  367. package/dist/icons/components/UiSkipCircle.js.map +1 -0
  368. package/dist/icons/components/UiTaskBatch.cjs +33 -0
  369. package/dist/icons/components/UiTaskBatch.cjs.map +1 -0
  370. package/dist/icons/components/UiTaskBatch.d.ts +9 -0
  371. package/dist/icons/components/UiTaskBatch.d.ts.map +1 -0
  372. package/dist/icons/components/UiTaskBatch.js +31 -0
  373. package/dist/icons/components/UiTaskBatch.js.map +1 -0
  374. package/dist/icons/components/UiTodoList.cjs +29 -0
  375. package/dist/icons/components/UiTodoList.cjs.map +1 -0
  376. package/dist/icons/components/UiTodoList.d.ts +9 -0
  377. package/dist/icons/components/UiTodoList.d.ts.map +1 -0
  378. package/dist/icons/components/UiTodoList.js +27 -0
  379. package/dist/icons/components/UiTodoList.js.map +1 -0
  380. package/dist/icons/components/UiTrayArrowDown.cjs +51 -0
  381. package/dist/icons/components/UiTrayArrowDown.cjs.map +1 -0
  382. package/dist/icons/components/UiTrayArrowDown.d.ts +15 -0
  383. package/dist/icons/components/UiTrayArrowDown.d.ts.map +1 -0
  384. package/dist/icons/components/UiTrayArrowDown.js +48 -0
  385. package/dist/icons/components/UiTrayArrowDown.js.map +1 -0
  386. package/dist/icons/components/UiVault.cjs +51 -0
  387. package/dist/icons/components/UiVault.cjs.map +1 -0
  388. package/dist/icons/components/UiVault.d.ts +15 -0
  389. package/dist/icons/components/UiVault.d.ts.map +1 -0
  390. package/dist/icons/components/UiVault.js +48 -0
  391. package/dist/icons/components/UiVault.js.map +1 -0
  392. package/dist/icons/components/UiWebServiceDefinition.cjs +39 -0
  393. package/dist/icons/components/UiWebServiceDefinition.cjs.map +1 -0
  394. package/dist/icons/components/UiWebServiceDefinition.d.ts +9 -0
  395. package/dist/icons/components/UiWebServiceDefinition.d.ts.map +1 -0
  396. package/dist/icons/components/UiWebServiceDefinition.js +37 -0
  397. package/dist/icons/components/UiWebServiceDefinition.js.map +1 -0
  398. package/dist/icons/components/UiWebhook.cjs +29 -0
  399. package/dist/icons/components/UiWebhook.cjs.map +1 -0
  400. package/dist/icons/components/UiWebhook.d.ts +9 -0
  401. package/dist/icons/components/UiWebhook.d.ts.map +1 -0
  402. package/dist/icons/components/UiWebhook.js +27 -0
  403. package/dist/icons/components/UiWebhook.js.map +1 -0
  404. package/dist/icons/components/UiWebhookLine.cjs +51 -0
  405. package/dist/icons/components/UiWebhookLine.cjs.map +1 -0
  406. package/dist/icons/components/UiWebhookLine.d.ts +15 -0
  407. package/dist/icons/components/UiWebhookLine.d.ts.map +1 -0
  408. package/dist/icons/components/UiWebhookLine.js +48 -0
  409. package/dist/icons/components/UiWebhookLine.js.map +1 -0
  410. package/dist/icons/index.d.ts +58 -0
  411. package/dist/icons/index.d.ts.map +1 -1
  412. package/dist/icons/registry.cjs +90 -0
  413. package/dist/icons/registry.cjs.map +1 -1
  414. package/dist/icons/registry.d.ts.map +1 -1
  415. package/dist/icons/registry.js +90 -0
  416. package/dist/icons/registry.js.map +1 -1
  417. package/dist/icons.cjs +103 -0
  418. package/dist/icons.js +46 -1
  419. package/dist/index.cjs +114 -0
  420. package/dist/index.js +51 -1
  421. package/dist/overlay/DropdownMenu.cjs +17 -14
  422. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  423. package/dist/overlay/DropdownMenu.d.ts +1 -0
  424. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  425. package/dist/overlay/DropdownMenu.js +18 -15
  426. package/dist/overlay/DropdownMenu.js.map +1 -1
  427. package/dist/styles.css +1 -1
  428. 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"}
@@ -14,6 +14,7 @@ const require_Checkbox = require("../../components/Checkbox.cjs");
14
14
  const require_code_highlight = require("../code-highlight.cjs");
15
15
  const require_CodeDiff = require("../CodeDiff.cjs");
16
16
  const require_git_dates = require("./git-dates.cjs");
17
+ const require_git_links = require("./git-links.cjs");
17
18
  let react = require("react");
18
19
  let react_jsx_runtime = require("react/jsx-runtime");
19
20
  // src/data/git/GitChangeList.tsx
@@ -156,6 +157,7 @@ function CommitRow({ commit, selected, slots }) {
156
157
  const [expandedState, diffState, toggle] = useLazyDiff(commit, loadDiff);
157
158
  const expanded = !onOpen && expandedState;
158
159
  const author = displayAuthor(commit);
160
+ const href = commit.href ?? (commit.repository ? require_git_links.gitWebLink(commit.repository, { commit: commit.sha }) : void 0);
159
161
  const canExpand = Boolean(onOpen || loadDiff || renderExpanded || commit.body);
160
162
  const activate = onOpen ? () => onOpen(commit) : toggle;
161
163
  const selectable = onToggleSelect !== void 0;
@@ -228,8 +230,8 @@ function CommitRow({ commit, selected, slots }) {
228
230
  })
229
231
  ]
230
232
  }),
231
- commit.href ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
232
- href: commit.href,
233
+ href ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
234
+ href,
233
235
  target: "_blank",
234
236
  rel: "noopener noreferrer",
235
237
  className: "mt-0.5 inline-flex shrink-0 items-center gap-1 font-mono text-cyan-600 hover:underline",
@@ -359,6 +361,11 @@ function FileRow({ file, loadDiff, diffMaxHeightClassName }) {
359
361
  const status = statusView(file.status);
360
362
  const StatusIcon = status.icon;
361
363
  const path = splitPath(file.path);
364
+ if (file.href === void 0 && file.repository && !file.commit) throw new Error(`Git file "${file.path}" requires a commit for its repository link`);
365
+ const href = file.href ?? (file.repository && file.commit ? require_git_links.gitWebLink(file.repository, {
366
+ commit: file.commit,
367
+ file: file.path
368
+ }) : void 0);
362
369
  const canExpand = Boolean(loadDiff);
363
370
  function onKeyDown(event) {
364
371
  if (!canExpand || !isActivationKey(event)) return;
@@ -403,8 +410,8 @@ function FileRow({ file, loadDiff, diffMaxHeightClassName }) {
403
410
  ...file.additions !== void 0 ? { additions: file.additions } : {},
404
411
  ...file.deletions !== void 0 ? { deletions: file.deletions } : {}
405
412
  }),
406
- file.href && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
407
- href: file.href,
413
+ href && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
414
+ href,
408
415
  target: "_blank",
409
416
  rel: "noopener noreferrer",
410
417
  className: "shrink-0 text-muted-foreground hover:text-foreground",