@flanksource/clicky-ui 0.3.49 → 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 (384) 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/diagnostics/DiagnosticsDetailPanel.cjs +52 -295
  116. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs.map +1 -1
  117. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
  118. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +47 -290
  119. package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -1
  120. package/dist/data/diagnostics/MetricTile.cjs +44 -0
  121. package/dist/data/diagnostics/MetricTile.cjs.map +1 -0
  122. package/dist/data/diagnostics/MetricTile.d.ts +13 -0
  123. package/dist/data/diagnostics/MetricTile.d.ts.map +1 -0
  124. package/dist/data/diagnostics/MetricTile.js +44 -0
  125. package/dist/data/diagnostics/MetricTile.js.map +1 -0
  126. package/dist/data/diagnostics/StackDumpView.cjs +227 -0
  127. package/dist/data/diagnostics/StackDumpView.cjs.map +1 -0
  128. package/dist/data/diagnostics/StackDumpView.d.ts +53 -0
  129. package/dist/data/diagnostics/StackDumpView.d.ts.map +1 -0
  130. package/dist/data/diagnostics/StackDumpView.js +227 -0
  131. package/dist/data/diagnostics/StackDumpView.js.map +1 -0
  132. package/dist/data/diagnostics/fixtures.d.ts +1 -0
  133. package/dist/data/diagnostics/fixtures.d.ts.map +1 -1
  134. package/dist/data/diagnostics/metric-tone.cjs +18 -0
  135. package/dist/data/diagnostics/metric-tone.cjs.map +1 -0
  136. package/dist/data/diagnostics/metric-tone.d.ts +6 -0
  137. package/dist/data/diagnostics/metric-tone.d.ts.map +1 -0
  138. package/dist/data/diagnostics/metric-tone.js +18 -0
  139. package/dist/data/diagnostics/metric-tone.js.map +1 -0
  140. package/dist/data/diagnostics/stacktrace.cjs +44 -0
  141. package/dist/data/diagnostics/stacktrace.cjs.map +1 -1
  142. package/dist/data/diagnostics/stacktrace.d.ts +7 -0
  143. package/dist/data/diagnostics/stacktrace.d.ts.map +1 -1
  144. package/dist/data/diagnostics/stacktrace.js +44 -0
  145. package/dist/data/diagnostics/stacktrace.js.map +1 -1
  146. package/dist/data/diagnostics/types.d.ts +2 -8
  147. package/dist/data/diagnostics/types.d.ts.map +1 -1
  148. package/dist/data/lint/LintDetail.cjs +339 -0
  149. package/dist/data/lint/LintDetail.cjs.map +1 -0
  150. package/dist/data/lint/LintDetail.d.ts +17 -0
  151. package/dist/data/lint/LintDetail.d.ts.map +1 -0
  152. package/dist/data/lint/LintDetail.js +339 -0
  153. package/dist/data/lint/LintDetail.js.map +1 -0
  154. package/dist/data/lint/LintFilterBar.cjs +103 -0
  155. package/dist/data/lint/LintFilterBar.cjs.map +1 -0
  156. package/dist/data/lint/LintFilterBar.d.ts +16 -0
  157. package/dist/data/lint/LintFilterBar.d.ts.map +1 -0
  158. package/dist/data/lint/LintFilterBar.js +103 -0
  159. package/dist/data/lint/LintFilterBar.js.map +1 -0
  160. package/dist/data/lint/LintResults.cjs +144 -0
  161. package/dist/data/lint/LintResults.cjs.map +1 -0
  162. package/dist/data/lint/LintResults.d.ts +39 -0
  163. package/dist/data/lint/LintResults.d.ts.map +1 -0
  164. package/dist/data/lint/LintResults.fixtures.d.ts +10 -0
  165. package/dist/data/lint/LintResults.fixtures.d.ts.map +1 -0
  166. package/dist/data/lint/LintResults.js +144 -0
  167. package/dist/data/lint/LintResults.js.map +1 -0
  168. package/dist/data/lint/LintTreeNode.cjs +66 -0
  169. package/dist/data/lint/LintTreeNode.cjs.map +1 -0
  170. package/dist/data/lint/LintTreeNode.d.ts +7 -0
  171. package/dist/data/lint/LintTreeNode.d.ts.map +1 -0
  172. package/dist/data/lint/LintTreeNode.js +66 -0
  173. package/dist/data/lint/LintTreeNode.js.map +1 -0
  174. package/dist/data/lint/actions.cjs +195 -0
  175. package/dist/data/lint/actions.cjs.map +1 -0
  176. package/dist/data/lint/actions.d.ts +29 -0
  177. package/dist/data/lint/actions.d.ts.map +1 -0
  178. package/dist/data/lint/actions.js +195 -0
  179. package/dist/data/lint/actions.js.map +1 -0
  180. package/dist/data/lint/grouping-options.cjs +14 -0
  181. package/dist/data/lint/grouping-options.cjs.map +1 -0
  182. package/dist/data/lint/grouping-options.d.ts +9 -0
  183. package/dist/data/lint/grouping-options.d.ts.map +1 -0
  184. package/dist/data/lint/grouping-options.js +14 -0
  185. package/dist/data/lint/grouping-options.js.map +1 -0
  186. package/dist/data/lint/grouping.cjs +450 -0
  187. package/dist/data/lint/grouping.cjs.map +1 -0
  188. package/dist/data/lint/grouping.d.ts +10 -0
  189. package/dist/data/lint/grouping.d.ts.map +1 -0
  190. package/dist/data/lint/grouping.js +450 -0
  191. package/dist/data/lint/grouping.js.map +1 -0
  192. package/dist/data/lint/index.d.ts +10 -0
  193. package/dist/data/lint/index.d.ts.map +1 -0
  194. package/dist/data/lint/paths.cjs +35 -0
  195. package/dist/data/lint/paths.cjs.map +1 -0
  196. package/dist/data/lint/paths.d.ts +13 -0
  197. package/dist/data/lint/paths.d.ts.map +1 -0
  198. package/dist/data/lint/paths.js +35 -0
  199. package/dist/data/lint/paths.js.map +1 -0
  200. package/dist/data/lint/stats.cjs +76 -0
  201. package/dist/data/lint/stats.cjs.map +1 -0
  202. package/dist/data/lint/stats.d.ts +19 -0
  203. package/dist/data/lint/stats.d.ts.map +1 -0
  204. package/dist/data/lint/stats.js +76 -0
  205. package/dist/data/lint/stats.js.map +1 -0
  206. package/dist/data/lint/types.cjs +16 -0
  207. package/dist/data/lint/types.cjs.map +1 -0
  208. package/dist/data/lint/types.d.ts +93 -0
  209. package/dist/data/lint/types.d.ts.map +1 -0
  210. package/dist/data/lint/types.js +16 -0
  211. package/dist/data/lint/types.js.map +1 -0
  212. package/dist/data/test-runner/TestAttemptDetail.cjs +113 -0
  213. package/dist/data/test-runner/TestAttemptDetail.cjs.map +1 -0
  214. package/dist/data/test-runner/TestAttemptDetail.d.ts +19 -0
  215. package/dist/data/test-runner/TestAttemptDetail.d.ts.map +1 -0
  216. package/dist/data/test-runner/TestAttemptDetail.js +113 -0
  217. package/dist/data/test-runner/TestAttemptDetail.js.map +1 -0
  218. package/dist/data/test-runner/TestAttempts.cjs +36 -0
  219. package/dist/data/test-runner/TestAttempts.cjs.map +1 -0
  220. package/dist/data/test-runner/TestAttempts.d.ts +5 -0
  221. package/dist/data/test-runner/TestAttempts.d.ts.map +1 -0
  222. package/dist/data/test-runner/TestAttempts.js +36 -0
  223. package/dist/data/test-runner/TestAttempts.js.map +1 -0
  224. package/dist/data/test-runner/TestDetailPanel.cjs +13 -3
  225. package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
  226. package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
  227. package/dist/data/test-runner/TestDetailPanel.js +14 -4
  228. package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
  229. package/dist/data/test-runner/TestFailureDetail.cjs +9 -29
  230. package/dist/data/test-runner/TestFailureDetail.cjs.map +1 -1
  231. package/dist/data/test-runner/TestFailureDetail.d.ts +6 -6
  232. package/dist/data/test-runner/TestFailureDetail.d.ts.map +1 -1
  233. package/dist/data/test-runner/TestFailureDetail.js +9 -29
  234. package/dist/data/test-runner/TestFailureDetail.js.map +1 -1
  235. package/dist/data/test-runner/TestRunSummary.cjs +33 -0
  236. package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
  237. package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
  238. package/dist/data/test-runner/TestRunSummary.js +34 -1
  239. package/dist/data/test-runner/TestRunSummary.js.map +1 -1
  240. package/dist/data/test-runner/TestRunner.cjs +3 -0
  241. package/dist/data/test-runner/TestRunner.cjs.map +1 -1
  242. package/dist/data/test-runner/TestRunner.d.ts +8 -1
  243. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  244. package/dist/data/test-runner/TestRunner.js +3 -0
  245. package/dist/data/test-runner/TestRunner.js.map +1 -1
  246. package/dist/data/test-runner/TestTreeNode.cjs +3 -1
  247. package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
  248. package/dist/data/test-runner/TestTreeNode.d.ts.map +1 -1
  249. package/dist/data/test-runner/TestTreeNode.js +3 -1
  250. package/dist/data/test-runner/TestTreeNode.js.map +1 -1
  251. package/dist/data/test-runner/adapter.cjs +9 -1
  252. package/dist/data/test-runner/adapter.cjs.map +1 -1
  253. package/dist/data/test-runner/adapter.d.ts +5 -0
  254. package/dist/data/test-runner/adapter.d.ts.map +1 -1
  255. package/dist/data/test-runner/adapter.js +9 -1
  256. package/dist/data/test-runner/adapter.js.map +1 -1
  257. package/dist/data/test-runner/attempts.cjs +62 -0
  258. package/dist/data/test-runner/attempts.cjs.map +1 -0
  259. package/dist/data/test-runner/attempts.d.ts +13 -0
  260. package/dist/data/test-runner/attempts.d.ts.map +1 -0
  261. package/dist/data/test-runner/attempts.js +62 -0
  262. package/dist/data/test-runner/attempts.js.map +1 -0
  263. package/dist/data/test-runner/context.cjs.map +1 -1
  264. package/dist/data/test-runner/context.d.ts +6 -0
  265. package/dist/data/test-runner/context.d.ts.map +1 -1
  266. package/dist/data/test-runner/context.js.map +1 -1
  267. package/dist/data/test-runner/index.d.ts +5 -1
  268. package/dist/data/test-runner/index.d.ts.map +1 -1
  269. package/dist/data/test-runner/marks.cjs +2 -0
  270. package/dist/data/test-runner/marks.cjs.map +1 -1
  271. package/dist/data/test-runner/marks.d.ts.map +1 -1
  272. package/dist/data/test-runner/marks.js +2 -0
  273. package/dist/data/test-runner/marks.js.map +1 -1
  274. package/dist/data/test-runner/process-metrics.cjs +15 -0
  275. package/dist/data/test-runner/process-metrics.cjs.map +1 -0
  276. package/dist/data/test-runner/process-metrics.d.ts +22 -0
  277. package/dist/data/test-runner/process-metrics.d.ts.map +1 -0
  278. package/dist/data/test-runner/process-metrics.js +15 -0
  279. package/dist/data/test-runner/process-metrics.js.map +1 -0
  280. package/dist/data/test-runner/status.cjs +11 -3
  281. package/dist/data/test-runner/status.cjs.map +1 -1
  282. package/dist/data/test-runner/status.d.ts +3 -1
  283. package/dist/data/test-runner/status.d.ts.map +1 -1
  284. package/dist/data/test-runner/status.js +11 -3
  285. package/dist/data/test-runner/status.js.map +1 -1
  286. package/dist/data/test-runner/types.d.ts +14 -0
  287. package/dist/data/test-runner/types.d.ts.map +1 -1
  288. package/dist/data/traces/GoProfileView.cjs +176 -0
  289. package/dist/data/traces/GoProfileView.cjs.map +1 -0
  290. package/dist/data/traces/GoProfileView.d.ts +30 -0
  291. package/dist/data/traces/GoProfileView.d.ts.map +1 -0
  292. package/dist/data/traces/GoProfileView.js +176 -0
  293. package/dist/data/traces/GoProfileView.js.map +1 -0
  294. package/dist/data/traces/ProcessFacetTable.cjs +79 -0
  295. package/dist/data/traces/ProcessFacetTable.cjs.map +1 -0
  296. package/dist/data/traces/ProcessFacetTable.d.ts +21 -0
  297. package/dist/data/traces/ProcessFacetTable.d.ts.map +1 -0
  298. package/dist/data/traces/ProcessFacetTable.js +79 -0
  299. package/dist/data/traces/ProcessFacetTable.js.map +1 -0
  300. package/dist/data/traces/ProcessRecordViews.cjs +41 -0
  301. package/dist/data/traces/ProcessRecordViews.cjs.map +1 -0
  302. package/dist/data/traces/ProcessRecordViews.d.ts +16 -0
  303. package/dist/data/traces/ProcessRecordViews.d.ts.map +1 -0
  304. package/dist/data/traces/ProcessRecordViews.js +41 -0
  305. package/dist/data/traces/ProcessRecordViews.js.map +1 -0
  306. package/dist/data/traces/ProcessTraceDetail.cjs +316 -0
  307. package/dist/data/traces/ProcessTraceDetail.cjs.map +1 -0
  308. package/dist/data/traces/ProcessTraceDetail.d.ts +39 -0
  309. package/dist/data/traces/ProcessTraceDetail.d.ts.map +1 -0
  310. package/dist/data/traces/ProcessTraceDetail.js +316 -0
  311. package/dist/data/traces/ProcessTraceDetail.js.map +1 -0
  312. package/dist/data/traces/ProcessTraceTree.cjs +76 -34
  313. package/dist/data/traces/ProcessTraceTree.cjs.map +1 -1
  314. package/dist/data/traces/ProcessTraceTree.d.ts +21 -4
  315. package/dist/data/traces/ProcessTraceTree.d.ts.map +1 -1
  316. package/dist/data/traces/ProcessTraceTree.js +72 -30
  317. package/dist/data/traces/ProcessTraceTree.js.map +1 -1
  318. package/dist/data/traces/Sparkline.cjs +27 -5
  319. package/dist/data/traces/Sparkline.cjs.map +1 -1
  320. package/dist/data/traces/Sparkline.d.ts +17 -1
  321. package/dist/data/traces/Sparkline.d.ts.map +1 -1
  322. package/dist/data/traces/Sparkline.js +28 -6
  323. package/dist/data/traces/Sparkline.js.map +1 -1
  324. package/dist/data/traces/TraceView.cjs +9 -0
  325. package/dist/data/traces/TraceView.cjs.map +1 -1
  326. package/dist/data/traces/TraceView.d.ts +4 -2
  327. package/dist/data/traces/TraceView.d.ts.map +1 -1
  328. package/dist/data/traces/TraceView.js +9 -0
  329. package/dist/data/traces/TraceView.js.map +1 -1
  330. package/dist/data/traces/TraceWindowList.cjs +117 -0
  331. package/dist/data/traces/TraceWindowList.cjs.map +1 -0
  332. package/dist/data/traces/TraceWindowList.d.ts +48 -0
  333. package/dist/data/traces/TraceWindowList.d.ts.map +1 -0
  334. package/dist/data/traces/TraceWindowList.js +117 -0
  335. package/dist/data/traces/TraceWindowList.js.map +1 -0
  336. package/dist/data/traces/fixtures.d.ts +25 -1
  337. package/dist/data/traces/fixtures.d.ts.map +1 -1
  338. package/dist/data/traces/index.d.ts +10 -3
  339. package/dist/data/traces/index.d.ts.map +1 -1
  340. package/dist/data/traces/process-facets.cjs +48 -0
  341. package/dist/data/traces/process-facets.cjs.map +1 -0
  342. package/dist/data/traces/process-facets.d.ts +38 -0
  343. package/dist/data/traces/process-facets.d.ts.map +1 -0
  344. package/dist/data/traces/process-facets.js +48 -0
  345. package/dist/data/traces/process-facets.js.map +1 -0
  346. package/dist/data/traces/process-tree.cjs +36 -4
  347. package/dist/data/traces/process-tree.cjs.map +1 -1
  348. package/dist/data/traces/process-tree.d.ts +20 -1
  349. package/dist/data/traces/process-tree.d.ts.map +1 -1
  350. package/dist/data/traces/process-tree.js +36 -4
  351. package/dist/data/traces/process-tree.js.map +1 -1
  352. package/dist/data/traces/profile-aggregate.cjs +78 -0
  353. package/dist/data/traces/profile-aggregate.cjs.map +1 -0
  354. package/dist/data/traces/profile-aggregate.d.ts +41 -0
  355. package/dist/data/traces/profile-aggregate.d.ts.map +1 -0
  356. package/dist/data/traces/profile-aggregate.js +78 -0
  357. package/dist/data/traces/profile-aggregate.js.map +1 -0
  358. package/dist/data/traces/stack-checkpoints.cjs +22 -0
  359. package/dist/data/traces/stack-checkpoints.cjs.map +1 -0
  360. package/dist/data/traces/stack-checkpoints.d.ts +18 -0
  361. package/dist/data/traces/stack-checkpoints.d.ts.map +1 -0
  362. package/dist/data/traces/stack-checkpoints.js +22 -0
  363. package/dist/data/traces/stack-checkpoints.js.map +1 -0
  364. package/dist/data/traces/types.d.ts +120 -5
  365. package/dist/data/traces/types.d.ts.map +1 -1
  366. package/dist/data/verification/adapters.cjs +1 -0
  367. package/dist/data/verification/adapters.cjs.map +1 -1
  368. package/dist/data/verification/adapters.d.ts.map +1 -1
  369. package/dist/data/verification/adapters.js +1 -0
  370. package/dist/data/verification/adapters.js.map +1 -1
  371. package/dist/data/version-info.cjs +3 -3
  372. package/dist/data/version-info.js +3 -3
  373. package/dist/data.cjs +85 -7
  374. package/dist/data.cjs.map +1 -1
  375. package/dist/data.d.ts +4 -0
  376. package/dist/data.d.ts.map +1 -1
  377. package/dist/data.js +81 -3
  378. package/dist/data.js.map +1 -1
  379. package/dist/index.cjs +87 -9
  380. package/dist/index.cjs.map +1 -1
  381. package/dist/index.js +81 -3
  382. package/dist/index.js.map +1 -1
  383. package/dist/styles.css +1 -1
  384. package/package.json +6 -1
@@ -0,0 +1,339 @@
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
+ import { Button } from "../../components/button.js";
3
+ import { Icon } from "../Icon.js";
4
+ import { cn } from "../../lib/utils.js";
5
+ import { ToolIcon, LintSeverityIcon } from "../test-runner/MarkIcons.js";
6
+ import { formatTestDuration } from "../test-runner/status.js";
7
+ import { lintNodeActions, collectFolderLintStats, folderPattern, violationIgnoreAction } from "./actions.js";
8
+ import { lintNodeCount, severityOf, isLinterErrored } from "./stats.js";
9
+ import { UiListChecks } from "../../icons/components/UiListChecks.js";
10
+ import { UiEyeClosed } from "../../icons/components/UiEyeClosed.js";
11
+ function Section({ title, children }) {
12
+ return /* @__PURE__ */ jsxs("section", { className: "space-y-1.5", children: [
13
+ /* @__PURE__ */ jsx("h3", { className: "text-[10px] uppercase tracking-wide text-muted-foreground", children: title }),
14
+ children
15
+ ] });
16
+ }
17
+ function Mono({ children, className }) {
18
+ return /* @__PURE__ */ jsx("span", { className: cn("break-all font-mono text-sm", className), children });
19
+ }
20
+ function Pre({ children, tone }) {
21
+ return /* @__PURE__ */ jsx(
22
+ "pre",
23
+ {
24
+ className: cn(
25
+ "max-h-80 overflow-auto whitespace-pre-wrap break-words rounded bg-muted p-3 font-mono text-xs",
26
+ tone === "error" && "bg-red-500/10 text-red-700 dark:text-red-300"
27
+ ),
28
+ children
29
+ }
30
+ );
31
+ }
32
+ function IgnoreButton({
33
+ action,
34
+ onIgnore,
35
+ disabled
36
+ }) {
37
+ const subtle = action.variant === "subtle";
38
+ return /* @__PURE__ */ jsxs(
39
+ Button,
40
+ {
41
+ type: "button",
42
+ size: "sm",
43
+ variant: "outline",
44
+ className: cn(
45
+ "h-6 gap-1 px-2 text-xs",
46
+ subtle ? "text-muted-foreground" : "border-amber-500/50 bg-amber-500/10 text-amber-800 hover:bg-amber-500/20 dark:text-amber-300"
47
+ ),
48
+ title: action.title,
49
+ disabled,
50
+ onClick: (event) => {
51
+ event.stopPropagation();
52
+ void onIgnore(action);
53
+ },
54
+ children: [
55
+ /* @__PURE__ */ jsx(Icon, { icon: UiEyeClosed, className: "text-xs" }),
56
+ action.label
57
+ ]
58
+ }
59
+ );
60
+ }
61
+ function ActionList({ actions, onIgnore, ignoreBusy }) {
62
+ if (!onIgnore || actions.length === 0) return null;
63
+ return /* @__PURE__ */ jsx(Section, { title: "Actions", children: /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1.5", children: actions.map((action) => /* @__PURE__ */ jsx(
64
+ IgnoreButton,
65
+ {
66
+ action,
67
+ onIgnore,
68
+ disabled: Boolean(ignoreBusy) || Boolean(action.disabledWithoutWorkDir) && !action.req.work_dir
69
+ },
70
+ action.key
71
+ )) }) });
72
+ }
73
+ function violationLocation(v, withFile) {
74
+ const position = `:${v.line ?? 0}${v.column ? `:${v.column}` : ""}`;
75
+ return withFile && v.file ? `${v.file}${position}` : position;
76
+ }
77
+ function ViolationCard({
78
+ violation,
79
+ linter,
80
+ file,
81
+ workDir,
82
+ showFile,
83
+ onIgnore,
84
+ ignoreBusy
85
+ }) {
86
+ var _a;
87
+ const rule = ((_a = violation.rule) == null ? void 0 : _a.method) ?? "";
88
+ const ignore = onIgnore ? violationIgnoreAction({ violation, linter, file, workDir }) : null;
89
+ return /* @__PURE__ */ jsx("div", { className: "rounded border border-border bg-card p-2", "data-lint-violation": "", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2", children: [
90
+ /* @__PURE__ */ jsx(LintSeverityIcon, { severity: severityOf(violation), className: "mt-0.5 text-base" }),
91
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
92
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2 font-mono text-xs text-muted-foreground", children: [
93
+ /* @__PURE__ */ jsx("span", { children: violationLocation(violation, Boolean(showFile)) }),
94
+ rule && /* @__PURE__ */ jsxs("span", { className: "text-foreground", children: [
95
+ "[",
96
+ rule,
97
+ "]"
98
+ ] })
99
+ ] }),
100
+ violation.message && /* @__PURE__ */ jsx("div", { className: "mt-0.5 whitespace-pre-wrap text-sm", children: violation.message }),
101
+ violation.code && /* @__PURE__ */ jsx("pre", { className: "mt-1 overflow-x-auto rounded bg-muted p-2 font-mono text-xs", children: violation.code }),
102
+ ignore && onIgnore && /* @__PURE__ */ jsx("div", { className: "mt-1.5", children: /* @__PURE__ */ jsx(IgnoreButton, { action: ignore, onIgnore, disabled: Boolean(ignoreBusy) }) })
103
+ ] })
104
+ ] }) });
105
+ }
106
+ function groupViolationsByRule(violations) {
107
+ var _a;
108
+ const grouped = /* @__PURE__ */ new Map();
109
+ for (const v of violations) {
110
+ const key = ((_a = v.rule) == null ? void 0 : _a.method) || "(no rule)";
111
+ grouped.set(key, [...grouped.get(key) ?? [], v]);
112
+ }
113
+ return Array.from(grouped.keys()).sort().map((rule) => ({
114
+ rule,
115
+ violations: grouped.get(rule).slice().sort((a, b) => (a.line ?? 0) - (b.line ?? 0))
116
+ }));
117
+ }
118
+ function shellQuote(s) {
119
+ if (s === "") return "''";
120
+ return /^[A-Za-z0-9_./:=@%+,-]+$/.test(s) ? s : `'${s.replace(/'/g, `'\\''`)}'`;
121
+ }
122
+ function formatLinterCommand(result) {
123
+ return result.command ? [result.command, ...result.args ?? []].map(shellQuote).join(" ") : "";
124
+ }
125
+ function ResultStatus({ result }) {
126
+ const [label, tone] = result.skipped ? ["skipped", "text-muted-foreground"] : result.timed_out ? ["timed out", "text-amber-600 dark:text-amber-400"] : isLinterErrored(result) ? ["failed", "text-red-600 dark:text-red-400"] : ["ran", "text-emerald-600 dark:text-emerald-400"];
127
+ const count = (result.violations ?? []).length;
128
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-3 text-sm", children: [
129
+ /* @__PURE__ */ jsx("span", { className: tone, children: label }),
130
+ /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
131
+ count,
132
+ " violation",
133
+ count === 1 ? "" : "s"
134
+ ] }),
135
+ result.file_count !== void 0 && /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
136
+ result.file_count,
137
+ " files"
138
+ ] }),
139
+ result.rule_count !== void 0 && /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
140
+ result.rule_count,
141
+ " rules"
142
+ ] }),
143
+ result.duration ? /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: formatTestDuration(result.duration) }) : null
144
+ ] });
145
+ }
146
+ function ResultDetails({ result, workDir }) {
147
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
148
+ /* @__PURE__ */ jsx(Section, { title: "Status", children: /* @__PURE__ */ jsx(ResultStatus, { result }) }),
149
+ result.command && /* @__PURE__ */ jsxs(Section, { title: "Command", children: [
150
+ /* @__PURE__ */ jsx(Pre, { children: formatLinterCommand(result) }),
151
+ workDir && /* @__PURE__ */ jsxs("div", { className: "font-mono text-xs text-muted-foreground", children: [
152
+ "cwd: ",
153
+ workDir
154
+ ] })
155
+ ] })
156
+ ] });
157
+ }
158
+ function NoFileViolations({
159
+ violations,
160
+ linter,
161
+ workDir
162
+ }) {
163
+ if (violations.length === 0) return null;
164
+ return /* @__PURE__ */ jsx(Section, { title: "Violations Without File", children: /* @__PURE__ */ jsx("div", { className: "space-y-3", children: groupViolationsByRule(violations).map(({ rule, violations: group }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2 rounded border border-border bg-muted/40 p-3", children: [
165
+ /* @__PURE__ */ jsxs("div", { className: "font-mono text-sm", children: [
166
+ rule,
167
+ " ",
168
+ /* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground", children: [
169
+ "(",
170
+ group.length,
171
+ ")"
172
+ ] })
173
+ ] }),
174
+ group.map((v, i) => /* @__PURE__ */ jsx(ViolationCard, { violation: v, linter, file: "", workDir }, i))
175
+ ] }, rule)) }) });
176
+ }
177
+ function LinterDetail({ node, actions, ...ignore }) {
178
+ const result = node.linter;
179
+ const linter = node.linterName ?? (result == null ? void 0 : result.linter) ?? "";
180
+ const workDir = node.work_dir ?? (result == null ? void 0 : result.work_dir) ?? "";
181
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
182
+ result && /* @__PURE__ */ jsx(ResultDetails, { result, workDir }),
183
+ /* @__PURE__ */ jsx(ActionList, { actions, ...ignore }),
184
+ (result == null ? void 0 : result.error) && /* @__PURE__ */ jsx(Section, { title: "Error", children: /* @__PURE__ */ jsx(Pre, { tone: "error", children: result.error }) }),
185
+ (result == null ? void 0 : result.raw_output) && /* @__PURE__ */ jsx(Section, { title: "Raw output", children: /* @__PURE__ */ jsx(Pre, { children: result.raw_output }) }),
186
+ /* @__PURE__ */ jsx(NoFileViolations, { violations: node.noFileViolations ?? [], linter, workDir })
187
+ ] });
188
+ }
189
+ function LinterErrorDetail({ node }) {
190
+ const result = node.linter;
191
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
192
+ /* @__PURE__ */ jsx(Section, { title: "Error", children: /* @__PURE__ */ jsx(Pre, { tone: "error", children: node.message }) }),
193
+ result && /* @__PURE__ */ jsx(ResultDetails, { result, workDir: result.work_dir ?? "" }),
194
+ (result == null ? void 0 : result.raw_output) && /* @__PURE__ */ jsx(Section, { title: "Raw output", children: /* @__PURE__ */ jsx(Pre, { children: result.raw_output }) })
195
+ ] });
196
+ }
197
+ function FolderDetail({
198
+ node,
199
+ results,
200
+ actions,
201
+ ...ignore
202
+ }) {
203
+ const stats = node.ruleName ? [] : collectFolderLintStats(node, results).filter((s) => !node.linterName || s.linter === node.linterName);
204
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
205
+ /* @__PURE__ */ jsx(Section, { title: "Folder", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
206
+ /* @__PURE__ */ jsx(Mono, { children: node.file || node.name }),
207
+ node.target_path !== void 0 && /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: folderPattern(node.target_path) })
208
+ ] }) }),
209
+ /* @__PURE__ */ jsx(ActionList, { actions, ...ignore }),
210
+ node.ruleName ? /* @__PURE__ */ jsx(Section, { title: "Scope", children: /* @__PURE__ */ jsxs("div", { className: "space-y-1 text-sm", children: [
211
+ /* @__PURE__ */ jsxs("div", { children: [
212
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "Linter:" }),
213
+ " ",
214
+ /* @__PURE__ */ jsx(Mono, { children: node.linterName })
215
+ ] }),
216
+ /* @__PURE__ */ jsxs("div", { children: [
217
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "Rule:" }),
218
+ " ",
219
+ /* @__PURE__ */ jsx(Mono, { children: node.ruleName })
220
+ ] })
221
+ ] }) }) : /* @__PURE__ */ jsx(Section, { title: "Linters", children: /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
222
+ stats.map(({ linter, count }) => /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-sm", children: [
223
+ /* @__PURE__ */ jsx(Mono, { children: linter }),
224
+ /* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground", children: [
225
+ count,
226
+ " violations"
227
+ ] })
228
+ ] }, linter)),
229
+ stats.length === 0 && /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: "No violations found under this folder." })
230
+ ] }) })
231
+ ] });
232
+ }
233
+ function FileDetail({ node, actions, ...ignore }) {
234
+ const violations = node.violations ?? [];
235
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
236
+ /* @__PURE__ */ jsx(Section, { title: "File", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
237
+ /* @__PURE__ */ jsx(Mono, { children: node.file }),
238
+ violations.length > 0 && /* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground", children: [
239
+ "(",
240
+ violations.length,
241
+ " violations)"
242
+ ] })
243
+ ] }) }),
244
+ /* @__PURE__ */ jsx(ActionList, { actions, ...ignore }),
245
+ violations.length > 0 && /* @__PURE__ */ jsx(Section, { title: "Violations", children: /* @__PURE__ */ jsx("div", { className: "space-y-2", children: violations.map((v, i) => /* @__PURE__ */ jsx(
246
+ ViolationCard,
247
+ {
248
+ violation: v,
249
+ linter: node.linterName ?? "",
250
+ file: node.target_path || node.file || "",
251
+ workDir: node.work_dir ?? "",
252
+ ...ignore
253
+ },
254
+ i
255
+ )) }) })
256
+ ] });
257
+ }
258
+ function RuleDetail({ node, actions, ...ignore }) {
259
+ const violations = node.violations ?? [];
260
+ const linter = node.linterName ?? "";
261
+ const workDir = node.work_dir ?? "";
262
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
263
+ /* @__PURE__ */ jsxs(Section, { title: "Rule", children: [
264
+ /* @__PURE__ */ jsx(Mono, { children: node.ruleName }),
265
+ /* @__PURE__ */ jsxs("span", { className: "ml-2 text-xs text-muted-foreground", children: [
266
+ "(",
267
+ lintNodeCount(node),
268
+ " violations)"
269
+ ] })
270
+ ] }),
271
+ node.file && /* @__PURE__ */ jsx(Section, { title: "File", children: /* @__PURE__ */ jsx(Mono, { children: node.file }) }),
272
+ /* @__PURE__ */ jsx(ActionList, { actions, ...ignore }),
273
+ violations.length > 0 && /* @__PURE__ */ jsx(Section, { title: "Violations", children: /* @__PURE__ */ jsx("div", { className: "space-y-2", children: violations.map((v, i) => /* @__PURE__ */ jsx(
274
+ ViolationCard,
275
+ {
276
+ violation: v,
277
+ linter,
278
+ file: v.raw_file || node.target_path || node.file || "",
279
+ workDir,
280
+ showFile: !node.file,
281
+ ...ignore
282
+ },
283
+ i
284
+ )) }) }),
285
+ /* @__PURE__ */ jsx(NoFileViolations, { violations: node.noFileViolations ?? [], linter, workDir })
286
+ ] });
287
+ }
288
+ const KIND_LABEL = {
289
+ linter: "Linter",
290
+ "lint-folder": "Folder",
291
+ "lint-file": "File",
292
+ "lint-rule": "Rule",
293
+ "lint-rule-group": "Rule",
294
+ "linter-error": "Linter error"
295
+ };
296
+ function DetailHeader({ node }) {
297
+ const count = node.kind === "linter-error" ? 0 : lintNodeCount(node);
298
+ return /* @__PURE__ */ jsxs(
299
+ "div",
300
+ {
301
+ className: "flex min-w-0 items-center gap-2 border-b border-border px-density-4 py-density-2",
302
+ "data-detail-header": "",
303
+ children: [
304
+ node.kind === "linter" ? /* @__PURE__ */ jsx(ToolIcon, { tool: node.linterName, className: "text-lg" }) : node.kind === "linter-error" ? /* @__PURE__ */ jsx(LintSeverityIcon, { severity: "error", className: "text-lg" }) : null,
305
+ /* @__PURE__ */ jsx("h2", { className: "min-w-0 shrink truncate text-base font-semibold", title: node.name, children: node.name }),
306
+ /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0 items-center rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground", children: KIND_LABEL[node.kind] }),
307
+ count > 0 && /* @__PURE__ */ jsxs("span", { className: "shrink-0 text-xs text-muted-foreground", children: [
308
+ count,
309
+ " violation",
310
+ count === 1 ? "" : "s"
311
+ ] })
312
+ ]
313
+ }
314
+ );
315
+ }
316
+ function LintDetailPanel({ node, results, onIgnore, ignoreBusy }) {
317
+ if (!node) {
318
+ return /* @__PURE__ */ jsx("div", { className: "flex h-full items-center justify-center text-sm text-muted-foreground", children: /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
319
+ /* @__PURE__ */ jsx(Icon, { icon: UiListChecks, className: "mb-2 block text-4xl" }),
320
+ "Select a linter, rule or file to view its findings."
321
+ ] }) });
322
+ }
323
+ const ignore = { onIgnore, ignoreBusy };
324
+ const actions = lintNodeActions(node, results);
325
+ return /* @__PURE__ */ jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [
326
+ /* @__PURE__ */ jsx(DetailHeader, { node }),
327
+ /* @__PURE__ */ jsxs("div", { className: "min-h-0 flex-1 space-y-4 overflow-y-auto p-density-4", children: [
328
+ node.kind === "linter" && /* @__PURE__ */ jsx(LinterDetail, { node, actions, ...ignore }),
329
+ node.kind === "linter-error" && /* @__PURE__ */ jsx(LinterErrorDetail, { node }),
330
+ node.kind === "lint-folder" && /* @__PURE__ */ jsx(FolderDetail, { node, results, actions, ...ignore }),
331
+ node.kind === "lint-file" && /* @__PURE__ */ jsx(FileDetail, { node, actions, ...ignore }),
332
+ (node.kind === "lint-rule" || node.kind === "lint-rule-group") && /* @__PURE__ */ jsx(RuleDetail, { node, actions, ...ignore })
333
+ ] })
334
+ ] });
335
+ }
336
+ export {
337
+ LintDetailPanel
338
+ };
339
+ //# sourceMappingURL=LintDetail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LintDetail.js","sources":["../../../src/data/lint/LintDetail.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { Icon } from \"../Icon\";\nimport { cn } from \"../../lib/utils\";\nimport { UiEyeClosed, UiListChecks } from \"../../icons\";\nimport { LintSeverityIcon, ToolIcon } from \"../test-runner/MarkIcons\";\nimport { formatTestDuration } from \"../test-runner/status\";\nimport {\n collectFolderLintStats,\n folderPattern,\n lintNodeActions,\n violationIgnoreAction,\n} from \"./actions\";\nimport { isLinterErrored, lintNodeCount, severityOf } from \"./stats\";\nimport type { LintAction, LintNode, LinterResult, Violation } from \"./types\";\n\ntype IgnoreProps = {\n onIgnore?: ((action: LintAction) => void | Promise<void>) | undefined;\n ignoreBusy?: boolean | undefined;\n};\n\nfunction Section({ title, children }: { title: string; children: ReactNode }) {\n return (\n <section className=\"space-y-1.5\">\n <h3 className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">{title}</h3>\n {children}\n </section>\n );\n}\n\nfunction Mono({ children, className }: { children: ReactNode; className?: string }) {\n return <span className={cn(\"break-all font-mono text-sm\", className)}>{children}</span>;\n}\n\nfunction Pre({ children, tone }: { children: ReactNode; tone?: \"error\" }) {\n return (\n <pre\n className={cn(\n \"max-h-80 overflow-auto whitespace-pre-wrap break-words rounded bg-muted p-3 font-mono text-xs\",\n tone === \"error\" && \"bg-red-500/10 text-red-700 dark:text-red-300\",\n )}\n >\n {children}\n </pre>\n );\n}\n\nfunction IgnoreButton({\n action,\n onIgnore,\n disabled,\n}: {\n action: LintAction;\n onIgnore: (action: LintAction) => void | Promise<void>;\n disabled: boolean;\n}) {\n const subtle = action.variant === \"subtle\";\n return (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n className={cn(\n \"h-6 gap-1 px-2 text-xs\",\n subtle\n ? \"text-muted-foreground\"\n : \"border-amber-500/50 bg-amber-500/10 text-amber-800 hover:bg-amber-500/20 dark:text-amber-300\",\n )}\n title={action.title}\n disabled={disabled}\n onClick={(event) => {\n event.stopPropagation();\n void onIgnore(action);\n }}\n >\n <Icon icon={UiEyeClosed} className=\"text-xs\" />\n {action.label}\n </Button>\n );\n}\n\nfunction ActionList({ actions, onIgnore, ignoreBusy }: IgnoreProps & { actions: LintAction[] }) {\n if (!onIgnore || actions.length === 0) return null;\n return (\n <Section title=\"Actions\">\n <div className=\"flex flex-wrap gap-1.5\">\n {actions.map((action) => (\n <IgnoreButton\n key={action.key}\n action={action}\n onIgnore={onIgnore}\n disabled={Boolean(ignoreBusy) || (Boolean(action.disabledWithoutWorkDir) && !action.req.work_dir)}\n />\n ))}\n </div>\n </Section>\n );\n}\n\nfunction violationLocation(v: Violation, withFile: boolean): string {\n const position = `:${v.line ?? 0}${v.column ? `:${v.column}` : \"\"}`;\n return withFile && v.file ? `${v.file}${position}` : position;\n}\n\nfunction ViolationCard({\n violation,\n linter,\n file,\n workDir,\n showFile,\n onIgnore,\n ignoreBusy,\n}: IgnoreProps & {\n violation: Violation;\n linter: string;\n /** The file an ignore rule targets; empty when the violation has none. */\n file: string;\n workDir: string;\n showFile?: boolean;\n}) {\n const rule = violation.rule?.method ?? \"\";\n const ignore = onIgnore ? violationIgnoreAction({ violation, linter, file, workDir }) : null;\n return (\n <div className=\"rounded border border-border bg-card p-2\" data-lint-violation=\"\">\n <div className=\"flex items-start gap-2\">\n <LintSeverityIcon severity={severityOf(violation)} className=\"mt-0.5 text-base\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2 font-mono text-xs text-muted-foreground\">\n <span>{violationLocation(violation, Boolean(showFile))}</span>\n {rule && <span className=\"text-foreground\">[{rule}]</span>}\n </div>\n {violation.message && (\n <div className=\"mt-0.5 whitespace-pre-wrap text-sm\">{violation.message}</div>\n )}\n {violation.code && (\n <pre className=\"mt-1 overflow-x-auto rounded bg-muted p-2 font-mono text-xs\">{violation.code}</pre>\n )}\n {ignore && onIgnore && (\n <div className=\"mt-1.5\">\n <IgnoreButton action={ignore} onIgnore={onIgnore} disabled={Boolean(ignoreBusy)} />\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nfunction groupViolationsByRule(violations: readonly Violation[]): Array<{ rule: string; violations: Violation[] }> {\n const grouped = new Map<string, Violation[]>();\n for (const v of violations) {\n const key = v.rule?.method || \"(no rule)\";\n grouped.set(key, [...(grouped.get(key) ?? []), v]);\n }\n return Array.from(grouped.keys())\n .sort()\n .map((rule) => ({\n rule,\n violations: grouped.get(rule)!.slice().sort((a, b) => (a.line ?? 0) - (b.line ?? 0)),\n }));\n}\n\nfunction shellQuote(s: string): string {\n if (s === \"\") return \"''\";\n return /^[A-Za-z0-9_./:=@%+,-]+$/.test(s) ? s : `'${s.replace(/'/g, `'\\\\''`)}'`;\n}\n\n/** The executed argv, quoted so the line can be pasted into a terminal. */\nfunction formatLinterCommand(result: LinterResult): string {\n return result.command ? [result.command, ...(result.args ?? [])].map(shellQuote).join(\" \") : \"\";\n}\n\nfunction ResultStatus({ result }: { result: LinterResult }) {\n const [label, tone] = result.skipped\n ? [\"skipped\", \"text-muted-foreground\"]\n : result.timed_out\n ? [\"timed out\", \"text-amber-600 dark:text-amber-400\"]\n : isLinterErrored(result)\n ? [\"failed\", \"text-red-600 dark:text-red-400\"]\n : [\"ran\", \"text-emerald-600 dark:text-emerald-400\"];\n const count = (result.violations ?? []).length;\n return (\n <div className=\"flex flex-wrap gap-3 text-sm\">\n <span className={tone}>{label}</span>\n <span className=\"text-muted-foreground\">\n {count} violation{count === 1 ? \"\" : \"s\"}\n </span>\n {result.file_count !== undefined && <span className=\"text-muted-foreground\">{result.file_count} files</span>}\n {result.rule_count !== undefined && <span className=\"text-muted-foreground\">{result.rule_count} rules</span>}\n {result.duration ? (\n <span className=\"text-muted-foreground\">{formatTestDuration(result.duration)}</span>\n ) : null}\n </div>\n );\n}\n\nfunction ResultDetails({ result, workDir }: { result: LinterResult; workDir: string }) {\n return (\n <>\n <Section title=\"Status\">\n <ResultStatus result={result} />\n </Section>\n {result.command && (\n <Section title=\"Command\">\n <Pre>{formatLinterCommand(result)}</Pre>\n {workDir && <div className=\"font-mono text-xs text-muted-foreground\">cwd: {workDir}</div>}\n </Section>\n )}\n </>\n );\n}\n\nfunction NoFileViolations({\n violations,\n linter,\n workDir,\n}: {\n violations: readonly Violation[];\n linter: string;\n workDir: string;\n}) {\n if (violations.length === 0) return null;\n return (\n <Section title=\"Violations Without File\">\n <div className=\"space-y-3\">\n {groupViolationsByRule(violations).map(({ rule, violations: group }) => (\n <div key={rule} className=\"space-y-2 rounded border border-border bg-muted/40 p-3\">\n <div className=\"font-mono text-sm\">\n {rule} <span className=\"text-xs text-muted-foreground\">({group.length})</span>\n </div>\n {group.map((v, i) => (\n <ViolationCard key={i} violation={v} linter={linter} file=\"\" workDir={workDir} />\n ))}\n </div>\n ))}\n </div>\n </Section>\n );\n}\n\nfunction LinterDetail({ node, actions, ...ignore }: IgnoreProps & { node: LintNode; actions: LintAction[] }) {\n const result = node.linter;\n const linter = node.linterName ?? result?.linter ?? \"\";\n const workDir = node.work_dir ?? result?.work_dir ?? \"\";\n return (\n <>\n {result && <ResultDetails result={result} workDir={workDir} />}\n <ActionList actions={actions} {...ignore} />\n {result?.error && (\n <Section title=\"Error\">\n <Pre tone=\"error\">{result.error}</Pre>\n </Section>\n )}\n {result?.raw_output && (\n <Section title=\"Raw output\">\n <Pre>{result.raw_output}</Pre>\n </Section>\n )}\n <NoFileViolations violations={node.noFileViolations ?? []} linter={linter} workDir={workDir} />\n </>\n );\n}\n\nfunction LinterErrorDetail({ node }: { node: LintNode }) {\n const result = node.linter;\n return (\n <>\n <Section title=\"Error\">\n <Pre tone=\"error\">{node.message}</Pre>\n </Section>\n {result && <ResultDetails result={result} workDir={result.work_dir ?? \"\"} />}\n {result?.raw_output && (\n <Section title=\"Raw output\">\n <Pre>{result.raw_output}</Pre>\n </Section>\n )}\n </>\n );\n}\n\nfunction FolderDetail({\n node,\n results,\n actions,\n ...ignore\n}: IgnoreProps & { node: LintNode; results: readonly LinterResult[]; actions: LintAction[] }) {\n const stats = node.ruleName\n ? []\n : collectFolderLintStats(node, results).filter((s) => !node.linterName || s.linter === node.linterName);\n return (\n <>\n <Section title=\"Folder\">\n <div className=\"flex items-center gap-2\">\n <Mono>{node.file || node.name}</Mono>\n {node.target_path !== undefined && (\n <span className=\"text-xs text-muted-foreground\">{folderPattern(node.target_path)}</span>\n )}\n </div>\n </Section>\n <ActionList actions={actions} {...ignore} />\n {node.ruleName ? (\n <Section title=\"Scope\">\n <div className=\"space-y-1 text-sm\">\n <div>\n <span className=\"text-muted-foreground\">Linter:</span> <Mono>{node.linterName}</Mono>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Rule:</span> <Mono>{node.ruleName}</Mono>\n </div>\n </div>\n </Section>\n ) : (\n <Section title=\"Linters\">\n <div className=\"space-y-1\">\n {stats.map(({ linter, count }) => (\n <div key={linter} className=\"flex items-center justify-between text-sm\">\n <Mono>{linter}</Mono>\n <span className=\"text-xs text-muted-foreground\">{count} violations</span>\n </div>\n ))}\n {stats.length === 0 && (\n <div className=\"text-sm text-muted-foreground\">No violations found under this folder.</div>\n )}\n </div>\n </Section>\n )}\n </>\n );\n}\n\nfunction FileDetail({ node, actions, ...ignore }: IgnoreProps & { node: LintNode; actions: LintAction[] }) {\n const violations = node.violations ?? [];\n return (\n <>\n <Section title=\"File\">\n <div className=\"flex items-center gap-2\">\n <Mono>{node.file}</Mono>\n {violations.length > 0 && (\n <span className=\"text-xs text-muted-foreground\">({violations.length} violations)</span>\n )}\n </div>\n </Section>\n <ActionList actions={actions} {...ignore} />\n {violations.length > 0 && (\n <Section title=\"Violations\">\n <div className=\"space-y-2\">\n {violations.map((v, i) => (\n <ViolationCard\n key={i}\n violation={v}\n linter={node.linterName ?? \"\"}\n file={node.target_path || node.file || \"\"}\n workDir={node.work_dir ?? \"\"}\n {...ignore}\n />\n ))}\n </div>\n </Section>\n )}\n </>\n );\n}\n\nfunction RuleDetail({ node, actions, ...ignore }: IgnoreProps & { node: LintNode; actions: LintAction[] }) {\n const violations = node.violations ?? [];\n const linter = node.linterName ?? \"\";\n const workDir = node.work_dir ?? \"\";\n return (\n <>\n <Section title=\"Rule\">\n <Mono>{node.ruleName}</Mono>\n <span className=\"ml-2 text-xs text-muted-foreground\">({lintNodeCount(node)} violations)</span>\n </Section>\n {node.file && (\n <Section title=\"File\">\n <Mono>{node.file}</Mono>\n </Section>\n )}\n <ActionList actions={actions} {...ignore} />\n {violations.length > 0 && (\n <Section title=\"Violations\">\n <div className=\"space-y-2\">\n {violations.map((v, i) => (\n <ViolationCard\n key={i}\n violation={v}\n linter={linter}\n file={v.raw_file || node.target_path || node.file || \"\"}\n workDir={workDir}\n showFile={!node.file}\n {...ignore}\n />\n ))}\n </div>\n </Section>\n )}\n <NoFileViolations violations={node.noFileViolations ?? []} linter={linter} workDir={workDir} />\n </>\n );\n}\n\nconst KIND_LABEL: Record<LintNode[\"kind\"], string> = {\n linter: \"Linter\",\n \"lint-folder\": \"Folder\",\n \"lint-file\": \"File\",\n \"lint-rule\": \"Rule\",\n \"lint-rule-group\": \"Rule\",\n \"linter-error\": \"Linter error\",\n};\n\nfunction DetailHeader({ node }: { node: LintNode }) {\n const count = node.kind === \"linter-error\" ? 0 : lintNodeCount(node);\n return (\n <div\n className=\"flex min-w-0 items-center gap-2 border-b border-border px-density-4 py-density-2\"\n data-detail-header=\"\"\n >\n {node.kind === \"linter\" ? (\n <ToolIcon tool={node.linterName} className=\"text-lg\" />\n ) : node.kind === \"linter-error\" ? (\n <LintSeverityIcon severity=\"error\" className=\"text-lg\" />\n ) : null}\n <h2 className=\"min-w-0 shrink truncate text-base font-semibold\" title={node.name}>\n {node.name}\n </h2>\n <span className=\"inline-flex shrink-0 items-center rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground\">\n {KIND_LABEL[node.kind]}\n </span>\n {count > 0 && (\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {count} violation{count === 1 ? \"\" : \"s\"}\n </span>\n )}\n </div>\n );\n}\n\nexport type LintDetailPanelProps = IgnoreProps & {\n node: LintNode | null;\n /** All results, for the folder summary and for folder-scoped ignore actions. */\n results: readonly LinterResult[];\n};\n\n/**\n * The right pane for a lint node: what it covers, the findings beneath it and,\n * when the host provides `onIgnore`, the ignore actions that fit its scope.\n */\nexport function LintDetailPanel({ node, results, onIgnore, ignoreBusy }: LintDetailPanelProps) {\n if (!node) {\n return (\n <div className=\"flex h-full items-center justify-center text-sm text-muted-foreground\">\n <div className=\"text-center\">\n <Icon icon={UiListChecks} className=\"mb-2 block text-4xl\" />\n Select a linter, rule or file to view its findings.\n </div>\n </div>\n );\n }\n const ignore = { onIgnore, ignoreBusy };\n const actions = lintNodeActions(node, results);\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n <DetailHeader node={node} />\n <div className=\"min-h-0 flex-1 space-y-4 overflow-y-auto p-density-4\">\n {node.kind === \"linter\" && <LinterDetail node={node} actions={actions} {...ignore} />}\n {node.kind === \"linter-error\" && <LinterErrorDetail node={node} />}\n {node.kind === \"lint-folder\" && <FolderDetail node={node} results={results} actions={actions} {...ignore} />}\n {node.kind === \"lint-file\" && <FileDetail node={node} actions={actions} {...ignore} />}\n {(node.kind === \"lint-rule\" || node.kind === \"lint-rule-group\") && (\n <RuleDetail node={node} actions={actions} {...ignore} />\n )}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const utils = require("../../lib/utils.cjs");
5
+ const FilterPill = require("../FilterPill.cjs");
6
+ const groupingOptions = require("./grouping-options.cjs");
7
+ const filterState = require("../test-runner/filterState.cjs");
8
+ const marks = require("../test-runner/marks.cjs");
9
+ const MarkIcons = require("../test-runner/MarkIcons.cjs");
10
+ const status = require("../test-runner/status.cjs");
11
+ const stats = require("./stats.cjs");
12
+ const SEVERITY_ORDER = ["error", "warning", "info"];
13
+ const SEVERITY_BADGE = {
14
+ error: "bg-red-600",
15
+ warning: "bg-amber-600",
16
+ info: "bg-sky-600"
17
+ };
18
+ function triStateTitle(label, mode) {
19
+ if (mode === "include") return `${label}: included. Click to exclude`;
20
+ if (mode === "exclude") return `${label}: excluded. Click to clear`;
21
+ return `${label}: neutral. Click to include`;
22
+ }
23
+ function LintFilterBar({
24
+ results,
25
+ grouping,
26
+ onGroupingChange,
27
+ filters,
28
+ onFiltersChange,
29
+ className
30
+ }) {
31
+ const severityCounts = stats.countLintBySeverity(results, filters.linter);
32
+ const linterCounts = stats.countLintByLinter(results, filters.severity);
33
+ const linters = stats.collectLintLinters(results);
34
+ const hasActive = filters.severity.size > 0 || filters.linter.size > 0;
35
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("flex flex-wrap items-center gap-1.5", className), "data-lint-filter-bar": "", children: [
36
+ /* @__PURE__ */ jsxRuntime.jsx("div", { role: "group", "aria-label": "Group by", className: "flex flex-wrap items-center gap-1.5", children: groupingOptions.LINT_GROUPING_OPTIONS.map((opt) => /* @__PURE__ */ jsxRuntime.jsx(
37
+ FilterPill.FilterPill,
38
+ {
39
+ mode: opt.key === grouping ? "active" : "neutral",
40
+ label: opt.label,
41
+ icon: opt.icon,
42
+ title: `Group by ${opt.label}`,
43
+ onClick: () => onGroupingChange(opt.key)
44
+ },
45
+ opt.key
46
+ )) }),
47
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mx-0.5 text-border", "aria-hidden": true, children: "|" }),
48
+ SEVERITY_ORDER.map((severity) => {
49
+ const count = severityCounts[severity];
50
+ if (count === 0 && filters.severity.size === 0) return null;
51
+ const mode = filters.severity.get(severity);
52
+ const label = marks.LINT_SEVERITIES[severity].label;
53
+ return /* @__PURE__ */ jsxRuntime.jsx(
54
+ FilterPill.FilterPill,
55
+ {
56
+ mode: mode ?? "neutral",
57
+ count,
58
+ badge: SEVERITY_BADGE[severity],
59
+ label: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1", children: [
60
+ /* @__PURE__ */ jsxRuntime.jsx(MarkIcons.LintSeverityIcon, { severity }),
61
+ label
62
+ ] }),
63
+ title: triStateTitle(label, mode),
64
+ onClick: () => onFiltersChange({ ...filters, severity: filterState.cycleFilterState(filters.severity, severity) })
65
+ },
66
+ severity
67
+ );
68
+ }),
69
+ linters.length > 1 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
70
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mx-0.5 text-border", "aria-hidden": true, children: "|" }),
71
+ linters.map((linter) => {
72
+ var _a;
73
+ const mode = filters.linter.get(linter);
74
+ const name = ((_a = marks.toolMark(linter)) == null ? void 0 : _a.label) ?? linter;
75
+ return /* @__PURE__ */ jsxRuntime.jsx(
76
+ FilterPill.FilterPill,
77
+ {
78
+ mode: mode ?? "neutral",
79
+ label: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1", children: [
80
+ /* @__PURE__ */ jsxRuntime.jsx(MarkIcons.ToolIcon, { tool: linter }),
81
+ name,
82
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] tabular-nums opacity-70", title: String(linterCounts[linter] ?? 0), children: status.formatCount(linterCounts[linter] ?? 0) })
83
+ ] }),
84
+ title: triStateTitle(linter, mode),
85
+ onClick: () => onFiltersChange({ ...filters, linter: filterState.cycleFilterState(filters.linter, linter) })
86
+ },
87
+ linter
88
+ );
89
+ })
90
+ ] }),
91
+ hasActive && /* @__PURE__ */ jsxRuntime.jsx(
92
+ "button",
93
+ {
94
+ type: "button",
95
+ className: "ml-1 inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
96
+ onClick: () => onFiltersChange({ severity: /* @__PURE__ */ new Map(), linter: /* @__PURE__ */ new Map() }),
97
+ children: "Clear"
98
+ }
99
+ )
100
+ ] });
101
+ }
102
+ exports.LintFilterBar = LintFilterBar;
103
+ //# sourceMappingURL=LintFilterBar.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LintFilterBar.cjs","sources":["../../../src/data/lint/LintFilterBar.tsx"],"sourcesContent":["import { cn } from \"../../lib/utils\";\nimport { FilterPill } from \"../FilterPill\";\nimport { LINT_GROUPING_OPTIONS } from \"./grouping-options\";\nimport { cycleFilterState, type FilterMode } from \"../test-runner/filterState\";\nimport { LINT_SEVERITIES, toolMark } from \"../test-runner/marks\";\nimport { LintSeverityIcon, ToolIcon } from \"../test-runner/MarkIcons\";\nimport { formatCount } from \"../test-runner/status\";\nimport { collectLintLinters, countLintByLinter, countLintBySeverity } from \"./stats\";\nimport type { LintFilters, LintGrouping, LintSeverity, LinterResult } from \"./types\";\n\nexport type LintFilterBarProps = {\n results: readonly LinterResult[];\n grouping: LintGrouping;\n onGroupingChange: (next: LintGrouping) => void;\n filters: LintFilters;\n onFiltersChange: (next: LintFilters) => void;\n className?: string;\n};\n\nconst SEVERITY_ORDER: readonly LintSeverity[] = [\"error\", \"warning\", \"info\"];\n\nconst SEVERITY_BADGE: Record<LintSeverity, string> = {\n error: \"bg-red-600\",\n warning: \"bg-amber-600\",\n info: \"bg-sky-600\",\n};\n\nfunction triStateTitle(label: string, mode: FilterMode | undefined): string {\n if (mode === \"include\") return `${label}: included. Click to exclude`;\n if (mode === \"exclude\") return `${label}: excluded. Click to clear`;\n return `${label}: neutral. Click to include`;\n}\n\n/**\n * Grouping picker plus tri-state severity and linter filters for the lint\n * tree. Controlled: the host owns grouping and filters (typically in the URL).\n * Counts follow the other filter, so each pill shows what picking it would leave.\n */\nexport function LintFilterBar({\n results,\n grouping,\n onGroupingChange,\n filters,\n onFiltersChange,\n className,\n}: LintFilterBarProps) {\n const severityCounts = countLintBySeverity(results, filters.linter);\n const linterCounts = countLintByLinter(results, filters.severity);\n const linters = collectLintLinters(results);\n const hasActive = filters.severity.size > 0 || filters.linter.size > 0;\n\n return (\n <div className={cn(\"flex flex-wrap items-center gap-1.5\", className)} data-lint-filter-bar=\"\">\n <div role=\"group\" aria-label=\"Group by\" className=\"flex flex-wrap items-center gap-1.5\">\n {LINT_GROUPING_OPTIONS.map((opt) => (\n <FilterPill\n key={opt.key}\n mode={opt.key === grouping ? \"active\" : \"neutral\"}\n label={opt.label}\n icon={opt.icon}\n title={`Group by ${opt.label}`}\n onClick={() => onGroupingChange(opt.key)}\n />\n ))}\n </div>\n\n <span className=\"mx-0.5 text-border\" aria-hidden>\n |\n </span>\n\n {SEVERITY_ORDER.map((severity) => {\n const count = severityCounts[severity];\n if (count === 0 && filters.severity.size === 0) return null;\n const mode = filters.severity.get(severity);\n const label = LINT_SEVERITIES[severity].label;\n return (\n <FilterPill\n key={severity}\n mode={mode ?? \"neutral\"}\n count={count}\n badge={SEVERITY_BADGE[severity]}\n label={\n <span className=\"inline-flex items-center gap-1\">\n <LintSeverityIcon severity={severity} />\n {label}\n </span>\n }\n title={triStateTitle(label, mode)}\n onClick={() =>\n onFiltersChange({ ...filters, severity: cycleFilterState(filters.severity, severity) })\n }\n />\n );\n })}\n\n {linters.length > 1 && (\n <>\n <span className=\"mx-0.5 text-border\" aria-hidden>\n |\n </span>\n {linters.map((linter) => {\n const mode = filters.linter.get(linter);\n const name = toolMark(linter)?.label ?? linter;\n return (\n <FilterPill\n key={linter}\n mode={mode ?? \"neutral\"}\n label={\n <span className=\"inline-flex items-center gap-1\">\n <ToolIcon tool={linter} />\n {name}\n <span className=\"text-[10px] tabular-nums opacity-70\" title={String(linterCounts[linter] ?? 0)}>\n {formatCount(linterCounts[linter] ?? 0)}\n </span>\n </span>\n }\n title={triStateTitle(linter, mode)}\n onClick={() =>\n onFiltersChange({ ...filters, linter: cycleFilterState(filters.linter, linter) })\n }\n />\n );\n })}\n </>\n )}\n\n {hasActive && (\n <button\n type=\"button\"\n className=\"ml-1 inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n onClick={() => onFiltersChange({ severity: new Map(), linter: new Map() })}\n >\n Clear\n </button>\n )}\n </div>\n );\n}\n"],"names":["countLintBySeverity","countLintByLinter","collectLintLinters","jsxs","cn","jsx","LINT_GROUPING_OPTIONS","FilterPill","LINT_SEVERITIES","LintSeverityIcon","cycleFilterState","Fragment","toolMark","ToolIcon","formatCount"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { LintFilters, LintGrouping, LinterResult } from './types.js';
2
+ export type LintFilterBarProps = {
3
+ results: readonly LinterResult[];
4
+ grouping: LintGrouping;
5
+ onGroupingChange: (next: LintGrouping) => void;
6
+ filters: LintFilters;
7
+ onFiltersChange: (next: LintFilters) => void;
8
+ className?: string;
9
+ };
10
+ /**
11
+ * Grouping picker plus tri-state severity and linter filters for the lint
12
+ * tree. Controlled: the host owns grouping and filters (typically in the URL).
13
+ * Counts follow the other filter, so each pill shows what picking it would leave.
14
+ */
15
+ export declare function LintFilterBar({ results, grouping, onGroupingChange, filters, onFiltersChange, className, }: LintFilterBarProps): import("react").JSX.Element;
16
+ //# sourceMappingURL=LintFilterBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LintFilterBar.d.ts","sourceRoot":"","sources":["../../../src/data/lint/LintFilterBar.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAgB,YAAY,EAAE,MAAM,SAAS,CAAC;AAErF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IACjC,QAAQ,EAAE,YAAY,CAAC;IACvB,gBAAgB,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,OAAO,EAAE,WAAW,CAAC;IACrB,eAAe,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAgBF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,QAAQ,EACR,gBAAgB,EAChB,OAAO,EACP,eAAe,EACf,SAAS,GACV,EAAE,kBAAkB,+BA4FpB"}