@flanksource/clicky-ui 0.3.15 → 0.3.17

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 (823) hide show
  1. package/NOTICE.md +10 -0
  2. package/dist/ai.cjs +33 -4
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +31 -2
  5. package/dist/ai.js.map +1 -1
  6. package/dist/chat.cjs +6 -0
  7. package/dist/chat.cjs.map +1 -1
  8. package/dist/chat.js +7 -1
  9. package/dist/chat.js.map +1 -1
  10. package/dist/components/Combobox.cjs +92 -170
  11. package/dist/components/Combobox.cjs.map +1 -1
  12. package/dist/components/Combobox.d.ts +2 -111
  13. package/dist/components/Combobox.d.ts.map +1 -1
  14. package/dist/components/Combobox.js +95 -173
  15. package/dist/components/Combobox.js.map +1 -1
  16. package/dist/components/ComboboxActions.cjs +70 -0
  17. package/dist/components/ComboboxActions.cjs.map +1 -0
  18. package/dist/components/ComboboxActions.d.ts +8 -0
  19. package/dist/components/ComboboxActions.d.ts.map +1 -0
  20. package/dist/components/ComboboxActions.js +70 -0
  21. package/dist/components/ComboboxActions.js.map +1 -0
  22. package/dist/components/ComboboxMenu.cjs +160 -0
  23. package/dist/components/ComboboxMenu.cjs.map +1 -0
  24. package/dist/components/ComboboxMenu.d.ts +22 -0
  25. package/dist/components/ComboboxMenu.d.ts.map +1 -0
  26. package/dist/components/ComboboxMenu.js +160 -0
  27. package/dist/components/ComboboxMenu.js.map +1 -0
  28. package/dist/components/EndpointSelector.cjs +407 -0
  29. package/dist/components/EndpointSelector.cjs.map +1 -0
  30. package/dist/components/EndpointSelector.d.ts +3 -0
  31. package/dist/components/EndpointSelector.d.ts.map +1 -0
  32. package/dist/components/EndpointSelector.js +407 -0
  33. package/dist/components/EndpointSelector.js.map +1 -0
  34. package/dist/components/EndpointSelector.model.d.ts +52 -0
  35. package/dist/components/EndpointSelector.model.d.ts.map +1 -0
  36. package/dist/components/FilterBar.cjs +12 -0
  37. package/dist/components/FilterBar.cjs.map +1 -1
  38. package/dist/components/FilterBar.d.ts +4 -0
  39. package/dist/components/FilterBar.d.ts.map +1 -1
  40. package/dist/components/FilterBar.js +12 -0
  41. package/dist/components/FilterBar.js.map +1 -1
  42. package/dist/components/InputField.cjs +11 -12
  43. package/dist/components/InputField.cjs.map +1 -1
  44. package/dist/components/InputField.d.ts +7 -0
  45. package/dist/components/InputField.d.ts.map +1 -1
  46. package/dist/components/InputField.js +12 -13
  47. package/dist/components/InputField.js.map +1 -1
  48. package/dist/components/JsonSchemaForm.cjs +22 -16
  49. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  50. package/dist/components/JsonSchemaForm.d.ts +1 -1
  51. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  52. package/dist/components/JsonSchemaForm.js +22 -16
  53. package/dist/components/JsonSchemaForm.js.map +1 -1
  54. package/dist/components/MultiSelect.cjs +3 -3
  55. package/dist/components/MultiSelect.cjs.map +1 -1
  56. package/dist/components/MultiSelect.d.ts.map +1 -1
  57. package/dist/components/MultiSelect.js +3 -3
  58. package/dist/components/MultiSelect.js.map +1 -1
  59. package/dist/components/SecretKeySelector.cjs +150 -77
  60. package/dist/components/SecretKeySelector.cjs.map +1 -1
  61. package/dist/components/SecretKeySelector.d.ts.map +1 -1
  62. package/dist/components/SecretKeySelector.js +151 -78
  63. package/dist/components/SecretKeySelector.js.map +1 -1
  64. package/dist/components/WorkloadPicker.cjs +2 -1
  65. package/dist/components/WorkloadPicker.cjs.map +1 -1
  66. package/dist/components/WorkloadPicker.d.ts +6 -1
  67. package/dist/components/WorkloadPicker.d.ts.map +1 -1
  68. package/dist/components/WorkloadPicker.js +2 -1
  69. package/dist/components/WorkloadPicker.js.map +1 -1
  70. package/dist/components/combobox-types.d.ts +107 -0
  71. package/dist/components/combobox-types.d.ts.map +1 -0
  72. package/dist/components/combobox-utils.cjs +21 -0
  73. package/dist/components/combobox-utils.cjs.map +1 -0
  74. package/dist/components/combobox-utils.d.ts +15 -0
  75. package/dist/components/combobox-utils.d.ts.map +1 -0
  76. package/dist/components/combobox-utils.js +21 -0
  77. package/dist/components/combobox-utils.js.map +1 -0
  78. package/dist/components/endpoint-port.cjs +12 -0
  79. package/dist/components/endpoint-port.cjs.map +1 -0
  80. package/dist/components/endpoint-port.d.ts +4 -0
  81. package/dist/components/endpoint-port.d.ts.map +1 -0
  82. package/dist/components/endpoint-port.js +12 -0
  83. package/dist/components/endpoint-port.js.map +1 -0
  84. package/dist/components/json-schema-form-array.cjs +12 -23
  85. package/dist/components/json-schema-form-array.cjs.map +1 -1
  86. package/dist/components/json-schema-form-array.d.ts +1 -1
  87. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  88. package/dist/components/json-schema-form-array.js +12 -23
  89. package/dist/components/json-schema-form-array.js.map +1 -1
  90. package/dist/components/json-schema-form-discriminator.cjs +6 -2
  91. package/dist/components/json-schema-form-discriminator.cjs.map +1 -1
  92. package/dist/components/json-schema-form-discriminator.d.ts.map +1 -1
  93. package/dist/components/json-schema-form-discriminator.js +6 -2
  94. package/dist/components/json-schema-form-discriminator.js.map +1 -1
  95. package/dist/components/json-schema-form-error-display.cjs +50 -0
  96. package/dist/components/json-schema-form-error-display.cjs.map +1 -0
  97. package/dist/components/json-schema-form-error-display.d.ts +12 -0
  98. package/dist/components/json-schema-form-error-display.d.ts.map +1 -0
  99. package/dist/components/json-schema-form-error-display.js +50 -0
  100. package/dist/components/json-schema-form-error-display.js.map +1 -0
  101. package/dist/components/json-schema-form-error-types.d.ts +26 -0
  102. package/dist/components/json-schema-form-error-types.d.ts.map +1 -0
  103. package/dist/components/json-schema-form-errors.cjs +169 -0
  104. package/dist/components/json-schema-form-errors.cjs.map +1 -0
  105. package/dist/components/json-schema-form-errors.d.ts +14 -0
  106. package/dist/components/json-schema-form-errors.d.ts.map +1 -0
  107. package/dist/components/json-schema-form-errors.js +169 -0
  108. package/dist/components/json-schema-form-errors.js.map +1 -0
  109. package/dist/components/json-schema-form-object.cjs +12 -2
  110. package/dist/components/json-schema-form-object.cjs.map +1 -1
  111. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  112. package/dist/components/json-schema-form-object.js +12 -2
  113. package/dist/components/json-schema-form-object.js.map +1 -1
  114. package/dist/components/json-schema-form-refs.cjs +84 -19
  115. package/dist/components/json-schema-form-refs.cjs.map +1 -1
  116. package/dist/components/json-schema-form-refs.d.ts.map +1 -1
  117. package/dist/components/json-schema-form-refs.js +84 -19
  118. package/dist/components/json-schema-form-refs.js.map +1 -1
  119. package/dist/components/json-schema-form-render.cjs +33 -10
  120. package/dist/components/json-schema-form-render.cjs.map +1 -1
  121. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  122. package/dist/components/json-schema-form-render.js +34 -11
  123. package/dist/components/json-schema-form-render.js.map +1 -1
  124. package/dist/components/json-schema-form-resolve.cjs +16 -4
  125. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  126. package/dist/components/json-schema-form-resolve.d.ts +1 -0
  127. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  128. package/dist/components/json-schema-form-resolve.js +17 -5
  129. package/dist/components/json-schema-form-resolve.js.map +1 -1
  130. package/dist/components/json-schema-form-types.d.ts +4 -3
  131. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  132. package/dist/components.cjs +13 -0
  133. package/dist/components.cjs.map +1 -1
  134. package/dist/components.d.ts +8 -1
  135. package/dist/components.d.ts.map +1 -1
  136. package/dist/components.js +15 -2
  137. package/dist/components.js.map +1 -1
  138. package/dist/data/DataTable.cjs +205 -14
  139. package/dist/data/DataTable.cjs.map +1 -1
  140. package/dist/data/DataTable.d.ts +41 -0
  141. package/dist/data/DataTable.d.ts.map +1 -1
  142. package/dist/data/DataTable.grouping.cjs +21 -0
  143. package/dist/data/DataTable.grouping.cjs.map +1 -0
  144. package/dist/data/DataTable.grouping.d.ts +26 -0
  145. package/dist/data/DataTable.grouping.d.ts.map +1 -0
  146. package/dist/data/DataTable.grouping.js +21 -0
  147. package/dist/data/DataTable.grouping.js.map +1 -0
  148. package/dist/data/DataTable.js +205 -14
  149. package/dist/data/DataTable.js.map +1 -1
  150. package/dist/data/Markdown.cjs +45 -1
  151. package/dist/data/Markdown.cjs.map +1 -1
  152. package/dist/data/Markdown.d.ts +3 -2
  153. package/dist/data/Markdown.d.ts.map +1 -1
  154. package/dist/data/Markdown.js +45 -1
  155. package/dist/data/Markdown.js.map +1 -1
  156. package/dist/data/MarkdownEditor.cjs +4 -3
  157. package/dist/data/MarkdownEditor.cjs.map +1 -1
  158. package/dist/data/MarkdownEditor.d.ts +6 -2
  159. package/dist/data/MarkdownEditor.d.ts.map +1 -1
  160. package/dist/data/MarkdownEditor.js +4 -3
  161. package/dist/data/MarkdownEditor.js.map +1 -1
  162. package/dist/data/ServerTimingBadge.cjs +64 -0
  163. package/dist/data/ServerTimingBadge.cjs.map +1 -0
  164. package/dist/data/ServerTimingBadge.d.ts +9 -0
  165. package/dist/data/ServerTimingBadge.d.ts.map +1 -0
  166. package/dist/data/ServerTimingBadge.js +64 -0
  167. package/dist/data/ServerTimingBadge.js.map +1 -0
  168. package/dist/data/StatStrip.cjs +99 -0
  169. package/dist/data/StatStrip.cjs.map +1 -0
  170. package/dist/data/StatStrip.d.ts +41 -0
  171. package/dist/data/StatStrip.d.ts.map +1 -0
  172. package/dist/data/StatStrip.js +99 -0
  173. package/dist/data/StatStrip.js.map +1 -0
  174. package/dist/data/TaskManager.cjs +20 -1
  175. package/dist/data/TaskManager.cjs.map +1 -1
  176. package/dist/data/TaskManager.d.ts +3 -1
  177. package/dist/data/TaskManager.d.ts.map +1 -1
  178. package/dist/data/TaskManager.js +20 -1
  179. package/dist/data/TaskManager.js.map +1 -1
  180. package/dist/data/TaskManagerButton.cjs +49 -0
  181. package/dist/data/TaskManagerButton.cjs.map +1 -0
  182. package/dist/data/TaskManagerButton.d.ts +8 -0
  183. package/dist/data/TaskManagerButton.d.ts.map +1 -0
  184. package/dist/data/TaskManagerButton.js +49 -0
  185. package/dist/data/TaskManagerButton.js.map +1 -0
  186. package/dist/data/TaskProcessDetails.cjs +113 -0
  187. package/dist/data/TaskProcessDetails.cjs.map +1 -0
  188. package/dist/data/TaskProcessDetails.d.ts +6 -0
  189. package/dist/data/TaskProcessDetails.d.ts.map +1 -0
  190. package/dist/data/TaskProcessDetails.js +113 -0
  191. package/dist/data/TaskProcessDetails.js.map +1 -0
  192. package/dist/data/TaskProgress.cjs +106 -19
  193. package/dist/data/TaskProgress.cjs.map +1 -1
  194. package/dist/data/TaskProgress.d.ts +4 -2
  195. package/dist/data/TaskProgress.d.ts.map +1 -1
  196. package/dist/data/TaskProgress.js +107 -20
  197. package/dist/data/TaskProgress.js.map +1 -1
  198. package/dist/data/TaskSnapshot.cjs.map +1 -1
  199. package/dist/data/TaskSnapshot.d.ts +43 -0
  200. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  201. package/dist/data/TaskSnapshot.js.map +1 -1
  202. package/dist/data/Tree.cjs +91 -82
  203. package/dist/data/Tree.cjs.map +1 -1
  204. package/dist/data/Tree.d.ts +3 -1
  205. package/dist/data/Tree.d.ts.map +1 -1
  206. package/dist/data/Tree.js +91 -82
  207. package/dist/data/Tree.js.map +1 -1
  208. package/dist/data/TreeNode.cjs +3 -0
  209. package/dist/data/TreeNode.cjs.map +1 -1
  210. package/dist/data/TreeNode.d.ts +2 -1
  211. package/dist/data/TreeNode.d.ts.map +1 -1
  212. package/dist/data/TreeNode.js +3 -0
  213. package/dist/data/TreeNode.js.map +1 -1
  214. package/dist/data/ai/ChatWindow.cjs +18 -141
  215. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  216. package/dist/data/ai/ChatWindow.d.ts +2 -40
  217. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  218. package/dist/data/ai/ChatWindow.js +15 -138
  219. package/dist/data/ai/ChatWindow.js.map +1 -1
  220. package/dist/data/ai/ChatWindow.models.cjs +11 -0
  221. package/dist/data/ai/ChatWindow.models.cjs.map +1 -0
  222. package/dist/data/ai/ChatWindow.models.d.ts +3 -0
  223. package/dist/data/ai/ChatWindow.models.d.ts.map +1 -0
  224. package/dist/data/ai/ChatWindow.models.js +11 -0
  225. package/dist/data/ai/ChatWindow.models.js.map +1 -0
  226. package/dist/data/ai/ChatWindow.preferences.cjs +57 -0
  227. package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -0
  228. package/dist/data/ai/ChatWindow.preferences.d.ts +13 -0
  229. package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -0
  230. package/dist/data/ai/ChatWindow.preferences.js +57 -0
  231. package/dist/data/ai/ChatWindow.preferences.js.map +1 -0
  232. package/dist/data/ai/ChatWindow.thread-status.cjs +14 -0
  233. package/dist/data/ai/ChatWindow.thread-status.cjs.map +1 -0
  234. package/dist/data/ai/ChatWindow.thread-status.d.ts +5 -0
  235. package/dist/data/ai/ChatWindow.thread-status.d.ts.map +1 -0
  236. package/dist/data/ai/ChatWindow.thread-status.js +14 -0
  237. package/dist/data/ai/ChatWindow.thread-status.js.map +1 -0
  238. package/dist/data/ai/ChatWindow.thread.cjs +68 -0
  239. package/dist/data/ai/ChatWindow.thread.cjs.map +1 -0
  240. package/dist/data/ai/ChatWindow.thread.d.ts +16 -0
  241. package/dist/data/ai/ChatWindow.thread.d.ts.map +1 -0
  242. package/dist/data/ai/ChatWindow.thread.js +68 -0
  243. package/dist/data/ai/ChatWindow.thread.js.map +1 -0
  244. package/dist/data/ai/ChatWindow.tool-catalog.cjs +99 -0
  245. package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -0
  246. package/dist/data/ai/ChatWindow.tool-catalog.d.ts +3 -0
  247. package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -0
  248. package/dist/data/ai/ChatWindow.tool-catalog.js +99 -0
  249. package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -0
  250. package/dist/data/ai/ChatWindow.types.d.ts +41 -0
  251. package/dist/data/ai/ChatWindow.types.d.ts.map +1 -0
  252. package/dist/data/ai/ContextBadges.cjs +76 -46
  253. package/dist/data/ai/ContextBadges.cjs.map +1 -1
  254. package/dist/data/ai/ContextBadges.d.ts.map +1 -1
  255. package/dist/data/ai/ContextBadges.js +77 -47
  256. package/dist/data/ai/ContextBadges.js.map +1 -1
  257. package/dist/data/ai/PromptPicker/PromptPicker.cjs +151 -32
  258. package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
  259. package/dist/data/ai/PromptPicker/PromptPicker.d.ts +7 -4
  260. package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -1
  261. package/dist/data/ai/PromptPicker/PromptPicker.js +152 -33
  262. package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
  263. package/dist/data/ai/PromptPicker/PromptSourceRepair.cjs +133 -0
  264. package/dist/data/ai/PromptPicker/PromptSourceRepair.cjs.map +1 -0
  265. package/dist/data/ai/PromptPicker/PromptSourceRepair.d.ts +11 -0
  266. package/dist/data/ai/PromptPicker/PromptSourceRepair.d.ts.map +1 -0
  267. package/dist/data/ai/PromptPicker/PromptSourceRepair.js +133 -0
  268. package/dist/data/ai/PromptPicker/PromptSourceRepair.js.map +1 -0
  269. package/dist/data/ai/PromptPicker/index.d.ts +2 -1
  270. package/dist/data/ai/PromptPicker/index.d.ts.map +1 -1
  271. package/dist/data/ai/PromptPicker/types.cjs +7 -0
  272. package/dist/data/ai/PromptPicker/types.cjs.map +1 -0
  273. package/dist/data/ai/PromptPicker/types.d.ts +18 -2
  274. package/dist/data/ai/PromptPicker/types.d.ts.map +1 -1
  275. package/dist/data/ai/PromptPicker/types.js +7 -0
  276. package/dist/data/ai/PromptPicker/types.js.map +1 -0
  277. package/dist/data/ai/PromptRunEditor/index.cjs +171 -91
  278. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  279. package/dist/data/ai/PromptRunEditor/index.d.ts +9 -9
  280. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  281. package/dist/data/ai/PromptRunEditor/index.js +175 -95
  282. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  283. package/dist/data/ai/PromptRunEditor/model.cjs +47 -0
  284. package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -0
  285. package/dist/data/ai/PromptRunEditor/model.d.ts +17 -0
  286. package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -0
  287. package/dist/data/ai/PromptRunEditor/model.js +47 -0
  288. package/dist/data/ai/PromptRunEditor/model.js.map +1 -0
  289. package/dist/data/ai/RuntimeBar.cjs +408 -0
  290. package/dist/data/ai/RuntimeBar.cjs.map +1 -0
  291. package/dist/data/ai/RuntimeBar.d.ts +20 -0
  292. package/dist/data/ai/RuntimeBar.d.ts.map +1 -0
  293. package/dist/data/ai/RuntimeBar.js +408 -0
  294. package/dist/data/ai/RuntimeBar.js.map +1 -0
  295. package/dist/data/ai/RuntimeBar.model.cjs +14 -0
  296. package/dist/data/ai/RuntimeBar.model.cjs.map +1 -0
  297. package/dist/data/ai/RuntimeBar.model.d.ts +10 -0
  298. package/dist/data/ai/RuntimeBar.model.d.ts.map +1 -0
  299. package/dist/data/ai/RuntimeBar.model.js +14 -0
  300. package/dist/data/ai/RuntimeBar.model.js.map +1 -0
  301. package/dist/data/ai/RuntimeBarCombo.cjs +359 -0
  302. package/dist/data/ai/RuntimeBarCombo.cjs.map +1 -0
  303. package/dist/data/ai/RuntimeBarCombo.d.ts +22 -0
  304. package/dist/data/ai/RuntimeBarCombo.d.ts.map +1 -0
  305. package/dist/data/ai/RuntimeBarCombo.js +359 -0
  306. package/dist/data/ai/RuntimeBarCombo.js.map +1 -0
  307. package/dist/data/ai/SessionChatComposer.cjs +56 -0
  308. package/dist/data/ai/SessionChatComposer.cjs.map +1 -0
  309. package/dist/data/ai/SessionChatComposer.d.ts +24 -0
  310. package/dist/data/ai/SessionChatComposer.d.ts.map +1 -0
  311. package/dist/data/ai/SessionChatComposer.js +56 -0
  312. package/dist/data/ai/SessionChatComposer.js.map +1 -0
  313. package/dist/data/ai/SessionInspector.cjs +222 -382
  314. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  315. package/dist/data/ai/SessionInspector.collection-types.d.ts +55 -0
  316. package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -0
  317. package/dist/data/ai/SessionInspector.collection.cjs +377 -0
  318. package/dist/data/ai/SessionInspector.collection.cjs.map +1 -0
  319. package/dist/data/ai/SessionInspector.collection.d.ts +15 -0
  320. package/dist/data/ai/SessionInspector.collection.d.ts.map +1 -0
  321. package/dist/data/ai/SessionInspector.collection.js +377 -0
  322. package/dist/data/ai/SessionInspector.collection.js.map +1 -0
  323. package/dist/data/ai/SessionInspector.d.ts +9 -4
  324. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  325. package/dist/data/ai/SessionInspector.files.cjs +162 -0
  326. package/dist/data/ai/SessionInspector.files.cjs.map +1 -0
  327. package/dist/data/ai/SessionInspector.files.d.ts +5 -0
  328. package/dist/data/ai/SessionInspector.files.d.ts.map +1 -0
  329. package/dist/data/ai/SessionInspector.files.js +162 -0
  330. package/dist/data/ai/SessionInspector.files.js.map +1 -0
  331. package/dist/data/ai/SessionInspector.hierarchy-state.cjs +148 -0
  332. package/dist/data/ai/SessionInspector.hierarchy-state.cjs.map +1 -0
  333. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts +15 -0
  334. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts.map +1 -0
  335. package/dist/data/ai/SessionInspector.hierarchy-state.js +148 -0
  336. package/dist/data/ai/SessionInspector.hierarchy-state.js.map +1 -0
  337. package/dist/data/ai/SessionInspector.hierarchy.cjs +256 -0
  338. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -0
  339. package/dist/data/ai/SessionInspector.hierarchy.d.ts +9 -0
  340. package/dist/data/ai/SessionInspector.hierarchy.d.ts.map +1 -0
  341. package/dist/data/ai/SessionInspector.hierarchy.js +256 -0
  342. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -0
  343. package/dist/data/ai/SessionInspector.js +224 -384
  344. package/dist/data/ai/SessionInspector.js.map +1 -1
  345. package/dist/data/ai/SessionInspector.model.cjs +125 -0
  346. package/dist/data/ai/SessionInspector.model.cjs.map +1 -0
  347. package/dist/data/ai/SessionInspector.model.d.ts +14 -0
  348. package/dist/data/ai/SessionInspector.model.d.ts.map +1 -0
  349. package/dist/data/ai/SessionInspector.model.js +125 -0
  350. package/dist/data/ai/SessionInspector.model.js.map +1 -0
  351. package/dist/data/ai/SessionInspector.panels.cjs +265 -0
  352. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -0
  353. package/dist/data/ai/SessionInspector.panels.d.ts +10 -0
  354. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -0
  355. package/dist/data/ai/SessionInspector.panels.js +265 -0
  356. package/dist/data/ai/SessionInspector.panels.js.map +1 -0
  357. package/dist/data/ai/SessionInspector.plan.cjs +77 -0
  358. package/dist/data/ai/SessionInspector.plan.cjs.map +1 -0
  359. package/dist/data/ai/SessionInspector.plan.d.ts +6 -0
  360. package/dist/data/ai/SessionInspector.plan.d.ts.map +1 -0
  361. package/dist/data/ai/SessionInspector.plan.js +77 -0
  362. package/dist/data/ai/SessionInspector.plan.js.map +1 -0
  363. package/dist/data/ai/SessionInspector.summary.cjs +182 -0
  364. package/dist/data/ai/SessionInspector.summary.cjs.map +1 -0
  365. package/dist/data/ai/SessionInspector.summary.d.ts +8 -0
  366. package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -0
  367. package/dist/data/ai/SessionInspector.summary.js +182 -0
  368. package/dist/data/ai/SessionInspector.summary.js.map +1 -0
  369. package/dist/data/ai/SessionInspector.transcript.cjs +94 -0
  370. package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -0
  371. package/dist/data/ai/SessionInspector.transcript.d.ts +7 -0
  372. package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -0
  373. package/dist/data/ai/SessionInspector.transcript.js +94 -0
  374. package/dist/data/ai/SessionInspector.transcript.js.map +1 -0
  375. package/dist/data/ai/SessionInspector.turns.d.ts +11 -0
  376. package/dist/data/ai/SessionInspector.turns.d.ts.map +1 -0
  377. package/dist/data/ai/SessionViewer.cjs +86 -121
  378. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  379. package/dist/data/ai/SessionViewer.d.ts +8 -1
  380. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  381. package/dist/data/ai/SessionViewer.fixtures.d.ts +2 -0
  382. package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -1
  383. package/dist/data/ai/SessionViewer.header.cjs +118 -0
  384. package/dist/data/ai/SessionViewer.header.cjs.map +1 -0
  385. package/dist/data/ai/SessionViewer.header.d.ts +11 -0
  386. package/dist/data/ai/SessionViewer.header.d.ts.map +1 -0
  387. package/dist/data/ai/SessionViewer.header.js +118 -0
  388. package/dist/data/ai/SessionViewer.header.js.map +1 -0
  389. package/dist/data/ai/SessionViewer.js +87 -122
  390. package/dist/data/ai/SessionViewer.js.map +1 -1
  391. package/dist/data/ai/SessionViewer.model.cjs +111 -39
  392. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  393. package/dist/data/ai/SessionViewer.model.d.ts +6 -0
  394. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  395. package/dist/data/ai/SessionViewer.model.js +111 -39
  396. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  397. package/dist/data/ai/SessionViewer.row-metadata.cjs +132 -0
  398. package/dist/data/ai/SessionViewer.row-metadata.cjs.map +1 -0
  399. package/dist/data/ai/SessionViewer.row-metadata.d.ts +14 -0
  400. package/dist/data/ai/SessionViewer.row-metadata.d.ts.map +1 -0
  401. package/dist/data/ai/SessionViewer.row-metadata.js +132 -0
  402. package/dist/data/ai/SessionViewer.row-metadata.js.map +1 -0
  403. package/dist/data/ai/SessionViewer.row-time.cjs +15 -0
  404. package/dist/data/ai/SessionViewer.row-time.cjs.map +1 -0
  405. package/dist/data/ai/SessionViewer.row-time.d.ts +3 -0
  406. package/dist/data/ai/SessionViewer.row-time.d.ts.map +1 -0
  407. package/dist/data/ai/SessionViewer.row-time.js +15 -0
  408. package/dist/data/ai/SessionViewer.row-time.js.map +1 -0
  409. package/dist/data/ai/SessionViewer.rows.cjs +37 -424
  410. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  411. package/dist/data/ai/SessionViewer.rows.d.ts +5 -2
  412. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  413. package/dist/data/ai/SessionViewer.rows.js +31 -418
  414. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  415. package/dist/data/ai/SessionViewer.tool-details.cjs +65 -0
  416. package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -0
  417. package/dist/data/ai/SessionViewer.tool-details.d.ts +20 -0
  418. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -0
  419. package/dist/data/ai/SessionViewer.tool-details.js +65 -0
  420. package/dist/data/ai/SessionViewer.tool-details.js.map +1 -0
  421. package/dist/data/ai/SessionViewer.tool-row.cjs +404 -0
  422. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -0
  423. package/dist/data/ai/SessionViewer.tool-row.d.ts +12 -0
  424. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -0
  425. package/dist/data/ai/SessionViewer.tool-row.js +404 -0
  426. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -0
  427. package/dist/data/ai/SessionViewer.unified.d.ts +11 -2
  428. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  429. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +44 -26
  430. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
  431. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
  432. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +47 -29
  433. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
  434. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +45 -153
  435. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
  436. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
  437. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +51 -159
  438. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
  439. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +0 -1
  440. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
  441. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts.map +1 -1
  442. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +0 -1
  443. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
  444. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs +0 -5
  445. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs.map +1 -1
  446. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts.map +1 -1
  447. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js +0 -5
  448. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js.map +1 -1
  449. package/dist/data/ai/SpecRuntimeEditor/fields.js +1 -1
  450. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
  451. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
  452. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
  453. package/dist/data/ai/SpecRuntimeEditor/update.cjs +19 -6
  454. package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
  455. package/dist/data/ai/SpecRuntimeEditor/update.d.ts +5 -2
  456. package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
  457. package/dist/data/ai/SpecRuntimeEditor/update.js +19 -6
  458. package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
  459. package/dist/data/ai/SpecRuntimeEditor.model.cjs +67 -10
  460. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
  461. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +31 -4
  462. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
  463. package/dist/data/ai/SpecRuntimeEditor.model.js +67 -10
  464. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
  465. package/dist/data/ai/ThreadPicker.cjs.map +1 -1
  466. package/dist/data/ai/ThreadPicker.d.ts +2 -0
  467. package/dist/data/ai/ThreadPicker.d.ts.map +1 -1
  468. package/dist/data/ai/ThreadPicker.js.map +1 -1
  469. package/dist/data/ai/ToolPreferences.cjs +2 -1
  470. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  471. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  472. package/dist/data/ai/ToolPreferences.js +2 -1
  473. package/dist/data/ai/ToolPreferences.js.map +1 -1
  474. package/dist/data/ai/agent-action-icons.cjs +7 -10
  475. package/dist/data/ai/agent-action-icons.cjs.map +1 -1
  476. package/dist/data/ai/agent-action-icons.d.ts +1 -2
  477. package/dist/data/ai/agent-action-icons.d.ts.map +1 -1
  478. package/dist/data/ai/agent-action-icons.js +8 -11
  479. package/dist/data/ai/agent-action-icons.js.map +1 -1
  480. package/dist/data/ai/context.cjs.map +1 -1
  481. package/dist/data/ai/context.d.ts +4 -0
  482. package/dist/data/ai/context.d.ts.map +1 -1
  483. package/dist/data/ai/context.js.map +1 -1
  484. package/dist/data/ai/examples/sessions/claude-complete.cjs +513 -0
  485. package/dist/data/ai/examples/sessions/claude-complete.cjs.map +1 -0
  486. package/dist/data/ai/examples/sessions/claude-complete.d.ts +3 -0
  487. package/dist/data/ai/examples/sessions/claude-complete.d.ts.map +1 -0
  488. package/dist/data/ai/examples/sessions/claude-complete.js +513 -0
  489. package/dist/data/ai/examples/sessions/claude-complete.js.map +1 -0
  490. package/dist/data/ai/examples/sessions/claude.cjs +252 -0
  491. package/dist/data/ai/examples/sessions/claude.cjs.map +1 -0
  492. package/dist/data/ai/examples/sessions/claude.d.ts +3 -0
  493. package/dist/data/ai/examples/sessions/claude.d.ts.map +1 -0
  494. package/dist/data/ai/examples/sessions/claude.js +252 -0
  495. package/dist/data/ai/examples/sessions/claude.js.map +1 -0
  496. package/dist/data/ai/examples/sessions/codex-complete.cjs +394 -0
  497. package/dist/data/ai/examples/sessions/codex-complete.cjs.map +1 -0
  498. package/dist/data/ai/examples/sessions/codex-complete.d.ts +3 -0
  499. package/dist/data/ai/examples/sessions/codex-complete.d.ts.map +1 -0
  500. package/dist/data/ai/examples/sessions/codex-complete.js +394 -0
  501. package/dist/data/ai/examples/sessions/codex-complete.js.map +1 -0
  502. package/dist/data/ai/examples/sessions/codex.cjs +236 -0
  503. package/dist/data/ai/examples/sessions/codex.cjs.map +1 -0
  504. package/dist/data/ai/examples/sessions/codex.d.ts +3 -0
  505. package/dist/data/ai/examples/sessions/codex.d.ts.map +1 -0
  506. package/dist/data/ai/examples/sessions/codex.js +236 -0
  507. package/dist/data/ai/examples/sessions/codex.js.map +1 -0
  508. package/dist/data/ai/examples/sessions/index.cjs +21 -0
  509. package/dist/data/ai/examples/sessions/index.cjs.map +1 -0
  510. package/dist/data/ai/examples/sessions/index.d.ts +10 -0
  511. package/dist/data/ai/examples/sessions/index.d.ts.map +1 -0
  512. package/dist/data/ai/examples/sessions/index.js +21 -0
  513. package/dist/data/ai/examples/sessions/index.js.map +1 -0
  514. package/dist/data/ai/index.d.ts +9 -3
  515. package/dist/data/ai/index.d.ts.map +1 -1
  516. package/dist/data/ai/model-capabilities.cjs +12 -1
  517. package/dist/data/ai/model-capabilities.cjs.map +1 -1
  518. package/dist/data/ai/model-capabilities.d.ts +2 -6
  519. package/dist/data/ai/model-capabilities.d.ts.map +1 -1
  520. package/dist/data/ai/model-capabilities.js +12 -1
  521. package/dist/data/ai/model-capabilities.js.map +1 -1
  522. package/dist/data/ai/runtime-mode.cjs +72 -1
  523. package/dist/data/ai/runtime-mode.cjs.map +1 -1
  524. package/dist/data/ai/runtime-mode.d.ts +28 -0
  525. package/dist/data/ai/runtime-mode.d.ts.map +1 -1
  526. package/dist/data/ai/runtime-mode.js +73 -2
  527. package/dist/data/ai/runtime-mode.js.map +1 -1
  528. package/dist/data/cells/EntityCell.cjs +64 -0
  529. package/dist/data/cells/EntityCell.cjs.map +1 -0
  530. package/dist/data/cells/EntityCell.d.ts +27 -0
  531. package/dist/data/cells/EntityCell.d.ts.map +1 -0
  532. package/dist/data/cells/EntityCell.js +64 -0
  533. package/dist/data/cells/EntityCell.js.map +1 -0
  534. package/dist/data/chat/Attachment.cjs +53 -13
  535. package/dist/data/chat/Attachment.cjs.map +1 -1
  536. package/dist/data/chat/Attachment.d.ts +9 -3
  537. package/dist/data/chat/Attachment.d.ts.map +1 -1
  538. package/dist/data/chat/Attachment.js +54 -14
  539. package/dist/data/chat/Attachment.js.map +1 -1
  540. package/dist/data/chat/Chat.cjs +113 -36
  541. package/dist/data/chat/Chat.cjs.map +1 -1
  542. package/dist/data/chat/Chat.d.ts +11 -4
  543. package/dist/data/chat/Chat.d.ts.map +1 -1
  544. package/dist/data/chat/Chat.js +111 -34
  545. package/dist/data/chat/Chat.js.map +1 -1
  546. package/dist/data/chat/ContextMeter.cjs +240 -66
  547. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  548. package/dist/data/chat/ContextMeter.d.ts +11 -3
  549. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  550. package/dist/data/chat/ContextMeter.js +241 -67
  551. package/dist/data/chat/ContextMeter.js.map +1 -1
  552. package/dist/data/chat/Conversation.cjs +55 -3
  553. package/dist/data/chat/Conversation.cjs.map +1 -1
  554. package/dist/data/chat/Conversation.d.ts +5 -1
  555. package/dist/data/chat/Conversation.d.ts.map +1 -1
  556. package/dist/data/chat/Conversation.js +55 -3
  557. package/dist/data/chat/Conversation.js.map +1 -1
  558. package/dist/data/chat/ModelSelector.cjs +8 -10
  559. package/dist/data/chat/ModelSelector.cjs.map +1 -1
  560. package/dist/data/chat/ModelSelector.d.ts.map +1 -1
  561. package/dist/data/chat/ModelSelector.js +9 -11
  562. package/dist/data/chat/ModelSelector.js.map +1 -1
  563. package/dist/data/chat/PromptInput.cjs +56 -5
  564. package/dist/data/chat/PromptInput.cjs.map +1 -1
  565. package/dist/data/chat/PromptInput.d.ts +10 -1
  566. package/dist/data/chat/PromptInput.d.ts.map +1 -1
  567. package/dist/data/chat/PromptInput.js +57 -6
  568. package/dist/data/chat/PromptInput.js.map +1 -1
  569. package/dist/data/chat/approval.cjs +21 -0
  570. package/dist/data/chat/approval.cjs.map +1 -0
  571. package/dist/data/chat/approval.d.ts +11 -0
  572. package/dist/data/chat/approval.d.ts.map +1 -0
  573. package/dist/data/chat/approval.js +21 -0
  574. package/dist/data/chat/approval.js.map +1 -0
  575. package/dist/data/chat/attachment-upload.cjs +33 -0
  576. package/dist/data/chat/attachment-upload.cjs.map +1 -0
  577. package/dist/data/chat/attachment-upload.d.ts +21 -0
  578. package/dist/data/chat/attachment-upload.d.ts.map +1 -0
  579. package/dist/data/chat/attachment-upload.js +33 -0
  580. package/dist/data/chat/attachment-upload.js.map +1 -0
  581. package/dist/data/chat/effort-icons.cjs +36 -6
  582. package/dist/data/chat/effort-icons.cjs.map +1 -1
  583. package/dist/data/chat/effort-icons.d.ts +6 -3
  584. package/dist/data/chat/effort-icons.d.ts.map +1 -1
  585. package/dist/data/chat/effort-icons.js +37 -7
  586. package/dist/data/chat/effort-icons.js.map +1 -1
  587. package/dist/data/chat/index.d.ts +3 -1
  588. package/dist/data/chat/index.d.ts.map +1 -1
  589. package/dist/data/chat/models.cjs +8 -0
  590. package/dist/data/chat/models.cjs.map +1 -0
  591. package/dist/data/chat/models.d.ts +11 -0
  592. package/dist/data/chat/models.d.ts.map +1 -0
  593. package/dist/data/chat/models.js +8 -0
  594. package/dist/data/chat/models.js.map +1 -0
  595. package/dist/data/chat/provider-icons.cjs +49 -16
  596. package/dist/data/chat/provider-icons.cjs.map +1 -1
  597. package/dist/data/chat/provider-icons.d.ts +2 -0
  598. package/dist/data/chat/provider-icons.d.ts.map +1 -1
  599. package/dist/data/chat/provider-icons.js +50 -17
  600. package/dist/data/chat/provider-icons.js.map +1 -1
  601. package/dist/data/chat/types.cjs.map +1 -1
  602. package/dist/data/chat/types.d.ts +21 -0
  603. package/dist/data/chat/types.d.ts.map +1 -1
  604. package/dist/data/chat/types.js.map +1 -1
  605. package/dist/data/examples/markdown-preview-mock.cjs +45 -0
  606. package/dist/data/examples/markdown-preview-mock.cjs.map +1 -0
  607. package/dist/data/examples/markdown-preview-mock.d.ts +23 -0
  608. package/dist/data/examples/markdown-preview-mock.d.ts.map +1 -0
  609. package/dist/data/examples/markdown-preview-mock.js +45 -0
  610. package/dist/data/examples/markdown-preview-mock.js.map +1 -0
  611. package/dist/data/examples/markdown-syntax.cjs +36 -0
  612. package/dist/data/examples/markdown-syntax.cjs.map +1 -0
  613. package/dist/data/examples/markdown-syntax.d.ts +12 -0
  614. package/dist/data/examples/markdown-syntax.d.ts.map +1 -0
  615. package/dist/data/examples/markdown-syntax.js +36 -0
  616. package/dist/data/examples/markdown-syntax.js.map +1 -0
  617. package/dist/data/examples/markdown-syntax.md.cjs +4 -0
  618. package/dist/data/examples/markdown-syntax.md.cjs.map +1 -0
  619. package/dist/data/examples/markdown-syntax.md.js +5 -0
  620. package/dist/data/examples/markdown-syntax.md.js.map +1 -0
  621. package/dist/data/server-timing.cjs +120 -0
  622. package/dist/data/server-timing.cjs.map +1 -0
  623. package/dist/data/server-timing.d.ts +11 -0
  624. package/dist/data/server-timing.d.ts.map +1 -0
  625. package/dist/data/server-timing.js +120 -0
  626. package/dist/data/server-timing.js.map +1 -0
  627. package/dist/data/task-process-details.cjs +48 -0
  628. package/dist/data/task-process-details.cjs.map +1 -0
  629. package/dist/data/task-process-details.d.ts +5 -0
  630. package/dist/data/task-process-details.d.ts.map +1 -0
  631. package/dist/data/task-process-details.js +48 -0
  632. package/dist/data/task-process-details.js.map +1 -0
  633. package/dist/data/version-info.cjs +3 -3
  634. package/dist/data/version-info.js +3 -3
  635. package/dist/data.cjs +37 -0
  636. package/dist/data.cjs.map +1 -1
  637. package/dist/data.d.ts +9 -1
  638. package/dist/data.d.ts.map +1 -1
  639. package/dist/data.js +37 -0
  640. package/dist/data.js.map +1 -1
  641. package/dist/hooks/use-hotkey.cjs +98 -0
  642. package/dist/hooks/use-hotkey.cjs.map +1 -0
  643. package/dist/hooks/use-hotkey.d.ts +42 -0
  644. package/dist/hooks/use-hotkey.d.ts.map +1 -0
  645. package/dist/hooks/use-hotkey.js +98 -0
  646. package/dist/hooks/use-hotkey.js.map +1 -0
  647. package/dist/hooks/use-task-run.cjs +23 -1
  648. package/dist/hooks/use-task-run.cjs.map +1 -1
  649. package/dist/hooks/use-task-run.d.ts.map +1 -1
  650. package/dist/hooks/use-task-run.js +23 -1
  651. package/dist/hooks/use-task-run.js.map +1 -1
  652. package/dist/hooks.cjs +4 -0
  653. package/dist/hooks.cjs.map +1 -1
  654. package/dist/hooks.d.ts +1 -0
  655. package/dist/hooks.d.ts.map +1 -1
  656. package/dist/hooks.js +4 -0
  657. package/dist/hooks.js.map +1 -1
  658. package/dist/icons/components/UiBank.cjs +15 -0
  659. package/dist/icons/components/UiBank.cjs.map +1 -0
  660. package/dist/icons/components/UiBank.d.ts +15 -0
  661. package/dist/icons/components/UiBank.d.ts.map +1 -0
  662. package/dist/icons/components/UiBank.js +15 -0
  663. package/dist/icons/components/UiBank.js.map +1 -0
  664. package/dist/icons/components/UiChartOfAccounts.cjs +15 -0
  665. package/dist/icons/components/UiChartOfAccounts.cjs.map +1 -0
  666. package/dist/icons/components/UiChartOfAccounts.d.ts +15 -0
  667. package/dist/icons/components/UiChartOfAccounts.d.ts.map +1 -0
  668. package/dist/icons/components/UiChartOfAccounts.js +15 -0
  669. package/dist/icons/components/UiChartOfAccounts.js.map +1 -0
  670. package/dist/icons/components/UiCloudUpload.cjs +15 -0
  671. package/dist/icons/components/UiCloudUpload.cjs.map +1 -0
  672. package/dist/icons/components/UiCloudUpload.d.ts +15 -0
  673. package/dist/icons/components/UiCloudUpload.d.ts.map +1 -0
  674. package/dist/icons/components/UiCloudUpload.js +15 -0
  675. package/dist/icons/components/UiCloudUpload.js.map +1 -0
  676. package/dist/icons/components/UiLedger.cjs +15 -0
  677. package/dist/icons/components/UiLedger.cjs.map +1 -0
  678. package/dist/icons/components/UiLedger.d.ts +15 -0
  679. package/dist/icons/components/UiLedger.d.ts.map +1 -0
  680. package/dist/icons/components/UiLedger.js +15 -0
  681. package/dist/icons/components/UiLedger.js.map +1 -0
  682. package/dist/icons/components/UiReceipt.cjs +15 -0
  683. package/dist/icons/components/UiReceipt.cjs.map +1 -0
  684. package/dist/icons/components/UiReceipt.d.ts +15 -0
  685. package/dist/icons/components/UiReceipt.d.ts.map +1 -0
  686. package/dist/icons/components/UiReceipt.js +15 -0
  687. package/dist/icons/components/UiReceipt.js.map +1 -0
  688. package/dist/icons/index.d.ts +10 -0
  689. package/dist/icons/index.d.ts.map +1 -1
  690. package/dist/icons.cjs +15 -0
  691. package/dist/icons.cjs.map +1 -1
  692. package/dist/icons.js +15 -0
  693. package/dist/icons.js.map +1 -1
  694. package/dist/index.cjs +54 -0
  695. package/dist/index.cjs.map +1 -1
  696. package/dist/index.js +56 -2
  697. package/dist/index.js.map +1 -1
  698. package/dist/layout/AppShell.cjs +270 -238
  699. package/dist/layout/AppShell.cjs.map +1 -1
  700. package/dist/layout/AppShell.d.ts +9 -0
  701. package/dist/layout/AppShell.d.ts.map +1 -1
  702. package/dist/layout/AppShell.debug.cjs +53 -0
  703. package/dist/layout/AppShell.debug.cjs.map +1 -0
  704. package/dist/layout/AppShell.debug.d.ts +6 -0
  705. package/dist/layout/AppShell.debug.d.ts.map +1 -0
  706. package/dist/layout/AppShell.debug.js +53 -0
  707. package/dist/layout/AppShell.debug.js.map +1 -0
  708. package/dist/layout/AppShell.js +269 -237
  709. package/dist/layout/AppShell.js.map +1 -1
  710. package/dist/layout/AppShell.nav.cjs +90 -0
  711. package/dist/layout/AppShell.nav.cjs.map +1 -0
  712. package/dist/layout/AppShell.nav.d.ts +7 -0
  713. package/dist/layout/AppShell.nav.d.ts.map +1 -0
  714. package/dist/layout/AppShell.nav.js +90 -0
  715. package/dist/layout/AppShell.nav.js.map +1 -0
  716. package/dist/layout/AppSidebar.cjs +35 -5
  717. package/dist/layout/AppSidebar.cjs.map +1 -1
  718. package/dist/layout/AppSidebar.d.ts +4 -1
  719. package/dist/layout/AppSidebar.d.ts.map +1 -1
  720. package/dist/layout/AppSidebar.js +35 -5
  721. package/dist/layout/AppSidebar.js.map +1 -1
  722. package/dist/layout/Panel.cjs +25 -41
  723. package/dist/layout/Panel.cjs.map +1 -1
  724. package/dist/layout/Panel.d.ts +2 -1
  725. package/dist/layout/Panel.d.ts.map +1 -1
  726. package/dist/layout/Panel.js +26 -42
  727. package/dist/layout/Panel.js.map +1 -1
  728. package/dist/layout/PanelFrame.cjs +56 -0
  729. package/dist/layout/PanelFrame.cjs.map +1 -0
  730. package/dist/layout/PanelFrame.d.ts +15 -0
  731. package/dist/layout/PanelFrame.d.ts.map +1 -0
  732. package/dist/layout/PanelFrame.js +56 -0
  733. package/dist/layout/PanelFrame.js.map +1 -0
  734. package/dist/layout/Section.cjs +51 -41
  735. package/dist/layout/Section.cjs.map +1 -1
  736. package/dist/layout/Section.d.ts +3 -2
  737. package/dist/layout/Section.d.ts.map +1 -1
  738. package/dist/layout/Section.js +51 -41
  739. package/dist/layout/Section.js.map +1 -1
  740. package/dist/layout/content-width.cjs +8 -0
  741. package/dist/layout/content-width.cjs.map +1 -0
  742. package/dist/layout/content-width.d.ts +3 -0
  743. package/dist/layout/content-width.d.ts.map +1 -0
  744. package/dist/layout/content-width.js +8 -0
  745. package/dist/layout/content-width.js.map +1 -0
  746. package/dist/overlay/CommandPalette.cjs +207 -0
  747. package/dist/overlay/CommandPalette.cjs.map +1 -0
  748. package/dist/overlay/CommandPalette.d.ts +71 -0
  749. package/dist/overlay/CommandPalette.d.ts.map +1 -0
  750. package/dist/overlay/CommandPalette.js +207 -0
  751. package/dist/overlay/CommandPalette.js.map +1 -0
  752. package/dist/overlay/CommandPalette.model.cjs +70 -0
  753. package/dist/overlay/CommandPalette.model.cjs.map +1 -0
  754. package/dist/overlay/CommandPalette.model.d.ts +71 -0
  755. package/dist/overlay/CommandPalette.model.d.ts.map +1 -0
  756. package/dist/overlay/CommandPalette.model.js +70 -0
  757. package/dist/overlay/CommandPalette.model.js.map +1 -0
  758. package/dist/overlay/CommandPaletteList.cjs +88 -0
  759. package/dist/overlay/CommandPaletteList.cjs.map +1 -0
  760. package/dist/overlay/CommandPaletteList.d.ts +23 -0
  761. package/dist/overlay/CommandPaletteList.d.ts.map +1 -0
  762. package/dist/overlay/CommandPaletteList.js +88 -0
  763. package/dist/overlay/CommandPaletteList.js.map +1 -0
  764. package/dist/overlay/CommandPaletteTrigger.cjs +36 -0
  765. package/dist/overlay/CommandPaletteTrigger.cjs.map +1 -0
  766. package/dist/overlay/CommandPaletteTrigger.d.ts +22 -0
  767. package/dist/overlay/CommandPaletteTrigger.d.ts.map +1 -0
  768. package/dist/overlay/CommandPaletteTrigger.js +36 -0
  769. package/dist/overlay/CommandPaletteTrigger.js.map +1 -0
  770. package/dist/overlay/HoverCard.cjs.map +1 -1
  771. package/dist/overlay/HoverCard.d.ts +2 -2
  772. package/dist/overlay/HoverCard.d.ts.map +1 -1
  773. package/dist/overlay/HoverCard.js.map +1 -1
  774. package/dist/overlay/Modal.cjs +12 -5
  775. package/dist/overlay/Modal.cjs.map +1 -1
  776. package/dist/overlay/Modal.d.ts.map +1 -1
  777. package/dist/overlay/Modal.js +12 -5
  778. package/dist/overlay/Modal.js.map +1 -1
  779. package/dist/overlay/modalStack.js +1 -1
  780. package/dist/overlay/zIndex.cjs +2 -0
  781. package/dist/overlay/zIndex.cjs.map +1 -1
  782. package/dist/overlay/zIndex.js +2 -0
  783. package/dist/overlay/zIndex.js.map +1 -1
  784. package/dist/rpc/EntityExplorerApp.cjs +6 -0
  785. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  786. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  787. package/dist/rpc/EntityExplorerApp.js +6 -0
  788. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  789. package/dist/rpc/OperationCatalog.cjs +45 -71
  790. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  791. package/dist/rpc/OperationCatalog.d.ts +12 -2
  792. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  793. package/dist/rpc/OperationCatalog.js +46 -72
  794. package/dist/rpc/OperationCatalog.js.map +1 -1
  795. package/dist/rpc/OperationResultView.cjs +42 -0
  796. package/dist/rpc/OperationResultView.cjs.map +1 -1
  797. package/dist/rpc/OperationResultView.d.ts +2 -1
  798. package/dist/rpc/OperationResultView.d.ts.map +1 -1
  799. package/dist/rpc/OperationResultView.js +42 -0
  800. package/dist/rpc/OperationResultView.js.map +1 -1
  801. package/dist/rpc/clickyMetadata.cjs +2 -1
  802. package/dist/rpc/clickyMetadata.cjs.map +1 -1
  803. package/dist/rpc/clickyMetadata.d.ts.map +1 -1
  804. package/dist/rpc/clickyMetadata.js +2 -1
  805. package/dist/rpc/clickyMetadata.js.map +1 -1
  806. package/dist/rpc/rpc-story-fixtures/orders.fixture.d.ts.map +1 -1
  807. package/dist/rpc/rpc-story-fixtures/services.fixture.d.ts.map +1 -1
  808. package/dist/rpc/rpc-story-fixtures/surface-fixture.d.ts +25 -2
  809. package/dist/rpc/rpc-story-fixtures/surface-fixture.d.ts.map +1 -1
  810. package/dist/rpc/rpc-story-fixtures/widgets.fixture.d.ts.map +1 -1
  811. package/dist/rpc/rpc-story.fixtures.d.ts +2 -1
  812. package/dist/rpc/rpc-story.fixtures.d.ts.map +1 -1
  813. package/dist/rpc/types.cjs.map +1 -1
  814. package/dist/rpc/types.d.ts +1 -0
  815. package/dist/rpc/types.d.ts.map +1 -1
  816. package/dist/rpc/types.js.map +1 -1
  817. package/dist/styles.css +1 -1
  818. package/dist/tailwind-preset.cjs +15 -0
  819. package/dist/tailwind-preset.cjs.map +1 -1
  820. package/dist/tailwind-preset.d.ts.map +1 -1
  821. package/dist/tailwind-preset.js +15 -0
  822. package/dist/tailwind-preset.js.map +1 -1
  823. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"OperationCatalog.cjs","sources":["../../src/rpc/OperationCatalog.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { keepPreviousData, useQuery } from \"@tanstack/react-query\";\nimport { Button } from \"../components/button\";\nimport { Icon } from \"../data/Icon\";\nimport { UiListFlat, UiTable } from \"../icons\";\nimport { filterOperationsByDomain } from \"./classify\";\nimport {\n filterOperationsBySurface,\n findSurfaceCollectionActions,\n findSurfaceDetailOperation,\n findSurfaceListOperation,\n getOperationClickyMeta,\n} from \"./clickyMetadata\";\nimport type {\n ClickyCommandRuntime,\n ClickyDownloadOptions,\n ClickyRemoteFormat,\n} from \"../data/Clicky\";\nimport { EndpointList, type RenderLink } from \"./EndpointList\";\nimport { OperationActionBar } from \"./OperationActionBar\";\nimport {\n OperationResultView,\n type ResultRenderer,\n} from \"./OperationResultView\";\nimport { type FormActionsRenderer } from \"./SchemaActionForm\";\nimport {\n applyFilterExtensions,\n type FilterExtension,\n} from \"../components/filter-bar-utils\";\nimport type {\n PreExtension,\n PostExtension,\n} from \"../components/json-schema-form-types\";\nimport {\n type DomainDefinition,\n type ExecutionResponse,\n type OperationLookupResponse,\n type ResolvedOperation,\n} from \"./types\";\nimport { useOperations, type OperationsApiClient } from \"./useOperations\";\nimport {\n dataTablePaginationFromForm,\n packParameterValues,\n parametersToFormConfig,\n type ParameterFormOptions,\n} from \"./formMetadata\";\n\nexport type OperationCatalogProps = {\n definition: DomainDefinition;\n entities: string[];\n client: OperationsApiClient;\n renderLink: RenderLink;\n // Override to return all operations (e.g. for an \"API explorer\" domain\n // that shouldn't be filtered by entity tags).\n allOperations?: boolean;\n surfaceKey?: string;\n // Domain-specific filter decorators (e.g. stamp an entity icon by filter\n // name). Composed in array order; mirrors JsonSchemaForm's `pre`.\n filterPre?: FilterExtension[];\n getCommandHref?: (operationId: string, op: ResolvedOperation) => string;\n renderError?: (err: unknown, title: string) => ReactNode;\n kind?: \"operations\" | \"configuration\";\n commandRuntime?: ClickyCommandRuntime;\n // Custom JsonSchemaForm field extensions forwarded to the create/edit form.\n formPre?: PreExtension[];\n formPost?: PostExtension[];\n // Optional extra footer actions for the create/edit form (e.g. a connection\n // \"Test\" button).\n formActions?: FormActionsRenderer;\n actionLabels?: Record<string, string>;\n // Optional host override for the result surface, keyed off the current surface.\n // Receives the default OperationResultView so non-overridden surfaces render\n // unchanged.\n resultRenderer?: ResultRenderer;\n};\n\nconst defaultCommandHref = (operationId: string) => `/commands/${operationId}`;\n\nfunction defaultRenderError(err: unknown, title: string) {\n const message = err instanceof Error ? err.message : String(err ?? \"\");\n return (\n <div className=\"rounded-xl border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive\">\n <div className=\"font-medium\">{title}</div>\n {message && (\n <div className=\"mt-1 whitespace-pre-wrap text-xs opacity-80\">\n {message}\n </div>\n )}\n </div>\n );\n}\n\nexport function OperationCatalog({\n definition,\n entities,\n client,\n renderLink,\n allOperations = false,\n surfaceKey,\n filterPre,\n getCommandHref = defaultCommandHref,\n renderError = defaultRenderError,\n kind,\n commandRuntime,\n formPre,\n formPost,\n formActions,\n actionLabels,\n resultRenderer,\n}: OperationCatalogProps) {\n const { operations, isLoading } = useOperations(client);\n const [view, setView] = useState<\"table\" | \"endpoints\">(\"table\");\n\n const surfaceOps = useMemo(\n () => filterOperationsBySurface(operations, surfaceKey),\n [operations, surfaceKey],\n );\n const useSurfaceMetadata = surfaceOps.length > 0;\n\n // domainOps are the operations scoped to this domain: a surface's operations\n // when surfaceKey resolves, otherwise the entity-tagged operations — used only\n // to render the generic operation-page fallback, never to guess a table.\n const domainOps = useMemo(() => {\n if (useSurfaceMetadata) return surfaceOps;\n return allOperations\n ? operations\n : filterOperationsByDomain(operations, entities);\n }, [allOperations, entities, operations, surfaceOps, useSurfaceMetadata]);\n\n // The list table is driven solely by x-clicky surface metadata. Without a\n // surface there is no authoritative list op, so listEndpoint stays undefined\n // and the catalog renders the generic EndpointList fallback instead of\n // guessing a table from operationId/path conventions.\n const listEndpoint = useMemo(() => {\n if (!useSurfaceMetadata) return undefined;\n return findSurfaceListOperation(domainOps, surfaceKey);\n }, [domainOps, surfaceKey, useSurfaceMetadata]);\n // The detail op turns each list row into a link to /<surface>/<id>; absent it\n // (no surface metadata) rows stay non-navigable.\n const detailOperation = useMemo(\n () =>\n useSurfaceMetadata\n ? findSurfaceDetailOperation(domainOps, surfaceKey)\n : undefined,\n [domainOps, surfaceKey, useSurfaceMetadata],\n );\n const [filters, setFilters] = useState<Record<string, string>>(() =>\n readFiltersFromUrl(),\n );\n const listParameters = listEndpoint?.operation.parameters ?? [];\n const download = useMemo<ClickyDownloadOptions | undefined>(() => {\n const meta = listEndpoint?.operation[\"x-clicky\"]?.export;\n if (!meta) return undefined;\n return {\n label: definition.title,\n ...(meta.formats\n ? { formats: meta.formats as ClickyRemoteFormat[] }\n : {}),\n ...(meta.scopes ? { scopes: meta.scopes } : {}),\n ...(meta.allRowsMode ? { allRowsMode: meta.allRowsMode } : {}),\n ...(meta.formatMaxRows\n ? {\n formatMaxRows: meta.formatMaxRows as Partial<\n Record<ClickyRemoteFormat, number>\n >,\n }\n : {}),\n };\n }, [definition.title, listEndpoint]);\n\n useEffect(() => {\n writeFiltersToUrl(filters);\n }, [filters]);\n\n const listQuery = useQuery<ExecutionResponse>({\n queryKey: [\n \"operation-list\",\n listEndpoint?.method,\n listEndpoint?.path,\n filters,\n ],\n queryFn: () =>\n client.executeCommand(\n listEndpoint!.path,\n listEndpoint!.method,\n packParameterValues(filters, listEndpoint!.operation.parameters ?? []),\n {\n Accept: \"application/json+clicky\",\n },\n ),\n enabled: !!listEndpoint && view === \"table\",\n placeholderData: keepPreviousData,\n staleTime: 30_000,\n retry: 0,\n });\n\n const lookupQuery = useQuery<OperationLookupResponse>({\n queryKey: [\n \"operation-lookup\",\n listEndpoint?.method,\n listEndpoint?.path,\n filters,\n ],\n queryFn: async () =>\n (await client.lookupFilters?.(\n listEndpoint!.path,\n listEndpoint!.method,\n packParameterValues(filters, listParameters),\n { Accept: \"application/json+clicky\" },\n )) ?? { filters: {} },\n enabled: !!listEndpoint && view === \"table\" && !!client.lookupFilters,\n staleTime: 30_000,\n retry: 0,\n });\n\n // The list action bar shows only collection-scoped actions (create + bulk\n // actions that operate on the filtered set). Entity-scoped actions\n // (update/delete and per-id custom actions) need an {id}, so they live on the\n // detail page (OperationEntityPage) instead. In the generic fallback the\n // EndpointList already exposes every operation as a runnable card, so there is\n // no separate action bar to guess at.\n const actionOps = useMemo(\n () =>\n useSurfaceMetadata\n ? findSurfaceCollectionActions(domainOps, surfaceKey)\n : [],\n [domainOps, surfaceKey, useSurfaceMetadata],\n );\n\n const filterBarConfig = useMemo(() => {\n const options: ParameterFormOptions = {\n includeLocations: [\"query\"],\n };\n if (lookupQuery.data != null) {\n options.lookup = lookupQuery.data;\n }\n return parametersToFormConfig(listParameters, filters, setFilters, options);\n }, [filters, listParameters, lookupQuery.data]);\n const dataTablePagination = useMemo(\n () =>\n dataTablePaginationFromForm(filterBarConfig.pagination, listQuery.data),\n [filterBarConfig.pagination, listQuery.data],\n );\n const decoratedFilters = useMemo(\n () =>\n filterBarConfig.filters.map((filter) =>\n applyFilterExtensions(filter, filterPre),\n ),\n [filterBarConfig.filters, filterPre],\n );\n\n const hasTable = !!listEndpoint;\n const showTable = hasTable && view === \"table\";\n const sectionLabel =\n kind === \"configuration\" || definition.key.startsWith(\"config-\")\n ? \"Configuration\"\n : \"Operations\";\n // Lock the current list filters into a bulk action (supportsFilterMode), so a\n // collection action like \"pause\" runs against the same set the table shows.\n // Entity-scoped actions never reach here (they live on the detail page).\n function getActionLockedValues(\n op: ResolvedOperation,\n ): Record<string, string> {\n const meta = getOperationClickyMeta(op);\n if (meta == null || !meta.supportsFilterMode) {\n return {};\n }\n\n const locked: Record<string, string> = {};\n for (const param of op.operation.parameters ?? []) {\n const value = filters[param.name];\n if (param.in === \"query\" && value) {\n locked[param.name] = value;\n }\n }\n\n if (meta.idParam) {\n locked[meta.idParam] = \"all\";\n }\n\n if (\n (op.operation.parameters ?? []).some((param) => param.name === \"filter\")\n ) {\n locked.filter =\n Object.entries(filters)\n .filter(([, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join(\", \") || \"current list filters\";\n }\n\n return locked;\n }\n\n if (isLoading) {\n return (\n <div className=\"space-y-3\">\n <SkeletonBlock className=\"h-10 w-72\" />\n <SkeletonBlock className=\"h-4 w-[32rem]\" />\n {Array.from({ length: 5 }).map((_, i) => (\n <SkeletonBlock key={i} className=\"h-12\" />\n ))}\n </div>\n );\n }\n\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-6\"\n data-slot=\"operation-catalog\"\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0\">\n <p className=\"text-xs uppercase tracking-[0.18em] text-muted-foreground\">\n {sectionLabel}\n </p>\n <h1 className=\"text-2xl font-semibold tracking-tight\">\n {definition.title}\n </h1>\n <p className=\"mt-1 max-w-2xl text-sm text-muted-foreground\">\n {definition.description}\n </p>\n </div>\n {hasTable && (\n <div className=\"flex gap-1 rounded-lg border p-1\">\n <Button\n type=\"button\"\n variant={view === \"table\" ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n className=\"h-7 w-7 p-0\"\n aria-label=\"Table view\"\n aria-pressed={view === \"table\"}\n onClick={() => setView(\"table\")}\n >\n <Icon icon={UiTable} />\n </Button>\n <Button\n type=\"button\"\n variant={view === \"endpoints\" ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n className=\"h-7 w-7 p-0\"\n aria-label=\"Endpoint list view\"\n aria-pressed={view === \"endpoints\"}\n onClick={() => setView(\"endpoints\")}\n >\n <Icon icon={UiListFlat} />\n </Button>\n </div>\n )}\n </div>\n\n <OperationActionBar\n actions={actionOps}\n client={client}\n getLockedValues={getActionLockedValues}\n onExecuted={() => void listQuery.refetch()}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(formPre ? { formPre } : {})}\n {...(formPost ? { formPost } : {})}\n {...(formActions ? { formActions } : {})}\n {...(actionLabels ? { actionLabels } : {})}\n />\n\n {showTable ? (\n <div\n className=\"min-h-0 flex-1\"\n data-slot=\"operation-catalog-results\"\n >\n {listQuery.isError && !listQuery.data\n ? renderError(\n listQuery.error,\n `Failed to load ${listEndpoint?.path ?? \"\"}`,\n )\n : (() => {\n const defaultView = (\n <OperationResultView\n response={listQuery.data ?? null}\n loading={listQuery.isFetching}\n loadingMessage={`Loading ${definition.title} results…`}\n emptyMessage=\"No records returned\"\n ariaLabel={`${definition.title} results`}\n className=\"mt-0 h-full min-h-0\"\n detailOperation={detailOperation}\n filterConfig={{\n filters: decoratedFilters,\n ...(filterBarConfig.search\n ? { search: filterBarConfig.search }\n : {}),\n ...(filterBarConfig.timeRange\n ? { timeRange: filterBarConfig.timeRange }\n : {}),\n }}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(dataTablePagination\n ? { pagination: dataTablePagination }\n : {})}\n {...(download ? { download } : {})}\n />\n );\n return resultRenderer\n ? resultRenderer({\n response: listQuery.data ?? null,\n defaultView,\n ...(surfaceKey ? { surfaceKey } : {}),\n })\n : defaultView;\n })()}\n </div>\n ) : (\n <EndpointList\n operations={domainOps}\n definition={definition}\n renderLink={renderLink}\n getCommandHref={getCommandHref}\n />\n )}\n </div>\n );\n}\n\nfunction readFiltersFromUrl(): Record<string, string> {\n if (typeof window === \"undefined\") return {};\n const search = new URLSearchParams(window.location.search);\n const values: Record<string, string> = {};\n for (const [key, value] of search.entries()) {\n if (key.startsWith(\"__\")) continue;\n if (value !== \"\") values[key] = value;\n }\n return values;\n}\n\nfunction SkeletonBlock({ className }: { className?: string }) {\n return (\n <div\n className={`animate-pulse rounded-md bg-muted ${className ?? \"\"}`.trim()}\n />\n );\n}\n\nfunction writeFiltersToUrl(filters: Record<string, string>) {\n if (typeof window === \"undefined\") return;\n const search = reservedSearchParamsFromUrl();\n for (const [key, value] of Object.entries(filters)) {\n if (value !== \"\") search.set(key, value);\n }\n const query = search.toString();\n const next = `${window.location.pathname}${query ? `?${query}` : \"\"}${window.location.hash}`;\n if (\n next !==\n `${window.location.pathname}${window.location.search}${window.location.hash}`\n ) {\n window.history.replaceState(window.history.state, \"\", next);\n }\n}\n\nfunction reservedSearchParamsFromUrl() {\n const current = new URLSearchParams(window.location.search);\n const next = new URLSearchParams();\n for (const [key, value] of current.entries()) {\n if (!key.startsWith(\"__\")) continue;\n if (key === \"__autoRun\" || key.startsWith(\"__arg\")) continue;\n next.append(key, value);\n }\n return next;\n}\n"],"names":["jsxs","jsx","useOperations","useState","useMemo","filterOperationsBySurface","filterOperationsByDomain","findSurfaceListOperation","findSurfaceDetailOperation","useEffect","useQuery","packParameterValues","keepPreviousData","findSurfaceCollectionActions","parametersToFormConfig","dataTablePaginationFromForm","applyFilterExtensions","getOperationClickyMeta","Button","Icon","UiTable","UiListFlat","OperationActionBar","OperationResultView","EndpointList"],"mappings":"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"}
1
+ {"version":3,"file":"OperationCatalog.cjs","sources":["../../src/rpc/OperationCatalog.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { keepPreviousData, useQuery } from \"@tanstack/react-query\";\nimport { filterOperationsByDomain } from \"./classify\";\nimport {\n filterOperationsBySurface,\n findSurfaceCollectionActions,\n findSurfaceDetailOperation,\n findSurfaceListOperation,\n getOperationClickyMeta,\n} from \"./clickyMetadata\";\nimport type {\n ClickyCommandRuntime,\n ClickyDownloadOptions,\n ClickyRemoteFormat,\n} from \"../data/Clicky\";\nimport { EndpointList, type RenderLink } from \"./EndpointList\";\nimport { OperationActionBar } from \"./OperationActionBar\";\nimport {\n OperationResultView,\n type ResultRenderer,\n} from \"./OperationResultView\";\nimport { type FormActionsRenderer } from \"./SchemaActionForm\";\nimport {\n applyFilterExtensions,\n type FilterExtension,\n} from \"../components/filter-bar-utils\";\nimport type {\n PreExtension,\n PostExtension,\n} from \"../components/json-schema-form-types\";\nimport {\n type DomainDefinition,\n type ExecutionResponse,\n type OperationLookupResponse,\n type ResolvedOperation,\n} from \"./types\";\nimport { useOperations, type OperationsApiClient } from \"./useOperations\";\nimport {\n dataTablePaginationFromForm,\n packParameterValues,\n parametersToFormConfig,\n type ParameterFormOptions,\n} from \"./formMetadata\";\n\nexport type OperationCatalogProps = {\n definition: DomainDefinition;\n entities: string[];\n client: OperationsApiClient;\n renderLink: RenderLink;\n // Override to return all operations (e.g. for an \"API explorer\" domain\n // that shouldn't be filtered by entity tags).\n allOperations?: boolean;\n surfaceKey?: string;\n // Domain-specific filter decorators (e.g. stamp an entity icon by filter\n // name). Composed in array order; mirrors JsonSchemaForm's `pre`.\n filterPre?: FilterExtension[];\n getCommandHref?: (operationId: string, op: ResolvedOperation) => string;\n renderError?: (err: unknown, title: string) => ReactNode;\n commandRuntime?: ClickyCommandRuntime;\n // Custom JsonSchemaForm field extensions forwarded to the create/edit form.\n formPre?: PreExtension[];\n formPost?: PostExtension[];\n // Optional extra footer actions for the create/edit form (e.g. a connection\n // \"Test\" button).\n formActions?: FormActionsRenderer;\n actionLabels?: Record<string, string>;\n // Optional host override for the result surface, keyed off the current surface.\n // Receives the default OperationResultView so non-overridden surfaces render\n // unchanged.\n resultRenderer?: ResultRenderer;\n /**\n * Portal target for the collection action bar (Create, bulk actions). When\n * set, the bar renders into this element — typically an app shell's\n * `bodyActions` slot — instead of inline under the catalog header.\n *\n * A portal rather than a render-prop because the bar owns its own dialog\n * state and closes over the catalog's live filters and list query; moving the\n * element would sever both. Falls back to inline rendering when null, so\n * existing consumers are unaffected.\n */\n actionsContainer?: Element | null;\n};\n\nconst defaultCommandHref = (operationId: string) => `/commands/${operationId}`;\n\nfunction defaultRenderError(err: unknown, title: string) {\n const message = err instanceof Error ? err.message : String(err ?? \"\");\n return (\n <div className=\"rounded-xl border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive\">\n <div className=\"font-medium\">{title}</div>\n {message && (\n <div className=\"mt-1 whitespace-pre-wrap text-xs opacity-80\">\n {message}\n </div>\n )}\n </div>\n );\n}\n\nexport function OperationCatalog({\n definition,\n entities,\n client,\n renderLink,\n allOperations = false,\n surfaceKey,\n filterPre,\n getCommandHref = defaultCommandHref,\n renderError = defaultRenderError,\n commandRuntime,\n formPre,\n formPost,\n formActions,\n actionLabels,\n resultRenderer,\n actionsContainer,\n}: OperationCatalogProps) {\n const { operations, isLoading } = useOperations(client);\n\n const surfaceOps = useMemo(\n () => filterOperationsBySurface(operations, surfaceKey),\n [operations, surfaceKey],\n );\n const useSurfaceMetadata = surfaceOps.length > 0;\n\n // domainOps are the operations scoped to this domain: a surface's operations\n // when surfaceKey resolves, otherwise the entity-tagged operations — used only\n // to render the generic operation-page fallback, never to guess a table.\n const domainOps = useMemo(() => {\n if (useSurfaceMetadata) return surfaceOps;\n return allOperations\n ? operations\n : filterOperationsByDomain(operations, entities);\n }, [allOperations, entities, operations, surfaceOps, useSurfaceMetadata]);\n\n // The list table is driven solely by x-clicky surface metadata. Without a\n // surface there is no authoritative list op, so listEndpoint stays undefined\n // and the catalog renders the generic EndpointList fallback instead of\n // guessing a table from operationId/path conventions.\n const listEndpoint = useMemo(() => {\n if (!useSurfaceMetadata) return undefined;\n return findSurfaceListOperation(domainOps, surfaceKey);\n }, [domainOps, surfaceKey, useSurfaceMetadata]);\n // The detail op turns each list row into a link to /<surface>/<id>; absent it\n // (no surface metadata) rows stay non-navigable.\n const detailOperation = useMemo(\n () =>\n useSurfaceMetadata\n ? findSurfaceDetailOperation(domainOps, surfaceKey)\n : undefined,\n [domainOps, surfaceKey, useSurfaceMetadata],\n );\n const [filters, setFilters] = useState<Record<string, string>>(() =>\n readFiltersFromUrl(),\n );\n const listParameters = listEndpoint?.operation.parameters ?? [];\n const download = useMemo<ClickyDownloadOptions | undefined>(() => {\n const meta = listEndpoint?.operation[\"x-clicky\"]?.export;\n if (!meta) return undefined;\n return {\n label: definition.title,\n ...(meta.formats\n ? { formats: meta.formats as ClickyRemoteFormat[] }\n : {}),\n ...(meta.scopes ? { scopes: meta.scopes } : {}),\n ...(meta.allRowsMode ? { allRowsMode: meta.allRowsMode } : {}),\n ...(meta.formatMaxRows\n ? {\n formatMaxRows: meta.formatMaxRows as Partial<\n Record<ClickyRemoteFormat, number>\n >,\n }\n : {}),\n };\n }, [definition.title, listEndpoint]);\n\n useEffect(() => {\n writeFiltersToUrl(filters);\n }, [filters]);\n\n const listQuery = useQuery<ExecutionResponse>({\n queryKey: [\n \"operation-list\",\n listEndpoint?.method,\n listEndpoint?.path,\n filters,\n ],\n queryFn: () =>\n client.executeCommand(\n listEndpoint!.path,\n listEndpoint!.method,\n packParameterValues(filters, listEndpoint!.operation.parameters ?? []),\n {\n Accept: \"application/json+clicky\",\n },\n ),\n enabled: !!listEndpoint,\n placeholderData: keepPreviousData,\n staleTime: 30_000,\n retry: 0,\n });\n\n const lookupQuery = useQuery<OperationLookupResponse>({\n queryKey: [\n \"operation-lookup\",\n listEndpoint?.method,\n listEndpoint?.path,\n filters,\n ],\n queryFn: async () =>\n (await client.lookupFilters?.(\n listEndpoint!.path,\n listEndpoint!.method,\n packParameterValues(filters, listParameters),\n { Accept: \"application/json+clicky\" },\n )) ?? { filters: {} },\n enabled: !!listEndpoint && !!client.lookupFilters,\n staleTime: 30_000,\n retry: 0,\n });\n\n // The list action bar shows only collection-scoped actions (create + bulk\n // actions that operate on the filtered set). Entity-scoped actions\n // (update/delete and per-id custom actions) need an {id}, so they live on the\n // detail page (OperationEntityPage) instead. In the generic fallback the\n // EndpointList already exposes every operation as a runnable card, so there is\n // no separate action bar to guess at.\n const actionOps = useMemo(\n () =>\n useSurfaceMetadata\n ? findSurfaceCollectionActions(domainOps, surfaceKey)\n : [],\n [domainOps, surfaceKey, useSurfaceMetadata],\n );\n\n const filterBarConfig = useMemo(() => {\n const options: ParameterFormOptions = {\n includeLocations: [\"query\"],\n };\n if (lookupQuery.data != null) {\n options.lookup = lookupQuery.data;\n }\n return parametersToFormConfig(listParameters, filters, setFilters, options);\n }, [filters, listParameters, lookupQuery.data]);\n const dataTablePagination = useMemo(\n () =>\n dataTablePaginationFromForm(filterBarConfig.pagination, listQuery.data),\n [filterBarConfig.pagination, listQuery.data],\n );\n const decoratedFilters = useMemo(\n () =>\n filterBarConfig.filters.map((filter) =>\n applyFilterExtensions(filter, filterPre),\n ),\n [filterBarConfig.filters, filterPre],\n );\n\n const showTable = !!listEndpoint;\n let listError: unknown;\n if (!listQuery.isFetching) {\n if (listQuery.isError) {\n listError = listQuery.error;\n } else if (listQuery.data?.success === false) {\n listError = new Error(\n listQuery.data.error ||\n listQuery.data.message ||\n listQuery.data.stderr ||\n `Command failed with exit code ${listQuery.data.exit_code}`,\n );\n }\n }\n const tableError =\n listError !== undefined\n ? renderError(\n listError,\n `Failed to load ${listEndpoint?.path ?? \"\"}`,\n )\n : undefined;\n const tableResponse =\n listQuery.data?.success === false ? null : (listQuery.data ?? null);\n // Lock the current list filters into a bulk action (supportsFilterMode), so a\n // collection action like \"pause\" runs against the same set the table shows.\n // Entity-scoped actions never reach here (they live on the detail page).\n function getActionLockedValues(\n op: ResolvedOperation,\n ): Record<string, string> {\n const meta = getOperationClickyMeta(op);\n if (meta == null || !meta.supportsFilterMode) {\n return {};\n }\n\n const locked: Record<string, string> = {};\n for (const param of op.operation.parameters ?? []) {\n const value = filters[param.name];\n if (param.in === \"query\" && value) {\n locked[param.name] = value;\n }\n }\n\n if (meta.idParam) {\n locked[meta.idParam] = \"all\";\n }\n\n if (\n (op.operation.parameters ?? []).some((param) => param.name === \"filter\")\n ) {\n locked.filter =\n Object.entries(filters)\n .filter(([, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join(\", \") || \"current list filters\";\n }\n\n return locked;\n }\n\n if (isLoading) {\n return (\n <div className=\"space-y-3\">\n <SkeletonBlock className=\"h-10 w-72\" />\n <SkeletonBlock className=\"h-4 w-[32rem]\" />\n {Array.from({ length: 5 }).map((_, i) => (\n <SkeletonBlock key={i} className=\"h-12\" />\n ))}\n </div>\n );\n }\n\n const actionBar = (\n <OperationActionBar\n actions={actionOps}\n client={client}\n getLockedValues={getActionLockedValues}\n onExecuted={() => void listQuery.refetch()}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(formPre ? { formPre } : {})}\n {...(formPost ? { formPost } : {})}\n {...(formActions ? { formActions } : {})}\n {...(actionLabels ? { actionLabels } : {})}\n />\n );\n\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-2\"\n data-slot=\"operation-catalog\"\n >\n {/* No title/description here by design: page headers and breadcrumbs are\n the host's to define (e.g. an app shell's bodyHeader), so the catalog\n never invents chrome the consumer would have to fight or duplicate. */}\n {actionsContainer ? createPortal(actionBar, actionsContainer) : actionBar}\n\n {showTable ? (\n <div\n className=\"min-h-0 flex-1\"\n data-slot=\"operation-catalog-results\"\n >\n {(() => {\n const defaultView = (\n <OperationResultView\n response={tableResponse}\n loading={listQuery.isFetching}\n loadingMessage={`Loading ${definition.title} results…`}\n emptyMessage=\"No records returned\"\n ariaLabel={`${definition.title} results`}\n className=\"mt-0 h-full min-h-0\"\n detailOperation={detailOperation}\n filterConfig={{\n filters: decoratedFilters,\n ...(filterBarConfig.search\n ? { search: filterBarConfig.search }\n : {}),\n ...(filterBarConfig.timeRange\n ? { timeRange: filterBarConfig.timeRange }\n : {}),\n }}\n {...(tableError ? { error: tableError } : {})}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(dataTablePagination\n ? { pagination: dataTablePagination }\n : {})}\n {...(download ? { download } : {})}\n />\n );\n return resultRenderer\n ? resultRenderer({\n response: listQuery.data ?? null,\n defaultView,\n ...(surfaceKey ? { surfaceKey } : {}),\n })\n : defaultView;\n })()}\n </div>\n ) : (\n <EndpointList\n operations={domainOps}\n definition={definition}\n renderLink={renderLink}\n getCommandHref={getCommandHref}\n />\n )}\n </div>\n );\n}\n\nfunction readFiltersFromUrl(): Record<string, string> {\n if (typeof window === \"undefined\") return {};\n const search = new URLSearchParams(window.location.search);\n const values: Record<string, string> = {};\n for (const [key, value] of search.entries()) {\n if (key.startsWith(\"__\")) continue;\n if (value !== \"\") values[key] = value;\n }\n return values;\n}\n\nfunction SkeletonBlock({ className }: { className?: string }) {\n return (\n <div\n className={`animate-pulse rounded-md bg-muted ${className ?? \"\"}`.trim()}\n />\n );\n}\n\nfunction writeFiltersToUrl(filters: Record<string, string>) {\n if (typeof window === \"undefined\") return;\n const search = reservedSearchParamsFromUrl();\n for (const [key, value] of Object.entries(filters)) {\n if (value !== \"\") search.set(key, value);\n }\n const query = search.toString();\n const next = `${window.location.pathname}${query ? `?${query}` : \"\"}${window.location.hash}`;\n if (\n next !==\n `${window.location.pathname}${window.location.search}${window.location.hash}`\n ) {\n window.history.replaceState(window.history.state, \"\", next);\n }\n}\n\nfunction reservedSearchParamsFromUrl() {\n const current = new URLSearchParams(window.location.search);\n const next = new URLSearchParams();\n for (const [key, value] of current.entries()) {\n if (!key.startsWith(\"__\")) continue;\n if (key === \"__autoRun\" || key.startsWith(\"__arg\")) continue;\n next.append(key, value);\n }\n return next;\n}\n"],"names":["jsxs","jsx","useOperations","useMemo","filterOperationsBySurface","filterOperationsByDomain","findSurfaceListOperation","findSurfaceDetailOperation","useState","_a","useEffect","useQuery","packParameterValues","keepPreviousData","findSurfaceCollectionActions","parametersToFormConfig","dataTablePaginationFromForm","applyFilterExtensions","getOperationClickyMeta","OperationActionBar","createPortal","OperationResultView","EndpointList"],"mappings":"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"}
@@ -17,13 +17,23 @@ export type OperationCatalogProps = {
17
17
  filterPre?: FilterExtension[];
18
18
  getCommandHref?: (operationId: string, op: ResolvedOperation) => string;
19
19
  renderError?: (err: unknown, title: string) => ReactNode;
20
- kind?: "operations" | "configuration";
21
20
  commandRuntime?: ClickyCommandRuntime;
22
21
  formPre?: PreExtension[];
23
22
  formPost?: PostExtension[];
24
23
  formActions?: FormActionsRenderer;
25
24
  actionLabels?: Record<string, string>;
26
25
  resultRenderer?: ResultRenderer;
26
+ /**
27
+ * Portal target for the collection action bar (Create, bulk actions). When
28
+ * set, the bar renders into this element — typically an app shell's
29
+ * `bodyActions` slot — instead of inline under the catalog header.
30
+ *
31
+ * A portal rather than a render-prop because the bar owns its own dialog
32
+ * state and closes over the catalog's live filters and list query; moving the
33
+ * element would sever both. Falls back to inline rendering when null, so
34
+ * existing consumers are unaffected.
35
+ */
36
+ actionsContainer?: Element | null;
27
37
  };
28
- export declare function OperationCatalog({ definition, entities, client, renderLink, allOperations, surfaceKey, filterPre, getCommandHref, renderError, kind, commandRuntime, formPre, formPost, formActions, actionLabels, resultRenderer, }: OperationCatalogProps): import("react/jsx-runtime").JSX.Element;
38
+ export declare function OperationCatalog({ definition, entities, client, renderLink, allOperations, surfaceKey, filterPre, getCommandHref, renderError, commandRuntime, formPre, formPost, formActions, actionLabels, resultRenderer, actionsContainer, }: OperationCatalogProps): import("react/jsx-runtime").JSX.Element;
29
39
  //# sourceMappingURL=OperationCatalog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OperationCatalog.d.ts","sourceRoot":"","sources":["../../src/rpc/OperationCatalog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAarE,OAAO,KAAK,EACV,oBAAoB,EAGrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACd,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,KAAK,gBAAgB,EAGrB,KAAK,iBAAiB,EACvB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAQ1E,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAC;IAGvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,KAAK,MAAM,CAAC;IACxE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IACzD,IAAI,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC;IACtC,cAAc,CAAC,EAAE,oBAAoB,CAAC;IAEtC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAG3B,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAItC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC;AAkBF,wBAAgB,gBAAgB,CAAC,EAC/B,UAAU,EACV,QAAQ,EACR,MAAM,EACN,UAAU,EACV,aAAqB,EACrB,UAAU,EACV,SAAS,EACT,cAAmC,EACnC,WAAgC,EAChC,IAAI,EACJ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,cAAc,GACf,EAAE,qBAAqB,2CAoTvB"}
1
+ {"version":3,"file":"OperationCatalog.d.ts","sourceRoot":"","sources":["../../src/rpc/OperationCatalog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAWrE,OAAO,KAAK,EACV,oBAAoB,EAGrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACd,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,KAAK,gBAAgB,EAGrB,KAAK,iBAAiB,EACvB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAQ1E,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAC;IAGvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,KAAK,MAAM,CAAC;IACxE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IACzD,cAAc,CAAC,EAAE,oBAAoB,CAAC;IAEtC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAG3B,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAItC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACnC,CAAC;AAkBF,wBAAgB,gBAAgB,CAAC,EAC/B,UAAU,EACV,QAAQ,EACR,MAAM,EACN,UAAU,EACV,aAAqB,EACrB,UAAU,EACV,SAAS,EACT,cAAmC,EACnC,WAAgC,EAChC,cAAc,EACd,OAAO,EACP,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,cAAc,EACd,gBAAgB,GACjB,EAAE,qBAAqB,2CA+RvB"}
@@ -1,8 +1,7 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
- import { useState, useMemo, useEffect } from "react";
2
+ import { useMemo, useState, useEffect } from "react";
3
+ import { createPortal } from "react-dom";
3
4
  import { useQuery, keepPreviousData } from "@tanstack/react-query";
4
- import { Button } from "../components/button.js";
5
- import { Icon } from "../data/Icon.js";
6
5
  import { filterOperationsByDomain } from "./classify.js";
7
6
  import { filterOperationsBySurface, findSurfaceListOperation, findSurfaceDetailOperation, findSurfaceCollectionActions, getOperationClickyMeta } from "./clickyMetadata.js";
8
7
  import { EndpointList } from "./EndpointList.js";
@@ -11,8 +10,6 @@ import { OperationResultView } from "./OperationResultView.js";
11
10
  import { applyFilterExtensions } from "../components/filter-bar-utils.js";
12
11
  import { useOperations } from "./useOperations.js";
13
12
  import { packParameterValues, parametersToFormConfig, dataTablePaginationFromForm } from "./formMetadata.js";
14
- import { UiTable } from "../icons/components/UiTable.js";
15
- import { UiListFlat } from "../icons/components/UiListFlat.js";
16
13
  const defaultCommandHref = (operationId) => `/commands/${operationId}`;
17
14
  function defaultRenderError(err, title) {
18
15
  const message = err instanceof Error ? err.message : String(err ?? "");
@@ -31,16 +28,16 @@ function OperationCatalog({
31
28
  filterPre,
32
29
  getCommandHref = defaultCommandHref,
33
30
  renderError = defaultRenderError,
34
- kind,
35
31
  commandRuntime,
36
32
  formPre,
37
33
  formPost,
38
34
  formActions,
39
35
  actionLabels,
40
- resultRenderer
36
+ resultRenderer,
37
+ actionsContainer
41
38
  }) {
39
+ var _a, _b;
42
40
  const { operations, isLoading } = useOperations(client);
43
- const [view, setView] = useState("table");
44
41
  const surfaceOps = useMemo(
45
42
  () => filterOperationsBySurface(operations, surfaceKey),
46
43
  [operations, surfaceKey]
@@ -63,8 +60,8 @@ function OperationCatalog({
63
60
  );
64
61
  const listParameters = (listEndpoint == null ? void 0 : listEndpoint.operation.parameters) ?? [];
65
62
  const download = useMemo(() => {
66
- var _a;
67
- const meta = (_a = listEndpoint == null ? void 0 : listEndpoint.operation["x-clicky"]) == null ? void 0 : _a.export;
63
+ var _a2;
64
+ const meta = (_a2 = listEndpoint == null ? void 0 : listEndpoint.operation["x-clicky"]) == null ? void 0 : _a2.export;
68
65
  if (!meta) return void 0;
69
66
  return {
70
67
  label: definition.title,
@@ -94,7 +91,7 @@ function OperationCatalog({
94
91
  Accept: "application/json+clicky"
95
92
  }
96
93
  ),
97
- enabled: !!listEndpoint && view === "table",
94
+ enabled: !!listEndpoint,
98
95
  placeholderData: keepPreviousData,
99
96
  staleTime: 3e4,
100
97
  retry: 0
@@ -107,8 +104,8 @@ function OperationCatalog({
107
104
  filters
108
105
  ],
109
106
  queryFn: async () => {
110
- var _a;
111
- return await ((_a = client.lookupFilters) == null ? void 0 : _a.call(
107
+ var _a2;
108
+ return await ((_a2 = client.lookupFilters) == null ? void 0 : _a2.call(
112
109
  client,
113
110
  listEndpoint.path,
114
111
  listEndpoint.method,
@@ -116,7 +113,7 @@ function OperationCatalog({
116
113
  { Accept: "application/json+clicky" }
117
114
  )) ?? { filters: {} };
118
115
  },
119
- enabled: !!listEndpoint && view === "table" && !!client.lookupFilters,
116
+ enabled: !!listEndpoint && !!client.lookupFilters,
120
117
  staleTime: 3e4,
121
118
  retry: 0
122
119
  });
@@ -143,9 +140,22 @@ function OperationCatalog({
143
140
  ),
144
141
  [filterBarConfig.filters, filterPre]
145
142
  );
146
- const hasTable = !!listEndpoint;
147
- const showTable = hasTable && view === "table";
148
- const sectionLabel = kind === "configuration" || definition.key.startsWith("config-") ? "Configuration" : "Operations";
143
+ const showTable = !!listEndpoint;
144
+ let listError;
145
+ if (!listQuery.isFetching) {
146
+ if (listQuery.isError) {
147
+ listError = listQuery.error;
148
+ } else if (((_a = listQuery.data) == null ? void 0 : _a.success) === false) {
149
+ listError = new Error(
150
+ listQuery.data.error || listQuery.data.message || listQuery.data.stderr || `Command failed with exit code ${listQuery.data.exit_code}`
151
+ );
152
+ }
153
+ }
154
+ const tableError = listError !== void 0 ? renderError(
155
+ listError,
156
+ `Failed to load ${(listEndpoint == null ? void 0 : listEndpoint.path) ?? ""}`
157
+ ) : void 0;
158
+ const tableResponse = ((_b = listQuery.data) == null ? void 0 : _b.success) === false ? null : listQuery.data ?? null;
149
159
  function getActionLockedValues(op) {
150
160
  const meta = getOperationClickyMeta(op);
151
161
  if (meta == null || !meta.supportsFilterMode) {
@@ -173,74 +183,37 @@ function OperationCatalog({
173
183
  Array.from({ length: 5 }).map((_, i) => /* @__PURE__ */ jsx(SkeletonBlock, { className: "h-12" }, i))
174
184
  ] });
175
185
  }
186
+ const actionBar = /* @__PURE__ */ jsx(
187
+ OperationActionBar,
188
+ {
189
+ actions: actionOps,
190
+ client,
191
+ getLockedValues: getActionLockedValues,
192
+ onExecuted: () => void listQuery.refetch(),
193
+ ...commandRuntime ? { commandRuntime } : {},
194
+ ...formPre ? { formPre } : {},
195
+ ...formPost ? { formPost } : {},
196
+ ...formActions ? { formActions } : {},
197
+ ...actionLabels ? { actionLabels } : {}
198
+ }
199
+ );
176
200
  return /* @__PURE__ */ jsxs(
177
201
  "div",
178
202
  {
179
- className: "flex h-full min-h-0 flex-col gap-6",
203
+ className: "flex h-full min-h-0 flex-col gap-2",
180
204
  "data-slot": "operation-catalog",
181
205
  children: [
182
- /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-4", children: [
183
- /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
184
- /* @__PURE__ */ jsx("p", { className: "text-xs uppercase tracking-[0.18em] text-muted-foreground", children: sectionLabel }),
185
- /* @__PURE__ */ jsx("h1", { className: "text-2xl font-semibold tracking-tight", children: definition.title }),
186
- /* @__PURE__ */ jsx("p", { className: "mt-1 max-w-2xl text-sm text-muted-foreground", children: definition.description })
187
- ] }),
188
- hasTable && /* @__PURE__ */ jsxs("div", { className: "flex gap-1 rounded-lg border p-1", children: [
189
- /* @__PURE__ */ jsx(
190
- Button,
191
- {
192
- type: "button",
193
- variant: view === "table" ? "secondary" : "ghost",
194
- size: "sm",
195
- className: "h-7 w-7 p-0",
196
- "aria-label": "Table view",
197
- "aria-pressed": view === "table",
198
- onClick: () => setView("table"),
199
- children: /* @__PURE__ */ jsx(Icon, { icon: UiTable })
200
- }
201
- ),
202
- /* @__PURE__ */ jsx(
203
- Button,
204
- {
205
- type: "button",
206
- variant: view === "endpoints" ? "secondary" : "ghost",
207
- size: "sm",
208
- className: "h-7 w-7 p-0",
209
- "aria-label": "Endpoint list view",
210
- "aria-pressed": view === "endpoints",
211
- onClick: () => setView("endpoints"),
212
- children: /* @__PURE__ */ jsx(Icon, { icon: UiListFlat })
213
- }
214
- )
215
- ] })
216
- ] }),
217
- /* @__PURE__ */ jsx(
218
- OperationActionBar,
219
- {
220
- actions: actionOps,
221
- client,
222
- getLockedValues: getActionLockedValues,
223
- onExecuted: () => void listQuery.refetch(),
224
- ...commandRuntime ? { commandRuntime } : {},
225
- ...formPre ? { formPre } : {},
226
- ...formPost ? { formPost } : {},
227
- ...formActions ? { formActions } : {},
228
- ...actionLabels ? { actionLabels } : {}
229
- }
230
- ),
206
+ actionsContainer ? createPortal(actionBar, actionsContainer) : actionBar,
231
207
  showTable ? /* @__PURE__ */ jsx(
232
208
  "div",
233
209
  {
234
210
  className: "min-h-0 flex-1",
235
211
  "data-slot": "operation-catalog-results",
236
- children: listQuery.isError && !listQuery.data ? renderError(
237
- listQuery.error,
238
- `Failed to load ${(listEndpoint == null ? void 0 : listEndpoint.path) ?? ""}`
239
- ) : (() => {
212
+ children: (() => {
240
213
  const defaultView = /* @__PURE__ */ jsx(
241
214
  OperationResultView,
242
215
  {
243
- response: listQuery.data ?? null,
216
+ response: tableResponse,
244
217
  loading: listQuery.isFetching,
245
218
  loadingMessage: `Loading ${definition.title} results…`,
246
219
  emptyMessage: "No records returned",
@@ -252,6 +225,7 @@ function OperationCatalog({
252
225
  ...filterBarConfig.search ? { search: filterBarConfig.search } : {},
253
226
  ...filterBarConfig.timeRange ? { timeRange: filterBarConfig.timeRange } : {}
254
227
  },
228
+ ...tableError ? { error: tableError } : {},
255
229
  ...commandRuntime ? { commandRuntime } : {},
256
230
  ...dataTablePagination ? { pagination: dataTablePagination } : {},
257
231
  ...download ? { download } : {}
@@ -1 +1 @@
1
- {"version":3,"file":"OperationCatalog.js","sources":["../../src/rpc/OperationCatalog.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { keepPreviousData, useQuery } from \"@tanstack/react-query\";\nimport { Button } from \"../components/button\";\nimport { Icon } from \"../data/Icon\";\nimport { UiListFlat, UiTable } from \"../icons\";\nimport { filterOperationsByDomain } from \"./classify\";\nimport {\n filterOperationsBySurface,\n findSurfaceCollectionActions,\n findSurfaceDetailOperation,\n findSurfaceListOperation,\n getOperationClickyMeta,\n} from \"./clickyMetadata\";\nimport type {\n ClickyCommandRuntime,\n ClickyDownloadOptions,\n ClickyRemoteFormat,\n} from \"../data/Clicky\";\nimport { EndpointList, type RenderLink } from \"./EndpointList\";\nimport { OperationActionBar } from \"./OperationActionBar\";\nimport {\n OperationResultView,\n type ResultRenderer,\n} from \"./OperationResultView\";\nimport { type FormActionsRenderer } from \"./SchemaActionForm\";\nimport {\n applyFilterExtensions,\n type FilterExtension,\n} from \"../components/filter-bar-utils\";\nimport type {\n PreExtension,\n PostExtension,\n} from \"../components/json-schema-form-types\";\nimport {\n type DomainDefinition,\n type ExecutionResponse,\n type OperationLookupResponse,\n type ResolvedOperation,\n} from \"./types\";\nimport { useOperations, type OperationsApiClient } from \"./useOperations\";\nimport {\n dataTablePaginationFromForm,\n packParameterValues,\n parametersToFormConfig,\n type ParameterFormOptions,\n} from \"./formMetadata\";\n\nexport type OperationCatalogProps = {\n definition: DomainDefinition;\n entities: string[];\n client: OperationsApiClient;\n renderLink: RenderLink;\n // Override to return all operations (e.g. for an \"API explorer\" domain\n // that shouldn't be filtered by entity tags).\n allOperations?: boolean;\n surfaceKey?: string;\n // Domain-specific filter decorators (e.g. stamp an entity icon by filter\n // name). Composed in array order; mirrors JsonSchemaForm's `pre`.\n filterPre?: FilterExtension[];\n getCommandHref?: (operationId: string, op: ResolvedOperation) => string;\n renderError?: (err: unknown, title: string) => ReactNode;\n kind?: \"operations\" | \"configuration\";\n commandRuntime?: ClickyCommandRuntime;\n // Custom JsonSchemaForm field extensions forwarded to the create/edit form.\n formPre?: PreExtension[];\n formPost?: PostExtension[];\n // Optional extra footer actions for the create/edit form (e.g. a connection\n // \"Test\" button).\n formActions?: FormActionsRenderer;\n actionLabels?: Record<string, string>;\n // Optional host override for the result surface, keyed off the current surface.\n // Receives the default OperationResultView so non-overridden surfaces render\n // unchanged.\n resultRenderer?: ResultRenderer;\n};\n\nconst defaultCommandHref = (operationId: string) => `/commands/${operationId}`;\n\nfunction defaultRenderError(err: unknown, title: string) {\n const message = err instanceof Error ? err.message : String(err ?? \"\");\n return (\n <div className=\"rounded-xl border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive\">\n <div className=\"font-medium\">{title}</div>\n {message && (\n <div className=\"mt-1 whitespace-pre-wrap text-xs opacity-80\">\n {message}\n </div>\n )}\n </div>\n );\n}\n\nexport function OperationCatalog({\n definition,\n entities,\n client,\n renderLink,\n allOperations = false,\n surfaceKey,\n filterPre,\n getCommandHref = defaultCommandHref,\n renderError = defaultRenderError,\n kind,\n commandRuntime,\n formPre,\n formPost,\n formActions,\n actionLabels,\n resultRenderer,\n}: OperationCatalogProps) {\n const { operations, isLoading } = useOperations(client);\n const [view, setView] = useState<\"table\" | \"endpoints\">(\"table\");\n\n const surfaceOps = useMemo(\n () => filterOperationsBySurface(operations, surfaceKey),\n [operations, surfaceKey],\n );\n const useSurfaceMetadata = surfaceOps.length > 0;\n\n // domainOps are the operations scoped to this domain: a surface's operations\n // when surfaceKey resolves, otherwise the entity-tagged operations — used only\n // to render the generic operation-page fallback, never to guess a table.\n const domainOps = useMemo(() => {\n if (useSurfaceMetadata) return surfaceOps;\n return allOperations\n ? operations\n : filterOperationsByDomain(operations, entities);\n }, [allOperations, entities, operations, surfaceOps, useSurfaceMetadata]);\n\n // The list table is driven solely by x-clicky surface metadata. Without a\n // surface there is no authoritative list op, so listEndpoint stays undefined\n // and the catalog renders the generic EndpointList fallback instead of\n // guessing a table from operationId/path conventions.\n const listEndpoint = useMemo(() => {\n if (!useSurfaceMetadata) return undefined;\n return findSurfaceListOperation(domainOps, surfaceKey);\n }, [domainOps, surfaceKey, useSurfaceMetadata]);\n // The detail op turns each list row into a link to /<surface>/<id>; absent it\n // (no surface metadata) rows stay non-navigable.\n const detailOperation = useMemo(\n () =>\n useSurfaceMetadata\n ? findSurfaceDetailOperation(domainOps, surfaceKey)\n : undefined,\n [domainOps, surfaceKey, useSurfaceMetadata],\n );\n const [filters, setFilters] = useState<Record<string, string>>(() =>\n readFiltersFromUrl(),\n );\n const listParameters = listEndpoint?.operation.parameters ?? [];\n const download = useMemo<ClickyDownloadOptions | undefined>(() => {\n const meta = listEndpoint?.operation[\"x-clicky\"]?.export;\n if (!meta) return undefined;\n return {\n label: definition.title,\n ...(meta.formats\n ? { formats: meta.formats as ClickyRemoteFormat[] }\n : {}),\n ...(meta.scopes ? { scopes: meta.scopes } : {}),\n ...(meta.allRowsMode ? { allRowsMode: meta.allRowsMode } : {}),\n ...(meta.formatMaxRows\n ? {\n formatMaxRows: meta.formatMaxRows as Partial<\n Record<ClickyRemoteFormat, number>\n >,\n }\n : {}),\n };\n }, [definition.title, listEndpoint]);\n\n useEffect(() => {\n writeFiltersToUrl(filters);\n }, [filters]);\n\n const listQuery = useQuery<ExecutionResponse>({\n queryKey: [\n \"operation-list\",\n listEndpoint?.method,\n listEndpoint?.path,\n filters,\n ],\n queryFn: () =>\n client.executeCommand(\n listEndpoint!.path,\n listEndpoint!.method,\n packParameterValues(filters, listEndpoint!.operation.parameters ?? []),\n {\n Accept: \"application/json+clicky\",\n },\n ),\n enabled: !!listEndpoint && view === \"table\",\n placeholderData: keepPreviousData,\n staleTime: 30_000,\n retry: 0,\n });\n\n const lookupQuery = useQuery<OperationLookupResponse>({\n queryKey: [\n \"operation-lookup\",\n listEndpoint?.method,\n listEndpoint?.path,\n filters,\n ],\n queryFn: async () =>\n (await client.lookupFilters?.(\n listEndpoint!.path,\n listEndpoint!.method,\n packParameterValues(filters, listParameters),\n { Accept: \"application/json+clicky\" },\n )) ?? { filters: {} },\n enabled: !!listEndpoint && view === \"table\" && !!client.lookupFilters,\n staleTime: 30_000,\n retry: 0,\n });\n\n // The list action bar shows only collection-scoped actions (create + bulk\n // actions that operate on the filtered set). Entity-scoped actions\n // (update/delete and per-id custom actions) need an {id}, so they live on the\n // detail page (OperationEntityPage) instead. In the generic fallback the\n // EndpointList already exposes every operation as a runnable card, so there is\n // no separate action bar to guess at.\n const actionOps = useMemo(\n () =>\n useSurfaceMetadata\n ? findSurfaceCollectionActions(domainOps, surfaceKey)\n : [],\n [domainOps, surfaceKey, useSurfaceMetadata],\n );\n\n const filterBarConfig = useMemo(() => {\n const options: ParameterFormOptions = {\n includeLocations: [\"query\"],\n };\n if (lookupQuery.data != null) {\n options.lookup = lookupQuery.data;\n }\n return parametersToFormConfig(listParameters, filters, setFilters, options);\n }, [filters, listParameters, lookupQuery.data]);\n const dataTablePagination = useMemo(\n () =>\n dataTablePaginationFromForm(filterBarConfig.pagination, listQuery.data),\n [filterBarConfig.pagination, listQuery.data],\n );\n const decoratedFilters = useMemo(\n () =>\n filterBarConfig.filters.map((filter) =>\n applyFilterExtensions(filter, filterPre),\n ),\n [filterBarConfig.filters, filterPre],\n );\n\n const hasTable = !!listEndpoint;\n const showTable = hasTable && view === \"table\";\n const sectionLabel =\n kind === \"configuration\" || definition.key.startsWith(\"config-\")\n ? \"Configuration\"\n : \"Operations\";\n // Lock the current list filters into a bulk action (supportsFilterMode), so a\n // collection action like \"pause\" runs against the same set the table shows.\n // Entity-scoped actions never reach here (they live on the detail page).\n function getActionLockedValues(\n op: ResolvedOperation,\n ): Record<string, string> {\n const meta = getOperationClickyMeta(op);\n if (meta == null || !meta.supportsFilterMode) {\n return {};\n }\n\n const locked: Record<string, string> = {};\n for (const param of op.operation.parameters ?? []) {\n const value = filters[param.name];\n if (param.in === \"query\" && value) {\n locked[param.name] = value;\n }\n }\n\n if (meta.idParam) {\n locked[meta.idParam] = \"all\";\n }\n\n if (\n (op.operation.parameters ?? []).some((param) => param.name === \"filter\")\n ) {\n locked.filter =\n Object.entries(filters)\n .filter(([, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join(\", \") || \"current list filters\";\n }\n\n return locked;\n }\n\n if (isLoading) {\n return (\n <div className=\"space-y-3\">\n <SkeletonBlock className=\"h-10 w-72\" />\n <SkeletonBlock className=\"h-4 w-[32rem]\" />\n {Array.from({ length: 5 }).map((_, i) => (\n <SkeletonBlock key={i} className=\"h-12\" />\n ))}\n </div>\n );\n }\n\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-6\"\n data-slot=\"operation-catalog\"\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0\">\n <p className=\"text-xs uppercase tracking-[0.18em] text-muted-foreground\">\n {sectionLabel}\n </p>\n <h1 className=\"text-2xl font-semibold tracking-tight\">\n {definition.title}\n </h1>\n <p className=\"mt-1 max-w-2xl text-sm text-muted-foreground\">\n {definition.description}\n </p>\n </div>\n {hasTable && (\n <div className=\"flex gap-1 rounded-lg border p-1\">\n <Button\n type=\"button\"\n variant={view === \"table\" ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n className=\"h-7 w-7 p-0\"\n aria-label=\"Table view\"\n aria-pressed={view === \"table\"}\n onClick={() => setView(\"table\")}\n >\n <Icon icon={UiTable} />\n </Button>\n <Button\n type=\"button\"\n variant={view === \"endpoints\" ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n className=\"h-7 w-7 p-0\"\n aria-label=\"Endpoint list view\"\n aria-pressed={view === \"endpoints\"}\n onClick={() => setView(\"endpoints\")}\n >\n <Icon icon={UiListFlat} />\n </Button>\n </div>\n )}\n </div>\n\n <OperationActionBar\n actions={actionOps}\n client={client}\n getLockedValues={getActionLockedValues}\n onExecuted={() => void listQuery.refetch()}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(formPre ? { formPre } : {})}\n {...(formPost ? { formPost } : {})}\n {...(formActions ? { formActions } : {})}\n {...(actionLabels ? { actionLabels } : {})}\n />\n\n {showTable ? (\n <div\n className=\"min-h-0 flex-1\"\n data-slot=\"operation-catalog-results\"\n >\n {listQuery.isError && !listQuery.data\n ? renderError(\n listQuery.error,\n `Failed to load ${listEndpoint?.path ?? \"\"}`,\n )\n : (() => {\n const defaultView = (\n <OperationResultView\n response={listQuery.data ?? null}\n loading={listQuery.isFetching}\n loadingMessage={`Loading ${definition.title} results…`}\n emptyMessage=\"No records returned\"\n ariaLabel={`${definition.title} results`}\n className=\"mt-0 h-full min-h-0\"\n detailOperation={detailOperation}\n filterConfig={{\n filters: decoratedFilters,\n ...(filterBarConfig.search\n ? { search: filterBarConfig.search }\n : {}),\n ...(filterBarConfig.timeRange\n ? { timeRange: filterBarConfig.timeRange }\n : {}),\n }}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(dataTablePagination\n ? { pagination: dataTablePagination }\n : {})}\n {...(download ? { download } : {})}\n />\n );\n return resultRenderer\n ? resultRenderer({\n response: listQuery.data ?? null,\n defaultView,\n ...(surfaceKey ? { surfaceKey } : {}),\n })\n : defaultView;\n })()}\n </div>\n ) : (\n <EndpointList\n operations={domainOps}\n definition={definition}\n renderLink={renderLink}\n getCommandHref={getCommandHref}\n />\n )}\n </div>\n );\n}\n\nfunction readFiltersFromUrl(): Record<string, string> {\n if (typeof window === \"undefined\") return {};\n const search = new URLSearchParams(window.location.search);\n const values: Record<string, string> = {};\n for (const [key, value] of search.entries()) {\n if (key.startsWith(\"__\")) continue;\n if (value !== \"\") values[key] = value;\n }\n return values;\n}\n\nfunction SkeletonBlock({ className }: { className?: string }) {\n return (\n <div\n className={`animate-pulse rounded-md bg-muted ${className ?? \"\"}`.trim()}\n />\n );\n}\n\nfunction writeFiltersToUrl(filters: Record<string, string>) {\n if (typeof window === \"undefined\") return;\n const search = reservedSearchParamsFromUrl();\n for (const [key, value] of Object.entries(filters)) {\n if (value !== \"\") search.set(key, value);\n }\n const query = search.toString();\n const next = `${window.location.pathname}${query ? `?${query}` : \"\"}${window.location.hash}`;\n if (\n next !==\n `${window.location.pathname}${window.location.search}${window.location.hash}`\n ) {\n window.history.replaceState(window.history.state, \"\", next);\n }\n}\n\nfunction reservedSearchParamsFromUrl() {\n const current = new URLSearchParams(window.location.search);\n const next = new URLSearchParams();\n for (const [key, value] of current.entries()) {\n if (!key.startsWith(\"__\")) continue;\n if (key === \"__autoRun\" || key.startsWith(\"__arg\")) continue;\n next.append(key, value);\n }\n return next;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OperationCatalog.js","sources":["../../src/rpc/OperationCatalog.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { keepPreviousData, useQuery } from \"@tanstack/react-query\";\nimport { filterOperationsByDomain } from \"./classify\";\nimport {\n filterOperationsBySurface,\n findSurfaceCollectionActions,\n findSurfaceDetailOperation,\n findSurfaceListOperation,\n getOperationClickyMeta,\n} from \"./clickyMetadata\";\nimport type {\n ClickyCommandRuntime,\n ClickyDownloadOptions,\n ClickyRemoteFormat,\n} from \"../data/Clicky\";\nimport { EndpointList, type RenderLink } from \"./EndpointList\";\nimport { OperationActionBar } from \"./OperationActionBar\";\nimport {\n OperationResultView,\n type ResultRenderer,\n} from \"./OperationResultView\";\nimport { type FormActionsRenderer } from \"./SchemaActionForm\";\nimport {\n applyFilterExtensions,\n type FilterExtension,\n} from \"../components/filter-bar-utils\";\nimport type {\n PreExtension,\n PostExtension,\n} from \"../components/json-schema-form-types\";\nimport {\n type DomainDefinition,\n type ExecutionResponse,\n type OperationLookupResponse,\n type ResolvedOperation,\n} from \"./types\";\nimport { useOperations, type OperationsApiClient } from \"./useOperations\";\nimport {\n dataTablePaginationFromForm,\n packParameterValues,\n parametersToFormConfig,\n type ParameterFormOptions,\n} from \"./formMetadata\";\n\nexport type OperationCatalogProps = {\n definition: DomainDefinition;\n entities: string[];\n client: OperationsApiClient;\n renderLink: RenderLink;\n // Override to return all operations (e.g. for an \"API explorer\" domain\n // that shouldn't be filtered by entity tags).\n allOperations?: boolean;\n surfaceKey?: string;\n // Domain-specific filter decorators (e.g. stamp an entity icon by filter\n // name). Composed in array order; mirrors JsonSchemaForm's `pre`.\n filterPre?: FilterExtension[];\n getCommandHref?: (operationId: string, op: ResolvedOperation) => string;\n renderError?: (err: unknown, title: string) => ReactNode;\n commandRuntime?: ClickyCommandRuntime;\n // Custom JsonSchemaForm field extensions forwarded to the create/edit form.\n formPre?: PreExtension[];\n formPost?: PostExtension[];\n // Optional extra footer actions for the create/edit form (e.g. a connection\n // \"Test\" button).\n formActions?: FormActionsRenderer;\n actionLabels?: Record<string, string>;\n // Optional host override for the result surface, keyed off the current surface.\n // Receives the default OperationResultView so non-overridden surfaces render\n // unchanged.\n resultRenderer?: ResultRenderer;\n /**\n * Portal target for the collection action bar (Create, bulk actions). When\n * set, the bar renders into this element — typically an app shell's\n * `bodyActions` slot — instead of inline under the catalog header.\n *\n * A portal rather than a render-prop because the bar owns its own dialog\n * state and closes over the catalog's live filters and list query; moving the\n * element would sever both. Falls back to inline rendering when null, so\n * existing consumers are unaffected.\n */\n actionsContainer?: Element | null;\n};\n\nconst defaultCommandHref = (operationId: string) => `/commands/${operationId}`;\n\nfunction defaultRenderError(err: unknown, title: string) {\n const message = err instanceof Error ? err.message : String(err ?? \"\");\n return (\n <div className=\"rounded-xl border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive\">\n <div className=\"font-medium\">{title}</div>\n {message && (\n <div className=\"mt-1 whitespace-pre-wrap text-xs opacity-80\">\n {message}\n </div>\n )}\n </div>\n );\n}\n\nexport function OperationCatalog({\n definition,\n entities,\n client,\n renderLink,\n allOperations = false,\n surfaceKey,\n filterPre,\n getCommandHref = defaultCommandHref,\n renderError = defaultRenderError,\n commandRuntime,\n formPre,\n formPost,\n formActions,\n actionLabels,\n resultRenderer,\n actionsContainer,\n}: OperationCatalogProps) {\n const { operations, isLoading } = useOperations(client);\n\n const surfaceOps = useMemo(\n () => filterOperationsBySurface(operations, surfaceKey),\n [operations, surfaceKey],\n );\n const useSurfaceMetadata = surfaceOps.length > 0;\n\n // domainOps are the operations scoped to this domain: a surface's operations\n // when surfaceKey resolves, otherwise the entity-tagged operations — used only\n // to render the generic operation-page fallback, never to guess a table.\n const domainOps = useMemo(() => {\n if (useSurfaceMetadata) return surfaceOps;\n return allOperations\n ? operations\n : filterOperationsByDomain(operations, entities);\n }, [allOperations, entities, operations, surfaceOps, useSurfaceMetadata]);\n\n // The list table is driven solely by x-clicky surface metadata. Without a\n // surface there is no authoritative list op, so listEndpoint stays undefined\n // and the catalog renders the generic EndpointList fallback instead of\n // guessing a table from operationId/path conventions.\n const listEndpoint = useMemo(() => {\n if (!useSurfaceMetadata) return undefined;\n return findSurfaceListOperation(domainOps, surfaceKey);\n }, [domainOps, surfaceKey, useSurfaceMetadata]);\n // The detail op turns each list row into a link to /<surface>/<id>; absent it\n // (no surface metadata) rows stay non-navigable.\n const detailOperation = useMemo(\n () =>\n useSurfaceMetadata\n ? findSurfaceDetailOperation(domainOps, surfaceKey)\n : undefined,\n [domainOps, surfaceKey, useSurfaceMetadata],\n );\n const [filters, setFilters] = useState<Record<string, string>>(() =>\n readFiltersFromUrl(),\n );\n const listParameters = listEndpoint?.operation.parameters ?? [];\n const download = useMemo<ClickyDownloadOptions | undefined>(() => {\n const meta = listEndpoint?.operation[\"x-clicky\"]?.export;\n if (!meta) return undefined;\n return {\n label: definition.title,\n ...(meta.formats\n ? { formats: meta.formats as ClickyRemoteFormat[] }\n : {}),\n ...(meta.scopes ? { scopes: meta.scopes } : {}),\n ...(meta.allRowsMode ? { allRowsMode: meta.allRowsMode } : {}),\n ...(meta.formatMaxRows\n ? {\n formatMaxRows: meta.formatMaxRows as Partial<\n Record<ClickyRemoteFormat, number>\n >,\n }\n : {}),\n };\n }, [definition.title, listEndpoint]);\n\n useEffect(() => {\n writeFiltersToUrl(filters);\n }, [filters]);\n\n const listQuery = useQuery<ExecutionResponse>({\n queryKey: [\n \"operation-list\",\n listEndpoint?.method,\n listEndpoint?.path,\n filters,\n ],\n queryFn: () =>\n client.executeCommand(\n listEndpoint!.path,\n listEndpoint!.method,\n packParameterValues(filters, listEndpoint!.operation.parameters ?? []),\n {\n Accept: \"application/json+clicky\",\n },\n ),\n enabled: !!listEndpoint,\n placeholderData: keepPreviousData,\n staleTime: 30_000,\n retry: 0,\n });\n\n const lookupQuery = useQuery<OperationLookupResponse>({\n queryKey: [\n \"operation-lookup\",\n listEndpoint?.method,\n listEndpoint?.path,\n filters,\n ],\n queryFn: async () =>\n (await client.lookupFilters?.(\n listEndpoint!.path,\n listEndpoint!.method,\n packParameterValues(filters, listParameters),\n { Accept: \"application/json+clicky\" },\n )) ?? { filters: {} },\n enabled: !!listEndpoint && !!client.lookupFilters,\n staleTime: 30_000,\n retry: 0,\n });\n\n // The list action bar shows only collection-scoped actions (create + bulk\n // actions that operate on the filtered set). Entity-scoped actions\n // (update/delete and per-id custom actions) need an {id}, so they live on the\n // detail page (OperationEntityPage) instead. In the generic fallback the\n // EndpointList already exposes every operation as a runnable card, so there is\n // no separate action bar to guess at.\n const actionOps = useMemo(\n () =>\n useSurfaceMetadata\n ? findSurfaceCollectionActions(domainOps, surfaceKey)\n : [],\n [domainOps, surfaceKey, useSurfaceMetadata],\n );\n\n const filterBarConfig = useMemo(() => {\n const options: ParameterFormOptions = {\n includeLocations: [\"query\"],\n };\n if (lookupQuery.data != null) {\n options.lookup = lookupQuery.data;\n }\n return parametersToFormConfig(listParameters, filters, setFilters, options);\n }, [filters, listParameters, lookupQuery.data]);\n const dataTablePagination = useMemo(\n () =>\n dataTablePaginationFromForm(filterBarConfig.pagination, listQuery.data),\n [filterBarConfig.pagination, listQuery.data],\n );\n const decoratedFilters = useMemo(\n () =>\n filterBarConfig.filters.map((filter) =>\n applyFilterExtensions(filter, filterPre),\n ),\n [filterBarConfig.filters, filterPre],\n );\n\n const showTable = !!listEndpoint;\n let listError: unknown;\n if (!listQuery.isFetching) {\n if (listQuery.isError) {\n listError = listQuery.error;\n } else if (listQuery.data?.success === false) {\n listError = new Error(\n listQuery.data.error ||\n listQuery.data.message ||\n listQuery.data.stderr ||\n `Command failed with exit code ${listQuery.data.exit_code}`,\n );\n }\n }\n const tableError =\n listError !== undefined\n ? renderError(\n listError,\n `Failed to load ${listEndpoint?.path ?? \"\"}`,\n )\n : undefined;\n const tableResponse =\n listQuery.data?.success === false ? null : (listQuery.data ?? null);\n // Lock the current list filters into a bulk action (supportsFilterMode), so a\n // collection action like \"pause\" runs against the same set the table shows.\n // Entity-scoped actions never reach here (they live on the detail page).\n function getActionLockedValues(\n op: ResolvedOperation,\n ): Record<string, string> {\n const meta = getOperationClickyMeta(op);\n if (meta == null || !meta.supportsFilterMode) {\n return {};\n }\n\n const locked: Record<string, string> = {};\n for (const param of op.operation.parameters ?? []) {\n const value = filters[param.name];\n if (param.in === \"query\" && value) {\n locked[param.name] = value;\n }\n }\n\n if (meta.idParam) {\n locked[meta.idParam] = \"all\";\n }\n\n if (\n (op.operation.parameters ?? []).some((param) => param.name === \"filter\")\n ) {\n locked.filter =\n Object.entries(filters)\n .filter(([, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join(\", \") || \"current list filters\";\n }\n\n return locked;\n }\n\n if (isLoading) {\n return (\n <div className=\"space-y-3\">\n <SkeletonBlock className=\"h-10 w-72\" />\n <SkeletonBlock className=\"h-4 w-[32rem]\" />\n {Array.from({ length: 5 }).map((_, i) => (\n <SkeletonBlock key={i} className=\"h-12\" />\n ))}\n </div>\n );\n }\n\n const actionBar = (\n <OperationActionBar\n actions={actionOps}\n client={client}\n getLockedValues={getActionLockedValues}\n onExecuted={() => void listQuery.refetch()}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(formPre ? { formPre } : {})}\n {...(formPost ? { formPost } : {})}\n {...(formActions ? { formActions } : {})}\n {...(actionLabels ? { actionLabels } : {})}\n />\n );\n\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-2\"\n data-slot=\"operation-catalog\"\n >\n {/* No title/description here by design: page headers and breadcrumbs are\n the host's to define (e.g. an app shell's bodyHeader), so the catalog\n never invents chrome the consumer would have to fight or duplicate. */}\n {actionsContainer ? createPortal(actionBar, actionsContainer) : actionBar}\n\n {showTable ? (\n <div\n className=\"min-h-0 flex-1\"\n data-slot=\"operation-catalog-results\"\n >\n {(() => {\n const defaultView = (\n <OperationResultView\n response={tableResponse}\n loading={listQuery.isFetching}\n loadingMessage={`Loading ${definition.title} results…`}\n emptyMessage=\"No records returned\"\n ariaLabel={`${definition.title} results`}\n className=\"mt-0 h-full min-h-0\"\n detailOperation={detailOperation}\n filterConfig={{\n filters: decoratedFilters,\n ...(filterBarConfig.search\n ? { search: filterBarConfig.search }\n : {}),\n ...(filterBarConfig.timeRange\n ? { timeRange: filterBarConfig.timeRange }\n : {}),\n }}\n {...(tableError ? { error: tableError } : {})}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(dataTablePagination\n ? { pagination: dataTablePagination }\n : {})}\n {...(download ? { download } : {})}\n />\n );\n return resultRenderer\n ? resultRenderer({\n response: listQuery.data ?? null,\n defaultView,\n ...(surfaceKey ? { surfaceKey } : {}),\n })\n : defaultView;\n })()}\n </div>\n ) : (\n <EndpointList\n operations={domainOps}\n definition={definition}\n renderLink={renderLink}\n getCommandHref={getCommandHref}\n />\n )}\n </div>\n );\n}\n\nfunction readFiltersFromUrl(): Record<string, string> {\n if (typeof window === \"undefined\") return {};\n const search = new URLSearchParams(window.location.search);\n const values: Record<string, string> = {};\n for (const [key, value] of search.entries()) {\n if (key.startsWith(\"__\")) continue;\n if (value !== \"\") values[key] = value;\n }\n return values;\n}\n\nfunction SkeletonBlock({ className }: { className?: string }) {\n return (\n <div\n className={`animate-pulse rounded-md bg-muted ${className ?? \"\"}`.trim()}\n />\n );\n}\n\nfunction writeFiltersToUrl(filters: Record<string, string>) {\n if (typeof window === \"undefined\") return;\n const search = reservedSearchParamsFromUrl();\n for (const [key, value] of Object.entries(filters)) {\n if (value !== \"\") search.set(key, value);\n }\n const query = search.toString();\n const next = `${window.location.pathname}${query ? `?${query}` : \"\"}${window.location.hash}`;\n if (\n next !==\n `${window.location.pathname}${window.location.search}${window.location.hash}`\n ) {\n window.history.replaceState(window.history.state, \"\", next);\n }\n}\n\nfunction reservedSearchParamsFromUrl() {\n const current = new URLSearchParams(window.location.search);\n const next = new URLSearchParams();\n for (const [key, value] of current.entries()) {\n if (!key.startsWith(\"__\")) continue;\n if (key === \"__autoRun\" || key.startsWith(\"__arg\")) continue;\n next.append(key, value);\n }\n return next;\n}\n"],"names":["_a"],"mappings":"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"}
@@ -1,10 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
+ const DataTable = require("../data/DataTable.cjs");
5
+ const utils = require("../lib/utils.cjs");
4
6
  const ExecutionResult = require("./ExecutionResult.cjs");
5
7
  const rowNavigation = require("./rowNavigation.cjs");
8
+ const ERROR_RESULT_COLUMNS = [
9
+ {
10
+ key: "error",
11
+ label: "Error",
12
+ grow: true,
13
+ sortable: false,
14
+ resizable: false,
15
+ hideable: false
16
+ }
17
+ ];
6
18
  function OperationResultView({
7
19
  response,
20
+ error,
8
21
  loading,
9
22
  loadingMessage,
10
23
  emptyMessage,
@@ -18,6 +31,35 @@ function OperationResultView({
18
31
  }) {
19
32
  const rowNav = rowNavigation.useRowDetailNavigation(detailOperation);
20
33
  const filters = filterConfig == null ? void 0 : filterConfig.filters;
34
+ if (error != null) {
35
+ return /* @__PURE__ */ jsxRuntime.jsx(
36
+ "div",
37
+ {
38
+ role: ariaLabel ? "region" : void 0,
39
+ "aria-label": ariaLabel,
40
+ className: utils.cn("mt-3 flex min-h-0 flex-col", className),
41
+ children: /* @__PURE__ */ jsxRuntime.jsx(
42
+ DataTable.DataTable,
43
+ {
44
+ data: [],
45
+ columns: ERROR_RESULT_COLUMNS,
46
+ error,
47
+ className: "h-full",
48
+ showGlobalFilter: false,
49
+ showDensityControl: false,
50
+ hideableColumns: false,
51
+ resizableColumns: false,
52
+ persistColumnWidths: false,
53
+ persistColumnVisibility: false,
54
+ persistDensity: false,
55
+ ...filters && filters.length > 0 ? { externalFilters: filters } : {},
56
+ ...(filterConfig == null ? void 0 : filterConfig.search) ? { externalSearch: filterConfig.search } : {},
57
+ ...(filterConfig == null ? void 0 : filterConfig.timeRange) ? { externalTimeRange: filterConfig.timeRange } : {}
58
+ }
59
+ )
60
+ }
61
+ );
62
+ }
21
63
  return /* @__PURE__ */ jsxRuntime.jsx(
22
64
  ExecutionResult.ExecutionResult,
23
65
  {
@@ -1 +1 @@
1
- {"version":3,"file":"OperationResultView.cjs","sources":["../../src/rpc/OperationResultView.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type {\n FilterBarFilter,\n FilterBarRangeProps,\n FilterBarSearchProps,\n} from \"../components/FilterBar\";\nimport type { DataTablePagination } from \"../data/DataTable\";\nimport type {\n ClickyCommandRuntime,\n ClickyDownloadOptions,\n} from \"../data/Clicky\";\nimport { ExecutionResult } from \"./ExecutionResult\";\nimport { useRowDetailNavigation } from \"./rowNavigation\";\nimport type { ExecutionResponse, ResolvedOperation } from \"./types\";\n\n// ResultRenderContext is handed to a host-supplied resultRenderer so it can\n// replace the default result surface for selected entities (e.g. render a\n// LogsTable for trace/log profiles). `defaultView` is the standard\n// OperationResultView element; return it unchanged to keep the default.\nexport type ResultRenderContext = {\n surfaceKey?: string;\n response: ExecutionResponse | null;\n defaultView: ReactNode;\n};\n\n// ResultRenderer lets the host app swap the result presentation per surface. It\n// receives the current surface key, the raw response, and the default view, and\n// returns whatever node should render in its place.\nexport type ResultRenderer = (ctx: ResultRenderContext) => ReactNode;\n\n// In-table filter inputs for the result table — mirrors what\n// parametersToFormConfig produces, surfaced through the DataTable's own\n// FilterBar so the filter UI renders identically on every result surface.\nexport type OperationResultFilterConfig = {\n filters?: FilterBarFilter[];\n search?: FilterBarSearchProps;\n timeRange?: FilterBarRangeProps;\n};\n\nexport type OperationResultViewProps = {\n response: ExecutionResponse | null;\n loading?: boolean;\n loadingMessage?: string;\n emptyMessage?: string;\n ariaLabel?: string;\n className?: string;\n commandRuntime?: ClickyCommandRuntime;\n // When set, rows navigate to the entity detail page (/<surface>/<id>).\n detailOperation?: ResolvedOperation | undefined;\n filterConfig?: OperationResultFilterConfig;\n pagination?: DataTablePagination;\n download?: ClickyDownloadOptions;\n};\n\n// OperationResultView is the single result surface rendered by both the entity\n// list catalog and the operation runner. It renders the clicky result table\n// with its in-table FilterBar, the View/Download menu (automatic via the\n// response's requestUrl), pagination, and row→detail navigation — so the\n// surface looks and behaves identically wherever a result is shown.\nexport function OperationResultView({\n response,\n loading,\n loadingMessage,\n emptyMessage,\n ariaLabel,\n className,\n commandRuntime,\n detailOperation,\n filterConfig,\n pagination,\n download,\n}: OperationResultViewProps) {\n const rowNav = useRowDetailNavigation(detailOperation);\n const filters = filterConfig?.filters;\n\n return (\n <ExecutionResult\n response={response}\n {...(loading !== undefined ? { loading } : {})}\n {...(loadingMessage ? { loadingMessage } : {})}\n {...(emptyMessage ? { emptyMessage } : {})}\n {...(ariaLabel ? { ariaLabel } : {})}\n {...(className ? { className } : {})}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(detailOperation\n ? {\n getTableRowHref: rowNav.getRowHref,\n onTableRowClick: rowNav.onRowClick,\n isTableRowClickable: rowNav.isRowClickable,\n }\n : {})}\n {...(filters && filters.length > 0 ? { externalFilters: filters } : {})}\n {...(filterConfig?.search ? { search: filterConfig.search } : {})}\n {...(filterConfig?.timeRange\n ? { timeRange: filterConfig.timeRange }\n : {})}\n {...(pagination ? { pagination } : {})}\n {...(download ? { download } : {})}\n />\n );\n}\n"],"names":["useRowDetailNavigation","jsx","ExecutionResult"],"mappings":";;;;;AA2DO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA6B;AAC3B,QAAM,SAASA,cAAAA,uBAAuB,eAAe;AACrD,QAAM,UAAU,6CAAc;AAE9B,SACEC,2BAAAA;AAAAA,IAACC,gBAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACC,GAAI,YAAY,SAAY,EAAE,QAAA,IAAY,CAAA;AAAA,MAC1C,GAAI,iBAAiB,EAAE,eAAA,IAAmB,CAAA;AAAA,MAC1C,GAAI,eAAe,EAAE,aAAA,IAAiB,CAAA;AAAA,MACtC,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,MAChC,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,MAChC,GAAI,iBAAiB,EAAE,eAAA,IAAmB,CAAA;AAAA,MAC1C,GAAI,kBACD;AAAA,QACE,iBAAiB,OAAO;AAAA,QACxB,iBAAiB,OAAO;AAAA,QACxB,qBAAqB,OAAO;AAAA,MAAA,IAE9B,CAAA;AAAA,MACH,GAAI,WAAW,QAAQ,SAAS,IAAI,EAAE,iBAAiB,QAAA,IAAY,CAAA;AAAA,MACnE,IAAI,6CAAc,UAAS,EAAE,QAAQ,aAAa,OAAA,IAAW,CAAA;AAAA,MAC7D,IAAI,6CAAc,aACf,EAAE,WAAW,aAAa,UAAA,IAC1B,CAAA;AAAA,MACH,GAAI,aAAa,EAAE,WAAA,IAAe,CAAA;AAAA,MAClC,GAAI,WAAW,EAAE,aAAa,CAAA;AAAA,IAAC;AAAA,EAAA;AAGtC;;"}
1
+ {"version":3,"file":"OperationResultView.cjs","sources":["../../src/rpc/OperationResultView.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type {\n FilterBarFilter,\n FilterBarRangeProps,\n FilterBarSearchProps,\n} from \"../components/FilterBar\";\nimport {\n DataTable,\n type DataTableColumn,\n type DataTablePagination,\n} from \"../data/DataTable\";\nimport type {\n ClickyCommandRuntime,\n ClickyDownloadOptions,\n} from \"../data/Clicky\";\nimport { cn } from \"../lib/utils\";\nimport { ExecutionResult } from \"./ExecutionResult\";\nimport { useRowDetailNavigation } from \"./rowNavigation\";\nimport type { ExecutionResponse, ResolvedOperation } from \"./types\";\n\n// ResultRenderContext is handed to a host-supplied resultRenderer so it can\n// replace the default result surface for selected entities (e.g. render a\n// LogsTable for trace/log profiles). `defaultView` is the standard\n// OperationResultView element; return it unchanged to keep the default.\nexport type ResultRenderContext = {\n surfaceKey?: string;\n response: ExecutionResponse | null;\n defaultView: ReactNode;\n};\n\n// ResultRenderer lets the host app swap the result presentation per surface. It\n// receives the current surface key, the raw response, and the default view, and\n// returns whatever node should render in its place.\nexport type ResultRenderer = (ctx: ResultRenderContext) => ReactNode;\n\n// In-table filter inputs for the result table — mirrors what\n// parametersToFormConfig produces, surfaced through the DataTable's own\n// FilterBar so the filter UI renders identically on every result surface.\nexport type OperationResultFilterConfig = {\n filters?: FilterBarFilter[];\n search?: FilterBarSearchProps;\n timeRange?: FilterBarRangeProps;\n};\n\nexport type OperationResultViewProps = {\n response: ExecutionResponse | null;\n error?: ReactNode;\n loading?: boolean;\n loadingMessage?: string;\n emptyMessage?: string;\n ariaLabel?: string;\n className?: string;\n commandRuntime?: ClickyCommandRuntime;\n // When set, rows navigate to the entity detail page (/<surface>/<id>).\n detailOperation?: ResolvedOperation | undefined;\n filterConfig?: OperationResultFilterConfig;\n pagination?: DataTablePagination;\n download?: ClickyDownloadOptions;\n};\n\ntype ErrorResultRow = {\n error: string;\n};\n\nconst ERROR_RESULT_COLUMNS: DataTableColumn<ErrorResultRow>[] = [\n {\n key: \"error\",\n label: \"Error\",\n grow: true,\n sortable: false,\n resizable: false,\n hideable: false,\n },\n];\n\n// OperationResultView is the single result surface rendered by both the entity\n// list catalog and the operation runner. It renders the clicky result table\n// with its in-table FilterBar, the View/Download menu (automatic via the\n// response's requestUrl), pagination, and row→detail navigation — so the\n// surface looks and behaves identically wherever a result is shown.\nexport function OperationResultView({\n response,\n error,\n loading,\n loadingMessage,\n emptyMessage,\n ariaLabel,\n className,\n commandRuntime,\n detailOperation,\n filterConfig,\n pagination,\n download,\n}: OperationResultViewProps) {\n const rowNav = useRowDetailNavigation(detailOperation);\n const filters = filterConfig?.filters;\n\n if (error != null) {\n return (\n <div\n role={ariaLabel ? \"region\" : undefined}\n aria-label={ariaLabel}\n className={cn(\"mt-3 flex min-h-0 flex-col\", className)}\n >\n <DataTable<ErrorResultRow>\n data={[]}\n columns={ERROR_RESULT_COLUMNS}\n error={error}\n className=\"h-full\"\n showGlobalFilter={false}\n showDensityControl={false}\n hideableColumns={false}\n resizableColumns={false}\n persistColumnWidths={false}\n persistColumnVisibility={false}\n persistDensity={false}\n {...(filters && filters.length > 0\n ? { externalFilters: filters }\n : {})}\n {...(filterConfig?.search\n ? { externalSearch: filterConfig.search }\n : {})}\n {...(filterConfig?.timeRange\n ? { externalTimeRange: filterConfig.timeRange }\n : {})}\n />\n </div>\n );\n }\n\n return (\n <ExecutionResult\n response={response}\n {...(loading !== undefined ? { loading } : {})}\n {...(loadingMessage ? { loadingMessage } : {})}\n {...(emptyMessage ? { emptyMessage } : {})}\n {...(ariaLabel ? { ariaLabel } : {})}\n {...(className ? { className } : {})}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(detailOperation\n ? {\n getTableRowHref: rowNav.getRowHref,\n onTableRowClick: rowNav.onRowClick,\n isTableRowClickable: rowNav.isRowClickable,\n }\n : {})}\n {...(filters && filters.length > 0 ? { externalFilters: filters } : {})}\n {...(filterConfig?.search ? { search: filterConfig.search } : {})}\n {...(filterConfig?.timeRange\n ? { timeRange: filterConfig.timeRange }\n : {})}\n {...(pagination ? { pagination } : {})}\n {...(download ? { download } : {})}\n />\n );\n}\n"],"names":["useRowDetailNavigation","jsx","cn","DataTable","ExecutionResult"],"mappings":";;;;;;;AAgEA,MAAM,uBAA0D;AAAA,EAC9D;AAAA,IACE,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,EAAA;AAEd;AAOO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA6B;AAC3B,QAAM,SAASA,cAAAA,uBAAuB,eAAe;AACrD,QAAM,UAAU,6CAAc;AAE9B,MAAI,SAAS,MAAM;AACjB,WACEC,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAM,YAAY,WAAW;AAAA,QAC7B,cAAY;AAAA,QACZ,WAAWC,MAAAA,GAAG,8BAA8B,SAAS;AAAA,QAErD,UAAAD,2BAAAA;AAAAA,UAACE,UAAAA;AAAAA,UAAA;AAAA,YACC,MAAM,CAAA;AAAA,YACN,SAAS;AAAA,YACT;AAAA,YACA,WAAU;AAAA,YACV,kBAAkB;AAAA,YAClB,oBAAoB;AAAA,YACpB,iBAAiB;AAAA,YACjB,kBAAkB;AAAA,YAClB,qBAAqB;AAAA,YACrB,yBAAyB;AAAA,YACzB,gBAAgB;AAAA,YACf,GAAI,WAAW,QAAQ,SAAS,IAC7B,EAAE,iBAAiB,QAAA,IACnB,CAAA;AAAA,YACH,IAAI,6CAAc,UACf,EAAE,gBAAgB,aAAa,OAAA,IAC/B,CAAA;AAAA,YACH,IAAI,6CAAc,aACf,EAAE,mBAAmB,aAAa,UAAA,IAClC,CAAA;AAAA,UAAC;AAAA,QAAA;AAAA,MACP;AAAA,IAAA;AAAA,EAGN;AAEA,SACEF,2BAAAA;AAAAA,IAACG,gBAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACC,GAAI,YAAY,SAAY,EAAE,QAAA,IAAY,CAAA;AAAA,MAC1C,GAAI,iBAAiB,EAAE,eAAA,IAAmB,CAAA;AAAA,MAC1C,GAAI,eAAe,EAAE,aAAA,IAAiB,CAAA;AAAA,MACtC,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,MAChC,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,MAChC,GAAI,iBAAiB,EAAE,eAAA,IAAmB,CAAA;AAAA,MAC1C,GAAI,kBACD;AAAA,QACE,iBAAiB,OAAO;AAAA,QACxB,iBAAiB,OAAO;AAAA,QACxB,qBAAqB,OAAO;AAAA,MAAA,IAE9B,CAAA;AAAA,MACH,GAAI,WAAW,QAAQ,SAAS,IAAI,EAAE,iBAAiB,QAAA,IAAY,CAAA;AAAA,MACnE,IAAI,6CAAc,UAAS,EAAE,QAAQ,aAAa,OAAA,IAAW,CAAA;AAAA,MAC7D,IAAI,6CAAc,aACf,EAAE,WAAW,aAAa,UAAA,IAC1B,CAAA;AAAA,MACH,GAAI,aAAa,EAAE,WAAA,IAAe,CAAA;AAAA,MAClC,GAAI,WAAW,EAAE,aAAa,CAAA;AAAA,IAAC;AAAA,EAAA;AAGtC;;"}
@@ -16,6 +16,7 @@ export type OperationResultFilterConfig = {
16
16
  };
17
17
  export type OperationResultViewProps = {
18
18
  response: ExecutionResponse | null;
19
+ error?: ReactNode;
19
20
  loading?: boolean;
20
21
  loadingMessage?: string;
21
22
  emptyMessage?: string;
@@ -27,5 +28,5 @@ export type OperationResultViewProps = {
27
28
  pagination?: DataTablePagination;
28
29
  download?: ClickyDownloadOptions;
29
30
  };
30
- export declare function OperationResultView({ response, loading, loadingMessage, emptyMessage, ariaLabel, className, commandRuntime, detailOperation, filterConfig, pagination, download, }: OperationResultViewProps): import("react/jsx-runtime").JSX.Element;
31
+ export declare function OperationResultView({ response, error, loading, loadingMessage, emptyMessage, ariaLabel, className, commandRuntime, detailOperation, filterConfig, pagination, download, }: OperationResultViewProps): import("react/jsx-runtime").JSX.Element;
31
32
  //# sourceMappingURL=OperationResultView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OperationResultView.d.ts","sourceRoot":"","sources":["../../src/rpc/OperationResultView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAMpE,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,WAAW,EAAE,SAAS,CAAC;CACxB,CAAC;AAKF,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,mBAAmB,KAAK,SAAS,CAAC;AAKrE,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,SAAS,CAAC,EAAE,mBAAmB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,oBAAoB,CAAC;IAEtC,eAAe,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAChD,YAAY,CAAC,EAAE,2BAA2B,CAAC;IAC3C,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAOF,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,OAAO,EACP,cAAc,EACd,YAAY,EACZ,SAAS,EACT,SAAS,EACT,cAAc,EACd,eAAe,EACf,YAAY,EACZ,UAAU,EACV,QAAQ,GACT,EAAE,wBAAwB,2CA6B1B"}
1
+ {"version":3,"file":"OperationResultView.d.ts","sourceRoot":"","sources":["../../src/rpc/OperationResultView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAMpE,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,WAAW,EAAE,SAAS,CAAC;CACxB,CAAC;AAKF,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,mBAAmB,KAAK,SAAS,CAAC;AAKrE,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,SAAS,CAAC,EAAE,mBAAmB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,oBAAoB,CAAC;IAEtC,eAAe,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAChD,YAAY,CAAC,EAAE,2BAA2B,CAAC;IAC3C,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAsBF,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,KAAK,EACL,OAAO,EACP,cAAc,EACd,YAAY,EACZ,SAAS,EACT,SAAS,EACT,cAAc,EACd,eAAe,EACf,YAAY,EACZ,UAAU,EACV,QAAQ,GACT,EAAE,wBAAwB,2CA8D1B"}