@flanksource/clicky-ui 0.3.15 → 0.3.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (823) hide show
  1. package/NOTICE.md +10 -0
  2. package/dist/ai.cjs +33 -4
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +31 -2
  5. package/dist/ai.js.map +1 -1
  6. package/dist/chat.cjs +6 -0
  7. package/dist/chat.cjs.map +1 -1
  8. package/dist/chat.js +7 -1
  9. package/dist/chat.js.map +1 -1
  10. package/dist/components/Combobox.cjs +92 -170
  11. package/dist/components/Combobox.cjs.map +1 -1
  12. package/dist/components/Combobox.d.ts +2 -111
  13. package/dist/components/Combobox.d.ts.map +1 -1
  14. package/dist/components/Combobox.js +95 -173
  15. package/dist/components/Combobox.js.map +1 -1
  16. package/dist/components/ComboboxActions.cjs +70 -0
  17. package/dist/components/ComboboxActions.cjs.map +1 -0
  18. package/dist/components/ComboboxActions.d.ts +8 -0
  19. package/dist/components/ComboboxActions.d.ts.map +1 -0
  20. package/dist/components/ComboboxActions.js +70 -0
  21. package/dist/components/ComboboxActions.js.map +1 -0
  22. package/dist/components/ComboboxMenu.cjs +160 -0
  23. package/dist/components/ComboboxMenu.cjs.map +1 -0
  24. package/dist/components/ComboboxMenu.d.ts +22 -0
  25. package/dist/components/ComboboxMenu.d.ts.map +1 -0
  26. package/dist/components/ComboboxMenu.js +160 -0
  27. package/dist/components/ComboboxMenu.js.map +1 -0
  28. package/dist/components/EndpointSelector.cjs +407 -0
  29. package/dist/components/EndpointSelector.cjs.map +1 -0
  30. package/dist/components/EndpointSelector.d.ts +3 -0
  31. package/dist/components/EndpointSelector.d.ts.map +1 -0
  32. package/dist/components/EndpointSelector.js +407 -0
  33. package/dist/components/EndpointSelector.js.map +1 -0
  34. package/dist/components/EndpointSelector.model.d.ts +52 -0
  35. package/dist/components/EndpointSelector.model.d.ts.map +1 -0
  36. package/dist/components/FilterBar.cjs +12 -0
  37. package/dist/components/FilterBar.cjs.map +1 -1
  38. package/dist/components/FilterBar.d.ts +4 -0
  39. package/dist/components/FilterBar.d.ts.map +1 -1
  40. package/dist/components/FilterBar.js +12 -0
  41. package/dist/components/FilterBar.js.map +1 -1
  42. package/dist/components/InputField.cjs +11 -12
  43. package/dist/components/InputField.cjs.map +1 -1
  44. package/dist/components/InputField.d.ts +7 -0
  45. package/dist/components/InputField.d.ts.map +1 -1
  46. package/dist/components/InputField.js +12 -13
  47. package/dist/components/InputField.js.map +1 -1
  48. package/dist/components/JsonSchemaForm.cjs +22 -16
  49. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  50. package/dist/components/JsonSchemaForm.d.ts +1 -1
  51. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  52. package/dist/components/JsonSchemaForm.js +22 -16
  53. package/dist/components/JsonSchemaForm.js.map +1 -1
  54. package/dist/components/MultiSelect.cjs +3 -3
  55. package/dist/components/MultiSelect.cjs.map +1 -1
  56. package/dist/components/MultiSelect.d.ts.map +1 -1
  57. package/dist/components/MultiSelect.js +3 -3
  58. package/dist/components/MultiSelect.js.map +1 -1
  59. package/dist/components/SecretKeySelector.cjs +150 -77
  60. package/dist/components/SecretKeySelector.cjs.map +1 -1
  61. package/dist/components/SecretKeySelector.d.ts.map +1 -1
  62. package/dist/components/SecretKeySelector.js +151 -78
  63. package/dist/components/SecretKeySelector.js.map +1 -1
  64. package/dist/components/WorkloadPicker.cjs +2 -1
  65. package/dist/components/WorkloadPicker.cjs.map +1 -1
  66. package/dist/components/WorkloadPicker.d.ts +6 -1
  67. package/dist/components/WorkloadPicker.d.ts.map +1 -1
  68. package/dist/components/WorkloadPicker.js +2 -1
  69. package/dist/components/WorkloadPicker.js.map +1 -1
  70. package/dist/components/combobox-types.d.ts +107 -0
  71. package/dist/components/combobox-types.d.ts.map +1 -0
  72. package/dist/components/combobox-utils.cjs +21 -0
  73. package/dist/components/combobox-utils.cjs.map +1 -0
  74. package/dist/components/combobox-utils.d.ts +15 -0
  75. package/dist/components/combobox-utils.d.ts.map +1 -0
  76. package/dist/components/combobox-utils.js +21 -0
  77. package/dist/components/combobox-utils.js.map +1 -0
  78. package/dist/components/endpoint-port.cjs +12 -0
  79. package/dist/components/endpoint-port.cjs.map +1 -0
  80. package/dist/components/endpoint-port.d.ts +4 -0
  81. package/dist/components/endpoint-port.d.ts.map +1 -0
  82. package/dist/components/endpoint-port.js +12 -0
  83. package/dist/components/endpoint-port.js.map +1 -0
  84. package/dist/components/json-schema-form-array.cjs +12 -23
  85. package/dist/components/json-schema-form-array.cjs.map +1 -1
  86. package/dist/components/json-schema-form-array.d.ts +1 -1
  87. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  88. package/dist/components/json-schema-form-array.js +12 -23
  89. package/dist/components/json-schema-form-array.js.map +1 -1
  90. package/dist/components/json-schema-form-discriminator.cjs +6 -2
  91. package/dist/components/json-schema-form-discriminator.cjs.map +1 -1
  92. package/dist/components/json-schema-form-discriminator.d.ts.map +1 -1
  93. package/dist/components/json-schema-form-discriminator.js +6 -2
  94. package/dist/components/json-schema-form-discriminator.js.map +1 -1
  95. package/dist/components/json-schema-form-error-display.cjs +50 -0
  96. package/dist/components/json-schema-form-error-display.cjs.map +1 -0
  97. package/dist/components/json-schema-form-error-display.d.ts +12 -0
  98. package/dist/components/json-schema-form-error-display.d.ts.map +1 -0
  99. package/dist/components/json-schema-form-error-display.js +50 -0
  100. package/dist/components/json-schema-form-error-display.js.map +1 -0
  101. package/dist/components/json-schema-form-error-types.d.ts +26 -0
  102. package/dist/components/json-schema-form-error-types.d.ts.map +1 -0
  103. package/dist/components/json-schema-form-errors.cjs +169 -0
  104. package/dist/components/json-schema-form-errors.cjs.map +1 -0
  105. package/dist/components/json-schema-form-errors.d.ts +14 -0
  106. package/dist/components/json-schema-form-errors.d.ts.map +1 -0
  107. package/dist/components/json-schema-form-errors.js +169 -0
  108. package/dist/components/json-schema-form-errors.js.map +1 -0
  109. package/dist/components/json-schema-form-object.cjs +12 -2
  110. package/dist/components/json-schema-form-object.cjs.map +1 -1
  111. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  112. package/dist/components/json-schema-form-object.js +12 -2
  113. package/dist/components/json-schema-form-object.js.map +1 -1
  114. package/dist/components/json-schema-form-refs.cjs +84 -19
  115. package/dist/components/json-schema-form-refs.cjs.map +1 -1
  116. package/dist/components/json-schema-form-refs.d.ts.map +1 -1
  117. package/dist/components/json-schema-form-refs.js +84 -19
  118. package/dist/components/json-schema-form-refs.js.map +1 -1
  119. package/dist/components/json-schema-form-render.cjs +33 -10
  120. package/dist/components/json-schema-form-render.cjs.map +1 -1
  121. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  122. package/dist/components/json-schema-form-render.js +34 -11
  123. package/dist/components/json-schema-form-render.js.map +1 -1
  124. package/dist/components/json-schema-form-resolve.cjs +16 -4
  125. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  126. package/dist/components/json-schema-form-resolve.d.ts +1 -0
  127. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  128. package/dist/components/json-schema-form-resolve.js +17 -5
  129. package/dist/components/json-schema-form-resolve.js.map +1 -1
  130. package/dist/components/json-schema-form-types.d.ts +4 -3
  131. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  132. package/dist/components.cjs +13 -0
  133. package/dist/components.cjs.map +1 -1
  134. package/dist/components.d.ts +8 -1
  135. package/dist/components.d.ts.map +1 -1
  136. package/dist/components.js +15 -2
  137. package/dist/components.js.map +1 -1
  138. package/dist/data/DataTable.cjs +205 -14
  139. package/dist/data/DataTable.cjs.map +1 -1
  140. package/dist/data/DataTable.d.ts +41 -0
  141. package/dist/data/DataTable.d.ts.map +1 -1
  142. package/dist/data/DataTable.grouping.cjs +21 -0
  143. package/dist/data/DataTable.grouping.cjs.map +1 -0
  144. package/dist/data/DataTable.grouping.d.ts +26 -0
  145. package/dist/data/DataTable.grouping.d.ts.map +1 -0
  146. package/dist/data/DataTable.grouping.js +21 -0
  147. package/dist/data/DataTable.grouping.js.map +1 -0
  148. package/dist/data/DataTable.js +205 -14
  149. package/dist/data/DataTable.js.map +1 -1
  150. package/dist/data/Markdown.cjs +45 -1
  151. package/dist/data/Markdown.cjs.map +1 -1
  152. package/dist/data/Markdown.d.ts +3 -2
  153. package/dist/data/Markdown.d.ts.map +1 -1
  154. package/dist/data/Markdown.js +45 -1
  155. package/dist/data/Markdown.js.map +1 -1
  156. package/dist/data/MarkdownEditor.cjs +4 -3
  157. package/dist/data/MarkdownEditor.cjs.map +1 -1
  158. package/dist/data/MarkdownEditor.d.ts +6 -2
  159. package/dist/data/MarkdownEditor.d.ts.map +1 -1
  160. package/dist/data/MarkdownEditor.js +4 -3
  161. package/dist/data/MarkdownEditor.js.map +1 -1
  162. package/dist/data/ServerTimingBadge.cjs +64 -0
  163. package/dist/data/ServerTimingBadge.cjs.map +1 -0
  164. package/dist/data/ServerTimingBadge.d.ts +9 -0
  165. package/dist/data/ServerTimingBadge.d.ts.map +1 -0
  166. package/dist/data/ServerTimingBadge.js +64 -0
  167. package/dist/data/ServerTimingBadge.js.map +1 -0
  168. package/dist/data/StatStrip.cjs +99 -0
  169. package/dist/data/StatStrip.cjs.map +1 -0
  170. package/dist/data/StatStrip.d.ts +41 -0
  171. package/dist/data/StatStrip.d.ts.map +1 -0
  172. package/dist/data/StatStrip.js +99 -0
  173. package/dist/data/StatStrip.js.map +1 -0
  174. package/dist/data/TaskManager.cjs +20 -1
  175. package/dist/data/TaskManager.cjs.map +1 -1
  176. package/dist/data/TaskManager.d.ts +3 -1
  177. package/dist/data/TaskManager.d.ts.map +1 -1
  178. package/dist/data/TaskManager.js +20 -1
  179. package/dist/data/TaskManager.js.map +1 -1
  180. package/dist/data/TaskManagerButton.cjs +49 -0
  181. package/dist/data/TaskManagerButton.cjs.map +1 -0
  182. package/dist/data/TaskManagerButton.d.ts +8 -0
  183. package/dist/data/TaskManagerButton.d.ts.map +1 -0
  184. package/dist/data/TaskManagerButton.js +49 -0
  185. package/dist/data/TaskManagerButton.js.map +1 -0
  186. package/dist/data/TaskProcessDetails.cjs +113 -0
  187. package/dist/data/TaskProcessDetails.cjs.map +1 -0
  188. package/dist/data/TaskProcessDetails.d.ts +6 -0
  189. package/dist/data/TaskProcessDetails.d.ts.map +1 -0
  190. package/dist/data/TaskProcessDetails.js +113 -0
  191. package/dist/data/TaskProcessDetails.js.map +1 -0
  192. package/dist/data/TaskProgress.cjs +106 -19
  193. package/dist/data/TaskProgress.cjs.map +1 -1
  194. package/dist/data/TaskProgress.d.ts +4 -2
  195. package/dist/data/TaskProgress.d.ts.map +1 -1
  196. package/dist/data/TaskProgress.js +107 -20
  197. package/dist/data/TaskProgress.js.map +1 -1
  198. package/dist/data/TaskSnapshot.cjs.map +1 -1
  199. package/dist/data/TaskSnapshot.d.ts +43 -0
  200. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  201. package/dist/data/TaskSnapshot.js.map +1 -1
  202. package/dist/data/Tree.cjs +91 -82
  203. package/dist/data/Tree.cjs.map +1 -1
  204. package/dist/data/Tree.d.ts +3 -1
  205. package/dist/data/Tree.d.ts.map +1 -1
  206. package/dist/data/Tree.js +91 -82
  207. package/dist/data/Tree.js.map +1 -1
  208. package/dist/data/TreeNode.cjs +3 -0
  209. package/dist/data/TreeNode.cjs.map +1 -1
  210. package/dist/data/TreeNode.d.ts +2 -1
  211. package/dist/data/TreeNode.d.ts.map +1 -1
  212. package/dist/data/TreeNode.js +3 -0
  213. package/dist/data/TreeNode.js.map +1 -1
  214. package/dist/data/ai/ChatWindow.cjs +18 -141
  215. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  216. package/dist/data/ai/ChatWindow.d.ts +2 -40
  217. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  218. package/dist/data/ai/ChatWindow.js +15 -138
  219. package/dist/data/ai/ChatWindow.js.map +1 -1
  220. package/dist/data/ai/ChatWindow.models.cjs +11 -0
  221. package/dist/data/ai/ChatWindow.models.cjs.map +1 -0
  222. package/dist/data/ai/ChatWindow.models.d.ts +3 -0
  223. package/dist/data/ai/ChatWindow.models.d.ts.map +1 -0
  224. package/dist/data/ai/ChatWindow.models.js +11 -0
  225. package/dist/data/ai/ChatWindow.models.js.map +1 -0
  226. package/dist/data/ai/ChatWindow.preferences.cjs +57 -0
  227. package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -0
  228. package/dist/data/ai/ChatWindow.preferences.d.ts +13 -0
  229. package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -0
  230. package/dist/data/ai/ChatWindow.preferences.js +57 -0
  231. package/dist/data/ai/ChatWindow.preferences.js.map +1 -0
  232. package/dist/data/ai/ChatWindow.thread-status.cjs +14 -0
  233. package/dist/data/ai/ChatWindow.thread-status.cjs.map +1 -0
  234. package/dist/data/ai/ChatWindow.thread-status.d.ts +5 -0
  235. package/dist/data/ai/ChatWindow.thread-status.d.ts.map +1 -0
  236. package/dist/data/ai/ChatWindow.thread-status.js +14 -0
  237. package/dist/data/ai/ChatWindow.thread-status.js.map +1 -0
  238. package/dist/data/ai/ChatWindow.thread.cjs +68 -0
  239. package/dist/data/ai/ChatWindow.thread.cjs.map +1 -0
  240. package/dist/data/ai/ChatWindow.thread.d.ts +16 -0
  241. package/dist/data/ai/ChatWindow.thread.d.ts.map +1 -0
  242. package/dist/data/ai/ChatWindow.thread.js +68 -0
  243. package/dist/data/ai/ChatWindow.thread.js.map +1 -0
  244. package/dist/data/ai/ChatWindow.tool-catalog.cjs +99 -0
  245. package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -0
  246. package/dist/data/ai/ChatWindow.tool-catalog.d.ts +3 -0
  247. package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -0
  248. package/dist/data/ai/ChatWindow.tool-catalog.js +99 -0
  249. package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -0
  250. package/dist/data/ai/ChatWindow.types.d.ts +41 -0
  251. package/dist/data/ai/ChatWindow.types.d.ts.map +1 -0
  252. package/dist/data/ai/ContextBadges.cjs +76 -46
  253. package/dist/data/ai/ContextBadges.cjs.map +1 -1
  254. package/dist/data/ai/ContextBadges.d.ts.map +1 -1
  255. package/dist/data/ai/ContextBadges.js +77 -47
  256. package/dist/data/ai/ContextBadges.js.map +1 -1
  257. package/dist/data/ai/PromptPicker/PromptPicker.cjs +151 -32
  258. package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
  259. package/dist/data/ai/PromptPicker/PromptPicker.d.ts +7 -4
  260. package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -1
  261. package/dist/data/ai/PromptPicker/PromptPicker.js +152 -33
  262. package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
  263. package/dist/data/ai/PromptPicker/PromptSourceRepair.cjs +133 -0
  264. package/dist/data/ai/PromptPicker/PromptSourceRepair.cjs.map +1 -0
  265. package/dist/data/ai/PromptPicker/PromptSourceRepair.d.ts +11 -0
  266. package/dist/data/ai/PromptPicker/PromptSourceRepair.d.ts.map +1 -0
  267. package/dist/data/ai/PromptPicker/PromptSourceRepair.js +133 -0
  268. package/dist/data/ai/PromptPicker/PromptSourceRepair.js.map +1 -0
  269. package/dist/data/ai/PromptPicker/index.d.ts +2 -1
  270. package/dist/data/ai/PromptPicker/index.d.ts.map +1 -1
  271. package/dist/data/ai/PromptPicker/types.cjs +7 -0
  272. package/dist/data/ai/PromptPicker/types.cjs.map +1 -0
  273. package/dist/data/ai/PromptPicker/types.d.ts +18 -2
  274. package/dist/data/ai/PromptPicker/types.d.ts.map +1 -1
  275. package/dist/data/ai/PromptPicker/types.js +7 -0
  276. package/dist/data/ai/PromptPicker/types.js.map +1 -0
  277. package/dist/data/ai/PromptRunEditor/index.cjs +171 -91
  278. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  279. package/dist/data/ai/PromptRunEditor/index.d.ts +9 -9
  280. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  281. package/dist/data/ai/PromptRunEditor/index.js +175 -95
  282. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  283. package/dist/data/ai/PromptRunEditor/model.cjs +47 -0
  284. package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -0
  285. package/dist/data/ai/PromptRunEditor/model.d.ts +17 -0
  286. package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -0
  287. package/dist/data/ai/PromptRunEditor/model.js +47 -0
  288. package/dist/data/ai/PromptRunEditor/model.js.map +1 -0
  289. package/dist/data/ai/RuntimeBar.cjs +408 -0
  290. package/dist/data/ai/RuntimeBar.cjs.map +1 -0
  291. package/dist/data/ai/RuntimeBar.d.ts +20 -0
  292. package/dist/data/ai/RuntimeBar.d.ts.map +1 -0
  293. package/dist/data/ai/RuntimeBar.js +408 -0
  294. package/dist/data/ai/RuntimeBar.js.map +1 -0
  295. package/dist/data/ai/RuntimeBar.model.cjs +14 -0
  296. package/dist/data/ai/RuntimeBar.model.cjs.map +1 -0
  297. package/dist/data/ai/RuntimeBar.model.d.ts +10 -0
  298. package/dist/data/ai/RuntimeBar.model.d.ts.map +1 -0
  299. package/dist/data/ai/RuntimeBar.model.js +14 -0
  300. package/dist/data/ai/RuntimeBar.model.js.map +1 -0
  301. package/dist/data/ai/RuntimeBarCombo.cjs +359 -0
  302. package/dist/data/ai/RuntimeBarCombo.cjs.map +1 -0
  303. package/dist/data/ai/RuntimeBarCombo.d.ts +22 -0
  304. package/dist/data/ai/RuntimeBarCombo.d.ts.map +1 -0
  305. package/dist/data/ai/RuntimeBarCombo.js +359 -0
  306. package/dist/data/ai/RuntimeBarCombo.js.map +1 -0
  307. package/dist/data/ai/SessionChatComposer.cjs +56 -0
  308. package/dist/data/ai/SessionChatComposer.cjs.map +1 -0
  309. package/dist/data/ai/SessionChatComposer.d.ts +24 -0
  310. package/dist/data/ai/SessionChatComposer.d.ts.map +1 -0
  311. package/dist/data/ai/SessionChatComposer.js +56 -0
  312. package/dist/data/ai/SessionChatComposer.js.map +1 -0
  313. package/dist/data/ai/SessionInspector.cjs +222 -382
  314. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  315. package/dist/data/ai/SessionInspector.collection-types.d.ts +55 -0
  316. package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -0
  317. package/dist/data/ai/SessionInspector.collection.cjs +377 -0
  318. package/dist/data/ai/SessionInspector.collection.cjs.map +1 -0
  319. package/dist/data/ai/SessionInspector.collection.d.ts +15 -0
  320. package/dist/data/ai/SessionInspector.collection.d.ts.map +1 -0
  321. package/dist/data/ai/SessionInspector.collection.js +377 -0
  322. package/dist/data/ai/SessionInspector.collection.js.map +1 -0
  323. package/dist/data/ai/SessionInspector.d.ts +9 -4
  324. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  325. package/dist/data/ai/SessionInspector.files.cjs +162 -0
  326. package/dist/data/ai/SessionInspector.files.cjs.map +1 -0
  327. package/dist/data/ai/SessionInspector.files.d.ts +5 -0
  328. package/dist/data/ai/SessionInspector.files.d.ts.map +1 -0
  329. package/dist/data/ai/SessionInspector.files.js +162 -0
  330. package/dist/data/ai/SessionInspector.files.js.map +1 -0
  331. package/dist/data/ai/SessionInspector.hierarchy-state.cjs +148 -0
  332. package/dist/data/ai/SessionInspector.hierarchy-state.cjs.map +1 -0
  333. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts +15 -0
  334. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts.map +1 -0
  335. package/dist/data/ai/SessionInspector.hierarchy-state.js +148 -0
  336. package/dist/data/ai/SessionInspector.hierarchy-state.js.map +1 -0
  337. package/dist/data/ai/SessionInspector.hierarchy.cjs +256 -0
  338. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -0
  339. package/dist/data/ai/SessionInspector.hierarchy.d.ts +9 -0
  340. package/dist/data/ai/SessionInspector.hierarchy.d.ts.map +1 -0
  341. package/dist/data/ai/SessionInspector.hierarchy.js +256 -0
  342. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -0
  343. package/dist/data/ai/SessionInspector.js +224 -384
  344. package/dist/data/ai/SessionInspector.js.map +1 -1
  345. package/dist/data/ai/SessionInspector.model.cjs +125 -0
  346. package/dist/data/ai/SessionInspector.model.cjs.map +1 -0
  347. package/dist/data/ai/SessionInspector.model.d.ts +14 -0
  348. package/dist/data/ai/SessionInspector.model.d.ts.map +1 -0
  349. package/dist/data/ai/SessionInspector.model.js +125 -0
  350. package/dist/data/ai/SessionInspector.model.js.map +1 -0
  351. package/dist/data/ai/SessionInspector.panels.cjs +265 -0
  352. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -0
  353. package/dist/data/ai/SessionInspector.panels.d.ts +10 -0
  354. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -0
  355. package/dist/data/ai/SessionInspector.panels.js +265 -0
  356. package/dist/data/ai/SessionInspector.panels.js.map +1 -0
  357. package/dist/data/ai/SessionInspector.plan.cjs +77 -0
  358. package/dist/data/ai/SessionInspector.plan.cjs.map +1 -0
  359. package/dist/data/ai/SessionInspector.plan.d.ts +6 -0
  360. package/dist/data/ai/SessionInspector.plan.d.ts.map +1 -0
  361. package/dist/data/ai/SessionInspector.plan.js +77 -0
  362. package/dist/data/ai/SessionInspector.plan.js.map +1 -0
  363. package/dist/data/ai/SessionInspector.summary.cjs +182 -0
  364. package/dist/data/ai/SessionInspector.summary.cjs.map +1 -0
  365. package/dist/data/ai/SessionInspector.summary.d.ts +8 -0
  366. package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -0
  367. package/dist/data/ai/SessionInspector.summary.js +182 -0
  368. package/dist/data/ai/SessionInspector.summary.js.map +1 -0
  369. package/dist/data/ai/SessionInspector.transcript.cjs +94 -0
  370. package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -0
  371. package/dist/data/ai/SessionInspector.transcript.d.ts +7 -0
  372. package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -0
  373. package/dist/data/ai/SessionInspector.transcript.js +94 -0
  374. package/dist/data/ai/SessionInspector.transcript.js.map +1 -0
  375. package/dist/data/ai/SessionInspector.turns.d.ts +11 -0
  376. package/dist/data/ai/SessionInspector.turns.d.ts.map +1 -0
  377. package/dist/data/ai/SessionViewer.cjs +86 -121
  378. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  379. package/dist/data/ai/SessionViewer.d.ts +8 -1
  380. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  381. package/dist/data/ai/SessionViewer.fixtures.d.ts +2 -0
  382. package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -1
  383. package/dist/data/ai/SessionViewer.header.cjs +118 -0
  384. package/dist/data/ai/SessionViewer.header.cjs.map +1 -0
  385. package/dist/data/ai/SessionViewer.header.d.ts +11 -0
  386. package/dist/data/ai/SessionViewer.header.d.ts.map +1 -0
  387. package/dist/data/ai/SessionViewer.header.js +118 -0
  388. package/dist/data/ai/SessionViewer.header.js.map +1 -0
  389. package/dist/data/ai/SessionViewer.js +87 -122
  390. package/dist/data/ai/SessionViewer.js.map +1 -1
  391. package/dist/data/ai/SessionViewer.model.cjs +111 -39
  392. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  393. package/dist/data/ai/SessionViewer.model.d.ts +6 -0
  394. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  395. package/dist/data/ai/SessionViewer.model.js +111 -39
  396. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  397. package/dist/data/ai/SessionViewer.row-metadata.cjs +132 -0
  398. package/dist/data/ai/SessionViewer.row-metadata.cjs.map +1 -0
  399. package/dist/data/ai/SessionViewer.row-metadata.d.ts +14 -0
  400. package/dist/data/ai/SessionViewer.row-metadata.d.ts.map +1 -0
  401. package/dist/data/ai/SessionViewer.row-metadata.js +132 -0
  402. package/dist/data/ai/SessionViewer.row-metadata.js.map +1 -0
  403. package/dist/data/ai/SessionViewer.row-time.cjs +15 -0
  404. package/dist/data/ai/SessionViewer.row-time.cjs.map +1 -0
  405. package/dist/data/ai/SessionViewer.row-time.d.ts +3 -0
  406. package/dist/data/ai/SessionViewer.row-time.d.ts.map +1 -0
  407. package/dist/data/ai/SessionViewer.row-time.js +15 -0
  408. package/dist/data/ai/SessionViewer.row-time.js.map +1 -0
  409. package/dist/data/ai/SessionViewer.rows.cjs +37 -424
  410. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  411. package/dist/data/ai/SessionViewer.rows.d.ts +5 -2
  412. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  413. package/dist/data/ai/SessionViewer.rows.js +31 -418
  414. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  415. package/dist/data/ai/SessionViewer.tool-details.cjs +65 -0
  416. package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -0
  417. package/dist/data/ai/SessionViewer.tool-details.d.ts +20 -0
  418. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -0
  419. package/dist/data/ai/SessionViewer.tool-details.js +65 -0
  420. package/dist/data/ai/SessionViewer.tool-details.js.map +1 -0
  421. package/dist/data/ai/SessionViewer.tool-row.cjs +404 -0
  422. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -0
  423. package/dist/data/ai/SessionViewer.tool-row.d.ts +12 -0
  424. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -0
  425. package/dist/data/ai/SessionViewer.tool-row.js +404 -0
  426. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -0
  427. package/dist/data/ai/SessionViewer.unified.d.ts +11 -2
  428. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  429. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +44 -26
  430. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
  431. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
  432. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +47 -29
  433. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
  434. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +45 -153
  435. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
  436. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
  437. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +51 -159
  438. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
  439. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +0 -1
  440. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
  441. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts.map +1 -1
  442. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +0 -1
  443. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
  444. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs +0 -5
  445. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs.map +1 -1
  446. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts.map +1 -1
  447. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js +0 -5
  448. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js.map +1 -1
  449. package/dist/data/ai/SpecRuntimeEditor/fields.js +1 -1
  450. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
  451. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
  452. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
  453. package/dist/data/ai/SpecRuntimeEditor/update.cjs +19 -6
  454. package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
  455. package/dist/data/ai/SpecRuntimeEditor/update.d.ts +5 -2
  456. package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
  457. package/dist/data/ai/SpecRuntimeEditor/update.js +19 -6
  458. package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
  459. package/dist/data/ai/SpecRuntimeEditor.model.cjs +67 -10
  460. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
  461. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +31 -4
  462. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
  463. package/dist/data/ai/SpecRuntimeEditor.model.js +67 -10
  464. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
  465. package/dist/data/ai/ThreadPicker.cjs.map +1 -1
  466. package/dist/data/ai/ThreadPicker.d.ts +2 -0
  467. package/dist/data/ai/ThreadPicker.d.ts.map +1 -1
  468. package/dist/data/ai/ThreadPicker.js.map +1 -1
  469. package/dist/data/ai/ToolPreferences.cjs +2 -1
  470. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  471. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  472. package/dist/data/ai/ToolPreferences.js +2 -1
  473. package/dist/data/ai/ToolPreferences.js.map +1 -1
  474. package/dist/data/ai/agent-action-icons.cjs +7 -10
  475. package/dist/data/ai/agent-action-icons.cjs.map +1 -1
  476. package/dist/data/ai/agent-action-icons.d.ts +1 -2
  477. package/dist/data/ai/agent-action-icons.d.ts.map +1 -1
  478. package/dist/data/ai/agent-action-icons.js +8 -11
  479. package/dist/data/ai/agent-action-icons.js.map +1 -1
  480. package/dist/data/ai/context.cjs.map +1 -1
  481. package/dist/data/ai/context.d.ts +4 -0
  482. package/dist/data/ai/context.d.ts.map +1 -1
  483. package/dist/data/ai/context.js.map +1 -1
  484. package/dist/data/ai/examples/sessions/claude-complete.cjs +513 -0
  485. package/dist/data/ai/examples/sessions/claude-complete.cjs.map +1 -0
  486. package/dist/data/ai/examples/sessions/claude-complete.d.ts +3 -0
  487. package/dist/data/ai/examples/sessions/claude-complete.d.ts.map +1 -0
  488. package/dist/data/ai/examples/sessions/claude-complete.js +513 -0
  489. package/dist/data/ai/examples/sessions/claude-complete.js.map +1 -0
  490. package/dist/data/ai/examples/sessions/claude.cjs +252 -0
  491. package/dist/data/ai/examples/sessions/claude.cjs.map +1 -0
  492. package/dist/data/ai/examples/sessions/claude.d.ts +3 -0
  493. package/dist/data/ai/examples/sessions/claude.d.ts.map +1 -0
  494. package/dist/data/ai/examples/sessions/claude.js +252 -0
  495. package/dist/data/ai/examples/sessions/claude.js.map +1 -0
  496. package/dist/data/ai/examples/sessions/codex-complete.cjs +394 -0
  497. package/dist/data/ai/examples/sessions/codex-complete.cjs.map +1 -0
  498. package/dist/data/ai/examples/sessions/codex-complete.d.ts +3 -0
  499. package/dist/data/ai/examples/sessions/codex-complete.d.ts.map +1 -0
  500. package/dist/data/ai/examples/sessions/codex-complete.js +394 -0
  501. package/dist/data/ai/examples/sessions/codex-complete.js.map +1 -0
  502. package/dist/data/ai/examples/sessions/codex.cjs +236 -0
  503. package/dist/data/ai/examples/sessions/codex.cjs.map +1 -0
  504. package/dist/data/ai/examples/sessions/codex.d.ts +3 -0
  505. package/dist/data/ai/examples/sessions/codex.d.ts.map +1 -0
  506. package/dist/data/ai/examples/sessions/codex.js +236 -0
  507. package/dist/data/ai/examples/sessions/codex.js.map +1 -0
  508. package/dist/data/ai/examples/sessions/index.cjs +21 -0
  509. package/dist/data/ai/examples/sessions/index.cjs.map +1 -0
  510. package/dist/data/ai/examples/sessions/index.d.ts +10 -0
  511. package/dist/data/ai/examples/sessions/index.d.ts.map +1 -0
  512. package/dist/data/ai/examples/sessions/index.js +21 -0
  513. package/dist/data/ai/examples/sessions/index.js.map +1 -0
  514. package/dist/data/ai/index.d.ts +9 -3
  515. package/dist/data/ai/index.d.ts.map +1 -1
  516. package/dist/data/ai/model-capabilities.cjs +12 -1
  517. package/dist/data/ai/model-capabilities.cjs.map +1 -1
  518. package/dist/data/ai/model-capabilities.d.ts +2 -6
  519. package/dist/data/ai/model-capabilities.d.ts.map +1 -1
  520. package/dist/data/ai/model-capabilities.js +12 -1
  521. package/dist/data/ai/model-capabilities.js.map +1 -1
  522. package/dist/data/ai/runtime-mode.cjs +72 -1
  523. package/dist/data/ai/runtime-mode.cjs.map +1 -1
  524. package/dist/data/ai/runtime-mode.d.ts +28 -0
  525. package/dist/data/ai/runtime-mode.d.ts.map +1 -1
  526. package/dist/data/ai/runtime-mode.js +73 -2
  527. package/dist/data/ai/runtime-mode.js.map +1 -1
  528. package/dist/data/cells/EntityCell.cjs +64 -0
  529. package/dist/data/cells/EntityCell.cjs.map +1 -0
  530. package/dist/data/cells/EntityCell.d.ts +27 -0
  531. package/dist/data/cells/EntityCell.d.ts.map +1 -0
  532. package/dist/data/cells/EntityCell.js +64 -0
  533. package/dist/data/cells/EntityCell.js.map +1 -0
  534. package/dist/data/chat/Attachment.cjs +53 -13
  535. package/dist/data/chat/Attachment.cjs.map +1 -1
  536. package/dist/data/chat/Attachment.d.ts +9 -3
  537. package/dist/data/chat/Attachment.d.ts.map +1 -1
  538. package/dist/data/chat/Attachment.js +54 -14
  539. package/dist/data/chat/Attachment.js.map +1 -1
  540. package/dist/data/chat/Chat.cjs +113 -36
  541. package/dist/data/chat/Chat.cjs.map +1 -1
  542. package/dist/data/chat/Chat.d.ts +11 -4
  543. package/dist/data/chat/Chat.d.ts.map +1 -1
  544. package/dist/data/chat/Chat.js +111 -34
  545. package/dist/data/chat/Chat.js.map +1 -1
  546. package/dist/data/chat/ContextMeter.cjs +240 -66
  547. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  548. package/dist/data/chat/ContextMeter.d.ts +11 -3
  549. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  550. package/dist/data/chat/ContextMeter.js +241 -67
  551. package/dist/data/chat/ContextMeter.js.map +1 -1
  552. package/dist/data/chat/Conversation.cjs +55 -3
  553. package/dist/data/chat/Conversation.cjs.map +1 -1
  554. package/dist/data/chat/Conversation.d.ts +5 -1
  555. package/dist/data/chat/Conversation.d.ts.map +1 -1
  556. package/dist/data/chat/Conversation.js +55 -3
  557. package/dist/data/chat/Conversation.js.map +1 -1
  558. package/dist/data/chat/ModelSelector.cjs +8 -10
  559. package/dist/data/chat/ModelSelector.cjs.map +1 -1
  560. package/dist/data/chat/ModelSelector.d.ts.map +1 -1
  561. package/dist/data/chat/ModelSelector.js +9 -11
  562. package/dist/data/chat/ModelSelector.js.map +1 -1
  563. package/dist/data/chat/PromptInput.cjs +56 -5
  564. package/dist/data/chat/PromptInput.cjs.map +1 -1
  565. package/dist/data/chat/PromptInput.d.ts +10 -1
  566. package/dist/data/chat/PromptInput.d.ts.map +1 -1
  567. package/dist/data/chat/PromptInput.js +57 -6
  568. package/dist/data/chat/PromptInput.js.map +1 -1
  569. package/dist/data/chat/approval.cjs +21 -0
  570. package/dist/data/chat/approval.cjs.map +1 -0
  571. package/dist/data/chat/approval.d.ts +11 -0
  572. package/dist/data/chat/approval.d.ts.map +1 -0
  573. package/dist/data/chat/approval.js +21 -0
  574. package/dist/data/chat/approval.js.map +1 -0
  575. package/dist/data/chat/attachment-upload.cjs +33 -0
  576. package/dist/data/chat/attachment-upload.cjs.map +1 -0
  577. package/dist/data/chat/attachment-upload.d.ts +21 -0
  578. package/dist/data/chat/attachment-upload.d.ts.map +1 -0
  579. package/dist/data/chat/attachment-upload.js +33 -0
  580. package/dist/data/chat/attachment-upload.js.map +1 -0
  581. package/dist/data/chat/effort-icons.cjs +36 -6
  582. package/dist/data/chat/effort-icons.cjs.map +1 -1
  583. package/dist/data/chat/effort-icons.d.ts +6 -3
  584. package/dist/data/chat/effort-icons.d.ts.map +1 -1
  585. package/dist/data/chat/effort-icons.js +37 -7
  586. package/dist/data/chat/effort-icons.js.map +1 -1
  587. package/dist/data/chat/index.d.ts +3 -1
  588. package/dist/data/chat/index.d.ts.map +1 -1
  589. package/dist/data/chat/models.cjs +8 -0
  590. package/dist/data/chat/models.cjs.map +1 -0
  591. package/dist/data/chat/models.d.ts +11 -0
  592. package/dist/data/chat/models.d.ts.map +1 -0
  593. package/dist/data/chat/models.js +8 -0
  594. package/dist/data/chat/models.js.map +1 -0
  595. package/dist/data/chat/provider-icons.cjs +49 -16
  596. package/dist/data/chat/provider-icons.cjs.map +1 -1
  597. package/dist/data/chat/provider-icons.d.ts +2 -0
  598. package/dist/data/chat/provider-icons.d.ts.map +1 -1
  599. package/dist/data/chat/provider-icons.js +50 -17
  600. package/dist/data/chat/provider-icons.js.map +1 -1
  601. package/dist/data/chat/types.cjs.map +1 -1
  602. package/dist/data/chat/types.d.ts +21 -0
  603. package/dist/data/chat/types.d.ts.map +1 -1
  604. package/dist/data/chat/types.js.map +1 -1
  605. package/dist/data/examples/markdown-preview-mock.cjs +45 -0
  606. package/dist/data/examples/markdown-preview-mock.cjs.map +1 -0
  607. package/dist/data/examples/markdown-preview-mock.d.ts +23 -0
  608. package/dist/data/examples/markdown-preview-mock.d.ts.map +1 -0
  609. package/dist/data/examples/markdown-preview-mock.js +45 -0
  610. package/dist/data/examples/markdown-preview-mock.js.map +1 -0
  611. package/dist/data/examples/markdown-syntax.cjs +36 -0
  612. package/dist/data/examples/markdown-syntax.cjs.map +1 -0
  613. package/dist/data/examples/markdown-syntax.d.ts +12 -0
  614. package/dist/data/examples/markdown-syntax.d.ts.map +1 -0
  615. package/dist/data/examples/markdown-syntax.js +36 -0
  616. package/dist/data/examples/markdown-syntax.js.map +1 -0
  617. package/dist/data/examples/markdown-syntax.md.cjs +4 -0
  618. package/dist/data/examples/markdown-syntax.md.cjs.map +1 -0
  619. package/dist/data/examples/markdown-syntax.md.js +5 -0
  620. package/dist/data/examples/markdown-syntax.md.js.map +1 -0
  621. package/dist/data/server-timing.cjs +120 -0
  622. package/dist/data/server-timing.cjs.map +1 -0
  623. package/dist/data/server-timing.d.ts +11 -0
  624. package/dist/data/server-timing.d.ts.map +1 -0
  625. package/dist/data/server-timing.js +120 -0
  626. package/dist/data/server-timing.js.map +1 -0
  627. package/dist/data/task-process-details.cjs +48 -0
  628. package/dist/data/task-process-details.cjs.map +1 -0
  629. package/dist/data/task-process-details.d.ts +5 -0
  630. package/dist/data/task-process-details.d.ts.map +1 -0
  631. package/dist/data/task-process-details.js +48 -0
  632. package/dist/data/task-process-details.js.map +1 -0
  633. package/dist/data/version-info.cjs +3 -3
  634. package/dist/data/version-info.js +3 -3
  635. package/dist/data.cjs +37 -0
  636. package/dist/data.cjs.map +1 -1
  637. package/dist/data.d.ts +9 -1
  638. package/dist/data.d.ts.map +1 -1
  639. package/dist/data.js +37 -0
  640. package/dist/data.js.map +1 -1
  641. package/dist/hooks/use-hotkey.cjs +98 -0
  642. package/dist/hooks/use-hotkey.cjs.map +1 -0
  643. package/dist/hooks/use-hotkey.d.ts +42 -0
  644. package/dist/hooks/use-hotkey.d.ts.map +1 -0
  645. package/dist/hooks/use-hotkey.js +98 -0
  646. package/dist/hooks/use-hotkey.js.map +1 -0
  647. package/dist/hooks/use-task-run.cjs +23 -1
  648. package/dist/hooks/use-task-run.cjs.map +1 -1
  649. package/dist/hooks/use-task-run.d.ts.map +1 -1
  650. package/dist/hooks/use-task-run.js +23 -1
  651. package/dist/hooks/use-task-run.js.map +1 -1
  652. package/dist/hooks.cjs +4 -0
  653. package/dist/hooks.cjs.map +1 -1
  654. package/dist/hooks.d.ts +1 -0
  655. package/dist/hooks.d.ts.map +1 -1
  656. package/dist/hooks.js +4 -0
  657. package/dist/hooks.js.map +1 -1
  658. package/dist/icons/components/UiBank.cjs +15 -0
  659. package/dist/icons/components/UiBank.cjs.map +1 -0
  660. package/dist/icons/components/UiBank.d.ts +15 -0
  661. package/dist/icons/components/UiBank.d.ts.map +1 -0
  662. package/dist/icons/components/UiBank.js +15 -0
  663. package/dist/icons/components/UiBank.js.map +1 -0
  664. package/dist/icons/components/UiChartOfAccounts.cjs +15 -0
  665. package/dist/icons/components/UiChartOfAccounts.cjs.map +1 -0
  666. package/dist/icons/components/UiChartOfAccounts.d.ts +15 -0
  667. package/dist/icons/components/UiChartOfAccounts.d.ts.map +1 -0
  668. package/dist/icons/components/UiChartOfAccounts.js +15 -0
  669. package/dist/icons/components/UiChartOfAccounts.js.map +1 -0
  670. package/dist/icons/components/UiCloudUpload.cjs +15 -0
  671. package/dist/icons/components/UiCloudUpload.cjs.map +1 -0
  672. package/dist/icons/components/UiCloudUpload.d.ts +15 -0
  673. package/dist/icons/components/UiCloudUpload.d.ts.map +1 -0
  674. package/dist/icons/components/UiCloudUpload.js +15 -0
  675. package/dist/icons/components/UiCloudUpload.js.map +1 -0
  676. package/dist/icons/components/UiLedger.cjs +15 -0
  677. package/dist/icons/components/UiLedger.cjs.map +1 -0
  678. package/dist/icons/components/UiLedger.d.ts +15 -0
  679. package/dist/icons/components/UiLedger.d.ts.map +1 -0
  680. package/dist/icons/components/UiLedger.js +15 -0
  681. package/dist/icons/components/UiLedger.js.map +1 -0
  682. package/dist/icons/components/UiReceipt.cjs +15 -0
  683. package/dist/icons/components/UiReceipt.cjs.map +1 -0
  684. package/dist/icons/components/UiReceipt.d.ts +15 -0
  685. package/dist/icons/components/UiReceipt.d.ts.map +1 -0
  686. package/dist/icons/components/UiReceipt.js +15 -0
  687. package/dist/icons/components/UiReceipt.js.map +1 -0
  688. package/dist/icons/index.d.ts +10 -0
  689. package/dist/icons/index.d.ts.map +1 -1
  690. package/dist/icons.cjs +15 -0
  691. package/dist/icons.cjs.map +1 -1
  692. package/dist/icons.js +15 -0
  693. package/dist/icons.js.map +1 -1
  694. package/dist/index.cjs +54 -0
  695. package/dist/index.cjs.map +1 -1
  696. package/dist/index.js +56 -2
  697. package/dist/index.js.map +1 -1
  698. package/dist/layout/AppShell.cjs +270 -238
  699. package/dist/layout/AppShell.cjs.map +1 -1
  700. package/dist/layout/AppShell.d.ts +9 -0
  701. package/dist/layout/AppShell.d.ts.map +1 -1
  702. package/dist/layout/AppShell.debug.cjs +53 -0
  703. package/dist/layout/AppShell.debug.cjs.map +1 -0
  704. package/dist/layout/AppShell.debug.d.ts +6 -0
  705. package/dist/layout/AppShell.debug.d.ts.map +1 -0
  706. package/dist/layout/AppShell.debug.js +53 -0
  707. package/dist/layout/AppShell.debug.js.map +1 -0
  708. package/dist/layout/AppShell.js +269 -237
  709. package/dist/layout/AppShell.js.map +1 -1
  710. package/dist/layout/AppShell.nav.cjs +90 -0
  711. package/dist/layout/AppShell.nav.cjs.map +1 -0
  712. package/dist/layout/AppShell.nav.d.ts +7 -0
  713. package/dist/layout/AppShell.nav.d.ts.map +1 -0
  714. package/dist/layout/AppShell.nav.js +90 -0
  715. package/dist/layout/AppShell.nav.js.map +1 -0
  716. package/dist/layout/AppSidebar.cjs +35 -5
  717. package/dist/layout/AppSidebar.cjs.map +1 -1
  718. package/dist/layout/AppSidebar.d.ts +4 -1
  719. package/dist/layout/AppSidebar.d.ts.map +1 -1
  720. package/dist/layout/AppSidebar.js +35 -5
  721. package/dist/layout/AppSidebar.js.map +1 -1
  722. package/dist/layout/Panel.cjs +25 -41
  723. package/dist/layout/Panel.cjs.map +1 -1
  724. package/dist/layout/Panel.d.ts +2 -1
  725. package/dist/layout/Panel.d.ts.map +1 -1
  726. package/dist/layout/Panel.js +26 -42
  727. package/dist/layout/Panel.js.map +1 -1
  728. package/dist/layout/PanelFrame.cjs +56 -0
  729. package/dist/layout/PanelFrame.cjs.map +1 -0
  730. package/dist/layout/PanelFrame.d.ts +15 -0
  731. package/dist/layout/PanelFrame.d.ts.map +1 -0
  732. package/dist/layout/PanelFrame.js +56 -0
  733. package/dist/layout/PanelFrame.js.map +1 -0
  734. package/dist/layout/Section.cjs +51 -41
  735. package/dist/layout/Section.cjs.map +1 -1
  736. package/dist/layout/Section.d.ts +3 -2
  737. package/dist/layout/Section.d.ts.map +1 -1
  738. package/dist/layout/Section.js +51 -41
  739. package/dist/layout/Section.js.map +1 -1
  740. package/dist/layout/content-width.cjs +8 -0
  741. package/dist/layout/content-width.cjs.map +1 -0
  742. package/dist/layout/content-width.d.ts +3 -0
  743. package/dist/layout/content-width.d.ts.map +1 -0
  744. package/dist/layout/content-width.js +8 -0
  745. package/dist/layout/content-width.js.map +1 -0
  746. package/dist/overlay/CommandPalette.cjs +207 -0
  747. package/dist/overlay/CommandPalette.cjs.map +1 -0
  748. package/dist/overlay/CommandPalette.d.ts +71 -0
  749. package/dist/overlay/CommandPalette.d.ts.map +1 -0
  750. package/dist/overlay/CommandPalette.js +207 -0
  751. package/dist/overlay/CommandPalette.js.map +1 -0
  752. package/dist/overlay/CommandPalette.model.cjs +70 -0
  753. package/dist/overlay/CommandPalette.model.cjs.map +1 -0
  754. package/dist/overlay/CommandPalette.model.d.ts +71 -0
  755. package/dist/overlay/CommandPalette.model.d.ts.map +1 -0
  756. package/dist/overlay/CommandPalette.model.js +70 -0
  757. package/dist/overlay/CommandPalette.model.js.map +1 -0
  758. package/dist/overlay/CommandPaletteList.cjs +88 -0
  759. package/dist/overlay/CommandPaletteList.cjs.map +1 -0
  760. package/dist/overlay/CommandPaletteList.d.ts +23 -0
  761. package/dist/overlay/CommandPaletteList.d.ts.map +1 -0
  762. package/dist/overlay/CommandPaletteList.js +88 -0
  763. package/dist/overlay/CommandPaletteList.js.map +1 -0
  764. package/dist/overlay/CommandPaletteTrigger.cjs +36 -0
  765. package/dist/overlay/CommandPaletteTrigger.cjs.map +1 -0
  766. package/dist/overlay/CommandPaletteTrigger.d.ts +22 -0
  767. package/dist/overlay/CommandPaletteTrigger.d.ts.map +1 -0
  768. package/dist/overlay/CommandPaletteTrigger.js +36 -0
  769. package/dist/overlay/CommandPaletteTrigger.js.map +1 -0
  770. package/dist/overlay/HoverCard.cjs.map +1 -1
  771. package/dist/overlay/HoverCard.d.ts +2 -2
  772. package/dist/overlay/HoverCard.d.ts.map +1 -1
  773. package/dist/overlay/HoverCard.js.map +1 -1
  774. package/dist/overlay/Modal.cjs +12 -5
  775. package/dist/overlay/Modal.cjs.map +1 -1
  776. package/dist/overlay/Modal.d.ts.map +1 -1
  777. package/dist/overlay/Modal.js +12 -5
  778. package/dist/overlay/Modal.js.map +1 -1
  779. package/dist/overlay/modalStack.js +1 -1
  780. package/dist/overlay/zIndex.cjs +2 -0
  781. package/dist/overlay/zIndex.cjs.map +1 -1
  782. package/dist/overlay/zIndex.js +2 -0
  783. package/dist/overlay/zIndex.js.map +1 -1
  784. package/dist/rpc/EntityExplorerApp.cjs +6 -0
  785. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  786. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  787. package/dist/rpc/EntityExplorerApp.js +6 -0
  788. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  789. package/dist/rpc/OperationCatalog.cjs +45 -71
  790. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  791. package/dist/rpc/OperationCatalog.d.ts +12 -2
  792. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  793. package/dist/rpc/OperationCatalog.js +46 -72
  794. package/dist/rpc/OperationCatalog.js.map +1 -1
  795. package/dist/rpc/OperationResultView.cjs +42 -0
  796. package/dist/rpc/OperationResultView.cjs.map +1 -1
  797. package/dist/rpc/OperationResultView.d.ts +2 -1
  798. package/dist/rpc/OperationResultView.d.ts.map +1 -1
  799. package/dist/rpc/OperationResultView.js +42 -0
  800. package/dist/rpc/OperationResultView.js.map +1 -1
  801. package/dist/rpc/clickyMetadata.cjs +2 -1
  802. package/dist/rpc/clickyMetadata.cjs.map +1 -1
  803. package/dist/rpc/clickyMetadata.d.ts.map +1 -1
  804. package/dist/rpc/clickyMetadata.js +2 -1
  805. package/dist/rpc/clickyMetadata.js.map +1 -1
  806. package/dist/rpc/rpc-story-fixtures/orders.fixture.d.ts.map +1 -1
  807. package/dist/rpc/rpc-story-fixtures/services.fixture.d.ts.map +1 -1
  808. package/dist/rpc/rpc-story-fixtures/surface-fixture.d.ts +25 -2
  809. package/dist/rpc/rpc-story-fixtures/surface-fixture.d.ts.map +1 -1
  810. package/dist/rpc/rpc-story-fixtures/widgets.fixture.d.ts.map +1 -1
  811. package/dist/rpc/rpc-story.fixtures.d.ts +2 -1
  812. package/dist/rpc/rpc-story.fixtures.d.ts.map +1 -1
  813. package/dist/rpc/types.cjs.map +1 -1
  814. package/dist/rpc/types.d.ts +1 -0
  815. package/dist/rpc/types.d.ts.map +1 -1
  816. package/dist/rpc/types.js.map +1 -1
  817. package/dist/styles.css +1 -1
  818. package/dist/tailwind-preset.cjs +15 -0
  819. package/dist/tailwind-preset.cjs.map +1 -1
  820. package/dist/tailwind-preset.d.ts.map +1 -1
  821. package/dist/tailwind-preset.js +15 -0
  822. package/dist/tailwind-preset.js.map +1 -1
  823. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- import { useId, useSyncExternalStore, useEffect, useRef } from "react";
1
+ import { useId, useRef, useEffect, useSyncExternalStore } from "react";
2
2
  import { zIndex } from "./zIndex.js";
3
3
  const stack = [];
4
4
  const listeners = /* @__PURE__ */ new Set();
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const zIndex = {
4
+ /** In-flow raised affordances (sticky bits). */
5
+ raised: 30,
4
6
  /** Persistent chat launcher. */
5
7
  chatFab: 60,
6
8
  /** Floating chat windows; `ChatWindowManager` increments from this base. */
@@ -1 +1 @@
1
- {"version":3,"file":"zIndex.cjs","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,EAIpB,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.cjs","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,4 +1,6 @@
1
1
  const zIndex = {
2
+ /** In-flow raised affordances (sticky bits). */
3
+ raised: 30,
2
4
  /** Persistent chat launcher. */
3
5
  chatFab: 60,
4
6
  /** Floating chat windows; `ChatWindowManager` increments from this base. */
@@ -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,EAIpB,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 /** 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;"}
@@ -102,6 +102,12 @@ function EntityExplorerApp({
102
102
  ] }),
103
103
  navSections,
104
104
  sidebarFooter: /* @__PURE__ */ jsxRuntime.jsx(themeSwitcher.ThemeSwitcher, {}),
105
+ ...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 })
109
+ ] })
110
+ } : {},
105
111
  collapsedStorageKey: SIDEBAR_COLLAPSED_KEY,
106
112
  contentClassName: "p-6",
107
113
  children: resolvedRoute.kind === "surface" ? resolvedRoute.surface ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -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 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 { 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":";;;;;;;;;;;;;;AAuEA,MAAM,wBAAwB;AAEvB,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2B;AACzB,QAAM,UAAU,iDAAgB;AAChC,QAAM,WAAW,iDAAgB;AACjC,QAAM,EAAE,UAAU,YAAY,SAAA,IAAaA,OAAAA,UAAA;AAC3C,QAAM,EAAE,KAAA,IAASC,cAAAA,cAAc,MAAM;AACrC,QAAM,WAAWC,MAAAA,QAAQ,MAAMC,eAAAA,kBAAkB,IAAI,GAAG,CAAC,IAAI,CAAC;AAC9D,QAAM,gBAAgBD,MAAAA,QAAQ,MAAM,sBAAsB,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAC/E,QAAM,iBAAiBA,MAAAA;AAAAA,IACrB,MAAM,SAAS,KAAK,CAAC,YAAY,CAAC,QAAQ,KAAK,KAAK,SAAS,CAAC;AAAA,IAC9D,CAAC,QAAQ;AAAA,EAAA;AAEX,QAAM,eAAeA,cAAQ,MAAM,cAAc,UAAU,QAAQ,GAAG,CAAC,UAAU,QAAQ,CAAC;AAC1F,QAAM,QAAQA,MAAAA,QAAQ,MAAM,mBAAmB,YAAY,GAAG,CAAC,YAAY,CAAC;AAC5E,QAAM,gBAAgBA,cAAQ,MAAM,oBAAoB,OAAO,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC;AAC3F,QAAM,iBAAiBA,MAAAA;AAAAA,IACrB,OAAO;AAAA,MACL;AAAA,MACA,gBAAgB,CAAC,aAAaE,6BAAiB,UAAU,QAAQ;AAAA,MACjE,YAAY,CAAC,aAAa;AACxB,cAAM,OAAOA,YAAAA,iBAAiB,UAAU,QAAQ;AAChD,YAAI,CAAC,KAAM;AACX,iBAAS,IAAI;AAAA,MACf;AAAA,IAAA;AAAA,IAEF,CAAC,UAAU,QAAQ,QAAQ;AAAA,EAAA;AAE7B,QAAM,EAAE,eAAe,qBAAA,IAAyBF,MAAAA;AAAAA,IAC9C,MACE,cAAc,SAAS,YACnB,uBAAA,IACA,EAAE,eAAe,CAAA,GAAI,SAAS,MAAA;AAAA,IACpC,CAAC,cAAc,MAAM,QAAQ;AAAA,EAAA;AAE/B,QAAM,qBAAqBA,MAAAA;AAAAA,IACzB,OAAO;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,CAAA;AAAA,EAAC;AAEH,QAAM,cAAcA,MAAAA,QAA8B,MAAM;AACtD,UAAM,WAAiC,cAAc,IAAI,CAAC,WAAW;AAAA,MACnE,OAAO,MAAM;AAAA,MACb,OAAO,MAAM,SAAS,IAAI,CAAC,YAAY;AACrC,cAAM,OAAOG,eAAAA,mBAAmB,QAAQ,IAAI;AAC5C,eAAO;AAAA,UACL,KAAK,QAAQ;AAAA,UACb,OAAO,QAAQ;AAAA,UACf,GAAI,OAAO,EAAE,KAAA,IAAS,CAAA;AAAA,UACtB,QAAQ,qBAAqB,eAAe,QAAQ,GAAG;AAAA,UACvD,IAAIC,YAAAA,aAAa,UAAU,IAAI,QAAQ,GAAG,EAAE;AAAA,QAAA;AAAA,MAEhD,CAAC;AAAA,IAAA,EACD;AACF,QAAI,iBAAiB;AACnB,eAAS,KAAK;AAAA,QACZ,OAAO;AAAA,UACL;AAAA,YACE,KAAK,mBAAmB;AAAA,YACxB,OAAO,mBAAmB;AAAA,YAC1B,QAAQ,cAAc,SAAS,cAAc,cAAc,SAAS;AAAA,YACpE,IAAIA,YAAAA,aAAa,UAAU,WAAW;AAAA,UAAA;AAAA,QACxC;AAAA,MACF,CACD;AAAA,IACH;AACA,WAAO;AAAA,EACT,GAAG,CAAC,eAAe,UAAU,eAAe,iBAAiB,kBAAkB,CAAC;AAEhFC,QAAAA,UAAU,MAAM;AACd,QAAI,kBAAkB,QAAQ,iBAAiB,IAAK;AACpD,aAASD,YAAAA,aAAa,UAAU,IAAI,eAAe,GAAG,EAAE,GAAG,EAAE,SAAS,KAAA,CAAM;AAAA,EAC9E,GAAG,CAAC,UAAU,gBAAgB,cAAc,QAAQ,CAAC;AAErD,QAAM,UACJE,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MACC,OACEC,2BAAAA,KAAC,OAAA,EAAI,WAAU,WACb,UAAA;AAAA,QAAAF,+BAAC,SAAI,WAAU,kCACZ,WAAA,6BAAM,KAAK,UAAS,mBACvB;AAAA,QACAA,2BAAAA,IAAC,OAAA,EAAI,WAAU,+CAA8C,UAAA,kCAAA,CAE7D;AAAA,MAAA,GACF;AAAA,MAEF;AAAA,MACA,8CAAgBG,cAAAA,eAAA,EAAc;AAAA,MAI7B,GAAI,cAAc,SAAS,aAAa,cAAc,UACnD;AAAA,QACE,YACED,2BAAAA,KAAC,OAAA,EAAI,WAAU,WACb,UAAA;AAAA,UAAAF,+BAAC,MAAA,EAAG,WAAU,kDACX,UAAA,cAAc,QAAQ,OACzB;AAAA,UACAA,+BAAC,OAAE,WAAU,gDACV,+CAAsB,cAAc,OAAO,EAAE,YAAA,CAChD;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,IAGJ,CAAA;AAAA,MACJ,qBAAqB;AAAA,MACrB,kBAAiB;AAAA,MAEhB,UAAA,cAAc,SAAS,YACpB,cAAc,UACZA,2BAAAA;AAAAA,QAACI,iBAAAA;AAAAA,QAAA;AAAA,UACC,YAAYC,eAAAA,sBAAsB,cAAc,OAAO;AAAA,UACvD,UAAU,CAAC,cAAc,QAAQ,MAAM;AAAA,UACvC;AAAA,UACA;AAAA,UACA,YAAY,cAAc,QAAQ;AAAA,UAClC;AAAA,UACC,GAAI,UAAU,EAAE,QAAA,IAAY,CAAA;AAAA,UAC9B,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA;AAAA,UAC9B,GAAI,cAAc,EAAE,YAAA,IAAgB,CAAA;AAAA,UACpC,IAAI,2DAAsB,cAAc,QAAQ,QAC7C,EAAE,cAAc,oBAAoB,cAAc,QAAQ,GAAG,EAAA,IAC7D,CAAA;AAAA,UACH,GAAI,iBAAiB,EAAE,mBAAmB,CAAA;AAAA,QAAC;AAAA,MAAA,IAG5CL,2BAAAA,IAAC,gBAAA,EAAe,YAAY,cAAc,WAAA,CAAY,IAEtD,cAAc,SAAS,WACzB,cAAc,UACZA,2BAAAA;AAAAA,QAACM,oBAAAA;AAAAA,QAAA;AAAA,UACC,YAAYD,eAAAA,sBAAsB,cAAc,OAAO;AAAA,UACvD,UAAU,CAAC,cAAc,QAAQ,MAAM;AAAA,UACvC;AAAA,UACA;AAAA,UACA,YAAY,cAAc,QAAQ;AAAA,UAClC,UAAUP,YAAAA,aAAa,UAAU,IAAI,cAAc,QAAQ,GAAG,EAAE;AAAA,UAChE,WAAW,WAAW,cAAc,QAAQ,KAAK;AAAA,UACjD;AAAA,UACC,GAAI,UAAU,EAAE,QAAA,IAAY,CAAA;AAAA,UAC9B,GAAI,WAAW,EAAE,SAAA,IAAa,CAAA;AAAA,UAC9B,GAAI,cAAc,EAAE,YAAA,IAAgB,CAAA;AAAA,UACpC,IAAI,2DAAsB,cAAc,QAAQ,QAC7C,EAAE,cAAc,oBAAoB,cAAc,QAAQ,GAAG,EAAA,IAC7D,CAAA;AAAA,UACH,GAAI,2BAA2B,EAAE,yBAAA,IAA6B,CAAA;AAAA,UAC9D,GAAI,6BAA6B,EAAE,2BAAA,IAA+B,CAAA;AAAA,UAClE,GAAI,cAAc,KAAK,EAAE,IAAI,cAAc,GAAA,IAAO,CAAA;AAAA,QAAC;AAAA,MAAA,mCAGnD,gBAAA,EAAe,YAAY,cAAc,WAAA,CAAY,IAEtD,cAAc,SAAS,YACzBE,2BAAAA;AAAAA,QAACO,qBAAAA;AAAAA,QAAA;AAAA,UACC;AAAA,UACA,UAAUT,YAAAA,aAAa,UAAU,WAAW;AAAA,UAC5C,WAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA,eAAe;AAAA,UACf,SAAS;AAAA,UACR,GAAI,cAAc,cAAc,EAAE,aAAa,cAAc,YAAA,IAAgB,CAAA;AAAA,QAAC;AAAA,MAAA,IAE/E,cAAc,SAAS,aACzBE,2BAAAA;AAAAA,QAACI,iBAAAA;AAAAA,QAAA;AAAA,UACC,YAAY;AAAA,UACZ,UAAU,CAAA;AAAA,UACV,eAAa;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAAA,IAEA,kBAAkB,OACpBJ,2BAAAA,IAAC,OAAA,EAAI,WAAU,iCAAgC,UAAA,oBAAA,CAAiB,IAEhEA,2BAAAA,IAAC,OAAA,EAAI,WAAU,iCAAgC,UAAA,eAAA,CAAY;AAAA,IAAA;AAAA,EAAA;AAKnE,SAAO;AACT;AAcA,SAAS,mBAAmB,UAAiC;AAC3D,QAAM,aAAaQ,YAAAA,kBAAkB,QAAQ,KAAK;AAClD,MAAI,eAAe,KAAK;AACtB,WAAO,EAAE,MAAM,OAAA;AAAA,EACjB;AAEA,QAAM,WAAW,WAAW,QAAQ,QAAQ,EAAE,EAAE,MAAM,GAAG;AACzD,MAAI,SAAS,CAAC,MAAM,YAAY;AAC9B,WAAO,EAAE,MAAM,WAAA;AAAA,EACjB;AACA,MAAI,SAAS,CAAC,MAAM,YAAY;AAC9B,WAAO,SAAS,CAAC,IAAI,EAAE,MAAM,WAAW,aAAa,SAAS,CAAC,EAAA,IAAM,EAAE,MAAM,UAAA;AAAA,EAC/E;AACA,QAAM,aAAa,SAAS,CAAC,KAAK;AAClC,MAAI,SAAS,CAAC,GAAG;AACf,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,IAAI,mBAAmB,SAAS,CAAC,CAAC;AAAA,IAAA;AAAA,EAEtC;AACA,SAAO,EAAE,MAAM,WAAW,WAAA;AAC5B;AAEA,SAAS,oBAAoB,OAAsB,UAA0C;AAC3F,MAAI,MAAM,SAAS,aAAa,MAAM,SAAS,UAAU;AACvD,WAAO;AAAA,EACT;AACA,QAAM,UAAU,SAAS,KAAK,CAAC,SAAS,KAAK,QAAQ,MAAM,UAAU;AACrE,SAAO,UAAU,EAAE,GAAG,OAAO,YAAY;AAC3C;AAEA,SAAS,qBAAqB,OAAsB,YAAoB;AACtE,SACG,MAAM,SAAS,aAAa,MAAM,eAAe,cACjD,MAAM,SAAS,YAAY,MAAM,eAAe;AAErD;AAEA,SAAS,cAAc,UAAkB,UAAkB;AACzD,QAAM,OAAOA,YAAAA,kBAAkB,QAAQ;AACvC,MAAI,CAAC,QAAQ,SAAS,KAAK;AACzB,WAAOA,YAAAA,kBAAkB,QAAQ,KAAK;AAAA,EACxC;AACA,MAAI,aAAa,MAAM;AACrB,WAAO;AAAA,EACT;AACA,MAAI,SAAS,WAAW,GAAG,IAAI,GAAG,GAAG;AACnC,WAAOA,YAAAA,kBAAkB,SAAS,MAAM,KAAK,MAAM,CAAC,KAAK;AAAA,EAC3D;AACA,SAAOA,YAAAA,kBAAkB,QAAQ,KAAK;AACxC;AAEA,SAAS,eAAe,EAAE,cAAsC;AAC9D,SACEN,2BAAAA,KAAC,OAAA,EAAI,WAAU,qCAAoC,UAAA;AAAA,IAAA;AAAA,IAChCF,2BAAAA,IAAC,UAAM,UAAA,WAAA,CAAW;AAAA,EAAA,GACrC;AAEJ;AAEA,MAAM,6BAA6B;AAWnC,SAAS,sBAAsB,UAA2C;AACxE,QAAM,QAAkB,CAAA;AACxB,QAAM,8BAAc,IAAA;AACpB,aAAW,WAAW,UAAU;AAC9B,UAAM,SAAS,QAAQ,UAAU;AACjC,QAAI,CAAC,QAAQ,IAAI,MAAM,GAAG;AACxB,cAAQ,IAAI,QAAQ,EAAE;AACtB,YAAM,KAAK,MAAM;AAAA,IACnB;AACA,YAAQ,IAAI,MAAM,EAAG,KAAK,OAAO;AAAA,EACnC;AACA,SAAO,MAAM,IAAI,CAAC,YAAY;AAAA,IAC5B;AAAA,IACA,OAAO,WAAW,KAAK,UAAU,UAAU,MAAM;AAAA,IACjD,UAAU,QAAQ,IAAI,MAAM;AAAA,EAAA,EAC5B;AACJ;AAEA,SAAS,UAAU,OAAuB;AACxC,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,MAAM,OAAO,CAAC,EAAE,gBAAgB,MAAM,MAAM,CAAC;AACtD;AAEA,SAAS,yBAAsF;AAC7F,MAAI,OAAO,WAAW,aAAa;AACjC,WAAO,EAAE,eAAe,IAAI,SAAS,MAAA;AAAA,EACvC;AACA,QAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,QAAM,gBAAwC,CAAA;AAC9C,MAAI,UAAU;AACd,QAAM,aAAuB,CAAA;AAE7B,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,WAAW;AAC3C,QAAI,QAAQS,YAAAA,uBAAuB,QAAQ,4BAA4B;AACrE,gBAAU,UAAU,OAAO,UAAU;AACrC;AAAA,IACF;AACA,QAAI,IAAI,WAAWC,YAAAA,gBAAgB,GAAG;AACpC,YAAM,QAAQ,OAAO,SAAS,IAAI,MAAMA,YAAAA,iBAAiB,MAAM,GAAG,EAAE;AACpE,UAAI,OAAO,SAAS,KAAK,KAAK,SAAS,GAAG;AACxC,mBAAW,KAAK,IAAI;AAAA,MACtB;AACA;AAAA,IACF;AACA,kBAAc,GAAG,IAAI;AAAA,EACvB;AAEA,QAAM,aAAa,WAAW,OAAO,CAAC,UAAU,UAAU,MAAS,EAAE,KAAK,GAAG;AAC7E,MAAI,eAAe,IAAI;AACrB,kBAAc,OAAO;AAAA,EACvB;AAEA,SAAO,EAAE,eAAe,QAAA;AAC1B;;"}
@@ -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,2CAqKxB"}
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"}
@@ -100,6 +100,12 @@ function EntityExplorerApp({
100
100
  ] }),
101
101
  navSections,
102
102
  sidebarFooter: /* @__PURE__ */ jsx(ThemeSwitcher, {}),
103
+ ...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 })
107
+ ] })
108
+ } : {},
103
109
  collapsedStorageKey: SIDEBAR_COLLAPSED_KEY,
104
110
  contentClassName: "p-6",
105
111
  children: resolvedRoute.kind === "surface" ? resolvedRoute.surface ? /* @__PURE__ */ jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"EntityExplorerApp.js","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 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":[],"mappings":"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"}
1
+ {"version":3,"file":"EntityExplorerApp.js","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":[],"mappings":"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"}
@@ -2,9 +2,8 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
+ const reactDom = require("react-dom");
5
6
  const reactQuery = require("@tanstack/react-query");
6
- const button = require("../components/button.cjs");
7
- const Icon = require("../data/Icon.cjs");
8
7
  const classify = require("./classify.cjs");
9
8
  const clickyMetadata = require("./clickyMetadata.cjs");
10
9
  const EndpointList = require("./EndpointList.cjs");
@@ -13,8 +12,6 @@ const OperationResultView = require("./OperationResultView.cjs");
13
12
  const filterBarUtils = require("../components/filter-bar-utils.cjs");
14
13
  const useOperations = require("./useOperations.cjs");
15
14
  const formMetadata = require("./formMetadata.cjs");
16
- const UiTable = require("../icons/components/UiTable.cjs");
17
- const UiListFlat = require("../icons/components/UiListFlat.cjs");
18
15
  const defaultCommandHref = (operationId) => `/commands/${operationId}`;
19
16
  function defaultRenderError(err, title) {
20
17
  const message = err instanceof Error ? err.message : String(err ?? "");
@@ -33,16 +30,16 @@ function OperationCatalog({
33
30
  filterPre,
34
31
  getCommandHref = defaultCommandHref,
35
32
  renderError = defaultRenderError,
36
- kind,
37
33
  commandRuntime,
38
34
  formPre,
39
35
  formPost,
40
36
  formActions,
41
37
  actionLabels,
42
- resultRenderer
38
+ resultRenderer,
39
+ actionsContainer
43
40
  }) {
41
+ var _a, _b;
44
42
  const { operations, isLoading } = useOperations.useOperations(client);
45
- const [view, setView] = react.useState("table");
46
43
  const surfaceOps = react.useMemo(
47
44
  () => clickyMetadata.filterOperationsBySurface(operations, surfaceKey),
48
45
  [operations, surfaceKey]
@@ -65,8 +62,8 @@ function OperationCatalog({
65
62
  );
66
63
  const listParameters = (listEndpoint == null ? void 0 : listEndpoint.operation.parameters) ?? [];
67
64
  const download = react.useMemo(() => {
68
- var _a;
69
- const meta = (_a = listEndpoint == null ? void 0 : listEndpoint.operation["x-clicky"]) == null ? void 0 : _a.export;
65
+ var _a2;
66
+ const meta = (_a2 = listEndpoint == null ? void 0 : listEndpoint.operation["x-clicky"]) == null ? void 0 : _a2.export;
70
67
  if (!meta) return void 0;
71
68
  return {
72
69
  label: definition.title,
@@ -96,7 +93,7 @@ function OperationCatalog({
96
93
  Accept: "application/json+clicky"
97
94
  }
98
95
  ),
99
- enabled: !!listEndpoint && view === "table",
96
+ enabled: !!listEndpoint,
100
97
  placeholderData: reactQuery.keepPreviousData,
101
98
  staleTime: 3e4,
102
99
  retry: 0
@@ -109,8 +106,8 @@ function OperationCatalog({
109
106
  filters
110
107
  ],
111
108
  queryFn: async () => {
112
- var _a;
113
- return await ((_a = client.lookupFilters) == null ? void 0 : _a.call(
109
+ var _a2;
110
+ return await ((_a2 = client.lookupFilters) == null ? void 0 : _a2.call(
114
111
  client,
115
112
  listEndpoint.path,
116
113
  listEndpoint.method,
@@ -118,7 +115,7 @@ function OperationCatalog({
118
115
  { Accept: "application/json+clicky" }
119
116
  )) ?? { filters: {} };
120
117
  },
121
- enabled: !!listEndpoint && view === "table" && !!client.lookupFilters,
118
+ enabled: !!listEndpoint && !!client.lookupFilters,
122
119
  staleTime: 3e4,
123
120
  retry: 0
124
121
  });
@@ -145,9 +142,22 @@ function OperationCatalog({
145
142
  ),
146
143
  [filterBarConfig.filters, filterPre]
147
144
  );
148
- const hasTable = !!listEndpoint;
149
- const showTable = hasTable && view === "table";
150
- const sectionLabel = kind === "configuration" || definition.key.startsWith("config-") ? "Configuration" : "Operations";
145
+ const showTable = !!listEndpoint;
146
+ let listError;
147
+ if (!listQuery.isFetching) {
148
+ if (listQuery.isError) {
149
+ listError = listQuery.error;
150
+ } else if (((_a = listQuery.data) == null ? void 0 : _a.success) === false) {
151
+ listError = new Error(
152
+ listQuery.data.error || listQuery.data.message || listQuery.data.stderr || `Command failed with exit code ${listQuery.data.exit_code}`
153
+ );
154
+ }
155
+ }
156
+ const tableError = listError !== void 0 ? renderError(
157
+ listError,
158
+ `Failed to load ${(listEndpoint == null ? void 0 : listEndpoint.path) ?? ""}`
159
+ ) : void 0;
160
+ const tableResponse = ((_b = listQuery.data) == null ? void 0 : _b.success) === false ? null : listQuery.data ?? null;
151
161
  function getActionLockedValues(op) {
152
162
  const meta = clickyMetadata.getOperationClickyMeta(op);
153
163
  if (meta == null || !meta.supportsFilterMode) {
@@ -175,74 +185,37 @@ function OperationCatalog({
175
185
  Array.from({ length: 5 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(SkeletonBlock, { className: "h-12" }, i))
176
186
  ] });
177
187
  }
188
+ const actionBar = /* @__PURE__ */ jsxRuntime.jsx(
189
+ OperationActionBar.OperationActionBar,
190
+ {
191
+ actions: actionOps,
192
+ client,
193
+ getLockedValues: getActionLockedValues,
194
+ onExecuted: () => void listQuery.refetch(),
195
+ ...commandRuntime ? { commandRuntime } : {},
196
+ ...formPre ? { formPre } : {},
197
+ ...formPost ? { formPost } : {},
198
+ ...formActions ? { formActions } : {},
199
+ ...actionLabels ? { actionLabels } : {}
200
+ }
201
+ );
178
202
  return /* @__PURE__ */ jsxRuntime.jsxs(
179
203
  "div",
180
204
  {
181
- className: "flex h-full min-h-0 flex-col gap-6",
205
+ className: "flex h-full min-h-0 flex-col gap-2",
182
206
  "data-slot": "operation-catalog",
183
207
  children: [
184
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-4", children: [
185
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
186
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs uppercase tracking-[0.18em] text-muted-foreground", children: sectionLabel }),
187
- /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-2xl font-semibold tracking-tight", children: definition.title }),
188
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 max-w-2xl text-sm text-muted-foreground", children: definition.description })
189
- ] }),
190
- hasTable && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-1 rounded-lg border p-1", children: [
191
- /* @__PURE__ */ jsxRuntime.jsx(
192
- button.Button,
193
- {
194
- type: "button",
195
- variant: view === "table" ? "secondary" : "ghost",
196
- size: "sm",
197
- className: "h-7 w-7 p-0",
198
- "aria-label": "Table view",
199
- "aria-pressed": view === "table",
200
- onClick: () => setView("table"),
201
- children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiTable.UiTable })
202
- }
203
- ),
204
- /* @__PURE__ */ jsxRuntime.jsx(
205
- button.Button,
206
- {
207
- type: "button",
208
- variant: view === "endpoints" ? "secondary" : "ghost",
209
- size: "sm",
210
- className: "h-7 w-7 p-0",
211
- "aria-label": "Endpoint list view",
212
- "aria-pressed": view === "endpoints",
213
- onClick: () => setView("endpoints"),
214
- children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiListFlat.UiListFlat })
215
- }
216
- )
217
- ] })
218
- ] }),
219
- /* @__PURE__ */ jsxRuntime.jsx(
220
- OperationActionBar.OperationActionBar,
221
- {
222
- actions: actionOps,
223
- client,
224
- getLockedValues: getActionLockedValues,
225
- onExecuted: () => void listQuery.refetch(),
226
- ...commandRuntime ? { commandRuntime } : {},
227
- ...formPre ? { formPre } : {},
228
- ...formPost ? { formPost } : {},
229
- ...formActions ? { formActions } : {},
230
- ...actionLabels ? { actionLabels } : {}
231
- }
232
- ),
208
+ actionsContainer ? reactDom.createPortal(actionBar, actionsContainer) : actionBar,
233
209
  showTable ? /* @__PURE__ */ jsxRuntime.jsx(
234
210
  "div",
235
211
  {
236
212
  className: "min-h-0 flex-1",
237
213
  "data-slot": "operation-catalog-results",
238
- children: listQuery.isError && !listQuery.data ? renderError(
239
- listQuery.error,
240
- `Failed to load ${(listEndpoint == null ? void 0 : listEndpoint.path) ?? ""}`
241
- ) : (() => {
214
+ children: (() => {
242
215
  const defaultView = /* @__PURE__ */ jsxRuntime.jsx(
243
216
  OperationResultView.OperationResultView,
244
217
  {
245
- response: listQuery.data ?? null,
218
+ response: tableResponse,
246
219
  loading: listQuery.isFetching,
247
220
  loadingMessage: `Loading ${definition.title} results…`,
248
221
  emptyMessage: "No records returned",
@@ -254,6 +227,7 @@ function OperationCatalog({
254
227
  ...filterBarConfig.search ? { search: filterBarConfig.search } : {},
255
228
  ...filterBarConfig.timeRange ? { timeRange: filterBarConfig.timeRange } : {}
256
229
  },
230
+ ...tableError ? { error: tableError } : {},
257
231
  ...commandRuntime ? { commandRuntime } : {},
258
232
  ...dataTablePagination ? { pagination: dataTablePagination } : {},
259
233
  ...download ? { download } : {}