@flanksource/clicky-ui 0.3.54 → 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 (999) 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 +42 -40
  628. package/dist/data/test-runner/MatrixMarks.cjs.map +1 -1
  629. package/dist/data/test-runner/MatrixMarks.d.ts +20 -4
  630. package/dist/data/test-runner/MatrixMarks.d.ts.map +1 -1
  631. package/dist/data/test-runner/MatrixMarks.js +43 -42
  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/index.d.ts +2 -2
  656. package/dist/data/test-runner/index.d.ts.map +1 -1
  657. package/dist/data/test-runner/matrix-marks.cjs +2 -11
  658. package/dist/data/test-runner/matrix-marks.cjs.map +1 -1
  659. package/dist/data/test-runner/matrix-marks.d.ts +2 -4
  660. package/dist/data/test-runner/matrix-marks.d.ts.map +1 -1
  661. package/dist/data/test-runner/matrix-marks.js +3 -11
  662. package/dist/data/test-runner/matrix-marks.js.map +1 -1
  663. package/dist/data/test-runner/types.d.ts +2 -0
  664. package/dist/data/test-runner/types.d.ts.map +1 -1
  665. package/dist/data/timeseries-query.cjs +98 -2
  666. package/dist/data/timeseries-query.cjs.map +1 -1
  667. package/dist/data/timeseries-query.d.ts +31 -5
  668. package/dist/data/timeseries-query.d.ts.map +1 -1
  669. package/dist/data/timeseries-query.js +98 -3
  670. package/dist/data/timeseries-query.js.map +1 -1
  671. package/dist/data/timeseries-stream-provider.cjs +38 -0
  672. package/dist/data/timeseries-stream-provider.cjs.map +1 -0
  673. package/dist/data/timeseries-stream-provider.d.ts +26 -0
  674. package/dist/data/timeseries-stream-provider.d.ts.map +1 -0
  675. package/dist/data/timeseries-stream-provider.js +38 -0
  676. package/dist/data/timeseries-stream-provider.js.map +1 -0
  677. package/dist/data/timeseries-stream.cjs +304 -0
  678. package/dist/data/timeseries-stream.cjs.map +1 -0
  679. package/dist/data/timeseries-stream.d.ts +81 -0
  680. package/dist/data/timeseries-stream.d.ts.map +1 -0
  681. package/dist/data/timeseries-stream.fixtures.d.ts +36 -0
  682. package/dist/data/timeseries-stream.fixtures.d.ts.map +1 -0
  683. package/dist/data/timeseries-stream.js +296 -0
  684. package/dist/data/timeseries-stream.js.map +1 -0
  685. package/dist/data/token-style.cjs +13 -0
  686. package/dist/data/token-style.cjs.map +1 -0
  687. package/dist/data/token-style.d.ts +4 -0
  688. package/dist/data/token-style.d.ts.map +1 -0
  689. package/dist/data/token-style.js +13 -0
  690. package/dist/data/token-style.js.map +1 -0
  691. package/dist/data/traces/ProcessTraceDetail.cjs +1 -1
  692. package/dist/data/traces/ProcessTraceDetail.js +1 -1
  693. package/dist/data/traces/index.d.ts +1 -1
  694. package/dist/data/traces/index.d.ts.map +1 -1
  695. package/dist/data/use-data-table-virtual.d.ts +1 -1
  696. package/dist/data/version-info.cjs +3 -3
  697. package/dist/data/version-info.js +3 -3
  698. package/dist/data/workload-panel/MemoryStack.cjs +49 -0
  699. package/dist/data/workload-panel/MemoryStack.cjs.map +1 -0
  700. package/dist/data/workload-panel/MemoryStack.d.ts +11 -0
  701. package/dist/data/workload-panel/MemoryStack.d.ts.map +1 -0
  702. package/dist/data/workload-panel/MemoryStack.js +48 -0
  703. package/dist/data/workload-panel/MemoryStack.js.map +1 -0
  704. package/dist/data/workload-panel/Metrics.cjs +197 -0
  705. package/dist/data/workload-panel/Metrics.cjs.map +1 -0
  706. package/dist/data/workload-panel/Metrics.d.ts +11 -0
  707. package/dist/data/workload-panel/Metrics.d.ts.map +1 -0
  708. package/dist/data/workload-panel/Metrics.js +196 -0
  709. package/dist/data/workload-panel/Metrics.js.map +1 -0
  710. package/dist/data/workload-panel/WorkloadPanel.cjs +66 -0
  711. package/dist/data/workload-panel/WorkloadPanel.cjs.map +1 -0
  712. package/dist/data/workload-panel/WorkloadPanel.d.ts +3 -0
  713. package/dist/data/workload-panel/WorkloadPanel.d.ts.map +1 -0
  714. package/dist/data/workload-panel/WorkloadPanel.js +66 -0
  715. package/dist/data/workload-panel/WorkloadPanel.js.map +1 -0
  716. package/dist/data/workload-panel/fixtures.d.ts +60 -0
  717. package/dist/data/workload-panel/fixtures.d.ts.map +1 -0
  718. package/dist/data/workload-panel/model.cjs +137 -0
  719. package/dist/data/workload-panel/model.cjs.map +1 -0
  720. package/dist/data/workload-panel/model.d.ts +53 -0
  721. package/dist/data/workload-panel/model.d.ts.map +1 -0
  722. package/dist/data/workload-panel/model.js +133 -0
  723. package/dist/data/workload-panel/model.js.map +1 -0
  724. package/dist/data/workload-panel/types.d.ts +56 -0
  725. package/dist/data/workload-panel/types.d.ts.map +1 -0
  726. package/dist/data.cjs +58 -7
  727. package/dist/data.d.ts +9 -1
  728. package/dist/data.d.ts.map +1 -1
  729. package/dist/data.js +29 -12
  730. package/dist/file-findings/AnnotatedCode.cjs +243 -0
  731. package/dist/file-findings/AnnotatedCode.cjs.map +1 -0
  732. package/dist/file-findings/AnnotatedCode.d.ts +30 -0
  733. package/dist/file-findings/AnnotatedCode.d.ts.map +1 -0
  734. package/dist/file-findings/AnnotatedCode.js +243 -0
  735. package/dist/file-findings/AnnotatedCode.js.map +1 -0
  736. package/dist/file-findings/FileFindingsView.cjs +213 -0
  737. package/dist/file-findings/FileFindingsView.cjs.map +1 -0
  738. package/dist/file-findings/FileFindingsView.d.ts +35 -0
  739. package/dist/file-findings/FileFindingsView.d.ts.map +1 -0
  740. package/dist/file-findings/FileFindingsView.js +213 -0
  741. package/dist/file-findings/FileFindingsView.js.map +1 -0
  742. package/dist/file-findings/LazyAnnotatedCode.cjs +22 -0
  743. package/dist/file-findings/LazyAnnotatedCode.cjs.map +1 -0
  744. package/dist/file-findings/LazyAnnotatedCode.d.ts +5 -0
  745. package/dist/file-findings/LazyAnnotatedCode.d.ts.map +1 -0
  746. package/dist/file-findings/LazyAnnotatedCode.js +22 -0
  747. package/dist/file-findings/LazyAnnotatedCode.js.map +1 -0
  748. package/dist/file-findings/adapters.cjs +155 -0
  749. package/dist/file-findings/adapters.cjs.map +1 -0
  750. package/dist/file-findings/adapters.d.ts +24 -0
  751. package/dist/file-findings/adapters.d.ts.map +1 -0
  752. package/dist/file-findings/adapters.js +153 -0
  753. package/dist/file-findings/adapters.js.map +1 -0
  754. package/dist/file-findings/file-review/CommentDraft.cjs +97 -0
  755. package/dist/file-findings/file-review/CommentDraft.cjs.map +1 -0
  756. package/dist/file-findings/file-review/CommentDraft.d.ts +25 -0
  757. package/dist/file-findings/file-review/CommentDraft.d.ts.map +1 -0
  758. package/dist/file-findings/file-review/CommentDraft.js +97 -0
  759. package/dist/file-findings/file-review/CommentDraft.js.map +1 -0
  760. package/dist/file-findings/file-review/FileReview.cjs +863 -0
  761. package/dist/file-findings/file-review/FileReview.cjs.map +1 -0
  762. package/dist/file-findings/file-review/FileReview.d.ts +79 -0
  763. package/dist/file-findings/file-review/FileReview.d.ts.map +1 -0
  764. package/dist/file-findings/file-review/FileReview.fixtures.d.ts +25 -0
  765. package/dist/file-findings/file-review/FileReview.fixtures.d.ts.map +1 -0
  766. package/dist/file-findings/file-review/FileReview.js +863 -0
  767. package/dist/file-findings/file-review/FileReview.js.map +1 -0
  768. package/dist/file-findings/file-review/InlineAuthors.cjs +77 -0
  769. package/dist/file-findings/file-review/InlineAuthors.cjs.map +1 -0
  770. package/dist/file-findings/file-review/InlineAuthors.d.ts +9 -0
  771. package/dist/file-findings/file-review/InlineAuthors.d.ts.map +1 -0
  772. package/dist/file-findings/file-review/InlineAuthors.js +77 -0
  773. package/dist/file-findings/file-review/InlineAuthors.js.map +1 -0
  774. package/dist/file-findings/file-review/InlineThread.cjs +77 -0
  775. package/dist/file-findings/file-review/InlineThread.cjs.map +1 -0
  776. package/dist/file-findings/file-review/InlineThread.d.ts +27 -0
  777. package/dist/file-findings/file-review/InlineThread.d.ts.map +1 -0
  778. package/dist/file-findings/file-review/InlineThread.js +77 -0
  779. package/dist/file-findings/file-review/InlineThread.js.map +1 -0
  780. package/dist/file-findings/file-review/ProblemsList.cjs +164 -0
  781. package/dist/file-findings/file-review/ProblemsList.cjs.map +1 -0
  782. package/dist/file-findings/file-review/ProblemsList.d.ts +15 -0
  783. package/dist/file-findings/file-review/ProblemsList.d.ts.map +1 -0
  784. package/dist/file-findings/file-review/ProblemsList.js +164 -0
  785. package/dist/file-findings/file-review/ProblemsList.js.map +1 -0
  786. package/dist/file-findings/file-review/SourceView.cjs +179 -0
  787. package/dist/file-findings/file-review/SourceView.cjs.map +1 -0
  788. package/dist/file-findings/file-review/SourceView.d.ts +29 -0
  789. package/dist/file-findings/file-review/SourceView.d.ts.map +1 -0
  790. package/dist/file-findings/file-review/SourceView.js +179 -0
  791. package/dist/file-findings/file-review/SourceView.js.map +1 -0
  792. package/dist/file-findings/file-review/blame.cjs +35 -0
  793. package/dist/file-findings/file-review/blame.cjs.map +1 -0
  794. package/dist/file-findings/file-review/blame.d.ts +28 -0
  795. package/dist/file-findings/file-review/blame.d.ts.map +1 -0
  796. package/dist/file-findings/file-review/blame.js +33 -0
  797. package/dist/file-findings/file-review/blame.js.map +1 -0
  798. package/dist/file-findings/file-review/geometry.cjs +101 -0
  799. package/dist/file-findings/file-review/geometry.cjs.map +1 -0
  800. package/dist/file-findings/file-review/geometry.d.ts +45 -0
  801. package/dist/file-findings/file-review/geometry.d.ts.map +1 -0
  802. package/dist/file-findings/file-review/geometry.js +98 -0
  803. package/dist/file-findings/file-review/geometry.js.map +1 -0
  804. package/dist/file-findings/file-review/hooks.cjs +101 -0
  805. package/dist/file-findings/file-review/hooks.cjs.map +1 -0
  806. package/dist/file-findings/file-review/hooks.d.ts +22 -0
  807. package/dist/file-findings/file-review/hooks.d.ts.map +1 -0
  808. package/dist/file-findings/file-review/hooks.js +99 -0
  809. package/dist/file-findings/file-review/hooks.js.map +1 -0
  810. package/dist/file-findings/file-review/marks.cjs +52 -0
  811. package/dist/file-findings/file-review/marks.cjs.map +1 -0
  812. package/dist/file-findings/file-review/marks.d.ts +23 -0
  813. package/dist/file-findings/file-review/marks.d.ts.map +1 -0
  814. package/dist/file-findings/file-review/marks.js +47 -0
  815. package/dist/file-findings/file-review/marks.js.map +1 -0
  816. package/dist/file-findings/file-review/problem-filters.cjs +14 -0
  817. package/dist/file-findings/file-review/problem-filters.cjs.map +1 -0
  818. package/dist/file-findings/file-review/problem-filters.d.ts +10 -0
  819. package/dist/file-findings/file-review/problem-filters.d.ts.map +1 -0
  820. package/dist/file-findings/file-review/problem-filters.js +13 -0
  821. package/dist/file-findings/file-review/problem-filters.js.map +1 -0
  822. package/dist/file-findings/file-review/quote-anchor.cjs +234 -0
  823. package/dist/file-findings/file-review/quote-anchor.cjs.map +1 -0
  824. package/dist/file-findings/file-review/quote-anchor.d.ts +54 -0
  825. package/dist/file-findings/file-review/quote-anchor.d.ts.map +1 -0
  826. package/dist/file-findings/file-review/quote-anchor.js +226 -0
  827. package/dist/file-findings/file-review/quote-anchor.js.map +1 -0
  828. package/dist/file-findings/file-review/source-anchor.cjs +104 -0
  829. package/dist/file-findings/file-review/source-anchor.cjs.map +1 -0
  830. package/dist/file-findings/file-review/source-anchor.d.ts +27 -0
  831. package/dist/file-findings/file-review/source-anchor.d.ts.map +1 -0
  832. package/dist/file-findings/file-review/source-anchor.js +99 -0
  833. package/dist/file-findings/file-review/source-anchor.js.map +1 -0
  834. package/dist/file-findings/file-review/source-marks.cjs +71 -0
  835. package/dist/file-findings/file-review/source-marks.cjs.map +1 -0
  836. package/dist/file-findings/file-review/source-marks.d.ts +27 -0
  837. package/dist/file-findings/file-review/source-marks.d.ts.map +1 -0
  838. package/dist/file-findings/file-review/source-marks.js +68 -0
  839. package/dist/file-findings/file-review/source-marks.js.map +1 -0
  840. package/dist/file-findings/findings-comments.cjs +136 -0
  841. package/dist/file-findings/findings-comments.cjs.map +1 -0
  842. package/dist/file-findings/findings-comments.d.ts +28 -0
  843. package/dist/file-findings/findings-comments.d.ts.map +1 -0
  844. package/dist/file-findings/findings-comments.js +131 -0
  845. package/dist/file-findings/findings-comments.js.map +1 -0
  846. package/dist/file-findings/findings-languages.cjs +53 -0
  847. package/dist/file-findings/findings-languages.cjs.map +1 -0
  848. package/dist/file-findings/findings-languages.d.ts +11 -0
  849. package/dist/file-findings/findings-languages.d.ts.map +1 -0
  850. package/dist/file-findings/findings-languages.js +53 -0
  851. package/dist/file-findings/findings-languages.js.map +1 -0
  852. package/dist/file-findings/mdx-source.cjs +48 -0
  853. package/dist/file-findings/mdx-source.cjs.map +1 -0
  854. package/dist/file-findings/mdx-source.d.ts +7 -0
  855. package/dist/file-findings/mdx-source.d.ts.map +1 -0
  856. package/dist/file-findings/mdx-source.js +48 -0
  857. package/dist/file-findings/mdx-source.js.map +1 -0
  858. package/dist/file-findings/monaco-language.cjs +73 -0
  859. package/dist/file-findings/monaco-language.cjs.map +1 -0
  860. package/dist/file-findings/monaco-language.d.ts +11 -0
  861. package/dist/file-findings/monaco-language.d.ts.map +1 -0
  862. package/dist/file-findings/monaco-language.js +72 -0
  863. package/dist/file-findings/monaco-language.js.map +1 -0
  864. package/dist/file-findings/severity-counts.cjs +20 -0
  865. package/dist/file-findings/severity-counts.cjs.map +1 -0
  866. package/dist/file-findings/severity-counts.d.ts +5 -0
  867. package/dist/file-findings/severity-counts.d.ts.map +1 -0
  868. package/dist/file-findings/severity-counts.js +19 -0
  869. package/dist/file-findings/severity-counts.js.map +1 -0
  870. package/dist/file-findings/types.cjs +12 -0
  871. package/dist/file-findings/types.cjs.map +1 -0
  872. package/dist/file-findings/types.d.ts +43 -0
  873. package/dist/file-findings/types.d.ts.map +1 -0
  874. package/dist/file-findings/types.js +11 -0
  875. package/dist/file-findings/types.js.map +1 -0
  876. package/dist/file-findings.cjs +47 -0
  877. package/dist/file-findings.d.ts +15 -0
  878. package/dist/file-findings.d.ts.map +1 -0
  879. package/dist/file-findings.js +15 -0
  880. package/dist/hooks/event-hub.cjs +22 -8
  881. package/dist/hooks/event-hub.cjs.map +1 -1
  882. package/dist/hooks/event-hub.d.ts.map +1 -1
  883. package/dist/hooks/event-hub.js +22 -8
  884. package/dist/hooks/event-hub.js.map +1 -1
  885. package/dist/icons/components/UiBrowser.cjs +51 -0
  886. package/dist/icons/components/UiBrowser.cjs.map +1 -0
  887. package/dist/icons/components/UiBrowser.d.ts +15 -0
  888. package/dist/icons/components/UiBrowser.d.ts.map +1 -0
  889. package/dist/icons/components/UiBrowser.js +48 -0
  890. package/dist/icons/components/UiBrowser.js.map +1 -0
  891. package/dist/icons/components/UiCreditCard.cjs +51 -0
  892. package/dist/icons/components/UiCreditCard.cjs.map +1 -0
  893. package/dist/icons/components/UiCreditCard.d.ts +15 -0
  894. package/dist/icons/components/UiCreditCard.d.ts.map +1 -0
  895. package/dist/icons/components/UiCreditCard.js +48 -0
  896. package/dist/icons/components/UiCreditCard.js.map +1 -0
  897. package/dist/icons/components/UiShoppingCart.cjs +51 -0
  898. package/dist/icons/components/UiShoppingCart.cjs.map +1 -0
  899. package/dist/icons/components/UiShoppingCart.d.ts +15 -0
  900. package/dist/icons/components/UiShoppingCart.d.ts.map +1 -0
  901. package/dist/icons/components/UiShoppingCart.js +48 -0
  902. package/dist/icons/components/UiShoppingCart.js.map +1 -0
  903. package/dist/icons/index.d.ts +6 -0
  904. package/dist/icons/index.d.ts.map +1 -1
  905. package/dist/icons/registry.cjs +6 -0
  906. package/dist/icons/registry.cjs.map +1 -1
  907. package/dist/icons/registry.d.ts.map +1 -1
  908. package/dist/icons/registry.js +6 -0
  909. package/dist/icons/registry.js.map +1 -1
  910. package/dist/icons.cjs +9 -0
  911. package/dist/icons.js +4 -1
  912. package/dist/index.cjs +76 -8
  913. package/dist/index.d.ts +1 -0
  914. package/dist/index.d.ts.map +1 -1
  915. package/dist/index.js +37 -14
  916. package/dist/layout/AppShell.cjs +37 -21
  917. package/dist/layout/AppShell.cjs.map +1 -1
  918. package/dist/layout/AppShell.d.ts +13 -2
  919. package/dist/layout/AppShell.d.ts.map +1 -1
  920. package/dist/layout/AppShell.js +37 -21
  921. package/dist/layout/AppShell.js.map +1 -1
  922. package/dist/layout/AppShell.nav.cjs +7 -6
  923. package/dist/layout/AppShell.nav.cjs.map +1 -1
  924. package/dist/layout/AppShell.nav.d.ts.map +1 -1
  925. package/dist/layout/AppShell.nav.js +7 -6
  926. package/dist/layout/AppShell.nav.js.map +1 -1
  927. package/dist/layout/SplitPane.cjs +16 -6
  928. package/dist/layout/SplitPane.cjs.map +1 -1
  929. package/dist/layout/SplitPane.d.ts +12 -2
  930. package/dist/layout/SplitPane.d.ts.map +1 -1
  931. package/dist/layout/SplitPane.js +16 -6
  932. package/dist/layout/SplitPane.js.map +1 -1
  933. package/dist/layout/Workspace.cjs +37 -33
  934. package/dist/layout/Workspace.cjs.map +1 -1
  935. package/dist/layout/Workspace.d.ts.map +1 -1
  936. package/dist/layout/Workspace.js +37 -33
  937. package/dist/layout/Workspace.js.map +1 -1
  938. package/dist/layout/Workspace.regions.cjs +3 -3
  939. package/dist/layout/Workspace.regions.cjs.map +1 -1
  940. package/dist/layout/Workspace.regions.js +3 -3
  941. package/dist/layout/Workspace.regions.js.map +1 -1
  942. package/dist/lib/breakpoints.cjs +102 -0
  943. package/dist/lib/breakpoints.cjs.map +1 -0
  944. package/dist/lib/breakpoints.d.ts +36 -0
  945. package/dist/lib/breakpoints.d.ts.map +1 -0
  946. package/dist/lib/breakpoints.js +99 -0
  947. package/dist/lib/breakpoints.js.map +1 -0
  948. package/dist/lib/combobox.cjs +2 -1
  949. package/dist/lib/combobox.cjs.map +1 -1
  950. package/dist/lib/combobox.d.ts +1 -1
  951. package/dist/lib/combobox.d.ts.map +1 -1
  952. package/dist/lib/combobox.js +2 -1
  953. package/dist/lib/combobox.js.map +1 -1
  954. package/dist/lib/path-tree.cjs +21 -0
  955. package/dist/lib/path-tree.cjs.map +1 -1
  956. package/dist/lib/path-tree.d.ts +15 -0
  957. package/dist/lib/path-tree.d.ts.map +1 -1
  958. package/dist/lib/path-tree.js +21 -1
  959. package/dist/lib/path-tree.js.map +1 -1
  960. package/dist/overlay/Modal.cjs +2 -1
  961. package/dist/overlay/Modal.cjs.map +1 -1
  962. package/dist/overlay/Modal.d.ts.map +1 -1
  963. package/dist/overlay/Modal.js +2 -1
  964. package/dist/overlay/Modal.js.map +1 -1
  965. package/dist/overlay/dropdownMenuContext.d.ts +1 -1
  966. package/dist/profiles/editor/profileEditor.cjs +1 -1
  967. package/dist/profiles/editor/profileEditor.cjs.map +1 -1
  968. package/dist/profiles/editor/profileEditor.js +1 -1
  969. package/dist/profiles/editor/profileEditor.js.map +1 -1
  970. package/dist/profiles/editor/profileEditorSections.cjs +2 -2
  971. package/dist/profiles/editor/profileEditorSections.cjs.map +1 -1
  972. package/dist/profiles/editor/profileEditorSections.js +2 -2
  973. package/dist/profiles/editor/profileEditorSections.js.map +1 -1
  974. package/dist/profiles/query/prometheusResults.cjs +24 -36
  975. package/dist/profiles/query/prometheusResults.cjs.map +1 -1
  976. package/dist/profiles/query/prometheusResults.d.ts.map +1 -1
  977. package/dist/profiles/query/prometheusResults.js +24 -36
  978. package/dist/profiles/query/prometheusResults.js.map +1 -1
  979. package/dist/rpc/CommandForm.cjs +1 -1
  980. package/dist/rpc/CommandForm.cjs.map +1 -1
  981. package/dist/rpc/CommandForm.js +1 -1
  982. package/dist/rpc/CommandForm.js.map +1 -1
  983. package/dist/rpc/classify.cjs +1 -1
  984. package/dist/rpc/classify.cjs.map +1 -1
  985. package/dist/rpc/classify.d.ts.map +1 -1
  986. package/dist/rpc/classify.js +1 -1
  987. package/dist/rpc/classify.js.map +1 -1
  988. package/dist/rpc/useOperations.d.ts +24 -24
  989. package/dist/rpc.cjs +0 -2
  990. package/dist/rpc.d.ts +0 -1
  991. package/dist/rpc.d.ts.map +1 -1
  992. package/dist/rpc.js +1 -2
  993. package/dist/styles.css +1 -1
  994. package/dist/utils.cjs +6 -0
  995. package/dist/utils.d.ts +2 -1
  996. package/dist/utils.d.ts.map +1 -1
  997. package/dist/utils.js +3 -2
  998. package/package.json +9 -3
  999. package/schemas/json-schema-form.schema.json +9 -1
@@ -12,7 +12,7 @@ let react_jsx_runtime = require("react/jsx-runtime");
12
12
  * Health checks dial real backends, so they are opt-in: nothing is probed until
13
13
  * the operator clicks a row's dot, a lane's Check button, or Check all.
14
14
  */
15
- function ConnectionDashboardSurface({ apiBase, requestUrl, renderConnectionLink }) {
15
+ function ConnectionDashboardSurface({ renderConnectionActions, apiBase, requestUrl, renderConnectionLink, emptyState }) {
16
16
  const dashboard = require_connectionDashboardQuery.useConnectionDashboard({
17
17
  apiBase,
18
18
  ...requestUrl ? { requestUrl } : {}
@@ -40,10 +40,13 @@ function ConnectionDashboardSurface({ apiBase, requestUrl, renderConnectionLink
40
40
  className: "rounded-lg border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive",
41
41
  children: "Connection dashboard returned no data."
42
42
  });
43
- if (connections.length === 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
44
- className: "rounded-lg border border-dashed p-8 text-center text-sm text-muted-foreground",
45
- children: "No connections match the current filters."
46
- });
43
+ if (connections.length === 0) {
44
+ if (emptyState !== void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: emptyState });
45
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
46
+ className: "rounded-lg border border-dashed p-8 text-center text-sm text-muted-foreground",
47
+ children: "No connections match the current filters."
48
+ });
49
+ }
47
50
  const checked = connections.filter((connection) => health[connection.id] && health[connection.id]?.state !== "unknown").length;
48
51
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
49
52
  className: "space-y-4",
@@ -85,11 +88,12 @@ function ConnectionDashboardSurface({ apiBase, requestUrl, renderConnectionLink
85
88
  health,
86
89
  pending,
87
90
  onCheck: check,
88
- renderConnectionLink
91
+ renderConnectionLink,
92
+ ...renderConnectionActions ? { renderConnectionActions } : {}
89
93
  })]
90
94
  });
91
95
  }
92
- function ConnectionDashboardLanes({ connections, health = {}, pending = /* @__PURE__ */ new Set(), onCheck = () => {}, renderConnectionLink }) {
96
+ function ConnectionDashboardLanes({ renderConnectionActions, connections, health = {}, pending = /* @__PURE__ */ new Set(), onCheck = () => {}, renderConnectionLink }) {
93
97
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
94
98
  className: "space-y-4",
95
99
  children: [require_connectionDashboardModel.groupConnectionDashboardLanes(connections).map((lane) => {
@@ -145,7 +149,8 @@ function ConnectionDashboardLanes({ connections, health = {}, pending = /* @__PU
145
149
  health: health[connection.id],
146
150
  pending: pending.has(connection.id),
147
151
  onCheck,
148
- renderConnectionLink
152
+ renderConnectionLink,
153
+ ...renderConnectionActions ? { renderConnectionActions } : {}
149
154
  }, connection.id))
150
155
  })]
151
156
  }, lane.namespace || "__none__");
@@ -1 +1 @@
1
- {"version":3,"file":"connectionDashboard.cjs","names":["useConnectionDashboard","useConnectionHealth","Button","groupConnectionDashboardLanes","summarizeLaneHealth","cn","ConnectionDashboardRow","ConnectionHealthLegend"],"sources":["../../src/connections/connectionDashboard.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { Button } from \"../components/button\";\nimport { cn } from \"../lib/utils\";\nimport {\n groupConnectionDashboardLanes,\n type ConnectionDashboardItem,\n type ConnectionLinkRenderer,\n} from \"./connectionDashboardModel\";\nimport { useConnectionDashboard } from \"./connectionDashboardQuery\";\nimport {\n ConnectionDashboardRow,\n ConnectionHealthLegend,\n} from \"./connectionDashboardRow\";\nimport {\n summarizeLaneHealth,\n useConnectionHealth,\n type ConnectionHealthMap,\n} from \"./connectionHealth\";\n\nexport type ConnectionDashboardSurfaceProps = {\n /** Where the commons-db connections service is mounted, e.g. `/api/v1`. */\n apiBase: string;\n /** A list request whose connection type filters the dashboard carries over. */\n requestUrl?: string;\n renderConnectionLink: ConnectionLinkRenderer;\n};\n\n/**\n * ConnectionDashboardSurface lists the connection fleet from the database only.\n * Health checks dial real backends, so they are opt-in: nothing is probed until\n * the operator clicks a row's dot, a lane's Check button, or Check all.\n */\nexport function ConnectionDashboardSurface({\n apiBase,\n requestUrl,\n renderConnectionLink,\n}: ConnectionDashboardSurfaceProps) {\n const dashboard = useConnectionDashboard({\n apiBase,\n ...(requestUrl ? { requestUrl } : {}),\n });\n\n const { health, pending, error, seed, check } = useConnectionHealth(apiBase);\n const connections = dashboard.data?.connections;\n useEffect(() => {\n if (connections) seed(connections);\n }, [connections, seed]);\n\n if (dashboard.isLoading) {\n return (\n <div className=\"rounded-lg border bg-card p-6 text-sm text-muted-foreground\">\n Loading connections…\n </div>\n );\n }\n if (dashboard.isError) {\n return (\n <div className=\"flex items-center justify-between gap-4 rounded-lg border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive\">\n <span>\n {dashboard.error instanceof Error\n ? dashboard.error.message\n : \"Unable to load connections\"}\n </span>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={() => void dashboard.refetch()}>\n Retry\n </Button>\n </div>\n );\n }\n if (!connections) {\n return (\n <div className=\"rounded-lg border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive\">\n Connection dashboard returned no data.\n </div>\n );\n }\n if (connections.length === 0) {\n return (\n <div className=\"rounded-lg border border-dashed p-8 text-center text-sm text-muted-foreground\">\n No connections match the current filters.\n </div>\n );\n }\n\n const checked = connections.filter(\n (connection) => health[connection.id] && health[connection.id]?.state !== \"unknown\",\n ).length;\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={() => void dashboard.refetch()}>\n Refresh\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n disabled={pending.size > 0}\n onClick={() =>\n check(\n connections.map((connection) => connection.id),\n { force: checked === connections.length },\n )\n }\n >\n {pending.size > 0 ? \"Checking…\" : \"Check all health\"}\n </Button>\n <span className=\"text-xs text-muted-foreground\">\n {checked}/{connections.length} checked\n </span>\n {error ? (\n <span className=\"text-xs text-destructive\" title={error.message}>\n {error.message}\n </span>\n ) : null}\n </div>\n <ConnectionDashboardLanes\n connections={connections}\n health={health}\n pending={pending}\n onCheck={check}\n renderConnectionLink={renderConnectionLink}\n />\n </div>\n );\n}\n\nexport function ConnectionDashboardLanes({\n connections,\n health = {},\n pending = new Set<string>(),\n onCheck = () => {},\n renderConnectionLink,\n}: {\n connections: ConnectionDashboardItem[];\n health?: ConnectionHealthMap;\n pending?: Set<string>;\n onCheck?: (ids: string[], options?: { force?: boolean }) => void;\n renderConnectionLink: ConnectionLinkRenderer;\n}) {\n return (\n <div className=\"space-y-4\">\n {groupConnectionDashboardLanes(connections).map((lane) => {\n const summary = summarizeLaneHealth(lane.connections, health);\n const unnamespaced = lane.namespace === \"\";\n return (\n <section\n key={lane.namespace || \"__none__\"}\n className={cn(\n \"overflow-hidden rounded-lg border\",\n unnamespaced ? \"border-dashed border-border\" : \"border-border\",\n )}\n >\n <header className=\"flex flex-wrap items-center gap-x-3 gap-y-1 border-b border-border bg-muted/40 px-3 py-2\">\n <h2\n className={cn(\n \"text-sm font-semibold\",\n unnamespaced && \"italic text-muted-foreground\",\n )}\n >\n {unnamespaced ? \"No namespace\" : lane.namespace}\n </h2>\n <span className=\"rounded bg-background px-1.5 py-0.5 font-mono text-[11px] text-muted-foreground\">\n {lane.connections.length}\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2 text-[11px]\"\n onClick={() =>\n onCheck(\n lane.connections.map((connection) => connection.id),\n { force: summary.checked === lane.connections.length },\n )\n }\n >\n Check\n </Button>\n {summary.failing > 0 ? (\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 {summary.failing} failing\n </span>\n ) : null}\n <span className=\"text-[11px] text-muted-foreground\">\n {summary.checked}/{lane.connections.length} checked\n </span>\n {summary.unused > 0 ? (\n <span className=\"text-[11px] text-muted-foreground\">{summary.unused} unused</span>\n ) : null}\n {unnamespaced ? (\n <span className=\"text-xs text-muted-foreground\">\n `namespace` is optional on the model, so these are unplaceable rather than global.\n </span>\n ) : null}\n </header>\n <div className=\"divide-y divide-border\">\n {lane.connections.map((connection) => (\n <ConnectionDashboardRow\n key={connection.id}\n connection={connection}\n health={health[connection.id]}\n pending={pending.has(connection.id)}\n onCheck={onCheck}\n renderConnectionLink={renderConnectionLink}\n />\n ))}\n </div>\n </section>\n );\n })}\n <ConnectionHealthLegend />\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"connectionDashboard.cjs","names":["useConnectionDashboard","useConnectionHealth","Button","_Fragment","groupConnectionDashboardLanes","summarizeLaneHealth","cn","ConnectionDashboardRow","ConnectionHealthLegend"],"sources":["../../src/connections/connectionDashboard.tsx"],"sourcesContent":["import { useEffect, type ReactNode } from \"react\";\nimport { Button } from \"../components/button\";\nimport { cn } from \"../lib/utils\";\nimport {\n groupConnectionDashboardLanes,\n type ConnectionDashboardItem,\n type ConnectionLinkRenderer,\n type ConnectionActionsRenderer,\n} from \"./connectionDashboardModel\";\nimport { useConnectionDashboard } from \"./connectionDashboardQuery\";\nimport {\n ConnectionDashboardRow,\n ConnectionHealthLegend,\n} from \"./connectionDashboardRow\";\nimport {\n summarizeLaneHealth,\n useConnectionHealth,\n type ConnectionHealthMap,\n} from \"./connectionHealth\";\n\nexport type ConnectionDashboardSurfaceProps = {\n renderConnectionActions?: ConnectionActionsRenderer;\n /** Where the commons-db connections service is mounted, e.g. `/api/v1`. */\n apiBase: string;\n /** A list request whose connection type filters the dashboard carries over. */\n requestUrl?: string;\n renderConnectionLink: ConnectionLinkRenderer;\n /** Replaces the default message when the service reports no connections. */\n emptyState?: ReactNode;\n};\n\n/**\n * ConnectionDashboardSurface lists the connection fleet from the database only.\n * Health checks dial real backends, so they are opt-in: nothing is probed until\n * the operator clicks a row's dot, a lane's Check button, or Check all.\n */\nexport function ConnectionDashboardSurface({\n renderConnectionActions,\n apiBase,\n requestUrl,\n renderConnectionLink,\n emptyState,\n}: ConnectionDashboardSurfaceProps) {\n const dashboard = useConnectionDashboard({\n apiBase,\n ...(requestUrl ? { requestUrl } : {}),\n });\n\n const { health, pending, error, seed, check } = useConnectionHealth(apiBase);\n const connections = dashboard.data?.connections;\n useEffect(() => {\n if (connections) seed(connections);\n }, [connections, seed]);\n\n if (dashboard.isLoading) {\n return (\n <div className=\"rounded-lg border bg-card p-6 text-sm text-muted-foreground\">\n Loading connections…\n </div>\n );\n }\n if (dashboard.isError) {\n return (\n <div className=\"flex items-center justify-between gap-4 rounded-lg border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive\">\n <span>\n {dashboard.error instanceof Error\n ? dashboard.error.message\n : \"Unable to load connections\"}\n </span>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={() => void dashboard.refetch()}>\n Retry\n </Button>\n </div>\n );\n }\n if (!connections) {\n return (\n <div className=\"rounded-lg border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive\">\n Connection dashboard returned no data.\n </div>\n );\n }\n if (connections.length === 0) {\n if (emptyState !== undefined) return <>{emptyState}</>;\n return (\n <div className=\"rounded-lg border border-dashed p-8 text-center text-sm text-muted-foreground\">\n No connections match the current filters.\n </div>\n );\n }\n\n const checked = connections.filter(\n (connection) => health[connection.id] && health[connection.id]?.state !== \"unknown\",\n ).length;\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={() => void dashboard.refetch()}>\n Refresh\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n disabled={pending.size > 0}\n onClick={() =>\n check(\n connections.map((connection) => connection.id),\n { force: checked === connections.length },\n )\n }\n >\n {pending.size > 0 ? \"Checking…\" : \"Check all health\"}\n </Button>\n <span className=\"text-xs text-muted-foreground\">\n {checked}/{connections.length} checked\n </span>\n {error ? (\n <span className=\"text-xs text-destructive\" title={error.message}>\n {error.message}\n </span>\n ) : null}\n </div>\n <ConnectionDashboardLanes\n connections={connections}\n health={health}\n pending={pending}\n onCheck={check}\n renderConnectionLink={renderConnectionLink}\n {...(renderConnectionActions ? { renderConnectionActions } : {})}\n />\n </div>\n );\n}\n\nexport function ConnectionDashboardLanes({\n renderConnectionActions,\n connections,\n health = {},\n pending = new Set<string>(),\n onCheck = () => {},\n renderConnectionLink,\n}: {\n connections: ConnectionDashboardItem[];\n health?: ConnectionHealthMap;\n pending?: Set<string>;\n onCheck?: (ids: string[], options?: { force?: boolean }) => void;\n renderConnectionLink: ConnectionLinkRenderer;\n renderConnectionActions?: ConnectionActionsRenderer;\n}) {\n return (\n <div className=\"space-y-4\">\n {groupConnectionDashboardLanes(connections).map((lane) => {\n const summary = summarizeLaneHealth(lane.connections, health);\n const unnamespaced = lane.namespace === \"\";\n return (\n <section\n key={lane.namespace || \"__none__\"}\n className={cn(\n \"overflow-hidden rounded-lg border\",\n unnamespaced ? \"border-dashed border-border\" : \"border-border\",\n )}\n >\n <header className=\"flex flex-wrap items-center gap-x-3 gap-y-1 border-b border-border bg-muted/40 px-3 py-2\">\n <h2\n className={cn(\n \"text-sm font-semibold\",\n unnamespaced && \"italic text-muted-foreground\",\n )}\n >\n {unnamespaced ? \"No namespace\" : lane.namespace}\n </h2>\n <span className=\"rounded bg-background px-1.5 py-0.5 font-mono text-[11px] text-muted-foreground\">\n {lane.connections.length}\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2 text-[11px]\"\n onClick={() =>\n onCheck(\n lane.connections.map((connection) => connection.id),\n { force: summary.checked === lane.connections.length },\n )\n }\n >\n Check\n </Button>\n {summary.failing > 0 ? (\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 {summary.failing} failing\n </span>\n ) : null}\n <span className=\"text-[11px] text-muted-foreground\">\n {summary.checked}/{lane.connections.length} checked\n </span>\n {summary.unused > 0 ? (\n <span className=\"text-[11px] text-muted-foreground\">{summary.unused} unused</span>\n ) : null}\n {unnamespaced ? (\n <span className=\"text-xs text-muted-foreground\">\n `namespace` is optional on the model, so these are unplaceable rather than global.\n </span>\n ) : null}\n </header>\n <div className=\"divide-y divide-border\">\n {lane.connections.map((connection) => (\n <ConnectionDashboardRow\n key={connection.id}\n connection={connection}\n health={health[connection.id]}\n pending={pending.has(connection.id)}\n onCheck={onCheck}\n renderConnectionLink={renderConnectionLink}\n {...(renderConnectionActions ? { renderConnectionActions } : {})}\n />\n ))}\n </div>\n </section>\n );\n })}\n <ConnectionHealthLegend />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,19 +1,23 @@
1
- import { ConnectionDashboardItem, ConnectionLinkRenderer } from './connectionDashboardModel.js';
1
+ import { ReactNode } from 'react';
2
+ import { ConnectionDashboardItem, ConnectionLinkRenderer, ConnectionActionsRenderer } from './connectionDashboardModel.js';
2
3
  import { ConnectionHealthMap } from './connectionHealth.js';
3
4
  export type ConnectionDashboardSurfaceProps = {
5
+ renderConnectionActions?: ConnectionActionsRenderer;
4
6
  /** Where the commons-db connections service is mounted, e.g. `/api/v1`. */
5
7
  apiBase: string;
6
8
  /** A list request whose connection type filters the dashboard carries over. */
7
9
  requestUrl?: string;
8
10
  renderConnectionLink: ConnectionLinkRenderer;
11
+ /** Replaces the default message when the service reports no connections. */
12
+ emptyState?: ReactNode;
9
13
  };
10
14
  /**
11
15
  * ConnectionDashboardSurface lists the connection fleet from the database only.
12
16
  * Health checks dial real backends, so they are opt-in: nothing is probed until
13
17
  * the operator clicks a row's dot, a lane's Check button, or Check all.
14
18
  */
15
- export declare function ConnectionDashboardSurface({ apiBase, requestUrl, renderConnectionLink, }: ConnectionDashboardSurfaceProps): import("react").JSX.Element;
16
- export declare function ConnectionDashboardLanes({ connections, health, pending, onCheck, renderConnectionLink, }: {
19
+ export declare function ConnectionDashboardSurface({ renderConnectionActions, apiBase, requestUrl, renderConnectionLink, emptyState, }: ConnectionDashboardSurfaceProps): import("react").JSX.Element;
20
+ export declare function ConnectionDashboardLanes({ renderConnectionActions, connections, health, pending, onCheck, renderConnectionLink, }: {
17
21
  connections: ConnectionDashboardItem[];
18
22
  health?: ConnectionHealthMap;
19
23
  pending?: Set<string>;
@@ -21,5 +25,6 @@ export declare function ConnectionDashboardLanes({ connections, health, pending,
21
25
  force?: boolean;
22
26
  }) => void;
23
27
  renderConnectionLink: ConnectionLinkRenderer;
28
+ renderConnectionActions?: ConnectionActionsRenderer;
24
29
  }): import("react").JSX.Element;
25
30
  //# sourceMappingURL=connectionDashboard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connectionDashboard.d.ts","sourceRoot":"","sources":["../../src/connections/connectionDashboard.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC5B,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,+BAA+B,GAAG;IAC5C,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,sBAAsB,CAAC;CAC9C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,OAAO,EACP,UAAU,EACV,oBAAoB,GACrB,EAAE,+BAA+B,+BAyFjC;AAED,wBAAgB,wBAAwB,CAAC,EACvC,WAAW,EACX,MAAW,EACX,OAA2B,EAC3B,OAAkB,EAClB,oBAAoB,GACrB,EAAE;IACD,WAAW,EAAE,uBAAuB,EAAE,CAAC;IACvC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACjE,oBAAoB,EAAE,sBAAsB,CAAC;CAC9C,+BA2EA"}
1
+ {"version":3,"file":"connectionDashboard.d.ts","sourceRoot":"","sources":["../../src/connections/connectionDashboard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlD,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC/B,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,+BAA+B,GAAG;IAC5C,uBAAuB,CAAC,EAAE,yBAAyB,CAAC;IACpD,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,sBAAsB,CAAC;IAC7C,4EAA4E;IAC5E,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,uBAAuB,EACvB,OAAO,EACP,UAAU,EACV,oBAAoB,EACpB,UAAU,GACX,EAAE,+BAA+B,+BA2FjC;AAED,wBAAgB,wBAAwB,CAAC,EACvC,uBAAuB,EACvB,WAAW,EACX,MAAW,EACX,OAA2B,EAC3B,OAAkB,EAClB,oBAAoB,GACrB,EAAE;IACD,WAAW,EAAE,uBAAuB,EAAE,CAAC;IACvC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACjE,oBAAoB,EAAE,sBAAsB,CAAC;IAC7C,uBAAuB,CAAC,EAAE,yBAAyB,CAAC;CACrD,+BA4EA"}
@@ -5,14 +5,14 @@ import { useConnectionDashboard } from "./connectionDashboardQuery.js";
5
5
  import { ConnectionDashboardRow, ConnectionHealthLegend } from "./connectionDashboardRow.js";
6
6
  import { summarizeLaneHealth, useConnectionHealth } from "./connectionHealth.js";
7
7
  import { useEffect } from "react";
8
- import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
9
9
  // src/connections/connectionDashboard.tsx
10
10
  /**
11
11
  * ConnectionDashboardSurface lists the connection fleet from the database only.
12
12
  * Health checks dial real backends, so they are opt-in: nothing is probed until
13
13
  * the operator clicks a row's dot, a lane's Check button, or Check all.
14
14
  */
15
- function ConnectionDashboardSurface({ apiBase, requestUrl, renderConnectionLink }) {
15
+ function ConnectionDashboardSurface({ renderConnectionActions, apiBase, requestUrl, renderConnectionLink, emptyState }) {
16
16
  const dashboard = useConnectionDashboard({
17
17
  apiBase,
18
18
  ...requestUrl ? { requestUrl } : {}
@@ -40,10 +40,13 @@ function ConnectionDashboardSurface({ apiBase, requestUrl, renderConnectionLink
40
40
  className: "rounded-lg border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive",
41
41
  children: "Connection dashboard returned no data."
42
42
  });
43
- if (connections.length === 0) return /* @__PURE__ */ jsx("div", {
44
- className: "rounded-lg border border-dashed p-8 text-center text-sm text-muted-foreground",
45
- children: "No connections match the current filters."
46
- });
43
+ if (connections.length === 0) {
44
+ if (emptyState !== void 0) return /* @__PURE__ */ jsx(Fragment$1, { children: emptyState });
45
+ return /* @__PURE__ */ jsx("div", {
46
+ className: "rounded-lg border border-dashed p-8 text-center text-sm text-muted-foreground",
47
+ children: "No connections match the current filters."
48
+ });
49
+ }
47
50
  const checked = connections.filter((connection) => health[connection.id] && health[connection.id]?.state !== "unknown").length;
48
51
  return /* @__PURE__ */ jsxs("div", {
49
52
  className: "space-y-4",
@@ -85,11 +88,12 @@ function ConnectionDashboardSurface({ apiBase, requestUrl, renderConnectionLink
85
88
  health,
86
89
  pending,
87
90
  onCheck: check,
88
- renderConnectionLink
91
+ renderConnectionLink,
92
+ ...renderConnectionActions ? { renderConnectionActions } : {}
89
93
  })]
90
94
  });
91
95
  }
92
- function ConnectionDashboardLanes({ connections, health = {}, pending = /* @__PURE__ */ new Set(), onCheck = () => {}, renderConnectionLink }) {
96
+ function ConnectionDashboardLanes({ renderConnectionActions, connections, health = {}, pending = /* @__PURE__ */ new Set(), onCheck = () => {}, renderConnectionLink }) {
93
97
  return /* @__PURE__ */ jsxs("div", {
94
98
  className: "space-y-4",
95
99
  children: [groupConnectionDashboardLanes(connections).map((lane) => {
@@ -145,7 +149,8 @@ function ConnectionDashboardLanes({ connections, health = {}, pending = /* @__PU
145
149
  health: health[connection.id],
146
150
  pending: pending.has(connection.id),
147
151
  onCheck,
148
- renderConnectionLink
152
+ renderConnectionLink,
153
+ ...renderConnectionActions ? { renderConnectionActions } : {}
149
154
  }, connection.id))
150
155
  })]
151
156
  }, lane.namespace || "__none__");
@@ -1 +1 @@
1
- {"version":3,"file":"connectionDashboard.js","names":[],"sources":["../../src/connections/connectionDashboard.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { Button } from \"../components/button\";\nimport { cn } from \"../lib/utils\";\nimport {\n groupConnectionDashboardLanes,\n type ConnectionDashboardItem,\n type ConnectionLinkRenderer,\n} from \"./connectionDashboardModel\";\nimport { useConnectionDashboard } from \"./connectionDashboardQuery\";\nimport {\n ConnectionDashboardRow,\n ConnectionHealthLegend,\n} from \"./connectionDashboardRow\";\nimport {\n summarizeLaneHealth,\n useConnectionHealth,\n type ConnectionHealthMap,\n} from \"./connectionHealth\";\n\nexport type ConnectionDashboardSurfaceProps = {\n /** Where the commons-db connections service is mounted, e.g. `/api/v1`. */\n apiBase: string;\n /** A list request whose connection type filters the dashboard carries over. */\n requestUrl?: string;\n renderConnectionLink: ConnectionLinkRenderer;\n};\n\n/**\n * ConnectionDashboardSurface lists the connection fleet from the database only.\n * Health checks dial real backends, so they are opt-in: nothing is probed until\n * the operator clicks a row's dot, a lane's Check button, or Check all.\n */\nexport function ConnectionDashboardSurface({\n apiBase,\n requestUrl,\n renderConnectionLink,\n}: ConnectionDashboardSurfaceProps) {\n const dashboard = useConnectionDashboard({\n apiBase,\n ...(requestUrl ? { requestUrl } : {}),\n });\n\n const { health, pending, error, seed, check } = useConnectionHealth(apiBase);\n const connections = dashboard.data?.connections;\n useEffect(() => {\n if (connections) seed(connections);\n }, [connections, seed]);\n\n if (dashboard.isLoading) {\n return (\n <div className=\"rounded-lg border bg-card p-6 text-sm text-muted-foreground\">\n Loading connections…\n </div>\n );\n }\n if (dashboard.isError) {\n return (\n <div className=\"flex items-center justify-between gap-4 rounded-lg border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive\">\n <span>\n {dashboard.error instanceof Error\n ? dashboard.error.message\n : \"Unable to load connections\"}\n </span>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={() => void dashboard.refetch()}>\n Retry\n </Button>\n </div>\n );\n }\n if (!connections) {\n return (\n <div className=\"rounded-lg border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive\">\n Connection dashboard returned no data.\n </div>\n );\n }\n if (connections.length === 0) {\n return (\n <div className=\"rounded-lg border border-dashed p-8 text-center text-sm text-muted-foreground\">\n No connections match the current filters.\n </div>\n );\n }\n\n const checked = connections.filter(\n (connection) => health[connection.id] && health[connection.id]?.state !== \"unknown\",\n ).length;\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={() => void dashboard.refetch()}>\n Refresh\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n disabled={pending.size > 0}\n onClick={() =>\n check(\n connections.map((connection) => connection.id),\n { force: checked === connections.length },\n )\n }\n >\n {pending.size > 0 ? \"Checking…\" : \"Check all health\"}\n </Button>\n <span className=\"text-xs text-muted-foreground\">\n {checked}/{connections.length} checked\n </span>\n {error ? (\n <span className=\"text-xs text-destructive\" title={error.message}>\n {error.message}\n </span>\n ) : null}\n </div>\n <ConnectionDashboardLanes\n connections={connections}\n health={health}\n pending={pending}\n onCheck={check}\n renderConnectionLink={renderConnectionLink}\n />\n </div>\n );\n}\n\nexport function ConnectionDashboardLanes({\n connections,\n health = {},\n pending = new Set<string>(),\n onCheck = () => {},\n renderConnectionLink,\n}: {\n connections: ConnectionDashboardItem[];\n health?: ConnectionHealthMap;\n pending?: Set<string>;\n onCheck?: (ids: string[], options?: { force?: boolean }) => void;\n renderConnectionLink: ConnectionLinkRenderer;\n}) {\n return (\n <div className=\"space-y-4\">\n {groupConnectionDashboardLanes(connections).map((lane) => {\n const summary = summarizeLaneHealth(lane.connections, health);\n const unnamespaced = lane.namespace === \"\";\n return (\n <section\n key={lane.namespace || \"__none__\"}\n className={cn(\n \"overflow-hidden rounded-lg border\",\n unnamespaced ? \"border-dashed border-border\" : \"border-border\",\n )}\n >\n <header className=\"flex flex-wrap items-center gap-x-3 gap-y-1 border-b border-border bg-muted/40 px-3 py-2\">\n <h2\n className={cn(\n \"text-sm font-semibold\",\n unnamespaced && \"italic text-muted-foreground\",\n )}\n >\n {unnamespaced ? \"No namespace\" : lane.namespace}\n </h2>\n <span className=\"rounded bg-background px-1.5 py-0.5 font-mono text-[11px] text-muted-foreground\">\n {lane.connections.length}\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2 text-[11px]\"\n onClick={() =>\n onCheck(\n lane.connections.map((connection) => connection.id),\n { force: summary.checked === lane.connections.length },\n )\n }\n >\n Check\n </Button>\n {summary.failing > 0 ? (\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 {summary.failing} failing\n </span>\n ) : null}\n <span className=\"text-[11px] text-muted-foreground\">\n {summary.checked}/{lane.connections.length} checked\n </span>\n {summary.unused > 0 ? (\n <span className=\"text-[11px] text-muted-foreground\">{summary.unused} unused</span>\n ) : null}\n {unnamespaced ? (\n <span className=\"text-xs text-muted-foreground\">\n `namespace` is optional on the model, so these are unplaceable rather than global.\n </span>\n ) : null}\n </header>\n <div className=\"divide-y divide-border\">\n {lane.connections.map((connection) => (\n <ConnectionDashboardRow\n key={connection.id}\n connection={connection}\n health={health[connection.id]}\n pending={pending.has(connection.id)}\n onCheck={onCheck}\n renderConnectionLink={renderConnectionLink}\n />\n ))}\n </div>\n </section>\n );\n })}\n <ConnectionHealthLegend />\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"connectionDashboard.js","names":["_Fragment"],"sources":["../../src/connections/connectionDashboard.tsx"],"sourcesContent":["import { useEffect, type ReactNode } from \"react\";\nimport { Button } from \"../components/button\";\nimport { cn } from \"../lib/utils\";\nimport {\n groupConnectionDashboardLanes,\n type ConnectionDashboardItem,\n type ConnectionLinkRenderer,\n type ConnectionActionsRenderer,\n} from \"./connectionDashboardModel\";\nimport { useConnectionDashboard } from \"./connectionDashboardQuery\";\nimport {\n ConnectionDashboardRow,\n ConnectionHealthLegend,\n} from \"./connectionDashboardRow\";\nimport {\n summarizeLaneHealth,\n useConnectionHealth,\n type ConnectionHealthMap,\n} from \"./connectionHealth\";\n\nexport type ConnectionDashboardSurfaceProps = {\n renderConnectionActions?: ConnectionActionsRenderer;\n /** Where the commons-db connections service is mounted, e.g. `/api/v1`. */\n apiBase: string;\n /** A list request whose connection type filters the dashboard carries over. */\n requestUrl?: string;\n renderConnectionLink: ConnectionLinkRenderer;\n /** Replaces the default message when the service reports no connections. */\n emptyState?: ReactNode;\n};\n\n/**\n * ConnectionDashboardSurface lists the connection fleet from the database only.\n * Health checks dial real backends, so they are opt-in: nothing is probed until\n * the operator clicks a row's dot, a lane's Check button, or Check all.\n */\nexport function ConnectionDashboardSurface({\n renderConnectionActions,\n apiBase,\n requestUrl,\n renderConnectionLink,\n emptyState,\n}: ConnectionDashboardSurfaceProps) {\n const dashboard = useConnectionDashboard({\n apiBase,\n ...(requestUrl ? { requestUrl } : {}),\n });\n\n const { health, pending, error, seed, check } = useConnectionHealth(apiBase);\n const connections = dashboard.data?.connections;\n useEffect(() => {\n if (connections) seed(connections);\n }, [connections, seed]);\n\n if (dashboard.isLoading) {\n return (\n <div className=\"rounded-lg border bg-card p-6 text-sm text-muted-foreground\">\n Loading connections…\n </div>\n );\n }\n if (dashboard.isError) {\n return (\n <div className=\"flex items-center justify-between gap-4 rounded-lg border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive\">\n <span>\n {dashboard.error instanceof Error\n ? dashboard.error.message\n : \"Unable to load connections\"}\n </span>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={() => void dashboard.refetch()}>\n Retry\n </Button>\n </div>\n );\n }\n if (!connections) {\n return (\n <div className=\"rounded-lg border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive\">\n Connection dashboard returned no data.\n </div>\n );\n }\n if (connections.length === 0) {\n if (emptyState !== undefined) return <>{emptyState}</>;\n return (\n <div className=\"rounded-lg border border-dashed p-8 text-center text-sm text-muted-foreground\">\n No connections match the current filters.\n </div>\n );\n }\n\n const checked = connections.filter(\n (connection) => health[connection.id] && health[connection.id]?.state !== \"unknown\",\n ).length;\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={() => void dashboard.refetch()}>\n Refresh\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n disabled={pending.size > 0}\n onClick={() =>\n check(\n connections.map((connection) => connection.id),\n { force: checked === connections.length },\n )\n }\n >\n {pending.size > 0 ? \"Checking…\" : \"Check all health\"}\n </Button>\n <span className=\"text-xs text-muted-foreground\">\n {checked}/{connections.length} checked\n </span>\n {error ? (\n <span className=\"text-xs text-destructive\" title={error.message}>\n {error.message}\n </span>\n ) : null}\n </div>\n <ConnectionDashboardLanes\n connections={connections}\n health={health}\n pending={pending}\n onCheck={check}\n renderConnectionLink={renderConnectionLink}\n {...(renderConnectionActions ? { renderConnectionActions } : {})}\n />\n </div>\n );\n}\n\nexport function ConnectionDashboardLanes({\n renderConnectionActions,\n connections,\n health = {},\n pending = new Set<string>(),\n onCheck = () => {},\n renderConnectionLink,\n}: {\n connections: ConnectionDashboardItem[];\n health?: ConnectionHealthMap;\n pending?: Set<string>;\n onCheck?: (ids: string[], options?: { force?: boolean }) => void;\n renderConnectionLink: ConnectionLinkRenderer;\n renderConnectionActions?: ConnectionActionsRenderer;\n}) {\n return (\n <div className=\"space-y-4\">\n {groupConnectionDashboardLanes(connections).map((lane) => {\n const summary = summarizeLaneHealth(lane.connections, health);\n const unnamespaced = lane.namespace === \"\";\n return (\n <section\n key={lane.namespace || \"__none__\"}\n className={cn(\n \"overflow-hidden rounded-lg border\",\n unnamespaced ? \"border-dashed border-border\" : \"border-border\",\n )}\n >\n <header className=\"flex flex-wrap items-center gap-x-3 gap-y-1 border-b border-border bg-muted/40 px-3 py-2\">\n <h2\n className={cn(\n \"text-sm font-semibold\",\n unnamespaced && \"italic text-muted-foreground\",\n )}\n >\n {unnamespaced ? \"No namespace\" : lane.namespace}\n </h2>\n <span className=\"rounded bg-background px-1.5 py-0.5 font-mono text-[11px] text-muted-foreground\">\n {lane.connections.length}\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2 text-[11px]\"\n onClick={() =>\n onCheck(\n lane.connections.map((connection) => connection.id),\n { force: summary.checked === lane.connections.length },\n )\n }\n >\n Check\n </Button>\n {summary.failing > 0 ? (\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 {summary.failing} failing\n </span>\n ) : null}\n <span className=\"text-[11px] text-muted-foreground\">\n {summary.checked}/{lane.connections.length} checked\n </span>\n {summary.unused > 0 ? (\n <span className=\"text-[11px] text-muted-foreground\">{summary.unused} unused</span>\n ) : null}\n {unnamespaced ? (\n <span className=\"text-xs text-muted-foreground\">\n `namespace` is optional on the model, so these are unplaceable rather than global.\n </span>\n ) : null}\n </header>\n <div className=\"divide-y divide-border\">\n {lane.connections.map((connection) => (\n <ConnectionDashboardRow\n key={connection.id}\n connection={connection}\n health={health[connection.id]}\n pending={pending.has(connection.id)}\n onCheck={onCheck}\n renderConnectionLink={renderConnectionLink}\n {...(renderConnectionActions ? { renderConnectionActions } : {})}\n />\n ))}\n </div>\n </section>\n );\n })}\n <ConnectionHealthLegend />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"connectionDashboardModel.cjs","names":["stripTrailingSlashes"],"sources":["../../src/connections/connectionDashboardModel.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { stripTrailingSlashes } from \"../lib/string\";\n\n/**\n * The connection dashboard's pure shapes and derivations: what the API returns,\n * how connections group into namespace lanes, and the URLs the dashboard calls\n * under a host's `apiBase` (the path the commons-db connections service is\n * mounted at, e.g. `/api/v1`). Kept apart from the components so the\n * derivations stay directly testable and the component files export\n * components only.\n */\n\nexport type ConnectionDashboardHealthState =\n | \"healthy\"\n | \"credentials\"\n | \"unreachable\"\n | \"unverifiable\"\n | \"unknown\";\n\nexport type ConnectionHealth = {\n state: ConnectionDashboardHealthState;\n detail: string;\n checkedAt: string;\n cached: boolean;\n};\n\nexport type ConnectionDashboardItem = {\n id: string;\n name: string;\n namespace: string;\n type: string;\n endpoint?: { scheme: string; host: string; path?: string };\n secretCount: number;\n inlineCredential: boolean;\n insecureTLS: boolean;\n // Absent until someone checks: listing reads the database only, so a\n // connection has no health until a check is explicitly requested.\n health?: ConnectionHealth | null;\n profileCount: number;\n updatedAt: string;\n /** A virtual or read-only connection: the service answers 405 to saving or deleting it. */\n readOnly?: boolean;\n};\n\nexport type ConnectionDashboardResponse = {\n connections: ConnectionDashboardItem[];\n generatedAt: string;\n /** The service has no connection store, so nothing can be created. */\n readOnly?: boolean;\n};\n\nexport type ConnectionHealthResult = ConnectionHealth & {\n id: string;\n durationMs: number;\n};\n\nexport type ConnectionHealthResponse = {\n results: ConnectionHealthResult[];\n generatedAt: string;\n};\n\nexport type ConnectionDashboardLane = {\n namespace: string;\n connections: ConnectionDashboardItem[];\n};\n\n/** What a row hands the host to wrap its body in a link to the connection. */\nexport type ConnectionLinkProps = {\n className: string;\n title?: string;\n children: ReactNode;\n};\n\n/**\n * Renders a dashboard row's link. The host owns routing: an EntityExplorerApp\n * host routes through its RouterAdapter's `renderLink`, a host with its own\n * route state renders an anchor that selects the connection.\n */\nexport type ConnectionLinkRenderer = (\n connection: ConnectionDashboardItem,\n link: ConnectionLinkProps,\n) => ReactNode;\n\n/** The react-query key prefix every dashboard listing is cached under. */\nexport const CONNECTION_DASHBOARD_QUERY_KEY = \"connection-dashboard\";\n\nexport function groupConnectionDashboardLanes(\n connections: ConnectionDashboardItem[],\n): ConnectionDashboardLane[] {\n const lanes = new Map<string, ConnectionDashboardItem[]>();\n for (const connection of connections) {\n const lane = lanes.get(connection.namespace);\n if (lane) lane.push(connection);\n else lanes.set(connection.namespace, [connection]);\n }\n return [...lanes]\n .map(([namespace, items]) => ({\n namespace,\n connections: [...items].sort((a, b) => a.name.localeCompare(b.name)),\n }))\n .sort((a, b) => {\n if (a.namespace === \"\") return 1;\n if (b.namespace === \"\") return -1;\n return a.namespace.localeCompare(b.namespace);\n });\n}\n\nexport function connectionHealthUrl(apiBase: string): string {\n return `${stripTrailingSlashes(apiBase)}/connections/health`;\n}\n\n/**\n * The dashboard inventory URL. A list request's connection type filters carry\n * over, so a dashboard rendered in place of a filtered list shows the same\n * subset; paging parameters do not, because the dashboard lists the fleet.\n */\nexport function connectionDashboardUrl({\n apiBase,\n requestUrl,\n}: {\n apiBase: string;\n requestUrl?: string;\n}): string {\n const search = new URLSearchParams();\n if (requestUrl) {\n const source = new URL(requestUrl, \"http://connections.local\");\n for (const key of [\"type\", \"types\"]) {\n const value = source.searchParams.get(key);\n if (value) search.set(key, value);\n }\n }\n const query = search.toString();\n return `${stripTrailingSlashes(apiBase)}/connections/dashboard${query ? `?${query}` : \"\"}`;\n}\n"],"mappings":";;;AAoFA,IAAa,iCAAiC;AAE9C,SAAgB,8BACd,aAC2B;CAC3B,MAAM,wBAAQ,IAAI,IAAuC;CACzD,KAAK,MAAM,cAAc,aAAa;EACpC,MAAM,OAAO,MAAM,IAAI,WAAW,SAAS;EAC3C,IAAI,MAAM,KAAK,KAAK,UAAU;OACzB,MAAM,IAAI,WAAW,WAAW,CAAC,UAAU,CAAC;CACnD;CACA,OAAO,CAAC,GAAG,KAAK,CAAC,CACd,KAAK,CAAC,WAAW,YAAY;EAC5B;EACA,aAAa,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;CACrE,EAAE,CAAC,CACF,MAAM,GAAG,MAAM;EACd,IAAI,EAAE,cAAc,IAAI,OAAO;EAC/B,IAAI,EAAE,cAAc,IAAI,OAAO;EAC/B,OAAO,EAAE,UAAU,cAAc,EAAE,SAAS;CAC9C,CAAC;AACL;AAEA,SAAgB,oBAAoB,SAAyB;CAC3D,OAAO,GAAGA,eAAAA,qBAAqB,OAAO,EAAE;AAC1C;;;;;;AAOA,SAAgB,uBAAuB,EACrC,SACA,cAIS;CACT,MAAM,SAAS,IAAI,gBAAgB;CACnC,IAAI,YAAY;EACd,MAAM,SAAS,IAAI,IAAI,YAAY,0BAA0B;EAC7D,KAAK,MAAM,OAAO,CAAC,QAAQ,OAAO,GAAG;GACnC,MAAM,QAAQ,OAAO,aAAa,IAAI,GAAG;GACzC,IAAI,OAAO,OAAO,IAAI,KAAK,KAAK;EAClC;CACF;CACA,MAAM,QAAQ,OAAO,SAAS;CAC9B,OAAO,GAAGA,eAAAA,qBAAqB,OAAO,EAAE,wBAAwB,QAAQ,IAAI,UAAU;AACxF"}
1
+ {"version":3,"file":"connectionDashboardModel.cjs","names":["stripTrailingSlashes"],"sources":["../../src/connections/connectionDashboardModel.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { stripTrailingSlashes } from \"../lib/string\";\n\n/**\n * The connection dashboard's pure shapes and derivations: what the API returns,\n * how connections group into namespace lanes, and the URLs the dashboard calls\n * under a host's `apiBase` (the path the commons-db connections service is\n * mounted at, e.g. `/api/v1`). Kept apart from the components so the\n * derivations stay directly testable and the component files export\n * components only.\n */\n\nexport type ConnectionDashboardHealthState =\n | \"healthy\"\n | \"credentials\"\n | \"unreachable\"\n | \"unverifiable\"\n | \"unknown\";\n\nexport type ConnectionHealth = {\n state: ConnectionDashboardHealthState;\n detail: string;\n checkedAt: string;\n cached: boolean;\n};\n\nexport type ConnectionDashboardItem = {\n id: string;\n name: string;\n namespace: string;\n type: string;\n endpoint?: { scheme: string; host: string; path?: string };\n secretCount: number;\n inlineCredential: boolean;\n insecureTLS: boolean;\n // Absent until someone checks: listing reads the database only, so a\n // connection has no health until a check is explicitly requested.\n health?: ConnectionHealth | null;\n profileCount: number;\n updatedAt: string;\n /** A virtual or read-only connection: the service answers 405 to saving or deleting it. */\n readOnly?: boolean;\n source?: string;\n /** Problems loading the connection (e.g. an invalid file); it cannot be used until they are fixed. */\n warnings?: string[];\n};\n\nexport type ConnectionDashboardResponse = {\n connections: ConnectionDashboardItem[];\n generatedAt: string;\n /** The service has no connection store, so nothing can be created. */\n readOnly?: boolean;\n};\n\nexport type ConnectionHealthResult = ConnectionHealth & {\n id: string;\n durationMs: number;\n};\n\nexport type ConnectionHealthResponse = {\n results: ConnectionHealthResult[];\n generatedAt: string;\n};\n\nexport type ConnectionDashboardLane = {\n namespace: string;\n connections: ConnectionDashboardItem[];\n};\n\n/** What a row hands the host to wrap its body in a link to the connection. */\nexport type ConnectionLinkProps = {\n className: string;\n title?: string;\n children: ReactNode;\n};\n\n/**\n * Renders a dashboard row's link. The host owns routing: an EntityExplorerApp\n * host routes through its RouterAdapter's `renderLink`, a host with its own\n * route state renders an anchor that selects the connection.\n */\nexport type ConnectionLinkRenderer = (\n connection: ConnectionDashboardItem,\n link: ConnectionLinkProps,\n) => ReactNode;\n\nexport type ConnectionActionsRenderer = (connection: ConnectionDashboardItem) => ReactNode;\n\n/** The react-query key prefix every dashboard listing is cached under. */\nexport const CONNECTION_DASHBOARD_QUERY_KEY = \"connection-dashboard\";\n\nexport function groupConnectionDashboardLanes(\n connections: ConnectionDashboardItem[],\n): ConnectionDashboardLane[] {\n const lanes = new Map<string, ConnectionDashboardItem[]>();\n for (const connection of connections) {\n const lane = lanes.get(connection.namespace);\n if (lane) lane.push(connection);\n else lanes.set(connection.namespace, [connection]);\n }\n return [...lanes]\n .map(([namespace, items]) => ({\n namespace,\n connections: [...items].sort((a, b) => a.name.localeCompare(b.name)),\n }))\n .sort((a, b) => {\n if (a.namespace === \"\") return 1;\n if (b.namespace === \"\") return -1;\n return a.namespace.localeCompare(b.namespace);\n });\n}\n\nexport function connectionHealthUrl(apiBase: string): string {\n return `${stripTrailingSlashes(apiBase)}/connections/health`;\n}\n\n/**\n * The dashboard inventory URL. A list request's connection type filters carry\n * over, so a dashboard rendered in place of a filtered list shows the same\n * subset; paging parameters do not, because the dashboard lists the fleet.\n */\nexport function connectionDashboardUrl({\n apiBase,\n requestUrl,\n}: {\n apiBase: string;\n requestUrl?: string;\n}): string {\n const search = new URLSearchParams();\n if (requestUrl) {\n const source = new URL(requestUrl, \"http://connections.local\");\n for (const key of [\"type\", \"types\"]) {\n const value = source.searchParams.get(key);\n if (value) search.set(key, value);\n }\n }\n const query = search.toString();\n return `${stripTrailingSlashes(apiBase)}/connections/dashboard${query ? `?${query}` : \"\"}`;\n}\n"],"mappings":";;;AAyFA,IAAa,iCAAiC;AAE9C,SAAgB,8BACd,aAC2B;CAC3B,MAAM,wBAAQ,IAAI,IAAuC;CACzD,KAAK,MAAM,cAAc,aAAa;EACpC,MAAM,OAAO,MAAM,IAAI,WAAW,SAAS;EAC3C,IAAI,MAAM,KAAK,KAAK,UAAU;OACzB,MAAM,IAAI,WAAW,WAAW,CAAC,UAAU,CAAC;CACnD;CACA,OAAO,CAAC,GAAG,KAAK,CAAC,CACd,KAAK,CAAC,WAAW,YAAY;EAC5B;EACA,aAAa,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;CACrE,EAAE,CAAC,CACF,MAAM,GAAG,MAAM;EACd,IAAI,EAAE,cAAc,IAAI,OAAO;EAC/B,IAAI,EAAE,cAAc,IAAI,OAAO;EAC/B,OAAO,EAAE,UAAU,cAAc,EAAE,SAAS;CAC9C,CAAC;AACL;AAEA,SAAgB,oBAAoB,SAAyB;CAC3D,OAAO,GAAGA,eAAAA,qBAAqB,OAAO,EAAE;AAC1C;;;;;;AAOA,SAAgB,uBAAuB,EACrC,SACA,cAIS;CACT,MAAM,SAAS,IAAI,gBAAgB;CACnC,IAAI,YAAY;EACd,MAAM,SAAS,IAAI,IAAI,YAAY,0BAA0B;EAC7D,KAAK,MAAM,OAAO,CAAC,QAAQ,OAAO,GAAG;GACnC,MAAM,QAAQ,OAAO,aAAa,IAAI,GAAG;GACzC,IAAI,OAAO,OAAO,IAAI,KAAK,KAAK;EAClC;CACF;CACA,MAAM,QAAQ,OAAO,SAAS;CAC9B,OAAO,GAAGA,eAAAA,qBAAqB,OAAO,EAAE,wBAAwB,QAAQ,IAAI,UAAU;AACxF"}
@@ -32,6 +32,9 @@ export type ConnectionDashboardItem = {
32
32
  updatedAt: string;
33
33
  /** A virtual or read-only connection: the service answers 405 to saving or deleting it. */
34
34
  readOnly?: boolean;
35
+ source?: string;
36
+ /** Problems loading the connection (e.g. an invalid file); it cannot be used until they are fixed. */
37
+ warnings?: string[];
35
38
  };
36
39
  export type ConnectionDashboardResponse = {
37
40
  connections: ConnectionDashboardItem[];
@@ -63,6 +66,7 @@ export type ConnectionLinkProps = {
63
66
  * route state renders an anchor that selects the connection.
64
67
  */
65
68
  export type ConnectionLinkRenderer = (connection: ConnectionDashboardItem, link: ConnectionLinkProps) => ReactNode;
69
+ export type ConnectionActionsRenderer = (connection: ConnectionDashboardItem) => ReactNode;
66
70
  /** The react-query key prefix every dashboard listing is cached under. */
67
71
  export declare const CONNECTION_DASHBOARD_QUERY_KEY = "connection-dashboard";
68
72
  export declare function groupConnectionDashboardLanes(connections: ConnectionDashboardItem[]): ConnectionDashboardLane[];
@@ -1 +1 @@
1
- {"version":3,"file":"connectionDashboardModel.d.ts","sourceRoot":"","sources":["../../src/connections/connectionDashboardModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC;;;;;;;GAOG;AAEH,MAAM,MAAM,8BAA8B,GACtC,SAAS,GACT,aAAa,GACb,aAAa,GACb,cAAc,GACd,SAAS,CAAC;AAEd,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,8BAA8B,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IAGrB,MAAM,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,EAAE,uBAAuB,EAAE,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,uBAAuB,EAAE,CAAC;CACxC,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACnC,UAAU,EAAE,uBAAuB,EACnC,IAAI,EAAE,mBAAmB,KACtB,SAAS,CAAC;AAEf,0EAA0E;AAC1E,eAAO,MAAM,8BAA8B,yBAAyB,CAAC;AAErE,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,uBAAuB,EAAE,GACrC,uBAAuB,EAAE,CAiB3B;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,UAAU,GACX,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAWT"}
1
+ {"version":3,"file":"connectionDashboardModel.d.ts","sourceRoot":"","sources":["../../src/connections/connectionDashboardModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC;;;;;;;GAOG;AAEH,MAAM,MAAM,8BAA8B,GACtC,SAAS,GACT,aAAa,GACb,aAAa,GACb,cAAc,GACd,SAAS,CAAC;AAEd,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,8BAA8B,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IAGrB,MAAM,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sGAAsG;IACtG,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,EAAE,uBAAuB,EAAE,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,uBAAuB,EAAE,CAAC;CACxC,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACnC,UAAU,EAAE,uBAAuB,EACnC,IAAI,EAAE,mBAAmB,KACtB,SAAS,CAAC;AAEf,MAAM,MAAM,yBAAyB,GAAG,CAAC,UAAU,EAAE,uBAAuB,KAAK,SAAS,CAAC;AAE3F,0EAA0E;AAC1E,eAAO,MAAM,8BAA8B,yBAAyB,CAAC;AAErE,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,uBAAuB,EAAE,GACrC,uBAAuB,EAAE,CAiB3B;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,UAAU,GACX,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAWT"}
@@ -1 +1 @@
1
- {"version":3,"file":"connectionDashboardModel.js","names":[],"sources":["../../src/connections/connectionDashboardModel.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { stripTrailingSlashes } from \"../lib/string\";\n\n/**\n * The connection dashboard's pure shapes and derivations: what the API returns,\n * how connections group into namespace lanes, and the URLs the dashboard calls\n * under a host's `apiBase` (the path the commons-db connections service is\n * mounted at, e.g. `/api/v1`). Kept apart from the components so the\n * derivations stay directly testable and the component files export\n * components only.\n */\n\nexport type ConnectionDashboardHealthState =\n | \"healthy\"\n | \"credentials\"\n | \"unreachable\"\n | \"unverifiable\"\n | \"unknown\";\n\nexport type ConnectionHealth = {\n state: ConnectionDashboardHealthState;\n detail: string;\n checkedAt: string;\n cached: boolean;\n};\n\nexport type ConnectionDashboardItem = {\n id: string;\n name: string;\n namespace: string;\n type: string;\n endpoint?: { scheme: string; host: string; path?: string };\n secretCount: number;\n inlineCredential: boolean;\n insecureTLS: boolean;\n // Absent until someone checks: listing reads the database only, so a\n // connection has no health until a check is explicitly requested.\n health?: ConnectionHealth | null;\n profileCount: number;\n updatedAt: string;\n /** A virtual or read-only connection: the service answers 405 to saving or deleting it. */\n readOnly?: boolean;\n};\n\nexport type ConnectionDashboardResponse = {\n connections: ConnectionDashboardItem[];\n generatedAt: string;\n /** The service has no connection store, so nothing can be created. */\n readOnly?: boolean;\n};\n\nexport type ConnectionHealthResult = ConnectionHealth & {\n id: string;\n durationMs: number;\n};\n\nexport type ConnectionHealthResponse = {\n results: ConnectionHealthResult[];\n generatedAt: string;\n};\n\nexport type ConnectionDashboardLane = {\n namespace: string;\n connections: ConnectionDashboardItem[];\n};\n\n/** What a row hands the host to wrap its body in a link to the connection. */\nexport type ConnectionLinkProps = {\n className: string;\n title?: string;\n children: ReactNode;\n};\n\n/**\n * Renders a dashboard row's link. The host owns routing: an EntityExplorerApp\n * host routes through its RouterAdapter's `renderLink`, a host with its own\n * route state renders an anchor that selects the connection.\n */\nexport type ConnectionLinkRenderer = (\n connection: ConnectionDashboardItem,\n link: ConnectionLinkProps,\n) => ReactNode;\n\n/** The react-query key prefix every dashboard listing is cached under. */\nexport const CONNECTION_DASHBOARD_QUERY_KEY = \"connection-dashboard\";\n\nexport function groupConnectionDashboardLanes(\n connections: ConnectionDashboardItem[],\n): ConnectionDashboardLane[] {\n const lanes = new Map<string, ConnectionDashboardItem[]>();\n for (const connection of connections) {\n const lane = lanes.get(connection.namespace);\n if (lane) lane.push(connection);\n else lanes.set(connection.namespace, [connection]);\n }\n return [...lanes]\n .map(([namespace, items]) => ({\n namespace,\n connections: [...items].sort((a, b) => a.name.localeCompare(b.name)),\n }))\n .sort((a, b) => {\n if (a.namespace === \"\") return 1;\n if (b.namespace === \"\") return -1;\n return a.namespace.localeCompare(b.namespace);\n });\n}\n\nexport function connectionHealthUrl(apiBase: string): string {\n return `${stripTrailingSlashes(apiBase)}/connections/health`;\n}\n\n/**\n * The dashboard inventory URL. A list request's connection type filters carry\n * over, so a dashboard rendered in place of a filtered list shows the same\n * subset; paging parameters do not, because the dashboard lists the fleet.\n */\nexport function connectionDashboardUrl({\n apiBase,\n requestUrl,\n}: {\n apiBase: string;\n requestUrl?: string;\n}): string {\n const search = new URLSearchParams();\n if (requestUrl) {\n const source = new URL(requestUrl, \"http://connections.local\");\n for (const key of [\"type\", \"types\"]) {\n const value = source.searchParams.get(key);\n if (value) search.set(key, value);\n }\n }\n const query = search.toString();\n return `${stripTrailingSlashes(apiBase)}/connections/dashboard${query ? `?${query}` : \"\"}`;\n}\n"],"mappings":";;;AAoFA,IAAa,iCAAiC;AAE9C,SAAgB,8BACd,aAC2B;CAC3B,MAAM,wBAAQ,IAAI,IAAuC;CACzD,KAAK,MAAM,cAAc,aAAa;EACpC,MAAM,OAAO,MAAM,IAAI,WAAW,SAAS;EAC3C,IAAI,MAAM,KAAK,KAAK,UAAU;OACzB,MAAM,IAAI,WAAW,WAAW,CAAC,UAAU,CAAC;CACnD;CACA,OAAO,CAAC,GAAG,KAAK,CAAC,CACd,KAAK,CAAC,WAAW,YAAY;EAC5B;EACA,aAAa,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;CACrE,EAAE,CAAC,CACF,MAAM,GAAG,MAAM;EACd,IAAI,EAAE,cAAc,IAAI,OAAO;EAC/B,IAAI,EAAE,cAAc,IAAI,OAAO;EAC/B,OAAO,EAAE,UAAU,cAAc,EAAE,SAAS;CAC9C,CAAC;AACL;AAEA,SAAgB,oBAAoB,SAAyB;CAC3D,OAAO,GAAG,qBAAqB,OAAO,EAAE;AAC1C;;;;;;AAOA,SAAgB,uBAAuB,EACrC,SACA,cAIS;CACT,MAAM,SAAS,IAAI,gBAAgB;CACnC,IAAI,YAAY;EACd,MAAM,SAAS,IAAI,IAAI,YAAY,0BAA0B;EAC7D,KAAK,MAAM,OAAO,CAAC,QAAQ,OAAO,GAAG;GACnC,MAAM,QAAQ,OAAO,aAAa,IAAI,GAAG;GACzC,IAAI,OAAO,OAAO,IAAI,KAAK,KAAK;EAClC;CACF;CACA,MAAM,QAAQ,OAAO,SAAS;CAC9B,OAAO,GAAG,qBAAqB,OAAO,EAAE,wBAAwB,QAAQ,IAAI,UAAU;AACxF"}
1
+ {"version":3,"file":"connectionDashboardModel.js","names":[],"sources":["../../src/connections/connectionDashboardModel.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { stripTrailingSlashes } from \"../lib/string\";\n\n/**\n * The connection dashboard's pure shapes and derivations: what the API returns,\n * how connections group into namespace lanes, and the URLs the dashboard calls\n * under a host's `apiBase` (the path the commons-db connections service is\n * mounted at, e.g. `/api/v1`). Kept apart from the components so the\n * derivations stay directly testable and the component files export\n * components only.\n */\n\nexport type ConnectionDashboardHealthState =\n | \"healthy\"\n | \"credentials\"\n | \"unreachable\"\n | \"unverifiable\"\n | \"unknown\";\n\nexport type ConnectionHealth = {\n state: ConnectionDashboardHealthState;\n detail: string;\n checkedAt: string;\n cached: boolean;\n};\n\nexport type ConnectionDashboardItem = {\n id: string;\n name: string;\n namespace: string;\n type: string;\n endpoint?: { scheme: string; host: string; path?: string };\n secretCount: number;\n inlineCredential: boolean;\n insecureTLS: boolean;\n // Absent until someone checks: listing reads the database only, so a\n // connection has no health until a check is explicitly requested.\n health?: ConnectionHealth | null;\n profileCount: number;\n updatedAt: string;\n /** A virtual or read-only connection: the service answers 405 to saving or deleting it. */\n readOnly?: boolean;\n source?: string;\n /** Problems loading the connection (e.g. an invalid file); it cannot be used until they are fixed. */\n warnings?: string[];\n};\n\nexport type ConnectionDashboardResponse = {\n connections: ConnectionDashboardItem[];\n generatedAt: string;\n /** The service has no connection store, so nothing can be created. */\n readOnly?: boolean;\n};\n\nexport type ConnectionHealthResult = ConnectionHealth & {\n id: string;\n durationMs: number;\n};\n\nexport type ConnectionHealthResponse = {\n results: ConnectionHealthResult[];\n generatedAt: string;\n};\n\nexport type ConnectionDashboardLane = {\n namespace: string;\n connections: ConnectionDashboardItem[];\n};\n\n/** What a row hands the host to wrap its body in a link to the connection. */\nexport type ConnectionLinkProps = {\n className: string;\n title?: string;\n children: ReactNode;\n};\n\n/**\n * Renders a dashboard row's link. The host owns routing: an EntityExplorerApp\n * host routes through its RouterAdapter's `renderLink`, a host with its own\n * route state renders an anchor that selects the connection.\n */\nexport type ConnectionLinkRenderer = (\n connection: ConnectionDashboardItem,\n link: ConnectionLinkProps,\n) => ReactNode;\n\nexport type ConnectionActionsRenderer = (connection: ConnectionDashboardItem) => ReactNode;\n\n/** The react-query key prefix every dashboard listing is cached under. */\nexport const CONNECTION_DASHBOARD_QUERY_KEY = \"connection-dashboard\";\n\nexport function groupConnectionDashboardLanes(\n connections: ConnectionDashboardItem[],\n): ConnectionDashboardLane[] {\n const lanes = new Map<string, ConnectionDashboardItem[]>();\n for (const connection of connections) {\n const lane = lanes.get(connection.namespace);\n if (lane) lane.push(connection);\n else lanes.set(connection.namespace, [connection]);\n }\n return [...lanes]\n .map(([namespace, items]) => ({\n namespace,\n connections: [...items].sort((a, b) => a.name.localeCompare(b.name)),\n }))\n .sort((a, b) => {\n if (a.namespace === \"\") return 1;\n if (b.namespace === \"\") return -1;\n return a.namespace.localeCompare(b.namespace);\n });\n}\n\nexport function connectionHealthUrl(apiBase: string): string {\n return `${stripTrailingSlashes(apiBase)}/connections/health`;\n}\n\n/**\n * The dashboard inventory URL. A list request's connection type filters carry\n * over, so a dashboard rendered in place of a filtered list shows the same\n * subset; paging parameters do not, because the dashboard lists the fleet.\n */\nexport function connectionDashboardUrl({\n apiBase,\n requestUrl,\n}: {\n apiBase: string;\n requestUrl?: string;\n}): string {\n const search = new URLSearchParams();\n if (requestUrl) {\n const source = new URL(requestUrl, \"http://connections.local\");\n for (const key of [\"type\", \"types\"]) {\n const value = source.searchParams.get(key);\n if (value) search.set(key, value);\n }\n }\n const query = search.toString();\n return `${stripTrailingSlashes(apiBase)}/connections/dashboard${query ? `?${query}` : \"\"}`;\n}\n"],"mappings":";;;AAyFA,IAAa,iCAAiC;AAE9C,SAAgB,8BACd,aAC2B;CAC3B,MAAM,wBAAQ,IAAI,IAAuC;CACzD,KAAK,MAAM,cAAc,aAAa;EACpC,MAAM,OAAO,MAAM,IAAI,WAAW,SAAS;EAC3C,IAAI,MAAM,KAAK,KAAK,UAAU;OACzB,MAAM,IAAI,WAAW,WAAW,CAAC,UAAU,CAAC;CACnD;CACA,OAAO,CAAC,GAAG,KAAK,CAAC,CACd,KAAK,CAAC,WAAW,YAAY;EAC5B;EACA,aAAa,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;CACrE,EAAE,CAAC,CACF,MAAM,GAAG,MAAM;EACd,IAAI,EAAE,cAAc,IAAI,OAAO;EAC/B,IAAI,EAAE,cAAc,IAAI,OAAO;EAC/B,OAAO,EAAE,UAAU,cAAc,EAAE,SAAS;CAC9C,CAAC;AACL;AAEA,SAAgB,oBAAoB,SAAyB;CAC3D,OAAO,GAAG,qBAAqB,OAAO,EAAE;AAC1C;;;;;;AAOA,SAAgB,uBAAuB,EACrC,SACA,cAIS;CACT,MAAM,SAAS,IAAI,gBAAgB;CACnC,IAAI,YAAY;EACd,MAAM,SAAS,IAAI,IAAI,YAAY,0BAA0B;EAC7D,KAAK,MAAM,OAAO,CAAC,QAAQ,OAAO,GAAG;GACnC,MAAM,QAAQ,OAAO,aAAa,IAAI,GAAG;GACzC,IAAI,OAAO,OAAO,IAAI,KAAK,KAAK;EAClC;CACF;CACA,MAAM,QAAQ,OAAO,SAAS;CAC9B,OAAO,GAAG,qBAAqB,OAAO,EAAE,wBAAwB,QAAQ,IAAI,UAAU;AACxF"}
@@ -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__ */ (0, react_jsx_runtime.jsxs)("div", {
49
49
  className: require_utils.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__ */ (0, react_jsx_runtime.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__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
58
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
59
- className: "shrink-0",
60
- "aria-hidden": true,
61
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_iconProvider.ConnectionTypeIcon, {
62
- type: connection.type,
63
- className: "size-4"
50
+ children: [
51
+ /* @__PURE__ */ (0, react_jsx_runtime.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__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
60
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
61
+ className: "shrink-0",
62
+ "aria-hidden": true,
63
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_iconProvider.ConnectionTypeIcon, {
64
+ type: connection.type,
65
+ className: "size-4"
66
+ })
67
+ }),
68
+ /* @__PURE__ */ (0, react_jsx_runtime.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__ */ (0, react_jsx_runtime.jsxs)("div", {
74
+ className: "min-w-0 flex-1",
75
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(EndpointLine, { endpoint: connection.endpoint }), connection.source && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
76
+ className: "truncate text-xs text-muted-foreground",
77
+ title: connection.source,
78
+ children: connection.source
79
+ })]
80
+ }),
81
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
82
+ className: "hidden shrink-0 items-center gap-1.5 lg:flex",
83
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SecretChip, { count: connection.secretCount }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RiskChips, { connection })]
84
+ }),
85
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
86
+ className: "w-24 shrink-0 text-right text-xs text-muted-foreground",
87
+ children: connection.profileCount === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
88
+ className: "text-muted-foreground/60",
89
+ children: "unused"
90
+ }) : `${connection.profileCount} profile${connection.profileCount === 1 ? "" : "s"}`
91
+ }),
92
+ /* @__PURE__ */ (0, react_jsx_runtime.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__ */ (0, react_jsx_runtime.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__ */ (0, react_jsx_runtime.jsx)("div", {
72
- className: "min-w-0 flex-1",
73
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EndpointLine, { endpoint: connection.endpoint })
74
- }),
75
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
76
- className: "hidden shrink-0 items-center gap-1.5 lg:flex",
77
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SecretChip, { count: connection.secretCount }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RiskChips, { connection })]
78
- }),
79
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
80
- className: "w-24 shrink-0 text-right text-xs text-muted-foreground",
81
- children: connection.profileCount === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
82
- className: "text-muted-foreground/60",
83
- children: "unused"
84
- }) : `${connection.profileCount} profile${connection.profileCount === 1 ? "" : "s"}`
85
- }),
86
- /* @__PURE__ */ (0, react_jsx_runtime.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__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [connection.inlineCredential ? /* @__PURE__ */ (0, react_jsx_runtime.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__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
156
- icon: require_UiKey.UiKey,
157
- className: "text-[11px]"
158
- }), "Password in URL"]
159
- }) : null, connection.insecureTLS ? /* @__PURE__ */ (0, react_jsx_runtime.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__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
162
- icon: require_UiWarningTriangle.UiWarningTriangle,
163
- className: "text-[11px]"
164
- }), "TLS verification off"]
165
- }) : null] });
161
+ const warnings = connection.warnings ?? [];
162
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
163
+ warnings.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.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__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
167
+ icon: require_UiWarningTriangle.UiWarningTriangle,
168
+ className: "text-[11px]"
169
+ }), "Cannot load"]
170
+ }) : null,
171
+ connection.inlineCredential ? /* @__PURE__ */ (0, react_jsx_runtime.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__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
174
+ icon: require_UiKey.UiKey,
175
+ className: "text-[11px]"
176
+ }), "Password in URL"]
177
+ }) : null,
178
+ connection.insecureTLS ? /* @__PURE__ */ (0, react_jsx_runtime.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__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
181
+ icon: require_UiWarningTriangle.UiWarningTriangle,
182
+ className: "text-[11px]"
183
+ }), "TLS verification off"]
184
+ }) : null
185
+ ] });
166
186
  }
167
187
  function ConnectionHealthLegend() {
168
188
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
@@ -1 +1 @@
1
- {"version":3,"file":"connectionDashboardRow.cjs","names":["cn","_Fragment","ConnectionTypeIcon","Icon","UiLink","UiLock","UiKey","UiWarningTriangle"],"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.cjs","names":["cn","_Fragment","ConnectionTypeIcon","Icon","UiLink","UiLock","UiWarningTriangle","UiKey"],"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":";;;;;;;;;AAYA,IAAM,gBAAgE;CACpE,SAAS;CACT,aAAa;CACb,aAAa;CACb,cAAc;CACd,SAAS;AACX;AAEA,IAAM,uBAAuE;CAC3E,SAAS;CACT,aAAa;CACb,aAAa;CACb,cAAc;CACd,SAAS;AACX;AAEA,IAAM,gBAGF;CACF,SAAS;EAAE,KAAK;EAAkB,MAAM;CAAuB;CAC/D,aAAa;EAAE,KAAK;EAAgB,MAAM;CAAqB;CAC/D,aAAa;EAAE,KAAK;EAAe,MAAM;CAAoB;CAC7D,cAAc;EAAE,KAAK;EAAuB,MAAM;CAAkB;CACpE,SAAS;EAAE,KAAK;EAA0B,MAAM;CAAkB;AACpE;AAEA,IAAM,iBAAiB;AAEvB,SAAgB,uBAAuB,EACrC,yBACA,YACA,QACA,SACA,SACA,wBAQC;CACD,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EACE,WAAWA,cAAAA,GACT,+EACA,SAAS,cAAc,OAAO,MAAM,CAAC,OAAO,cAC9C;EAJF,UAAA;GAQE,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;IACU;IACC;IACT,eAAe,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,QAAQ,MAAM,EAAE,CAAC;GACnE,CAAA;GACA,qBAAqB,YAAY;IAChC,GAAI,QAAQ,SAAS,EAAE,OAAO,OAAO,OAAO,IAAI,CAAC;IACjD,WACE;IACF,UACE,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAW,eAAA;MACzB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,qBAAAA,oBAAD;OAAoB,MAAM,WAAW;OAAM,WAAU;MAAU,CAAA;KAC3D,CAAA;KACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAqD,OAAO,WAAW;MACpF,UAAA,WAAW;KACR,CAAA;KACN,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD,EAAc,UAAU,WAAW,SAAW,CAAA,GAC7C,WAAW,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;OAAK,WAAU;OAAyC,OAAO,WAAW;OAAS,UAAA,WAAW;MAAY,CAAA,CAC7H;;KACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,EAAY,OAAO,WAAW,YAAc,CAAA,GAC5C,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAuB,WAAa,CAAA,CACjC;;KACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MACb,UAAA,WAAW,iBAAiB,IAC3B,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAA2B,UAAA;MAAY,CAAA,IAEvD,GAAG,WAAW,aAAa,UAAU,WAAW,iBAAiB,IAAI,KAAK;KAExE,CAAA;KACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MACb,UAAA,SAAS,WAAW,SAAS;KAC1B,CAAA;IACN,EAAA,CAAA;GAEN,CAAC;GACA,0BAA0B,UAAU;EAClC;;AAET;AAEA,SAAS,UAAU,EACjB,QACA,SACA,WAKC;CACD,MAAM,QAAQ,UACV,oBACA,SACE,GAAG,cAAc,OAAO,OAAO,kBAC/B;CACN,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EACE,MAAK;EACL,SAAS;EACT,UAAU;EACV,OAAO,QAAQ,UAAU;EACzB,cAAY;EACZ,WAAU;EAEV,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EACE,WAAWF,cAAAA,GACT,6BACA,UACI,yCACA,SACE,cAAc,OAAO,MAAM,CAAC,MAC5B,mCACR,EACD,CAAA;CACK,CAAA;AAEZ;AAEA,SAAS,aAAa,EAAE,YAA+D;CACrF,IAAI,CAAC,UACH,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;EAAM,WAAU;EAAhB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACG,aAAAA,MAAD;GAAM,MAAMC,eAAAA;GAAQ,WAAU;EAAW,CAAA,GACzC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAS,UAAA;EAAkC,CAAA,CACvD;;CAGV,MAAM,WAAW;EAAC;EAAc;EAAQ;CAAa,CAAC,CAAC,SAAS,SAAS,MAAM;CAC/E,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;EAAM,WAAU;EAAhB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GACE,WAAWJ,cAAAA,GACT,8DACA,WACI,wHACA,4CACN;GAEC,UAAA,SAAS;EACN,CAAA,GACN,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAM,WAAU;GAA2B,OAAO,GAAG,SAAS,OAAO,SAAS,QAAQ;GAAtF,UAAA,CACG,SAAS,MACT,SAAS,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAyB,UAAA,SAAS;GAAW,CAAA,IAAI,IAC9E;EACF,CAAA,CAAA;;AAEV;AAEA,SAAS,WAAW,EAAE,SAA4B;CAChD,IAAI,UAAU,GAAG,OAAO;CACxB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;EAAM,WAAU;EAAhB,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAACG,aAAAA,MAAD;IAAM,MAAME,eAAAA;IAAQ,WAAU;GAAe,CAAA;GAC5C;GAAM;GAAQ,UAAU,IAAI,KAAK;EAC9B;;AAEV;AAEA,SAAS,UAAU,EAAE,cAAuD;CAC1E,MAAM,WAAW,WAAW,YAAY,CAAC;CACzC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAAJ,kBAAAA,UAAA,EAAA,UAAA;EACG,SAAS,SAAS,IACjB,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GACE,WAAU;GACV,OAAO,SAAS,KAAK,IAAI;GAF3B,UAAA,CAIE,iBAAA,GAAA,kBAAA,IAAA,CAACE,aAAAA,MAAD;IAAM,MAAMG,0BAAAA;IAAmB,WAAU;GAAe,CAAA,GAAC,aAErD;EACJ,CAAA,IAAA;EACH,WAAW,mBACV,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACH,aAAAA,MAAD;IAAM,MAAMI,cAAAA;IAAO,WAAU;GAAe,CAAA,GAAC,iBAEzC;EACJ,CAAA,IAAA;EACH,WAAW,cACV,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACJ,aAAAA,MAAD;IAAM,MAAMG,0BAAAA;IAAmB,WAAU;GAAe,CAAA,GAAC,sBAErD;EACJ,CAAA,IAAA;CACJ,EAAA,CAAA;AAEN;AAEA,SAAgB,yBAAyB;CACvC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;EAAG,WAAU;EAAb,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,qEAAsE,CAAA,GAAC,aAEnF;EACJ,CAAA,GAAA;GAAC;GAAW;GAAe;GAAe;GAAgB;EAAS,CAAC,CAAW,KAC9E,UACC,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAkB,WAAU;GAA5B,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAWN,cAAAA,GAAG,0BAA0B,cAAc,MAAM,CAAC,GAAG,EAAI,CAAA,GACzE,qBAAqB,MAClB;EAHK,GAAA,KAGL,CAEV,CACC;;AAEP;AAEA,SAAS,SAAS,WAA2B;CAC3C,MAAM,YAAY,KAAK,MAAM,SAAS;CACtC,IAAI,CAAC,OAAO,SAAS,SAAS,GAAG,OAAO;CACxC,OAAO,GAAG,KAAK,IAAI,GAAG,KAAK,OAAO,KAAK,IAAI,IAAI,aAAa,KAAU,CAAC,EAAE;AAC3E"}
@@ -1,5 +1,5 @@
1
- import { ConnectionDashboardItem, ConnectionHealth, ConnectionLinkRenderer } from './connectionDashboardModel.js';
2
- export declare function ConnectionDashboardRow({ connection, health, pending, onCheck, renderConnectionLink, }: {
1
+ import { ConnectionDashboardItem, ConnectionHealth, ConnectionLinkRenderer, ConnectionActionsRenderer } from './connectionDashboardModel.js';
2
+ export declare function ConnectionDashboardRow({ renderConnectionActions, connection, health, pending, onCheck, renderConnectionLink, }: {
3
3
  connection: ConnectionDashboardItem;
4
4
  health?: ConnectionHealth | undefined;
5
5
  pending: boolean;
@@ -7,6 +7,7 @@ export declare function ConnectionDashboardRow({ connection, health, pending, on
7
7
  force?: boolean;
8
8
  }) => void;
9
9
  renderConnectionLink: ConnectionLinkRenderer;
10
+ renderConnectionActions?: ConnectionActionsRenderer;
10
11
  }): import("react").JSX.Element;
11
12
  export declare function ConnectionHealthLegend(): import("react").JSX.Element;
12
13
  //# sourceMappingURL=connectionDashboardRow.d.ts.map