@flanksource/clicky-ui 0.3.1 → 0.3.3

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 (382) hide show
  1. package/dist/comments/CommentAuthor.cjs +58 -0
  2. package/dist/comments/CommentAuthor.cjs.map +1 -0
  3. package/dist/comments/CommentAuthor.d.ts +17 -0
  4. package/dist/comments/CommentAuthor.d.ts.map +1 -0
  5. package/dist/comments/CommentAuthor.js +58 -0
  6. package/dist/comments/CommentAuthor.js.map +1 -0
  7. package/dist/comments/CommentCard.cjs +343 -0
  8. package/dist/comments/CommentCard.cjs.map +1 -0
  9. package/dist/comments/CommentCard.d.ts +27 -0
  10. package/dist/comments/CommentCard.d.ts.map +1 -0
  11. package/dist/comments/CommentCard.js +343 -0
  12. package/dist/comments/CommentCard.js.map +1 -0
  13. package/dist/comments/CommentComposer.cjs +207 -0
  14. package/dist/comments/CommentComposer.cjs.map +1 -0
  15. package/dist/comments/CommentComposer.d.ts +23 -0
  16. package/dist/comments/CommentComposer.d.ts.map +1 -0
  17. package/dist/comments/CommentComposer.js +207 -0
  18. package/dist/comments/CommentComposer.js.map +1 -0
  19. package/dist/comments/CommentFilterBar.cjs +145 -0
  20. package/dist/comments/CommentFilterBar.cjs.map +1 -0
  21. package/dist/comments/CommentFilterBar.d.ts +15 -0
  22. package/dist/comments/CommentFilterBar.d.ts.map +1 -0
  23. package/dist/comments/CommentFilterBar.js +145 -0
  24. package/dist/comments/CommentFilterBar.js.map +1 -0
  25. package/dist/comments/CommentMarkdown.cjs +156 -0
  26. package/dist/comments/CommentMarkdown.cjs.map +1 -0
  27. package/dist/comments/CommentMarkdown.d.ts +13 -0
  28. package/dist/comments/CommentMarkdown.d.ts.map +1 -0
  29. package/dist/comments/CommentMarkdown.js +156 -0
  30. package/dist/comments/CommentMarkdown.js.map +1 -0
  31. package/dist/comments/CommentProgress.cjs +86 -0
  32. package/dist/comments/CommentProgress.cjs.map +1 -0
  33. package/dist/comments/CommentProgress.d.ts +16 -0
  34. package/dist/comments/CommentProgress.d.ts.map +1 -0
  35. package/dist/comments/CommentProgress.js +86 -0
  36. package/dist/comments/CommentProgress.js.map +1 -0
  37. package/dist/comments/CommentProvider.cjs +99 -0
  38. package/dist/comments/CommentProvider.cjs.map +1 -0
  39. package/dist/comments/CommentProvider.d.ts +19 -0
  40. package/dist/comments/CommentProvider.d.ts.map +1 -0
  41. package/dist/comments/CommentProvider.js +99 -0
  42. package/dist/comments/CommentProvider.js.map +1 -0
  43. package/dist/comments/CommentSidePanel.cjs +219 -0
  44. package/dist/comments/CommentSidePanel.cjs.map +1 -0
  45. package/dist/comments/CommentSidePanel.d.ts +16 -0
  46. package/dist/comments/CommentSidePanel.d.ts.map +1 -0
  47. package/dist/comments/CommentSidePanel.js +219 -0
  48. package/dist/comments/CommentSidePanel.js.map +1 -0
  49. package/dist/comments/CommentThread.cjs +57 -0
  50. package/dist/comments/CommentThread.cjs.map +1 -0
  51. package/dist/comments/CommentThread.d.ts +24 -0
  52. package/dist/comments/CommentThread.d.ts.map +1 -0
  53. package/dist/comments/CommentThread.js +57 -0
  54. package/dist/comments/CommentThread.js.map +1 -0
  55. package/dist/comments/CommentThreadList.cjs +124 -0
  56. package/dist/comments/CommentThreadList.cjs.map +1 -0
  57. package/dist/comments/CommentThreadList.d.ts +25 -0
  58. package/dist/comments/CommentThreadList.d.ts.map +1 -0
  59. package/dist/comments/CommentThreadList.js +124 -0
  60. package/dist/comments/CommentThreadList.js.map +1 -0
  61. package/dist/comments/GroupedComments.cjs +74 -0
  62. package/dist/comments/GroupedComments.cjs.map +1 -0
  63. package/dist/comments/GroupedComments.d.ts +18 -0
  64. package/dist/comments/GroupedComments.d.ts.map +1 -0
  65. package/dist/comments/GroupedComments.js +74 -0
  66. package/dist/comments/GroupedComments.js.map +1 -0
  67. package/dist/comments/MentionTextarea.cjs +253 -0
  68. package/dist/comments/MentionTextarea.cjs.map +1 -0
  69. package/dist/comments/MentionTextarea.d.ts +28 -0
  70. package/dist/comments/MentionTextarea.d.ts.map +1 -0
  71. package/dist/comments/MentionTextarea.js +253 -0
  72. package/dist/comments/MentionTextarea.js.map +1 -0
  73. package/dist/comments/comment-context.cjs +33 -0
  74. package/dist/comments/comment-context.cjs.map +1 -0
  75. package/dist/comments/comment-context.d.ts +32 -0
  76. package/dist/comments/comment-context.d.ts.map +1 -0
  77. package/dist/comments/comment-context.js +33 -0
  78. package/dist/comments/comment-context.js.map +1 -0
  79. package/dist/comments/comment-fixtures.d.ts +11 -0
  80. package/dist/comments/comment-fixtures.d.ts.map +1 -0
  81. package/dist/comments/comment-types.cjs +19 -0
  82. package/dist/comments/comment-types.cjs.map +1 -0
  83. package/dist/comments/comment-types.d.ts +170 -0
  84. package/dist/comments/comment-types.d.ts.map +1 -0
  85. package/dist/comments/comment-types.js +19 -0
  86. package/dist/comments/comment-types.js.map +1 -0
  87. package/dist/comments/comment-utils.cjs +216 -0
  88. package/dist/comments/comment-utils.cjs.map +1 -0
  89. package/dist/comments/comment-utils.d.ts +59 -0
  90. package/dist/comments/comment-utils.d.ts.map +1 -0
  91. package/dist/comments/comment-utils.js +216 -0
  92. package/dist/comments/comment-utils.js.map +1 -0
  93. package/dist/comments.cjs +57 -0
  94. package/dist/comments.cjs.map +1 -0
  95. package/dist/comments.d.ts +16 -0
  96. package/dist/comments.d.ts.map +1 -0
  97. package/dist/comments.js +57 -0
  98. package/dist/comments.js.map +1 -0
  99. package/dist/components/FilterBar.cjs +13 -3
  100. package/dist/components/FilterBar.cjs.map +1 -1
  101. package/dist/components/FilterBar.js +13 -3
  102. package/dist/components/FilterBar.js.map +1 -1
  103. package/dist/components/JsonSchemaForm.cjs +20 -6
  104. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  105. package/dist/components/JsonSchemaForm.d.ts +1 -1
  106. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  107. package/dist/components/JsonSchemaForm.js +22 -8
  108. package/dist/components/JsonSchemaForm.js.map +1 -1
  109. package/dist/components/NamespacePicker.cjs +52 -0
  110. package/dist/components/NamespacePicker.cjs.map +1 -0
  111. package/dist/components/NamespacePicker.d.ts +17 -0
  112. package/dist/components/NamespacePicker.d.ts.map +1 -0
  113. package/dist/components/NamespacePicker.js +52 -0
  114. package/dist/components/NamespacePicker.js.map +1 -0
  115. package/dist/components/form-lookup-context.cjs +36 -0
  116. package/dist/components/form-lookup-context.cjs.map +1 -0
  117. package/dist/components/form-lookup-context.d.ts +9 -0
  118. package/dist/components/form-lookup-context.d.ts.map +1 -0
  119. package/dist/components/form-lookup-context.js +36 -0
  120. package/dist/components/form-lookup-context.js.map +1 -0
  121. package/dist/components/json-schema-form-discriminator.cjs +67 -0
  122. package/dist/components/json-schema-form-discriminator.cjs.map +1 -0
  123. package/dist/components/json-schema-form-discriminator.d.ts +10 -0
  124. package/dist/components/json-schema-form-discriminator.d.ts.map +1 -0
  125. package/dist/components/json-schema-form-discriminator.js +67 -0
  126. package/dist/components/json-schema-form-discriminator.js.map +1 -0
  127. package/dist/components/json-schema-form-fields.cjs +66 -1
  128. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  129. package/dist/components/json-schema-form-fields.d.ts +7 -0
  130. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  131. package/dist/components/json-schema-form-fields.js +66 -1
  132. package/dist/components/json-schema-form-fields.js.map +1 -1
  133. package/dist/components/json-schema-form-grid.cjs +92 -0
  134. package/dist/components/json-schema-form-grid.cjs.map +1 -0
  135. package/dist/components/json-schema-form-grid.d.ts +9 -0
  136. package/dist/components/json-schema-form-grid.d.ts.map +1 -0
  137. package/dist/components/json-schema-form-grid.js +92 -0
  138. package/dist/components/json-schema-form-grid.js.map +1 -0
  139. package/dist/components/json-schema-form-render.cjs +20 -3
  140. package/dist/components/json-schema-form-render.cjs.map +1 -1
  141. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  142. package/dist/components/json-schema-form-render.js +22 -5
  143. package/dist/components/json-schema-form-render.js.map +1 -1
  144. package/dist/components/json-schema-form-resolve.cjs +24 -2
  145. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  146. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  147. package/dist/components/json-schema-form-resolve.js +24 -2
  148. package/dist/components/json-schema-form-resolve.js.map +1 -1
  149. package/dist/components/json-schema-form-types.d.ts +37 -2
  150. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  151. package/dist/components/json-schema-form-utils.cjs +8 -0
  152. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  153. package/dist/components/json-schema-form-utils.d.ts +1 -0
  154. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  155. package/dist/components/json-schema-form-utils.js +8 -0
  156. package/dist/components/json-schema-form-utils.js.map +1 -1
  157. package/dist/components/workload-picker-utils.cjs.map +1 -1
  158. package/dist/components/workload-picker-utils.d.ts +11 -1
  159. package/dist/components/workload-picker-utils.d.ts.map +1 -1
  160. package/dist/components/workload-picker-utils.js.map +1 -1
  161. package/dist/components.cjs +6 -0
  162. package/dist/components.cjs.map +1 -1
  163. package/dist/components.d.ts +4 -2
  164. package/dist/components.d.ts.map +1 -1
  165. package/dist/components.js +6 -0
  166. package/dist/components.js.map +1 -1
  167. package/dist/data/Clicky.cjs +225 -60
  168. package/dist/data/Clicky.cjs.map +1 -1
  169. package/dist/data/Clicky.d.ts +7 -1
  170. package/dist/data/Clicky.d.ts.map +1 -1
  171. package/dist/data/Clicky.fixtures.d.ts +3 -1
  172. package/dist/data/Clicky.fixtures.d.ts.map +1 -1
  173. package/dist/data/Clicky.js +226 -61
  174. package/dist/data/Clicky.js.map +1 -1
  175. package/dist/data/ExecutionTree.cjs +68 -0
  176. package/dist/data/ExecutionTree.cjs.map +1 -0
  177. package/dist/data/ExecutionTree.d.ts +40 -0
  178. package/dist/data/ExecutionTree.d.ts.map +1 -0
  179. package/dist/data/ExecutionTree.js +68 -0
  180. package/dist/data/ExecutionTree.js.map +1 -0
  181. package/dist/data/GaugeHoverCard.cjs +35 -0
  182. package/dist/data/GaugeHoverCard.cjs.map +1 -0
  183. package/dist/data/GaugeHoverCard.d.ts +25 -0
  184. package/dist/data/GaugeHoverCard.d.ts.map +1 -0
  185. package/dist/data/GaugeHoverCard.js +35 -0
  186. package/dist/data/GaugeHoverCard.js.map +1 -0
  187. package/dist/data/MarkdownEditor.cjs +616 -0
  188. package/dist/data/MarkdownEditor.cjs.map +1 -0
  189. package/dist/data/MarkdownEditor.d.ts +61 -0
  190. package/dist/data/MarkdownEditor.d.ts.map +1 -0
  191. package/dist/data/MarkdownEditor.js +616 -0
  192. package/dist/data/MarkdownEditor.js.map +1 -0
  193. package/dist/data/MarkdownEditor.model.cjs +27 -0
  194. package/dist/data/MarkdownEditor.model.cjs.map +1 -0
  195. package/dist/data/MarkdownEditor.model.d.ts +38 -0
  196. package/dist/data/MarkdownEditor.model.d.ts.map +1 -0
  197. package/dist/data/MarkdownEditor.model.js +27 -0
  198. package/dist/data/MarkdownEditor.model.js.map +1 -0
  199. package/dist/data/ObjectGraph.cjs +44 -0
  200. package/dist/data/ObjectGraph.cjs.map +1 -0
  201. package/dist/data/ObjectGraph.d.ts +39 -0
  202. package/dist/data/ObjectGraph.d.ts.map +1 -0
  203. package/dist/data/ObjectGraph.js +44 -0
  204. package/dist/data/ObjectGraph.js.map +1 -0
  205. package/dist/data/SchemaViewer.cjs +152 -0
  206. package/dist/data/SchemaViewer.cjs.map +1 -0
  207. package/dist/data/SchemaViewer.d.ts +27 -0
  208. package/dist/data/SchemaViewer.d.ts.map +1 -0
  209. package/dist/data/SchemaViewer.js +152 -0
  210. package/dist/data/SchemaViewer.js.map +1 -0
  211. package/dist/data/TimeseriesCoreBars.cjs +51 -12
  212. package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
  213. package/dist/data/TimeseriesCoreBars.d.ts +32 -5
  214. package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
  215. package/dist/data/TimeseriesCoreBars.js +51 -12
  216. package/dist/data/TimeseriesCoreBars.js.map +1 -1
  217. package/dist/data/TimeseriesCoreBars.model.cjs +5 -5
  218. package/dist/data/TimeseriesCoreBars.model.cjs.map +1 -1
  219. package/dist/data/TimeseriesCoreBars.model.d.ts +4 -4
  220. package/dist/data/TimeseriesCoreBars.model.d.ts.map +1 -1
  221. package/dist/data/TimeseriesCoreBars.model.js +5 -5
  222. package/dist/data/TimeseriesCoreBars.model.js.map +1 -1
  223. package/dist/data/TimeseriesGauge.cjs +103 -65
  224. package/dist/data/TimeseriesGauge.cjs.map +1 -1
  225. package/dist/data/TimeseriesGauge.d.ts +10 -1
  226. package/dist/data/TimeseriesGauge.d.ts.map +1 -1
  227. package/dist/data/TimeseriesGauge.js +104 -66
  228. package/dist/data/TimeseriesGauge.js.map +1 -1
  229. package/dist/data/WorkloadCard.cjs +4 -4
  230. package/dist/data/WorkloadCard.cjs.map +1 -1
  231. package/dist/data/WorkloadCard.d.ts +3 -2
  232. package/dist/data/WorkloadCard.d.ts.map +1 -1
  233. package/dist/data/WorkloadCard.js +4 -4
  234. package/dist/data/WorkloadCard.js.map +1 -1
  235. package/dist/data/ai/ChatWindow.cjs +11 -19
  236. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  237. package/dist/data/ai/ChatWindow.d.ts +1 -7
  238. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  239. package/dist/data/ai/ChatWindow.js +11 -19
  240. package/dist/data/ai/ChatWindow.js.map +1 -1
  241. package/dist/data/ai/ChatWindowRequestBody.cjs +20 -0
  242. package/dist/data/ai/ChatWindowRequestBody.cjs.map +1 -0
  243. package/dist/data/ai/ChatWindowRequestBody.d.ts +9 -0
  244. package/dist/data/ai/ChatWindowRequestBody.d.ts.map +1 -0
  245. package/dist/data/ai/ChatWindowRequestBody.js +20 -0
  246. package/dist/data/ai/ChatWindowRequestBody.js.map +1 -0
  247. package/dist/data/chat/Chat.cjs +12 -0
  248. package/dist/data/chat/Chat.cjs.map +1 -1
  249. package/dist/data/chat/Chat.d.ts +8 -1
  250. package/dist/data/chat/Chat.d.ts.map +1 -1
  251. package/dist/data/chat/Chat.js +12 -0
  252. package/dist/data/chat/Chat.js.map +1 -1
  253. package/dist/data/gauge-stats.cjs +19 -0
  254. package/dist/data/gauge-stats.cjs.map +1 -0
  255. package/dist/data/gauge-stats.d.ts +15 -0
  256. package/dist/data/gauge-stats.d.ts.map +1 -0
  257. package/dist/data/gauge-stats.js +19 -0
  258. package/dist/data/gauge-stats.js.map +1 -0
  259. package/dist/data/schema-viewer-model.cjs +436 -0
  260. package/dist/data/schema-viewer-model.cjs.map +1 -0
  261. package/dist/data/schema-viewer-model.d.ts +64 -0
  262. package/dist/data/schema-viewer-model.d.ts.map +1 -0
  263. package/dist/data/schema-viewer-model.js +436 -0
  264. package/dist/data/schema-viewer-model.js.map +1 -0
  265. package/dist/data/version-info.cjs +2 -2
  266. package/dist/data/version-info.js +2 -2
  267. package/dist/data.cjs +23 -0
  268. package/dist/data.cjs.map +1 -1
  269. package/dist/data.d.ts +11 -3
  270. package/dist/data.d.ts.map +1 -1
  271. package/dist/data.js +23 -0
  272. package/dist/data.js.map +1 -1
  273. package/dist/index.cjs +87 -2
  274. package/dist/index.cjs.map +1 -1
  275. package/dist/index.d.ts +1 -0
  276. package/dist/index.d.ts.map +1 -1
  277. package/dist/index.js +87 -2
  278. package/dist/index.js.map +1 -1
  279. package/dist/rpc/EntityExplorerApp.cjs +102 -143
  280. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  281. package/dist/rpc/EntityExplorerApp.d.ts +34 -1
  282. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  283. package/dist/rpc/EntityExplorerApp.js +105 -146
  284. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  285. package/dist/rpc/OperationActionBar.cjs +135 -0
  286. package/dist/rpc/OperationActionBar.cjs.map +1 -0
  287. package/dist/rpc/OperationActionBar.d.ts +20 -0
  288. package/dist/rpc/OperationActionBar.d.ts.map +1 -0
  289. package/dist/rpc/OperationActionBar.js +135 -0
  290. package/dist/rpc/OperationActionBar.js.map +1 -0
  291. package/dist/rpc/OperationCatalog.cjs +79 -116
  292. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  293. package/dist/rpc/OperationCatalog.d.ts +8 -1
  294. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  295. package/dist/rpc/OperationCatalog.js +80 -117
  296. package/dist/rpc/OperationCatalog.js.map +1 -1
  297. package/dist/rpc/OperationCommandPage.cjs +134 -223
  298. package/dist/rpc/OperationCommandPage.cjs.map +1 -1
  299. package/dist/rpc/OperationCommandPage.d.ts +1 -1
  300. package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
  301. package/dist/rpc/OperationCommandPage.js +135 -224
  302. package/dist/rpc/OperationCommandPage.js.map +1 -1
  303. package/dist/rpc/OperationEntityPage.cjs +49 -100
  304. package/dist/rpc/OperationEntityPage.cjs.map +1 -1
  305. package/dist/rpc/OperationEntityPage.d.ts +6 -1
  306. package/dist/rpc/OperationEntityPage.d.ts.map +1 -1
  307. package/dist/rpc/OperationEntityPage.js +50 -101
  308. package/dist/rpc/OperationEntityPage.js.map +1 -1
  309. package/dist/rpc/OperationResultView.cjs +43 -0
  310. package/dist/rpc/OperationResultView.cjs.map +1 -0
  311. package/dist/rpc/OperationResultView.d.ts +30 -0
  312. package/dist/rpc/OperationResultView.d.ts.map +1 -0
  313. package/dist/rpc/OperationResultView.js +43 -0
  314. package/dist/rpc/OperationResultView.js.map +1 -0
  315. package/dist/rpc/SchemaActionForm.cjs +102 -0
  316. package/dist/rpc/SchemaActionForm.cjs.map +1 -0
  317. package/dist/rpc/SchemaActionForm.d.ts +23 -0
  318. package/dist/rpc/SchemaActionForm.d.ts.map +1 -0
  319. package/dist/rpc/SchemaActionForm.js +102 -0
  320. package/dist/rpc/SchemaActionForm.js.map +1 -0
  321. package/dist/rpc/accept-options.cjs.map +1 -1
  322. package/dist/rpc/accept-options.d.ts +0 -1
  323. package/dist/rpc/accept-options.d.ts.map +1 -1
  324. package/dist/rpc/accept-options.js.map +1 -1
  325. package/dist/rpc/apiClient.cjs +34 -2
  326. package/dist/rpc/apiClient.cjs.map +1 -1
  327. package/dist/rpc/apiClient.d.ts +4 -1
  328. package/dist/rpc/apiClient.d.ts.map +1 -1
  329. package/dist/rpc/apiClient.js +34 -2
  330. package/dist/rpc/apiClient.js.map +1 -1
  331. package/dist/rpc/clickyMetadata.cjs +4 -4
  332. package/dist/rpc/clickyMetadata.cjs.map +1 -1
  333. package/dist/rpc/clickyMetadata.d.ts +0 -1
  334. package/dist/rpc/clickyMetadata.d.ts.map +1 -1
  335. package/dist/rpc/clickyMetadata.js +4 -4
  336. package/dist/rpc/clickyMetadata.js.map +1 -1
  337. package/dist/rpc/formMetadata.cjs +1 -0
  338. package/dist/rpc/formMetadata.cjs.map +1 -1
  339. package/dist/rpc/formMetadata.d.ts +6 -1
  340. package/dist/rpc/formMetadata.d.ts.map +1 -1
  341. package/dist/rpc/formMetadata.js +1 -0
  342. package/dist/rpc/formMetadata.js.map +1 -1
  343. package/dist/rpc/rowNavigation.cjs +86 -0
  344. package/dist/rpc/rowNavigation.cjs.map +1 -0
  345. package/dist/rpc/rowNavigation.d.ts +14 -0
  346. package/dist/rpc/rowNavigation.d.ts.map +1 -0
  347. package/dist/rpc/rowNavigation.js +86 -0
  348. package/dist/rpc/rowNavigation.js.map +1 -0
  349. package/dist/rpc/schemaActionPath.cjs +22 -0
  350. package/dist/rpc/schemaActionPath.cjs.map +1 -0
  351. package/dist/rpc/schemaActionPath.d.ts +4 -0
  352. package/dist/rpc/schemaActionPath.d.ts.map +1 -0
  353. package/dist/rpc/schemaActionPath.js +22 -0
  354. package/dist/rpc/schemaActionPath.js.map +1 -0
  355. package/dist/rpc/surfaceIconMap.cjs +35 -0
  356. package/dist/rpc/surfaceIconMap.cjs.map +1 -0
  357. package/dist/rpc/surfaceIconMap.d.ts +3 -0
  358. package/dist/rpc/surfaceIconMap.d.ts.map +1 -0
  359. package/dist/rpc/surfaceIconMap.js +35 -0
  360. package/dist/rpc/surfaceIconMap.js.map +1 -0
  361. package/dist/rpc/types.cjs.map +1 -1
  362. package/dist/rpc/types.d.ts +2 -0
  363. package/dist/rpc/types.d.ts.map +1 -1
  364. package/dist/rpc/types.js.map +1 -1
  365. package/dist/rpc/useOperations.cjs.map +1 -1
  366. package/dist/rpc/useOperations.d.ts +4 -1
  367. package/dist/rpc/useOperations.d.ts.map +1 -1
  368. package/dist/rpc/useOperations.js.map +1 -1
  369. package/dist/rpc.cjs +4 -2
  370. package/dist/rpc.cjs.map +1 -1
  371. package/dist/rpc.d.ts +7 -6
  372. package/dist/rpc.d.ts.map +1 -1
  373. package/dist/rpc.js +4 -2
  374. package/dist/rpc.js.map +1 -1
  375. package/dist/styles.css +1 -1
  376. package/package.json +6 -1
  377. package/dist/rpc/AcceptPicker.cjs +0 -137
  378. package/dist/rpc/AcceptPicker.cjs.map +0 -1
  379. package/dist/rpc/AcceptPicker.d.ts +0 -12
  380. package/dist/rpc/AcceptPicker.d.ts.map +0 -1
  381. package/dist/rpc/AcceptPicker.js +0 -137
  382. package/dist/rpc/AcceptPicker.js.map +0 -1
@@ -27,6 +27,8 @@ function Chat({
27
27
  body,
28
28
  transport,
29
29
  initialMessages,
30
+ initialPrompt,
31
+ onInitialPromptSent,
30
32
  placeholder,
31
33
  emptyState,
32
34
  className
@@ -36,6 +38,7 @@ function Chat({
36
38
  const [effort, setEffort] = useState(defaultReasoningEffort);
37
39
  const [usage, setUsage] = useState(null);
38
40
  const lastDefaultModel = useRef(defaultModel);
41
+ const sentInitialPromptId = useRef(null);
39
42
  useEffect(() => {
40
43
  if (modelsProp || !modelsApi) return;
41
44
  let cancelled = false;
@@ -75,6 +78,15 @@ function Chat({
75
78
  sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithApprovalResponses,
76
79
  ...initialMessages ? { messages: initialMessages } : {}
77
80
  });
81
+ useEffect(() => {
82
+ if (!initialPrompt || status !== "ready") return;
83
+ if (sentInitialPromptId.current === initialPrompt.id) return;
84
+ const text = initialPrompt.text.trim();
85
+ if (!text) return;
86
+ sentInitialPromptId.current = initialPrompt.id;
87
+ void sendMessage({ text });
88
+ onInitialPromptSent == null ? void 0 : onInitialPromptSent();
89
+ }, [initialPrompt, onInitialPromptSent, sendMessage, status]);
78
90
  const onUsageRef = useRef(onUsage);
79
91
  onUsageRef.current = onUsage;
80
92
  useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.js","sources":["../../../src/data/chat/Chat.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useChat } from \"@ai-sdk/react\";\nimport {\n DefaultChatTransport,\n lastAssistantMessageIsCompleteWithApprovalResponses,\n type ChatTransport,\n type UIMessage,\n} from \"ai\";\nimport { cn } from \"../../lib/utils\";\nimport { Conversation } from \"./Conversation\";\nimport { PromptInput } from \"./PromptInput\";\nimport { Suggestions } from \"./Suggestion\";\nimport { ModelSelector, EffortSelector } from \"./ModelSelector\";\nimport { providerIcon } from \"./provider-icons\";\nimport { ContextUsage } from \"./ContextUsage\";\nimport type { ChatModel, ChatMessageMetadata, ChatUsageSummary, Suggestion, ToolResultRenderer } from \"./types\";\n\n/** Assistant messages carry token usage + cost the backend rode on the finish\n * part's `messageMetadata`. */\ntype ChatUIMessage = UIMessage<ChatMessageMetadata>;\n\nexport type ChatProps = {\n /** Endpoint that speaks the AI SDK v6 UI Message Stream protocol.\n * Ignored when `transport` is supplied. Defaults to \"/api/chat\". */\n api?: string;\n /** Model menu. When omitted and `modelsApi` is set, it is fetched. */\n models?: ChatModel[];\n /** Endpoint returning the model menu (ModelInfo[]). Defaults to\n * \"/api/chat/models\". Set to null to disable fetching. */\n modelsApi?: string | null;\n /** Initially selected model id; otherwise the first configured model. */\n defaultModel?: string;\n /** Reasoning-effort options for capable models. */\n reasoningEfforts?: string[];\n /** Initially selected reasoning effort (\"\" = none). */\n defaultReasoningEffort?: string;\n /** Notified when the user changes the model. */\n onModelChange?: (id: string) => void;\n /** Notified after each assistant turn with a usage snapshot (tokens used out\n * of the model's context window + cumulative cost), for a usage gauge. */\n onUsage?: (usage: ChatUsageSummary) => void;\n /** Suggested prompts shown on the empty state. */\n suggestions?: Suggestion[];\n /** Enables file/image attachments. */\n enableAttachments?: boolean;\n /** \"manual\" forwards a tool-approval policy hint to the backend. */\n toolApproval?: \"auto\" | \"manual\";\n /** Thread id to persist this conversation under (forwarded in the body). */\n threadId?: string;\n /** Optional host renderer for recognized completed tool outputs. */\n renderToolResult?: ToolResultRenderer;\n /** Extra fields merged into every request body. */\n body?: Record<string, unknown>;\n /** Pre-built transport (e.g. a mock for stories/tests). */\n transport?: ChatTransport<UIMessage>;\n /** Initial messages to seed the conversation. */\n initialMessages?: UIMessage[];\n placeholder?: string;\n emptyState?: React.ReactNode;\n className?: string;\n};\n\nconst DEFAULT_EFFORTS = [\"low\", \"medium\", \"high\"];\n\n/** Self-contained AI chat over a v6-compatible `/api/chat`: a streaming\n * conversation with model/effort selectors, suggestions, attachments,\n * per-message copy/regenerate, and human-in-the-loop tool approvals. The\n * backend owns model selection and tool execution; the selected model,\n * effort, approval policy and thread id are forwarded in the request body. */\nexport function Chat({\n api = \"/api/chat\",\n models: modelsProp,\n modelsApi = \"/api/chat/models\",\n defaultModel,\n reasoningEfforts = DEFAULT_EFFORTS,\n defaultReasoningEffort = \"\",\n onModelChange,\n onUsage,\n suggestions,\n enableAttachments = false,\n toolApproval,\n threadId,\n renderToolResult,\n body,\n transport,\n initialMessages,\n placeholder,\n emptyState,\n className,\n}: ChatProps) {\n const [models, setModels] = useState<ChatModel[]>(modelsProp ?? []);\n const [model, setModel] = useState<string | undefined>(defaultModel);\n const [effort, setEffort] = useState(defaultReasoningEffort);\n const [usage, setUsage] = useState<ChatUsageSummary | null>(null);\n const lastDefaultModel = useRef(defaultModel);\n\n // Fetch the model menu unless one was supplied or fetching is disabled.\n useEffect(() => {\n if (modelsProp || !modelsApi) return;\n let cancelled = false;\n fetch(modelsApi)\n .then((r) => (r.ok ? r.json() : Promise.reject(new Error(`models ${r.status}`))))\n .then((data: ChatModel[]) => {\n if (cancelled) return;\n setModels(data);\n setModel((m) => m ?? data.find((d) => d.configured !== false)?.id);\n })\n .catch((err) => console.warn(\"clicky-ui: failed to load chat models\", err));\n return () => {\n cancelled = true;\n };\n }, [modelsProp, modelsApi]);\n\n useEffect(() => {\n if (!defaultModel || defaultModel === lastDefaultModel.current) return;\n lastDefaultModel.current = defaultModel;\n setModel(defaultModel);\n }, [defaultModel]);\n\n const selectedModel = models.find((m) => m.id === model);\n const showEffort = !selectedModel || selectedModel.reasoning;\n\n // A function body keeps the transport stable while always sending the latest\n // model/effort/policy selections.\n const bodyRef = useRef<Record<string, unknown>>({});\n bodyRef.current = {\n ...body,\n ...(model ? { model } : {}),\n ...(effort ? { reasoningEffort: effort } : {}),\n ...(toolApproval ? { toolApproval } : {}),\n ...(threadId ? { threadId } : {}),\n };\n\n const resolvedTransport = useMemo<ChatTransport<UIMessage>>(\n () => transport ?? new DefaultChatTransport({ api, body: () => bodyRef.current }),\n [transport, api],\n );\n\n const { messages, sendMessage, regenerate, addToolApprovalResponse, status, error, clearError, stop } =\n useChat<ChatUIMessage>({\n transport: resolvedTransport,\n sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithApprovalResponses,\n ...(initialMessages ? { messages: initialMessages as ChatUIMessage[] } : {}),\n });\n\n // Surface a usage snapshot after each settled assistant turn. The backend\n // rides usage/cost on the finish part's messageMetadata; we read it off the\n // last assistant message and resolve maxTokens from the selected model.\n const onUsageRef = useRef(onUsage);\n onUsageRef.current = onUsage;\n useEffect(() => {\n if (status !== \"ready\") return;\n const last = [...messages].reverse().find((m) => m.role === \"assistant\");\n const meta = last?.metadata;\n if (!meta) return;\n const cost = meta.threadCostUsd ?? meta.cost;\n const snapshot: ChatUsageSummary = {\n usedTokens: meta.contextTokens ?? meta.usage?.totalTokens ?? 0,\n maxTokens: selectedModel?.contextWindow ?? 0,\n messageCount: messages.length,\n ...(cost != null ? { cost } : {}),\n ...(selectedModel?.label ? { modelLabel: selectedModel.label } : {}),\n };\n setUsage(snapshot);\n onUsageRef.current?.(snapshot);\n }, [messages, status, selectedModel]);\n\n const onModelSelect = (id: string) => {\n setModel(id);\n onModelChange?.(id);\n };\n\n const ModelGlyph = providerIcon(selectedModel?.provider);\n const toolbar = models.length > 0 || showEffort || (usage && usage.maxTokens > 0) ? (\n <div className=\"flex flex-1 items-center gap-2\">\n <ModelSelector models={models} value={model} onChange={onModelSelect} />\n {showEffort && (\n <EffortSelector efforts={reasoningEfforts} value={effort} onChange={setEffort} />\n )}\n {usage && usage.maxTokens > 0 && (\n <>\n <div className=\"flex-1\" />\n <ContextUsage\n usedTokens={usage.usedTokens}\n maxTokens={usage.maxTokens}\n {...(usage.messageCount != null ? { messageCount: usage.messageCount } : {})}\n {...(usage.cost != null ? { cost: usage.cost } : {})}\n {...(usage.modelLabel ? { modelLabel: usage.modelLabel } : {})}\n {...(ModelGlyph ? { modelIcon: ModelGlyph } : {})}\n />\n </>\n )}\n </div>\n ) : undefined;\n\n const empty = (messages.length === 0 && (emptyState || suggestions?.length)) ? (\n <div className=\"flex flex-col items-center gap-4\">\n {emptyState}\n {suggestions && suggestions.length > 0 && (\n <Suggestions suggestions={suggestions} onSelect={(text) => void sendMessage({ text })} />\n )}\n </div>\n ) : undefined;\n\n return (\n <div className={cn(\"flex h-full flex-col\", className)}>\n <Conversation\n messages={messages}\n status={status}\n error={error}\n onClearError={clearError}\n emptyState={empty}\n onRegenerate={(messageId) => void regenerate({ messageId })}\n onApprove={(id, approved, reason) =>\n void addToolApprovalResponse(reason ? { id, approved, reason } : { id, approved })\n }\n {...(renderToolResult ? { renderToolResult } : {})}\n />\n <div className=\"p-4 pt-0\">\n <PromptInput\n status={status}\n onStop={() => void stop()}\n placeholder={placeholder}\n enableAttachments={enableAttachments}\n toolbar={toolbar}\n onSubmit={(text, files) => void sendMessage({ text, files })}\n />\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Chat.js","sources":["../../../src/data/chat/Chat.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useChat } from \"@ai-sdk/react\";\nimport {\n DefaultChatTransport,\n lastAssistantMessageIsCompleteWithApprovalResponses,\n type ChatTransport,\n type UIMessage,\n} from \"ai\";\nimport { cn } from \"../../lib/utils\";\nimport { Conversation } from \"./Conversation\";\nimport { PromptInput } from \"./PromptInput\";\nimport { Suggestions } from \"./Suggestion\";\nimport { ModelSelector, EffortSelector } from \"./ModelSelector\";\nimport { providerIcon } from \"./provider-icons\";\nimport { ContextUsage } from \"./ContextUsage\";\nimport type { ChatModel, ChatMessageMetadata, ChatUsageSummary, Suggestion, ToolResultRenderer } from \"./types\";\n\n/** Assistant messages carry token usage + cost the backend rode on the finish\n * part's `messageMetadata`. */\ntype ChatUIMessage = UIMessage<ChatMessageMetadata>;\n\nexport type ChatProps = {\n /** Endpoint that speaks the AI SDK v6 UI Message Stream protocol.\n * Ignored when `transport` is supplied. Defaults to \"/api/chat\". */\n api?: string;\n /** Model menu. When omitted and `modelsApi` is set, it is fetched. */\n models?: ChatModel[];\n /** Endpoint returning the model menu (ModelInfo[]). Defaults to\n * \"/api/chat/models\". Set to null to disable fetching. */\n modelsApi?: string | null;\n /** Initially selected model id; otherwise the first configured model. */\n defaultModel?: string;\n /** Reasoning-effort options for capable models. */\n reasoningEfforts?: string[];\n /** Initially selected reasoning effort (\"\" = none). */\n defaultReasoningEffort?: string;\n /** Notified when the user changes the model. */\n onModelChange?: (id: string) => void;\n /** Notified after each assistant turn with a usage snapshot (tokens used out\n * of the model's context window + cumulative cost), for a usage gauge. */\n onUsage?: (usage: ChatUsageSummary) => void;\n /** Suggested prompts shown on the empty state. */\n suggestions?: Suggestion[];\n /** Enables file/image attachments. */\n enableAttachments?: boolean;\n /** \"manual\" forwards a tool-approval policy hint to the backend. */\n toolApproval?: \"auto\" | \"manual\";\n /** Thread id to persist this conversation under (forwarded in the body). */\n threadId?: string;\n /** Optional host renderer for recognized completed tool outputs. */\n renderToolResult?: ToolResultRenderer;\n /** Extra fields merged into every request body. */\n body?: Record<string, unknown>;\n /** Pre-built transport (e.g. a mock for stories/tests). */\n transport?: ChatTransport<UIMessage>;\n /** Initial messages to seed the conversation. */\n initialMessages?: UIMessage[];\n /** Prompt to send automatically once. A new `id` sends even when text repeats. */\n initialPrompt?: { id: number; text: string } | null;\n /** Called after `initialPrompt` has been handed to the chat transport. */\n onInitialPromptSent?: () => void;\n placeholder?: string;\n emptyState?: React.ReactNode;\n className?: string;\n};\n\nconst DEFAULT_EFFORTS = [\"low\", \"medium\", \"high\"];\n\n/** Self-contained AI chat over a v6-compatible `/api/chat`: a streaming\n * conversation with model/effort selectors, suggestions, attachments,\n * per-message copy/regenerate, and human-in-the-loop tool approvals. The\n * backend owns model selection and tool execution; the selected model,\n * effort, approval policy and thread id are forwarded in the request body. */\nexport function Chat({\n api = \"/api/chat\",\n models: modelsProp,\n modelsApi = \"/api/chat/models\",\n defaultModel,\n reasoningEfforts = DEFAULT_EFFORTS,\n defaultReasoningEffort = \"\",\n onModelChange,\n onUsage,\n suggestions,\n enableAttachments = false,\n toolApproval,\n threadId,\n renderToolResult,\n body,\n transport,\n initialMessages,\n initialPrompt,\n onInitialPromptSent,\n placeholder,\n emptyState,\n className,\n}: ChatProps) {\n const [models, setModels] = useState<ChatModel[]>(modelsProp ?? []);\n const [model, setModel] = useState<string | undefined>(defaultModel);\n const [effort, setEffort] = useState(defaultReasoningEffort);\n const [usage, setUsage] = useState<ChatUsageSummary | null>(null);\n const lastDefaultModel = useRef(defaultModel);\n const sentInitialPromptId = useRef<number | null>(null);\n\n // Fetch the model menu unless one was supplied or fetching is disabled.\n useEffect(() => {\n if (modelsProp || !modelsApi) return;\n let cancelled = false;\n fetch(modelsApi)\n .then((r) => (r.ok ? r.json() : Promise.reject(new Error(`models ${r.status}`))))\n .then((data: ChatModel[]) => {\n if (cancelled) return;\n setModels(data);\n setModel((m) => m ?? data.find((d) => d.configured !== false)?.id);\n })\n .catch((err) => console.warn(\"clicky-ui: failed to load chat models\", err));\n return () => {\n cancelled = true;\n };\n }, [modelsProp, modelsApi]);\n\n useEffect(() => {\n if (!defaultModel || defaultModel === lastDefaultModel.current) return;\n lastDefaultModel.current = defaultModel;\n setModel(defaultModel);\n }, [defaultModel]);\n\n const selectedModel = models.find((m) => m.id === model);\n const showEffort = !selectedModel || selectedModel.reasoning;\n\n // A function body keeps the transport stable while always sending the latest\n // model/effort/policy selections.\n const bodyRef = useRef<Record<string, unknown>>({});\n bodyRef.current = {\n ...body,\n ...(model ? { model } : {}),\n ...(effort ? { reasoningEffort: effort } : {}),\n ...(toolApproval ? { toolApproval } : {}),\n ...(threadId ? { threadId } : {}),\n };\n\n const resolvedTransport = useMemo<ChatTransport<UIMessage>>(\n () => transport ?? new DefaultChatTransport({ api, body: () => bodyRef.current }),\n [transport, api],\n );\n\n const { messages, sendMessage, regenerate, addToolApprovalResponse, status, error, clearError, stop } =\n useChat<ChatUIMessage>({\n transport: resolvedTransport,\n sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithApprovalResponses,\n ...(initialMessages ? { messages: initialMessages as ChatUIMessage[] } : {}),\n });\n\n useEffect(() => {\n if (!initialPrompt || status !== \"ready\") return;\n if (sentInitialPromptId.current === initialPrompt.id) return;\n const text = initialPrompt.text.trim();\n if (!text) return;\n sentInitialPromptId.current = initialPrompt.id;\n void sendMessage({ text });\n onInitialPromptSent?.();\n }, [initialPrompt, onInitialPromptSent, sendMessage, status]);\n\n // Surface a usage snapshot after each settled assistant turn. The backend\n // rides usage/cost on the finish part's messageMetadata; we read it off the\n // last assistant message and resolve maxTokens from the selected model.\n const onUsageRef = useRef(onUsage);\n onUsageRef.current = onUsage;\n useEffect(() => {\n if (status !== \"ready\") return;\n const last = [...messages].reverse().find((m) => m.role === \"assistant\");\n const meta = last?.metadata;\n if (!meta) return;\n const cost = meta.threadCostUsd ?? meta.cost;\n const snapshot: ChatUsageSummary = {\n usedTokens: meta.contextTokens ?? meta.usage?.totalTokens ?? 0,\n maxTokens: selectedModel?.contextWindow ?? 0,\n messageCount: messages.length,\n ...(cost != null ? { cost } : {}),\n ...(selectedModel?.label ? { modelLabel: selectedModel.label } : {}),\n };\n setUsage(snapshot);\n onUsageRef.current?.(snapshot);\n }, [messages, status, selectedModel]);\n\n const onModelSelect = (id: string) => {\n setModel(id);\n onModelChange?.(id);\n };\n\n const ModelGlyph = providerIcon(selectedModel?.provider);\n const toolbar = models.length > 0 || showEffort || (usage && usage.maxTokens > 0) ? (\n <div className=\"flex flex-1 items-center gap-2\">\n <ModelSelector models={models} value={model} onChange={onModelSelect} />\n {showEffort && (\n <EffortSelector efforts={reasoningEfforts} value={effort} onChange={setEffort} />\n )}\n {usage && usage.maxTokens > 0 && (\n <>\n <div className=\"flex-1\" />\n <ContextUsage\n usedTokens={usage.usedTokens}\n maxTokens={usage.maxTokens}\n {...(usage.messageCount != null ? { messageCount: usage.messageCount } : {})}\n {...(usage.cost != null ? { cost: usage.cost } : {})}\n {...(usage.modelLabel ? { modelLabel: usage.modelLabel } : {})}\n {...(ModelGlyph ? { modelIcon: ModelGlyph } : {})}\n />\n </>\n )}\n </div>\n ) : undefined;\n\n const empty = (messages.length === 0 && (emptyState || suggestions?.length)) ? (\n <div className=\"flex flex-col items-center gap-4\">\n {emptyState}\n {suggestions && suggestions.length > 0 && (\n <Suggestions suggestions={suggestions} onSelect={(text) => void sendMessage({ text })} />\n )}\n </div>\n ) : undefined;\n\n return (\n <div className={cn(\"flex h-full flex-col\", className)}>\n <Conversation\n messages={messages}\n status={status}\n error={error}\n onClearError={clearError}\n emptyState={empty}\n onRegenerate={(messageId) => void regenerate({ messageId })}\n onApprove={(id, approved, reason) =>\n void addToolApprovalResponse(reason ? { id, approved, reason } : { id, approved })\n }\n {...(renderToolResult ? { renderToolResult } : {})}\n />\n <div className=\"p-4 pt-0\">\n <PromptInput\n status={status}\n onStop={() => void stop()}\n placeholder={placeholder}\n enableAttachments={enableAttachments}\n toolbar={toolbar}\n onSubmit={(text, files) => void sendMessage({ text, files })}\n />\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ function seriesStats(points, transform) {
4
+ if (!points || points.length === 0) return null;
5
+ let min = Infinity;
6
+ let max = -Infinity;
7
+ let sum = 0;
8
+ let current = 0;
9
+ for (const p of points) {
10
+ const v = transform ? transform(p.value) : p.value;
11
+ if (v < min) min = v;
12
+ if (v > max) max = v;
13
+ sum += v;
14
+ current = v;
15
+ }
16
+ return { current, min, max, avg: sum / points.length, count: points.length };
17
+ }
18
+ exports.seriesStats = seriesStats;
19
+ //# sourceMappingURL=gauge-stats.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gauge-stats.cjs","sources":["../../src/data/gauge-stats.ts"],"sourcesContent":["import type { TimeseriesPoint } from \"./TimeseriesPanel.model\";\n\nexport interface SeriesStats {\n /** The most recent point's value. */\n current: number;\n /** Smallest value over the window. */\n min: number;\n /** Largest value over the window. */\n max: number;\n /** Mean value over the window. */\n avg: number;\n /** Number of points reduced. */\n count: number;\n}\n\n// seriesStats reduces a metric's points to current/min/max/avg, applying an\n// optional transform (e.g. unit scaling) to each raw value first. Returns null\n// for an empty or absent series so callers can skip rendering the stat rows.\nexport function seriesStats(\n points: TimeseriesPoint[] | undefined,\n transform?: (value: number) => number,\n): SeriesStats | null {\n if (!points || points.length === 0) return null;\n let min = Infinity;\n let max = -Infinity;\n let sum = 0;\n let current = 0;\n for (const p of points) {\n const v = transform ? transform(p.value) : p.value;\n if (v < min) min = v;\n if (v > max) max = v;\n sum += v;\n current = v;\n }\n return { current, min, max, avg: sum / points.length, count: points.length };\n}\n"],"names":[],"mappings":";;AAkBO,SAAS,YACd,QACA,WACoB;AACpB,MAAI,CAAC,UAAU,OAAO,WAAW,EAAG,QAAO;AAC3C,MAAI,MAAM;AACV,MAAI,MAAM;AACV,MAAI,MAAM;AACV,MAAI,UAAU;AACd,aAAW,KAAK,QAAQ;AACtB,UAAM,IAAI,YAAY,UAAU,EAAE,KAAK,IAAI,EAAE;AAC7C,QAAI,IAAI,IAAK,OAAM;AACnB,QAAI,IAAI,IAAK,OAAM;AACnB,WAAO;AACP,cAAU;AAAA,EACZ;AACA,SAAO,EAAE,SAAS,KAAK,KAAK,KAAK,MAAM,OAAO,QAAQ,OAAO,OAAO,OAAA;AACtE;;"}
@@ -0,0 +1,15 @@
1
+ import { TimeseriesPoint } from './TimeseriesPanel.model';
2
+ export interface SeriesStats {
3
+ /** The most recent point's value. */
4
+ current: number;
5
+ /** Smallest value over the window. */
6
+ min: number;
7
+ /** Largest value over the window. */
8
+ max: number;
9
+ /** Mean value over the window. */
10
+ avg: number;
11
+ /** Number of points reduced. */
12
+ count: number;
13
+ }
14
+ export declare function seriesStats(points: TimeseriesPoint[] | undefined, transform?: (value: number) => number): SeriesStats | null;
15
+ //# sourceMappingURL=gauge-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gauge-stats.d.ts","sourceRoot":"","sources":["../../src/data/gauge-stats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;CACf;AAKD,wBAAgB,WAAW,CACzB,MAAM,EAAE,eAAe,EAAE,GAAG,SAAS,EACrC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GACpC,WAAW,GAAG,IAAI,CAcpB"}
@@ -0,0 +1,19 @@
1
+ function seriesStats(points, transform) {
2
+ if (!points || points.length === 0) return null;
3
+ let min = Infinity;
4
+ let max = -Infinity;
5
+ let sum = 0;
6
+ let current = 0;
7
+ for (const p of points) {
8
+ const v = transform ? transform(p.value) : p.value;
9
+ if (v < min) min = v;
10
+ if (v > max) max = v;
11
+ sum += v;
12
+ current = v;
13
+ }
14
+ return { current, min, max, avg: sum / points.length, count: points.length };
15
+ }
16
+ export {
17
+ seriesStats
18
+ };
19
+ //# sourceMappingURL=gauge-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gauge-stats.js","sources":["../../src/data/gauge-stats.ts"],"sourcesContent":["import type { TimeseriesPoint } from \"./TimeseriesPanel.model\";\n\nexport interface SeriesStats {\n /** The most recent point's value. */\n current: number;\n /** Smallest value over the window. */\n min: number;\n /** Largest value over the window. */\n max: number;\n /** Mean value over the window. */\n avg: number;\n /** Number of points reduced. */\n count: number;\n}\n\n// seriesStats reduces a metric's points to current/min/max/avg, applying an\n// optional transform (e.g. unit scaling) to each raw value first. Returns null\n// for an empty or absent series so callers can skip rendering the stat rows.\nexport function seriesStats(\n points: TimeseriesPoint[] | undefined,\n transform?: (value: number) => number,\n): SeriesStats | null {\n if (!points || points.length === 0) return null;\n let min = Infinity;\n let max = -Infinity;\n let sum = 0;\n let current = 0;\n for (const p of points) {\n const v = transform ? transform(p.value) : p.value;\n if (v < min) min = v;\n if (v > max) max = v;\n sum += v;\n current = v;\n }\n return { current, min, max, avg: sum / points.length, count: points.length };\n}\n"],"names":[],"mappings":"AAkBO,SAAS,YACd,QACA,WACoB;AACpB,MAAI,CAAC,UAAU,OAAO,WAAW,EAAG,QAAO;AAC3C,MAAI,MAAM;AACV,MAAI,MAAM;AACV,MAAI,MAAM;AACV,MAAI,UAAU;AACd,aAAW,KAAK,QAAQ;AACtB,UAAM,IAAI,YAAY,UAAU,EAAE,KAAK,IAAI,EAAE;AAC7C,QAAI,IAAI,IAAK,OAAM;AACnB,QAAI,IAAI,IAAK,OAAM;AACnB,WAAO;AACP,cAAU;AAAA,EACZ;AACA,SAAO,EAAE,SAAS,KAAK,KAAK,KAAK,MAAM,OAAO,QAAQ,OAAO,OAAO,OAAA;AACtE;"}
@@ -0,0 +1,436 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const PLATFORM_EXTENSION_PREFIX = ["x-oi", "pa-"].join("");
4
+ const PLATFORM_DIRECTIVE_PREFIX = ["@oi", "pa-"].join("");
5
+ const PLATFORM_TYPE_EXTENSION = `${PLATFORM_EXTENSION_PREFIX}type`;
6
+ const PLATFORM_ASCODE_EXTENSION = `${PLATFORM_EXTENSION_PREFIX}ascode`;
7
+ const PLATFORM_FORMAT_EXTENSION = `${PLATFORM_EXTENSION_PREFIX}format`;
8
+ const PLATFORM_CLIENT_REF_EXTENSION = `${PLATFORM_EXTENSION_PREFIX}client-ref`;
9
+ const PLATFORM_DIRECTIVE_PATTERN = new RegExp(`${PLATFORM_DIRECTIVE_PREFIX}([a-z][\\w-]*)\\s*`, "gi");
10
+ function asObject(schema) {
11
+ if (!schema || typeof schema !== "object" || Array.isArray(schema)) return void 0;
12
+ return schema;
13
+ }
14
+ function strExt(schema, key) {
15
+ const value = schema[key];
16
+ return typeof value === "string" ? value : void 0;
17
+ }
18
+ function enumSchema(schema) {
19
+ if (Array.isArray(schema.enum) && schema.enum.length > 0) return schema;
20
+ for (const branch of [...schema.anyOf ?? [], ...schema.oneOf ?? []]) {
21
+ if (Array.isArray(branch.enum) && branch.enum.length > 0) return branch;
22
+ }
23
+ return void 0;
24
+ }
25
+ function typeLabel(schema) {
26
+ const enumBranch = enumSchema(schema);
27
+ if (enumBranch == null ? void 0 : enumBranch.enum) return `enum(${enumBranch.enum.length})`;
28
+ if (schema.const !== void 0) return "const";
29
+ const type = schema.type;
30
+ if (Array.isArray(type)) return type.join(" | ");
31
+ if (type) return type;
32
+ if (schema.properties || schema.additionalProperties || schema.patternProperties) return "object";
33
+ if (schema.items) return "array";
34
+ return "any";
35
+ }
36
+ function enumValues(schema) {
37
+ const carrier = enumSchema(schema);
38
+ if (!(carrier == null ? void 0 : carrier.enum) || carrier.enum.length === 0) return void 0;
39
+ const rawLabels = carrier["x-enum-labels"] ?? schema["x-enum-labels"];
40
+ const labels = rawLabels && typeof rawLabels === "object" ? rawLabels : void 0;
41
+ return carrier.enum.map((entry) => {
42
+ const value = String(entry);
43
+ const label = labels == null ? void 0 : labels[value];
44
+ return label && label !== value ? { value, label } : { value };
45
+ });
46
+ }
47
+ function location(schema) {
48
+ const loc = schema["x-location"];
49
+ if (!loc || typeof loc !== "object" || Array.isArray(loc)) return void 0;
50
+ const record = loc;
51
+ if (typeof record.path !== "string") return void 0;
52
+ return {
53
+ path: record.path,
54
+ startLine: typeof record.startLine === "number" ? record.startLine : void 0,
55
+ endLine: typeof record.endLine === "number" ? record.endLine : void 0
56
+ };
57
+ }
58
+ function parseDescription(raw) {
59
+ if (!raw) return {};
60
+ const matches = [...raw.matchAll(PLATFORM_DIRECTIVE_PATTERN)];
61
+ if (matches.length === 0) {
62
+ const text2 = raw.trim();
63
+ return text2 ? { text: text2 } : {};
64
+ }
65
+ const result = {};
66
+ const first = matches[0];
67
+ if (!first) return {};
68
+ const firstIndex = first.index ?? 0;
69
+ const text = raw.slice(0, firstIndex).trim();
70
+ if (text) result.text = text;
71
+ const annotations = [];
72
+ matches.forEach((match, index) => {
73
+ var _a, _b;
74
+ const key = (_a = match[1]) == null ? void 0 : _a.toLowerCase();
75
+ if (!key) return;
76
+ const start = (match.index ?? 0) + match[0].length;
77
+ const end = index + 1 < matches.length ? ((_b = matches[index + 1]) == null ? void 0 : _b.index) ?? raw.length : raw.length;
78
+ const value = raw.slice(start, end).trim();
79
+ if (!value) return;
80
+ if (key === "query") result.query = value.replace(/^sql\s+/i, "").trim();
81
+ else if (key === "ascode") result.ascode = value;
82
+ else annotations.push({ key, value });
83
+ });
84
+ if (annotations.length > 0) result.annotations = annotations;
85
+ return result;
86
+ }
87
+ function fieldMeta(schema) {
88
+ const desc = parseDescription(typeof schema.description === "string" ? schema.description : void 0);
89
+ return {
90
+ type: typeLabel(schema),
91
+ platformType: strExt(schema, PLATFORM_TYPE_EXTENSION),
92
+ ascode: strExt(schema, PLATFORM_ASCODE_EXTENSION) ?? desc.ascode,
93
+ format: strExt(schema, PLATFORM_FORMAT_EXTENSION) ?? (typeof schema.format === "string" ? schema.format : void 0),
94
+ clientRef: schema[PLATFORM_CLIENT_REF_EXTENSION] === true ? true : void 0,
95
+ layout: strExt(schema, "x-layout"),
96
+ enumValues: enumValues(schema),
97
+ location: location(schema),
98
+ source: strExt(schema, "x-source"),
99
+ query: desc.query,
100
+ annotations: desc.annotations,
101
+ description: desc.text
102
+ };
103
+ }
104
+ function hasHoverMeta(meta) {
105
+ return Boolean(
106
+ meta.platformType || meta.ascode || meta.format || meta.clientRef || meta.layout || meta.enumValues || meta.location || meta.source || meta.query || meta.annotations || meta.description
107
+ );
108
+ }
109
+ function effectiveSchemaProperties(schema) {
110
+ if (!schema) return {};
111
+ const properties = { ...schema.properties };
112
+ for (const clause of schema.allOf ?? []) {
113
+ if (clause.if !== void 0 || clause.then !== void 0) continue;
114
+ for (const [key, child] of Object.entries(clause.properties ?? {})) {
115
+ properties[key] = child;
116
+ }
117
+ }
118
+ return properties;
119
+ }
120
+ function detailChild(key, label, meta) {
121
+ if (!hasHoverMeta(meta)) return void 0;
122
+ return [{ key: `${key}/__detail`, label, detail: meta }];
123
+ }
124
+ function fieldNode(name, schema, keyPrefix) {
125
+ const key = `${keyPrefix}/${name}`;
126
+ const meta = fieldMeta(schema);
127
+ const node = {
128
+ key,
129
+ label: name,
130
+ badge: meta.type,
131
+ platformType: meta.platformType,
132
+ ascode: meta.ascode,
133
+ description: meta.description,
134
+ meta
135
+ };
136
+ const children = objectChildren(schema, key);
137
+ if (children.length > 0) {
138
+ node.children = children;
139
+ node.count = children.length;
140
+ } else {
141
+ node.children = detailChild(key, name, meta);
142
+ }
143
+ return node;
144
+ }
145
+ function mapValueNode(label, schema, keyPrefix) {
146
+ const meta = fieldMeta(schema);
147
+ const children = objectChildren(schema, keyPrefix);
148
+ return {
149
+ key: keyPrefix,
150
+ label,
151
+ badge: meta.type,
152
+ platformType: meta.platformType,
153
+ ascode: meta.ascode,
154
+ description: meta.description,
155
+ meta,
156
+ ...children.length > 0 ? { count: children.length, children } : { children: detailChild(keyPrefix, label, meta) }
157
+ };
158
+ }
159
+ function objectChildren(schema, keyPrefix) {
160
+ const out = [];
161
+ const own = effectiveSchemaProperties(asObject(schema));
162
+ const itemProps = effectiveSchemaProperties(asObject(schema.items));
163
+ const props = Object.keys(own).length > 0 ? own : itemProps;
164
+ for (const [name, child] of Object.entries(props)) {
165
+ out.push(fieldNode(name, child, keyPrefix));
166
+ }
167
+ const additional = asObject(schema.additionalProperties);
168
+ if (additional) {
169
+ out.push(mapValueNode("(any key)", additional, `${keyPrefix}/*`));
170
+ }
171
+ for (const [pattern, child] of Object.entries(schema.patternProperties ?? {})) {
172
+ out.push(mapValueNode(`/${pattern}/`, child, `${keyPrefix}/pattern/${pattern}`));
173
+ }
174
+ return out;
175
+ }
176
+ function activityNames(value) {
177
+ var _a, _b, _c;
178
+ const names = /* @__PURE__ */ new Set();
179
+ const activity = (_a = value.properties) == null ? void 0 : _a.activity;
180
+ if (activity && Array.isArray(activity.enum)) activity.enum.forEach((entry) => names.add(String(entry)));
181
+ for (const clause of value.allOf ?? []) {
182
+ const condition = (_c = (_b = clause.if) == null ? void 0 : _b.properties) == null ? void 0 : _c.activity;
183
+ if ((condition == null ? void 0 : condition.const) !== void 0) names.add(String(condition.const));
184
+ if (Array.isArray(condition == null ? void 0 : condition.enum)) condition.enum.forEach((entry) => names.add(String(entry)));
185
+ }
186
+ return [...names].sort();
187
+ }
188
+ function activityInput(value, activity) {
189
+ var _a, _b, _c, _d, _e;
190
+ for (const clause of value.allOf ?? []) {
191
+ const condition = (_b = (_a = clause.if) == null ? void 0 : _a.properties) == null ? void 0 : _b.activity;
192
+ const matches = (condition == null ? void 0 : condition.const) === activity || Array.isArray(condition == null ? void 0 : condition.enum) && condition.enum.includes(activity);
193
+ if (!matches) continue;
194
+ const input = asObject((_d = (_c = clause.then) == null ? void 0 : _c.properties) == null ? void 0 : _d.input);
195
+ if (input) return input;
196
+ }
197
+ return asObject((_e = value.properties) == null ? void 0 : _e.input);
198
+ }
199
+ function activityBranchNode(target, value) {
200
+ const key = `branch/${target}/activity`;
201
+ const names = activityNames(value);
202
+ const activities = names.map((name) => {
203
+ const input = activityInput(value, name);
204
+ const inputFields = input ? objectChildren(input, `${key}/${name}/input`) : [];
205
+ const children = [];
206
+ if (inputFields.length > 0) {
207
+ children.push({
208
+ key: `${key}/${name}/input`,
209
+ label: "input",
210
+ badge: "object",
211
+ count: inputFields.length,
212
+ children: inputFields
213
+ });
214
+ }
215
+ return {
216
+ key: `${key}/${name}`,
217
+ label: name,
218
+ badge: "activity",
219
+ ...children.length > 0 ? { children, count: children.length } : {}
220
+ };
221
+ });
222
+ const controls = sharedControlFields(value, key);
223
+ return {
224
+ key,
225
+ label: `activity - ${target}`,
226
+ badge: "branch",
227
+ count: names.length,
228
+ children: [...activities, ...controls]
229
+ };
230
+ }
231
+ function sharedControlFields(value, keyPrefix) {
232
+ const out = [];
233
+ for (const [name, child] of Object.entries(effectiveSchemaProperties(value))) {
234
+ if (name === "activity" || name === "input") continue;
235
+ out.push(fieldNode(name, child, `${keyPrefix}/_controls`));
236
+ }
237
+ if (out.length === 0) return [];
238
+ return [
239
+ {
240
+ key: `${keyPrefix}/_controls`,
241
+ label: "(common fields)",
242
+ badge: "fields",
243
+ count: out.length,
244
+ children: out
245
+ }
246
+ ];
247
+ }
248
+ function addressCountryNames(value) {
249
+ var _a;
250
+ const country = asObject((_a = value.properties) == null ? void 0 : _a.CountryCode);
251
+ if (country && Array.isArray(country.enum)) return country.enum.map(String).sort();
252
+ return [];
253
+ }
254
+ function addressTypesForCountry(value, country) {
255
+ var _a, _b, _c;
256
+ for (const clause of value.allOf ?? []) {
257
+ const ifProps = ((_a = clause.if) == null ? void 0 : _a.properties) ?? {};
258
+ const countryCode = ifProps.CountryCode;
259
+ if ((countryCode == null ? void 0 : countryCode.const) !== country || ifProps.AddressType !== void 0) continue;
260
+ const addressType = asObject((_c = (_b = clause.then) == null ? void 0 : _b.properties) == null ? void 0 : _c.AddressType);
261
+ if (addressType && Array.isArray(addressType.enum)) return addressType.enum.map(String).sort();
262
+ }
263
+ return [];
264
+ }
265
+ function addressFieldsFor(value, country, addressType) {
266
+ var _a, _b, _c;
267
+ for (const clause of value.allOf ?? []) {
268
+ const ifProps = ((_a = clause.if) == null ? void 0 : _a.properties) ?? {};
269
+ const countryCode = ifProps.CountryCode;
270
+ const type = ifProps.AddressType;
271
+ if ((countryCode == null ? void 0 : countryCode.const) !== country || (type == null ? void 0 : type.const) !== addressType) continue;
272
+ const fields = asObject((_c = (_b = clause.then) == null ? void 0 : _b.properties) == null ? void 0 : _c.fields);
273
+ if (fields) return fields;
274
+ }
275
+ return void 0;
276
+ }
277
+ function addressesNode(key, map) {
278
+ const value = asObject(map.additionalProperties);
279
+ if (!value) return void 0;
280
+ const role = asObject(map.propertyNames);
281
+ const countries = addressCountryNames(value);
282
+ const countryNodes = countries.map((country) => {
283
+ const types = addressTypesForCountry(value, country);
284
+ const typeNodes = types.map((type) => {
285
+ const fields = addressFieldsFor(value, country, type);
286
+ const fieldNodes = fields ? objectChildren(fields, `${key}/${country}/${type}/fields`) : [];
287
+ const children = fieldNodes.length > 0 ? [
288
+ {
289
+ key: `${key}/${country}/${type}/fields`,
290
+ label: "fields",
291
+ badge: "object",
292
+ count: fieldNodes.length,
293
+ children: fieldNodes
294
+ }
295
+ ] : [];
296
+ return {
297
+ key: `${key}/${country}/${type}`,
298
+ label: type,
299
+ badge: "activity",
300
+ ...children.length > 0 ? { children, count: children.length } : {}
301
+ };
302
+ });
303
+ return {
304
+ key: `${key}/${country}`,
305
+ label: country,
306
+ badge: "branch",
307
+ count: typeNodes.length,
308
+ children: typeNodes
309
+ };
310
+ });
311
+ return {
312
+ key,
313
+ label: "addresses",
314
+ badge: "branch",
315
+ count: countries.length,
316
+ ...(role == null ? void 0 : role[PLATFORM_ASCODE_EXTENSION]) ? { ascode: String(role[PLATFORM_ASCODE_EXTENSION]) } : {},
317
+ children: countryNodes
318
+ };
319
+ }
320
+ function stepBranchNode(key, value) {
321
+ const children = objectChildren(value, `branch/${key}`);
322
+ return { key: `branch/${key}`, label: key, badge: "branch", count: children.length, children };
323
+ }
324
+ function stepsNode(schema) {
325
+ var _a, _b, _c, _d, _e;
326
+ const items = asObject((_b = (_a = schema.properties) == null ? void 0 : _a.steps) == null ? void 0 : _b.items);
327
+ const branches = (items == null ? void 0 : items.oneOf) ?? [];
328
+ if (branches.length === 0) return void 0;
329
+ const children = [];
330
+ for (const branch of branches) {
331
+ const key = (_c = branch.required) == null ? void 0 : _c[0];
332
+ if (!key) continue;
333
+ const value = asObject((_d = branch.properties) == null ? void 0 : _d[key]);
334
+ if (!value) continue;
335
+ if ((_e = value.required) == null ? void 0 : _e.includes("activity")) {
336
+ children.push(activityBranchNode(key, value));
337
+ } else if (key === "policy") {
338
+ children.push({ ...stepBranchNode(key, value), label: "policy-create" });
339
+ } else {
340
+ children.push(stepBranchNode(key, value));
341
+ }
342
+ }
343
+ return { key: "steps", label: "Steps", badge: "branch", count: children.length, children };
344
+ }
345
+ function setupNode(schema) {
346
+ var _a, _b, _c, _d, _e;
347
+ const setup = asObject((_a = schema.properties) == null ? void 0 : _a.setup);
348
+ if (!setup) return void 0;
349
+ const children = [];
350
+ for (const which of ["scheme", "customer"]) {
351
+ const block = asObject((_b = setup.properties) == null ? void 0 : _b[which]);
352
+ const fields = asObject((_c = block == null ? void 0 : block.properties) == null ? void 0 : _c.fields);
353
+ if (fields) {
354
+ const fieldNodes = objectChildren(fields, `setup/${which}/fields`);
355
+ children.push({
356
+ key: `setup/${which}`,
357
+ label: `${which} fields`,
358
+ badge: "fields",
359
+ count: fieldNodes.length,
360
+ children: fieldNodes
361
+ });
362
+ }
363
+ const addressMap = asObject((_d = block == null ? void 0 : block.properties) == null ? void 0 : _d.addresses);
364
+ const addresses = addressMap ? addressesNode(`setup/${which}/addresses`, addressMap) : void 0;
365
+ if (addresses) children.push({ ...addresses, label: `${which} addresses` });
366
+ }
367
+ const clients = asObject((_e = setup.properties) == null ? void 0 : _e.clients);
368
+ const clientTypes = Object.keys((clients == null ? void 0 : clients.properties) ?? {});
369
+ if (clients && clientTypes.length > 0) {
370
+ const typeNodes = clientTypes.map((type) => {
371
+ var _a2, _b2, _c2;
372
+ const entry = asObject((_b2 = asObject((_a2 = clients.properties) == null ? void 0 : _a2[type])) == null ? void 0 : _b2.items);
373
+ const fields = entry ? objectChildren(entry, `setup/clients/${type}`).filter((node) => node.label !== "addresses") : [];
374
+ const addressMap = asObject((_c2 = entry == null ? void 0 : entry.properties) == null ? void 0 : _c2.addresses);
375
+ const addresses = addressMap ? addressesNode(`setup/clients/${type}/addresses`, addressMap) : void 0;
376
+ const kids = addresses ? [...fields, addresses] : fields;
377
+ return {
378
+ key: `setup/clients/${type}`,
379
+ label: type,
380
+ badge: "clientType",
381
+ count: kids.length,
382
+ children: kids
383
+ };
384
+ });
385
+ children.push({
386
+ key: "setup/clients",
387
+ label: "clients",
388
+ badge: "clientTypes",
389
+ count: clientTypes.length,
390
+ children: typeNodes
391
+ });
392
+ }
393
+ return { key: "setup", label: "Setup", badge: "group", count: children.length, children };
394
+ }
395
+ function topLevelFields(schema) {
396
+ const skip = /* @__PURE__ */ new Set(["setup", "steps"]);
397
+ const out = [];
398
+ for (const [name, child] of Object.entries(effectiveSchemaProperties(schema))) {
399
+ if (skip.has(name)) continue;
400
+ out.push(fieldNode(name, child, "root"));
401
+ }
402
+ return out;
403
+ }
404
+ function buildSchemaTree(schema) {
405
+ const roots = [];
406
+ const setup = setupNode(schema);
407
+ if (setup) roots.push(setup);
408
+ const steps = stepsNode(schema);
409
+ if (steps) roots.push(steps);
410
+ roots.push(...topLevelFields(schema));
411
+ return roots;
412
+ }
413
+ function buildSchemaViewerTree(schema) {
414
+ return buildSchemaTree(schema);
415
+ }
416
+ function buildStepBranchTree(schema, branchKey, isActivity) {
417
+ var _a, _b, _c, _d, _e;
418
+ const items = asObject((_b = (_a = schema.properties) == null ? void 0 : _a.steps) == null ? void 0 : _b.items);
419
+ const branches = (items == null ? void 0 : items.oneOf) ?? [];
420
+ for (const branch of branches) {
421
+ if (!((_c = branch.required) == null ? void 0 : _c.includes(branchKey))) continue;
422
+ const value = asObject((_d = branch.properties) == null ? void 0 : _d[branchKey]);
423
+ if (!value) continue;
424
+ const branchIsActivity = Boolean((_e = value.required) == null ? void 0 : _e.includes("activity"));
425
+ if (branchIsActivity !== isActivity) continue;
426
+ if (branchIsActivity) return [activityBranchNode(branchKey, value)];
427
+ const node = branchKey === "policy" ? { ...stepBranchNode(branchKey, value), label: "policy-create" } : stepBranchNode(branchKey, value);
428
+ return [node];
429
+ }
430
+ return [];
431
+ }
432
+ exports.buildSchemaTree = buildSchemaTree;
433
+ exports.buildSchemaViewerTree = buildSchemaViewerTree;
434
+ exports.buildStepBranchTree = buildStepBranchTree;
435
+ exports.hasHoverMeta = hasHoverMeta;
436
+ //# sourceMappingURL=schema-viewer-model.cjs.map