@flanksource/clicky-ui 0.3.34 → 0.3.36

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 (733) hide show
  1. package/README.md +4 -0
  2. package/dist/ai.cjs +4 -0
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +4 -0
  5. package/dist/ai.js.map +1 -1
  6. package/dist/comments/CommentCard.d.ts +1 -1
  7. package/dist/comments/CommentProvider.d.ts +1 -1
  8. package/dist/comments/CommentThread.d.ts +1 -1
  9. package/dist/comments/CommentThreadList.d.ts +1 -1
  10. package/dist/comments/MentionTextarea.d.ts +1 -1
  11. package/dist/comments/comment-context.d.ts +4 -4
  12. package/dist/comments/comment-fixtures.d.ts +1 -1
  13. package/dist/comments/comment-types.d.ts +1 -1
  14. package/dist/components/AccordionList.d.ts +1 -1
  15. package/dist/components/ComboboxControl.d.ts +1 -1
  16. package/dist/components/ComboboxMenu.d.ts +2 -2
  17. package/dist/components/ComboboxTags.cjs +41 -11
  18. package/dist/components/ComboboxTags.cjs.map +1 -1
  19. package/dist/components/ComboboxTags.d.ts +6 -0
  20. package/dist/components/ComboboxTags.d.ts.map +1 -1
  21. package/dist/components/ComboboxTags.js +41 -11
  22. package/dist/components/ComboboxTags.js.map +1 -1
  23. package/dist/components/DateField.d.ts +3 -3
  24. package/dist/components/DatePicker.d.ts +3 -3
  25. package/dist/components/DateTimePicker.d.ts +3 -3
  26. package/dist/components/ErrorWrapper.d.ts +2 -2
  27. package/dist/components/Field.d.ts +1 -1
  28. package/dist/components/FilterBar.d.ts +1 -1
  29. package/dist/components/FormLookupProvider.d.ts +1 -1
  30. package/dist/components/FormatOptionsDropdown.d.ts +1 -1
  31. package/dist/components/IconButton.d.ts +3 -3
  32. package/dist/components/InputField.d.ts +2 -2
  33. package/dist/components/ItemActions.d.ts +1 -1
  34. package/dist/components/JsonSchemaForm.cjs +17 -36
  35. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  36. package/dist/components/JsonSchemaForm.d.ts +1 -1
  37. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  38. package/dist/components/JsonSchemaForm.js +17 -36
  39. package/dist/components/JsonSchemaForm.js.map +1 -1
  40. package/dist/components/ListMenu.d.ts +1 -1
  41. package/dist/components/MultiSelect.d.ts +1 -1
  42. package/dist/components/SearchInput.d.ts +1 -1
  43. package/dist/components/SegmentedControl.d.ts +1 -1
  44. package/dist/components/SplitButton.d.ts +1 -1
  45. package/dist/components/Switch.d.ts +1 -1
  46. package/dist/components/TreePickerField.cjs +11 -2
  47. package/dist/components/TreePickerField.cjs.map +1 -1
  48. package/dist/components/TreePickerField.d.ts +13 -4
  49. package/dist/components/TreePickerField.d.ts.map +1 -1
  50. package/dist/components/TreePickerField.js +11 -2
  51. package/dist/components/TreePickerField.js.map +1 -1
  52. package/dist/components/UnitStepControls.d.ts +1 -1
  53. package/dist/components/button.d.ts +3 -3
  54. package/dist/components/combobox-types.d.ts +1 -1
  55. package/dist/components/density-switcher.d.ts +1 -1
  56. package/dist/components/filter-bar-context.d.ts +1 -1
  57. package/dist/components/filter-bar-field-utils.d.ts +2 -2
  58. package/dist/components/form-lookup-context.d.ts +1 -1
  59. package/dist/components/icon-menu-picker.d.ts +1 -1
  60. package/dist/components/json-schema-form-accordion-array.cjs +44 -21
  61. package/dist/components/json-schema-form-accordion-array.cjs.map +1 -1
  62. package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -1
  63. package/dist/components/json-schema-form-accordion-array.js +47 -24
  64. package/dist/components/json-schema-form-accordion-array.js.map +1 -1
  65. package/dist/components/json-schema-form-array.cjs +53 -30
  66. package/dist/components/json-schema-form-array.cjs.map +1 -1
  67. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  68. package/dist/components/json-schema-form-array.js +54 -31
  69. package/dist/components/json-schema-form-array.js.map +1 -1
  70. package/dist/components/json-schema-form-cards-array.cjs +32 -22
  71. package/dist/components/json-schema-form-cards-array.cjs.map +1 -1
  72. package/dist/components/json-schema-form-cards-array.d.ts.map +1 -1
  73. package/dist/components/json-schema-form-cards-array.js +33 -23
  74. package/dist/components/json-schema-form-cards-array.js.map +1 -1
  75. package/dist/components/json-schema-form-collection-layouts.fixtures.d.ts +44 -0
  76. package/dist/components/json-schema-form-collection-layouts.fixtures.d.ts.map +1 -0
  77. package/dist/components/json-schema-form-discriminator.d.ts +1 -1
  78. package/dist/components/json-schema-form-errors.cjs +5 -1
  79. package/dist/components/json-schema-form-errors.cjs.map +1 -1
  80. package/dist/components/json-schema-form-errors.d.ts +2 -1
  81. package/dist/components/json-schema-form-errors.d.ts.map +1 -1
  82. package/dist/components/json-schema-form-errors.js +6 -2
  83. package/dist/components/json-schema-form-errors.js.map +1 -1
  84. package/dist/components/json-schema-form-extensions.d.ts +1 -1
  85. package/dist/components/json-schema-form-filter-input.cjs +50 -0
  86. package/dist/components/json-schema-form-filter-input.cjs.map +1 -0
  87. package/dist/components/json-schema-form-filter-input.d.ts +5 -0
  88. package/dist/components/json-schema-form-filter-input.d.ts.map +1 -0
  89. package/dist/components/json-schema-form-filter-input.js +50 -0
  90. package/dist/components/json-schema-form-filter-input.js.map +1 -0
  91. package/dist/components/json-schema-form-filter.cjs +49 -0
  92. package/dist/components/json-schema-form-filter.cjs.map +1 -0
  93. package/dist/components/json-schema-form-filter.d.ts +8 -0
  94. package/dist/components/json-schema-form-filter.d.ts.map +1 -0
  95. package/dist/components/json-schema-form-filter.js +49 -0
  96. package/dist/components/json-schema-form-filter.js.map +1 -0
  97. package/dist/components/json-schema-form-layout.cjs +84 -17
  98. package/dist/components/json-schema-form-layout.cjs.map +1 -1
  99. package/dist/components/json-schema-form-layout.d.ts +1 -1
  100. package/dist/components/json-schema-form-layout.d.ts.map +1 -1
  101. package/dist/components/json-schema-form-layout.js +84 -17
  102. package/dist/components/json-schema-form-layout.js.map +1 -1
  103. package/dist/components/json-schema-form-list-array.cjs +16 -5
  104. package/dist/components/json-schema-form-list-array.cjs.map +1 -1
  105. package/dist/components/json-schema-form-list-array.d.ts +2 -1
  106. package/dist/components/json-schema-form-list-array.d.ts.map +1 -1
  107. package/dist/components/json-schema-form-list-array.js +16 -5
  108. package/dist/components/json-schema-form-list-array.js.map +1 -1
  109. package/dist/components/json-schema-form-object.cjs +239 -85
  110. package/dist/components/json-schema-form-object.cjs.map +1 -1
  111. package/dist/components/json-schema-form-object.d.ts +2 -2
  112. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  113. package/dist/components/json-schema-form-object.js +241 -87
  114. package/dist/components/json-schema-form-object.js.map +1 -1
  115. package/dist/components/json-schema-form-preferences.cjs +1 -1
  116. package/dist/components/json-schema-form-preferences.cjs.map +1 -1
  117. package/dist/components/json-schema-form-preferences.d.ts +1 -1
  118. package/dist/components/json-schema-form-preferences.d.ts.map +1 -1
  119. package/dist/components/json-schema-form-preferences.js +1 -1
  120. package/dist/components/json-schema-form-preferences.js.map +1 -1
  121. package/dist/components/json-schema-form-properties-errors.fixtures.d.ts +14 -0
  122. package/dist/components/json-schema-form-properties-errors.fixtures.d.ts.map +1 -0
  123. package/dist/components/json-schema-form-properties-size.cjs +19 -0
  124. package/dist/components/json-schema-form-properties-size.cjs.map +1 -0
  125. package/dist/components/json-schema-form-properties-size.d.ts +4 -0
  126. package/dist/components/json-schema-form-properties-size.d.ts.map +1 -0
  127. package/dist/components/json-schema-form-properties-size.js +19 -0
  128. package/dist/components/json-schema-form-properties-size.js.map +1 -0
  129. package/dist/components/json-schema-form-properties.cjs +305 -0
  130. package/dist/components/json-schema-form-properties.cjs.map +1 -0
  131. package/dist/components/json-schema-form-properties.d.ts +20 -0
  132. package/dist/components/json-schema-form-properties.d.ts.map +1 -0
  133. package/dist/components/json-schema-form-properties.fixtures.d.ts +157 -0
  134. package/dist/components/json-schema-form-properties.fixtures.d.ts.map +1 -0
  135. package/dist/components/json-schema-form-properties.js +305 -0
  136. package/dist/components/json-schema-form-properties.js.map +1 -0
  137. package/dist/components/json-schema-form-property-actions-context.cjs +6 -0
  138. package/dist/components/json-schema-form-property-actions-context.cjs.map +1 -0
  139. package/dist/components/json-schema-form-property-actions-context.d.ts +2 -0
  140. package/dist/components/json-schema-form-property-actions-context.d.ts.map +1 -0
  141. package/dist/components/json-schema-form-property-actions-context.js +6 -0
  142. package/dist/components/json-schema-form-property-actions-context.js.map +1 -0
  143. package/dist/components/json-schema-form-property-collection.cjs +31 -0
  144. package/dist/components/json-schema-form-property-collection.cjs.map +1 -0
  145. package/dist/components/json-schema-form-property-collection.d.ts +6 -0
  146. package/dist/components/json-schema-form-property-collection.d.ts.map +1 -0
  147. package/dist/components/json-schema-form-property-collection.js +31 -0
  148. package/dist/components/json-schema-form-property-collection.js.map +1 -0
  149. package/dist/components/json-schema-form-property-draft.cjs +45 -0
  150. package/dist/components/json-schema-form-property-draft.cjs.map +1 -0
  151. package/dist/components/json-schema-form-property-draft.d.ts +8 -0
  152. package/dist/components/json-schema-form-property-draft.d.ts.map +1 -0
  153. package/dist/components/json-schema-form-property-draft.js +45 -0
  154. package/dist/components/json-schema-form-property-draft.js.map +1 -0
  155. package/dist/components/json-schema-form-property-preview.cjs +68 -0
  156. package/dist/components/json-schema-form-property-preview.cjs.map +1 -0
  157. package/dist/components/json-schema-form-property-preview.d.ts +7 -0
  158. package/dist/components/json-schema-form-property-preview.d.ts.map +1 -0
  159. package/dist/components/json-schema-form-property-preview.js +68 -0
  160. package/dist/components/json-schema-form-property-preview.js.map +1 -0
  161. package/dist/components/json-schema-form-property-selection.cjs +89 -0
  162. package/dist/components/json-schema-form-property-selection.cjs.map +1 -0
  163. package/dist/components/json-schema-form-property-selection.d.ts +6 -0
  164. package/dist/components/json-schema-form-property-selection.d.ts.map +1 -0
  165. package/dist/components/json-schema-form-property-selection.js +89 -0
  166. package/dist/components/json-schema-form-property-selection.js.map +1 -0
  167. package/dist/components/json-schema-form-render.cjs +41 -4
  168. package/dist/components/json-schema-form-render.cjs.map +1 -1
  169. package/dist/components/json-schema-form-render.d.ts +1 -1
  170. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  171. package/dist/components/json-schema-form-render.js +42 -5
  172. package/dist/components/json-schema-form-render.js.map +1 -1
  173. package/dist/components/json-schema-form-resolve.cjs +2 -0
  174. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  175. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  176. package/dist/components/json-schema-form-resolve.js +2 -0
  177. package/dist/components/json-schema-form-resolve.js.map +1 -1
  178. package/dist/components/json-schema-form-runtime-types.d.ts +222 -0
  179. package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -0
  180. package/dist/components/json-schema-form-table-array.cjs +82 -51
  181. package/dist/components/json-schema-form-table-array.cjs.map +1 -1
  182. package/dist/components/json-schema-form-table-array.d.ts.map +1 -1
  183. package/dist/components/json-schema-form-table-array.js +84 -53
  184. package/dist/components/json-schema-form-table-array.js.map +1 -1
  185. package/dist/components/json-schema-form-template-menu.d.ts +1 -1
  186. package/dist/components/json-schema-form-template.d.ts +1 -1
  187. package/dist/components/json-schema-form-types.d.ts +7 -179
  188. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  189. package/dist/components/json-schema-form-utils.cjs +10 -9
  190. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  191. package/dist/components/json-schema-form-utils.d.ts +11 -1
  192. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  193. package/dist/components/json-schema-form-utils.js +10 -9
  194. package/dist/components/json-schema-form-utils.js.map +1 -1
  195. package/dist/components/loading.d.ts +4 -4
  196. package/dist/components/mdx-editor-callout.d.ts +1 -1
  197. package/dist/components/mdx-editor-options.d.ts +1 -1
  198. package/dist/components/select.d.ts +3 -3
  199. package/dist/components/theme-switcher.d.ts +1 -1
  200. package/dist/components/use-list-menu-selection.d.ts +1 -1
  201. package/dist/components/useComboboxLayout.d.ts +1 -1
  202. package/dist/components/workload-picker-utils.d.ts +1 -1
  203. package/dist/data/Avatar.d.ts +1 -1
  204. package/dist/data/AvatarBadge.d.ts +1 -1
  205. package/dist/data/Badge.d.ts +1 -1
  206. package/dist/data/Callout.d.ts +1 -1
  207. package/dist/data/DataTable.cjs +575 -435
  208. package/dist/data/DataTable.cjs.map +1 -1
  209. package/dist/data/DataTable.d.ts +21 -13
  210. package/dist/data/DataTable.d.ts.map +1 -1
  211. package/dist/data/DataTable.grouping.d.ts +1 -1
  212. package/dist/data/DataTable.js +575 -435
  213. package/dist/data/DataTable.js.map +1 -1
  214. package/dist/data/ExecutionTree.d.ts +1 -1
  215. package/dist/data/FilterPill.d.ts +1 -1
  216. package/dist/data/FixtureEditor/RawFenceEditor.d.ts +1 -1
  217. package/dist/data/FixtureEditor/types.d.ts +1 -1
  218. package/dist/data/Gauge.d.ts +1 -1
  219. package/dist/data/GaugeHoverCard.d.ts +1 -1
  220. package/dist/data/Icon.d.ts +1 -1
  221. package/dist/data/KeyValueList.d.ts +1 -1
  222. package/dist/data/MarkdownEditor.d.ts +1 -1
  223. package/dist/data/MatrixTable.d.ts +1 -1
  224. package/dist/data/ObjectGraph.d.ts +1 -1
  225. package/dist/data/ProgressBars.d.ts +1 -1
  226. package/dist/data/Properties.cjs +86 -35
  227. package/dist/data/Properties.cjs.map +1 -1
  228. package/dist/data/Properties.d.ts +2 -2
  229. package/dist/data/Properties.d.ts.map +1 -1
  230. package/dist/data/Properties.js +87 -36
  231. package/dist/data/Properties.js.map +1 -1
  232. package/dist/data/RadialGauge.d.ts +1 -1
  233. package/dist/data/SchemaViewer.d.ts +1 -1
  234. package/dist/data/SortableHeader.d.ts +1 -1
  235. package/dist/data/StatStrip.d.ts +1 -1
  236. package/dist/data/StatusBreakdown.d.ts +1 -1
  237. package/dist/data/TabButton.d.ts +1 -1
  238. package/dist/data/TaskHeaderExtras.cjs +35 -0
  239. package/dist/data/TaskHeaderExtras.cjs.map +1 -0
  240. package/dist/data/TaskHeaderExtras.d.ts +27 -0
  241. package/dist/data/TaskHeaderExtras.d.ts.map +1 -0
  242. package/dist/data/TaskHeaderExtras.js +35 -0
  243. package/dist/data/TaskHeaderExtras.js.map +1 -0
  244. package/dist/data/TaskManager.cjs +27 -23
  245. package/dist/data/TaskManager.cjs.map +1 -1
  246. package/dist/data/TaskManager.d.ts +13 -1
  247. package/dist/data/TaskManager.d.ts.map +1 -1
  248. package/dist/data/TaskManager.js +27 -23
  249. package/dist/data/TaskManager.js.map +1 -1
  250. package/dist/data/TaskManagerButton.cjs +17 -34
  251. package/dist/data/TaskManagerButton.cjs.map +1 -1
  252. package/dist/data/TaskManagerButton.d.ts.map +1 -1
  253. package/dist/data/TaskManagerButton.js +18 -35
  254. package/dist/data/TaskManagerButton.js.map +1 -1
  255. package/dist/data/TaskProcessDetails.cjs +7 -25
  256. package/dist/data/TaskProcessDetails.cjs.map +1 -1
  257. package/dist/data/TaskProcessDetails.d.ts +2 -1
  258. package/dist/data/TaskProcessDetails.d.ts.map +1 -1
  259. package/dist/data/TaskProcessDetails.js +7 -25
  260. package/dist/data/TaskProcessDetails.js.map +1 -1
  261. package/dist/data/TaskProcessMetadata.cjs +50 -0
  262. package/dist/data/TaskProcessMetadata.cjs.map +1 -0
  263. package/dist/data/TaskProcessMetadata.d.ts +20 -0
  264. package/dist/data/TaskProcessMetadata.d.ts.map +1 -0
  265. package/dist/data/TaskProcessMetadata.js +50 -0
  266. package/dist/data/TaskProcessMetadata.js.map +1 -0
  267. package/dist/data/TaskProgress.cjs +41 -41
  268. package/dist/data/TaskProgress.cjs.map +1 -1
  269. package/dist/data/TaskProgress.d.ts +15 -1
  270. package/dist/data/TaskProgress.d.ts.map +1 -1
  271. package/dist/data/TaskProgress.js +41 -41
  272. package/dist/data/TaskProgress.js.map +1 -1
  273. package/dist/data/TaskResourceReadings.cjs +42 -0
  274. package/dist/data/TaskResourceReadings.cjs.map +1 -0
  275. package/dist/data/TaskResourceReadings.d.ts +6 -0
  276. package/dist/data/TaskResourceReadings.d.ts.map +1 -0
  277. package/dist/data/TaskResourceReadings.js +42 -0
  278. package/dist/data/TaskResourceReadings.js.map +1 -0
  279. package/dist/data/TaskSnapshot.cjs.map +1 -1
  280. package/dist/data/TaskSnapshot.d.ts +36 -1
  281. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  282. package/dist/data/TaskSnapshot.js.map +1 -1
  283. package/dist/data/TaskStreamTabs.cjs +78 -0
  284. package/dist/data/TaskStreamTabs.cjs.map +1 -0
  285. package/dist/data/TaskStreamTabs.d.ts +35 -0
  286. package/dist/data/TaskStreamTabs.d.ts.map +1 -0
  287. package/dist/data/TaskStreamTabs.js +78 -0
  288. package/dist/data/TaskStreamTabs.js.map +1 -0
  289. package/dist/data/Timeline.d.ts +1 -1
  290. package/dist/data/Tree.d.ts +1 -1
  291. package/dist/data/TreeGroupHeader.d.ts +1 -1
  292. package/dist/data/TreeNode.d.ts +1 -1
  293. package/dist/data/Version.d.ts +3 -3
  294. package/dist/data/ai/ChatWindow.cjs +22 -12
  295. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  296. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  297. package/dist/data/ai/ChatWindow.js +22 -12
  298. package/dist/data/ai/ChatWindow.js.map +1 -1
  299. package/dist/data/ai/ChatWindow.test-utils.d.ts +4 -2
  300. package/dist/data/ai/ChatWindow.test-utils.d.ts.map +1 -1
  301. package/dist/data/ai/ChatWindow.types.d.ts +1 -1
  302. package/dist/data/ai/ChatWindowManager.cjs +2 -0
  303. package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
  304. package/dist/data/ai/ChatWindowManager.d.ts +1 -1
  305. package/dist/data/ai/ChatWindowManager.d.ts.map +1 -1
  306. package/dist/data/ai/ChatWindowManager.js +2 -0
  307. package/dist/data/ai/ChatWindowManager.js.map +1 -1
  308. package/dist/data/ai/PolicyTree.d.ts +1 -1
  309. package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts +1 -1
  310. package/dist/data/ai/PromptCatalog/types.d.ts +1 -1
  311. package/dist/data/ai/PromptRunEditor/index.cjs +4 -0
  312. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  313. package/dist/data/ai/PromptRunEditor/index.d.ts +5 -2
  314. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  315. package/dist/data/ai/PromptRunEditor/index.js +4 -0
  316. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  317. package/dist/data/ai/SessionChatComposer.d.ts +1 -1
  318. package/dist/data/ai/SessionInspector.approvals-model.cjs +9 -0
  319. package/dist/data/ai/SessionInspector.approvals-model.cjs.map +1 -0
  320. package/dist/data/ai/SessionInspector.approvals-model.d.ts +17 -0
  321. package/dist/data/ai/SessionInspector.approvals-model.d.ts.map +1 -0
  322. package/dist/data/ai/SessionInspector.approvals-model.js +9 -0
  323. package/dist/data/ai/SessionInspector.approvals-model.js.map +1 -0
  324. package/dist/data/ai/SessionInspector.approvals.cjs +143 -0
  325. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -0
  326. package/dist/data/ai/SessionInspector.approvals.d.ts +13 -0
  327. package/dist/data/ai/SessionInspector.approvals.d.ts.map +1 -0
  328. package/dist/data/ai/SessionInspector.approvals.js +143 -0
  329. package/dist/data/ai/SessionInspector.approvals.js.map +1 -0
  330. package/dist/data/ai/SessionInspector.cjs +21 -8
  331. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  332. package/dist/data/ai/SessionInspector.d.ts +6 -2
  333. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  334. package/dist/data/ai/SessionInspector.hierarchy.d.ts +1 -1
  335. package/dist/data/ai/SessionInspector.js +21 -8
  336. package/dist/data/ai/SessionInspector.js.map +1 -1
  337. package/dist/data/ai/SessionInspector.panel-parts.cjs +34 -0
  338. package/dist/data/ai/SessionInspector.panel-parts.cjs.map +1 -0
  339. package/dist/data/ai/SessionInspector.panel-parts.d.ts +19 -0
  340. package/dist/data/ai/SessionInspector.panel-parts.d.ts.map +1 -0
  341. package/dist/data/ai/SessionInspector.panel-parts.js +34 -0
  342. package/dist/data/ai/SessionInspector.panel-parts.js.map +1 -0
  343. package/dist/data/ai/SessionInspector.panel-values.cjs +18 -0
  344. package/dist/data/ai/SessionInspector.panel-values.cjs.map +1 -0
  345. package/dist/data/ai/SessionInspector.panel-values.d.ts +13 -0
  346. package/dist/data/ai/SessionInspector.panel-values.d.ts.map +1 -0
  347. package/dist/data/ai/SessionInspector.panel-values.js +18 -0
  348. package/dist/data/ai/SessionInspector.panel-values.js.map +1 -0
  349. package/dist/data/ai/SessionInspector.panels.cjs +41 -99
  350. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
  351. package/dist/data/ai/SessionInspector.panels.d.ts +3 -1
  352. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
  353. package/dist/data/ai/SessionInspector.panels.js +13 -71
  354. package/dist/data/ai/SessionInspector.panels.js.map +1 -1
  355. package/dist/data/ai/SessionViewer.d.ts +1 -1
  356. package/dist/data/ai/SessionViewer.rows.d.ts +1 -1
  357. package/dist/data/ai/SessionViewer.tool-details.d.ts +1 -1
  358. package/dist/data/ai/SessionViewer.unified.d.ts +23 -0
  359. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  360. package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts +1 -1
  361. package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts +1 -1
  362. package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts +1 -1
  363. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs +3 -1
  364. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
  365. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +3 -1
  366. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
  367. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js +3 -1
  368. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
  369. package/dist/data/ai/SpecRuntimeEditor/fields.d.ts +1 -1
  370. package/dist/data/ai/SpecRuntimeEditor/index.cjs +3 -1
  371. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  372. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +5 -2
  373. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  374. package/dist/data/ai/SpecRuntimeEditor/index.js +3 -1
  375. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  376. package/dist/data/ai/chat-window-context.cjs +1 -0
  377. package/dist/data/ai/chat-window-context.cjs.map +1 -1
  378. package/dist/data/ai/chat-window-context.d.ts +13 -5
  379. package/dist/data/ai/chat-window-context.d.ts.map +1 -1
  380. package/dist/data/ai/chat-window-context.js +1 -0
  381. package/dist/data/ai/chat-window-context.js.map +1 -1
  382. package/dist/data/ai/index.d.ts +3 -1
  383. package/dist/data/ai/index.d.ts.map +1 -1
  384. package/dist/data/ai/use-session-scroll.d.ts +1 -1
  385. package/dist/data/cache-browser/adapter.d.ts +1 -1
  386. package/dist/data/cells/CellFilterActions.d.ts +1 -1
  387. package/dist/data/cells/EntityCell.d.ts +1 -1
  388. package/dist/data/cells/tag-utils.d.ts +1 -1
  389. package/dist/data/chat/Chat.cjs +42 -46
  390. package/dist/data/chat/Chat.cjs.map +1 -1
  391. package/dist/data/chat/Chat.d.ts +16 -5
  392. package/dist/data/chat/Chat.d.ts.map +1 -1
  393. package/dist/data/chat/Chat.js +43 -47
  394. package/dist/data/chat/Chat.js.map +1 -1
  395. package/dist/data/chat/ModelSelector.d.ts +1 -1
  396. package/dist/data/chat/PromptInput.cjs +13 -0
  397. package/dist/data/chat/PromptInput.cjs.map +1 -1
  398. package/dist/data/chat/PromptInput.d.ts +8 -2
  399. package/dist/data/chat/PromptInput.d.ts.map +1 -1
  400. package/dist/data/chat/PromptInput.js +14 -1
  401. package/dist/data/chat/PromptInput.js.map +1 -1
  402. package/dist/data/chat/tool-render/ToolArgs.d.ts +1 -1
  403. package/dist/data/chat/tool-render/ToolParams.d.ts +1 -1
  404. package/dist/data/chat/tool-render/ToolValue.d.ts +1 -1
  405. package/dist/data/chat/tool-render/adapter.d.ts +1 -1
  406. package/dist/data/chat/tool-render/context.d.ts +1 -1
  407. package/dist/data/chat/tool-render/defaults.d.ts +1 -1
  408. package/dist/data/chat/tool-render/known-tool-views.d.ts +1 -1
  409. package/dist/data/chat/tool-render/summary.d.ts +1 -1
  410. package/dist/data/chat/types.d.ts +1 -1
  411. package/dist/data/clicky-export/useClickyExport.d.ts +1 -1
  412. package/dist/data/data-table-server-filters.d.ts +1 -1
  413. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +1 -1
  414. package/dist/data/diagnostics/ErrorDetails.d.ts +1 -1
  415. package/dist/data/diagnostics/StackFrameRow.d.ts +1 -1
  416. package/dist/data/git/GitChangeList.d.ts +1 -1
  417. package/dist/data/icon-fallback.d.ts +1 -1
  418. package/dist/data/properties-context.cjs +6 -0
  419. package/dist/data/properties-context.cjs.map +1 -0
  420. package/dist/data/properties-context.d.ts +7 -0
  421. package/dist/data/properties-context.d.ts.map +1 -0
  422. package/dist/data/properties-context.js +6 -0
  423. package/dist/data/properties-context.js.map +1 -0
  424. package/dist/data/query-browser/QueryBrowser.types.d.ts +1 -1
  425. package/dist/data/runtime/RuntimeBar.cjs +7 -3
  426. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  427. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  428. package/dist/data/runtime/RuntimeBar.js +7 -3
  429. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  430. package/dist/data/task-copy.cjs +1 -1
  431. package/dist/data/task-copy.cjs.map +1 -1
  432. package/dist/data/task-copy.js +1 -1
  433. package/dist/data/task-copy.js.map +1 -1
  434. package/dist/data/task-metadata.cjs +36 -0
  435. package/dist/data/task-metadata.cjs.map +1 -0
  436. package/dist/data/task-metadata.d.ts +39 -0
  437. package/dist/data/task-metadata.d.ts.map +1 -0
  438. package/dist/data/task-metadata.js +36 -0
  439. package/dist/data/task-metadata.js.map +1 -0
  440. package/dist/data/task-resource-summary.cjs +30 -0
  441. package/dist/data/task-resource-summary.cjs.map +1 -0
  442. package/dist/data/task-resource-summary.d.ts +15 -0
  443. package/dist/data/task-resource-summary.d.ts.map +1 -0
  444. package/dist/data/task-resource-summary.js +30 -0
  445. package/dist/data/task-resource-summary.js.map +1 -0
  446. package/dist/data/task-status.cjs +8 -2
  447. package/dist/data/task-status.cjs.map +1 -1
  448. package/dist/data/task-status.d.ts +3 -0
  449. package/dist/data/task-status.d.ts.map +1 -1
  450. package/dist/data/task-status.js +8 -2
  451. package/dist/data/task-status.js.map +1 -1
  452. package/dist/data/task-streams.cjs +39 -0
  453. package/dist/data/task-streams.cjs.map +1 -0
  454. package/dist/data/task-streams.d.ts +60 -0
  455. package/dist/data/task-streams.d.ts.map +1 -0
  456. package/dist/data/task-streams.js +39 -0
  457. package/dist/data/task-streams.js.map +1 -0
  458. package/dist/data/task-work-progress.cjs +24 -0
  459. package/dist/data/task-work-progress.cjs.map +1 -0
  460. package/dist/data/task-work-progress.d.ts +21 -0
  461. package/dist/data/task-work-progress.d.ts.map +1 -0
  462. package/dist/data/task-work-progress.js +24 -0
  463. package/dist/data/task-work-progress.js.map +1 -0
  464. package/dist/data/test-runner/TestRunner.d.ts +1 -1
  465. package/dist/data/test-runner/adapter.d.ts +1 -1
  466. package/dist/data/test-runner/context.d.ts +1 -1
  467. package/dist/data/use-data-table-virtual.cjs +73 -0
  468. package/dist/data/use-data-table-virtual.cjs.map +1 -0
  469. package/dist/data/use-data-table-virtual.d.ts +40 -0
  470. package/dist/data/use-data-table-virtual.d.ts.map +1 -0
  471. package/dist/data/use-data-table-virtual.js +73 -0
  472. package/dist/data/use-data-table-virtual.js.map +1 -0
  473. package/dist/data/verification/VerificationResults.d.ts +1 -1
  474. package/dist/data/version-info.cjs +3 -3
  475. package/dist/data/version-info.js +3 -3
  476. package/dist/data.cjs +14 -0
  477. package/dist/data.cjs.map +1 -1
  478. package/dist/data.d.ts +6 -1
  479. package/dist/data.d.ts.map +1 -1
  480. package/dist/data.js +14 -0
  481. package/dist/data.js.map +1 -1
  482. package/dist/expressions/lang/attributes.cjs +56 -0
  483. package/dist/expressions/lang/attributes.cjs.map +1 -0
  484. package/dist/expressions/lang/attributes.d.ts +22 -0
  485. package/dist/expressions/lang/attributes.d.ts.map +1 -0
  486. package/dist/expressions/lang/attributes.js +56 -0
  487. package/dist/expressions/lang/attributes.js.map +1 -0
  488. package/dist/expressions/lang/completion.cjs +164 -0
  489. package/dist/expressions/lang/completion.cjs.map +1 -0
  490. package/dist/expressions/lang/completion.d.ts +29 -0
  491. package/dist/expressions/lang/completion.d.ts.map +1 -0
  492. package/dist/expressions/lang/completion.js +164 -0
  493. package/dist/expressions/lang/completion.js.map +1 -0
  494. package/dist/expressions/lang/environment.cjs +115 -0
  495. package/dist/expressions/lang/environment.cjs.map +1 -0
  496. package/dist/expressions/lang/environment.d.ts +54 -0
  497. package/dist/expressions/lang/environment.d.ts.map +1 -0
  498. package/dist/expressions/lang/environment.js +115 -0
  499. package/dist/expressions/lang/environment.js.map +1 -0
  500. package/dist/expressions/lang/generated/conformance.json.d.ts +4962 -0
  501. package/dist/expressions/lang/generated/index.cjs +18 -0
  502. package/dist/expressions/lang/generated/index.cjs.map +1 -0
  503. package/dist/expressions/lang/generated/index.d.ts +9 -0
  504. package/dist/expressions/lang/generated/index.d.ts.map +1 -0
  505. package/dist/expressions/lang/generated/index.js +18 -0
  506. package/dist/expressions/lang/generated/index.js.map +1 -0
  507. package/dist/expressions/lang/generated/languages.json.cjs +18 -0
  508. package/dist/expressions/lang/generated/languages.json.cjs.map +1 -0
  509. package/dist/expressions/lang/generated/languages.json.d.ts +2305 -0
  510. package/dist/expressions/lang/generated/languages.json.js +18 -0
  511. package/dist/expressions/lang/generated/languages.json.js.map +1 -0
  512. package/dist/expressions/lang/generated/spec.json.cjs +12 -0
  513. package/dist/expressions/lang/generated/spec.json.cjs.map +1 -0
  514. package/dist/expressions/lang/generated/spec.json.d.ts +6260 -0
  515. package/dist/expressions/lang/generated/spec.json.js +12 -0
  516. package/dist/expressions/lang/generated/spec.json.js.map +1 -0
  517. package/dist/expressions/lang/hover.cjs +106 -0
  518. package/dist/expressions/lang/hover.cjs.map +1 -0
  519. package/dist/expressions/lang/hover.d.ts +54 -0
  520. package/dist/expressions/lang/hover.d.ts.map +1 -0
  521. package/dist/expressions/lang/hover.js +106 -0
  522. package/dist/expressions/lang/hover.js.map +1 -0
  523. package/dist/expressions/lang/index.cjs +87 -0
  524. package/dist/expressions/lang/index.cjs.map +1 -0
  525. package/dist/expressions/lang/index.d.ts +65 -0
  526. package/dist/expressions/lang/index.d.ts.map +1 -0
  527. package/dist/expressions/lang/index.js +90 -0
  528. package/dist/expressions/lang/index.js.map +1 -0
  529. package/dist/expressions/lang/merge.cjs +52 -0
  530. package/dist/expressions/lang/merge.cjs.map +1 -0
  531. package/dist/expressions/lang/merge.d.ts +12 -0
  532. package/dist/expressions/lang/merge.d.ts.map +1 -0
  533. package/dist/expressions/lang/merge.js +52 -0
  534. package/dist/expressions/lang/merge.js.map +1 -0
  535. package/dist/expressions/lang/prefix.cjs +91 -0
  536. package/dist/expressions/lang/prefix.cjs.map +1 -0
  537. package/dist/expressions/lang/prefix.d.ts +36 -0
  538. package/dist/expressions/lang/prefix.d.ts.map +1 -0
  539. package/dist/expressions/lang/prefix.js +91 -0
  540. package/dist/expressions/lang/prefix.js.map +1 -0
  541. package/dist/expressions/lang/spec.d.ts +13 -0
  542. package/dist/expressions/lang/spec.d.ts.map +1 -0
  543. package/dist/expressions/lang/theme.cjs +97 -0
  544. package/dist/expressions/lang/theme.cjs.map +1 -0
  545. package/dist/expressions/lang/theme.d.ts +6 -0
  546. package/dist/expressions/lang/theme.d.ts.map +1 -0
  547. package/dist/expressions/lang/theme.js +97 -0
  548. package/dist/expressions/lang/theme.js.map +1 -0
  549. package/dist/expressions/lang/types.d.ts +81 -0
  550. package/dist/expressions/lang/types.d.ts.map +1 -0
  551. package/dist/expressions/playground/ExpressionPlayground.cjs +308 -0
  552. package/dist/expressions/playground/ExpressionPlayground.cjs.map +1 -0
  553. package/dist/expressions/playground/ExpressionPlayground.d.ts +42 -0
  554. package/dist/expressions/playground/ExpressionPlayground.d.ts.map +1 -0
  555. package/dist/expressions/playground/ExpressionPlayground.js +291 -0
  556. package/dist/expressions/playground/ExpressionPlayground.js.map +1 -0
  557. package/dist/expressions/playground/RunControls.cjs +51 -0
  558. package/dist/expressions/playground/RunControls.cjs.map +1 -0
  559. package/dist/expressions/playground/RunControls.d.ts +7 -0
  560. package/dist/expressions/playground/RunControls.d.ts.map +1 -0
  561. package/dist/expressions/playground/RunControls.js +51 -0
  562. package/dist/expressions/playground/RunControls.js.map +1 -0
  563. package/dist/expressions/playground/VerticalSplit.cjs +109 -0
  564. package/dist/expressions/playground/VerticalSplit.cjs.map +1 -0
  565. package/dist/expressions/playground/VerticalSplit.d.ts +23 -0
  566. package/dist/expressions/playground/VerticalSplit.d.ts.map +1 -0
  567. package/dist/expressions/playground/VerticalSplit.js +109 -0
  568. package/dist/expressions/playground/VerticalSplit.js.map +1 -0
  569. package/dist/expressions/playground/api.cjs +49 -0
  570. package/dist/expressions/playground/api.cjs.map +1 -0
  571. package/dist/expressions/playground/api.d.ts +53 -0
  572. package/dist/expressions/playground/api.d.ts.map +1 -0
  573. package/dist/expressions/playground/api.js +49 -0
  574. package/dist/expressions/playground/api.js.map +1 -0
  575. package/dist/expressions/playground/languages.cjs +88 -0
  576. package/dist/expressions/playground/languages.cjs.map +1 -0
  577. package/dist/expressions/playground/languages.d.ts +43 -0
  578. package/dist/expressions/playground/languages.d.ts.map +1 -0
  579. package/dist/expressions/playground/languages.js +88 -0
  580. package/dist/expressions/playground/languages.js.map +1 -0
  581. package/dist/expressions/playground/panels/GraphPanel.cjs +72 -0
  582. package/dist/expressions/playground/panels/GraphPanel.cjs.map +1 -0
  583. package/dist/expressions/playground/panels/GraphPanel.d.ts +19 -0
  584. package/dist/expressions/playground/panels/GraphPanel.d.ts.map +1 -0
  585. package/dist/expressions/playground/panels/GraphPanel.js +72 -0
  586. package/dist/expressions/playground/panels/GraphPanel.js.map +1 -0
  587. package/dist/expressions/playground/panels/ResultPanel.cjs +82 -0
  588. package/dist/expressions/playground/panels/ResultPanel.cjs.map +1 -0
  589. package/dist/expressions/playground/panels/ResultPanel.d.ts +11 -0
  590. package/dist/expressions/playground/panels/ResultPanel.d.ts.map +1 -0
  591. package/dist/expressions/playground/panels/ResultPanel.js +82 -0
  592. package/dist/expressions/playground/panels/ResultPanel.js.map +1 -0
  593. package/dist/expressions/playground/panels/SpecPanel.cjs +76 -0
  594. package/dist/expressions/playground/panels/SpecPanel.cjs.map +1 -0
  595. package/dist/expressions/playground/panels/SpecPanel.d.ts +18 -0
  596. package/dist/expressions/playground/panels/SpecPanel.d.ts.map +1 -0
  597. package/dist/expressions/playground/panels/SpecPanel.js +76 -0
  598. package/dist/expressions/playground/panels/SpecPanel.js.map +1 -0
  599. package/dist/expressions/playground/panels/TokensPanel.cjs +89 -0
  600. package/dist/expressions/playground/panels/TokensPanel.cjs.map +1 -0
  601. package/dist/expressions/playground/panels/TokensPanel.d.ts +15 -0
  602. package/dist/expressions/playground/panels/TokensPanel.d.ts.map +1 -0
  603. package/dist/expressions/playground/panels/TokensPanel.js +72 -0
  604. package/dist/expressions/playground/panels/TokensPanel.js.map +1 -0
  605. package/dist/expressions/playground/panels/graphNodes.cjs +35 -0
  606. package/dist/expressions/playground/panels/graphNodes.cjs.map +1 -0
  607. package/dist/expressions/playground/panels/graphNodes.d.ts +19 -0
  608. package/dist/expressions/playground/panels/graphNodes.d.ts.map +1 -0
  609. package/dist/expressions/playground/panels/graphNodes.js +35 -0
  610. package/dist/expressions/playground/panels/graphNodes.js.map +1 -0
  611. package/dist/expressions/playground/runAction.cjs +12 -0
  612. package/dist/expressions/playground/runAction.cjs.map +1 -0
  613. package/dist/expressions/playground/runAction.d.ts +15 -0
  614. package/dist/expressions/playground/runAction.d.ts.map +1 -0
  615. package/dist/expressions/playground/runAction.js +12 -0
  616. package/dist/expressions/playground/runAction.js.map +1 -0
  617. package/dist/expressions/playground/runShortcut.cjs +9 -0
  618. package/dist/expressions/playground/runShortcut.cjs.map +1 -0
  619. package/dist/expressions/playground/runShortcut.d.ts +2 -0
  620. package/dist/expressions/playground/runShortcut.d.ts.map +1 -0
  621. package/dist/expressions/playground/runShortcut.js +9 -0
  622. package/dist/expressions/playground/runShortcut.js.map +1 -0
  623. package/dist/expressions/playground/useEditorTheme.cjs +40 -0
  624. package/dist/expressions/playground/useEditorTheme.cjs.map +1 -0
  625. package/dist/expressions/playground/useEditorTheme.d.ts +16 -0
  626. package/dist/expressions/playground/useEditorTheme.d.ts.map +1 -0
  627. package/dist/expressions/playground/useEditorTheme.js +23 -0
  628. package/dist/expressions/playground/useEditorTheme.js.map +1 -0
  629. package/dist/expressions/playground/useEvaluator.cjs +72 -0
  630. package/dist/expressions/playground/useEvaluator.cjs.map +1 -0
  631. package/dist/expressions/playground/useEvaluator.d.ts +25 -0
  632. package/dist/expressions/playground/useEvaluator.d.ts.map +1 -0
  633. package/dist/expressions/playground/useEvaluator.js +72 -0
  634. package/dist/expressions/playground/useEvaluator.js.map +1 -0
  635. package/dist/expressions/playground/useParsedInput.cjs +22 -0
  636. package/dist/expressions/playground/useParsedInput.cjs.map +1 -0
  637. package/dist/expressions/playground/useParsedInput.d.ts +20 -0
  638. package/dist/expressions/playground/useParsedInput.d.ts.map +1 -0
  639. package/dist/expressions/playground/useParsedInput.js +22 -0
  640. package/dist/expressions/playground/useParsedInput.js.map +1 -0
  641. package/dist/expressions/playground/verticalSplitModel.cjs +11 -0
  642. package/dist/expressions/playground/verticalSplitModel.cjs.map +1 -0
  643. package/dist/expressions/playground/verticalSplitModel.d.ts +3 -0
  644. package/dist/expressions/playground/verticalSplitModel.d.ts.map +1 -0
  645. package/dist/expressions/playground/verticalSplitModel.js +11 -0
  646. package/dist/expressions/playground/verticalSplitModel.js.map +1 -0
  647. package/dist/expressions/playground.cjs +18 -0
  648. package/dist/expressions/playground.cjs.map +1 -0
  649. package/dist/expressions/playground.d.ts +18 -0
  650. package/dist/expressions/playground.d.ts.map +1 -0
  651. package/dist/expressions/playground.js +18 -0
  652. package/dist/expressions/playground.js.map +1 -0
  653. package/dist/expressions.cjs +28 -0
  654. package/dist/expressions.cjs.map +1 -0
  655. package/dist/expressions.d.ts +10 -0
  656. package/dist/expressions.d.ts.map +1 -0
  657. package/dist/expressions.js +28 -0
  658. package/dist/expressions.js.map +1 -0
  659. package/dist/hooks/density-provider.d.ts +1 -1
  660. package/dist/hooks/theme-provider.d.ts +1 -1
  661. package/dist/hooks/use-density.d.ts +1 -1
  662. package/dist/hooks/use-resource-clock.cjs +14 -0
  663. package/dist/hooks/use-resource-clock.cjs.map +1 -0
  664. package/dist/hooks/use-resource-clock.d.ts +2 -0
  665. package/dist/hooks/use-resource-clock.d.ts.map +1 -0
  666. package/dist/hooks/use-resource-clock.js +14 -0
  667. package/dist/hooks/use-resource-clock.js.map +1 -0
  668. package/dist/hooks/use-task-run.cjs +25 -18
  669. package/dist/hooks/use-task-run.cjs.map +1 -1
  670. package/dist/hooks/use-task-run.d.ts.map +1 -1
  671. package/dist/hooks/use-task-run.js +26 -19
  672. package/dist/hooks/use-task-run.js.map +1 -1
  673. package/dist/hooks/use-theme.d.ts +1 -1
  674. package/dist/icons/registry.d.ts +1 -1
  675. package/dist/icons/types.d.ts +1 -1
  676. package/dist/index.cjs +14 -0
  677. package/dist/index.cjs.map +1 -1
  678. package/dist/index.js +14 -0
  679. package/dist/index.js.map +1 -1
  680. package/dist/layout/AppShell.d.ts +1 -1
  681. package/dist/layout/AppShell.nav.drag.d.ts +1 -1
  682. package/dist/layout/AppSidebar.d.ts +1 -1
  683. package/dist/layout/Panel.d.ts +1 -1
  684. package/dist/layout/PanelFrame.d.ts +1 -1
  685. package/dist/layout/Section.d.ts +1 -1
  686. package/dist/layout/SplitPane.d.ts +1 -1
  687. package/dist/layout/Tabs.d.ts +1 -1
  688. package/dist/layout/Workspace.d.ts +1 -1
  689. package/dist/layout/Workspace.model.d.ts +1 -1
  690. package/dist/lib/combobox-values.d.ts +1 -1
  691. package/dist/monaco/MonacoEditor.cjs +3 -3
  692. package/dist/monaco/MonacoEditor.cjs.map +1 -1
  693. package/dist/monaco/MonacoEditor.js +2 -2
  694. package/dist/monaco/MonacoEditor.js.map +1 -1
  695. package/dist/monaco/types.d.ts +1 -1
  696. package/dist/monaco/use-monaco-worker.d.ts +1 -1
  697. package/dist/overlay/CellActions.d.ts +1 -1
  698. package/dist/overlay/CommandPalette.d.ts +2 -2
  699. package/dist/overlay/CommandPalette.model.d.ts +1 -1
  700. package/dist/overlay/CommandPaletteList.d.ts +1 -1
  701. package/dist/overlay/DropdownMenu.d.ts +1 -1
  702. package/dist/overlay/HoverCard.d.ts +1 -1
  703. package/dist/overlay/Modal.d.ts +2 -2
  704. package/dist/overlay/Toast.d.ts +1 -1
  705. package/dist/overlay/TourCard.d.ts +1 -1
  706. package/dist/overlay/TourProvider.d.ts +1 -1
  707. package/dist/overlay/dropdownMenuContext.d.ts +1 -1
  708. package/dist/overlay/toast-context.d.ts +2 -2
  709. package/dist/overlay/tour-context.d.ts +1 -1
  710. package/dist/overlay/tour-types.d.ts +1 -1
  711. package/dist/profiles/connections/connectionBrowserModel.d.ts +1 -1
  712. package/dist/profiles/connections/connectionQueryWorkspace.d.ts +1 -1
  713. package/dist/profiles/editor/profileBuilder.d.ts +1 -1
  714. package/dist/profiles/elasticsearch/esParamOperandExtension.d.ts +1 -1
  715. package/dist/profiles/fields/profileFieldControls.d.ts +1 -1
  716. package/dist/profiles/fields/profileFieldIcons.d.ts +1 -1
  717. package/dist/profiles/fields/profileFieldState.d.ts +1 -1
  718. package/dist/profiles/query/jsonPathSample.d.ts +1 -1
  719. package/dist/profiles/query/jsonPathSampleRow.d.ts +1 -1
  720. package/dist/profiles/query/prometheusResults.d.ts +2 -2
  721. package/dist/rpc/EndpointList.d.ts +1 -1
  722. package/dist/rpc/EntityExplorerApp.d.ts +1 -1
  723. package/dist/rpc/OperationCatalog.d.ts +1 -1
  724. package/dist/rpc/OperationEntityContextPicker.d.ts +1 -1
  725. package/dist/rpc/OperationEntityPage.d.ts +1 -1
  726. package/dist/rpc/OperationResultView.d.ts +1 -1
  727. package/dist/rpc/RouterProvider.d.ts +1 -1
  728. package/dist/rpc/SchemaActionForm.d.ts +1 -1
  729. package/dist/rpc/formMetadata.d.ts +1 -1
  730. package/dist/rpc/router.d.ts +1 -1
  731. package/dist/rpc/rpc-story.fixtures.d.ts +1 -1
  732. package/dist/styles.css +1 -1
  733. package/package.json +21 -2
@@ -1 +1 @@
1
- {"version":3,"file":"Properties.js","sources":["../../src/data/Properties.tsx"],"sourcesContent":["import { useEffect, useState, type ReactNode } from \"react\";\nimport { IconButton } from \"../components/IconButton\";\nimport {\n UiCheck,\n UiDotsVertical,\n UiListDashes,\n UiListFlat,\n UiRows,\n} from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { DropdownMenu } from \"../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\nimport { formatPropertyLabel } from \"./properties-utils\";\n\nexport type PropertiesAction<V = unknown> = {\n /** Stable action id. */\n id: string;\n /** Iconify name or imported icon component. */\n icon: string | StaticIconComponent;\n /** Accessible label and tooltip for this row action. */\n label: (key: string, value: V, item: PropertiesItem<V>) => string;\n /** Return false to hide the action for a specific row. */\n visible?: (key: string, value: V, item: PropertiesItem<V>) => boolean;\n /** Return true to disable the action for a specific row. */\n disabled?: (key: string, value: V, item: PropertiesItem<V>) => boolean;\n /** Called when the row action is clicked. */\n onClick: (key: string, value: V, item: PropertiesItem<V>) => void;\n};\n\nexport type PropertiesItem<V = unknown> = {\n /** Stable property key. Also used as the default label. */\n key: string;\n /** Property value passed to renderers and actions. */\n value: V;\n /** Secondary text shown below the label. */\n subtitle?: ReactNode;\n /** Hide this row without removing it from the item array. */\n hidden?: boolean;\n /** Enables an expandable child area below the row value. */\n expandable?: boolean;\n /** Controlled expanded state. */\n expanded?: boolean;\n /** Called when an expandable row is toggled. */\n onToggle?: (next: boolean) => void;\n /** Child content rendered when the row is expanded. */\n renderChildren?: () => ReactNode;\n};\n\nexport type PropertiesDensity = \"comfortable\" | \"compact\" | \"spacious\";\n\nexport type PropertiesProps<V = unknown> = {\n /** Property rows to render. Hidden items are filtered out. */\n items: PropertiesItem<V>[];\n /** Custom label renderer. */\n renderLabel?: (key: string, value: V, item: PropertiesItem<V>) => ReactNode;\n /** Custom value renderer. */\n renderValue?: (key: string, value: V, item: PropertiesItem<V>) => ReactNode;\n /** Static icon name or function that returns an icon name per row. */\n labelIcon?: string | ((key: string, value: V, item: PropertiesItem<V>) => string | undefined);\n /** Actions rendered before the value. */\n prefixActions?: PropertiesAction<V>[];\n /** Actions rendered after the value. */\n suffixActions?: PropertiesAction<V>[];\n /** Classes applied to the list root. */\n className?: string;\n /** Classes applied to each row. */\n rowClassName?: string;\n /** CSS grid columns applied to each row. Defaults to the selected density preset. */\n gridTemplateColumns?: string;\n /** Classes applied to each label cell. */\n labelClassName?: string;\n /** Classes applied to each value cell. */\n valueClassName?: string;\n /** Row density preset. */\n density?: PropertiesDensity;\n /** Stable reference used to persist this instance's density preference. */\n keyRef?: string;\n /** Show the display-options menu. */\n showDensityMenu?: boolean;\n /** Empty-state content when no rows are visible. */\n emptyMessage?: ReactNode;\n};\n\nconst PROPERTIES_DENSITY_STORAGE_PREFIX = \"clicky-ui-properties\";\n\nconst PROPERTIES_DENSITY_OPTIONS: Array<{\n value: PropertiesDensity;\n label: string;\n icon: StaticIconComponent;\n}> = [\n { value: \"compact\", label: \"Compact\", icon: UiRows },\n { value: \"comfortable\", label: \"Comfortable\", icon: UiListFlat },\n { value: \"spacious\", label: \"Spacious\", icon: UiListDashes },\n];\n\nconst DENSITY_CLASSES: Record<\n PropertiesDensity,\n { row: string; label: string; value: string; gridTemplateColumns: string }\n> = {\n spacious: {\n row: \"px-density-4 py-density-3\",\n label: \"text-sm font-medium text-muted-foreground\",\n value: \"text-base text-foreground\",\n gridTemplateColumns: \"minmax(12rem, 20rem) minmax(0, 1fr)\",\n },\n comfortable: {\n row: \"px-density-3 py-density-2\",\n label: \"text-xs font-medium text-muted-foreground\",\n value: \"text-sm text-foreground\",\n gridTemplateColumns: \"minmax(7rem, 12rem) minmax(0, 1fr)\",\n },\n compact: {\n row: \"px-density-2 py-density-1.5\",\n label: \"font-mono text-[11px] text-muted-foreground\",\n value: \"text-xs text-foreground\",\n gridTemplateColumns: \"minmax(8rem, 14rem) minmax(0, 1fr)\",\n },\n};\n\nexport function Properties<V = unknown>({\n items,\n renderLabel,\n renderValue,\n labelIcon,\n prefixActions,\n suffixActions,\n className,\n rowClassName,\n gridTemplateColumns,\n labelClassName,\n valueClassName,\n density = \"comfortable\",\n keyRef,\n showDensityMenu = true,\n emptyMessage = \"No properties\",\n}: PropertiesProps<V>) {\n const [densityOverride, setDensityOverride] = useState<PropertiesDensity>();\n useEffect(() => setDensityOverride(readStoredDensity(keyRef)), [keyRef]);\n\n const visible = items.filter((item) => !item.hidden);\n\n if (visible.length === 0) {\n return <div className=\"text-sm text-muted-foreground\">{emptyMessage}</div>;\n }\n\n const activeDensity = densityOverride ?? density;\n const styles = DENSITY_CLASSES[activeDensity];\n\n const updateDensity = (next: PropertiesDensity) => {\n setDensityOverride(next);\n writeStoredDensity(keyRef, next);\n };\n\n return (\n <dl\n className={cn(\n \"divide-y divide-border rounded-md border border-border bg-muted/20\",\n className,\n )}\n >\n {showDensityMenu ? (\n <div className=\"flex items-center justify-end px-density-2 py-density-1\">\n <dt className=\"sr-only\">Properties display options</dt>\n <dd>\n <PropertiesDensityMenu density={activeDensity} onChange={updateDensity} />\n </dd>\n </div>\n ) : null}\n {visible.map((item) => {\n const iconName =\n typeof labelIcon === \"function\" ? labelIcon(item.key, item.value, item) : labelIcon;\n const renderedLabel = renderLabel\n ? renderLabel(item.key, item.value, item)\n : formatPropertyLabel(item.key);\n const ariaLabel = typeof renderedLabel === \"string\" ? renderedLabel : item.key;\n\n return (\n <div\n key={item.key}\n className={cn(\"grid min-w-0 gap-density-3\", styles.row, rowClassName)}\n style={{ gridTemplateColumns: gridTemplateColumns ?? styles.gridTemplateColumns }}\n >\n <dt\n aria-label={ariaLabel}\n className={cn(\"min-w-0 truncate\", styles.label, labelClassName)}\n >\n <div className=\"flex min-w-0 items-center gap-density-1\">\n {iconName ? <Icon name={iconName} className=\"text-xs shrink-0\" /> : null}\n <span className=\"min-w-0 truncate\">{renderedLabel}</span>\n </div>\n {item.subtitle ? (\n <div className=\"mt-0.5 text-[10px] font-normal text-muted-foreground/80\">\n {item.subtitle}\n </div>\n ) : null}\n </dt>\n <dd className={cn(\"min-w-0 space-y-density-1\", valueClassName)}>\n <div className=\"flex min-w-0 items-start gap-density-1\">\n <ActionList actions={prefixActions} item={item} className=\"shrink-0 pt-0.5\" />\n <div className={cn(\"min-w-0 max-w-full flex-1\", styles.value)}>\n {renderValue\n ? renderValue(item.key, item.value, item)\n : defaultRenderValue(item.value)}\n </div>\n <ActionList actions={suffixActions} item={item} className=\"shrink-0 pt-0.5\" />\n </div>\n {item.expandable && item.expanded && item.renderChildren\n ? item.renderChildren()\n : null}\n </dd>\n </div>\n );\n })}\n </dl>\n );\n}\n\nfunction PropertiesDensityMenu({\n density,\n onChange,\n}: {\n density: PropertiesDensity;\n onChange: (density: PropertiesDensity) => void;\n}) {\n return (\n <DropdownMenu\n align=\"right\"\n menuLabel=\"Properties options\"\n trigger={\n <IconButton\n icon={UiDotsVertical}\n label=\"Properties options\"\n className=\"h-6 w-6\"\n />\n }\n >\n {(closeMenu) => (\n <div className=\"min-w-44 py-1 text-popover-foreground\">\n <div className=\"px-2 py-1 text-xs font-medium text-muted-foreground\">\n Density\n </div>\n {PROPERTIES_DENSITY_OPTIONS.map((option) => {\n const active = density === option.value;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n className={densityMenuItemClassName(active)}\n onClick={() => {\n onChange(option.value);\n closeMenu();\n }}\n >\n <Icon\n icon={option.icon}\n className=\"text-sm text-muted-foreground\"\n />\n <span className=\"min-w-0 flex-1 truncate\">{option.label}</span>\n {active ? (\n <Icon icon={UiCheck} className=\"text-sm text-foreground\" />\n ) : (\n <span className=\"inline-block h-4 w-4\" aria-hidden />\n )}\n </button>\n );\n })}\n </div>\n )}\n </DropdownMenu>\n );\n}\n\nfunction densityMenuItemClassName(active: boolean): string {\n return cn(\n \"flex w-full items-center gap-2 px-2 py-1.5 text-left text-sm\",\n \"hover:bg-accent focus:bg-accent focus:outline-none\",\n active && \"bg-accent/60\",\n );\n}\n\nfunction readStoredDensity(\n keyRef: string | undefined,\n): PropertiesDensity | undefined {\n const storageKey = propertiesDensityStorageKey(keyRef);\n if (!storageKey || typeof window === \"undefined\") return undefined;\n\n try {\n const value = window.localStorage.getItem(storageKey);\n return isPropertiesDensity(value) ? value : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction writeStoredDensity(\n keyRef: string | undefined,\n density: PropertiesDensity,\n): void {\n const storageKey = propertiesDensityStorageKey(keyRef);\n if (!storageKey || typeof window === \"undefined\") return;\n\n try {\n window.localStorage.setItem(storageKey, density);\n } catch {\n // Display preferences are best-effort when browser storage is unavailable.\n }\n}\n\nfunction propertiesDensityStorageKey(\n keyRef: string | undefined,\n): string | undefined {\n const normalized = keyRef?.trim();\n return normalized\n ? `${PROPERTIES_DENSITY_STORAGE_PREFIX}:${normalized}:density`\n : undefined;\n}\n\nfunction isPropertiesDensity(value: unknown): value is PropertiesDensity {\n return value === \"compact\" || value === \"comfortable\" || value === \"spacious\";\n}\n\nfunction ActionList<V>({\n actions,\n item,\n className,\n}: {\n actions: PropertiesAction<V>[] | undefined;\n item: PropertiesItem<V>;\n className?: string;\n}) {\n if (!actions || actions.length === 0) return null;\n const rendered = actions.filter(\n (action) => !action.visible || action.visible(item.key, item.value, item),\n );\n if (rendered.length === 0) return null;\n return (\n <span className={cn(\"inline-flex items-center\", className)}>\n {rendered.map((action) => (\n <PropertiesActionButton key={action.id} action={action} item={item} />\n ))}\n </span>\n );\n}\n\nfunction PropertiesActionButton<V>({\n action,\n item,\n}: {\n action: PropertiesAction<V>;\n item: PropertiesItem<V>;\n}) {\n const label = action.label(item.key, item.value, item);\n const disabled = action.disabled?.(item.key, item.value, item) ?? false;\n return (\n <button\n type=\"button\"\n aria-label={label}\n title={label}\n disabled={disabled}\n className={cn(\n \"inline-flex h-5 w-5 items-center justify-center rounded text-muted-foreground\",\n \"hover:bg-accent hover:text-foreground\",\n \"disabled:opacity-35 disabled:hover:bg-transparent disabled:hover:text-muted-foreground\",\n )}\n onClick={(event) => {\n event.stopPropagation();\n action.onClick(item.key, item.value, item);\n }}\n >\n <Icon\n {...(typeof action.icon === \"string\" ? { name: action.icon } : { icon: action.icon })}\n className=\"text-xs\"\n />\n </button>\n );\n}\n\nfunction defaultRenderValue(value: unknown): ReactNode {\n if (value === null || value === undefined) {\n return <span className=\"font-mono italic text-muted-foreground\">null</span>;\n }\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return <span className=\"font-mono\">{String(value)}</span>;\n }\n try {\n return (\n <pre className=\"max-h-48 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed\">\n {JSON.stringify(value, null, 2)}\n </pre>\n );\n } catch {\n return String(value);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Properties.js","sources":["../../src/data/Properties.tsx"],"sourcesContent":["import {\n Fragment,\n useContext,\n useEffect,\n useState,\n type ReactNode,\n} from \"react\";\nimport { IconButton } from \"../components/IconButton\";\nimport {\n UiCheck,\n UiDotsVertical,\n UiListDashes,\n UiListFlat,\n UiRows,\n} from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { DropdownMenu } from \"../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\nimport { formatPropertyLabel } from \"./properties-utils\";\nimport { PropertiesContext } from \"./properties-context\";\n\nexport type PropertiesAction<V = unknown> = {\n /** Stable action id. */\n id: string;\n /** Iconify name or imported icon component. */\n icon: string | StaticIconComponent;\n /** Accessible label and tooltip for this row action. */\n label: (key: string, value: V, item: PropertiesItem<V>) => string;\n /** Return false to hide the action for a specific row. */\n visible?: (key: string, value: V, item: PropertiesItem<V>) => boolean;\n /** Return true to disable the action for a specific row. */\n disabled?: (key: string, value: V, item: PropertiesItem<V>) => boolean;\n /** Called when the row action is clicked. */\n onClick: (key: string, value: V, item: PropertiesItem<V>) => void;\n};\n\nexport type PropertiesItem<V = unknown> = {\n /** Stable property key. Also used as the default label. */\n key: string;\n /** Property value passed to renderers and actions. */\n value: V;\n /** Secondary text shown below the label. */\n subtitle?: ReactNode;\n /** Hide this row without removing it from the item array. */\n hidden?: boolean;\n /** Enables a child area spanning both columns, with nested labels indented. */\n expandable?: boolean;\n /** Controlled expanded state. */\n expanded?: boolean;\n /** Called when an expandable row is toggled. */\n onToggle?: (next: boolean) => void;\n /** Child content rendered when the row is expanded. */\n renderChildren?: () => ReactNode;\n};\n\nexport type PropertiesDensity = \"comfortable\" | \"compact\" | \"spacious\";\n\nexport type PropertiesProps<V = unknown> = {\n /** Property rows to render. Hidden items are filtered out. */\n items: PropertiesItem<V>[];\n /** Custom label renderer. */\n renderLabel?: (key: string, value: V, item: PropertiesItem<V>) => ReactNode;\n /** Custom value renderer. */\n renderValue?: (key: string, value: V, item: PropertiesItem<V>) => ReactNode;\n /** Static icon name or function that returns an icon name per row. */\n labelIcon?:\n | string\n | ((key: string, value: V, item: PropertiesItem<V>) => string | undefined);\n /** Actions rendered before the value. */\n prefixActions?: PropertiesAction<V>[];\n /** Actions rendered after the value. */\n suffixActions?: PropertiesAction<V>[];\n /** Classes applied to the list root. */\n className?: string;\n /** Classes applied to each row. */\n rowClassName?: string;\n /** CSS grid columns applied to each row. Defaults to the selected density preset. */\n gridTemplateColumns?: string;\n /** Classes applied to each label cell. */\n labelClassName?: string;\n /** Classes applied to each value cell. */\n valueClassName?: string;\n /** Row density preset. */\n density?: PropertiesDensity;\n /** Stable reference used to persist this instance's density preference. */\n keyRef?: string;\n /** Show the display-options menu. */\n showDensityMenu?: boolean;\n /** Empty-state content when no rows are visible. */\n emptyMessage?: ReactNode;\n};\n\nconst PROPERTIES_DENSITY_STORAGE_PREFIX = \"clicky-ui-properties\";\n\nconst PROPERTIES_DENSITY_OPTIONS: Array<{\n value: PropertiesDensity;\n label: string;\n icon: StaticIconComponent;\n}> = [\n { value: \"compact\", label: \"Compact\", icon: UiRows },\n { value: \"comfortable\", label: \"Comfortable\", icon: UiListFlat },\n { value: \"spacious\", label: \"Spacious\", icon: UiListDashes },\n];\n\nconst DENSITY_CLASSES: Record<\n PropertiesDensity,\n { row: string; label: string; value: string; gridTemplateColumns: string }\n> = {\n spacious: {\n row: \"px-density-4 py-density-3\",\n label: \"text-sm font-medium text-muted-foreground\",\n value: \"text-base text-foreground\",\n gridTemplateColumns: \"minmax(12rem, 20rem) minmax(0, 1fr)\",\n },\n comfortable: {\n row: \"px-density-3 py-density-2\",\n label: \"text-xs font-medium text-muted-foreground\",\n value: \"text-sm text-foreground\",\n gridTemplateColumns: \"minmax(7rem, 12rem) minmax(0, 1fr)\",\n },\n compact: {\n row: \"px-density-2 py-density-1.5\",\n label: \"font-mono text-[11px] text-muted-foreground\",\n value: \"text-xs text-foreground\",\n gridTemplateColumns: \"minmax(8rem, 14rem) minmax(0, 1fr)\",\n },\n};\n\nexport function Properties<V = unknown>({\n items,\n renderLabel,\n renderValue,\n labelIcon,\n prefixActions,\n suffixActions,\n className,\n rowClassName,\n gridTemplateColumns,\n labelClassName,\n valueClassName,\n density = \"comfortable\",\n keyRef,\n showDensityMenu = true,\n emptyMessage = \"No properties\",\n}: PropertiesProps<V>) {\n const parent = useContext(PropertiesContext);\n const [densityOverride, setDensityOverride] = useState<PropertiesDensity>();\n useEffect(() => setDensityOverride(readStoredDensity(keyRef)), [keyRef]);\n\n const visible = items.filter((item) => !item.hidden);\n\n if (visible.length === 0) {\n return <div className=\"text-sm text-muted-foreground\">{emptyMessage}</div>;\n }\n\n const activeDensity = parent?.density ?? densityOverride ?? density;\n const styles = DENSITY_CLASSES[activeDensity];\n const columns =\n parent?.columns ?? gridTemplateColumns ?? styles.gridTemplateColumns;\n const depth = parent?.depth ?? 0;\n\n const updateDensity = (next: PropertiesDensity) => {\n setDensityOverride(next);\n writeStoredDensity(keyRef, next);\n };\n\n return (\n <dl\n className={cn(\n \"grid gap-x-density-3 divide-y divide-border rounded-md border border-border bg-muted/20\",\n parent && \"col-span-full rounded-none border-0 bg-transparent\",\n className,\n )}\n style={{ gridTemplateColumns: parent ? \"subgrid\" : columns }}\n >\n {showDensityMenu && !parent ? (\n <div className=\"col-span-full flex items-center justify-end px-density-2 py-density-1\">\n <dt className=\"sr-only\">Properties display options</dt>\n <dd>\n <PropertiesDensityMenu\n density={activeDensity}\n onChange={updateDensity}\n />\n </dd>\n </div>\n ) : null}\n {visible.map((item) => {\n const iconName =\n typeof labelIcon === \"function\"\n ? labelIcon(item.key, item.value, item)\n : labelIcon;\n const renderedLabel = renderLabel\n ? renderLabel(item.key, item.value, item)\n : formatPropertyLabel(item.key);\n const ariaLabel =\n typeof renderedLabel === \"string\" ? renderedLabel : item.key;\n\n return (\n <Fragment key={item.key}>\n <div\n className={cn(\n \"col-span-full grid min-w-0 grid-cols-subgrid gap-density-3\",\n styles.row,\n rowClassName,\n )}\n >\n <dt\n aria-label={ariaLabel}\n className={cn(\"min-w-0 truncate\", styles.label, labelClassName)}\n style={{ paddingInlineStart: depth * 16 }}\n >\n <div className=\"flex min-w-0 items-center gap-density-1\">\n {iconName ? (\n <Icon name={iconName} className=\"text-xs shrink-0\" />\n ) : null}\n <span className=\"min-w-0 truncate\">{renderedLabel}</span>\n </div>\n {item.subtitle ? (\n <div className=\"mt-0.5 text-[10px] font-normal text-muted-foreground/80\">\n {item.subtitle}\n </div>\n ) : null}\n </dt>\n <dd className={cn(\"min-w-0 space-y-density-1\", valueClassName)}>\n <div className=\"flex min-w-0 items-start gap-density-1\">\n <ActionList\n actions={prefixActions}\n item={item}\n className=\"shrink-0 pt-0.5\"\n />\n <div\n className={cn(\"min-w-0 max-w-full flex-1\", styles.value)}\n >\n {renderValue\n ? renderValue(item.key, item.value, item)\n : defaultRenderValue(item.value)}\n </div>\n <ActionList\n actions={suffixActions}\n item={item}\n className=\"shrink-0 pt-0.5\"\n />\n </div>\n </dd>\n </div>\n {item.expandable && item.expanded && item.renderChildren ? (\n <div className=\"col-span-full grid grid-cols-subgrid\">\n <dt className=\"sr-only\">{ariaLabel} properties</dt>\n <dd className=\"col-span-full grid min-w-0 grid-cols-subgrid\">\n <PropertiesContext.Provider\n value={{\n depth: depth + 1,\n columns,\n density: activeDensity,\n }}\n >\n {item.renderChildren()}\n </PropertiesContext.Provider>\n </dd>\n </div>\n ) : null}\n </Fragment>\n );\n })}\n </dl>\n );\n}\n\nfunction PropertiesDensityMenu({\n density,\n onChange,\n}: {\n density: PropertiesDensity;\n onChange: (density: PropertiesDensity) => void;\n}) {\n return (\n <DropdownMenu\n align=\"right\"\n menuLabel=\"Properties options\"\n trigger={\n <IconButton\n icon={UiDotsVertical}\n label=\"Properties options\"\n className=\"h-6 w-6\"\n />\n }\n >\n {(closeMenu) => (\n <div className=\"min-w-44 py-1 text-popover-foreground\">\n <div className=\"px-2 py-1 text-xs font-medium text-muted-foreground\">\n Density\n </div>\n {PROPERTIES_DENSITY_OPTIONS.map((option) => {\n const active = density === option.value;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n className={densityMenuItemClassName(active)}\n onClick={() => {\n onChange(option.value);\n closeMenu();\n }}\n >\n <Icon\n icon={option.icon}\n className=\"text-sm text-muted-foreground\"\n />\n <span className=\"min-w-0 flex-1 truncate\">{option.label}</span>\n {active ? (\n <Icon icon={UiCheck} className=\"text-sm text-foreground\" />\n ) : (\n <span className=\"inline-block h-4 w-4\" aria-hidden />\n )}\n </button>\n );\n })}\n </div>\n )}\n </DropdownMenu>\n );\n}\n\nfunction densityMenuItemClassName(active: boolean): string {\n return cn(\n \"flex w-full items-center gap-2 px-2 py-1.5 text-left text-sm\",\n \"hover:bg-accent focus:bg-accent focus:outline-none\",\n active && \"bg-accent/60\",\n );\n}\n\nfunction readStoredDensity(\n keyRef: string | undefined,\n): PropertiesDensity | undefined {\n const storageKey = propertiesDensityStorageKey(keyRef);\n if (!storageKey || typeof window === \"undefined\") return undefined;\n\n try {\n const value = window.localStorage.getItem(storageKey);\n return isPropertiesDensity(value) ? value : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction writeStoredDensity(\n keyRef: string | undefined,\n density: PropertiesDensity,\n): void {\n const storageKey = propertiesDensityStorageKey(keyRef);\n if (!storageKey || typeof window === \"undefined\") return;\n\n try {\n window.localStorage.setItem(storageKey, density);\n } catch {\n // Display preferences are best-effort when browser storage is unavailable.\n }\n}\n\nfunction propertiesDensityStorageKey(\n keyRef: string | undefined,\n): string | undefined {\n const normalized = keyRef?.trim();\n return normalized\n ? `${PROPERTIES_DENSITY_STORAGE_PREFIX}:${normalized}:density`\n : undefined;\n}\n\nfunction isPropertiesDensity(value: unknown): value is PropertiesDensity {\n return value === \"compact\" || value === \"comfortable\" || value === \"spacious\";\n}\n\nfunction ActionList<V>({\n actions,\n item,\n className,\n}: {\n actions: PropertiesAction<V>[] | undefined;\n item: PropertiesItem<V>;\n className?: string;\n}) {\n if (!actions || actions.length === 0) return null;\n const rendered = actions.filter(\n (action) => !action.visible || action.visible(item.key, item.value, item),\n );\n if (rendered.length === 0) return null;\n return (\n <span className={cn(\"inline-flex items-center\", className)}>\n {rendered.map((action) => (\n <PropertiesActionButton key={action.id} action={action} item={item} />\n ))}\n </span>\n );\n}\n\nfunction PropertiesActionButton<V>({\n action,\n item,\n}: {\n action: PropertiesAction<V>;\n item: PropertiesItem<V>;\n}) {\n const label = action.label(item.key, item.value, item);\n const disabled = action.disabled?.(item.key, item.value, item) ?? false;\n return (\n <button\n type=\"button\"\n aria-label={label}\n title={label}\n disabled={disabled}\n className={cn(\n \"inline-flex h-5 w-5 items-center justify-center rounded text-muted-foreground\",\n \"hover:bg-accent hover:text-foreground\",\n \"disabled:opacity-35 disabled:hover:bg-transparent disabled:hover:text-muted-foreground\",\n )}\n onClick={(event) => {\n event.stopPropagation();\n action.onClick(item.key, item.value, item);\n }}\n >\n <Icon\n {...(typeof action.icon === \"string\"\n ? { name: action.icon }\n : { icon: action.icon })}\n className=\"text-xs\"\n />\n </button>\n );\n}\n\nfunction defaultRenderValue(value: unknown): ReactNode {\n if (value === null || value === undefined) {\n return <span className=\"font-mono italic text-muted-foreground\">null</span>;\n }\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return <span className=\"font-mono\">{String(value)}</span>;\n }\n try {\n return (\n <pre className=\"max-h-48 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed\">\n {JSON.stringify(value, null, 2)}\n </pre>\n );\n } catch {\n return String(value);\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AA4FA,MAAM,oCAAoC;AAE1C,MAAM,6BAID;AAAA,EACH,EAAE,OAAO,WAAW,OAAO,WAAW,MAAM,OAAA;AAAA,EAC5C,EAAE,OAAO,eAAe,OAAO,eAAe,MAAM,WAAA;AAAA,EACpD,EAAE,OAAO,YAAY,OAAO,YAAY,MAAM,aAAA;AAChD;AAEA,MAAM,kBAGF;AAAA,EACF,UAAU;AAAA,IACR,KAAK;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,qBAAqB;AAAA,EAAA;AAAA,EAEvB,aAAa;AAAA,IACX,KAAK;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,qBAAqB;AAAA,EAAA;AAAA,EAEvB,SAAS;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,qBAAqB;AAAA,EAAA;AAEzB;AAEO,SAAS,WAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,kBAAkB;AAAA,EAClB,eAAe;AACjB,GAAuB;AACrB,QAAM,SAAS,WAAW,iBAAiB;AAC3C,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAA;AAC9C,YAAU,MAAM,mBAAmB,kBAAkB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AAEvE,QAAM,UAAU,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,MAAM;AAEnD,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO,oBAAC,OAAA,EAAI,WAAU,iCAAiC,UAAA,cAAa;AAAA,EACtE;AAEA,QAAM,iBAAgB,iCAAQ,YAAW,mBAAmB;AAC5D,QAAM,SAAS,gBAAgB,aAAa;AAC5C,QAAM,WACJ,iCAAQ,YAAW,uBAAuB,OAAO;AACnD,QAAM,SAAQ,iCAAQ,UAAS;AAE/B,QAAM,gBAAgB,CAAC,SAA4B;AACjD,uBAAmB,IAAI;AACvB,uBAAmB,QAAQ,IAAI;AAAA,EACjC;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,UAAU;AAAA,QACV;AAAA,MAAA;AAAA,MAEF,OAAO,EAAE,qBAAqB,SAAS,YAAY,QAAA;AAAA,MAElD,UAAA;AAAA,QAAA,mBAAmB,CAAC,SACnB,qBAAC,OAAA,EAAI,WAAU,yEACb,UAAA;AAAA,UAAA,oBAAC,MAAA,EAAG,WAAU,WAAU,UAAA,8BAA0B;AAAA,8BACjD,MAAA,EACC,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,UAAU;AAAA,YAAA;AAAA,UAAA,EACZ,CACF;AAAA,QAAA,EAAA,CACF,IACE;AAAA,QACH,QAAQ,IAAI,CAAC,SAAS;AACrB,gBAAM,WACJ,OAAO,cAAc,aACjB,UAAU,KAAK,KAAK,KAAK,OAAO,IAAI,IACpC;AACN,gBAAM,gBAAgB,cAClB,YAAY,KAAK,KAAK,KAAK,OAAO,IAAI,IACtC,oBAAoB,KAAK,GAAG;AAChC,gBAAM,YACJ,OAAO,kBAAkB,WAAW,gBAAgB,KAAK;AAE3D,sCACG,UAAA,EACC,UAAA;AAAA,YAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,OAAO;AAAA,kBACP;AAAA,gBAAA;AAAA,gBAGF,UAAA;AAAA,kBAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,cAAY;AAAA,sBACZ,WAAW,GAAG,oBAAoB,OAAO,OAAO,cAAc;AAAA,sBAC9D,OAAO,EAAE,oBAAoB,QAAQ,GAAA;AAAA,sBAErC,UAAA;AAAA,wBAAA,qBAAC,OAAA,EAAI,WAAU,2CACZ,UAAA;AAAA,0BAAA,+BACE,MAAA,EAAK,MAAM,UAAU,WAAU,oBAAmB,IACjD;AAAA,0BACJ,oBAAC,QAAA,EAAK,WAAU,oBAAoB,UAAA,cAAA,CAAc;AAAA,wBAAA,GACpD;AAAA,wBACC,KAAK,WACJ,oBAAC,OAAA,EAAI,WAAU,2DACZ,UAAA,KAAK,UACR,IACE;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEN,oBAAC,MAAA,EAAG,WAAW,GAAG,6BAA6B,cAAc,GAC3D,UAAA,qBAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,oBAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,SAAS;AAAA,wBACT;AAAA,wBACA,WAAU;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEZ;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAW,GAAG,6BAA6B,OAAO,KAAK;AAAA,wBAEtD,UAAA,cACG,YAAY,KAAK,KAAK,KAAK,OAAO,IAAI,IACtC,mBAAmB,KAAK,KAAK;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEnC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,SAAS;AAAA,wBACT;AAAA,wBACA,WAAU;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACZ,EAAA,CACF,EAAA,CACF;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAED,KAAK,cAAc,KAAK,YAAY,KAAK,iBACxC,qBAAC,OAAA,EAAI,WAAU,wCACb,UAAA;AAAA,cAAA,qBAAC,MAAA,EAAG,WAAU,WAAW,UAAA;AAAA,gBAAA;AAAA,gBAAU;AAAA,cAAA,GAAW;AAAA,cAC9C,oBAAC,MAAA,EAAG,WAAU,gDACZ,UAAA;AAAA,gBAAC,kBAAkB;AAAA,gBAAlB;AAAA,kBACC,OAAO;AAAA,oBACL,OAAO,QAAQ;AAAA,oBACf;AAAA,oBACA,SAAS;AAAA,kBAAA;AAAA,kBAGV,eAAK,eAAA;AAAA,gBAAe;AAAA,cAAA,EACvB,CACF;AAAA,YAAA,EAAA,CACF,IACE;AAAA,UAAA,EAAA,GA9DS,KAAK,GA+DpB;AAAA,QAEJ,CAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA;AACF,GAGG;AACD,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,WAAU;AAAA,MACV,SACE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,OAAM;AAAA,UACN,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAIb,UAAA,CAAC,cACA,qBAAC,OAAA,EAAI,WAAU,yCACb,UAAA;AAAA,QAAA,oBAAC,OAAA,EAAI,WAAU,uDAAsD,UAAA,WAErE;AAAA,QACC,2BAA2B,IAAI,CAAC,WAAW;AAC1C,gBAAM,SAAS,YAAY,OAAO;AAClC,iBACE;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,MAAK;AAAA,cACL,MAAK;AAAA,cACL,gBAAc;AAAA,cACd,WAAW,yBAAyB,MAAM;AAAA,cAC1C,SAAS,MAAM;AACb,yBAAS,OAAO,KAAK;AACrB,0BAAA;AAAA,cACF;AAAA,cAEA,UAAA;AAAA,gBAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAM,OAAO;AAAA,oBACb,WAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEZ,oBAAC,QAAA,EAAK,WAAU,2BAA2B,iBAAO,OAAM;AAAA,gBACvD,SACC,oBAAC,MAAA,EAAK,MAAM,SAAS,WAAU,0BAAA,CAA0B,IAEzD,oBAAC,QAAA,EAAK,WAAU,wBAAuB,eAAW,KAAA,CAAC;AAAA,cAAA;AAAA,YAAA;AAAA,YAlBhD,OAAO;AAAA,UAAA;AAAA,QAsBlB,CAAC;AAAA,MAAA,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAIR;AAEA,SAAS,yBAAyB,QAAyB;AACzD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EAAA;AAEd;AAEA,SAAS,kBACP,QAC+B;AAC/B,QAAM,aAAa,4BAA4B,MAAM;AACrD,MAAI,CAAC,cAAc,OAAO,WAAW,YAAa,QAAO;AAEzD,MAAI;AACF,UAAM,QAAQ,OAAO,aAAa,QAAQ,UAAU;AACpD,WAAO,oBAAoB,KAAK,IAAI,QAAQ;AAAA,EAC9C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,mBACP,QACA,SACM;AACN,QAAM,aAAa,4BAA4B,MAAM;AACrD,MAAI,CAAC,cAAc,OAAO,WAAW,YAAa;AAElD,MAAI;AACF,WAAO,aAAa,QAAQ,YAAY,OAAO;AAAA,EACjD,QAAQ;AAAA,EAER;AACF;AAEA,SAAS,4BACP,QACoB;AACpB,QAAM,aAAa,iCAAQ;AAC3B,SAAO,aACH,GAAG,iCAAiC,IAAI,UAAU,aAClD;AACN;AAEA,SAAS,oBAAoB,OAA4C;AACvE,SAAO,UAAU,aAAa,UAAU,iBAAiB,UAAU;AACrE;AAEA,SAAS,WAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,MAAI,CAAC,WAAW,QAAQ,WAAW,EAAG,QAAO;AAC7C,QAAM,WAAW,QAAQ;AAAA,IACvB,CAAC,WAAW,CAAC,OAAO,WAAW,OAAO,QAAQ,KAAK,KAAK,KAAK,OAAO,IAAI;AAAA,EAAA;AAE1E,MAAI,SAAS,WAAW,EAAG,QAAO;AAClC,6BACG,QAAA,EAAK,WAAW,GAAG,4BAA4B,SAAS,GACtD,UAAA,SAAS,IAAI,CAAC,+BACZ,wBAAA,EAAuC,QAAgB,QAA3B,OAAO,EAAgC,CACrE,GACH;AAEJ;AAEA,SAAS,uBAA0B;AAAA,EACjC;AAAA,EACA;AACF,GAGG;;AACD,QAAM,QAAQ,OAAO,MAAM,KAAK,KAAK,KAAK,OAAO,IAAI;AACrD,QAAM,aAAW,YAAO,aAAP,gCAAkB,KAAK,KAAK,KAAK,OAAO,UAAS;AAClE,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,OAAO;AAAA,MACP;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,SAAS,CAAC,UAAU;AAClB,cAAM,gBAAA;AACN,eAAO,QAAQ,KAAK,KAAK,KAAK,OAAO,IAAI;AAAA,MAC3C;AAAA,MAEA,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAI,OAAO,OAAO,SAAS,WACxB,EAAE,MAAM,OAAO,SACf,EAAE,MAAM,OAAO,KAAA;AAAA,UACnB,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IACZ;AAAA,EAAA;AAGN;AAEA,SAAS,mBAAmB,OAA2B;AACrD,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,WAAO,oBAAC,QAAA,EAAK,WAAU,0CAAyC,UAAA,QAAI;AAAA,EACtE;AACA,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW;AAC3D,+BAAQ,QAAA,EAAK,WAAU,aAAa,UAAA,OAAO,KAAK,GAAE;AAAA,EACpD;AACA,MAAI;AACF,WACE,oBAAC,SAAI,WAAU,gGACZ,eAAK,UAAU,OAAO,MAAM,CAAC,EAAA,CAChC;AAAA,EAEJ,QAAQ;AACN,WAAO,OAAO,KAAK;AAAA,EACrB;AACF;"}
@@ -1,4 +1,4 @@
1
- import { ReactNode } from '../../../../node_modules/@types/react/index.d.ts';
1
+ import { ReactNode } from 'react';
2
2
  import { GaugeTone } from './Gauge';
3
3
  export type RadialGaugeProps = {
4
4
  /** Current value. Clamped to [0, max]. */
@@ -1,4 +1,4 @@
1
- import { ReactNode } from '../../../../node_modules/@types/react/index.d.ts';
1
+ import { ReactNode } from 'react';
2
2
  import { JsonSchemaObject } from '../components/json-schema-form-types';
3
3
  import { SchemaViewerFieldMeta, SchemaViewerNode } from './schema-viewer-model';
4
4
  export interface SchemaViewerProps {
@@ -1,4 +1,4 @@
1
- import { ReactNode } from '../../../../node_modules/@types/react/index.d.ts';
1
+ import { ReactNode } from 'react';
2
2
  import { SortDir } from '../hooks/use-sort';
3
3
  export type SortableHeaderProps = {
4
4
  /** Whether this header currently owns the sort state. */
@@ -1,4 +1,4 @@
1
- import { ReactNode } from '../../../../node_modules/@types/react/index.d.ts';
1
+ import { ReactNode } from 'react';
2
2
  import { StaticIconComponent } from './Icon';
3
3
  import { BadgeTone } from './Badge';
4
4
  export type StatStripItem = {
@@ -1,4 +1,4 @@
1
- import { ReactElement, ReactNode } from '../../../../node_modules/@types/react/index.d.ts';
1
+ import { ReactElement, ReactNode } from 'react';
2
2
  export interface StatusSegment {
3
3
  key: string;
4
4
  label: string;
@@ -1,4 +1,4 @@
1
- import { ReactNode } from '../../../../node_modules/@types/react/index.d.ts';
1
+ import { ReactNode } from 'react';
2
2
  import { StaticIconComponent } from './Icon';
3
3
  /** Visual style: a filled `pill` (default) or an `underline` tab. */
4
4
  export type TabButtonVariant = "pill" | "underline";
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const utils = require("../lib/utils.cjs");
5
+ const taskProcessDetails = require("./task-process-details.cjs");
6
+ const taskMetadata = require("./task-metadata.cjs");
7
+ function MetadataChip({ label, value, tone }) {
8
+ return /* @__PURE__ */ jsxRuntime.jsxs(
9
+ "span",
10
+ {
11
+ className: utils.cn(
12
+ "inline-flex shrink-0 items-baseline gap-1 rounded-full px-1.5 py-px text-[10px] leading-4",
13
+ tone === "active" ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"
14
+ ),
15
+ title: `${label}: ${value}`,
16
+ children: [
17
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "opacity-70", children: label }),
18
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "max-w-32 truncate font-medium", children: value })
19
+ ]
20
+ }
21
+ );
22
+ }
23
+ const ACTIVE_STATES = /* @__PURE__ */ new Set(["running", "active", "busy", "working", "in-progress", "starting"]);
24
+ const STATE_KEYS = /* @__PURE__ */ new Set(["state", "status", "phase"]);
25
+ function chipTone(key, value) {
26
+ return STATE_KEYS.has(key) && ACTIVE_STATES.has(value.toLowerCase()) ? "active" : void 0;
27
+ }
28
+ function TaskMetadataChips({ task }) {
29
+ const details = taskProcessDetails.isTaskProcessDetails(task.details) ? task.details : void 0;
30
+ const entries = taskMetadata.metadataEntries(details == null ? void 0 : details.metadata);
31
+ if (entries.length === 0) return null;
32
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 shrink items-center gap-1 overflow-hidden", children: entries.map(({ key, text }) => /* @__PURE__ */ jsxRuntime.jsx(MetadataChip, { label: key, value: text, ...chipTone(key, text) ? { tone: "active" } : {} }, key)) });
33
+ }
34
+ exports.TaskMetadataChips = TaskMetadataChips;
35
+ //# sourceMappingURL=TaskHeaderExtras.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskHeaderExtras.cjs","sources":["../../src/data/TaskHeaderExtras.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\nimport { cn } from \"../lib/utils\";\nimport { isTaskProcessDetails } from \"./task-process-details\";\nimport { metadataEntries } from \"./task-metadata\";\nimport type { TaskSnapshot } from \"./TaskSnapshot\";\n\n/**\n * Contributes host-owned content into a task's header row — the line carrying\n * its name, beside the duration and controls. It exists for the same reason\n * `TaskExtraTabs` does: what is worth knowing about a task at a glance is often\n * something only the host can say. An agent row wants its turn state and the\n * thread it is working; a build row wants neither.\n *\n * Return `null` for tasks it has nothing to add for, and the default renderer\n * takes over — so a host can enrich one kind of task without having to\n * re-implement the default for every other kind.\n */\nexport type TaskHeaderExtra = (task: TaskSnapshot, group: TaskSnapshot) => ReactNode;\n\n/** One metadata value, sized and coloured to sit on a header row. */\nfunction MetadataChip({ label, value, tone }: { label: string; value: string; tone?: \"active\" }) {\n return (\n <span\n className={cn(\n \"inline-flex shrink-0 items-baseline gap-1 rounded-full px-1.5 py-px text-[10px] leading-4\",\n tone === \"active\" ? \"bg-primary/10 text-primary\" : \"bg-muted text-muted-foreground\",\n )}\n title={`${label}: ${value}`}\n >\n <span className=\"opacity-70\">{label}</span>\n <span className=\"max-w-32 truncate font-medium\">{value}</span>\n </span>\n );\n}\n\n/**\n * States that read as \"this is doing something right now\", and so earn the\n * accent that makes a busy row findable in a long list. Matched case-insensitively\n * against a `state`/`status`/`phase` value, because the producer names its own\n * states and this only decides how loud to render them.\n */\nconst ACTIVE_STATES = new Set([\"running\", \"active\", \"busy\", \"working\", \"in-progress\", \"starting\"]);\nconst STATE_KEYS = new Set([\"state\", \"status\", \"phase\"]);\n\nfunction chipTone(key: string, value: string): \"active\" | undefined {\n return STATE_KEYS.has(key) && ACTIVE_STATES.has(value.toLowerCase()) ? \"active\" : undefined;\n}\n\n/**\n * The default header content: the scalar values of a process's metadata, as\n * chips. Structured values are deliberately left out — they are shown in full,\n * with their structure, in the expanded process details, and a header row is not\n * the place to flatten them.\n *\n * A task with no process details, or none worth a chip, renders nothing, so a\n * plain task row looks exactly as it did before.\n */\nexport function TaskMetadataChips({ task }: { task: TaskSnapshot }) {\n const details = isTaskProcessDetails(task.details) ? task.details : undefined;\n const entries = metadataEntries(details?.metadata);\n if (entries.length === 0) return null;\n return (\n <div className=\"flex min-w-0 shrink items-center gap-1 overflow-hidden\">\n {entries.map(({ key, text }) => (\n <MetadataChip key={key} label={key} value={text} {...(chipTone(key, text) ? { tone: \"active\" as const } : {})} />\n ))}\n </div>\n );\n}\n"],"names":["jsxs","cn","jsx","isTaskProcessDetails","metadataEntries"],"mappings":";;;;;;AAqBA,SAAS,aAAa,EAAE,OAAO,OAAO,QAA2D;AAC/F,SACEA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,MAAAA;AAAAA,QACT;AAAA,QACA,SAAS,WAAW,+BAA+B;AAAA,MAAA;AAAA,MAErD,OAAO,GAAG,KAAK,KAAK,KAAK;AAAA,MAEzB,UAAA;AAAA,QAAAC,2BAAAA,IAAC,QAAA,EAAK,WAAU,cAAc,UAAA,OAAM;AAAA,QACpCA,2BAAAA,IAAC,QAAA,EAAK,WAAU,iCAAiC,UAAA,MAAA,CAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG7D;AAQA,MAAM,gBAAgB,oBAAI,IAAI,CAAC,WAAW,UAAU,QAAQ,WAAW,eAAe,UAAU,CAAC;AACjG,MAAM,aAAa,oBAAI,IAAI,CAAC,SAAS,UAAU,OAAO,CAAC;AAEvD,SAAS,SAAS,KAAa,OAAqC;AAClE,SAAO,WAAW,IAAI,GAAG,KAAK,cAAc,IAAI,MAAM,YAAA,CAAa,IAAI,WAAW;AACpF;AAWO,SAAS,kBAAkB,EAAE,QAAgC;AAClE,QAAM,UAAUC,mBAAAA,qBAAqB,KAAK,OAAO,IAAI,KAAK,UAAU;AACpE,QAAM,UAAUC,aAAAA,gBAAgB,mCAAS,QAAQ;AACjD,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,SACEF,2BAAAA,IAAC,OAAA,EAAI,WAAU,0DACZ,UAAA,QAAQ,IAAI,CAAC,EAAE,KAAK,KAAA,MACnBA,2BAAAA,IAAC,gBAAuB,OAAO,KAAK,OAAO,MAAO,GAAI,SAAS,KAAK,IAAI,IAAI,EAAE,MAAM,SAAA,IAAsB,CAAA,EAAC,GAAxF,GAA4F,CAChH,EAAA,CACH;AAEJ;;"}
@@ -0,0 +1,27 @@
1
+ import { ReactNode } from 'react';
2
+ import { TaskSnapshot } from './TaskSnapshot';
3
+ /**
4
+ * Contributes host-owned content into a task's header row — the line carrying
5
+ * its name, beside the duration and controls. It exists for the same reason
6
+ * `TaskExtraTabs` does: what is worth knowing about a task at a glance is often
7
+ * something only the host can say. An agent row wants its turn state and the
8
+ * thread it is working; a build row wants neither.
9
+ *
10
+ * Return `null` for tasks it has nothing to add for, and the default renderer
11
+ * takes over — so a host can enrich one kind of task without having to
12
+ * re-implement the default for every other kind.
13
+ */
14
+ export type TaskHeaderExtra = (task: TaskSnapshot, group: TaskSnapshot) => ReactNode;
15
+ /**
16
+ * The default header content: the scalar values of a process's metadata, as
17
+ * chips. Structured values are deliberately left out — they are shown in full,
18
+ * with their structure, in the expanded process details, and a header row is not
19
+ * the place to flatten them.
20
+ *
21
+ * A task with no process details, or none worth a chip, renders nothing, so a
22
+ * plain task row looks exactly as it did before.
23
+ */
24
+ export declare function TaskMetadataChips({ task }: {
25
+ task: TaskSnapshot;
26
+ }): import("react").JSX.Element | null;
27
+ //# sourceMappingURL=TaskHeaderExtras.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskHeaderExtras.d.ts","sourceRoot":"","sources":["../../src/data/TaskHeaderExtras.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,KAAK,SAAS,CAAC;AA+BrF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,sCAWjE"}
@@ -0,0 +1,35 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils.js";
3
+ import { isTaskProcessDetails } from "./task-process-details.js";
4
+ import { metadataEntries } from "./task-metadata.js";
5
+ function MetadataChip({ label, value, tone }) {
6
+ return /* @__PURE__ */ jsxs(
7
+ "span",
8
+ {
9
+ className: cn(
10
+ "inline-flex shrink-0 items-baseline gap-1 rounded-full px-1.5 py-px text-[10px] leading-4",
11
+ tone === "active" ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"
12
+ ),
13
+ title: `${label}: ${value}`,
14
+ children: [
15
+ /* @__PURE__ */ jsx("span", { className: "opacity-70", children: label }),
16
+ /* @__PURE__ */ jsx("span", { className: "max-w-32 truncate font-medium", children: value })
17
+ ]
18
+ }
19
+ );
20
+ }
21
+ const ACTIVE_STATES = /* @__PURE__ */ new Set(["running", "active", "busy", "working", "in-progress", "starting"]);
22
+ const STATE_KEYS = /* @__PURE__ */ new Set(["state", "status", "phase"]);
23
+ function chipTone(key, value) {
24
+ return STATE_KEYS.has(key) && ACTIVE_STATES.has(value.toLowerCase()) ? "active" : void 0;
25
+ }
26
+ function TaskMetadataChips({ task }) {
27
+ const details = isTaskProcessDetails(task.details) ? task.details : void 0;
28
+ const entries = metadataEntries(details == null ? void 0 : details.metadata);
29
+ if (entries.length === 0) return null;
30
+ return /* @__PURE__ */ jsx("div", { className: "flex min-w-0 shrink items-center gap-1 overflow-hidden", children: entries.map(({ key, text }) => /* @__PURE__ */ jsx(MetadataChip, { label: key, value: text, ...chipTone(key, text) ? { tone: "active" } : {} }, key)) });
31
+ }
32
+ export {
33
+ TaskMetadataChips
34
+ };
35
+ //# sourceMappingURL=TaskHeaderExtras.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskHeaderExtras.js","sources":["../../src/data/TaskHeaderExtras.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\nimport { cn } from \"../lib/utils\";\nimport { isTaskProcessDetails } from \"./task-process-details\";\nimport { metadataEntries } from \"./task-metadata\";\nimport type { TaskSnapshot } from \"./TaskSnapshot\";\n\n/**\n * Contributes host-owned content into a task's header row — the line carrying\n * its name, beside the duration and controls. It exists for the same reason\n * `TaskExtraTabs` does: what is worth knowing about a task at a glance is often\n * something only the host can say. An agent row wants its turn state and the\n * thread it is working; a build row wants neither.\n *\n * Return `null` for tasks it has nothing to add for, and the default renderer\n * takes over — so a host can enrich one kind of task without having to\n * re-implement the default for every other kind.\n */\nexport type TaskHeaderExtra = (task: TaskSnapshot, group: TaskSnapshot) => ReactNode;\n\n/** One metadata value, sized and coloured to sit on a header row. */\nfunction MetadataChip({ label, value, tone }: { label: string; value: string; tone?: \"active\" }) {\n return (\n <span\n className={cn(\n \"inline-flex shrink-0 items-baseline gap-1 rounded-full px-1.5 py-px text-[10px] leading-4\",\n tone === \"active\" ? \"bg-primary/10 text-primary\" : \"bg-muted text-muted-foreground\",\n )}\n title={`${label}: ${value}`}\n >\n <span className=\"opacity-70\">{label}</span>\n <span className=\"max-w-32 truncate font-medium\">{value}</span>\n </span>\n );\n}\n\n/**\n * States that read as \"this is doing something right now\", and so earn the\n * accent that makes a busy row findable in a long list. Matched case-insensitively\n * against a `state`/`status`/`phase` value, because the producer names its own\n * states and this only decides how loud to render them.\n */\nconst ACTIVE_STATES = new Set([\"running\", \"active\", \"busy\", \"working\", \"in-progress\", \"starting\"]);\nconst STATE_KEYS = new Set([\"state\", \"status\", \"phase\"]);\n\nfunction chipTone(key: string, value: string): \"active\" | undefined {\n return STATE_KEYS.has(key) && ACTIVE_STATES.has(value.toLowerCase()) ? \"active\" : undefined;\n}\n\n/**\n * The default header content: the scalar values of a process's metadata, as\n * chips. Structured values are deliberately left out — they are shown in full,\n * with their structure, in the expanded process details, and a header row is not\n * the place to flatten them.\n *\n * A task with no process details, or none worth a chip, renders nothing, so a\n * plain task row looks exactly as it did before.\n */\nexport function TaskMetadataChips({ task }: { task: TaskSnapshot }) {\n const details = isTaskProcessDetails(task.details) ? task.details : undefined;\n const entries = metadataEntries(details?.metadata);\n if (entries.length === 0) return null;\n return (\n <div className=\"flex min-w-0 shrink items-center gap-1 overflow-hidden\">\n {entries.map(({ key, text }) => (\n <MetadataChip key={key} label={key} value={text} {...(chipTone(key, text) ? { tone: \"active\" as const } : {})} />\n ))}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;AAqBA,SAAS,aAAa,EAAE,OAAO,OAAO,QAA2D;AAC/F,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,SAAS,WAAW,+BAA+B;AAAA,MAAA;AAAA,MAErD,OAAO,GAAG,KAAK,KAAK,KAAK;AAAA,MAEzB,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,WAAU,cAAc,UAAA,OAAM;AAAA,QACpC,oBAAC,QAAA,EAAK,WAAU,iCAAiC,UAAA,MAAA,CAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG7D;AAQA,MAAM,gBAAgB,oBAAI,IAAI,CAAC,WAAW,UAAU,QAAQ,WAAW,eAAe,UAAU,CAAC;AACjG,MAAM,aAAa,oBAAI,IAAI,CAAC,SAAS,UAAU,OAAO,CAAC;AAEvD,SAAS,SAAS,KAAa,OAAqC;AAClE,SAAO,WAAW,IAAI,GAAG,KAAK,cAAc,IAAI,MAAM,YAAA,CAAa,IAAI,WAAW;AACpF;AAWO,SAAS,kBAAkB,EAAE,QAAgC;AAClE,QAAM,UAAU,qBAAqB,KAAK,OAAO,IAAI,KAAK,UAAU;AACpE,QAAM,UAAU,gBAAgB,mCAAS,QAAQ;AACjD,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,SACE,oBAAC,OAAA,EAAI,WAAU,0DACZ,UAAA,QAAQ,IAAI,CAAC,EAAE,KAAK,KAAA,MACnB,oBAAC,gBAAuB,OAAO,KAAK,OAAO,MAAO,GAAI,SAAS,KAAK,IAAI,IAAI,EAAE,MAAM,SAAA,IAAsB,CAAA,EAAC,GAAxF,GAA4F,CAChH,EAAA,CACH;AAEJ;"}
@@ -9,6 +9,7 @@ const Icon = require("./Icon.cjs");
9
9
  const ProgressBar = require("./ProgressBar.cjs");
10
10
  const Timestamp = require("./cells/Timestamp.cjs");
11
11
  const TaskProgress = require("./TaskProgress.cjs");
12
+ const taskWorkProgress = require("./task-work-progress.cjs");
12
13
  const taskQueryKeys = require("./task-query-keys.cjs");
13
14
  const taskStatus = require("./task-status.cjs");
14
15
  function TaskManager({
@@ -18,7 +19,9 @@ function TaskManager({
18
19
  pollMs,
19
20
  className,
20
21
  selectedId,
21
- onSelectRun
22
+ onSelectRun,
23
+ extraTabs,
24
+ headerExtra
22
25
  }) {
23
26
  const [kindFilter, setKindFilter] = react.useState(kind ?? "");
24
27
  const [statusFilter, setStatusFilter] = react.useState("");
@@ -77,7 +80,8 @@ function TaskManager({
77
80
  /* @__PURE__ */ jsxRuntime.jsx("option", { value: "pending", children: "Pending" }),
78
81
  /* @__PURE__ */ jsxRuntime.jsx("option", { value: "success", children: "Success" }),
79
82
  /* @__PURE__ */ jsxRuntime.jsx("option", { value: "failed", children: "Failed" }),
80
- /* @__PURE__ */ jsxRuntime.jsx("option", { value: "warning", children: "Warning" })
83
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "warning", children: "Warning" }),
84
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "canceled", children: "Canceled" })
81
85
  ]
82
86
  }
83
87
  ),
@@ -93,7 +97,9 @@ function TaskManager({
93
97
  pollMs,
94
98
  selectedId,
95
99
  onSelectRun,
96
- runsQueryKey
100
+ runsQueryKey,
101
+ extraTabs,
102
+ headerExtra
97
103
  },
98
104
  run.id
99
105
  )) })
@@ -124,7 +130,9 @@ function RunRow({
124
130
  pollMs,
125
131
  selectedId,
126
132
  onSelectRun,
127
- runsQueryKey
133
+ runsQueryKey,
134
+ extraTabs,
135
+ headerExtra
128
136
  }) {
129
137
  const [localOpen, setLocalOpen] = react.useState(false);
130
138
  const controlled = onSelectRun !== void 0;
@@ -134,6 +142,7 @@ function RunRow({
134
142
  else setLocalOpen((v) => !v);
135
143
  };
136
144
  const isTerminal = run.status !== "running" && run.status !== "pending";
145
+ const progress = taskWorkProgress.taskWorkProgress(run);
137
146
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-b last:border-0", children: [
138
147
  /* @__PURE__ */ jsxRuntime.jsxs(
139
148
  "button",
@@ -167,13 +176,7 @@ function RunRow({
167
176
  ] }),
168
177
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-xs text-muted-foreground", children: [
169
178
  run.startedAt && /* @__PURE__ */ jsxRuntime.jsx(Timestamp.Timestamp, { value: run.startedAt, format: "relative" }),
170
- /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
171
- run.completed + run.failed,
172
- "/",
173
- run.total,
174
- " done",
175
- run.failed > 0 ? `, ${run.failed} failed` : ""
176
- ] }),
179
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: progress.label }),
177
180
  Object.entries(run.labels ?? {}).map(([k, v]) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-mono", children: [
178
181
  k,
179
182
  "=",
@@ -184,14 +187,8 @@ function RunRow({
184
187
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-40 shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(
185
188
  ProgressBar.ProgressBar,
186
189
  {
187
- segments: taskStatus.taskSegments({
188
- ok: run.completed,
189
- warn: 0,
190
- fail: run.failed,
191
- run: run.running,
192
- pending: Math.max(0, run.total - run.completed - run.failed - run.running)
193
- }),
194
- total: run.total || 1,
190
+ segments: taskStatus.taskSegments(progress.counts),
191
+ total: progress.total || 1,
195
192
  height: "h-1.5"
196
193
  }
197
194
  ) })
@@ -204,7 +201,9 @@ function RunRow({
204
201
  runId: run.id,
205
202
  basePath,
206
203
  pollMs,
207
- runsQueryKey
204
+ runsQueryKey,
205
+ extraTabs,
206
+ headerExtra
208
207
  }
209
208
  )
210
209
  ] });
@@ -213,9 +212,11 @@ function ExpandedRun({
213
212
  runId,
214
213
  basePath,
215
214
  pollMs,
216
- runsQueryKey
215
+ runsQueryKey,
216
+ extraTabs,
217
+ headerExtra
217
218
  }) {
218
- const { snapshots } = useTaskRun.useTaskRun({ id: runId, basePath, pollMs });
219
+ const { snapshots, status } = useTaskRun.useTaskRun({ id: runId, basePath, pollMs });
219
220
  const apiBase = basePath ?? "/api/v1";
220
221
  const queryClient = reactQuery.useQueryClient();
221
222
  const pendingControls = react.useRef(/* @__PURE__ */ new Map());
@@ -267,10 +268,13 @@ function ExpandedRun({
267
268
  TaskProgress.TaskProgress,
268
269
  {
269
270
  snapshots,
271
+ connectionStatus: status,
270
272
  compact: true,
271
273
  onControl: control,
272
274
  onTaskControl: controlTask,
273
- metricsBaseUrl: `${apiBase}/tasks/metrics/`
275
+ metricsBaseUrl: `${apiBase}/tasks/metrics/`,
276
+ ...extraTabs ? { extraTabs } : {},
277
+ ...headerExtra ? { headerExtra } : {}
274
278
  }
275
279
  ) });
276
280
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TaskManager.cjs","sources":["../../src/data/TaskManager.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { hashKey, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { QueryKey } from \"@tanstack/react-query\";\nimport { cn } from \"../lib/utils\";\nimport { useTaskRun, useTaskRuns } from \"../hooks/use-task-run\";\nimport { Icon } from \"./Icon\";\nimport { ProgressBar } from \"./ProgressBar\";\nimport { Timestamp } from \"./cells/Timestamp\";\nimport { TaskProgress } from \"./TaskProgress\";\nimport type { TaskControlAction, TaskRunMeta, TaskSnapshot } from \"./TaskSnapshot\";\nimport { taskQueryKeys } from \"./task-query-keys\";\nimport { taskSegments, taskStatusBg, taskStatusColor, taskStatusIcon } from \"./task-status\";\n\n// TaskManager is the generic clicky-ui task-manager view: it lists every run\n// (TaskRunMeta) from GET {basePath}/tasks with kind/status filters, and expands\n// each row into a live <TaskProgress> for that run id. Runs are grouped by kind,\n// which applications use as their stable task identity.\n//\n// Requires a react-query QueryClientProvider in the host app (like\n// TimeseriesPanel and CacheBrowser): control actions run through useMutation,\n// and the listing is mirrored into the query cache so sibling views can read it.\n\nexport interface TaskManagerProps {\n /** Base path of the clicky task API, e.g. \"/api/v1\". */\n basePath?: string;\n /** Restrict the listing to a single kind (also hides the kind filter). */\n kind?: string;\n /** Restrict the listing to runs whose labels contain every key/value pair. */\n labels?: Record<string, string>;\n pollMs?: number;\n className?: string;\n /**\n * Currently-selected (expanded) run id, e.g. driven from the URL. When set,\n * the matching run renders expanded and selection is controlled — otherwise\n * each row manages its own expand/collapse state.\n */\n selectedId?: string;\n /**\n * Called when a run row is toggled: the new selection id, or null when the\n * open row is collapsed. Pair with selectedId for URL-driven deep links.\n */\n onSelectRun?: (id: string | null) => void;\n}\n\nexport function TaskManager({\n basePath,\n kind,\n labels,\n pollMs,\n className,\n selectedId,\n onSelectRun,\n}: TaskManagerProps) {\n const [kindFilter, setKindFilter] = useState<string>(kind ?? \"\");\n const [statusFilter, setStatusFilter] = useState<string>(\"\");\n const queryClient = useQueryClient();\n const apiBase = basePath ?? \"/api/v1\";\n const activeKind = kind ?? (kindFilter || undefined);\n const { runs, runsKey, status } = useTaskRuns({\n basePath: apiBase,\n kind: activeKind,\n labels,\n status: statusFilter || undefined,\n pollMs,\n });\n const runsQueryKey = useMemo(\n () => taskQueryKeys.runs({\n basePath: apiBase,\n kind: activeKind,\n status: statusFilter || undefined,\n labels,\n }),\n [activeKind, apiBase, labels, statusFilter],\n );\n\n // Changing a filter re-subscribes the transport but leaves the previous\n // listing on screen until the next SSE/poll frame. Publishing that listing\n // under the new key would hand cache consumers rows that do not match their\n // filters, so mirror only once the delivered listing's own key agrees.\n useEffect(() => {\n if (!runsKey || hashKey(runsKey) !== hashKey(runsQueryKey)) return;\n queryClient.setQueryData(runsQueryKey, runs);\n }, [queryClient, runs, runsKey, runsQueryKey]);\n\n const kinds = useMemo(() => {\n const set = new Set<string>();\n for (const r of runs) if (r.kind) set.add(r.kind);\n return [...set].sort();\n }, [runs]);\n const applications = useMemo(() => groupRunsByApplication(runs), [runs]);\n\n return (\n <div className={cn(\"space-y-3\", className)}>\n <div className=\"flex flex-wrap items-center gap-2\">\n {!kind && (\n <select\n className=\"rounded-md border bg-background px-2 py-1 text-xs\"\n value={kindFilter}\n onChange={(e) => setKindFilter(e.target.value)}\n >\n <option value=\"\">All kinds</option>\n {kinds.map((k) => (\n <option key={k} value={k}>\n {k}\n </option>\n ))}\n </select>\n )}\n <select\n className=\"rounded-md border bg-background px-2 py-1 text-xs\"\n value={statusFilter}\n onChange={(e) => setStatusFilter(e.target.value)}\n >\n <option value=\"\">Any status</option>\n <option value=\"running\">Running</option>\n <option value=\"pending\">Pending</option>\n <option value=\"success\">Success</option>\n <option value=\"failed\">Failed</option>\n <option value=\"warning\">Warning</option>\n </select>\n <span className=\"text-xs text-muted-foreground\">{status}</span>\n </div>\n\n {runs.length === 0 ? (\n <div className=\"rounded-lg border border-dashed p-6 text-center text-sm text-muted-foreground\">\n No background tasks.\n </div>\n ) : (\n <div className=\"space-y-3\">\n {applications.map((application) => (\n <section key={application.kind}>\n <h3 className=\"mb-1 px-1 text-xs font-semibold text-muted-foreground\">\n {applicationLabel(application.kind)}\n </h3>\n <div className=\"overflow-hidden rounded-lg border bg-card\">\n {application.runs.map((run) => (\n <RunRow\n key={run.id}\n run={run}\n basePath={basePath}\n pollMs={pollMs}\n selectedId={selectedId}\n onSelectRun={onSelectRun}\n runsQueryKey={runsQueryKey}\n />\n ))}\n </div>\n </section>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction groupRunsByApplication(runs: TaskRunMeta[]) {\n const grouped = new Map<string, TaskRunMeta[]>();\n for (const run of runs) {\n const application = run.kind || \"other\";\n grouped.set(application, [...(grouped.get(application) ?? []), run]);\n }\n return [...grouped].map(([kind, applicationRuns]) => ({ kind, runs: applicationRuns }));\n}\n\nfunction applicationLabel(kind: string): string {\n const names: Record<string, string> = {\n makerprint: \"MakerPrint\",\n openscad: \"OpenSCAD\",\n orca: \"Orca\",\n snapmaker: \"Snapmaker\",\n other: \"Other\",\n };\n return names[kind] ?? kind;\n}\n\nfunction RunRow({\n run,\n basePath,\n pollMs,\n selectedId,\n onSelectRun,\n runsQueryKey,\n}: {\n run: TaskRunMeta;\n basePath: string | undefined;\n pollMs: number | undefined;\n selectedId: string | undefined;\n onSelectRun: ((id: string | null) => void) | undefined;\n runsQueryKey: QueryKey;\n}) {\n const [localOpen, setLocalOpen] = useState(false);\n // Controlled by selectedId when a selection handler is wired; otherwise the\n // row owns its expand state (backward compatible for router-less consumers).\n const controlled = onSelectRun !== undefined;\n const open = controlled ? selectedId === run.id : localOpen;\n const toggle = () => {\n if (controlled) onSelectRun(open ? null : run.id);\n else setLocalOpen((v) => !v);\n };\n const isTerminal = run.status !== \"running\" && run.status !== \"pending\";\n\n return (\n <div className=\"border-b last:border-0\">\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-between gap-4 px-4 py-3 text-left hover:bg-muted/50\"\n onClick={toggle}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <Icon\n icon={taskStatusIcon(run.status)}\n className={cn(taskStatusColor(run.status), run.status === \"running\" && \"animate-spin\")}\n />\n <span className=\"truncate font-medium\">{run.name}</span>\n {run.kind && (\n <span className=\"rounded-full bg-muted px-1.5 py-0 text-[10px] text-muted-foreground\">\n {run.kind}\n </span>\n )}\n {isTerminal && (\n <span\n className={cn(\n \"rounded-full px-2 py-0.5 text-xs\",\n taskStatusColor(run.status),\n taskStatusBg(run.status),\n )}\n >\n {run.status}\n </span>\n )}\n </div>\n <div className=\"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-xs text-muted-foreground\">\n {run.startedAt && <Timestamp value={run.startedAt} format=\"relative\" />}\n <span>\n {run.completed + run.failed}/{run.total} done\n {run.failed > 0 ? `, ${run.failed} failed` : \"\"}\n </span>\n {Object.entries(run.labels ?? {}).map(([k, v]) => (\n <span key={k} className=\"font-mono\">\n {k}={v}\n </span>\n ))}\n </div>\n </div>\n <div className=\"w-40 shrink-0\">\n <ProgressBar\n segments={taskSegments({\n ok: run.completed,\n warn: 0,\n fail: run.failed,\n run: run.running,\n pending: Math.max(0, run.total - run.completed - run.failed - run.running),\n })}\n total={run.total || 1}\n height=\"h-1.5\"\n />\n </div>\n </button>\n {open && (\n <ExpandedRun\n runId={run.id}\n basePath={basePath}\n pollMs={pollMs}\n runsQueryKey={runsQueryKey}\n />\n )}\n </div>\n );\n}\n\nfunction ExpandedRun({\n runId,\n basePath,\n pollMs,\n runsQueryKey,\n}: {\n runId: string;\n basePath: string | undefined;\n pollMs: number | undefined;\n runsQueryKey: QueryKey;\n}) {\n const { snapshots } = useTaskRun({ id: runId, basePath, pollMs });\n const apiBase = basePath ?? \"/api/v1\";\n const queryClient = useQueryClient();\n const pendingControls = useRef(new Map<string, Promise<void>>());\n const cachedSnapshots = useRef<TaskSnapshot[] | undefined>(undefined);\n const runQueryKey = useMemo(\n () => taskQueryKeys.run({ basePath: apiBase, runId }),\n [apiBase, runId],\n );\n const controlMutation = useMutation({\n mutationKey: taskQueryKeys.control({ basePath: apiBase, runId }),\n mutationFn: postTaskControl,\n onSuccess: async () => {\n await Promise.all([\n queryClient.invalidateQueries({ queryKey: runsQueryKey, exact: true, refetchType: \"none\" }),\n queryClient.invalidateQueries({ queryKey: runQueryKey, exact: true, refetchType: \"none\" }),\n ]);\n },\n });\n\n useEffect(() => {\n const previous = cachedSnapshots.current;\n if (previous?.length === snapshots.length && previous.every((snapshot, index) => snapshot === snapshots[index])) {\n return;\n }\n cachedSnapshots.current = snapshots;\n queryClient.setQueryData(runQueryKey, snapshots);\n }, [queryClient, runQueryKey, snapshots]);\n\n const mutateControl = useCallback((request: TaskControlRequest) => {\n const key = `${request.url}:${request.action}`;\n const pending = pendingControls.current.get(key);\n if (pending) return pending;\n controlMutation.reset();\n const mutation = controlMutation.mutateAsync(request).finally(() => {\n if (pendingControls.current.get(key) === mutation) pendingControls.current.delete(key);\n });\n pendingControls.current.set(key, mutation);\n return mutation;\n }, [controlMutation.mutateAsync, controlMutation.reset]);\n const control = (action: TaskControlAction, group: TaskSnapshot) =>\n mutateControl({\n url: `${apiBase}/tasks/${encodeURIComponent(runId)}/control`,\n action,\n target: group,\n });\n const controlTask = (action: TaskControlAction, task: TaskSnapshot) =>\n mutateControl({\n url: `${apiBase}/tasks/${encodeURIComponent(runId)}/tasks/${encodeURIComponent(task.id)}/control`,\n action,\n target: task,\n });\n return (\n <div className=\"border-t bg-muted/30 px-4 py-3\">\n <TaskProgress\n snapshots={snapshots}\n compact\n onControl={control}\n onTaskControl={controlTask}\n metricsBaseUrl={`${apiBase}/tasks/metrics/`}\n />\n </div>\n );\n}\n\ninterface TaskControlRequest {\n url: string;\n action: TaskControlAction;\n target: TaskSnapshot;\n}\n\nasync function postTaskControl({ url, action, target }: TaskControlRequest) {\n const context = `Failed to ${action} ${target.type} \"${target.name}\"`;\n let response: Response;\n try {\n response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ action }),\n });\n } catch (cause) {\n throw new Error(`${context}: ${cause instanceof Error ? cause.message : \"request failed\"}`, { cause });\n }\n if (!response.ok) {\n const detail = (await response.text()).trim() || `HTTP ${response.status}`;\n throw new Error(`${context}: ${detail}`);\n }\n}\n"],"names":["useState","useQueryClient","useTaskRuns","useMemo","taskQueryKeys","useEffect","hashKey","cn","jsxs","jsx","Icon","taskStatusIcon","taskStatusColor","taskStatusBg","Timestamp","ProgressBar","taskSegments","useTaskRun","useRef","useMutation","useCallback","TaskProgress"],"mappings":"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"}
1
+ {"version":3,"file":"TaskManager.cjs","sources":["../../src/data/TaskManager.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { hashKey, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport type { QueryKey } from \"@tanstack/react-query\";\nimport { cn } from \"../lib/utils\";\nimport { useTaskRun, useTaskRuns } from \"../hooks/use-task-run\";\nimport { Icon } from \"./Icon\";\nimport { ProgressBar } from \"./ProgressBar\";\nimport { Timestamp } from \"./cells/Timestamp\";\nimport { TaskProgress } from \"./TaskProgress\";\nimport { taskWorkProgress } from \"./task-work-progress\";\nimport type { TaskControlAction, TaskRunMeta, TaskSnapshot } from \"./TaskSnapshot\";\nimport type { TaskHeaderExtra } from \"./TaskHeaderExtras\";\nimport type { TaskExtraTabs } from \"./TaskStreamTabs\";\nimport { taskQueryKeys } from \"./task-query-keys\";\nimport { taskSegments, taskStatusBg, taskStatusColor, taskStatusIcon } from \"./task-status\";\n\n// TaskManager is the generic clicky-ui task-manager view: it lists every run\n// (TaskRunMeta) from GET {basePath}/tasks with kind/status filters, and expands\n// each row into a live <TaskProgress> for that run id. Runs are grouped by kind,\n// which applications use as their stable task identity.\n//\n// Requires a react-query QueryClientProvider in the host app (like\n// TimeseriesPanel and CacheBrowser): control actions run through useMutation,\n// and the listing is mirrored into the query cache so sibling views can read it.\n\nexport interface TaskManagerProps {\n /** Base path of the clicky task API, e.g. \"/api/v1\". */\n basePath?: string;\n /** Restrict the listing to a single kind (also hides the kind filter). */\n kind?: string;\n /** Restrict the listing to runs whose labels contain every key/value pair. */\n labels?: Record<string, string>;\n pollMs?: number;\n className?: string;\n /**\n * Currently-selected (expanded) run id, e.g. driven from the URL. When set,\n * the matching run renders expanded and selection is controlled — otherwise\n * each row manages its own expand/collapse state.\n */\n selectedId?: string;\n /**\n * Called when a run row is toggled: the new selection id, or null when the\n * open row is collapsed. Pair with selectedId for URL-driven deep links.\n */\n onSelectRun?: (id: string | null) => void;\n /**\n * Contributes host-owned output panes to each task, alongside its own\n * stdout/stderr — an agent's session transcript, say.\n */\n extraTabs?: TaskExtraTabs;\n /**\n * Replaces the content beside a task's name in its header row. Returning null\n * for a task falls back to the default metadata chips.\n */\n headerExtra?: TaskHeaderExtra;\n}\n\nexport function TaskManager({\n basePath,\n kind,\n labels,\n pollMs,\n className,\n selectedId,\n onSelectRun,\n extraTabs,\n headerExtra,\n}: TaskManagerProps) {\n const [kindFilter, setKindFilter] = useState<string>(kind ?? \"\");\n const [statusFilter, setStatusFilter] = useState<string>(\"\");\n const queryClient = useQueryClient();\n const apiBase = basePath ?? \"/api/v1\";\n const activeKind = kind ?? (kindFilter || undefined);\n const { runs, runsKey, status } = useTaskRuns({\n basePath: apiBase,\n kind: activeKind,\n labels,\n status: statusFilter || undefined,\n pollMs,\n });\n const runsQueryKey = useMemo(\n () => taskQueryKeys.runs({\n basePath: apiBase,\n kind: activeKind,\n status: statusFilter || undefined,\n labels,\n }),\n [activeKind, apiBase, labels, statusFilter],\n );\n\n // Changing a filter re-subscribes the transport but leaves the previous\n // listing on screen until the next SSE/poll frame. Publishing that listing\n // under the new key would hand cache consumers rows that do not match their\n // filters, so mirror only once the delivered listing's own key agrees.\n useEffect(() => {\n if (!runsKey || hashKey(runsKey) !== hashKey(runsQueryKey)) return;\n queryClient.setQueryData(runsQueryKey, runs);\n }, [queryClient, runs, runsKey, runsQueryKey]);\n\n const kinds = useMemo(() => {\n const set = new Set<string>();\n for (const r of runs) if (r.kind) set.add(r.kind);\n return [...set].sort();\n }, [runs]);\n const applications = useMemo(() => groupRunsByApplication(runs), [runs]);\n\n return (\n <div className={cn(\"space-y-3\", className)}>\n <div className=\"flex flex-wrap items-center gap-2\">\n {!kind && (\n <select\n className=\"rounded-md border bg-background px-2 py-1 text-xs\"\n value={kindFilter}\n onChange={(e) => setKindFilter(e.target.value)}\n >\n <option value=\"\">All kinds</option>\n {kinds.map((k) => (\n <option key={k} value={k}>\n {k}\n </option>\n ))}\n </select>\n )}\n <select\n className=\"rounded-md border bg-background px-2 py-1 text-xs\"\n value={statusFilter}\n onChange={(e) => setStatusFilter(e.target.value)}\n >\n <option value=\"\">Any status</option>\n <option value=\"running\">Running</option>\n <option value=\"pending\">Pending</option>\n <option value=\"success\">Success</option>\n <option value=\"failed\">Failed</option>\n <option value=\"warning\">Warning</option>\n <option value=\"canceled\">Canceled</option>\n </select>\n <span className=\"text-xs text-muted-foreground\">{status}</span>\n </div>\n\n {runs.length === 0 ? (\n <div className=\"rounded-lg border border-dashed p-6 text-center text-sm text-muted-foreground\">\n No background tasks.\n </div>\n ) : (\n <div className=\"space-y-3\">\n {applications.map((application) => (\n <section key={application.kind}>\n <h3 className=\"mb-1 px-1 text-xs font-semibold text-muted-foreground\">\n {applicationLabel(application.kind)}\n </h3>\n <div className=\"overflow-hidden rounded-lg border bg-card\">\n {application.runs.map((run) => (\n <RunRow\n key={run.id}\n run={run}\n basePath={basePath}\n pollMs={pollMs}\n selectedId={selectedId}\n onSelectRun={onSelectRun}\n runsQueryKey={runsQueryKey}\n extraTabs={extraTabs}\n headerExtra={headerExtra}\n />\n ))}\n </div>\n </section>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction groupRunsByApplication(runs: TaskRunMeta[]) {\n const grouped = new Map<string, TaskRunMeta[]>();\n for (const run of runs) {\n const application = run.kind || \"other\";\n grouped.set(application, [...(grouped.get(application) ?? []), run]);\n }\n return [...grouped].map(([kind, applicationRuns]) => ({ kind, runs: applicationRuns }));\n}\n\nfunction applicationLabel(kind: string): string {\n const names: Record<string, string> = {\n makerprint: \"MakerPrint\",\n openscad: \"OpenSCAD\",\n orca: \"Orca\",\n snapmaker: \"Snapmaker\",\n other: \"Other\",\n };\n return names[kind] ?? kind;\n}\n\nfunction RunRow({\n run,\n basePath,\n pollMs,\n selectedId,\n onSelectRun,\n runsQueryKey,\n extraTabs,\n headerExtra,\n}: {\n run: TaskRunMeta;\n basePath: string | undefined;\n pollMs: number | undefined;\n selectedId: string | undefined;\n onSelectRun: ((id: string | null) => void) | undefined;\n runsQueryKey: QueryKey;\n extraTabs: TaskExtraTabs | undefined;\n headerExtra: TaskHeaderExtra | undefined;\n}) {\n const [localOpen, setLocalOpen] = useState(false);\n // Controlled by selectedId when a selection handler is wired; otherwise the\n // row owns its expand state (backward compatible for router-less consumers).\n const controlled = onSelectRun !== undefined;\n const open = controlled ? selectedId === run.id : localOpen;\n const toggle = () => {\n if (controlled) onSelectRun(open ? null : run.id);\n else setLocalOpen((v) => !v);\n };\n const isTerminal = run.status !== \"running\" && run.status !== \"pending\";\n const progress = taskWorkProgress(run);\n\n return (\n <div className=\"border-b last:border-0\">\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-between gap-4 px-4 py-3 text-left hover:bg-muted/50\"\n onClick={toggle}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <Icon\n icon={taskStatusIcon(run.status)}\n className={cn(taskStatusColor(run.status), run.status === \"running\" && \"animate-spin\")}\n />\n <span className=\"truncate font-medium\">{run.name}</span>\n {run.kind && (\n <span className=\"rounded-full bg-muted px-1.5 py-0 text-[10px] text-muted-foreground\">\n {run.kind}\n </span>\n )}\n {isTerminal && (\n <span\n className={cn(\n \"rounded-full px-2 py-0.5 text-xs\",\n taskStatusColor(run.status),\n taskStatusBg(run.status),\n )}\n >\n {run.status}\n </span>\n )}\n </div>\n <div className=\"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-xs text-muted-foreground\">\n {run.startedAt && <Timestamp value={run.startedAt} format=\"relative\" />}\n <span>\n {progress.label}\n </span>\n {Object.entries(run.labels ?? {}).map(([k, v]) => (\n <span key={k} className=\"font-mono\">\n {k}={v}\n </span>\n ))}\n </div>\n </div>\n <div className=\"w-40 shrink-0\">\n <ProgressBar\n segments={taskSegments(progress.counts)}\n total={progress.total || 1}\n height=\"h-1.5\"\n />\n </div>\n </button>\n {open && (\n <ExpandedRun\n runId={run.id}\n basePath={basePath}\n pollMs={pollMs}\n runsQueryKey={runsQueryKey}\n extraTabs={extraTabs}\n headerExtra={headerExtra}\n />\n )}\n </div>\n );\n}\n\nfunction ExpandedRun({\n runId,\n basePath,\n pollMs,\n runsQueryKey,\n extraTabs,\n headerExtra,\n}: {\n runId: string;\n basePath: string | undefined;\n pollMs: number | undefined;\n runsQueryKey: QueryKey;\n extraTabs: TaskExtraTabs | undefined;\n headerExtra: TaskHeaderExtra | undefined;\n}) {\n const { snapshots, status } = useTaskRun({ id: runId, basePath, pollMs });\n const apiBase = basePath ?? \"/api/v1\";\n const queryClient = useQueryClient();\n const pendingControls = useRef(new Map<string, Promise<void>>());\n const cachedSnapshots = useRef<TaskSnapshot[] | undefined>(undefined);\n const runQueryKey = useMemo(\n () => taskQueryKeys.run({ basePath: apiBase, runId }),\n [apiBase, runId],\n );\n const controlMutation = useMutation({\n mutationKey: taskQueryKeys.control({ basePath: apiBase, runId }),\n mutationFn: postTaskControl,\n onSuccess: async () => {\n await Promise.all([\n queryClient.invalidateQueries({ queryKey: runsQueryKey, exact: true, refetchType: \"none\" }),\n queryClient.invalidateQueries({ queryKey: runQueryKey, exact: true, refetchType: \"none\" }),\n ]);\n },\n });\n\n useEffect(() => {\n const previous = cachedSnapshots.current;\n if (previous?.length === snapshots.length && previous.every((snapshot, index) => snapshot === snapshots[index])) {\n return;\n }\n cachedSnapshots.current = snapshots;\n queryClient.setQueryData(runQueryKey, snapshots);\n }, [queryClient, runQueryKey, snapshots]);\n\n const mutateControl = useCallback((request: TaskControlRequest) => {\n const key = `${request.url}:${request.action}`;\n const pending = pendingControls.current.get(key);\n if (pending) return pending;\n controlMutation.reset();\n const mutation = controlMutation.mutateAsync(request).finally(() => {\n if (pendingControls.current.get(key) === mutation) pendingControls.current.delete(key);\n });\n pendingControls.current.set(key, mutation);\n return mutation;\n }, [controlMutation.mutateAsync, controlMutation.reset]);\n const control = (action: TaskControlAction, group: TaskSnapshot) =>\n mutateControl({\n url: `${apiBase}/tasks/${encodeURIComponent(runId)}/control`,\n action,\n target: group,\n });\n const controlTask = (action: TaskControlAction, task: TaskSnapshot) =>\n mutateControl({\n url: `${apiBase}/tasks/${encodeURIComponent(runId)}/tasks/${encodeURIComponent(task.id)}/control`,\n action,\n target: task,\n });\n return (\n <div className=\"border-t bg-muted/30 px-4 py-3\">\n <TaskProgress\n snapshots={snapshots}\n connectionStatus={status}\n compact\n onControl={control}\n onTaskControl={controlTask}\n metricsBaseUrl={`${apiBase}/tasks/metrics/`}\n {...(extraTabs ? { extraTabs } : {})}\n {...(headerExtra ? { headerExtra } : {})}\n />\n </div>\n );\n}\n\ninterface TaskControlRequest {\n url: string;\n action: TaskControlAction;\n target: TaskSnapshot;\n}\n\nasync function postTaskControl({ url, action, target }: TaskControlRequest) {\n const context = `Failed to ${action} ${target.type} \"${target.name}\"`;\n let response: Response;\n try {\n response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ action }),\n });\n } catch (cause) {\n throw new Error(`${context}: ${cause instanceof Error ? cause.message : \"request failed\"}`, { cause });\n }\n if (!response.ok) {\n const detail = (await response.text()).trim() || `HTTP ${response.status}`;\n throw new Error(`${context}: ${detail}`);\n }\n}\n"],"names":["useState","useQueryClient","useTaskRuns","useMemo","taskQueryKeys","useEffect","hashKey","cn","jsxs","jsx","taskWorkProgress","Icon","taskStatusIcon","taskStatusColor","taskStatusBg","Timestamp","ProgressBar","taskSegments","useTaskRun","useRef","useMutation","useCallback","TaskProgress"],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { TaskHeaderExtra } from './TaskHeaderExtras';
2
+ import { TaskExtraTabs } from './TaskStreamTabs';
1
3
  export interface TaskManagerProps {
2
4
  /** Base path of the clicky task API, e.g. "/api/v1". */
3
5
  basePath?: string;
@@ -18,6 +20,16 @@ export interface TaskManagerProps {
18
20
  * open row is collapsed. Pair with selectedId for URL-driven deep links.
19
21
  */
20
22
  onSelectRun?: (id: string | null) => void;
23
+ /**
24
+ * Contributes host-owned output panes to each task, alongside its own
25
+ * stdout/stderr — an agent's session transcript, say.
26
+ */
27
+ extraTabs?: TaskExtraTabs;
28
+ /**
29
+ * Replaces the content beside a task's name in its header row. Returning null
30
+ * for a task falls back to the default metadata chips.
31
+ */
32
+ headerExtra?: TaskHeaderExtra;
21
33
  }
22
- export declare function TaskManager({ basePath, kind, labels, pollMs, className, selectedId, onSelectRun, }: TaskManagerProps): import("react").JSX.Element;
34
+ export declare function TaskManager({ basePath, kind, labels, pollMs, className, selectedId, onSelectRun, extraTabs, headerExtra, }: TaskManagerProps): import("react").JSX.Element;
23
35
  //# sourceMappingURL=TaskManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TaskManager.d.ts","sourceRoot":"","sources":["../../src/data/TaskManager.tsx"],"names":[],"mappings":"AAsBA,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAC3C;AAED,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,MAAM,EACN,SAAS,EACT,UAAU,EACV,WAAW,GACZ,EAAE,gBAAgB,+BAqGlB"}
1
+ {"version":3,"file":"TaskManager.d.ts","sourceRoot":"","sources":["../../src/data/TaskManager.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAatD,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C;;;OAGG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B;;;OAGG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,MAAM,EACN,SAAS,EACT,UAAU,EACV,WAAW,EACX,SAAS,EACT,WAAW,GACZ,EAAE,gBAAgB,+BAwGlB"}