@flanksource/clicky-ui 0.3.55 → 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 (991) 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 +19 -29
  628. package/dist/data/test-runner/MatrixMarks.cjs.map +1 -1
  629. package/dist/data/test-runner/MatrixMarks.d.ts +4 -4
  630. package/dist/data/test-runner/MatrixMarks.d.ts.map +1 -1
  631. package/dist/data/test-runner/MatrixMarks.js +19 -29
  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/types.d.ts +2 -0
  656. package/dist/data/test-runner/types.d.ts.map +1 -1
  657. package/dist/data/timeseries-query.cjs +98 -2
  658. package/dist/data/timeseries-query.cjs.map +1 -1
  659. package/dist/data/timeseries-query.d.ts +31 -5
  660. package/dist/data/timeseries-query.d.ts.map +1 -1
  661. package/dist/data/timeseries-query.js +98 -3
  662. package/dist/data/timeseries-query.js.map +1 -1
  663. package/dist/data/timeseries-stream-provider.cjs +38 -0
  664. package/dist/data/timeseries-stream-provider.cjs.map +1 -0
  665. package/dist/data/timeseries-stream-provider.d.ts +26 -0
  666. package/dist/data/timeseries-stream-provider.d.ts.map +1 -0
  667. package/dist/data/timeseries-stream-provider.js +38 -0
  668. package/dist/data/timeseries-stream-provider.js.map +1 -0
  669. package/dist/data/timeseries-stream.cjs +304 -0
  670. package/dist/data/timeseries-stream.cjs.map +1 -0
  671. package/dist/data/timeseries-stream.d.ts +81 -0
  672. package/dist/data/timeseries-stream.d.ts.map +1 -0
  673. package/dist/data/timeseries-stream.fixtures.d.ts +36 -0
  674. package/dist/data/timeseries-stream.fixtures.d.ts.map +1 -0
  675. package/dist/data/timeseries-stream.js +296 -0
  676. package/dist/data/timeseries-stream.js.map +1 -0
  677. package/dist/data/token-style.cjs +13 -0
  678. package/dist/data/token-style.cjs.map +1 -0
  679. package/dist/data/token-style.d.ts +4 -0
  680. package/dist/data/token-style.d.ts.map +1 -0
  681. package/dist/data/token-style.js +13 -0
  682. package/dist/data/token-style.js.map +1 -0
  683. package/dist/data/traces/ProcessTraceDetail.cjs +1 -1
  684. package/dist/data/traces/ProcessTraceDetail.js +1 -1
  685. package/dist/data/traces/index.d.ts +1 -1
  686. package/dist/data/traces/index.d.ts.map +1 -1
  687. package/dist/data/use-data-table-virtual.d.ts +1 -1
  688. package/dist/data/version-info.cjs +3 -3
  689. package/dist/data/version-info.js +3 -3
  690. package/dist/data/workload-panel/MemoryStack.cjs +49 -0
  691. package/dist/data/workload-panel/MemoryStack.cjs.map +1 -0
  692. package/dist/data/workload-panel/MemoryStack.d.ts +11 -0
  693. package/dist/data/workload-panel/MemoryStack.d.ts.map +1 -0
  694. package/dist/data/workload-panel/MemoryStack.js +48 -0
  695. package/dist/data/workload-panel/MemoryStack.js.map +1 -0
  696. package/dist/data/workload-panel/Metrics.cjs +197 -0
  697. package/dist/data/workload-panel/Metrics.cjs.map +1 -0
  698. package/dist/data/workload-panel/Metrics.d.ts +11 -0
  699. package/dist/data/workload-panel/Metrics.d.ts.map +1 -0
  700. package/dist/data/workload-panel/Metrics.js +196 -0
  701. package/dist/data/workload-panel/Metrics.js.map +1 -0
  702. package/dist/data/workload-panel/WorkloadPanel.cjs +66 -0
  703. package/dist/data/workload-panel/WorkloadPanel.cjs.map +1 -0
  704. package/dist/data/workload-panel/WorkloadPanel.d.ts +3 -0
  705. package/dist/data/workload-panel/WorkloadPanel.d.ts.map +1 -0
  706. package/dist/data/workload-panel/WorkloadPanel.js +66 -0
  707. package/dist/data/workload-panel/WorkloadPanel.js.map +1 -0
  708. package/dist/data/workload-panel/fixtures.d.ts +60 -0
  709. package/dist/data/workload-panel/fixtures.d.ts.map +1 -0
  710. package/dist/data/workload-panel/model.cjs +137 -0
  711. package/dist/data/workload-panel/model.cjs.map +1 -0
  712. package/dist/data/workload-panel/model.d.ts +53 -0
  713. package/dist/data/workload-panel/model.d.ts.map +1 -0
  714. package/dist/data/workload-panel/model.js +133 -0
  715. package/dist/data/workload-panel/model.js.map +1 -0
  716. package/dist/data/workload-panel/types.d.ts +56 -0
  717. package/dist/data/workload-panel/types.d.ts.map +1 -0
  718. package/dist/data.cjs +57 -6
  719. package/dist/data.d.ts +9 -1
  720. package/dist/data.d.ts.map +1 -1
  721. package/dist/data.js +27 -10
  722. package/dist/file-findings/AnnotatedCode.cjs +243 -0
  723. package/dist/file-findings/AnnotatedCode.cjs.map +1 -0
  724. package/dist/file-findings/AnnotatedCode.d.ts +30 -0
  725. package/dist/file-findings/AnnotatedCode.d.ts.map +1 -0
  726. package/dist/file-findings/AnnotatedCode.js +243 -0
  727. package/dist/file-findings/AnnotatedCode.js.map +1 -0
  728. package/dist/file-findings/FileFindingsView.cjs +213 -0
  729. package/dist/file-findings/FileFindingsView.cjs.map +1 -0
  730. package/dist/file-findings/FileFindingsView.d.ts +35 -0
  731. package/dist/file-findings/FileFindingsView.d.ts.map +1 -0
  732. package/dist/file-findings/FileFindingsView.js +213 -0
  733. package/dist/file-findings/FileFindingsView.js.map +1 -0
  734. package/dist/file-findings/LazyAnnotatedCode.cjs +22 -0
  735. package/dist/file-findings/LazyAnnotatedCode.cjs.map +1 -0
  736. package/dist/file-findings/LazyAnnotatedCode.d.ts +5 -0
  737. package/dist/file-findings/LazyAnnotatedCode.d.ts.map +1 -0
  738. package/dist/file-findings/LazyAnnotatedCode.js +22 -0
  739. package/dist/file-findings/LazyAnnotatedCode.js.map +1 -0
  740. package/dist/file-findings/adapters.cjs +155 -0
  741. package/dist/file-findings/adapters.cjs.map +1 -0
  742. package/dist/file-findings/adapters.d.ts +24 -0
  743. package/dist/file-findings/adapters.d.ts.map +1 -0
  744. package/dist/file-findings/adapters.js +153 -0
  745. package/dist/file-findings/adapters.js.map +1 -0
  746. package/dist/file-findings/file-review/CommentDraft.cjs +97 -0
  747. package/dist/file-findings/file-review/CommentDraft.cjs.map +1 -0
  748. package/dist/file-findings/file-review/CommentDraft.d.ts +25 -0
  749. package/dist/file-findings/file-review/CommentDraft.d.ts.map +1 -0
  750. package/dist/file-findings/file-review/CommentDraft.js +97 -0
  751. package/dist/file-findings/file-review/CommentDraft.js.map +1 -0
  752. package/dist/file-findings/file-review/FileReview.cjs +863 -0
  753. package/dist/file-findings/file-review/FileReview.cjs.map +1 -0
  754. package/dist/file-findings/file-review/FileReview.d.ts +79 -0
  755. package/dist/file-findings/file-review/FileReview.d.ts.map +1 -0
  756. package/dist/file-findings/file-review/FileReview.fixtures.d.ts +25 -0
  757. package/dist/file-findings/file-review/FileReview.fixtures.d.ts.map +1 -0
  758. package/dist/file-findings/file-review/FileReview.js +863 -0
  759. package/dist/file-findings/file-review/FileReview.js.map +1 -0
  760. package/dist/file-findings/file-review/InlineAuthors.cjs +77 -0
  761. package/dist/file-findings/file-review/InlineAuthors.cjs.map +1 -0
  762. package/dist/file-findings/file-review/InlineAuthors.d.ts +9 -0
  763. package/dist/file-findings/file-review/InlineAuthors.d.ts.map +1 -0
  764. package/dist/file-findings/file-review/InlineAuthors.js +77 -0
  765. package/dist/file-findings/file-review/InlineAuthors.js.map +1 -0
  766. package/dist/file-findings/file-review/InlineThread.cjs +77 -0
  767. package/dist/file-findings/file-review/InlineThread.cjs.map +1 -0
  768. package/dist/file-findings/file-review/InlineThread.d.ts +27 -0
  769. package/dist/file-findings/file-review/InlineThread.d.ts.map +1 -0
  770. package/dist/file-findings/file-review/InlineThread.js +77 -0
  771. package/dist/file-findings/file-review/InlineThread.js.map +1 -0
  772. package/dist/file-findings/file-review/ProblemsList.cjs +164 -0
  773. package/dist/file-findings/file-review/ProblemsList.cjs.map +1 -0
  774. package/dist/file-findings/file-review/ProblemsList.d.ts +15 -0
  775. package/dist/file-findings/file-review/ProblemsList.d.ts.map +1 -0
  776. package/dist/file-findings/file-review/ProblemsList.js +164 -0
  777. package/dist/file-findings/file-review/ProblemsList.js.map +1 -0
  778. package/dist/file-findings/file-review/SourceView.cjs +179 -0
  779. package/dist/file-findings/file-review/SourceView.cjs.map +1 -0
  780. package/dist/file-findings/file-review/SourceView.d.ts +29 -0
  781. package/dist/file-findings/file-review/SourceView.d.ts.map +1 -0
  782. package/dist/file-findings/file-review/SourceView.js +179 -0
  783. package/dist/file-findings/file-review/SourceView.js.map +1 -0
  784. package/dist/file-findings/file-review/blame.cjs +35 -0
  785. package/dist/file-findings/file-review/blame.cjs.map +1 -0
  786. package/dist/file-findings/file-review/blame.d.ts +28 -0
  787. package/dist/file-findings/file-review/blame.d.ts.map +1 -0
  788. package/dist/file-findings/file-review/blame.js +33 -0
  789. package/dist/file-findings/file-review/blame.js.map +1 -0
  790. package/dist/file-findings/file-review/geometry.cjs +101 -0
  791. package/dist/file-findings/file-review/geometry.cjs.map +1 -0
  792. package/dist/file-findings/file-review/geometry.d.ts +45 -0
  793. package/dist/file-findings/file-review/geometry.d.ts.map +1 -0
  794. package/dist/file-findings/file-review/geometry.js +98 -0
  795. package/dist/file-findings/file-review/geometry.js.map +1 -0
  796. package/dist/file-findings/file-review/hooks.cjs +101 -0
  797. package/dist/file-findings/file-review/hooks.cjs.map +1 -0
  798. package/dist/file-findings/file-review/hooks.d.ts +22 -0
  799. package/dist/file-findings/file-review/hooks.d.ts.map +1 -0
  800. package/dist/file-findings/file-review/hooks.js +99 -0
  801. package/dist/file-findings/file-review/hooks.js.map +1 -0
  802. package/dist/file-findings/file-review/marks.cjs +52 -0
  803. package/dist/file-findings/file-review/marks.cjs.map +1 -0
  804. package/dist/file-findings/file-review/marks.d.ts +23 -0
  805. package/dist/file-findings/file-review/marks.d.ts.map +1 -0
  806. package/dist/file-findings/file-review/marks.js +47 -0
  807. package/dist/file-findings/file-review/marks.js.map +1 -0
  808. package/dist/file-findings/file-review/problem-filters.cjs +14 -0
  809. package/dist/file-findings/file-review/problem-filters.cjs.map +1 -0
  810. package/dist/file-findings/file-review/problem-filters.d.ts +10 -0
  811. package/dist/file-findings/file-review/problem-filters.d.ts.map +1 -0
  812. package/dist/file-findings/file-review/problem-filters.js +13 -0
  813. package/dist/file-findings/file-review/problem-filters.js.map +1 -0
  814. package/dist/file-findings/file-review/quote-anchor.cjs +234 -0
  815. package/dist/file-findings/file-review/quote-anchor.cjs.map +1 -0
  816. package/dist/file-findings/file-review/quote-anchor.d.ts +54 -0
  817. package/dist/file-findings/file-review/quote-anchor.d.ts.map +1 -0
  818. package/dist/file-findings/file-review/quote-anchor.js +226 -0
  819. package/dist/file-findings/file-review/quote-anchor.js.map +1 -0
  820. package/dist/file-findings/file-review/source-anchor.cjs +104 -0
  821. package/dist/file-findings/file-review/source-anchor.cjs.map +1 -0
  822. package/dist/file-findings/file-review/source-anchor.d.ts +27 -0
  823. package/dist/file-findings/file-review/source-anchor.d.ts.map +1 -0
  824. package/dist/file-findings/file-review/source-anchor.js +99 -0
  825. package/dist/file-findings/file-review/source-anchor.js.map +1 -0
  826. package/dist/file-findings/file-review/source-marks.cjs +71 -0
  827. package/dist/file-findings/file-review/source-marks.cjs.map +1 -0
  828. package/dist/file-findings/file-review/source-marks.d.ts +27 -0
  829. package/dist/file-findings/file-review/source-marks.d.ts.map +1 -0
  830. package/dist/file-findings/file-review/source-marks.js +68 -0
  831. package/dist/file-findings/file-review/source-marks.js.map +1 -0
  832. package/dist/file-findings/findings-comments.cjs +136 -0
  833. package/dist/file-findings/findings-comments.cjs.map +1 -0
  834. package/dist/file-findings/findings-comments.d.ts +28 -0
  835. package/dist/file-findings/findings-comments.d.ts.map +1 -0
  836. package/dist/file-findings/findings-comments.js +131 -0
  837. package/dist/file-findings/findings-comments.js.map +1 -0
  838. package/dist/file-findings/findings-languages.cjs +53 -0
  839. package/dist/file-findings/findings-languages.cjs.map +1 -0
  840. package/dist/file-findings/findings-languages.d.ts +11 -0
  841. package/dist/file-findings/findings-languages.d.ts.map +1 -0
  842. package/dist/file-findings/findings-languages.js +53 -0
  843. package/dist/file-findings/findings-languages.js.map +1 -0
  844. package/dist/file-findings/mdx-source.cjs +48 -0
  845. package/dist/file-findings/mdx-source.cjs.map +1 -0
  846. package/dist/file-findings/mdx-source.d.ts +7 -0
  847. package/dist/file-findings/mdx-source.d.ts.map +1 -0
  848. package/dist/file-findings/mdx-source.js +48 -0
  849. package/dist/file-findings/mdx-source.js.map +1 -0
  850. package/dist/file-findings/monaco-language.cjs +73 -0
  851. package/dist/file-findings/monaco-language.cjs.map +1 -0
  852. package/dist/file-findings/monaco-language.d.ts +11 -0
  853. package/dist/file-findings/monaco-language.d.ts.map +1 -0
  854. package/dist/file-findings/monaco-language.js +72 -0
  855. package/dist/file-findings/monaco-language.js.map +1 -0
  856. package/dist/file-findings/severity-counts.cjs +20 -0
  857. package/dist/file-findings/severity-counts.cjs.map +1 -0
  858. package/dist/file-findings/severity-counts.d.ts +5 -0
  859. package/dist/file-findings/severity-counts.d.ts.map +1 -0
  860. package/dist/file-findings/severity-counts.js +19 -0
  861. package/dist/file-findings/severity-counts.js.map +1 -0
  862. package/dist/file-findings/types.cjs +12 -0
  863. package/dist/file-findings/types.cjs.map +1 -0
  864. package/dist/file-findings/types.d.ts +43 -0
  865. package/dist/file-findings/types.d.ts.map +1 -0
  866. package/dist/file-findings/types.js +11 -0
  867. package/dist/file-findings/types.js.map +1 -0
  868. package/dist/file-findings.cjs +47 -0
  869. package/dist/file-findings.d.ts +15 -0
  870. package/dist/file-findings.d.ts.map +1 -0
  871. package/dist/file-findings.js +15 -0
  872. package/dist/hooks/event-hub.cjs +22 -8
  873. package/dist/hooks/event-hub.cjs.map +1 -1
  874. package/dist/hooks/event-hub.d.ts.map +1 -1
  875. package/dist/hooks/event-hub.js +22 -8
  876. package/dist/hooks/event-hub.js.map +1 -1
  877. package/dist/icons/components/UiBrowser.cjs +51 -0
  878. package/dist/icons/components/UiBrowser.cjs.map +1 -0
  879. package/dist/icons/components/UiBrowser.d.ts +15 -0
  880. package/dist/icons/components/UiBrowser.d.ts.map +1 -0
  881. package/dist/icons/components/UiBrowser.js +48 -0
  882. package/dist/icons/components/UiBrowser.js.map +1 -0
  883. package/dist/icons/components/UiCreditCard.cjs +51 -0
  884. package/dist/icons/components/UiCreditCard.cjs.map +1 -0
  885. package/dist/icons/components/UiCreditCard.d.ts +15 -0
  886. package/dist/icons/components/UiCreditCard.d.ts.map +1 -0
  887. package/dist/icons/components/UiCreditCard.js +48 -0
  888. package/dist/icons/components/UiCreditCard.js.map +1 -0
  889. package/dist/icons/components/UiShoppingCart.cjs +51 -0
  890. package/dist/icons/components/UiShoppingCart.cjs.map +1 -0
  891. package/dist/icons/components/UiShoppingCart.d.ts +15 -0
  892. package/dist/icons/components/UiShoppingCart.d.ts.map +1 -0
  893. package/dist/icons/components/UiShoppingCart.js +48 -0
  894. package/dist/icons/components/UiShoppingCart.js.map +1 -0
  895. package/dist/icons/index.d.ts +6 -0
  896. package/dist/icons/index.d.ts.map +1 -1
  897. package/dist/icons/registry.cjs +6 -0
  898. package/dist/icons/registry.cjs.map +1 -1
  899. package/dist/icons/registry.d.ts.map +1 -1
  900. package/dist/icons/registry.js +6 -0
  901. package/dist/icons/registry.js.map +1 -1
  902. package/dist/icons.cjs +9 -0
  903. package/dist/icons.js +4 -1
  904. package/dist/index.cjs +75 -7
  905. package/dist/index.d.ts +1 -0
  906. package/dist/index.d.ts.map +1 -1
  907. package/dist/index.js +35 -12
  908. package/dist/layout/AppShell.cjs +37 -21
  909. package/dist/layout/AppShell.cjs.map +1 -1
  910. package/dist/layout/AppShell.d.ts +13 -2
  911. package/dist/layout/AppShell.d.ts.map +1 -1
  912. package/dist/layout/AppShell.js +37 -21
  913. package/dist/layout/AppShell.js.map +1 -1
  914. package/dist/layout/AppShell.nav.cjs +7 -6
  915. package/dist/layout/AppShell.nav.cjs.map +1 -1
  916. package/dist/layout/AppShell.nav.d.ts.map +1 -1
  917. package/dist/layout/AppShell.nav.js +7 -6
  918. package/dist/layout/AppShell.nav.js.map +1 -1
  919. package/dist/layout/SplitPane.cjs +16 -6
  920. package/dist/layout/SplitPane.cjs.map +1 -1
  921. package/dist/layout/SplitPane.d.ts +12 -2
  922. package/dist/layout/SplitPane.d.ts.map +1 -1
  923. package/dist/layout/SplitPane.js +16 -6
  924. package/dist/layout/SplitPane.js.map +1 -1
  925. package/dist/layout/Workspace.cjs +37 -33
  926. package/dist/layout/Workspace.cjs.map +1 -1
  927. package/dist/layout/Workspace.d.ts.map +1 -1
  928. package/dist/layout/Workspace.js +37 -33
  929. package/dist/layout/Workspace.js.map +1 -1
  930. package/dist/layout/Workspace.regions.cjs +3 -3
  931. package/dist/layout/Workspace.regions.cjs.map +1 -1
  932. package/dist/layout/Workspace.regions.js +3 -3
  933. package/dist/layout/Workspace.regions.js.map +1 -1
  934. package/dist/lib/breakpoints.cjs +102 -0
  935. package/dist/lib/breakpoints.cjs.map +1 -0
  936. package/dist/lib/breakpoints.d.ts +36 -0
  937. package/dist/lib/breakpoints.d.ts.map +1 -0
  938. package/dist/lib/breakpoints.js +99 -0
  939. package/dist/lib/breakpoints.js.map +1 -0
  940. package/dist/lib/combobox.cjs +2 -1
  941. package/dist/lib/combobox.cjs.map +1 -1
  942. package/dist/lib/combobox.d.ts +1 -1
  943. package/dist/lib/combobox.d.ts.map +1 -1
  944. package/dist/lib/combobox.js +2 -1
  945. package/dist/lib/combobox.js.map +1 -1
  946. package/dist/lib/path-tree.cjs +21 -0
  947. package/dist/lib/path-tree.cjs.map +1 -1
  948. package/dist/lib/path-tree.d.ts +15 -0
  949. package/dist/lib/path-tree.d.ts.map +1 -1
  950. package/dist/lib/path-tree.js +21 -1
  951. package/dist/lib/path-tree.js.map +1 -1
  952. package/dist/overlay/Modal.cjs +2 -1
  953. package/dist/overlay/Modal.cjs.map +1 -1
  954. package/dist/overlay/Modal.d.ts.map +1 -1
  955. package/dist/overlay/Modal.js +2 -1
  956. package/dist/overlay/Modal.js.map +1 -1
  957. package/dist/overlay/dropdownMenuContext.d.ts +1 -1
  958. package/dist/profiles/editor/profileEditor.cjs +1 -1
  959. package/dist/profiles/editor/profileEditor.cjs.map +1 -1
  960. package/dist/profiles/editor/profileEditor.js +1 -1
  961. package/dist/profiles/editor/profileEditor.js.map +1 -1
  962. package/dist/profiles/editor/profileEditorSections.cjs +2 -2
  963. package/dist/profiles/editor/profileEditorSections.cjs.map +1 -1
  964. package/dist/profiles/editor/profileEditorSections.js +2 -2
  965. package/dist/profiles/editor/profileEditorSections.js.map +1 -1
  966. package/dist/profiles/query/prometheusResults.cjs +24 -36
  967. package/dist/profiles/query/prometheusResults.cjs.map +1 -1
  968. package/dist/profiles/query/prometheusResults.d.ts.map +1 -1
  969. package/dist/profiles/query/prometheusResults.js +24 -36
  970. package/dist/profiles/query/prometheusResults.js.map +1 -1
  971. package/dist/rpc/CommandForm.cjs +1 -1
  972. package/dist/rpc/CommandForm.cjs.map +1 -1
  973. package/dist/rpc/CommandForm.js +1 -1
  974. package/dist/rpc/CommandForm.js.map +1 -1
  975. package/dist/rpc/classify.cjs +1 -1
  976. package/dist/rpc/classify.cjs.map +1 -1
  977. package/dist/rpc/classify.d.ts.map +1 -1
  978. package/dist/rpc/classify.js +1 -1
  979. package/dist/rpc/classify.js.map +1 -1
  980. package/dist/rpc/useOperations.d.ts +24 -24
  981. package/dist/rpc.cjs +0 -2
  982. package/dist/rpc.d.ts +0 -1
  983. package/dist/rpc.d.ts.map +1 -1
  984. package/dist/rpc.js +1 -2
  985. package/dist/styles.css +1 -1
  986. package/dist/utils.cjs +6 -0
  987. package/dist/utils.d.ts +2 -1
  988. package/dist/utils.d.ts.map +1 -1
  989. package/dist/utils.js +3 -2
  990. package/package.json +9 -3
  991. package/schemas/json-schema-form.schema.json +9 -1
@@ -40,7 +40,7 @@ function Gauge({ label, value, max = 100, tone = "neutral", suffix = "%", icon,
40
40
  });
41
41
  const showHeader = icon || showLabel || meta;
42
42
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
43
- className: require_utils.cn("flex min-h-28 w-[15.5rem] shrink-0 flex-col rounded-lg border border-border bg-card p-3", className),
43
+ className: require_utils.cn("flex min-h-28 w-[15.5rem] max-w-full shrink-0 flex-col rounded-lg border border-border bg-card p-3", className),
44
44
  title: !showLabel ? labelText : void 0,
45
45
  "aria-label": !showLabel ? labelText : void 0,
46
46
  children: [
@@ -1 +1 @@
1
- {"version":3,"file":"Gauge.cjs","names":["cn","Icon","isValidElement"],"sources":["../../src/data/Gauge.tsx"],"sourcesContent":["import { isValidElement, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\n\nexport type GaugeTone = \"neutral\" | \"success\" | \"warning\" | \"danger\" | \"info\";\nexport type GaugeVariant = \"default\" | \"cell\";\n\nexport type GaugeProps = {\n label: ReactNode;\n value: number;\n max?: number;\n tone?: GaugeTone;\n suffix?: string;\n icon?: string | StaticIconComponent | ReactNode;\n subtitle?: ReactNode;\n meta?: ReactNode;\n /** Visual density/layout. `cell` is a compact inline form for table/grid cells. */\n variant?: GaugeVariant;\n /** Show the text label. Icons and values remain visible when false. */\n showLabel?: boolean;\n className?: string;\n};\n\nconst toneClass: Record<GaugeTone, string> = {\n neutral: \"text-foreground\",\n success: \"text-green-600 dark:text-green-400\",\n warning: \"text-yellow-600 dark:text-yellow-400\",\n danger: \"text-red-600 dark:text-red-400\",\n info: \"text-blue-600 dark:text-blue-400\",\n};\n\nexport function Gauge({\n label,\n value,\n max = 100,\n tone = \"neutral\",\n suffix = \"%\",\n icon,\n subtitle,\n meta,\n variant = \"default\",\n showLabel = true,\n className,\n}: GaugeProps) {\n const pct = max > 0 ? Math.round((value / max) * 100) : 0;\n const displayValue = max === 100 ? value : pct;\n const labelText =\n typeof label === \"string\" || typeof label === \"number\" ? String(label) : undefined;\n const valueNode = (\n <span className={cn(\"font-semibold tabular-nums\", toneClass[tone])}>\n {displayValue}\n {suffix ? <span className=\"ml-0.5 text-[0.85em] opacity-60\">{suffix}</span> : null}\n </span>\n );\n\n if (variant === \"cell\") {\n return (\n <span\n className={cn(\n \"inline-flex min-w-0 items-center gap-1.5 whitespace-nowrap align-middle text-xs\",\n className,\n )}\n title={labelText}\n aria-label={!showLabel ? labelText : undefined}\n >\n {icon ? <GaugeIcon icon={icon} /> : null}\n {showLabel ? (\n <span className=\"min-w-0 truncate text-muted-foreground\">{label}</span>\n ) : null}\n {valueNode}\n {meta ? <span className=\"shrink-0 truncate text-muted-foreground\">{meta}</span> : null}\n </span>\n );\n }\n\n const showHeader = icon || showLabel || meta;\n\n return (\n <div\n className={cn(\n \"flex min-h-28 w-[15.5rem] shrink-0 flex-col rounded-lg border border-border bg-card p-3\",\n className,\n )}\n title={!showLabel ? labelText : undefined}\n aria-label={!showLabel ? labelText : undefined}\n >\n {showHeader ? (\n <div className=\"flex items-center justify-between gap-2 text-xs text-muted-foreground\">\n <span className=\"inline-flex min-w-0 items-center gap-1.5\">\n {icon ? <GaugeIcon icon={icon} /> : null}\n {showLabel ? <span className=\"truncate\">{label}</span> : null}\n </span>\n {meta ? <span className=\"shrink-0 truncate\">{meta}</span> : null}\n </div>\n ) : null}\n <span\n className={cn(\n showHeader && \"mt-2\",\n \"text-2xl font-semibold tabular-nums tracking-tight\",\n toneClass[tone],\n )}\n >\n {displayValue}\n {suffix ? <span className=\"ml-0.5 text-sm opacity-60\">{suffix}</span> : null}\n </span>\n {subtitle ? (\n <span className=\"mt-1 truncate text-xs text-muted-foreground\">{subtitle}</span>\n ) : null}\n </div>\n );\n}\n\nfunction GaugeIcon({ icon }: { icon: string | StaticIconComponent | ReactNode }) {\n if (typeof icon === \"string\") {\n return <Icon name={icon} width={16} height={16} className=\"text-muted-foreground\" />;\n }\n if (isValidElement(icon)) {\n return (\n <span className=\"inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground [&>svg]:h-4 [&>svg]:w-4\">\n {icon}\n </span>\n );\n }\n\n return (\n <Icon\n icon={icon as StaticIconComponent}\n width={16}\n height={16}\n className=\"text-muted-foreground\"\n />\n );\n}\n"],"mappings":";;;;;AAuBA,IAAM,YAAuC;CAC3C,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;AACR;AAEA,SAAgB,MAAM,EACpB,OACA,OACA,MAAM,KACN,OAAO,WACP,SAAS,KACT,MACA,UACA,MACA,UAAU,WACV,YAAY,MACZ,aACa;CACb,MAAM,MAAM,MAAM,IAAI,KAAK,MAAO,QAAQ,MAAO,GAAG,IAAI;CACxD,MAAM,eAAe,QAAQ,MAAM,QAAQ;CAC3C,MAAM,YACJ,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI,KAAA;CAC3E,MAAM,YACJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;EAAM,WAAWA,cAAAA,GAAG,8BAA8B,UAAU,KAAK;EAAjE,UAAA,CACG,cACA,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAmC,UAAA;EAAa,CAAA,IAAI,IAC1E;;CAGR,IAAI,YAAY,QACd,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;EACE,WAAWA,cAAAA,GACT,mFACA,SACF;EACA,OAAO;EACP,cAAY,CAAC,YAAY,YAAY,KAAA;EANvC,UAAA;GAQG,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAiB,KAAO,CAAA,IAAI;GACnC,YACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAA0C,UAAA;GAAY,CAAA,IACpE;GACH;GACA,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAA2C,UAAA;GAAW,CAAA,IAAI;EAC9E;;CAIV,MAAM,aAAa,QAAQ,aAAa;CAExC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EACE,WAAWA,cAAAA,GACT,2FACA,SACF;EACA,OAAO,CAAC,YAAY,YAAY,KAAA;EAChC,cAAY,CAAC,YAAY,YAAY,KAAA;EANvC,UAAA;GAQG,aACC,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;KAAM,WAAU;KAAhB,UAAA,CACG,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAiB,KAAO,CAAA,IAAI,MACnC,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAY,UAAA;KAAY,CAAA,IAAI,IACrD;IACL,CAAA,GAAA,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAqB,UAAA;IAAW,CAAA,IAAI,IACzD;GACH,CAAA,IAAA;GACJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;IACE,WAAWA,cAAAA,GACT,cAAc,QACd,sDACA,UAAU,KACZ;IALF,UAAA,CAOG,cACA,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAA6B,UAAA;IAAa,CAAA,IAAI,IACpE;;GACL,WACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAA+C,UAAA;GAAe,CAAA,IAC5E;EACD;;AAET;AAEA,SAAS,UAAU,EAAE,QAA4D;CAC/E,IAAI,OAAO,SAAS,UAClB,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,MAAD;EAAM,MAAM;EAAM,OAAO;EAAI,QAAQ;EAAI,WAAU;CAAyB,CAAA;CAErF,KAAA,GAAIC,MAAAA,eAAAA,CAAe,IAAI,GACrB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EACb,UAAA;CACG,CAAA;CAIV,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,aAAAA,MAAD;EACQ;EACN,OAAO;EACP,QAAQ;EACR,WAAU;CACX,CAAA;AAEL"}
1
+ {"version":3,"file":"Gauge.cjs","names":["cn","Icon","isValidElement"],"sources":["../../src/data/Gauge.tsx"],"sourcesContent":["import { isValidElement, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\n\nexport type GaugeTone = \"neutral\" | \"success\" | \"warning\" | \"danger\" | \"info\";\nexport type GaugeVariant = \"default\" | \"cell\";\n\nexport type GaugeProps = {\n label: ReactNode;\n value: number;\n max?: number;\n tone?: GaugeTone;\n suffix?: string;\n icon?: string | StaticIconComponent | ReactNode;\n subtitle?: ReactNode;\n meta?: ReactNode;\n /** Visual density/layout. `cell` is a compact inline form for table/grid cells. */\n variant?: GaugeVariant;\n /** Show the text label. Icons and values remain visible when false. */\n showLabel?: boolean;\n className?: string;\n};\n\nconst toneClass: Record<GaugeTone, string> = {\n neutral: \"text-foreground\",\n success: \"text-green-600 dark:text-green-400\",\n warning: \"text-yellow-600 dark:text-yellow-400\",\n danger: \"text-red-600 dark:text-red-400\",\n info: \"text-blue-600 dark:text-blue-400\",\n};\n\nexport function Gauge({\n label,\n value,\n max = 100,\n tone = \"neutral\",\n suffix = \"%\",\n icon,\n subtitle,\n meta,\n variant = \"default\",\n showLabel = true,\n className,\n}: GaugeProps) {\n const pct = max > 0 ? Math.round((value / max) * 100) : 0;\n const displayValue = max === 100 ? value : pct;\n const labelText =\n typeof label === \"string\" || typeof label === \"number\" ? String(label) : undefined;\n const valueNode = (\n <span className={cn(\"font-semibold tabular-nums\", toneClass[tone])}>\n {displayValue}\n {suffix ? <span className=\"ml-0.5 text-[0.85em] opacity-60\">{suffix}</span> : null}\n </span>\n );\n\n if (variant === \"cell\") {\n return (\n <span\n className={cn(\n \"inline-flex min-w-0 items-center gap-1.5 whitespace-nowrap align-middle text-xs\",\n className,\n )}\n title={labelText}\n aria-label={!showLabel ? labelText : undefined}\n >\n {icon ? <GaugeIcon icon={icon} /> : null}\n {showLabel ? (\n <span className=\"min-w-0 truncate text-muted-foreground\">{label}</span>\n ) : null}\n {valueNode}\n {meta ? <span className=\"shrink-0 truncate text-muted-foreground\">{meta}</span> : null}\n </span>\n );\n }\n\n const showHeader = icon || showLabel || meta;\n\n return (\n <div\n className={cn(\n \"flex min-h-28 w-[15.5rem] max-w-full shrink-0 flex-col rounded-lg border border-border bg-card p-3\",\n className,\n )}\n title={!showLabel ? labelText : undefined}\n aria-label={!showLabel ? labelText : undefined}\n >\n {showHeader ? (\n <div className=\"flex items-center justify-between gap-2 text-xs text-muted-foreground\">\n <span className=\"inline-flex min-w-0 items-center gap-1.5\">\n {icon ? <GaugeIcon icon={icon} /> : null}\n {showLabel ? <span className=\"truncate\">{label}</span> : null}\n </span>\n {meta ? <span className=\"shrink-0 truncate\">{meta}</span> : null}\n </div>\n ) : null}\n <span\n className={cn(\n showHeader && \"mt-2\",\n \"text-2xl font-semibold tabular-nums tracking-tight\",\n toneClass[tone],\n )}\n >\n {displayValue}\n {suffix ? <span className=\"ml-0.5 text-sm opacity-60\">{suffix}</span> : null}\n </span>\n {subtitle ? (\n <span className=\"mt-1 truncate text-xs text-muted-foreground\">{subtitle}</span>\n ) : null}\n </div>\n );\n}\n\nfunction GaugeIcon({ icon }: { icon: string | StaticIconComponent | ReactNode }) {\n if (typeof icon === \"string\") {\n return <Icon name={icon} width={16} height={16} className=\"text-muted-foreground\" />;\n }\n if (isValidElement(icon)) {\n return (\n <span className=\"inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground [&>svg]:h-4 [&>svg]:w-4\">\n {icon}\n </span>\n );\n }\n\n return (\n <Icon\n icon={icon as StaticIconComponent}\n width={16}\n height={16}\n className=\"text-muted-foreground\"\n />\n );\n}\n"],"mappings":"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"}
@@ -40,7 +40,7 @@ function Gauge({ label, value, max = 100, tone = "neutral", suffix = "%", icon,
40
40
  });
41
41
  const showHeader = icon || showLabel || meta;
42
42
  return /* @__PURE__ */ jsxs("div", {
43
- className: cn("flex min-h-28 w-[15.5rem] shrink-0 flex-col rounded-lg border border-border bg-card p-3", className),
43
+ className: cn("flex min-h-28 w-[15.5rem] max-w-full shrink-0 flex-col rounded-lg border border-border bg-card p-3", className),
44
44
  title: !showLabel ? labelText : void 0,
45
45
  "aria-label": !showLabel ? labelText : void 0,
46
46
  children: [
@@ -1 +1 @@
1
- {"version":3,"file":"Gauge.js","names":[],"sources":["../../src/data/Gauge.tsx"],"sourcesContent":["import { isValidElement, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\n\nexport type GaugeTone = \"neutral\" | \"success\" | \"warning\" | \"danger\" | \"info\";\nexport type GaugeVariant = \"default\" | \"cell\";\n\nexport type GaugeProps = {\n label: ReactNode;\n value: number;\n max?: number;\n tone?: GaugeTone;\n suffix?: string;\n icon?: string | StaticIconComponent | ReactNode;\n subtitle?: ReactNode;\n meta?: ReactNode;\n /** Visual density/layout. `cell` is a compact inline form for table/grid cells. */\n variant?: GaugeVariant;\n /** Show the text label. Icons and values remain visible when false. */\n showLabel?: boolean;\n className?: string;\n};\n\nconst toneClass: Record<GaugeTone, string> = {\n neutral: \"text-foreground\",\n success: \"text-green-600 dark:text-green-400\",\n warning: \"text-yellow-600 dark:text-yellow-400\",\n danger: \"text-red-600 dark:text-red-400\",\n info: \"text-blue-600 dark:text-blue-400\",\n};\n\nexport function Gauge({\n label,\n value,\n max = 100,\n tone = \"neutral\",\n suffix = \"%\",\n icon,\n subtitle,\n meta,\n variant = \"default\",\n showLabel = true,\n className,\n}: GaugeProps) {\n const pct = max > 0 ? Math.round((value / max) * 100) : 0;\n const displayValue = max === 100 ? value : pct;\n const labelText =\n typeof label === \"string\" || typeof label === \"number\" ? String(label) : undefined;\n const valueNode = (\n <span className={cn(\"font-semibold tabular-nums\", toneClass[tone])}>\n {displayValue}\n {suffix ? <span className=\"ml-0.5 text-[0.85em] opacity-60\">{suffix}</span> : null}\n </span>\n );\n\n if (variant === \"cell\") {\n return (\n <span\n className={cn(\n \"inline-flex min-w-0 items-center gap-1.5 whitespace-nowrap align-middle text-xs\",\n className,\n )}\n title={labelText}\n aria-label={!showLabel ? labelText : undefined}\n >\n {icon ? <GaugeIcon icon={icon} /> : null}\n {showLabel ? (\n <span className=\"min-w-0 truncate text-muted-foreground\">{label}</span>\n ) : null}\n {valueNode}\n {meta ? <span className=\"shrink-0 truncate text-muted-foreground\">{meta}</span> : null}\n </span>\n );\n }\n\n const showHeader = icon || showLabel || meta;\n\n return (\n <div\n className={cn(\n \"flex min-h-28 w-[15.5rem] shrink-0 flex-col rounded-lg border border-border bg-card p-3\",\n className,\n )}\n title={!showLabel ? labelText : undefined}\n aria-label={!showLabel ? labelText : undefined}\n >\n {showHeader ? (\n <div className=\"flex items-center justify-between gap-2 text-xs text-muted-foreground\">\n <span className=\"inline-flex min-w-0 items-center gap-1.5\">\n {icon ? <GaugeIcon icon={icon} /> : null}\n {showLabel ? <span className=\"truncate\">{label}</span> : null}\n </span>\n {meta ? <span className=\"shrink-0 truncate\">{meta}</span> : null}\n </div>\n ) : null}\n <span\n className={cn(\n showHeader && \"mt-2\",\n \"text-2xl font-semibold tabular-nums tracking-tight\",\n toneClass[tone],\n )}\n >\n {displayValue}\n {suffix ? <span className=\"ml-0.5 text-sm opacity-60\">{suffix}</span> : null}\n </span>\n {subtitle ? (\n <span className=\"mt-1 truncate text-xs text-muted-foreground\">{subtitle}</span>\n ) : null}\n </div>\n );\n}\n\nfunction GaugeIcon({ icon }: { icon: string | StaticIconComponent | ReactNode }) {\n if (typeof icon === \"string\") {\n return <Icon name={icon} width={16} height={16} className=\"text-muted-foreground\" />;\n }\n if (isValidElement(icon)) {\n return (\n <span className=\"inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground [&>svg]:h-4 [&>svg]:w-4\">\n {icon}\n </span>\n );\n }\n\n return (\n <Icon\n icon={icon as StaticIconComponent}\n width={16}\n height={16}\n className=\"text-muted-foreground\"\n />\n );\n}\n"],"mappings":";;;;;AAuBA,IAAM,YAAuC;CAC3C,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;AACR;AAEA,SAAgB,MAAM,EACpB,OACA,OACA,MAAM,KACN,OAAO,WACP,SAAS,KACT,MACA,UACA,MACA,UAAU,WACV,YAAY,MACZ,aACa;CACb,MAAM,MAAM,MAAM,IAAI,KAAK,MAAO,QAAQ,MAAO,GAAG,IAAI;CACxD,MAAM,eAAe,QAAQ,MAAM,QAAQ;CAC3C,MAAM,YACJ,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI,KAAA;CAC3E,MAAM,YACJ,qBAAC,QAAD;EAAM,WAAW,GAAG,8BAA8B,UAAU,KAAK;EAAjE,UAAA,CACG,cACA,SAAS,oBAAC,QAAD;GAAM,WAAU;GAAmC,UAAA;EAAa,CAAA,IAAI,IAC1E;;CAGR,IAAI,YAAY,QACd,OACE,qBAAC,QAAD;EACE,WAAW,GACT,mFACA,SACF;EACA,OAAO;EACP,cAAY,CAAC,YAAY,YAAY,KAAA;EANvC,UAAA;GAQG,OAAO,oBAAC,WAAD,EAAiB,KAAO,CAAA,IAAI;GACnC,YACC,oBAAC,QAAD;IAAM,WAAU;IAA0C,UAAA;GAAY,CAAA,IACpE;GACH;GACA,OAAO,oBAAC,QAAD;IAAM,WAAU;IAA2C,UAAA;GAAW,CAAA,IAAI;EAC9E;;CAIV,MAAM,aAAa,QAAQ,aAAa;CAExC,OACE,qBAAC,OAAD;EACE,WAAW,GACT,2FACA,SACF;EACA,OAAO,CAAC,YAAY,YAAY,KAAA;EAChC,cAAY,CAAC,YAAY,YAAY,KAAA;EANvC,UAAA;GAQG,aACC,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,qBAAC,QAAD;KAAM,WAAU;KAAhB,UAAA,CACG,OAAO,oBAAC,WAAD,EAAiB,KAAO,CAAA,IAAI,MACnC,YAAY,oBAAC,QAAD;MAAM,WAAU;MAAY,UAAA;KAAY,CAAA,IAAI,IACrD;IACL,CAAA,GAAA,OAAO,oBAAC,QAAD;KAAM,WAAU;KAAqB,UAAA;IAAW,CAAA,IAAI,IACzD;GACH,CAAA,IAAA;GACJ,qBAAC,QAAD;IACE,WAAW,GACT,cAAc,QACd,sDACA,UAAU,KACZ;IALF,UAAA,CAOG,cACA,SAAS,oBAAC,QAAD;KAAM,WAAU;KAA6B,UAAA;IAAa,CAAA,IAAI,IACpE;;GACL,WACC,oBAAC,QAAD;IAAM,WAAU;IAA+C,UAAA;GAAe,CAAA,IAC5E;EACD;;AAET;AAEA,SAAS,UAAU,EAAE,QAA4D;CAC/E,IAAI,OAAO,SAAS,UAClB,OAAO,oBAAC,MAAD;EAAM,MAAM;EAAM,OAAO;EAAI,QAAQ;EAAI,WAAU;CAAyB,CAAA;CAErF,IAAI,eAAe,IAAI,GACrB,OACE,oBAAC,QAAD;EAAM,WAAU;EACb,UAAA;CACG,CAAA;CAIV,OACE,oBAAC,MAAD;EACQ;EACN,OAAO;EACP,QAAQ;EACR,WAAU;CACX,CAAA;AAEL"}
1
+ {"version":3,"file":"Gauge.js","names":[],"sources":["../../src/data/Gauge.tsx"],"sourcesContent":["import { isValidElement, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\n\nexport type GaugeTone = \"neutral\" | \"success\" | \"warning\" | \"danger\" | \"info\";\nexport type GaugeVariant = \"default\" | \"cell\";\n\nexport type GaugeProps = {\n label: ReactNode;\n value: number;\n max?: number;\n tone?: GaugeTone;\n suffix?: string;\n icon?: string | StaticIconComponent | ReactNode;\n subtitle?: ReactNode;\n meta?: ReactNode;\n /** Visual density/layout. `cell` is a compact inline form for table/grid cells. */\n variant?: GaugeVariant;\n /** Show the text label. Icons and values remain visible when false. */\n showLabel?: boolean;\n className?: string;\n};\n\nconst toneClass: Record<GaugeTone, string> = {\n neutral: \"text-foreground\",\n success: \"text-green-600 dark:text-green-400\",\n warning: \"text-yellow-600 dark:text-yellow-400\",\n danger: \"text-red-600 dark:text-red-400\",\n info: \"text-blue-600 dark:text-blue-400\",\n};\n\nexport function Gauge({\n label,\n value,\n max = 100,\n tone = \"neutral\",\n suffix = \"%\",\n icon,\n subtitle,\n meta,\n variant = \"default\",\n showLabel = true,\n className,\n}: GaugeProps) {\n const pct = max > 0 ? Math.round((value / max) * 100) : 0;\n const displayValue = max === 100 ? value : pct;\n const labelText =\n typeof label === \"string\" || typeof label === \"number\" ? String(label) : undefined;\n const valueNode = (\n <span className={cn(\"font-semibold tabular-nums\", toneClass[tone])}>\n {displayValue}\n {suffix ? <span className=\"ml-0.5 text-[0.85em] opacity-60\">{suffix}</span> : null}\n </span>\n );\n\n if (variant === \"cell\") {\n return (\n <span\n className={cn(\n \"inline-flex min-w-0 items-center gap-1.5 whitespace-nowrap align-middle text-xs\",\n className,\n )}\n title={labelText}\n aria-label={!showLabel ? labelText : undefined}\n >\n {icon ? <GaugeIcon icon={icon} /> : null}\n {showLabel ? (\n <span className=\"min-w-0 truncate text-muted-foreground\">{label}</span>\n ) : null}\n {valueNode}\n {meta ? <span className=\"shrink-0 truncate text-muted-foreground\">{meta}</span> : null}\n </span>\n );\n }\n\n const showHeader = icon || showLabel || meta;\n\n return (\n <div\n className={cn(\n \"flex min-h-28 w-[15.5rem] max-w-full shrink-0 flex-col rounded-lg border border-border bg-card p-3\",\n className,\n )}\n title={!showLabel ? labelText : undefined}\n aria-label={!showLabel ? labelText : undefined}\n >\n {showHeader ? (\n <div className=\"flex items-center justify-between gap-2 text-xs text-muted-foreground\">\n <span className=\"inline-flex min-w-0 items-center gap-1.5\">\n {icon ? <GaugeIcon icon={icon} /> : null}\n {showLabel ? <span className=\"truncate\">{label}</span> : null}\n </span>\n {meta ? <span className=\"shrink-0 truncate\">{meta}</span> : null}\n </div>\n ) : null}\n <span\n className={cn(\n showHeader && \"mt-2\",\n \"text-2xl font-semibold tabular-nums tracking-tight\",\n toneClass[tone],\n )}\n >\n {displayValue}\n {suffix ? <span className=\"ml-0.5 text-sm opacity-60\">{suffix}</span> : null}\n </span>\n {subtitle ? (\n <span className=\"mt-1 truncate text-xs text-muted-foreground\">{subtitle}</span>\n ) : null}\n </div>\n );\n}\n\nfunction GaugeIcon({ icon }: { icon: string | StaticIconComponent | ReactNode }) {\n if (typeof icon === \"string\") {\n return <Icon name={icon} width={16} height={16} className=\"text-muted-foreground\" />;\n }\n if (isValidElement(icon)) {\n return (\n <span className=\"inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground [&>svg]:h-4 [&>svg]:w-4\">\n {icon}\n </span>\n );\n }\n\n return (\n <Icon\n icon={icon as StaticIconComponent}\n width={16}\n height={16}\n className=\"text-muted-foreground\"\n />\n );\n}\n"],"mappings":";;;;;AAuBA,IAAM,YAAuC;CAC3C,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;AACR;AAEA,SAAgB,MAAM,EACpB,OACA,OACA,MAAM,KACN,OAAO,WACP,SAAS,KACT,MACA,UACA,MACA,UAAU,WACV,YAAY,MACZ,aACa;CACb,MAAM,MAAM,MAAM,IAAI,KAAK,MAAO,QAAQ,MAAO,GAAG,IAAI;CACxD,MAAM,eAAe,QAAQ,MAAM,QAAQ;CAC3C,MAAM,YACJ,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI,KAAA;CAC3E,MAAM,YACJ,qBAAC,QAAD;EAAM,WAAW,GAAG,8BAA8B,UAAU,KAAK;EAAjE,UAAA,CACG,cACA,SAAS,oBAAC,QAAD;GAAM,WAAU;GAAmC,UAAA;EAAa,CAAA,IAAI,IAC1E;;CAGR,IAAI,YAAY,QACd,OACE,qBAAC,QAAD;EACE,WAAW,GACT,mFACA,SACF;EACA,OAAO;EACP,cAAY,CAAC,YAAY,YAAY,KAAA;EANvC,UAAA;GAQG,OAAO,oBAAC,WAAD,EAAiB,KAAO,CAAA,IAAI;GACnC,YACC,oBAAC,QAAD;IAAM,WAAU;IAA0C,UAAA;GAAY,CAAA,IACpE;GACH;GACA,OAAO,oBAAC,QAAD;IAAM,WAAU;IAA2C,UAAA;GAAW,CAAA,IAAI;EAC9E;;CAIV,MAAM,aAAa,QAAQ,aAAa;CAExC,OACE,qBAAC,OAAD;EACE,WAAW,GACT,sGACA,SACF;EACA,OAAO,CAAC,YAAY,YAAY,KAAA;EAChC,cAAY,CAAC,YAAY,YAAY,KAAA;EANvC,UAAA;GAQG,aACC,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,qBAAC,QAAD;KAAM,WAAU;KAAhB,UAAA,CACG,OAAO,oBAAC,WAAD,EAAiB,KAAO,CAAA,IAAI,MACnC,YAAY,oBAAC,QAAD;MAAM,WAAU;MAAY,UAAA;KAAY,CAAA,IAAI,IACrD;IACL,CAAA,GAAA,OAAO,oBAAC,QAAD;KAAM,WAAU;KAAqB,UAAA;IAAW,CAAA,IAAI,IACzD;GACH,CAAA,IAAA;GACJ,qBAAC,QAAD;IACE,WAAW,GACT,cAAc,QACd,sDACA,UAAU,KACZ;IALF,UAAA,CAOG,cACA,SAAS,oBAAC,QAAD;KAAM,WAAU;KAA6B,UAAA;IAAa,CAAA,IAAI,IACpE;;GACL,WACC,oBAAC,QAAD;IAAM,WAAU;IAA+C,UAAA;GAAe,CAAA,IAC5E;EACD;;AAET;AAEA,SAAS,UAAU,EAAE,QAA4D;CAC/E,IAAI,OAAO,SAAS,UAClB,OAAO,oBAAC,MAAD;EAAM,MAAM;EAAM,OAAO;EAAI,QAAQ;EAAI,WAAU;CAAyB,CAAA;CAErF,IAAI,eAAe,IAAI,GACrB,OACE,oBAAC,QAAD;EAAM,WAAU;EACb,UAAA;CACG,CAAA;CAIV,OACE,oBAAC,MAAD;EACQ;EACN,OAAO;EACP,QAAQ;EACR,WAAU;CACX,CAAA;AAEL"}
@@ -1,21 +1,13 @@
1
+ const require_token_style = require("./token-style.cjs");
1
2
  let react_jsx_runtime = require("react/jsx-runtime");
2
3
  // src/data/HighlightedTokens.tsx
3
4
  function HighlightedTokens({ tokens, content }) {
4
5
  if (!tokens || tokens.length === 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: content });
5
6
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: tokens.map((token, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6
- style: tokenStyle(token),
7
+ style: require_token_style.tokenStyle(token),
7
8
  children: token.content
8
9
  }, index)) });
9
10
  }
10
- function tokenStyle(token) {
11
- const style = {};
12
- if (token.color) style.color = token.color;
13
- const fontStyle = token.fontStyle ?? 0;
14
- if (fontStyle & 1) style.fontStyle = "italic";
15
- if (fontStyle & 2) style.fontWeight = 700;
16
- if (fontStyle & 4) style.textDecorationLine = "underline";
17
- return style;
18
- }
19
11
  exports.HighlightedTokens = HighlightedTokens;
20
12
 
21
13
  //# sourceMappingURL=HighlightedTokens.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"HighlightedTokens.cjs","names":["_Fragment"],"sources":["../../src/data/HighlightedTokens.tsx"],"sourcesContent":["import type { CSSProperties } from \"react\";\nimport type { HighlightedLine, HighlightedToken } from \"./code-highlight\";\n\n// HighlightedTokens paints one `highlightToLines` line as themed spans, falling\n// back to the raw text when tokenization was unavailable (unsupported language,\n// highlighter failure, or the tokens simply not loaded yet). Shared by every\n// surface that paints its own gutter — CodeDiff's diff rows and the stack-frame\n// source window — none of which can embed Shiki's own `<pre>` because their line\n// numbers are not a contiguous 1..N run.\nexport function HighlightedTokens({\n tokens,\n content,\n}: {\n tokens: HighlightedLine | undefined;\n content: string;\n}) {\n if (!tokens || tokens.length === 0) return <>{content}</>;\n return (\n <>\n {tokens.map((token, index) => (\n <span key={index} style={tokenStyle(token)}>\n {token.content}\n </span>\n ))}\n </>\n );\n}\n\n// Shiki's `fontStyle` is a bitmask: 1=italic, 2=bold, 4=underline.\nfunction tokenStyle(token: HighlightedToken): CSSProperties {\n const style: CSSProperties = {};\n if (token.color) style.color = token.color;\n const fontStyle = token.fontStyle ?? 0;\n if (fontStyle & 1) style.fontStyle = \"italic\";\n if (fontStyle & 2) style.fontWeight = 700;\n if (fontStyle & 4) style.textDecorationLine = \"underline\";\n return style;\n}\n"],"mappings":";;AASA,SAAgB,kBAAkB,EAChC,QACA,WAIC;CACD,IAAI,CAAC,UAAU,OAAO,WAAW,GAAG,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAAA,kBAAAA,UAAA,EAAA,UAAG,QAAU,CAAA;CACxD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAAA,kBAAAA,UAAA,EAAA,UACG,OAAO,KAAK,OAAO,UAClB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAkB,OAAO,WAAW,KAAK;EACtC,UAAA,MAAM;CACH,GAFK,KAEL,CACP,EACD,CAAA;AAEN;AAGA,SAAS,WAAW,OAAwC;CAC1D,MAAM,QAAuB,CAAC;CAC9B,IAAI,MAAM,OAAO,MAAM,QAAQ,MAAM;CACrC,MAAM,YAAY,MAAM,aAAa;CACrC,IAAI,YAAY,GAAG,MAAM,YAAY;CACrC,IAAI,YAAY,GAAG,MAAM,aAAa;CACtC,IAAI,YAAY,GAAG,MAAM,qBAAqB;CAC9C,OAAO;AACT"}
1
+ {"version":3,"file":"HighlightedTokens.cjs","names":["_Fragment","tokenStyle"],"sources":["../../src/data/HighlightedTokens.tsx"],"sourcesContent":["import { tokenStyle } from \"./token-style\";\nimport type { HighlightedLine } from \"./code-highlight\";\n\n// HighlightedTokens paints one `highlightToLines` line as themed spans, falling\n// back to the raw text when tokenization was unavailable (unsupported language,\n// highlighter failure, or the tokens simply not loaded yet). Shared by every\n// surface that paints its own gutter — CodeDiff's diff rows and the stack-frame\n// source window — none of which can embed Shiki's own `<pre>` because their line\n// numbers are not a contiguous 1..N run.\nexport function HighlightedTokens({\n tokens,\n content,\n}: {\n tokens: HighlightedLine | undefined;\n content: string;\n}) {\n if (!tokens || tokens.length === 0) return <>{content}</>;\n return (\n <>\n {tokens.map((token, index) => (\n <span key={index} style={tokenStyle(token)}>\n {token.content}\n </span>\n ))}\n </>\n );\n}\n\n"],"mappings":";;;AASA,SAAgB,kBAAkB,EAChC,QACA,WAIC;CACD,IAAI,CAAC,UAAU,OAAO,WAAW,GAAG,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAAA,kBAAAA,UAAA,EAAA,UAAG,QAAU,CAAA;CACxD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAAA,kBAAAA,UAAA,EAAA,UACG,OAAO,KAAK,OAAO,UAClB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAkB,OAAOC,oBAAAA,WAAW,KAAK;EACtC,UAAA,MAAM;CACH,GAFK,KAEL,CACP,EACD,CAAA;AAEN"}
@@ -1 +1 @@
1
- {"version":3,"file":"HighlightedTokens.d.ts","sourceRoot":"","sources":["../../src/data/HighlightedTokens.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,kBAAkB,CAAC;AAQ1E,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,OAAO,GACR,EAAE;IACD,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB,+BAWA"}
1
+ {"version":3,"file":"HighlightedTokens.d.ts","sourceRoot":"","sources":["../../src/data/HighlightedTokens.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAQxD,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,OAAO,GACR,EAAE;IACD,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB,+BAWA"}
@@ -1,3 +1,4 @@
1
+ import { tokenStyle } from "./token-style.js";
1
2
  import { Fragment, jsx } from "react/jsx-runtime";
2
3
  // src/data/HighlightedTokens.tsx
3
4
  function HighlightedTokens({ tokens, content }) {
@@ -7,15 +8,6 @@ function HighlightedTokens({ tokens, content }) {
7
8
  children: token.content
8
9
  }, index)) });
9
10
  }
10
- function tokenStyle(token) {
11
- const style = {};
12
- if (token.color) style.color = token.color;
13
- const fontStyle = token.fontStyle ?? 0;
14
- if (fontStyle & 1) style.fontStyle = "italic";
15
- if (fontStyle & 2) style.fontWeight = 700;
16
- if (fontStyle & 4) style.textDecorationLine = "underline";
17
- return style;
18
- }
19
11
  export { HighlightedTokens };
20
12
 
21
13
  //# sourceMappingURL=HighlightedTokens.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HighlightedTokens.js","names":["_Fragment"],"sources":["../../src/data/HighlightedTokens.tsx"],"sourcesContent":["import type { CSSProperties } from \"react\";\nimport type { HighlightedLine, HighlightedToken } from \"./code-highlight\";\n\n// HighlightedTokens paints one `highlightToLines` line as themed spans, falling\n// back to the raw text when tokenization was unavailable (unsupported language,\n// highlighter failure, or the tokens simply not loaded yet). Shared by every\n// surface that paints its own gutter — CodeDiff's diff rows and the stack-frame\n// source window — none of which can embed Shiki's own `<pre>` because their line\n// numbers are not a contiguous 1..N run.\nexport function HighlightedTokens({\n tokens,\n content,\n}: {\n tokens: HighlightedLine | undefined;\n content: string;\n}) {\n if (!tokens || tokens.length === 0) return <>{content}</>;\n return (\n <>\n {tokens.map((token, index) => (\n <span key={index} style={tokenStyle(token)}>\n {token.content}\n </span>\n ))}\n </>\n );\n}\n\n// Shiki's `fontStyle` is a bitmask: 1=italic, 2=bold, 4=underline.\nfunction tokenStyle(token: HighlightedToken): CSSProperties {\n const style: CSSProperties = {};\n if (token.color) style.color = token.color;\n const fontStyle = token.fontStyle ?? 0;\n if (fontStyle & 1) style.fontStyle = \"italic\";\n if (fontStyle & 2) style.fontWeight = 700;\n if (fontStyle & 4) style.textDecorationLine = \"underline\";\n return style;\n}\n"],"mappings":";;AASA,SAAgB,kBAAkB,EAChC,QACA,WAIC;CACD,IAAI,CAAC,UAAU,OAAO,WAAW,GAAG,OAAO,oBAAAA,UAAA,EAAA,UAAG,QAAU,CAAA;CACxD,OACE,oBAAAA,UAAA,EAAA,UACG,OAAO,KAAK,OAAO,UAClB,oBAAC,QAAD;EAAkB,OAAO,WAAW,KAAK;EACtC,UAAA,MAAM;CACH,GAFK,KAEL,CACP,EACD,CAAA;AAEN;AAGA,SAAS,WAAW,OAAwC;CAC1D,MAAM,QAAuB,CAAC;CAC9B,IAAI,MAAM,OAAO,MAAM,QAAQ,MAAM;CACrC,MAAM,YAAY,MAAM,aAAa;CACrC,IAAI,YAAY,GAAG,MAAM,YAAY;CACrC,IAAI,YAAY,GAAG,MAAM,aAAa;CACtC,IAAI,YAAY,GAAG,MAAM,qBAAqB;CAC9C,OAAO;AACT"}
1
+ {"version":3,"file":"HighlightedTokens.js","names":["_Fragment"],"sources":["../../src/data/HighlightedTokens.tsx"],"sourcesContent":["import { tokenStyle } from \"./token-style\";\nimport type { HighlightedLine } from \"./code-highlight\";\n\n// HighlightedTokens paints one `highlightToLines` line as themed spans, falling\n// back to the raw text when tokenization was unavailable (unsupported language,\n// highlighter failure, or the tokens simply not loaded yet). Shared by every\n// surface that paints its own gutter — CodeDiff's diff rows and the stack-frame\n// source window — none of which can embed Shiki's own `<pre>` because their line\n// numbers are not a contiguous 1..N run.\nexport function HighlightedTokens({\n tokens,\n content,\n}: {\n tokens: HighlightedLine | undefined;\n content: string;\n}) {\n if (!tokens || tokens.length === 0) return <>{content}</>;\n return (\n <>\n {tokens.map((token, index) => (\n <span key={index} style={tokenStyle(token)}>\n {token.content}\n </span>\n ))}\n </>\n );\n}\n\n"],"mappings":";;;AASA,SAAgB,kBAAkB,EAChC,QACA,WAIC;CACD,IAAI,CAAC,UAAU,OAAO,WAAW,GAAG,OAAO,oBAAAA,UAAA,EAAA,UAAG,QAAU,CAAA;CACxD,OACE,oBAAAA,UAAA,EAAA,UACG,OAAO,KAAK,OAAO,UAClB,oBAAC,QAAD;EAAkB,OAAO,WAAW,KAAK;EACtC,UAAA,MAAM;CACH,GAFK,KAEL,CACP,EACD,CAAA;AAEN"}
@@ -3,6 +3,7 @@ const require_Callout = require("./Callout.cjs");
3
3
  const require_ConfirmDialog = require("../overlay/ConfirmDialog.cjs");
4
4
  const require_router = require("../rpc/router.cjs");
5
5
  const require_CodeBlock = require("./CodeBlock.cjs");
6
+ const require_markdown_source_blocks = require("./markdown-source-blocks.cjs");
6
7
  let react = require("react");
7
8
  let react_jsx_runtime = require("react/jsx-runtime");
8
9
  // src/data/Markdown.tsx
@@ -24,7 +25,10 @@ function MarkdownHeading({ as: Tag, className, children, node: _node, ...props }
24
25
  }
25
26
  var loadPromise = null;
26
27
  function loadStreamdown() {
27
- if (!loadPromise) loadPromise = import("streamdown").then((m) => m.Streamdown).catch((err) => {
28
+ if (!loadPromise) loadPromise = import("streamdown").then((m) => ({
29
+ Streamdown: m.Streamdown,
30
+ defaultRehypePlugins: m.defaultRehypePlugins
31
+ })).catch((err) => {
28
32
  console.warn("clicky-ui: streamdown not available; rendering markdown as plain text", err);
29
33
  return null;
30
34
  });
@@ -44,7 +48,7 @@ function MarkdownCode({ className, children, ...rest }) {
44
48
  });
45
49
  const language = /language-([\w-]+)/.exec(className ?? "")?.[1];
46
50
  const source = nodeText(children).replace(/\n$/, "");
47
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_CodeBlock.CodeBlock, {
51
+ const block = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_CodeBlock.CodeBlock, {
48
52
  source,
49
53
  language,
50
54
  className: "not-prose my-4",
@@ -52,23 +56,37 @@ function MarkdownCode({ className, children, ...rest }) {
52
56
  downloadable: true,
53
57
  themeToggle: true
54
58
  });
59
+ const anchors = require_markdown_source_blocks.sourceAttributes(rest);
60
+ return Object.keys(anchors).length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
61
+ ...anchors,
62
+ children: block
63
+ }) : block;
55
64
  }
56
- function MarkdownList({ className, children }) {
65
+ function MarkdownPre({ children, ...props }) {
66
+ return (0, react.isValidElement)(children) ? (0, react.cloneElement)(children, {
67
+ "data-block": "true",
68
+ ...require_markdown_source_blocks.sourceAttributes(props)
69
+ }) : children;
70
+ }
71
+ function MarkdownList({ className, children, ...props }) {
57
72
  const isTaskList = className?.includes("contains-task-list");
58
73
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
59
74
  className: require_utils.cn("whitespace-normal", isTaskList ? "list-none pl-0" : "list-disc pl-6", className),
75
+ ...require_markdown_source_blocks.sourceAttributes(props),
60
76
  children
61
77
  });
62
78
  }
63
- function MarkdownOrderedList({ className, children }) {
79
+ function MarkdownOrderedList({ className, children, ...props }) {
64
80
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ol", {
65
81
  className: require_utils.cn("list-decimal whitespace-normal pl-6", className),
82
+ ...require_markdown_source_blocks.sourceAttributes(props),
66
83
  children
67
84
  });
68
85
  }
69
- function MarkdownTable({ className, children }) {
86
+ function MarkdownTable({ className, children, ...props }) {
70
87
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
71
88
  className: "not-prose my-4 max-w-full overflow-x-auto rounded-md border border-border",
89
+ ...require_markdown_source_blocks.sourceAttributes(props),
72
90
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("table", {
73
91
  className: require_utils.cn("w-max min-w-full table-auto text-left text-sm", className),
74
92
  children
@@ -173,6 +191,7 @@ var markdownComponents = {
173
191
  ...props
174
192
  }),
175
193
  a: MarkdownLink,
194
+ pre: MarkdownPre,
176
195
  code: MarkdownCode,
177
196
  ul: MarkdownList,
178
197
  ol: MarkdownOrderedList,
@@ -213,24 +232,32 @@ var CALLOUT_ALLOWED_TAGS = { calloutbox: [
213
232
  * blocks render via the library CodeBlock, and lists and tables are styled
214
233
  * here rather than by Streamdown. Falls back to preformatted text until
215
234
  * Streamdown loads or when it is not installed. */
216
- function Markdown({ text, className, callouts = false }) {
217
- const [Streamdown, setStreamdown] = (0, react.useState)(null);
235
+ function Markdown({ text, className, callouts = false, sourceBlocks = false }) {
236
+ if (sourceBlocks && callouts) throw new Error("Markdown: sourceBlocks and callouts cannot be combined; callouts replaces the sanitiser schema that sourceBlocks keeps");
237
+ const [streamdown, setStreamdown] = (0, react.useState)(null);
218
238
  (0, react.useEffect)(() => {
219
239
  let cancelled = false;
220
- loadStreamdown().then((comp) => {
221
- if (!cancelled) setStreamdown(() => comp);
240
+ loadStreamdown().then((loaded) => {
241
+ if (!cancelled) setStreamdown(loaded);
222
242
  });
223
243
  return () => {
224
244
  cancelled = true;
225
245
  };
226
246
  }, []);
227
- if (!Streamdown) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
247
+ const sourceRehypePlugins = (0, react.useMemo)(() => streamdown ? [...Object.values(streamdown.defaultRehypePlugins), require_markdown_source_blocks.rehypeSourceBlocks] : void 0, [streamdown]);
248
+ if (!streamdown) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
228
249
  className: require_utils.cn("whitespace-pre-wrap text-sm", className),
229
250
  children: text
230
251
  });
252
+ const { Streamdown } = streamdown;
231
253
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
232
254
  className: require_utils.cn("prose prose-sm max-w-none dark:prose-invert", className),
233
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Streamdown, {
255
+ children: sourceBlocks ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Streamdown, {
256
+ mode: "static",
257
+ components: markdownComponents,
258
+ rehypePlugins: sourceRehypePlugins,
259
+ children: text
260
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Streamdown, {
234
261
  parseIncompleteMarkdown: true,
235
262
  components: callouts ? calloutComponents : markdownComponents,
236
263
  allowedTags: callouts ? CALLOUT_ALLOWED_TAGS : void 0,
@@ -1 +1 @@
1
- {"version":3,"file":"Markdown.cjs","names":["cn","isValidElement","CodeBlock","useRouter","useState","_Fragment","ConfirmDialog","Callout"],"sources":["../../src/data/Markdown.tsx"],"sourcesContent":["import {\n isValidElement,\n useEffect,\n useState,\n type ComponentType,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { ConfirmDialog } from \"../overlay/ConfirmDialog\";\nimport { useRouter } from \"../rpc/router\";\nimport { Callout, type CalloutProps } from \"./Callout\";\nimport { CodeBlock } from \"./CodeBlock\";\n\nexport type MarkdownProps = {\n /** Markdown source text. */\n text: string;\n /** Classes applied to the rendered markdown wrapper. */\n className?: string;\n /**\n * Render `<CalloutBox …>` authored inline in the markdown as a\n * {@link Callout}.\n *\n * Off by default. It admits exactly one extra tag with exactly the callout's\n * own attributes — no other markup in `text` becomes live — so it is safe to\n * turn on wherever callouts are wanted.\n */\n callouts?: boolean | undefined;\n};\n\n// Streamdown routes a fenced code block to the `code` override with a `data-block`\n// marker (injected by its default `pre` handler); inline code arrives without it.\ntype MarkdownCodeProps = {\n className?: string;\n children?: ReactNode;\n \"data-block\"?: string;\n};\n\n// Every override also receives the source `node`, which is not a DOM attribute —\n// each one drops it rather than spreading it onto the element. `style` carries\n// the per-column alignment GFM puts on table cells.\ntype MarkdownElementProps = {\n className?: string;\n children?: ReactNode;\n style?: CSSProperties;\n node?: unknown;\n};\n\ntype MarkdownHeadingTag = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\ntype MarkdownHeadingProps = HTMLAttributes<HTMLHeadingElement> & { node?: unknown };\n\nconst headingClasses: Record<MarkdownHeadingTag, string> = {\n h1: \"mt-4 mb-2 text-lg font-semibold\",\n h2: \"mt-3 mb-1.5 text-base font-semibold\",\n h3: \"mt-3 mb-1 text-sm font-semibold\",\n h4: \"mt-2 mb-1 text-sm font-semibold\",\n h5: \"mt-2 mb-1 text-sm font-medium\",\n h6: \"mt-2 mb-1 text-sm font-medium\",\n};\n\nfunction MarkdownHeading({\n as: Tag,\n className,\n children,\n node: _node,\n ...props\n}: MarkdownHeadingProps & { as: MarkdownHeadingTag }) {\n return (\n <Tag\n className={cn(headingClasses[Tag], className)}\n data-streamdown={`heading-${Tag.slice(1)}`}\n {...props}\n >\n {children}\n </Tag>\n );\n}\n\ntype StreamdownComponent = ComponentType<{\n children: string;\n className?: string | undefined;\n parseIncompleteMarkdown?: boolean | undefined;\n // Tag name -> the attribute names it may carry. Streamdown drops every other\n // raw tag, so this is an allowlist rather than raw-HTML passthrough.\n allowedTags?: Record<string, string[]> | undefined;\n components?: {\n h1?: ComponentType<MarkdownHeadingProps>;\n h2?: ComponentType<MarkdownHeadingProps>;\n h3?: ComponentType<MarkdownHeadingProps>;\n h4?: ComponentType<MarkdownHeadingProps>;\n h5?: ComponentType<MarkdownHeadingProps>;\n h6?: ComponentType<MarkdownHeadingProps>;\n a?: ComponentType<MarkdownLinkProps>;\n code?: ComponentType<MarkdownCodeProps>;\n ul?: ComponentType<MarkdownElementProps>;\n ol?: ComponentType<MarkdownElementProps>;\n table?: ComponentType<MarkdownElementProps>;\n thead?: ComponentType<MarkdownElementProps>;\n tbody?: ComponentType<MarkdownElementProps>;\n th?: ComponentType<MarkdownElementProps>;\n td?: ComponentType<MarkdownElementProps>;\n // Streamdown lowercases every tag name, so an authored `<CalloutBox>`\n // arrives here as `calloutbox`.\n calloutbox?: ComponentType<CalloutProps & { node?: unknown }>;\n };\n}>;\n\nlet loadPromise: Promise<StreamdownComponent | null> | null = null;\n\n// Streamdown is an optional peer dependency (like marked/shiki). It is loaded on\n// demand so the core library does not force it on consumers; while it loads (or\n// if it is absent) we fall back to preformatted text.\nfunction loadStreamdown(): Promise<StreamdownComponent | null> {\n if (!loadPromise) {\n loadPromise = import(\"streamdown\")\n .then((m) => m.Streamdown as unknown as StreamdownComponent)\n .catch((err) => {\n console.warn(\"clicky-ui: streamdown not available; rendering markdown as plain text\", err);\n return null;\n });\n }\n return loadPromise;\n}\n\nfunction nodeText(node: ReactNode): string {\n if (typeof node === \"string\") return node;\n if (typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(nodeText).join(\"\");\n if (isValidElement(node)) return nodeText((node.props as { children?: ReactNode }).children);\n return \"\";\n}\n\n// Render fenced code blocks with the library's theme-aware CodeBlock instead of\n// Streamdown's built-in block, whose Shiki `<pre>` keeps a light background that\n// clashes with the app theme (a white code body inside the dark block chrome).\n// Inline code keeps Streamdown's default inline styling.\nfunction MarkdownCode({ className, children, ...rest }: MarkdownCodeProps) {\n if (!(\"data-block\" in rest)) {\n return (\n <code className={cn(\"rounded bg-muted px-1.5 py-0.5 font-mono text-sm\", className)}>\n {children}\n </code>\n );\n }\n const language = /language-([\\w-]+)/.exec(className ?? \"\")?.[1];\n const source = nodeText(children).replace(/\\n$/, \"\");\n return (\n <CodeBlock\n source={source}\n language={language}\n className=\"not-prose my-4\"\n copyable\n downloadable\n themeToggle\n />\n );\n}\n\n// Streamdown indents nested lists with `[li_&]:pl-6`, an arbitrary-variant class\n// that only compiles if the consumer's Tailwind happens to scan streamdown's\n// dist — otherwise every level renders flush left. Own the list styling here so\n// the marker and the indent ship from this library's own source. Markers sit\n// outside the padding so each level steps in cleanly. Task lists drop both: the\n// checkbox is the marker.\nfunction MarkdownList({ className, children }: MarkdownElementProps) {\n const isTaskList = className?.includes(\"contains-task-list\");\n return (\n <ul\n className={cn(\"whitespace-normal\", isTaskList ? \"list-none pl-0\" : \"list-disc pl-6\", className)}\n >\n {children}\n </ul>\n );\n}\n\nfunction MarkdownOrderedList({ className, children }: MarkdownElementProps) {\n return <ol className={cn(\"list-decimal whitespace-normal pl-6\", className)}>{children}</ol>;\n}\n\n// Streamdown wraps tables in a `bg-sidebar` card with its own copy/download/\n// fullscreen chrome — a dark navy box around a light table under this library's\n// tokens — and puts the header shading behind `bg-muted/80`, an opacity-modifier\n// class the consumer's Tailwind never sees. Own the whole table instead, styled\n// like DataTable: a bordered scroll container so wide tables scroll rather than\n// overflow the page.\nfunction MarkdownTable({ className, children }: MarkdownElementProps) {\n return (\n <div className=\"not-prose my-4 max-w-full overflow-x-auto rounded-md border border-border\">\n <table className={cn(\"w-max min-w-full table-auto text-left text-sm\", className)}>\n {children}\n </table>\n </div>\n );\n}\n\nfunction MarkdownTableHead({ className, children }: MarkdownElementProps) {\n return <thead className={cn(\"border-b border-border bg-muted\", className)}>{children}</thead>;\n}\n\nfunction MarkdownTableBody({ className, children }: MarkdownElementProps) {\n return <tbody className={cn(\"divide-y divide-border\", className)}>{children}</tbody>;\n}\n\n// `style` holds the column alignment from the delimiter row, so it must survive.\nfunction MarkdownTableHeaderCell({ className, style, children }: MarkdownElementProps) {\n return (\n <th\n className={cn(\"whitespace-nowrap px-density-3 py-density-2 font-semibold\", className)}\n style={style}\n >\n {children}\n </th>\n );\n}\n\nfunction MarkdownTableCell({ className, style, children }: MarkdownElementProps) {\n return (\n <td className={cn(\"px-density-3 py-density-2 align-top\", className)} style={style}>\n {children}\n </td>\n );\n}\n\ntype MarkdownLinkProps = MarkdownElementProps & { href?: string; title?: string };\n\n// Streamdown renders every link as a button behind an \"Open external link?\"\n// prompt that always opens a new tab, so an in-app link such as `/connections`\n// left the app. Root-relative links route through the host's RouterAdapter and\n// hash links scroll in place; only external links keep the confirm prompt.\nfunction MarkdownLink({ href, title, className, children }: MarkdownLinkProps) {\n const { renderLink } = useRouter();\n const [confirming, setConfirming] = useState(false);\n const linkClass = cn(\"wrap-anywhere font-medium text-primary underline\", className);\n\n if (!href) return <span className={className}>{children}</span>;\n if (href.startsWith(\"#\")) {\n return (\n <a href={href} title={title} className={linkClass}>\n {children}\n </a>\n );\n }\n if (href.startsWith(\"/\") && !href.startsWith(\"//\")) {\n return renderLink({ to: href, className: linkClass, children, ...(title ? { title } : {}) });\n }\n return (\n <>\n <a\n href={href}\n title={title}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={linkClass}\n onClick={(event) => {\n event.preventDefault();\n setConfirming(true);\n }}\n >\n {children}\n </a>\n <ConfirmDialog\n open={confirming}\n title=\"Open external link?\"\n message={<code className=\"break-all font-mono text-sm\">{href}</code>}\n confirmLabel=\"Open link\"\n onCancel={() => setConfirming(false)}\n onConfirm={() => {\n setConfirming(false);\n window.open(href, \"_blank\", \"noopener,noreferrer\");\n }}\n />\n </>\n );\n}\n\nconst markdownComponents = {\n h1: (props: MarkdownHeadingProps) => <MarkdownHeading as=\"h1\" {...props} />,\n h2: (props: MarkdownHeadingProps) => <MarkdownHeading as=\"h2\" {...props} />,\n h3: (props: MarkdownHeadingProps) => <MarkdownHeading as=\"h3\" {...props} />,\n h4: (props: MarkdownHeadingProps) => <MarkdownHeading as=\"h4\" {...props} />,\n h5: (props: MarkdownHeadingProps) => <MarkdownHeading as=\"h5\" {...props} />,\n h6: (props: MarkdownHeadingProps) => <MarkdownHeading as=\"h6\" {...props} />,\n a: MarkdownLink,\n code: MarkdownCode,\n ul: MarkdownList,\n ol: MarkdownOrderedList,\n table: MarkdownTable,\n thead: MarkdownTableHead,\n tbody: MarkdownTableBody,\n th: MarkdownTableHeaderCell,\n td: MarkdownTableCell,\n};\n\n// The tag arrives lowercased with every attribute as a string, and carries the\n// source hast node too — listing the props drops that rather than spreading it\n// onto the element.\nfunction MarkdownCallout({ badge, children, className, emphasis, icon, label, source, title, variant }: CalloutProps) {\n return (\n <Callout\n badge={badge}\n className={className}\n emphasis={emphasis}\n icon={icon}\n label={label}\n source={source}\n title={title}\n variant={variant}\n >\n {children}\n </Callout>\n );\n}\n\nconst calloutComponents = { ...markdownComponents, calloutbox: MarkdownCallout };\n\nconst CALLOUT_ALLOWED_TAGS = {\n calloutbox: [\"variant\", \"label\", \"badge\", \"source\", \"icon\", \"emphasis\", \"title\"],\n};\n\n/** Renders markdown with Streamdown, which is purpose-built for streaming LLM\n * output (it gracefully handles incomplete markdown mid-stream). Fenced code\n * blocks render via the library CodeBlock, and lists and tables are styled\n * here rather than by Streamdown. Falls back to preformatted text until\n * Streamdown loads or when it is not installed. */\nexport function Markdown({ text, className, callouts = false }: MarkdownProps) {\n const [Streamdown, setStreamdown] = useState<StreamdownComponent | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n loadStreamdown().then((comp) => {\n if (!cancelled) setStreamdown(() => comp);\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n if (!Streamdown) {\n return <pre className={cn(\"whitespace-pre-wrap text-sm\", className)}>{text}</pre>;\n }\n\n return (\n <div className={cn(\"prose prose-sm max-w-none dark:prose-invert\", className)}>\n <Streamdown\n parseIncompleteMarkdown\n components={callouts ? calloutComponents : markdownComponents}\n allowedTags={callouts ? CALLOUT_ALLOWED_TAGS : undefined}\n >\n {text}\n </Streamdown>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Markdown.cjs","names":["cn","isValidElement","CodeBlock","sourceAttributes","cloneElement","useRouter","useState","_Fragment","ConfirmDialog","Callout","useMemo","rehypeSourceBlocks"],"sources":["../../src/data/Markdown.tsx"],"sourcesContent":["import {\n cloneElement,\n isValidElement,\n useEffect,\n useMemo,\n useState,\n type ComponentType,\n type CSSProperties,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { ConfirmDialog } from \"../overlay/ConfirmDialog\";\nimport { useRouter } from \"../rpc/router\";\nimport { Callout, type CalloutProps } from \"./Callout\";\nimport { CodeBlock } from \"./CodeBlock\";\nimport { rehypeSourceBlocks, sourceAttributes, type SourceAttributes } from \"./markdown-source-blocks\";\n\nexport type MarkdownProps = {\n /** Markdown source text. */\n text: string;\n /** Classes applied to the rendered markdown wrapper. */\n className?: string;\n /**\n * Render `<CalloutBox …>` authored inline in the markdown as a\n * {@link Callout}.\n *\n * Off by default. It admits exactly one extra tag with exactly the callout's\n * own attributes — no other markup in `text` becomes live — so it is safe to\n * turn on wherever callouts are wanted.\n */\n callouts?: boolean | undefined;\n /**\n * Stamp each top-level block with `data-source-start` / `data-source-end`, the\n * 1-based line range of `text` it renders, so a host can anchor annotations\n * to source lines. The document renders as one static block (no streaming),\n * which keeps the line numbers absolute; Streamdown's default sanitising\n * stays in place. Cannot be combined with `callouts`.\n */\n sourceBlocks?: boolean | undefined;\n};\n\n// Streamdown routes a fenced code block to the `code` override with a `data-block`\n// marker (injected by its default `pre` handler); inline code arrives without it.\ntype MarkdownCodeProps = SourceAttributes & {\n className?: string;\n children?: ReactNode;\n \"data-block\"?: string;\n};\n\n// Every override also receives the source `node`, which is not a DOM attribute —\n// each one drops it rather than spreading it onto the element. `style` carries\n// the per-column alignment GFM puts on table cells. `data-source-*` is the one\n// pair of extra attributes forwarded, so `sourceBlocks` anchors survive.\ntype MarkdownElementProps = SourceAttributes & {\n className?: string;\n children?: ReactNode;\n style?: CSSProperties;\n node?: unknown;\n};\n\ntype MarkdownHeadingTag = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\ntype MarkdownHeadingProps = HTMLAttributes<HTMLHeadingElement> & { node?: unknown };\n\nconst headingClasses: Record<MarkdownHeadingTag, string> = {\n h1: \"mt-4 mb-2 text-lg font-semibold\",\n h2: \"mt-3 mb-1.5 text-base font-semibold\",\n h3: \"mt-3 mb-1 text-sm font-semibold\",\n h4: \"mt-2 mb-1 text-sm font-semibold\",\n h5: \"mt-2 mb-1 text-sm font-medium\",\n h6: \"mt-2 mb-1 text-sm font-medium\",\n};\n\nfunction MarkdownHeading({\n as: Tag,\n className,\n children,\n node: _node,\n ...props\n}: MarkdownHeadingProps & { as: MarkdownHeadingTag }) {\n return (\n <Tag\n className={cn(headingClasses[Tag], className)}\n data-streamdown={`heading-${Tag.slice(1)}`}\n {...props}\n >\n {children}\n </Tag>\n );\n}\n\ntype StreamdownComponent = ComponentType<{\n children: string;\n className?: string | undefined;\n parseIncompleteMarkdown?: boolean | undefined;\n // \"static\" parses the whole document as one block instead of streaming it in\n // blocks, so hast positions are relative to the document.\n mode?: \"static\" | \"streaming\" | undefined;\n rehypePlugins?: readonly unknown[] | undefined;\n // Tag name -> the attribute names it may carry. Streamdown drops every other\n // raw tag, so this is an allowlist rather than raw-HTML passthrough.\n allowedTags?: Record<string, string[]> | undefined;\n components?: {\n pre?: ComponentType<{ children?: ReactNode; node?: unknown } & SourceAttributes>;\n p?: ComponentType<MarkdownElementProps>;\n blockquote?: ComponentType<MarkdownElementProps>;\n hr?: ComponentType<MarkdownElementProps>;\n h1?: ComponentType<MarkdownHeadingProps>;\n h2?: ComponentType<MarkdownHeadingProps>;\n h3?: ComponentType<MarkdownHeadingProps>;\n h4?: ComponentType<MarkdownHeadingProps>;\n h5?: ComponentType<MarkdownHeadingProps>;\n h6?: ComponentType<MarkdownHeadingProps>;\n a?: ComponentType<MarkdownLinkProps>;\n code?: ComponentType<MarkdownCodeProps>;\n ul?: ComponentType<MarkdownElementProps>;\n ol?: ComponentType<MarkdownElementProps>;\n table?: ComponentType<MarkdownElementProps>;\n thead?: ComponentType<MarkdownElementProps>;\n tbody?: ComponentType<MarkdownElementProps>;\n th?: ComponentType<MarkdownElementProps>;\n td?: ComponentType<MarkdownElementProps>;\n // Streamdown lowercases every tag name, so an authored `<CalloutBox>`\n // arrives here as `calloutbox`.\n calloutbox?: ComponentType<CalloutProps & { node?: unknown }>;\n };\n}>;\n\ntype StreamdownModule = {\n Streamdown: StreamdownComponent;\n /** Streamdown's own raw -> sanitize -> harden rehype chain, in that order. */\n defaultRehypePlugins: Record<string, unknown>;\n};\n\nlet loadPromise: Promise<StreamdownModule | null> | null = null;\n\n// Streamdown is an optional peer dependency (like marked/shiki). It is loaded on\n// demand so the core library does not force it on consumers; while it loads (or\n// if it is absent) we fall back to preformatted text.\nfunction loadStreamdown(): Promise<StreamdownModule | null> {\n if (!loadPromise) {\n loadPromise = import(\"streamdown\")\n .then((m) => ({\n Streamdown: m.Streamdown as unknown as StreamdownComponent,\n defaultRehypePlugins: m.defaultRehypePlugins,\n }))\n .catch((err) => {\n console.warn(\"clicky-ui: streamdown not available; rendering markdown as plain text\", err);\n return null;\n });\n }\n return loadPromise;\n}\n\nfunction nodeText(node: ReactNode): string {\n if (typeof node === \"string\") return node;\n if (typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(nodeText).join(\"\");\n if (isValidElement(node)) return nodeText((node.props as { children?: ReactNode }).children);\n return \"\";\n}\n\n// Render fenced code blocks with the library's theme-aware CodeBlock instead of\n// Streamdown's built-in block, whose Shiki `<pre>` keeps a light background that\n// clashes with the app theme (a white code body inside the dark block chrome).\n// Inline code keeps Streamdown's default inline styling.\nfunction MarkdownCode({ className, children, ...rest }: MarkdownCodeProps) {\n if (!(\"data-block\" in rest)) {\n return (\n <code className={cn(\"rounded bg-muted px-1.5 py-0.5 font-mono text-sm\", className)}>\n {children}\n </code>\n );\n }\n const language = /language-([\\w-]+)/.exec(className ?? \"\")?.[1];\n const source = nodeText(children).replace(/\\n$/, \"\");\n const block = (\n <CodeBlock\n source={source}\n language={language}\n className=\"not-prose my-4\"\n copyable\n downloadable\n themeToggle\n />\n );\n const anchors = sourceAttributes(rest);\n return Object.keys(anchors).length > 0 ? <div {...anchors}>{block}</div> : block;\n}\n\n// Streamdown's default `pre` unwraps to its `code` child, marking it as a block.\n// The source range is stamped on the `pre`, so it is carried over to that child.\nfunction MarkdownPre({ children, ...props }: { children?: ReactNode; node?: unknown } & SourceAttributes) {\n return isValidElement(children)\n ? cloneElement(children as ReactElement<Record<string, unknown>>, {\n \"data-block\": \"true\",\n ...sourceAttributes(props),\n })\n : children;\n}\n\n// Streamdown indents nested lists with `[li_&]:pl-6`, an arbitrary-variant class\n// that only compiles if the consumer's Tailwind happens to scan streamdown's\n// dist — otherwise every level renders flush left. Own the list styling here so\n// the marker and the indent ship from this library's own source. Markers sit\n// outside the padding so each level steps in cleanly. Task lists drop both: the\n// checkbox is the marker.\nfunction MarkdownList({ className, children, ...props }: MarkdownElementProps) {\n const isTaskList = className?.includes(\"contains-task-list\");\n return (\n <ul\n className={cn(\"whitespace-normal\", isTaskList ? \"list-none pl-0\" : \"list-disc pl-6\", className)}\n {...sourceAttributes(props)}\n >\n {children}\n </ul>\n );\n}\n\nfunction MarkdownOrderedList({ className, children, ...props }: MarkdownElementProps) {\n return (\n <ol className={cn(\"list-decimal whitespace-normal pl-6\", className)} {...sourceAttributes(props)}>\n {children}\n </ol>\n );\n}\n\n// Streamdown wraps tables in a `bg-sidebar` card with its own copy/download/\n// fullscreen chrome — a dark navy box around a light table under this library's\n// tokens — and puts the header shading behind `bg-muted/80`, an opacity-modifier\n// class the consumer's Tailwind never sees. Own the whole table instead, styled\n// like DataTable: a bordered scroll container so wide tables scroll rather than\n// overflow the page.\nfunction MarkdownTable({ className, children, ...props }: MarkdownElementProps) {\n return (\n <div\n className=\"not-prose my-4 max-w-full overflow-x-auto rounded-md border border-border\"\n {...sourceAttributes(props)}\n >\n <table className={cn(\"w-max min-w-full table-auto text-left text-sm\", className)}>\n {children}\n </table>\n </div>\n );\n}\n\nfunction MarkdownTableHead({ className, children }: MarkdownElementProps) {\n return <thead className={cn(\"border-b border-border bg-muted\", className)}>{children}</thead>;\n}\n\nfunction MarkdownTableBody({ className, children }: MarkdownElementProps) {\n return <tbody className={cn(\"divide-y divide-border\", className)}>{children}</tbody>;\n}\n\n// `style` holds the column alignment from the delimiter row, so it must survive.\nfunction MarkdownTableHeaderCell({ className, style, children }: MarkdownElementProps) {\n return (\n <th\n className={cn(\"whitespace-nowrap px-density-3 py-density-2 font-semibold\", className)}\n style={style}\n >\n {children}\n </th>\n );\n}\n\nfunction MarkdownTableCell({ className, style, children }: MarkdownElementProps) {\n return (\n <td className={cn(\"px-density-3 py-density-2 align-top\", className)} style={style}>\n {children}\n </td>\n );\n}\n\ntype MarkdownLinkProps = MarkdownElementProps & { href?: string; title?: string };\n\n// Streamdown renders every link as a button behind an \"Open external link?\"\n// prompt that always opens a new tab, so an in-app link such as `/connections`\n// left the app. Root-relative links route through the host's RouterAdapter and\n// hash links scroll in place; only external links keep the confirm prompt.\nfunction MarkdownLink({ href, title, className, children }: MarkdownLinkProps) {\n const { renderLink } = useRouter();\n const [confirming, setConfirming] = useState(false);\n const linkClass = cn(\"wrap-anywhere font-medium text-primary underline\", className);\n\n if (!href) return <span className={className}>{children}</span>;\n if (href.startsWith(\"#\")) {\n return (\n <a href={href} title={title} className={linkClass}>\n {children}\n </a>\n );\n }\n if (href.startsWith(\"/\") && !href.startsWith(\"//\")) {\n return renderLink({ to: href, className: linkClass, children, ...(title ? { title } : {}) });\n }\n return (\n <>\n <a\n href={href}\n title={title}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={linkClass}\n onClick={(event) => {\n event.preventDefault();\n setConfirming(true);\n }}\n >\n {children}\n </a>\n <ConfirmDialog\n open={confirming}\n title=\"Open external link?\"\n message={<code className=\"break-all font-mono text-sm\">{href}</code>}\n confirmLabel=\"Open link\"\n onCancel={() => setConfirming(false)}\n onConfirm={() => {\n setConfirming(false);\n window.open(href, \"_blank\", \"noopener,noreferrer\");\n }}\n />\n </>\n );\n}\n\nconst markdownComponents = {\n h1: (props: MarkdownHeadingProps) => <MarkdownHeading as=\"h1\" {...props} />,\n h2: (props: MarkdownHeadingProps) => <MarkdownHeading as=\"h2\" {...props} />,\n h3: (props: MarkdownHeadingProps) => <MarkdownHeading as=\"h3\" {...props} />,\n h4: (props: MarkdownHeadingProps) => <MarkdownHeading as=\"h4\" {...props} />,\n h5: (props: MarkdownHeadingProps) => <MarkdownHeading as=\"h5\" {...props} />,\n h6: (props: MarkdownHeadingProps) => <MarkdownHeading as=\"h6\" {...props} />,\n a: MarkdownLink,\n pre: MarkdownPre,\n code: MarkdownCode,\n ul: MarkdownList,\n ol: MarkdownOrderedList,\n table: MarkdownTable,\n thead: MarkdownTableHead,\n tbody: MarkdownTableBody,\n th: MarkdownTableHeaderCell,\n td: MarkdownTableCell,\n};\n\n// The tag arrives lowercased with every attribute as a string, and carries the\n// source hast node too — listing the props drops that rather than spreading it\n// onto the element.\nfunction MarkdownCallout({ badge, children, className, emphasis, icon, label, source, title, variant }: CalloutProps) {\n return (\n <Callout\n badge={badge}\n className={className}\n emphasis={emphasis}\n icon={icon}\n label={label}\n source={source}\n title={title}\n variant={variant}\n >\n {children}\n </Callout>\n );\n}\n\nconst calloutComponents = { ...markdownComponents, calloutbox: MarkdownCallout };\n\nconst CALLOUT_ALLOWED_TAGS = {\n calloutbox: [\"variant\", \"label\", \"badge\", \"source\", \"icon\", \"emphasis\", \"title\"],\n};\n\n/** Renders markdown with Streamdown, which is purpose-built for streaming LLM\n * output (it gracefully handles incomplete markdown mid-stream). Fenced code\n * blocks render via the library CodeBlock, and lists and tables are styled\n * here rather than by Streamdown. Falls back to preformatted text until\n * Streamdown loads or when it is not installed. */\nexport function Markdown({ text, className, callouts = false, sourceBlocks = false }: MarkdownProps) {\n if (sourceBlocks && callouts) {\n throw new Error(\n \"Markdown: sourceBlocks and callouts cannot be combined; callouts replaces the sanitiser schema that sourceBlocks keeps\",\n );\n }\n const [streamdown, setStreamdown] = useState<StreamdownModule | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n loadStreamdown().then((loaded) => {\n if (!cancelled) setStreamdown(loaded);\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n // Streamdown's own chain (raw, sanitize, harden) followed by the stamping\n // plugin. Appending, rather than replacing, keeps the document sanitised, and\n // running last lets the attributes survive the sanitiser.\n const sourceRehypePlugins = useMemo(\n () => (streamdown ? [...Object.values(streamdown.defaultRehypePlugins), rehypeSourceBlocks] : undefined),\n [streamdown],\n );\n\n if (!streamdown) {\n return <pre className={cn(\"whitespace-pre-wrap text-sm\", className)}>{text}</pre>;\n }\n const { Streamdown } = streamdown;\n\n return (\n <div className={cn(\"prose prose-sm max-w-none dark:prose-invert\", className)}>\n {sourceBlocks ? (\n <Streamdown mode=\"static\" components={markdownComponents} rehypePlugins={sourceRehypePlugins}>\n {text}\n </Streamdown>\n ) : (\n <Streamdown\n parseIncompleteMarkdown\n components={callouts ? calloutComponents : markdownComponents}\n allowedTags={callouts ? CALLOUT_ALLOWED_TAGS : undefined}\n >\n {text}\n </Streamdown>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -12,11 +12,19 @@ export type MarkdownProps = {
12
12
  * turn on wherever callouts are wanted.
13
13
  */
14
14
  callouts?: boolean | undefined;
15
+ /**
16
+ * Stamp each top-level block with `data-source-start` / `data-source-end`, the
17
+ * 1-based line range of `text` it renders, so a host can anchor annotations
18
+ * to source lines. The document renders as one static block (no streaming),
19
+ * which keeps the line numbers absolute; Streamdown's default sanitising
20
+ * stays in place. Cannot be combined with `callouts`.
21
+ */
22
+ sourceBlocks?: boolean | undefined;
15
23
  };
16
24
  /** Renders markdown with Streamdown, which is purpose-built for streaming LLM
17
25
  * output (it gracefully handles incomplete markdown mid-stream). Fenced code
18
26
  * blocks render via the library CodeBlock, and lists and tables are styled
19
27
  * here rather than by Streamdown. Falls back to preformatted text until
20
28
  * Streamdown loads or when it is not installed. */
21
- export declare function Markdown({ text, className, callouts }: MarkdownProps): import("react").JSX.Element;
29
+ export declare function Markdown({ text, className, callouts, sourceBlocks }: MarkdownProps): import("react").JSX.Element;
22
30
  //# sourceMappingURL=Markdown.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../src/data/Markdown.tsx"],"names":[],"mappings":"AAeA,MAAM,MAAM,aAAa,GAAG;IAC1B,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC,CAAC;AAmSF;;;;oDAIoD;AACpD,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAgB,EAAE,EAAE,aAAa,+BA4B5E"}
1
+ {"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../src/data/Markdown.tsx"],"names":[],"mappings":"AAmBA,MAAM,MAAM,aAAa,GAAG;IAC1B,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpC,CAAC;AA2UF;;;;oDAIoD;AACpD,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAgB,EAAE,YAAoB,EAAE,EAAE,aAAa,+BAgDlG"}
@@ -3,7 +3,8 @@ import { Callout } from "./Callout.js";
3
3
  import { ConfirmDialog } from "../overlay/ConfirmDialog.js";
4
4
  import { useRouter } from "../rpc/router.js";
5
5
  import { CodeBlock } from "./CodeBlock.js";
6
- import { isValidElement, useEffect, useState } from "react";
6
+ import { rehypeSourceBlocks, sourceAttributes } from "./markdown-source-blocks.js";
7
+ import { cloneElement, isValidElement, useEffect, useMemo, useState } from "react";
7
8
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
8
9
  // src/data/Markdown.tsx
9
10
  var headingClasses = {
@@ -24,7 +25,10 @@ function MarkdownHeading({ as: Tag, className, children, node: _node, ...props }
24
25
  }
25
26
  var loadPromise = null;
26
27
  function loadStreamdown() {
27
- if (!loadPromise) loadPromise = import("streamdown").then((m) => m.Streamdown).catch((err) => {
28
+ if (!loadPromise) loadPromise = import("streamdown").then((m) => ({
29
+ Streamdown: m.Streamdown,
30
+ defaultRehypePlugins: m.defaultRehypePlugins
31
+ })).catch((err) => {
28
32
  console.warn("clicky-ui: streamdown not available; rendering markdown as plain text", err);
29
33
  return null;
30
34
  });
@@ -44,7 +48,7 @@ function MarkdownCode({ className, children, ...rest }) {
44
48
  });
45
49
  const language = /language-([\w-]+)/.exec(className ?? "")?.[1];
46
50
  const source = nodeText(children).replace(/\n$/, "");
47
- return /* @__PURE__ */ jsx(CodeBlock, {
51
+ const block = /* @__PURE__ */ jsx(CodeBlock, {
48
52
  source,
49
53
  language,
50
54
  className: "not-prose my-4",
@@ -52,23 +56,37 @@ function MarkdownCode({ className, children, ...rest }) {
52
56
  downloadable: true,
53
57
  themeToggle: true
54
58
  });
59
+ const anchors = sourceAttributes(rest);
60
+ return Object.keys(anchors).length > 0 ? /* @__PURE__ */ jsx("div", {
61
+ ...anchors,
62
+ children: block
63
+ }) : block;
55
64
  }
56
- function MarkdownList({ className, children }) {
65
+ function MarkdownPre({ children, ...props }) {
66
+ return isValidElement(children) ? cloneElement(children, {
67
+ "data-block": "true",
68
+ ...sourceAttributes(props)
69
+ }) : children;
70
+ }
71
+ function MarkdownList({ className, children, ...props }) {
57
72
  const isTaskList = className?.includes("contains-task-list");
58
73
  return /* @__PURE__ */ jsx("ul", {
59
74
  className: cn("whitespace-normal", isTaskList ? "list-none pl-0" : "list-disc pl-6", className),
75
+ ...sourceAttributes(props),
60
76
  children
61
77
  });
62
78
  }
63
- function MarkdownOrderedList({ className, children }) {
79
+ function MarkdownOrderedList({ className, children, ...props }) {
64
80
  return /* @__PURE__ */ jsx("ol", {
65
81
  className: cn("list-decimal whitespace-normal pl-6", className),
82
+ ...sourceAttributes(props),
66
83
  children
67
84
  });
68
85
  }
69
- function MarkdownTable({ className, children }) {
86
+ function MarkdownTable({ className, children, ...props }) {
70
87
  return /* @__PURE__ */ jsx("div", {
71
88
  className: "not-prose my-4 max-w-full overflow-x-auto rounded-md border border-border",
89
+ ...sourceAttributes(props),
72
90
  children: /* @__PURE__ */ jsx("table", {
73
91
  className: cn("w-max min-w-full table-auto text-left text-sm", className),
74
92
  children
@@ -173,6 +191,7 @@ var markdownComponents = {
173
191
  ...props
174
192
  }),
175
193
  a: MarkdownLink,
194
+ pre: MarkdownPre,
176
195
  code: MarkdownCode,
177
196
  ul: MarkdownList,
178
197
  ol: MarkdownOrderedList,
@@ -213,24 +232,32 @@ var CALLOUT_ALLOWED_TAGS = { calloutbox: [
213
232
  * blocks render via the library CodeBlock, and lists and tables are styled
214
233
  * here rather than by Streamdown. Falls back to preformatted text until
215
234
  * Streamdown loads or when it is not installed. */
216
- function Markdown({ text, className, callouts = false }) {
217
- const [Streamdown, setStreamdown] = useState(null);
235
+ function Markdown({ text, className, callouts = false, sourceBlocks = false }) {
236
+ if (sourceBlocks && callouts) throw new Error("Markdown: sourceBlocks and callouts cannot be combined; callouts replaces the sanitiser schema that sourceBlocks keeps");
237
+ const [streamdown, setStreamdown] = useState(null);
218
238
  useEffect(() => {
219
239
  let cancelled = false;
220
- loadStreamdown().then((comp) => {
221
- if (!cancelled) setStreamdown(() => comp);
240
+ loadStreamdown().then((loaded) => {
241
+ if (!cancelled) setStreamdown(loaded);
222
242
  });
223
243
  return () => {
224
244
  cancelled = true;
225
245
  };
226
246
  }, []);
227
- if (!Streamdown) return /* @__PURE__ */ jsx("pre", {
247
+ const sourceRehypePlugins = useMemo(() => streamdown ? [...Object.values(streamdown.defaultRehypePlugins), rehypeSourceBlocks] : void 0, [streamdown]);
248
+ if (!streamdown) return /* @__PURE__ */ jsx("pre", {
228
249
  className: cn("whitespace-pre-wrap text-sm", className),
229
250
  children: text
230
251
  });
252
+ const { Streamdown } = streamdown;
231
253
  return /* @__PURE__ */ jsx("div", {
232
254
  className: cn("prose prose-sm max-w-none dark:prose-invert", className),
233
- children: /* @__PURE__ */ jsx(Streamdown, {
255
+ children: sourceBlocks ? /* @__PURE__ */ jsx(Streamdown, {
256
+ mode: "static",
257
+ components: markdownComponents,
258
+ rehypePlugins: sourceRehypePlugins,
259
+ children: text
260
+ }) : /* @__PURE__ */ jsx(Streamdown, {
234
261
  parseIncompleteMarkdown: true,
235
262
  components: callouts ? calloutComponents : markdownComponents,
236
263
  allowedTags: callouts ? CALLOUT_ALLOWED_TAGS : void 0,