@flanksource/clicky-ui 0.3.48 → 0.3.50

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 (444) hide show
  1. package/dist/connections/ConnectionsPage.cjs +219 -0
  2. package/dist/connections/ConnectionsPage.cjs.map +1 -0
  3. package/dist/connections/ConnectionsPage.d.ts +23 -0
  4. package/dist/connections/ConnectionsPage.d.ts.map +1 -0
  5. package/dist/connections/ConnectionsPage.js +219 -0
  6. package/dist/connections/ConnectionsPage.js.map +1 -0
  7. package/dist/connections/connectionActionStatus.cjs +43 -0
  8. package/dist/connections/connectionActionStatus.cjs.map +1 -0
  9. package/dist/connections/connectionActionStatus.d.ts +5 -0
  10. package/dist/connections/connectionActionStatus.d.ts.map +1 -0
  11. package/dist/connections/connectionActionStatus.js +43 -0
  12. package/dist/connections/connectionActionStatus.js.map +1 -0
  13. package/dist/connections/connectionActionTypes.cjs +24 -0
  14. package/dist/connections/connectionActionTypes.cjs.map +1 -0
  15. package/dist/connections/connectionActionTypes.d.ts +36 -0
  16. package/dist/connections/connectionActionTypes.d.ts.map +1 -0
  17. package/dist/connections/connectionActionTypes.js +24 -0
  18. package/dist/connections/connectionActionTypes.js.map +1 -0
  19. package/dist/connections/connectionActions.cjs +11 -0
  20. package/dist/connections/connectionActions.cjs.map +1 -0
  21. package/dist/connections/connectionActions.d.ts +15 -0
  22. package/dist/connections/connectionActions.d.ts.map +1 -0
  23. package/dist/connections/connectionActions.js +11 -0
  24. package/dist/connections/connectionActions.js.map +1 -0
  25. package/dist/connections/connectionDashboard.cjs +185 -0
  26. package/dist/connections/connectionDashboard.cjs.map +1 -0
  27. package/dist/connections/connectionDashboard.d.ts +25 -0
  28. package/dist/connections/connectionDashboard.d.ts.map +1 -0
  29. package/dist/connections/connectionDashboard.js +185 -0
  30. package/dist/connections/connectionDashboard.js.map +1 -0
  31. package/dist/connections/connectionDashboardModel.cjs +43 -0
  32. package/dist/connections/connectionDashboardModel.cjs.map +1 -0
  33. package/dist/connections/connectionDashboardModel.d.ts +75 -0
  34. package/dist/connections/connectionDashboardModel.d.ts.map +1 -0
  35. package/dist/connections/connectionDashboardModel.js +43 -0
  36. package/dist/connections/connectionDashboardModel.js.map +1 -0
  37. package/dist/connections/connectionDashboardRenderer.cjs +21 -0
  38. package/dist/connections/connectionDashboardRenderer.cjs.map +1 -0
  39. package/dist/connections/connectionDashboardRenderer.d.ts +15 -0
  40. package/dist/connections/connectionDashboardRenderer.d.ts.map +1 -0
  41. package/dist/connections/connectionDashboardRenderer.js +21 -0
  42. package/dist/connections/connectionDashboardRenderer.js.map +1 -0
  43. package/dist/connections/connectionDashboardRow.cjs +169 -0
  44. package/dist/connections/connectionDashboardRow.cjs.map +1 -0
  45. package/dist/connections/connectionDashboardRow.d.ts +12 -0
  46. package/dist/connections/connectionDashboardRow.d.ts.map +1 -0
  47. package/dist/connections/connectionDashboardRow.js +169 -0
  48. package/dist/connections/connectionDashboardRow.js.map +1 -0
  49. package/dist/connections/connectionErrorView.cjs +8 -0
  50. package/dist/connections/connectionErrorView.cjs.map +1 -0
  51. package/dist/connections/connectionErrorView.d.ts +4 -0
  52. package/dist/connections/connectionErrorView.d.ts.map +1 -0
  53. package/dist/connections/connectionErrorView.js +8 -0
  54. package/dist/connections/connectionErrorView.js.map +1 -0
  55. package/dist/connections/connectionHealth.cjs +82 -0
  56. package/dist/connections/connectionHealth.cjs.map +1 -0
  57. package/dist/connections/connectionHealth.d.ts +33 -0
  58. package/dist/connections/connectionHealth.d.ts.map +1 -0
  59. package/dist/connections/connectionHealth.js +82 -0
  60. package/dist/connections/connectionHealth.js.map +1 -0
  61. package/dist/connections/connectionLogging.cjs +29 -0
  62. package/dist/connections/connectionLogging.cjs.map +1 -0
  63. package/dist/connections/connectionLogging.d.ts +11 -0
  64. package/dist/connections/connectionLogging.d.ts.map +1 -0
  65. package/dist/connections/connectionLogging.js +29 -0
  66. package/dist/connections/connectionLogging.js.map +1 -0
  67. package/dist/connections/connectionLoggingField.cjs +37 -0
  68. package/dist/connections/connectionLoggingField.cjs.map +1 -0
  69. package/dist/connections/connectionLoggingField.d.ts +12 -0
  70. package/dist/connections/connectionLoggingField.d.ts.map +1 -0
  71. package/dist/connections/connectionLoggingField.js +37 -0
  72. package/dist/connections/connectionLoggingField.js.map +1 -0
  73. package/dist/connections/connectionLoggingModel.cjs +16 -0
  74. package/dist/connections/connectionLoggingModel.cjs.map +1 -0
  75. package/dist/connections/connectionLoggingModel.d.ts +6 -0
  76. package/dist/connections/connectionLoggingModel.d.ts.map +1 -0
  77. package/dist/connections/connectionLoggingModel.js +16 -0
  78. package/dist/connections/connectionLoggingModel.js.map +1 -0
  79. package/dist/connections/connectionResolveView.cjs +24 -0
  80. package/dist/connections/connectionResolveView.cjs.map +1 -0
  81. package/dist/connections/connectionResolveView.d.ts +5 -0
  82. package/dist/connections/connectionResolveView.d.ts.map +1 -0
  83. package/dist/connections/connectionResolveView.js +24 -0
  84. package/dist/connections/connectionResolveView.js.map +1 -0
  85. package/dist/connections/connectionTestButton.cjs +58 -0
  86. package/dist/connections/connectionTestButton.cjs.map +1 -0
  87. package/dist/connections/connectionTestButton.d.ts +6 -0
  88. package/dist/connections/connectionTestButton.d.ts.map +1 -0
  89. package/dist/connections/connectionTestButton.js +58 -0
  90. package/dist/connections/connectionTestButton.js.map +1 -0
  91. package/dist/connections/connectionTestView.cjs +12 -0
  92. package/dist/connections/connectionTestView.cjs.map +1 -0
  93. package/dist/connections/connectionTestView.d.ts +5 -0
  94. package/dist/connections/connectionTestView.d.ts.map +1 -0
  95. package/dist/connections/connectionTestView.js +12 -0
  96. package/dist/connections/connectionTestView.js.map +1 -0
  97. package/dist/connections/connectionsPageModel.cjs +33 -0
  98. package/dist/connections/connectionsPageModel.cjs.map +1 -0
  99. package/dist/connections/connectionsPageModel.d.ts +24 -0
  100. package/dist/connections/connectionsPageModel.d.ts.map +1 -0
  101. package/dist/connections/connectionsPageModel.js +33 -0
  102. package/dist/connections/connectionsPageModel.js.map +1 -0
  103. package/dist/connections/iconProvider.cjs +20 -0
  104. package/dist/connections/iconProvider.cjs.map +1 -0
  105. package/dist/connections/iconProvider.d.ts +7 -0
  106. package/dist/connections/iconProvider.d.ts.map +1 -0
  107. package/dist/connections/iconProvider.js +20 -0
  108. package/dist/connections/iconProvider.js.map +1 -0
  109. package/dist/connections.cjs +45 -0
  110. package/dist/connections.cjs.map +1 -0
  111. package/dist/connections.d.ts +34 -0
  112. package/dist/connections.d.ts.map +1 -0
  113. package/dist/connections.js +45 -0
  114. package/dist/connections.js.map +1 -0
  115. package/dist/data/DataTable.cjs +18 -8
  116. package/dist/data/DataTable.cjs.map +1 -1
  117. package/dist/data/DataTable.d.ts +4 -0
  118. package/dist/data/DataTable.d.ts.map +1 -1
  119. package/dist/data/DataTable.js +18 -8
  120. package/dist/data/DataTable.js.map +1 -1
  121. package/dist/data/TaskManager.cjs +183 -159
  122. package/dist/data/TaskManager.cjs.map +1 -1
  123. package/dist/data/TaskManager.d.ts +3 -1
  124. package/dist/data/TaskManager.d.ts.map +1 -1
  125. package/dist/data/TaskManager.js +185 -161
  126. package/dist/data/TaskManager.js.map +1 -1
  127. package/dist/data/TaskManagerButton.cjs +1 -0
  128. package/dist/data/TaskManagerButton.cjs.map +1 -1
  129. package/dist/data/TaskManagerButton.js +1 -0
  130. package/dist/data/TaskManagerButton.js.map +1 -1
  131. package/dist/data/TaskProgress.cjs +13 -7
  132. package/dist/data/TaskProgress.cjs.map +1 -1
  133. package/dist/data/TaskProgress.d.ts +3 -1
  134. package/dist/data/TaskProgress.d.ts.map +1 -1
  135. package/dist/data/TaskProgress.js +13 -7
  136. package/dist/data/TaskProgress.js.map +1 -1
  137. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +52 -295
  138. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs.map +1 -1
  139. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
  140. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +47 -290
  141. package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -1
  142. package/dist/data/diagnostics/MetricTile.cjs +44 -0
  143. package/dist/data/diagnostics/MetricTile.cjs.map +1 -0
  144. package/dist/data/diagnostics/MetricTile.d.ts +13 -0
  145. package/dist/data/diagnostics/MetricTile.d.ts.map +1 -0
  146. package/dist/data/diagnostics/MetricTile.js +44 -0
  147. package/dist/data/diagnostics/MetricTile.js.map +1 -0
  148. package/dist/data/diagnostics/StackDumpView.cjs +227 -0
  149. package/dist/data/diagnostics/StackDumpView.cjs.map +1 -0
  150. package/dist/data/diagnostics/StackDumpView.d.ts +53 -0
  151. package/dist/data/diagnostics/StackDumpView.d.ts.map +1 -0
  152. package/dist/data/diagnostics/StackDumpView.js +227 -0
  153. package/dist/data/diagnostics/StackDumpView.js.map +1 -0
  154. package/dist/data/diagnostics/fixtures.d.ts +1 -0
  155. package/dist/data/diagnostics/fixtures.d.ts.map +1 -1
  156. package/dist/data/diagnostics/metric-tone.cjs +18 -0
  157. package/dist/data/diagnostics/metric-tone.cjs.map +1 -0
  158. package/dist/data/diagnostics/metric-tone.d.ts +6 -0
  159. package/dist/data/diagnostics/metric-tone.d.ts.map +1 -0
  160. package/dist/data/diagnostics/metric-tone.js +18 -0
  161. package/dist/data/diagnostics/metric-tone.js.map +1 -0
  162. package/dist/data/diagnostics/stacktrace.cjs +44 -0
  163. package/dist/data/diagnostics/stacktrace.cjs.map +1 -1
  164. package/dist/data/diagnostics/stacktrace.d.ts +7 -0
  165. package/dist/data/diagnostics/stacktrace.d.ts.map +1 -1
  166. package/dist/data/diagnostics/stacktrace.js +44 -0
  167. package/dist/data/diagnostics/stacktrace.js.map +1 -1
  168. package/dist/data/diagnostics/types.d.ts +2 -8
  169. package/dist/data/diagnostics/types.d.ts.map +1 -1
  170. package/dist/data/lint/LintDetail.cjs +339 -0
  171. package/dist/data/lint/LintDetail.cjs.map +1 -0
  172. package/dist/data/lint/LintDetail.d.ts +17 -0
  173. package/dist/data/lint/LintDetail.d.ts.map +1 -0
  174. package/dist/data/lint/LintDetail.js +339 -0
  175. package/dist/data/lint/LintDetail.js.map +1 -0
  176. package/dist/data/lint/LintFilterBar.cjs +103 -0
  177. package/dist/data/lint/LintFilterBar.cjs.map +1 -0
  178. package/dist/data/lint/LintFilterBar.d.ts +16 -0
  179. package/dist/data/lint/LintFilterBar.d.ts.map +1 -0
  180. package/dist/data/lint/LintFilterBar.js +103 -0
  181. package/dist/data/lint/LintFilterBar.js.map +1 -0
  182. package/dist/data/lint/LintResults.cjs +144 -0
  183. package/dist/data/lint/LintResults.cjs.map +1 -0
  184. package/dist/data/lint/LintResults.d.ts +39 -0
  185. package/dist/data/lint/LintResults.d.ts.map +1 -0
  186. package/dist/data/lint/LintResults.fixtures.d.ts +10 -0
  187. package/dist/data/lint/LintResults.fixtures.d.ts.map +1 -0
  188. package/dist/data/lint/LintResults.js +144 -0
  189. package/dist/data/lint/LintResults.js.map +1 -0
  190. package/dist/data/lint/LintTreeNode.cjs +66 -0
  191. package/dist/data/lint/LintTreeNode.cjs.map +1 -0
  192. package/dist/data/lint/LintTreeNode.d.ts +7 -0
  193. package/dist/data/lint/LintTreeNode.d.ts.map +1 -0
  194. package/dist/data/lint/LintTreeNode.js +66 -0
  195. package/dist/data/lint/LintTreeNode.js.map +1 -0
  196. package/dist/data/lint/actions.cjs +195 -0
  197. package/dist/data/lint/actions.cjs.map +1 -0
  198. package/dist/data/lint/actions.d.ts +29 -0
  199. package/dist/data/lint/actions.d.ts.map +1 -0
  200. package/dist/data/lint/actions.js +195 -0
  201. package/dist/data/lint/actions.js.map +1 -0
  202. package/dist/data/lint/grouping-options.cjs +14 -0
  203. package/dist/data/lint/grouping-options.cjs.map +1 -0
  204. package/dist/data/lint/grouping-options.d.ts +9 -0
  205. package/dist/data/lint/grouping-options.d.ts.map +1 -0
  206. package/dist/data/lint/grouping-options.js +14 -0
  207. package/dist/data/lint/grouping-options.js.map +1 -0
  208. package/dist/data/lint/grouping.cjs +450 -0
  209. package/dist/data/lint/grouping.cjs.map +1 -0
  210. package/dist/data/lint/grouping.d.ts +10 -0
  211. package/dist/data/lint/grouping.d.ts.map +1 -0
  212. package/dist/data/lint/grouping.js +450 -0
  213. package/dist/data/lint/grouping.js.map +1 -0
  214. package/dist/data/lint/index.d.ts +10 -0
  215. package/dist/data/lint/index.d.ts.map +1 -0
  216. package/dist/data/lint/paths.cjs +35 -0
  217. package/dist/data/lint/paths.cjs.map +1 -0
  218. package/dist/data/lint/paths.d.ts +13 -0
  219. package/dist/data/lint/paths.d.ts.map +1 -0
  220. package/dist/data/lint/paths.js +35 -0
  221. package/dist/data/lint/paths.js.map +1 -0
  222. package/dist/data/lint/stats.cjs +76 -0
  223. package/dist/data/lint/stats.cjs.map +1 -0
  224. package/dist/data/lint/stats.d.ts +19 -0
  225. package/dist/data/lint/stats.d.ts.map +1 -0
  226. package/dist/data/lint/stats.js +76 -0
  227. package/dist/data/lint/stats.js.map +1 -0
  228. package/dist/data/lint/types.cjs +16 -0
  229. package/dist/data/lint/types.cjs.map +1 -0
  230. package/dist/data/lint/types.d.ts +93 -0
  231. package/dist/data/lint/types.d.ts.map +1 -0
  232. package/dist/data/lint/types.js +16 -0
  233. package/dist/data/lint/types.js.map +1 -0
  234. package/dist/data/test-runner/TestAttemptDetail.cjs +113 -0
  235. package/dist/data/test-runner/TestAttemptDetail.cjs.map +1 -0
  236. package/dist/data/test-runner/TestAttemptDetail.d.ts +19 -0
  237. package/dist/data/test-runner/TestAttemptDetail.d.ts.map +1 -0
  238. package/dist/data/test-runner/TestAttemptDetail.js +113 -0
  239. package/dist/data/test-runner/TestAttemptDetail.js.map +1 -0
  240. package/dist/data/test-runner/TestAttempts.cjs +36 -0
  241. package/dist/data/test-runner/TestAttempts.cjs.map +1 -0
  242. package/dist/data/test-runner/TestAttempts.d.ts +5 -0
  243. package/dist/data/test-runner/TestAttempts.d.ts.map +1 -0
  244. package/dist/data/test-runner/TestAttempts.js +36 -0
  245. package/dist/data/test-runner/TestAttempts.js.map +1 -0
  246. package/dist/data/test-runner/TestDetailPanel.cjs +13 -3
  247. package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
  248. package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
  249. package/dist/data/test-runner/TestDetailPanel.js +14 -4
  250. package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
  251. package/dist/data/test-runner/TestFailureDetail.cjs +9 -29
  252. package/dist/data/test-runner/TestFailureDetail.cjs.map +1 -1
  253. package/dist/data/test-runner/TestFailureDetail.d.ts +6 -6
  254. package/dist/data/test-runner/TestFailureDetail.d.ts.map +1 -1
  255. package/dist/data/test-runner/TestFailureDetail.js +9 -29
  256. package/dist/data/test-runner/TestFailureDetail.js.map +1 -1
  257. package/dist/data/test-runner/TestRunSummary.cjs +33 -0
  258. package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
  259. package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
  260. package/dist/data/test-runner/TestRunSummary.js +34 -1
  261. package/dist/data/test-runner/TestRunSummary.js.map +1 -1
  262. package/dist/data/test-runner/TestRunner.cjs +3 -0
  263. package/dist/data/test-runner/TestRunner.cjs.map +1 -1
  264. package/dist/data/test-runner/TestRunner.d.ts +8 -1
  265. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  266. package/dist/data/test-runner/TestRunner.js +3 -0
  267. package/dist/data/test-runner/TestRunner.js.map +1 -1
  268. package/dist/data/test-runner/TestTreeNode.cjs +3 -1
  269. package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
  270. package/dist/data/test-runner/TestTreeNode.d.ts.map +1 -1
  271. package/dist/data/test-runner/TestTreeNode.js +3 -1
  272. package/dist/data/test-runner/TestTreeNode.js.map +1 -1
  273. package/dist/data/test-runner/adapter.cjs +9 -1
  274. package/dist/data/test-runner/adapter.cjs.map +1 -1
  275. package/dist/data/test-runner/adapter.d.ts +5 -0
  276. package/dist/data/test-runner/adapter.d.ts.map +1 -1
  277. package/dist/data/test-runner/adapter.js +9 -1
  278. package/dist/data/test-runner/adapter.js.map +1 -1
  279. package/dist/data/test-runner/attempts.cjs +62 -0
  280. package/dist/data/test-runner/attempts.cjs.map +1 -0
  281. package/dist/data/test-runner/attempts.d.ts +13 -0
  282. package/dist/data/test-runner/attempts.d.ts.map +1 -0
  283. package/dist/data/test-runner/attempts.js +62 -0
  284. package/dist/data/test-runner/attempts.js.map +1 -0
  285. package/dist/data/test-runner/context.cjs.map +1 -1
  286. package/dist/data/test-runner/context.d.ts +6 -0
  287. package/dist/data/test-runner/context.d.ts.map +1 -1
  288. package/dist/data/test-runner/context.js.map +1 -1
  289. package/dist/data/test-runner/index.d.ts +5 -1
  290. package/dist/data/test-runner/index.d.ts.map +1 -1
  291. package/dist/data/test-runner/marks.cjs +2 -0
  292. package/dist/data/test-runner/marks.cjs.map +1 -1
  293. package/dist/data/test-runner/marks.d.ts.map +1 -1
  294. package/dist/data/test-runner/marks.js +2 -0
  295. package/dist/data/test-runner/marks.js.map +1 -1
  296. package/dist/data/test-runner/process-metrics.cjs +15 -0
  297. package/dist/data/test-runner/process-metrics.cjs.map +1 -0
  298. package/dist/data/test-runner/process-metrics.d.ts +22 -0
  299. package/dist/data/test-runner/process-metrics.d.ts.map +1 -0
  300. package/dist/data/test-runner/process-metrics.js +15 -0
  301. package/dist/data/test-runner/process-metrics.js.map +1 -0
  302. package/dist/data/test-runner/status.cjs +11 -3
  303. package/dist/data/test-runner/status.cjs.map +1 -1
  304. package/dist/data/test-runner/status.d.ts +3 -1
  305. package/dist/data/test-runner/status.d.ts.map +1 -1
  306. package/dist/data/test-runner/status.js +11 -3
  307. package/dist/data/test-runner/status.js.map +1 -1
  308. package/dist/data/test-runner/types.d.ts +14 -0
  309. package/dist/data/test-runner/types.d.ts.map +1 -1
  310. package/dist/data/traces/GoProfileView.cjs +176 -0
  311. package/dist/data/traces/GoProfileView.cjs.map +1 -0
  312. package/dist/data/traces/GoProfileView.d.ts +30 -0
  313. package/dist/data/traces/GoProfileView.d.ts.map +1 -0
  314. package/dist/data/traces/GoProfileView.js +176 -0
  315. package/dist/data/traces/GoProfileView.js.map +1 -0
  316. package/dist/data/traces/ProcessFacetTable.cjs +79 -0
  317. package/dist/data/traces/ProcessFacetTable.cjs.map +1 -0
  318. package/dist/data/traces/ProcessFacetTable.d.ts +21 -0
  319. package/dist/data/traces/ProcessFacetTable.d.ts.map +1 -0
  320. package/dist/data/traces/ProcessFacetTable.js +79 -0
  321. package/dist/data/traces/ProcessFacetTable.js.map +1 -0
  322. package/dist/data/traces/ProcessRecordViews.cjs +41 -0
  323. package/dist/data/traces/ProcessRecordViews.cjs.map +1 -0
  324. package/dist/data/traces/ProcessRecordViews.d.ts +16 -0
  325. package/dist/data/traces/ProcessRecordViews.d.ts.map +1 -0
  326. package/dist/data/traces/ProcessRecordViews.js +41 -0
  327. package/dist/data/traces/ProcessRecordViews.js.map +1 -0
  328. package/dist/data/traces/ProcessTraceDetail.cjs +316 -0
  329. package/dist/data/traces/ProcessTraceDetail.cjs.map +1 -0
  330. package/dist/data/traces/ProcessTraceDetail.d.ts +39 -0
  331. package/dist/data/traces/ProcessTraceDetail.d.ts.map +1 -0
  332. package/dist/data/traces/ProcessTraceDetail.js +316 -0
  333. package/dist/data/traces/ProcessTraceDetail.js.map +1 -0
  334. package/dist/data/traces/ProcessTraceTree.cjs +135 -0
  335. package/dist/data/traces/ProcessTraceTree.cjs.map +1 -0
  336. package/dist/data/traces/ProcessTraceTree.d.ts +41 -0
  337. package/dist/data/traces/ProcessTraceTree.d.ts.map +1 -0
  338. package/dist/data/traces/ProcessTraceTree.js +135 -0
  339. package/dist/data/traces/ProcessTraceTree.js.map +1 -0
  340. package/dist/data/traces/Sparkline.cjs +45 -0
  341. package/dist/data/traces/Sparkline.cjs.map +1 -0
  342. package/dist/data/traces/Sparkline.d.ts +29 -0
  343. package/dist/data/traces/Sparkline.d.ts.map +1 -0
  344. package/dist/data/traces/Sparkline.js +45 -0
  345. package/dist/data/traces/Sparkline.js.map +1 -0
  346. package/dist/data/traces/SqlTraceTable.cjs +104 -0
  347. package/dist/data/traces/SqlTraceTable.cjs.map +1 -0
  348. package/dist/data/traces/SqlTraceTable.d.ts +19 -0
  349. package/dist/data/traces/SqlTraceTable.d.ts.map +1 -0
  350. package/dist/data/traces/SqlTraceTable.js +104 -0
  351. package/dist/data/traces/SqlTraceTable.js.map +1 -0
  352. package/dist/data/traces/TerminalCastPlayer.cjs +162 -0
  353. package/dist/data/traces/TerminalCastPlayer.cjs.map +1 -0
  354. package/dist/data/traces/TerminalCastPlayer.js +162 -0
  355. package/dist/data/traces/TerminalCastPlayer.js.map +1 -0
  356. package/dist/data/traces/TraceHarView.cjs +15 -0
  357. package/dist/data/traces/TraceHarView.cjs.map +1 -0
  358. package/dist/data/traces/TraceHarView.js +15 -0
  359. package/dist/data/traces/TraceHarView.js.map +1 -0
  360. package/dist/data/traces/TraceView.cjs +63 -0
  361. package/dist/data/traces/TraceView.cjs.map +1 -0
  362. package/dist/data/traces/TraceView.d.ts +20 -0
  363. package/dist/data/traces/TraceView.d.ts.map +1 -0
  364. package/dist/data/traces/TraceView.js +63 -0
  365. package/dist/data/traces/TraceView.js.map +1 -0
  366. package/dist/data/traces/TraceWindowList.cjs +117 -0
  367. package/dist/data/traces/TraceWindowList.cjs.map +1 -0
  368. package/dist/data/traces/TraceWindowList.d.ts +48 -0
  369. package/dist/data/traces/TraceWindowList.d.ts.map +1 -0
  370. package/dist/data/traces/TraceWindowList.js +117 -0
  371. package/dist/data/traces/TraceWindowList.js.map +1 -0
  372. package/dist/data/traces/cast.cjs +81 -0
  373. package/dist/data/traces/cast.cjs.map +1 -0
  374. package/dist/data/traces/cast.js +81 -0
  375. package/dist/data/traces/cast.js.map +1 -0
  376. package/dist/data/traces/fixtures.d.ts +25 -1
  377. package/dist/data/traces/fixtures.d.ts.map +1 -1
  378. package/dist/data/traces/har-adapter.cjs +83 -0
  379. package/dist/data/traces/har-adapter.cjs.map +1 -0
  380. package/dist/data/traces/har-adapter.js +83 -0
  381. package/dist/data/traces/har-adapter.js.map +1 -0
  382. package/dist/data/traces/index.d.ts +19 -0
  383. package/dist/data/traces/index.d.ts.map +1 -0
  384. package/dist/data/traces/process-facets.cjs +48 -0
  385. package/dist/data/traces/process-facets.cjs.map +1 -0
  386. package/dist/data/traces/process-facets.d.ts +38 -0
  387. package/dist/data/traces/process-facets.d.ts.map +1 -0
  388. package/dist/data/traces/process-facets.js +48 -0
  389. package/dist/data/traces/process-facets.js.map +1 -0
  390. package/dist/data/traces/process-tree.cjs +85 -0
  391. package/dist/data/traces/process-tree.cjs.map +1 -0
  392. package/dist/data/traces/process-tree.d.ts +40 -0
  393. package/dist/data/traces/process-tree.d.ts.map +1 -0
  394. package/dist/data/traces/process-tree.js +85 -0
  395. package/dist/data/traces/process-tree.js.map +1 -0
  396. package/dist/data/traces/profile-aggregate.cjs +78 -0
  397. package/dist/data/traces/profile-aggregate.cjs.map +1 -0
  398. package/dist/data/traces/profile-aggregate.d.ts +41 -0
  399. package/dist/data/traces/profile-aggregate.d.ts.map +1 -0
  400. package/dist/data/traces/profile-aggregate.js +78 -0
  401. package/dist/data/traces/profile-aggregate.js.map +1 -0
  402. package/dist/data/traces/sql-trace.cjs +39 -0
  403. package/dist/data/traces/sql-trace.cjs.map +1 -0
  404. package/dist/data/traces/sql-trace.d.ts +31 -0
  405. package/dist/data/traces/sql-trace.d.ts.map +1 -0
  406. package/dist/data/traces/sql-trace.js +39 -0
  407. package/dist/data/traces/sql-trace.js.map +1 -0
  408. package/dist/data/traces/stack-checkpoints.cjs +22 -0
  409. package/dist/data/traces/stack-checkpoints.cjs.map +1 -0
  410. package/dist/data/traces/stack-checkpoints.d.ts +18 -0
  411. package/dist/data/traces/stack-checkpoints.d.ts.map +1 -0
  412. package/dist/data/traces/stack-checkpoints.js +22 -0
  413. package/dist/data/traces/stack-checkpoints.js.map +1 -0
  414. package/dist/data/traces/terminal-screen.cjs +270 -0
  415. package/dist/data/traces/terminal-screen.cjs.map +1 -0
  416. package/dist/data/traces/terminal-screen.js +270 -0
  417. package/dist/data/traces/terminal-screen.js.map +1 -0
  418. package/dist/data/traces/terminal-timeline.cjs +48 -0
  419. package/dist/data/traces/terminal-timeline.cjs.map +1 -0
  420. package/dist/data/traces/terminal-timeline.js +48 -0
  421. package/dist/data/traces/terminal-timeline.js.map +1 -0
  422. package/dist/data/traces/types.d.ts +121 -8
  423. package/dist/data/traces/types.d.ts.map +1 -1
  424. package/dist/data/verification/adapters.cjs +1 -0
  425. package/dist/data/verification/adapters.cjs.map +1 -1
  426. package/dist/data/verification/adapters.d.ts.map +1 -1
  427. package/dist/data/verification/adapters.js +1 -0
  428. package/dist/data/verification/adapters.js.map +1 -1
  429. package/dist/data/version-info.cjs +3 -3
  430. package/dist/data/version-info.cjs.map +1 -1
  431. package/dist/data/version-info.js +3 -3
  432. package/dist/data/version-info.js.map +1 -1
  433. package/dist/data.cjs +105 -5
  434. package/dist/data.cjs.map +1 -1
  435. package/dist/data.d.ts +5 -0
  436. package/dist/data.d.ts.map +1 -1
  437. package/dist/data.js +101 -1
  438. package/dist/data.js.map +1 -1
  439. package/dist/index.cjs +107 -7
  440. package/dist/index.cjs.map +1 -1
  441. package/dist/index.js +101 -1
  442. package/dist/index.js.map +1 -1
  443. package/dist/styles.css +1 -1
  444. package/package.json +6 -1
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const string = require("../lib/string.cjs");
4
+ async function postConnection({
5
+ apiBase,
6
+ action,
7
+ value
8
+ }) {
9
+ const res = await fetch(`${string.stripTrailingSlashes(apiBase)}/connection/${action}`, {
10
+ method: "POST",
11
+ headers: { "Content-Type": "application/json" },
12
+ body: JSON.stringify(value)
13
+ });
14
+ if (!res.ok) throw new Error(await res.text() || `${res.status} ${res.statusText}`);
15
+ return res.json();
16
+ }
17
+ function formatDuration(elapsedMs) {
18
+ if (elapsedMs < 1) return "<1 ms";
19
+ if (elapsedMs < 1e3) return `${Math.round(elapsedMs)} ms`;
20
+ return `${(elapsedMs / 1e3).toFixed(elapsedMs < 1e4 ? 1 : 0)} s`;
21
+ }
22
+ exports.formatDuration = formatDuration;
23
+ exports.postConnection = postConnection;
24
+ //# sourceMappingURL=connectionActionTypes.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionActionTypes.cjs","sources":["../../src/connections/connectionActionTypes.ts"],"sourcesContent":["import { stripTrailingSlashes } from \"../lib/string\";\n\n// Shared types and pure helpers for the connection form \"Test\"/\"Resolve\"\n// actions. Kept in a non-component module so the sibling component files can\n// each export exactly one component (react/only-export-components).\n\nexport type ResolvedConnection = {\n type?: string;\n namespace?: string;\n url?: string;\n username?: string;\n password?: string;\n certificate?: string;\n properties?: Record<string, string>;\n};\n\nexport type TestResult = { ok: boolean; message: string; url?: string };\n\nexport type ConnectionAction = \"test\" | \"resolve\";\n\nexport type ActionOutcome =\n | { action: \"test\"; elapsedMs: number; result: TestResult }\n | { action: \"resolve\"; elapsedMs: number; resolved: ResolvedConnection }\n | { action: ConnectionAction; elapsedMs: number; error: string };\n\n/** POSTs an unsaved connection draft to `{apiBase}/connection/{test|resolve}`. */\nexport async function postConnection({\n apiBase,\n action,\n value,\n}: {\n apiBase: string;\n action: ConnectionAction;\n value: unknown;\n}): Promise<unknown> {\n const res = await fetch(`${stripTrailingSlashes(apiBase)}/connection/${action}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(value),\n });\n if (!res.ok) throw new Error((await res.text()) || `${res.status} ${res.statusText}`);\n return res.json();\n}\n\nexport function formatDuration(elapsedMs: number): string {\n if (elapsedMs < 1) return \"<1 ms\";\n if (elapsedMs < 1_000) return `${Math.round(elapsedMs)} ms`;\n return `${(elapsedMs / 1_000).toFixed(elapsedMs < 10_000 ? 1 : 0)} s`;\n}\n"],"names":["stripTrailingSlashes"],"mappings":";;;AA0BA,eAAsB,eAAe;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AACF,GAIqB;AACnB,QAAM,MAAM,MAAM,MAAM,GAAGA,OAAAA,qBAAqB,OAAO,CAAC,eAAe,MAAM,IAAI;AAAA,IAC/E,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,IAC3B,MAAM,KAAK,UAAU,KAAK;AAAA,EAAA,CAC3B;AACD,MAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAO,MAAM,IAAI,KAAA,KAAW,GAAG,IAAI,MAAM,IAAI,IAAI,UAAU,EAAE;AACpF,SAAO,IAAI,KAAA;AACb;AAEO,SAAS,eAAe,WAA2B;AACxD,MAAI,YAAY,EAAG,QAAO;AAC1B,MAAI,YAAY,IAAO,QAAO,GAAG,KAAK,MAAM,SAAS,CAAC;AACtD,SAAO,IAAI,YAAY,KAAO,QAAQ,YAAY,MAAS,IAAI,CAAC,CAAC;AACnE;;;"}
@@ -0,0 +1,36 @@
1
+ export type ResolvedConnection = {
2
+ type?: string;
3
+ namespace?: string;
4
+ url?: string;
5
+ username?: string;
6
+ password?: string;
7
+ certificate?: string;
8
+ properties?: Record<string, string>;
9
+ };
10
+ export type TestResult = {
11
+ ok: boolean;
12
+ message: string;
13
+ url?: string;
14
+ };
15
+ export type ConnectionAction = "test" | "resolve";
16
+ export type ActionOutcome = {
17
+ action: "test";
18
+ elapsedMs: number;
19
+ result: TestResult;
20
+ } | {
21
+ action: "resolve";
22
+ elapsedMs: number;
23
+ resolved: ResolvedConnection;
24
+ } | {
25
+ action: ConnectionAction;
26
+ elapsedMs: number;
27
+ error: string;
28
+ };
29
+ /** POSTs an unsaved connection draft to `{apiBase}/connection/{test|resolve}`. */
30
+ export declare function postConnection({ apiBase, action, value, }: {
31
+ apiBase: string;
32
+ action: ConnectionAction;
33
+ value: unknown;
34
+ }): Promise<unknown>;
35
+ export declare function formatDuration(elapsedMs: number): string;
36
+ //# sourceMappingURL=connectionActionTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionActionTypes.d.ts","sourceRoot":"","sources":["../../src/connections/connectionActionTypes.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAAC;AAElD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACzD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,GACtE;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,kFAAkF;AAClF,wBAAsB,cAAc,CAAC,EACnC,OAAO,EACP,MAAM,EACN,KAAK,GACN,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,OAAO,CAAC,CAQnB;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIxD"}
@@ -0,0 +1,24 @@
1
+ import { stripTrailingSlashes } from "../lib/string.js";
2
+ async function postConnection({
3
+ apiBase,
4
+ action,
5
+ value
6
+ }) {
7
+ const res = await fetch(`${stripTrailingSlashes(apiBase)}/connection/${action}`, {
8
+ method: "POST",
9
+ headers: { "Content-Type": "application/json" },
10
+ body: JSON.stringify(value)
11
+ });
12
+ if (!res.ok) throw new Error(await res.text() || `${res.status} ${res.statusText}`);
13
+ return res.json();
14
+ }
15
+ function formatDuration(elapsedMs) {
16
+ if (elapsedMs < 1) return "<1 ms";
17
+ if (elapsedMs < 1e3) return `${Math.round(elapsedMs)} ms`;
18
+ return `${(elapsedMs / 1e3).toFixed(elapsedMs < 1e4 ? 1 : 0)} s`;
19
+ }
20
+ export {
21
+ formatDuration,
22
+ postConnection
23
+ };
24
+ //# sourceMappingURL=connectionActionTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionActionTypes.js","sources":["../../src/connections/connectionActionTypes.ts"],"sourcesContent":["import { stripTrailingSlashes } from \"../lib/string\";\n\n// Shared types and pure helpers for the connection form \"Test\"/\"Resolve\"\n// actions. Kept in a non-component module so the sibling component files can\n// each export exactly one component (react/only-export-components).\n\nexport type ResolvedConnection = {\n type?: string;\n namespace?: string;\n url?: string;\n username?: string;\n password?: string;\n certificate?: string;\n properties?: Record<string, string>;\n};\n\nexport type TestResult = { ok: boolean; message: string; url?: string };\n\nexport type ConnectionAction = \"test\" | \"resolve\";\n\nexport type ActionOutcome =\n | { action: \"test\"; elapsedMs: number; result: TestResult }\n | { action: \"resolve\"; elapsedMs: number; resolved: ResolvedConnection }\n | { action: ConnectionAction; elapsedMs: number; error: string };\n\n/** POSTs an unsaved connection draft to `{apiBase}/connection/{test|resolve}`. */\nexport async function postConnection({\n apiBase,\n action,\n value,\n}: {\n apiBase: string;\n action: ConnectionAction;\n value: unknown;\n}): Promise<unknown> {\n const res = await fetch(`${stripTrailingSlashes(apiBase)}/connection/${action}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(value),\n });\n if (!res.ok) throw new Error((await res.text()) || `${res.status} ${res.statusText}`);\n return res.json();\n}\n\nexport function formatDuration(elapsedMs: number): string {\n if (elapsedMs < 1) return \"<1 ms\";\n if (elapsedMs < 1_000) return `${Math.round(elapsedMs)} ms`;\n return `${(elapsedMs / 1_000).toFixed(elapsedMs < 10_000 ? 1 : 0)} s`;\n}\n"],"names":[],"mappings":";AA0BA,eAAsB,eAAe;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AACF,GAIqB;AACnB,QAAM,MAAM,MAAM,MAAM,GAAG,qBAAqB,OAAO,CAAC,eAAe,MAAM,IAAI;AAAA,IAC/E,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,IAC3B,MAAM,KAAK,UAAU,KAAK;AAAA,EAAA,CAC3B;AACD,MAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAO,MAAM,IAAI,KAAA,KAAW,GAAG,IAAI,MAAM,IAAI,IAAI,UAAU,EAAE;AACpF,SAAO,IAAI,KAAA;AACb;AAEO,SAAS,eAAe,WAA2B;AACxD,MAAI,YAAY,EAAG,QAAO;AAC1B,MAAI,YAAY,IAAO,QAAO,GAAG,KAAK,MAAM,SAAS,CAAC;AACtD,SAAO,IAAI,YAAY,KAAO,QAAQ,YAAY,MAAS,IAAI,CAAC,CAAC;AACnE;"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const connectionTestButton = require("./connectionTestButton.cjs");
5
+ function createConnectionFormActions({
6
+ apiBase
7
+ }) {
8
+ return ({ value, action, canSubmit }) => action.path.includes("/connection") ? /* @__PURE__ */ jsxRuntime.jsx(connectionTestButton.ConnectionTestButton, { apiBase, value, canSubmit }) : null;
9
+ }
10
+ exports.createConnectionFormActions = createConnectionFormActions;
11
+ //# sourceMappingURL=connectionActions.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionActions.cjs","sources":["../../src/connections/connectionActions.tsx"],"sourcesContent":["import type { FormActionsRenderer } from \"../rpc/SchemaActionForm\";\nimport { ConnectionTestButton } from \"./connectionTestButton\";\n\n/**\n * Builds the form-footer renderer that adds a \"Test\" split-button (with a\n * \"Resolve values\" dropdown option) to the connection create/edit form. Test\n * probes the resolved URL's reachability; Resolve hydrates the draft (expanding\n * secret:// and svc:// / ip:// / proxy:// / host:// workload URLs) and shows the\n * resolved values with secrets masked. Both POST the live form value to\n * `{apiBase}/connection/{test|resolve}`, so they work before the connection is\n * saved. Forms of other entities get no extra actions, so the renderer can be\n * handed to an EntityExplorerApp that hosts every entity.\n */\nexport function createConnectionFormActions({\n apiBase,\n}: {\n apiBase: string;\n}): FormActionsRenderer {\n return ({ value, action, canSubmit }) =>\n action.path.includes(\"/connection\") ? (\n <ConnectionTestButton apiBase={apiBase} value={value} canSubmit={canSubmit} />\n ) : null;\n}\n"],"names":["jsx","ConnectionTestButton"],"mappings":";;;;AAaO,SAAS,4BAA4B;AAAA,EAC1C;AACF,GAEwB;AACtB,SAAO,CAAC,EAAE,OAAO,QAAQ,UAAA,MACvB,OAAO,KAAK,SAAS,aAAa,IAChCA,2BAAAA,IAACC,qBAAAA,sBAAA,EAAqB,SAAkB,OAAc,WAAsB,IAC1E;AACR;;"}
@@ -0,0 +1,15 @@
1
+ import { FormActionsRenderer } from '../rpc/SchemaActionForm.js';
2
+ /**
3
+ * Builds the form-footer renderer that adds a "Test" split-button (with a
4
+ * "Resolve values" dropdown option) to the connection create/edit form. Test
5
+ * probes the resolved URL's reachability; Resolve hydrates the draft (expanding
6
+ * secret:// and svc:// / ip:// / proxy:// / host:// workload URLs) and shows the
7
+ * resolved values with secrets masked. Both POST the live form value to
8
+ * `{apiBase}/connection/{test|resolve}`, so they work before the connection is
9
+ * saved. Forms of other entities get no extra actions, so the renderer can be
10
+ * handed to an EntityExplorerApp that hosts every entity.
11
+ */
12
+ export declare function createConnectionFormActions({ apiBase, }: {
13
+ apiBase: string;
14
+ }): FormActionsRenderer;
15
+ //# sourceMappingURL=connectionActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionActions.d.ts","sourceRoot":"","sources":["../../src/connections/connectionActions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,OAAO,GACR,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,mBAAmB,CAKtB"}
@@ -0,0 +1,11 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { ConnectionTestButton } from "./connectionTestButton.js";
3
+ function createConnectionFormActions({
4
+ apiBase
5
+ }) {
6
+ return ({ value, action, canSubmit }) => action.path.includes("/connection") ? /* @__PURE__ */ jsx(ConnectionTestButton, { apiBase, value, canSubmit }) : null;
7
+ }
8
+ export {
9
+ createConnectionFormActions
10
+ };
11
+ //# sourceMappingURL=connectionActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionActions.js","sources":["../../src/connections/connectionActions.tsx"],"sourcesContent":["import type { FormActionsRenderer } from \"../rpc/SchemaActionForm\";\nimport { ConnectionTestButton } from \"./connectionTestButton\";\n\n/**\n * Builds the form-footer renderer that adds a \"Test\" split-button (with a\n * \"Resolve values\" dropdown option) to the connection create/edit form. Test\n * probes the resolved URL's reachability; Resolve hydrates the draft (expanding\n * secret:// and svc:// / ip:// / proxy:// / host:// workload URLs) and shows the\n * resolved values with secrets masked. Both POST the live form value to\n * `{apiBase}/connection/{test|resolve}`, so they work before the connection is\n * saved. Forms of other entities get no extra actions, so the renderer can be\n * handed to an EntityExplorerApp that hosts every entity.\n */\nexport function createConnectionFormActions({\n apiBase,\n}: {\n apiBase: string;\n}): FormActionsRenderer {\n return ({ value, action, canSubmit }) =>\n action.path.includes(\"/connection\") ? (\n <ConnectionTestButton apiBase={apiBase} value={value} canSubmit={canSubmit} />\n ) : null;\n}\n"],"names":[],"mappings":";;AAaO,SAAS,4BAA4B;AAAA,EAC1C;AACF,GAEwB;AACtB,SAAO,CAAC,EAAE,OAAO,QAAQ,UAAA,MACvB,OAAO,KAAK,SAAS,aAAa,IAChC,oBAAC,sBAAA,EAAqB,SAAkB,OAAc,WAAsB,IAC1E;AACR;"}
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const reactQuery = require("@tanstack/react-query");
5
+ const react = require("react");
6
+ const button = require("../components/button.cjs");
7
+ const utils = require("../lib/utils.cjs");
8
+ const connectionDashboardModel = require("./connectionDashboardModel.cjs");
9
+ const connectionDashboardRow = require("./connectionDashboardRow.cjs");
10
+ const connectionHealth = require("./connectionHealth.cjs");
11
+ function ConnectionDashboardSurface({
12
+ apiBase,
13
+ requestUrl,
14
+ renderConnectionLink
15
+ }) {
16
+ const dashboardUrl = connectionDashboardModel.connectionDashboardUrl({
17
+ apiBase,
18
+ ...requestUrl ? { requestUrl } : {}
19
+ });
20
+ const dashboard = reactQuery.useQuery({
21
+ queryKey: [connectionDashboardModel.CONNECTION_DASHBOARD_QUERY_KEY, dashboardUrl],
22
+ queryFn: async () => {
23
+ const response = await fetch(dashboardUrl, {
24
+ headers: { Accept: "application/json" }
25
+ });
26
+ if (!response.ok) {
27
+ const message = (await response.text()).trim();
28
+ throw new Error(message || `Connection dashboard failed: ${response.status}`);
29
+ }
30
+ const payload = await response.json();
31
+ if (!Array.isArray(payload.connections)) {
32
+ throw new Error("Connection dashboard response is missing connections");
33
+ }
34
+ return payload.connections;
35
+ },
36
+ staleTime: 1e4,
37
+ retry: 0
38
+ });
39
+ const { health, pending, error, seed, check } = connectionHealth.useConnectionHealth(apiBase);
40
+ const connections = dashboard.data;
41
+ react.useEffect(() => {
42
+ if (connections) seed(connections);
43
+ }, [connections, seed]);
44
+ if (dashboard.isLoading) {
45
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-lg border bg-card p-6 text-sm text-muted-foreground", children: "Loading connections…" });
46
+ }
47
+ if (dashboard.isError) {
48
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-4 rounded-lg border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive", children: [
49
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: dashboard.error instanceof Error ? dashboard.error.message : "Unable to load connections" }),
50
+ /* @__PURE__ */ jsxRuntime.jsx(button.Button, { type: "button", variant: "outline", size: "sm", onClick: () => void dashboard.refetch(), children: "Retry" })
51
+ ] });
52
+ }
53
+ if (!connections) {
54
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-lg border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive", children: "Connection dashboard returned no data." });
55
+ }
56
+ if (connections.length === 0) {
57
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-lg border border-dashed p-8 text-center text-sm text-muted-foreground", children: "No connections match the current filters." });
58
+ }
59
+ const checked = connections.filter(
60
+ (connection) => {
61
+ var _a;
62
+ return health[connection.id] && ((_a = health[connection.id]) == null ? void 0 : _a.state) !== "unknown";
63
+ }
64
+ ).length;
65
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
66
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
67
+ /* @__PURE__ */ jsxRuntime.jsx(button.Button, { type: "button", variant: "outline", size: "sm", onClick: () => void dashboard.refetch(), children: "Refresh" }),
68
+ /* @__PURE__ */ jsxRuntime.jsx(
69
+ button.Button,
70
+ {
71
+ type: "button",
72
+ variant: "outline",
73
+ size: "sm",
74
+ disabled: pending.size > 0,
75
+ onClick: () => check(
76
+ connections.map((connection) => connection.id),
77
+ { force: checked === connections.length }
78
+ ),
79
+ children: pending.size > 0 ? "Checking…" : "Check all health"
80
+ }
81
+ ),
82
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground", children: [
83
+ checked,
84
+ "/",
85
+ connections.length,
86
+ " checked"
87
+ ] }),
88
+ error ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-destructive", title: error.message, children: error.message }) : null
89
+ ] }),
90
+ /* @__PURE__ */ jsxRuntime.jsx(
91
+ ConnectionDashboardLanes,
92
+ {
93
+ connections,
94
+ health,
95
+ pending,
96
+ onCheck: check,
97
+ renderConnectionLink
98
+ }
99
+ )
100
+ ] });
101
+ }
102
+ function ConnectionDashboardLanes({
103
+ connections,
104
+ health = {},
105
+ pending = /* @__PURE__ */ new Set(),
106
+ onCheck = () => {
107
+ },
108
+ renderConnectionLink
109
+ }) {
110
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
111
+ connectionDashboardModel.groupConnectionDashboardLanes(connections).map((lane) => {
112
+ const summary = connectionHealth.summarizeLaneHealth(lane.connections, health);
113
+ const unnamespaced = lane.namespace === "";
114
+ return /* @__PURE__ */ jsxRuntime.jsxs(
115
+ "section",
116
+ {
117
+ className: utils.cn(
118
+ "overflow-hidden rounded-lg border",
119
+ unnamespaced ? "border-dashed border-border" : "border-border"
120
+ ),
121
+ children: [
122
+ /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "flex flex-wrap items-center gap-x-3 gap-y-1 border-b border-border bg-muted/40 px-3 py-2", children: [
123
+ /* @__PURE__ */ jsxRuntime.jsx(
124
+ "h2",
125
+ {
126
+ className: utils.cn(
127
+ "text-sm font-semibold",
128
+ unnamespaced && "italic text-muted-foreground"
129
+ ),
130
+ children: unnamespaced ? "No namespace" : lane.namespace
131
+ }
132
+ ),
133
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded bg-background px-1.5 py-0.5 font-mono text-[11px] text-muted-foreground", children: lane.connections.length }),
134
+ /* @__PURE__ */ jsxRuntime.jsx(
135
+ button.Button,
136
+ {
137
+ type: "button",
138
+ variant: "ghost",
139
+ size: "sm",
140
+ className: "h-6 px-2 text-[11px]",
141
+ onClick: () => onCheck(
142
+ lane.connections.map((connection) => connection.id),
143
+ { force: summary.checked === lane.connections.length }
144
+ ),
145
+ children: "Check"
146
+ }
147
+ ),
148
+ summary.failing > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("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", children: [
149
+ summary.failing,
150
+ " failing"
151
+ ] }) : null,
152
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[11px] text-muted-foreground", children: [
153
+ summary.checked,
154
+ "/",
155
+ lane.connections.length,
156
+ " checked"
157
+ ] }),
158
+ summary.unused > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[11px] text-muted-foreground", children: [
159
+ summary.unused,
160
+ " unused"
161
+ ] }) : null,
162
+ unnamespaced ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: "`namespace` is optional on the model, so these are unplaceable rather than global." }) : null
163
+ ] }),
164
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-border", children: lane.connections.map((connection) => /* @__PURE__ */ jsxRuntime.jsx(
165
+ connectionDashboardRow.ConnectionDashboardRow,
166
+ {
167
+ connection,
168
+ health: health[connection.id],
169
+ pending: pending.has(connection.id),
170
+ onCheck,
171
+ renderConnectionLink
172
+ },
173
+ connection.id
174
+ )) })
175
+ ]
176
+ },
177
+ lane.namespace || "__none__"
178
+ );
179
+ }),
180
+ /* @__PURE__ */ jsxRuntime.jsx(connectionDashboardRow.ConnectionHealthLegend, {})
181
+ ] });
182
+ }
183
+ exports.ConnectionDashboardLanes = ConnectionDashboardLanes;
184
+ exports.ConnectionDashboardSurface = ConnectionDashboardSurface;
185
+ //# sourceMappingURL=connectionDashboard.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionDashboard.cjs","sources":["../../src/connections/connectionDashboard.tsx"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useEffect } from \"react\";\nimport { Button } from \"../components/button\";\nimport { cn } from \"../lib/utils\";\nimport {\n CONNECTION_DASHBOARD_QUERY_KEY,\n connectionDashboardUrl,\n groupConnectionDashboardLanes,\n type ConnectionDashboardItem,\n type ConnectionDashboardResponse,\n type ConnectionLinkRenderer,\n} from \"./connectionDashboardModel\";\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 dashboardUrl = connectionDashboardUrl({\n apiBase,\n ...(requestUrl ? { requestUrl } : {}),\n });\n const dashboard = useQuery({\n queryKey: [CONNECTION_DASHBOARD_QUERY_KEY, dashboardUrl],\n queryFn: async () => {\n const response = await fetch(dashboardUrl, {\n headers: { Accept: \"application/json\" },\n });\n if (!response.ok) {\n const message = (await response.text()).trim();\n throw new Error(message || `Connection dashboard failed: ${response.status}`);\n }\n const payload = (await response.json()) as Partial<ConnectionDashboardResponse>;\n if (!Array.isArray(payload.connections)) {\n throw new Error(\"Connection dashboard response is missing connections\");\n }\n return payload.connections;\n },\n staleTime: 10_000,\n retry: 0,\n });\n\n const { health, pending, error, seed, check } = useConnectionHealth(apiBase);\n const connections = dashboard.data;\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"],"names":["connectionDashboardUrl","useQuery","CONNECTION_DASHBOARD_QUERY_KEY","useConnectionHealth","useEffect","jsx","jsxs","Button","groupConnectionDashboardLanes","summarizeLaneHealth","cn","ConnectionDashboardRow","ConnectionHealthLegend"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { ConnectionDashboardItem, ConnectionLinkRenderer } from './connectionDashboardModel.js';
2
+ import { ConnectionHealthMap } from './connectionHealth.js';
3
+ export type ConnectionDashboardSurfaceProps = {
4
+ /** Where the commons-db connections service is mounted, e.g. `/api/v1`. */
5
+ apiBase: string;
6
+ /** A list request whose connection type filters the dashboard carries over. */
7
+ requestUrl?: string;
8
+ renderConnectionLink: ConnectionLinkRenderer;
9
+ };
10
+ /**
11
+ * ConnectionDashboardSurface lists the connection fleet from the database only.
12
+ * Health checks dial real backends, so they are opt-in: nothing is probed until
13
+ * the operator clicks a row's dot, a lane's Check button, or Check all.
14
+ */
15
+ export declare function ConnectionDashboardSurface({ apiBase, requestUrl, renderConnectionLink, }: ConnectionDashboardSurfaceProps): import("react").JSX.Element;
16
+ export declare function ConnectionDashboardLanes({ connections, health, pending, onCheck, renderConnectionLink, }: {
17
+ connections: ConnectionDashboardItem[];
18
+ health?: ConnectionHealthMap;
19
+ pending?: Set<string>;
20
+ onCheck?: (ids: string[], options?: {
21
+ force?: boolean;
22
+ }) => void;
23
+ renderConnectionLink: ConnectionLinkRenderer;
24
+ }): import("react").JSX.Element;
25
+ //# sourceMappingURL=connectionDashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionDashboard.d.ts","sourceRoot":"","sources":["../../src/connections/connectionDashboard.tsx"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,uBAAuB,EAE5B,KAAK,sBAAsB,EAC5B,MAAM,4BAA4B,CAAC;AAKpC,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,+BA4GjC;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"}
@@ -0,0 +1,185 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ import { useEffect } from "react";
4
+ import { Button } from "../components/button.js";
5
+ import { cn } from "../lib/utils.js";
6
+ import { groupConnectionDashboardLanes, connectionDashboardUrl, CONNECTION_DASHBOARD_QUERY_KEY } from "./connectionDashboardModel.js";
7
+ import { ConnectionDashboardRow, ConnectionHealthLegend } from "./connectionDashboardRow.js";
8
+ import { summarizeLaneHealth, useConnectionHealth } from "./connectionHealth.js";
9
+ function ConnectionDashboardSurface({
10
+ apiBase,
11
+ requestUrl,
12
+ renderConnectionLink
13
+ }) {
14
+ const dashboardUrl = connectionDashboardUrl({
15
+ apiBase,
16
+ ...requestUrl ? { requestUrl } : {}
17
+ });
18
+ const dashboard = useQuery({
19
+ queryKey: [CONNECTION_DASHBOARD_QUERY_KEY, dashboardUrl],
20
+ queryFn: async () => {
21
+ const response = await fetch(dashboardUrl, {
22
+ headers: { Accept: "application/json" }
23
+ });
24
+ if (!response.ok) {
25
+ const message = (await response.text()).trim();
26
+ throw new Error(message || `Connection dashboard failed: ${response.status}`);
27
+ }
28
+ const payload = await response.json();
29
+ if (!Array.isArray(payload.connections)) {
30
+ throw new Error("Connection dashboard response is missing connections");
31
+ }
32
+ return payload.connections;
33
+ },
34
+ staleTime: 1e4,
35
+ retry: 0
36
+ });
37
+ const { health, pending, error, seed, check } = useConnectionHealth(apiBase);
38
+ const connections = dashboard.data;
39
+ useEffect(() => {
40
+ if (connections) seed(connections);
41
+ }, [connections, seed]);
42
+ if (dashboard.isLoading) {
43
+ return /* @__PURE__ */ jsx("div", { className: "rounded-lg border bg-card p-6 text-sm text-muted-foreground", children: "Loading connections…" });
44
+ }
45
+ if (dashboard.isError) {
46
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4 rounded-lg border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive", children: [
47
+ /* @__PURE__ */ jsx("span", { children: dashboard.error instanceof Error ? dashboard.error.message : "Unable to load connections" }),
48
+ /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: () => void dashboard.refetch(), children: "Retry" })
49
+ ] });
50
+ }
51
+ if (!connections) {
52
+ return /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive", children: "Connection dashboard returned no data." });
53
+ }
54
+ if (connections.length === 0) {
55
+ return /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-dashed p-8 text-center text-sm text-muted-foreground", children: "No connections match the current filters." });
56
+ }
57
+ const checked = connections.filter(
58
+ (connection) => {
59
+ var _a;
60
+ return health[connection.id] && ((_a = health[connection.id]) == null ? void 0 : _a.state) !== "unknown";
61
+ }
62
+ ).length;
63
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
64
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
65
+ /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: () => void dashboard.refetch(), children: "Refresh" }),
66
+ /* @__PURE__ */ jsx(
67
+ Button,
68
+ {
69
+ type: "button",
70
+ variant: "outline",
71
+ size: "sm",
72
+ disabled: pending.size > 0,
73
+ onClick: () => check(
74
+ connections.map((connection) => connection.id),
75
+ { force: checked === connections.length }
76
+ ),
77
+ children: pending.size > 0 ? "Checking…" : "Check all health"
78
+ }
79
+ ),
80
+ /* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground", children: [
81
+ checked,
82
+ "/",
83
+ connections.length,
84
+ " checked"
85
+ ] }),
86
+ error ? /* @__PURE__ */ jsx("span", { className: "text-xs text-destructive", title: error.message, children: error.message }) : null
87
+ ] }),
88
+ /* @__PURE__ */ jsx(
89
+ ConnectionDashboardLanes,
90
+ {
91
+ connections,
92
+ health,
93
+ pending,
94
+ onCheck: check,
95
+ renderConnectionLink
96
+ }
97
+ )
98
+ ] });
99
+ }
100
+ function ConnectionDashboardLanes({
101
+ connections,
102
+ health = {},
103
+ pending = /* @__PURE__ */ new Set(),
104
+ onCheck = () => {
105
+ },
106
+ renderConnectionLink
107
+ }) {
108
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
109
+ groupConnectionDashboardLanes(connections).map((lane) => {
110
+ const summary = summarizeLaneHealth(lane.connections, health);
111
+ const unnamespaced = lane.namespace === "";
112
+ return /* @__PURE__ */ jsxs(
113
+ "section",
114
+ {
115
+ className: cn(
116
+ "overflow-hidden rounded-lg border",
117
+ unnamespaced ? "border-dashed border-border" : "border-border"
118
+ ),
119
+ children: [
120
+ /* @__PURE__ */ jsxs("header", { className: "flex flex-wrap items-center gap-x-3 gap-y-1 border-b border-border bg-muted/40 px-3 py-2", children: [
121
+ /* @__PURE__ */ jsx(
122
+ "h2",
123
+ {
124
+ className: cn(
125
+ "text-sm font-semibold",
126
+ unnamespaced && "italic text-muted-foreground"
127
+ ),
128
+ children: unnamespaced ? "No namespace" : lane.namespace
129
+ }
130
+ ),
131
+ /* @__PURE__ */ jsx("span", { className: "rounded bg-background px-1.5 py-0.5 font-mono text-[11px] text-muted-foreground", children: lane.connections.length }),
132
+ /* @__PURE__ */ jsx(
133
+ Button,
134
+ {
135
+ type: "button",
136
+ variant: "ghost",
137
+ size: "sm",
138
+ className: "h-6 px-2 text-[11px]",
139
+ onClick: () => onCheck(
140
+ lane.connections.map((connection) => connection.id),
141
+ { force: summary.checked === lane.connections.length }
142
+ ),
143
+ children: "Check"
144
+ }
145
+ ),
146
+ summary.failing > 0 ? /* @__PURE__ */ jsxs("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", children: [
147
+ summary.failing,
148
+ " failing"
149
+ ] }) : null,
150
+ /* @__PURE__ */ jsxs("span", { className: "text-[11px] text-muted-foreground", children: [
151
+ summary.checked,
152
+ "/",
153
+ lane.connections.length,
154
+ " checked"
155
+ ] }),
156
+ summary.unused > 0 ? /* @__PURE__ */ jsxs("span", { className: "text-[11px] text-muted-foreground", children: [
157
+ summary.unused,
158
+ " unused"
159
+ ] }) : null,
160
+ unnamespaced ? /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: "`namespace` is optional on the model, so these are unplaceable rather than global." }) : null
161
+ ] }),
162
+ /* @__PURE__ */ jsx("div", { className: "divide-y divide-border", children: lane.connections.map((connection) => /* @__PURE__ */ jsx(
163
+ ConnectionDashboardRow,
164
+ {
165
+ connection,
166
+ health: health[connection.id],
167
+ pending: pending.has(connection.id),
168
+ onCheck,
169
+ renderConnectionLink
170
+ },
171
+ connection.id
172
+ )) })
173
+ ]
174
+ },
175
+ lane.namespace || "__none__"
176
+ );
177
+ }),
178
+ /* @__PURE__ */ jsx(ConnectionHealthLegend, {})
179
+ ] });
180
+ }
181
+ export {
182
+ ConnectionDashboardLanes,
183
+ ConnectionDashboardSurface
184
+ };
185
+ //# sourceMappingURL=connectionDashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionDashboard.js","sources":["../../src/connections/connectionDashboard.tsx"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useEffect } from \"react\";\nimport { Button } from \"../components/button\";\nimport { cn } from \"../lib/utils\";\nimport {\n CONNECTION_DASHBOARD_QUERY_KEY,\n connectionDashboardUrl,\n groupConnectionDashboardLanes,\n type ConnectionDashboardItem,\n type ConnectionDashboardResponse,\n type ConnectionLinkRenderer,\n} from \"./connectionDashboardModel\";\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 dashboardUrl = connectionDashboardUrl({\n apiBase,\n ...(requestUrl ? { requestUrl } : {}),\n });\n const dashboard = useQuery({\n queryKey: [CONNECTION_DASHBOARD_QUERY_KEY, dashboardUrl],\n queryFn: async () => {\n const response = await fetch(dashboardUrl, {\n headers: { Accept: \"application/json\" },\n });\n if (!response.ok) {\n const message = (await response.text()).trim();\n throw new Error(message || `Connection dashboard failed: ${response.status}`);\n }\n const payload = (await response.json()) as Partial<ConnectionDashboardResponse>;\n if (!Array.isArray(payload.connections)) {\n throw new Error(\"Connection dashboard response is missing connections\");\n }\n return payload.connections;\n },\n staleTime: 10_000,\n retry: 0,\n });\n\n const { health, pending, error, seed, check } = useConnectionHealth(apiBase);\n const connections = dashboard.data;\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"],"names":[],"mappings":";;;;;;;;AAmCO,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAClC,QAAM,eAAe,uBAAuB;AAAA,IAC1C;AAAA,IACA,GAAI,aAAa,EAAE,eAAe,CAAA;AAAA,EAAC,CACpC;AACD,QAAM,YAAY,SAAS;AAAA,IACzB,UAAU,CAAC,gCAAgC,YAAY;AAAA,IACvD,SAAS,YAAY;AACnB,YAAM,WAAW,MAAM,MAAM,cAAc;AAAA,QACzC,SAAS,EAAE,QAAQ,mBAAA;AAAA,MAAmB,CACvC;AACD,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,WAAW,MAAM,SAAS,KAAA,GAAQ,KAAA;AACxC,cAAM,IAAI,MAAM,WAAW,gCAAgC,SAAS,MAAM,EAAE;AAAA,MAC9E;AACA,YAAM,UAAW,MAAM,SAAS,KAAA;AAChC,UAAI,CAAC,MAAM,QAAQ,QAAQ,WAAW,GAAG;AACvC,cAAM,IAAI,MAAM,sDAAsD;AAAA,MACxE;AACA,aAAO,QAAQ;AAAA,IACjB;AAAA,IACA,WAAW;AAAA,IACX,OAAO;AAAA,EAAA,CACR;AAED,QAAM,EAAE,QAAQ,SAAS,OAAO,MAAM,MAAA,IAAU,oBAAoB,OAAO;AAC3E,QAAM,cAAc,UAAU;AAC9B,YAAU,MAAM;AACd,QAAI,kBAAkB,WAAW;AAAA,EACnC,GAAG,CAAC,aAAa,IAAI,CAAC;AAEtB,MAAI,UAAU,WAAW;AACvB,WACE,oBAAC,OAAA,EAAI,WAAU,+DAA8D,UAAA,wBAE7E;AAAA,EAEJ;AACA,MAAI,UAAU,SAAS;AACrB,WACE,qBAAC,OAAA,EAAI,WAAU,iIACb,UAAA;AAAA,MAAA,oBAAC,UACE,UAAA,UAAU,iBAAiB,QACxB,UAAU,MAAM,UAChB,6BAAA,CACN;AAAA,MACA,oBAAC,QAAA,EAAO,MAAK,UAAS,SAAQ,WAAU,MAAK,MAAK,SAAS,MAAM,KAAK,UAAU,QAAA,GAAW,UAAA,QAAA,CAE3F;AAAA,IAAA,GACF;AAAA,EAEJ;AACA,MAAI,CAAC,aAAa;AAChB,WACE,oBAAC,OAAA,EAAI,WAAU,yFAAwF,UAAA,0CAEvG;AAAA,EAEJ;AACA,MAAI,YAAY,WAAW,GAAG;AAC5B,WACE,oBAAC,OAAA,EAAI,WAAU,iFAAgF,UAAA,6CAE/F;AAAA,EAEJ;AAEA,QAAM,UAAU,YAAY;AAAA,IAC1B,CAAC,eAAA;;AAAe,oBAAO,WAAW,EAAE,OAAK,YAAO,WAAW,EAAE,MAApB,mBAAuB,WAAU;AAAA;AAAA,EAAA,EAC1E;AACF,SACE,qBAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAO,MAAK,UAAS,SAAQ,WAAU,MAAK,MAAK,SAAS,MAAM,KAAK,UAAU,QAAA,GAAW,UAAA,WAE3F;AAAA,MACA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,UAAU,QAAQ,OAAO;AAAA,UACzB,SAAS,MACP;AAAA,YACE,YAAY,IAAI,CAAC,eAAe,WAAW,EAAE;AAAA,YAC7C,EAAE,OAAO,YAAY,YAAY,OAAA;AAAA,UAAO;AAAA,UAI3C,UAAA,QAAQ,OAAO,IAAI,cAAc;AAAA,QAAA;AAAA,MAAA;AAAA,MAEpC,qBAAC,QAAA,EAAK,WAAU,iCACb,UAAA;AAAA,QAAA;AAAA,QAAQ;AAAA,QAAE,YAAY;AAAA,QAAO;AAAA,MAAA,GAChC;AAAA,MACC,QACC,oBAAC,QAAA,EAAK,WAAU,4BAA2B,OAAO,MAAM,SACrD,UAAA,MAAM,QAAA,CACT,IACE;AAAA,IAAA,GACN;AAAA,IACA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEO,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA,SAAS,CAAA;AAAA,EACT,8BAAc,IAAA;AAAA,EACd,UAAU,MAAM;AAAA,EAAC;AAAA,EACjB;AACF,GAMG;AACD,SACE,qBAAC,OAAA,EAAI,WAAU,aACZ,UAAA;AAAA,IAAA,8BAA8B,WAAW,EAAE,IAAI,CAAC,SAAS;AACxD,YAAM,UAAU,oBAAoB,KAAK,aAAa,MAAM;AAC5D,YAAM,eAAe,KAAK,cAAc;AACxC,aACE;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAW;AAAA,YACT;AAAA,YACA,eAAe,gCAAgC;AAAA,UAAA;AAAA,UAGjD,UAAA;AAAA,YAAA,qBAAC,UAAA,EAAO,WAAU,4FAChB,UAAA;AAAA,cAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAW;AAAA,oBACT;AAAA,oBACA,gBAAgB;AAAA,kBAAA;AAAA,kBAGjB,UAAA,eAAe,iBAAiB,KAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,kCAEvC,QAAA,EAAK,WAAU,mFACb,UAAA,KAAK,YAAY,QACpB;AAAA,cACA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,MACP;AAAA,oBACE,KAAK,YAAY,IAAI,CAAC,eAAe,WAAW,EAAE;AAAA,oBAClD,EAAE,OAAO,QAAQ,YAAY,KAAK,YAAY,OAAA;AAAA,kBAAO;AAAA,kBAG1D,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGA,QAAQ,UAAU,IACjB,qBAAC,QAAA,EAAK,WAAU,8LACb,UAAA;AAAA,gBAAA,QAAQ;AAAA,gBAAQ;AAAA,cAAA,EAAA,CACnB,IACE;AAAA,cACJ,qBAAC,QAAA,EAAK,WAAU,qCACb,UAAA;AAAA,gBAAA,QAAQ;AAAA,gBAAQ;AAAA,gBAAE,KAAK,YAAY;AAAA,gBAAO;AAAA,cAAA,GAC7C;AAAA,cACC,QAAQ,SAAS,IAChB,qBAAC,QAAA,EAAK,WAAU,qCAAqC,UAAA;AAAA,gBAAA,QAAQ;AAAA,gBAAO;AAAA,cAAA,EAAA,CAAO,IACzE;AAAA,cACH,eACC,oBAAC,QAAA,EAAK,WAAU,iCAAgC,gGAEhD,IACE;AAAA,YAAA,GACN;AAAA,YACA,oBAAC,SAAI,WAAU,0BACZ,eAAK,YAAY,IAAI,CAAC,eACrB;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC;AAAA,gBACA,QAAQ,OAAO,WAAW,EAAE;AAAA,gBAC5B,SAAS,QAAQ,IAAI,WAAW,EAAE;AAAA,gBAClC;AAAA,gBACA;AAAA,cAAA;AAAA,cALK,WAAW;AAAA,YAAA,CAOnB,EAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,QA5DK,KAAK,aAAa;AAAA,MAAA;AAAA,IA+D7B,CAAC;AAAA,wBACA,wBAAA,CAAA,CAAuB;AAAA,EAAA,GAC1B;AAEJ;"}