@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,169 @@
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import { Icon } from "../data/Icon.js";
3
+ import { cn } from "../lib/utils.js";
4
+ import { ConnectionTypeIcon } from "./iconProvider.js";
5
+ import { UiLink } from "../icons/components/UiLink.js";
6
+ import { UiLock } from "../icons/components/UiLock.js";
7
+ import { UiKey } from "../icons/components/UiKey.js";
8
+ import { UiWarningTriangle } from "../icons/components/UiWarningTriangle.js";
9
+ const HEALTH_LABELS = {
10
+ healthy: "Reachable",
11
+ credentials: "Credentials failed",
12
+ unreachable: "Unreachable",
13
+ unverifiable: "Not verifiable",
14
+ unknown: "Check did not complete"
15
+ };
16
+ const HEALTH_LEGEND_LABELS = {
17
+ healthy: "reachable",
18
+ credentials: "credentials failed",
19
+ unreachable: "unreachable",
20
+ unverifiable: "no endpoint to probe",
21
+ unknown: "check did not complete"
22
+ };
23
+ const HEALTH_STYLES = {
24
+ healthy: { dot: "bg-emerald-400", edge: "border-l-emerald-400" },
25
+ credentials: { dot: "bg-amber-400", edge: "border-l-amber-400" },
26
+ unreachable: { dot: "bg-rose-400", edge: "border-l-rose-400" },
27
+ unverifiable: { dot: "bg-muted-foreground", edge: "border-l-border" },
28
+ unknown: { dot: "bg-muted-foreground/50", edge: "border-l-border" }
29
+ };
30
+ const UNCHECKED_EDGE = "border-l-transparent";
31
+ function ConnectionDashboardRow({
32
+ connection,
33
+ health,
34
+ pending,
35
+ onCheck,
36
+ renderConnectionLink
37
+ }) {
38
+ return /* @__PURE__ */ jsxs(
39
+ "div",
40
+ {
41
+ className: cn(
42
+ "flex min-w-0 items-center gap-3 border-l-2 py-2 pl-3 pr-2 hover:bg-muted/30",
43
+ health ? HEALTH_STYLES[health.state].edge : UNCHECKED_EDGE
44
+ ),
45
+ children: [
46
+ /* @__PURE__ */ jsx(
47
+ HealthDot,
48
+ {
49
+ health,
50
+ pending,
51
+ onCheck: () => onCheck([connection.id], { force: Boolean(health) })
52
+ }
53
+ ),
54
+ renderConnectionLink(connection, {
55
+ ...(health == null ? void 0 : health.detail) ? { title: health.detail } : {},
56
+ className: "flex min-w-0 flex-1 items-center gap-3 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset",
57
+ children: /* @__PURE__ */ jsxs(Fragment, { children: [
58
+ /* @__PURE__ */ jsx("span", { className: "shrink-0", "aria-hidden": true, children: /* @__PURE__ */ jsx(ConnectionTypeIcon, { type: connection.type, className: "size-4" }) }),
59
+ /* @__PURE__ */ jsx("span", { className: "w-32 shrink-0 truncate text-sm font-medium md:w-40", title: connection.name, children: connection.name }),
60
+ /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx(EndpointLine, { endpoint: connection.endpoint }) }),
61
+ /* @__PURE__ */ jsxs("div", { className: "hidden shrink-0 items-center gap-1.5 lg:flex", children: [
62
+ /* @__PURE__ */ jsx(SecretChip, { count: connection.secretCount }),
63
+ /* @__PURE__ */ jsx(RiskChips, { connection })
64
+ ] }),
65
+ /* @__PURE__ */ jsx("span", { className: "w-24 shrink-0 text-right text-xs text-muted-foreground", children: connection.profileCount === 0 ? /* @__PURE__ */ jsx("span", { className: "text-muted-foreground/60", children: "unused" }) : `${connection.profileCount} profile${connection.profileCount === 1 ? "" : "s"}` }),
66
+ /* @__PURE__ */ jsx("span", { className: "hidden w-16 shrink-0 text-right text-xs text-muted-foreground/70 xl:inline", children: ageLabel(connection.updatedAt) })
67
+ ] })
68
+ })
69
+ ]
70
+ }
71
+ );
72
+ }
73
+ function HealthDot({
74
+ health,
75
+ pending,
76
+ onCheck
77
+ }) {
78
+ const label = pending ? "Checking health" : health ? `${HEALTH_LABELS[health.state]} — check again` : "Check health";
79
+ return /* @__PURE__ */ jsx(
80
+ "button",
81
+ {
82
+ type: "button",
83
+ onClick: onCheck,
84
+ disabled: pending,
85
+ title: (health == null ? void 0 : health.detail) ?? label,
86
+ "aria-label": label,
87
+ className: "shrink-0 rounded-full p-1 hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
88
+ children: /* @__PURE__ */ jsx(
89
+ "span",
90
+ {
91
+ className: cn(
92
+ "block size-2 rounded-full",
93
+ pending ? "animate-pulse bg-muted-foreground/60" : health ? HEALTH_STYLES[health.state].dot : "border border-muted-foreground/50"
94
+ )
95
+ }
96
+ )
97
+ }
98
+ );
99
+ }
100
+ function EndpointLine({ endpoint }) {
101
+ if (!endpoint) {
102
+ return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5 text-xs text-muted-foreground", children: [
103
+ /* @__PURE__ */ jsx(Icon, { icon: UiLink, className: "text-xs" }),
104
+ /* @__PURE__ */ jsx("span", { className: "italic", children: "Resolved from ambient config" })
105
+ ] });
106
+ }
107
+ const indirect = ["connection", "host", "portforward"].includes(endpoint.scheme);
108
+ return /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 items-center gap-1.5 font-mono text-xs", children: [
109
+ /* @__PURE__ */ jsx(
110
+ "span",
111
+ {
112
+ className: cn(
113
+ "shrink-0 rounded px-1 py-0.5 text-[10px] ring-1 ring-inset",
114
+ indirect ? "bg-violet-100 text-violet-700 ring-violet-300/60 dark:bg-violet-400/10 dark:text-violet-300 dark:ring-violet-400/25" : "bg-muted text-muted-foreground ring-border"
115
+ ),
116
+ children: endpoint.scheme
117
+ }
118
+ ),
119
+ /* @__PURE__ */ jsxs("span", { className: "truncate text-foreground", title: `${endpoint.host}${endpoint.path ?? ""}`, children: [
120
+ endpoint.host,
121
+ endpoint.path ? /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: endpoint.path }) : null
122
+ ] })
123
+ ] });
124
+ }
125
+ function SecretChip({ count }) {
126
+ if (count === 0) return null;
127
+ return /* @__PURE__ */ jsxs("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", children: [
128
+ /* @__PURE__ */ jsx(Icon, { icon: UiLock, className: "text-[11px]" }),
129
+ count,
130
+ " secret",
131
+ count === 1 ? "" : "s"
132
+ ] });
133
+ }
134
+ function RiskChips({ connection }) {
135
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
136
+ connection.inlineCredential ? /* @__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: [
137
+ /* @__PURE__ */ jsx(Icon, { icon: UiKey, className: "text-[11px]" }),
138
+ "Password in URL"
139
+ ] }) : null,
140
+ connection.insecureTLS ? /* @__PURE__ */ jsxs("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", children: [
141
+ /* @__PURE__ */ jsx(Icon, { icon: UiWarningTriangle, className: "text-[11px]" }),
142
+ "TLS verification off"
143
+ ] }) : null
144
+ ] });
145
+ }
146
+ function ConnectionHealthLegend() {
147
+ return /* @__PURE__ */ jsxs("p", { className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground", children: [
148
+ /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
149
+ /* @__PURE__ */ jsx("span", { className: "inline-block size-2 rounded-full border border-muted-foreground/50" }),
150
+ "not checked"
151
+ ] }),
152
+ ["healthy", "credentials", "unreachable", "unverifiable", "unknown"].map(
153
+ (state) => /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
154
+ /* @__PURE__ */ jsx("span", { className: cn("inline-block h-3 w-0.5", HEALTH_STYLES[state].dot) }),
155
+ HEALTH_LEGEND_LABELS[state]
156
+ ] }, state)
157
+ )
158
+ ] });
159
+ }
160
+ function ageLabel(updatedAt) {
161
+ const timestamp = Date.parse(updatedAt);
162
+ if (!Number.isFinite(timestamp)) return "—";
163
+ return `${Math.max(0, Math.floor((Date.now() - timestamp) / 864e5))}d`;
164
+ }
165
+ export {
166
+ ConnectionDashboardRow,
167
+ ConnectionHealthLegend
168
+ };
169
+ //# sourceMappingURL=connectionDashboardRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionDashboardRow.js","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"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ function ConnectionErrorView({ message }) {
5
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "whitespace-pre-wrap break-words text-destructive", children: message });
6
+ }
7
+ exports.ConnectionErrorView = ConnectionErrorView;
8
+ //# sourceMappingURL=connectionErrorView.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionErrorView.cjs","sources":["../../src/connections/connectionErrorView.tsx"],"sourcesContent":["export function ConnectionErrorView({ message }: { message: string }) {\n return <div className=\"whitespace-pre-wrap break-words text-destructive\">{message}</div>;\n}\n"],"names":["jsx"],"mappings":";;;AAAO,SAAS,oBAAoB,EAAE,WAAgC;AACpE,SAAOA,2BAAAA,IAAC,OAAA,EAAI,WAAU,oDAAoD,UAAA,SAAQ;AACpF;;"}
@@ -0,0 +1,4 @@
1
+ export declare function ConnectionErrorView({ message }: {
2
+ message: string;
3
+ }): import("react").JSX.Element;
4
+ //# sourceMappingURL=connectionErrorView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionErrorView.d.ts","sourceRoot":"","sources":["../../src/connections/connectionErrorView.tsx"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,+BAEnE"}
@@ -0,0 +1,8 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ function ConnectionErrorView({ message }) {
3
+ return /* @__PURE__ */ jsx("div", { className: "whitespace-pre-wrap break-words text-destructive", children: message });
4
+ }
5
+ export {
6
+ ConnectionErrorView
7
+ };
8
+ //# sourceMappingURL=connectionErrorView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionErrorView.js","sources":["../../src/connections/connectionErrorView.tsx"],"sourcesContent":["export function ConnectionErrorView({ message }: { message: string }) {\n return <div className=\"whitespace-pre-wrap break-words text-destructive\">{message}</div>;\n}\n"],"names":[],"mappings":";AAAO,SAAS,oBAAoB,EAAE,WAAgC;AACpE,SAAO,oBAAC,OAAA,EAAI,WAAU,oDAAoD,UAAA,SAAQ;AACpF;"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const reactQuery = require("@tanstack/react-query");
4
+ const react = require("react");
5
+ const connectionDashboardModel = require("./connectionDashboardModel.cjs");
6
+ function initialHealthMap(connections) {
7
+ const health = {};
8
+ for (const connection of connections) {
9
+ if (connection.health) health[connection.id] = connection.health;
10
+ }
11
+ return health;
12
+ }
13
+ function mergeHealthResults(previous, results) {
14
+ const merged = { ...previous };
15
+ for (const { id, durationMs: _durationMs, ...health } of results) {
16
+ const existing = merged[id];
17
+ if (existing && Date.parse(existing.checkedAt) > Date.parse(health.checkedAt)) {
18
+ continue;
19
+ }
20
+ merged[id] = health;
21
+ }
22
+ return merged;
23
+ }
24
+ function summarizeLaneHealth(connections, health) {
25
+ var _a;
26
+ let checked = 0;
27
+ let failing = 0;
28
+ let unused = 0;
29
+ for (const connection of connections) {
30
+ const state = (_a = health[connection.id]) == null ? void 0 : _a.state;
31
+ if (state && state !== "unknown") checked += 1;
32
+ if (state === "credentials" || state === "unreachable") failing += 1;
33
+ if (connection.profileCount === 0) unused += 1;
34
+ }
35
+ return { checked, failing, unused };
36
+ }
37
+ function useConnectionHealth(apiBase) {
38
+ const [health, setHealth] = react.useState({});
39
+ const [pending, setPending] = react.useState(/* @__PURE__ */ new Set());
40
+ const mutation = reactQuery.useMutation({
41
+ mutationFn: async ({ ids, force }) => {
42
+ const response = await fetch(connectionDashboardModel.connectionHealthUrl(apiBase), {
43
+ method: "POST",
44
+ headers: { "Content-Type": "application/json", Accept: "application/json" },
45
+ body: JSON.stringify({ ids, force })
46
+ });
47
+ if (!response.ok) {
48
+ const message = (await response.text()).trim();
49
+ throw new Error(message || `Health check failed: ${response.status}`);
50
+ }
51
+ const payload = await response.json();
52
+ if (!Array.isArray(payload.results)) {
53
+ throw new Error("Health check response is missing results");
54
+ }
55
+ return payload.results;
56
+ },
57
+ onSuccess: (results) => setHealth((current) => mergeHealthResults(current, results)),
58
+ onSettled: (_data, _error, variables) => setPending((current) => {
59
+ const next = new Set(current);
60
+ for (const id of variables.ids) next.delete(id);
61
+ return next;
62
+ })
63
+ });
64
+ const check = react.useCallback(
65
+ (ids, options) => {
66
+ if (ids.length === 0) return;
67
+ setPending((current) => /* @__PURE__ */ new Set([...current, ...ids]));
68
+ mutation.mutate({ ids, force: (options == null ? void 0 : options.force) ?? false });
69
+ },
70
+ [mutation]
71
+ );
72
+ const seed = react.useCallback(
73
+ (connections) => setHealth((current) => ({ ...initialHealthMap(connections), ...current })),
74
+ []
75
+ );
76
+ return { health, pending, error: mutation.error, seed, check };
77
+ }
78
+ exports.initialHealthMap = initialHealthMap;
79
+ exports.mergeHealthResults = mergeHealthResults;
80
+ exports.summarizeLaneHealth = summarizeLaneHealth;
81
+ exports.useConnectionHealth = useConnectionHealth;
82
+ //# sourceMappingURL=connectionHealth.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionHealth.cjs","sources":["../../src/connections/connectionHealth.ts"],"sourcesContent":["/**\n * Client state for on-demand connection health checks.\n *\n * Listing connections never probes — health arrives only when the operator asks\n * for it, one row, one lane, or the whole fleet at a time. The derivations are\n * kept pure and separate from the components so a partially-checked fleet (the\n * normal state) stays directly testable.\n */\n\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useCallback, useState } from \"react\";\nimport {\n connectionHealthUrl,\n type ConnectionDashboardItem,\n type ConnectionHealth,\n type ConnectionHealthResponse,\n type ConnectionHealthResult,\n} from \"./connectionDashboardModel\";\n\nexport type ConnectionHealthMap = Record<string, ConnectionHealth>;\n\n/** initialHealthMap seeds from the inventory's already-warm cache entries. */\nexport function initialHealthMap(\n connections: ConnectionDashboardItem[],\n): ConnectionHealthMap {\n const health: ConnectionHealthMap = {};\n for (const connection of connections) {\n if (connection.health) health[connection.id] = connection.health;\n }\n return health;\n}\n\n/**\n * mergeHealthResults folds a batch response into the current map. A result is\n * dropped when the map already holds a newer check for that connection, so a\n * slow fleet-wide batch cannot overwrite a row the operator re-checked while it\n * was still running.\n */\nexport function mergeHealthResults(\n previous: ConnectionHealthMap,\n results: ConnectionHealthResult[],\n): ConnectionHealthMap {\n const merged = { ...previous };\n for (const { id, durationMs: _durationMs, ...health } of results) {\n const existing = merged[id];\n if (existing && Date.parse(existing.checkedAt) > Date.parse(health.checkedAt)) {\n continue;\n }\n merged[id] = health;\n }\n return merged;\n}\n\nexport type LaneHealthSummary = {\n checked: number;\n failing: number;\n unused: number;\n};\n\n/**\n * summarizeLaneHealth counts a lane without assuming every row has been checked.\n * \"failing\" covers only the states that indicate a real problem — an unchecked\n * or indeterminate connection is neither healthy nor failing.\n */\nexport function summarizeLaneHealth(\n connections: ConnectionDashboardItem[],\n health: ConnectionHealthMap,\n): LaneHealthSummary {\n let checked = 0;\n let failing = 0;\n let unused = 0;\n for (const connection of connections) {\n const state = health[connection.id]?.state;\n if (state && state !== \"unknown\") checked += 1;\n if (state === \"credentials\" || state === \"unreachable\") failing += 1;\n if (connection.profileCount === 0) unused += 1;\n }\n return { checked, failing, unused };\n}\n\nexport type ConnectionHealthCheck = {\n health: ConnectionHealthMap;\n pending: Set<string>;\n error: Error | null;\n seed: (connections: ConnectionDashboardItem[]) => void;\n check: (ids: string[], options?: { force?: boolean }) => void;\n};\n\nexport function useConnectionHealth(apiBase: string): ConnectionHealthCheck {\n const [health, setHealth] = useState<ConnectionHealthMap>({});\n const [pending, setPending] = useState<Set<string>>(new Set());\n\n const mutation = useMutation({\n mutationFn: async ({ ids, force }: { ids: string[]; force: boolean }) => {\n const response = await fetch(connectionHealthUrl(apiBase), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\" },\n body: JSON.stringify({ ids, force }),\n });\n if (!response.ok) {\n const message = (await response.text()).trim();\n throw new Error(message || `Health check failed: ${response.status}`);\n }\n const payload = (await response.json()) as Partial<ConnectionHealthResponse>;\n if (!Array.isArray(payload.results)) {\n throw new Error(\"Health check response is missing results\");\n }\n return payload.results;\n },\n onSuccess: (results) => setHealth((current) => mergeHealthResults(current, results)),\n onSettled: (_data, _error, variables) =>\n setPending((current) => {\n const next = new Set(current);\n for (const id of variables.ids) next.delete(id);\n return next;\n }),\n });\n\n const check = useCallback(\n (ids: string[], options?: { force?: boolean }) => {\n if (ids.length === 0) return;\n setPending((current) => new Set([...current, ...ids]));\n mutation.mutate({ ids, force: options?.force ?? false });\n },\n [mutation],\n );\n\n const seed = useCallback(\n (connections: ConnectionDashboardItem[]) =>\n setHealth((current) => ({ ...initialHealthMap(connections), ...current })),\n [],\n );\n\n return { health, pending, error: mutation.error, seed, check };\n}\n"],"names":["useState","useMutation","connectionHealthUrl","useCallback"],"mappings":";;;;;AAsBO,SAAS,iBACd,aACqB;AACrB,QAAM,SAA8B,CAAA;AACpC,aAAW,cAAc,aAAa;AACpC,QAAI,WAAW,OAAQ,QAAO,WAAW,EAAE,IAAI,WAAW;AAAA,EAC5D;AACA,SAAO;AACT;AAQO,SAAS,mBACd,UACA,SACqB;AACrB,QAAM,SAAS,EAAE,GAAG,SAAA;AACpB,aAAW,EAAE,IAAI,YAAY,aAAa,GAAG,OAAA,KAAY,SAAS;AAChE,UAAM,WAAW,OAAO,EAAE;AAC1B,QAAI,YAAY,KAAK,MAAM,SAAS,SAAS,IAAI,KAAK,MAAM,OAAO,SAAS,GAAG;AAC7E;AAAA,IACF;AACA,WAAO,EAAE,IAAI;AAAA,EACf;AACA,SAAO;AACT;AAaO,SAAS,oBACd,aACA,QACmB;;AACnB,MAAI,UAAU;AACd,MAAI,UAAU;AACd,MAAI,SAAS;AACb,aAAW,cAAc,aAAa;AACpC,UAAM,SAAQ,YAAO,WAAW,EAAE,MAApB,mBAAuB;AACrC,QAAI,SAAS,UAAU,UAAW,YAAW;AAC7C,QAAI,UAAU,iBAAiB,UAAU,cAAe,YAAW;AACnE,QAAI,WAAW,iBAAiB,EAAG,WAAU;AAAA,EAC/C;AACA,SAAO,EAAE,SAAS,SAAS,OAAA;AAC7B;AAUO,SAAS,oBAAoB,SAAwC;AAC1E,QAAM,CAAC,QAAQ,SAAS,IAAIA,MAAAA,SAA8B,CAAA,CAAE;AAC5D,QAAM,CAAC,SAAS,UAAU,IAAIA,MAAAA,SAAsB,oBAAI,KAAK;AAE7D,QAAM,WAAWC,WAAAA,YAAY;AAAA,IAC3B,YAAY,OAAO,EAAE,KAAK,YAA+C;AACvE,YAAM,WAAW,MAAM,MAAMC,yBAAAA,oBAAoB,OAAO,GAAG;AAAA,QACzD,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,oBAAoB,QAAQ,mBAAA;AAAA,QACvD,MAAM,KAAK,UAAU,EAAE,KAAK,OAAO;AAAA,MAAA,CACpC;AACD,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,WAAW,MAAM,SAAS,KAAA,GAAQ,KAAA;AACxC,cAAM,IAAI,MAAM,WAAW,wBAAwB,SAAS,MAAM,EAAE;AAAA,MACtE;AACA,YAAM,UAAW,MAAM,SAAS,KAAA;AAChC,UAAI,CAAC,MAAM,QAAQ,QAAQ,OAAO,GAAG;AACnC,cAAM,IAAI,MAAM,0CAA0C;AAAA,MAC5D;AACA,aAAO,QAAQ;AAAA,IACjB;AAAA,IACA,WAAW,CAAC,YAAY,UAAU,CAAC,YAAY,mBAAmB,SAAS,OAAO,CAAC;AAAA,IACnF,WAAW,CAAC,OAAO,QAAQ,cACzB,WAAW,CAAC,YAAY;AACtB,YAAM,OAAO,IAAI,IAAI,OAAO;AAC5B,iBAAW,MAAM,UAAU,IAAK,MAAK,OAAO,EAAE;AAC9C,aAAO;AAAA,IACT,CAAC;AAAA,EAAA,CACJ;AAED,QAAM,QAAQC,MAAAA;AAAAA,IACZ,CAAC,KAAe,YAAkC;AAChD,UAAI,IAAI,WAAW,EAAG;AACtB,iBAAW,CAAC,YAAY,oBAAI,IAAI,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC;AACrD,eAAS,OAAO,EAAE,KAAK,QAAO,mCAAS,UAAS,OAAO;AAAA,IACzD;AAAA,IACA,CAAC,QAAQ;AAAA,EAAA;AAGX,QAAM,OAAOA,MAAAA;AAAAA,IACX,CAAC,gBACC,UAAU,CAAC,aAAa,EAAE,GAAG,iBAAiB,WAAW,GAAG,GAAG,QAAA,EAAU;AAAA,IAC3E,CAAA;AAAA,EAAC;AAGH,SAAO,EAAE,QAAQ,SAAS,OAAO,SAAS,OAAO,MAAM,MAAA;AACzD;;;;;"}
@@ -0,0 +1,33 @@
1
+ import { ConnectionDashboardItem, ConnectionHealth, ConnectionHealthResult } from './connectionDashboardModel.js';
2
+ export type ConnectionHealthMap = Record<string, ConnectionHealth>;
3
+ /** initialHealthMap seeds from the inventory's already-warm cache entries. */
4
+ export declare function initialHealthMap(connections: ConnectionDashboardItem[]): ConnectionHealthMap;
5
+ /**
6
+ * mergeHealthResults folds a batch response into the current map. A result is
7
+ * dropped when the map already holds a newer check for that connection, so a
8
+ * slow fleet-wide batch cannot overwrite a row the operator re-checked while it
9
+ * was still running.
10
+ */
11
+ export declare function mergeHealthResults(previous: ConnectionHealthMap, results: ConnectionHealthResult[]): ConnectionHealthMap;
12
+ export type LaneHealthSummary = {
13
+ checked: number;
14
+ failing: number;
15
+ unused: number;
16
+ };
17
+ /**
18
+ * summarizeLaneHealth counts a lane without assuming every row has been checked.
19
+ * "failing" covers only the states that indicate a real problem — an unchecked
20
+ * or indeterminate connection is neither healthy nor failing.
21
+ */
22
+ export declare function summarizeLaneHealth(connections: ConnectionDashboardItem[], health: ConnectionHealthMap): LaneHealthSummary;
23
+ export type ConnectionHealthCheck = {
24
+ health: ConnectionHealthMap;
25
+ pending: Set<string>;
26
+ error: Error | null;
27
+ seed: (connections: ConnectionDashboardItem[]) => void;
28
+ check: (ids: string[], options?: {
29
+ force?: boolean;
30
+ }) => void;
31
+ };
32
+ export declare function useConnectionHealth(apiBase: string): ConnectionHealthCheck;
33
+ //# sourceMappingURL=connectionHealth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionHealth.d.ts","sourceRoot":"","sources":["../../src/connections/connectionHealth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EAErB,KAAK,sBAAsB,EAC5B,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAEnE,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,uBAAuB,EAAE,GACrC,mBAAmB,CAMrB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,sBAAsB,EAAE,GAChC,mBAAmB,CAUrB;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,uBAAuB,EAAE,EACtC,MAAM,EAAE,mBAAmB,GAC1B,iBAAiB,CAWnB;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,CAAC,WAAW,EAAE,uBAAuB,EAAE,KAAK,IAAI,CAAC;IACvD,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;CAC/D,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CA8C1E"}
@@ -0,0 +1,82 @@
1
+ import { useMutation } from "@tanstack/react-query";
2
+ import { useState, useCallback } from "react";
3
+ import { connectionHealthUrl } from "./connectionDashboardModel.js";
4
+ function initialHealthMap(connections) {
5
+ const health = {};
6
+ for (const connection of connections) {
7
+ if (connection.health) health[connection.id] = connection.health;
8
+ }
9
+ return health;
10
+ }
11
+ function mergeHealthResults(previous, results) {
12
+ const merged = { ...previous };
13
+ for (const { id, durationMs: _durationMs, ...health } of results) {
14
+ const existing = merged[id];
15
+ if (existing && Date.parse(existing.checkedAt) > Date.parse(health.checkedAt)) {
16
+ continue;
17
+ }
18
+ merged[id] = health;
19
+ }
20
+ return merged;
21
+ }
22
+ function summarizeLaneHealth(connections, health) {
23
+ var _a;
24
+ let checked = 0;
25
+ let failing = 0;
26
+ let unused = 0;
27
+ for (const connection of connections) {
28
+ const state = (_a = health[connection.id]) == null ? void 0 : _a.state;
29
+ if (state && state !== "unknown") checked += 1;
30
+ if (state === "credentials" || state === "unreachable") failing += 1;
31
+ if (connection.profileCount === 0) unused += 1;
32
+ }
33
+ return { checked, failing, unused };
34
+ }
35
+ function useConnectionHealth(apiBase) {
36
+ const [health, setHealth] = useState({});
37
+ const [pending, setPending] = useState(/* @__PURE__ */ new Set());
38
+ const mutation = useMutation({
39
+ mutationFn: async ({ ids, force }) => {
40
+ const response = await fetch(connectionHealthUrl(apiBase), {
41
+ method: "POST",
42
+ headers: { "Content-Type": "application/json", Accept: "application/json" },
43
+ body: JSON.stringify({ ids, force })
44
+ });
45
+ if (!response.ok) {
46
+ const message = (await response.text()).trim();
47
+ throw new Error(message || `Health check failed: ${response.status}`);
48
+ }
49
+ const payload = await response.json();
50
+ if (!Array.isArray(payload.results)) {
51
+ throw new Error("Health check response is missing results");
52
+ }
53
+ return payload.results;
54
+ },
55
+ onSuccess: (results) => setHealth((current) => mergeHealthResults(current, results)),
56
+ onSettled: (_data, _error, variables) => setPending((current) => {
57
+ const next = new Set(current);
58
+ for (const id of variables.ids) next.delete(id);
59
+ return next;
60
+ })
61
+ });
62
+ const check = useCallback(
63
+ (ids, options) => {
64
+ if (ids.length === 0) return;
65
+ setPending((current) => /* @__PURE__ */ new Set([...current, ...ids]));
66
+ mutation.mutate({ ids, force: (options == null ? void 0 : options.force) ?? false });
67
+ },
68
+ [mutation]
69
+ );
70
+ const seed = useCallback(
71
+ (connections) => setHealth((current) => ({ ...initialHealthMap(connections), ...current })),
72
+ []
73
+ );
74
+ return { health, pending, error: mutation.error, seed, check };
75
+ }
76
+ export {
77
+ initialHealthMap,
78
+ mergeHealthResults,
79
+ summarizeLaneHealth,
80
+ useConnectionHealth
81
+ };
82
+ //# sourceMappingURL=connectionHealth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionHealth.js","sources":["../../src/connections/connectionHealth.ts"],"sourcesContent":["/**\n * Client state for on-demand connection health checks.\n *\n * Listing connections never probes — health arrives only when the operator asks\n * for it, one row, one lane, or the whole fleet at a time. The derivations are\n * kept pure and separate from the components so a partially-checked fleet (the\n * normal state) stays directly testable.\n */\n\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useCallback, useState } from \"react\";\nimport {\n connectionHealthUrl,\n type ConnectionDashboardItem,\n type ConnectionHealth,\n type ConnectionHealthResponse,\n type ConnectionHealthResult,\n} from \"./connectionDashboardModel\";\n\nexport type ConnectionHealthMap = Record<string, ConnectionHealth>;\n\n/** initialHealthMap seeds from the inventory's already-warm cache entries. */\nexport function initialHealthMap(\n connections: ConnectionDashboardItem[],\n): ConnectionHealthMap {\n const health: ConnectionHealthMap = {};\n for (const connection of connections) {\n if (connection.health) health[connection.id] = connection.health;\n }\n return health;\n}\n\n/**\n * mergeHealthResults folds a batch response into the current map. A result is\n * dropped when the map already holds a newer check for that connection, so a\n * slow fleet-wide batch cannot overwrite a row the operator re-checked while it\n * was still running.\n */\nexport function mergeHealthResults(\n previous: ConnectionHealthMap,\n results: ConnectionHealthResult[],\n): ConnectionHealthMap {\n const merged = { ...previous };\n for (const { id, durationMs: _durationMs, ...health } of results) {\n const existing = merged[id];\n if (existing && Date.parse(existing.checkedAt) > Date.parse(health.checkedAt)) {\n continue;\n }\n merged[id] = health;\n }\n return merged;\n}\n\nexport type LaneHealthSummary = {\n checked: number;\n failing: number;\n unused: number;\n};\n\n/**\n * summarizeLaneHealth counts a lane without assuming every row has been checked.\n * \"failing\" covers only the states that indicate a real problem — an unchecked\n * or indeterminate connection is neither healthy nor failing.\n */\nexport function summarizeLaneHealth(\n connections: ConnectionDashboardItem[],\n health: ConnectionHealthMap,\n): LaneHealthSummary {\n let checked = 0;\n let failing = 0;\n let unused = 0;\n for (const connection of connections) {\n const state = health[connection.id]?.state;\n if (state && state !== \"unknown\") checked += 1;\n if (state === \"credentials\" || state === \"unreachable\") failing += 1;\n if (connection.profileCount === 0) unused += 1;\n }\n return { checked, failing, unused };\n}\n\nexport type ConnectionHealthCheck = {\n health: ConnectionHealthMap;\n pending: Set<string>;\n error: Error | null;\n seed: (connections: ConnectionDashboardItem[]) => void;\n check: (ids: string[], options?: { force?: boolean }) => void;\n};\n\nexport function useConnectionHealth(apiBase: string): ConnectionHealthCheck {\n const [health, setHealth] = useState<ConnectionHealthMap>({});\n const [pending, setPending] = useState<Set<string>>(new Set());\n\n const mutation = useMutation({\n mutationFn: async ({ ids, force }: { ids: string[]; force: boolean }) => {\n const response = await fetch(connectionHealthUrl(apiBase), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\" },\n body: JSON.stringify({ ids, force }),\n });\n if (!response.ok) {\n const message = (await response.text()).trim();\n throw new Error(message || `Health check failed: ${response.status}`);\n }\n const payload = (await response.json()) as Partial<ConnectionHealthResponse>;\n if (!Array.isArray(payload.results)) {\n throw new Error(\"Health check response is missing results\");\n }\n return payload.results;\n },\n onSuccess: (results) => setHealth((current) => mergeHealthResults(current, results)),\n onSettled: (_data, _error, variables) =>\n setPending((current) => {\n const next = new Set(current);\n for (const id of variables.ids) next.delete(id);\n return next;\n }),\n });\n\n const check = useCallback(\n (ids: string[], options?: { force?: boolean }) => {\n if (ids.length === 0) return;\n setPending((current) => new Set([...current, ...ids]));\n mutation.mutate({ ids, force: options?.force ?? false });\n },\n [mutation],\n );\n\n const seed = useCallback(\n (connections: ConnectionDashboardItem[]) =>\n setHealth((current) => ({ ...initialHealthMap(connections), ...current })),\n [],\n );\n\n return { health, pending, error: mutation.error, seed, check };\n}\n"],"names":[],"mappings":";;;AAsBO,SAAS,iBACd,aACqB;AACrB,QAAM,SAA8B,CAAA;AACpC,aAAW,cAAc,aAAa;AACpC,QAAI,WAAW,OAAQ,QAAO,WAAW,EAAE,IAAI,WAAW;AAAA,EAC5D;AACA,SAAO;AACT;AAQO,SAAS,mBACd,UACA,SACqB;AACrB,QAAM,SAAS,EAAE,GAAG,SAAA;AACpB,aAAW,EAAE,IAAI,YAAY,aAAa,GAAG,OAAA,KAAY,SAAS;AAChE,UAAM,WAAW,OAAO,EAAE;AAC1B,QAAI,YAAY,KAAK,MAAM,SAAS,SAAS,IAAI,KAAK,MAAM,OAAO,SAAS,GAAG;AAC7E;AAAA,IACF;AACA,WAAO,EAAE,IAAI;AAAA,EACf;AACA,SAAO;AACT;AAaO,SAAS,oBACd,aACA,QACmB;;AACnB,MAAI,UAAU;AACd,MAAI,UAAU;AACd,MAAI,SAAS;AACb,aAAW,cAAc,aAAa;AACpC,UAAM,SAAQ,YAAO,WAAW,EAAE,MAApB,mBAAuB;AACrC,QAAI,SAAS,UAAU,UAAW,YAAW;AAC7C,QAAI,UAAU,iBAAiB,UAAU,cAAe,YAAW;AACnE,QAAI,WAAW,iBAAiB,EAAG,WAAU;AAAA,EAC/C;AACA,SAAO,EAAE,SAAS,SAAS,OAAA;AAC7B;AAUO,SAAS,oBAAoB,SAAwC;AAC1E,QAAM,CAAC,QAAQ,SAAS,IAAI,SAA8B,CAAA,CAAE;AAC5D,QAAM,CAAC,SAAS,UAAU,IAAI,SAAsB,oBAAI,KAAK;AAE7D,QAAM,WAAW,YAAY;AAAA,IAC3B,YAAY,OAAO,EAAE,KAAK,YAA+C;AACvE,YAAM,WAAW,MAAM,MAAM,oBAAoB,OAAO,GAAG;AAAA,QACzD,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,oBAAoB,QAAQ,mBAAA;AAAA,QACvD,MAAM,KAAK,UAAU,EAAE,KAAK,OAAO;AAAA,MAAA,CACpC;AACD,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,WAAW,MAAM,SAAS,KAAA,GAAQ,KAAA;AACxC,cAAM,IAAI,MAAM,WAAW,wBAAwB,SAAS,MAAM,EAAE;AAAA,MACtE;AACA,YAAM,UAAW,MAAM,SAAS,KAAA;AAChC,UAAI,CAAC,MAAM,QAAQ,QAAQ,OAAO,GAAG;AACnC,cAAM,IAAI,MAAM,0CAA0C;AAAA,MAC5D;AACA,aAAO,QAAQ;AAAA,IACjB;AAAA,IACA,WAAW,CAAC,YAAY,UAAU,CAAC,YAAY,mBAAmB,SAAS,OAAO,CAAC;AAAA,IACnF,WAAW,CAAC,OAAO,QAAQ,cACzB,WAAW,CAAC,YAAY;AACtB,YAAM,OAAO,IAAI,IAAI,OAAO;AAC5B,iBAAW,MAAM,UAAU,IAAK,MAAK,OAAO,EAAE;AAC9C,aAAO;AAAA,IACT,CAAC;AAAA,EAAA,CACJ;AAED,QAAM,QAAQ;AAAA,IACZ,CAAC,KAAe,YAAkC;AAChD,UAAI,IAAI,WAAW,EAAG;AACtB,iBAAW,CAAC,YAAY,oBAAI,IAAI,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC;AACrD,eAAS,OAAO,EAAE,KAAK,QAAO,mCAAS,UAAS,OAAO;AAAA,IACzD;AAAA,IACA,CAAC,QAAQ;AAAA,EAAA;AAGX,QAAM,OAAO;AAAA,IACX,CAAC,gBACC,UAAU,CAAC,aAAa,EAAE,GAAG,iBAAiB,WAAW,GAAG,GAAG,QAAA,EAAU;AAAA,IAC3E,CAAA;AAAA,EAAC;AAGH,SAAO,EAAE,QAAQ,SAAS,OAAO,SAAS,OAAO,MAAM,MAAA;AACzD;"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const connectionLoggingField = require("./connectionLoggingField.cjs");
5
+ const connectionLoggingModel = require("./connectionLoggingModel.cjs");
6
+ const connectionLoggingPre = (field) => {
7
+ if (field.schema["x-clicky-component"] !== connectionLoggingModel.CONNECTION_LOGGING_WIDGET) return field;
8
+ connectionLoggingModel.connectionLoggingCapability(field);
9
+ return {
10
+ ...field,
11
+ kind: "display",
12
+ displayVariant: "spacer",
13
+ colSpan: "full"
14
+ };
15
+ };
16
+ const connectionLoggingPost = (field, nodes, ctx) => {
17
+ if (field.schema["x-clicky-component"] !== connectionLoggingModel.CONNECTION_LOGGING_WIDGET) return nodes;
18
+ if (!ctx) throw new Error("connection logging form context is required");
19
+ return {
20
+ label: null,
21
+ value: /* @__PURE__ */ jsxRuntime.jsx(connectionLoggingField.ConnectionLoggingField, { field, ctx })
22
+ };
23
+ };
24
+ const connectionLoggingFormExtensions = {
25
+ pre: [connectionLoggingPre],
26
+ post: [connectionLoggingPost]
27
+ };
28
+ exports.connectionLoggingFormExtensions = connectionLoggingFormExtensions;
29
+ //# sourceMappingURL=connectionLogging.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionLogging.cjs","sources":["../../src/connections/connectionLogging.tsx"],"sourcesContent":["import type {\n PostExtension,\n PreExtension,\n} from \"../components/json-schema-form-runtime-types\";\nimport { ConnectionLoggingField } from \"./connectionLoggingField\";\nimport {\n CONNECTION_LOGGING_WIDGET,\n connectionLoggingCapability,\n} from \"./connectionLoggingModel\";\n\nconst connectionLoggingPre: PreExtension = (field) => {\n if (field.schema[\"x-clicky-component\"] !== CONNECTION_LOGGING_WIDGET) return field;\n connectionLoggingCapability(field);\n return {\n ...field,\n kind: \"display\",\n displayVariant: \"spacer\",\n colSpan: \"full\",\n };\n};\n\nconst connectionLoggingPost: PostExtension = (field, nodes, ctx) => {\n if (field.schema[\"x-clicky-component\"] !== CONNECTION_LOGGING_WIDGET) return nodes;\n if (!ctx) throw new Error(\"connection logging form context is required\");\n return {\n label: null,\n value: <ConnectionLoggingField field={field} ctx={ctx} />,\n };\n};\n\n/**\n * Renders the connection schema's `connection-logging-policy` field as the\n * ConnectionLoggingPolicy editor, writing its overrides into the connection's\n * `properties` map.\n */\nexport const connectionLoggingFormExtensions: {\n pre: PreExtension[];\n post: PostExtension[];\n} = {\n pre: [connectionLoggingPre],\n post: [connectionLoggingPost],\n};\n"],"names":["CONNECTION_LOGGING_WIDGET","connectionLoggingCapability","jsx","ConnectionLoggingField"],"mappings":";;;;;AAUA,MAAM,uBAAqC,CAAC,UAAU;AACpD,MAAI,MAAM,OAAO,oBAAoB,MAAMA,uBAAAA,0BAA2B,QAAO;AAC7EC,yBAAAA,4BAA4B,KAAK;AACjC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,SAAS;AAAA,EAAA;AAEb;AAEA,MAAM,wBAAuC,CAAC,OAAO,OAAO,QAAQ;AAClE,MAAI,MAAM,OAAO,oBAAoB,MAAMD,uBAAAA,0BAA2B,QAAO;AAC7E,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,6CAA6C;AACvE,SAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAOE,2BAAAA,IAACC,uBAAAA,wBAAA,EAAuB,OAAc,IAAA,CAAU;AAAA,EAAA;AAE3D;AAOO,MAAM,kCAGT;AAAA,EACF,KAAK,CAAC,oBAAoB;AAAA,EAC1B,MAAM,CAAC,qBAAqB;AAC9B;;"}
@@ -0,0 +1,11 @@
1
+ import { PostExtension, PreExtension } from '../components/json-schema-form-runtime-types.js';
2
+ /**
3
+ * Renders the connection schema's `connection-logging-policy` field as the
4
+ * ConnectionLoggingPolicy editor, writing its overrides into the connection's
5
+ * `properties` map.
6
+ */
7
+ export declare const connectionLoggingFormExtensions: {
8
+ pre: PreExtension[];
9
+ post: PostExtension[];
10
+ };
11
+ //# sourceMappingURL=connectionLogging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionLogging.d.ts","sourceRoot":"","sources":["../../src/connections/connectionLogging.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACb,MAAM,8CAA8C,CAAC;AA2BtD;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,EAAE;IAC5C,GAAG,EAAE,YAAY,EAAE,CAAC;IACpB,IAAI,EAAE,aAAa,EAAE,CAAC;CAIvB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { ConnectionLoggingField } from "./connectionLoggingField.js";
3
+ import { CONNECTION_LOGGING_WIDGET, connectionLoggingCapability } from "./connectionLoggingModel.js";
4
+ const connectionLoggingPre = (field) => {
5
+ if (field.schema["x-clicky-component"] !== CONNECTION_LOGGING_WIDGET) return field;
6
+ connectionLoggingCapability(field);
7
+ return {
8
+ ...field,
9
+ kind: "display",
10
+ displayVariant: "spacer",
11
+ colSpan: "full"
12
+ };
13
+ };
14
+ const connectionLoggingPost = (field, nodes, ctx) => {
15
+ if (field.schema["x-clicky-component"] !== CONNECTION_LOGGING_WIDGET) return nodes;
16
+ if (!ctx) throw new Error("connection logging form context is required");
17
+ return {
18
+ label: null,
19
+ value: /* @__PURE__ */ jsx(ConnectionLoggingField, { field, ctx })
20
+ };
21
+ };
22
+ const connectionLoggingFormExtensions = {
23
+ pre: [connectionLoggingPre],
24
+ post: [connectionLoggingPost]
25
+ };
26
+ export {
27
+ connectionLoggingFormExtensions
28
+ };
29
+ //# sourceMappingURL=connectionLogging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionLogging.js","sources":["../../src/connections/connectionLogging.tsx"],"sourcesContent":["import type {\n PostExtension,\n PreExtension,\n} from \"../components/json-schema-form-runtime-types\";\nimport { ConnectionLoggingField } from \"./connectionLoggingField\";\nimport {\n CONNECTION_LOGGING_WIDGET,\n connectionLoggingCapability,\n} from \"./connectionLoggingModel\";\n\nconst connectionLoggingPre: PreExtension = (field) => {\n if (field.schema[\"x-clicky-component\"] !== CONNECTION_LOGGING_WIDGET) return field;\n connectionLoggingCapability(field);\n return {\n ...field,\n kind: \"display\",\n displayVariant: \"spacer\",\n colSpan: \"full\",\n };\n};\n\nconst connectionLoggingPost: PostExtension = (field, nodes, ctx) => {\n if (field.schema[\"x-clicky-component\"] !== CONNECTION_LOGGING_WIDGET) return nodes;\n if (!ctx) throw new Error(\"connection logging form context is required\");\n return {\n label: null,\n value: <ConnectionLoggingField field={field} ctx={ctx} />,\n };\n};\n\n/**\n * Renders the connection schema's `connection-logging-policy` field as the\n * ConnectionLoggingPolicy editor, writing its overrides into the connection's\n * `properties` map.\n */\nexport const connectionLoggingFormExtensions: {\n pre: PreExtension[];\n post: PostExtension[];\n} = {\n pre: [connectionLoggingPre],\n post: [connectionLoggingPost],\n};\n"],"names":[],"mappings":";;;AAUA,MAAM,uBAAqC,CAAC,UAAU;AACpD,MAAI,MAAM,OAAO,oBAAoB,MAAM,0BAA2B,QAAO;AAC7E,8BAA4B,KAAK;AACjC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,SAAS;AAAA,EAAA;AAEb;AAEA,MAAM,wBAAuC,CAAC,OAAO,OAAO,QAAQ;AAClE,MAAI,MAAM,OAAO,oBAAoB,MAAM,0BAA2B,QAAO;AAC7E,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,6CAA6C;AACvE,SAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO,oBAAC,wBAAA,EAAuB,OAAc,IAAA,CAAU;AAAA,EAAA;AAE3D;AAOO,MAAM,kCAGT;AAAA,EACF,KAAK,CAAC,oBAAoB;AAAA,EAC1B,MAAM,CAAC,qBAAqB;AAC9B;"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const ConnectionLoggingPolicy = require("../components/ConnectionLoggingPolicy.cjs");
5
+ const collections = require("../lib/collections.cjs");
6
+ const connectionLoggingModel = require("./connectionLoggingModel.cjs");
7
+ function ConnectionLoggingField({
8
+ field,
9
+ ctx
10
+ }) {
11
+ if (!ctx.rootValue || !ctx.onRootChange) {
12
+ throw new Error(
13
+ "connection logging requires root form value and onRootChange"
14
+ );
15
+ }
16
+ const rootValue = ctx.rootValue;
17
+ const onRootChange = ctx.onRootChange;
18
+ const properties = collections.isPlainObject(rootValue.properties) ? stringProperties(rootValue.properties) : {};
19
+ return /* @__PURE__ */ jsxRuntime.jsx(
20
+ ConnectionLoggingPolicy.ConnectionLoggingPolicy,
21
+ {
22
+ definition: connectionLoggingModel.connectionLoggingCapability(field),
23
+ value: properties,
24
+ readOnly: field.readOnly ?? false,
25
+ onChange: (next) => onRootChange({ ...rootValue, properties: next })
26
+ }
27
+ );
28
+ }
29
+ function stringProperties(value) {
30
+ const properties = {};
31
+ for (const [key, item] of Object.entries(value)) {
32
+ if (typeof item === "string") properties[key] = item;
33
+ }
34
+ return properties;
35
+ }
36
+ exports.ConnectionLoggingField = ConnectionLoggingField;
37
+ //# sourceMappingURL=connectionLoggingField.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionLoggingField.cjs","sources":["../../src/connections/connectionLoggingField.tsx"],"sourcesContent":["import { ConnectionLoggingPolicy } from \"../components/ConnectionLoggingPolicy\";\nimport type { FieldControl } from \"../components/json-schema-form-types\";\nimport type { PostExtensionContext } from \"../components/json-schema-form-runtime-types\";\nimport { isPlainObject } from \"../lib/collections\";\nimport { connectionLoggingCapability } from \"./connectionLoggingModel\";\n\n/**\n * The logging policy editor in place of the connection schema's synthetic\n * `logging` field. Its overrides live in the connection's `properties` map, so\n * it edits the root form value rather than its own field.\n */\nexport function ConnectionLoggingField({\n field,\n ctx,\n}: {\n field: FieldControl;\n ctx: PostExtensionContext;\n}) {\n if (!ctx.rootValue || !ctx.onRootChange) {\n throw new Error(\n \"connection logging requires root form value and onRootChange\",\n );\n }\n const rootValue = ctx.rootValue;\n const onRootChange = ctx.onRootChange;\n const properties = isPlainObject(rootValue.properties)\n ? stringProperties(rootValue.properties)\n : {};\n\n return (\n <ConnectionLoggingPolicy\n definition={connectionLoggingCapability(field)}\n value={properties}\n readOnly={field.readOnly ?? false}\n onChange={(next) => onRootChange({ ...rootValue, properties: next })}\n />\n );\n}\n\nfunction stringProperties(\n value: Record<string, unknown>,\n): Record<string, string> {\n const properties: Record<string, string> = {};\n for (const [key, item] of Object.entries(value)) {\n if (typeof item === \"string\") properties[key] = item;\n }\n return properties;\n}\n"],"names":["isPlainObject","jsx","ConnectionLoggingPolicy","connectionLoggingCapability"],"mappings":";;;;;;AAWO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AACF,GAGG;AACD,MAAI,CAAC,IAAI,aAAa,CAAC,IAAI,cAAc;AACvC,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AACA,QAAM,YAAY,IAAI;AACtB,QAAM,eAAe,IAAI;AACzB,QAAM,aAAaA,YAAAA,cAAc,UAAU,UAAU,IACjD,iBAAiB,UAAU,UAAU,IACrC,CAAA;AAEJ,SACEC,2BAAAA;AAAAA,IAACC,wBAAAA;AAAAA,IAAA;AAAA,MACC,YAAYC,uBAAAA,4BAA4B,KAAK;AAAA,MAC7C,OAAO;AAAA,MACP,UAAU,MAAM,YAAY;AAAA,MAC5B,UAAU,CAAC,SAAS,aAAa,EAAE,GAAG,WAAW,YAAY,KAAA,CAAM;AAAA,IAAA;AAAA,EAAA;AAGzE;AAEA,SAAS,iBACP,OACwB;AACxB,QAAM,aAAqC,CAAA;AAC3C,aAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC/C,QAAI,OAAO,SAAS,SAAU,YAAW,GAAG,IAAI;AAAA,EAClD;AACA,SAAO;AACT;;"}
@@ -0,0 +1,12 @@
1
+ import { FieldControl } from '../components/json-schema-form-types.js';
2
+ import { PostExtensionContext } from '../components/json-schema-form-runtime-types.js';
3
+ /**
4
+ * The logging policy editor in place of the connection schema's synthetic
5
+ * `logging` field. Its overrides live in the connection's `properties` map, so
6
+ * it edits the root form value rather than its own field.
7
+ */
8
+ export declare function ConnectionLoggingField({ field, ctx, }: {
9
+ field: FieldControl;
10
+ ctx: PostExtensionContext;
11
+ }): import("react").JSX.Element;
12
+ //# sourceMappingURL=connectionLoggingField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionLoggingField.d.ts","sourceRoot":"","sources":["../../src/connections/connectionLoggingField.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAIzF;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,KAAK,EACL,GAAG,GACJ,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,oBAAoB,CAAC;CAC3B,+BAoBA"}