@flanksource/clicky-ui 0.3.55 → 0.3.56

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 (991) hide show
  1. package/NOTICE.md +6 -0
  2. package/dist/ai.cjs +6 -0
  3. package/dist/ai.js +3 -1
  4. package/dist/chat.cjs +2 -0
  5. package/dist/chat.d.ts +1 -0
  6. package/dist/chat.d.ts.map +1 -1
  7. package/dist/chat.js +2 -1
  8. package/dist/comments/CommentCard.cjs +37 -7
  9. package/dist/comments/CommentCard.cjs.map +1 -1
  10. package/dist/comments/CommentCard.d.ts +11 -1
  11. package/dist/comments/CommentCard.d.ts.map +1 -1
  12. package/dist/comments/CommentCard.js +37 -7
  13. package/dist/comments/CommentCard.js.map +1 -1
  14. package/dist/comments/CommentCardParts.cjs +9 -4
  15. package/dist/comments/CommentCardParts.cjs.map +1 -1
  16. package/dist/comments/CommentCardParts.d.ts.map +1 -1
  17. package/dist/comments/CommentCardParts.js +9 -4
  18. package/dist/comments/CommentCardParts.js.map +1 -1
  19. package/dist/comments/CommentComposer.cjs +8 -8
  20. package/dist/comments/CommentComposer.cjs.map +1 -1
  21. package/dist/comments/CommentComposer.d.ts.map +1 -1
  22. package/dist/comments/CommentComposer.js +8 -8
  23. package/dist/comments/CommentComposer.js.map +1 -1
  24. package/dist/comments/CommentProvider.cjs +5 -1
  25. package/dist/comments/CommentProvider.cjs.map +1 -1
  26. package/dist/comments/CommentProvider.d.ts +1 -1
  27. package/dist/comments/CommentProvider.d.ts.map +1 -1
  28. package/dist/comments/CommentProvider.js +5 -1
  29. package/dist/comments/CommentProvider.js.map +1 -1
  30. package/dist/comments/CommentSidePanel.cjs +17 -11
  31. package/dist/comments/CommentSidePanel.cjs.map +1 -1
  32. package/dist/comments/CommentSidePanel.d.ts +6 -0
  33. package/dist/comments/CommentSidePanel.d.ts.map +1 -1
  34. package/dist/comments/CommentSidePanel.js +17 -11
  35. package/dist/comments/CommentSidePanel.js.map +1 -1
  36. package/dist/comments/CommentThread.cjs +4 -1
  37. package/dist/comments/CommentThread.cjs.map +1 -1
  38. package/dist/comments/CommentThread.d.ts +4 -1
  39. package/dist/comments/CommentThread.d.ts.map +1 -1
  40. package/dist/comments/CommentThread.js +4 -1
  41. package/dist/comments/CommentThread.js.map +1 -1
  42. package/dist/comments/CommentThreadList.cjs +6 -3
  43. package/dist/comments/CommentThreadList.cjs.map +1 -1
  44. package/dist/comments/CommentThreadList.d.ts +7 -2
  45. package/dist/comments/CommentThreadList.d.ts.map +1 -1
  46. package/dist/comments/CommentThreadList.js +6 -3
  47. package/dist/comments/CommentThreadList.js.map +1 -1
  48. package/dist/comments/MentionTextarea.cjs +1 -1
  49. package/dist/comments/MentionTextarea.cjs.map +1 -1
  50. package/dist/comments/MentionTextarea.d.ts.map +1 -1
  51. package/dist/comments/MentionTextarea.js +1 -1
  52. package/dist/comments/MentionTextarea.js.map +1 -1
  53. package/dist/comments/comment-assign.cjs +68 -0
  54. package/dist/comments/comment-assign.cjs.map +1 -0
  55. package/dist/comments/comment-assign.d.ts +31 -0
  56. package/dist/comments/comment-assign.d.ts.map +1 -0
  57. package/dist/comments/comment-assign.js +67 -0
  58. package/dist/comments/comment-assign.js.map +1 -0
  59. package/dist/comments/comment-types.cjs.map +1 -1
  60. package/dist/comments/comment-types.d.ts +39 -0
  61. package/dist/comments/comment-types.d.ts.map +1 -1
  62. package/dist/comments/comment-types.js.map +1 -1
  63. package/dist/comments/comment-utils.cjs +2 -0
  64. package/dist/comments/comment-utils.cjs.map +1 -1
  65. package/dist/comments/comment-utils.d.ts +2 -0
  66. package/dist/comments/comment-utils.d.ts.map +1 -1
  67. package/dist/comments/comment-utils.js +2 -0
  68. package/dist/comments/comment-utils.js.map +1 -1
  69. package/dist/comments.cjs +3 -0
  70. package/dist/comments.d.ts +1 -0
  71. package/dist/comments.d.ts.map +1 -1
  72. package/dist/comments.js +2 -1
  73. package/dist/components/ComboboxMenu.cjs +23 -13
  74. package/dist/components/ComboboxMenu.cjs.map +1 -1
  75. package/dist/components/ComboboxMenu.d.ts.map +1 -1
  76. package/dist/components/ComboboxMenu.js +23 -13
  77. package/dist/components/ComboboxMenu.js.map +1 -1
  78. package/dist/components/FilterBar.cjs +29 -6
  79. package/dist/components/FilterBar.cjs.map +1 -1
  80. package/dist/components/FilterBar.d.ts +3 -1
  81. package/dist/components/FilterBar.d.ts.map +1 -1
  82. package/dist/components/FilterBar.js +29 -6
  83. package/dist/components/FilterBar.js.map +1 -1
  84. package/dist/components/ItemActions.cjs +1 -1
  85. package/dist/components/ItemActions.cjs.map +1 -1
  86. package/dist/components/ItemActions.js +1 -1
  87. package/dist/components/ItemActions.js.map +1 -1
  88. package/dist/components/ListMenu.cjs +33 -3
  89. package/dist/components/ListMenu.cjs.map +1 -1
  90. package/dist/components/ListMenu.d.ts +4 -1
  91. package/dist/components/ListMenu.d.ts.map +1 -1
  92. package/dist/components/ListMenu.js +33 -3
  93. package/dist/components/ListMenu.js.map +1 -1
  94. package/dist/components/ListMenuItems.cjs +80 -0
  95. package/dist/components/ListMenuItems.cjs.map +1 -0
  96. package/dist/components/ListMenuItems.d.ts +8 -0
  97. package/dist/components/ListMenuItems.d.ts.map +1 -0
  98. package/dist/components/ListMenuItems.js +80 -0
  99. package/dist/components/ListMenuItems.js.map +1 -0
  100. package/dist/components/LocalPathPicker.cjs +182 -0
  101. package/dist/components/LocalPathPicker.cjs.map +1 -0
  102. package/dist/components/LocalPathPicker.d.ts +11 -0
  103. package/dist/components/LocalPathPicker.d.ts.map +1 -0
  104. package/dist/components/LocalPathPicker.js +182 -0
  105. package/dist/components/LocalPathPicker.js.map +1 -0
  106. package/dist/components/LocalPathTree.cjs +89 -0
  107. package/dist/components/LocalPathTree.cjs.map +1 -0
  108. package/dist/components/LocalPathTree.d.ts +9 -0
  109. package/dist/components/LocalPathTree.d.ts.map +1 -0
  110. package/dist/components/LocalPathTree.js +89 -0
  111. package/dist/components/LocalPathTree.js.map +1 -0
  112. package/dist/components/RangeSlider.cjs +10 -30
  113. package/dist/components/RangeSlider.cjs.map +1 -1
  114. package/dist/components/RangeSlider.d.ts.map +1 -1
  115. package/dist/components/RangeSlider.js +4 -24
  116. package/dist/components/RangeSlider.js.map +1 -1
  117. package/dist/components/Slider.cjs +79 -0
  118. package/dist/components/Slider.cjs.map +1 -0
  119. package/dist/components/Slider.d.ts +23 -0
  120. package/dist/components/Slider.d.ts.map +1 -0
  121. package/dist/components/Slider.js +79 -0
  122. package/dist/components/Slider.js.map +1 -0
  123. package/dist/components/combobox-types.d.ts +4 -1
  124. package/dist/components/combobox-types.d.ts.map +1 -1
  125. package/dist/components/filter-bar-field-utils.cjs +3 -5
  126. package/dist/components/filter-bar-field-utils.cjs.map +1 -1
  127. package/dist/components/filter-bar-field-utils.d.ts.map +1 -1
  128. package/dist/components/filter-bar-field-utils.js +3 -5
  129. package/dist/components/filter-bar-field-utils.js.map +1 -1
  130. package/dist/components/filter-bar-tree-model.cjs +22 -0
  131. package/dist/components/filter-bar-tree-model.cjs.map +1 -0
  132. package/dist/components/filter-bar-tree-model.d.ts +33 -0
  133. package/dist/components/filter-bar-tree-model.d.ts.map +1 -0
  134. package/dist/components/filter-bar-tree-model.js +21 -0
  135. package/dist/components/filter-bar-tree-model.js.map +1 -0
  136. package/dist/components/filter-bar-tree.cjs +84 -0
  137. package/dist/components/filter-bar-tree.cjs.map +1 -0
  138. package/dist/components/filter-bar-tree.d.ts +7 -0
  139. package/dist/components/filter-bar-tree.d.ts.map +1 -0
  140. package/dist/components/filter-bar-tree.js +84 -0
  141. package/dist/components/filter-bar-tree.js.map +1 -0
  142. package/dist/components/json-schema-form-debug-glyph-map.cjs +2 -0
  143. package/dist/components/json-schema-form-debug-glyph-map.cjs.map +1 -1
  144. package/dist/components/json-schema-form-debug-glyph-map.d.ts.map +1 -1
  145. package/dist/components/json-schema-form-debug-glyph-map.js +2 -0
  146. package/dist/components/json-schema-form-debug-glyph-map.js.map +1 -1
  147. package/dist/components/json-schema-form-help-links.cjs +18 -0
  148. package/dist/components/json-schema-form-help-links.cjs.map +1 -0
  149. package/dist/components/json-schema-form-help-links.d.ts +5 -0
  150. package/dist/components/json-schema-form-help-links.d.ts.map +1 -0
  151. package/dist/components/json-schema-form-help-links.js +18 -0
  152. package/dist/components/json-schema-form-help-links.js.map +1 -0
  153. package/dist/components/json-schema-form-help-model.cjs +7 -0
  154. package/dist/components/json-schema-form-help-model.cjs.map +1 -0
  155. package/dist/components/json-schema-form-help-model.d.ts +3 -0
  156. package/dist/components/json-schema-form-help-model.d.ts.map +1 -0
  157. package/dist/components/json-schema-form-help-model.js +7 -0
  158. package/dist/components/json-schema-form-help-model.js.map +1 -0
  159. package/dist/components/json-schema-form-json.cjs +48 -0
  160. package/dist/components/json-schema-form-json.cjs.map +1 -0
  161. package/dist/components/json-schema-form-json.d.ts +7 -0
  162. package/dist/components/json-schema-form-json.d.ts.map +1 -0
  163. package/dist/components/json-schema-form-json.js +48 -0
  164. package/dist/components/json-schema-form-json.js.map +1 -0
  165. package/dist/components/json-schema-form-layout.cjs +7 -5
  166. package/dist/components/json-schema-form-layout.cjs.map +1 -1
  167. package/dist/components/json-schema-form-layout.d.ts +2 -2
  168. package/dist/components/json-schema-form-layout.d.ts.map +1 -1
  169. package/dist/components/json-schema-form-layout.js +7 -5
  170. package/dist/components/json-schema-form-layout.js.map +1 -1
  171. package/dist/components/json-schema-form-object.cjs +2 -13
  172. package/dist/components/json-schema-form-object.cjs.map +1 -1
  173. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  174. package/dist/components/json-schema-form-object.js +2 -13
  175. package/dist/components/json-schema-form-object.js.map +1 -1
  176. package/dist/components/json-schema-form-refs.cjs +1 -1
  177. package/dist/components/json-schema-form-refs.cjs.map +1 -1
  178. package/dist/components/json-schema-form-refs.d.ts.map +1 -1
  179. package/dist/components/json-schema-form-refs.js +1 -1
  180. package/dist/components/json-schema-form-refs.js.map +1 -1
  181. package/dist/components/json-schema-form-render.cjs +20 -6
  182. package/dist/components/json-schema-form-render.cjs.map +1 -1
  183. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  184. package/dist/components/json-schema-form-render.js +20 -6
  185. package/dist/components/json-schema-form-render.js.map +1 -1
  186. package/dist/components/json-schema-form-resolve.cjs +22 -2
  187. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  188. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  189. package/dist/components/json-schema-form-resolve.js +22 -2
  190. package/dist/components/json-schema-form-resolve.js.map +1 -1
  191. package/dist/components/json-schema-form-types.d.ts +5 -1
  192. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  193. package/dist/components/json-schema-form-union-model.cjs +46 -0
  194. package/dist/components/json-schema-form-union-model.cjs.map +1 -0
  195. package/dist/components/json-schema-form-union-model.d.ts +6 -0
  196. package/dist/components/json-schema-form-union-model.d.ts.map +1 -0
  197. package/dist/components/json-schema-form-union-model.js +43 -0
  198. package/dist/components/json-schema-form-union-model.js.map +1 -0
  199. package/dist/components/json-schema-form-union.cjs +52 -0
  200. package/dist/components/json-schema-form-union.cjs.map +1 -0
  201. package/dist/components/json-schema-form-union.d.ts +7 -0
  202. package/dist/components/json-schema-form-union.d.ts.map +1 -0
  203. package/dist/components/json-schema-form-union.js +52 -0
  204. package/dist/components/json-schema-form-union.js.map +1 -0
  205. package/dist/components/list-menu-virtual.cjs +5 -0
  206. package/dist/components/list-menu-virtual.cjs.map +1 -0
  207. package/dist/components/list-menu-virtual.d.ts +12 -0
  208. package/dist/components/list-menu-virtual.d.ts.map +1 -0
  209. package/dist/components/list-menu-virtual.js +6 -0
  210. package/dist/components/list-menu-virtual.js.map +1 -0
  211. package/dist/components/local-path.cjs +12 -0
  212. package/dist/components/local-path.cjs.map +1 -0
  213. package/dist/components/local-path.d.ts +14 -0
  214. package/dist/components/local-path.d.ts.map +1 -0
  215. package/dist/components/local-path.js +12 -0
  216. package/dist/components/local-path.js.map +1 -0
  217. package/dist/components/slider-shared.cjs +32 -0
  218. package/dist/components/slider-shared.cjs.map +1 -0
  219. package/dist/components/slider-shared.d.ts +18 -0
  220. package/dist/components/slider-shared.d.ts.map +1 -0
  221. package/dist/components/slider-shared.js +27 -0
  222. package/dist/components/slider-shared.js.map +1 -0
  223. package/dist/components.cjs +8 -0
  224. package/dist/components.d.ts +6 -1
  225. package/dist/components.d.ts.map +1 -1
  226. package/dist/components.js +5 -1
  227. package/dist/connections/ConnectionsPage.cjs +51 -19
  228. package/dist/connections/ConnectionsPage.cjs.map +1 -1
  229. package/dist/connections/ConnectionsPage.d.ts +9 -1
  230. package/dist/connections/ConnectionsPage.d.ts.map +1 -1
  231. package/dist/connections/ConnectionsPage.js +52 -20
  232. package/dist/connections/ConnectionsPage.js.map +1 -1
  233. package/dist/connections/connectionDashboard.cjs +13 -8
  234. package/dist/connections/connectionDashboard.cjs.map +1 -1
  235. package/dist/connections/connectionDashboard.d.ts +8 -3
  236. package/dist/connections/connectionDashboard.d.ts.map +1 -1
  237. package/dist/connections/connectionDashboard.js +14 -9
  238. package/dist/connections/connectionDashboard.js.map +1 -1
  239. package/dist/connections/connectionDashboardModel.cjs.map +1 -1
  240. package/dist/connections/connectionDashboardModel.d.ts +4 -0
  241. package/dist/connections/connectionDashboardModel.d.ts.map +1 -1
  242. package/dist/connections/connectionDashboardModel.js.map +1 -1
  243. package/dist/connections/connectionDashboardRow.cjs +75 -55
  244. package/dist/connections/connectionDashboardRow.cjs.map +1 -1
  245. package/dist/connections/connectionDashboardRow.d.ts +3 -2
  246. package/dist/connections/connectionDashboardRow.d.ts.map +1 -1
  247. package/dist/connections/connectionDashboardRow.js +75 -55
  248. package/dist/connections/connectionDashboardRow.js.map +1 -1
  249. package/dist/connections/connectionNamespaceField.cjs +17 -0
  250. package/dist/connections/connectionNamespaceField.cjs.map +1 -0
  251. package/dist/connections/connectionNamespaceField.d.ts +10 -0
  252. package/dist/connections/connectionNamespaceField.d.ts.map +1 -0
  253. package/dist/connections/connectionNamespaceField.js +17 -0
  254. package/dist/connections/connectionNamespaceField.js.map +1 -0
  255. package/dist/connections/connectionSchemaFormExtensions.cjs +98 -0
  256. package/dist/connections/connectionSchemaFormExtensions.cjs.map +1 -0
  257. package/dist/connections/connectionSchemaFormExtensions.d.ts +41 -0
  258. package/dist/connections/connectionSchemaFormExtensions.d.ts.map +1 -0
  259. package/dist/connections/connectionSchemaFormExtensions.js +96 -0
  260. package/dist/connections/connectionSchemaFormExtensions.js.map +1 -0
  261. package/dist/connections/connectionsPageModel.cjs +11 -0
  262. package/dist/connections/connectionsPageModel.cjs.map +1 -1
  263. package/dist/connections/connectionsPageModel.d.ts +5 -0
  264. package/dist/connections/connectionsPageModel.d.ts.map +1 -1
  265. package/dist/connections/connectionsPageModel.js +11 -1
  266. package/dist/connections/connectionsPageModel.js.map +1 -1
  267. package/dist/connections.cjs +5 -0
  268. package/dist/connections.d.ts +2 -1
  269. package/dist/connections.d.ts.map +1 -1
  270. package/dist/connections.js +3 -2
  271. package/dist/data/AvatarBadge.cjs +3 -3
  272. package/dist/data/AvatarBadge.cjs.map +1 -1
  273. package/dist/data/AvatarBadge.js +3 -3
  274. package/dist/data/AvatarBadge.js.map +1 -1
  275. package/dist/data/CodeDiff.cjs +2 -0
  276. package/dist/data/CodeDiff.cjs.map +1 -1
  277. package/dist/data/CodeDiff.js +2 -0
  278. package/dist/data/CodeDiff.js.map +1 -1
  279. package/dist/data/DataTable.cjs +3 -2
  280. package/dist/data/DataTable.cjs.map +1 -1
  281. package/dist/data/DataTable.d.ts.map +1 -1
  282. package/dist/data/DataTable.js +3 -2
  283. package/dist/data/DataTable.js.map +1 -1
  284. package/dist/data/Gauge.cjs +1 -1
  285. package/dist/data/Gauge.cjs.map +1 -1
  286. package/dist/data/Gauge.js +1 -1
  287. package/dist/data/Gauge.js.map +1 -1
  288. package/dist/data/HighlightedTokens.cjs +2 -10
  289. package/dist/data/HighlightedTokens.cjs.map +1 -1
  290. package/dist/data/HighlightedTokens.d.ts.map +1 -1
  291. package/dist/data/HighlightedTokens.js +1 -9
  292. package/dist/data/HighlightedTokens.js.map +1 -1
  293. package/dist/data/Markdown.cjs +38 -11
  294. package/dist/data/Markdown.cjs.map +1 -1
  295. package/dist/data/Markdown.d.ts +9 -1
  296. package/dist/data/Markdown.d.ts.map +1 -1
  297. package/dist/data/Markdown.js +39 -12
  298. package/dist/data/Markdown.js.map +1 -1
  299. package/dist/data/MultiGaugeBar.cjs +157 -0
  300. package/dist/data/MultiGaugeBar.cjs.map +1 -0
  301. package/dist/data/MultiGaugeBar.d.ts +29 -0
  302. package/dist/data/MultiGaugeBar.d.ts.map +1 -0
  303. package/dist/data/MultiGaugeBar.js +157 -0
  304. package/dist/data/MultiGaugeBar.js.map +1 -0
  305. package/dist/data/OpenInFilesLink.cjs +27 -0
  306. package/dist/data/OpenInFilesLink.cjs.map +1 -0
  307. package/dist/data/OpenInFilesLink.d.ts +15 -0
  308. package/dist/data/OpenInFilesLink.d.ts.map +1 -0
  309. package/dist/data/OpenInFilesLink.js +27 -0
  310. package/dist/data/OpenInFilesLink.js.map +1 -0
  311. package/dist/data/ProgressBar.cjs +5 -3
  312. package/dist/data/ProgressBar.cjs.map +1 -1
  313. package/dist/data/ProgressBar.d.ts +5 -1
  314. package/dist/data/ProgressBar.d.ts.map +1 -1
  315. package/dist/data/ProgressBar.js +5 -3
  316. package/dist/data/ProgressBar.js.map +1 -1
  317. package/dist/data/ProgressBars.cjs +13 -5
  318. package/dist/data/ProgressBars.cjs.map +1 -1
  319. package/dist/data/ProgressBars.d.ts +6 -1
  320. package/dist/data/ProgressBars.d.ts.map +1 -1
  321. package/dist/data/ProgressBars.js +13 -5
  322. package/dist/data/ProgressBars.js.map +1 -1
  323. package/dist/data/Properties.cjs +3 -3
  324. package/dist/data/Properties.cjs.map +1 -1
  325. package/dist/data/Properties.js +3 -3
  326. package/dist/data/Properties.js.map +1 -1
  327. package/dist/data/TaskProgress.cjs +14 -6
  328. package/dist/data/TaskProgress.cjs.map +1 -1
  329. package/dist/data/TaskProgress.d.ts +3 -1
  330. package/dist/data/TaskProgress.d.ts.map +1 -1
  331. package/dist/data/TaskProgress.js +14 -6
  332. package/dist/data/TaskProgress.js.map +1 -1
  333. package/dist/data/TaskPrompts.cjs +96 -0
  334. package/dist/data/TaskPrompts.cjs.map +1 -0
  335. package/dist/data/TaskPrompts.d.ts +6 -0
  336. package/dist/data/TaskPrompts.d.ts.map +1 -0
  337. package/dist/data/TaskPrompts.js +96 -0
  338. package/dist/data/TaskPrompts.js.map +1 -0
  339. package/dist/data/TaskSnapshot.cjs.map +1 -1
  340. package/dist/data/TaskSnapshot.d.ts +3 -0
  341. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  342. package/dist/data/TaskSnapshot.js.map +1 -1
  343. package/dist/data/TimeseriesCoreBars.cjs +7 -3
  344. package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
  345. package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
  346. package/dist/data/TimeseriesCoreBars.js +8 -4
  347. package/dist/data/TimeseriesCoreBars.js.map +1 -1
  348. package/dist/data/TimeseriesGauge.cjs +12 -5
  349. package/dist/data/TimeseriesGauge.cjs.map +1 -1
  350. package/dist/data/TimeseriesGauge.d.ts.map +1 -1
  351. package/dist/data/TimeseriesGauge.js +13 -6
  352. package/dist/data/TimeseriesGauge.js.map +1 -1
  353. package/dist/data/TimeseriesPanel.cjs +10 -9
  354. package/dist/data/TimeseriesPanel.cjs.map +1 -1
  355. package/dist/data/TimeseriesPanel.d.ts +1 -1
  356. package/dist/data/TimeseriesPanel.d.ts.map +1 -1
  357. package/dist/data/TimeseriesPanel.js +11 -10
  358. package/dist/data/TimeseriesPanel.js.map +1 -1
  359. package/dist/data/TimeseriesPanel.model.cjs +62 -10
  360. package/dist/data/TimeseriesPanel.model.cjs.map +1 -1
  361. package/dist/data/TimeseriesPanel.model.d.ts +40 -1
  362. package/dist/data/TimeseriesPanel.model.d.ts.map +1 -1
  363. package/dist/data/TimeseriesPanel.model.js +62 -11
  364. package/dist/data/TimeseriesPanel.model.js.map +1 -1
  365. package/dist/data/WorkloadCard.cjs +7 -3
  366. package/dist/data/WorkloadCard.cjs.map +1 -1
  367. package/dist/data/WorkloadCard.d.ts +3 -1
  368. package/dist/data/WorkloadCard.d.ts.map +1 -1
  369. package/dist/data/WorkloadCard.js +7 -3
  370. package/dist/data/WorkloadCard.js.map +1 -1
  371. package/dist/data/WorkloadCard.model.cjs.map +1 -1
  372. package/dist/data/WorkloadCard.model.d.ts +2 -0
  373. package/dist/data/WorkloadCard.model.d.ts.map +1 -1
  374. package/dist/data/WorkloadCard.model.js.map +1 -1
  375. package/dist/data/ai/ChatWindow.placement.cjs +2 -1
  376. package/dist/data/ai/ChatWindow.placement.cjs.map +1 -1
  377. package/dist/data/ai/ChatWindow.placement.d.ts +1 -1
  378. package/dist/data/ai/ChatWindow.placement.d.ts.map +1 -1
  379. package/dist/data/ai/ChatWindow.placement.js +2 -1
  380. package/dist/data/ai/ChatWindow.placement.js.map +1 -1
  381. package/dist/data/ai/SpecRuntimeBar.cjs +2 -2
  382. package/dist/data/ai/SpecRuntimeBar.cjs.map +1 -1
  383. package/dist/data/ai/SpecRuntimeBar.d.ts +4 -1
  384. package/dist/data/ai/SpecRuntimeBar.d.ts.map +1 -1
  385. package/dist/data/ai/SpecRuntimeBar.js +2 -2
  386. package/dist/data/ai/SpecRuntimeBar.js.map +1 -1
  387. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +1 -1
  388. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
  389. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +1 -1
  390. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
  391. package/dist/data/ai/SpecRuntimeEditor.model.cjs +2 -2
  392. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
  393. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +2 -2
  394. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
  395. package/dist/data/ai/SpecRuntimeEditor.model.js +2 -2
  396. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
  397. package/dist/data/ai/ThreadPicker.cjs +2 -2
  398. package/dist/data/ai/ThreadPicker.cjs.map +1 -1
  399. package/dist/data/ai/ThreadPicker.js +2 -2
  400. package/dist/data/ai/ThreadPicker.js.map +1 -1
  401. package/dist/data/ai/index.d.ts +2 -0
  402. package/dist/data/ai/index.d.ts.map +1 -1
  403. package/dist/data/ai/use-prompt-run-stream.cjs +126 -0
  404. package/dist/data/ai/use-prompt-run-stream.cjs.map +1 -0
  405. package/dist/data/ai/use-prompt-run-stream.d.ts +52 -0
  406. package/dist/data/ai/use-prompt-run-stream.d.ts.map +1 -0
  407. package/dist/data/ai/use-prompt-run-stream.js +126 -0
  408. package/dist/data/ai/use-prompt-run-stream.js.map +1 -0
  409. package/dist/data/cache-browser/CacheBrowser.cjs +1 -0
  410. package/dist/data/cache-browser/CacheBrowser.cjs.map +1 -1
  411. package/dist/data/cache-browser/CacheBrowser.d.ts.map +1 -1
  412. package/dist/data/cache-browser/CacheBrowser.js +1 -0
  413. package/dist/data/cache-browser/CacheBrowser.js.map +1 -1
  414. package/dist/data/charts/BarChart.cjs +194 -0
  415. package/dist/data/charts/BarChart.cjs.map +1 -0
  416. package/dist/data/charts/BarChart.d.ts +19 -0
  417. package/dist/data/charts/BarChart.d.ts.map +1 -0
  418. package/dist/data/charts/BarChart.js +194 -0
  419. package/dist/data/charts/BarChart.js.map +1 -0
  420. package/dist/data/charts/ChartLegend.cjs +54 -0
  421. package/dist/data/charts/ChartLegend.cjs.map +1 -0
  422. package/dist/data/charts/ChartLegend.d.ts +17 -0
  423. package/dist/data/charts/ChartLegend.d.ts.map +1 -0
  424. package/dist/data/charts/ChartLegend.js +54 -0
  425. package/dist/data/charts/ChartLegend.js.map +1 -0
  426. package/dist/data/charts/Sparkline.cjs +56 -0
  427. package/dist/data/charts/Sparkline.cjs.map +1 -0
  428. package/dist/data/charts/Sparkline.d.ts +15 -0
  429. package/dist/data/charts/Sparkline.d.ts.map +1 -0
  430. package/dist/data/charts/Sparkline.js +56 -0
  431. package/dist/data/charts/Sparkline.js.map +1 -0
  432. package/dist/data/charts/StackedBarChart.cjs +241 -0
  433. package/dist/data/charts/StackedBarChart.cjs.map +1 -0
  434. package/dist/data/charts/StackedBarChart.d.ts +20 -0
  435. package/dist/data/charts/StackedBarChart.d.ts.map +1 -0
  436. package/dist/data/charts/StackedBarChart.js +241 -0
  437. package/dist/data/charts/StackedBarChart.js.map +1 -0
  438. package/dist/data/charts/TrendChart.cjs +157 -0
  439. package/dist/data/charts/TrendChart.cjs.map +1 -0
  440. package/dist/data/charts/TrendChart.d.ts +20 -0
  441. package/dist/data/charts/TrendChart.d.ts.map +1 -0
  442. package/dist/data/charts/TrendChart.js +157 -0
  443. package/dist/data/charts/TrendChart.js.map +1 -0
  444. package/dist/data/charts/chart-marks.cjs +115 -0
  445. package/dist/data/charts/chart-marks.cjs.map +1 -0
  446. package/dist/data/charts/chart-marks.d.ts +39 -0
  447. package/dist/data/charts/chart-marks.d.ts.map +1 -0
  448. package/dist/data/charts/chart-marks.js +112 -0
  449. package/dist/data/charts/chart-marks.js.map +1 -0
  450. package/dist/data/charts/chart-palette.cjs +74 -0
  451. package/dist/data/charts/chart-palette.cjs.map +1 -0
  452. package/dist/data/charts/chart-palette.d.ts +58 -0
  453. package/dist/data/charts/chart-palette.d.ts.map +1 -0
  454. package/dist/data/charts/chart-palette.js +72 -0
  455. package/dist/data/charts/chart-palette.js.map +1 -0
  456. package/dist/data/charts/chart-scale.cjs +115 -0
  457. package/dist/data/charts/chart-scale.cjs.map +1 -0
  458. package/dist/data/charts/chart-scale.d.ts +41 -0
  459. package/dist/data/charts/chart-scale.d.ts.map +1 -0
  460. package/dist/data/charts/chart-scale.js +104 -0
  461. package/dist/data/charts/chart-scale.js.map +1 -0
  462. package/dist/data/charts/chart.test-utils.d.ts +7 -0
  463. package/dist/data/charts/chart.test-utils.d.ts.map +1 -0
  464. package/dist/data/charts/index.d.ts +7 -0
  465. package/dist/data/charts/index.d.ts.map +1 -0
  466. package/dist/data/chat/MessageActions.cjs +1 -1
  467. package/dist/data/chat/MessageActions.cjs.map +1 -1
  468. package/dist/data/chat/MessageActions.js +1 -1
  469. package/dist/data/chat/MessageActions.js.map +1 -1
  470. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +1 -1
  471. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +1 -1
  472. package/dist/data/diagnostics/DiagnosticsTree.cjs +1 -1
  473. package/dist/data/diagnostics/DiagnosticsTree.cjs.map +1 -1
  474. package/dist/data/diagnostics/DiagnosticsTree.js +1 -1
  475. package/dist/data/diagnostics/DiagnosticsTree.js.map +1 -1
  476. package/dist/data/diagnostics/FrameSourceWindow.cjs +9 -2
  477. package/dist/data/diagnostics/FrameSourceWindow.cjs.map +1 -1
  478. package/dist/data/diagnostics/FrameSourceWindow.d.ts +1 -1
  479. package/dist/data/diagnostics/FrameSourceWindow.d.ts.map +1 -1
  480. package/dist/data/diagnostics/FrameSourceWindow.js +9 -2
  481. package/dist/data/diagnostics/FrameSourceWindow.js.map +1 -1
  482. package/dist/data/diagnostics/ProblemActions.cjs +37 -0
  483. package/dist/data/diagnostics/ProblemActions.cjs.map +1 -0
  484. package/dist/data/diagnostics/ProblemActions.d.ts +6 -0
  485. package/dist/data/diagnostics/ProblemActions.d.ts.map +1 -0
  486. package/dist/data/diagnostics/ProblemActions.js +37 -0
  487. package/dist/data/diagnostics/ProblemActions.js.map +1 -0
  488. package/dist/data/diagnostics/ProblemFacet.cjs +33 -0
  489. package/dist/data/diagnostics/ProblemFacet.cjs.map +1 -0
  490. package/dist/data/diagnostics/ProblemFacet.d.ts +9 -0
  491. package/dist/data/diagnostics/ProblemFacet.d.ts.map +1 -0
  492. package/dist/data/diagnostics/ProblemFacet.js +33 -0
  493. package/dist/data/diagnostics/ProblemFacet.js.map +1 -0
  494. package/dist/data/diagnostics/ProblemRow.cjs +62 -0
  495. package/dist/data/diagnostics/ProblemRow.cjs.map +1 -0
  496. package/dist/data/diagnostics/ProblemRow.d.ts +14 -0
  497. package/dist/data/diagnostics/ProblemRow.d.ts.map +1 -0
  498. package/dist/data/diagnostics/ProblemRow.js +62 -0
  499. package/dist/data/diagnostics/ProblemRow.js.map +1 -0
  500. package/dist/data/diagnostics/ProblemViewOptions.cjs +18 -0
  501. package/dist/data/diagnostics/ProblemViewOptions.cjs.map +1 -0
  502. package/dist/data/diagnostics/ProblemViewOptions.d.ts +6 -0
  503. package/dist/data/diagnostics/ProblemViewOptions.d.ts.map +1 -0
  504. package/dist/data/diagnostics/ProblemViewOptions.js +18 -0
  505. package/dist/data/diagnostics/ProblemViewOptions.js.map +1 -0
  506. package/dist/data/diagnostics/StackFrameRow.cjs +1 -1
  507. package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
  508. package/dist/data/diagnostics/StackFrameRow.js +1 -1
  509. package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
  510. package/dist/data/diagnostics/diagnostic-identity.cjs +14 -0
  511. package/dist/data/diagnostics/diagnostic-identity.cjs.map +1 -0
  512. package/dist/data/diagnostics/diagnostic-identity.d.ts +3 -0
  513. package/dist/data/diagnostics/diagnostic-identity.d.ts.map +1 -0
  514. package/dist/data/diagnostics/diagnostic-identity.js +14 -0
  515. package/dist/data/diagnostics/diagnostic-identity.js.map +1 -0
  516. package/dist/data/diagnostics/use-problem-expansion.cjs +16 -0
  517. package/dist/data/diagnostics/use-problem-expansion.cjs.map +1 -0
  518. package/dist/data/diagnostics/use-problem-expansion.d.ts +3 -0
  519. package/dist/data/diagnostics/use-problem-expansion.d.ts.map +1 -0
  520. package/dist/data/diagnostics/use-problem-expansion.js +16 -0
  521. package/dist/data/diagnostics/use-problem-expansion.js.map +1 -0
  522. package/dist/data/git/GitChangeList.cjs +9 -6
  523. package/dist/data/git/GitChangeList.cjs.map +1 -1
  524. package/dist/data/git/GitChangeList.d.ts +6 -0
  525. package/dist/data/git/GitChangeList.d.ts.map +1 -1
  526. package/dist/data/git/GitChangeList.js +9 -6
  527. package/dist/data/git/GitChangeList.js.map +1 -1
  528. package/dist/data/git/pickers/GitPickersDemo.d.ts.map +1 -1
  529. package/dist/data/git/pickers/ReferencePicker.cjs +1 -0
  530. package/dist/data/git/pickers/ReferencePicker.cjs.map +1 -1
  531. package/dist/data/git/pickers/ReferencePicker.js +1 -0
  532. package/dist/data/git/pickers/ReferencePicker.js.map +1 -1
  533. package/dist/data/lint/LintDetail.cjs +230 -189
  534. package/dist/data/lint/LintDetail.cjs.map +1 -1
  535. package/dist/data/lint/LintDetail.d.ts +25 -3
  536. package/dist/data/lint/LintDetail.d.ts.map +1 -1
  537. package/dist/data/lint/LintDetail.js +231 -192
  538. package/dist/data/lint/LintDetail.js.map +1 -1
  539. package/dist/data/lint/LintFilterBar.cjs +78 -83
  540. package/dist/data/lint/LintFilterBar.cjs.map +1 -1
  541. package/dist/data/lint/LintFilterBar.d.ts +23 -6
  542. package/dist/data/lint/LintFilterBar.d.ts.map +1 -1
  543. package/dist/data/lint/LintFilterBar.js +78 -85
  544. package/dist/data/lint/LintFilterBar.js.map +1 -1
  545. package/dist/data/lint/LintIgnoreMenu.cjs +59 -0
  546. package/dist/data/lint/LintIgnoreMenu.cjs.map +1 -0
  547. package/dist/data/lint/LintIgnoreMenu.d.ts +20 -0
  548. package/dist/data/lint/LintIgnoreMenu.d.ts.map +1 -0
  549. package/dist/data/lint/LintIgnoreMenu.js +58 -0
  550. package/dist/data/lint/LintIgnoreMenu.js.map +1 -0
  551. package/dist/data/lint/LintResults.cjs +59 -14
  552. package/dist/data/lint/LintResults.cjs.map +1 -1
  553. package/dist/data/lint/LintResults.d.ts +25 -1
  554. package/dist/data/lint/LintResults.d.ts.map +1 -1
  555. package/dist/data/lint/LintResults.fixtures.d.ts +19 -0
  556. package/dist/data/lint/LintResults.fixtures.d.ts.map +1 -1
  557. package/dist/data/lint/LintResults.js +60 -15
  558. package/dist/data/lint/LintResults.js.map +1 -1
  559. package/dist/data/lint/LintTable.cjs +156 -0
  560. package/dist/data/lint/LintTable.cjs.map +1 -0
  561. package/dist/data/lint/LintTable.d.ts +13 -0
  562. package/dist/data/lint/LintTable.d.ts.map +1 -0
  563. package/dist/data/lint/LintTable.js +156 -0
  564. package/dist/data/lint/LintTable.js.map +1 -0
  565. package/dist/data/lint/LintTreeNode.cjs +42 -19
  566. package/dist/data/lint/LintTreeNode.cjs.map +1 -1
  567. package/dist/data/lint/LintTreeNode.d.ts +7 -2
  568. package/dist/data/lint/LintTreeNode.d.ts.map +1 -1
  569. package/dist/data/lint/LintTreeNode.js +44 -21
  570. package/dist/data/lint/LintTreeNode.js.map +1 -1
  571. package/dist/data/lint/ViolationSnippet.cjs +113 -0
  572. package/dist/data/lint/ViolationSnippet.cjs.map +1 -0
  573. package/dist/data/lint/ViolationSnippet.d.ts +20 -0
  574. package/dist/data/lint/ViolationSnippet.d.ts.map +1 -0
  575. package/dist/data/lint/ViolationSnippet.js +112 -0
  576. package/dist/data/lint/ViolationSnippet.js.map +1 -0
  577. package/dist/data/lint/actions.cjs +44 -16
  578. package/dist/data/lint/actions.cjs.map +1 -1
  579. package/dist/data/lint/actions.d.ts +7 -3
  580. package/dist/data/lint/actions.d.ts.map +1 -1
  581. package/dist/data/lint/actions.js +44 -16
  582. package/dist/data/lint/actions.js.map +1 -1
  583. package/dist/data/lint/grouping.cjs +105 -8
  584. package/dist/data/lint/grouping.cjs.map +1 -1
  585. package/dist/data/lint/grouping.d.ts +21 -1
  586. package/dist/data/lint/grouping.d.ts.map +1 -1
  587. package/dist/data/lint/grouping.js +105 -10
  588. package/dist/data/lint/grouping.js.map +1 -1
  589. package/dist/data/lint/ignore-menu-items.cjs +18 -0
  590. package/dist/data/lint/ignore-menu-items.cjs.map +1 -0
  591. package/dist/data/lint/ignore-menu-items.d.ts +6 -0
  592. package/dist/data/lint/ignore-menu-items.d.ts.map +1 -0
  593. package/dist/data/lint/ignore-menu-items.js +17 -0
  594. package/dist/data/lint/ignore-menu-items.js.map +1 -0
  595. package/dist/data/lint/index.d.ts +7 -5
  596. package/dist/data/lint/index.d.ts.map +1 -1
  597. package/dist/data/lint/stats.cjs +19 -4
  598. package/dist/data/lint/stats.cjs.map +1 -1
  599. package/dist/data/lint/stats.d.ts +13 -3
  600. package/dist/data/lint/stats.d.ts.map +1 -1
  601. package/dist/data/lint/stats.js +17 -5
  602. package/dist/data/lint/stats.js.map +1 -1
  603. package/dist/data/lint/types.cjs +8 -0
  604. package/dist/data/lint/types.cjs.map +1 -1
  605. package/dist/data/lint/types.d.ts +47 -0
  606. package/dist/data/lint/types.d.ts.map +1 -1
  607. package/dist/data/lint/types.js +8 -1
  608. package/dist/data/lint/types.js.map +1 -1
  609. package/dist/data/lint/violation-menu-items.cjs +31 -0
  610. package/dist/data/lint/violation-menu-items.cjs.map +1 -0
  611. package/dist/data/lint/violation-menu-items.d.ts +12 -0
  612. package/dist/data/lint/violation-menu-items.d.ts.map +1 -0
  613. package/dist/data/lint/violation-menu-items.js +31 -0
  614. package/dist/data/lint/violation-menu-items.js.map +1 -0
  615. package/dist/data/markdown-source-blocks.cjs +38 -0
  616. package/dist/data/markdown-source-blocks.cjs.map +1 -0
  617. package/dist/data/markdown-source-blocks.d.ts +32 -0
  618. package/dist/data/markdown-source-blocks.d.ts.map +1 -0
  619. package/dist/data/markdown-source-blocks.js +35 -0
  620. package/dist/data/markdown-source-blocks.js.map +1 -0
  621. package/dist/data/test-runner/FilterFacet.cjs +52 -0
  622. package/dist/data/test-runner/FilterFacet.cjs.map +1 -0
  623. package/dist/data/test-runner/FilterFacet.d.ts +13 -0
  624. package/dist/data/test-runner/FilterFacet.d.ts.map +1 -0
  625. package/dist/data/test-runner/FilterFacet.js +52 -0
  626. package/dist/data/test-runner/FilterFacet.js.map +1 -0
  627. package/dist/data/test-runner/MatrixMarks.cjs +19 -29
  628. package/dist/data/test-runner/MatrixMarks.cjs.map +1 -1
  629. package/dist/data/test-runner/MatrixMarks.d.ts +4 -4
  630. package/dist/data/test-runner/MatrixMarks.d.ts.map +1 -1
  631. package/dist/data/test-runner/MatrixMarks.js +19 -29
  632. package/dist/data/test-runner/MatrixMarks.js.map +1 -1
  633. package/dist/data/test-runner/TestAttemptDetail.cjs +1 -1
  634. package/dist/data/test-runner/TestAttemptDetail.js +1 -1
  635. package/dist/data/test-runner/TestDetailPanel.cjs +11 -0
  636. package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
  637. package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
  638. package/dist/data/test-runner/TestDetailPanel.js +11 -0
  639. package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
  640. package/dist/data/test-runner/TestFilterBar.cjs +3 -44
  641. package/dist/data/test-runner/TestFilterBar.cjs.map +1 -1
  642. package/dist/data/test-runner/TestFilterBar.d.ts.map +1 -1
  643. package/dist/data/test-runner/TestFilterBar.js +3 -44
  644. package/dist/data/test-runner/TestFilterBar.js.map +1 -1
  645. package/dist/data/test-runner/TestRunner.cjs +3 -1
  646. package/dist/data/test-runner/TestRunner.cjs.map +1 -1
  647. package/dist/data/test-runner/TestRunner.d.ts +7 -1
  648. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  649. package/dist/data/test-runner/TestRunner.js +3 -1
  650. package/dist/data/test-runner/TestRunner.js.map +1 -1
  651. package/dist/data/test-runner/context.cjs.map +1 -1
  652. package/dist/data/test-runner/context.d.ts +3 -0
  653. package/dist/data/test-runner/context.d.ts.map +1 -1
  654. package/dist/data/test-runner/context.js.map +1 -1
  655. package/dist/data/test-runner/types.d.ts +2 -0
  656. package/dist/data/test-runner/types.d.ts.map +1 -1
  657. package/dist/data/timeseries-query.cjs +98 -2
  658. package/dist/data/timeseries-query.cjs.map +1 -1
  659. package/dist/data/timeseries-query.d.ts +31 -5
  660. package/dist/data/timeseries-query.d.ts.map +1 -1
  661. package/dist/data/timeseries-query.js +98 -3
  662. package/dist/data/timeseries-query.js.map +1 -1
  663. package/dist/data/timeseries-stream-provider.cjs +38 -0
  664. package/dist/data/timeseries-stream-provider.cjs.map +1 -0
  665. package/dist/data/timeseries-stream-provider.d.ts +26 -0
  666. package/dist/data/timeseries-stream-provider.d.ts.map +1 -0
  667. package/dist/data/timeseries-stream-provider.js +38 -0
  668. package/dist/data/timeseries-stream-provider.js.map +1 -0
  669. package/dist/data/timeseries-stream.cjs +304 -0
  670. package/dist/data/timeseries-stream.cjs.map +1 -0
  671. package/dist/data/timeseries-stream.d.ts +81 -0
  672. package/dist/data/timeseries-stream.d.ts.map +1 -0
  673. package/dist/data/timeseries-stream.fixtures.d.ts +36 -0
  674. package/dist/data/timeseries-stream.fixtures.d.ts.map +1 -0
  675. package/dist/data/timeseries-stream.js +296 -0
  676. package/dist/data/timeseries-stream.js.map +1 -0
  677. package/dist/data/token-style.cjs +13 -0
  678. package/dist/data/token-style.cjs.map +1 -0
  679. package/dist/data/token-style.d.ts +4 -0
  680. package/dist/data/token-style.d.ts.map +1 -0
  681. package/dist/data/token-style.js +13 -0
  682. package/dist/data/token-style.js.map +1 -0
  683. package/dist/data/traces/ProcessTraceDetail.cjs +1 -1
  684. package/dist/data/traces/ProcessTraceDetail.js +1 -1
  685. package/dist/data/traces/index.d.ts +1 -1
  686. package/dist/data/traces/index.d.ts.map +1 -1
  687. package/dist/data/use-data-table-virtual.d.ts +1 -1
  688. package/dist/data/version-info.cjs +3 -3
  689. package/dist/data/version-info.js +3 -3
  690. package/dist/data/workload-panel/MemoryStack.cjs +49 -0
  691. package/dist/data/workload-panel/MemoryStack.cjs.map +1 -0
  692. package/dist/data/workload-panel/MemoryStack.d.ts +11 -0
  693. package/dist/data/workload-panel/MemoryStack.d.ts.map +1 -0
  694. package/dist/data/workload-panel/MemoryStack.js +48 -0
  695. package/dist/data/workload-panel/MemoryStack.js.map +1 -0
  696. package/dist/data/workload-panel/Metrics.cjs +197 -0
  697. package/dist/data/workload-panel/Metrics.cjs.map +1 -0
  698. package/dist/data/workload-panel/Metrics.d.ts +11 -0
  699. package/dist/data/workload-panel/Metrics.d.ts.map +1 -0
  700. package/dist/data/workload-panel/Metrics.js +196 -0
  701. package/dist/data/workload-panel/Metrics.js.map +1 -0
  702. package/dist/data/workload-panel/WorkloadPanel.cjs +66 -0
  703. package/dist/data/workload-panel/WorkloadPanel.cjs.map +1 -0
  704. package/dist/data/workload-panel/WorkloadPanel.d.ts +3 -0
  705. package/dist/data/workload-panel/WorkloadPanel.d.ts.map +1 -0
  706. package/dist/data/workload-panel/WorkloadPanel.js +66 -0
  707. package/dist/data/workload-panel/WorkloadPanel.js.map +1 -0
  708. package/dist/data/workload-panel/fixtures.d.ts +60 -0
  709. package/dist/data/workload-panel/fixtures.d.ts.map +1 -0
  710. package/dist/data/workload-panel/model.cjs +137 -0
  711. package/dist/data/workload-panel/model.cjs.map +1 -0
  712. package/dist/data/workload-panel/model.d.ts +53 -0
  713. package/dist/data/workload-panel/model.d.ts.map +1 -0
  714. package/dist/data/workload-panel/model.js +133 -0
  715. package/dist/data/workload-panel/model.js.map +1 -0
  716. package/dist/data/workload-panel/types.d.ts +56 -0
  717. package/dist/data/workload-panel/types.d.ts.map +1 -0
  718. package/dist/data.cjs +57 -6
  719. package/dist/data.d.ts +9 -1
  720. package/dist/data.d.ts.map +1 -1
  721. package/dist/data.js +27 -10
  722. package/dist/file-findings/AnnotatedCode.cjs +243 -0
  723. package/dist/file-findings/AnnotatedCode.cjs.map +1 -0
  724. package/dist/file-findings/AnnotatedCode.d.ts +30 -0
  725. package/dist/file-findings/AnnotatedCode.d.ts.map +1 -0
  726. package/dist/file-findings/AnnotatedCode.js +243 -0
  727. package/dist/file-findings/AnnotatedCode.js.map +1 -0
  728. package/dist/file-findings/FileFindingsView.cjs +213 -0
  729. package/dist/file-findings/FileFindingsView.cjs.map +1 -0
  730. package/dist/file-findings/FileFindingsView.d.ts +35 -0
  731. package/dist/file-findings/FileFindingsView.d.ts.map +1 -0
  732. package/dist/file-findings/FileFindingsView.js +213 -0
  733. package/dist/file-findings/FileFindingsView.js.map +1 -0
  734. package/dist/file-findings/LazyAnnotatedCode.cjs +22 -0
  735. package/dist/file-findings/LazyAnnotatedCode.cjs.map +1 -0
  736. package/dist/file-findings/LazyAnnotatedCode.d.ts +5 -0
  737. package/dist/file-findings/LazyAnnotatedCode.d.ts.map +1 -0
  738. package/dist/file-findings/LazyAnnotatedCode.js +22 -0
  739. package/dist/file-findings/LazyAnnotatedCode.js.map +1 -0
  740. package/dist/file-findings/adapters.cjs +155 -0
  741. package/dist/file-findings/adapters.cjs.map +1 -0
  742. package/dist/file-findings/adapters.d.ts +24 -0
  743. package/dist/file-findings/adapters.d.ts.map +1 -0
  744. package/dist/file-findings/adapters.js +153 -0
  745. package/dist/file-findings/adapters.js.map +1 -0
  746. package/dist/file-findings/file-review/CommentDraft.cjs +97 -0
  747. package/dist/file-findings/file-review/CommentDraft.cjs.map +1 -0
  748. package/dist/file-findings/file-review/CommentDraft.d.ts +25 -0
  749. package/dist/file-findings/file-review/CommentDraft.d.ts.map +1 -0
  750. package/dist/file-findings/file-review/CommentDraft.js +97 -0
  751. package/dist/file-findings/file-review/CommentDraft.js.map +1 -0
  752. package/dist/file-findings/file-review/FileReview.cjs +863 -0
  753. package/dist/file-findings/file-review/FileReview.cjs.map +1 -0
  754. package/dist/file-findings/file-review/FileReview.d.ts +79 -0
  755. package/dist/file-findings/file-review/FileReview.d.ts.map +1 -0
  756. package/dist/file-findings/file-review/FileReview.fixtures.d.ts +25 -0
  757. package/dist/file-findings/file-review/FileReview.fixtures.d.ts.map +1 -0
  758. package/dist/file-findings/file-review/FileReview.js +863 -0
  759. package/dist/file-findings/file-review/FileReview.js.map +1 -0
  760. package/dist/file-findings/file-review/InlineAuthors.cjs +77 -0
  761. package/dist/file-findings/file-review/InlineAuthors.cjs.map +1 -0
  762. package/dist/file-findings/file-review/InlineAuthors.d.ts +9 -0
  763. package/dist/file-findings/file-review/InlineAuthors.d.ts.map +1 -0
  764. package/dist/file-findings/file-review/InlineAuthors.js +77 -0
  765. package/dist/file-findings/file-review/InlineAuthors.js.map +1 -0
  766. package/dist/file-findings/file-review/InlineThread.cjs +77 -0
  767. package/dist/file-findings/file-review/InlineThread.cjs.map +1 -0
  768. package/dist/file-findings/file-review/InlineThread.d.ts +27 -0
  769. package/dist/file-findings/file-review/InlineThread.d.ts.map +1 -0
  770. package/dist/file-findings/file-review/InlineThread.js +77 -0
  771. package/dist/file-findings/file-review/InlineThread.js.map +1 -0
  772. package/dist/file-findings/file-review/ProblemsList.cjs +164 -0
  773. package/dist/file-findings/file-review/ProblemsList.cjs.map +1 -0
  774. package/dist/file-findings/file-review/ProblemsList.d.ts +15 -0
  775. package/dist/file-findings/file-review/ProblemsList.d.ts.map +1 -0
  776. package/dist/file-findings/file-review/ProblemsList.js +164 -0
  777. package/dist/file-findings/file-review/ProblemsList.js.map +1 -0
  778. package/dist/file-findings/file-review/SourceView.cjs +179 -0
  779. package/dist/file-findings/file-review/SourceView.cjs.map +1 -0
  780. package/dist/file-findings/file-review/SourceView.d.ts +29 -0
  781. package/dist/file-findings/file-review/SourceView.d.ts.map +1 -0
  782. package/dist/file-findings/file-review/SourceView.js +179 -0
  783. package/dist/file-findings/file-review/SourceView.js.map +1 -0
  784. package/dist/file-findings/file-review/blame.cjs +35 -0
  785. package/dist/file-findings/file-review/blame.cjs.map +1 -0
  786. package/dist/file-findings/file-review/blame.d.ts +28 -0
  787. package/dist/file-findings/file-review/blame.d.ts.map +1 -0
  788. package/dist/file-findings/file-review/blame.js +33 -0
  789. package/dist/file-findings/file-review/blame.js.map +1 -0
  790. package/dist/file-findings/file-review/geometry.cjs +101 -0
  791. package/dist/file-findings/file-review/geometry.cjs.map +1 -0
  792. package/dist/file-findings/file-review/geometry.d.ts +45 -0
  793. package/dist/file-findings/file-review/geometry.d.ts.map +1 -0
  794. package/dist/file-findings/file-review/geometry.js +98 -0
  795. package/dist/file-findings/file-review/geometry.js.map +1 -0
  796. package/dist/file-findings/file-review/hooks.cjs +101 -0
  797. package/dist/file-findings/file-review/hooks.cjs.map +1 -0
  798. package/dist/file-findings/file-review/hooks.d.ts +22 -0
  799. package/dist/file-findings/file-review/hooks.d.ts.map +1 -0
  800. package/dist/file-findings/file-review/hooks.js +99 -0
  801. package/dist/file-findings/file-review/hooks.js.map +1 -0
  802. package/dist/file-findings/file-review/marks.cjs +52 -0
  803. package/dist/file-findings/file-review/marks.cjs.map +1 -0
  804. package/dist/file-findings/file-review/marks.d.ts +23 -0
  805. package/dist/file-findings/file-review/marks.d.ts.map +1 -0
  806. package/dist/file-findings/file-review/marks.js +47 -0
  807. package/dist/file-findings/file-review/marks.js.map +1 -0
  808. package/dist/file-findings/file-review/problem-filters.cjs +14 -0
  809. package/dist/file-findings/file-review/problem-filters.cjs.map +1 -0
  810. package/dist/file-findings/file-review/problem-filters.d.ts +10 -0
  811. package/dist/file-findings/file-review/problem-filters.d.ts.map +1 -0
  812. package/dist/file-findings/file-review/problem-filters.js +13 -0
  813. package/dist/file-findings/file-review/problem-filters.js.map +1 -0
  814. package/dist/file-findings/file-review/quote-anchor.cjs +234 -0
  815. package/dist/file-findings/file-review/quote-anchor.cjs.map +1 -0
  816. package/dist/file-findings/file-review/quote-anchor.d.ts +54 -0
  817. package/dist/file-findings/file-review/quote-anchor.d.ts.map +1 -0
  818. package/dist/file-findings/file-review/quote-anchor.js +226 -0
  819. package/dist/file-findings/file-review/quote-anchor.js.map +1 -0
  820. package/dist/file-findings/file-review/source-anchor.cjs +104 -0
  821. package/dist/file-findings/file-review/source-anchor.cjs.map +1 -0
  822. package/dist/file-findings/file-review/source-anchor.d.ts +27 -0
  823. package/dist/file-findings/file-review/source-anchor.d.ts.map +1 -0
  824. package/dist/file-findings/file-review/source-anchor.js +99 -0
  825. package/dist/file-findings/file-review/source-anchor.js.map +1 -0
  826. package/dist/file-findings/file-review/source-marks.cjs +71 -0
  827. package/dist/file-findings/file-review/source-marks.cjs.map +1 -0
  828. package/dist/file-findings/file-review/source-marks.d.ts +27 -0
  829. package/dist/file-findings/file-review/source-marks.d.ts.map +1 -0
  830. package/dist/file-findings/file-review/source-marks.js +68 -0
  831. package/dist/file-findings/file-review/source-marks.js.map +1 -0
  832. package/dist/file-findings/findings-comments.cjs +136 -0
  833. package/dist/file-findings/findings-comments.cjs.map +1 -0
  834. package/dist/file-findings/findings-comments.d.ts +28 -0
  835. package/dist/file-findings/findings-comments.d.ts.map +1 -0
  836. package/dist/file-findings/findings-comments.js +131 -0
  837. package/dist/file-findings/findings-comments.js.map +1 -0
  838. package/dist/file-findings/findings-languages.cjs +53 -0
  839. package/dist/file-findings/findings-languages.cjs.map +1 -0
  840. package/dist/file-findings/findings-languages.d.ts +11 -0
  841. package/dist/file-findings/findings-languages.d.ts.map +1 -0
  842. package/dist/file-findings/findings-languages.js +53 -0
  843. package/dist/file-findings/findings-languages.js.map +1 -0
  844. package/dist/file-findings/mdx-source.cjs +48 -0
  845. package/dist/file-findings/mdx-source.cjs.map +1 -0
  846. package/dist/file-findings/mdx-source.d.ts +7 -0
  847. package/dist/file-findings/mdx-source.d.ts.map +1 -0
  848. package/dist/file-findings/mdx-source.js +48 -0
  849. package/dist/file-findings/mdx-source.js.map +1 -0
  850. package/dist/file-findings/monaco-language.cjs +73 -0
  851. package/dist/file-findings/monaco-language.cjs.map +1 -0
  852. package/dist/file-findings/monaco-language.d.ts +11 -0
  853. package/dist/file-findings/monaco-language.d.ts.map +1 -0
  854. package/dist/file-findings/monaco-language.js +72 -0
  855. package/dist/file-findings/monaco-language.js.map +1 -0
  856. package/dist/file-findings/severity-counts.cjs +20 -0
  857. package/dist/file-findings/severity-counts.cjs.map +1 -0
  858. package/dist/file-findings/severity-counts.d.ts +5 -0
  859. package/dist/file-findings/severity-counts.d.ts.map +1 -0
  860. package/dist/file-findings/severity-counts.js +19 -0
  861. package/dist/file-findings/severity-counts.js.map +1 -0
  862. package/dist/file-findings/types.cjs +12 -0
  863. package/dist/file-findings/types.cjs.map +1 -0
  864. package/dist/file-findings/types.d.ts +43 -0
  865. package/dist/file-findings/types.d.ts.map +1 -0
  866. package/dist/file-findings/types.js +11 -0
  867. package/dist/file-findings/types.js.map +1 -0
  868. package/dist/file-findings.cjs +47 -0
  869. package/dist/file-findings.d.ts +15 -0
  870. package/dist/file-findings.d.ts.map +1 -0
  871. package/dist/file-findings.js +15 -0
  872. package/dist/hooks/event-hub.cjs +22 -8
  873. package/dist/hooks/event-hub.cjs.map +1 -1
  874. package/dist/hooks/event-hub.d.ts.map +1 -1
  875. package/dist/hooks/event-hub.js +22 -8
  876. package/dist/hooks/event-hub.js.map +1 -1
  877. package/dist/icons/components/UiBrowser.cjs +51 -0
  878. package/dist/icons/components/UiBrowser.cjs.map +1 -0
  879. package/dist/icons/components/UiBrowser.d.ts +15 -0
  880. package/dist/icons/components/UiBrowser.d.ts.map +1 -0
  881. package/dist/icons/components/UiBrowser.js +48 -0
  882. package/dist/icons/components/UiBrowser.js.map +1 -0
  883. package/dist/icons/components/UiCreditCard.cjs +51 -0
  884. package/dist/icons/components/UiCreditCard.cjs.map +1 -0
  885. package/dist/icons/components/UiCreditCard.d.ts +15 -0
  886. package/dist/icons/components/UiCreditCard.d.ts.map +1 -0
  887. package/dist/icons/components/UiCreditCard.js +48 -0
  888. package/dist/icons/components/UiCreditCard.js.map +1 -0
  889. package/dist/icons/components/UiShoppingCart.cjs +51 -0
  890. package/dist/icons/components/UiShoppingCart.cjs.map +1 -0
  891. package/dist/icons/components/UiShoppingCart.d.ts +15 -0
  892. package/dist/icons/components/UiShoppingCart.d.ts.map +1 -0
  893. package/dist/icons/components/UiShoppingCart.js +48 -0
  894. package/dist/icons/components/UiShoppingCart.js.map +1 -0
  895. package/dist/icons/index.d.ts +6 -0
  896. package/dist/icons/index.d.ts.map +1 -1
  897. package/dist/icons/registry.cjs +6 -0
  898. package/dist/icons/registry.cjs.map +1 -1
  899. package/dist/icons/registry.d.ts.map +1 -1
  900. package/dist/icons/registry.js +6 -0
  901. package/dist/icons/registry.js.map +1 -1
  902. package/dist/icons.cjs +9 -0
  903. package/dist/icons.js +4 -1
  904. package/dist/index.cjs +75 -7
  905. package/dist/index.d.ts +1 -0
  906. package/dist/index.d.ts.map +1 -1
  907. package/dist/index.js +35 -12
  908. package/dist/layout/AppShell.cjs +37 -21
  909. package/dist/layout/AppShell.cjs.map +1 -1
  910. package/dist/layout/AppShell.d.ts +13 -2
  911. package/dist/layout/AppShell.d.ts.map +1 -1
  912. package/dist/layout/AppShell.js +37 -21
  913. package/dist/layout/AppShell.js.map +1 -1
  914. package/dist/layout/AppShell.nav.cjs +7 -6
  915. package/dist/layout/AppShell.nav.cjs.map +1 -1
  916. package/dist/layout/AppShell.nav.d.ts.map +1 -1
  917. package/dist/layout/AppShell.nav.js +7 -6
  918. package/dist/layout/AppShell.nav.js.map +1 -1
  919. package/dist/layout/SplitPane.cjs +16 -6
  920. package/dist/layout/SplitPane.cjs.map +1 -1
  921. package/dist/layout/SplitPane.d.ts +12 -2
  922. package/dist/layout/SplitPane.d.ts.map +1 -1
  923. package/dist/layout/SplitPane.js +16 -6
  924. package/dist/layout/SplitPane.js.map +1 -1
  925. package/dist/layout/Workspace.cjs +37 -33
  926. package/dist/layout/Workspace.cjs.map +1 -1
  927. package/dist/layout/Workspace.d.ts.map +1 -1
  928. package/dist/layout/Workspace.js +37 -33
  929. package/dist/layout/Workspace.js.map +1 -1
  930. package/dist/layout/Workspace.regions.cjs +3 -3
  931. package/dist/layout/Workspace.regions.cjs.map +1 -1
  932. package/dist/layout/Workspace.regions.js +3 -3
  933. package/dist/layout/Workspace.regions.js.map +1 -1
  934. package/dist/lib/breakpoints.cjs +102 -0
  935. package/dist/lib/breakpoints.cjs.map +1 -0
  936. package/dist/lib/breakpoints.d.ts +36 -0
  937. package/dist/lib/breakpoints.d.ts.map +1 -0
  938. package/dist/lib/breakpoints.js +99 -0
  939. package/dist/lib/breakpoints.js.map +1 -0
  940. package/dist/lib/combobox.cjs +2 -1
  941. package/dist/lib/combobox.cjs.map +1 -1
  942. package/dist/lib/combobox.d.ts +1 -1
  943. package/dist/lib/combobox.d.ts.map +1 -1
  944. package/dist/lib/combobox.js +2 -1
  945. package/dist/lib/combobox.js.map +1 -1
  946. package/dist/lib/path-tree.cjs +21 -0
  947. package/dist/lib/path-tree.cjs.map +1 -1
  948. package/dist/lib/path-tree.d.ts +15 -0
  949. package/dist/lib/path-tree.d.ts.map +1 -1
  950. package/dist/lib/path-tree.js +21 -1
  951. package/dist/lib/path-tree.js.map +1 -1
  952. package/dist/overlay/Modal.cjs +2 -1
  953. package/dist/overlay/Modal.cjs.map +1 -1
  954. package/dist/overlay/Modal.d.ts.map +1 -1
  955. package/dist/overlay/Modal.js +2 -1
  956. package/dist/overlay/Modal.js.map +1 -1
  957. package/dist/overlay/dropdownMenuContext.d.ts +1 -1
  958. package/dist/profiles/editor/profileEditor.cjs +1 -1
  959. package/dist/profiles/editor/profileEditor.cjs.map +1 -1
  960. package/dist/profiles/editor/profileEditor.js +1 -1
  961. package/dist/profiles/editor/profileEditor.js.map +1 -1
  962. package/dist/profiles/editor/profileEditorSections.cjs +2 -2
  963. package/dist/profiles/editor/profileEditorSections.cjs.map +1 -1
  964. package/dist/profiles/editor/profileEditorSections.js +2 -2
  965. package/dist/profiles/editor/profileEditorSections.js.map +1 -1
  966. package/dist/profiles/query/prometheusResults.cjs +24 -36
  967. package/dist/profiles/query/prometheusResults.cjs.map +1 -1
  968. package/dist/profiles/query/prometheusResults.d.ts.map +1 -1
  969. package/dist/profiles/query/prometheusResults.js +24 -36
  970. package/dist/profiles/query/prometheusResults.js.map +1 -1
  971. package/dist/rpc/CommandForm.cjs +1 -1
  972. package/dist/rpc/CommandForm.cjs.map +1 -1
  973. package/dist/rpc/CommandForm.js +1 -1
  974. package/dist/rpc/CommandForm.js.map +1 -1
  975. package/dist/rpc/classify.cjs +1 -1
  976. package/dist/rpc/classify.cjs.map +1 -1
  977. package/dist/rpc/classify.d.ts.map +1 -1
  978. package/dist/rpc/classify.js +1 -1
  979. package/dist/rpc/classify.js.map +1 -1
  980. package/dist/rpc/useOperations.d.ts +24 -24
  981. package/dist/rpc.cjs +0 -2
  982. package/dist/rpc.d.ts +0 -1
  983. package/dist/rpc.d.ts.map +1 -1
  984. package/dist/rpc.js +1 -2
  985. package/dist/styles.css +1 -1
  986. package/dist/utils.cjs +6 -0
  987. package/dist/utils.d.ts +2 -1
  988. package/dist/utils.d.ts.map +1 -1
  989. package/dist/utils.js +3 -2
  990. package/package.json +9 -3
  991. package/schemas/json-schema-form.schema.json +9 -1
@@ -1 +1 @@
1
- {"version":3,"file":"connectionDashboardRow.d.ts","sourceRoot":"","sources":["../../src/connections/connectionDashboardRow.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,uBAAuB,EACvB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,4BAA4B,CAAC;AA+BpC,wBAAgB,sBAAsB,CAAC,EACrC,UAAU,EACV,MAAM,EACN,OAAO,EACP,OAAO,EACP,oBAAoB,GACrB,EAAE;IACD,UAAU,EAAE,uBAAuB,CAAC;IACpC,MAAM,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAChE,oBAAoB,EAAE,sBAAsB,CAAC;CAC9C,+BAiDA;AAkGD,wBAAgB,sBAAsB,gCAiBrC"}
1
+ {"version":3,"file":"connectionDashboardRow.d.ts","sourceRoot":"","sources":["../../src/connections/connectionDashboardRow.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,uBAAuB,EACvB,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,4BAA4B,CAAC;AA+BpC,wBAAgB,sBAAsB,CAAC,EACrC,uBAAuB,EACvB,UAAU,EACV,MAAM,EACN,OAAO,EACP,OAAO,EACP,oBAAoB,GACrB,EAAE;IACD,UAAU,EAAE,uBAAuB,CAAC;IACpC,MAAM,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAChE,oBAAoB,EAAE,sBAAsB,CAAC;IAC7C,uBAAuB,CAAC,EAAE,yBAAyB,CAAC;CACrD,+BAmDA;AA4GD,wBAAgB,sBAAsB,gCAiBrC"}
@@ -44,51 +44,59 @@ var HEALTH_STYLES = {
44
44
  }
45
45
  };
46
46
  var UNCHECKED_EDGE = "border-l-transparent";
47
- function ConnectionDashboardRow({ connection, health, pending, onCheck, renderConnectionLink }) {
47
+ function ConnectionDashboardRow({ renderConnectionActions, connection, health, pending, onCheck, renderConnectionLink }) {
48
48
  return /* @__PURE__ */ jsxs("div", {
49
49
  className: cn("flex min-w-0 items-center gap-3 border-l-2 py-2 pl-3 pr-2 hover:bg-muted/30", health ? HEALTH_STYLES[health.state].edge : UNCHECKED_EDGE),
50
- children: [/* @__PURE__ */ jsx(HealthDot, {
51
- health,
52
- pending,
53
- onCheck: () => onCheck([connection.id], { force: Boolean(health) })
54
- }), renderConnectionLink(connection, {
55
- ...health?.detail ? { title: health.detail } : {},
56
- className: "flex min-w-0 flex-1 items-center gap-3 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset",
57
- children: /* @__PURE__ */ jsxs(Fragment, { children: [
58
- /* @__PURE__ */ jsx("span", {
59
- className: "shrink-0",
60
- "aria-hidden": true,
61
- children: /* @__PURE__ */ jsx(ConnectionTypeIcon, {
62
- type: connection.type,
63
- className: "size-4"
50
+ children: [
51
+ /* @__PURE__ */ jsx(HealthDot, {
52
+ health,
53
+ pending,
54
+ onCheck: () => onCheck([connection.id], { force: Boolean(health) })
55
+ }),
56
+ renderConnectionLink(connection, {
57
+ ...health?.detail ? { title: health.detail } : {},
58
+ className: "flex min-w-0 flex-1 items-center gap-3 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset",
59
+ children: /* @__PURE__ */ jsxs(Fragment, { children: [
60
+ /* @__PURE__ */ jsx("span", {
61
+ className: "shrink-0",
62
+ "aria-hidden": true,
63
+ children: /* @__PURE__ */ jsx(ConnectionTypeIcon, {
64
+ type: connection.type,
65
+ className: "size-4"
66
+ })
67
+ }),
68
+ /* @__PURE__ */ jsx("span", {
69
+ className: "w-32 shrink-0 truncate text-sm font-medium md:w-40",
70
+ title: connection.name,
71
+ children: connection.name
72
+ }),
73
+ /* @__PURE__ */ jsxs("div", {
74
+ className: "min-w-0 flex-1",
75
+ children: [/* @__PURE__ */ jsx(EndpointLine, { endpoint: connection.endpoint }), connection.source && /* @__PURE__ */ jsx("div", {
76
+ className: "truncate text-xs text-muted-foreground",
77
+ title: connection.source,
78
+ children: connection.source
79
+ })]
80
+ }),
81
+ /* @__PURE__ */ jsxs("div", {
82
+ className: "hidden shrink-0 items-center gap-1.5 lg:flex",
83
+ children: [/* @__PURE__ */ jsx(SecretChip, { count: connection.secretCount }), /* @__PURE__ */ jsx(RiskChips, { connection })]
84
+ }),
85
+ /* @__PURE__ */ jsx("span", {
86
+ className: "w-24 shrink-0 text-right text-xs text-muted-foreground",
87
+ children: connection.profileCount === 0 ? /* @__PURE__ */ jsx("span", {
88
+ className: "text-muted-foreground/60",
89
+ children: "unused"
90
+ }) : `${connection.profileCount} profile${connection.profileCount === 1 ? "" : "s"}`
91
+ }),
92
+ /* @__PURE__ */ jsx("span", {
93
+ className: "hidden w-16 shrink-0 text-right text-xs text-muted-foreground/70 xl:inline",
94
+ children: ageLabel(connection.updatedAt)
64
95
  })
65
- }),
66
- /* @__PURE__ */ jsx("span", {
67
- className: "w-32 shrink-0 truncate text-sm font-medium md:w-40",
68
- title: connection.name,
69
- children: connection.name
70
- }),
71
- /* @__PURE__ */ jsx("div", {
72
- className: "min-w-0 flex-1",
73
- children: /* @__PURE__ */ jsx(EndpointLine, { endpoint: connection.endpoint })
74
- }),
75
- /* @__PURE__ */ jsxs("div", {
76
- className: "hidden shrink-0 items-center gap-1.5 lg:flex",
77
- children: [/* @__PURE__ */ jsx(SecretChip, { count: connection.secretCount }), /* @__PURE__ */ jsx(RiskChips, { connection })]
78
- }),
79
- /* @__PURE__ */ jsx("span", {
80
- className: "w-24 shrink-0 text-right text-xs text-muted-foreground",
81
- children: connection.profileCount === 0 ? /* @__PURE__ */ jsx("span", {
82
- className: "text-muted-foreground/60",
83
- children: "unused"
84
- }) : `${connection.profileCount} profile${connection.profileCount === 1 ? "" : "s"}`
85
- }),
86
- /* @__PURE__ */ jsx("span", {
87
- className: "hidden w-16 shrink-0 text-right text-xs text-muted-foreground/70 xl:inline",
88
- children: ageLabel(connection.updatedAt)
89
- })
90
- ] })
91
- })]
96
+ ] })
97
+ }),
98
+ renderConnectionActions?.(connection)
99
+ ]
92
100
  });
93
101
  }
94
102
  function HealthDot({ health, pending, onCheck }) {
@@ -150,19 +158,31 @@ function SecretChip({ count }) {
150
158
  });
151
159
  }
152
160
  function RiskChips({ connection }) {
153
- return /* @__PURE__ */ jsxs(Fragment, { children: [connection.inlineCredential ? /* @__PURE__ */ jsxs("span", {
154
- className: "inline-flex items-center gap-1 rounded bg-rose-100 px-1.5 py-0.5 text-[11px] text-rose-700 ring-1 ring-inset ring-rose-300/60 dark:bg-rose-400/10 dark:text-rose-300 dark:ring-rose-400/25",
155
- children: [/* @__PURE__ */ jsx(Icon, {
156
- icon: UiKey,
157
- className: "text-[11px]"
158
- }), "Password in URL"]
159
- }) : null, connection.insecureTLS ? /* @__PURE__ */ jsxs("span", {
160
- className: "inline-flex items-center gap-1 rounded bg-amber-100 px-1.5 py-0.5 text-[11px] text-amber-800 ring-1 ring-inset ring-amber-300/60 dark:bg-amber-400/10 dark:text-amber-300 dark:ring-amber-400/25",
161
- children: [/* @__PURE__ */ jsx(Icon, {
162
- icon: UiWarningTriangle,
163
- className: "text-[11px]"
164
- }), "TLS verification off"]
165
- }) : null] });
161
+ const warnings = connection.warnings ?? [];
162
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
163
+ warnings.length > 0 ? /* @__PURE__ */ jsxs("span", {
164
+ className: "inline-flex items-center gap-1 rounded bg-rose-100 px-1.5 py-0.5 text-[11px] text-rose-700 ring-1 ring-inset ring-rose-300/60 dark:bg-rose-400/10 dark:text-rose-300 dark:ring-rose-400/25",
165
+ title: warnings.join("\n"),
166
+ children: [/* @__PURE__ */ jsx(Icon, {
167
+ icon: UiWarningTriangle,
168
+ className: "text-[11px]"
169
+ }), "Cannot load"]
170
+ }) : null,
171
+ connection.inlineCredential ? /* @__PURE__ */ jsxs("span", {
172
+ className: "inline-flex items-center gap-1 rounded bg-rose-100 px-1.5 py-0.5 text-[11px] text-rose-700 ring-1 ring-inset ring-rose-300/60 dark:bg-rose-400/10 dark:text-rose-300 dark:ring-rose-400/25",
173
+ children: [/* @__PURE__ */ jsx(Icon, {
174
+ icon: UiKey,
175
+ className: "text-[11px]"
176
+ }), "Password in URL"]
177
+ }) : null,
178
+ connection.insecureTLS ? /* @__PURE__ */ jsxs("span", {
179
+ className: "inline-flex items-center gap-1 rounded bg-amber-100 px-1.5 py-0.5 text-[11px] text-amber-800 ring-1 ring-inset ring-amber-300/60 dark:bg-amber-400/10 dark:text-amber-300 dark:ring-amber-400/25",
180
+ children: [/* @__PURE__ */ jsx(Icon, {
181
+ icon: UiWarningTriangle,
182
+ className: "text-[11px]"
183
+ }), "TLS verification off"]
184
+ }) : null
185
+ ] });
166
186
  }
167
187
  function ConnectionHealthLegend() {
168
188
  return /* @__PURE__ */ jsxs("p", {
@@ -1 +1 @@
1
- {"version":3,"file":"connectionDashboardRow.js","names":["_Fragment"],"sources":["../../src/connections/connectionDashboardRow.tsx"],"sourcesContent":["import { Icon } from \"../data/Icon\";\nimport { UiKey, UiLink, UiLock, UiWarningTriangle } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { ConnectionTypeIcon } from \"./iconProvider\";\nimport type {\n ConnectionDashboardHealthState,\n ConnectionDashboardItem,\n ConnectionHealth,\n ConnectionLinkRenderer,\n} from \"./connectionDashboardModel\";\n\nconst HEALTH_LABELS: Record<ConnectionDashboardHealthState, string> = {\n healthy: \"Reachable\",\n credentials: \"Credentials failed\",\n unreachable: \"Unreachable\",\n unverifiable: \"Not verifiable\",\n unknown: \"Check did not complete\",\n};\n\nconst HEALTH_LEGEND_LABELS: Record<ConnectionDashboardHealthState, string> = {\n healthy: \"reachable\",\n credentials: \"credentials failed\",\n unreachable: \"unreachable\",\n unverifiable: \"no endpoint to probe\",\n unknown: \"check did not complete\",\n};\n\nconst HEALTH_STYLES: Record<\n ConnectionDashboardHealthState,\n { dot: string; edge: string }\n> = {\n healthy: { dot: \"bg-emerald-400\", edge: \"border-l-emerald-400\" },\n credentials: { dot: \"bg-amber-400\", edge: \"border-l-amber-400\" },\n unreachable: { dot: \"bg-rose-400\", edge: \"border-l-rose-400\" },\n unverifiable: { dot: \"bg-muted-foreground\", edge: \"border-l-border\" },\n unknown: { dot: \"bg-muted-foreground/50\", edge: \"border-l-border\" },\n};\n\nconst UNCHECKED_EDGE = \"border-l-transparent\";\n\nexport function ConnectionDashboardRow({\n connection,\n health,\n pending,\n onCheck,\n renderConnectionLink,\n}: {\n connection: ConnectionDashboardItem;\n health?: ConnectionHealth | undefined;\n pending: boolean;\n onCheck: (ids: string[], options?: { force?: boolean }) => void;\n renderConnectionLink: ConnectionLinkRenderer;\n}) {\n return (\n <div\n className={cn(\n \"flex min-w-0 items-center gap-3 border-l-2 py-2 pl-3 pr-2 hover:bg-muted/30\",\n health ? HEALTH_STYLES[health.state].edge : UNCHECKED_EDGE,\n )}\n >\n {/* The dot sits outside the link: a button nested in an anchor is invalid\n markup and the anchor swallows its click. */}\n <HealthDot\n health={health}\n pending={pending}\n onCheck={() => onCheck([connection.id], { force: Boolean(health) })}\n />\n {renderConnectionLink(connection, {\n ...(health?.detail ? { title: health.detail } : {}),\n className:\n \"flex min-w-0 flex-1 items-center gap-3 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset\",\n children: (\n <>\n <span className=\"shrink-0\" aria-hidden>\n <ConnectionTypeIcon type={connection.type} className=\"size-4\" />\n </span>\n <span className=\"w-32 shrink-0 truncate text-sm font-medium md:w-40\" title={connection.name}>\n {connection.name}\n </span>\n <div className=\"min-w-0 flex-1\">\n <EndpointLine endpoint={connection.endpoint} />\n </div>\n <div className=\"hidden shrink-0 items-center gap-1.5 lg:flex\">\n <SecretChip count={connection.secretCount} />\n <RiskChips connection={connection} />\n </div>\n <span className=\"w-24 shrink-0 text-right text-xs text-muted-foreground\">\n {connection.profileCount === 0 ? (\n <span className=\"text-muted-foreground/60\">unused</span>\n ) : (\n `${connection.profileCount} profile${connection.profileCount === 1 ? \"\" : \"s\"}`\n )}\n </span>\n <span className=\"hidden w-16 shrink-0 text-right text-xs text-muted-foreground/70 xl:inline\">\n {ageLabel(connection.updatedAt)}\n </span>\n </>\n ),\n })}\n </div>\n );\n}\n\nfunction HealthDot({\n health,\n pending,\n onCheck,\n}: {\n health?: ConnectionHealth | undefined;\n pending: boolean;\n onCheck: () => void;\n}) {\n const label = pending\n ? \"Checking health\"\n : health\n ? `${HEALTH_LABELS[health.state]} — check again`\n : \"Check health\";\n return (\n <button\n type=\"button\"\n onClick={onCheck}\n disabled={pending}\n title={health?.detail ?? label}\n aria-label={label}\n className=\"shrink-0 rounded-full p-1 hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <span\n className={cn(\n \"block size-2 rounded-full\",\n pending\n ? \"animate-pulse bg-muted-foreground/60\"\n : health\n ? HEALTH_STYLES[health.state].dot\n : \"border border-muted-foreground/50\",\n )}\n />\n </button>\n );\n}\n\nfunction EndpointLine({ endpoint }: { endpoint: ConnectionDashboardItem[\"endpoint\"] }) {\n if (!endpoint) {\n return (\n <span className=\"inline-flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Icon icon={UiLink} className=\"text-xs\" />\n <span className=\"italic\">Resolved from ambient config</span>\n </span>\n );\n }\n const indirect = [\"connection\", \"host\", \"portforward\"].includes(endpoint.scheme);\n return (\n <span className=\"flex min-w-0 items-center gap-1.5 font-mono text-xs\">\n <span\n className={cn(\n \"shrink-0 rounded px-1 py-0.5 text-[10px] ring-1 ring-inset\",\n indirect\n ? \"bg-violet-100 text-violet-700 ring-violet-300/60 dark:bg-violet-400/10 dark:text-violet-300 dark:ring-violet-400/25\"\n : \"bg-muted text-muted-foreground ring-border\",\n )}\n >\n {endpoint.scheme}\n </span>\n <span className=\"truncate text-foreground\" title={`${endpoint.host}${endpoint.path ?? \"\"}`}>\n {endpoint.host}\n {endpoint.path ? <span className=\"text-muted-foreground\">{endpoint.path}</span> : null}\n </span>\n </span>\n );\n}\n\nfunction SecretChip({ count }: { count: number }) {\n if (count === 0) return null;\n return (\n <span className=\"inline-flex items-center gap-1 rounded bg-teal-100 px-1.5 py-0.5 text-[11px] text-teal-700 ring-1 ring-inset ring-teal-300/60 dark:bg-teal-400/10 dark:text-teal-300 dark:ring-teal-400/25\">\n <Icon icon={UiLock} className=\"text-[11px]\" />\n {count} secret{count === 1 ? \"\" : \"s\"}\n </span>\n );\n}\n\nfunction RiskChips({ connection }: { connection: ConnectionDashboardItem }) {\n return (\n <>\n {connection.inlineCredential ? (\n <span className=\"inline-flex items-center gap-1 rounded bg-rose-100 px-1.5 py-0.5 text-[11px] text-rose-700 ring-1 ring-inset ring-rose-300/60 dark:bg-rose-400/10 dark:text-rose-300 dark:ring-rose-400/25\">\n <Icon icon={UiKey} className=\"text-[11px]\" />\n Password in URL\n </span>\n ) : null}\n {connection.insecureTLS ? (\n <span className=\"inline-flex items-center gap-1 rounded bg-amber-100 px-1.5 py-0.5 text-[11px] text-amber-800 ring-1 ring-inset ring-amber-300/60 dark:bg-amber-400/10 dark:text-amber-300 dark:ring-amber-400/25\">\n <Icon icon={UiWarningTriangle} className=\"text-[11px]\" />\n TLS verification off\n </span>\n ) : null}\n </>\n );\n}\n\nexport function ConnectionHealthLegend() {\n return (\n <p className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground\">\n <span className=\"inline-flex items-center gap-1.5\">\n <span className=\"inline-block size-2 rounded-full border border-muted-foreground/50\" />\n not checked\n </span>\n {([\"healthy\", \"credentials\", \"unreachable\", \"unverifiable\", \"unknown\"] as const).map(\n (state) => (\n <span key={state} className=\"inline-flex items-center gap-1.5\">\n <span className={cn(\"inline-block h-3 w-0.5\", HEALTH_STYLES[state].dot)} />\n {HEALTH_LEGEND_LABELS[state]}\n </span>\n ),\n )}\n </p>\n );\n}\n\nfunction ageLabel(updatedAt: string): string {\n const timestamp = Date.parse(updatedAt);\n if (!Number.isFinite(timestamp)) return \"—\";\n return `${Math.max(0, Math.floor((Date.now() - timestamp) / 86_400_000))}d`;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"connectionDashboardRow.js","names":["_Fragment"],"sources":["../../src/connections/connectionDashboardRow.tsx"],"sourcesContent":["import { Icon } from \"../data/Icon\";\nimport { UiKey, UiLink, UiLock, UiWarningTriangle } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { ConnectionTypeIcon } from \"./iconProvider\";\nimport type {\n ConnectionDashboardHealthState,\n ConnectionDashboardItem,\n ConnectionHealth,\n ConnectionLinkRenderer,\n ConnectionActionsRenderer,\n} from \"./connectionDashboardModel\";\n\nconst HEALTH_LABELS: Record<ConnectionDashboardHealthState, string> = {\n healthy: \"Reachable\",\n credentials: \"Credentials failed\",\n unreachable: \"Unreachable\",\n unverifiable: \"Not verifiable\",\n unknown: \"Check did not complete\",\n};\n\nconst HEALTH_LEGEND_LABELS: Record<ConnectionDashboardHealthState, string> = {\n healthy: \"reachable\",\n credentials: \"credentials failed\",\n unreachable: \"unreachable\",\n unverifiable: \"no endpoint to probe\",\n unknown: \"check did not complete\",\n};\n\nconst HEALTH_STYLES: Record<\n ConnectionDashboardHealthState,\n { dot: string; edge: string }\n> = {\n healthy: { dot: \"bg-emerald-400\", edge: \"border-l-emerald-400\" },\n credentials: { dot: \"bg-amber-400\", edge: \"border-l-amber-400\" },\n unreachable: { dot: \"bg-rose-400\", edge: \"border-l-rose-400\" },\n unverifiable: { dot: \"bg-muted-foreground\", edge: \"border-l-border\" },\n unknown: { dot: \"bg-muted-foreground/50\", edge: \"border-l-border\" },\n};\n\nconst UNCHECKED_EDGE = \"border-l-transparent\";\n\nexport function ConnectionDashboardRow({\n renderConnectionActions,\n connection,\n health,\n pending,\n onCheck,\n renderConnectionLink,\n}: {\n connection: ConnectionDashboardItem;\n health?: ConnectionHealth | undefined;\n pending: boolean;\n onCheck: (ids: string[], options?: { force?: boolean }) => void;\n renderConnectionLink: ConnectionLinkRenderer;\n renderConnectionActions?: ConnectionActionsRenderer;\n}) {\n return (\n <div\n className={cn(\n \"flex min-w-0 items-center gap-3 border-l-2 py-2 pl-3 pr-2 hover:bg-muted/30\",\n health ? HEALTH_STYLES[health.state].edge : UNCHECKED_EDGE,\n )}\n >\n {/* The dot sits outside the link: a button nested in an anchor is invalid\n markup and the anchor swallows its click. */}\n <HealthDot\n health={health}\n pending={pending}\n onCheck={() => onCheck([connection.id], { force: Boolean(health) })}\n />\n {renderConnectionLink(connection, {\n ...(health?.detail ? { title: health.detail } : {}),\n className:\n \"flex min-w-0 flex-1 items-center gap-3 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset\",\n children: (\n <>\n <span className=\"shrink-0\" aria-hidden>\n <ConnectionTypeIcon type={connection.type} className=\"size-4\" />\n </span>\n <span className=\"w-32 shrink-0 truncate text-sm font-medium md:w-40\" title={connection.name}>\n {connection.name}\n </span>\n <div className=\"min-w-0 flex-1\">\n <EndpointLine endpoint={connection.endpoint} />\n {connection.source && <div className=\"truncate text-xs text-muted-foreground\" title={connection.source}>{connection.source}</div>}\n </div>\n <div className=\"hidden shrink-0 items-center gap-1.5 lg:flex\">\n <SecretChip count={connection.secretCount} />\n <RiskChips connection={connection} />\n </div>\n <span className=\"w-24 shrink-0 text-right text-xs text-muted-foreground\">\n {connection.profileCount === 0 ? (\n <span className=\"text-muted-foreground/60\">unused</span>\n ) : (\n `${connection.profileCount} profile${connection.profileCount === 1 ? \"\" : \"s\"}`\n )}\n </span>\n <span className=\"hidden w-16 shrink-0 text-right text-xs text-muted-foreground/70 xl:inline\">\n {ageLabel(connection.updatedAt)}\n </span>\n </>\n ),\n })}\n {renderConnectionActions?.(connection)}\n </div>\n );\n}\n\nfunction HealthDot({\n health,\n pending,\n onCheck,\n}: {\n health?: ConnectionHealth | undefined;\n pending: boolean;\n onCheck: () => void;\n}) {\n const label = pending\n ? \"Checking health\"\n : health\n ? `${HEALTH_LABELS[health.state]} — check again`\n : \"Check health\";\n return (\n <button\n type=\"button\"\n onClick={onCheck}\n disabled={pending}\n title={health?.detail ?? label}\n aria-label={label}\n className=\"shrink-0 rounded-full p-1 hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <span\n className={cn(\n \"block size-2 rounded-full\",\n pending\n ? \"animate-pulse bg-muted-foreground/60\"\n : health\n ? HEALTH_STYLES[health.state].dot\n : \"border border-muted-foreground/50\",\n )}\n />\n </button>\n );\n}\n\nfunction EndpointLine({ endpoint }: { endpoint: ConnectionDashboardItem[\"endpoint\"] }) {\n if (!endpoint) {\n return (\n <span className=\"inline-flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Icon icon={UiLink} className=\"text-xs\" />\n <span className=\"italic\">Resolved from ambient config</span>\n </span>\n );\n }\n const indirect = [\"connection\", \"host\", \"portforward\"].includes(endpoint.scheme);\n return (\n <span className=\"flex min-w-0 items-center gap-1.5 font-mono text-xs\">\n <span\n className={cn(\n \"shrink-0 rounded px-1 py-0.5 text-[10px] ring-1 ring-inset\",\n indirect\n ? \"bg-violet-100 text-violet-700 ring-violet-300/60 dark:bg-violet-400/10 dark:text-violet-300 dark:ring-violet-400/25\"\n : \"bg-muted text-muted-foreground ring-border\",\n )}\n >\n {endpoint.scheme}\n </span>\n <span className=\"truncate text-foreground\" title={`${endpoint.host}${endpoint.path ?? \"\"}`}>\n {endpoint.host}\n {endpoint.path ? <span className=\"text-muted-foreground\">{endpoint.path}</span> : null}\n </span>\n </span>\n );\n}\n\nfunction SecretChip({ count }: { count: number }) {\n if (count === 0) return null;\n return (\n <span className=\"inline-flex items-center gap-1 rounded bg-teal-100 px-1.5 py-0.5 text-[11px] text-teal-700 ring-1 ring-inset ring-teal-300/60 dark:bg-teal-400/10 dark:text-teal-300 dark:ring-teal-400/25\">\n <Icon icon={UiLock} className=\"text-[11px]\" />\n {count} secret{count === 1 ? \"\" : \"s\"}\n </span>\n );\n}\n\nfunction RiskChips({ connection }: { connection: ConnectionDashboardItem }) {\n const warnings = connection.warnings ?? [];\n return (\n <>\n {warnings.length > 0 ? (\n <span\n className=\"inline-flex items-center gap-1 rounded bg-rose-100 px-1.5 py-0.5 text-[11px] text-rose-700 ring-1 ring-inset ring-rose-300/60 dark:bg-rose-400/10 dark:text-rose-300 dark:ring-rose-400/25\"\n title={warnings.join(\"\\n\")}\n >\n <Icon icon={UiWarningTriangle} className=\"text-[11px]\" />\n Cannot load\n </span>\n ) : null}\n {connection.inlineCredential ? (\n <span className=\"inline-flex items-center gap-1 rounded bg-rose-100 px-1.5 py-0.5 text-[11px] text-rose-700 ring-1 ring-inset ring-rose-300/60 dark:bg-rose-400/10 dark:text-rose-300 dark:ring-rose-400/25\">\n <Icon icon={UiKey} className=\"text-[11px]\" />\n Password in URL\n </span>\n ) : null}\n {connection.insecureTLS ? (\n <span className=\"inline-flex items-center gap-1 rounded bg-amber-100 px-1.5 py-0.5 text-[11px] text-amber-800 ring-1 ring-inset ring-amber-300/60 dark:bg-amber-400/10 dark:text-amber-300 dark:ring-amber-400/25\">\n <Icon icon={UiWarningTriangle} className=\"text-[11px]\" />\n TLS verification off\n </span>\n ) : null}\n </>\n );\n}\n\nexport function ConnectionHealthLegend() {\n return (\n <p className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground\">\n <span className=\"inline-flex items-center gap-1.5\">\n <span className=\"inline-block size-2 rounded-full border border-muted-foreground/50\" />\n not checked\n </span>\n {([\"healthy\", \"credentials\", \"unreachable\", \"unverifiable\", \"unknown\"] as const).map(\n (state) => (\n <span key={state} className=\"inline-flex items-center gap-1.5\">\n <span className={cn(\"inline-block h-3 w-0.5\", HEALTH_STYLES[state].dot)} />\n {HEALTH_LEGEND_LABELS[state]}\n </span>\n ),\n )}\n </p>\n );\n}\n\nfunction ageLabel(updatedAt: string): string {\n const timestamp = Date.parse(updatedAt);\n if (!Number.isFinite(timestamp)) return \"—\";\n return `${Math.max(0, Math.floor((Date.now() - timestamp) / 86_400_000))}d`;\n}\n"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ const require_NamespacePicker = require("../components/NamespacePicker.cjs");
2
+ let react_jsx_runtime = require("react/jsx-runtime");
3
+ // src/connections/connectionNamespaceField.tsx
4
+ /**
5
+ * The connection form's namespace control. `loadNamespaces` must keep a stable
6
+ * identity across renders: NamespacePicker reloads whenever it changes.
7
+ */
8
+ function ConnectionNamespaceField({ field, loadNamespaces }) {
9
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_NamespacePicker.NamespacePicker, {
10
+ value: typeof field.value === "string" ? field.value : "",
11
+ onChange: field.onChange,
12
+ loadNamespaces
13
+ });
14
+ }
15
+ exports.ConnectionNamespaceField = ConnectionNamespaceField;
16
+
17
+ //# sourceMappingURL=connectionNamespaceField.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionNamespaceField.cjs","names":["NamespacePicker"],"sources":["../../src/connections/connectionNamespaceField.tsx"],"sourcesContent":["import { NamespacePicker } from \"../components/NamespacePicker\";\nimport type { FieldControl } from \"../components/json-schema-form-types\";\n\n/**\n * The connection form's namespace control. `loadNamespaces` must keep a stable\n * identity across renders: NamespacePicker reloads whenever it changes.\n */\nexport function ConnectionNamespaceField({\n field,\n loadNamespaces,\n}: {\n field: FieldControl;\n loadNamespaces: () => Promise<string[]>;\n}) {\n return (\n <NamespacePicker\n value={typeof field.value === \"string\" ? field.value : \"\"}\n onChange={field.onChange}\n loadNamespaces={loadNamespaces}\n />\n );\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,yBAAyB,EACvC,OACA,kBAIC;CACD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,wBAAAA,iBAAD;EACE,OAAO,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ;EACvD,UAAU,MAAM;EACA;CACjB,CAAA;AAEL"}
@@ -0,0 +1,10 @@
1
+ import { FieldControl } from '../components/json-schema-form-types.js';
2
+ /**
3
+ * The connection form's namespace control. `loadNamespaces` must keep a stable
4
+ * identity across renders: NamespacePicker reloads whenever it changes.
5
+ */
6
+ export declare function ConnectionNamespaceField({ field, loadNamespaces, }: {
7
+ field: FieldControl;
8
+ loadNamespaces: () => Promise<string[]>;
9
+ }): import("react").JSX.Element;
10
+ //# sourceMappingURL=connectionNamespaceField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionNamespaceField.d.ts","sourceRoot":"","sources":["../../src/connections/connectionNamespaceField.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEzE;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,cAAc,GACf,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACzC,+BAQA"}
@@ -0,0 +1,17 @@
1
+ import { NamespacePicker } from "../components/NamespacePicker.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ // src/connections/connectionNamespaceField.tsx
4
+ /**
5
+ * The connection form's namespace control. `loadNamespaces` must keep a stable
6
+ * identity across renders: NamespacePicker reloads whenever it changes.
7
+ */
8
+ function ConnectionNamespaceField({ field, loadNamespaces }) {
9
+ return /* @__PURE__ */ jsx(NamespacePicker, {
10
+ value: typeof field.value === "string" ? field.value : "",
11
+ onChange: field.onChange,
12
+ loadNamespaces
13
+ });
14
+ }
15
+ export { ConnectionNamespaceField };
16
+
17
+ //# sourceMappingURL=connectionNamespaceField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionNamespaceField.js","names":[],"sources":["../../src/connections/connectionNamespaceField.tsx"],"sourcesContent":["import { NamespacePicker } from \"../components/NamespacePicker\";\nimport type { FieldControl } from \"../components/json-schema-form-types\";\n\n/**\n * The connection form's namespace control. `loadNamespaces` must keep a stable\n * identity across renders: NamespacePicker reloads whenever it changes.\n */\nexport function ConnectionNamespaceField({\n field,\n loadNamespaces,\n}: {\n field: FieldControl;\n loadNamespaces: () => Promise<string[]>;\n}) {\n return (\n <NamespacePicker\n value={typeof field.value === \"string\" ? field.value : \"\"}\n onChange={field.onChange}\n loadNamespaces={loadNamespaces}\n />\n );\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,yBAAyB,EACvC,OACA,kBAIC;CACD,OACE,oBAAC,iBAAD;EACE,OAAO,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ;EACvD,UAAU,MAAM;EACA;CACjB,CAAA;AAEL"}
@@ -0,0 +1,98 @@
1
+ const require_secret_form_extension = require("../components/secret-form-extension.cjs");
2
+ const require_string = require("../lib/string.cjs");
3
+ const require_connectionNamespaceField = require("./connectionNamespaceField.cjs");
4
+ let react = require("react");
5
+ // src/connections/connectionSchemaFormExtensions.ts
6
+ var NAMESPACE_COMPONENT = "k8s-namespace-selector";
7
+ var SECRET_SOURCES_HINT = "x-clicky-secret-sources";
8
+ var URL_SOURCES_HINT = "x-clicky-url-sources";
9
+ var ALL_SECRET_SOURCES = [
10
+ "secret",
11
+ "configmap",
12
+ "helm",
13
+ "serviceaccount",
14
+ "onepassword",
15
+ "value"
16
+ ];
17
+ var DEFAULT_URL_SOURCES = ALL_SECRET_SOURCES.filter((source) => source !== "serviceaccount");
18
+ var fetchJson = async (url) => {
19
+ const response = await fetch(url, { headers: { Accept: "application/json" } });
20
+ if (!response.ok) throw new Error(`GET ${url} failed with ${response.status}: ${(await response.text()).trim()}`);
21
+ return await response.json();
22
+ };
23
+ function sourcesHint(schema, hint, fallback) {
24
+ const declared = schema[hint];
25
+ if (declared === void 0) return [...fallback];
26
+ if (!Array.isArray(declared) || declared.length === 0) throw new Error(`connection schema ${hint} must be a non-empty array of secret sources`);
27
+ return declared.map((source) => {
28
+ if (!ALL_SECRET_SOURCES.includes(source)) throw new Error(`connection schema ${hint} lists unknown source ${JSON.stringify(source)}; expected one of ${ALL_SECRET_SOURCES.join(", ")}`);
29
+ return source;
30
+ });
31
+ }
32
+ /**
33
+ * The value sources a connection form offers, read from the schema's root
34
+ * `x-clicky-secret-sources` / `x-clicky-url-sources` hints (the per-app policy
35
+ * commons-db serves). A hint the schema omits falls back to every source, and
36
+ * for URLs to every source but `serviceaccount`.
37
+ */
38
+ function connectionSecretSources(schema) {
39
+ return {
40
+ secretSources: sourcesHint(schema, SECRET_SOURCES_HINT, ALL_SECRET_SOURCES),
41
+ urlSources: sourcesHint(schema, URL_SOURCES_HINT, DEFAULT_URL_SOURCES)
42
+ };
43
+ }
44
+ function namespaceQuery(namespace) {
45
+ return namespace ? `&namespace=${encodeURIComponent(namespace)}` : "";
46
+ }
47
+ /** The secret-catalog loaders, on `{apiBase}/connections/{secrets,workloads,…}`. */
48
+ function connectionSecretLoaders({ apiBase, fetcher = fetchJson }) {
49
+ const base = `${require_string.stripTrailingSlashes(apiBase)}/connections`;
50
+ return {
51
+ loadResources: (kind, namespace) => fetcher(`${base}/secrets?kind=${kind}${namespaceQuery(namespace)}`),
52
+ loadKeyPreview: (kind, name, namespace) => fetcher(`${base}/secrets/preview?kind=${kind}&name=${encodeURIComponent(name)}${namespaceQuery(namespace)}`),
53
+ loadServiceAccounts: (namespace) => fetcher(`${base}/secrets?kind=serviceaccount${namespaceQuery(namespace)}`),
54
+ loadOnePasswordVaults: () => fetcher(`${base}/secrets/onepassword/vaults`),
55
+ loadOnePasswordItems: (vaultID) => fetcher(`${base}/secrets/onepassword/items?vault=${encodeURIComponent(vaultID)}`),
56
+ loadOnePasswordFields: (vaultID, itemID) => fetcher(`${base}/secrets/onepassword/fields?vault=${encodeURIComponent(vaultID)}&item=${encodeURIComponent(itemID)}`),
57
+ loadWorkloads: (namespace, kinds) => fetcher(`${base}/workloads?namespace=${encodeURIComponent(namespace)}&kinds=${kinds.join(",")}`)
58
+ };
59
+ }
60
+ /**
61
+ * The connection form's Kubernetes pickers, built from the served schema: the
62
+ * namespace selector (`x-clicky-component: "k8s-namespace-selector"`, skipped on
63
+ * read-only fields) and the secret / URL selectors, offering only the sources
64
+ * the schema's `x-clicky-*-sources` hints allow. Every lookup goes to
65
+ * `{apiBase}/connections/…`, the routes commons-db mounts with its secret
66
+ * catalog. `ConnectionsPage` applies this by default; an
67
+ * EntityExplorerApp host passes it as its form extensions.
68
+ */
69
+ function connectionSchemaFormExtensions({ apiBase, schema, fetcher = fetchJson }) {
70
+ const loaders = connectionSecretLoaders({
71
+ apiBase,
72
+ fetcher
73
+ });
74
+ const namespacesUrl = `${require_string.stripTrailingSlashes(apiBase)}/connections/namespaces`;
75
+ const loadNamespaces = () => fetcher(namespacesUrl);
76
+ const namespacePost = (field, nodes) => {
77
+ if (field.readOnly || field.schema["x-clicky-component"] !== NAMESPACE_COMPONENT) return nodes;
78
+ return {
79
+ label: nodes.label,
80
+ value: (0, react.createElement)(require_connectionNamespaceField.ConnectionNamespaceField, {
81
+ field,
82
+ loadNamespaces
83
+ })
84
+ };
85
+ };
86
+ return {
87
+ pre: [],
88
+ post: [namespacePost, ...require_secret_form_extension.createSecretFormExtensions({
89
+ loaders,
90
+ ...connectionSecretSources(schema)
91
+ }).post]
92
+ };
93
+ }
94
+ exports.connectionSchemaFormExtensions = connectionSchemaFormExtensions;
95
+ exports.connectionSecretLoaders = connectionSecretLoaders;
96
+ exports.connectionSecretSources = connectionSecretSources;
97
+
98
+ //# sourceMappingURL=connectionSchemaFormExtensions.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionSchemaFormExtensions.cjs","names":["stripTrailingSlashes","createElement","ConnectionNamespaceField","createSecretFormExtensions"],"sources":["../../src/connections/connectionSchemaFormExtensions.ts"],"sourcesContent":["import { createElement } from \"react\";\nimport type { PostExtension } from \"../components/json-schema-form-runtime-types\";\nimport type { JsonSchemaObject } from \"../components/json-schema-form-types\";\nimport type { SecretValueSource } from \"../components/SecretKeySelector\";\nimport {\n createSecretFormExtensions,\n type SecretFormLoaders,\n} from \"../components/secret-form-extension\";\nimport { stripTrailingSlashes } from \"../lib/string\";\nimport { ConnectionNamespaceField } from \"./connectionNamespaceField\";\nimport type { ConnectionFormExtensions } from \"./connectionsPageModel\";\n\nconst NAMESPACE_COMPONENT = \"k8s-namespace-selector\";\nconst SECRET_SOURCES_HINT = \"x-clicky-secret-sources\";\nconst URL_SOURCES_HINT = \"x-clicky-url-sources\";\n\nconst ALL_SECRET_SOURCES: readonly SecretValueSource[] = [\n \"secret\",\n \"configmap\",\n \"helm\",\n \"serviceaccount\",\n \"onepassword\",\n \"value\",\n];\nconst DEFAULT_URL_SOURCES = ALL_SECRET_SOURCES.filter((source) => source !== \"serviceaccount\");\n\n/** Fetches `url` and returns its JSON body, rejecting on a non-2xx answer. */\nexport type ConnectionJsonFetcher = <T>(url: string) => Promise<T>;\n\nexport type ConnectionSchemaFormExtensionsOptions = {\n /** Where the commons-db connections service is mounted, e.g. `/api/v1`. */\n apiBase: string;\n /** The connection JSON Schema the service serves; its root carries the source hints. */\n schema: JsonSchemaObject;\n /** Defaults to `fetch`, the request the dashboard and Test / Resolve use. */\n fetcher?: ConnectionJsonFetcher;\n};\n\nexport type ConnectionSecretSources = {\n secretSources: SecretValueSource[];\n urlSources: SecretValueSource[];\n};\n\nconst fetchJson: ConnectionJsonFetcher = async <T>(url: string) => {\n const response = await fetch(url, { headers: { Accept: \"application/json\" } });\n if (!response.ok) {\n throw new Error(`GET ${url} failed with ${response.status}: ${(await response.text()).trim()}`);\n }\n return (await response.json()) as T;\n};\n\nfunction sourcesHint(\n schema: JsonSchemaObject,\n hint: string,\n fallback: readonly SecretValueSource[],\n): SecretValueSource[] {\n const declared = schema[hint];\n if (declared === undefined) return [...fallback];\n if (!Array.isArray(declared) || declared.length === 0) {\n throw new Error(`connection schema ${hint} must be a non-empty array of secret sources`);\n }\n return declared.map((source) => {\n if (!ALL_SECRET_SOURCES.includes(source as SecretValueSource)) {\n throw new Error(\n `connection schema ${hint} lists unknown source ${JSON.stringify(source)}; expected one of ${ALL_SECRET_SOURCES.join(\", \")}`,\n );\n }\n return source as SecretValueSource;\n });\n}\n\n/**\n * The value sources a connection form offers, read from the schema's root\n * `x-clicky-secret-sources` / `x-clicky-url-sources` hints (the per-app policy\n * commons-db serves). A hint the schema omits falls back to every source, and\n * for URLs to every source but `serviceaccount`.\n */\nexport function connectionSecretSources(schema: JsonSchemaObject): ConnectionSecretSources {\n return {\n secretSources: sourcesHint(schema, SECRET_SOURCES_HINT, ALL_SECRET_SOURCES),\n urlSources: sourcesHint(schema, URL_SOURCES_HINT, DEFAULT_URL_SOURCES),\n };\n}\n\nfunction namespaceQuery(namespace: string): string {\n return namespace ? `&namespace=${encodeURIComponent(namespace)}` : \"\";\n}\n\n/** The secret-catalog loaders, on `{apiBase}/connections/{secrets,workloads,…}`. */\nexport function connectionSecretLoaders({\n apiBase,\n fetcher = fetchJson,\n}: {\n apiBase: string;\n fetcher?: ConnectionJsonFetcher;\n}): SecretFormLoaders {\n const base = `${stripTrailingSlashes(apiBase)}/connections`;\n return {\n loadResources: (kind, namespace) =>\n fetcher(`${base}/secrets?kind=${kind}${namespaceQuery(namespace)}`),\n loadKeyPreview: (kind, name, namespace) =>\n fetcher(\n `${base}/secrets/preview?kind=${kind}&name=${encodeURIComponent(name)}${namespaceQuery(namespace)}`,\n ),\n loadServiceAccounts: (namespace) =>\n fetcher(`${base}/secrets?kind=serviceaccount${namespaceQuery(namespace)}`),\n loadOnePasswordVaults: () => fetcher(`${base}/secrets/onepassword/vaults`),\n loadOnePasswordItems: (vaultID) =>\n fetcher(`${base}/secrets/onepassword/items?vault=${encodeURIComponent(vaultID)}`),\n loadOnePasswordFields: (vaultID, itemID) =>\n fetcher(\n `${base}/secrets/onepassword/fields?vault=${encodeURIComponent(vaultID)}&item=${encodeURIComponent(itemID)}`,\n ),\n loadWorkloads: (namespace, kinds) =>\n fetcher(`${base}/workloads?namespace=${encodeURIComponent(namespace)}&kinds=${kinds.join(\",\")}`),\n };\n}\n\n/**\n * The connection form's Kubernetes pickers, built from the served schema: the\n * namespace selector (`x-clicky-component: \"k8s-namespace-selector\"`, skipped on\n * read-only fields) and the secret / URL selectors, offering only the sources\n * the schema's `x-clicky-*-sources` hints allow. Every lookup goes to\n * `{apiBase}/connections/…`, the routes commons-db mounts with its secret\n * catalog. `ConnectionsPage` applies this by default; an\n * EntityExplorerApp host passes it as its form extensions.\n */\nexport function connectionSchemaFormExtensions({\n apiBase,\n schema,\n fetcher = fetchJson,\n}: ConnectionSchemaFormExtensionsOptions): Required<ConnectionFormExtensions> {\n const loaders = connectionSecretLoaders({ apiBase, fetcher });\n const namespacesUrl = `${stripTrailingSlashes(apiBase)}/connections/namespaces`;\n // One stable function: NamespacePicker reloads whenever its loader changes.\n const loadNamespaces = () => fetcher<string[]>(namespacesUrl);\n const namespacePost: PostExtension = (field, nodes) => {\n if (field.readOnly || field.schema[\"x-clicky-component\"] !== NAMESPACE_COMPONENT) return nodes;\n return {\n label: nodes.label,\n value: createElement(ConnectionNamespaceField, { field, loadNamespaces }),\n };\n };\n const secrets = createSecretFormExtensions({ loaders, ...connectionSecretSources(schema) });\n return { pre: [], post: [namespacePost, ...secrets.post] };\n}\n"],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { JsonSchemaObject } from '../components/json-schema-form-types.js';
2
+ import { SecretValueSource } from '../components/SecretKeySelector.js';
3
+ import { SecretFormLoaders } from '../components/secret-form-extension.js';
4
+ import { ConnectionFormExtensions } from './connectionsPageModel.js';
5
+ /** Fetches `url` and returns its JSON body, rejecting on a non-2xx answer. */
6
+ export type ConnectionJsonFetcher = <T>(url: string) => Promise<T>;
7
+ export type ConnectionSchemaFormExtensionsOptions = {
8
+ /** Where the commons-db connections service is mounted, e.g. `/api/v1`. */
9
+ apiBase: string;
10
+ /** The connection JSON Schema the service serves; its root carries the source hints. */
11
+ schema: JsonSchemaObject;
12
+ /** Defaults to `fetch`, the request the dashboard and Test / Resolve use. */
13
+ fetcher?: ConnectionJsonFetcher;
14
+ };
15
+ export type ConnectionSecretSources = {
16
+ secretSources: SecretValueSource[];
17
+ urlSources: SecretValueSource[];
18
+ };
19
+ /**
20
+ * The value sources a connection form offers, read from the schema's root
21
+ * `x-clicky-secret-sources` / `x-clicky-url-sources` hints (the per-app policy
22
+ * commons-db serves). A hint the schema omits falls back to every source, and
23
+ * for URLs to every source but `serviceaccount`.
24
+ */
25
+ export declare function connectionSecretSources(schema: JsonSchemaObject): ConnectionSecretSources;
26
+ /** The secret-catalog loaders, on `{apiBase}/connections/{secrets,workloads,…}`. */
27
+ export declare function connectionSecretLoaders({ apiBase, fetcher, }: {
28
+ apiBase: string;
29
+ fetcher?: ConnectionJsonFetcher;
30
+ }): SecretFormLoaders;
31
+ /**
32
+ * The connection form's Kubernetes pickers, built from the served schema: the
33
+ * namespace selector (`x-clicky-component: "k8s-namespace-selector"`, skipped on
34
+ * read-only fields) and the secret / URL selectors, offering only the sources
35
+ * the schema's `x-clicky-*-sources` hints allow. Every lookup goes to
36
+ * `{apiBase}/connections/…`, the routes commons-db mounts with its secret
37
+ * catalog. `ConnectionsPage` applies this by default; an
38
+ * EntityExplorerApp host passes it as its form extensions.
39
+ */
40
+ export declare function connectionSchemaFormExtensions({ apiBase, schema, fetcher, }: ConnectionSchemaFormExtensionsOptions): Required<ConnectionFormExtensions>;
41
+ //# sourceMappingURL=connectionSchemaFormExtensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionSchemaFormExtensions.d.ts","sourceRoot":"","sources":["../../src/connections/connectionSchemaFormExtensions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,qCAAqC,CAAC;AAG7C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAgBvE,8EAA8E;AAC9E,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAEnE,MAAM,MAAM,qCAAqC,GAAG;IAClD,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB,wFAAwF;IACxF,MAAM,EAAE,gBAAgB,CAAC;IACzB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,UAAU,EAAE,iBAAiB,EAAE,CAAC;CACjC,CAAC;AA8BF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,uBAAuB,CAKzF;AAMD,oFAAoF;AACpF,wBAAgB,uBAAuB,CAAC,EACtC,OAAO,EACP,OAAmB,GACpB,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC,GAAG,iBAAiB,CAqBpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,EAC7C,OAAO,EACP,MAAM,EACN,OAAmB,GACpB,EAAE,qCAAqC,GAAG,QAAQ,CAAC,wBAAwB,CAAC,CAc5E"}
@@ -0,0 +1,96 @@
1
+ import { createSecretFormExtensions } from "../components/secret-form-extension.js";
2
+ import { stripTrailingSlashes } from "../lib/string.js";
3
+ import { ConnectionNamespaceField } from "./connectionNamespaceField.js";
4
+ import { createElement } from "react";
5
+ // src/connections/connectionSchemaFormExtensions.ts
6
+ var NAMESPACE_COMPONENT = "k8s-namespace-selector";
7
+ var SECRET_SOURCES_HINT = "x-clicky-secret-sources";
8
+ var URL_SOURCES_HINT = "x-clicky-url-sources";
9
+ var ALL_SECRET_SOURCES = [
10
+ "secret",
11
+ "configmap",
12
+ "helm",
13
+ "serviceaccount",
14
+ "onepassword",
15
+ "value"
16
+ ];
17
+ var DEFAULT_URL_SOURCES = ALL_SECRET_SOURCES.filter((source) => source !== "serviceaccount");
18
+ var fetchJson = async (url) => {
19
+ const response = await fetch(url, { headers: { Accept: "application/json" } });
20
+ if (!response.ok) throw new Error(`GET ${url} failed with ${response.status}: ${(await response.text()).trim()}`);
21
+ return await response.json();
22
+ };
23
+ function sourcesHint(schema, hint, fallback) {
24
+ const declared = schema[hint];
25
+ if (declared === void 0) return [...fallback];
26
+ if (!Array.isArray(declared) || declared.length === 0) throw new Error(`connection schema ${hint} must be a non-empty array of secret sources`);
27
+ return declared.map((source) => {
28
+ if (!ALL_SECRET_SOURCES.includes(source)) throw new Error(`connection schema ${hint} lists unknown source ${JSON.stringify(source)}; expected one of ${ALL_SECRET_SOURCES.join(", ")}`);
29
+ return source;
30
+ });
31
+ }
32
+ /**
33
+ * The value sources a connection form offers, read from the schema's root
34
+ * `x-clicky-secret-sources` / `x-clicky-url-sources` hints (the per-app policy
35
+ * commons-db serves). A hint the schema omits falls back to every source, and
36
+ * for URLs to every source but `serviceaccount`.
37
+ */
38
+ function connectionSecretSources(schema) {
39
+ return {
40
+ secretSources: sourcesHint(schema, SECRET_SOURCES_HINT, ALL_SECRET_SOURCES),
41
+ urlSources: sourcesHint(schema, URL_SOURCES_HINT, DEFAULT_URL_SOURCES)
42
+ };
43
+ }
44
+ function namespaceQuery(namespace) {
45
+ return namespace ? `&namespace=${encodeURIComponent(namespace)}` : "";
46
+ }
47
+ /** The secret-catalog loaders, on `{apiBase}/connections/{secrets,workloads,…}`. */
48
+ function connectionSecretLoaders({ apiBase, fetcher = fetchJson }) {
49
+ const base = `${stripTrailingSlashes(apiBase)}/connections`;
50
+ return {
51
+ loadResources: (kind, namespace) => fetcher(`${base}/secrets?kind=${kind}${namespaceQuery(namespace)}`),
52
+ loadKeyPreview: (kind, name, namespace) => fetcher(`${base}/secrets/preview?kind=${kind}&name=${encodeURIComponent(name)}${namespaceQuery(namespace)}`),
53
+ loadServiceAccounts: (namespace) => fetcher(`${base}/secrets?kind=serviceaccount${namespaceQuery(namespace)}`),
54
+ loadOnePasswordVaults: () => fetcher(`${base}/secrets/onepassword/vaults`),
55
+ loadOnePasswordItems: (vaultID) => fetcher(`${base}/secrets/onepassword/items?vault=${encodeURIComponent(vaultID)}`),
56
+ loadOnePasswordFields: (vaultID, itemID) => fetcher(`${base}/secrets/onepassword/fields?vault=${encodeURIComponent(vaultID)}&item=${encodeURIComponent(itemID)}`),
57
+ loadWorkloads: (namespace, kinds) => fetcher(`${base}/workloads?namespace=${encodeURIComponent(namespace)}&kinds=${kinds.join(",")}`)
58
+ };
59
+ }
60
+ /**
61
+ * The connection form's Kubernetes pickers, built from the served schema: the
62
+ * namespace selector (`x-clicky-component: "k8s-namespace-selector"`, skipped on
63
+ * read-only fields) and the secret / URL selectors, offering only the sources
64
+ * the schema's `x-clicky-*-sources` hints allow. Every lookup goes to
65
+ * `{apiBase}/connections/…`, the routes commons-db mounts with its secret
66
+ * catalog. `ConnectionsPage` applies this by default; an
67
+ * EntityExplorerApp host passes it as its form extensions.
68
+ */
69
+ function connectionSchemaFormExtensions({ apiBase, schema, fetcher = fetchJson }) {
70
+ const loaders = connectionSecretLoaders({
71
+ apiBase,
72
+ fetcher
73
+ });
74
+ const namespacesUrl = `${stripTrailingSlashes(apiBase)}/connections/namespaces`;
75
+ const loadNamespaces = () => fetcher(namespacesUrl);
76
+ const namespacePost = (field, nodes) => {
77
+ if (field.readOnly || field.schema["x-clicky-component"] !== NAMESPACE_COMPONENT) return nodes;
78
+ return {
79
+ label: nodes.label,
80
+ value: createElement(ConnectionNamespaceField, {
81
+ field,
82
+ loadNamespaces
83
+ })
84
+ };
85
+ };
86
+ return {
87
+ pre: [],
88
+ post: [namespacePost, ...createSecretFormExtensions({
89
+ loaders,
90
+ ...connectionSecretSources(schema)
91
+ }).post]
92
+ };
93
+ }
94
+ export { connectionSchemaFormExtensions, connectionSecretLoaders, connectionSecretSources };
95
+
96
+ //# sourceMappingURL=connectionSchemaFormExtensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionSchemaFormExtensions.js","names":[],"sources":["../../src/connections/connectionSchemaFormExtensions.ts"],"sourcesContent":["import { createElement } from \"react\";\nimport type { PostExtension } from \"../components/json-schema-form-runtime-types\";\nimport type { JsonSchemaObject } from \"../components/json-schema-form-types\";\nimport type { SecretValueSource } from \"../components/SecretKeySelector\";\nimport {\n createSecretFormExtensions,\n type SecretFormLoaders,\n} from \"../components/secret-form-extension\";\nimport { stripTrailingSlashes } from \"../lib/string\";\nimport { ConnectionNamespaceField } from \"./connectionNamespaceField\";\nimport type { ConnectionFormExtensions } from \"./connectionsPageModel\";\n\nconst NAMESPACE_COMPONENT = \"k8s-namespace-selector\";\nconst SECRET_SOURCES_HINT = \"x-clicky-secret-sources\";\nconst URL_SOURCES_HINT = \"x-clicky-url-sources\";\n\nconst ALL_SECRET_SOURCES: readonly SecretValueSource[] = [\n \"secret\",\n \"configmap\",\n \"helm\",\n \"serviceaccount\",\n \"onepassword\",\n \"value\",\n];\nconst DEFAULT_URL_SOURCES = ALL_SECRET_SOURCES.filter((source) => source !== \"serviceaccount\");\n\n/** Fetches `url` and returns its JSON body, rejecting on a non-2xx answer. */\nexport type ConnectionJsonFetcher = <T>(url: string) => Promise<T>;\n\nexport type ConnectionSchemaFormExtensionsOptions = {\n /** Where the commons-db connections service is mounted, e.g. `/api/v1`. */\n apiBase: string;\n /** The connection JSON Schema the service serves; its root carries the source hints. */\n schema: JsonSchemaObject;\n /** Defaults to `fetch`, the request the dashboard and Test / Resolve use. */\n fetcher?: ConnectionJsonFetcher;\n};\n\nexport type ConnectionSecretSources = {\n secretSources: SecretValueSource[];\n urlSources: SecretValueSource[];\n};\n\nconst fetchJson: ConnectionJsonFetcher = async <T>(url: string) => {\n const response = await fetch(url, { headers: { Accept: \"application/json\" } });\n if (!response.ok) {\n throw new Error(`GET ${url} failed with ${response.status}: ${(await response.text()).trim()}`);\n }\n return (await response.json()) as T;\n};\n\nfunction sourcesHint(\n schema: JsonSchemaObject,\n hint: string,\n fallback: readonly SecretValueSource[],\n): SecretValueSource[] {\n const declared = schema[hint];\n if (declared === undefined) return [...fallback];\n if (!Array.isArray(declared) || declared.length === 0) {\n throw new Error(`connection schema ${hint} must be a non-empty array of secret sources`);\n }\n return declared.map((source) => {\n if (!ALL_SECRET_SOURCES.includes(source as SecretValueSource)) {\n throw new Error(\n `connection schema ${hint} lists unknown source ${JSON.stringify(source)}; expected one of ${ALL_SECRET_SOURCES.join(\", \")}`,\n );\n }\n return source as SecretValueSource;\n });\n}\n\n/**\n * The value sources a connection form offers, read from the schema's root\n * `x-clicky-secret-sources` / `x-clicky-url-sources` hints (the per-app policy\n * commons-db serves). A hint the schema omits falls back to every source, and\n * for URLs to every source but `serviceaccount`.\n */\nexport function connectionSecretSources(schema: JsonSchemaObject): ConnectionSecretSources {\n return {\n secretSources: sourcesHint(schema, SECRET_SOURCES_HINT, ALL_SECRET_SOURCES),\n urlSources: sourcesHint(schema, URL_SOURCES_HINT, DEFAULT_URL_SOURCES),\n };\n}\n\nfunction namespaceQuery(namespace: string): string {\n return namespace ? `&namespace=${encodeURIComponent(namespace)}` : \"\";\n}\n\n/** The secret-catalog loaders, on `{apiBase}/connections/{secrets,workloads,…}`. */\nexport function connectionSecretLoaders({\n apiBase,\n fetcher = fetchJson,\n}: {\n apiBase: string;\n fetcher?: ConnectionJsonFetcher;\n}): SecretFormLoaders {\n const base = `${stripTrailingSlashes(apiBase)}/connections`;\n return {\n loadResources: (kind, namespace) =>\n fetcher(`${base}/secrets?kind=${kind}${namespaceQuery(namespace)}`),\n loadKeyPreview: (kind, name, namespace) =>\n fetcher(\n `${base}/secrets/preview?kind=${kind}&name=${encodeURIComponent(name)}${namespaceQuery(namespace)}`,\n ),\n loadServiceAccounts: (namespace) =>\n fetcher(`${base}/secrets?kind=serviceaccount${namespaceQuery(namespace)}`),\n loadOnePasswordVaults: () => fetcher(`${base}/secrets/onepassword/vaults`),\n loadOnePasswordItems: (vaultID) =>\n fetcher(`${base}/secrets/onepassword/items?vault=${encodeURIComponent(vaultID)}`),\n loadOnePasswordFields: (vaultID, itemID) =>\n fetcher(\n `${base}/secrets/onepassword/fields?vault=${encodeURIComponent(vaultID)}&item=${encodeURIComponent(itemID)}`,\n ),\n loadWorkloads: (namespace, kinds) =>\n fetcher(`${base}/workloads?namespace=${encodeURIComponent(namespace)}&kinds=${kinds.join(\",\")}`),\n };\n}\n\n/**\n * The connection form's Kubernetes pickers, built from the served schema: the\n * namespace selector (`x-clicky-component: \"k8s-namespace-selector\"`, skipped on\n * read-only fields) and the secret / URL selectors, offering only the sources\n * the schema's `x-clicky-*-sources` hints allow. Every lookup goes to\n * `{apiBase}/connections/…`, the routes commons-db mounts with its secret\n * catalog. `ConnectionsPage` applies this by default; an\n * EntityExplorerApp host passes it as its form extensions.\n */\nexport function connectionSchemaFormExtensions({\n apiBase,\n schema,\n fetcher = fetchJson,\n}: ConnectionSchemaFormExtensionsOptions): Required<ConnectionFormExtensions> {\n const loaders = connectionSecretLoaders({ apiBase, fetcher });\n const namespacesUrl = `${stripTrailingSlashes(apiBase)}/connections/namespaces`;\n // One stable function: NamespacePicker reloads whenever its loader changes.\n const loadNamespaces = () => fetcher<string[]>(namespacesUrl);\n const namespacePost: PostExtension = (field, nodes) => {\n if (field.readOnly || field.schema[\"x-clicky-component\"] !== NAMESPACE_COMPONENT) return nodes;\n return {\n label: nodes.label,\n value: createElement(ConnectionNamespaceField, { field, loadNamespaces }),\n };\n };\n const secrets = createSecretFormExtensions({ loaders, ...connectionSecretSources(schema) });\n return { pre: [], post: [namespacePost, ...secrets.post] };\n}\n"],"mappings":";;;;;AAYA,IAAM,sBAAsB;AAC5B,IAAM,sBAAsB;AAC5B,IAAM,mBAAmB;AAEzB,IAAM,qBAAmD;CACvD;CACA;CACA;CACA;CACA;CACA;AACF;AACA,IAAM,sBAAsB,mBAAmB,QAAQ,WAAW,WAAW,gBAAgB;AAmB7F,IAAM,YAAmC,OAAU,QAAgB;CACjE,MAAM,WAAW,MAAM,MAAM,KAAK,EAAE,SAAS,EAAE,QAAQ,mBAAmB,EAAE,CAAC;CAC7E,IAAI,CAAC,SAAS,IACZ,MAAM,IAAI,MAAM,OAAO,IAAI,eAAe,SAAS,OAAO,KAAK,MAAM,SAAS,KAAK,EAAA,CAAG,KAAK,GAAG;CAEhG,OAAQ,MAAM,SAAS,KAAK;AAC9B;AAEA,SAAS,YACP,QACA,MACA,UACqB;CACrB,MAAM,WAAW,OAAO;CACxB,IAAI,aAAa,KAAA,GAAW,OAAO,CAAC,GAAG,QAAQ;CAC/C,IAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,WAAW,GAClD,MAAM,IAAI,MAAM,qBAAqB,KAAK,6CAA6C;CAEzF,OAAO,SAAS,KAAK,WAAW;EAC9B,IAAI,CAAC,mBAAmB,SAAS,MAA2B,GAC1D,MAAM,IAAI,MACR,qBAAqB,KAAK,wBAAwB,KAAK,UAAU,MAAM,EAAE,oBAAoB,mBAAmB,KAAK,IAAI,GAC3H;EAEF,OAAO;CACT,CAAC;AACH;;;;;;;AAQA,SAAgB,wBAAwB,QAAmD;CACzF,OAAO;EACL,eAAe,YAAY,QAAQ,qBAAqB,kBAAkB;EAC1E,YAAY,YAAY,QAAQ,kBAAkB,mBAAmB;CACvE;AACF;AAEA,SAAS,eAAe,WAA2B;CACjD,OAAO,YAAY,cAAc,mBAAmB,SAAS,MAAM;AACrE;;AAGA,SAAgB,wBAAwB,EACtC,SACA,UAAU,aAIU;CACpB,MAAM,OAAO,GAAG,qBAAqB,OAAO,EAAE;CAC9C,OAAO;EACL,gBAAgB,MAAM,cACpB,QAAQ,GAAG,KAAK,gBAAgB,OAAO,eAAe,SAAS,GAAG;EACpE,iBAAiB,MAAM,MAAM,cAC3B,QACE,GAAG,KAAK,wBAAwB,KAAK,QAAQ,mBAAmB,IAAI,IAAI,eAAe,SAAS,GAClG;EACF,sBAAsB,cACpB,QAAQ,GAAG,KAAK,8BAA8B,eAAe,SAAS,GAAG;EAC3E,6BAA6B,QAAQ,GAAG,KAAK,4BAA4B;EACzE,uBAAuB,YACrB,QAAQ,GAAG,KAAK,mCAAmC,mBAAmB,OAAO,GAAG;EAClF,wBAAwB,SAAS,WAC/B,QACE,GAAG,KAAK,oCAAoC,mBAAmB,OAAO,EAAE,QAAQ,mBAAmB,MAAM,GAC3G;EACF,gBAAgB,WAAW,UACzB,QAAQ,GAAG,KAAK,uBAAuB,mBAAmB,SAAS,EAAE,SAAS,MAAM,KAAK,GAAG,GAAG;CACnG;AACF;;;;;;;;;;AAWA,SAAgB,+BAA+B,EAC7C,SACA,QACA,UAAU,aACkE;CAC5E,MAAM,UAAU,wBAAwB;EAAE;EAAS;CAAQ,CAAC;CAC5D,MAAM,gBAAgB,GAAG,qBAAqB,OAAO,EAAE;CAEvD,MAAM,uBAAuB,QAAkB,aAAa;CAC5D,MAAM,iBAAgC,OAAO,UAAU;EACrD,IAAI,MAAM,YAAY,MAAM,OAAO,0BAA0B,qBAAqB,OAAO;EACzF,OAAO;GACL,OAAO,MAAM;GACb,OAAO,cAAc,0BAA0B;IAAE;IAAO;GAAe,CAAC;EAC1E;CACF;CAEA,OAAO;EAAE,KAAK,CAAC;EAAG,MAAM,CAAC,eAAe,GADxB,2BAA2B;GAAE;GAAS,GAAG,wBAAwB,MAAM;EAAE,CAC9C,CAAA,CAAQ,IAAI;CAAE;AAC3D"}
@@ -3,6 +3,16 @@ const require_connectionLogging = require("./connectionLogging.cjs");
3
3
  // src/connections/connectionsPageModel.ts
4
4
  var unitFormExtensions = require_unit_form_extension.createUnitFormExtensions();
5
5
  /**
6
+ * Concatenates form extension sets in argument order, so an earlier set (the
7
+ * schema-derived defaults) runs before a later one (the host's own).
8
+ */
9
+ function mergeConnectionFormExtensions(...sets) {
10
+ return {
11
+ pre: sets.flatMap((set) => set?.pre ?? []),
12
+ post: sets.flatMap((set) => set?.post ?? [])
13
+ };
14
+ }
15
+ /**
6
16
  * The connection form's extensions: the unit-aware inputs (`x-clicky-unit`)
7
17
  * and the logging policy editor the connection schema always uses, around
8
18
  * whatever pickers the host adds (the query app's namespace and secret
@@ -53,6 +63,7 @@ exports.connectionFormExtensions = connectionFormExtensions;
53
63
  exports.createConnectionAction = createConnectionAction;
54
64
  exports.isPlainLeftClick = isPlainLeftClick;
55
65
  exports.isReadOnlyConnection = isReadOnlyConnection;
66
+ exports.mergeConnectionFormExtensions = mergeConnectionFormExtensions;
56
67
  exports.updateConnectionAction = updateConnectionAction;
57
68
 
58
69
  //# sourceMappingURL=connectionsPageModel.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"connectionsPageModel.cjs","names":["createUnitFormExtensions","connectionLoggingFormExtensions"],"sources":["../../src/connections/connectionsPageModel.ts"],"sourcesContent":["import type { MouseEvent } from \"react\";\nimport type {\n PostExtension,\n PreExtension,\n} from \"../components/json-schema-form-runtime-types\";\nimport { createUnitFormExtensions } from \"../components/unit-form-extension\";\nimport type { ResolvedOperation } from \"../rpc/types\";\nimport { connectionLoggingFormExtensions } from \"./connectionLogging\";\n\n/** JsonSchemaForm extensions a host adds to the connection form. */\nexport type ConnectionFormExtensions = {\n pre?: PreExtension[];\n post?: PostExtension[];\n};\n\nconst unitFormExtensions = createUnitFormExtensions();\n\n/**\n * The connection form's extensions: the unit-aware inputs (`x-clicky-unit`)\n * and the logging policy editor the connection schema always uses, around\n * whatever pickers the host adds (the query app's namespace and secret\n * selectors). A host without such pickers adds none, and the hinted fields\n * render as the plain controls their schema type implies.\n */\nexport function connectionFormExtensions(\n host: ConnectionFormExtensions = {},\n): Required<ConnectionFormExtensions> {\n return {\n pre: [\n ...unitFormExtensions.pre,\n ...(host.pre ?? []),\n ...connectionLoggingFormExtensions.pre,\n ],\n post: [...(host.post ?? []), ...connectionLoggingFormExtensions.post],\n };\n}\n\nexport const createConnectionAction: ResolvedOperation = {\n path: \"/connection\",\n method: \"post\",\n operation: { operationId: \"connection_create\", summary: \"Add Connection\" },\n};\n\nexport const updateConnectionAction: ResolvedOperation = {\n path: \"/connection/{id}\",\n method: \"put\",\n operation: { operationId: \"connection_update\", summary: \"Update connection\" },\n};\n\n/**\n * A connection the service refuses to save or delete (405): a virtual one from\n * a read-only provider such as a host's config file, or one flagged read-only.\n */\nexport function isReadOnlyConnection(connection: Record<string, unknown>): boolean {\n return connection.virtual === true || connection.read_only === true;\n}\n\n/**\n * Only a plain left click selects in place; modified and middle clicks fall\n * through to the browser so \"open in new tab\" keeps working on the row's href.\n */\nexport function isPlainLeftClick(event: MouseEvent<HTMLAnchorElement>): boolean {\n return (\n !event.defaultPrevented &&\n event.button === 0 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n );\n}\n"],"mappings":";;;AAeA,IAAM,qBAAqBA,4BAAAA,yBAAyB;;;;;;;;AASpD,SAAgB,yBACd,OAAiC,CAAC,GACE;CACpC,OAAO;EACL,KAAK;GACH,GAAG,mBAAmB;GACtB,GAAI,KAAK,OAAO,CAAC;GACjB,GAAGC,0BAAAA,gCAAgC;EACrC;EACA,MAAM,CAAC,GAAI,KAAK,QAAQ,CAAC,GAAI,GAAGA,0BAAAA,gCAAgC,IAAI;CACtE;AACF;AAEA,IAAa,yBAA4C;CACvD,MAAM;CACN,QAAQ;CACR,WAAW;EAAE,aAAa;EAAqB,SAAS;CAAiB;AAC3E;AAEA,IAAa,yBAA4C;CACvD,MAAM;CACN,QAAQ;CACR,WAAW;EAAE,aAAa;EAAqB,SAAS;CAAoB;AAC9E;;;;;AAMA,SAAgB,qBAAqB,YAA8C;CACjF,OAAO,WAAW,YAAY,QAAQ,WAAW,cAAc;AACjE;;;;;AAMA,SAAgB,iBAAiB,OAA+C;CAC9E,OACE,CAAC,MAAM,oBACP,MAAM,WAAW,KACjB,CAAC,MAAM,WACP,CAAC,MAAM,WACP,CAAC,MAAM,YACP,CAAC,MAAM;AAEX"}
1
+ {"version":3,"file":"connectionsPageModel.cjs","names":["createUnitFormExtensions","connectionLoggingFormExtensions"],"sources":["../../src/connections/connectionsPageModel.ts"],"sourcesContent":["import type { MouseEvent } from \"react\";\nimport type {\n PostExtension,\n PreExtension,\n} from \"../components/json-schema-form-runtime-types\";\nimport { createUnitFormExtensions } from \"../components/unit-form-extension\";\nimport type { ResolvedOperation } from \"../rpc/types\";\nimport { connectionLoggingFormExtensions } from \"./connectionLogging\";\n\n/** JsonSchemaForm extensions a host adds to the connection form. */\nexport type ConnectionFormExtensions = {\n pre?: PreExtension[];\n post?: PostExtension[];\n};\n\nconst unitFormExtensions = createUnitFormExtensions();\n\n/**\n * Concatenates form extension sets in argument order, so an earlier set (the\n * schema-derived defaults) runs before a later one (the host's own).\n */\nexport function mergeConnectionFormExtensions(\n ...sets: Array<ConnectionFormExtensions | undefined>\n): Required<ConnectionFormExtensions> {\n return {\n pre: sets.flatMap((set) => set?.pre ?? []),\n post: sets.flatMap((set) => set?.post ?? []),\n };\n}\n\n/**\n * The connection form's extensions: the unit-aware inputs (`x-clicky-unit`)\n * and the logging policy editor the connection schema always uses, around\n * whatever pickers the host adds (the query app's namespace and secret\n * selectors). A host without such pickers adds none, and the hinted fields\n * render as the plain controls their schema type implies.\n */\nexport function connectionFormExtensions(\n host: ConnectionFormExtensions = {},\n): Required<ConnectionFormExtensions> {\n return {\n pre: [\n ...unitFormExtensions.pre,\n ...(host.pre ?? []),\n ...connectionLoggingFormExtensions.pre,\n ],\n post: [...(host.post ?? []), ...connectionLoggingFormExtensions.post],\n };\n}\n\nexport const createConnectionAction: ResolvedOperation = {\n path: \"/connection\",\n method: \"post\",\n operation: { operationId: \"connection_create\", summary: \"Add Connection\" },\n};\n\nexport const updateConnectionAction: ResolvedOperation = {\n path: \"/connection/{id}\",\n method: \"put\",\n operation: { operationId: \"connection_update\", summary: \"Update connection\" },\n};\n\n/**\n * A connection the service refuses to save or delete (405): a virtual one from\n * a read-only provider such as a host's config file, or one flagged read-only.\n */\nexport function isReadOnlyConnection(connection: Record<string, unknown>): boolean {\n return connection.virtual === true || connection.read_only === true;\n}\n\n/**\n * Only a plain left click selects in place; modified and middle clicks fall\n * through to the browser so \"open in new tab\" keeps working on the row's href.\n */\nexport function isPlainLeftClick(event: MouseEvent<HTMLAnchorElement>): boolean {\n return (\n !event.defaultPrevented &&\n event.button === 0 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey\n );\n}\n"],"mappings":";;;AAeA,IAAM,qBAAqBA,4BAAAA,yBAAyB;;;;;AAMpD,SAAgB,8BACd,GAAG,MACiC;CACpC,OAAO;EACL,KAAK,KAAK,SAAS,QAAQ,KAAK,OAAO,CAAC,CAAC;EACzC,MAAM,KAAK,SAAS,QAAQ,KAAK,QAAQ,CAAC,CAAC;CAC7C;AACF;;;;;;;;AASA,SAAgB,yBACd,OAAiC,CAAC,GACE;CACpC,OAAO;EACL,KAAK;GACH,GAAG,mBAAmB;GACtB,GAAI,KAAK,OAAO,CAAC;GACjB,GAAGC,0BAAAA,gCAAgC;EACrC;EACA,MAAM,CAAC,GAAI,KAAK,QAAQ,CAAC,GAAI,GAAGA,0BAAAA,gCAAgC,IAAI;CACtE;AACF;AAEA,IAAa,yBAA4C;CACvD,MAAM;CACN,QAAQ;CACR,WAAW;EAAE,aAAa;EAAqB,SAAS;CAAiB;AAC3E;AAEA,IAAa,yBAA4C;CACvD,MAAM;CACN,QAAQ;CACR,WAAW;EAAE,aAAa;EAAqB,SAAS;CAAoB;AAC9E;;;;;AAMA,SAAgB,qBAAqB,YAA8C;CACjF,OAAO,WAAW,YAAY,QAAQ,WAAW,cAAc;AACjE;;;;;AAMA,SAAgB,iBAAiB,OAA+C;CAC9E,OACE,CAAC,MAAM,oBACP,MAAM,WAAW,KACjB,CAAC,MAAM,WACP,CAAC,MAAM,WACP,CAAC,MAAM,YACP,CAAC,MAAM;AAEX"}