@flanksource/clicky-ui 0.3.17 → 0.3.18

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 (822) hide show
  1. package/dist/ai.cjs +12 -6
  2. package/dist/ai.cjs.map +1 -1
  3. package/dist/ai.js +10 -4
  4. package/dist/ai.js.map +1 -1
  5. package/dist/chat.cjs +36 -0
  6. package/dist/chat.cjs.map +1 -1
  7. package/dist/chat.js +37 -1
  8. package/dist/chat.js.map +1 -1
  9. package/dist/components/Combobox.cjs +122 -153
  10. package/dist/components/Combobox.cjs.map +1 -1
  11. package/dist/components/Combobox.d.ts.map +1 -1
  12. package/dist/components/Combobox.js +124 -155
  13. package/dist/components/Combobox.js.map +1 -1
  14. package/dist/components/ComboboxControl.cjs +145 -0
  15. package/dist/components/ComboboxControl.cjs.map +1 -0
  16. package/dist/components/ComboboxControl.d.ts +37 -0
  17. package/dist/components/ComboboxControl.d.ts.map +1 -0
  18. package/dist/components/ComboboxControl.js +145 -0
  19. package/dist/components/ComboboxControl.js.map +1 -0
  20. package/dist/components/ComboboxMenu.cjs +31 -14
  21. package/dist/components/ComboboxMenu.cjs.map +1 -1
  22. package/dist/components/ComboboxMenu.d.ts.map +1 -1
  23. package/dist/components/ComboboxMenu.js +31 -14
  24. package/dist/components/ComboboxMenu.js.map +1 -1
  25. package/dist/components/ComboboxTags.cjs +40 -0
  26. package/dist/components/ComboboxTags.cjs.map +1 -0
  27. package/dist/components/ComboboxTags.d.ts +8 -0
  28. package/dist/components/ComboboxTags.d.ts.map +1 -0
  29. package/dist/components/ComboboxTags.js +40 -0
  30. package/dist/components/ComboboxTags.js.map +1 -0
  31. package/dist/components/ErrorWrapper.cjs +168 -0
  32. package/dist/components/ErrorWrapper.cjs.map +1 -0
  33. package/dist/components/ErrorWrapper.d.ts +19 -0
  34. package/dist/components/ErrorWrapper.d.ts.map +1 -0
  35. package/dist/components/ErrorWrapper.js +168 -0
  36. package/dist/components/ErrorWrapper.js.map +1 -0
  37. package/dist/components/FilterBar.cjs +64 -2
  38. package/dist/components/FilterBar.cjs.map +1 -1
  39. package/dist/components/FilterBar.d.ts +18 -1
  40. package/dist/components/FilterBar.d.ts.map +1 -1
  41. package/dist/components/FilterBar.js +64 -2
  42. package/dist/components/FilterBar.js.map +1 -1
  43. package/dist/components/JSONPathField.cjs +91 -0
  44. package/dist/components/JSONPathField.cjs.map +1 -0
  45. package/dist/components/JSONPathField.d.ts +19 -0
  46. package/dist/components/JSONPathField.d.ts.map +1 -0
  47. package/dist/components/JSONPathField.js +91 -0
  48. package/dist/components/JSONPathField.js.map +1 -0
  49. package/dist/components/JsonSchemaForm.cjs +8 -4
  50. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  51. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  52. package/dist/components/JsonSchemaForm.js +8 -4
  53. package/dist/components/JsonSchemaForm.js.map +1 -1
  54. package/dist/components/TreePickerField.cjs +22 -4
  55. package/dist/components/TreePickerField.cjs.map +1 -1
  56. package/dist/components/TreePickerField.d.ts +22 -2
  57. package/dist/components/TreePickerField.d.ts.map +1 -1
  58. package/dist/components/TreePickerField.js +22 -4
  59. package/dist/components/TreePickerField.js.map +1 -1
  60. package/dist/components/TriStateToggle.cjs +53 -0
  61. package/dist/components/TriStateToggle.cjs.map +1 -0
  62. package/dist/components/TriStateToggle.d.ts +27 -0
  63. package/dist/components/TriStateToggle.d.ts.map +1 -0
  64. package/dist/components/TriStateToggle.js +53 -0
  65. package/dist/components/TriStateToggle.js.map +1 -0
  66. package/dist/components/combobox-types.d.ts +16 -1
  67. package/dist/components/combobox-types.d.ts.map +1 -1
  68. package/dist/components/combobox-utils.cjs +26 -0
  69. package/dist/components/combobox-utils.cjs.map +1 -1
  70. package/dist/components/combobox-utils.d.ts +10 -0
  71. package/dist/components/combobox-utils.d.ts.map +1 -1
  72. package/dist/components/combobox-utils.js +26 -0
  73. package/dist/components/combobox-utils.js.map +1 -1
  74. package/dist/components/filter-bar-utils.cjs +5 -0
  75. package/dist/components/filter-bar-utils.cjs.map +1 -1
  76. package/dist/components/filter-bar-utils.d.ts.map +1 -1
  77. package/dist/components/filter-bar-utils.js +5 -0
  78. package/dist/components/filter-bar-utils.js.map +1 -1
  79. package/dist/components/json-schema-form-accordion-array.cjs +290 -0
  80. package/dist/components/json-schema-form-accordion-array.cjs.map +1 -0
  81. package/dist/components/json-schema-form-accordion-array.d.ts +7 -0
  82. package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -0
  83. package/dist/components/json-schema-form-accordion-array.js +290 -0
  84. package/dist/components/json-schema-form-accordion-array.js.map +1 -0
  85. package/dist/components/json-schema-form-array.cjs +99 -110
  86. package/dist/components/json-schema-form-array.cjs.map +1 -1
  87. package/dist/components/json-schema-form-array.d.ts +1 -1
  88. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  89. package/dist/components/json-schema-form-array.js +98 -109
  90. package/dist/components/json-schema-form-array.js.map +1 -1
  91. package/dist/components/json-schema-form-error-display.cjs +4 -2
  92. package/dist/components/json-schema-form-error-display.cjs.map +1 -1
  93. package/dist/components/json-schema-form-error-display.d.ts +4 -2
  94. package/dist/components/json-schema-form-error-display.d.ts.map +1 -1
  95. package/dist/components/json-schema-form-error-display.js +4 -2
  96. package/dist/components/json-schema-form-error-display.js.map +1 -1
  97. package/dist/components/json-schema-form-extensions.cjs +10 -0
  98. package/dist/components/json-schema-form-extensions.cjs.map +1 -0
  99. package/dist/components/json-schema-form-extensions.d.ts +8 -0
  100. package/dist/components/json-schema-form-extensions.d.ts.map +1 -0
  101. package/dist/components/json-schema-form-extensions.js +10 -0
  102. package/dist/components/json-schema-form-extensions.js.map +1 -0
  103. package/dist/components/json-schema-form-fields.cjs +25 -101
  104. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  105. package/dist/components/json-schema-form-fields.d.ts +1 -32
  106. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  107. package/dist/components/json-schema-form-fields.js +28 -104
  108. package/dist/components/json-schema-form-fields.js.map +1 -1
  109. package/dist/components/json-schema-form-item-summary.cjs +131 -0
  110. package/dist/components/json-schema-form-item-summary.cjs.map +1 -0
  111. package/dist/components/json-schema-form-item-summary.d.ts +13 -0
  112. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -0
  113. package/dist/components/json-schema-form-item-summary.js +131 -0
  114. package/dist/components/json-schema-form-item-summary.js.map +1 -0
  115. package/dist/components/json-schema-form-layout.cjs +156 -0
  116. package/dist/components/json-schema-form-layout.cjs.map +1 -0
  117. package/dist/components/json-schema-form-layout.d.ts +43 -0
  118. package/dist/components/json-schema-form-layout.d.ts.map +1 -0
  119. package/dist/components/json-schema-form-layout.js +156 -0
  120. package/dist/components/json-schema-form-layout.js.map +1 -0
  121. package/dist/components/json-schema-form-lookup-tree.cjs +149 -0
  122. package/dist/components/json-schema-form-lookup-tree.cjs.map +1 -0
  123. package/dist/components/json-schema-form-lookup-tree.d.ts +22 -0
  124. package/dist/components/json-schema-form-lookup-tree.d.ts.map +1 -0
  125. package/dist/components/json-schema-form-lookup-tree.js +149 -0
  126. package/dist/components/json-schema-form-lookup-tree.js.map +1 -0
  127. package/dist/components/json-schema-form-object.cjs +11 -4
  128. package/dist/components/json-schema-form-object.cjs.map +1 -1
  129. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  130. package/dist/components/json-schema-form-object.js +11 -4
  131. package/dist/components/json-schema-form-object.js.map +1 -1
  132. package/dist/components/json-schema-form-render.cjs +51 -28
  133. package/dist/components/json-schema-form-render.cjs.map +1 -1
  134. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  135. package/dist/components/json-schema-form-render.js +51 -28
  136. package/dist/components/json-schema-form-render.js.map +1 -1
  137. package/dist/components/json-schema-form-resolve.cjs +62 -13
  138. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  139. package/dist/components/json-schema-form-resolve.d.ts +1 -0
  140. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  141. package/dist/components/json-schema-form-resolve.js +62 -13
  142. package/dist/components/json-schema-form-resolve.js.map +1 -1
  143. package/dist/components/json-schema-form-table-array.cjs +123 -0
  144. package/dist/components/json-schema-form-table-array.cjs.map +1 -0
  145. package/dist/components/json-schema-form-table-array.d.ts +7 -0
  146. package/dist/components/json-schema-form-table-array.d.ts.map +1 -0
  147. package/dist/components/json-schema-form-table-array.js +123 -0
  148. package/dist/components/json-schema-form-table-array.js.map +1 -0
  149. package/dist/components/json-schema-form-tone.cjs +34 -0
  150. package/dist/components/json-schema-form-tone.cjs.map +1 -0
  151. package/dist/components/json-schema-form-tone.d.ts +8 -0
  152. package/dist/components/json-schema-form-tone.d.ts.map +1 -0
  153. package/dist/components/json-schema-form-tone.js +34 -0
  154. package/dist/components/json-schema-form-tone.js.map +1 -0
  155. package/dist/components/json-schema-form-types.d.ts +79 -10
  156. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  157. package/dist/components/json-schema-form-utils.cjs +47 -4
  158. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  159. package/dist/components/json-schema-form-utils.d.ts +19 -4
  160. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  161. package/dist/components/json-schema-form-utils.js +47 -4
  162. package/dist/components/json-schema-form-utils.js.map +1 -1
  163. package/dist/components/tri-state.cjs +8 -0
  164. package/dist/components/tri-state.cjs.map +1 -0
  165. package/dist/components/tri-state.d.ts +5 -0
  166. package/dist/components/tri-state.d.ts.map +1 -0
  167. package/dist/components/tri-state.js +8 -0
  168. package/dist/components/tri-state.js.map +1 -0
  169. package/dist/components/useComboboxLayout.cjs +59 -0
  170. package/dist/components/useComboboxLayout.cjs.map +1 -0
  171. package/dist/components/useComboboxLayout.d.ts +5 -0
  172. package/dist/components/useComboboxLayout.d.ts.map +1 -0
  173. package/dist/components/useComboboxLayout.js +59 -0
  174. package/dist/components/useComboboxLayout.js.map +1 -0
  175. package/dist/components.cjs +21 -0
  176. package/dist/components.cjs.map +1 -1
  177. package/dist/components.d.ts +14 -4
  178. package/dist/components.d.ts.map +1 -1
  179. package/dist/components.js +22 -1
  180. package/dist/components.js.map +1 -1
  181. package/dist/data/Clicky.cjs +51 -2
  182. package/dist/data/Clicky.cjs.map +1 -1
  183. package/dist/data/Clicky.d.ts +10 -1
  184. package/dist/data/Clicky.d.ts.map +1 -1
  185. package/dist/data/Clicky.js +51 -2
  186. package/dist/data/Clicky.js.map +1 -1
  187. package/dist/data/DataTable.cjs +185 -53
  188. package/dist/data/DataTable.cjs.map +1 -1
  189. package/dist/data/DataTable.d.ts +63 -3
  190. package/dist/data/DataTable.d.ts.map +1 -1
  191. package/dist/data/DataTable.js +185 -53
  192. package/dist/data/DataTable.js.map +1 -1
  193. package/dist/data/LogsTable.cjs +10 -1
  194. package/dist/data/LogsTable.cjs.map +1 -1
  195. package/dist/data/LogsTable.d.ts +3 -1
  196. package/dist/data/LogsTable.d.ts.map +1 -1
  197. package/dist/data/LogsTable.js +10 -1
  198. package/dist/data/LogsTable.js.map +1 -1
  199. package/dist/data/TaskManager.cjs +99 -14
  200. package/dist/data/TaskManager.cjs.map +1 -1
  201. package/dist/data/TaskManager.d.ts.map +1 -1
  202. package/dist/data/TaskManager.js +100 -15
  203. package/dist/data/TaskManager.js.map +1 -1
  204. package/dist/data/TaskProgress.cjs +50 -11
  205. package/dist/data/TaskProgress.cjs.map +1 -1
  206. package/dist/data/TaskProgress.d.ts +2 -1
  207. package/dist/data/TaskProgress.d.ts.map +1 -1
  208. package/dist/data/TaskProgress.js +50 -11
  209. package/dist/data/TaskProgress.js.map +1 -1
  210. package/dist/data/ai/AdvancedChatConfig.cjs +289 -0
  211. package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -0
  212. package/dist/data/ai/AdvancedChatConfig.d.ts +21 -0
  213. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -0
  214. package/dist/data/ai/AdvancedChatConfig.js +289 -0
  215. package/dist/data/ai/AdvancedChatConfig.js.map +1 -0
  216. package/dist/data/ai/AdvancedCostsPanel.cjs +120 -0
  217. package/dist/data/ai/AdvancedCostsPanel.cjs.map +1 -0
  218. package/dist/data/ai/AdvancedCostsPanel.d.ts +16 -0
  219. package/dist/data/ai/AdvancedCostsPanel.d.ts.map +1 -0
  220. package/dist/data/ai/AdvancedCostsPanel.js +120 -0
  221. package/dist/data/ai/AdvancedCostsPanel.js.map +1 -0
  222. package/dist/data/ai/ChatWindow.catalogs.cjs +74 -0
  223. package/dist/data/ai/ChatWindow.catalogs.cjs.map +1 -0
  224. package/dist/data/ai/ChatWindow.catalogs.d.ts +16 -0
  225. package/dist/data/ai/ChatWindow.catalogs.d.ts.map +1 -0
  226. package/dist/data/ai/ChatWindow.catalogs.js +74 -0
  227. package/dist/data/ai/ChatWindow.catalogs.js.map +1 -0
  228. package/dist/data/ai/ChatWindow.cjs +78 -100
  229. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  230. package/dist/data/ai/ChatWindow.d.ts +1 -1
  231. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  232. package/dist/data/ai/ChatWindow.js +80 -102
  233. package/dist/data/ai/ChatWindow.js.map +1 -1
  234. package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -1
  235. package/dist/data/ai/ChatWindow.preferences.d.ts +2 -4
  236. package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -1
  237. package/dist/data/ai/ChatWindow.preferences.js.map +1 -1
  238. package/dist/data/ai/ChatWindow.runtime.cjs +120 -0
  239. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -0
  240. package/dist/data/ai/ChatWindow.runtime.d.ts +20 -0
  241. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -0
  242. package/dist/data/ai/ChatWindow.runtime.js +120 -0
  243. package/dist/data/ai/ChatWindow.runtime.js.map +1 -0
  244. package/dist/data/ai/ChatWindow.thread.cjs +1 -1
  245. package/dist/data/ai/ChatWindow.thread.cjs.map +1 -1
  246. package/dist/data/ai/ChatWindow.thread.js +1 -1
  247. package/dist/data/ai/ChatWindow.thread.js.map +1 -1
  248. package/dist/data/ai/ChatWindow.tool-catalog.cjs +20 -0
  249. package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -1
  250. package/dist/data/ai/ChatWindow.tool-catalog.d.ts +17 -1
  251. package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -1
  252. package/dist/data/ai/ChatWindow.tool-catalog.js +20 -0
  253. package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -1
  254. package/dist/data/ai/ChatWindow.types.d.ts +13 -5
  255. package/dist/data/ai/ChatWindow.types.d.ts.map +1 -1
  256. package/dist/data/ai/ChatWindowManager.cjs +3 -1
  257. package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
  258. package/dist/data/ai/ChatWindowManager.d.ts.map +1 -1
  259. package/dist/data/ai/ChatWindowManager.js +3 -1
  260. package/dist/data/ai/ChatWindowManager.js.map +1 -1
  261. package/dist/data/ai/PromptPicker/PromptPicker.cjs +1 -1
  262. package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
  263. package/dist/data/ai/PromptPicker/PromptPicker.d.ts +1 -1
  264. package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -1
  265. package/dist/data/ai/PromptPicker/PromptPicker.js +1 -1
  266. package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
  267. package/dist/data/ai/PromptRunEditor/index.cjs +2 -2
  268. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  269. package/dist/data/ai/PromptRunEditor/index.d.ts +1 -1
  270. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  271. package/dist/data/ai/PromptRunEditor/index.js +2 -2
  272. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  273. package/dist/data/ai/RuntimeModePicker.cjs +1 -1
  274. package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
  275. package/dist/data/ai/RuntimeModePicker.d.ts +1 -1
  276. package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
  277. package/dist/data/ai/RuntimeModePicker.js +1 -1
  278. package/dist/data/ai/RuntimeModePicker.js.map +1 -1
  279. package/dist/data/ai/SessionInspector.files.cjs +26 -43
  280. package/dist/data/ai/SessionInspector.files.cjs.map +1 -1
  281. package/dist/data/ai/SessionInspector.files.d.ts.map +1 -1
  282. package/dist/data/ai/SessionInspector.files.js +26 -43
  283. package/dist/data/ai/SessionInspector.files.js.map +1 -1
  284. package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
  285. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
  286. package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
  287. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
  288. package/dist/data/ai/SessionInspector.model.cjs +1 -1
  289. package/dist/data/ai/SessionInspector.model.cjs.map +1 -1
  290. package/dist/data/ai/SessionInspector.model.js +1 -1
  291. package/dist/data/ai/SessionInspector.model.js.map +1 -1
  292. package/dist/data/ai/SessionViewer.rows.cjs +4 -16
  293. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  294. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  295. package/dist/data/ai/SessionViewer.rows.js +4 -16
  296. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  297. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +12 -3
  298. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
  299. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +1 -1
  300. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
  301. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +12 -3
  302. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
  303. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
  304. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +1 -1
  305. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
  306. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
  307. package/dist/data/ai/SpecRuntimeEditor/fields.js +1 -1
  308. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  309. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +2 -2
  310. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  311. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  312. package/dist/data/ai/ThreadPicker.cjs +65 -3
  313. package/dist/data/ai/ThreadPicker.cjs.map +1 -1
  314. package/dist/data/ai/ThreadPicker.d.ts +11 -5
  315. package/dist/data/ai/ThreadPicker.d.ts.map +1 -1
  316. package/dist/data/ai/ThreadPicker.js +65 -3
  317. package/dist/data/ai/ThreadPicker.js.map +1 -1
  318. package/dist/data/ai/ToolPreferences.cjs +65 -685
  319. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  320. package/dist/data/ai/ToolPreferences.d.ts +15 -17
  321. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  322. package/dist/data/ai/ToolPreferences.js +64 -683
  323. package/dist/data/ai/ToolPreferences.js.map +1 -1
  324. package/dist/data/ai/ToolPreferences.model.cjs +148 -0
  325. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -0
  326. package/dist/data/ai/ToolPreferences.model.d.ts +31 -0
  327. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -0
  328. package/dist/data/ai/ToolPreferences.model.js +148 -0
  329. package/dist/data/ai/ToolPreferences.model.js.map +1 -0
  330. package/dist/data/ai/ToolPreferencesList.cjs +270 -0
  331. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -0
  332. package/dist/data/ai/ToolPreferencesList.d.ts +18 -0
  333. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -0
  334. package/dist/data/ai/ToolPreferencesList.js +270 -0
  335. package/dist/data/ai/ToolPreferencesList.js.map +1 -0
  336. package/dist/data/ai/agent-action-icons.cjs.map +1 -1
  337. package/dist/data/ai/agent-action-icons.js.map +1 -1
  338. package/dist/data/ai/chat-window-context.cjs +4 -1
  339. package/dist/data/ai/chat-window-context.cjs.map +1 -1
  340. package/dist/data/ai/chat-window-context.d.ts +7 -0
  341. package/dist/data/ai/chat-window-context.d.ts.map +1 -1
  342. package/dist/data/ai/chat-window-context.js +4 -1
  343. package/dist/data/ai/chat-window-context.js.map +1 -1
  344. package/dist/data/ai/index.d.ts +6 -3
  345. package/dist/data/ai/index.d.ts.map +1 -1
  346. package/dist/data/ai/session-tones.cjs +67 -0
  347. package/dist/data/ai/session-tones.cjs.map +1 -0
  348. package/dist/data/ai/session-tones.d.ts +34 -0
  349. package/dist/data/ai/session-tones.d.ts.map +1 -0
  350. package/dist/data/ai/session-tones.js +67 -0
  351. package/dist/data/ai/session-tones.js.map +1 -0
  352. package/dist/data/ai/thread-costs.cjs +39 -0
  353. package/dist/data/ai/thread-costs.cjs.map +1 -0
  354. package/dist/data/ai/thread-costs.d.ts +62 -0
  355. package/dist/data/ai/thread-costs.d.ts.map +1 -0
  356. package/dist/data/ai/thread-costs.js +39 -0
  357. package/dist/data/ai/thread-costs.js.map +1 -0
  358. package/dist/data/cells/CellFilterActions.cjs +68 -0
  359. package/dist/data/cells/CellFilterActions.cjs.map +1 -0
  360. package/dist/data/cells/CellFilterActions.d.ts +15 -0
  361. package/dist/data/cells/CellFilterActions.d.ts.map +1 -0
  362. package/dist/data/cells/CellFilterActions.js +68 -0
  363. package/dist/data/cells/CellFilterActions.js.map +1 -0
  364. package/dist/data/chat/Chat.cjs +156 -113
  365. package/dist/data/chat/Chat.cjs.map +1 -1
  366. package/dist/data/chat/Chat.d.ts +24 -7
  367. package/dist/data/chat/Chat.d.ts.map +1 -1
  368. package/dist/data/chat/Chat.fixtures.cjs +48 -3
  369. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  370. package/dist/data/chat/Chat.fixtures.d.ts +1 -1
  371. package/dist/data/chat/Chat.fixtures.d.ts.map +1 -1
  372. package/dist/data/chat/Chat.fixtures.js +48 -3
  373. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  374. package/dist/data/chat/Chat.js +160 -117
  375. package/dist/data/chat/Chat.js.map +1 -1
  376. package/dist/data/chat/Chat.runtime.cjs +63 -0
  377. package/dist/data/chat/Chat.runtime.cjs.map +1 -0
  378. package/dist/data/chat/Chat.runtime.d.ts +16 -0
  379. package/dist/data/chat/Chat.runtime.d.ts.map +1 -0
  380. package/dist/data/chat/Chat.runtime.js +63 -0
  381. package/dist/data/chat/Chat.runtime.js.map +1 -0
  382. package/dist/data/chat/ChatRuntimeToolbar.cjs +62 -0
  383. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -0
  384. package/dist/data/chat/ChatRuntimeToolbar.d.ts +14 -0
  385. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -0
  386. package/dist/data/chat/ChatRuntimeToolbar.js +62 -0
  387. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -0
  388. package/dist/data/chat/ToolCall.cjs +86 -24
  389. package/dist/data/chat/ToolCall.cjs.map +1 -1
  390. package/dist/data/chat/ToolCall.d.ts +12 -5
  391. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  392. package/dist/data/chat/ToolCall.js +86 -24
  393. package/dist/data/chat/ToolCall.js.map +1 -1
  394. package/dist/data/chat/approval.cjs +49 -6
  395. package/dist/data/chat/approval.cjs.map +1 -1
  396. package/dist/data/chat/approval.d.ts +11 -4
  397. package/dist/data/chat/approval.d.ts.map +1 -1
  398. package/dist/data/chat/approval.js +49 -6
  399. package/dist/data/chat/approval.js.map +1 -1
  400. package/dist/data/chat/index.d.ts +5 -3
  401. package/dist/data/chat/index.d.ts.map +1 -1
  402. package/dist/data/chat/tool-render/ToolArgs.cjs +50 -0
  403. package/dist/data/chat/tool-render/ToolArgs.cjs.map +1 -0
  404. package/dist/data/chat/tool-render/ToolArgs.d.ts +7 -0
  405. package/dist/data/chat/tool-render/ToolArgs.d.ts.map +1 -0
  406. package/dist/data/chat/tool-render/ToolArgs.js +50 -0
  407. package/dist/data/chat/tool-render/ToolArgs.js.map +1 -0
  408. package/dist/data/chat/tool-render/ToolParams.cjs +155 -0
  409. package/dist/data/chat/tool-render/ToolParams.cjs.map +1 -0
  410. package/dist/data/chat/tool-render/ToolParams.d.ts +20 -0
  411. package/dist/data/chat/tool-render/ToolParams.d.ts.map +1 -0
  412. package/dist/data/chat/tool-render/ToolParams.js +155 -0
  413. package/dist/data/chat/tool-render/ToolParams.js.map +1 -0
  414. package/dist/data/chat/tool-render/ToolValue.cjs +140 -0
  415. package/dist/data/chat/tool-render/ToolValue.cjs.map +1 -0
  416. package/dist/data/chat/tool-render/ToolValue.d.ts +16 -0
  417. package/dist/data/chat/tool-render/ToolValue.d.ts.map +1 -0
  418. package/dist/data/chat/tool-render/ToolValue.js +140 -0
  419. package/dist/data/chat/tool-render/ToolValue.js.map +1 -0
  420. package/dist/data/chat/tool-render/adapter.cjs +48 -0
  421. package/dist/data/chat/tool-render/adapter.cjs.map +1 -0
  422. package/dist/data/chat/tool-render/adapter.d.ts +57 -0
  423. package/dist/data/chat/tool-render/adapter.d.ts.map +1 -0
  424. package/dist/data/chat/tool-render/adapter.js +48 -0
  425. package/dist/data/chat/tool-render/adapter.js.map +1 -0
  426. package/dist/data/chat/tool-render/context.cjs +16 -0
  427. package/dist/data/chat/tool-render/context.cjs.map +1 -0
  428. package/dist/data/chat/tool-render/context.d.ts +6 -0
  429. package/dist/data/chat/tool-render/context.d.ts.map +1 -0
  430. package/dist/data/chat/tool-render/context.js +16 -0
  431. package/dist/data/chat/tool-render/context.js.map +1 -0
  432. package/dist/data/chat/tool-render/defaults.cjs +45 -0
  433. package/dist/data/chat/tool-render/defaults.cjs.map +1 -0
  434. package/dist/data/chat/tool-render/defaults.d.ts +11 -0
  435. package/dist/data/chat/tool-render/defaults.d.ts.map +1 -0
  436. package/dist/data/chat/tool-render/defaults.js +45 -0
  437. package/dist/data/chat/tool-render/defaults.js.map +1 -0
  438. package/dist/data/chat/tool-render/index.d.ts +13 -0
  439. package/dist/data/chat/tool-render/index.d.ts.map +1 -0
  440. package/dist/data/chat/tool-render/known-tool-views.cjs +208 -0
  441. package/dist/data/chat/tool-render/known-tool-views.cjs.map +1 -0
  442. package/dist/data/chat/tool-render/known-tool-views.d.ts +10 -0
  443. package/dist/data/chat/tool-render/known-tool-views.d.ts.map +1 -0
  444. package/dist/data/chat/tool-render/known-tool-views.js +208 -0
  445. package/dist/data/chat/tool-render/known-tool-views.js.map +1 -0
  446. package/dist/data/chat/tool-render/known-tools.cjs +58 -0
  447. package/dist/data/chat/tool-render/known-tools.cjs.map +1 -0
  448. package/dist/data/chat/tool-render/known-tools.d.ts +4 -0
  449. package/dist/data/chat/tool-render/known-tools.d.ts.map +1 -0
  450. package/dist/data/chat/tool-render/known-tools.js +58 -0
  451. package/dist/data/chat/tool-render/known-tools.js.map +1 -0
  452. package/dist/data/chat/tool-render/normalize.cjs +42 -0
  453. package/dist/data/chat/tool-render/normalize.cjs.map +1 -0
  454. package/dist/data/chat/tool-render/normalize.d.ts +13 -0
  455. package/dist/data/chat/tool-render/normalize.d.ts.map +1 -0
  456. package/dist/data/chat/tool-render/normalize.js +42 -0
  457. package/dist/data/chat/tool-render/normalize.js.map +1 -0
  458. package/dist/data/chat/tool-render/registry.cjs +14 -0
  459. package/dist/data/chat/tool-render/registry.cjs.map +1 -0
  460. package/dist/data/chat/tool-render/registry.d.ts +7 -0
  461. package/dist/data/chat/tool-render/registry.d.ts.map +1 -0
  462. package/dist/data/chat/tool-render/registry.js +14 -0
  463. package/dist/data/chat/tool-render/registry.js.map +1 -0
  464. package/dist/data/chat/tool-render/schema.cjs +57 -0
  465. package/dist/data/chat/tool-render/schema.cjs.map +1 -0
  466. package/dist/data/chat/tool-render/schema.d.ts +28 -0
  467. package/dist/data/chat/tool-render/schema.d.ts.map +1 -0
  468. package/dist/data/chat/tool-render/schema.js +57 -0
  469. package/dist/data/chat/tool-render/schema.js.map +1 -0
  470. package/dist/data/chat/tool-render/shape.cjs +94 -0
  471. package/dist/data/chat/tool-render/shape.cjs.map +1 -0
  472. package/dist/data/chat/tool-render/shape.d.ts +39 -0
  473. package/dist/data/chat/tool-render/shape.d.ts.map +1 -0
  474. package/dist/data/chat/tool-render/shape.js +94 -0
  475. package/dist/data/chat/tool-render/shape.js.map +1 -0
  476. package/dist/data/chat/tool-render/summary.cjs +34 -0
  477. package/dist/data/chat/tool-render/summary.cjs.map +1 -0
  478. package/dist/data/chat/tool-render/summary.d.ts +8 -0
  479. package/dist/data/chat/tool-render/summary.d.ts.map +1 -0
  480. package/dist/data/chat/tool-render/summary.js +34 -0
  481. package/dist/data/chat/tool-render/summary.js.map +1 -0
  482. package/dist/data/chat/types.cjs.map +1 -1
  483. package/dist/data/chat/types.d.ts +7 -0
  484. package/dist/data/chat/types.d.ts.map +1 -1
  485. package/dist/data/chat/types.js.map +1 -1
  486. package/dist/data/chat/usage-snapshot.cjs +17 -0
  487. package/dist/data/chat/usage-snapshot.cjs.map +1 -0
  488. package/dist/data/chat/usage-snapshot.d.ts +21 -0
  489. package/dist/data/chat/usage-snapshot.d.ts.map +1 -0
  490. package/dist/data/chat/usage-snapshot.js +17 -0
  491. package/dist/data/chat/usage-snapshot.js.map +1 -0
  492. package/dist/data/data-table-filter-values.cjs +83 -0
  493. package/dist/data/data-table-filter-values.cjs.map +1 -0
  494. package/dist/data/data-table-filter-values.d.ts +18 -0
  495. package/dist/data/data-table-filter-values.d.ts.map +1 -0
  496. package/dist/data/data-table-filter-values.js +83 -0
  497. package/dist/data/data-table-filter-values.js.map +1 -0
  498. package/dist/data/data-table-server-filters.cjs +171 -0
  499. package/dist/data/data-table-server-filters.cjs.map +1 -0
  500. package/dist/data/data-table-server-filters.d.ts +128 -0
  501. package/dist/data/data-table-server-filters.d.ts.map +1 -0
  502. package/dist/data/data-table-server-filters.js +171 -0
  503. package/dist/data/data-table-server-filters.js.map +1 -0
  504. package/dist/data/query-browser/QueryBrowser.cjs +96 -19
  505. package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
  506. package/dist/data/query-browser/QueryBrowser.d.ts +37 -6
  507. package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
  508. package/dist/data/query-browser/QueryBrowser.js +96 -19
  509. package/dist/data/query-browser/QueryBrowser.js.map +1 -1
  510. package/dist/data/query-browser/index.d.ts +1 -1
  511. package/dist/data/query-browser/index.d.ts.map +1 -1
  512. package/dist/data/runtime/ProviderStatusPanel.cjs +187 -0
  513. package/dist/data/runtime/ProviderStatusPanel.cjs.map +1 -0
  514. package/dist/data/runtime/ProviderStatusPanel.d.ts +10 -0
  515. package/dist/data/runtime/ProviderStatusPanel.d.ts.map +1 -0
  516. package/dist/data/runtime/ProviderStatusPanel.js +187 -0
  517. package/dist/data/runtime/ProviderStatusPanel.js.map +1 -0
  518. package/dist/data/runtime/RuntimeBar.cjs +147 -0
  519. package/dist/data/runtime/RuntimeBar.cjs.map +1 -0
  520. package/dist/data/{ai → runtime}/RuntimeBar.d.ts +8 -6
  521. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -0
  522. package/dist/data/runtime/RuntimeBar.js +147 -0
  523. package/dist/data/runtime/RuntimeBar.js.map +1 -0
  524. package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -0
  525. package/dist/data/{ai → runtime}/RuntimeBar.model.d.ts +2 -2
  526. package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -0
  527. package/dist/data/runtime/RuntimeBar.model.js.map +1 -0
  528. package/dist/data/{ai → runtime}/RuntimeBarCombo.cjs +25 -30
  529. package/dist/data/runtime/RuntimeBarCombo.cjs.map +1 -0
  530. package/dist/data/{ai → runtime}/RuntimeBarCombo.d.ts +4 -3
  531. package/dist/data/runtime/RuntimeBarCombo.d.ts.map +1 -0
  532. package/dist/data/{ai → runtime}/RuntimeBarCombo.js +25 -30
  533. package/dist/data/runtime/RuntimeBarCombo.js.map +1 -0
  534. package/dist/data/{ai/RuntimeBar.cjs → runtime/RuntimeBarSegments.cjs} +54 -120
  535. package/dist/data/runtime/RuntimeBarSegments.cjs.map +1 -0
  536. package/dist/data/runtime/RuntimeBarSegments.d.ts +25 -0
  537. package/dist/data/runtime/RuntimeBarSegments.d.ts.map +1 -0
  538. package/dist/data/{ai/RuntimeBar.js → runtime/RuntimeBarSegments.js} +58 -124
  539. package/dist/data/runtime/RuntimeBarSegments.js.map +1 -0
  540. package/dist/data/runtime/availability.cjs +11 -0
  541. package/dist/data/runtime/availability.cjs.map +1 -0
  542. package/dist/data/runtime/availability.d.ts +6 -0
  543. package/dist/data/runtime/availability.d.ts.map +1 -0
  544. package/dist/data/runtime/availability.js +11 -0
  545. package/dist/data/runtime/availability.js.map +1 -0
  546. package/dist/data/runtime/model-capabilities.cjs.map +1 -0
  547. package/dist/data/runtime/model-capabilities.d.ts.map +1 -0
  548. package/dist/data/runtime/model-capabilities.js.map +1 -0
  549. package/dist/data/runtime/provider-status.cjs +106 -0
  550. package/dist/data/runtime/provider-status.cjs.map +1 -0
  551. package/dist/data/runtime/provider-status.d.ts +24 -0
  552. package/dist/data/runtime/provider-status.d.ts.map +1 -0
  553. package/dist/data/runtime/provider-status.js +106 -0
  554. package/dist/data/runtime/provider-status.js.map +1 -0
  555. package/dist/data/{ai → runtime}/runtime-mode.cjs +119 -27
  556. package/dist/data/runtime/runtime-mode.cjs.map +1 -0
  557. package/dist/data/{ai → runtime}/runtime-mode.d.ts +7 -1
  558. package/dist/data/runtime/runtime-mode.d.ts.map +1 -0
  559. package/dist/data/{ai → runtime}/runtime-mode.js +120 -28
  560. package/dist/data/runtime/runtime-mode.js.map +1 -0
  561. package/dist/data/task-query-keys.cjs +26 -0
  562. package/dist/data/task-query-keys.cjs.map +1 -0
  563. package/dist/data/task-query-keys.d.ts +27 -0
  564. package/dist/data/task-query-keys.d.ts.map +1 -0
  565. package/dist/data/task-query-keys.js +26 -0
  566. package/dist/data/task-query-keys.js.map +1 -0
  567. package/dist/data/version-info.cjs +3 -3
  568. package/dist/data/version-info.js +3 -3
  569. package/dist/data.cjs +16 -0
  570. package/dist/data.cjs.map +1 -1
  571. package/dist/data.d.ts +6 -2
  572. package/dist/data.d.ts.map +1 -1
  573. package/dist/data.js +16 -0
  574. package/dist/data.js.map +1 -1
  575. package/dist/hooks/use-hotkey.cjs +6 -1
  576. package/dist/hooks/use-hotkey.cjs.map +1 -1
  577. package/dist/hooks/use-hotkey.d.ts.map +1 -1
  578. package/dist/hooks/use-hotkey.js +6 -1
  579. package/dist/hooks/use-hotkey.js.map +1 -1
  580. package/dist/hooks/use-task-run.cjs +7 -4
  581. package/dist/hooks/use-task-run.cjs.map +1 -1
  582. package/dist/hooks/use-task-run.d.ts +12 -0
  583. package/dist/hooks/use-task-run.d.ts.map +1 -1
  584. package/dist/hooks/use-task-run.js +7 -4
  585. package/dist/hooks/use-task-run.js.map +1 -1
  586. package/dist/icons/index.d.ts +1 -0
  587. package/dist/icons/index.d.ts.map +1 -1
  588. package/dist/icons/registry.cjs +692 -0
  589. package/dist/icons/registry.cjs.map +1 -0
  590. package/dist/icons/registry.d.ts +21 -0
  591. package/dist/icons/registry.d.ts.map +1 -0
  592. package/dist/icons/registry.js +692 -0
  593. package/dist/icons/registry.js.map +1 -0
  594. package/dist/icons.cjs +3 -0
  595. package/dist/icons.cjs.map +1 -1
  596. package/dist/icons.js +4 -1
  597. package/dist/icons.js.map +1 -1
  598. package/dist/index.cjs +47 -0
  599. package/dist/index.cjs.map +1 -1
  600. package/dist/index.js +49 -2
  601. package/dist/index.js.map +1 -1
  602. package/dist/layout/AppShell.cjs +92 -56
  603. package/dist/layout/AppShell.cjs.map +1 -1
  604. package/dist/layout/AppShell.d.ts +49 -1
  605. package/dist/layout/AppShell.d.ts.map +1 -1
  606. package/dist/layout/AppShell.js +92 -56
  607. package/dist/layout/AppShell.js.map +1 -1
  608. package/dist/layout/AppShell.nav.cjs +144 -19
  609. package/dist/layout/AppShell.nav.cjs.map +1 -1
  610. package/dist/layout/AppShell.nav.d.ts +6 -1
  611. package/dist/layout/AppShell.nav.d.ts.map +1 -1
  612. package/dist/layout/AppShell.nav.js +144 -19
  613. package/dist/layout/AppShell.nav.js.map +1 -1
  614. package/dist/layout/SplitPane.cjs +23 -7
  615. package/dist/layout/SplitPane.cjs.map +1 -1
  616. package/dist/layout/SplitPane.d.ts +3 -1
  617. package/dist/layout/SplitPane.d.ts.map +1 -1
  618. package/dist/layout/SplitPane.js +23 -7
  619. package/dist/layout/SplitPane.js.map +1 -1
  620. package/dist/lib/format.cjs +86 -4
  621. package/dist/lib/format.cjs.map +1 -1
  622. package/dist/lib/format.d.ts +69 -0
  623. package/dist/lib/format.d.ts.map +1 -1
  624. package/dist/lib/format.js +86 -4
  625. package/dist/lib/format.js.map +1 -1
  626. package/dist/lib/path-tree.cjs +69 -0
  627. package/dist/lib/path-tree.cjs.map +1 -0
  628. package/dist/lib/path-tree.d.ts +54 -0
  629. package/dist/lib/path-tree.d.ts.map +1 -0
  630. package/dist/lib/path-tree.js +69 -0
  631. package/dist/lib/path-tree.js.map +1 -0
  632. package/dist/monaco.d.ts +1 -0
  633. package/dist/monaco.d.ts.map +1 -1
  634. package/dist/overlay/DropdownMenuSubmenu.cjs +13 -7
  635. package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
  636. package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -1
  637. package/dist/overlay/DropdownMenuSubmenu.js +13 -7
  638. package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
  639. package/dist/overlay/Tour.cjs +173 -0
  640. package/dist/overlay/Tour.cjs.map +1 -0
  641. package/dist/overlay/Tour.d.ts +61 -0
  642. package/dist/overlay/Tour.d.ts.map +1 -0
  643. package/dist/overlay/Tour.js +173 -0
  644. package/dist/overlay/Tour.js.map +1 -0
  645. package/dist/overlay/TourCard.cjs +108 -0
  646. package/dist/overlay/TourCard.cjs.map +1 -0
  647. package/dist/overlay/TourCard.d.ts +23 -0
  648. package/dist/overlay/TourCard.d.ts.map +1 -0
  649. package/dist/overlay/TourCard.js +108 -0
  650. package/dist/overlay/TourCard.js.map +1 -0
  651. package/dist/overlay/TourProvider.cjs +160 -0
  652. package/dist/overlay/TourProvider.cjs.map +1 -0
  653. package/dist/overlay/TourProvider.d.ts +31 -0
  654. package/dist/overlay/TourProvider.d.ts.map +1 -0
  655. package/dist/overlay/TourProvider.js +160 -0
  656. package/dist/overlay/TourProvider.js.map +1 -0
  657. package/dist/overlay/TourSpotlight.cjs +47 -0
  658. package/dist/overlay/TourSpotlight.cjs.map +1 -0
  659. package/dist/overlay/TourSpotlight.d.ts +12 -0
  660. package/dist/overlay/TourSpotlight.d.ts.map +1 -0
  661. package/dist/overlay/TourSpotlight.js +47 -0
  662. package/dist/overlay/TourSpotlight.js.map +1 -0
  663. package/dist/overlay/modalStack.cjs +18 -4
  664. package/dist/overlay/modalStack.cjs.map +1 -1
  665. package/dist/overlay/modalStack.d.ts +10 -2
  666. package/dist/overlay/modalStack.d.ts.map +1 -1
  667. package/dist/overlay/modalStack.js +19 -5
  668. package/dist/overlay/modalStack.js.map +1 -1
  669. package/dist/overlay/tour-anchor.cjs +114 -0
  670. package/dist/overlay/tour-anchor.cjs.map +1 -0
  671. package/dist/overlay/tour-anchor.d.ts +30 -0
  672. package/dist/overlay/tour-anchor.d.ts.map +1 -0
  673. package/dist/overlay/tour-anchor.js +114 -0
  674. package/dist/overlay/tour-anchor.js.map +1 -0
  675. package/dist/overlay/tour-context.cjs +12 -0
  676. package/dist/overlay/tour-context.cjs.map +1 -0
  677. package/dist/overlay/tour-context.d.ts +40 -0
  678. package/dist/overlay/tour-context.d.ts.map +1 -0
  679. package/dist/overlay/tour-context.js +12 -0
  680. package/dist/overlay/tour-context.js.map +1 -0
  681. package/dist/overlay/tour-geometry.cjs +65 -0
  682. package/dist/overlay/tour-geometry.cjs.map +1 -0
  683. package/dist/overlay/tour-geometry.d.ts +47 -0
  684. package/dist/overlay/tour-geometry.d.ts.map +1 -0
  685. package/dist/overlay/tour-geometry.js +65 -0
  686. package/dist/overlay/tour-geometry.js.map +1 -0
  687. package/dist/overlay/tour-model.cjs +79 -0
  688. package/dist/overlay/tour-model.cjs.map +1 -0
  689. package/dist/overlay/tour-model.d.ts +29 -0
  690. package/dist/overlay/tour-model.d.ts.map +1 -0
  691. package/dist/overlay/tour-model.js +79 -0
  692. package/dist/overlay/tour-model.js.map +1 -0
  693. package/dist/overlay/tour-progress.cjs +54 -0
  694. package/dist/overlay/tour-progress.cjs.map +1 -0
  695. package/dist/overlay/tour-progress.d.ts +40 -0
  696. package/dist/overlay/tour-progress.d.ts.map +1 -0
  697. package/dist/overlay/tour-progress.js +54 -0
  698. package/dist/overlay/tour-progress.js.map +1 -0
  699. package/dist/overlay/tour-types.d.ts +144 -0
  700. package/dist/overlay/tour-types.d.ts.map +1 -0
  701. package/dist/overlay/use-tour-anchor.cjs +43 -0
  702. package/dist/overlay/use-tour-anchor.cjs.map +1 -0
  703. package/dist/overlay/use-tour-anchor.d.ts +23 -0
  704. package/dist/overlay/use-tour-anchor.d.ts.map +1 -0
  705. package/dist/overlay/use-tour-anchor.js +43 -0
  706. package/dist/overlay/use-tour-anchor.js.map +1 -0
  707. package/dist/overlay/use-tour-rect.cjs +33 -0
  708. package/dist/overlay/use-tour-rect.cjs.map +1 -0
  709. package/dist/overlay/use-tour-rect.d.ts +12 -0
  710. package/dist/overlay/use-tour-rect.d.ts.map +1 -0
  711. package/dist/overlay/use-tour-rect.js +33 -0
  712. package/dist/overlay/use-tour-rect.js.map +1 -0
  713. package/dist/overlay/use-tour-step.cjs +66 -0
  714. package/dist/overlay/use-tour-step.cjs.map +1 -0
  715. package/dist/overlay/use-tour-step.d.ts +45 -0
  716. package/dist/overlay/use-tour-step.d.ts.map +1 -0
  717. package/dist/overlay/use-tour-step.js +66 -0
  718. package/dist/overlay/use-tour-step.js.map +1 -0
  719. package/dist/overlay/zIndex.cjs +8 -0
  720. package/dist/overlay/zIndex.cjs.map +1 -1
  721. package/dist/overlay/zIndex.d.ts +8 -0
  722. package/dist/overlay/zIndex.d.ts.map +1 -1
  723. package/dist/overlay/zIndex.js +8 -0
  724. package/dist/overlay/zIndex.js.map +1 -1
  725. package/dist/rpc/CommandOutput.cjs +8 -0
  726. package/dist/rpc/CommandOutput.cjs.map +1 -1
  727. package/dist/rpc/CommandOutput.d.ts +4 -1
  728. package/dist/rpc/CommandOutput.d.ts.map +1 -1
  729. package/dist/rpc/CommandOutput.js +8 -0
  730. package/dist/rpc/CommandOutput.js.map +1 -1
  731. package/dist/rpc/EntityExplorerApp.cjs +10 -16
  732. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  733. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  734. package/dist/rpc/EntityExplorerApp.js +10 -16
  735. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  736. package/dist/rpc/OperationActionBar.cjs +1 -1
  737. package/dist/rpc/OperationActionBar.cjs.map +1 -1
  738. package/dist/rpc/OperationActionBar.js +1 -1
  739. package/dist/rpc/OperationActionBar.js.map +1 -1
  740. package/dist/rpc/OperationCatalog.cjs +83 -7
  741. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  742. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  743. package/dist/rpc/OperationCatalog.js +84 -8
  744. package/dist/rpc/OperationCatalog.js.map +1 -1
  745. package/dist/rpc/OperationResultView.cjs +2 -0
  746. package/dist/rpc/OperationResultView.cjs.map +1 -1
  747. package/dist/rpc/OperationResultView.d.ts +6 -0
  748. package/dist/rpc/OperationResultView.d.ts.map +1 -1
  749. package/dist/rpc/OperationResultView.js +2 -0
  750. package/dist/rpc/OperationResultView.js.map +1 -1
  751. package/dist/rpc/SchemaActionForm.cjs +2 -21
  752. package/dist/rpc/SchemaActionForm.cjs.map +1 -1
  753. package/dist/rpc/SchemaActionForm.d.ts.map +1 -1
  754. package/dist/rpc/SchemaActionForm.js +3 -22
  755. package/dist/rpc/SchemaActionForm.js.map +1 -1
  756. package/dist/rpc/apiClient.cjs +16 -2
  757. package/dist/rpc/apiClient.cjs.map +1 -1
  758. package/dist/rpc/apiClient.d.ts.map +1 -1
  759. package/dist/rpc/apiClient.js +16 -2
  760. package/dist/rpc/apiClient.js.map +1 -1
  761. package/dist/rpc/formMetadata.cjs +89 -49
  762. package/dist/rpc/formMetadata.cjs.map +1 -1
  763. package/dist/rpc/formMetadata.d.ts +14 -6
  764. package/dist/rpc/formMetadata.d.ts.map +1 -1
  765. package/dist/rpc/formMetadata.js +87 -47
  766. package/dist/rpc/formMetadata.js.map +1 -1
  767. package/dist/rpc/operationFilterSearch.cjs +23 -0
  768. package/dist/rpc/operationFilterSearch.cjs.map +1 -0
  769. package/dist/rpc/operationFilterSearch.d.ts +22 -0
  770. package/dist/rpc/operationFilterSearch.d.ts.map +1 -0
  771. package/dist/rpc/operationFilterSearch.js +23 -0
  772. package/dist/rpc/operationFilterSearch.js.map +1 -0
  773. package/dist/rpc/operationLookupFetcher.cjs +28 -0
  774. package/dist/rpc/operationLookupFetcher.cjs.map +1 -0
  775. package/dist/rpc/operationLookupFetcher.d.ts +17 -0
  776. package/dist/rpc/operationLookupFetcher.d.ts.map +1 -0
  777. package/dist/rpc/operationLookupFetcher.js +28 -0
  778. package/dist/rpc/operationLookupFetcher.js.map +1 -0
  779. package/dist/rpc/surfaceNav.cjs +77 -0
  780. package/dist/rpc/surfaceNav.cjs.map +1 -0
  781. package/dist/rpc/surfaceNav.d.ts +19 -0
  782. package/dist/rpc/surfaceNav.d.ts.map +1 -0
  783. package/dist/rpc/surfaceNav.js +77 -0
  784. package/dist/rpc/surfaceNav.js.map +1 -0
  785. package/dist/rpc/types.cjs.map +1 -1
  786. package/dist/rpc/types.d.ts +12 -1
  787. package/dist/rpc/types.d.ts.map +1 -1
  788. package/dist/rpc/types.js.map +1 -1
  789. package/dist/rpc.cjs +2 -0
  790. package/dist/rpc.cjs.map +1 -1
  791. package/dist/rpc.d.ts +1 -0
  792. package/dist/rpc.d.ts.map +1 -1
  793. package/dist/rpc.js +2 -0
  794. package/dist/rpc.js.map +1 -1
  795. package/dist/styles.css +1 -1
  796. package/dist/utils.cjs +8 -0
  797. package/dist/utils.cjs.map +1 -1
  798. package/dist/utils.d.ts +2 -1
  799. package/dist/utils.d.ts.map +1 -1
  800. package/dist/utils.js +10 -2
  801. package/dist/utils.js.map +1 -1
  802. package/package.json +1 -1
  803. package/dist/data/ai/RuntimeBar.cjs.map +0 -1
  804. package/dist/data/ai/RuntimeBar.d.ts.map +0 -1
  805. package/dist/data/ai/RuntimeBar.js.map +0 -1
  806. package/dist/data/ai/RuntimeBar.model.cjs.map +0 -1
  807. package/dist/data/ai/RuntimeBar.model.d.ts.map +0 -1
  808. package/dist/data/ai/RuntimeBar.model.js.map +0 -1
  809. package/dist/data/ai/RuntimeBarCombo.cjs.map +0 -1
  810. package/dist/data/ai/RuntimeBarCombo.d.ts.map +0 -1
  811. package/dist/data/ai/RuntimeBarCombo.js.map +0 -1
  812. package/dist/data/ai/model-capabilities.cjs.map +0 -1
  813. package/dist/data/ai/model-capabilities.d.ts.map +0 -1
  814. package/dist/data/ai/model-capabilities.js.map +0 -1
  815. package/dist/data/ai/runtime-mode.cjs.map +0 -1
  816. package/dist/data/ai/runtime-mode.d.ts.map +0 -1
  817. package/dist/data/ai/runtime-mode.js.map +0 -1
  818. /package/dist/data/{ai → runtime}/RuntimeBar.model.cjs +0 -0
  819. /package/dist/data/{ai → runtime}/RuntimeBar.model.js +0 -0
  820. /package/dist/data/{ai → runtime}/model-capabilities.cjs +0 -0
  821. /package/dist/data/{ai → runtime}/model-capabilities.d.ts +0 -0
  822. /package/dist/data/{ai → runtime}/model-capabilities.js +0 -0
@@ -33,6 +33,14 @@ export declare const zIndex: {
33
33
  readonly modalStep: 10;
34
34
  /** How far above the top modal floating content sits (below the next nest). */
35
35
  readonly popoverOverModalOffset: 5;
36
+ /**
37
+ * Guided-tour dim/spotlight. Above every app overlay including a modal a step
38
+ * may point at, and below toasts. Floating content opened *during* a tour
39
+ * clears the dim via `useFloatingZIndex` (see ./modalStack).
40
+ */
41
+ readonly tour: 50000;
42
+ /** How far above the dim the tour's own step card sits. */
43
+ readonly tourCardOffset: 10;
36
44
  /** Toasts / notifications — always the topmost layer. */
37
45
  readonly toast: 100000;
38
46
  };
@@ -1 +1 @@
1
- {"version":3,"file":"zIndex.d.ts","sourceRoot":"","sources":["../../src/overlay/zIndex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,MAAM;IACjB,gDAAgD;;IAEhD,gCAAgC;;IAEhC,4EAA4E;;IAE5E,2EAA2E;;IAE3E,wEAAwE;;IAExE,6CAA6C;;IAE7C,+EAA+E;;IAE/E,yDAAyD;;CAEjD,CAAC"}
1
+ {"version":3,"file":"zIndex.d.ts","sourceRoot":"","sources":["../../src/overlay/zIndex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,MAAM;IACjB,gDAAgD;;IAEhD,gCAAgC;;IAEhC,4EAA4E;;IAE5E,2EAA2E;;IAE3E,wEAAwE;;IAExE,6CAA6C;;IAE7C,+EAA+E;;IAE/E;;;;OAIG;;IAEH,2DAA2D;;IAE3D,yDAAyD;;CAEjD,CAAC"}
@@ -13,6 +13,14 @@ const zIndex = {
13
13
  modalStep: 10,
14
14
  /** How far above the top modal floating content sits (below the next nest). */
15
15
  popoverOverModalOffset: 5,
16
+ /**
17
+ * Guided-tour dim/spotlight. Above every app overlay including a modal a step
18
+ * may point at, and below toasts. Floating content opened *during* a tour
19
+ * clears the dim via `useFloatingZIndex` (see ./modalStack).
20
+ */
21
+ tour: 5e4,
22
+ /** How far above the dim the tour's own step card sits. */
23
+ tourCardOffset: 10,
16
24
  /** Toasts / notifications — always the topmost layer. */
17
25
  toast: 1e5
18
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"zIndex.js","sources":["../../src/overlay/zIndex.ts"],"sourcesContent":["/**\n * Centralized z-index scale for clicky-ui overlays — the single source of truth\n * so stacking conflicts (e.g. a dropdown opened inside a modal rendering behind\n * it) cannot recur.\n *\n * These are applied as inline `style={{ zIndex }}`, never as arbitrary `z-[N]`\n * Tailwind classes: a consumer's Tailwind build only generates the arbitrary\n * classes it can scan from clicky-ui's published dist, so a freshly chosen\n * `z-[N]` may silently emit no rule. Inline styles are immune to that.\n *\n * Floating, transient content (dropdown / combobox / menu / tooltip / popover)\n * must clear whatever modal is open, so its z-index is computed relative to the\n * active modal via `useFloatingZIndex` (see ./modalStack) rather than taken from\n * a constant here.\n *\n * Layers NOT listed here are intentionally local: they live inside their own\n * stacking context and never participate in the global ordering —\n * `Timeline` (`z-[1]`), `RangeSlider` thumbs (20/30), and `Modal`'s\n * `ConfirmClosePrompt` (`z-10`, relative to the modal panel).\n */\nexport const zIndex = {\n /** In-flow raised affordances (sticky bits). */\n raised: 30,\n /** Persistent chat launcher. */\n chatFab: 60,\n /** Floating chat windows; `ChatWindowManager` increments from this base. */\n chatWindow: 61,\n /** Floating transient content when NO modal is open (above app chrome). */\n popover: 9000,\n /** Modal/dialog at depth 0; nested modals add `modalStep` per level. */\n modal: 10000,\n /** Per-level step between stacked modals. */\n modalStep: 10,\n /** How far above the top modal floating content sits (below the next nest). */\n popoverOverModalOffset: 5,\n /** Toasts / notifications — always the topmost layer. */\n toast: 100000,\n} as const;\n"],"names":[],"mappings":"AAoBO,MAAM,SAAS;AAAA;AAAA,EAEpB,QAAQ;AAAA;AAAA,EAER,SAAS;AAAA;AAAA,EAET,YAAY;AAAA;AAAA,EAEZ,SAAS;AAAA;AAAA,EAET,OAAO;AAAA;AAAA,EAEP,WAAW;AAAA;AAAA,EAEX,wBAAwB;AAAA;AAAA,EAExB,OAAO;AACT;"}
1
+ {"version":3,"file":"zIndex.js","sources":["../../src/overlay/zIndex.ts"],"sourcesContent":["/**\n * Centralized z-index scale for clicky-ui overlays — the single source of truth\n * so stacking conflicts (e.g. a dropdown opened inside a modal rendering behind\n * it) cannot recur.\n *\n * These are applied as inline `style={{ zIndex }}`, never as arbitrary `z-[N]`\n * Tailwind classes: a consumer's Tailwind build only generates the arbitrary\n * classes it can scan from clicky-ui's published dist, so a freshly chosen\n * `z-[N]` may silently emit no rule. Inline styles are immune to that.\n *\n * Floating, transient content (dropdown / combobox / menu / tooltip / popover)\n * must clear whatever modal is open, so its z-index is computed relative to the\n * active modal via `useFloatingZIndex` (see ./modalStack) rather than taken from\n * a constant here.\n *\n * Layers NOT listed here are intentionally local: they live inside their own\n * stacking context and never participate in the global ordering —\n * `Timeline` (`z-[1]`), `RangeSlider` thumbs (20/30), and `Modal`'s\n * `ConfirmClosePrompt` (`z-10`, relative to the modal panel).\n */\nexport const zIndex = {\n /** In-flow raised affordances (sticky bits). */\n raised: 30,\n /** Persistent chat launcher. */\n chatFab: 60,\n /** Floating chat windows; `ChatWindowManager` increments from this base. */\n chatWindow: 61,\n /** Floating transient content when NO modal is open (above app chrome). */\n popover: 9000,\n /** Modal/dialog at depth 0; nested modals add `modalStep` per level. */\n modal: 10000,\n /** Per-level step between stacked modals. */\n modalStep: 10,\n /** How far above the top modal floating content sits (below the next nest). */\n popoverOverModalOffset: 5,\n /**\n * Guided-tour dim/spotlight. Above every app overlay including a modal a step\n * may point at, and below toasts. Floating content opened *during* a tour\n * clears the dim via `useFloatingZIndex` (see ./modalStack).\n */\n tour: 50000,\n /** How far above the dim the tour's own step card sits. */\n tourCardOffset: 10,\n /** Toasts / notifications — always the topmost layer. */\n toast: 100000,\n} as const;\n"],"names":[],"mappings":"AAoBO,MAAM,SAAS;AAAA;AAAA,EAEpB,QAAQ;AAAA;AAAA,EAER,SAAS;AAAA;AAAA,EAET,YAAY;AAAA;AAAA,EAEZ,SAAS;AAAA;AAAA,EAET,OAAO;AAAA;AAAA,EAEP,WAAW;AAAA;AAAA,EAEX,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMxB,MAAM;AAAA;AAAA,EAEN,gBAAgB;AAAA;AAAA,EAEhB,OAAO;AACT;"}
@@ -28,6 +28,8 @@ function CommandOutput({
28
28
  search,
29
29
  timeRange,
30
30
  externalFilters,
31
+ cellFilters,
32
+ onCellFilterChange,
31
33
  pagination,
32
34
  rowSelection,
33
35
  download
@@ -62,6 +64,8 @@ function CommandOutput({
62
64
  ...search ? { search } : {},
63
65
  ...timeRange ? { timeRange } : {},
64
66
  ...externalFilters ? { externalFilters } : {},
67
+ ...cellFilters ? { cellFilters } : {},
68
+ ...onCellFilterChange ? { onCellFilterChange } : {},
65
69
  ...pagination ? { pagination } : {},
66
70
  ...rowSelection ? { rowSelection } : {},
67
71
  ...download ? { download } : {}
@@ -134,6 +138,8 @@ function OutputBody({
134
138
  search,
135
139
  timeRange,
136
140
  externalFilters,
141
+ cellFilters,
142
+ onCellFilterChange,
137
143
  pagination,
138
144
  rowSelection,
139
145
  download
@@ -157,6 +163,8 @@ function OutputBody({
157
163
  ...search ? { search } : {},
158
164
  ...timeRange ? { timeRange } : {},
159
165
  ...externalFilters ? { externalFilters } : {},
166
+ ...cellFilters ? { cellFilters } : {},
167
+ ...onCellFilterChange ? { onCellFilterChange } : {},
160
168
  ...pagination ? { pagination } : {},
161
169
  ...rowSelection ? { rowSelection } : {},
162
170
  ...download ? { download } : {},
@@ -1 +1 @@
1
- {"version":3,"file":"CommandOutput.cjs","sources":["../../src/rpc/CommandOutput.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, 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 {\n Clicky,\n type ClickyCommandRuntime,\n type ClickyDownloadOptions,\n type ClickyDocument,\n type ClickyNode,\n type ClickyTableRowClick,\n type ClickyTableRowHref,\n type ClickyTableRowPredicate,\n type ClickyTableRowSelection,\n} from \"../data/Clicky\";\nimport { parseClickyData } from \"../data/clicky-parse\";\nimport { JsonView } from \"../data/JsonView\";\nimport { cn } from \"../lib/utils\";\nimport type { ExecutionResponse } from \"./types\";\n\nexport type CommandOutputProps = {\n response?: ExecutionResponse | null;\n loading?: boolean;\n loadingMessage?: string;\n emptyMessage?: string;\n ariaLabel?: string;\n className?: string;\n bare?: boolean;\n commandRuntime?: ClickyCommandRuntime;\n onTableRowClick?: ClickyTableRowClick;\n getTableRowHref?: ClickyTableRowHref;\n isTableRowClickable?: ClickyTableRowPredicate;\n search?: FilterBarSearchProps;\n timeRange?: FilterBarRangeProps;\n externalFilters?: FilterBarFilter[];\n pagination?: DataTablePagination;\n rowSelection?: ClickyTableRowSelection;\n download?: ClickyDownloadOptions;\n};\n\ntype LoadingResultRow = {\n result: string;\n status: string;\n updated: string;\n details: string;\n};\n\nconst LOADING_RESULT_COLUMNS: DataTableColumn<LoadingResultRow>[] = [\n { key: \"result\", label: \"Result\", grow: true },\n { key: \"status\", label: \"Status\", shrink: true },\n { key: \"updated\", label: \"Updated\", shrink: true },\n { key: \"details\", label: \"Details\", grow: true },\n];\n\nexport function CommandOutput({\n response,\n loading = false,\n loadingMessage = \"Loading execution results…\",\n emptyMessage = \"No response yet.\",\n ariaLabel,\n className,\n bare = false,\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n search,\n timeRange,\n externalFilters,\n pagination,\n rowSelection,\n download,\n}: CommandOutputProps) {\n const text = response?.stdout || response?.output || \"\";\n const ct = response?.contentType || \"application/json\";\n\n const parsed = useMemo(() => {\n if (!response) return null;\n if (response.parsed !== undefined) return response.parsed;\n if (!text.trim()) return null;\n try {\n return JSON.parse(text.trim());\n } catch {\n return null;\n }\n }, [response, text]);\n\n let output: ReactNode;\n if (response) {\n output = (\n <OutputBody\n text={text}\n parsed={parsed}\n contentType={ct}\n bare={bare}\n {...(response.requestUrl ? { url: response.requestUrl } : {})}\n {...(response.blob ? { blob: response.blob } : {})}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(onTableRowClick ? { onTableRowClick } : {})}\n {...(getTableRowHref ? { getTableRowHref } : {})}\n {...(isTableRowClickable ? { isTableRowClickable } : {})}\n {...(search ? { search } : {})}\n {...(timeRange ? { timeRange } : {})}\n {...(externalFilters ? { externalFilters } : {})}\n {...(pagination ? { pagination } : {})}\n {...(rowSelection ? { rowSelection } : {})}\n {...(download ? { download } : {})}\n />\n );\n } else if (loading) {\n output = <LoadingOutput loadingMessage={loadingMessage} />;\n } else {\n output = <p className=\"text-sm text-muted-foreground\">{emptyMessage}</p>;\n }\n\n const pending =\n loading && response ? (\n <div\n role=\"status\"\n className=\"rounded-md border border-border bg-muted/40 px-3 py-1.5 text-xs text-muted-foreground\"\n >\n {loadingMessage}\n </div>\n ) : null;\n\n const content =\n bare || !response ? (\n <div className=\"flex min-h-0 flex-1 flex-col gap-2\">\n {pending}\n {output}\n </div>\n ) : (\n <div className=\"space-y-3\">\n {pending}\n <div className=\"flex items-center gap-2\">\n <span\n className={\n response.success\n ? \"rounded-md border px-2 py-0.5 text-xs\"\n : \"rounded-md bg-destructive px-2 py-0.5 text-xs text-destructive-foreground\"\n }\n >\n {response.success ? \"Success\" : \"Failed\"}\n </span>\n <span className=\"rounded-md border px-2 py-0.5 font-mono text-xs\">\n exit {response.exit_code}\n </span>\n {ct !== \"application/json\" && (\n <span className=\"rounded-md bg-secondary px-2 py-0.5 font-mono text-xs text-secondary-foreground\">\n {ct.split(\";\")[0]}\n </span>\n )}\n {response.error && (\n <span className=\"text-sm text-destructive\">{response.error}</span>\n )}\n </div>\n\n {response.cli && (\n <pre className=\"overflow-x-auto rounded-md bg-muted p-3 font-mono text-xs\">\n $ {response.cli}\n </pre>\n )}\n\n {output}\n </div>\n );\n\n if (ariaLabel || className) {\n return (\n <div\n role={ariaLabel ? \"region\" : undefined}\n aria-label={ariaLabel}\n aria-busy={loading || undefined}\n className={cn(\"mt-3 flex min-h-0 flex-col\", className)}\n >\n {content}\n </div>\n );\n }\n\n return content;\n}\n\nfunction OutputBody({\n text,\n parsed,\n contentType,\n url,\n blob,\n bare,\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n search,\n timeRange,\n externalFilters,\n pagination,\n rowSelection,\n download,\n}: {\n text: string;\n parsed: unknown;\n contentType: string;\n url?: string;\n blob?: Blob;\n bare?: boolean;\n commandRuntime?: ClickyCommandRuntime;\n onTableRowClick?: ClickyTableRowClick;\n getTableRowHref?: ClickyTableRowHref;\n isTableRowClickable?: ClickyTableRowPredicate;\n search?: FilterBarSearchProps;\n timeRange?: FilterBarRangeProps;\n externalFilters?: FilterBarFilter[];\n pagination?: DataTablePagination;\n rowSelection?: ClickyTableRowSelection;\n download?: ClickyDownloadOptions;\n}) {\n const ct = (contentType.split(\";\")[0] ?? \"\").trim();\n\n if (ct === \"application/pdf\" && blob) {\n return <PdfOutput blob={blob} />;\n }\n\n const clickyPayload: string | ClickyNode | ClickyDocument | undefined =\n typeof parsed === \"string\" || (parsed != null && typeof parsed === \"object\")\n ? (parsed as ClickyNode | ClickyDocument)\n : text;\n const parsedClicky =\n clickyPayload === \"\" ? null : parseClickyData(clickyPayload);\n\n if (\n parsedClicky?.ok ||\n ct === \"application/clicky+json\" ||\n ct === \"application/json+clicky\"\n ) {\n const clicky = (\n <Clicky\n data={\n parsedClicky?.ok\n ? parsedClicky.document\n : ((parsed as Parameters<typeof Clicky>[0][\"data\"]) ?? text)\n }\n {...(url ? { url } : {})}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(onTableRowClick ? { onTableRowClick } : {})}\n {...(getTableRowHref ? { getTableRowHref } : {})}\n {...(isTableRowClickable ? { isTableRowClickable } : {})}\n {...(search ? { search } : {})}\n {...(timeRange ? { timeRange } : {})}\n {...(externalFilters ? { externalFilters } : {})}\n {...(pagination ? { pagination } : {})}\n {...(rowSelection ? { rowSelection } : {})}\n {...(download ? { download } : {})}\n className=\"flex min-h-0 flex-1 flex-col\"\n />\n );\n\n const detailOutput = (\n <div className=\"detail-output flex min-h-0 flex-1 flex-col\">\n {clicky}\n </div>\n );\n if (bare) return detailOutput;\n\n return (\n <Tabs\n defaultValue=\"rendered\"\n tabs={[\n { value: \"rendered\", label: \"Rendered\", content: detailOutput },\n { value: \"raw\", label: \"Raw\", content: <TextOutput text={text} /> },\n ]}\n />\n );\n }\n\n if (ct === \"text/html\") {\n const iframe = (\n <iframe\n srcDoc={text}\n className=\"h-[600px] w-full rounded-md border bg-background\"\n sandbox=\"allow-same-origin\"\n />\n );\n if (bare) return iframe;\n return (\n <Tabs\n defaultValue=\"preview\"\n tabs={[\n { value: \"preview\", label: \"Preview\", content: iframe },\n {\n value: \"source\",\n label: \"Source\",\n content: <TextOutput text={text} />,\n },\n ]}\n />\n );\n }\n\n if (parsed) {\n const json = <JsonViewer data={parsed} />;\n if (bare) return json;\n return (\n <Tabs\n defaultValue=\"output\"\n tabs={[\n { value: \"output\", label: \"Output\", content: json },\n { value: \"raw\", label: \"Raw\", content: <TextOutput text={text} /> },\n ]}\n />\n );\n }\n\n if (text) return <TextOutput text={text} />;\n\n return <p className=\"py-4 text-sm text-muted-foreground\">No output</p>;\n}\n\nfunction LoadingOutput({ loadingMessage }: { loadingMessage: string }) {\n return (\n <DataTable<LoadingResultRow>\n data={[]}\n columns={LOADING_RESULT_COLUMNS}\n loading\n loadingMessage={loadingMessage}\n loadingRowCount={8}\n showGlobalFilter={false}\n showDensityControl={false}\n hideableColumns={false}\n resizableColumns={false}\n persistColumnWidths={false}\n persistColumnVisibility={false}\n persistDensity={false}\n />\n );\n}\n\nfunction PdfOutput({ blob }: { blob: Blob }) {\n const [url, setURL] = useState(\"\");\n\n useEffect(() => {\n const next = URL.createObjectURL(blob);\n setURL(next);\n return () => URL.revokeObjectURL(next);\n }, [blob]);\n\n if (!url) return null;\n return (\n <div className=\"space-y-2\">\n <a\n href={url}\n download=\"output.pdf\"\n className=\"inline-block rounded-md border px-3 py-1.5 text-sm hover:bg-accent\"\n >\n Download PDF\n </a>\n <iframe src={url} className=\"h-[600px] w-full rounded-md border\" />\n </div>\n );\n}\n\nfunction JsonViewer({ data }: { data: unknown }) {\n return (\n <div className=\"overflow-auto rounded-md bg-muted p-4 font-mono text-xs\">\n <JsonView\n data={data as object | unknown[]}\n defaultOpenDepth={Number.MAX_SAFE_INTEGER}\n />\n </div>\n );\n}\n\nfunction TextOutput({\n text,\n variant = \"default\",\n}: {\n text: string;\n variant?: \"default\" | \"error\";\n}) {\n return (\n <pre\n className={`max-h-96 overflow-auto whitespace-pre-wrap rounded-md p-4 font-mono text-sm ${\n variant === \"error\"\n ? \"bg-red-50 text-red-800 dark:bg-red-950 dark:text-red-200\"\n : \"bg-muted\"\n }`}\n >\n {text}\n </pre>\n );\n}\n\nfunction Tabs({\n defaultValue,\n tabs,\n}: {\n defaultValue: string;\n tabs: Array<{ value: string; label: string; content: ReactNode }>;\n}) {\n const [value, setValue] = useState(defaultValue);\n const active = tabs.find((tab) => tab.value === value) ?? tabs[0];\n if (!active) return null;\n return (\n <div className=\"space-y-3\">\n <div className=\"inline-flex rounded-md border bg-muted p-1\">\n {tabs.map((tab) => (\n <button\n key={tab.value}\n type=\"button\"\n className={`rounded px-2 py-1 text-xs ${\n tab.value === active.value\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground\"\n }`}\n onClick={() => setValue(tab.value)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n <div>{active.content}</div>\n </div>\n );\n}\n"],"names":["useMemo","jsx","jsxs","cn","parseClickyData","Clicky","DataTable","useState","useEffect","JsonView"],"mappings":";;;;;;;;;AAsDA,MAAM,yBAA8D;AAAA,EAClE,EAAE,KAAK,UAAU,OAAO,UAAU,MAAM,KAAA;AAAA,EACxC,EAAE,KAAK,UAAU,OAAO,UAAU,QAAQ,KAAA;AAAA,EAC1C,EAAE,KAAK,WAAW,OAAO,WAAW,QAAQ,KAAA;AAAA,EAC5C,EAAE,KAAK,WAAW,OAAO,WAAW,MAAM,KAAA;AAC5C;AAEO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAuB;AACrB,QAAM,QAAO,qCAAU,YAAU,qCAAU,WAAU;AACrD,QAAM,MAAK,qCAAU,gBAAe;AAEpC,QAAM,SAASA,MAAAA,QAAQ,MAAM;AAC3B,QAAI,CAAC,SAAU,QAAO;AACtB,QAAI,SAAS,WAAW,OAAW,QAAO,SAAS;AACnD,QAAI,CAAC,KAAK,KAAA,EAAQ,QAAO;AACzB,QAAI;AACF,aAAO,KAAK,MAAM,KAAK,KAAA,CAAM;AAAA,IAC/B,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF,GAAG,CAAC,UAAU,IAAI,CAAC;AAEnB,MAAI;AACJ,MAAI,UAAU;AACZ,aACEC,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACC,GAAI,SAAS,aAAa,EAAE,KAAK,SAAS,WAAA,IAAe,CAAA;AAAA,QACzD,GAAI,SAAS,OAAO,EAAE,MAAM,SAAS,KAAA,IAAS,CAAA;AAAA,QAC9C,GAAI,iBAAiB,EAAE,eAAA,IAAmB,CAAA;AAAA,QAC1C,GAAI,kBAAkB,EAAE,gBAAA,IAAoB,CAAA;AAAA,QAC5C,GAAI,kBAAkB,EAAE,gBAAA,IAAoB,CAAA;AAAA,QAC5C,GAAI,sBAAsB,EAAE,oBAAA,IAAwB,CAAA;AAAA,QACpD,GAAI,SAAS,EAAE,OAAA,IAAW,CAAA;AAAA,QAC1B,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,QAChC,GAAI,kBAAkB,EAAE,gBAAA,IAAoB,CAAA;AAAA,QAC5C,GAAI,aAAa,EAAE,WAAA,IAAe,CAAA;AAAA,QAClC,GAAI,eAAe,EAAE,aAAA,IAAiB,CAAA;AAAA,QACtC,GAAI,WAAW,EAAE,aAAa,CAAA;AAAA,MAAC;AAAA,IAAA;AAAA,EAGtC,WAAW,SAAS;AAClB,aAASA,2BAAAA,IAAC,iBAAc,eAAA,CAAgC;AAAA,EAC1D,OAAO;AACL,aAASA,2BAAAA,IAAC,KAAA,EAAE,WAAU,iCAAiC,UAAA,cAAa;AAAA,EACtE;AAEA,QAAM,UACJ,WAAW,WACTA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MAET,UAAA;AAAA,IAAA;AAAA,EAAA,IAED;AAEN,QAAM,UACJ,QAAQ,CAAC,WACPC,2BAAAA,KAAC,OAAA,EAAI,WAAU,sCACZ,UAAA;AAAA,IAAA;AAAA,IACA;AAAA,EAAA,EAAA,CACH,IAEAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,aACZ,UAAA;AAAA,IAAA;AAAA,IACDA,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,MAAAD,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,WACE,SAAS,UACL,0CACA;AAAA,UAGL,UAAA,SAAS,UAAU,YAAY;AAAA,QAAA;AAAA,MAAA;AAAA,MAElCC,2BAAAA,KAAC,QAAA,EAAK,WAAU,mDAAkD,UAAA;AAAA,QAAA;AAAA,QAC1D,SAAS;AAAA,MAAA,GACjB;AAAA,MACC,OAAO,sBACND,2BAAAA,IAAC,QAAA,EAAK,WAAU,mFACb,UAAA,GAAG,MAAM,GAAG,EAAE,CAAC,EAAA,CAClB;AAAA,MAED,SAAS,SACRA,2BAAAA,IAAC,UAAK,WAAU,4BAA4B,mBAAS,MAAA,CAAM;AAAA,IAAA,GAE/D;AAAA,IAEC,SAAS,OACRC,gCAAC,OAAA,EAAI,WAAU,6DAA4D,UAAA;AAAA,MAAA;AAAA,MACtE,SAAS;AAAA,IAAA,GACd;AAAA,IAGD;AAAA,EAAA,GACH;AAGJ,MAAI,aAAa,WAAW;AAC1B,WACED,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAM,YAAY,WAAW;AAAA,QAC7B,cAAY;AAAA,QACZ,aAAW,WAAW;AAAA,QACtB,WAAWE,MAAAA,GAAG,8BAA8B,SAAS;AAAA,QAEpD,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AAEA,SAAO;AACT;AAEA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAiBG;AACD,QAAM,MAAM,YAAY,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI,KAAA;AAE7C,MAAI,OAAO,qBAAqB,MAAM;AACpC,WAAOF,+BAAC,aAAU,MAAY;AAAA,EAChC;AAEA,QAAM,gBACJ,OAAO,WAAW,YAAa,UAAU,QAAQ,OAAO,WAAW,WAC9D,SACD;AACN,QAAM,eACJ,kBAAkB,KAAK,OAAOG,YAAAA,gBAAgB,aAAa;AAE7D,OACE,6CAAc,OACd,OAAO,6BACP,OAAO,2BACP;AACA,UAAM,SACJH,2BAAAA;AAAAA,MAACI,OAAAA;AAAAA,MAAA;AAAA,QACC,OACE,6CAAc,MACV,aAAa,WACX,UAAmD;AAAA,QAE1D,GAAI,MAAM,EAAE,IAAA,IAAQ,CAAA;AAAA,QACpB,GAAI,iBAAiB,EAAE,eAAA,IAAmB,CAAA;AAAA,QAC1C,GAAI,kBAAkB,EAAE,gBAAA,IAAoB,CAAA;AAAA,QAC5C,GAAI,kBAAkB,EAAE,gBAAA,IAAoB,CAAA;AAAA,QAC5C,GAAI,sBAAsB,EAAE,oBAAA,IAAwB,CAAA;AAAA,QACpD,GAAI,SAAS,EAAE,OAAA,IAAW,CAAA;AAAA,QAC1B,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,QAChC,GAAI,kBAAkB,EAAE,gBAAA,IAAoB,CAAA;AAAA,QAC5C,GAAI,aAAa,EAAE,WAAA,IAAe,CAAA;AAAA,QAClC,GAAI,eAAe,EAAE,aAAA,IAAiB,CAAA;AAAA,QACtC,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA;AAAA,QAC/B,WAAU;AAAA,MAAA;AAAA,IAAA;AAId,UAAM,eACJJ,2BAAAA,IAAC,OAAA,EAAI,WAAU,8CACZ,UAAA,QACH;AAEF,QAAI,KAAM,QAAO;AAEjB,WACEA,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,cAAa;AAAA,QACb,MAAM;AAAA,UACJ,EAAE,OAAO,YAAY,OAAO,YAAY,SAAS,aAAA;AAAA,UACjD,EAAE,OAAO,OAAO,OAAO,OAAO,SAASA,+BAAC,YAAA,EAAW,MAAY,EAAA;AAAA,QAAG;AAAA,MACpE;AAAA,IAAA;AAAA,EAGN;AAEA,MAAI,OAAO,aAAa;AACtB,UAAM,SACJA,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,QAAQ;AAAA,QACR,WAAU;AAAA,QACV,SAAQ;AAAA,MAAA;AAAA,IAAA;AAGZ,QAAI,KAAM,QAAO;AACjB,WACEA,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,cAAa;AAAA,QACb,MAAM;AAAA,UACJ,EAAE,OAAO,WAAW,OAAO,WAAW,SAAS,OAAA;AAAA,UAC/C;AAAA,YACE,OAAO;AAAA,YACP,OAAO;AAAA,YACP,SAASA,2BAAAA,IAAC,YAAA,EAAW,KAAA,CAAY;AAAA,UAAA;AAAA,QACnC;AAAA,MACF;AAAA,IAAA;AAAA,EAGN;AAEA,MAAI,QAAQ;AACV,UAAM,OAAOA,2BAAAA,IAAC,YAAA,EAAW,MAAM,OAAA,CAAQ;AACvC,QAAI,KAAM,QAAO;AACjB,WACEA,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,cAAa;AAAA,QACb,MAAM;AAAA,UACJ,EAAE,OAAO,UAAU,OAAO,UAAU,SAAS,KAAA;AAAA,UAC7C,EAAE,OAAO,OAAO,OAAO,OAAO,SAASA,+BAAC,YAAA,EAAW,MAAY,EAAA;AAAA,QAAG;AAAA,MACpE;AAAA,IAAA;AAAA,EAGN;AAEA,MAAI,KAAM,QAAOA,2BAAAA,IAAC,YAAA,EAAW,KAAA,CAAY;AAEzC,SAAOA,2BAAAA,IAAC,KAAA,EAAE,WAAU,sCAAqC,UAAA,aAAS;AACpE;AAEA,SAAS,cAAc,EAAE,kBAA8C;AACrE,SACEA,2BAAAA;AAAAA,IAACK,UAAAA;AAAAA,IAAA;AAAA,MACC,MAAM,CAAA;AAAA,MACN,SAAS;AAAA,MACT,SAAO;AAAA,MACP;AAAA,MACA,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,oBAAoB;AAAA,MACpB,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,qBAAqB;AAAA,MACrB,yBAAyB;AAAA,MACzB,gBAAgB;AAAA,IAAA;AAAA,EAAA;AAGtB;AAEA,SAAS,UAAU,EAAE,QAAwB;AAC3C,QAAM,CAAC,KAAK,MAAM,IAAIC,MAAAA,SAAS,EAAE;AAEjCC,QAAAA,UAAU,MAAM;AACd,UAAM,OAAO,IAAI,gBAAgB,IAAI;AACrC,WAAO,IAAI;AACX,WAAO,MAAM,IAAI,gBAAgB,IAAI;AAAA,EACvC,GAAG,CAAC,IAAI,CAAC;AAET,MAAI,CAAC,IAAK,QAAO;AACjB,SACEN,2BAAAA,KAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,IAAAD,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAM;AAAA,QACN,UAAS;AAAA,QACT,WAAU;AAAA,QACX,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGDA,2BAAAA,IAAC,UAAA,EAAO,KAAK,KAAK,WAAU,qCAAA,CAAqC;AAAA,EAAA,GACnE;AAEJ;AAEA,SAAS,WAAW,EAAE,QAA2B;AAC/C,SACEA,2BAAAA,IAAC,OAAA,EAAI,WAAU,2DACb,UAAAA,2BAAAA;AAAAA,IAACQ,SAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,kBAAkB,OAAO;AAAA,IAAA;AAAA,EAAA,GAE7B;AAEJ;AAEA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA,UAAU;AACZ,GAGG;AACD,SACER,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,+EACT,YAAY,UACR,6DACA,UACN;AAAA,MAEC,UAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAAS,KAAK;AAAA,EACZ;AAAA,EACA;AACF,GAGG;AACD,QAAM,CAAC,OAAO,QAAQ,IAAIM,MAAAA,SAAS,YAAY;AAC/C,QAAM,SAAS,KAAK,KAAK,CAAC,QAAQ,IAAI,UAAU,KAAK,KAAK,KAAK,CAAC;AAChE,MAAI,CAAC,OAAQ,QAAO;AACpB,SACEL,2BAAAA,KAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,IAAAD,+BAAC,SAAI,WAAU,8CACZ,UAAA,KAAK,IAAI,CAAC,QACTA,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,WAAW,6BACT,IAAI,UAAU,OAAO,QACjB,4CACA,uBACN;AAAA,QACA,SAAS,MAAM,SAAS,IAAI,KAAK;AAAA,QAEhC,UAAA,IAAI;AAAA,MAAA;AAAA,MATA,IAAI;AAAA,IAAA,CAWZ,GACH;AAAA,IACAA,2BAAAA,IAAC,OAAA,EAAK,UAAA,OAAO,QAAA,CAAQ;AAAA,EAAA,GACvB;AAEJ;;"}
1
+ {"version":3,"file":"CommandOutput.cjs","sources":["../../src/rpc/CommandOutput.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, 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 {\n Clicky,\n type ClickyCommandRuntime,\n type ClickyDownloadOptions,\n type ClickyDocument,\n type ClickyNode,\n type ClickyTableRowClick,\n type ClickyTableRowHref,\n type ClickyTableRowPredicate,\n type ClickyTableRowSelection,\n} from \"../data/Clicky\";\nimport type {\n CellFilterChange,\n CellFilterMode,\n} from \"../data/cells/CellFilterActions\";\nimport { parseClickyData } from \"../data/clicky-parse\";\nimport { JsonView } from \"../data/JsonView\";\nimport { cn } from \"../lib/utils\";\nimport type { ExecutionResponse } from \"./types\";\n\nexport type CommandOutputProps = {\n response?: ExecutionResponse | null;\n loading?: boolean;\n loadingMessage?: string;\n emptyMessage?: string;\n ariaLabel?: string;\n className?: string;\n bare?: boolean;\n commandRuntime?: ClickyCommandRuntime;\n onTableRowClick?: ClickyTableRowClick;\n getTableRowHref?: ClickyTableRowHref;\n isTableRowClickable?: ClickyTableRowPredicate;\n search?: FilterBarSearchProps;\n timeRange?: FilterBarRangeProps;\n externalFilters?: FilterBarFilter[];\n cellFilters?: Record<string, Record<string, CellFilterMode>>;\n onCellFilterChange?: (change: CellFilterChange) => void;\n pagination?: DataTablePagination;\n rowSelection?: ClickyTableRowSelection;\n download?: ClickyDownloadOptions;\n};\n\ntype LoadingResultRow = {\n result: string;\n status: string;\n updated: string;\n details: string;\n};\n\nconst LOADING_RESULT_COLUMNS: DataTableColumn<LoadingResultRow>[] = [\n { key: \"result\", label: \"Result\", grow: true },\n { key: \"status\", label: \"Status\", shrink: true },\n { key: \"updated\", label: \"Updated\", shrink: true },\n { key: \"details\", label: \"Details\", grow: true },\n];\n\nexport function CommandOutput({\n response,\n loading = false,\n loadingMessage = \"Loading execution results…\",\n emptyMessage = \"No response yet.\",\n ariaLabel,\n className,\n bare = false,\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n search,\n timeRange,\n externalFilters,\n cellFilters,\n onCellFilterChange,\n pagination,\n rowSelection,\n download,\n}: CommandOutputProps) {\n const text = response?.stdout || response?.output || \"\";\n const ct = response?.contentType || \"application/json\";\n\n const parsed = useMemo(() => {\n if (!response) return null;\n if (response.parsed !== undefined) return response.parsed;\n if (!text.trim()) return null;\n try {\n return JSON.parse(text.trim());\n } catch {\n return null;\n }\n }, [response, text]);\n\n let output: ReactNode;\n if (response) {\n output = (\n <OutputBody\n text={text}\n parsed={parsed}\n contentType={ct}\n bare={bare}\n {...(response.requestUrl ? { url: response.requestUrl } : {})}\n {...(response.blob ? { blob: response.blob } : {})}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(onTableRowClick ? { onTableRowClick } : {})}\n {...(getTableRowHref ? { getTableRowHref } : {})}\n {...(isTableRowClickable ? { isTableRowClickable } : {})}\n {...(search ? { search } : {})}\n {...(timeRange ? { timeRange } : {})}\n {...(externalFilters ? { externalFilters } : {})}\n {...(cellFilters ? { cellFilters } : {})}\n {...(onCellFilterChange ? { onCellFilterChange } : {})}\n {...(pagination ? { pagination } : {})}\n {...(rowSelection ? { rowSelection } : {})}\n {...(download ? { download } : {})}\n />\n );\n } else if (loading) {\n output = <LoadingOutput loadingMessage={loadingMessage} />;\n } else {\n output = <p className=\"text-sm text-muted-foreground\">{emptyMessage}</p>;\n }\n\n const pending =\n loading && response ? (\n <div\n role=\"status\"\n className=\"rounded-md border border-border bg-muted/40 px-3 py-1.5 text-xs text-muted-foreground\"\n >\n {loadingMessage}\n </div>\n ) : null;\n\n const content =\n bare || !response ? (\n <div className=\"flex min-h-0 flex-1 flex-col gap-2\">\n {pending}\n {output}\n </div>\n ) : (\n <div className=\"space-y-3\">\n {pending}\n <div className=\"flex items-center gap-2\">\n <span\n className={\n response.success\n ? \"rounded-md border px-2 py-0.5 text-xs\"\n : \"rounded-md bg-destructive px-2 py-0.5 text-xs text-destructive-foreground\"\n }\n >\n {response.success ? \"Success\" : \"Failed\"}\n </span>\n <span className=\"rounded-md border px-2 py-0.5 font-mono text-xs\">\n exit {response.exit_code}\n </span>\n {ct !== \"application/json\" && (\n <span className=\"rounded-md bg-secondary px-2 py-0.5 font-mono text-xs text-secondary-foreground\">\n {ct.split(\";\")[0]}\n </span>\n )}\n {response.error && (\n <span className=\"text-sm text-destructive\">{response.error}</span>\n )}\n </div>\n\n {response.cli && (\n <pre className=\"overflow-x-auto rounded-md bg-muted p-3 font-mono text-xs\">\n $ {response.cli}\n </pre>\n )}\n\n {output}\n </div>\n );\n\n if (ariaLabel || className) {\n return (\n <div\n role={ariaLabel ? \"region\" : undefined}\n aria-label={ariaLabel}\n aria-busy={loading || undefined}\n className={cn(\"mt-3 flex min-h-0 flex-col\", className)}\n >\n {content}\n </div>\n );\n }\n\n return content;\n}\n\nfunction OutputBody({\n text,\n parsed,\n contentType,\n url,\n blob,\n bare,\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n search,\n timeRange,\n externalFilters,\n cellFilters,\n onCellFilterChange,\n pagination,\n rowSelection,\n download,\n}: {\n text: string;\n parsed: unknown;\n contentType: string;\n url?: string;\n blob?: Blob;\n bare?: boolean;\n commandRuntime?: ClickyCommandRuntime;\n onTableRowClick?: ClickyTableRowClick;\n getTableRowHref?: ClickyTableRowHref;\n isTableRowClickable?: ClickyTableRowPredicate;\n search?: FilterBarSearchProps;\n timeRange?: FilterBarRangeProps;\n externalFilters?: FilterBarFilter[];\n cellFilters?: Record<string, Record<string, CellFilterMode>>;\n onCellFilterChange?: (change: CellFilterChange) => void;\n pagination?: DataTablePagination;\n rowSelection?: ClickyTableRowSelection;\n download?: ClickyDownloadOptions;\n}) {\n const ct = (contentType.split(\";\")[0] ?? \"\").trim();\n\n if (ct === \"application/pdf\" && blob) {\n return <PdfOutput blob={blob} />;\n }\n\n const clickyPayload: string | ClickyNode | ClickyDocument | undefined =\n typeof parsed === \"string\" || (parsed != null && typeof parsed === \"object\")\n ? (parsed as ClickyNode | ClickyDocument)\n : text;\n const parsedClicky =\n clickyPayload === \"\" ? null : parseClickyData(clickyPayload);\n\n if (\n parsedClicky?.ok ||\n ct === \"application/clicky+json\" ||\n ct === \"application/json+clicky\"\n ) {\n const clicky = (\n <Clicky\n data={\n parsedClicky?.ok\n ? parsedClicky.document\n : ((parsed as Parameters<typeof Clicky>[0][\"data\"]) ?? text)\n }\n {...(url ? { url } : {})}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(onTableRowClick ? { onTableRowClick } : {})}\n {...(getTableRowHref ? { getTableRowHref } : {})}\n {...(isTableRowClickable ? { isTableRowClickable } : {})}\n {...(search ? { search } : {})}\n {...(timeRange ? { timeRange } : {})}\n {...(externalFilters ? { externalFilters } : {})}\n {...(cellFilters ? { cellFilters } : {})}\n {...(onCellFilterChange ? { onCellFilterChange } : {})}\n {...(pagination ? { pagination } : {})}\n {...(rowSelection ? { rowSelection } : {})}\n {...(download ? { download } : {})}\n className=\"flex min-h-0 flex-1 flex-col\"\n />\n );\n\n const detailOutput = (\n <div className=\"detail-output flex min-h-0 flex-1 flex-col\">\n {clicky}\n </div>\n );\n if (bare) return detailOutput;\n\n return (\n <Tabs\n defaultValue=\"rendered\"\n tabs={[\n { value: \"rendered\", label: \"Rendered\", content: detailOutput },\n { value: \"raw\", label: \"Raw\", content: <TextOutput text={text} /> },\n ]}\n />\n );\n }\n\n if (ct === \"text/html\") {\n const iframe = (\n <iframe\n srcDoc={text}\n className=\"h-[600px] w-full rounded-md border bg-background\"\n sandbox=\"allow-same-origin\"\n />\n );\n if (bare) return iframe;\n return (\n <Tabs\n defaultValue=\"preview\"\n tabs={[\n { value: \"preview\", label: \"Preview\", content: iframe },\n {\n value: \"source\",\n label: \"Source\",\n content: <TextOutput text={text} />,\n },\n ]}\n />\n );\n }\n\n if (parsed) {\n const json = <JsonViewer data={parsed} />;\n if (bare) return json;\n return (\n <Tabs\n defaultValue=\"output\"\n tabs={[\n { value: \"output\", label: \"Output\", content: json },\n { value: \"raw\", label: \"Raw\", content: <TextOutput text={text} /> },\n ]}\n />\n );\n }\n\n if (text) return <TextOutput text={text} />;\n\n return <p className=\"py-4 text-sm text-muted-foreground\">No output</p>;\n}\n\nfunction LoadingOutput({ loadingMessage }: { loadingMessage: string }) {\n return (\n <DataTable<LoadingResultRow>\n data={[]}\n columns={LOADING_RESULT_COLUMNS}\n loading\n loadingMessage={loadingMessage}\n loadingRowCount={8}\n showGlobalFilter={false}\n showDensityControl={false}\n hideableColumns={false}\n resizableColumns={false}\n persistColumnWidths={false}\n persistColumnVisibility={false}\n persistDensity={false}\n />\n );\n}\n\nfunction PdfOutput({ blob }: { blob: Blob }) {\n const [url, setURL] = useState(\"\");\n\n useEffect(() => {\n const next = URL.createObjectURL(blob);\n setURL(next);\n return () => URL.revokeObjectURL(next);\n }, [blob]);\n\n if (!url) return null;\n return (\n <div className=\"space-y-2\">\n <a\n href={url}\n download=\"output.pdf\"\n className=\"inline-block rounded-md border px-3 py-1.5 text-sm hover:bg-accent\"\n >\n Download PDF\n </a>\n <iframe src={url} className=\"h-[600px] w-full rounded-md border\" />\n </div>\n );\n}\n\nfunction JsonViewer({ data }: { data: unknown }) {\n return (\n <div className=\"overflow-auto rounded-md bg-muted p-4 font-mono text-xs\">\n <JsonView\n data={data as object | unknown[]}\n defaultOpenDepth={Number.MAX_SAFE_INTEGER}\n />\n </div>\n );\n}\n\nfunction TextOutput({\n text,\n variant = \"default\",\n}: {\n text: string;\n variant?: \"default\" | \"error\";\n}) {\n return (\n <pre\n className={`max-h-96 overflow-auto whitespace-pre-wrap rounded-md p-4 font-mono text-sm ${\n variant === \"error\"\n ? \"bg-red-50 text-red-800 dark:bg-red-950 dark:text-red-200\"\n : \"bg-muted\"\n }`}\n >\n {text}\n </pre>\n );\n}\n\nfunction Tabs({\n defaultValue,\n tabs,\n}: {\n defaultValue: string;\n tabs: Array<{ value: string; label: string; content: ReactNode }>;\n}) {\n const [value, setValue] = useState(defaultValue);\n const active = tabs.find((tab) => tab.value === value) ?? tabs[0];\n if (!active) return null;\n return (\n <div className=\"space-y-3\">\n <div className=\"inline-flex rounded-md border bg-muted p-1\">\n {tabs.map((tab) => (\n <button\n key={tab.value}\n type=\"button\"\n className={`rounded px-2 py-1 text-xs ${\n tab.value === active.value\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground\"\n }`}\n onClick={() => setValue(tab.value)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n <div>{active.content}</div>\n </div>\n );\n}\n"],"names":["useMemo","jsx","jsxs","cn","parseClickyData","Clicky","DataTable","useState","useEffect","JsonView"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { FilterBarFilter, FilterBarRangeProps, FilterBarSearchProps } from '../components/FilterBar';
2
2
  import { DataTablePagination } from '../data/DataTable';
3
3
  import { ClickyCommandRuntime, ClickyDownloadOptions, ClickyTableRowClick, ClickyTableRowHref, ClickyTableRowPredicate, ClickyTableRowSelection } from '../data/Clicky';
4
+ import { CellFilterChange, CellFilterMode } from '../data/cells/CellFilterActions';
4
5
  import { ExecutionResponse } from './types';
5
6
  export type CommandOutputProps = {
6
7
  response?: ExecutionResponse | null;
@@ -17,9 +18,11 @@ export type CommandOutputProps = {
17
18
  search?: FilterBarSearchProps;
18
19
  timeRange?: FilterBarRangeProps;
19
20
  externalFilters?: FilterBarFilter[];
21
+ cellFilters?: Record<string, Record<string, CellFilterMode>>;
22
+ onCellFilterChange?: (change: CellFilterChange) => void;
20
23
  pagination?: DataTablePagination;
21
24
  rowSelection?: ClickyTableRowSelection;
22
25
  download?: ClickyDownloadOptions;
23
26
  };
24
- export declare function CommandOutput({ response, loading, loadingMessage, emptyMessage, ariaLabel, className, bare, commandRuntime, onTableRowClick, getTableRowHref, isTableRowClickable, search, timeRange, externalFilters, pagination, rowSelection, download, }: CommandOutputProps): import("react/jsx-runtime").JSX.Element;
27
+ export declare function CommandOutput({ response, loading, loadingMessage, emptyMessage, ariaLabel, className, bare, commandRuntime, onTableRowClick, getTableRowHref, isTableRowClickable, search, timeRange, externalFilters, cellFilters, onCellFilterChange, pagination, rowSelection, download, }: CommandOutputProps): import("react/jsx-runtime").JSX.Element;
25
28
  //# sourceMappingURL=CommandOutput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommandOutput.d.ts","sourceRoot":"","sources":["../../src/rpc/CommandOutput.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAG1B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,gBAAgB,CAAC;AAIxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,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,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,eAAe,CAAC,EAAE,kBAAkB,CAAC;IACrC,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;IAC9C,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,eAAe,CAAC,EAAE,eAAe,EAAE,CAAC;IACpC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,YAAY,CAAC,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAgBF,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,OAAe,EACf,cAA6C,EAC7C,YAAiC,EACjC,SAAS,EACT,SAAS,EACT,IAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,MAAM,EACN,SAAS,EACT,eAAe,EACf,UAAU,EACV,YAAY,EACZ,QAAQ,GACT,EAAE,kBAAkB,2CA6GpB"}
1
+ {"version":3,"file":"CommandOutput.d.ts","sourceRoot":"","sources":["../../src/rpc/CommandOutput.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAG1B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACf,MAAM,iCAAiC,CAAC;AAIzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,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,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,eAAe,CAAC,EAAE,kBAAkB,CAAC;IACrC,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;IAC9C,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,eAAe,CAAC,EAAE,eAAe,EAAE,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAC7D,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACxD,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,YAAY,CAAC,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAgBF,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,OAAe,EACf,cAA6C,EAC7C,YAAiC,EACjC,SAAS,EACT,SAAS,EACT,IAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,MAAM,EACN,SAAS,EACT,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,QAAQ,GACT,EAAE,kBAAkB,2CA+GpB"}
@@ -26,6 +26,8 @@ function CommandOutput({
26
26
  search,
27
27
  timeRange,
28
28
  externalFilters,
29
+ cellFilters,
30
+ onCellFilterChange,
29
31
  pagination,
30
32
  rowSelection,
31
33
  download
@@ -60,6 +62,8 @@ function CommandOutput({
60
62
  ...search ? { search } : {},
61
63
  ...timeRange ? { timeRange } : {},
62
64
  ...externalFilters ? { externalFilters } : {},
65
+ ...cellFilters ? { cellFilters } : {},
66
+ ...onCellFilterChange ? { onCellFilterChange } : {},
63
67
  ...pagination ? { pagination } : {},
64
68
  ...rowSelection ? { rowSelection } : {},
65
69
  ...download ? { download } : {}
@@ -132,6 +136,8 @@ function OutputBody({
132
136
  search,
133
137
  timeRange,
134
138
  externalFilters,
139
+ cellFilters,
140
+ onCellFilterChange,
135
141
  pagination,
136
142
  rowSelection,
137
143
  download
@@ -155,6 +161,8 @@ function OutputBody({
155
161
  ...search ? { search } : {},
156
162
  ...timeRange ? { timeRange } : {},
157
163
  ...externalFilters ? { externalFilters } : {},
164
+ ...cellFilters ? { cellFilters } : {},
165
+ ...onCellFilterChange ? { onCellFilterChange } : {},
158
166
  ...pagination ? { pagination } : {},
159
167
  ...rowSelection ? { rowSelection } : {},
160
168
  ...download ? { download } : {},
@@ -1 +1 @@
1
- {"version":3,"file":"CommandOutput.js","sources":["../../src/rpc/CommandOutput.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, 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 {\n Clicky,\n type ClickyCommandRuntime,\n type ClickyDownloadOptions,\n type ClickyDocument,\n type ClickyNode,\n type ClickyTableRowClick,\n type ClickyTableRowHref,\n type ClickyTableRowPredicate,\n type ClickyTableRowSelection,\n} from \"../data/Clicky\";\nimport { parseClickyData } from \"../data/clicky-parse\";\nimport { JsonView } from \"../data/JsonView\";\nimport { cn } from \"../lib/utils\";\nimport type { ExecutionResponse } from \"./types\";\n\nexport type CommandOutputProps = {\n response?: ExecutionResponse | null;\n loading?: boolean;\n loadingMessage?: string;\n emptyMessage?: string;\n ariaLabel?: string;\n className?: string;\n bare?: boolean;\n commandRuntime?: ClickyCommandRuntime;\n onTableRowClick?: ClickyTableRowClick;\n getTableRowHref?: ClickyTableRowHref;\n isTableRowClickable?: ClickyTableRowPredicate;\n search?: FilterBarSearchProps;\n timeRange?: FilterBarRangeProps;\n externalFilters?: FilterBarFilter[];\n pagination?: DataTablePagination;\n rowSelection?: ClickyTableRowSelection;\n download?: ClickyDownloadOptions;\n};\n\ntype LoadingResultRow = {\n result: string;\n status: string;\n updated: string;\n details: string;\n};\n\nconst LOADING_RESULT_COLUMNS: DataTableColumn<LoadingResultRow>[] = [\n { key: \"result\", label: \"Result\", grow: true },\n { key: \"status\", label: \"Status\", shrink: true },\n { key: \"updated\", label: \"Updated\", shrink: true },\n { key: \"details\", label: \"Details\", grow: true },\n];\n\nexport function CommandOutput({\n response,\n loading = false,\n loadingMessage = \"Loading execution results…\",\n emptyMessage = \"No response yet.\",\n ariaLabel,\n className,\n bare = false,\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n search,\n timeRange,\n externalFilters,\n pagination,\n rowSelection,\n download,\n}: CommandOutputProps) {\n const text = response?.stdout || response?.output || \"\";\n const ct = response?.contentType || \"application/json\";\n\n const parsed = useMemo(() => {\n if (!response) return null;\n if (response.parsed !== undefined) return response.parsed;\n if (!text.trim()) return null;\n try {\n return JSON.parse(text.trim());\n } catch {\n return null;\n }\n }, [response, text]);\n\n let output: ReactNode;\n if (response) {\n output = (\n <OutputBody\n text={text}\n parsed={parsed}\n contentType={ct}\n bare={bare}\n {...(response.requestUrl ? { url: response.requestUrl } : {})}\n {...(response.blob ? { blob: response.blob } : {})}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(onTableRowClick ? { onTableRowClick } : {})}\n {...(getTableRowHref ? { getTableRowHref } : {})}\n {...(isTableRowClickable ? { isTableRowClickable } : {})}\n {...(search ? { search } : {})}\n {...(timeRange ? { timeRange } : {})}\n {...(externalFilters ? { externalFilters } : {})}\n {...(pagination ? { pagination } : {})}\n {...(rowSelection ? { rowSelection } : {})}\n {...(download ? { download } : {})}\n />\n );\n } else if (loading) {\n output = <LoadingOutput loadingMessage={loadingMessage} />;\n } else {\n output = <p className=\"text-sm text-muted-foreground\">{emptyMessage}</p>;\n }\n\n const pending =\n loading && response ? (\n <div\n role=\"status\"\n className=\"rounded-md border border-border bg-muted/40 px-3 py-1.5 text-xs text-muted-foreground\"\n >\n {loadingMessage}\n </div>\n ) : null;\n\n const content =\n bare || !response ? (\n <div className=\"flex min-h-0 flex-1 flex-col gap-2\">\n {pending}\n {output}\n </div>\n ) : (\n <div className=\"space-y-3\">\n {pending}\n <div className=\"flex items-center gap-2\">\n <span\n className={\n response.success\n ? \"rounded-md border px-2 py-0.5 text-xs\"\n : \"rounded-md bg-destructive px-2 py-0.5 text-xs text-destructive-foreground\"\n }\n >\n {response.success ? \"Success\" : \"Failed\"}\n </span>\n <span className=\"rounded-md border px-2 py-0.5 font-mono text-xs\">\n exit {response.exit_code}\n </span>\n {ct !== \"application/json\" && (\n <span className=\"rounded-md bg-secondary px-2 py-0.5 font-mono text-xs text-secondary-foreground\">\n {ct.split(\";\")[0]}\n </span>\n )}\n {response.error && (\n <span className=\"text-sm text-destructive\">{response.error}</span>\n )}\n </div>\n\n {response.cli && (\n <pre className=\"overflow-x-auto rounded-md bg-muted p-3 font-mono text-xs\">\n $ {response.cli}\n </pre>\n )}\n\n {output}\n </div>\n );\n\n if (ariaLabel || className) {\n return (\n <div\n role={ariaLabel ? \"region\" : undefined}\n aria-label={ariaLabel}\n aria-busy={loading || undefined}\n className={cn(\"mt-3 flex min-h-0 flex-col\", className)}\n >\n {content}\n </div>\n );\n }\n\n return content;\n}\n\nfunction OutputBody({\n text,\n parsed,\n contentType,\n url,\n blob,\n bare,\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n search,\n timeRange,\n externalFilters,\n pagination,\n rowSelection,\n download,\n}: {\n text: string;\n parsed: unknown;\n contentType: string;\n url?: string;\n blob?: Blob;\n bare?: boolean;\n commandRuntime?: ClickyCommandRuntime;\n onTableRowClick?: ClickyTableRowClick;\n getTableRowHref?: ClickyTableRowHref;\n isTableRowClickable?: ClickyTableRowPredicate;\n search?: FilterBarSearchProps;\n timeRange?: FilterBarRangeProps;\n externalFilters?: FilterBarFilter[];\n pagination?: DataTablePagination;\n rowSelection?: ClickyTableRowSelection;\n download?: ClickyDownloadOptions;\n}) {\n const ct = (contentType.split(\";\")[0] ?? \"\").trim();\n\n if (ct === \"application/pdf\" && blob) {\n return <PdfOutput blob={blob} />;\n }\n\n const clickyPayload: string | ClickyNode | ClickyDocument | undefined =\n typeof parsed === \"string\" || (parsed != null && typeof parsed === \"object\")\n ? (parsed as ClickyNode | ClickyDocument)\n : text;\n const parsedClicky =\n clickyPayload === \"\" ? null : parseClickyData(clickyPayload);\n\n if (\n parsedClicky?.ok ||\n ct === \"application/clicky+json\" ||\n ct === \"application/json+clicky\"\n ) {\n const clicky = (\n <Clicky\n data={\n parsedClicky?.ok\n ? parsedClicky.document\n : ((parsed as Parameters<typeof Clicky>[0][\"data\"]) ?? text)\n }\n {...(url ? { url } : {})}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(onTableRowClick ? { onTableRowClick } : {})}\n {...(getTableRowHref ? { getTableRowHref } : {})}\n {...(isTableRowClickable ? { isTableRowClickable } : {})}\n {...(search ? { search } : {})}\n {...(timeRange ? { timeRange } : {})}\n {...(externalFilters ? { externalFilters } : {})}\n {...(pagination ? { pagination } : {})}\n {...(rowSelection ? { rowSelection } : {})}\n {...(download ? { download } : {})}\n className=\"flex min-h-0 flex-1 flex-col\"\n />\n );\n\n const detailOutput = (\n <div className=\"detail-output flex min-h-0 flex-1 flex-col\">\n {clicky}\n </div>\n );\n if (bare) return detailOutput;\n\n return (\n <Tabs\n defaultValue=\"rendered\"\n tabs={[\n { value: \"rendered\", label: \"Rendered\", content: detailOutput },\n { value: \"raw\", label: \"Raw\", content: <TextOutput text={text} /> },\n ]}\n />\n );\n }\n\n if (ct === \"text/html\") {\n const iframe = (\n <iframe\n srcDoc={text}\n className=\"h-[600px] w-full rounded-md border bg-background\"\n sandbox=\"allow-same-origin\"\n />\n );\n if (bare) return iframe;\n return (\n <Tabs\n defaultValue=\"preview\"\n tabs={[\n { value: \"preview\", label: \"Preview\", content: iframe },\n {\n value: \"source\",\n label: \"Source\",\n content: <TextOutput text={text} />,\n },\n ]}\n />\n );\n }\n\n if (parsed) {\n const json = <JsonViewer data={parsed} />;\n if (bare) return json;\n return (\n <Tabs\n defaultValue=\"output\"\n tabs={[\n { value: \"output\", label: \"Output\", content: json },\n { value: \"raw\", label: \"Raw\", content: <TextOutput text={text} /> },\n ]}\n />\n );\n }\n\n if (text) return <TextOutput text={text} />;\n\n return <p className=\"py-4 text-sm text-muted-foreground\">No output</p>;\n}\n\nfunction LoadingOutput({ loadingMessage }: { loadingMessage: string }) {\n return (\n <DataTable<LoadingResultRow>\n data={[]}\n columns={LOADING_RESULT_COLUMNS}\n loading\n loadingMessage={loadingMessage}\n loadingRowCount={8}\n showGlobalFilter={false}\n showDensityControl={false}\n hideableColumns={false}\n resizableColumns={false}\n persistColumnWidths={false}\n persistColumnVisibility={false}\n persistDensity={false}\n />\n );\n}\n\nfunction PdfOutput({ blob }: { blob: Blob }) {\n const [url, setURL] = useState(\"\");\n\n useEffect(() => {\n const next = URL.createObjectURL(blob);\n setURL(next);\n return () => URL.revokeObjectURL(next);\n }, [blob]);\n\n if (!url) return null;\n return (\n <div className=\"space-y-2\">\n <a\n href={url}\n download=\"output.pdf\"\n className=\"inline-block rounded-md border px-3 py-1.5 text-sm hover:bg-accent\"\n >\n Download PDF\n </a>\n <iframe src={url} className=\"h-[600px] w-full rounded-md border\" />\n </div>\n );\n}\n\nfunction JsonViewer({ data }: { data: unknown }) {\n return (\n <div className=\"overflow-auto rounded-md bg-muted p-4 font-mono text-xs\">\n <JsonView\n data={data as object | unknown[]}\n defaultOpenDepth={Number.MAX_SAFE_INTEGER}\n />\n </div>\n );\n}\n\nfunction TextOutput({\n text,\n variant = \"default\",\n}: {\n text: string;\n variant?: \"default\" | \"error\";\n}) {\n return (\n <pre\n className={`max-h-96 overflow-auto whitespace-pre-wrap rounded-md p-4 font-mono text-sm ${\n variant === \"error\"\n ? \"bg-red-50 text-red-800 dark:bg-red-950 dark:text-red-200\"\n : \"bg-muted\"\n }`}\n >\n {text}\n </pre>\n );\n}\n\nfunction Tabs({\n defaultValue,\n tabs,\n}: {\n defaultValue: string;\n tabs: Array<{ value: string; label: string; content: ReactNode }>;\n}) {\n const [value, setValue] = useState(defaultValue);\n const active = tabs.find((tab) => tab.value === value) ?? tabs[0];\n if (!active) return null;\n return (\n <div className=\"space-y-3\">\n <div className=\"inline-flex rounded-md border bg-muted p-1\">\n {tabs.map((tab) => (\n <button\n key={tab.value}\n type=\"button\"\n className={`rounded px-2 py-1 text-xs ${\n tab.value === active.value\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground\"\n }`}\n onClick={() => setValue(tab.value)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n <div>{active.content}</div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CommandOutput.js","sources":["../../src/rpc/CommandOutput.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, 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 {\n Clicky,\n type ClickyCommandRuntime,\n type ClickyDownloadOptions,\n type ClickyDocument,\n type ClickyNode,\n type ClickyTableRowClick,\n type ClickyTableRowHref,\n type ClickyTableRowPredicate,\n type ClickyTableRowSelection,\n} from \"../data/Clicky\";\nimport type {\n CellFilterChange,\n CellFilterMode,\n} from \"../data/cells/CellFilterActions\";\nimport { parseClickyData } from \"../data/clicky-parse\";\nimport { JsonView } from \"../data/JsonView\";\nimport { cn } from \"../lib/utils\";\nimport type { ExecutionResponse } from \"./types\";\n\nexport type CommandOutputProps = {\n response?: ExecutionResponse | null;\n loading?: boolean;\n loadingMessage?: string;\n emptyMessage?: string;\n ariaLabel?: string;\n className?: string;\n bare?: boolean;\n commandRuntime?: ClickyCommandRuntime;\n onTableRowClick?: ClickyTableRowClick;\n getTableRowHref?: ClickyTableRowHref;\n isTableRowClickable?: ClickyTableRowPredicate;\n search?: FilterBarSearchProps;\n timeRange?: FilterBarRangeProps;\n externalFilters?: FilterBarFilter[];\n cellFilters?: Record<string, Record<string, CellFilterMode>>;\n onCellFilterChange?: (change: CellFilterChange) => void;\n pagination?: DataTablePagination;\n rowSelection?: ClickyTableRowSelection;\n download?: ClickyDownloadOptions;\n};\n\ntype LoadingResultRow = {\n result: string;\n status: string;\n updated: string;\n details: string;\n};\n\nconst LOADING_RESULT_COLUMNS: DataTableColumn<LoadingResultRow>[] = [\n { key: \"result\", label: \"Result\", grow: true },\n { key: \"status\", label: \"Status\", shrink: true },\n { key: \"updated\", label: \"Updated\", shrink: true },\n { key: \"details\", label: \"Details\", grow: true },\n];\n\nexport function CommandOutput({\n response,\n loading = false,\n loadingMessage = \"Loading execution results…\",\n emptyMessage = \"No response yet.\",\n ariaLabel,\n className,\n bare = false,\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n search,\n timeRange,\n externalFilters,\n cellFilters,\n onCellFilterChange,\n pagination,\n rowSelection,\n download,\n}: CommandOutputProps) {\n const text = response?.stdout || response?.output || \"\";\n const ct = response?.contentType || \"application/json\";\n\n const parsed = useMemo(() => {\n if (!response) return null;\n if (response.parsed !== undefined) return response.parsed;\n if (!text.trim()) return null;\n try {\n return JSON.parse(text.trim());\n } catch {\n return null;\n }\n }, [response, text]);\n\n let output: ReactNode;\n if (response) {\n output = (\n <OutputBody\n text={text}\n parsed={parsed}\n contentType={ct}\n bare={bare}\n {...(response.requestUrl ? { url: response.requestUrl } : {})}\n {...(response.blob ? { blob: response.blob } : {})}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(onTableRowClick ? { onTableRowClick } : {})}\n {...(getTableRowHref ? { getTableRowHref } : {})}\n {...(isTableRowClickable ? { isTableRowClickable } : {})}\n {...(search ? { search } : {})}\n {...(timeRange ? { timeRange } : {})}\n {...(externalFilters ? { externalFilters } : {})}\n {...(cellFilters ? { cellFilters } : {})}\n {...(onCellFilterChange ? { onCellFilterChange } : {})}\n {...(pagination ? { pagination } : {})}\n {...(rowSelection ? { rowSelection } : {})}\n {...(download ? { download } : {})}\n />\n );\n } else if (loading) {\n output = <LoadingOutput loadingMessage={loadingMessage} />;\n } else {\n output = <p className=\"text-sm text-muted-foreground\">{emptyMessage}</p>;\n }\n\n const pending =\n loading && response ? (\n <div\n role=\"status\"\n className=\"rounded-md border border-border bg-muted/40 px-3 py-1.5 text-xs text-muted-foreground\"\n >\n {loadingMessage}\n </div>\n ) : null;\n\n const content =\n bare || !response ? (\n <div className=\"flex min-h-0 flex-1 flex-col gap-2\">\n {pending}\n {output}\n </div>\n ) : (\n <div className=\"space-y-3\">\n {pending}\n <div className=\"flex items-center gap-2\">\n <span\n className={\n response.success\n ? \"rounded-md border px-2 py-0.5 text-xs\"\n : \"rounded-md bg-destructive px-2 py-0.5 text-xs text-destructive-foreground\"\n }\n >\n {response.success ? \"Success\" : \"Failed\"}\n </span>\n <span className=\"rounded-md border px-2 py-0.5 font-mono text-xs\">\n exit {response.exit_code}\n </span>\n {ct !== \"application/json\" && (\n <span className=\"rounded-md bg-secondary px-2 py-0.5 font-mono text-xs text-secondary-foreground\">\n {ct.split(\";\")[0]}\n </span>\n )}\n {response.error && (\n <span className=\"text-sm text-destructive\">{response.error}</span>\n )}\n </div>\n\n {response.cli && (\n <pre className=\"overflow-x-auto rounded-md bg-muted p-3 font-mono text-xs\">\n $ {response.cli}\n </pre>\n )}\n\n {output}\n </div>\n );\n\n if (ariaLabel || className) {\n return (\n <div\n role={ariaLabel ? \"region\" : undefined}\n aria-label={ariaLabel}\n aria-busy={loading || undefined}\n className={cn(\"mt-3 flex min-h-0 flex-col\", className)}\n >\n {content}\n </div>\n );\n }\n\n return content;\n}\n\nfunction OutputBody({\n text,\n parsed,\n contentType,\n url,\n blob,\n bare,\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n search,\n timeRange,\n externalFilters,\n cellFilters,\n onCellFilterChange,\n pagination,\n rowSelection,\n download,\n}: {\n text: string;\n parsed: unknown;\n contentType: string;\n url?: string;\n blob?: Blob;\n bare?: boolean;\n commandRuntime?: ClickyCommandRuntime;\n onTableRowClick?: ClickyTableRowClick;\n getTableRowHref?: ClickyTableRowHref;\n isTableRowClickable?: ClickyTableRowPredicate;\n search?: FilterBarSearchProps;\n timeRange?: FilterBarRangeProps;\n externalFilters?: FilterBarFilter[];\n cellFilters?: Record<string, Record<string, CellFilterMode>>;\n onCellFilterChange?: (change: CellFilterChange) => void;\n pagination?: DataTablePagination;\n rowSelection?: ClickyTableRowSelection;\n download?: ClickyDownloadOptions;\n}) {\n const ct = (contentType.split(\";\")[0] ?? \"\").trim();\n\n if (ct === \"application/pdf\" && blob) {\n return <PdfOutput blob={blob} />;\n }\n\n const clickyPayload: string | ClickyNode | ClickyDocument | undefined =\n typeof parsed === \"string\" || (parsed != null && typeof parsed === \"object\")\n ? (parsed as ClickyNode | ClickyDocument)\n : text;\n const parsedClicky =\n clickyPayload === \"\" ? null : parseClickyData(clickyPayload);\n\n if (\n parsedClicky?.ok ||\n ct === \"application/clicky+json\" ||\n ct === \"application/json+clicky\"\n ) {\n const clicky = (\n <Clicky\n data={\n parsedClicky?.ok\n ? parsedClicky.document\n : ((parsed as Parameters<typeof Clicky>[0][\"data\"]) ?? text)\n }\n {...(url ? { url } : {})}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(onTableRowClick ? { onTableRowClick } : {})}\n {...(getTableRowHref ? { getTableRowHref } : {})}\n {...(isTableRowClickable ? { isTableRowClickable } : {})}\n {...(search ? { search } : {})}\n {...(timeRange ? { timeRange } : {})}\n {...(externalFilters ? { externalFilters } : {})}\n {...(cellFilters ? { cellFilters } : {})}\n {...(onCellFilterChange ? { onCellFilterChange } : {})}\n {...(pagination ? { pagination } : {})}\n {...(rowSelection ? { rowSelection } : {})}\n {...(download ? { download } : {})}\n className=\"flex min-h-0 flex-1 flex-col\"\n />\n );\n\n const detailOutput = (\n <div className=\"detail-output flex min-h-0 flex-1 flex-col\">\n {clicky}\n </div>\n );\n if (bare) return detailOutput;\n\n return (\n <Tabs\n defaultValue=\"rendered\"\n tabs={[\n { value: \"rendered\", label: \"Rendered\", content: detailOutput },\n { value: \"raw\", label: \"Raw\", content: <TextOutput text={text} /> },\n ]}\n />\n );\n }\n\n if (ct === \"text/html\") {\n const iframe = (\n <iframe\n srcDoc={text}\n className=\"h-[600px] w-full rounded-md border bg-background\"\n sandbox=\"allow-same-origin\"\n />\n );\n if (bare) return iframe;\n return (\n <Tabs\n defaultValue=\"preview\"\n tabs={[\n { value: \"preview\", label: \"Preview\", content: iframe },\n {\n value: \"source\",\n label: \"Source\",\n content: <TextOutput text={text} />,\n },\n ]}\n />\n );\n }\n\n if (parsed) {\n const json = <JsonViewer data={parsed} />;\n if (bare) return json;\n return (\n <Tabs\n defaultValue=\"output\"\n tabs={[\n { value: \"output\", label: \"Output\", content: json },\n { value: \"raw\", label: \"Raw\", content: <TextOutput text={text} /> },\n ]}\n />\n );\n }\n\n if (text) return <TextOutput text={text} />;\n\n return <p className=\"py-4 text-sm text-muted-foreground\">No output</p>;\n}\n\nfunction LoadingOutput({ loadingMessage }: { loadingMessage: string }) {\n return (\n <DataTable<LoadingResultRow>\n data={[]}\n columns={LOADING_RESULT_COLUMNS}\n loading\n loadingMessage={loadingMessage}\n loadingRowCount={8}\n showGlobalFilter={false}\n showDensityControl={false}\n hideableColumns={false}\n resizableColumns={false}\n persistColumnWidths={false}\n persistColumnVisibility={false}\n persistDensity={false}\n />\n );\n}\n\nfunction PdfOutput({ blob }: { blob: Blob }) {\n const [url, setURL] = useState(\"\");\n\n useEffect(() => {\n const next = URL.createObjectURL(blob);\n setURL(next);\n return () => URL.revokeObjectURL(next);\n }, [blob]);\n\n if (!url) return null;\n return (\n <div className=\"space-y-2\">\n <a\n href={url}\n download=\"output.pdf\"\n className=\"inline-block rounded-md border px-3 py-1.5 text-sm hover:bg-accent\"\n >\n Download PDF\n </a>\n <iframe src={url} className=\"h-[600px] w-full rounded-md border\" />\n </div>\n );\n}\n\nfunction JsonViewer({ data }: { data: unknown }) {\n return (\n <div className=\"overflow-auto rounded-md bg-muted p-4 font-mono text-xs\">\n <JsonView\n data={data as object | unknown[]}\n defaultOpenDepth={Number.MAX_SAFE_INTEGER}\n />\n </div>\n );\n}\n\nfunction TextOutput({\n text,\n variant = \"default\",\n}: {\n text: string;\n variant?: \"default\" | \"error\";\n}) {\n return (\n <pre\n className={`max-h-96 overflow-auto whitespace-pre-wrap rounded-md p-4 font-mono text-sm ${\n variant === \"error\"\n ? \"bg-red-50 text-red-800 dark:bg-red-950 dark:text-red-200\"\n : \"bg-muted\"\n }`}\n >\n {text}\n </pre>\n );\n}\n\nfunction Tabs({\n defaultValue,\n tabs,\n}: {\n defaultValue: string;\n tabs: Array<{ value: string; label: string; content: ReactNode }>;\n}) {\n const [value, setValue] = useState(defaultValue);\n const active = tabs.find((tab) => tab.value === value) ?? tabs[0];\n if (!active) return null;\n return (\n <div className=\"space-y-3\">\n <div className=\"inline-flex rounded-md border bg-muted p-1\">\n {tabs.map((tab) => (\n <button\n key={tab.value}\n type=\"button\"\n className={`rounded px-2 py-1 text-xs ${\n tab.value === active.value\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground\"\n }`}\n onClick={() => setValue(tab.value)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n <div>{active.content}</div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ const router = require("./router.cjs");
10
10
  const OperationCatalog = require("./OperationCatalog.cjs");
11
11
  const OperationCommandPage = require("./OperationCommandPage.cjs");
12
12
  const OperationEntityPage = require("./OperationEntityPage.cjs");
13
- const surfaceIconMap = require("./surfaceIconMap.cjs");
13
+ const surfaceNav = require("./surfaceNav.cjs");
14
14
  const useOperations = require("./useOperations.cjs");
15
15
  const SIDEBAR_COLLAPSED_KEY = "clicky-ui:sidebar:collapsed";
16
16
  function EntityExplorerApp({
@@ -62,19 +62,12 @@ function EntityExplorerApp({
62
62
  []
63
63
  );
64
64
  const navSections = react.useMemo(() => {
65
- const sections = surfaceGroups.map((group) => ({
66
- label: group.label,
67
- items: group.surfaces.map((surface) => {
68
- const icon = surfaceIconMap.resolveSurfaceIcon(surface.icon);
69
- return {
70
- key: surface.key,
71
- label: surface.title,
72
- ...icon ? { icon } : {},
73
- active: isSurfaceRouteActive(resolvedRoute, surface.key),
74
- to: commandHref.withBasePath(basePath, `/${surface.key}`)
75
- };
65
+ const sections = surfaceGroups.map(
66
+ (group) => surfaceNav.surfaceNavSection(group.label, group.surfaces, {
67
+ isActive: (surface) => isSurfaceRouteActive(resolvedRoute, surface.key),
68
+ hrefFor: (surface) => commandHref.withBasePath(basePath, `/${surface.key}`)
76
69
  })
77
- }));
70
+ );
78
71
  if (showApiExplorer) {
79
72
  sections.push({
80
73
  items: [
@@ -103,12 +96,13 @@ function EntityExplorerApp({
103
96
  navSections,
104
97
  sidebarFooter: /* @__PURE__ */ jsxRuntime.jsx(themeSwitcher.ThemeSwitcher, {}),
105
98
  ...resolvedRoute.kind === "surface" && resolvedRoute.surface ? {
106
- bodyHeader: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
107
- /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "truncate text-2xl font-semibold tracking-tight", children: resolvedRoute.surface.title }),
108
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 max-w-2xl text-sm text-muted-foreground", children: clickyMetadata.makeSurfaceDefinition(resolvedRoute.surface).description })
99
+ nav: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-baseline gap-density-2", children: [
100
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "min-w-0 truncate text-base font-semibold tracking-tight", children: resolvedRoute.surface.title }),
101
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "hidden min-w-0 truncate text-sm text-muted-foreground lg:block", children: clickyMetadata.makeSurfaceDefinition(resolvedRoute.surface).description })
109
102
  ] })
110
103
  } : {},
111
104
  collapsedStorageKey: SIDEBAR_COLLAPSED_KEY,
105
+ contentWidth: "full",
112
106
  contentClassName: "p-6",
113
107
  children: resolvedRoute.kind === "surface" ? resolvedRoute.surface ? /* @__PURE__ */ jsxRuntime.jsx(
114
108
  OperationCatalog.OperationCatalog,
@@ -1 +1 @@
1
- {"version":3,"file":"EntityExplorerApp.cjs","sources":["../../src/rpc/EntityExplorerApp.tsx"],"sourcesContent":["import { useEffect, useMemo, type ReactNode } from \"react\";\nimport { ThemeSwitcher } from \"../components/theme-switcher\";\nimport type { PreExtension, PostExtension } from \"../components/json-schema-form-types\";\nimport type { ClickyCommandRuntime } from \"../data/Clicky\";\nimport { AppShell, type AppShellNavSection } from \"../layout/AppShell\";\nimport { getClickySurfaces, makeSurfaceDefinition } from \"./clickyMetadata\";\nimport {\n ARG_QUERY_PREFIX,\n AUTORUN_QUERY_PARAM,\n buildCommandHref,\n trimTrailingSlash,\n withBasePath,\n} from \"./commandHref\";\nimport { useRouter } from \"./router\";\nimport { OperationCatalog } from \"./OperationCatalog\";\nimport type { ResultRenderer } from \"./OperationResultView\";\nimport { OperationCommandPage } from \"./OperationCommandPage\";\nimport {\n OperationEntityPage,\n type EntityDetailBodyRenderer,\n type EntityDetailHeaderRenderer,\n} from \"./OperationEntityPage\";\nimport type { FormActionsRenderer } from \"./SchemaActionForm\";\nimport { resolveSurfaceIcon } from \"./surfaceIconMap\";\nimport type { ClickySurface } from \"./types\";\nimport type { OperationsApiClient } from \"./useOperations\";\nimport { useOperations } from \"./useOperations\";\n\nexport type SurfaceActionLabels = Record<string, Record<string, string>>;\n\nexport type EntityExplorerAppProps = {\n client: OperationsApiClient;\n basePath?: string;\n showApiExplorer?: boolean;\n /**\n * Custom JsonSchemaForm field extensions applied to every create/edit form the\n * explorer renders — e.g. a SecretKeySelector widget keyed on an\n * `x-clicky-component` schema hint. `pre` transforms a resolved control; `post`\n * can replace the rendered value node with a custom component.\n */\n formExtensions?: { pre?: PreExtension[]; post?: PostExtension[] };\n /**\n * Optional extra footer actions added to every create/edit form (e.g. a\n * connection \"Test\" split-button). The renderer receives the live form value\n * and the action it submits to, so it can scope itself to a given entity.\n */\n formActions?: FormActionsRenderer;\n /** Per-surface labels keyed by x-clicky verb/actionName. */\n surfaceActionLabels?: SurfaceActionLabels;\n /**\n * @deprecated Superseded by per-surface icons emitted by the backend\n * (x-clicky-icon → ClickySurface.icon). AppShell section labels are plain\n * strings, so this group-header icon map is no longer rendered. Kept for\n * source-compatibility only.\n */\n surfaceIcons?: Record<string, ReactNode>;\n /**\n * Optional host override for the result surface. Called where an entity's\n * result table renders, with the current surface key, the raw response, and\n * the default OperationResultView element. Return `defaultView` to keep the\n * standard table, or a custom node (e.g. a LogsTable for trace/log profiles\n * flagged via x-clicky-render). Filtering/sorting policy is the host's choice.\n */\n resultRenderer?: ResultRenderer;\n /** Host override for a loaded entity's body; heading and actions remain. */\n entityDetailBodyRenderer?: EntityDetailBodyRenderer;\n /** Host override for a loaded entity's \"{title}: {id}\" heading. */\n entityDetailHeaderRenderer?: EntityDetailHeaderRenderer;\n};\n\n// SIDEBAR_COLLAPSED_KEY persists the AppShell rail collapsed flag across reloads.\nconst SIDEBAR_COLLAPSED_KEY = \"clicky-ui:sidebar:collapsed\";\n\nexport function EntityExplorerApp({\n client,\n basePath = \"\",\n showApiExplorer = true,\n formExtensions,\n formActions,\n surfaceActionLabels,\n resultRenderer,\n entityDetailBodyRenderer,\n entityDetailHeaderRenderer,\n}: EntityExplorerAppProps) {\n const formPre = formExtensions?.pre;\n const formPost = formExtensions?.post;\n const { pathname, renderLink, navigate } = useRouter();\n const { spec } = useOperations(client);\n const surfaces = useMemo(() => getClickySurfaces(spec), [spec]);\n const surfaceGroups = useMemo(() => groupSurfacesByParent(surfaces), [surfaces]);\n const defaultSurface = useMemo(\n () => surfaces.find((surface) => !surface.admin) ?? surfaces[0],\n [surfaces],\n );\n const relativePath = useMemo(() => stripBasePath(pathname, basePath), [basePath, pathname]);\n const route = useMemo(() => parseExplorerRoute(relativePath), [relativePath]);\n const resolvedRoute = useMemo(() => resolveRouteSurface(route, surfaces), [route, surfaces]);\n const commandRuntime = useMemo<ClickyCommandRuntime>(\n () => ({\n client,\n hrefForCommand: (resolved) => buildCommandHref(basePath, resolved),\n onNavigate: (resolved) => {\n const href = buildCommandHref(basePath, resolved);\n if (!href) return;\n navigate(href);\n },\n }),\n [basePath, client, navigate],\n );\n const { initialValues: commandInitialValues } = useMemo(\n () =>\n resolvedRoute.kind === \"command\"\n ? readCommandQueryParams()\n : { initialValues: {}, autoRun: false },\n [resolvedRoute.kind, pathname],\n );\n const explorerDefinition = useMemo(\n () => ({\n key: \"explorer\",\n title: \"API Explorer\",\n description: \"Every operation exposed by the current OpenAPI spec.\",\n }),\n [],\n );\n const navSections = useMemo<AppShellNavSection[]>(() => {\n const sections: AppShellNavSection[] = surfaceGroups.map((group) => ({\n label: group.label,\n items: group.surfaces.map((surface) => {\n const icon = resolveSurfaceIcon(surface.icon);\n return {\n key: surface.key,\n label: surface.title,\n ...(icon ? { icon } : {}),\n active: isSurfaceRouteActive(resolvedRoute, surface.key),\n to: withBasePath(basePath, `/${surface.key}`),\n };\n }),\n }));\n if (showApiExplorer) {\n sections.push({\n items: [\n {\n key: explorerDefinition.key,\n label: explorerDefinition.title,\n active: resolvedRoute.kind === \"explorer\" || resolvedRoute.kind === \"command\",\n to: withBasePath(basePath, \"/explorer\"),\n },\n ],\n });\n }\n return sections;\n }, [surfaceGroups, basePath, resolvedRoute, showApiExplorer, explorerDefinition]);\n\n useEffect(() => {\n if (defaultSurface == null || relativePath !== \"/\") return;\n navigate(withBasePath(basePath, `/${defaultSurface.key}`), { replace: true });\n }, [basePath, defaultSurface, relativePath, navigate]);\n\n const content = (\n <AppShell\n brand={\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-semibold\">\n {spec?.info.title ?? \"Clicky Explorer\"}\n </div>\n <div className=\"truncate text-xs text-sidebar-foreground/60\">\n Metadata-driven entity explorer\n </div>\n </div>\n }\n navSections={navSections}\n sidebarFooter={<ThemeSwitcher />}\n // The page header belongs to the host, not to OperationCatalog — the\n // catalog renders only its results. OperationEntityPage still titles\n // itself, so this covers the collection route only.\n {...(resolvedRoute.kind === \"surface\" && resolvedRoute.surface\n ? {\n bodyHeader: (\n <div className=\"min-w-0\">\n <h1 className=\"truncate text-2xl font-semibold tracking-tight\">\n {resolvedRoute.surface.title}\n </h1>\n <p className=\"mt-1 max-w-2xl text-sm text-muted-foreground\">\n {makeSurfaceDefinition(resolvedRoute.surface).description}\n </p>\n </div>\n ),\n }\n : {})}\n collapsedStorageKey={SIDEBAR_COLLAPSED_KEY}\n contentClassName=\"p-6\"\n >\n {resolvedRoute.kind === \"surface\" ? (\n resolvedRoute.surface ? (\n <OperationCatalog\n definition={makeSurfaceDefinition(resolvedRoute.surface)}\n entities={[resolvedRoute.surface.entity]}\n client={client}\n renderLink={renderLink}\n surfaceKey={resolvedRoute.surface.key}\n commandRuntime={commandRuntime}\n {...(formPre ? { formPre } : {})}\n {...(formPost ? { formPost } : {})}\n {...(formActions ? { formActions } : {})}\n {...(surfaceActionLabels?.[resolvedRoute.surface.key]\n ? { actionLabels: surfaceActionLabels[resolvedRoute.surface.key] }\n : {})}\n {...(resultRenderer ? { resultRenderer } : {})}\n />\n ) : (\n <UnknownSurface surfaceKey={resolvedRoute.surfaceKey} />\n )\n ) : resolvedRoute.kind === \"entity\" ? (\n resolvedRoute.surface ? (\n <OperationEntityPage\n definition={makeSurfaceDefinition(resolvedRoute.surface)}\n entities={[resolvedRoute.surface.entity]}\n client={client}\n renderLink={renderLink}\n surfaceKey={resolvedRoute.surface.key}\n backHref={withBasePath(basePath, `/${resolvedRoute.surface.key}`)}\n backLabel={`Back to ${resolvedRoute.surface.title}`}\n commandRuntime={commandRuntime}\n {...(formPre ? { formPre } : {})}\n {...(formPost ? { formPost } : {})}\n {...(formActions ? { formActions } : {})}\n {...(surfaceActionLabels?.[resolvedRoute.surface.key]\n ? { actionLabels: surfaceActionLabels[resolvedRoute.surface.key] }\n : {})}\n {...(entityDetailBodyRenderer ? { entityDetailBodyRenderer } : {})}\n {...(entityDetailHeaderRenderer ? { entityDetailHeaderRenderer } : {})}\n {...(resolvedRoute.id ? { id: resolvedRoute.id } : {})}\n />\n ) : (\n <UnknownSurface surfaceKey={resolvedRoute.surfaceKey} />\n )\n ) : resolvedRoute.kind === \"command\" ? (\n <OperationCommandPage\n client={client}\n backHref={withBasePath(basePath, \"/explorer\")}\n backLabel=\"Back to API Explorer\"\n renderLink={renderLink}\n commandRuntime={commandRuntime}\n initialValues={commandInitialValues}\n autoRun={true}\n {...(resolvedRoute.operationId ? { operationId: resolvedRoute.operationId } : {})}\n />\n ) : resolvedRoute.kind === \"explorer\" ? (\n <OperationCatalog\n definition={explorerDefinition}\n entities={[]}\n allOperations\n client={client}\n renderLink={renderLink}\n commandRuntime={commandRuntime}\n />\n ) : defaultSurface == null ? (\n <div className=\"text-sm text-muted-foreground\">Loading surfaces…</div>\n ) : (\n <div className=\"text-sm text-muted-foreground\">Redirecting…</div>\n )}\n </AppShell>\n );\n\n return content;\n}\n\ntype ExplorerRoute =\n | { kind: \"root\" }\n | { kind: \"explorer\" }\n | { kind: \"command\"; operationId?: string }\n | { kind: \"surface\"; surfaceKey: string; surface?: ClickySurface }\n | {\n kind: \"entity\";\n surfaceKey: string;\n surface?: ClickySurface;\n id?: string;\n };\n\nfunction parseExplorerRoute(pathname: string): ExplorerRoute {\n const normalized = trimTrailingSlash(pathname) || \"/\";\n if (normalized === \"/\") {\n return { kind: \"root\" };\n }\n\n const segments = normalized.replace(/^\\/+/, \"\").split(\"/\");\n if (segments[0] === \"explorer\") {\n return { kind: \"explorer\" };\n }\n if (segments[0] === \"commands\") {\n return segments[1] ? { kind: \"command\", operationId: segments[1] } : { kind: \"command\" };\n }\n const surfaceKey = segments[0] ?? \"\";\n if (segments[1]) {\n return {\n kind: \"entity\",\n surfaceKey,\n id: decodeURIComponent(segments[1]),\n };\n }\n return { kind: \"surface\", surfaceKey };\n}\n\nfunction resolveRouteSurface(route: ExplorerRoute, surfaces: ClickySurface[]): ExplorerRoute {\n if (route.kind !== \"surface\" && route.kind !== \"entity\") {\n return route;\n }\n const surface = surfaces.find((item) => item.key === route.surfaceKey);\n return surface ? { ...route, surface } : route;\n}\n\nfunction isSurfaceRouteActive(route: ExplorerRoute, surfaceKey: string) {\n return (\n (route.kind === \"surface\" && route.surfaceKey === surfaceKey) ||\n (route.kind === \"entity\" && route.surfaceKey === surfaceKey)\n );\n}\n\nfunction stripBasePath(pathname: string, basePath: string) {\n const base = trimTrailingSlash(basePath);\n if (!base || base === \"/\") {\n return trimTrailingSlash(pathname) || \"/\";\n }\n if (pathname === base) {\n return \"/\";\n }\n if (pathname.startsWith(`${base}/`)) {\n return trimTrailingSlash(pathname.slice(base.length)) || \"/\";\n }\n return trimTrailingSlash(pathname) || \"/\";\n}\n\nfunction UnknownSurface({ surfaceKey }: { surfaceKey: string }) {\n return (\n <div className=\"p-6 text-sm text-muted-foreground\">\n Unknown surface: <code>{surfaceKey}</code>\n </div>\n );\n}\n\nconst LEGACY_AUTORUN_QUERY_PARAM = \"__autoRun\";\n\ntype SurfaceGroup = {\n parent: string; // the slug; \"\" for surfaces that declared no parent\n label: string; // display name in the sidebar\n surfaces: ClickySurface[];\n};\n\n// groupSurfacesByParent buckets surfaces by their ClickySurface.parent slug,\n// preserving the order surfaces appeared in the spec. Surfaces with no parent\n// fall into a trailing \"\" bucket labelled \"Other\".\nfunction groupSurfacesByParent(surfaces: ClickySurface[]): SurfaceGroup[] {\n const order: string[] = [];\n const buckets = new Map<string, ClickySurface[]>();\n for (const surface of surfaces) {\n const parent = surface.parent ?? \"\";\n if (!buckets.has(parent)) {\n buckets.set(parent, []);\n order.push(parent);\n }\n buckets.get(parent)!.push(surface);\n }\n return order.map((parent) => ({\n parent,\n label: parent === \"\" ? \"Other\" : titleCase(parent),\n surfaces: buckets.get(parent)!,\n }));\n}\n\nfunction titleCase(value: string): string {\n if (!value) return value;\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\nfunction readCommandQueryParams(): { initialValues: Record<string, string>; autoRun: boolean } {\n if (typeof window === \"undefined\") {\n return { initialValues: {}, autoRun: false };\n }\n const search = new URLSearchParams(window.location.search);\n const initialValues: Record<string, string> = {};\n let autoRun = false;\n const positional: string[] = [];\n\n for (const [key, value] of search.entries()) {\n if (key === AUTORUN_QUERY_PARAM || key === LEGACY_AUTORUN_QUERY_PARAM) {\n autoRun = value === \"1\" || value === \"true\";\n continue;\n }\n if (key.startsWith(ARG_QUERY_PREFIX)) {\n const index = Number.parseInt(key.slice(ARG_QUERY_PREFIX.length), 10);\n if (Number.isFinite(index) && index >= 0) {\n positional[index] = value;\n }\n continue;\n }\n initialValues[key] = value;\n }\n\n const packedArgs = positional.filter((value) => value !== undefined).join(\" \");\n if (packedArgs !== \"\") {\n initialValues.args = packedArgs;\n }\n\n return { initialValues, autoRun };\n}\n"],"names":["useRouter","useOperations","useMemo","getClickySurfaces","buildCommandHref","resolveSurfaceIcon","withBasePath","useEffect","jsx","AppShell","jsxs","ThemeSwitcher","OperationCatalog","makeSurfaceDefinition","OperationEntityPage","OperationCommandPage","trimTrailingSlash","AUTORUN_QUERY_PARAM","ARG_QUERY_PREFIX"],"mappings":"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"}
1
+ {"version":3,"file":"EntityExplorerApp.cjs","sources":["../../src/rpc/EntityExplorerApp.tsx"],"sourcesContent":["import { useEffect, useMemo, type ReactNode } from \"react\";\nimport { ThemeSwitcher } from \"../components/theme-switcher\";\nimport type { PreExtension, PostExtension } from \"../components/json-schema-form-types\";\nimport type { ClickyCommandRuntime } from \"../data/Clicky\";\nimport { AppShell, type AppShellNavSection } from \"../layout/AppShell\";\nimport { getClickySurfaces, makeSurfaceDefinition } from \"./clickyMetadata\";\nimport {\n ARG_QUERY_PREFIX,\n AUTORUN_QUERY_PARAM,\n buildCommandHref,\n trimTrailingSlash,\n withBasePath,\n} from \"./commandHref\";\nimport { useRouter } from \"./router\";\nimport { OperationCatalog } from \"./OperationCatalog\";\nimport type { ResultRenderer } from \"./OperationResultView\";\nimport { OperationCommandPage } from \"./OperationCommandPage\";\nimport {\n OperationEntityPage,\n type EntityDetailBodyRenderer,\n type EntityDetailHeaderRenderer,\n} from \"./OperationEntityPage\";\nimport type { FormActionsRenderer } from \"./SchemaActionForm\";\nimport { surfaceNavSection } from \"./surfaceNav\";\nimport type { ClickySurface } from \"./types\";\nimport type { OperationsApiClient } from \"./useOperations\";\nimport { useOperations } from \"./useOperations\";\n\nexport type SurfaceActionLabels = Record<string, Record<string, string>>;\n\nexport type EntityExplorerAppProps = {\n client: OperationsApiClient;\n basePath?: string;\n showApiExplorer?: boolean;\n /**\n * Custom JsonSchemaForm field extensions applied to every create/edit form the\n * explorer renders — e.g. a SecretKeySelector widget keyed on an\n * `x-clicky-component` schema hint. `pre` transforms a resolved control; `post`\n * can replace the rendered value node with a custom component.\n */\n formExtensions?: { pre?: PreExtension[]; post?: PostExtension[] };\n /**\n * Optional extra footer actions added to every create/edit form (e.g. a\n * connection \"Test\" split-button). The renderer receives the live form value\n * and the action it submits to, so it can scope itself to a given entity.\n */\n formActions?: FormActionsRenderer;\n /** Per-surface labels keyed by x-clicky verb/actionName. */\n surfaceActionLabels?: SurfaceActionLabels;\n /**\n * @deprecated Superseded by per-surface icons emitted by the backend\n * (x-clicky-icon → ClickySurface.icon). AppShell section labels are plain\n * strings, so this group-header icon map is no longer rendered. Kept for\n * source-compatibility only.\n */\n surfaceIcons?: Record<string, ReactNode>;\n /**\n * Optional host override for the result surface. Called where an entity's\n * result table renders, with the current surface key, the raw response, and\n * the default OperationResultView element. Return `defaultView` to keep the\n * standard table, or a custom node (e.g. a LogsTable for trace/log profiles\n * flagged via x-clicky-render). Filtering/sorting policy is the host's choice.\n */\n resultRenderer?: ResultRenderer;\n /** Host override for a loaded entity's body; heading and actions remain. */\n entityDetailBodyRenderer?: EntityDetailBodyRenderer;\n /** Host override for a loaded entity's \"{title}: {id}\" heading. */\n entityDetailHeaderRenderer?: EntityDetailHeaderRenderer;\n};\n\n// SIDEBAR_COLLAPSED_KEY persists the AppShell rail collapsed flag across reloads.\nconst SIDEBAR_COLLAPSED_KEY = \"clicky-ui:sidebar:collapsed\";\n\nexport function EntityExplorerApp({\n client,\n basePath = \"\",\n showApiExplorer = true,\n formExtensions,\n formActions,\n surfaceActionLabels,\n resultRenderer,\n entityDetailBodyRenderer,\n entityDetailHeaderRenderer,\n}: EntityExplorerAppProps) {\n const formPre = formExtensions?.pre;\n const formPost = formExtensions?.post;\n const { pathname, renderLink, navigate } = useRouter();\n const { spec } = useOperations(client);\n const surfaces = useMemo(() => getClickySurfaces(spec), [spec]);\n const surfaceGroups = useMemo(() => groupSurfacesByParent(surfaces), [surfaces]);\n const defaultSurface = useMemo(\n () => surfaces.find((surface) => !surface.admin) ?? surfaces[0],\n [surfaces],\n );\n const relativePath = useMemo(() => stripBasePath(pathname, basePath), [basePath, pathname]);\n const route = useMemo(() => parseExplorerRoute(relativePath), [relativePath]);\n const resolvedRoute = useMemo(() => resolveRouteSurface(route, surfaces), [route, surfaces]);\n const commandRuntime = useMemo<ClickyCommandRuntime>(\n () => ({\n client,\n hrefForCommand: (resolved) => buildCommandHref(basePath, resolved),\n onNavigate: (resolved) => {\n const href = buildCommandHref(basePath, resolved);\n if (!href) return;\n navigate(href);\n },\n }),\n [basePath, client, navigate],\n );\n const { initialValues: commandInitialValues } = useMemo(\n () =>\n resolvedRoute.kind === \"command\"\n ? readCommandQueryParams()\n : { initialValues: {}, autoRun: false },\n [resolvedRoute.kind, pathname],\n );\n const explorerDefinition = useMemo(\n () => ({\n key: \"explorer\",\n title: \"API Explorer\",\n description: \"Every operation exposed by the current OpenAPI spec.\",\n }),\n [],\n );\n const navSections = useMemo<AppShellNavSection[]>(() => {\n const sections: AppShellNavSection[] = surfaceGroups.map((group) =>\n surfaceNavSection(group.label, group.surfaces, {\n isActive: (surface) => isSurfaceRouteActive(resolvedRoute, surface.key),\n hrefFor: (surface) => withBasePath(basePath, `/${surface.key}`),\n }),\n );\n if (showApiExplorer) {\n sections.push({\n items: [\n {\n key: explorerDefinition.key,\n label: explorerDefinition.title,\n active: resolvedRoute.kind === \"explorer\" || resolvedRoute.kind === \"command\",\n to: withBasePath(basePath, \"/explorer\"),\n },\n ],\n });\n }\n return sections;\n }, [surfaceGroups, basePath, resolvedRoute, showApiExplorer, explorerDefinition]);\n\n useEffect(() => {\n if (defaultSurface == null || relativePath !== \"/\") return;\n navigate(withBasePath(basePath, `/${defaultSurface.key}`), { replace: true });\n }, [basePath, defaultSurface, relativePath, navigate]);\n\n const content = (\n <AppShell\n brand={\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-semibold\">\n {spec?.info.title ?? \"Clicky Explorer\"}\n </div>\n <div className=\"truncate text-xs text-sidebar-foreground/60\">\n Metadata-driven entity explorer\n </div>\n </div>\n }\n navSections={navSections}\n sidebarFooter={<ThemeSwitcher />}\n // The page header belongs to the host, not to OperationCatalog — the\n // catalog renders only its results. OperationEntityPage still titles\n // itself, so this covers the collection route only.\n //\n // It rides in the top bar rather than a bodyHeader row: next to the rail\n // that bar is otherwise empty, and the row it replaces cost the result\n // table ~72px of the viewport it needs to keep its sticky head and\n // pagination footer on screen without the page itself scrolling.\n {...(resolvedRoute.kind === \"surface\" && resolvedRoute.surface\n ? {\n nav: (\n <div className=\"flex min-w-0 flex-1 items-baseline gap-density-2\">\n <h1 className=\"min-w-0 truncate text-base font-semibold tracking-tight\">\n {resolvedRoute.surface.title}\n </h1>\n <p className=\"hidden min-w-0 truncate text-sm text-muted-foreground lg:block\">\n {makeSurfaceDefinition(resolvedRoute.surface).description}\n </p>\n </div>\n ),\n }\n : {})}\n collapsedStorageKey={SIDEBAR_COLLAPSED_KEY}\n // Results are wide tables, not prose — let them use the whole workspace\n // instead of the centred reading column.\n contentWidth=\"full\"\n contentClassName=\"p-6\"\n >\n {resolvedRoute.kind === \"surface\" ? (\n resolvedRoute.surface ? (\n <OperationCatalog\n definition={makeSurfaceDefinition(resolvedRoute.surface)}\n entities={[resolvedRoute.surface.entity]}\n client={client}\n renderLink={renderLink}\n surfaceKey={resolvedRoute.surface.key}\n commandRuntime={commandRuntime}\n {...(formPre ? { formPre } : {})}\n {...(formPost ? { formPost } : {})}\n {...(formActions ? { formActions } : {})}\n {...(surfaceActionLabels?.[resolvedRoute.surface.key]\n ? { actionLabels: surfaceActionLabels[resolvedRoute.surface.key] }\n : {})}\n {...(resultRenderer ? { resultRenderer } : {})}\n />\n ) : (\n <UnknownSurface surfaceKey={resolvedRoute.surfaceKey} />\n )\n ) : resolvedRoute.kind === \"entity\" ? (\n resolvedRoute.surface ? (\n <OperationEntityPage\n definition={makeSurfaceDefinition(resolvedRoute.surface)}\n entities={[resolvedRoute.surface.entity]}\n client={client}\n renderLink={renderLink}\n surfaceKey={resolvedRoute.surface.key}\n backHref={withBasePath(basePath, `/${resolvedRoute.surface.key}`)}\n backLabel={`Back to ${resolvedRoute.surface.title}`}\n commandRuntime={commandRuntime}\n {...(formPre ? { formPre } : {})}\n {...(formPost ? { formPost } : {})}\n {...(formActions ? { formActions } : {})}\n {...(surfaceActionLabels?.[resolvedRoute.surface.key]\n ? { actionLabels: surfaceActionLabels[resolvedRoute.surface.key] }\n : {})}\n {...(entityDetailBodyRenderer ? { entityDetailBodyRenderer } : {})}\n {...(entityDetailHeaderRenderer ? { entityDetailHeaderRenderer } : {})}\n {...(resolvedRoute.id ? { id: resolvedRoute.id } : {})}\n />\n ) : (\n <UnknownSurface surfaceKey={resolvedRoute.surfaceKey} />\n )\n ) : resolvedRoute.kind === \"command\" ? (\n <OperationCommandPage\n client={client}\n backHref={withBasePath(basePath, \"/explorer\")}\n backLabel=\"Back to API Explorer\"\n renderLink={renderLink}\n commandRuntime={commandRuntime}\n initialValues={commandInitialValues}\n autoRun={true}\n {...(resolvedRoute.operationId ? { operationId: resolvedRoute.operationId } : {})}\n />\n ) : resolvedRoute.kind === \"explorer\" ? (\n <OperationCatalog\n definition={explorerDefinition}\n entities={[]}\n allOperations\n client={client}\n renderLink={renderLink}\n commandRuntime={commandRuntime}\n />\n ) : defaultSurface == null ? (\n <div className=\"text-sm text-muted-foreground\">Loading surfaces…</div>\n ) : (\n <div className=\"text-sm text-muted-foreground\">Redirecting…</div>\n )}\n </AppShell>\n );\n\n return content;\n}\n\ntype ExplorerRoute =\n | { kind: \"root\" }\n | { kind: \"explorer\" }\n | { kind: \"command\"; operationId?: string }\n | { kind: \"surface\"; surfaceKey: string; surface?: ClickySurface }\n | {\n kind: \"entity\";\n surfaceKey: string;\n surface?: ClickySurface;\n id?: string;\n };\n\nfunction parseExplorerRoute(pathname: string): ExplorerRoute {\n const normalized = trimTrailingSlash(pathname) || \"/\";\n if (normalized === \"/\") {\n return { kind: \"root\" };\n }\n\n const segments = normalized.replace(/^\\/+/, \"\").split(\"/\");\n if (segments[0] === \"explorer\") {\n return { kind: \"explorer\" };\n }\n if (segments[0] === \"commands\") {\n return segments[1] ? { kind: \"command\", operationId: segments[1] } : { kind: \"command\" };\n }\n const surfaceKey = segments[0] ?? \"\";\n if (segments[1]) {\n return {\n kind: \"entity\",\n surfaceKey,\n id: decodeURIComponent(segments[1]),\n };\n }\n return { kind: \"surface\", surfaceKey };\n}\n\nfunction resolveRouteSurface(route: ExplorerRoute, surfaces: ClickySurface[]): ExplorerRoute {\n if (route.kind !== \"surface\" && route.kind !== \"entity\") {\n return route;\n }\n const surface = surfaces.find((item) => item.key === route.surfaceKey);\n return surface ? { ...route, surface } : route;\n}\n\nfunction isSurfaceRouteActive(route: ExplorerRoute, surfaceKey: string) {\n return (\n (route.kind === \"surface\" && route.surfaceKey === surfaceKey) ||\n (route.kind === \"entity\" && route.surfaceKey === surfaceKey)\n );\n}\n\nfunction stripBasePath(pathname: string, basePath: string) {\n const base = trimTrailingSlash(basePath);\n if (!base || base === \"/\") {\n return trimTrailingSlash(pathname) || \"/\";\n }\n if (pathname === base) {\n return \"/\";\n }\n if (pathname.startsWith(`${base}/`)) {\n return trimTrailingSlash(pathname.slice(base.length)) || \"/\";\n }\n return trimTrailingSlash(pathname) || \"/\";\n}\n\nfunction UnknownSurface({ surfaceKey }: { surfaceKey: string }) {\n return (\n <div className=\"p-6 text-sm text-muted-foreground\">\n Unknown surface: <code>{surfaceKey}</code>\n </div>\n );\n}\n\nconst LEGACY_AUTORUN_QUERY_PARAM = \"__autoRun\";\n\ntype SurfaceGroup = {\n parent: string; // the slug; \"\" for surfaces that declared no parent\n label: string; // display name in the sidebar\n surfaces: ClickySurface[];\n};\n\n// groupSurfacesByParent buckets surfaces by their ClickySurface.parent slug,\n// preserving the order surfaces appeared in the spec. Surfaces with no parent\n// fall into a trailing \"\" bucket labelled \"Other\".\nfunction groupSurfacesByParent(surfaces: ClickySurface[]): SurfaceGroup[] {\n const order: string[] = [];\n const buckets = new Map<string, ClickySurface[]>();\n for (const surface of surfaces) {\n const parent = surface.parent ?? \"\";\n if (!buckets.has(parent)) {\n buckets.set(parent, []);\n order.push(parent);\n }\n buckets.get(parent)!.push(surface);\n }\n return order.map((parent) => ({\n parent,\n label: parent === \"\" ? \"Other\" : titleCase(parent),\n surfaces: buckets.get(parent)!,\n }));\n}\n\nfunction titleCase(value: string): string {\n if (!value) return value;\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\nfunction readCommandQueryParams(): { initialValues: Record<string, string>; autoRun: boolean } {\n if (typeof window === \"undefined\") {\n return { initialValues: {}, autoRun: false };\n }\n const search = new URLSearchParams(window.location.search);\n const initialValues: Record<string, string> = {};\n let autoRun = false;\n const positional: string[] = [];\n\n for (const [key, value] of search.entries()) {\n if (key === AUTORUN_QUERY_PARAM || key === LEGACY_AUTORUN_QUERY_PARAM) {\n autoRun = value === \"1\" || value === \"true\";\n continue;\n }\n if (key.startsWith(ARG_QUERY_PREFIX)) {\n const index = Number.parseInt(key.slice(ARG_QUERY_PREFIX.length), 10);\n if (Number.isFinite(index) && index >= 0) {\n positional[index] = value;\n }\n continue;\n }\n initialValues[key] = value;\n }\n\n const packedArgs = positional.filter((value) => value !== undefined).join(\" \");\n if (packedArgs !== \"\") {\n initialValues.args = packedArgs;\n }\n\n return { initialValues, autoRun };\n}\n"],"names":["useRouter","useOperations","useMemo","getClickySurfaces","buildCommandHref","surfaceNavSection","withBasePath","useEffect","jsx","AppShell","jsxs","ThemeSwitcher","OperationCatalog","makeSurfaceDefinition","OperationEntityPage","OperationCommandPage","trimTrailingSlash","AUTORUN_QUERY_PARAM","ARG_QUERY_PREFIX"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityExplorerApp.d.ts","sourceRoot":"","sources":["../../src/rpc/EntityExplorerApp.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAaxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEzE,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,cAAc,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,aAAa,EAAE,CAAA;KAAE,CAAC;IAClE;;;;OAIG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,4DAA4D;IAC5D,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzC;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,4EAA4E;IAC5E,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IACpD,mEAAmE;IACnE,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;CACzD,CAAC;AAKF,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,QAAa,EACb,eAAsB,EACtB,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,wBAAwB,EACxB,0BAA0B,GAC3B,EAAE,sBAAsB,2CAsLxB"}
1
+ {"version":3,"file":"EntityExplorerApp.d.ts","sourceRoot":"","sources":["../../src/rpc/EntityExplorerApp.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAaxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEzE,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,cAAc,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,aAAa,EAAE,CAAA;KAAE,CAAC;IAClE;;;;OAIG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,4DAA4D;IAC5D,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzC;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,4EAA4E;IAC5E,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IACpD,mEAAmE;IACnE,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;CACzD,CAAC;AAKF,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,QAAa,EACb,eAAsB,EACtB,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,wBAAwB,EACxB,0BAA0B,GAC3B,EAAE,sBAAsB,2CAuLxB"}
@@ -8,7 +8,7 @@ import { useRouter } from "./router.js";
8
8
  import { OperationCatalog } from "./OperationCatalog.js";
9
9
  import { OperationCommandPage } from "./OperationCommandPage.js";
10
10
  import { OperationEntityPage } from "./OperationEntityPage.js";
11
- import { resolveSurfaceIcon } from "./surfaceIconMap.js";
11
+ import { surfaceNavSection } from "./surfaceNav.js";
12
12
  import { useOperations } from "./useOperations.js";
13
13
  const SIDEBAR_COLLAPSED_KEY = "clicky-ui:sidebar:collapsed";
14
14
  function EntityExplorerApp({
@@ -60,19 +60,12 @@ function EntityExplorerApp({
60
60
  []
61
61
  );
62
62
  const navSections = useMemo(() => {
63
- const sections = surfaceGroups.map((group) => ({
64
- label: group.label,
65
- items: group.surfaces.map((surface) => {
66
- const icon = resolveSurfaceIcon(surface.icon);
67
- return {
68
- key: surface.key,
69
- label: surface.title,
70
- ...icon ? { icon } : {},
71
- active: isSurfaceRouteActive(resolvedRoute, surface.key),
72
- to: withBasePath(basePath, `/${surface.key}`)
73
- };
63
+ const sections = surfaceGroups.map(
64
+ (group) => surfaceNavSection(group.label, group.surfaces, {
65
+ isActive: (surface) => isSurfaceRouteActive(resolvedRoute, surface.key),
66
+ hrefFor: (surface) => withBasePath(basePath, `/${surface.key}`)
74
67
  })
75
- }));
68
+ );
76
69
  if (showApiExplorer) {
77
70
  sections.push({
78
71
  items: [
@@ -101,12 +94,13 @@ function EntityExplorerApp({
101
94
  navSections,
102
95
  sidebarFooter: /* @__PURE__ */ jsx(ThemeSwitcher, {}),
103
96
  ...resolvedRoute.kind === "surface" && resolvedRoute.surface ? {
104
- bodyHeader: /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
105
- /* @__PURE__ */ jsx("h1", { className: "truncate text-2xl font-semibold tracking-tight", children: resolvedRoute.surface.title }),
106
- /* @__PURE__ */ jsx("p", { className: "mt-1 max-w-2xl text-sm text-muted-foreground", children: makeSurfaceDefinition(resolvedRoute.surface).description })
97
+ nav: /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 items-baseline gap-density-2", children: [
98
+ /* @__PURE__ */ jsx("h1", { className: "min-w-0 truncate text-base font-semibold tracking-tight", children: resolvedRoute.surface.title }),
99
+ /* @__PURE__ */ jsx("p", { className: "hidden min-w-0 truncate text-sm text-muted-foreground lg:block", children: makeSurfaceDefinition(resolvedRoute.surface).description })
107
100
  ] })
108
101
  } : {},
109
102
  collapsedStorageKey: SIDEBAR_COLLAPSED_KEY,
103
+ contentWidth: "full",
110
104
  contentClassName: "p-6",
111
105
  children: resolvedRoute.kind === "surface" ? resolvedRoute.surface ? /* @__PURE__ */ jsx(
112
106
  OperationCatalog,