@flanksource/clicky-ui 0.3.54 → 0.3.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (999) hide show
  1. package/NOTICE.md +6 -0
  2. package/dist/ai.cjs +6 -0
  3. package/dist/ai.js +3 -1
  4. package/dist/chat.cjs +2 -0
  5. package/dist/chat.d.ts +1 -0
  6. package/dist/chat.d.ts.map +1 -1
  7. package/dist/chat.js +2 -1
  8. package/dist/comments/CommentCard.cjs +37 -7
  9. package/dist/comments/CommentCard.cjs.map +1 -1
  10. package/dist/comments/CommentCard.d.ts +11 -1
  11. package/dist/comments/CommentCard.d.ts.map +1 -1
  12. package/dist/comments/CommentCard.js +37 -7
  13. package/dist/comments/CommentCard.js.map +1 -1
  14. package/dist/comments/CommentCardParts.cjs +9 -4
  15. package/dist/comments/CommentCardParts.cjs.map +1 -1
  16. package/dist/comments/CommentCardParts.d.ts.map +1 -1
  17. package/dist/comments/CommentCardParts.js +9 -4
  18. package/dist/comments/CommentCardParts.js.map +1 -1
  19. package/dist/comments/CommentComposer.cjs +8 -8
  20. package/dist/comments/CommentComposer.cjs.map +1 -1
  21. package/dist/comments/CommentComposer.d.ts.map +1 -1
  22. package/dist/comments/CommentComposer.js +8 -8
  23. package/dist/comments/CommentComposer.js.map +1 -1
  24. package/dist/comments/CommentProvider.cjs +5 -1
  25. package/dist/comments/CommentProvider.cjs.map +1 -1
  26. package/dist/comments/CommentProvider.d.ts +1 -1
  27. package/dist/comments/CommentProvider.d.ts.map +1 -1
  28. package/dist/comments/CommentProvider.js +5 -1
  29. package/dist/comments/CommentProvider.js.map +1 -1
  30. package/dist/comments/CommentSidePanel.cjs +17 -11
  31. package/dist/comments/CommentSidePanel.cjs.map +1 -1
  32. package/dist/comments/CommentSidePanel.d.ts +6 -0
  33. package/dist/comments/CommentSidePanel.d.ts.map +1 -1
  34. package/dist/comments/CommentSidePanel.js +17 -11
  35. package/dist/comments/CommentSidePanel.js.map +1 -1
  36. package/dist/comments/CommentThread.cjs +4 -1
  37. package/dist/comments/CommentThread.cjs.map +1 -1
  38. package/dist/comments/CommentThread.d.ts +4 -1
  39. package/dist/comments/CommentThread.d.ts.map +1 -1
  40. package/dist/comments/CommentThread.js +4 -1
  41. package/dist/comments/CommentThread.js.map +1 -1
  42. package/dist/comments/CommentThreadList.cjs +6 -3
  43. package/dist/comments/CommentThreadList.cjs.map +1 -1
  44. package/dist/comments/CommentThreadList.d.ts +7 -2
  45. package/dist/comments/CommentThreadList.d.ts.map +1 -1
  46. package/dist/comments/CommentThreadList.js +6 -3
  47. package/dist/comments/CommentThreadList.js.map +1 -1
  48. package/dist/comments/MentionTextarea.cjs +1 -1
  49. package/dist/comments/MentionTextarea.cjs.map +1 -1
  50. package/dist/comments/MentionTextarea.d.ts.map +1 -1
  51. package/dist/comments/MentionTextarea.js +1 -1
  52. package/dist/comments/MentionTextarea.js.map +1 -1
  53. package/dist/comments/comment-assign.cjs +68 -0
  54. package/dist/comments/comment-assign.cjs.map +1 -0
  55. package/dist/comments/comment-assign.d.ts +31 -0
  56. package/dist/comments/comment-assign.d.ts.map +1 -0
  57. package/dist/comments/comment-assign.js +67 -0
  58. package/dist/comments/comment-assign.js.map +1 -0
  59. package/dist/comments/comment-types.cjs.map +1 -1
  60. package/dist/comments/comment-types.d.ts +39 -0
  61. package/dist/comments/comment-types.d.ts.map +1 -1
  62. package/dist/comments/comment-types.js.map +1 -1
  63. package/dist/comments/comment-utils.cjs +2 -0
  64. package/dist/comments/comment-utils.cjs.map +1 -1
  65. package/dist/comments/comment-utils.d.ts +2 -0
  66. package/dist/comments/comment-utils.d.ts.map +1 -1
  67. package/dist/comments/comment-utils.js +2 -0
  68. package/dist/comments/comment-utils.js.map +1 -1
  69. package/dist/comments.cjs +3 -0
  70. package/dist/comments.d.ts +1 -0
  71. package/dist/comments.d.ts.map +1 -1
  72. package/dist/comments.js +2 -1
  73. package/dist/components/ComboboxMenu.cjs +23 -13
  74. package/dist/components/ComboboxMenu.cjs.map +1 -1
  75. package/dist/components/ComboboxMenu.d.ts.map +1 -1
  76. package/dist/components/ComboboxMenu.js +23 -13
  77. package/dist/components/ComboboxMenu.js.map +1 -1
  78. package/dist/components/FilterBar.cjs +29 -6
  79. package/dist/components/FilterBar.cjs.map +1 -1
  80. package/dist/components/FilterBar.d.ts +3 -1
  81. package/dist/components/FilterBar.d.ts.map +1 -1
  82. package/dist/components/FilterBar.js +29 -6
  83. package/dist/components/FilterBar.js.map +1 -1
  84. package/dist/components/ItemActions.cjs +1 -1
  85. package/dist/components/ItemActions.cjs.map +1 -1
  86. package/dist/components/ItemActions.js +1 -1
  87. package/dist/components/ItemActions.js.map +1 -1
  88. package/dist/components/ListMenu.cjs +33 -3
  89. package/dist/components/ListMenu.cjs.map +1 -1
  90. package/dist/components/ListMenu.d.ts +4 -1
  91. package/dist/components/ListMenu.d.ts.map +1 -1
  92. package/dist/components/ListMenu.js +33 -3
  93. package/dist/components/ListMenu.js.map +1 -1
  94. package/dist/components/ListMenuItems.cjs +80 -0
  95. package/dist/components/ListMenuItems.cjs.map +1 -0
  96. package/dist/components/ListMenuItems.d.ts +8 -0
  97. package/dist/components/ListMenuItems.d.ts.map +1 -0
  98. package/dist/components/ListMenuItems.js +80 -0
  99. package/dist/components/ListMenuItems.js.map +1 -0
  100. package/dist/components/LocalPathPicker.cjs +182 -0
  101. package/dist/components/LocalPathPicker.cjs.map +1 -0
  102. package/dist/components/LocalPathPicker.d.ts +11 -0
  103. package/dist/components/LocalPathPicker.d.ts.map +1 -0
  104. package/dist/components/LocalPathPicker.js +182 -0
  105. package/dist/components/LocalPathPicker.js.map +1 -0
  106. package/dist/components/LocalPathTree.cjs +89 -0
  107. package/dist/components/LocalPathTree.cjs.map +1 -0
  108. package/dist/components/LocalPathTree.d.ts +9 -0
  109. package/dist/components/LocalPathTree.d.ts.map +1 -0
  110. package/dist/components/LocalPathTree.js +89 -0
  111. package/dist/components/LocalPathTree.js.map +1 -0
  112. package/dist/components/RangeSlider.cjs +10 -30
  113. package/dist/components/RangeSlider.cjs.map +1 -1
  114. package/dist/components/RangeSlider.d.ts.map +1 -1
  115. package/dist/components/RangeSlider.js +4 -24
  116. package/dist/components/RangeSlider.js.map +1 -1
  117. package/dist/components/Slider.cjs +79 -0
  118. package/dist/components/Slider.cjs.map +1 -0
  119. package/dist/components/Slider.d.ts +23 -0
  120. package/dist/components/Slider.d.ts.map +1 -0
  121. package/dist/components/Slider.js +79 -0
  122. package/dist/components/Slider.js.map +1 -0
  123. package/dist/components/combobox-types.d.ts +4 -1
  124. package/dist/components/combobox-types.d.ts.map +1 -1
  125. package/dist/components/filter-bar-field-utils.cjs +3 -5
  126. package/dist/components/filter-bar-field-utils.cjs.map +1 -1
  127. package/dist/components/filter-bar-field-utils.d.ts.map +1 -1
  128. package/dist/components/filter-bar-field-utils.js +3 -5
  129. package/dist/components/filter-bar-field-utils.js.map +1 -1
  130. package/dist/components/filter-bar-tree-model.cjs +22 -0
  131. package/dist/components/filter-bar-tree-model.cjs.map +1 -0
  132. package/dist/components/filter-bar-tree-model.d.ts +33 -0
  133. package/dist/components/filter-bar-tree-model.d.ts.map +1 -0
  134. package/dist/components/filter-bar-tree-model.js +21 -0
  135. package/dist/components/filter-bar-tree-model.js.map +1 -0
  136. package/dist/components/filter-bar-tree.cjs +84 -0
  137. package/dist/components/filter-bar-tree.cjs.map +1 -0
  138. package/dist/components/filter-bar-tree.d.ts +7 -0
  139. package/dist/components/filter-bar-tree.d.ts.map +1 -0
  140. package/dist/components/filter-bar-tree.js +84 -0
  141. package/dist/components/filter-bar-tree.js.map +1 -0
  142. package/dist/components/json-schema-form-debug-glyph-map.cjs +2 -0
  143. package/dist/components/json-schema-form-debug-glyph-map.cjs.map +1 -1
  144. package/dist/components/json-schema-form-debug-glyph-map.d.ts.map +1 -1
  145. package/dist/components/json-schema-form-debug-glyph-map.js +2 -0
  146. package/dist/components/json-schema-form-debug-glyph-map.js.map +1 -1
  147. package/dist/components/json-schema-form-help-links.cjs +18 -0
  148. package/dist/components/json-schema-form-help-links.cjs.map +1 -0
  149. package/dist/components/json-schema-form-help-links.d.ts +5 -0
  150. package/dist/components/json-schema-form-help-links.d.ts.map +1 -0
  151. package/dist/components/json-schema-form-help-links.js +18 -0
  152. package/dist/components/json-schema-form-help-links.js.map +1 -0
  153. package/dist/components/json-schema-form-help-model.cjs +7 -0
  154. package/dist/components/json-schema-form-help-model.cjs.map +1 -0
  155. package/dist/components/json-schema-form-help-model.d.ts +3 -0
  156. package/dist/components/json-schema-form-help-model.d.ts.map +1 -0
  157. package/dist/components/json-schema-form-help-model.js +7 -0
  158. package/dist/components/json-schema-form-help-model.js.map +1 -0
  159. package/dist/components/json-schema-form-json.cjs +48 -0
  160. package/dist/components/json-schema-form-json.cjs.map +1 -0
  161. package/dist/components/json-schema-form-json.d.ts +7 -0
  162. package/dist/components/json-schema-form-json.d.ts.map +1 -0
  163. package/dist/components/json-schema-form-json.js +48 -0
  164. package/dist/components/json-schema-form-json.js.map +1 -0
  165. package/dist/components/json-schema-form-layout.cjs +7 -5
  166. package/dist/components/json-schema-form-layout.cjs.map +1 -1
  167. package/dist/components/json-schema-form-layout.d.ts +2 -2
  168. package/dist/components/json-schema-form-layout.d.ts.map +1 -1
  169. package/dist/components/json-schema-form-layout.js +7 -5
  170. package/dist/components/json-schema-form-layout.js.map +1 -1
  171. package/dist/components/json-schema-form-object.cjs +2 -13
  172. package/dist/components/json-schema-form-object.cjs.map +1 -1
  173. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  174. package/dist/components/json-schema-form-object.js +2 -13
  175. package/dist/components/json-schema-form-object.js.map +1 -1
  176. package/dist/components/json-schema-form-refs.cjs +1 -1
  177. package/dist/components/json-schema-form-refs.cjs.map +1 -1
  178. package/dist/components/json-schema-form-refs.d.ts.map +1 -1
  179. package/dist/components/json-schema-form-refs.js +1 -1
  180. package/dist/components/json-schema-form-refs.js.map +1 -1
  181. package/dist/components/json-schema-form-render.cjs +20 -6
  182. package/dist/components/json-schema-form-render.cjs.map +1 -1
  183. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  184. package/dist/components/json-schema-form-render.js +20 -6
  185. package/dist/components/json-schema-form-render.js.map +1 -1
  186. package/dist/components/json-schema-form-resolve.cjs +22 -2
  187. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  188. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  189. package/dist/components/json-schema-form-resolve.js +22 -2
  190. package/dist/components/json-schema-form-resolve.js.map +1 -1
  191. package/dist/components/json-schema-form-types.d.ts +5 -1
  192. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  193. package/dist/components/json-schema-form-union-model.cjs +46 -0
  194. package/dist/components/json-schema-form-union-model.cjs.map +1 -0
  195. package/dist/components/json-schema-form-union-model.d.ts +6 -0
  196. package/dist/components/json-schema-form-union-model.d.ts.map +1 -0
  197. package/dist/components/json-schema-form-union-model.js +43 -0
  198. package/dist/components/json-schema-form-union-model.js.map +1 -0
  199. package/dist/components/json-schema-form-union.cjs +52 -0
  200. package/dist/components/json-schema-form-union.cjs.map +1 -0
  201. package/dist/components/json-schema-form-union.d.ts +7 -0
  202. package/dist/components/json-schema-form-union.d.ts.map +1 -0
  203. package/dist/components/json-schema-form-union.js +52 -0
  204. package/dist/components/json-schema-form-union.js.map +1 -0
  205. package/dist/components/list-menu-virtual.cjs +5 -0
  206. package/dist/components/list-menu-virtual.cjs.map +1 -0
  207. package/dist/components/list-menu-virtual.d.ts +12 -0
  208. package/dist/components/list-menu-virtual.d.ts.map +1 -0
  209. package/dist/components/list-menu-virtual.js +6 -0
  210. package/dist/components/list-menu-virtual.js.map +1 -0
  211. package/dist/components/local-path.cjs +12 -0
  212. package/dist/components/local-path.cjs.map +1 -0
  213. package/dist/components/local-path.d.ts +14 -0
  214. package/dist/components/local-path.d.ts.map +1 -0
  215. package/dist/components/local-path.js +12 -0
  216. package/dist/components/local-path.js.map +1 -0
  217. package/dist/components/slider-shared.cjs +32 -0
  218. package/dist/components/slider-shared.cjs.map +1 -0
  219. package/dist/components/slider-shared.d.ts +18 -0
  220. package/dist/components/slider-shared.d.ts.map +1 -0
  221. package/dist/components/slider-shared.js +27 -0
  222. package/dist/components/slider-shared.js.map +1 -0
  223. package/dist/components.cjs +8 -0
  224. package/dist/components.d.ts +6 -1
  225. package/dist/components.d.ts.map +1 -1
  226. package/dist/components.js +5 -1
  227. package/dist/connections/ConnectionsPage.cjs +51 -19
  228. package/dist/connections/ConnectionsPage.cjs.map +1 -1
  229. package/dist/connections/ConnectionsPage.d.ts +9 -1
  230. package/dist/connections/ConnectionsPage.d.ts.map +1 -1
  231. package/dist/connections/ConnectionsPage.js +52 -20
  232. package/dist/connections/ConnectionsPage.js.map +1 -1
  233. package/dist/connections/connectionDashboard.cjs +13 -8
  234. package/dist/connections/connectionDashboard.cjs.map +1 -1
  235. package/dist/connections/connectionDashboard.d.ts +8 -3
  236. package/dist/connections/connectionDashboard.d.ts.map +1 -1
  237. package/dist/connections/connectionDashboard.js +14 -9
  238. package/dist/connections/connectionDashboard.js.map +1 -1
  239. package/dist/connections/connectionDashboardModel.cjs.map +1 -1
  240. package/dist/connections/connectionDashboardModel.d.ts +4 -0
  241. package/dist/connections/connectionDashboardModel.d.ts.map +1 -1
  242. package/dist/connections/connectionDashboardModel.js.map +1 -1
  243. package/dist/connections/connectionDashboardRow.cjs +75 -55
  244. package/dist/connections/connectionDashboardRow.cjs.map +1 -1
  245. package/dist/connections/connectionDashboardRow.d.ts +3 -2
  246. package/dist/connections/connectionDashboardRow.d.ts.map +1 -1
  247. package/dist/connections/connectionDashboardRow.js +75 -55
  248. package/dist/connections/connectionDashboardRow.js.map +1 -1
  249. package/dist/connections/connectionNamespaceField.cjs +17 -0
  250. package/dist/connections/connectionNamespaceField.cjs.map +1 -0
  251. package/dist/connections/connectionNamespaceField.d.ts +10 -0
  252. package/dist/connections/connectionNamespaceField.d.ts.map +1 -0
  253. package/dist/connections/connectionNamespaceField.js +17 -0
  254. package/dist/connections/connectionNamespaceField.js.map +1 -0
  255. package/dist/connections/connectionSchemaFormExtensions.cjs +98 -0
  256. package/dist/connections/connectionSchemaFormExtensions.cjs.map +1 -0
  257. package/dist/connections/connectionSchemaFormExtensions.d.ts +41 -0
  258. package/dist/connections/connectionSchemaFormExtensions.d.ts.map +1 -0
  259. package/dist/connections/connectionSchemaFormExtensions.js +96 -0
  260. package/dist/connections/connectionSchemaFormExtensions.js.map +1 -0
  261. package/dist/connections/connectionsPageModel.cjs +11 -0
  262. package/dist/connections/connectionsPageModel.cjs.map +1 -1
  263. package/dist/connections/connectionsPageModel.d.ts +5 -0
  264. package/dist/connections/connectionsPageModel.d.ts.map +1 -1
  265. package/dist/connections/connectionsPageModel.js +11 -1
  266. package/dist/connections/connectionsPageModel.js.map +1 -1
  267. package/dist/connections.cjs +5 -0
  268. package/dist/connections.d.ts +2 -1
  269. package/dist/connections.d.ts.map +1 -1
  270. package/dist/connections.js +3 -2
  271. package/dist/data/AvatarBadge.cjs +3 -3
  272. package/dist/data/AvatarBadge.cjs.map +1 -1
  273. package/dist/data/AvatarBadge.js +3 -3
  274. package/dist/data/AvatarBadge.js.map +1 -1
  275. package/dist/data/CodeDiff.cjs +2 -0
  276. package/dist/data/CodeDiff.cjs.map +1 -1
  277. package/dist/data/CodeDiff.js +2 -0
  278. package/dist/data/CodeDiff.js.map +1 -1
  279. package/dist/data/DataTable.cjs +3 -2
  280. package/dist/data/DataTable.cjs.map +1 -1
  281. package/dist/data/DataTable.d.ts.map +1 -1
  282. package/dist/data/DataTable.js +3 -2
  283. package/dist/data/DataTable.js.map +1 -1
  284. package/dist/data/Gauge.cjs +1 -1
  285. package/dist/data/Gauge.cjs.map +1 -1
  286. package/dist/data/Gauge.js +1 -1
  287. package/dist/data/Gauge.js.map +1 -1
  288. package/dist/data/HighlightedTokens.cjs +2 -10
  289. package/dist/data/HighlightedTokens.cjs.map +1 -1
  290. package/dist/data/HighlightedTokens.d.ts.map +1 -1
  291. package/dist/data/HighlightedTokens.js +1 -9
  292. package/dist/data/HighlightedTokens.js.map +1 -1
  293. package/dist/data/Markdown.cjs +38 -11
  294. package/dist/data/Markdown.cjs.map +1 -1
  295. package/dist/data/Markdown.d.ts +9 -1
  296. package/dist/data/Markdown.d.ts.map +1 -1
  297. package/dist/data/Markdown.js +39 -12
  298. package/dist/data/Markdown.js.map +1 -1
  299. package/dist/data/MultiGaugeBar.cjs +157 -0
  300. package/dist/data/MultiGaugeBar.cjs.map +1 -0
  301. package/dist/data/MultiGaugeBar.d.ts +29 -0
  302. package/dist/data/MultiGaugeBar.d.ts.map +1 -0
  303. package/dist/data/MultiGaugeBar.js +157 -0
  304. package/dist/data/MultiGaugeBar.js.map +1 -0
  305. package/dist/data/OpenInFilesLink.cjs +27 -0
  306. package/dist/data/OpenInFilesLink.cjs.map +1 -0
  307. package/dist/data/OpenInFilesLink.d.ts +15 -0
  308. package/dist/data/OpenInFilesLink.d.ts.map +1 -0
  309. package/dist/data/OpenInFilesLink.js +27 -0
  310. package/dist/data/OpenInFilesLink.js.map +1 -0
  311. package/dist/data/ProgressBar.cjs +5 -3
  312. package/dist/data/ProgressBar.cjs.map +1 -1
  313. package/dist/data/ProgressBar.d.ts +5 -1
  314. package/dist/data/ProgressBar.d.ts.map +1 -1
  315. package/dist/data/ProgressBar.js +5 -3
  316. package/dist/data/ProgressBar.js.map +1 -1
  317. package/dist/data/ProgressBars.cjs +13 -5
  318. package/dist/data/ProgressBars.cjs.map +1 -1
  319. package/dist/data/ProgressBars.d.ts +6 -1
  320. package/dist/data/ProgressBars.d.ts.map +1 -1
  321. package/dist/data/ProgressBars.js +13 -5
  322. package/dist/data/ProgressBars.js.map +1 -1
  323. package/dist/data/Properties.cjs +3 -3
  324. package/dist/data/Properties.cjs.map +1 -1
  325. package/dist/data/Properties.js +3 -3
  326. package/dist/data/Properties.js.map +1 -1
  327. package/dist/data/TaskProgress.cjs +14 -6
  328. package/dist/data/TaskProgress.cjs.map +1 -1
  329. package/dist/data/TaskProgress.d.ts +3 -1
  330. package/dist/data/TaskProgress.d.ts.map +1 -1
  331. package/dist/data/TaskProgress.js +14 -6
  332. package/dist/data/TaskProgress.js.map +1 -1
  333. package/dist/data/TaskPrompts.cjs +96 -0
  334. package/dist/data/TaskPrompts.cjs.map +1 -0
  335. package/dist/data/TaskPrompts.d.ts +6 -0
  336. package/dist/data/TaskPrompts.d.ts.map +1 -0
  337. package/dist/data/TaskPrompts.js +96 -0
  338. package/dist/data/TaskPrompts.js.map +1 -0
  339. package/dist/data/TaskSnapshot.cjs.map +1 -1
  340. package/dist/data/TaskSnapshot.d.ts +3 -0
  341. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  342. package/dist/data/TaskSnapshot.js.map +1 -1
  343. package/dist/data/TimeseriesCoreBars.cjs +7 -3
  344. package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
  345. package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
  346. package/dist/data/TimeseriesCoreBars.js +8 -4
  347. package/dist/data/TimeseriesCoreBars.js.map +1 -1
  348. package/dist/data/TimeseriesGauge.cjs +12 -5
  349. package/dist/data/TimeseriesGauge.cjs.map +1 -1
  350. package/dist/data/TimeseriesGauge.d.ts.map +1 -1
  351. package/dist/data/TimeseriesGauge.js +13 -6
  352. package/dist/data/TimeseriesGauge.js.map +1 -1
  353. package/dist/data/TimeseriesPanel.cjs +10 -9
  354. package/dist/data/TimeseriesPanel.cjs.map +1 -1
  355. package/dist/data/TimeseriesPanel.d.ts +1 -1
  356. package/dist/data/TimeseriesPanel.d.ts.map +1 -1
  357. package/dist/data/TimeseriesPanel.js +11 -10
  358. package/dist/data/TimeseriesPanel.js.map +1 -1
  359. package/dist/data/TimeseriesPanel.model.cjs +62 -10
  360. package/dist/data/TimeseriesPanel.model.cjs.map +1 -1
  361. package/dist/data/TimeseriesPanel.model.d.ts +40 -1
  362. package/dist/data/TimeseriesPanel.model.d.ts.map +1 -1
  363. package/dist/data/TimeseriesPanel.model.js +62 -11
  364. package/dist/data/TimeseriesPanel.model.js.map +1 -1
  365. package/dist/data/WorkloadCard.cjs +7 -3
  366. package/dist/data/WorkloadCard.cjs.map +1 -1
  367. package/dist/data/WorkloadCard.d.ts +3 -1
  368. package/dist/data/WorkloadCard.d.ts.map +1 -1
  369. package/dist/data/WorkloadCard.js +7 -3
  370. package/dist/data/WorkloadCard.js.map +1 -1
  371. package/dist/data/WorkloadCard.model.cjs.map +1 -1
  372. package/dist/data/WorkloadCard.model.d.ts +2 -0
  373. package/dist/data/WorkloadCard.model.d.ts.map +1 -1
  374. package/dist/data/WorkloadCard.model.js.map +1 -1
  375. package/dist/data/ai/ChatWindow.placement.cjs +2 -1
  376. package/dist/data/ai/ChatWindow.placement.cjs.map +1 -1
  377. package/dist/data/ai/ChatWindow.placement.d.ts +1 -1
  378. package/dist/data/ai/ChatWindow.placement.d.ts.map +1 -1
  379. package/dist/data/ai/ChatWindow.placement.js +2 -1
  380. package/dist/data/ai/ChatWindow.placement.js.map +1 -1
  381. package/dist/data/ai/SpecRuntimeBar.cjs +2 -2
  382. package/dist/data/ai/SpecRuntimeBar.cjs.map +1 -1
  383. package/dist/data/ai/SpecRuntimeBar.d.ts +4 -1
  384. package/dist/data/ai/SpecRuntimeBar.d.ts.map +1 -1
  385. package/dist/data/ai/SpecRuntimeBar.js +2 -2
  386. package/dist/data/ai/SpecRuntimeBar.js.map +1 -1
  387. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +1 -1
  388. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
  389. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +1 -1
  390. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
  391. package/dist/data/ai/SpecRuntimeEditor.model.cjs +2 -2
  392. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
  393. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +2 -2
  394. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
  395. package/dist/data/ai/SpecRuntimeEditor.model.js +2 -2
  396. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
  397. package/dist/data/ai/ThreadPicker.cjs +2 -2
  398. package/dist/data/ai/ThreadPicker.cjs.map +1 -1
  399. package/dist/data/ai/ThreadPicker.js +2 -2
  400. package/dist/data/ai/ThreadPicker.js.map +1 -1
  401. package/dist/data/ai/index.d.ts +2 -0
  402. package/dist/data/ai/index.d.ts.map +1 -1
  403. package/dist/data/ai/use-prompt-run-stream.cjs +126 -0
  404. package/dist/data/ai/use-prompt-run-stream.cjs.map +1 -0
  405. package/dist/data/ai/use-prompt-run-stream.d.ts +52 -0
  406. package/dist/data/ai/use-prompt-run-stream.d.ts.map +1 -0
  407. package/dist/data/ai/use-prompt-run-stream.js +126 -0
  408. package/dist/data/ai/use-prompt-run-stream.js.map +1 -0
  409. package/dist/data/cache-browser/CacheBrowser.cjs +1 -0
  410. package/dist/data/cache-browser/CacheBrowser.cjs.map +1 -1
  411. package/dist/data/cache-browser/CacheBrowser.d.ts.map +1 -1
  412. package/dist/data/cache-browser/CacheBrowser.js +1 -0
  413. package/dist/data/cache-browser/CacheBrowser.js.map +1 -1
  414. package/dist/data/charts/BarChart.cjs +194 -0
  415. package/dist/data/charts/BarChart.cjs.map +1 -0
  416. package/dist/data/charts/BarChart.d.ts +19 -0
  417. package/dist/data/charts/BarChart.d.ts.map +1 -0
  418. package/dist/data/charts/BarChart.js +194 -0
  419. package/dist/data/charts/BarChart.js.map +1 -0
  420. package/dist/data/charts/ChartLegend.cjs +54 -0
  421. package/dist/data/charts/ChartLegend.cjs.map +1 -0
  422. package/dist/data/charts/ChartLegend.d.ts +17 -0
  423. package/dist/data/charts/ChartLegend.d.ts.map +1 -0
  424. package/dist/data/charts/ChartLegend.js +54 -0
  425. package/dist/data/charts/ChartLegend.js.map +1 -0
  426. package/dist/data/charts/Sparkline.cjs +56 -0
  427. package/dist/data/charts/Sparkline.cjs.map +1 -0
  428. package/dist/data/charts/Sparkline.d.ts +15 -0
  429. package/dist/data/charts/Sparkline.d.ts.map +1 -0
  430. package/dist/data/charts/Sparkline.js +56 -0
  431. package/dist/data/charts/Sparkline.js.map +1 -0
  432. package/dist/data/charts/StackedBarChart.cjs +241 -0
  433. package/dist/data/charts/StackedBarChart.cjs.map +1 -0
  434. package/dist/data/charts/StackedBarChart.d.ts +20 -0
  435. package/dist/data/charts/StackedBarChart.d.ts.map +1 -0
  436. package/dist/data/charts/StackedBarChart.js +241 -0
  437. package/dist/data/charts/StackedBarChart.js.map +1 -0
  438. package/dist/data/charts/TrendChart.cjs +157 -0
  439. package/dist/data/charts/TrendChart.cjs.map +1 -0
  440. package/dist/data/charts/TrendChart.d.ts +20 -0
  441. package/dist/data/charts/TrendChart.d.ts.map +1 -0
  442. package/dist/data/charts/TrendChart.js +157 -0
  443. package/dist/data/charts/TrendChart.js.map +1 -0
  444. package/dist/data/charts/chart-marks.cjs +115 -0
  445. package/dist/data/charts/chart-marks.cjs.map +1 -0
  446. package/dist/data/charts/chart-marks.d.ts +39 -0
  447. package/dist/data/charts/chart-marks.d.ts.map +1 -0
  448. package/dist/data/charts/chart-marks.js +112 -0
  449. package/dist/data/charts/chart-marks.js.map +1 -0
  450. package/dist/data/charts/chart-palette.cjs +74 -0
  451. package/dist/data/charts/chart-palette.cjs.map +1 -0
  452. package/dist/data/charts/chart-palette.d.ts +58 -0
  453. package/dist/data/charts/chart-palette.d.ts.map +1 -0
  454. package/dist/data/charts/chart-palette.js +72 -0
  455. package/dist/data/charts/chart-palette.js.map +1 -0
  456. package/dist/data/charts/chart-scale.cjs +115 -0
  457. package/dist/data/charts/chart-scale.cjs.map +1 -0
  458. package/dist/data/charts/chart-scale.d.ts +41 -0
  459. package/dist/data/charts/chart-scale.d.ts.map +1 -0
  460. package/dist/data/charts/chart-scale.js +104 -0
  461. package/dist/data/charts/chart-scale.js.map +1 -0
  462. package/dist/data/charts/chart.test-utils.d.ts +7 -0
  463. package/dist/data/charts/chart.test-utils.d.ts.map +1 -0
  464. package/dist/data/charts/index.d.ts +7 -0
  465. package/dist/data/charts/index.d.ts.map +1 -0
  466. package/dist/data/chat/MessageActions.cjs +1 -1
  467. package/dist/data/chat/MessageActions.cjs.map +1 -1
  468. package/dist/data/chat/MessageActions.js +1 -1
  469. package/dist/data/chat/MessageActions.js.map +1 -1
  470. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +1 -1
  471. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +1 -1
  472. package/dist/data/diagnostics/DiagnosticsTree.cjs +1 -1
  473. package/dist/data/diagnostics/DiagnosticsTree.cjs.map +1 -1
  474. package/dist/data/diagnostics/DiagnosticsTree.js +1 -1
  475. package/dist/data/diagnostics/DiagnosticsTree.js.map +1 -1
  476. package/dist/data/diagnostics/FrameSourceWindow.cjs +9 -2
  477. package/dist/data/diagnostics/FrameSourceWindow.cjs.map +1 -1
  478. package/dist/data/diagnostics/FrameSourceWindow.d.ts +1 -1
  479. package/dist/data/diagnostics/FrameSourceWindow.d.ts.map +1 -1
  480. package/dist/data/diagnostics/FrameSourceWindow.js +9 -2
  481. package/dist/data/diagnostics/FrameSourceWindow.js.map +1 -1
  482. package/dist/data/diagnostics/ProblemActions.cjs +37 -0
  483. package/dist/data/diagnostics/ProblemActions.cjs.map +1 -0
  484. package/dist/data/diagnostics/ProblemActions.d.ts +6 -0
  485. package/dist/data/diagnostics/ProblemActions.d.ts.map +1 -0
  486. package/dist/data/diagnostics/ProblemActions.js +37 -0
  487. package/dist/data/diagnostics/ProblemActions.js.map +1 -0
  488. package/dist/data/diagnostics/ProblemFacet.cjs +33 -0
  489. package/dist/data/diagnostics/ProblemFacet.cjs.map +1 -0
  490. package/dist/data/diagnostics/ProblemFacet.d.ts +9 -0
  491. package/dist/data/diagnostics/ProblemFacet.d.ts.map +1 -0
  492. package/dist/data/diagnostics/ProblemFacet.js +33 -0
  493. package/dist/data/diagnostics/ProblemFacet.js.map +1 -0
  494. package/dist/data/diagnostics/ProblemRow.cjs +62 -0
  495. package/dist/data/diagnostics/ProblemRow.cjs.map +1 -0
  496. package/dist/data/diagnostics/ProblemRow.d.ts +14 -0
  497. package/dist/data/diagnostics/ProblemRow.d.ts.map +1 -0
  498. package/dist/data/diagnostics/ProblemRow.js +62 -0
  499. package/dist/data/diagnostics/ProblemRow.js.map +1 -0
  500. package/dist/data/diagnostics/ProblemViewOptions.cjs +18 -0
  501. package/dist/data/diagnostics/ProblemViewOptions.cjs.map +1 -0
  502. package/dist/data/diagnostics/ProblemViewOptions.d.ts +6 -0
  503. package/dist/data/diagnostics/ProblemViewOptions.d.ts.map +1 -0
  504. package/dist/data/diagnostics/ProblemViewOptions.js +18 -0
  505. package/dist/data/diagnostics/ProblemViewOptions.js.map +1 -0
  506. package/dist/data/diagnostics/StackFrameRow.cjs +1 -1
  507. package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
  508. package/dist/data/diagnostics/StackFrameRow.js +1 -1
  509. package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
  510. package/dist/data/diagnostics/diagnostic-identity.cjs +14 -0
  511. package/dist/data/diagnostics/diagnostic-identity.cjs.map +1 -0
  512. package/dist/data/diagnostics/diagnostic-identity.d.ts +3 -0
  513. package/dist/data/diagnostics/diagnostic-identity.d.ts.map +1 -0
  514. package/dist/data/diagnostics/diagnostic-identity.js +14 -0
  515. package/dist/data/diagnostics/diagnostic-identity.js.map +1 -0
  516. package/dist/data/diagnostics/use-problem-expansion.cjs +16 -0
  517. package/dist/data/diagnostics/use-problem-expansion.cjs.map +1 -0
  518. package/dist/data/diagnostics/use-problem-expansion.d.ts +3 -0
  519. package/dist/data/diagnostics/use-problem-expansion.d.ts.map +1 -0
  520. package/dist/data/diagnostics/use-problem-expansion.js +16 -0
  521. package/dist/data/diagnostics/use-problem-expansion.js.map +1 -0
  522. package/dist/data/git/GitChangeList.cjs +9 -6
  523. package/dist/data/git/GitChangeList.cjs.map +1 -1
  524. package/dist/data/git/GitChangeList.d.ts +6 -0
  525. package/dist/data/git/GitChangeList.d.ts.map +1 -1
  526. package/dist/data/git/GitChangeList.js +9 -6
  527. package/dist/data/git/GitChangeList.js.map +1 -1
  528. package/dist/data/git/pickers/GitPickersDemo.d.ts.map +1 -1
  529. package/dist/data/git/pickers/ReferencePicker.cjs +1 -0
  530. package/dist/data/git/pickers/ReferencePicker.cjs.map +1 -1
  531. package/dist/data/git/pickers/ReferencePicker.js +1 -0
  532. package/dist/data/git/pickers/ReferencePicker.js.map +1 -1
  533. package/dist/data/lint/LintDetail.cjs +230 -189
  534. package/dist/data/lint/LintDetail.cjs.map +1 -1
  535. package/dist/data/lint/LintDetail.d.ts +25 -3
  536. package/dist/data/lint/LintDetail.d.ts.map +1 -1
  537. package/dist/data/lint/LintDetail.js +231 -192
  538. package/dist/data/lint/LintDetail.js.map +1 -1
  539. package/dist/data/lint/LintFilterBar.cjs +78 -83
  540. package/dist/data/lint/LintFilterBar.cjs.map +1 -1
  541. package/dist/data/lint/LintFilterBar.d.ts +23 -6
  542. package/dist/data/lint/LintFilterBar.d.ts.map +1 -1
  543. package/dist/data/lint/LintFilterBar.js +78 -85
  544. package/dist/data/lint/LintFilterBar.js.map +1 -1
  545. package/dist/data/lint/LintIgnoreMenu.cjs +59 -0
  546. package/dist/data/lint/LintIgnoreMenu.cjs.map +1 -0
  547. package/dist/data/lint/LintIgnoreMenu.d.ts +20 -0
  548. package/dist/data/lint/LintIgnoreMenu.d.ts.map +1 -0
  549. package/dist/data/lint/LintIgnoreMenu.js +58 -0
  550. package/dist/data/lint/LintIgnoreMenu.js.map +1 -0
  551. package/dist/data/lint/LintResults.cjs +59 -14
  552. package/dist/data/lint/LintResults.cjs.map +1 -1
  553. package/dist/data/lint/LintResults.d.ts +25 -1
  554. package/dist/data/lint/LintResults.d.ts.map +1 -1
  555. package/dist/data/lint/LintResults.fixtures.d.ts +19 -0
  556. package/dist/data/lint/LintResults.fixtures.d.ts.map +1 -1
  557. package/dist/data/lint/LintResults.js +60 -15
  558. package/dist/data/lint/LintResults.js.map +1 -1
  559. package/dist/data/lint/LintTable.cjs +156 -0
  560. package/dist/data/lint/LintTable.cjs.map +1 -0
  561. package/dist/data/lint/LintTable.d.ts +13 -0
  562. package/dist/data/lint/LintTable.d.ts.map +1 -0
  563. package/dist/data/lint/LintTable.js +156 -0
  564. package/dist/data/lint/LintTable.js.map +1 -0
  565. package/dist/data/lint/LintTreeNode.cjs +42 -19
  566. package/dist/data/lint/LintTreeNode.cjs.map +1 -1
  567. package/dist/data/lint/LintTreeNode.d.ts +7 -2
  568. package/dist/data/lint/LintTreeNode.d.ts.map +1 -1
  569. package/dist/data/lint/LintTreeNode.js +44 -21
  570. package/dist/data/lint/LintTreeNode.js.map +1 -1
  571. package/dist/data/lint/ViolationSnippet.cjs +113 -0
  572. package/dist/data/lint/ViolationSnippet.cjs.map +1 -0
  573. package/dist/data/lint/ViolationSnippet.d.ts +20 -0
  574. package/dist/data/lint/ViolationSnippet.d.ts.map +1 -0
  575. package/dist/data/lint/ViolationSnippet.js +112 -0
  576. package/dist/data/lint/ViolationSnippet.js.map +1 -0
  577. package/dist/data/lint/actions.cjs +44 -16
  578. package/dist/data/lint/actions.cjs.map +1 -1
  579. package/dist/data/lint/actions.d.ts +7 -3
  580. package/dist/data/lint/actions.d.ts.map +1 -1
  581. package/dist/data/lint/actions.js +44 -16
  582. package/dist/data/lint/actions.js.map +1 -1
  583. package/dist/data/lint/grouping.cjs +105 -8
  584. package/dist/data/lint/grouping.cjs.map +1 -1
  585. package/dist/data/lint/grouping.d.ts +21 -1
  586. package/dist/data/lint/grouping.d.ts.map +1 -1
  587. package/dist/data/lint/grouping.js +105 -10
  588. package/dist/data/lint/grouping.js.map +1 -1
  589. package/dist/data/lint/ignore-menu-items.cjs +18 -0
  590. package/dist/data/lint/ignore-menu-items.cjs.map +1 -0
  591. package/dist/data/lint/ignore-menu-items.d.ts +6 -0
  592. package/dist/data/lint/ignore-menu-items.d.ts.map +1 -0
  593. package/dist/data/lint/ignore-menu-items.js +17 -0
  594. package/dist/data/lint/ignore-menu-items.js.map +1 -0
  595. package/dist/data/lint/index.d.ts +7 -5
  596. package/dist/data/lint/index.d.ts.map +1 -1
  597. package/dist/data/lint/stats.cjs +19 -4
  598. package/dist/data/lint/stats.cjs.map +1 -1
  599. package/dist/data/lint/stats.d.ts +13 -3
  600. package/dist/data/lint/stats.d.ts.map +1 -1
  601. package/dist/data/lint/stats.js +17 -5
  602. package/dist/data/lint/stats.js.map +1 -1
  603. package/dist/data/lint/types.cjs +8 -0
  604. package/dist/data/lint/types.cjs.map +1 -1
  605. package/dist/data/lint/types.d.ts +47 -0
  606. package/dist/data/lint/types.d.ts.map +1 -1
  607. package/dist/data/lint/types.js +8 -1
  608. package/dist/data/lint/types.js.map +1 -1
  609. package/dist/data/lint/violation-menu-items.cjs +31 -0
  610. package/dist/data/lint/violation-menu-items.cjs.map +1 -0
  611. package/dist/data/lint/violation-menu-items.d.ts +12 -0
  612. package/dist/data/lint/violation-menu-items.d.ts.map +1 -0
  613. package/dist/data/lint/violation-menu-items.js +31 -0
  614. package/dist/data/lint/violation-menu-items.js.map +1 -0
  615. package/dist/data/markdown-source-blocks.cjs +38 -0
  616. package/dist/data/markdown-source-blocks.cjs.map +1 -0
  617. package/dist/data/markdown-source-blocks.d.ts +32 -0
  618. package/dist/data/markdown-source-blocks.d.ts.map +1 -0
  619. package/dist/data/markdown-source-blocks.js +35 -0
  620. package/dist/data/markdown-source-blocks.js.map +1 -0
  621. package/dist/data/test-runner/FilterFacet.cjs +52 -0
  622. package/dist/data/test-runner/FilterFacet.cjs.map +1 -0
  623. package/dist/data/test-runner/FilterFacet.d.ts +13 -0
  624. package/dist/data/test-runner/FilterFacet.d.ts.map +1 -0
  625. package/dist/data/test-runner/FilterFacet.js +52 -0
  626. package/dist/data/test-runner/FilterFacet.js.map +1 -0
  627. package/dist/data/test-runner/MatrixMarks.cjs +42 -40
  628. package/dist/data/test-runner/MatrixMarks.cjs.map +1 -1
  629. package/dist/data/test-runner/MatrixMarks.d.ts +20 -4
  630. package/dist/data/test-runner/MatrixMarks.d.ts.map +1 -1
  631. package/dist/data/test-runner/MatrixMarks.js +43 -42
  632. package/dist/data/test-runner/MatrixMarks.js.map +1 -1
  633. package/dist/data/test-runner/TestAttemptDetail.cjs +1 -1
  634. package/dist/data/test-runner/TestAttemptDetail.js +1 -1
  635. package/dist/data/test-runner/TestDetailPanel.cjs +11 -0
  636. package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
  637. package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
  638. package/dist/data/test-runner/TestDetailPanel.js +11 -0
  639. package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
  640. package/dist/data/test-runner/TestFilterBar.cjs +3 -44
  641. package/dist/data/test-runner/TestFilterBar.cjs.map +1 -1
  642. package/dist/data/test-runner/TestFilterBar.d.ts.map +1 -1
  643. package/dist/data/test-runner/TestFilterBar.js +3 -44
  644. package/dist/data/test-runner/TestFilterBar.js.map +1 -1
  645. package/dist/data/test-runner/TestRunner.cjs +3 -1
  646. package/dist/data/test-runner/TestRunner.cjs.map +1 -1
  647. package/dist/data/test-runner/TestRunner.d.ts +7 -1
  648. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  649. package/dist/data/test-runner/TestRunner.js +3 -1
  650. package/dist/data/test-runner/TestRunner.js.map +1 -1
  651. package/dist/data/test-runner/context.cjs.map +1 -1
  652. package/dist/data/test-runner/context.d.ts +3 -0
  653. package/dist/data/test-runner/context.d.ts.map +1 -1
  654. package/dist/data/test-runner/context.js.map +1 -1
  655. package/dist/data/test-runner/index.d.ts +2 -2
  656. package/dist/data/test-runner/index.d.ts.map +1 -1
  657. package/dist/data/test-runner/matrix-marks.cjs +2 -11
  658. package/dist/data/test-runner/matrix-marks.cjs.map +1 -1
  659. package/dist/data/test-runner/matrix-marks.d.ts +2 -4
  660. package/dist/data/test-runner/matrix-marks.d.ts.map +1 -1
  661. package/dist/data/test-runner/matrix-marks.js +3 -11
  662. package/dist/data/test-runner/matrix-marks.js.map +1 -1
  663. package/dist/data/test-runner/types.d.ts +2 -0
  664. package/dist/data/test-runner/types.d.ts.map +1 -1
  665. package/dist/data/timeseries-query.cjs +98 -2
  666. package/dist/data/timeseries-query.cjs.map +1 -1
  667. package/dist/data/timeseries-query.d.ts +31 -5
  668. package/dist/data/timeseries-query.d.ts.map +1 -1
  669. package/dist/data/timeseries-query.js +98 -3
  670. package/dist/data/timeseries-query.js.map +1 -1
  671. package/dist/data/timeseries-stream-provider.cjs +38 -0
  672. package/dist/data/timeseries-stream-provider.cjs.map +1 -0
  673. package/dist/data/timeseries-stream-provider.d.ts +26 -0
  674. package/dist/data/timeseries-stream-provider.d.ts.map +1 -0
  675. package/dist/data/timeseries-stream-provider.js +38 -0
  676. package/dist/data/timeseries-stream-provider.js.map +1 -0
  677. package/dist/data/timeseries-stream.cjs +304 -0
  678. package/dist/data/timeseries-stream.cjs.map +1 -0
  679. package/dist/data/timeseries-stream.d.ts +81 -0
  680. package/dist/data/timeseries-stream.d.ts.map +1 -0
  681. package/dist/data/timeseries-stream.fixtures.d.ts +36 -0
  682. package/dist/data/timeseries-stream.fixtures.d.ts.map +1 -0
  683. package/dist/data/timeseries-stream.js +296 -0
  684. package/dist/data/timeseries-stream.js.map +1 -0
  685. package/dist/data/token-style.cjs +13 -0
  686. package/dist/data/token-style.cjs.map +1 -0
  687. package/dist/data/token-style.d.ts +4 -0
  688. package/dist/data/token-style.d.ts.map +1 -0
  689. package/dist/data/token-style.js +13 -0
  690. package/dist/data/token-style.js.map +1 -0
  691. package/dist/data/traces/ProcessTraceDetail.cjs +1 -1
  692. package/dist/data/traces/ProcessTraceDetail.js +1 -1
  693. package/dist/data/traces/index.d.ts +1 -1
  694. package/dist/data/traces/index.d.ts.map +1 -1
  695. package/dist/data/use-data-table-virtual.d.ts +1 -1
  696. package/dist/data/version-info.cjs +3 -3
  697. package/dist/data/version-info.js +3 -3
  698. package/dist/data/workload-panel/MemoryStack.cjs +49 -0
  699. package/dist/data/workload-panel/MemoryStack.cjs.map +1 -0
  700. package/dist/data/workload-panel/MemoryStack.d.ts +11 -0
  701. package/dist/data/workload-panel/MemoryStack.d.ts.map +1 -0
  702. package/dist/data/workload-panel/MemoryStack.js +48 -0
  703. package/dist/data/workload-panel/MemoryStack.js.map +1 -0
  704. package/dist/data/workload-panel/Metrics.cjs +197 -0
  705. package/dist/data/workload-panel/Metrics.cjs.map +1 -0
  706. package/dist/data/workload-panel/Metrics.d.ts +11 -0
  707. package/dist/data/workload-panel/Metrics.d.ts.map +1 -0
  708. package/dist/data/workload-panel/Metrics.js +196 -0
  709. package/dist/data/workload-panel/Metrics.js.map +1 -0
  710. package/dist/data/workload-panel/WorkloadPanel.cjs +66 -0
  711. package/dist/data/workload-panel/WorkloadPanel.cjs.map +1 -0
  712. package/dist/data/workload-panel/WorkloadPanel.d.ts +3 -0
  713. package/dist/data/workload-panel/WorkloadPanel.d.ts.map +1 -0
  714. package/dist/data/workload-panel/WorkloadPanel.js +66 -0
  715. package/dist/data/workload-panel/WorkloadPanel.js.map +1 -0
  716. package/dist/data/workload-panel/fixtures.d.ts +60 -0
  717. package/dist/data/workload-panel/fixtures.d.ts.map +1 -0
  718. package/dist/data/workload-panel/model.cjs +137 -0
  719. package/dist/data/workload-panel/model.cjs.map +1 -0
  720. package/dist/data/workload-panel/model.d.ts +53 -0
  721. package/dist/data/workload-panel/model.d.ts.map +1 -0
  722. package/dist/data/workload-panel/model.js +133 -0
  723. package/dist/data/workload-panel/model.js.map +1 -0
  724. package/dist/data/workload-panel/types.d.ts +56 -0
  725. package/dist/data/workload-panel/types.d.ts.map +1 -0
  726. package/dist/data.cjs +58 -7
  727. package/dist/data.d.ts +9 -1
  728. package/dist/data.d.ts.map +1 -1
  729. package/dist/data.js +29 -12
  730. package/dist/file-findings/AnnotatedCode.cjs +243 -0
  731. package/dist/file-findings/AnnotatedCode.cjs.map +1 -0
  732. package/dist/file-findings/AnnotatedCode.d.ts +30 -0
  733. package/dist/file-findings/AnnotatedCode.d.ts.map +1 -0
  734. package/dist/file-findings/AnnotatedCode.js +243 -0
  735. package/dist/file-findings/AnnotatedCode.js.map +1 -0
  736. package/dist/file-findings/FileFindingsView.cjs +213 -0
  737. package/dist/file-findings/FileFindingsView.cjs.map +1 -0
  738. package/dist/file-findings/FileFindingsView.d.ts +35 -0
  739. package/dist/file-findings/FileFindingsView.d.ts.map +1 -0
  740. package/dist/file-findings/FileFindingsView.js +213 -0
  741. package/dist/file-findings/FileFindingsView.js.map +1 -0
  742. package/dist/file-findings/LazyAnnotatedCode.cjs +22 -0
  743. package/dist/file-findings/LazyAnnotatedCode.cjs.map +1 -0
  744. package/dist/file-findings/LazyAnnotatedCode.d.ts +5 -0
  745. package/dist/file-findings/LazyAnnotatedCode.d.ts.map +1 -0
  746. package/dist/file-findings/LazyAnnotatedCode.js +22 -0
  747. package/dist/file-findings/LazyAnnotatedCode.js.map +1 -0
  748. package/dist/file-findings/adapters.cjs +155 -0
  749. package/dist/file-findings/adapters.cjs.map +1 -0
  750. package/dist/file-findings/adapters.d.ts +24 -0
  751. package/dist/file-findings/adapters.d.ts.map +1 -0
  752. package/dist/file-findings/adapters.js +153 -0
  753. package/dist/file-findings/adapters.js.map +1 -0
  754. package/dist/file-findings/file-review/CommentDraft.cjs +97 -0
  755. package/dist/file-findings/file-review/CommentDraft.cjs.map +1 -0
  756. package/dist/file-findings/file-review/CommentDraft.d.ts +25 -0
  757. package/dist/file-findings/file-review/CommentDraft.d.ts.map +1 -0
  758. package/dist/file-findings/file-review/CommentDraft.js +97 -0
  759. package/dist/file-findings/file-review/CommentDraft.js.map +1 -0
  760. package/dist/file-findings/file-review/FileReview.cjs +863 -0
  761. package/dist/file-findings/file-review/FileReview.cjs.map +1 -0
  762. package/dist/file-findings/file-review/FileReview.d.ts +79 -0
  763. package/dist/file-findings/file-review/FileReview.d.ts.map +1 -0
  764. package/dist/file-findings/file-review/FileReview.fixtures.d.ts +25 -0
  765. package/dist/file-findings/file-review/FileReview.fixtures.d.ts.map +1 -0
  766. package/dist/file-findings/file-review/FileReview.js +863 -0
  767. package/dist/file-findings/file-review/FileReview.js.map +1 -0
  768. package/dist/file-findings/file-review/InlineAuthors.cjs +77 -0
  769. package/dist/file-findings/file-review/InlineAuthors.cjs.map +1 -0
  770. package/dist/file-findings/file-review/InlineAuthors.d.ts +9 -0
  771. package/dist/file-findings/file-review/InlineAuthors.d.ts.map +1 -0
  772. package/dist/file-findings/file-review/InlineAuthors.js +77 -0
  773. package/dist/file-findings/file-review/InlineAuthors.js.map +1 -0
  774. package/dist/file-findings/file-review/InlineThread.cjs +77 -0
  775. package/dist/file-findings/file-review/InlineThread.cjs.map +1 -0
  776. package/dist/file-findings/file-review/InlineThread.d.ts +27 -0
  777. package/dist/file-findings/file-review/InlineThread.d.ts.map +1 -0
  778. package/dist/file-findings/file-review/InlineThread.js +77 -0
  779. package/dist/file-findings/file-review/InlineThread.js.map +1 -0
  780. package/dist/file-findings/file-review/ProblemsList.cjs +164 -0
  781. package/dist/file-findings/file-review/ProblemsList.cjs.map +1 -0
  782. package/dist/file-findings/file-review/ProblemsList.d.ts +15 -0
  783. package/dist/file-findings/file-review/ProblemsList.d.ts.map +1 -0
  784. package/dist/file-findings/file-review/ProblemsList.js +164 -0
  785. package/dist/file-findings/file-review/ProblemsList.js.map +1 -0
  786. package/dist/file-findings/file-review/SourceView.cjs +179 -0
  787. package/dist/file-findings/file-review/SourceView.cjs.map +1 -0
  788. package/dist/file-findings/file-review/SourceView.d.ts +29 -0
  789. package/dist/file-findings/file-review/SourceView.d.ts.map +1 -0
  790. package/dist/file-findings/file-review/SourceView.js +179 -0
  791. package/dist/file-findings/file-review/SourceView.js.map +1 -0
  792. package/dist/file-findings/file-review/blame.cjs +35 -0
  793. package/dist/file-findings/file-review/blame.cjs.map +1 -0
  794. package/dist/file-findings/file-review/blame.d.ts +28 -0
  795. package/dist/file-findings/file-review/blame.d.ts.map +1 -0
  796. package/dist/file-findings/file-review/blame.js +33 -0
  797. package/dist/file-findings/file-review/blame.js.map +1 -0
  798. package/dist/file-findings/file-review/geometry.cjs +101 -0
  799. package/dist/file-findings/file-review/geometry.cjs.map +1 -0
  800. package/dist/file-findings/file-review/geometry.d.ts +45 -0
  801. package/dist/file-findings/file-review/geometry.d.ts.map +1 -0
  802. package/dist/file-findings/file-review/geometry.js +98 -0
  803. package/dist/file-findings/file-review/geometry.js.map +1 -0
  804. package/dist/file-findings/file-review/hooks.cjs +101 -0
  805. package/dist/file-findings/file-review/hooks.cjs.map +1 -0
  806. package/dist/file-findings/file-review/hooks.d.ts +22 -0
  807. package/dist/file-findings/file-review/hooks.d.ts.map +1 -0
  808. package/dist/file-findings/file-review/hooks.js +99 -0
  809. package/dist/file-findings/file-review/hooks.js.map +1 -0
  810. package/dist/file-findings/file-review/marks.cjs +52 -0
  811. package/dist/file-findings/file-review/marks.cjs.map +1 -0
  812. package/dist/file-findings/file-review/marks.d.ts +23 -0
  813. package/dist/file-findings/file-review/marks.d.ts.map +1 -0
  814. package/dist/file-findings/file-review/marks.js +47 -0
  815. package/dist/file-findings/file-review/marks.js.map +1 -0
  816. package/dist/file-findings/file-review/problem-filters.cjs +14 -0
  817. package/dist/file-findings/file-review/problem-filters.cjs.map +1 -0
  818. package/dist/file-findings/file-review/problem-filters.d.ts +10 -0
  819. package/dist/file-findings/file-review/problem-filters.d.ts.map +1 -0
  820. package/dist/file-findings/file-review/problem-filters.js +13 -0
  821. package/dist/file-findings/file-review/problem-filters.js.map +1 -0
  822. package/dist/file-findings/file-review/quote-anchor.cjs +234 -0
  823. package/dist/file-findings/file-review/quote-anchor.cjs.map +1 -0
  824. package/dist/file-findings/file-review/quote-anchor.d.ts +54 -0
  825. package/dist/file-findings/file-review/quote-anchor.d.ts.map +1 -0
  826. package/dist/file-findings/file-review/quote-anchor.js +226 -0
  827. package/dist/file-findings/file-review/quote-anchor.js.map +1 -0
  828. package/dist/file-findings/file-review/source-anchor.cjs +104 -0
  829. package/dist/file-findings/file-review/source-anchor.cjs.map +1 -0
  830. package/dist/file-findings/file-review/source-anchor.d.ts +27 -0
  831. package/dist/file-findings/file-review/source-anchor.d.ts.map +1 -0
  832. package/dist/file-findings/file-review/source-anchor.js +99 -0
  833. package/dist/file-findings/file-review/source-anchor.js.map +1 -0
  834. package/dist/file-findings/file-review/source-marks.cjs +71 -0
  835. package/dist/file-findings/file-review/source-marks.cjs.map +1 -0
  836. package/dist/file-findings/file-review/source-marks.d.ts +27 -0
  837. package/dist/file-findings/file-review/source-marks.d.ts.map +1 -0
  838. package/dist/file-findings/file-review/source-marks.js +68 -0
  839. package/dist/file-findings/file-review/source-marks.js.map +1 -0
  840. package/dist/file-findings/findings-comments.cjs +136 -0
  841. package/dist/file-findings/findings-comments.cjs.map +1 -0
  842. package/dist/file-findings/findings-comments.d.ts +28 -0
  843. package/dist/file-findings/findings-comments.d.ts.map +1 -0
  844. package/dist/file-findings/findings-comments.js +131 -0
  845. package/dist/file-findings/findings-comments.js.map +1 -0
  846. package/dist/file-findings/findings-languages.cjs +53 -0
  847. package/dist/file-findings/findings-languages.cjs.map +1 -0
  848. package/dist/file-findings/findings-languages.d.ts +11 -0
  849. package/dist/file-findings/findings-languages.d.ts.map +1 -0
  850. package/dist/file-findings/findings-languages.js +53 -0
  851. package/dist/file-findings/findings-languages.js.map +1 -0
  852. package/dist/file-findings/mdx-source.cjs +48 -0
  853. package/dist/file-findings/mdx-source.cjs.map +1 -0
  854. package/dist/file-findings/mdx-source.d.ts +7 -0
  855. package/dist/file-findings/mdx-source.d.ts.map +1 -0
  856. package/dist/file-findings/mdx-source.js +48 -0
  857. package/dist/file-findings/mdx-source.js.map +1 -0
  858. package/dist/file-findings/monaco-language.cjs +73 -0
  859. package/dist/file-findings/monaco-language.cjs.map +1 -0
  860. package/dist/file-findings/monaco-language.d.ts +11 -0
  861. package/dist/file-findings/monaco-language.d.ts.map +1 -0
  862. package/dist/file-findings/monaco-language.js +72 -0
  863. package/dist/file-findings/monaco-language.js.map +1 -0
  864. package/dist/file-findings/severity-counts.cjs +20 -0
  865. package/dist/file-findings/severity-counts.cjs.map +1 -0
  866. package/dist/file-findings/severity-counts.d.ts +5 -0
  867. package/dist/file-findings/severity-counts.d.ts.map +1 -0
  868. package/dist/file-findings/severity-counts.js +19 -0
  869. package/dist/file-findings/severity-counts.js.map +1 -0
  870. package/dist/file-findings/types.cjs +12 -0
  871. package/dist/file-findings/types.cjs.map +1 -0
  872. package/dist/file-findings/types.d.ts +43 -0
  873. package/dist/file-findings/types.d.ts.map +1 -0
  874. package/dist/file-findings/types.js +11 -0
  875. package/dist/file-findings/types.js.map +1 -0
  876. package/dist/file-findings.cjs +47 -0
  877. package/dist/file-findings.d.ts +15 -0
  878. package/dist/file-findings.d.ts.map +1 -0
  879. package/dist/file-findings.js +15 -0
  880. package/dist/hooks/event-hub.cjs +22 -8
  881. package/dist/hooks/event-hub.cjs.map +1 -1
  882. package/dist/hooks/event-hub.d.ts.map +1 -1
  883. package/dist/hooks/event-hub.js +22 -8
  884. package/dist/hooks/event-hub.js.map +1 -1
  885. package/dist/icons/components/UiBrowser.cjs +51 -0
  886. package/dist/icons/components/UiBrowser.cjs.map +1 -0
  887. package/dist/icons/components/UiBrowser.d.ts +15 -0
  888. package/dist/icons/components/UiBrowser.d.ts.map +1 -0
  889. package/dist/icons/components/UiBrowser.js +48 -0
  890. package/dist/icons/components/UiBrowser.js.map +1 -0
  891. package/dist/icons/components/UiCreditCard.cjs +51 -0
  892. package/dist/icons/components/UiCreditCard.cjs.map +1 -0
  893. package/dist/icons/components/UiCreditCard.d.ts +15 -0
  894. package/dist/icons/components/UiCreditCard.d.ts.map +1 -0
  895. package/dist/icons/components/UiCreditCard.js +48 -0
  896. package/dist/icons/components/UiCreditCard.js.map +1 -0
  897. package/dist/icons/components/UiShoppingCart.cjs +51 -0
  898. package/dist/icons/components/UiShoppingCart.cjs.map +1 -0
  899. package/dist/icons/components/UiShoppingCart.d.ts +15 -0
  900. package/dist/icons/components/UiShoppingCart.d.ts.map +1 -0
  901. package/dist/icons/components/UiShoppingCart.js +48 -0
  902. package/dist/icons/components/UiShoppingCart.js.map +1 -0
  903. package/dist/icons/index.d.ts +6 -0
  904. package/dist/icons/index.d.ts.map +1 -1
  905. package/dist/icons/registry.cjs +6 -0
  906. package/dist/icons/registry.cjs.map +1 -1
  907. package/dist/icons/registry.d.ts.map +1 -1
  908. package/dist/icons/registry.js +6 -0
  909. package/dist/icons/registry.js.map +1 -1
  910. package/dist/icons.cjs +9 -0
  911. package/dist/icons.js +4 -1
  912. package/dist/index.cjs +76 -8
  913. package/dist/index.d.ts +1 -0
  914. package/dist/index.d.ts.map +1 -1
  915. package/dist/index.js +37 -14
  916. package/dist/layout/AppShell.cjs +37 -21
  917. package/dist/layout/AppShell.cjs.map +1 -1
  918. package/dist/layout/AppShell.d.ts +13 -2
  919. package/dist/layout/AppShell.d.ts.map +1 -1
  920. package/dist/layout/AppShell.js +37 -21
  921. package/dist/layout/AppShell.js.map +1 -1
  922. package/dist/layout/AppShell.nav.cjs +7 -6
  923. package/dist/layout/AppShell.nav.cjs.map +1 -1
  924. package/dist/layout/AppShell.nav.d.ts.map +1 -1
  925. package/dist/layout/AppShell.nav.js +7 -6
  926. package/dist/layout/AppShell.nav.js.map +1 -1
  927. package/dist/layout/SplitPane.cjs +16 -6
  928. package/dist/layout/SplitPane.cjs.map +1 -1
  929. package/dist/layout/SplitPane.d.ts +12 -2
  930. package/dist/layout/SplitPane.d.ts.map +1 -1
  931. package/dist/layout/SplitPane.js +16 -6
  932. package/dist/layout/SplitPane.js.map +1 -1
  933. package/dist/layout/Workspace.cjs +37 -33
  934. package/dist/layout/Workspace.cjs.map +1 -1
  935. package/dist/layout/Workspace.d.ts.map +1 -1
  936. package/dist/layout/Workspace.js +37 -33
  937. package/dist/layout/Workspace.js.map +1 -1
  938. package/dist/layout/Workspace.regions.cjs +3 -3
  939. package/dist/layout/Workspace.regions.cjs.map +1 -1
  940. package/dist/layout/Workspace.regions.js +3 -3
  941. package/dist/layout/Workspace.regions.js.map +1 -1
  942. package/dist/lib/breakpoints.cjs +102 -0
  943. package/dist/lib/breakpoints.cjs.map +1 -0
  944. package/dist/lib/breakpoints.d.ts +36 -0
  945. package/dist/lib/breakpoints.d.ts.map +1 -0
  946. package/dist/lib/breakpoints.js +99 -0
  947. package/dist/lib/breakpoints.js.map +1 -0
  948. package/dist/lib/combobox.cjs +2 -1
  949. package/dist/lib/combobox.cjs.map +1 -1
  950. package/dist/lib/combobox.d.ts +1 -1
  951. package/dist/lib/combobox.d.ts.map +1 -1
  952. package/dist/lib/combobox.js +2 -1
  953. package/dist/lib/combobox.js.map +1 -1
  954. package/dist/lib/path-tree.cjs +21 -0
  955. package/dist/lib/path-tree.cjs.map +1 -1
  956. package/dist/lib/path-tree.d.ts +15 -0
  957. package/dist/lib/path-tree.d.ts.map +1 -1
  958. package/dist/lib/path-tree.js +21 -1
  959. package/dist/lib/path-tree.js.map +1 -1
  960. package/dist/overlay/Modal.cjs +2 -1
  961. package/dist/overlay/Modal.cjs.map +1 -1
  962. package/dist/overlay/Modal.d.ts.map +1 -1
  963. package/dist/overlay/Modal.js +2 -1
  964. package/dist/overlay/Modal.js.map +1 -1
  965. package/dist/overlay/dropdownMenuContext.d.ts +1 -1
  966. package/dist/profiles/editor/profileEditor.cjs +1 -1
  967. package/dist/profiles/editor/profileEditor.cjs.map +1 -1
  968. package/dist/profiles/editor/profileEditor.js +1 -1
  969. package/dist/profiles/editor/profileEditor.js.map +1 -1
  970. package/dist/profiles/editor/profileEditorSections.cjs +2 -2
  971. package/dist/profiles/editor/profileEditorSections.cjs.map +1 -1
  972. package/dist/profiles/editor/profileEditorSections.js +2 -2
  973. package/dist/profiles/editor/profileEditorSections.js.map +1 -1
  974. package/dist/profiles/query/prometheusResults.cjs +24 -36
  975. package/dist/profiles/query/prometheusResults.cjs.map +1 -1
  976. package/dist/profiles/query/prometheusResults.d.ts.map +1 -1
  977. package/dist/profiles/query/prometheusResults.js +24 -36
  978. package/dist/profiles/query/prometheusResults.js.map +1 -1
  979. package/dist/rpc/CommandForm.cjs +1 -1
  980. package/dist/rpc/CommandForm.cjs.map +1 -1
  981. package/dist/rpc/CommandForm.js +1 -1
  982. package/dist/rpc/CommandForm.js.map +1 -1
  983. package/dist/rpc/classify.cjs +1 -1
  984. package/dist/rpc/classify.cjs.map +1 -1
  985. package/dist/rpc/classify.d.ts.map +1 -1
  986. package/dist/rpc/classify.js +1 -1
  987. package/dist/rpc/classify.js.map +1 -1
  988. package/dist/rpc/useOperations.d.ts +24 -24
  989. package/dist/rpc.cjs +0 -2
  990. package/dist/rpc.d.ts +0 -1
  991. package/dist/rpc.d.ts.map +1 -1
  992. package/dist/rpc.js +1 -2
  993. package/dist/styles.css +1 -1
  994. package/dist/utils.cjs +6 -0
  995. package/dist/utils.d.ts +2 -1
  996. package/dist/utils.d.ts.map +1 -1
  997. package/dist/utils.js +3 -2
  998. package/package.json +9 -3
  999. package/schemas/json-schema-form.schema.json +9 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LintTable.js","names":[],"sources":["../../../src/data/lint/LintTable.tsx"],"sourcesContent":["import { useContainerWiderThan } from \"../../hooks/use-container-width\";\nimport { useProblemExpansion } from \"../diagnostics/use-problem-expansion\";\nimport { violationMenuItems } from \"./violation-menu-items\";\nimport { ProblemActions } from \"../diagnostics/ProblemActions\";\nimport { useMemo } from \"react\";\nimport { DataTable, type DataTableColumnInput } from \"../DataTable\";\nimport { toolMark } from \"../test-runner/marks\";\nimport { LintSeverityIcon, ToolIcon } from \"../test-runner/MarkIcons\";\nimport { ViolationCard, ViolationDetail, type HostActionProps } from \"./LintDetail\";\nimport { flattenLint, type FlatViolation } from \"./grouping\";\nimport { severityOf } from \"./stats\";\nimport { diagnosticKeys } from \"../diagnostics/diagnostic-identity\";\nimport { matchesFilterState } from \"../test-runner/filterState\";\nimport type { LintFilters, LintSeverity, LinterResult } from \"./types\";\n\ntype LintTableRow = {\n id: string;\n severity: LintSeverity;\n linter: string;\n rule: string;\n location: string;\n message: string;\n flat: FlatViolation;\n};\n\nconst SEVERITY_RANK: Record<LintSeverity, number> = { error: 0, warning: 1, info: 2 };\n\nfunction tableRows(results: readonly LinterResult[], filters: LintFilters): LintTableRow[] {\n const all = flattenLint(results, { severity: new Map(), linter: new Map() });\n const keys = diagnosticKeys(all.map((f) => [f.workDir, f.rawFile, f.linter, f.v.rule?.method, f.v.line, f.v.column, f.v.end_line, f.v.end_column, f.v.message, f.v.severity]));\n return all.map((flat, i) => ({\n id: keys[i]!,\n severity: severityOf(flat.v),\n linter: flat.linter,\n rule: flat.v.rule?.method ?? \"\",\n location: flat.file ? `${flat.file}${flat.v.line ? `:${flat.v.line}` : \"\"}` : \"\",\n message: flat.v.message ?? \"\",\n flat,\n })).filter(({ flat }) => matchesFilterState(flat.linter, filters.linter) && matchesFilterState(severityOf(flat.v), filters.severity));\n}\n\nconst COLUMNS: Array<DataTableColumnInput<LintTableRow>> = [\n {\n key: \"severity\",\n label: \"Severity\",\n sortable: true,\n sortValue: (value) => SEVERITY_RANK[value as LintSeverity],\n shrink: true,\n render: (value) => (\n <span className=\"inline-flex items-center gap-1\">\n <LintSeverityIcon severity={value as LintSeverity} />\n \n </span>\n ),\n },\n {\n key: \"linter\",\n label: \"Linter\",\n sortable: true,\n shrink: true,\n render: (value) => (\n <span className=\"inline-flex items-center gap-1\">\n <ToolIcon tool={value as string} />\n {toolMark(value as string)?.label ?? (value as string)}\n </span>\n ),\n },\n { key: \"rule\", label: \"Rule\", sortable: true, render: (value) => <span className=\"font-mono text-xs\">{value as string}</span> },\n { key: \"location\", label: \"Location\", sortable: true, render: (value) => <span title={value as string} className=\"block max-w-40 truncate font-mono text-xs\">{value as string}</span> },\n { key: \"message\", label: \"Message\", grow: true },\n];\n\nexport type LintTableProps = HostActionProps & {\n results: readonly LinterResult[];\n filters: LintFilters;\n className?: string;\n};\n\n/**\n * Every violation the filters keep as one sortable table row; clicking a row\n * opens the same violation card the tree's detail pane shows beneath it.\n */\nexport function LintTable({ results, filters, className, ...host }: LintTableProps) {\n const { ref, wider: roomy } = useContainerWiderThan(640);\n const columns = useMemo<Array<DataTableColumnInput<LintTableRow>>>(() => [...COLUMNS, {\n key: \"actions\", label: \"\", shrink: true,\n render: (_value, row) => <ProblemActions items={violationMenuItems({ violation: row.flat.v, linter: row.flat.linter, file: row.flat.rawFile ?? \"\", workDir: row.flat.workDir ?? \"\", ...host })} />,\n }], [host]);\n const allKeys = useMemo(() => tableRows(results, { severity: new Map(), linter: new Map() }).map((row) => row.id), [results]);\n const [expanded, setExpanded] = useProblemExpansion(allKeys);\n const rows = useMemo(() => tableRows(results, filters), [results, filters]);\n return (\n <div ref={ref} className=\"min-w-0\">\n {!roomy ? <div>{rows.slice().sort((a, b) => SEVERITY_RANK[a.severity] - SEVERITY_RANK[b.severity]).map(({ id, flat }) => <ViolationCard key={id} expanded={expanded.includes(id)} onExpandedChange={(open) => setExpanded((current) => open ? [...current, id] : current.filter((key) => key !== id))} violation={flat.v} linter={flat.linter} file={flat.rawFile ?? \"\"} workDir={flat.workDir ?? \"\"} showFile {...host} />)}</div> : <DataTable<LintTableRow>\n data={rows}\n columns={columns}\n getRowId={(row) => row.id}\n defaultSort={{ key: \"severity\", dir: \"asc\" }}\n emptyMessage=\"No violations match the current filters\"\n detailStyle=\"row\"\n expandedRowIds={expanded}\n onExpandedRowIdsChange={setExpanded}\n renderExpandedRow={({ flat }) => (\n <ViolationDetail\n violation={flat.v}\n linter={flat.linter}\n file={flat.rawFile ?? \"\"}\n workDir={flat.workDir ?? \"\"}\n {...host}\n />\n )}\n {...(className ? { className } : {})}\n />}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAyBA,IAAM,gBAA8C;CAAE,OAAO;CAAG,SAAS;CAAG,MAAM;AAAE;AAEpF,SAAS,UAAU,SAAkC,SAAsC;CACzF,MAAM,MAAM,YAAY,SAAS;EAAE,0BAAU,IAAI,IAAI;EAAG,wBAAQ,IAAI,IAAI;CAAE,CAAC;CAC3E,MAAM,OAAO,eAAe,IAAI,KAAK,MAAM;EAAC,EAAE;EAAS,EAAE;EAAS,EAAE;EAAQ,EAAE,EAAE,MAAM;EAAQ,EAAE,EAAE;EAAM,EAAE,EAAE;EAAQ,EAAE,EAAE;EAAU,EAAE,EAAE;EAAY,EAAE,EAAE;EAAS,EAAE,EAAE;CAAQ,CAAC,CAAC;CAC7K,OAAO,IAAI,KAAK,MAAM,OAAO;EAC3B,IAAI,KAAK;EACT,UAAU,WAAW,KAAK,CAAC;EAC3B,QAAQ,KAAK;EACb,MAAM,KAAK,EAAE,MAAM,UAAU;EAC7B,UAAU,KAAK,OAAO,GAAG,KAAK,OAAO,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,SAAS,OAAO;EAC9E,SAAS,KAAK,EAAE,WAAW;EAC3B;CACF,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,mBAAmB,KAAK,QAAQ,QAAQ,MAAM,KAAK,mBAAmB,WAAW,KAAK,CAAC,GAAG,QAAQ,QAAQ,CAAC;AACtI;AAEA,IAAM,UAAqD;CACzD;EACE,KAAK;EACL,OAAO;EACP,UAAU;EACV,YAAY,UAAU,cAAc;EACpC,QAAQ;EACR,SAAS,UACP,oBAAC,QAAD;GAAM,WAAU;GACd,UAAA,oBAAC,kBAAD,EAAkB,UAAU,MAAwB,CAAA;EAEhD,CAAA;CAEV;CACA;EACE,KAAK;EACL,OAAO;EACP,UAAU;EACV,QAAQ;EACR,SAAS,UACP,qBAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACE,oBAAC,UAAD,EAAU,MAAM,MAAkB,CAAA,GACjC,SAAS,KAAe,CAAC,EAAE,SAAU,KAClC;;CAEV;CACA;EAAE,KAAK;EAAQ,OAAO;EAAQ,UAAU;EAAM,SAAS,UAAU,oBAAC,QAAD;GAAM,WAAU;GAAqB,UAAA;EAAsB,CAAA;CAAE;CAC9H;EAAE,KAAK;EAAY,OAAO;EAAY,UAAU;EAAM,SAAS,UAAU,oBAAC,QAAD;GAAM,OAAO;GAAiB,WAAU;GAA6C,UAAA;EAAsB,CAAA;CAAE;CACtL;EAAE,KAAK;EAAW,OAAO;EAAW,MAAM;CAAK;AACjD;;;;;AAYA,SAAgB,UAAU,EAAE,SAAS,SAAS,WAAW,GAAG,QAAwB;CAClF,MAAM,EAAE,KAAK,OAAO,UAAU,sBAAsB,GAAG;CACvD,MAAM,UAAU,cAAyD,CAAC,GAAG,SAAS;EACpF,KAAK;EAAW,OAAO;EAAI,QAAQ;EACnC,SAAS,QAAQ,QAAQ,oBAAC,gBAAD,EAAgB,OAAO,mBAAmB;GAAE,WAAW,IAAI,KAAK;GAAG,QAAQ,IAAI,KAAK;GAAQ,MAAM,IAAI,KAAK,WAAW;GAAI,SAAS,IAAI,KAAK,WAAW;GAAI,GAAG;EAAK,CAAC,EAAI,CAAA;CACnM,CAAC,GAAG,CAAC,IAAI,CAAC;CACV,MAAM,UAAU,cAAc,UAAU,SAAS;EAAE,0BAAU,IAAI,IAAI;EAAG,wBAAQ,IAAI,IAAI;CAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC;CAC5H,MAAM,CAAC,UAAU,eAAe,oBAAoB,OAAO;CAC3D,MAAM,OAAO,cAAc,UAAU,SAAS,OAAO,GAAG,CAAC,SAAS,OAAO,CAAC;CAC1E,OACE,oBAAC,OAAD;EAAU;EAAK,WAAU;EACxB,UAAA,CAAC,QAAQ,oBAAC,OAAD,EAAA,UAAM,KAAK,MAAM,CAAC,CAAC,MAAM,GAAG,MAAM,cAAc,EAAE,YAAY,cAAc,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,IAAI,WAAW,oBAAC,eAAD;GAAwB,UAAU,SAAS,SAAS,EAAE;GAAG,mBAAmB,SAAS,aAAa,YAAY,OAAO,CAAC,GAAG,SAAS,EAAE,IAAI,QAAQ,QAAQ,QAAQ,QAAQ,EAAE,CAAC;GAAG,WAAW,KAAK;GAAG,QAAQ,KAAK;GAAQ,MAAM,KAAK,WAAW;GAAI,SAAS,KAAK,WAAW;GAAI,UAAA;GAAS,GAAI;EAAO,GAA7Q,EAA6Q,CAAC,EAAO,CAAA,IAAI,oBAAC,WAAD;GACpa,MAAM;GACG;GACT,WAAW,QAAQ,IAAI;GACvB,aAAa;IAAE,KAAK;IAAY,KAAK;GAAM;GAC3C,cAAa;GACb,aAAY;GACZ,gBAAgB;GAChB,wBAAwB;GACxB,oBAAoB,EAAE,WACpB,oBAAC,iBAAD;IACE,WAAW,KAAK;IAChB,QAAQ,KAAK;IACb,MAAM,KAAK,WAAW;IACtB,SAAS,KAAK,WAAW;IACzB,GAAI;GACL,CAAA;GAEH,GAAK,YAAY,EAAE,UAAU,IAAI,CAAC;EACnC,CAAA;CACI,CAAA;AAET"}
@@ -3,24 +3,35 @@ const require_UiTag = require("../../icons/components/UiTag.cjs");
3
3
  const require_UiFileCode = require("../../icons/components/UiFileCode.cjs");
4
4
  const require_UiFolder = require("../../icons/components/UiFolder.cjs");
5
5
  const require_UiWrench = require("../../icons/components/UiWrench.cjs");
6
+ const require_UiClock = require("../../icons/components/UiClock.cjs");
6
7
  const require_Icon = require("../Icon.cjs");
7
- const require_Badge = require("../Badge.cjs");
8
+ const require_status = require("../test-runner/status.cjs");
8
9
  const require_marks = require("../test-runner/marks.cjs");
9
10
  const require_MarkIcons = require("../test-runner/MarkIcons.cjs");
10
11
  const require_stats = require("./stats.cjs");
12
+ const require_LintIgnoreMenu = require("./LintIgnoreMenu.cjs");
13
+ const require_types = require("./types.cjs");
11
14
  let react_jsx_runtime = require("react/jsx-runtime");
12
15
  // src/data/lint/LintTreeNode.tsx
13
- var COUNT_TONE = {
14
- error: "danger",
15
- warning: "warning",
16
- info: "info"
17
- };
16
+ /** The error of a linter that failed to run: its error leaf's text. */
17
+ function failedToRunMessage(node) {
18
+ if (node.kind !== "linter") return void 0;
19
+ return node.children?.find((c) => c.kind === "linter-error")?.message;
20
+ }
18
21
  function NodeIcon({ node }) {
19
22
  switch (node.kind) {
20
- case "linter": return require_marks.toolMark(node.linterName) ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MarkIcons.ToolIcon, { tool: node.linterName }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
21
- icon: require_UiWrench.UiWrench,
22
- className: "shrink-0 text-muted-foreground"
23
- });
23
+ case "linter":
24
+ if (node.linter?.status === "running") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MarkIcons.OutcomeIcon, { outcome: "running" });
25
+ if (node.linter?.status === "pending") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
26
+ icon: require_UiClock.UiClock,
27
+ title: "Pending",
28
+ className: "shrink-0 text-muted-foreground"
29
+ });
30
+ if (failedToRunMessage(node) !== void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MarkIcons.LintSeverityIcon, { severity: "error" });
31
+ return require_marks.toolMark(require_stats.linterToolName(node)) ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MarkIcons.ToolIcon, { tool: require_stats.linterToolName(node) }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
32
+ icon: require_UiWrench.UiWrench,
33
+ className: "shrink-0 text-muted-foreground"
34
+ });
24
35
  case "lint-folder": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
25
36
  icon: require_UiFolder.UiFolder,
26
37
  className: "shrink-0 text-muted-foreground"
@@ -38,32 +49,44 @@ function NodeIcon({ node }) {
38
49
  }
39
50
  }
40
51
  /** One lint tree row: kind glyph, name, trailing note, and a violation count coloured by worst severity. */
41
- function LintTreeNode({ node, selected }) {
52
+ function LintTreeNode({ node, selected, actions = [], onIgnore, ignoreBusy = false }) {
42
53
  const count = node.kind === "linter-error" ? 0 : require_stats.lintNodeCount(node);
43
- const failedToRun = node.kind === "linter" && node.children?.some((c) => c.kind === "linter-error");
54
+ const failedMessage = failedToRunMessage(node);
55
+ const failedToRun = failedMessage !== void 0;
44
56
  const note = node.skipped ? node.message : failedToRun ? "failed to run" : void 0;
57
+ const noteTitle = failedToRun ? failedMessage : note;
58
+ const cached = node.kind === "linter" ? require_types.cachedAge(node.linter) : void 0;
59
+ const duration = cached ? `cached · ${cached.replace(/ ago$/, "")}` : node.kind === "linter" && !node.linter?.status && node.linter?.duration ? require_status.formatTestDuration(node.linter.duration) : "";
45
60
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
46
61
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(NodeIcon, { node }),
47
62
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
48
- className: require_utils.cn("min-w-0 truncate", selected ? "font-semibold" : "font-medium", node.kind === "linter-error" ? "text-red-600 dark:text-red-400" : "text-foreground", node.skipped && "text-muted-foreground"),
63
+ className: require_utils.cn("min-w-0 truncate", selected ? "font-semibold" : "font-medium", node.kind === "linter-error" || failedToRun ? "text-red-600 dark:text-red-400" : "text-foreground", (node.skipped || node.kind === "linter" && node.linter?.status === "pending") && "text-muted-foreground"),
49
64
  title: node.name,
50
65
  children: node.name
51
66
  }),
52
67
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "flex-1" }),
53
68
  note && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
54
69
  className: require_utils.cn("min-w-0 shrink-[100] truncate text-xs", failedToRun ? "text-red-600 dark:text-red-400" : "text-muted-foreground"),
55
- title: note,
70
+ title: noteTitle,
56
71
  children: note
57
72
  }),
73
+ duration && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
74
+ className: "shrink-0 text-xs tabular-nums text-muted-foreground",
75
+ children: duration
76
+ }),
58
77
  count > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
59
78
  className: "flex shrink-0",
60
79
  title: `${count} violation${count === 1 ? "" : "s"}`,
61
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Badge.Badge, {
62
- tone: COUNT_TONE[require_stats.lintNodeSeverity(node)],
63
- variant: "solid",
64
- size: "xxs",
65
- count
80
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
81
+ className: "text-xs tabular-nums text-muted-foreground",
82
+ children: count
66
83
  })
84
+ }),
85
+ onIgnore && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_LintIgnoreMenu.LintRowIgnoreMenu, {
86
+ actions,
87
+ onIgnore,
88
+ busy: ignoreBusy,
89
+ label: node.name
67
90
  })
68
91
  ] });
69
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LintTreeNode.cjs","names":["toolMark","ToolIcon","Icon","UiWrench","UiFolder","UiFileCode","UiTag","LintSeverityIcon","lintNodeCount","_Fragment","cn","Badge","lintNodeSeverity"],"sources":["../../../src/data/lint/LintTreeNode.tsx"],"sourcesContent":["import { Icon } from \"../Icon\";\nimport { Badge } from \"../Badge\";\nimport { cn } from \"../../lib/utils\";\nimport { UiFileCode, UiFolder, UiTag, UiWrench } from \"../../icons\";\nimport { LintSeverityIcon, ToolIcon } from \"../test-runner/MarkIcons\";\nimport { toolMark } from \"../test-runner/marks\";\nimport { lintNodeCount, lintNodeSeverity } from \"./stats\";\nimport type { LintNode, LintSeverity } from \"./types\";\n\nconst COUNT_TONE = { error: \"danger\", warning: \"warning\", info: \"info\" } as const satisfies Record<\n LintSeverity,\n \"danger\" | \"warning\" | \"info\"\n>;\n\nfunction NodeIcon({ node }: { node: LintNode }) {\n switch (node.kind) {\n case \"linter\":\n return toolMark(node.linterName) ? (\n <ToolIcon tool={node.linterName} />\n ) : (\n <Icon icon={UiWrench} className=\"shrink-0 text-muted-foreground\" />\n );\n case \"lint-folder\":\n return <Icon icon={UiFolder} className=\"shrink-0 text-muted-foreground\" />;\n case \"lint-file\":\n return <Icon icon={UiFileCode} className=\"shrink-0 text-muted-foreground\" />;\n case \"lint-rule\":\n case \"lint-rule-group\":\n return <Icon icon={UiTag} className=\"shrink-0 text-muted-foreground\" />;\n case \"linter-error\":\n return <LintSeverityIcon severity=\"error\" />;\n }\n}\n\n/** One lint tree row: kind glyph, name, trailing note, and a violation count coloured by worst severity. */\nexport function LintTreeNode({ node, selected }: { node: LintNode; selected: boolean }) {\n const count = node.kind === \"linter-error\" ? 0 : lintNodeCount(node);\n const failedToRun = node.kind === \"linter\" && node.children?.some((c) => c.kind === \"linter-error\");\n const note = node.skipped ? node.message : failedToRun ? \"failed to run\" : undefined;\n return (\n <>\n <NodeIcon node={node} />\n <span\n className={cn(\n \"min-w-0 truncate\",\n selected ? \"font-semibold\" : \"font-medium\",\n node.kind === \"linter-error\" ? \"text-red-600 dark:text-red-400\" : \"text-foreground\",\n node.skipped && \"text-muted-foreground\",\n )}\n title={node.name}\n >\n {node.name}\n </span>\n <span className=\"flex-1\" />\n {note && (\n <span\n className={cn(\n \"min-w-0 shrink-[100] truncate text-xs\",\n failedToRun ? \"text-red-600 dark:text-red-400\" : \"text-muted-foreground\",\n )}\n title={note}\n >\n {note}\n </span>\n )}\n {count > 0 && (\n <span className=\"flex shrink-0\" title={`${count} violation${count === 1 ? \"\" : \"s\"}`}>\n <Badge tone={COUNT_TONE[lintNodeSeverity(node)]} variant=\"solid\" size=\"xxs\" count={count} />\n </span>\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;AASA,IAAM,aAAa;CAAE,OAAO;CAAU,SAAS;CAAW,MAAM;AAAO;AAKvE,SAAS,SAAS,EAAE,QAA4B;CAC9C,QAAQ,KAAK,MAAb;EACE,KAAK,UACH,OAAOA,cAAAA,SAAS,KAAK,UAAU,IAC7B,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,UAAD,EAAU,MAAM,KAAK,WAAa,CAAA,IAElC,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,MAAD;GAAM,MAAMC,iBAAAA;GAAU,WAAU;EAAkC,CAAA;EAEtE,KAAK,eACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACD,aAAAA,MAAD;GAAM,MAAME,iBAAAA;GAAU,WAAU;EAAkC,CAAA;EAC3E,KAAK,aACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACF,aAAAA,MAAD;GAAM,MAAMG,mBAAAA;GAAY,WAAU;EAAkC,CAAA;EAC7E,KAAK;EACL,KAAK,mBACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACH,aAAAA,MAAD;GAAM,MAAMI,cAAAA;GAAO,WAAU;EAAkC,CAAA;EACxE,KAAK,gBACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,kBAAD,EAAkB,UAAS,QAAS,CAAA;CAC/C;AACF;;AAGA,SAAgB,aAAa,EAAE,MAAM,YAAmD;CACtF,MAAM,QAAQ,KAAK,SAAS,iBAAiB,IAAIC,cAAAA,cAAc,IAAI;CACnE,MAAM,cAAc,KAAK,SAAS,YAAY,KAAK,UAAU,MAAM,MAAM,EAAE,SAAS,cAAc;CAClG,MAAM,OAAO,KAAK,UAAU,KAAK,UAAU,cAAc,kBAAkB,KAAA;CAC3E,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA;EACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAgB,KAAO,CAAA;EACvB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GACE,WAAWC,cAAAA,GACT,oBACA,WAAW,kBAAkB,eAC7B,KAAK,SAAS,iBAAiB,mCAAmC,mBAClE,KAAK,WAAW,uBAClB;GACA,OAAO,KAAK;GAEX,UAAA,KAAK;EACF,CAAA;EACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,SAAU,CAAA;EACzB,QACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GACE,WAAWA,cAAAA,GACT,yCACA,cAAc,mCAAmC,uBACnD;GACA,OAAO;GAEN,UAAA;EACG,CAAA;EAEP,QAAQ,KACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAgB,OAAO,GAAG,MAAM,YAAY,UAAU,IAAI,KAAK;GAC7E,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,OAAD;IAAO,MAAM,WAAWC,cAAAA,iBAAiB,IAAI;IAAI,SAAQ;IAAQ,MAAK;IAAa;GAAQ,CAAA;EACvF,CAAA;CAER,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"LintTreeNode.cjs","names":["OutcomeIcon","Icon","UiClock","LintSeverityIcon","toolMark","linterToolName","ToolIcon","UiWrench","UiFolder","UiFileCode","UiTag","lintNodeCount","cachedAge","formatTestDuration","_Fragment","cn","LintRowIgnoreMenu"],"sources":["../../../src/data/lint/LintTreeNode.tsx"],"sourcesContent":["import { Icon } from \"../Icon\";\nimport { cn } from \"../../lib/utils\";\nimport { UiClock, UiFileCode, UiFolder, UiTag, UiWrench } from \"../../icons\";\nimport { LintSeverityIcon, OutcomeIcon, ToolIcon } from \"../test-runner/MarkIcons\";\nimport { toolMark } from \"../test-runner/marks\";\nimport { formatTestDuration } from \"../test-runner/status\";\nimport { linterToolName, lintNodeCount } from \"./stats\";\nimport { cachedAge, type LintAction, type LintNode } from \"./types\";\nimport { LintRowIgnoreMenu } from \"./LintIgnoreMenu\";\nimport type { IgnoreHandler } from \"./ignore-menu-items\";\n\n/** The error of a linter that failed to run: its error leaf's text. */\nfunction failedToRunMessage(node: LintNode): string | undefined {\n if (node.kind !== \"linter\") return undefined;\n return node.children?.find((c) => c.kind === \"linter-error\")?.message;\n}\n\nfunction NodeIcon({ node }: { node: LintNode }) {\n switch (node.kind) {\n case \"linter\":\n if (node.linter?.status === \"running\") return <OutcomeIcon outcome=\"running\" />;\n if (node.linter?.status === \"pending\") {\n return <Icon icon={UiClock} title=\"Pending\" className=\"shrink-0 text-muted-foreground\" />;\n }\n if (failedToRunMessage(node) !== undefined) return <LintSeverityIcon severity=\"error\" />;\n return toolMark(linterToolName(node)) ? (\n <ToolIcon tool={linterToolName(node)} />\n ) : (\n <Icon icon={UiWrench} className=\"shrink-0 text-muted-foreground\" />\n );\n case \"lint-folder\":\n return <Icon icon={UiFolder} className=\"shrink-0 text-muted-foreground\" />;\n case \"lint-file\":\n return <Icon icon={UiFileCode} className=\"shrink-0 text-muted-foreground\" />;\n case \"lint-rule\":\n case \"lint-rule-group\":\n return <Icon icon={UiTag} className=\"shrink-0 text-muted-foreground\" />;\n case \"linter-error\":\n return <LintSeverityIcon severity=\"error\" />;\n }\n}\n\n/** One lint tree row: kind glyph, name, trailing note, and a violation count coloured by worst severity. */\nexport function LintTreeNode({\n node,\n selected,\n actions = [],\n onIgnore,\n ignoreBusy = false,\n}: {\n node: LintNode;\n selected: boolean;\n /** Ignore actions offered from the row's \"⋯\" and right-click menus; needs `onIgnore`. */\n actions?: readonly LintAction[];\n onIgnore?: IgnoreHandler | undefined;\n ignoreBusy?: boolean | undefined;\n}) {\n const count = node.kind === \"linter-error\" ? 0 : lintNodeCount(node);\n const failedMessage = failedToRunMessage(node);\n const failedToRun = failedMessage !== undefined;\n const note = node.skipped ? node.message : failedToRun ? \"failed to run\" : undefined;\n const noteTitle = failedToRun ? failedMessage : note;\n const cached = node.kind === \"linter\" ? cachedAge(node.linter) : undefined;\n const duration = cached\n ? `cached · ${cached.replace(/ ago$/, \"\")}`\n : node.kind === \"linter\" && !node.linter?.status && node.linter?.duration\n ? formatTestDuration(node.linter.duration)\n : \"\";\n return (\n <>\n <NodeIcon node={node} />\n <span\n className={cn(\n \"min-w-0 truncate\",\n selected ? \"font-semibold\" : \"font-medium\",\n node.kind === \"linter-error\" || failedToRun ? \"text-red-600 dark:text-red-400\" : \"text-foreground\",\n (node.skipped || (node.kind === \"linter\" && node.linter?.status === \"pending\")) && \"text-muted-foreground\",\n )}\n title={node.name}\n >\n {node.name}\n </span>\n <span className=\"flex-1\" />\n {note && (\n <span\n className={cn(\n \"min-w-0 shrink-[100] truncate text-xs\",\n failedToRun ? \"text-red-600 dark:text-red-400\" : \"text-muted-foreground\",\n )}\n title={noteTitle}\n >\n {note}\n </span>\n )}\n {duration && <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">{duration}</span>}\n {count > 0 && (\n <span className=\"flex shrink-0\" title={`${count} violation${count === 1 ? \"\" : \"s\"}`}>\n <span className=\"text-xs tabular-nums text-muted-foreground\">{count}</span>\n </span>\n )}\n {onIgnore && <LintRowIgnoreMenu actions={actions} onIgnore={onIgnore} busy={ignoreBusy} label={node.name} />}\n </>\n );\n}\n"],"mappings":"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"}
@@ -1,7 +1,12 @@
1
- import { LintNode } from './types.js';
1
+ import { LintAction, LintNode } from './types.js';
2
+ import { IgnoreHandler } from './ignore-menu-items.js';
2
3
  /** One lint tree row: kind glyph, name, trailing note, and a violation count coloured by worst severity. */
3
- export declare function LintTreeNode({ node, selected }: {
4
+ export declare function LintTreeNode({ node, selected, actions, onIgnore, ignoreBusy, }: {
4
5
  node: LintNode;
5
6
  selected: boolean;
7
+ /** Ignore actions offered from the row's "⋯" and right-click menus; needs `onIgnore`. */
8
+ actions?: readonly LintAction[];
9
+ onIgnore?: IgnoreHandler | undefined;
10
+ ignoreBusy?: boolean | undefined;
6
11
  }): import("react").JSX.Element;
7
12
  //# sourceMappingURL=LintTreeNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LintTreeNode.d.ts","sourceRoot":"","sources":["../../../src/data/lint/LintTreeNode.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,SAAS,CAAC;AA2BtD,4GAA4G;AAC5G,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,+BAqCrF"}
1
+ {"version":3,"file":"LintTreeNode.d.ts","sourceRoot":"","sources":["../../../src/data/lint/LintTreeNode.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAa,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAiCzD,4GAA4G;AAC5G,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,QAAQ,EACR,OAAY,EACZ,QAAQ,EACR,UAAkB,GACnB,EAAE;IACD,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,yFAAyF;IACzF,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACrC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAClC,+BA+CA"}
@@ -3,24 +3,35 @@ import { UiTag } from "../../icons/components/UiTag.js";
3
3
  import { UiFileCode } from "../../icons/components/UiFileCode.js";
4
4
  import { UiFolder } from "../../icons/components/UiFolder.js";
5
5
  import { UiWrench } from "../../icons/components/UiWrench.js";
6
+ import { UiClock } from "../../icons/components/UiClock.js";
6
7
  import { Icon } from "../Icon.js";
7
- import { Badge } from "../Badge.js";
8
+ import { formatTestDuration } from "../test-runner/status.js";
8
9
  import { toolMark } from "../test-runner/marks.js";
9
- import { LintSeverityIcon, ToolIcon } from "../test-runner/MarkIcons.js";
10
- import { lintNodeCount, lintNodeSeverity } from "./stats.js";
10
+ import { LintSeverityIcon, OutcomeIcon, ToolIcon } from "../test-runner/MarkIcons.js";
11
+ import { lintNodeCount, linterToolName } from "./stats.js";
12
+ import { LintRowIgnoreMenu } from "./LintIgnoreMenu.js";
13
+ import { cachedAge } from "./types.js";
11
14
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
12
15
  // src/data/lint/LintTreeNode.tsx
13
- var COUNT_TONE = {
14
- error: "danger",
15
- warning: "warning",
16
- info: "info"
17
- };
16
+ /** The error of a linter that failed to run: its error leaf's text. */
17
+ function failedToRunMessage(node) {
18
+ if (node.kind !== "linter") return void 0;
19
+ return node.children?.find((c) => c.kind === "linter-error")?.message;
20
+ }
18
21
  function NodeIcon({ node }) {
19
22
  switch (node.kind) {
20
- case "linter": return toolMark(node.linterName) ? /* @__PURE__ */ jsx(ToolIcon, { tool: node.linterName }) : /* @__PURE__ */ jsx(Icon, {
21
- icon: UiWrench,
22
- className: "shrink-0 text-muted-foreground"
23
- });
23
+ case "linter":
24
+ if (node.linter?.status === "running") return /* @__PURE__ */ jsx(OutcomeIcon, { outcome: "running" });
25
+ if (node.linter?.status === "pending") return /* @__PURE__ */ jsx(Icon, {
26
+ icon: UiClock,
27
+ title: "Pending",
28
+ className: "shrink-0 text-muted-foreground"
29
+ });
30
+ if (failedToRunMessage(node) !== void 0) return /* @__PURE__ */ jsx(LintSeverityIcon, { severity: "error" });
31
+ return toolMark(linterToolName(node)) ? /* @__PURE__ */ jsx(ToolIcon, { tool: linterToolName(node) }) : /* @__PURE__ */ jsx(Icon, {
32
+ icon: UiWrench,
33
+ className: "shrink-0 text-muted-foreground"
34
+ });
24
35
  case "lint-folder": return /* @__PURE__ */ jsx(Icon, {
25
36
  icon: UiFolder,
26
37
  className: "shrink-0 text-muted-foreground"
@@ -38,32 +49,44 @@ function NodeIcon({ node }) {
38
49
  }
39
50
  }
40
51
  /** One lint tree row: kind glyph, name, trailing note, and a violation count coloured by worst severity. */
41
- function LintTreeNode({ node, selected }) {
52
+ function LintTreeNode({ node, selected, actions = [], onIgnore, ignoreBusy = false }) {
42
53
  const count = node.kind === "linter-error" ? 0 : lintNodeCount(node);
43
- const failedToRun = node.kind === "linter" && node.children?.some((c) => c.kind === "linter-error");
54
+ const failedMessage = failedToRunMessage(node);
55
+ const failedToRun = failedMessage !== void 0;
44
56
  const note = node.skipped ? node.message : failedToRun ? "failed to run" : void 0;
57
+ const noteTitle = failedToRun ? failedMessage : note;
58
+ const cached = node.kind === "linter" ? cachedAge(node.linter) : void 0;
59
+ const duration = cached ? `cached · ${cached.replace(/ ago$/, "")}` : node.kind === "linter" && !node.linter?.status && node.linter?.duration ? formatTestDuration(node.linter.duration) : "";
45
60
  return /* @__PURE__ */ jsxs(Fragment, { children: [
46
61
  /* @__PURE__ */ jsx(NodeIcon, { node }),
47
62
  /* @__PURE__ */ jsx("span", {
48
- className: cn("min-w-0 truncate", selected ? "font-semibold" : "font-medium", node.kind === "linter-error" ? "text-red-600 dark:text-red-400" : "text-foreground", node.skipped && "text-muted-foreground"),
63
+ className: cn("min-w-0 truncate", selected ? "font-semibold" : "font-medium", node.kind === "linter-error" || failedToRun ? "text-red-600 dark:text-red-400" : "text-foreground", (node.skipped || node.kind === "linter" && node.linter?.status === "pending") && "text-muted-foreground"),
49
64
  title: node.name,
50
65
  children: node.name
51
66
  }),
52
67
  /* @__PURE__ */ jsx("span", { className: "flex-1" }),
53
68
  note && /* @__PURE__ */ jsx("span", {
54
69
  className: cn("min-w-0 shrink-[100] truncate text-xs", failedToRun ? "text-red-600 dark:text-red-400" : "text-muted-foreground"),
55
- title: note,
70
+ title: noteTitle,
56
71
  children: note
57
72
  }),
73
+ duration && /* @__PURE__ */ jsx("span", {
74
+ className: "shrink-0 text-xs tabular-nums text-muted-foreground",
75
+ children: duration
76
+ }),
58
77
  count > 0 && /* @__PURE__ */ jsx("span", {
59
78
  className: "flex shrink-0",
60
79
  title: `${count} violation${count === 1 ? "" : "s"}`,
61
- children: /* @__PURE__ */ jsx(Badge, {
62
- tone: COUNT_TONE[lintNodeSeverity(node)],
63
- variant: "solid",
64
- size: "xxs",
65
- count
80
+ children: /* @__PURE__ */ jsx("span", {
81
+ className: "text-xs tabular-nums text-muted-foreground",
82
+ children: count
66
83
  })
84
+ }),
85
+ onIgnore && /* @__PURE__ */ jsx(LintRowIgnoreMenu, {
86
+ actions,
87
+ onIgnore,
88
+ busy: ignoreBusy,
89
+ label: node.name
67
90
  })
68
91
  ] });
69
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LintTreeNode.js","names":["_Fragment"],"sources":["../../../src/data/lint/LintTreeNode.tsx"],"sourcesContent":["import { Icon } from \"../Icon\";\nimport { Badge } from \"../Badge\";\nimport { cn } from \"../../lib/utils\";\nimport { UiFileCode, UiFolder, UiTag, UiWrench } from \"../../icons\";\nimport { LintSeverityIcon, ToolIcon } from \"../test-runner/MarkIcons\";\nimport { toolMark } from \"../test-runner/marks\";\nimport { lintNodeCount, lintNodeSeverity } from \"./stats\";\nimport type { LintNode, LintSeverity } from \"./types\";\n\nconst COUNT_TONE = { error: \"danger\", warning: \"warning\", info: \"info\" } as const satisfies Record<\n LintSeverity,\n \"danger\" | \"warning\" | \"info\"\n>;\n\nfunction NodeIcon({ node }: { node: LintNode }) {\n switch (node.kind) {\n case \"linter\":\n return toolMark(node.linterName) ? (\n <ToolIcon tool={node.linterName} />\n ) : (\n <Icon icon={UiWrench} className=\"shrink-0 text-muted-foreground\" />\n );\n case \"lint-folder\":\n return <Icon icon={UiFolder} className=\"shrink-0 text-muted-foreground\" />;\n case \"lint-file\":\n return <Icon icon={UiFileCode} className=\"shrink-0 text-muted-foreground\" />;\n case \"lint-rule\":\n case \"lint-rule-group\":\n return <Icon icon={UiTag} className=\"shrink-0 text-muted-foreground\" />;\n case \"linter-error\":\n return <LintSeverityIcon severity=\"error\" />;\n }\n}\n\n/** One lint tree row: kind glyph, name, trailing note, and a violation count coloured by worst severity. */\nexport function LintTreeNode({ node, selected }: { node: LintNode; selected: boolean }) {\n const count = node.kind === \"linter-error\" ? 0 : lintNodeCount(node);\n const failedToRun = node.kind === \"linter\" && node.children?.some((c) => c.kind === \"linter-error\");\n const note = node.skipped ? node.message : failedToRun ? \"failed to run\" : undefined;\n return (\n <>\n <NodeIcon node={node} />\n <span\n className={cn(\n \"min-w-0 truncate\",\n selected ? \"font-semibold\" : \"font-medium\",\n node.kind === \"linter-error\" ? \"text-red-600 dark:text-red-400\" : \"text-foreground\",\n node.skipped && \"text-muted-foreground\",\n )}\n title={node.name}\n >\n {node.name}\n </span>\n <span className=\"flex-1\" />\n {note && (\n <span\n className={cn(\n \"min-w-0 shrink-[100] truncate text-xs\",\n failedToRun ? \"text-red-600 dark:text-red-400\" : \"text-muted-foreground\",\n )}\n title={note}\n >\n {note}\n </span>\n )}\n {count > 0 && (\n <span className=\"flex shrink-0\" title={`${count} violation${count === 1 ? \"\" : \"s\"}`}>\n <Badge tone={COUNT_TONE[lintNodeSeverity(node)]} variant=\"solid\" size=\"xxs\" count={count} />\n </span>\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;AASA,IAAM,aAAa;CAAE,OAAO;CAAU,SAAS;CAAW,MAAM;AAAO;AAKvE,SAAS,SAAS,EAAE,QAA4B;CAC9C,QAAQ,KAAK,MAAb;EACE,KAAK,UACH,OAAO,SAAS,KAAK,UAAU,IAC7B,oBAAC,UAAD,EAAU,MAAM,KAAK,WAAa,CAAA,IAElC,oBAAC,MAAD;GAAM,MAAM;GAAU,WAAU;EAAkC,CAAA;EAEtE,KAAK,eACH,OAAO,oBAAC,MAAD;GAAM,MAAM;GAAU,WAAU;EAAkC,CAAA;EAC3E,KAAK,aACH,OAAO,oBAAC,MAAD;GAAM,MAAM;GAAY,WAAU;EAAkC,CAAA;EAC7E,KAAK;EACL,KAAK,mBACH,OAAO,oBAAC,MAAD;GAAM,MAAM;GAAO,WAAU;EAAkC,CAAA;EACxE,KAAK,gBACH,OAAO,oBAAC,kBAAD,EAAkB,UAAS,QAAS,CAAA;CAC/C;AACF;;AAGA,SAAgB,aAAa,EAAE,MAAM,YAAmD;CACtF,MAAM,QAAQ,KAAK,SAAS,iBAAiB,IAAI,cAAc,IAAI;CACnE,MAAM,cAAc,KAAK,SAAS,YAAY,KAAK,UAAU,MAAM,MAAM,EAAE,SAAS,cAAc;CAClG,MAAM,OAAO,KAAK,UAAU,KAAK,UAAU,cAAc,kBAAkB,KAAA;CAC3E,OACE,qBAAAA,UAAA,EAAA,UAAA;EACE,oBAAC,UAAD,EAAgB,KAAO,CAAA;EACvB,oBAAC,QAAD;GACE,WAAW,GACT,oBACA,WAAW,kBAAkB,eAC7B,KAAK,SAAS,iBAAiB,mCAAmC,mBAClE,KAAK,WAAW,uBAClB;GACA,OAAO,KAAK;GAEX,UAAA,KAAK;EACF,CAAA;EACN,oBAAC,QAAD,EAAM,WAAU,SAAU,CAAA;EACzB,QACC,oBAAC,QAAD;GACE,WAAW,GACT,yCACA,cAAc,mCAAmC,uBACnD;GACA,OAAO;GAEN,UAAA;EACG,CAAA;EAEP,QAAQ,KACP,oBAAC,QAAD;GAAM,WAAU;GAAgB,OAAO,GAAG,MAAM,YAAY,UAAU,IAAI,KAAK;GAC7E,UAAA,oBAAC,OAAD;IAAO,MAAM,WAAW,iBAAiB,IAAI;IAAI,SAAQ;IAAQ,MAAK;IAAa;GAAQ,CAAA;EACvF,CAAA;CAER,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"LintTreeNode.js","names":["_Fragment"],"sources":["../../../src/data/lint/LintTreeNode.tsx"],"sourcesContent":["import { Icon } from \"../Icon\";\nimport { cn } from \"../../lib/utils\";\nimport { UiClock, UiFileCode, UiFolder, UiTag, UiWrench } from \"../../icons\";\nimport { LintSeverityIcon, OutcomeIcon, ToolIcon } from \"../test-runner/MarkIcons\";\nimport { toolMark } from \"../test-runner/marks\";\nimport { formatTestDuration } from \"../test-runner/status\";\nimport { linterToolName, lintNodeCount } from \"./stats\";\nimport { cachedAge, type LintAction, type LintNode } from \"./types\";\nimport { LintRowIgnoreMenu } from \"./LintIgnoreMenu\";\nimport type { IgnoreHandler } from \"./ignore-menu-items\";\n\n/** The error of a linter that failed to run: its error leaf's text. */\nfunction failedToRunMessage(node: LintNode): string | undefined {\n if (node.kind !== \"linter\") return undefined;\n return node.children?.find((c) => c.kind === \"linter-error\")?.message;\n}\n\nfunction NodeIcon({ node }: { node: LintNode }) {\n switch (node.kind) {\n case \"linter\":\n if (node.linter?.status === \"running\") return <OutcomeIcon outcome=\"running\" />;\n if (node.linter?.status === \"pending\") {\n return <Icon icon={UiClock} title=\"Pending\" className=\"shrink-0 text-muted-foreground\" />;\n }\n if (failedToRunMessage(node) !== undefined) return <LintSeverityIcon severity=\"error\" />;\n return toolMark(linterToolName(node)) ? (\n <ToolIcon tool={linterToolName(node)} />\n ) : (\n <Icon icon={UiWrench} className=\"shrink-0 text-muted-foreground\" />\n );\n case \"lint-folder\":\n return <Icon icon={UiFolder} className=\"shrink-0 text-muted-foreground\" />;\n case \"lint-file\":\n return <Icon icon={UiFileCode} className=\"shrink-0 text-muted-foreground\" />;\n case \"lint-rule\":\n case \"lint-rule-group\":\n return <Icon icon={UiTag} className=\"shrink-0 text-muted-foreground\" />;\n case \"linter-error\":\n return <LintSeverityIcon severity=\"error\" />;\n }\n}\n\n/** One lint tree row: kind glyph, name, trailing note, and a violation count coloured by worst severity. */\nexport function LintTreeNode({\n node,\n selected,\n actions = [],\n onIgnore,\n ignoreBusy = false,\n}: {\n node: LintNode;\n selected: boolean;\n /** Ignore actions offered from the row's \"⋯\" and right-click menus; needs `onIgnore`. */\n actions?: readonly LintAction[];\n onIgnore?: IgnoreHandler | undefined;\n ignoreBusy?: boolean | undefined;\n}) {\n const count = node.kind === \"linter-error\" ? 0 : lintNodeCount(node);\n const failedMessage = failedToRunMessage(node);\n const failedToRun = failedMessage !== undefined;\n const note = node.skipped ? node.message : failedToRun ? \"failed to run\" : undefined;\n const noteTitle = failedToRun ? failedMessage : note;\n const cached = node.kind === \"linter\" ? cachedAge(node.linter) : undefined;\n const duration = cached\n ? `cached · ${cached.replace(/ ago$/, \"\")}`\n : node.kind === \"linter\" && !node.linter?.status && node.linter?.duration\n ? formatTestDuration(node.linter.duration)\n : \"\";\n return (\n <>\n <NodeIcon node={node} />\n <span\n className={cn(\n \"min-w-0 truncate\",\n selected ? \"font-semibold\" : \"font-medium\",\n node.kind === \"linter-error\" || failedToRun ? \"text-red-600 dark:text-red-400\" : \"text-foreground\",\n (node.skipped || (node.kind === \"linter\" && node.linter?.status === \"pending\")) && \"text-muted-foreground\",\n )}\n title={node.name}\n >\n {node.name}\n </span>\n <span className=\"flex-1\" />\n {note && (\n <span\n className={cn(\n \"min-w-0 shrink-[100] truncate text-xs\",\n failedToRun ? \"text-red-600 dark:text-red-400\" : \"text-muted-foreground\",\n )}\n title={noteTitle}\n >\n {note}\n </span>\n )}\n {duration && <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">{duration}</span>}\n {count > 0 && (\n <span className=\"flex shrink-0\" title={`${count} violation${count === 1 ? \"\" : \"s\"}`}>\n <span className=\"text-xs tabular-nums text-muted-foreground\">{count}</span>\n </span>\n )}\n {onIgnore && <LintRowIgnoreMenu actions={actions} onIgnore={onIgnore} busy={ignoreBusy} label={node.name} />}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAYA,SAAS,mBAAmB,MAAoC;CAC9D,IAAI,KAAK,SAAS,UAAU,OAAO,KAAA;CACnC,OAAO,KAAK,UAAU,MAAM,MAAM,EAAE,SAAS,cAAc,CAAC,EAAE;AAChE;AAEA,SAAS,SAAS,EAAE,QAA4B;CAC9C,QAAQ,KAAK,MAAb;EACE,KAAK;GACH,IAAI,KAAK,QAAQ,WAAW,WAAW,OAAO,oBAAC,aAAD,EAAa,SAAQ,UAAW,CAAA;GAC9E,IAAI,KAAK,QAAQ,WAAW,WAC1B,OAAO,oBAAC,MAAD;IAAM,MAAM;IAAS,OAAM;IAAU,WAAU;GAAkC,CAAA;GAE1F,IAAI,mBAAmB,IAAI,MAAM,KAAA,GAAW,OAAO,oBAAC,kBAAD,EAAkB,UAAS,QAAS,CAAA;GACvF,OAAO,SAAS,eAAe,IAAI,CAAC,IAClC,oBAAC,UAAD,EAAU,MAAM,eAAe,IAAI,EAAI,CAAA,IAEvC,oBAAC,MAAD;IAAM,MAAM;IAAU,WAAU;GAAkC,CAAA;EAEtE,KAAK,eACH,OAAO,oBAAC,MAAD;GAAM,MAAM;GAAU,WAAU;EAAkC,CAAA;EAC3E,KAAK,aACH,OAAO,oBAAC,MAAD;GAAM,MAAM;GAAY,WAAU;EAAkC,CAAA;EAC7E,KAAK;EACL,KAAK,mBACH,OAAO,oBAAC,MAAD;GAAM,MAAM;GAAO,WAAU;EAAkC,CAAA;EACxE,KAAK,gBACH,OAAO,oBAAC,kBAAD,EAAkB,UAAS,QAAS,CAAA;CAC/C;AACF;;AAGA,SAAgB,aAAa,EAC3B,MACA,UACA,UAAU,CAAC,GACX,UACA,aAAa,SAQZ;CACD,MAAM,QAAQ,KAAK,SAAS,iBAAiB,IAAI,cAAc,IAAI;CACnE,MAAM,gBAAgB,mBAAmB,IAAI;CAC7C,MAAM,cAAc,kBAAkB,KAAA;CACtC,MAAM,OAAO,KAAK,UAAU,KAAK,UAAU,cAAc,kBAAkB,KAAA;CAC3E,MAAM,YAAY,cAAc,gBAAgB;CAChD,MAAM,SAAS,KAAK,SAAS,WAAW,UAAU,KAAK,MAAM,IAAI,KAAA;CACjE,MAAM,WAAW,SACb,YAAY,OAAO,QAAQ,SAAS,EAAE,MACtC,KAAK,SAAS,YAAY,CAAC,KAAK,QAAQ,UAAU,KAAK,QAAQ,WAC7D,mBAAmB,KAAK,OAAO,QAAQ,IACvC;CACN,OACE,qBAAAA,UAAA,EAAA,UAAA;EACE,oBAAC,UAAD,EAAgB,KAAO,CAAA;EACvB,oBAAC,QAAD;GACE,WAAW,GACT,oBACA,WAAW,kBAAkB,eAC7B,KAAK,SAAS,kBAAkB,cAAc,mCAAmC,oBAChF,KAAK,WAAY,KAAK,SAAS,YAAY,KAAK,QAAQ,WAAW,cAAe,uBACrF;GACA,OAAO,KAAK;GAEX,UAAA,KAAK;EACF,CAAA;EACN,oBAAC,QAAD,EAAM,WAAU,SAAU,CAAA;EACzB,QACC,oBAAC,QAAD;GACE,WAAW,GACT,yCACA,cAAc,mCAAmC,uBACnD;GACA,OAAO;GAEN,UAAA;EACG,CAAA;EAEP,YAAY,oBAAC,QAAD;GAAM,WAAU;GAAuD,UAAA;EAAe,CAAA;EAClG,QAAQ,KACP,oBAAC,QAAD;GAAM,WAAU;GAAgB,OAAO,GAAG,MAAM,YAAY,UAAU,IAAI,KAAK;GAC7E,UAAA,oBAAC,QAAD;IAAM,WAAU;IAA8C,UAAA;GAAY,CAAA;EACtE,CAAA;EAEP,YAAY,oBAAC,mBAAD;GAA4B;GAAmB;GAAU,MAAM;GAAY,OAAO,KAAK;EAAO,CAAA;CAC3G,EAAA,CAAA;AAEN"}
@@ -0,0 +1,113 @@
1
+ const require_code_highlight = require("../code-highlight.cjs");
2
+ const require_FrameSourceWindow = require("../diagnostics/FrameSourceWindow.cjs");
3
+ const require_stats = require("./stats.cjs");
4
+ let react = require("react");
5
+ let react_jsx_runtime = require("react/jsx-runtime");
6
+ // src/data/lint/ViolationSnippet.tsx
7
+ /** Lines shown above and below the flagged range. */
8
+ var VIOLATION_CONTEXT_LINES = 3;
9
+ var loads = /* @__PURE__ */ new WeakMap();
10
+ function loadOnce(loader, file, workDir) {
11
+ const byFile = loads.get(loader) ?? /* @__PURE__ */ new Map();
12
+ loads.set(loader, byFile);
13
+ const key = `${workDir}\u0000${file}`;
14
+ let load = byFile.get(key);
15
+ if (!load) {
16
+ load = loader({
17
+ file,
18
+ ...workDir ? { workDir } : {}
19
+ });
20
+ byFile.set(key, load);
21
+ load.catch(() => byFile.delete(key));
22
+ }
23
+ return load;
24
+ }
25
+ function useSource(loader, file, workDir) {
26
+ const [snippet, setSnippet] = (0, react.useState)(null);
27
+ (0, react.useEffect)(() => {
28
+ if (!loader || !file) {
29
+ setSnippet(null);
30
+ return;
31
+ }
32
+ let cancelled = false;
33
+ setSnippet({ status: "loading" });
34
+ loadOnce(loader, file, workDir).then((text) => !cancelled && setSnippet({
35
+ status: "ready",
36
+ text
37
+ }), (error) => !cancelled && setSnippet({
38
+ status: "error",
39
+ message: error instanceof Error ? error.message : String(error)
40
+ }));
41
+ return () => {
42
+ cancelled = true;
43
+ };
44
+ }, [
45
+ loader,
46
+ file,
47
+ workDir
48
+ ]);
49
+ return snippet;
50
+ }
51
+ function Message({ text }) {
52
+ return text ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
53
+ className: "mt-0.5 whitespace-pre-wrap text-sm",
54
+ children: text
55
+ }) : null;
56
+ }
57
+ /**
58
+ * The flagged lines of a violation with a few lines of context either side,
59
+ * numbered and syntax-highlighted, with the full message above the scrolling
60
+ * source. Without a loader (or a line) it shows the message and the
61
+ * snippet the linter reported in `code`, if any.
62
+ */
63
+ function ViolationSnippet({ violation, file, workDir, loadSource, showMessage = true }) {
64
+ const line = violation.line ?? 0;
65
+ const snippet = useSource(line > 0 ? loadSource : void 0, file, workDir);
66
+ if (!snippet || snippet.status !== "ready") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
67
+ showMessage && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Message, { text: violation.message }),
68
+ snippet?.status === "loading" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
69
+ className: "mt-1 text-xs text-muted-foreground",
70
+ children: "Loading source…"
71
+ }),
72
+ snippet?.status === "error" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
73
+ className: "mt-1 text-xs text-red-700 dark:text-red-300",
74
+ role: "alert",
75
+ children: [
76
+ "Could not load ",
77
+ file,
78
+ ": ",
79
+ snippet.message
80
+ ]
81
+ }),
82
+ !snippet && violation.code && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
83
+ className: "mt-1 overflow-x-auto rounded bg-muted p-2 font-mono text-xs",
84
+ children: violation.code
85
+ })
86
+ ] });
87
+ const lines = snippet.text.split("\n");
88
+ const first = Math.max(1, line - 3);
89
+ const last = Math.min(lines.length, Math.max(line, violation.end_line ?? line) + 3);
90
+ const language = require_code_highlight.languageFromPath(file);
91
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
92
+ showMessage && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Message, { text: violation.message }),
93
+ line > lines.length && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
94
+ role: "alert",
95
+ className: "text-xs text-destructive",
96
+ children: "Source location is outside this file."
97
+ }),
98
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FrameSourceWindow.FrameSourceWindow, {
99
+ focalTone: require_stats.severityOf(violation),
100
+ className: "m-0 mt-1.5 max-sm:ml-0",
101
+ frame: {
102
+ sourceLines: lines.slice(first - 1, last),
103
+ sourceStartLine: first,
104
+ line,
105
+ ...language ? { sourceLanguage: language } : {}
106
+ }
107
+ })
108
+ ] });
109
+ }
110
+ exports.VIOLATION_CONTEXT_LINES = VIOLATION_CONTEXT_LINES;
111
+ exports.ViolationSnippet = ViolationSnippet;
112
+
113
+ //# sourceMappingURL=ViolationSnippet.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViolationSnippet.cjs","names":["useState","_Fragment","languageFromPath","FrameSourceWindow","severityOf"],"sources":["../../../src/data/lint/ViolationSnippet.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { languageFromPath } from \"../code-highlight\";\nimport { FrameSourceWindow } from \"../diagnostics/FrameSourceWindow\";\nimport type { OpenFileTarget } from \"../OpenInFilesLink\";\nimport type { Violation } from \"./types\";\nimport { severityOf } from \"./stats\";\n\n/** Loads a file's text, given the same work-dir-relative target \"Open in Files\" receives. */\nexport type LintSourceLoader = (target: Pick<OpenFileTarget, \"file\" | \"workDir\">) => Promise<string>;\n\n/** Lines shown above and below the flagged range. */\nexport const VIOLATION_CONTEXT_LINES = 3;\n\n// One load per file per loader: a file with many violations renders many cards.\nconst loads = new WeakMap<LintSourceLoader, Map<string, Promise<string>>>();\n\nfunction loadOnce(loader: LintSourceLoader, file: string, workDir: string): Promise<string> {\n const byFile = loads.get(loader) ?? new Map<string, Promise<string>>();\n loads.set(loader, byFile);\n const key = `${workDir}\\u0000${file}`;\n let load = byFile.get(key);\n if (!load) {\n load = loader({ file, ...(workDir ? { workDir } : {}) });\n byFile.set(key, load);\n load.catch(() => byFile.delete(key));\n }\n return load;\n}\n\ntype Snippet = { status: \"loading\" } | { status: \"ready\"; text: string } | { status: \"error\"; message: string };\n\nfunction useSource(loader: LintSourceLoader | undefined, file: string, workDir: string): Snippet | null {\n const [snippet, setSnippet] = useState<Snippet | null>(null);\n useEffect(() => {\n if (!loader || !file) {\n setSnippet(null);\n return;\n }\n let cancelled = false;\n setSnippet({ status: \"loading\" });\n loadOnce(loader, file, workDir).then(\n (text) => !cancelled && setSnippet({ status: \"ready\", text }),\n (error: unknown) =>\n !cancelled && setSnippet({ status: \"error\", message: error instanceof Error ? error.message : String(error) }),\n );\n return () => {\n cancelled = true;\n };\n }, [loader, file, workDir]);\n return snippet;\n}\n\nfunction Message({ text }: { text: string | undefined }) {\n return text ? <div className=\"mt-0.5 whitespace-pre-wrap text-sm\">{text}</div> : null;\n}\n\n/**\n * The flagged lines of a violation with a few lines of context either side,\n * numbered and syntax-highlighted, with the full message above the scrolling\n * source. Without a loader (or a line) it shows the message and the\n * snippet the linter reported in `code`, if any.\n */\nexport function ViolationSnippet({\n violation,\n file,\n workDir,\n loadSource,\n showMessage = true,\n}: {\n violation: Violation;\n showMessage?: boolean;\n file: string;\n workDir: string;\n loadSource?: LintSourceLoader | undefined;\n}) {\n const line = violation.line ?? 0;\n const snippet = useSource(line > 0 ? loadSource : undefined, file, workDir);\n\n if (!snippet || snippet.status !== \"ready\") {\n return (\n <>\n {showMessage && <Message text={violation.message} />}\n {snippet?.status === \"loading\" && <div className=\"mt-1 text-xs text-muted-foreground\">Loading source…</div>}\n {snippet?.status === \"error\" && (\n <div className=\"mt-1 text-xs text-red-700 dark:text-red-300\" role=\"alert\">\n Could not load {file}: {snippet.message}\n </div>\n )}\n {!snippet && violation.code && (\n <pre className=\"mt-1 overflow-x-auto rounded bg-muted p-2 font-mono text-xs\">{violation.code}</pre>\n )}\n </>\n );\n }\n\n const lines = snippet.text.split(\"\\n\");\n const first = Math.max(1, line - VIOLATION_CONTEXT_LINES);\n const last = Math.min(lines.length, Math.max(line, violation.end_line ?? line) + VIOLATION_CONTEXT_LINES);\n const language = languageFromPath(file);\n return (\n <>\n {showMessage && <Message text={violation.message} />}\n {line > lines.length && <p role=\"alert\" className=\"text-xs text-destructive\">Source location is outside this file.</p>}\n <FrameSourceWindow\n focalTone={severityOf(violation)}\n className=\"m-0 mt-1.5 max-sm:ml-0\"\n frame={{\n sourceLines: lines.slice(first - 1, last),\n sourceStartLine: first,\n line,\n ...(language ? { sourceLanguage: language } : {}),\n }}\n />\n </>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { OpenFileTarget } from '../OpenInFilesLink.js';
2
+ import { Violation } from './types.js';
3
+ /** Loads a file's text, given the same work-dir-relative target "Open in Files" receives. */
4
+ export type LintSourceLoader = (target: Pick<OpenFileTarget, "file" | "workDir">) => Promise<string>;
5
+ /** Lines shown above and below the flagged range. */
6
+ export declare const VIOLATION_CONTEXT_LINES = 3;
7
+ /**
8
+ * The flagged lines of a violation with a few lines of context either side,
9
+ * numbered and syntax-highlighted, with the full message above the scrolling
10
+ * source. Without a loader (or a line) it shows the message and the
11
+ * snippet the linter reported in `code`, if any.
12
+ */
13
+ export declare function ViolationSnippet({ violation, file, workDir, loadSource, showMessage, }: {
14
+ violation: Violation;
15
+ showMessage?: boolean;
16
+ file: string;
17
+ workDir: string;
18
+ loadSource?: LintSourceLoader | undefined;
19
+ }): import("react").JSX.Element;
20
+ //# sourceMappingURL=ViolationSnippet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViolationSnippet.d.ts","sourceRoot":"","sources":["../../../src/data/lint/ViolationSnippet.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,6FAA6F;AAC7F,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAErG,qDAAqD;AACrD,eAAO,MAAM,uBAAuB,IAAI,CAAC;AA6CzC;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,IAAI,EACJ,OAAO,EACP,UAAU,EACV,WAAkB,GACnB,EAAE;IACD,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAC3C,+BAyCA"}
@@ -0,0 +1,112 @@
1
+ import { languageFromPath } from "../code-highlight.js";
2
+ import { FrameSourceWindow } from "../diagnostics/FrameSourceWindow.js";
3
+ import { severityOf } from "./stats.js";
4
+ import { useEffect, useState } from "react";
5
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
+ // src/data/lint/ViolationSnippet.tsx
7
+ /** Lines shown above and below the flagged range. */
8
+ var VIOLATION_CONTEXT_LINES = 3;
9
+ var loads = /* @__PURE__ */ new WeakMap();
10
+ function loadOnce(loader, file, workDir) {
11
+ const byFile = loads.get(loader) ?? /* @__PURE__ */ new Map();
12
+ loads.set(loader, byFile);
13
+ const key = `${workDir}\u0000${file}`;
14
+ let load = byFile.get(key);
15
+ if (!load) {
16
+ load = loader({
17
+ file,
18
+ ...workDir ? { workDir } : {}
19
+ });
20
+ byFile.set(key, load);
21
+ load.catch(() => byFile.delete(key));
22
+ }
23
+ return load;
24
+ }
25
+ function useSource(loader, file, workDir) {
26
+ const [snippet, setSnippet] = useState(null);
27
+ useEffect(() => {
28
+ if (!loader || !file) {
29
+ setSnippet(null);
30
+ return;
31
+ }
32
+ let cancelled = false;
33
+ setSnippet({ status: "loading" });
34
+ loadOnce(loader, file, workDir).then((text) => !cancelled && setSnippet({
35
+ status: "ready",
36
+ text
37
+ }), (error) => !cancelled && setSnippet({
38
+ status: "error",
39
+ message: error instanceof Error ? error.message : String(error)
40
+ }));
41
+ return () => {
42
+ cancelled = true;
43
+ };
44
+ }, [
45
+ loader,
46
+ file,
47
+ workDir
48
+ ]);
49
+ return snippet;
50
+ }
51
+ function Message({ text }) {
52
+ return text ? /* @__PURE__ */ jsx("div", {
53
+ className: "mt-0.5 whitespace-pre-wrap text-sm",
54
+ children: text
55
+ }) : null;
56
+ }
57
+ /**
58
+ * The flagged lines of a violation with a few lines of context either side,
59
+ * numbered and syntax-highlighted, with the full message above the scrolling
60
+ * source. Without a loader (or a line) it shows the message and the
61
+ * snippet the linter reported in `code`, if any.
62
+ */
63
+ function ViolationSnippet({ violation, file, workDir, loadSource, showMessage = true }) {
64
+ const line = violation.line ?? 0;
65
+ const snippet = useSource(line > 0 ? loadSource : void 0, file, workDir);
66
+ if (!snippet || snippet.status !== "ready") return /* @__PURE__ */ jsxs(Fragment$1, { children: [
67
+ showMessage && /* @__PURE__ */ jsx(Message, { text: violation.message }),
68
+ snippet?.status === "loading" && /* @__PURE__ */ jsx("div", {
69
+ className: "mt-1 text-xs text-muted-foreground",
70
+ children: "Loading source…"
71
+ }),
72
+ snippet?.status === "error" && /* @__PURE__ */ jsxs("div", {
73
+ className: "mt-1 text-xs text-red-700 dark:text-red-300",
74
+ role: "alert",
75
+ children: [
76
+ "Could not load ",
77
+ file,
78
+ ": ",
79
+ snippet.message
80
+ ]
81
+ }),
82
+ !snippet && violation.code && /* @__PURE__ */ jsx("pre", {
83
+ className: "mt-1 overflow-x-auto rounded bg-muted p-2 font-mono text-xs",
84
+ children: violation.code
85
+ })
86
+ ] });
87
+ const lines = snippet.text.split("\n");
88
+ const first = Math.max(1, line - 3);
89
+ const last = Math.min(lines.length, Math.max(line, violation.end_line ?? line) + 3);
90
+ const language = languageFromPath(file);
91
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
92
+ showMessage && /* @__PURE__ */ jsx(Message, { text: violation.message }),
93
+ line > lines.length && /* @__PURE__ */ jsx("p", {
94
+ role: "alert",
95
+ className: "text-xs text-destructive",
96
+ children: "Source location is outside this file."
97
+ }),
98
+ /* @__PURE__ */ jsx(FrameSourceWindow, {
99
+ focalTone: severityOf(violation),
100
+ className: "m-0 mt-1.5 max-sm:ml-0",
101
+ frame: {
102
+ sourceLines: lines.slice(first - 1, last),
103
+ sourceStartLine: first,
104
+ line,
105
+ ...language ? { sourceLanguage: language } : {}
106
+ }
107
+ })
108
+ ] });
109
+ }
110
+ export { VIOLATION_CONTEXT_LINES, ViolationSnippet };
111
+
112
+ //# sourceMappingURL=ViolationSnippet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViolationSnippet.js","names":["_Fragment"],"sources":["../../../src/data/lint/ViolationSnippet.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { languageFromPath } from \"../code-highlight\";\nimport { FrameSourceWindow } from \"../diagnostics/FrameSourceWindow\";\nimport type { OpenFileTarget } from \"../OpenInFilesLink\";\nimport type { Violation } from \"./types\";\nimport { severityOf } from \"./stats\";\n\n/** Loads a file's text, given the same work-dir-relative target \"Open in Files\" receives. */\nexport type LintSourceLoader = (target: Pick<OpenFileTarget, \"file\" | \"workDir\">) => Promise<string>;\n\n/** Lines shown above and below the flagged range. */\nexport const VIOLATION_CONTEXT_LINES = 3;\n\n// One load per file per loader: a file with many violations renders many cards.\nconst loads = new WeakMap<LintSourceLoader, Map<string, Promise<string>>>();\n\nfunction loadOnce(loader: LintSourceLoader, file: string, workDir: string): Promise<string> {\n const byFile = loads.get(loader) ?? new Map<string, Promise<string>>();\n loads.set(loader, byFile);\n const key = `${workDir}\\u0000${file}`;\n let load = byFile.get(key);\n if (!load) {\n load = loader({ file, ...(workDir ? { workDir } : {}) });\n byFile.set(key, load);\n load.catch(() => byFile.delete(key));\n }\n return load;\n}\n\ntype Snippet = { status: \"loading\" } | { status: \"ready\"; text: string } | { status: \"error\"; message: string };\n\nfunction useSource(loader: LintSourceLoader | undefined, file: string, workDir: string): Snippet | null {\n const [snippet, setSnippet] = useState<Snippet | null>(null);\n useEffect(() => {\n if (!loader || !file) {\n setSnippet(null);\n return;\n }\n let cancelled = false;\n setSnippet({ status: \"loading\" });\n loadOnce(loader, file, workDir).then(\n (text) => !cancelled && setSnippet({ status: \"ready\", text }),\n (error: unknown) =>\n !cancelled && setSnippet({ status: \"error\", message: error instanceof Error ? error.message : String(error) }),\n );\n return () => {\n cancelled = true;\n };\n }, [loader, file, workDir]);\n return snippet;\n}\n\nfunction Message({ text }: { text: string | undefined }) {\n return text ? <div className=\"mt-0.5 whitespace-pre-wrap text-sm\">{text}</div> : null;\n}\n\n/**\n * The flagged lines of a violation with a few lines of context either side,\n * numbered and syntax-highlighted, with the full message above the scrolling\n * source. Without a loader (or a line) it shows the message and the\n * snippet the linter reported in `code`, if any.\n */\nexport function ViolationSnippet({\n violation,\n file,\n workDir,\n loadSource,\n showMessage = true,\n}: {\n violation: Violation;\n showMessage?: boolean;\n file: string;\n workDir: string;\n loadSource?: LintSourceLoader | undefined;\n}) {\n const line = violation.line ?? 0;\n const snippet = useSource(line > 0 ? loadSource : undefined, file, workDir);\n\n if (!snippet || snippet.status !== \"ready\") {\n return (\n <>\n {showMessage && <Message text={violation.message} />}\n {snippet?.status === \"loading\" && <div className=\"mt-1 text-xs text-muted-foreground\">Loading source…</div>}\n {snippet?.status === \"error\" && (\n <div className=\"mt-1 text-xs text-red-700 dark:text-red-300\" role=\"alert\">\n Could not load {file}: {snippet.message}\n </div>\n )}\n {!snippet && violation.code && (\n <pre className=\"mt-1 overflow-x-auto rounded bg-muted p-2 font-mono text-xs\">{violation.code}</pre>\n )}\n </>\n );\n }\n\n const lines = snippet.text.split(\"\\n\");\n const first = Math.max(1, line - VIOLATION_CONTEXT_LINES);\n const last = Math.min(lines.length, Math.max(line, violation.end_line ?? line) + VIOLATION_CONTEXT_LINES);\n const language = languageFromPath(file);\n return (\n <>\n {showMessage && <Message text={violation.message} />}\n {line > lines.length && <p role=\"alert\" className=\"text-xs text-destructive\">Source location is outside this file.</p>}\n <FrameSourceWindow\n focalTone={severityOf(violation)}\n className=\"m-0 mt-1.5 max-sm:ml-0\"\n frame={{\n sourceLines: lines.slice(first - 1, last),\n sourceStartLine: first,\n line,\n ...(language ? { sourceLanguage: language } : {}),\n }}\n />\n </>\n );\n}\n"],"mappings":";;;;;;;AAWA,IAAa,0BAA0B;AAGvC,IAAM,wBAAQ,IAAI,QAAwD;AAE1E,SAAS,SAAS,QAA0B,MAAc,SAAkC;CAC1F,MAAM,SAAS,MAAM,IAAI,MAAM,qBAAK,IAAI,IAA6B;CACrE,MAAM,IAAI,QAAQ,MAAM;CACxB,MAAM,MAAM,GAAG,QAAQ,QAAQ;CAC/B,IAAI,OAAO,OAAO,IAAI,GAAG;CACzB,IAAI,CAAC,MAAM;EACT,OAAO,OAAO;GAAE;GAAM,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;EAAG,CAAC;EACvD,OAAO,IAAI,KAAK,IAAI;EACpB,KAAK,YAAY,OAAO,OAAO,GAAG,CAAC;CACrC;CACA,OAAO;AACT;AAIA,SAAS,UAAU,QAAsC,MAAc,SAAiC;CACtG,MAAM,CAAC,SAAS,cAAc,SAAyB,IAAI;CAC3D,gBAAgB;EACd,IAAI,CAAC,UAAU,CAAC,MAAM;GACpB,WAAW,IAAI;GACf;EACF;EACA,IAAI,YAAY;EAChB,WAAW,EAAE,QAAQ,UAAU,CAAC;EAChC,SAAS,QAAQ,MAAM,OAAO,CAAC,CAAC,MAC7B,SAAS,CAAC,aAAa,WAAW;GAAE,QAAQ;GAAS;EAAK,CAAC,IAC3D,UACC,CAAC,aAAa,WAAW;GAAE,QAAQ;GAAS,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;EAAE,CAAC,CACjH;EACA,aAAa;GACX,YAAY;EACd;CACF,GAAG;EAAC;EAAQ;EAAM;CAAO,CAAC;CAC1B,OAAO;AACT;AAEA,SAAS,QAAQ,EAAE,QAAsC;CACvD,OAAO,OAAO,oBAAC,OAAD;EAAK,WAAU;EAAsC,UAAA;CAAU,CAAA,IAAI;AACnF;;;;;;;AAQA,SAAgB,iBAAiB,EAC/B,WACA,MACA,SACA,YACA,cAAc,QAOb;CACD,MAAM,OAAO,UAAU,QAAQ;CAC/B,MAAM,UAAU,UAAU,OAAO,IAAI,aAAa,KAAA,GAAW,MAAM,OAAO;CAE1E,IAAI,CAAC,WAAW,QAAQ,WAAW,SACjC,OACE,qBAAAA,YAAA,EAAA,UAAA;EACG,eAAe,oBAAC,SAAD,EAAS,MAAM,UAAU,QAAU,CAAA;EAClD,SAAS,WAAW,aAAa,oBAAC,OAAD;GAAK,WAAU;GAAqC,UAAA;EAAoB,CAAA;EACzG,SAAS,WAAW,WACnB,qBAAC,OAAD;GAAK,WAAU;GAA8C,MAAK;GAAlE,UAAA;IAA0E;IACxD;IAAK;IAAG,QAAQ;GAC7B;;EAEN,CAAC,WAAW,UAAU,QACrB,oBAAC,OAAD;GAAK,WAAU;GAA+D,UAAA,UAAU;EAAU,CAAA;CAEpG,EAAA,CAAA;CAIN,MAAM,QAAQ,QAAQ,KAAK,MAAM,IAAI;CACrC,MAAM,QAAQ,KAAK,IAAI,GAAG,OAAA,CAA8B;CACxD,MAAM,OAAO,KAAK,IAAI,MAAM,QAAQ,KAAK,IAAI,MAAM,UAAU,YAAY,IAAI,IAAA,CAA2B;CACxG,MAAM,WAAW,iBAAiB,IAAI;CACtC,OACE,qBAAAA,YAAA,EAAA,UAAA;EACG,eAAe,oBAAC,SAAD,EAAS,MAAM,UAAU,QAAU,CAAA;EAClD,OAAO,MAAM,UAAU,oBAAC,KAAD;GAAG,MAAK;GAAQ,WAAU;GAA2B,UAAA;EAAwC,CAAA;EACrH,oBAAC,mBAAD;GACE,WAAW,WAAW,SAAS;GAC/B,WAAU;GACV,OAAO;IACL,aAAa,MAAM,MAAM,QAAQ,GAAG,IAAI;IACxC,iBAAiB;IACjB;IACA,GAAI,WAAW,EAAE,gBAAgB,SAAS,IAAI,CAAC;GACjD;EACD,CAAA;CACD,EAAA,CAAA;AAEN"}