@mastra/playground-ui 66.1.0-alpha.2 → 67.0.0

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 (1052) hide show
  1. package/dist/AgentIndicator-Bs2S8AWJ.js +847 -0
  2. package/dist/AgentIndicator-Bs2S8AWJ.js.map +1 -0
  3. package/dist/AgentIndicator-to30W73z.cjs +864 -0
  4. package/dist/AgentIndicator-to30W73z.cjs.map +1 -0
  5. package/dist/AgentIndicator.css +28 -0
  6. package/dist/{Arrival-NpBOyV52.js → Arrival-CJFEOXr5.js} +33 -3
  7. package/dist/Arrival-CJFEOXr5.js.map +1 -0
  8. package/dist/{Arrival-Dm6Vgn78.cjs → Arrival-Cs1oWjo4.cjs} +43 -1
  9. package/dist/Arrival-Cs1oWjo4.cjs.map +1 -0
  10. package/dist/{Comment-CUQvfikb.cjs → Comment-KYUQzeSu.cjs} +2 -2
  11. package/dist/{Comment-CUQvfikb.cjs.map → Comment-KYUQzeSu.cjs.map} +1 -1
  12. package/dist/{Comment-CPA3IyPS.js → Comment-VFJq2wRp.js} +2 -2
  13. package/dist/{Comment-CPA3IyPS.js.map → Comment-VFJq2wRp.js.map} +1 -1
  14. package/dist/{DataList-Ve3omCXT.js → DataList-2tIlQsLc.js} +95 -3
  15. package/dist/DataList-2tIlQsLc.js.map +1 -0
  16. package/dist/{DataList-Cmk08jUV.cjs → DataList-Czwmwyvp.cjs} +93 -1
  17. package/dist/DataList-Czwmwyvp.cjs.map +1 -0
  18. package/dist/{DateTimeRangePicker-ByMbLdom.js → DateTimeRangePicker-C_Lie_2P.js} +23 -2
  19. package/dist/DateTimeRangePicker-C_Lie_2P.js.map +1 -0
  20. package/dist/{DateTimeRangePicker-DGbH5WOn.cjs → DateTimeRangePicker-HmPOHwAQ.cjs} +23 -2
  21. package/dist/DateTimeRangePicker-HmPOHwAQ.cjs.map +1 -0
  22. package/dist/{FilterBar-Dk3QEuT6.js → FilterBar--4oguuVe.js} +4 -4
  23. package/dist/FilterBar--4oguuVe.js.map +1 -0
  24. package/dist/{FilterBar-gEvoWDXA.cjs → FilterBar-BUd4f7oi.cjs} +7 -7
  25. package/dist/FilterBar-BUd4f7oi.cjs.map +1 -0
  26. package/dist/GrainFill.css +2 -0
  27. package/dist/{MarkdownRenderer-BgqKfmRm.cjs → MarkdownRenderer-CS6u5drO.cjs} +2 -2
  28. package/dist/{MarkdownRenderer-BgqKfmRm.cjs.map → MarkdownRenderer-CS6u5drO.cjs.map} +1 -1
  29. package/dist/{MarkdownRenderer-DKCDXaLy.js → MarkdownRenderer-DME2xKTk.js} +2 -2
  30. package/dist/{MarkdownRenderer-DKCDXaLy.js.map → MarkdownRenderer-DME2xKTk.js.map} +1 -1
  31. package/dist/{Message-BF9cpYaw.cjs → Message-DsCNQpou.cjs} +2 -2
  32. package/dist/{Message-BF9cpYaw.cjs.map → Message-DsCNQpou.cjs.map} +1 -1
  33. package/dist/{Message-Bkf6Ro9H.js → Message-nVI6tMS3.js} +2 -2
  34. package/dist/{Message-Bkf6Ro9H.js.map → Message-nVI6tMS3.js.map} +1 -1
  35. package/dist/{MetricsCard-Dly_H3oX.cjs → MetricsCard-CEB-f2sv.cjs} +91 -109
  36. package/dist/MetricsCard-CEB-f2sv.cjs.map +1 -0
  37. package/dist/{MetricsCard-C9GWgT58.js → MetricsCard-M8awJ2B_.js} +91 -109
  38. package/dist/MetricsCard-M8awJ2B_.js.map +1 -0
  39. package/dist/{MetricsKpiCard-Uw0nyMgW.cjs → MetricsKpiCard-By_-sagx.cjs} +3 -2
  40. package/dist/{MetricsKpiCard-Uw0nyMgW.cjs.map → MetricsKpiCard-By_-sagx.cjs.map} +1 -1
  41. package/dist/{MetricsKpiCard-Idxjl-dn.js → MetricsKpiCard-OHbAElTl.js} +3 -2
  42. package/dist/{MetricsKpiCard-Idxjl-dn.js.map → MetricsKpiCard-OHbAElTl.js.map} +1 -1
  43. package/dist/{MetricsLineChart-DKzuRU2q.js → MetricsLineChart-BhHoduO0.js} +21 -39
  44. package/dist/MetricsLineChart-BhHoduO0.js.map +1 -0
  45. package/dist/{MetricsLineChart-2m4LVL1N.cjs → MetricsLineChart-CjBm4IXu.cjs} +21 -39
  46. package/dist/MetricsLineChart-CjBm4IXu.cjs.map +1 -0
  47. package/dist/{MetricsStackedBarChart-DJB4aByt.js → MetricsStackedBarChart-BRuA6MTE.js} +2 -3
  48. package/dist/MetricsStackedBarChart-BRuA6MTE.js.map +1 -0
  49. package/dist/{MetricsStackedBarChart-NATtwA_W.cjs → MetricsStackedBarChart-BdMlKv6G.cjs} +2 -3
  50. package/dist/MetricsStackedBarChart-BdMlKv6G.cjs.map +1 -0
  51. package/dist/Notice.css +2 -0
  52. package/dist/Shimmer.css +7 -0
  53. package/dist/{activity-ihrl0JtH.js → activity-CM34JyW-.js} +98 -33
  54. package/dist/activity-CM34JyW-.js.map +1 -0
  55. package/dist/{activity-QyLJcBKc.cjs → activity-DAK8tj7r.cjs} +108 -31
  56. package/dist/activity-DAK8tj7r.cjs.map +1 -0
  57. package/dist/chart-plot.css +15 -0
  58. package/dist/combobox-8kNAJFlj.cjs +309 -0
  59. package/dist/combobox-8kNAJFlj.cjs.map +1 -0
  60. package/dist/{combobox-C-E7_q4j.cjs → combobox-parts-BZVXwbG7.cjs} +7 -300
  61. package/dist/combobox-parts-BZVXwbG7.cjs.map +1 -0
  62. package/dist/{combobox-CDS2pBqz.js → combobox-parts-W7KRQUsV.js} +10 -297
  63. package/dist/combobox-parts-W7KRQUsV.js.map +1 -0
  64. package/dist/combobox-wFudhN8F.js +302 -0
  65. package/dist/combobox-wFudhN8F.js.map +1 -0
  66. package/dist/components/AgentIndicator.cjs.js +5 -0
  67. package/dist/components/AgentIndicator.d.ts +1 -0
  68. package/dist/components/AgentIndicator.es.js +1 -0
  69. package/dist/components/Arrival.cjs.js +3 -1
  70. package/dist/components/Arrival.es.js +1 -1
  71. package/dist/components/Combobox.cjs.js +24 -23
  72. package/dist/components/Combobox.es.js +2 -1
  73. package/dist/components/Comment.cjs.js +1 -1
  74. package/dist/components/Comment.es.js +1 -1
  75. package/dist/components/DataList.cjs.js +2 -2
  76. package/dist/components/DataList.es.js +2 -2
  77. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  78. package/dist/components/DateTimeRangePicker.es.js +1 -1
  79. package/dist/components/DiffStat.cjs.js +1 -1
  80. package/dist/components/DiffStat.es.js +1 -1
  81. package/dist/components/FilterBar.cjs.js +2 -2
  82. package/dist/components/FilterBar.es.js +2 -2
  83. package/dist/components/LogsDataList.cjs.js +1 -1
  84. package/dist/components/LogsDataList.es.js +1 -1
  85. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  86. package/dist/components/MarkdownRenderer.es.js +1 -1
  87. package/dist/components/Message.cjs.js +1 -1
  88. package/dist/components/Message.es.js +1 -1
  89. package/dist/components/MetricsCard.cjs.js +1 -1
  90. package/dist/components/MetricsCard.es.js +1 -1
  91. package/dist/components/MetricsKpiCard.cjs.js +1 -1
  92. package/dist/components/MetricsKpiCard.es.js +1 -1
  93. package/dist/components/MetricsLineChart.cjs.js +1 -1
  94. package/dist/components/MetricsLineChart.es.js +1 -1
  95. package/dist/components/MetricsStackedBarChart.cjs.js +1 -1
  96. package/dist/components/MetricsStackedBarChart.es.js +1 -1
  97. package/dist/components/PropertyFilter.cjs.js +1 -1
  98. package/dist/components/PropertyFilter.es.js +1 -1
  99. package/dist/components/SavedViews.cjs.js +27 -69
  100. package/dist/components/SavedViews.cjs.js.map +1 -1
  101. package/dist/components/SavedViews.es.js +26 -68
  102. package/dist/components/SavedViews.es.js.map +1 -1
  103. package/dist/components/ai/activity.cjs.js +3 -1
  104. package/dist/components/ai/activity.es.js +1 -1
  105. package/dist/components/ai/message-reveal.cjs.js +2 -1
  106. package/dist/components/ai/message-reveal.cjs.js.map +1 -1
  107. package/dist/components/ai/message-reveal.es.js +2 -1
  108. package/dist/components/ai/message-reveal.es.js.map +1 -1
  109. package/dist/components/ai/plan.cjs.js +1 -1
  110. package/dist/components/ai/plan.es.js +1 -1
  111. package/dist/components/ai/tool-approval.cjs.js +1 -1
  112. package/dist/components/ai/tool-approval.es.js +1 -1
  113. package/dist/components/ai/tool-call.cjs.js +2 -2
  114. package/dist/components/ai/tool-call.es.js +2 -2
  115. package/dist/domains/chat/activity/activity-stretch-line.cjs.js +6 -4
  116. package/dist/domains/chat/activity/activity-stretch-line.cjs.js.map +1 -1
  117. package/dist/domains/chat/activity/activity-stretch-line.es.js +6 -4
  118. package/dist/domains/chat/activity/activity-stretch-line.es.js.map +1 -1
  119. package/dist/domains/chat/activity/components/activity-fold.cjs.js +81 -28
  120. package/dist/domains/chat/activity/components/activity-fold.cjs.js.map +1 -1
  121. package/dist/domains/chat/activity/components/activity-fold.es.js +82 -29
  122. package/dist/domains/chat/activity/components/activity-fold.es.js.map +1 -1
  123. package/dist/domains/chat/activity/components/activity-timed-trigger.cjs.js +1 -1
  124. package/dist/domains/chat/activity/components/activity-timed-trigger.es.js +1 -1
  125. package/dist/domains/chat/activity/components/calls-panel.cjs.js +1 -1
  126. package/dist/domains/chat/activity/components/calls-panel.es.js +1 -1
  127. package/dist/domains/chat/activity/components/stretch-content.cjs.js +1 -1
  128. package/dist/domains/chat/activity/components/stretch-content.es.js +1 -1
  129. package/dist/domains/chat/activity/components/stretch-thought.cjs.js +1 -1
  130. package/dist/domains/chat/activity/components/stretch-thought.es.js +1 -1
  131. package/dist/domains/chat/activity/components/use-fading-edge.cjs.js +26 -0
  132. package/dist/domains/chat/activity/components/use-fading-edge.cjs.js.map +1 -0
  133. package/dist/domains/chat/activity/components/use-fading-edge.d.ts +1 -0
  134. package/dist/domains/chat/activity/components/use-fading-edge.es.js +25 -0
  135. package/dist/domains/chat/activity/components/use-fading-edge.es.js.map +1 -0
  136. package/dist/domains/chat/activity/components/use-rolling-words.cjs.js +123 -0
  137. package/dist/domains/chat/activity/components/use-rolling-words.cjs.js.map +1 -0
  138. package/dist/domains/chat/activity/components/use-rolling-words.d.ts +1 -0
  139. package/dist/domains/chat/activity/components/use-rolling-words.es.js +122 -0
  140. package/dist/domains/chat/activity/components/use-rolling-words.es.js.map +1 -0
  141. package/dist/domains/chat/activity/model/activity-segments.cjs.js +1 -1
  142. package/dist/domains/chat/activity/model/activity-segments.es.js +1 -1
  143. package/dist/domains/chat/activity/model/activity-words.cjs.js +16 -6
  144. package/dist/domains/chat/activity/model/activity-words.cjs.js.map +1 -1
  145. package/dist/domains/chat/activity/model/activity-words.es.js +15 -7
  146. package/dist/domains/chat/activity/model/activity-words.es.js.map +1 -1
  147. package/dist/domains/chat/activity.cjs.js +3 -0
  148. package/dist/domains/chat/activity.es.js +2 -1
  149. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  150. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  151. package/dist/domains/chat/messages/assistant-message-actions.cjs.js +1 -1
  152. package/dist/domains/chat/messages/assistant-message-actions.es.js +1 -1
  153. package/dist/domains/chat/messages/message-row.cjs.js +4 -4
  154. package/dist/domains/chat/messages/message-row.es.js +4 -4
  155. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  156. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  157. package/dist/domains/chat/messages/reasoning-content.cjs.js +1 -1
  158. package/dist/domains/chat/messages/reasoning-content.es.js +1 -1
  159. package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
  160. package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
  161. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  162. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  163. package/dist/domains/chat/messages/renderers/tool-part.cjs.js +18 -0
  164. package/dist/domains/chat/messages/renderers/tool-part.cjs.js.map +1 -1
  165. package/dist/domains/chat/messages/renderers/tool-part.es.js +18 -0
  166. package/dist/domains/chat/messages/renderers/tool-part.es.js.map +1 -1
  167. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  168. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  169. package/dist/domains/chat/messages/skill-message.cjs.js +10 -7
  170. package/dist/domains/chat/messages/skill-message.cjs.js.map +1 -1
  171. package/dist/domains/chat/messages/skill-message.es.js +10 -7
  172. package/dist/domains/chat/messages/skill-message.es.js.map +1 -1
  173. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
  174. package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
  175. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  176. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  177. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
  178. package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
  179. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +2 -2
  180. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +2 -2
  181. package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js +111 -0
  182. package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js.map +1 -0
  183. package/dist/domains/chat/tools/badges/mcp-task-chip.d.ts +1 -0
  184. package/dist/domains/chat/tools/badges/mcp-task-chip.es.js +109 -0
  185. package/dist/domains/chat/tools/badges/mcp-task-chip.es.js.map +1 -0
  186. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +8 -6
  187. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js.map +1 -1
  188. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +9 -7
  189. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js.map +1 -1
  190. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +2 -3
  191. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js.map +1 -1
  192. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +2 -3
  193. package/dist/domains/chat/tools/badges/observation-marker-details.es.js.map +1 -1
  194. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  195. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  196. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +2 -2
  197. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +2 -2
  198. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  199. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  200. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +10 -4
  201. package/dist/domains/chat/tools/badges/tool-badge.cjs.js.map +1 -1
  202. package/dist/domains/chat/tools/badges/tool-badge.es.js +10 -4
  203. package/dist/domains/chat/tools/badges/tool-badge.es.js.map +1 -1
  204. package/dist/domains/chat/tools/badges/use-mcp-task-progress.cjs.js +51 -0
  205. package/dist/domains/chat/tools/badges/use-mcp-task-progress.cjs.js.map +1 -0
  206. package/dist/domains/chat/tools/badges/use-mcp-task-progress.d.ts +1 -0
  207. package/dist/domains/chat/tools/badges/use-mcp-task-progress.es.js +49 -0
  208. package/dist/domains/chat/tools/badges/use-mcp-task-progress.es.js.map +1 -0
  209. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +1 -1
  210. package/dist/domains/chat/tools/badges/workflow-badge.es.js +1 -1
  211. package/dist/domains/chat/tools/tool-card-kind.cjs.js +1 -1
  212. package/dist/domains/chat/tools/tool-card-kind.es.js +1 -1
  213. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  214. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  215. package/dist/domains/chat/tools/tool-groups.cjs.js +1 -1
  216. package/dist/domains/chat/tools/tool-groups.es.js +1 -1
  217. package/dist/domains/dashboards/components/dashboard-grid.cjs.js +44 -0
  218. package/dist/domains/dashboards/components/dashboard-grid.cjs.js.map +1 -0
  219. package/dist/domains/dashboards/components/dashboard-grid.d.ts +1 -0
  220. package/dist/domains/dashboards/components/dashboard-grid.es.js +41 -0
  221. package/dist/domains/dashboards/components/dashboard-grid.es.js.map +1 -0
  222. package/dist/domains/dashboards/components/dashboard-renderer.cjs.js +72 -0
  223. package/dist/domains/dashboards/components/dashboard-renderer.cjs.js.map +1 -0
  224. package/dist/domains/dashboards/components/dashboard-renderer.d.ts +1 -0
  225. package/dist/domains/dashboards/components/dashboard-renderer.es.js +71 -0
  226. package/dist/domains/dashboards/components/dashboard-renderer.es.js.map +1 -0
  227. package/dist/domains/dashboards/components/view-gate.cjs.js +55 -0
  228. package/dist/domains/dashboards/components/view-gate.cjs.js.map +1 -0
  229. package/dist/domains/dashboards/components/view-gate.d.ts +1 -0
  230. package/dist/domains/dashboards/components/view-gate.es.js +54 -0
  231. package/dist/domains/dashboards/components/view-gate.es.js.map +1 -0
  232. package/dist/domains/dashboards/components/widget-chrome.cjs.js +16 -0
  233. package/dist/domains/dashboards/components/widget-chrome.cjs.js.map +1 -0
  234. package/dist/domains/dashboards/components/widget-chrome.d.ts +1 -0
  235. package/dist/domains/dashboards/components/widget-chrome.es.js +15 -0
  236. package/dist/domains/dashboards/components/widget-chrome.es.js.map +1 -0
  237. package/dist/domains/dashboards/components/widget-controls.cjs.js +21 -0
  238. package/dist/domains/dashboards/components/widget-controls.cjs.js.map +1 -0
  239. package/dist/domains/dashboards/components/widget-controls.d.ts +1 -0
  240. package/dist/domains/dashboards/components/widget-controls.es.js +20 -0
  241. package/dist/domains/dashboards/components/widget-controls.es.js.map +1 -0
  242. package/dist/domains/dashboards/components/widget-error.cjs.js +18 -0
  243. package/dist/domains/dashboards/components/widget-error.cjs.js.map +1 -0
  244. package/dist/domains/dashboards/components/widget-error.d.ts +1 -0
  245. package/dist/domains/dashboards/components/widget-error.es.js +17 -0
  246. package/dist/domains/dashboards/components/widget-error.es.js.map +1 -0
  247. package/dist/domains/dashboards/hooks/use-dashboard-requests.cjs.js +47 -0
  248. package/dist/domains/dashboards/hooks/use-dashboard-requests.cjs.js.map +1 -0
  249. package/dist/domains/dashboards/hooks/use-dashboard-requests.d.ts +1 -0
  250. package/dist/domains/dashboards/hooks/use-dashboard-requests.es.js +46 -0
  251. package/dist/domains/dashboards/hooks/use-dashboard-requests.es.js.map +1 -0
  252. package/dist/domains/dashboards/hooks/use-scorers.cjs.js +41 -0
  253. package/dist/domains/dashboards/hooks/use-scorers.cjs.js.map +1 -0
  254. package/dist/domains/dashboards/hooks/use-scorers.d.ts +1 -0
  255. package/dist/domains/dashboards/hooks/use-scorers.es.js +40 -0
  256. package/dist/domains/dashboards/hooks/use-scorers.es.js.map +1 -0
  257. package/dist/domains/dashboards/hooks/use-widget-views.cjs.js +35 -0
  258. package/dist/domains/dashboards/hooks/use-widget-views.cjs.js.map +1 -0
  259. package/dist/domains/dashboards/hooks/use-widget-views.d.ts +1 -0
  260. package/dist/domains/dashboards/hooks/use-widget-views.es.js +32 -0
  261. package/dist/domains/dashboards/hooks/use-widget-views.es.js.map +1 -0
  262. package/dist/domains/dashboards/kinds/kpis/kpis-widget.cjs.js +63 -0
  263. package/dist/domains/dashboards/kinds/kpis/kpis-widget.cjs.js.map +1 -0
  264. package/dist/domains/dashboards/kinds/kpis/kpis-widget.d.ts +1 -0
  265. package/dist/domains/dashboards/kinds/kpis/kpis-widget.es.js +62 -0
  266. package/dist/domains/dashboards/kinds/kpis/kpis-widget.es.js.map +1 -0
  267. package/dist/domains/dashboards/kinds/kpis/options.cjs.js +72 -0
  268. package/dist/domains/dashboards/kinds/kpis/options.cjs.js.map +1 -0
  269. package/dist/domains/dashboards/kinds/kpis/options.d.ts +1 -0
  270. package/dist/domains/dashboards/kinds/kpis/options.es.js +69 -0
  271. package/dist/domains/dashboards/kinds/kpis/options.es.js.map +1 -0
  272. package/dist/domains/dashboards/kinds/kpis.cjs.js +17 -0
  273. package/dist/domains/dashboards/kinds/kpis.cjs.js.map +1 -0
  274. package/dist/domains/dashboards/kinds/kpis.d.ts +1 -0
  275. package/dist/domains/dashboards/kinds/kpis.es.js +14 -0
  276. package/dist/domains/dashboards/kinds/kpis.es.js.map +1 -0
  277. package/dist/domains/dashboards/kinds/scores/options.cjs.js +30 -0
  278. package/dist/domains/dashboards/kinds/scores/options.cjs.js.map +1 -0
  279. package/dist/domains/dashboards/kinds/scores/options.d.ts +1 -0
  280. package/dist/domains/dashboards/kinds/scores/options.es.js +28 -0
  281. package/dist/domains/dashboards/kinds/scores/options.es.js.map +1 -0
  282. package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js +91 -0
  283. package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js.map +1 -0
  284. package/dist/domains/dashboards/kinds/scores/scores-widget.d.ts +1 -0
  285. package/dist/domains/dashboards/kinds/scores/scores-widget.es.js +90 -0
  286. package/dist/domains/dashboards/kinds/scores/scores-widget.es.js.map +1 -0
  287. package/dist/domains/dashboards/kinds/scores.cjs.js +16 -0
  288. package/dist/domains/dashboards/kinds/scores.cjs.js.map +1 -0
  289. package/dist/domains/dashboards/kinds/scores.d.ts +1 -0
  290. package/dist/domains/dashboards/kinds/scores.es.js +14 -0
  291. package/dist/domains/dashboards/kinds/scores.es.js.map +1 -0
  292. package/dist/domains/dashboards/kinds/table/table-cells.cjs.js +67 -0
  293. package/dist/domains/dashboards/kinds/table/table-cells.cjs.js.map +1 -0
  294. package/dist/domains/dashboards/kinds/table/table-cells.d.ts +1 -0
  295. package/dist/domains/dashboards/kinds/table/table-cells.es.js +63 -0
  296. package/dist/domains/dashboards/kinds/table/table-cells.es.js.map +1 -0
  297. package/dist/domains/dashboards/kinds/table/table-columns.cjs.js +72 -0
  298. package/dist/domains/dashboards/kinds/table/table-columns.cjs.js.map +1 -0
  299. package/dist/domains/dashboards/kinds/table/table-columns.d.ts +1 -0
  300. package/dist/domains/dashboards/kinds/table/table-columns.es.js +71 -0
  301. package/dist/domains/dashboards/kinds/table/table-columns.es.js.map +1 -0
  302. package/dist/domains/dashboards/kinds/table/table-frame.cjs.js +16 -0
  303. package/dist/domains/dashboards/kinds/table/table-frame.cjs.js.map +1 -0
  304. package/dist/domains/dashboards/kinds/table/table-frame.d.ts +1 -0
  305. package/dist/domains/dashboards/kinds/table/table-frame.es.js +15 -0
  306. package/dist/domains/dashboards/kinds/table/table-frame.es.js.map +1 -0
  307. package/dist/domains/dashboards/kinds/table/table-tabs.cjs.js +55 -0
  308. package/dist/domains/dashboards/kinds/table/table-tabs.cjs.js.map +1 -0
  309. package/dist/domains/dashboards/kinds/table/table-tabs.d.ts +1 -0
  310. package/dist/domains/dashboards/kinds/table/table-tabs.es.js +54 -0
  311. package/dist/domains/dashboards/kinds/table/table-tabs.es.js.map +1 -0
  312. package/dist/domains/dashboards/kinds/table/table-view.cjs.js +80 -0
  313. package/dist/domains/dashboards/kinds/table/table-view.cjs.js.map +1 -0
  314. package/dist/domains/dashboards/kinds/table/table-view.d.ts +1 -0
  315. package/dist/domains/dashboards/kinds/table/table-view.es.js +79 -0
  316. package/dist/domains/dashboards/kinds/table/table-view.es.js.map +1 -0
  317. package/dist/domains/dashboards/kinds/table/table-widget.cjs.js +30 -0
  318. package/dist/domains/dashboards/kinds/table/table-widget.cjs.js.map +1 -0
  319. package/dist/domains/dashboards/kinds/table/table-widget.d.ts +1 -0
  320. package/dist/domains/dashboards/kinds/table/table-widget.es.js +29 -0
  321. package/dist/domains/dashboards/kinds/table/table-widget.es.js.map +1 -0
  322. package/dist/domains/dashboards/kinds/table.cjs.js +17 -0
  323. package/dist/domains/dashboards/kinds/table.cjs.js.map +1 -0
  324. package/dist/domains/dashboards/kinds/table.d.ts +1 -0
  325. package/dist/domains/dashboards/kinds/table.es.js +14 -0
  326. package/dist/domains/dashboards/kinds/table.es.js.map +1 -0
  327. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js +115 -0
  328. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js.map +1 -0
  329. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.d.ts +1 -0
  330. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js +114 -0
  331. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js.map +1 -0
  332. package/dist/domains/dashboards/kinds/timeseries.cjs.js +15 -0
  333. package/dist/domains/dashboards/kinds/timeseries.cjs.js.map +1 -0
  334. package/dist/domains/dashboards/kinds/timeseries.d.ts +1 -0
  335. package/dist/domains/dashboards/kinds/timeseries.es.js +14 -0
  336. package/dist/domains/dashboards/kinds/timeseries.es.js.map +1 -0
  337. package/dist/domains/dashboards/kinds.cjs.js +20 -0
  338. package/dist/domains/dashboards/kinds.cjs.js.map +1 -0
  339. package/dist/domains/dashboards/kinds.d.ts +1 -0
  340. package/dist/domains/dashboards/kinds.es.js +15 -0
  341. package/dist/domains/dashboards/kinds.es.js.map +1 -0
  342. package/dist/domains/dashboards/lib/answers.cjs.js +42 -0
  343. package/dist/domains/dashboards/lib/answers.cjs.js.map +1 -0
  344. package/dist/domains/dashboards/lib/answers.d.ts +1 -0
  345. package/dist/domains/dashboards/lib/answers.es.js +37 -0
  346. package/dist/domains/dashboards/lib/answers.es.js.map +1 -0
  347. package/dist/domains/dashboards/lib/chrome.cjs.js +41 -0
  348. package/dist/domains/dashboards/lib/chrome.cjs.js.map +1 -0
  349. package/dist/domains/dashboards/lib/chrome.d.ts +1 -0
  350. package/dist/domains/dashboards/lib/chrome.es.js +37 -0
  351. package/dist/domains/dashboards/lib/chrome.es.js.map +1 -0
  352. package/dist/domains/dashboards/lib/definition.cjs.js +59 -0
  353. package/dist/domains/dashboards/lib/definition.cjs.js.map +1 -0
  354. package/dist/domains/dashboards/lib/definition.d.ts +1 -0
  355. package/dist/domains/dashboards/lib/definition.es.js +55 -0
  356. package/dist/domains/dashboards/lib/definition.es.js.map +1 -0
  357. package/dist/domains/dashboards/lib/filters.cjs.js +44 -0
  358. package/dist/domains/dashboards/lib/filters.cjs.js.map +1 -0
  359. package/dist/domains/dashboards/lib/filters.d.ts +1 -0
  360. package/dist/domains/dashboards/lib/filters.es.js +43 -0
  361. package/dist/domains/dashboards/lib/filters.es.js.map +1 -0
  362. package/dist/domains/dashboards/lib/format.cjs.js +32 -0
  363. package/dist/domains/dashboards/lib/format.cjs.js.map +1 -0
  364. package/dist/domains/dashboards/lib/format.d.ts +1 -0
  365. package/dist/domains/dashboards/lib/format.es.js +30 -0
  366. package/dist/domains/dashboards/lib/format.es.js.map +1 -0
  367. package/dist/domains/dashboards/lib/prepare-widget.cjs.js +77 -0
  368. package/dist/domains/dashboards/lib/prepare-widget.cjs.js.map +1 -0
  369. package/dist/domains/dashboards/lib/prepare-widget.d.ts +1 -0
  370. package/dist/domains/dashboards/lib/prepare-widget.es.js +75 -0
  371. package/dist/domains/dashboards/lib/prepare-widget.es.js.map +1 -0
  372. package/dist/domains/dashboards/lib/requests.cjs.js +279 -0
  373. package/dist/domains/dashboards/lib/requests.cjs.js.map +1 -0
  374. package/dist/domains/dashboards/lib/requests.d.ts +1 -0
  375. package/dist/domains/dashboards/lib/requests.es.js +273 -0
  376. package/dist/domains/dashboards/lib/requests.es.js.map +1 -0
  377. package/dist/domains/dashboards/lib/scores.cjs.js +58 -0
  378. package/dist/domains/dashboards/lib/scores.cjs.js.map +1 -0
  379. package/dist/domains/dashboards/lib/scores.d.ts +1 -0
  380. package/dist/domains/dashboards/lib/scores.es.js +53 -0
  381. package/dist/domains/dashboards/lib/scores.es.js.map +1 -0
  382. package/dist/domains/dashboards/lib/table.cjs.js +408 -0
  383. package/dist/domains/dashboards/lib/table.cjs.js.map +1 -0
  384. package/dist/domains/dashboards/lib/table.d.ts +1 -0
  385. package/dist/domains/dashboards/lib/table.es.js +388 -0
  386. package/dist/domains/dashboards/lib/table.es.js.map +1 -0
  387. package/dist/domains/dashboards/lib/timeseries.cjs.js +192 -0
  388. package/dist/domains/dashboards/lib/timeseries.cjs.js.map +1 -0
  389. package/dist/domains/dashboards/lib/timeseries.d.ts +1 -0
  390. package/dist/domains/dashboards/lib/timeseries.es.js +188 -0
  391. package/dist/domains/dashboards/lib/timeseries.es.js.map +1 -0
  392. package/dist/domains/dashboards/lib/values.cjs.js +155 -0
  393. package/dist/domains/dashboards/lib/values.cjs.js.map +1 -0
  394. package/dist/domains/dashboards/lib/values.d.ts +1 -0
  395. package/dist/domains/dashboards/lib/values.es.js +142 -0
  396. package/dist/domains/dashboards/lib/values.es.js.map +1 -0
  397. package/dist/domains/dashboards/metrics-dashboard.cjs.js +737 -0
  398. package/dist/domains/dashboards/metrics-dashboard.cjs.js.map +1 -0
  399. package/dist/domains/dashboards/metrics-dashboard.d.ts +1 -0
  400. package/dist/domains/dashboards/metrics-dashboard.es.js +736 -0
  401. package/dist/domains/dashboards/metrics-dashboard.es.js.map +1 -0
  402. package/dist/domains/dashboards/widget-kind.cjs.js +7 -0
  403. package/dist/domains/dashboards/widget-kind.cjs.js.map +1 -0
  404. package/dist/domains/dashboards/widget-kind.d.ts +1 -0
  405. package/dist/domains/dashboards/widget-kind.es.js +6 -0
  406. package/dist/domains/dashboards/widget-kind.es.js.map +1 -0
  407. package/dist/domains/dashboards.cjs.js +39 -0
  408. package/dist/domains/dashboards.d.ts +1 -0
  409. package/dist/domains/dashboards.es.js +18 -0
  410. package/dist/domains/logs/components/logs-list-view.cjs.js +1 -1
  411. package/dist/domains/logs/components/logs-list-view.es.js +1 -1
  412. package/dist/domains/logs/components/logs-saved-views.cjs.js +14 -0
  413. package/dist/domains/logs/components/logs-saved-views.cjs.js.map +1 -0
  414. package/dist/domains/logs/components/logs-saved-views.d.ts +1 -0
  415. package/dist/domains/logs/components/logs-saved-views.es.js +13 -0
  416. package/dist/domains/logs/components/logs-saved-views.es.js.map +1 -0
  417. package/dist/domains/logs/components.cjs.js +2 -0
  418. package/dist/domains/logs/components.es.js +2 -1
  419. package/dist/domains/logs/hooks/use-logs-url-state.cjs.js +1 -1
  420. package/dist/domains/logs/hooks/use-logs-url-state.cjs.js.map +1 -1
  421. package/dist/domains/logs/hooks/use-logs-url-state.es.js +2 -2
  422. package/dist/domains/logs/hooks/use-logs-url-state.es.js.map +1 -1
  423. package/dist/domains/logs/log-filters.cjs.js +11 -0
  424. package/dist/domains/logs/log-filters.cjs.js.map +1 -1
  425. package/dist/domains/logs/log-filters.es.js +9 -1
  426. package/dist/domains/logs/log-filters.es.js.map +1 -1
  427. package/dist/domains/logs.cjs.js +6 -1
  428. package/dist/domains/logs.es.js +3 -2
  429. package/dist/domains/metrics/components/agent-runs-card.cjs.js +38 -15
  430. package/dist/domains/metrics/components/agent-runs-card.cjs.js.map +1 -1
  431. package/dist/domains/metrics/components/agent-runs-card.es.js +38 -15
  432. package/dist/domains/metrics/components/agent-runs-card.es.js.map +1 -1
  433. package/dist/domains/metrics/components/breakdown/breakdown-change-cell.cjs.js +4 -11
  434. package/dist/domains/metrics/components/breakdown/breakdown-change-cell.cjs.js.map +1 -1
  435. package/dist/domains/metrics/components/breakdown/breakdown-change-cell.es.js +4 -11
  436. package/dist/domains/metrics/components/breakdown/breakdown-change-cell.es.js.map +1 -1
  437. package/dist/domains/metrics/components/breakdown/breakdown-cost-cell.cjs.js +2 -4
  438. package/dist/domains/metrics/components/breakdown/breakdown-cost-cell.cjs.js.map +1 -1
  439. package/dist/domains/metrics/components/breakdown/breakdown-cost-cell.es.js +2 -4
  440. package/dist/domains/metrics/components/breakdown/breakdown-cost-cell.es.js.map +1 -1
  441. package/dist/domains/metrics/components/breakdown/breakdown-entity-tab.cjs.js +1 -1
  442. package/dist/domains/metrics/components/breakdown/breakdown-entity-tab.es.js +1 -1
  443. package/dist/domains/metrics/components/breakdown/breakdown-frame.cjs.js +16 -27
  444. package/dist/domains/metrics/components/breakdown/breakdown-frame.cjs.js.map +1 -1
  445. package/dist/domains/metrics/components/breakdown/breakdown-frame.es.js +16 -27
  446. package/dist/domains/metrics/components/breakdown/breakdown-frame.es.js.map +1 -1
  447. package/dist/domains/metrics/components/breakdown/breakdown-models-tab.cjs.js +1 -1
  448. package/dist/domains/metrics/components/breakdown/breakdown-models-tab.es.js +1 -1
  449. package/dist/domains/metrics/components/breakdown/breakdown-name.cjs.js +22 -0
  450. package/dist/domains/metrics/components/breakdown/breakdown-name.cjs.js.map +1 -0
  451. package/dist/domains/metrics/components/breakdown/breakdown-name.d.ts +1 -0
  452. package/dist/domains/metrics/components/breakdown/breakdown-name.es.js +21 -0
  453. package/dist/domains/metrics/components/breakdown/breakdown-name.es.js.map +1 -0
  454. package/dist/domains/metrics/components/breakdown/breakdown-not-priced.cjs.js +13 -0
  455. package/dist/domains/metrics/components/breakdown/breakdown-not-priced.cjs.js.map +1 -0
  456. package/dist/domains/metrics/components/breakdown/breakdown-not-priced.d.ts +1 -0
  457. package/dist/domains/metrics/components/breakdown/breakdown-not-priced.es.js +12 -0
  458. package/dist/domains/metrics/components/breakdown/breakdown-not-priced.es.js.map +1 -0
  459. package/dist/domains/metrics/components/breakdown/breakdown-projects-first.cjs.js +1 -1
  460. package/dist/domains/metrics/components/breakdown/breakdown-projects-first.es.js +1 -1
  461. package/dist/domains/metrics/components/breakdown/breakdown-row-mark.cjs.js +26 -13
  462. package/dist/domains/metrics/components/breakdown/breakdown-row-mark.cjs.js.map +1 -1
  463. package/dist/domains/metrics/components/breakdown/breakdown-row-mark.es.js +25 -14
  464. package/dist/domains/metrics/components/breakdown/breakdown-row-mark.es.js.map +1 -1
  465. package/dist/domains/metrics/components/breakdown/breakdown-row-name.cjs.js +10 -13
  466. package/dist/domains/metrics/components/breakdown/breakdown-row-name.cjs.js.map +1 -1
  467. package/dist/domains/metrics/components/breakdown/breakdown-row-name.es.js +11 -14
  468. package/dist/domains/metrics/components/breakdown/breakdown-row-name.es.js.map +1 -1
  469. package/dist/domains/metrics/components/breakdown/breakdown-tab-body.cjs.js +1 -1
  470. package/dist/domains/metrics/components/breakdown/breakdown-tab-body.es.js +1 -1
  471. package/dist/domains/metrics/components/breakdown/breakdown-table.cjs.js +5 -5
  472. package/dist/domains/metrics/components/breakdown/breakdown-table.es.js +5 -5
  473. package/dist/domains/metrics/components/breakdown/breakdown-trace-tab.cjs.js +1 -1
  474. package/dist/domains/metrics/components/breakdown/breakdown-trace-tab.es.js +1 -1
  475. package/dist/domains/metrics/components/breakdown/breakdown-trend-text.cjs.js +25 -0
  476. package/dist/domains/metrics/components/breakdown/breakdown-trend-text.cjs.js.map +1 -0
  477. package/dist/domains/metrics/components/breakdown/breakdown-trend-text.d.ts +1 -0
  478. package/dist/domains/metrics/components/breakdown/breakdown-trend-text.es.js +24 -0
  479. package/dist/domains/metrics/components/breakdown/breakdown-trend-text.es.js.map +1 -0
  480. package/dist/domains/metrics/components/breakdown-card.cjs.js +3 -3
  481. package/dist/domains/metrics/components/breakdown-card.es.js +3 -3
  482. package/dist/domains/metrics/components/card-action-buttons.cjs.js +43 -3
  483. package/dist/domains/metrics/components/card-action-buttons.cjs.js.map +1 -1
  484. package/dist/domains/metrics/components/card-action-buttons.es.js +42 -5
  485. package/dist/domains/metrics/components/card-action-buttons.es.js.map +1 -1
  486. package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
  487. package/dist/domains/metrics/components/chart-area.es.js +1 -1
  488. package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
  489. package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
  490. package/dist/domains/metrics/components/chart-card.cjs.js +39 -38
  491. package/dist/domains/metrics/components/chart-card.cjs.js.map +1 -1
  492. package/dist/domains/metrics/components/chart-card.es.js +39 -38
  493. package/dist/domains/metrics/components/chart-card.es.js.map +1 -1
  494. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  495. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  496. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.cjs.js +15 -16
  497. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.cjs.js.map +1 -1
  498. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.es.js +16 -16
  499. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.es.js.map +1 -1
  500. package/dist/domains/metrics/components/distinct-ids-card.cjs.js +0 -1
  501. package/dist/domains/metrics/components/distinct-ids-card.cjs.js.map +1 -1
  502. package/dist/domains/metrics/components/distinct-ids-card.es.js +1 -2
  503. package/dist/domains/metrics/components/distinct-ids-card.es.js.map +1 -1
  504. package/dist/domains/metrics/components/failure-rate-card.cjs.js +11 -14
  505. package/dist/domains/metrics/components/failure-rate-card.cjs.js.map +1 -1
  506. package/dist/domains/metrics/components/failure-rate-card.es.js +11 -14
  507. package/dist/domains/metrics/components/failure-rate-card.es.js.map +1 -1
  508. package/dist/domains/metrics/components/kpi-card.cjs.js +8 -5
  509. package/dist/domains/metrics/components/kpi-card.cjs.js.map +1 -1
  510. package/dist/domains/metrics/components/kpi-card.es.js +8 -5
  511. package/dist/domains/metrics/components/kpi-card.es.js.map +1 -1
  512. package/dist/domains/metrics/components/latency-card.cjs.js +33 -30
  513. package/dist/domains/metrics/components/latency-card.cjs.js.map +1 -1
  514. package/dist/domains/metrics/components/latency-card.es.js +34 -31
  515. package/dist/domains/metrics/components/latency-card.es.js.map +1 -1
  516. package/dist/domains/metrics/components/metrics-grid/metrics-grid.cjs.js +5 -2
  517. package/dist/domains/metrics/components/metrics-grid/metrics-grid.cjs.js.map +1 -1
  518. package/dist/domains/metrics/components/metrics-grid/metrics-grid.es.js +5 -2
  519. package/dist/domains/metrics/components/metrics-grid/metrics-grid.es.js.map +1 -1
  520. package/dist/domains/metrics/components/scores-card.cjs.js +7 -17
  521. package/dist/domains/metrics/components/scores-card.cjs.js.map +1 -1
  522. package/dist/domains/metrics/components/scores-card.es.js +7 -17
  523. package/dist/domains/metrics/components/scores-card.es.js.map +1 -1
  524. package/dist/domains/metrics/components/token-usage-card.cjs.js +29 -26
  525. package/dist/domains/metrics/components/token-usage-card.cjs.js.map +1 -1
  526. package/dist/domains/metrics/components/token-usage-card.es.js +30 -27
  527. package/dist/domains/metrics/components/token-usage-card.es.js.map +1 -1
  528. package/dist/domains/metrics/components/trace-aggregate-card.cjs.js +3 -2
  529. package/dist/domains/metrics/components/trace-aggregate-card.cjs.js.map +1 -1
  530. package/dist/domains/metrics/components/trace-aggregate-card.es.js +3 -2
  531. package/dist/domains/metrics/components/trace-aggregate-card.es.js.map +1 -1
  532. package/dist/domains/metrics/components/trace-volume-card.cjs.js +31 -35
  533. package/dist/domains/metrics/components/trace-volume-card.cjs.js.map +1 -1
  534. package/dist/domains/metrics/components/trace-volume-card.es.js +31 -35
  535. package/dist/domains/metrics/components/trace-volume-card.es.js.map +1 -1
  536. package/dist/domains/metrics/components/usage-card.cjs.js +29 -28
  537. package/dist/domains/metrics/components/usage-card.cjs.js.map +1 -1
  538. package/dist/domains/metrics/components/usage-card.es.js +30 -29
  539. package/dist/domains/metrics/components/usage-card.es.js.map +1 -1
  540. package/dist/domains/metrics/components.cjs.js +6 -5
  541. package/dist/domains/metrics/components.es.js +4 -5
  542. package/dist/domains/metrics/drilldown.cjs.js +1 -1
  543. package/dist/domains/metrics/drilldown.es.js +1 -1
  544. package/dist/domains/metrics/hooks/use-metrics-activity.cjs.js +1 -1
  545. package/dist/domains/metrics/hooks/use-metrics-activity.es.js +1 -1
  546. package/dist/domains/metrics/hooks/use-metrics-latency.cjs.js +1 -1
  547. package/dist/domains/metrics/hooks/use-metrics-latency.es.js +1 -1
  548. package/dist/domains/metrics/hooks/use-metrics-scores.cjs.js +1 -1
  549. package/dist/domains/metrics/hooks/use-metrics-scores.es.js +1 -1
  550. package/dist/domains/metrics/hooks/use-metrics-span-aggregate.cjs.js +1 -1
  551. package/dist/domains/metrics/hooks/use-metrics-span-aggregate.es.js +1 -1
  552. package/dist/domains/metrics/hooks.cjs.js +1 -1
  553. package/dist/domains/metrics/hooks.es.js +1 -1
  554. package/dist/domains/metrics/lib/breakdown-table.cjs.js +2 -2
  555. package/dist/domains/metrics/lib/breakdown-table.es.js +2 -2
  556. package/dist/domains/metrics/lib.cjs.js +2 -2
  557. package/dist/domains/metrics/lib.es.js +2 -2
  558. package/dist/domains/metrics/metrics-filters.cjs.js +1 -1
  559. package/dist/domains/metrics/metrics-filters.es.js +1 -1
  560. package/dist/domains/metrics.cjs.js +14 -13
  561. package/dist/domains/metrics.es.js +12 -13
  562. package/dist/domains/observability/components/observability-header-slot.cjs.js +13 -0
  563. package/dist/domains/observability/components/observability-header-slot.cjs.js.map +1 -0
  564. package/dist/domains/observability/components/observability-header-slot.d.ts +1 -0
  565. package/dist/domains/observability/components/observability-header-slot.es.js +11 -0
  566. package/dist/domains/observability/components/observability-header-slot.es.js.map +1 -0
  567. package/dist/domains/observability/components/observability-histogram.cjs.js +6 -2
  568. package/dist/domains/observability/components/observability-histogram.cjs.js.map +1 -1
  569. package/dist/domains/observability/components/observability-histogram.es.js +6 -2
  570. package/dist/domains/observability/components/observability-histogram.es.js.map +1 -1
  571. package/dist/domains/observability/components/observability-page-layout.cjs.js +19 -5
  572. package/dist/domains/observability/components/observability-page-layout.cjs.js.map +1 -1
  573. package/dist/domains/observability/components/observability-page-layout.es.js +20 -6
  574. package/dist/domains/observability/components/observability-page-layout.es.js.map +1 -1
  575. package/dist/domains/observability/hooks/use-observability-list-filters.cjs.js +75 -18
  576. package/dist/domains/observability/hooks/use-observability-list-filters.cjs.js.map +1 -1
  577. package/dist/domains/observability/hooks/use-observability-list-filters.es.js +76 -19
  578. package/dist/domains/observability/hooks/use-observability-list-filters.es.js.map +1 -1
  579. package/dist/domains/observability/lib/zoom-memory.cjs.js +24 -0
  580. package/dist/domains/observability/lib/zoom-memory.cjs.js.map +1 -0
  581. package/dist/domains/observability/lib/zoom-memory.d.ts +1 -0
  582. package/dist/domains/observability/lib/zoom-memory.es.js +22 -0
  583. package/dist/domains/observability/lib/zoom-memory.es.js.map +1 -0
  584. package/dist/domains/observability/observability-list-url-state.cjs.js +122 -0
  585. package/dist/domains/observability/observability-list-url-state.cjs.js.map +1 -0
  586. package/dist/domains/observability/observability-list-url-state.d.ts +1 -0
  587. package/dist/domains/observability/observability-list-url-state.es.js +111 -0
  588. package/dist/domains/observability/observability-list-url-state.es.js.map +1 -0
  589. package/dist/domains/observability/saved-view-state.cjs.js +292 -0
  590. package/dist/domains/observability/saved-view-state.cjs.js.map +1 -0
  591. package/dist/domains/observability/saved-view-state.d.ts +1 -0
  592. package/dist/domains/observability/saved-view-state.es.js +286 -0
  593. package/dist/domains/observability/saved-view-state.es.js.map +1 -0
  594. package/dist/domains/observability/saved-views/observability-saved-views.cjs.js +3 -0
  595. package/dist/domains/observability/saved-views/observability-saved-views.d.ts +1 -0
  596. package/dist/domains/observability/saved-views/observability-saved-views.es.js +1 -0
  597. package/dist/domains/observability/saved-views/saved-views-provider.cjs.js +18 -0
  598. package/dist/domains/observability/saved-views/saved-views-provider.cjs.js.map +1 -0
  599. package/dist/domains/observability/saved-views/saved-views-provider.d.ts +1 -0
  600. package/dist/domains/observability/saved-views/saved-views-provider.es.js +17 -0
  601. package/dist/domains/observability/saved-views/saved-views-provider.es.js.map +1 -0
  602. package/dist/domains/observability/saved-views/saved-views-source.cjs.js +23 -0
  603. package/dist/domains/observability/saved-views/saved-views-source.cjs.js.map +1 -0
  604. package/dist/domains/observability/saved-views/saved-views-source.d.ts +1 -0
  605. package/dist/domains/observability/saved-views/saved-views-source.es.js +19 -0
  606. package/dist/domains/observability/saved-views/saved-views-source.es.js.map +1 -0
  607. package/dist/domains/observability/saved-views/use-hosted-saved-views.cjs.js +235 -0
  608. package/dist/domains/observability/saved-views/use-hosted-saved-views.cjs.js.map +1 -0
  609. package/dist/domains/observability/saved-views/use-hosted-saved-views.d.ts +1 -0
  610. package/dist/domains/observability/saved-views/use-hosted-saved-views.es.js +232 -0
  611. package/dist/domains/observability/saved-views/use-hosted-saved-views.es.js.map +1 -0
  612. package/dist/domains/observability/saved-views.cjs.js +7 -0
  613. package/dist/domains/observability/saved-views.d.ts +1 -0
  614. package/dist/domains/observability/saved-views.es.js +4 -0
  615. package/dist/domains/observability.cjs.js +6 -0
  616. package/dist/domains/observability.es.js +4 -1
  617. package/dist/domains/scores/components/span-scoring.cjs.js +1 -1
  618. package/dist/domains/scores/components/span-scoring.es.js +1 -1
  619. package/dist/domains/scores/components/trace-scores-list.cjs.js +1 -1
  620. package/dist/domains/scores/components/trace-scores-list.es.js +1 -1
  621. package/dist/domains/scores/components/trace-scores-tab.cjs.js +1 -1
  622. package/dist/domains/scores/components/trace-scores-tab.es.js +1 -1
  623. package/dist/domains/skills/skill-simple-form.cjs.js +1 -1
  624. package/dist/domains/skills/skill-simple-form.es.js +1 -1
  625. package/dist/domains/spans/components/spans-explorer-body.cjs.js +64 -18
  626. package/dist/domains/spans/components/spans-explorer-body.cjs.js.map +1 -1
  627. package/dist/domains/spans/components/spans-explorer-body.es.js +64 -18
  628. package/dist/domains/spans/components/spans-explorer-body.es.js.map +1 -1
  629. package/dist/domains/spans/components/spans-filter-bar.cjs.js +6 -5
  630. package/dist/domains/spans/components/spans-filter-bar.cjs.js.map +1 -1
  631. package/dist/domains/spans/components/spans-filter-bar.es.js +6 -5
  632. package/dist/domains/spans/components/spans-filter-bar.es.js.map +1 -1
  633. package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +15 -3
  634. package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js.map +1 -1
  635. package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +15 -3
  636. package/dist/domains/spans/hooks/use-spans-filter-bar.es.js.map +1 -1
  637. package/dist/domains/spans/span-filters.cjs.js +53 -14
  638. package/dist/domains/spans/span-filters.cjs.js.map +1 -1
  639. package/dist/domains/spans/span-filters.es.js +52 -15
  640. package/dist/domains/spans/span-filters.es.js.map +1 -1
  641. package/dist/domains/spans/span-list-row.cjs.js +6 -1
  642. package/dist/domains/spans/span-list-row.cjs.js.map +1 -1
  643. package/dist/domains/spans/span-list-row.es.js +6 -1
  644. package/dist/domains/spans/span-list-row.es.js.map +1 -1
  645. package/dist/domains/threads/components/threads-explorer-body.cjs.js +45 -12
  646. package/dist/domains/threads/components/threads-explorer-body.cjs.js.map +1 -1
  647. package/dist/domains/threads/components/threads-explorer-body.es.js +46 -12
  648. package/dist/domains/threads/components/threads-explorer-body.es.js.map +1 -1
  649. package/dist/domains/threads/components/threads-filter-bar.cjs.js +3 -3
  650. package/dist/domains/threads/components/threads-filter-bar.es.js +3 -3
  651. package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +14 -3
  652. package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js.map +1 -1
  653. package/dist/domains/threads/hooks/use-threads-filter-bar.es.js +14 -3
  654. package/dist/domains/threads/hooks/use-threads-filter-bar.es.js.map +1 -1
  655. package/dist/domains/threads/thread-filters.cjs.js +26 -13
  656. package/dist/domains/threads/thread-filters.cjs.js.map +1 -1
  657. package/dist/domains/threads/thread-filters.es.js +26 -13
  658. package/dist/domains/threads/thread-filters.es.js.map +1 -1
  659. package/dist/domains/threads/thread-list-row.cjs.js +2 -0
  660. package/dist/domains/threads/thread-list-row.cjs.js.map +1 -1
  661. package/dist/domains/threads/thread-list-row.es.js +2 -0
  662. package/dist/domains/threads/thread-list-row.es.js.map +1 -1
  663. package/dist/domains/traces/components/columns-menu/columns-menu.cjs.js +24 -19
  664. package/dist/domains/traces/components/columns-menu/columns-menu.cjs.js.map +1 -1
  665. package/dist/domains/traces/components/columns-menu/columns-menu.es.js +25 -20
  666. package/dist/domains/traces/components/columns-menu/columns-menu.es.js.map +1 -1
  667. package/dist/domains/traces/components/feedback-thread.cjs.js +1 -1
  668. package/dist/domains/traces/components/feedback-thread.es.js +1 -1
  669. package/dist/domains/traces/components/span-data-panel-view.cjs.js +12 -2
  670. package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
  671. package/dist/domains/traces/components/span-data-panel-view.es.js +12 -2
  672. package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
  673. package/dist/domains/traces/components/span-outcome.utils.cjs.js +1 -1
  674. package/dist/domains/traces/components/span-outcome.utils.es.js +1 -1
  675. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  676. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  677. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  678. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  679. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
  680. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
  681. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +3 -3
  682. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +3 -3
  683. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
  684. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
  685. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  686. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  687. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  688. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  689. package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +2 -2
  690. package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +2 -2
  691. package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +1 -1
  692. package/dist/domains/traces/components/span-payload/span-tools-section.es.js +1 -1
  693. package/dist/domains/traces/components/span-prompt-changes.cjs.js +1 -1
  694. package/dist/domains/traces/components/span-prompt-changes.es.js +1 -1
  695. package/dist/domains/traces/components/trace-columns-menu.cjs.js +2 -1
  696. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  697. package/dist/domains/traces/components/trace-columns-menu.es.js +2 -1
  698. package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
  699. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +9 -2
  700. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  701. package/dist/domains/traces/components/trace-data-panel-view.es.js +9 -2
  702. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  703. package/dist/domains/traces/components/trace-span-panel.cjs.js +2 -1
  704. package/dist/domains/traces/components/trace-span-panel.cjs.js.map +1 -1
  705. package/dist/domains/traces/components/trace-span-panel.es.js +2 -1
  706. package/dist/domains/traces/components/trace-span-panel.es.js.map +1 -1
  707. package/dist/domains/traces/components/trace-span-timeline-markers.cjs.js +120 -0
  708. package/dist/domains/traces/components/trace-span-timeline-markers.cjs.js.map +1 -0
  709. package/dist/domains/traces/components/trace-span-timeline-markers.d.ts +1 -0
  710. package/dist/domains/traces/components/trace-span-timeline-markers.es.js +119 -0
  711. package/dist/domains/traces/components/trace-span-timeline-markers.es.js.map +1 -0
  712. package/dist/domains/traces/components/trace-span-timeline.cjs.js +8 -5
  713. package/dist/domains/traces/components/trace-span-timeline.cjs.js.map +1 -1
  714. package/dist/domains/traces/components/trace-span-timeline.es.js +8 -5
  715. package/dist/domains/traces/components/trace-span-timeline.es.js.map +1 -1
  716. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +5 -5
  717. package/dist/domains/traces/components/trace-time-range-chip.cjs.js.map +1 -1
  718. package/dist/domains/traces/components/trace-time-range-chip.es.js +5 -5
  719. package/dist/domains/traces/components/trace-time-range-chip.es.js.map +1 -1
  720. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.cjs.js +15 -11
  721. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.cjs.js.map +1 -1
  722. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.es.js +15 -12
  723. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.es.js.map +1 -1
  724. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.cjs.js +4 -3
  725. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.cjs.js.map +1 -1
  726. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.es.js +4 -3
  727. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.es.js.map +1 -1
  728. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +5 -4
  729. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js.map +1 -1
  730. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +5 -4
  731. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js.map +1 -1
  732. package/dist/domains/traces/components/traces-explorer/traces-explorer-histogram.cjs.js +13 -5
  733. package/dist/domains/traces/components/traces-explorer/traces-explorer-histogram.cjs.js.map +1 -1
  734. package/dist/domains/traces/components/traces-explorer/traces-explorer-histogram.es.js +13 -5
  735. package/dist/domains/traces/components/traces-explorer/traces-explorer-histogram.es.js.map +1 -1
  736. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.cjs.js +5 -2
  737. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.cjs.js.map +1 -1
  738. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.es.js +5 -2
  739. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.es.js.map +1 -1
  740. package/dist/domains/traces/components/traces-explorer/traces-explorer-list.cjs.js +7 -11
  741. package/dist/domains/traces/components/traces-explorer/traces-explorer-list.cjs.js.map +1 -1
  742. package/dist/domains/traces/components/traces-explorer/traces-explorer-list.es.js +7 -11
  743. package/dist/domains/traces/components/traces-explorer/traces-explorer-list.es.js.map +1 -1
  744. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js +3 -1
  745. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js.map +1 -1
  746. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js +3 -1
  747. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js.map +1 -1
  748. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js +51 -5
  749. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js.map +1 -1
  750. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js +51 -5
  751. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js.map +1 -1
  752. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.cjs.js +20 -0
  753. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.cjs.js.map +1 -0
  754. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.d.ts +1 -0
  755. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.es.js +19 -0
  756. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.es.js.map +1 -0
  757. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +10 -4
  758. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js.map +1 -1
  759. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +10 -4
  760. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js.map +1 -1
  761. package/dist/domains/traces/components/traces-explorer.cjs.js +4 -1
  762. package/dist/domains/traces/components/traces-explorer.cjs.js.map +1 -1
  763. package/dist/domains/traces/components/traces-explorer.es.js +5 -3
  764. package/dist/domains/traces/components/traces-explorer.es.js.map +1 -1
  765. package/dist/domains/traces/components/traces-list-view-adapter.cjs.js +5 -1
  766. package/dist/domains/traces/components/traces-list-view-adapter.cjs.js.map +1 -1
  767. package/dist/domains/traces/components/traces-list-view-adapter.es.js +5 -1
  768. package/dist/domains/traces/components/traces-list-view-adapter.es.js.map +1 -1
  769. package/dist/domains/traces/components/traces-list-view.cjs.js +53 -18
  770. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  771. package/dist/domains/traces/components/traces-list-view.es.js +53 -18
  772. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  773. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -1
  774. package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -1
  775. package/dist/domains/traces/trace-filters.cjs.js +5 -1
  776. package/dist/domains/traces/trace-filters.es.js +1 -1
  777. package/dist/domains/traces/trace-list-columns.cjs.js +48 -9
  778. package/dist/domains/traces/trace-list-columns.cjs.js.map +1 -1
  779. package/dist/domains/traces/trace-list-columns.es.js +48 -9
  780. package/dist/domains/traces/trace-list-columns.es.js.map +1 -1
  781. package/dist/domains/traces/trace-query-filters.cjs.js +1 -1
  782. package/dist/domains/traces/trace-query-filters.es.js +1 -1
  783. package/dist/domains/traces/utils/timeline-markers.cjs.js +34 -0
  784. package/dist/domains/traces/utils/timeline-markers.cjs.js.map +1 -0
  785. package/dist/domains/traces/utils/timeline-markers.d.ts +1 -0
  786. package/dist/domains/traces/utils/timeline-markers.es.js +33 -0
  787. package/dist/domains/traces/utils/timeline-markers.es.js.map +1 -0
  788. package/dist/domains/traces.cjs.js +5 -1
  789. package/dist/domains/traces.es.js +2 -2
  790. package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
  791. package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
  792. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +1 -1
  793. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +1 -1
  794. package/dist/domains/workflows/workflow/workflow-graph.cjs.js +1 -1
  795. package/dist/domains/workflows/workflow/workflow-graph.es.js +1 -1
  796. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +1 -1
  797. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +1 -1
  798. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +1 -1
  799. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +1 -1
  800. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +1 -1
  801. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +1 -1
  802. package/dist/{filter-bar-chip-B3pgpngW.js → filter-bar-chip-7O02P9Vk.js} +27 -9
  803. package/dist/filter-bar-chip-7O02P9Vk.js.map +1 -0
  804. package/dist/{filter-bar-chip-CyTAmjt6.cjs → filter-bar-chip-BUyMf8XQ.cjs} +40 -22
  805. package/dist/filter-bar-chip-BUyMf8XQ.cjs.map +1 -0
  806. package/dist/layout/tabbed-container.cjs.js +1 -1
  807. package/dist/layout/tabbed-container.es.js +1 -1
  808. package/dist/lib/form/json-schema-to-zod-runtime.cjs.js +4 -4
  809. package/dist/lib/form/json-schema-to-zod-runtime.cjs.js.map +1 -1
  810. package/dist/lib/form/json-schema-to-zod-runtime.es.js +4 -4
  811. package/dist/lib/form/json-schema-to-zod-runtime.es.js.map +1 -1
  812. package/dist/lib/form/zod-provider.cjs.js +5 -1
  813. package/dist/lib/form/zod-provider.cjs.js.map +1 -1
  814. package/dist/lib/form/zod-provider.es.js +5 -1
  815. package/dist/lib/form/zod-provider.es.js.map +1 -1
  816. package/dist/observability-saved-views-Bo5kLN20.js +297 -0
  817. package/dist/observability-saved-views-Bo5kLN20.js.map +1 -0
  818. package/dist/observability-saved-views-CwCii7hh.cjs +302 -0
  819. package/dist/observability-saved-views-CwCii7hh.cjs.map +1 -0
  820. package/dist/primitives/chart-axes.cjs.js +44 -0
  821. package/dist/primitives/chart-axes.cjs.js.map +1 -1
  822. package/dist/primitives/chart-axes.es.js +43 -1
  823. package/dist/primitives/chart-axes.es.js.map +1 -1
  824. package/dist/primitives/chart-frame.cjs.js +5 -3
  825. package/dist/primitives/chart-frame.cjs.js.map +1 -1
  826. package/dist/primitives/chart-frame.es.js +6 -4
  827. package/dist/primitives/chart-frame.es.js.map +1 -1
  828. package/dist/primitives/chart-time-tick.cjs.js +15 -11
  829. package/dist/primitives/chart-time-tick.cjs.js.map +1 -1
  830. package/dist/primitives/chart-time-tick.es.js +16 -12
  831. package/dist/primitives/chart-time-tick.es.js.map +1 -1
  832. package/dist/saved-view-schema-DRJYELfK.cjs +71 -0
  833. package/dist/saved-view-schema-DRJYELfK.cjs.map +1 -0
  834. package/dist/saved-view-schema-eJXlRRel.js +54 -0
  835. package/dist/saved-view-schema-eJXlRRel.js.map +1 -0
  836. package/dist/{span-payload-primitives-D3OO0u6u.cjs → span-payload-primitives-B10Xxmx7.cjs} +4 -4
  837. package/dist/{span-payload-primitives-D3OO0u6u.cjs.map → span-payload-primitives-B10Xxmx7.cjs.map} +1 -1
  838. package/dist/{span-payload-primitives-DTV7eUY-.js → span-payload-primitives-Dyhbqaa7.js} +4 -4
  839. package/dist/{span-payload-primitives-DTV7eUY-.js.map → span-payload-primitives-Dyhbqaa7.js.map} +1 -1
  840. package/dist/src/domains/chat/activity/activity-stretch-line.d.ts +4 -2
  841. package/dist/src/domains/chat/activity/components/activity-fold.d.ts +5 -4
  842. package/dist/src/domains/chat/activity/components/use-fading-edge.d.ts +6 -0
  843. package/dist/src/domains/chat/activity/components/use-rolling-words.d.ts +7 -0
  844. package/dist/src/domains/chat/activity/index.d.ts +2 -1
  845. package/dist/src/domains/chat/activity/model/activity-members.d.ts +1 -0
  846. package/dist/src/domains/chat/activity/model/activity-words.d.ts +3 -0
  847. package/dist/src/domains/chat/messages/renderers/tool-part.d.ts +4 -0
  848. package/dist/src/domains/chat/messages/skill-message.d.ts +3 -1
  849. package/dist/src/domains/chat/tools/badges/mcp-task-chip.d.ts +14 -0
  850. package/dist/src/domains/chat/tools/badges/tool-badge.d.ts +5 -1
  851. package/dist/src/domains/chat/tools/badges/use-mcp-task-progress.d.ts +27 -0
  852. package/dist/src/domains/chat/tools/tool-card.d.ts +5 -1
  853. package/dist/src/domains/dashboards/components/dashboard-grid.d.ts +18 -0
  854. package/dist/src/domains/dashboards/components/dashboard-renderer.d.ts +19 -0
  855. package/dist/src/domains/dashboards/components/view-gate.d.ts +30 -0
  856. package/dist/src/domains/dashboards/components/widget-chrome.d.ts +7 -0
  857. package/dist/src/domains/dashboards/components/widget-controls.d.ts +8 -0
  858. package/dist/src/domains/dashboards/components/widget-error.d.ts +6 -0
  859. package/dist/src/domains/dashboards/hooks/use-dashboard-requests.d.ts +10 -0
  860. package/dist/src/domains/dashboards/hooks/use-scorers.d.ts +66 -0
  861. package/dist/src/domains/dashboards/hooks/use-widget-views.d.ts +18 -0
  862. package/dist/src/domains/dashboards/index.d.ts +19 -0
  863. package/dist/src/domains/dashboards/kinds/index.d.ts +7 -0
  864. package/dist/src/domains/dashboards/kinds/kpis/index.d.ts +13 -0
  865. package/dist/src/domains/dashboards/kinds/kpis/kpis-widget.d.ts +3 -0
  866. package/dist/src/domains/dashboards/kinds/kpis/options.d.ts +35 -0
  867. package/dist/src/domains/dashboards/kinds/scores/index.d.ts +8 -0
  868. package/dist/src/domains/dashboards/kinds/scores/options.d.ts +13 -0
  869. package/dist/src/domains/dashboards/kinds/scores/scores-widget.d.ts +3 -0
  870. package/dist/src/domains/dashboards/kinds/table/index.d.ts +23 -0
  871. package/dist/src/domains/dashboards/kinds/table/table-cells.d.ts +26 -0
  872. package/dist/src/domains/dashboards/kinds/table/table-columns.d.ts +7 -0
  873. package/dist/src/domains/dashboards/kinds/table/table-frame.d.ts +13 -0
  874. package/dist/src/domains/dashboards/kinds/table/table-tabs.d.ts +10 -0
  875. package/dist/src/domains/dashboards/kinds/table/table-view.d.ts +5 -0
  876. package/dist/src/domains/dashboards/kinds/table/table-widget.d.ts +7 -0
  877. package/dist/src/domains/dashboards/kinds/timeseries/index.d.ts +30 -0
  878. package/dist/src/domains/dashboards/kinds/timeseries/timeseries-widget.d.ts +5 -0
  879. package/dist/src/domains/dashboards/lib/answers.d.ts +43 -0
  880. package/dist/src/domains/dashboards/lib/chrome.d.ts +14 -0
  881. package/dist/src/domains/dashboards/lib/definition.d.ts +27 -0
  882. package/dist/src/domains/dashboards/lib/filters.d.ts +6 -0
  883. package/dist/src/domains/dashboards/lib/format.d.ts +7 -0
  884. package/dist/src/domains/dashboards/lib/prepare-widget.d.ts +26 -0
  885. package/dist/src/domains/dashboards/lib/requests.d.ts +95 -0
  886. package/dist/src/domains/dashboards/lib/scores.d.ts +35 -0
  887. package/dist/src/domains/dashboards/lib/table.d.ts +188 -0
  888. package/dist/src/domains/dashboards/lib/timeseries.d.ts +119 -0
  889. package/dist/src/domains/dashboards/lib/values.d.ts +86 -0
  890. package/dist/src/domains/dashboards/metrics-dashboard.d.ts +7 -0
  891. package/dist/src/domains/dashboards/widget-kind.d.ts +31 -0
  892. package/dist/src/domains/logs/components/index.d.ts +1 -0
  893. package/dist/src/domains/logs/components/logs-saved-views.d.ts +4 -0
  894. package/dist/src/domains/logs/log-filters.d.ts +8 -0
  895. package/dist/src/domains/metrics/components/agent-runs-card.d.ts +10 -3
  896. package/dist/src/domains/metrics/components/breakdown/breakdown-name.d.ts +13 -0
  897. package/dist/src/domains/metrics/components/breakdown/breakdown-not-priced.d.ts +2 -0
  898. package/dist/src/domains/metrics/components/breakdown/breakdown-row-mark.d.ts +17 -4
  899. package/dist/src/domains/metrics/components/breakdown/breakdown-trend-text.d.ts +9 -0
  900. package/dist/src/domains/metrics/components/card-action-buttons.d.ts +9 -0
  901. package/dist/src/domains/metrics/components/chart-card.d.ts +33 -21
  902. package/dist/src/domains/metrics/components/distinct-ids/distinct-ids-chart.d.ts +0 -1
  903. package/dist/src/domains/metrics/components/failure-rate-card.d.ts +5 -2
  904. package/dist/src/domains/metrics/components/index.d.ts +1 -2
  905. package/dist/src/domains/metrics/components/metrics-grid/metrics-grid.d.ts +4 -1
  906. package/dist/src/domains/metrics/components/trace-aggregate-card.d.ts +1 -1
  907. package/dist/src/domains/observability/components/observability-header-slot.d.ts +6 -0
  908. package/dist/src/domains/observability/components/observability-histogram.d.ts +1 -1
  909. package/dist/src/domains/observability/hooks/use-observability-list-filters.d.ts +21 -5
  910. package/dist/src/domains/observability/index.d.ts +2 -0
  911. package/dist/src/domains/observability/lib/zoom-memory.d.ts +19 -0
  912. package/dist/src/domains/observability/observability-list-url-state.d.ts +39 -0
  913. package/dist/src/domains/observability/saved-view-state.d.ts +46 -0
  914. package/dist/src/domains/observability/saved-views/index.d.ts +7 -0
  915. package/dist/src/domains/observability/saved-views/observability-saved-views.d.ts +22 -0
  916. package/dist/src/domains/observability/saved-views/saved-views-provider.d.ts +15 -0
  917. package/dist/src/domains/observability/saved-views/saved-views-source.d.ts +41 -0
  918. package/dist/src/domains/observability/saved-views/use-hosted-saved-views.d.ts +34 -0
  919. package/dist/src/domains/spans/components/spans-explorer-body.d.ts +4 -1
  920. package/dist/src/domains/spans/components/spans-filter-bar.d.ts +3 -1
  921. package/dist/src/domains/spans/hooks/use-spans-filter-bar.d.ts +1 -1
  922. package/dist/src/domains/spans/hooks/use-spans-list-source.d.ts +3 -0
  923. package/dist/src/domains/spans/span-filters.d.ts +16 -5
  924. package/dist/src/domains/threads/components/threads-explorer-body.d.ts +4 -1
  925. package/dist/src/domains/threads/thread-filters.d.ts +6 -5
  926. package/dist/src/domains/traces/components/columns-menu/columns-menu.d.ts +3 -3
  927. package/dist/src/domains/traces/components/trace-data-panel-view.d.ts +7 -1
  928. package/dist/src/domains/traces/components/trace-span-panel.d.ts +2 -1
  929. package/dist/src/domains/traces/components/trace-span-timeline-markers.d.ts +5 -0
  930. package/dist/src/domains/traces/components/trace-span-timeline.d.ts +6 -1
  931. package/dist/src/domains/traces/components/trace-time-range-chip.d.ts +3 -1
  932. package/dist/src/domains/traces/components/traces-explorer/index.d.ts +4 -1
  933. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-actions.d.ts +5 -5
  934. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-context.d.ts +11 -1
  935. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-saved-views.d.ts +7 -0
  936. package/dist/src/domains/traces/components/traces-list-view.d.ts +20 -7
  937. package/dist/src/domains/traces/hooks/use-traces-list-source.d.ts +5 -0
  938. package/dist/src/domains/traces/trace-filters.d.ts +27 -3
  939. package/dist/src/domains/traces/trace-list-columns.d.ts +16 -6
  940. package/dist/src/domains/traces/utils/timeline-markers.d.ts +25 -0
  941. package/dist/src/domains/workflows/context/use-persisted-workflow-run.d.ts +2 -0
  942. package/dist/src/domains/workflows/workflow/input/processor-input.d.ts +5 -535
  943. package/dist/src/domains/workflows/workflow/use-workflow-trigger.d.ts +1 -1
  944. package/dist/src/ds/components/AgentIndicator/agent-glyph.d.ts +4 -0
  945. package/dist/src/ds/components/AgentIndicator/agent-indicator.d.ts +8 -0
  946. package/dist/src/ds/components/AgentIndicator/animate.d.ts +5 -0
  947. package/dist/src/ds/components/AgentIndicator/index.d.ts +4 -0
  948. package/dist/src/ds/components/AgentIndicator/paint.d.ts +21 -0
  949. package/dist/src/ds/components/AgentIndicator/poses.d.ts +7 -0
  950. package/dist/src/ds/components/AgentIndicator/shapes.d.ts +41 -0
  951. package/dist/src/ds/components/Arrival/arrival.d.ts +11 -0
  952. package/dist/src/ds/components/Arrival/index.d.ts +1 -1
  953. package/dist/src/ds/components/DataList/TracesDataList/traces-data-list-cells.d.ts +12 -0
  954. package/dist/src/ds/components/DataList/TracesDataList/traces-data-list.d.ts +3 -1
  955. package/dist/src/ds/components/FilterBar/types.d.ts +2 -0
  956. package/dist/src/ds/components/MetricsCard/index.d.ts +1 -1
  957. package/dist/src/ds/components/MetricsCard/metrics-card-actions.d.ts +2 -1
  958. package/dist/src/ds/components/MetricsCard/metrics-card-headline.d.ts +13 -0
  959. package/dist/src/ds/components/MetricsCard/metrics-card-title-menu.d.ts +2 -0
  960. package/dist/src/ds/components/MetricsCard/metrics-card-title.d.ts +1 -3
  961. package/dist/src/ds/components/MetricsCard/metrics-card-toolbar.d.ts +3 -3
  962. package/dist/src/ds/components/MetricsCard/metrics-card-total.d.ts +11 -3
  963. package/dist/src/ds/components/MetricsCard/metrics-card.d.ts +2 -9
  964. package/dist/src/ds/components/MetricsCard/metrics-story-data.d.ts +0 -26
  965. package/dist/src/ds/components/MetricsKpiCard/metrics-kpi-card-root.d.ts +5 -2
  966. package/dist/src/ds/components/MetricsLineChart/metrics-line-chart-legend.d.ts +3 -4
  967. package/dist/src/ds/components/MetricsLineChart/metrics-line-chart.d.ts +2 -6
  968. package/dist/src/ds/components/SavedViews/saved-view-editor.d.ts +3 -1
  969. package/dist/src/ds/components/SavedViews/saved-view-picker.d.ts +21 -0
  970. package/dist/src/ds/components/SavedViews/use-saved-views.d.ts +6 -2
  971. package/dist/src/ds/components/ai/activity/activity.d.ts +12 -7
  972. package/dist/src/ds/components/ai/activity/index.d.ts +1 -0
  973. package/dist/src/ds/components/ai/activity/presets/signal-activity.d.ts +4 -1
  974. package/dist/src/ds/components/ai/activity/use-relative-paths.d.ts +3 -0
  975. package/dist/src/ds/components/ai/message-reveal/message-reveal.d.ts +2 -1
  976. package/dist/src/ds/components/ai/tool-call/tool-presentation.d.ts +4 -0
  977. package/dist/src/ds/primitives/chart-axes.d.ts +24 -0
  978. package/dist/src/ds/primitives/chart-frame.d.ts +2 -1
  979. package/dist/src/ds/primitives/chart-time-tick.d.ts +7 -4
  980. package/dist/src/lib/string.d.ts +1 -0
  981. package/dist/{string-OAgeMRQ5.js → string-CNKDIc_4.js} +6 -2
  982. package/dist/string-CNKDIc_4.js.map +1 -0
  983. package/dist/{string-CymY0aJ9.cjs → string-DdJJdCv2.cjs} +11 -1
  984. package/dist/string-DdJJdCv2.cjs.map +1 -0
  985. package/dist/style.css +67 -4
  986. package/dist/{tabbed-container-x2mfK07d.js → tabbed-container-BKUqfEKy.js} +2 -2
  987. package/dist/{tabbed-container-x2mfK07d.js.map → tabbed-container-BKUqfEKy.js.map} +1 -1
  988. package/dist/{tabbed-container-CBTb0LgE.cjs → tabbed-container-CFEImJOK.cjs} +2 -2
  989. package/dist/{tabbed-container-CBTb0LgE.cjs.map → tabbed-container-CFEImJOK.cjs.map} +1 -1
  990. package/dist/{tool-approval-6E73C0r6.cjs → tool-approval-BfjoSNOC.cjs} +4 -4
  991. package/dist/{tool-approval-6E73C0r6.cjs.map → tool-approval-BfjoSNOC.cjs.map} +1 -1
  992. package/dist/{tool-approval-BXlro6fV.js → tool-approval-FeuyUUcL.js} +4 -4
  993. package/dist/{tool-approval-BXlro6fV.js.map → tool-approval-FeuyUUcL.js.map} +1 -1
  994. package/dist/{tool-call-CItJ8KLA.js → tool-call-BxYXs9w0.js} +9 -7
  995. package/dist/{tool-call-CItJ8KLA.js.map → tool-call-BxYXs9w0.js.map} +1 -1
  996. package/dist/{tool-call-Dq9xF3WD.cjs → tool-call-CvilN9ti.cjs} +9 -7
  997. package/dist/{tool-call-Dq9xF3WD.cjs.map → tool-call-CvilN9ti.cjs.map} +1 -1
  998. package/dist/{tool-card-o5u4YCR0.cjs → tool-card-B7O8AsRl.cjs} +9 -5
  999. package/dist/tool-card-B7O8AsRl.cjs.map +1 -0
  1000. package/dist/{tool-card-Bd8weXze.js → tool-card-ELW898uw.js} +9 -5
  1001. package/dist/tool-card-ELW898uw.js.map +1 -0
  1002. package/dist/{tool-presentation-D2uUj1AB.cjs → tool-presentation-BLErsb7c.cjs} +38 -40
  1003. package/dist/tool-presentation-BLErsb7c.cjs.map +1 -0
  1004. package/dist/{tool-presentation-DKfIKLQy.js → tool-presentation-BSZYIWx2.js} +38 -40
  1005. package/dist/tool-presentation-BSZYIWx2.js.map +1 -0
  1006. package/dist/{trace-filters-C27yWcan.js → trace-filters-BJaebsxJ.js} +78 -11
  1007. package/dist/trace-filters-BJaebsxJ.js.map +1 -0
  1008. package/dist/{trace-filters-BpeBUjCb.cjs → trace-filters-BNEZ31HX.cjs} +100 -9
  1009. package/dist/trace-filters-BNEZ31HX.cjs.map +1 -0
  1010. package/dist/types-CP7wbYua.cjs.map +1 -1
  1011. package/dist/types-DiiL5mTO.js.map +1 -1
  1012. package/dist/utils/string.cjs.js +2 -1
  1013. package/dist/utils/string.es.js +1 -1
  1014. package/package.json +14 -14
  1015. package/dist/Arrival-Dm6Vgn78.cjs.map +0 -1
  1016. package/dist/Arrival-NpBOyV52.js.map +0 -1
  1017. package/dist/DataList-Cmk08jUV.cjs.map +0 -1
  1018. package/dist/DataList-Ve3omCXT.js.map +0 -1
  1019. package/dist/DateTimeRangePicker-ByMbLdom.js.map +0 -1
  1020. package/dist/DateTimeRangePicker-DGbH5WOn.cjs.map +0 -1
  1021. package/dist/FilterBar-Dk3QEuT6.js.map +0 -1
  1022. package/dist/FilterBar-gEvoWDXA.cjs.map +0 -1
  1023. package/dist/MetricsCard-C9GWgT58.js.map +0 -1
  1024. package/dist/MetricsCard-Dly_H3oX.cjs.map +0 -1
  1025. package/dist/MetricsLineChart-2m4LVL1N.cjs.map +0 -1
  1026. package/dist/MetricsLineChart-DKzuRU2q.js.map +0 -1
  1027. package/dist/MetricsStackedBarChart-DJB4aByt.js.map +0 -1
  1028. package/dist/MetricsStackedBarChart-NATtwA_W.cjs.map +0 -1
  1029. package/dist/activity-QyLJcBKc.cjs.map +0 -1
  1030. package/dist/activity-ihrl0JtH.js.map +0 -1
  1031. package/dist/combobox-C-E7_q4j.cjs.map +0 -1
  1032. package/dist/combobox-CDS2pBqz.js.map +0 -1
  1033. package/dist/domains/metrics/components/metrics-kpis.cjs.js +0 -106
  1034. package/dist/domains/metrics/components/metrics-kpis.cjs.js.map +0 -1
  1035. package/dist/domains/metrics/components/metrics-kpis.d.ts +0 -1
  1036. package/dist/domains/metrics/components/metrics-kpis.es.js +0 -105
  1037. package/dist/domains/metrics/components/metrics-kpis.es.js.map +0 -1
  1038. package/dist/filter-bar-chip-B3pgpngW.js.map +0 -1
  1039. package/dist/filter-bar-chip-CyTAmjt6.cjs.map +0 -1
  1040. package/dist/src/domains/metrics/components/metrics-kpis.d.ts +0 -2
  1041. package/dist/src/ds/components/MetricsCard/metrics-card-description.d.ts +0 -4
  1042. package/dist/src/ds/components/MetricsCard/metrics-card-summary.d.ts +0 -8
  1043. package/dist/src/ds/components/MetricsCard/metrics-card-tabs.d.ts +0 -16
  1044. package/dist/src/ds/components/MetricsCard/metrics-card-title-and-description.d.ts +0 -16
  1045. package/dist/string-CymY0aJ9.cjs.map +0 -1
  1046. package/dist/string-OAgeMRQ5.js.map +0 -1
  1047. package/dist/tool-card-Bd8weXze.js.map +0 -1
  1048. package/dist/tool-card-o5u4YCR0.cjs.map +0 -1
  1049. package/dist/tool-presentation-D2uUj1AB.cjs.map +0 -1
  1050. package/dist/tool-presentation-DKfIKLQy.js.map +0 -1
  1051. package/dist/trace-filters-BpeBUjCb.cjs.map +0 -1
  1052. package/dist/trace-filters-C27yWcan.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownRenderer-DKCDXaLy.js","names":[],"sources":["../src/ds/components/MarkdownRenderer/arriving.ts","../src/ds/components/MarkdownRenderer/blocks.ts","../src/ds/components/MarkdownRenderer/table-csv.ts","../src/ds/components/MarkdownRenderer/markdown-table.tsx","../src/ds/components/MarkdownRenderer/table-markdown.ts","../src/ds/components/MarkdownRenderer/use-settled.ts","../src/ds/components/MarkdownRenderer/markdown-renderer.tsx"],"sourcesContent":["import type { ExtraProps } from 'react-markdown';\n\nimport { ARRIVING_CLASS } from '@/ds/tokens';\n\nimport '@/ds/components/Arrival/arrival.css';\n\ntype MarkdownElement = NonNullable<ExtraProps['node']>;\ntype MarkdownChild = MarkdownElement['children'][number];\n\n/** Fades whole: a fence renders through `CodeBlock`, and inline code carries a background. */\nconst UNBROKEN = new Set(['pre', 'code']);\n\nconst wrap = (value: string, arriving: boolean): MarkdownChild => ({\n type: 'element',\n tagName: 'span',\n properties: arriving ? { className: [ARRIVING_CLASS] } : {},\n children: [{ type: 'text', value }],\n});\n\nfunction markArriving(node: MarkdownElement): void {\n const classes = node.properties.className;\n\n node.properties.className = Array.isArray(classes) ? [...classes, ARRIVING_CLASS] : [ARRIVING_CLASS];\n}\n\nfunction rebuild(nodes: MarkdownChild[], arriving: () => boolean): MarkdownChild[] {\n const out: MarkdownChild[] = [];\n\n for (const node of nodes) {\n if (node.type === 'text') {\n for (const piece of node.value.match(/\\S+|\\s+/g) ?? []) {\n if (/\\S/.test(piece)) out.push(wrap(piece, arriving()));\n else out.push({ type: 'text', value: piece });\n }\n\n continue;\n }\n\n out.push(node);\n\n if (node.type !== 'element') continue;\n\n if (!UNBROKEN.has(node.tagName)) node.children = rebuild(node.children, arriving);\n else if (arriving()) markArriving(node);\n }\n\n return out;\n}\n\n/**\n * Gives every word of a block an element of its own, and the entrance class to\n * those past the first `settled` — the words that were not on screen yet when\n * the reader joined this reply.\n *\n * Every word, not just the arriving ones: react-markdown parses afresh on each\n * landing and React matches the children it already mounted by position, so a\n * wrapper that came and went would land where a bare text node used to be and\n * remount half the paragraph, replaying entrances that had long finished.\n * Wrapping the lot keeps every position fixed — a new word only ever appends —\n * and a word never gains the class it did not mount with, so nothing replays.\n */\nexport function rehypeArriving(settled: number) {\n return function attach() {\n return (tree: { children: MarkdownChild[] }) => {\n let word = 0;\n\n tree.children = rebuild(tree.children, () => word++ >= settled);\n };\n };\n}\n","const FENCE_OPEN = /^ {0,3}(`{3,}|~{3,})/;\nconst FENCE_CLOSE = /^ {0,3}(`{3,}|~{3,})[ \\t]*$/;\nconst LIST_ITEM = /^ {0,3}(?:[-*+]|\\d{1,9}[.)])(?:[ \\t]|$)/;\nconst INDENTED = /^(?:\\t| {2,})/;\nconst DEFINITION = /^ {0,3}\\[[^\\]]+\\]:/;\n\nfunction fenceOpenedBy(line: string): string | undefined {\n return FENCE_OPEN.exec(line)?.[1];\n}\n\n// Both are runs of one character, so `startsWith` is \"same marker, at least as long\".\nfunction closesFence(line: string, marker: string): boolean {\n return FENCE_CLOSE.exec(line)?.[1]?.startsWith(marker) ?? false;\n}\n\nfunction startsBlock(line: string, inList: boolean): boolean {\n if (INDENTED.test(line)) return false;\n\n return !(inList && LIST_ITEM.test(line));\n}\n\n/**\n * Cuts markdown into top-level blocks so a growing reply re-parses its last\n * block instead of all of them. Rejoining the result returns the input, and\n * every block renders as it would have inside the whole.\n *\n * Each rule only ever merges: over-merging costs a re-parse, while cutting a\n * construct in two changes what it renders as. Link reference and footnote\n * definitions resolve across blank lines, which no line-level rule can see, so\n * reaching one outside a fence abandons the split for the whole text.\n */\nexport function splitBlocks(markdown: string): string[] {\n const lines = markdown.split('\\n');\n const starts = [0];\n let fence: string | undefined;\n let started = false;\n let broken = false;\n let inList = false;\n\n for (const [index, line] of lines.entries()) {\n if (fence) {\n if (closesFence(line, fence)) fence = undefined;\n continue;\n }\n\n if (line.trim() === '') {\n broken = started;\n continue;\n }\n\n if (DEFINITION.test(line)) return [markdown];\n\n if (broken && startsBlock(line, inList)) {\n starts.push(index);\n started = false;\n }\n\n if (!started) inList = LIST_ITEM.test(line);\n\n started = true;\n broken = false;\n fence = fenceOpenedBy(line);\n }\n\n return starts.map((start, position) => {\n const end = starts[position + 1];\n const block = lines.slice(start, end ?? lines.length).join('\\n');\n\n return end === undefined ? block : `${block}\\n`;\n });\n}\n","function spreadsheetCell(value: string): string {\n // Quoting alone does not stop spreadsheet apps from evaluating formulas.\n const numeric = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i.test(value.trim());\n const formula = /^[\\s\\uFEFF]*[=+\\-@=+-@]/u.test(value);\n const controlPrefix = /^[\\t\\r\\n]/.test(value);\n const safe = controlPrefix || (formula && !numeric) ? `'${value}` : value;\n return `\"${safe.replaceAll('\"', '\"\"')}\"`;\n}\n\nexport function tableToCsv(rows: string[][]): string {\n return rows.map(row => row.map(spreadsheetCell).join(',')).join('\\r\\n');\n}\n\nexport function downloadTableCsv(csv: string): void {\n const blob = new Blob(['\\uFEFF', csv], { type: 'text/csv;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = 'table.csv';\n document.body.appendChild(anchor);\n anchor.click();\n anchor.remove();\n URL.revokeObjectURL(url);\n}\n","import { CheckIcon, ChevronDownIcon, CopyIcon, DownloadIcon } from 'lucide-react';\nimport type { ComponentProps } from 'react';\nimport type { ExtraProps } from 'react-markdown';\nimport { downloadTableCsv } from './table-csv';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { useCopyToClipboard } from '@/hooks/use-copy-to-clipboard';\n\nexport function MarkdownTable({ node, children }: ComponentProps<'table'> & ExtraProps) {\n const markdown = node?.properties.tableMarkdown;\n const csv = node?.properties.tableCsv;\n const { isCopied, copyToClipboard } = useCopyToClipboard({ copyMessage: 'Copied table markdown' });\n\n return (\n <div className=\"my-3 w-fit max-w-full min-w-0\">\n <div className=\"flex justify-end\">\n <ButtonsGroup size=\"sm\" aria-label=\"Table actions\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n disabled={typeof markdown !== 'string'}\n onClick={() => {\n if (typeof markdown === 'string') copyToClipboard(markdown);\n }}\n aria-label=\"Copy table as markdown\"\n >\n {isCopied ? <CheckIcon /> : <CopyIcon />}\n {isCopied ? 'Copied!' : 'Copy table as markdown'}\n </Button>\n <DropdownMenu>\n <DropdownMenu.Trigger\n disabled={typeof csv !== 'string'}\n render={\n <Button type=\"button\" size=\"icon-sm\" variant=\"ghost\" aria-label=\"More table options\">\n <ChevronDownIcon />\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\" size=\"sm\" className=\"w-max min-w-0\">\n <DropdownMenu.Item\n size=\"sm\"\n onClick={() => {\n if (typeof csv === 'string') downloadTableCsv(csv);\n }}\n >\n <DownloadIcon />\n Download CSV\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n </ButtonsGroup>\n </div>\n <div className=\"max-w-full overflow-x-auto\">\n <table className=\"table min-w-full\">{children}</table>\n </div>\n </div>\n );\n}\n","import type { Definition, FootnoteDefinition, Nodes, Root, Table } from 'mdast';\nimport { gfmToMarkdown } from 'mdast-util-gfm';\nimport { toMarkdown } from 'mdast-util-to-markdown';\nimport { tableToCsv } from './table-csv';\n\nfunction cellText(node: Nodes): string {\n if (node.type === 'footnoteReference') return `[^${node.label ?? node.identifier}]`;\n if ('value' in node) return node.value;\n if (node.type === 'image' || node.type === 'imageReference') return node.alt ?? '';\n return 'children' in node ? node.children.map(cellText).join('') : '';\n}\n\nfunction walk(node: Nodes, visit: (node: Nodes) => void): void {\n visit(node);\n if ('children' in node) node.children.forEach(child => walk(child, visit));\n}\n\nconst SERIALIZE_OPTIONS = { extensions: [gfmToMarkdown()] };\n\n/** Capture table exports before rehype replaces text with animation spans. */\nexport function remarkTableMarkdown() {\n return (tree: Root, file: { value: unknown }) => {\n const source = String(file.value);\n const definitions = new Map<string, Definition | FootnoteDefinition>();\n const tables: Table[] = [];\n walk(tree, node => {\n if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n const key = `${node.type}:${node.identifier}`;\n if (!definitions.has(key)) definitions.set(key, node);\n }\n if (node.type === 'table') tables.push(node);\n });\n\n const lines = source.split(/\\r\\n|\\r|\\n/);\n for (const table of tables) {\n const header = table.children[0];\n if (!header?.position) continue;\n const rows = table.children.map(row => {\n const start = row.position?.start.offset;\n const end = row.position?.end.offset;\n return start === undefined || end === undefined ? undefined : source.slice(start, end);\n });\n // Only offer exports when the parser supplied the original row locations.\n if (!rows.every(row => row !== undefined)) continue;\n // Row positions exclude list/blockquote prefixes. The delimiter has no AST node.\n const delimiter = lines[header.position.start.line]?.replace(/^[\\t >]*/, '');\n if (delimiter === undefined) continue;\n const markdown = [rows[0], delimiter, ...rows.slice(1)];\n const used = new Set<string>();\n const collectReference = (node: Nodes) => {\n if (node.type === 'linkReference' || node.type === 'imageReference') {\n used.add(`definition:${node.identifier}`);\n } else if (node.type === 'footnoteReference') {\n used.add(`footnoteDefinition:${node.identifier}`);\n }\n };\n walk(table, collectReference);\n // Visiting appended definitions also collects links/footnotes they depend on.\n // The set prevents duplicates and cycles, including self-referencing footnotes.\n for (const key of used) {\n const definition = definitions.get(key);\n if (!definition) continue;\n markdown.push('', toMarkdown(definition, SERIALIZE_OPTIONS).trimEnd());\n walk(definition, collectReference);\n }\n const cells = table.children.map(row =>\n Array.from({ length: header.children.length }, (_, index) => {\n const cell = row.children[index];\n return cell ? cellText(cell) : '';\n }),\n );\n table.data = {\n ...table.data,\n hProperties: {\n ...table.data?.hProperties,\n tableMarkdown: markdown.join('\\n'),\n tableCsv: tableToCsv(cells),\n },\n };\n }\n };\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport { useWatched } from '@/ds/components/Arrival';\nimport { ARRIVING_MS } from '@/ds/tokens';\n\ninterface Landing {\n words: number;\n at: number;\n}\n\n/**\n * How many of a reply's words have been on screen long enough that their entrance is over.\n *\n * The entrance plays on whatever mounts carrying the class, so it replays every time a\n * word's element is rebuilt — and markdown rebuilds a growing tail constantly: a `-`\n * turns a paragraph into a list item, a closing `**` splits it around a `<strong>`, the\n * stream ends and the mend comes off. Each of those swaps the element a settled word\n * lives in, which is what makes a word already read fade in again.\n *\n * Ageing them out is the whole answer: a word carries the class only while it is new,\n * so however often the tail is rebuilt, only what is genuinely arriving animates.\n *\n * What counts as new at mount is not this hook's call. A reply the reader was handed\n * is already there, and a block that mounts complete — a card's output, an expanded\n * body — enters with its container. Only a passage born streaming under the reader's\n * eyes is new from its first word: the reveal often lands several words in its first\n * commit, and they enter like every word after them.\n */\nexport function useSettledWords(words: number, streaming: boolean): number {\n const watched = useWatched();\n const [settled, setSettled] = useState(() => (watched && streaming ? 0 : words));\n const landings = useRef<Landing[]>([]);\n const recorded = useRef(settled);\n\n useEffect(() => {\n if (recorded.current !== words) {\n landings.current.push({ words, at: performance.now() });\n recorded.current = words;\n }\n\n const waiting = landings.current[0];\n if (!waiting) return;\n\n const timer = setTimeout(\n () => {\n landings.current.shift();\n setSettled(waiting.words);\n },\n Math.max(0, waiting.at + ARRIVING_MS - performance.now()),\n );\n\n return () => clearTimeout(timer);\n }, [settled, words]);\n\n // A shorter reply replacing the one on screen settles at once: nothing of it is new.\n return Math.min(settled, words);\n}\n","import { memo, useMemo } from 'react';\nimport type { MouseEvent, MouseEventHandler, ReactNode } from 'react';\nimport Markdown from 'react-markdown';\nimport type { Components, ExtraProps, Options } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remend from 'remend';\n\nimport { rehypeArriving } from './arriving';\nimport { splitBlocks } from './blocks';\nimport { MarkdownTable } from './markdown-table';\nimport { remarkTableMarkdown } from './table-markdown';\nimport { useSettledWords } from './use-settled';\nimport { CodeBlock } from '@/ds/components/CodeBlock';\nimport { cn } from '@/lib/utils';\n\nimport './markdown-renderer.css';\n\nexport type MarkdownExternalLinkTarget = 'tab' | 'window';\n\nexport interface MarkdownRendererProps {\n children: string;\n className?: string;\n externalLinkTarget?: MarkdownExternalLinkTarget;\n /** The text is a prefix of one still being written: close the markers the stream has not reached. */\n streaming?: boolean;\n /** Opt in to table copy/download controls; disabled while this text is streaming. */\n tableActions?: boolean;\n}\n\n/**\n * Renders a markdown string. Agent output can carry attacker-influenced text\n * (file contents, tool output, web pages): react-markdown escapes raw HTML and\n * drops dangerous link schemes, so nothing here reaches the DOM as markup.\n *\n * react-markdown re-parses on every render, and a streaming reply re-renders\n * its whole transcript on every delta. Memoizing spares the settled messages;\n * rendering block by block — streaming or not — spares every block of the live\n * one but the last, and lets a reply settle without remounting what is already\n * on screen.\n *\n * The text is drawn as given: pacing a stream is `useRevealedText`, and belongs to\n * whoever owns the whole of what is being laid down — a reply is prose, tool rows\n * and cards, and they have to arrive in the order they were written. Only what\n * lands after the reader joined plays an entrance, and only while it is still new:\n * a reply opened part-written is already there, and fading in what someone is\n * halfway through reading would be both a lie and a screenful of animations at\n * once.\n */\nexport const MarkdownRenderer = memo(function MarkdownRenderer({\n children,\n className,\n externalLinkTarget = 'tab',\n streaming = false,\n tableActions = false,\n}: MarkdownRendererProps) {\n const shown = decodeEscapedNewlines(children);\n const blocks = useMemo(() => splitBlocks(shown), [shown]);\n const last = blocks.length - 1;\n const components = (tableActions ? TABLE_COMPONENTS : DEFAULT_COMPONENTS)[externalLinkTarget];\n\n const spans = wordSpans(blocks);\n const settled = useSettledWords(spans.at(-1)?.end ?? 0, streaming);\n\n // A block whose words have all finished their entrance has nothing left to play,\n // which is what `undefined` says: leave it as plain text, no spans at all.\n const settledWords = (span: WordSpan | undefined): number | undefined =>\n !span || settled >= span.end ? undefined : Math.max(0, settled - span.start);\n\n const tail = blocks[last] ?? '';\n const mended = useMemo(() => (streaming ? remend(tail, REMEND_OPTIONS) : tail), [streaming, tail]);\n\n return (\n <div className={cn('mastra-markdown', className)}>\n {blocks.map((block, index) => (\n <MarkdownBlock\n key={index}\n content={index === last ? mended : block}\n settledWords={settledWords(spans[index])}\n components={components}\n streaming={streaming}\n tableActions={tableActions}\n />\n ))}\n </div>\n );\n});\n\n/** Keyed by position at the call site: a content key remounts on every character. */\nconst MarkdownBlock = memo(function MarkdownBlock({\n components,\n content,\n settledWords,\n streaming,\n tableActions,\n}: {\n components: Components;\n content: string;\n settledWords?: number;\n streaming: boolean;\n tableActions: boolean;\n}) {\n const rehypePlugins = useMemo(\n () => (settledWords === undefined ? SETTLED : [rehypeArriving(settledWords)]),\n [settledWords],\n );\n\n return (\n <Markdown\n remarkPlugins={tableActions && !streaming ? COPYABLE_REMARK_PLUGINS : REMARK_PLUGINS}\n rehypePlugins={rehypePlugins}\n components={components}\n >\n {content}\n </Markdown>\n );\n});\n\nconst SETTLED: Options['rehypePlugins'] = [];\n\ninterface WordSpan {\n start: number;\n end: number;\n}\n\n/**\n * Where each block's words fall in the reply's own count, so one settled count covers\n * them all. Counting the source counts its markers too, so the boundary only ever errs\n * towards leaving a word unanimated.\n */\nfunction wordSpans(blocks: string[]): WordSpan[] {\n let read = 0;\n\n return blocks.map(block => {\n const span = { start: read, end: read + countWords(block) };\n read = span.end;\n\n return span;\n });\n}\n\nfunction countWords(text: string): number {\n return text.match(/\\S+/g)?.length ?? 0;\n}\n\n// Agent networks emit their text with literal `\\n`. Only unescape when the text\n// has no real newline, otherwise a `\"a\\nb\"` inside a code fence gets shredded.\nfunction decodeEscapedNewlines(text: string): string {\n return text.includes('\\n') ? text : text.replace(/\\\\n/g, '\\n');\n}\n\ntype MarkdownNode = NonNullable<ExtraProps['node']>;\n\nfunction languageOf(node: MarkdownNode): string | undefined {\n const classNames = node.properties.className;\n if (!Array.isArray(classNames)) return undefined;\n\n const language = classNames.find(entry => typeof entry === 'string' && entry.startsWith('language-'));\n return typeof language === 'string' ? language.slice('language-'.length) : undefined;\n}\n\nfunction fencedCode(node: MarkdownNode | undefined): { code: string; language?: string } | undefined {\n const child = node?.children.find(entry => entry.type === 'element' && entry.tagName === 'code');\n if (child?.type !== 'element') return undefined;\n\n const code = child.children.map(entry => (entry.type === 'text' ? entry.value : '')).join('');\n return { code: code.replace(/\\n$/, ''), language: languageOf(child) };\n}\n\nfunction MarkdownCodeBlock({\n node,\n children,\n className,\n}: {\n node?: MarkdownNode;\n children?: ReactNode;\n className?: string;\n}) {\n const fenced = fencedCode(node);\n if (!fenced) return <pre className={className}>{children}</pre>;\n\n return (\n <CodeBlock\n code={fenced.code}\n lang={fenced.language}\n overflow=\"scroll\"\n className={cn('my-3 bg-sidebar', className)}\n copyMessage=\"Copied code to clipboard\"\n />\n );\n}\n\nconst POPUP_WINDOW_FEATURES = 'popup=yes,width=720,height=800,resizable=yes,scrollbars=yes';\n\nfunction isPlainLeftClick(event: MouseEvent): boolean {\n return event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;\n}\n\nfunction markdownLink(externalLinkTarget: MarkdownExternalLinkTarget): NonNullable<Components['a']> {\n return function MarkdownLink({ href, title, children }) {\n const isExternal = /^https?:\\/\\//i.test(href ?? '');\n\n const openInPopup: MouseEventHandler<HTMLAnchorElement> = event => {\n if (!isExternal || externalLinkTarget !== 'window' || !isPlainLeftClick(event)) return;\n\n const popup = window.open(href, '_blank', POPUP_WINDOW_FEATURES);\n if (!popup) return;\n\n popup.opener = null;\n event.preventDefault();\n };\n\n return (\n <a\n href={href}\n title={title}\n onClick={openInPopup}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n >\n {children}\n </a>\n );\n };\n}\n\nconst REMARK_PLUGINS = [remarkGfm];\nconst COPYABLE_REMARK_PLUGINS = [remarkGfm, remarkTableMarkdown];\n\n// Links stay text until their URL lands: remend's placeholder href would render\n// a live anchor to nowhere. No math is rendered here, so pairing `$$` would only\n// turn one literal into another.\nconst REMEND_OPTIONS = { katex: false, linkMode: 'text-only' } as const;\n\n// Elements are listed one by one: react-markdown also passes its `node`, which\n// React would forward to the DOM as a stray attribute. Everything else is\n// styled from markdown-renderer.css.\nconst COMPONENTS: Components = {\n pre: MarkdownCodeBlock,\n a: markdownLink('tab'),\n};\n\nconst WINDOW_COMPONENTS: Components = {\n ...COMPONENTS,\n a: markdownLink('window'),\n};\n\nconst DEFAULT_COMPONENTS = { tab: COMPONENTS, window: WINDOW_COMPONENTS };\nconst TABLE_COMPONENTS = {\n tab: { ...COMPONENTS, table: MarkdownTable },\n window: { ...WINDOW_COMPONENTS, table: MarkdownTable },\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAUA,IAAM,2BAAW,IAAI,IAAI,CAAC,OAAO,MAAM,CAAC;AAExC,IAAM,QAAQ,OAAe,cAAsC;CACjE,MAAM;CACN,SAAS;CACT,YAAY,WAAW,EAAE,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC;CAC1D,UAAU,CAAC;EAAE,MAAM;EAAQ;CAAM,CAAC;AACpC;AAEA,SAAS,aAAa,MAA6B;CACjD,MAAM,UAAU,KAAK,WAAW;CAEhC,KAAK,WAAW,YAAY,MAAM,QAAQ,OAAO,IAAI,CAAC,GAAG,SAAS,cAAc,IAAI,CAAC,cAAc;AACrG;AAEA,SAAS,QAAQ,OAAwB,UAA0C;CACjF,MAAM,MAAuB,CAAC;CAE9B,KAAK,MAAM,QAAQ,OAAO;EACxB,IAAI,KAAK,SAAS,QAAQ;GACxB,KAAK,MAAM,SAAS,KAAK,MAAM,MAAM,UAAU,KAAK,CAAC,GACnD,IAAI,KAAK,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,OAAO,SAAS,CAAC,CAAC;QACjD,IAAI,KAAK;IAAE,MAAM;IAAQ,OAAO;GAAM,CAAC;GAG9C;EACF;EAEA,IAAI,KAAK,IAAI;EAEb,IAAI,KAAK,SAAS,WAAW;EAE7B,IAAI,CAAC,SAAS,IAAI,KAAK,OAAO,GAAG,KAAK,WAAW,QAAQ,KAAK,UAAU,QAAQ;OAC3E,IAAI,SAAS,GAAG,aAAa,IAAI;CACxC;CAEA,OAAO;AACT;;;;;;;;;;;;;AAcA,SAAgB,eAAe,SAAiB;CAC9C,OAAO,SAAS,SAAS;EACvB,QAAQ,SAAwC;GAC9C,IAAI,OAAO;GAEX,KAAK,WAAW,QAAQ,KAAK,gBAAgB,UAAU,OAAO;EAChE;CACF;AACF;;ACrEA,IAAM,aAAa;AACnB,IAAM,cAAc;AACpB,IAAM,YAAY;AAClB,IAAM,WAAW;AACjB,IAAM,aAAa;AAEnB,SAAS,cAAc,MAAkC;CACvD,OAAO,WAAW,KAAK,IAAI,CAAC,GAAG;AACjC;AAGA,SAAS,YAAY,MAAc,QAAyB;CAC1D,OAAO,YAAY,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,WAAW,MAAM,KAAK;AAC5D;AAEA,SAAS,YAAY,MAAc,QAA0B;CAC3D,IAAI,SAAS,KAAK,IAAI,GAAG,OAAO;CAEhC,OAAO,EAAE,UAAU,UAAU,KAAK,IAAI;AACxC;;;;;;;;;;;AAYA,SAAgB,YAAY,UAA4B;CACtD,MAAM,QAAQ,SAAS,MAAM,IAAI;CACjC,MAAM,SAAS,CAAC,CAAC;CACjB,IAAI;CACJ,IAAI,UAAU;CACd,IAAI,SAAS;CACb,IAAI,SAAS;CAEb,KAAK,MAAM,CAAC,OAAO,SAAS,MAAM,QAAQ,GAAG;EAC3C,IAAI,OAAO;GACT,IAAI,YAAY,MAAM,KAAK,GAAG,QAAQ,KAAA;GACtC;EACF;EAEA,IAAI,KAAK,KAAK,MAAM,IAAI;GACtB,SAAS;GACT;EACF;EAEA,IAAI,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,QAAQ;EAE3C,IAAI,UAAU,YAAY,MAAM,MAAM,GAAG;GACvC,OAAO,KAAK,KAAK;GACjB,UAAU;EACZ;EAEA,IAAI,CAAC,SAAS,SAAS,UAAU,KAAK,IAAI;EAE1C,UAAU;EACV,SAAS;EACT,QAAQ,cAAc,IAAI;CAC5B;CAEA,OAAO,OAAO,KAAK,OAAO,aAAa;EACrC,MAAM,MAAM,OAAO,WAAW;EAC9B,MAAM,QAAQ,MAAM,MAAM,OAAO,OAAO,MAAM,MAAM,CAAC,CAAC,KAAK,IAAI;EAE/D,OAAO,QAAQ,KAAA,IAAY,QAAQ,GAAG,MAAM;CAC9C,CAAC;AACH;;ACtEA,SAAS,gBAAgB,OAAuB;CAE9C,MAAM,UAAU,gDAAgD,KAAK,MAAM,KAAK,CAAC;CACjF,MAAM,UAAU,2BAA2B,KAAK,KAAK;CAGrD,OAAO,KAFe,YAAY,KAAK,KAC1B,KAAkB,WAAW,CAAC,UAAW,IAAI,UAAU,MAAA,CACpD,WAAW,MAAK,MAAI,EAAE;AACxC;AAEA,SAAgB,WAAW,MAA0B;CACnD,OAAO,KAAK,KAAI,QAAO,IAAI,IAAI,eAAe,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM;AACxE;AAEA,SAAgB,iBAAiB,KAAmB;CAClD,MAAM,OAAO,IAAI,KAAK,CAAC,KAAU,GAAG,GAAG,EAAE,MAAM,yBAAyB,CAAC;CACzE,MAAM,MAAM,IAAI,gBAAgB,IAAI;CACpC,MAAM,SAAS,SAAS,cAAc,GAAG;CACzC,OAAO,OAAO;CACd,OAAO,WAAW;CAClB,SAAS,KAAK,YAAY,MAAM;CAChC,OAAO,MAAM;CACb,OAAO,OAAO;CACd,IAAI,gBAAgB,GAAG;AACzB;;ACdA,SAAgB,cAAc,EAAE,MAAM,YAAkD;CACtF,MAAM,WAAW,MAAM,WAAW;CAClC,MAAM,MAAM,MAAM,WAAW;CAC7B,MAAM,EAAE,UAAU,oBAAoB,mBAAmB,EAAE,aAAa,wBAAwB,CAAC;CAEjG,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,oBAAC,OAAD;GAAK,WAAU;GACb,UAAA,qBAAC,cAAD;IAAc,MAAK;IAAK,cAAW;IAAnC,UAAA,CACE,qBAAC,QAAD;KACE,MAAK;KACL,SAAQ;KACR,UAAU,OAAO,aAAa;KAC9B,eAAe;MACb,IAAI,OAAO,aAAa,UAAU,gBAAgB,QAAQ;KAC5D;KACA,cAAW;KAPb,UAAA,CASG,WAAW,oBAAC,WAAD,CAAY,CAAA,IAAI,oBAAC,UAAD,CAAW,CAAA,GACtC,WAAW,YAAY,wBAClB;IACR,CAAA,GAAA,qBAAC,cAAD,EAAA,UAAA,CACE,oBAAC,aAAa,SAAd;KACE,UAAU,OAAO,QAAQ;KACzB,QACE,oBAAC,QAAD;MAAQ,MAAK;MAAS,MAAK;MAAU,SAAQ;MAAQ,cAAW;MAC9D,UAAA,oBAAC,iBAAD,CAAkB,CAAA;KACZ,CAAA;IAEX,CAAA,GACD,oBAAC,aAAa,SAAd;KAAsB,OAAM;KAAM,MAAK;KAAK,WAAU;KACpD,UAAA,qBAAC,aAAa,MAAd;MACE,MAAK;MACL,eAAe;OACb,IAAI,OAAO,QAAQ,UAAU,iBAAiB,GAAG;MACnD;MAJF,UAAA,CAME,oBAAC,cAAD,CAAe,CAAA,GAAC,cAEC;;IACC,CAAA,CACV,EAAA,CAAA,CACF;;EACX,CAAA,GACL,oBAAC,OAAD;GAAK,WAAU;GACb,UAAA,oBAAC,SAAD;IAAO,WAAU;IAAoB;GAAgB,CAAA;EAClD,CAAA,CACF;;AAET;;ACrDA,SAAS,SAAS,MAAqB;CACrC,IAAI,KAAK,SAAS,qBAAqB,OAAO,KAAK,KAAK,SAAS,KAAK,WAAW;CACjF,IAAI,WAAW,MAAM,OAAO,KAAK;CACjC,IAAI,KAAK,SAAS,WAAW,KAAK,SAAS,kBAAkB,OAAO,KAAK,OAAO;CAChF,OAAO,cAAc,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,IAAI;AACrE;AAEA,SAAS,KAAK,MAAa,OAAoC;CAC7D,MAAM,IAAI;CACV,IAAI,cAAc,MAAM,KAAK,SAAS,SAAQ,UAAS,KAAK,OAAO,KAAK,CAAC;AAC3E;AAEA,IAAM,oBAAoB,EAAE,YAAY,CAAC,cAAc,CAAC,EAAE;;AAG1D,SAAgB,sBAAsB;CACpC,QAAQ,MAAY,SAA6B;EAC/C,MAAM,SAAS,OAAO,KAAK,KAAK;EAChC,MAAM,8BAAc,IAAI,IAA6C;EACrE,MAAM,SAAkB,CAAC;EACzB,KAAK,OAAM,SAAQ;GACjB,IAAI,KAAK,SAAS,gBAAgB,KAAK,SAAS,sBAAsB;IACpE,MAAM,MAAM,GAAG,KAAK,KAAK,GAAG,KAAK;IACjC,IAAI,CAAC,YAAY,IAAI,GAAG,GAAG,YAAY,IAAI,KAAK,IAAI;GACtD;GACA,IAAI,KAAK,SAAS,SAAS,OAAO,KAAK,IAAI;EAC7C,CAAC;EAED,MAAM,QAAQ,OAAO,MAAM,YAAY;EACvC,KAAK,MAAM,SAAS,QAAQ;GAC1B,MAAM,SAAS,MAAM,SAAS;GAC9B,IAAI,CAAC,QAAQ,UAAU;GACvB,MAAM,OAAO,MAAM,SAAS,KAAI,QAAO;IACrC,MAAM,QAAQ,IAAI,UAAU,MAAM;IAClC,MAAM,MAAM,IAAI,UAAU,IAAI;IAC9B,OAAO,UAAU,KAAA,KAAa,QAAQ,KAAA,IAAY,KAAA,IAAY,OAAO,MAAM,OAAO,GAAG;GACvF,CAAC;GAED,IAAI,CAAC,KAAK,OAAM,QAAO,QAAQ,KAAA,CAAS,GAAG;GAE3C,MAAM,YAAY,MAAM,OAAO,SAAS,MAAM,KAAK,EAAE,QAAQ,YAAY,EAAE;GAC3E,IAAI,cAAc,KAAA,GAAW;GAC7B,MAAM,WAAW;IAAC,KAAK;IAAI;IAAW,GAAG,KAAK,MAAM,CAAC;GAAC;GACtD,MAAM,uBAAO,IAAI,IAAY;GAC7B,MAAM,oBAAoB,SAAgB;IACxC,IAAI,KAAK,SAAS,mBAAmB,KAAK,SAAS,kBACjD,KAAK,IAAI,cAAc,KAAK,YAAY;SACnC,IAAI,KAAK,SAAS,qBACvB,KAAK,IAAI,sBAAsB,KAAK,YAAY;GAEpD;GACA,KAAK,OAAO,gBAAgB;GAG5B,KAAK,MAAM,OAAO,MAAM;IACtB,MAAM,aAAa,YAAY,IAAI,GAAG;IACtC,IAAI,CAAC,YAAY;IACjB,SAAS,KAAK,IAAI,WAAW,YAAY,iBAAiB,CAAC,CAAC,QAAQ,CAAC;IACrE,KAAK,YAAY,gBAAgB;GACnC;GACA,MAAM,QAAQ,MAAM,SAAS,KAAI,QAC/B,MAAM,KAAK,EAAE,QAAQ,OAAO,SAAS,OAAO,IAAI,GAAG,UAAU;IAC3D,MAAM,OAAO,IAAI,SAAS;IAC1B,OAAO,OAAO,SAAS,IAAI,IAAI;GACjC,CAAC,CACH;GACA,MAAM,OAAO;IACX,GAAG,MAAM;IACT,aAAa;KACX,GAAG,MAAM,MAAM;KACf,eAAe,SAAS,KAAK,IAAI;KACjC,UAAU,WAAW,KAAK;IAC5B;GACF;EACF;CACF;AACF;;;;;;;;;;;;;;;;;;;;ACrDA,SAAgB,gBAAgB,OAAe,WAA4B;CACzE,MAAM,UAAU,WAAW;CAC3B,MAAM,CAAC,SAAS,cAAc,eAAgB,WAAW,YAAY,IAAI,KAAM;CAC/E,MAAM,WAAW,OAAkB,CAAC,CAAC;CACrC,MAAM,WAAW,OAAO,OAAO;CAE/B,gBAAgB;EACd,IAAI,SAAS,YAAY,OAAO;GAC9B,SAAS,QAAQ,KAAK;IAAE;IAAO,IAAI,YAAY,IAAI;GAAE,CAAC;GACtD,SAAS,UAAU;EACrB;EAEA,MAAM,UAAU,SAAS,QAAQ;EACjC,IAAI,CAAC,SAAS;EAEd,MAAM,QAAQ,iBACN;GACJ,SAAS,QAAQ,MAAM;GACvB,WAAW,QAAQ,KAAK;EAC1B,GACA,KAAK,IAAI,GAAG,QAAQ,KAAA,MAAmB,YAAY,IAAI,CAAC,CAC1D;EAEA,aAAa,aAAa,KAAK;CACjC,GAAG,CAAC,SAAS,KAAK,CAAC;CAGnB,OAAO,KAAK,IAAI,SAAS,KAAK;AAChC;;;;;;;;;;;;;;;;;;;;;ACRA,IAAa,mBAAmB,KAAK,SAAS,iBAAiB,EAC7D,UACA,WACA,qBAAqB,OACrB,YAAY,OACZ,eAAe,SACS;CACxB,MAAM,QAAQ,sBAAsB,QAAQ;CAC5C,MAAM,SAAS,cAAc,YAAY,KAAK,GAAG,CAAC,KAAK,CAAC;CACxD,MAAM,OAAO,OAAO,SAAS;CAC7B,MAAM,cAAc,eAAe,mBAAmB,mBAAA,CAAoB;CAE1E,MAAM,QAAQ,UAAU,MAAM;CAC9B,MAAM,UAAU,gBAAgB,MAAM,GAAG,EAAE,CAAC,EAAE,OAAO,GAAG,SAAS;CAIjE,MAAM,gBAAgB,SACpB,CAAC,QAAQ,WAAW,KAAK,MAAM,KAAA,IAAY,KAAK,IAAI,GAAG,UAAU,KAAK,KAAK;CAE7E,MAAM,OAAO,OAAO,SAAS;CAC7B,MAAM,SAAS,cAAe,YAAY,OAAO,MAAM,cAAc,IAAI,MAAO,CAAC,WAAW,IAAI,CAAC;CAEjG,OACE,oBAAC,OAAD;EAAK,WAAW,GAAG,mBAAmB,SAAS;EAC5C,UAAA,OAAO,KAAK,OAAO,UAClB,oBAAC,eAAD;GAEE,SAAS,UAAU,OAAO,SAAS;GACnC,cAAc,aAAa,MAAM,MAAM;GAC3B;GACD;GACG;EACf,GANM,KAMN,CACF;CACE,CAAA;AAET,CAAC;;AAGD,IAAM,gBAAgB,KAAK,SAAS,cAAc,EAChD,YACA,SACA,cACA,WACA,gBAOC;CACD,MAAM,gBAAgB,cACb,iBAAiB,KAAA,IAAY,UAAU,CAAC,eAAe,YAAY,CAAC,GAC3E,CAAC,YAAY,CACf;CAEA,OACE,oBAAC,UAAD;EACE,eAAe,gBAAgB,CAAC,YAAY,0BAA0B;EACvD;EACH;EAEX,UAAA;CACO,CAAA;AAEd,CAAC;AAED,IAAM,UAAoC,CAAC;;;;;;AAY3C,SAAS,UAAU,QAA8B;CAC/C,IAAI,OAAO;CAEX,OAAO,OAAO,KAAI,UAAS;EACzB,MAAM,OAAO;GAAE,OAAO;GAAM,KAAK,OAAO,WAAW,KAAK;EAAE;EAC1D,OAAO,KAAK;EAEZ,OAAO;CACT,CAAC;AACH;AAEA,SAAS,WAAW,MAAsB;CACxC,OAAO,KAAK,MAAM,MAAM,CAAC,EAAE,UAAU;AACvC;AAIA,SAAS,sBAAsB,MAAsB;CACnD,OAAO,KAAK,SAAS,IAAI,IAAI,OAAO,KAAK,QAAQ,QAAQ,IAAI;AAC/D;AAIA,SAAS,WAAW,MAAwC;CAC1D,MAAM,aAAa,KAAK,WAAW;CACnC,IAAI,CAAC,MAAM,QAAQ,UAAU,GAAG,OAAO,KAAA;CAEvC,MAAM,WAAW,WAAW,MAAK,UAAS,OAAO,UAAU,YAAY,MAAM,WAAW,WAAW,CAAC;CACpG,OAAO,OAAO,aAAa,WAAW,SAAS,MAAM,CAAkB,IAAI,KAAA;AAC7E;AAEA,SAAS,WAAW,MAAiF;CACnG,MAAM,QAAQ,MAAM,SAAS,MAAK,UAAS,MAAM,SAAS,aAAa,MAAM,YAAY,MAAM;CAC/F,IAAI,OAAO,SAAS,WAAW,OAAO,KAAA;CAGtC,OAAO;EAAE,MADI,MAAM,SAAS,KAAI,UAAU,MAAM,SAAS,SAAS,MAAM,QAAQ,EAAG,CAAC,CAAC,KAAK,EAC3E,CAAA,CAAK,QAAQ,OAAO,EAAE;EAAG,UAAU,WAAW,KAAK;CAAE;AACtE;AAEA,SAAS,kBAAkB,EACzB,MACA,UACA,aAKC;CACD,MAAM,SAAS,WAAW,IAAI;CAC9B,IAAI,CAAC,QAAQ,OAAO,oBAAC,OAAD;EAAgB;EAAY;CAAc,CAAA;CAE9D,OACE,oBAAC,WAAD;EACE,MAAM,OAAO;EACb,MAAM,OAAO;EACb,UAAS;EACT,WAAW,GAAG,mBAAmB,SAAS;EAC1C,aAAY;CACb,CAAA;AAEL;AAEA,IAAM,wBAAwB;AAE9B,SAAS,iBAAiB,OAA4B;CACpD,OAAO,MAAM,WAAW,KAAK,CAAC,MAAM,WAAW,CAAC,MAAM,WAAW,CAAC,MAAM,YAAY,CAAC,MAAM;AAC7F;AAEA,SAAS,aAAa,oBAA8E;CAClG,OAAO,SAAS,aAAa,EAAE,MAAM,OAAO,YAAY;EACtD,MAAM,aAAa,gBAAgB,KAAK,QAAQ,EAAE;EAElD,MAAM,eAAoD,UAAS;GACjE,IAAI,CAAC,cAAc,uBAAuB,YAAY,CAAC,iBAAiB,KAAK,GAAG;GAEhF,MAAM,QAAQ,OAAO,KAAK,MAAM,UAAU,qBAAqB;GAC/D,IAAI,CAAC,OAAO;GAEZ,MAAM,SAAS;GACf,MAAM,eAAe;EACvB;EAEA,OACE,oBAAC,KAAD;GACQ;GACC;GACP,SAAS;GACT,QAAQ,aAAa,WAAW,KAAA;GAChC,KAAK,aAAa,wBAAwB,KAAA;GAEzC;EACA,CAAA;CAEP;AACF;AAEA,IAAM,iBAAiB,CAAC,SAAS;AACjC,IAAM,0BAA0B,CAAC,WAAW,mBAAmB;AAK/D,IAAM,iBAAiB;CAAE,OAAO;CAAO,UAAU;AAAY;AAK7D,IAAM,aAAyB;CAC7B,KAAK;CACL,GAAG,aAAa,KAAK;AACvB;AAEA,IAAM,oBAAgC;CACpC,GAAG;CACH,GAAG,aAAa,QAAQ;AAC1B;AAEA,IAAM,qBAAqB;CAAE,KAAK;CAAY,QAAQ;AAAkB;AACxE,IAAM,mBAAmB;CACvB,KAAK;EAAE,GAAG;EAAY,OAAO;CAAc;CAC3C,QAAQ;EAAE,GAAG;EAAmB,OAAO;CAAc;AACvD"}
1
+ {"version":3,"file":"MarkdownRenderer-DME2xKTk.js","names":[],"sources":["../src/ds/components/MarkdownRenderer/arriving.ts","../src/ds/components/MarkdownRenderer/blocks.ts","../src/ds/components/MarkdownRenderer/table-csv.ts","../src/ds/components/MarkdownRenderer/markdown-table.tsx","../src/ds/components/MarkdownRenderer/table-markdown.ts","../src/ds/components/MarkdownRenderer/use-settled.ts","../src/ds/components/MarkdownRenderer/markdown-renderer.tsx"],"sourcesContent":["import type { ExtraProps } from 'react-markdown';\n\nimport { ARRIVING_CLASS } from '@/ds/tokens';\n\nimport '@/ds/components/Arrival/arrival.css';\n\ntype MarkdownElement = NonNullable<ExtraProps['node']>;\ntype MarkdownChild = MarkdownElement['children'][number];\n\n/** Fades whole: a fence renders through `CodeBlock`, and inline code carries a background. */\nconst UNBROKEN = new Set(['pre', 'code']);\n\nconst wrap = (value: string, arriving: boolean): MarkdownChild => ({\n type: 'element',\n tagName: 'span',\n properties: arriving ? { className: [ARRIVING_CLASS] } : {},\n children: [{ type: 'text', value }],\n});\n\nfunction markArriving(node: MarkdownElement): void {\n const classes = node.properties.className;\n\n node.properties.className = Array.isArray(classes) ? [...classes, ARRIVING_CLASS] : [ARRIVING_CLASS];\n}\n\nfunction rebuild(nodes: MarkdownChild[], arriving: () => boolean): MarkdownChild[] {\n const out: MarkdownChild[] = [];\n\n for (const node of nodes) {\n if (node.type === 'text') {\n for (const piece of node.value.match(/\\S+|\\s+/g) ?? []) {\n if (/\\S/.test(piece)) out.push(wrap(piece, arriving()));\n else out.push({ type: 'text', value: piece });\n }\n\n continue;\n }\n\n out.push(node);\n\n if (node.type !== 'element') continue;\n\n if (!UNBROKEN.has(node.tagName)) node.children = rebuild(node.children, arriving);\n else if (arriving()) markArriving(node);\n }\n\n return out;\n}\n\n/**\n * Gives every word of a block an element of its own, and the entrance class to\n * those past the first `settled` — the words that were not on screen yet when\n * the reader joined this reply.\n *\n * Every word, not just the arriving ones: react-markdown parses afresh on each\n * landing and React matches the children it already mounted by position, so a\n * wrapper that came and went would land where a bare text node used to be and\n * remount half the paragraph, replaying entrances that had long finished.\n * Wrapping the lot keeps every position fixed — a new word only ever appends —\n * and a word never gains the class it did not mount with, so nothing replays.\n */\nexport function rehypeArriving(settled: number) {\n return function attach() {\n return (tree: { children: MarkdownChild[] }) => {\n let word = 0;\n\n tree.children = rebuild(tree.children, () => word++ >= settled);\n };\n };\n}\n","const FENCE_OPEN = /^ {0,3}(`{3,}|~{3,})/;\nconst FENCE_CLOSE = /^ {0,3}(`{3,}|~{3,})[ \\t]*$/;\nconst LIST_ITEM = /^ {0,3}(?:[-*+]|\\d{1,9}[.)])(?:[ \\t]|$)/;\nconst INDENTED = /^(?:\\t| {2,})/;\nconst DEFINITION = /^ {0,3}\\[[^\\]]+\\]:/;\n\nfunction fenceOpenedBy(line: string): string | undefined {\n return FENCE_OPEN.exec(line)?.[1];\n}\n\n// Both are runs of one character, so `startsWith` is \"same marker, at least as long\".\nfunction closesFence(line: string, marker: string): boolean {\n return FENCE_CLOSE.exec(line)?.[1]?.startsWith(marker) ?? false;\n}\n\nfunction startsBlock(line: string, inList: boolean): boolean {\n if (INDENTED.test(line)) return false;\n\n return !(inList && LIST_ITEM.test(line));\n}\n\n/**\n * Cuts markdown into top-level blocks so a growing reply re-parses its last\n * block instead of all of them. Rejoining the result returns the input, and\n * every block renders as it would have inside the whole.\n *\n * Each rule only ever merges: over-merging costs a re-parse, while cutting a\n * construct in two changes what it renders as. Link reference and footnote\n * definitions resolve across blank lines, which no line-level rule can see, so\n * reaching one outside a fence abandons the split for the whole text.\n */\nexport function splitBlocks(markdown: string): string[] {\n const lines = markdown.split('\\n');\n const starts = [0];\n let fence: string | undefined;\n let started = false;\n let broken = false;\n let inList = false;\n\n for (const [index, line] of lines.entries()) {\n if (fence) {\n if (closesFence(line, fence)) fence = undefined;\n continue;\n }\n\n if (line.trim() === '') {\n broken = started;\n continue;\n }\n\n if (DEFINITION.test(line)) return [markdown];\n\n if (broken && startsBlock(line, inList)) {\n starts.push(index);\n started = false;\n }\n\n if (!started) inList = LIST_ITEM.test(line);\n\n started = true;\n broken = false;\n fence = fenceOpenedBy(line);\n }\n\n return starts.map((start, position) => {\n const end = starts[position + 1];\n const block = lines.slice(start, end ?? lines.length).join('\\n');\n\n return end === undefined ? block : `${block}\\n`;\n });\n}\n","function spreadsheetCell(value: string): string {\n // Quoting alone does not stop spreadsheet apps from evaluating formulas.\n const numeric = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i.test(value.trim());\n const formula = /^[\\s\\uFEFF]*[=+\\-@=+-@]/u.test(value);\n const controlPrefix = /^[\\t\\r\\n]/.test(value);\n const safe = controlPrefix || (formula && !numeric) ? `'${value}` : value;\n return `\"${safe.replaceAll('\"', '\"\"')}\"`;\n}\n\nexport function tableToCsv(rows: string[][]): string {\n return rows.map(row => row.map(spreadsheetCell).join(',')).join('\\r\\n');\n}\n\nexport function downloadTableCsv(csv: string): void {\n const blob = new Blob(['\\uFEFF', csv], { type: 'text/csv;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = 'table.csv';\n document.body.appendChild(anchor);\n anchor.click();\n anchor.remove();\n URL.revokeObjectURL(url);\n}\n","import { CheckIcon, ChevronDownIcon, CopyIcon, DownloadIcon } from 'lucide-react';\nimport type { ComponentProps } from 'react';\nimport type { ExtraProps } from 'react-markdown';\nimport { downloadTableCsv } from './table-csv';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { useCopyToClipboard } from '@/hooks/use-copy-to-clipboard';\n\nexport function MarkdownTable({ node, children }: ComponentProps<'table'> & ExtraProps) {\n const markdown = node?.properties.tableMarkdown;\n const csv = node?.properties.tableCsv;\n const { isCopied, copyToClipboard } = useCopyToClipboard({ copyMessage: 'Copied table markdown' });\n\n return (\n <div className=\"my-3 w-fit max-w-full min-w-0\">\n <div className=\"flex justify-end\">\n <ButtonsGroup size=\"sm\" aria-label=\"Table actions\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n disabled={typeof markdown !== 'string'}\n onClick={() => {\n if (typeof markdown === 'string') copyToClipboard(markdown);\n }}\n aria-label=\"Copy table as markdown\"\n >\n {isCopied ? <CheckIcon /> : <CopyIcon />}\n {isCopied ? 'Copied!' : 'Copy table as markdown'}\n </Button>\n <DropdownMenu>\n <DropdownMenu.Trigger\n disabled={typeof csv !== 'string'}\n render={\n <Button type=\"button\" size=\"icon-sm\" variant=\"ghost\" aria-label=\"More table options\">\n <ChevronDownIcon />\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\" size=\"sm\" className=\"w-max min-w-0\">\n <DropdownMenu.Item\n size=\"sm\"\n onClick={() => {\n if (typeof csv === 'string') downloadTableCsv(csv);\n }}\n >\n <DownloadIcon />\n Download CSV\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n </ButtonsGroup>\n </div>\n <div className=\"max-w-full overflow-x-auto\">\n <table className=\"table min-w-full\">{children}</table>\n </div>\n </div>\n );\n}\n","import type { Definition, FootnoteDefinition, Nodes, Root, Table } from 'mdast';\nimport { gfmToMarkdown } from 'mdast-util-gfm';\nimport { toMarkdown } from 'mdast-util-to-markdown';\nimport { tableToCsv } from './table-csv';\n\nfunction cellText(node: Nodes): string {\n if (node.type === 'footnoteReference') return `[^${node.label ?? node.identifier}]`;\n if ('value' in node) return node.value;\n if (node.type === 'image' || node.type === 'imageReference') return node.alt ?? '';\n return 'children' in node ? node.children.map(cellText).join('') : '';\n}\n\nfunction walk(node: Nodes, visit: (node: Nodes) => void): void {\n visit(node);\n if ('children' in node) node.children.forEach(child => walk(child, visit));\n}\n\nconst SERIALIZE_OPTIONS = { extensions: [gfmToMarkdown()] };\n\n/** Capture table exports before rehype replaces text with animation spans. */\nexport function remarkTableMarkdown() {\n return (tree: Root, file: { value: unknown }) => {\n const source = String(file.value);\n const definitions = new Map<string, Definition | FootnoteDefinition>();\n const tables: Table[] = [];\n walk(tree, node => {\n if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n const key = `${node.type}:${node.identifier}`;\n if (!definitions.has(key)) definitions.set(key, node);\n }\n if (node.type === 'table') tables.push(node);\n });\n\n const lines = source.split(/\\r\\n|\\r|\\n/);\n for (const table of tables) {\n const header = table.children[0];\n if (!header?.position) continue;\n const rows = table.children.map(row => {\n const start = row.position?.start.offset;\n const end = row.position?.end.offset;\n return start === undefined || end === undefined ? undefined : source.slice(start, end);\n });\n // Only offer exports when the parser supplied the original row locations.\n if (!rows.every(row => row !== undefined)) continue;\n // Row positions exclude list/blockquote prefixes. The delimiter has no AST node.\n const delimiter = lines[header.position.start.line]?.replace(/^[\\t >]*/, '');\n if (delimiter === undefined) continue;\n const markdown = [rows[0], delimiter, ...rows.slice(1)];\n const used = new Set<string>();\n const collectReference = (node: Nodes) => {\n if (node.type === 'linkReference' || node.type === 'imageReference') {\n used.add(`definition:${node.identifier}`);\n } else if (node.type === 'footnoteReference') {\n used.add(`footnoteDefinition:${node.identifier}`);\n }\n };\n walk(table, collectReference);\n // Visiting appended definitions also collects links/footnotes they depend on.\n // The set prevents duplicates and cycles, including self-referencing footnotes.\n for (const key of used) {\n const definition = definitions.get(key);\n if (!definition) continue;\n markdown.push('', toMarkdown(definition, SERIALIZE_OPTIONS).trimEnd());\n walk(definition, collectReference);\n }\n const cells = table.children.map(row =>\n Array.from({ length: header.children.length }, (_, index) => {\n const cell = row.children[index];\n return cell ? cellText(cell) : '';\n }),\n );\n table.data = {\n ...table.data,\n hProperties: {\n ...table.data?.hProperties,\n tableMarkdown: markdown.join('\\n'),\n tableCsv: tableToCsv(cells),\n },\n };\n }\n };\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport { useWatched } from '@/ds/components/Arrival';\nimport { ARRIVING_MS } from '@/ds/tokens';\n\ninterface Landing {\n words: number;\n at: number;\n}\n\n/**\n * How many of a reply's words have been on screen long enough that their entrance is over.\n *\n * The entrance plays on whatever mounts carrying the class, so it replays every time a\n * word's element is rebuilt — and markdown rebuilds a growing tail constantly: a `-`\n * turns a paragraph into a list item, a closing `**` splits it around a `<strong>`, the\n * stream ends and the mend comes off. Each of those swaps the element a settled word\n * lives in, which is what makes a word already read fade in again.\n *\n * Ageing them out is the whole answer: a word carries the class only while it is new,\n * so however often the tail is rebuilt, only what is genuinely arriving animates.\n *\n * What counts as new at mount is not this hook's call. A reply the reader was handed\n * is already there, and a block that mounts complete — a card's output, an expanded\n * body — enters with its container. Only a passage born streaming under the reader's\n * eyes is new from its first word: the reveal often lands several words in its first\n * commit, and they enter like every word after them.\n */\nexport function useSettledWords(words: number, streaming: boolean): number {\n const watched = useWatched();\n const [settled, setSettled] = useState(() => (watched && streaming ? 0 : words));\n const landings = useRef<Landing[]>([]);\n const recorded = useRef(settled);\n\n useEffect(() => {\n if (recorded.current !== words) {\n landings.current.push({ words, at: performance.now() });\n recorded.current = words;\n }\n\n const waiting = landings.current[0];\n if (!waiting) return;\n\n const timer = setTimeout(\n () => {\n landings.current.shift();\n setSettled(waiting.words);\n },\n Math.max(0, waiting.at + ARRIVING_MS - performance.now()),\n );\n\n return () => clearTimeout(timer);\n }, [settled, words]);\n\n // A shorter reply replacing the one on screen settles at once: nothing of it is new.\n return Math.min(settled, words);\n}\n","import { memo, useMemo } from 'react';\nimport type { MouseEvent, MouseEventHandler, ReactNode } from 'react';\nimport Markdown from 'react-markdown';\nimport type { Components, ExtraProps, Options } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remend from 'remend';\n\nimport { rehypeArriving } from './arriving';\nimport { splitBlocks } from './blocks';\nimport { MarkdownTable } from './markdown-table';\nimport { remarkTableMarkdown } from './table-markdown';\nimport { useSettledWords } from './use-settled';\nimport { CodeBlock } from '@/ds/components/CodeBlock';\nimport { cn } from '@/lib/utils';\n\nimport './markdown-renderer.css';\n\nexport type MarkdownExternalLinkTarget = 'tab' | 'window';\n\nexport interface MarkdownRendererProps {\n children: string;\n className?: string;\n externalLinkTarget?: MarkdownExternalLinkTarget;\n /** The text is a prefix of one still being written: close the markers the stream has not reached. */\n streaming?: boolean;\n /** Opt in to table copy/download controls; disabled while this text is streaming. */\n tableActions?: boolean;\n}\n\n/**\n * Renders a markdown string. Agent output can carry attacker-influenced text\n * (file contents, tool output, web pages): react-markdown escapes raw HTML and\n * drops dangerous link schemes, so nothing here reaches the DOM as markup.\n *\n * react-markdown re-parses on every render, and a streaming reply re-renders\n * its whole transcript on every delta. Memoizing spares the settled messages;\n * rendering block by block — streaming or not — spares every block of the live\n * one but the last, and lets a reply settle without remounting what is already\n * on screen.\n *\n * The text is drawn as given: pacing a stream is `useRevealedText`, and belongs to\n * whoever owns the whole of what is being laid down — a reply is prose, tool rows\n * and cards, and they have to arrive in the order they were written. Only what\n * lands after the reader joined plays an entrance, and only while it is still new:\n * a reply opened part-written is already there, and fading in what someone is\n * halfway through reading would be both a lie and a screenful of animations at\n * once.\n */\nexport const MarkdownRenderer = memo(function MarkdownRenderer({\n children,\n className,\n externalLinkTarget = 'tab',\n streaming = false,\n tableActions = false,\n}: MarkdownRendererProps) {\n const shown = decodeEscapedNewlines(children);\n const blocks = useMemo(() => splitBlocks(shown), [shown]);\n const last = blocks.length - 1;\n const components = (tableActions ? TABLE_COMPONENTS : DEFAULT_COMPONENTS)[externalLinkTarget];\n\n const spans = wordSpans(blocks);\n const settled = useSettledWords(spans.at(-1)?.end ?? 0, streaming);\n\n // A block whose words have all finished their entrance has nothing left to play,\n // which is what `undefined` says: leave it as plain text, no spans at all.\n const settledWords = (span: WordSpan | undefined): number | undefined =>\n !span || settled >= span.end ? undefined : Math.max(0, settled - span.start);\n\n const tail = blocks[last] ?? '';\n const mended = useMemo(() => (streaming ? remend(tail, REMEND_OPTIONS) : tail), [streaming, tail]);\n\n return (\n <div className={cn('mastra-markdown', className)}>\n {blocks.map((block, index) => (\n <MarkdownBlock\n key={index}\n content={index === last ? mended : block}\n settledWords={settledWords(spans[index])}\n components={components}\n streaming={streaming}\n tableActions={tableActions}\n />\n ))}\n </div>\n );\n});\n\n/** Keyed by position at the call site: a content key remounts on every character. */\nconst MarkdownBlock = memo(function MarkdownBlock({\n components,\n content,\n settledWords,\n streaming,\n tableActions,\n}: {\n components: Components;\n content: string;\n settledWords?: number;\n streaming: boolean;\n tableActions: boolean;\n}) {\n const rehypePlugins = useMemo(\n () => (settledWords === undefined ? SETTLED : [rehypeArriving(settledWords)]),\n [settledWords],\n );\n\n return (\n <Markdown\n remarkPlugins={tableActions && !streaming ? COPYABLE_REMARK_PLUGINS : REMARK_PLUGINS}\n rehypePlugins={rehypePlugins}\n components={components}\n >\n {content}\n </Markdown>\n );\n});\n\nconst SETTLED: Options['rehypePlugins'] = [];\n\ninterface WordSpan {\n start: number;\n end: number;\n}\n\n/**\n * Where each block's words fall in the reply's own count, so one settled count covers\n * them all. Counting the source counts its markers too, so the boundary only ever errs\n * towards leaving a word unanimated.\n */\nfunction wordSpans(blocks: string[]): WordSpan[] {\n let read = 0;\n\n return blocks.map(block => {\n const span = { start: read, end: read + countWords(block) };\n read = span.end;\n\n return span;\n });\n}\n\nfunction countWords(text: string): number {\n return text.match(/\\S+/g)?.length ?? 0;\n}\n\n// Agent networks emit their text with literal `\\n`. Only unescape when the text\n// has no real newline, otherwise a `\"a\\nb\"` inside a code fence gets shredded.\nfunction decodeEscapedNewlines(text: string): string {\n return text.includes('\\n') ? text : text.replace(/\\\\n/g, '\\n');\n}\n\ntype MarkdownNode = NonNullable<ExtraProps['node']>;\n\nfunction languageOf(node: MarkdownNode): string | undefined {\n const classNames = node.properties.className;\n if (!Array.isArray(classNames)) return undefined;\n\n const language = classNames.find(entry => typeof entry === 'string' && entry.startsWith('language-'));\n return typeof language === 'string' ? language.slice('language-'.length) : undefined;\n}\n\nfunction fencedCode(node: MarkdownNode | undefined): { code: string; language?: string } | undefined {\n const child = node?.children.find(entry => entry.type === 'element' && entry.tagName === 'code');\n if (child?.type !== 'element') return undefined;\n\n const code = child.children.map(entry => (entry.type === 'text' ? entry.value : '')).join('');\n return { code: code.replace(/\\n$/, ''), language: languageOf(child) };\n}\n\nfunction MarkdownCodeBlock({\n node,\n children,\n className,\n}: {\n node?: MarkdownNode;\n children?: ReactNode;\n className?: string;\n}) {\n const fenced = fencedCode(node);\n if (!fenced) return <pre className={className}>{children}</pre>;\n\n return (\n <CodeBlock\n code={fenced.code}\n lang={fenced.language}\n overflow=\"scroll\"\n className={cn('my-3 bg-sidebar', className)}\n copyMessage=\"Copied code to clipboard\"\n />\n );\n}\n\nconst POPUP_WINDOW_FEATURES = 'popup=yes,width=720,height=800,resizable=yes,scrollbars=yes';\n\nfunction isPlainLeftClick(event: MouseEvent): boolean {\n return event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;\n}\n\nfunction markdownLink(externalLinkTarget: MarkdownExternalLinkTarget): NonNullable<Components['a']> {\n return function MarkdownLink({ href, title, children }) {\n const isExternal = /^https?:\\/\\//i.test(href ?? '');\n\n const openInPopup: MouseEventHandler<HTMLAnchorElement> = event => {\n if (!isExternal || externalLinkTarget !== 'window' || !isPlainLeftClick(event)) return;\n\n const popup = window.open(href, '_blank', POPUP_WINDOW_FEATURES);\n if (!popup) return;\n\n popup.opener = null;\n event.preventDefault();\n };\n\n return (\n <a\n href={href}\n title={title}\n onClick={openInPopup}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n >\n {children}\n </a>\n );\n };\n}\n\nconst REMARK_PLUGINS = [remarkGfm];\nconst COPYABLE_REMARK_PLUGINS = [remarkGfm, remarkTableMarkdown];\n\n// Links stay text until their URL lands: remend's placeholder href would render\n// a live anchor to nowhere. No math is rendered here, so pairing `$$` would only\n// turn one literal into another.\nconst REMEND_OPTIONS = { katex: false, linkMode: 'text-only' } as const;\n\n// Elements are listed one by one: react-markdown also passes its `node`, which\n// React would forward to the DOM as a stray attribute. Everything else is\n// styled from markdown-renderer.css.\nconst COMPONENTS: Components = {\n pre: MarkdownCodeBlock,\n a: markdownLink('tab'),\n};\n\nconst WINDOW_COMPONENTS: Components = {\n ...COMPONENTS,\n a: markdownLink('window'),\n};\n\nconst DEFAULT_COMPONENTS = { tab: COMPONENTS, window: WINDOW_COMPONENTS };\nconst TABLE_COMPONENTS = {\n tab: { ...COMPONENTS, table: MarkdownTable },\n window: { ...WINDOW_COMPONENTS, table: MarkdownTable },\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAUA,IAAM,2BAAW,IAAI,IAAI,CAAC,OAAO,MAAM,CAAC;AAExC,IAAM,QAAQ,OAAe,cAAsC;CACjE,MAAM;CACN,SAAS;CACT,YAAY,WAAW,EAAE,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC;CAC1D,UAAU,CAAC;EAAE,MAAM;EAAQ;CAAM,CAAC;AACpC;AAEA,SAAS,aAAa,MAA6B;CACjD,MAAM,UAAU,KAAK,WAAW;CAEhC,KAAK,WAAW,YAAY,MAAM,QAAQ,OAAO,IAAI,CAAC,GAAG,SAAS,cAAc,IAAI,CAAC,cAAc;AACrG;AAEA,SAAS,QAAQ,OAAwB,UAA0C;CACjF,MAAM,MAAuB,CAAC;CAE9B,KAAK,MAAM,QAAQ,OAAO;EACxB,IAAI,KAAK,SAAS,QAAQ;GACxB,KAAK,MAAM,SAAS,KAAK,MAAM,MAAM,UAAU,KAAK,CAAC,GACnD,IAAI,KAAK,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,OAAO,SAAS,CAAC,CAAC;QACjD,IAAI,KAAK;IAAE,MAAM;IAAQ,OAAO;GAAM,CAAC;GAG9C;EACF;EAEA,IAAI,KAAK,IAAI;EAEb,IAAI,KAAK,SAAS,WAAW;EAE7B,IAAI,CAAC,SAAS,IAAI,KAAK,OAAO,GAAG,KAAK,WAAW,QAAQ,KAAK,UAAU,QAAQ;OAC3E,IAAI,SAAS,GAAG,aAAa,IAAI;CACxC;CAEA,OAAO;AACT;;;;;;;;;;;;;AAcA,SAAgB,eAAe,SAAiB;CAC9C,OAAO,SAAS,SAAS;EACvB,QAAQ,SAAwC;GAC9C,IAAI,OAAO;GAEX,KAAK,WAAW,QAAQ,KAAK,gBAAgB,UAAU,OAAO;EAChE;CACF;AACF;;ACrEA,IAAM,aAAa;AACnB,IAAM,cAAc;AACpB,IAAM,YAAY;AAClB,IAAM,WAAW;AACjB,IAAM,aAAa;AAEnB,SAAS,cAAc,MAAkC;CACvD,OAAO,WAAW,KAAK,IAAI,CAAC,GAAG;AACjC;AAGA,SAAS,YAAY,MAAc,QAAyB;CAC1D,OAAO,YAAY,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,WAAW,MAAM,KAAK;AAC5D;AAEA,SAAS,YAAY,MAAc,QAA0B;CAC3D,IAAI,SAAS,KAAK,IAAI,GAAG,OAAO;CAEhC,OAAO,EAAE,UAAU,UAAU,KAAK,IAAI;AACxC;;;;;;;;;;;AAYA,SAAgB,YAAY,UAA4B;CACtD,MAAM,QAAQ,SAAS,MAAM,IAAI;CACjC,MAAM,SAAS,CAAC,CAAC;CACjB,IAAI;CACJ,IAAI,UAAU;CACd,IAAI,SAAS;CACb,IAAI,SAAS;CAEb,KAAK,MAAM,CAAC,OAAO,SAAS,MAAM,QAAQ,GAAG;EAC3C,IAAI,OAAO;GACT,IAAI,YAAY,MAAM,KAAK,GAAG,QAAQ,KAAA;GACtC;EACF;EAEA,IAAI,KAAK,KAAK,MAAM,IAAI;GACtB,SAAS;GACT;EACF;EAEA,IAAI,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,QAAQ;EAE3C,IAAI,UAAU,YAAY,MAAM,MAAM,GAAG;GACvC,OAAO,KAAK,KAAK;GACjB,UAAU;EACZ;EAEA,IAAI,CAAC,SAAS,SAAS,UAAU,KAAK,IAAI;EAE1C,UAAU;EACV,SAAS;EACT,QAAQ,cAAc,IAAI;CAC5B;CAEA,OAAO,OAAO,KAAK,OAAO,aAAa;EACrC,MAAM,MAAM,OAAO,WAAW;EAC9B,MAAM,QAAQ,MAAM,MAAM,OAAO,OAAO,MAAM,MAAM,CAAC,CAAC,KAAK,IAAI;EAE/D,OAAO,QAAQ,KAAA,IAAY,QAAQ,GAAG,MAAM;CAC9C,CAAC;AACH;;ACtEA,SAAS,gBAAgB,OAAuB;CAE9C,MAAM,UAAU,gDAAgD,KAAK,MAAM,KAAK,CAAC;CACjF,MAAM,UAAU,2BAA2B,KAAK,KAAK;CAGrD,OAAO,KAFe,YAAY,KAAK,KAC1B,KAAkB,WAAW,CAAC,UAAW,IAAI,UAAU,MAAA,CACpD,WAAW,MAAK,MAAI,EAAE;AACxC;AAEA,SAAgB,WAAW,MAA0B;CACnD,OAAO,KAAK,KAAI,QAAO,IAAI,IAAI,eAAe,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM;AACxE;AAEA,SAAgB,iBAAiB,KAAmB;CAClD,MAAM,OAAO,IAAI,KAAK,CAAC,KAAU,GAAG,GAAG,EAAE,MAAM,yBAAyB,CAAC;CACzE,MAAM,MAAM,IAAI,gBAAgB,IAAI;CACpC,MAAM,SAAS,SAAS,cAAc,GAAG;CACzC,OAAO,OAAO;CACd,OAAO,WAAW;CAClB,SAAS,KAAK,YAAY,MAAM;CAChC,OAAO,MAAM;CACb,OAAO,OAAO;CACd,IAAI,gBAAgB,GAAG;AACzB;;ACdA,SAAgB,cAAc,EAAE,MAAM,YAAkD;CACtF,MAAM,WAAW,MAAM,WAAW;CAClC,MAAM,MAAM,MAAM,WAAW;CAC7B,MAAM,EAAE,UAAU,oBAAoB,mBAAmB,EAAE,aAAa,wBAAwB,CAAC;CAEjG,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,oBAAC,OAAD;GAAK,WAAU;GACb,UAAA,qBAAC,cAAD;IAAc,MAAK;IAAK,cAAW;IAAnC,UAAA,CACE,qBAAC,QAAD;KACE,MAAK;KACL,SAAQ;KACR,UAAU,OAAO,aAAa;KAC9B,eAAe;MACb,IAAI,OAAO,aAAa,UAAU,gBAAgB,QAAQ;KAC5D;KACA,cAAW;KAPb,UAAA,CASG,WAAW,oBAAC,WAAD,CAAY,CAAA,IAAI,oBAAC,UAAD,CAAW,CAAA,GACtC,WAAW,YAAY,wBAClB;IACR,CAAA,GAAA,qBAAC,cAAD,EAAA,UAAA,CACE,oBAAC,aAAa,SAAd;KACE,UAAU,OAAO,QAAQ;KACzB,QACE,oBAAC,QAAD;MAAQ,MAAK;MAAS,MAAK;MAAU,SAAQ;MAAQ,cAAW;MAC9D,UAAA,oBAAC,iBAAD,CAAkB,CAAA;KACZ,CAAA;IAEX,CAAA,GACD,oBAAC,aAAa,SAAd;KAAsB,OAAM;KAAM,MAAK;KAAK,WAAU;KACpD,UAAA,qBAAC,aAAa,MAAd;MACE,MAAK;MACL,eAAe;OACb,IAAI,OAAO,QAAQ,UAAU,iBAAiB,GAAG;MACnD;MAJF,UAAA,CAME,oBAAC,cAAD,CAAe,CAAA,GAAC,cAEC;;IACC,CAAA,CACV,EAAA,CAAA,CACF;;EACX,CAAA,GACL,oBAAC,OAAD;GAAK,WAAU;GACb,UAAA,oBAAC,SAAD;IAAO,WAAU;IAAoB;GAAgB,CAAA;EAClD,CAAA,CACF;;AAET;;ACrDA,SAAS,SAAS,MAAqB;CACrC,IAAI,KAAK,SAAS,qBAAqB,OAAO,KAAK,KAAK,SAAS,KAAK,WAAW;CACjF,IAAI,WAAW,MAAM,OAAO,KAAK;CACjC,IAAI,KAAK,SAAS,WAAW,KAAK,SAAS,kBAAkB,OAAO,KAAK,OAAO;CAChF,OAAO,cAAc,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,IAAI;AACrE;AAEA,SAAS,KAAK,MAAa,OAAoC;CAC7D,MAAM,IAAI;CACV,IAAI,cAAc,MAAM,KAAK,SAAS,SAAQ,UAAS,KAAK,OAAO,KAAK,CAAC;AAC3E;AAEA,IAAM,oBAAoB,EAAE,YAAY,CAAC,cAAc,CAAC,EAAE;;AAG1D,SAAgB,sBAAsB;CACpC,QAAQ,MAAY,SAA6B;EAC/C,MAAM,SAAS,OAAO,KAAK,KAAK;EAChC,MAAM,8BAAc,IAAI,IAA6C;EACrE,MAAM,SAAkB,CAAC;EACzB,KAAK,OAAM,SAAQ;GACjB,IAAI,KAAK,SAAS,gBAAgB,KAAK,SAAS,sBAAsB;IACpE,MAAM,MAAM,GAAG,KAAK,KAAK,GAAG,KAAK;IACjC,IAAI,CAAC,YAAY,IAAI,GAAG,GAAG,YAAY,IAAI,KAAK,IAAI;GACtD;GACA,IAAI,KAAK,SAAS,SAAS,OAAO,KAAK,IAAI;EAC7C,CAAC;EAED,MAAM,QAAQ,OAAO,MAAM,YAAY;EACvC,KAAK,MAAM,SAAS,QAAQ;GAC1B,MAAM,SAAS,MAAM,SAAS;GAC9B,IAAI,CAAC,QAAQ,UAAU;GACvB,MAAM,OAAO,MAAM,SAAS,KAAI,QAAO;IACrC,MAAM,QAAQ,IAAI,UAAU,MAAM;IAClC,MAAM,MAAM,IAAI,UAAU,IAAI;IAC9B,OAAO,UAAU,KAAA,KAAa,QAAQ,KAAA,IAAY,KAAA,IAAY,OAAO,MAAM,OAAO,GAAG;GACvF,CAAC;GAED,IAAI,CAAC,KAAK,OAAM,QAAO,QAAQ,KAAA,CAAS,GAAG;GAE3C,MAAM,YAAY,MAAM,OAAO,SAAS,MAAM,KAAK,EAAE,QAAQ,YAAY,EAAE;GAC3E,IAAI,cAAc,KAAA,GAAW;GAC7B,MAAM,WAAW;IAAC,KAAK;IAAI;IAAW,GAAG,KAAK,MAAM,CAAC;GAAC;GACtD,MAAM,uBAAO,IAAI,IAAY;GAC7B,MAAM,oBAAoB,SAAgB;IACxC,IAAI,KAAK,SAAS,mBAAmB,KAAK,SAAS,kBACjD,KAAK,IAAI,cAAc,KAAK,YAAY;SACnC,IAAI,KAAK,SAAS,qBACvB,KAAK,IAAI,sBAAsB,KAAK,YAAY;GAEpD;GACA,KAAK,OAAO,gBAAgB;GAG5B,KAAK,MAAM,OAAO,MAAM;IACtB,MAAM,aAAa,YAAY,IAAI,GAAG;IACtC,IAAI,CAAC,YAAY;IACjB,SAAS,KAAK,IAAI,WAAW,YAAY,iBAAiB,CAAC,CAAC,QAAQ,CAAC;IACrE,KAAK,YAAY,gBAAgB;GACnC;GACA,MAAM,QAAQ,MAAM,SAAS,KAAI,QAC/B,MAAM,KAAK,EAAE,QAAQ,OAAO,SAAS,OAAO,IAAI,GAAG,UAAU;IAC3D,MAAM,OAAO,IAAI,SAAS;IAC1B,OAAO,OAAO,SAAS,IAAI,IAAI;GACjC,CAAC,CACH;GACA,MAAM,OAAO;IACX,GAAG,MAAM;IACT,aAAa;KACX,GAAG,MAAM,MAAM;KACf,eAAe,SAAS,KAAK,IAAI;KACjC,UAAU,WAAW,KAAK;IAC5B;GACF;EACF;CACF;AACF;;;;;;;;;;;;;;;;;;;;ACrDA,SAAgB,gBAAgB,OAAe,WAA4B;CACzE,MAAM,UAAU,WAAW;CAC3B,MAAM,CAAC,SAAS,cAAc,eAAgB,WAAW,YAAY,IAAI,KAAM;CAC/E,MAAM,WAAW,OAAkB,CAAC,CAAC;CACrC,MAAM,WAAW,OAAO,OAAO;CAE/B,gBAAgB;EACd,IAAI,SAAS,YAAY,OAAO;GAC9B,SAAS,QAAQ,KAAK;IAAE;IAAO,IAAI,YAAY,IAAI;GAAE,CAAC;GACtD,SAAS,UAAU;EACrB;EAEA,MAAM,UAAU,SAAS,QAAQ;EACjC,IAAI,CAAC,SAAS;EAEd,MAAM,QAAQ,iBACN;GACJ,SAAS,QAAQ,MAAM;GACvB,WAAW,QAAQ,KAAK;EAC1B,GACA,KAAK,IAAI,GAAG,QAAQ,KAAA,MAAmB,YAAY,IAAI,CAAC,CAC1D;EAEA,aAAa,aAAa,KAAK;CACjC,GAAG,CAAC,SAAS,KAAK,CAAC;CAGnB,OAAO,KAAK,IAAI,SAAS,KAAK;AAChC;;;;;;;;;;;;;;;;;;;;;ACRA,IAAa,mBAAmB,KAAK,SAAS,iBAAiB,EAC7D,UACA,WACA,qBAAqB,OACrB,YAAY,OACZ,eAAe,SACS;CACxB,MAAM,QAAQ,sBAAsB,QAAQ;CAC5C,MAAM,SAAS,cAAc,YAAY,KAAK,GAAG,CAAC,KAAK,CAAC;CACxD,MAAM,OAAO,OAAO,SAAS;CAC7B,MAAM,cAAc,eAAe,mBAAmB,mBAAA,CAAoB;CAE1E,MAAM,QAAQ,UAAU,MAAM;CAC9B,MAAM,UAAU,gBAAgB,MAAM,GAAG,EAAE,CAAC,EAAE,OAAO,GAAG,SAAS;CAIjE,MAAM,gBAAgB,SACpB,CAAC,QAAQ,WAAW,KAAK,MAAM,KAAA,IAAY,KAAK,IAAI,GAAG,UAAU,KAAK,KAAK;CAE7E,MAAM,OAAO,OAAO,SAAS;CAC7B,MAAM,SAAS,cAAe,YAAY,OAAO,MAAM,cAAc,IAAI,MAAO,CAAC,WAAW,IAAI,CAAC;CAEjG,OACE,oBAAC,OAAD;EAAK,WAAW,GAAG,mBAAmB,SAAS;EAC5C,UAAA,OAAO,KAAK,OAAO,UAClB,oBAAC,eAAD;GAEE,SAAS,UAAU,OAAO,SAAS;GACnC,cAAc,aAAa,MAAM,MAAM;GAC3B;GACD;GACG;EACf,GANM,KAMN,CACF;CACE,CAAA;AAET,CAAC;;AAGD,IAAM,gBAAgB,KAAK,SAAS,cAAc,EAChD,YACA,SACA,cACA,WACA,gBAOC;CACD,MAAM,gBAAgB,cACb,iBAAiB,KAAA,IAAY,UAAU,CAAC,eAAe,YAAY,CAAC,GAC3E,CAAC,YAAY,CACf;CAEA,OACE,oBAAC,UAAD;EACE,eAAe,gBAAgB,CAAC,YAAY,0BAA0B;EACvD;EACH;EAEX,UAAA;CACO,CAAA;AAEd,CAAC;AAED,IAAM,UAAoC,CAAC;;;;;;AAY3C,SAAS,UAAU,QAA8B;CAC/C,IAAI,OAAO;CAEX,OAAO,OAAO,KAAI,UAAS;EACzB,MAAM,OAAO;GAAE,OAAO;GAAM,KAAK,OAAO,WAAW,KAAK;EAAE;EAC1D,OAAO,KAAK;EAEZ,OAAO;CACT,CAAC;AACH;AAEA,SAAS,WAAW,MAAsB;CACxC,OAAO,KAAK,MAAM,MAAM,CAAC,EAAE,UAAU;AACvC;AAIA,SAAS,sBAAsB,MAAsB;CACnD,OAAO,KAAK,SAAS,IAAI,IAAI,OAAO,KAAK,QAAQ,QAAQ,IAAI;AAC/D;AAIA,SAAS,WAAW,MAAwC;CAC1D,MAAM,aAAa,KAAK,WAAW;CACnC,IAAI,CAAC,MAAM,QAAQ,UAAU,GAAG,OAAO,KAAA;CAEvC,MAAM,WAAW,WAAW,MAAK,UAAS,OAAO,UAAU,YAAY,MAAM,WAAW,WAAW,CAAC;CACpG,OAAO,OAAO,aAAa,WAAW,SAAS,MAAM,CAAkB,IAAI,KAAA;AAC7E;AAEA,SAAS,WAAW,MAAiF;CACnG,MAAM,QAAQ,MAAM,SAAS,MAAK,UAAS,MAAM,SAAS,aAAa,MAAM,YAAY,MAAM;CAC/F,IAAI,OAAO,SAAS,WAAW,OAAO,KAAA;CAGtC,OAAO;EAAE,MADI,MAAM,SAAS,KAAI,UAAU,MAAM,SAAS,SAAS,MAAM,QAAQ,EAAG,CAAC,CAAC,KAAK,EAC3E,CAAA,CAAK,QAAQ,OAAO,EAAE;EAAG,UAAU,WAAW,KAAK;CAAE;AACtE;AAEA,SAAS,kBAAkB,EACzB,MACA,UACA,aAKC;CACD,MAAM,SAAS,WAAW,IAAI;CAC9B,IAAI,CAAC,QAAQ,OAAO,oBAAC,OAAD;EAAgB;EAAY;CAAc,CAAA;CAE9D,OACE,oBAAC,WAAD;EACE,MAAM,OAAO;EACb,MAAM,OAAO;EACb,UAAS;EACT,WAAW,GAAG,mBAAmB,SAAS;EAC1C,aAAY;CACb,CAAA;AAEL;AAEA,IAAM,wBAAwB;AAE9B,SAAS,iBAAiB,OAA4B;CACpD,OAAO,MAAM,WAAW,KAAK,CAAC,MAAM,WAAW,CAAC,MAAM,WAAW,CAAC,MAAM,YAAY,CAAC,MAAM;AAC7F;AAEA,SAAS,aAAa,oBAA8E;CAClG,OAAO,SAAS,aAAa,EAAE,MAAM,OAAO,YAAY;EACtD,MAAM,aAAa,gBAAgB,KAAK,QAAQ,EAAE;EAElD,MAAM,eAAoD,UAAS;GACjE,IAAI,CAAC,cAAc,uBAAuB,YAAY,CAAC,iBAAiB,KAAK,GAAG;GAEhF,MAAM,QAAQ,OAAO,KAAK,MAAM,UAAU,qBAAqB;GAC/D,IAAI,CAAC,OAAO;GAEZ,MAAM,SAAS;GACf,MAAM,eAAe;EACvB;EAEA,OACE,oBAAC,KAAD;GACQ;GACC;GACP,SAAS;GACT,QAAQ,aAAa,WAAW,KAAA;GAChC,KAAK,aAAa,wBAAwB,KAAA;GAEzC;EACA,CAAA;CAEP;AACF;AAEA,IAAM,iBAAiB,CAAC,SAAS;AACjC,IAAM,0BAA0B,CAAC,WAAW,mBAAmB;AAK/D,IAAM,iBAAiB;CAAE,OAAO;CAAO,UAAU;AAAY;AAK7D,IAAM,aAAyB;CAC7B,KAAK;CACL,GAAG,aAAa,KAAK;AACvB;AAEA,IAAM,oBAAgC;CACpC,GAAG;CACH,GAAG,aAAa,QAAQ;AAC1B;AAEA,IAAM,qBAAqB;CAAE,KAAK;CAAY,QAAQ;AAAkB;AACxE,IAAM,mBAAmB;CACvB,KAAK;EAAE,GAAG;EAAY,OAAO;CAAc;CAC3C,QAAQ;EAAE,GAAG;EAAmB,OAAO;CAAc;AACvD"}
@@ -46,7 +46,7 @@ function MessageMetadata({ className, ...props }) {
46
46
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
47
47
  ...props,
48
48
  as: "span",
49
- variant: "meta",
49
+ variant: "caption",
50
50
  tone: "muted",
51
51
  className: require_utils.cn("inline-flex items-center gap-1", className)
52
52
  });
@@ -102,4 +102,4 @@ Object.defineProperty(exports, "MessageTimestamp", {
102
102
  }
103
103
  });
104
104
 
105
- //# sourceMappingURL=Message-BF9cpYaw.cjs.map
105
+ //# sourceMappingURL=Message-DsCNQpou.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Message-BF9cpYaw.cjs","names":["cn","Txt","CopyButton","toDate","formatDate"],"sources":["../src/ds/components/Message/message.tsx","../src/ds/components/Message/message-copy-button.tsx","../src/ds/components/Message/message-timestamp.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { Txt } from '@/ds/components/Txt';\nimport { messageSurfaceStyle } from '@/ds/primitives/message-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface MessageProps extends ComponentProps<'div'> {\n from: 'user' | 'assistant';\n avatar?: ReactNode;\n footer?: ReactNode;\n /** Sent files, displayed above and outside the text bubble. */\n attachments?: ReactNode;\n pending?: boolean;\n}\n\nexport function Message({ from, avatar, footer, attachments, pending, children, className, ...props }: MessageProps) {\n const isUser = from === 'user';\n\n return (\n <div\n {...props}\n data-slot=\"message\"\n data-from={from}\n data-message-pending={pending || undefined}\n className={cn(\n 'group/message max-w-full min-w-0',\n isUser && 'my-3 ml-auto flex w-fit max-w-[70%] items-start gap-2',\n !isUser && footer && 'mb-3',\n className,\n )}\n >\n {avatar}\n <div className={cn('min-w-0', isUser && 'flex flex-col items-end')}>\n {attachments && (\n <div data-slot=\"message-attachments\" className=\"mb-2 max-w-full min-w-0\">\n {attachments}\n </div>\n )}\n {children !== undefined && children !== null && children !== false && (\n <div\n data-slot=\"message-content\"\n className={cn(\n 'max-w-full min-w-0 text-body break-words',\n isUser && cn(messageSurfaceStyle, 'px-4 py-2'),\n isUser && pending && 'border border-dashed border-border',\n !isUser && footer && '[&>:last-child]:mb-0',\n )}\n >\n {children}\n </div>\n )}\n {footer && <div className=\"mt-1 max-w-full\">{footer}</div>}\n </div>\n </div>\n );\n}\n\nexport interface MessageActionsProps extends ComponentProps<'div'> {\n visibility?: 'hover' | 'always';\n}\n\nexport function MessageActions({ visibility = 'hover', children, className, ...props }: MessageActionsProps) {\n return (\n <div\n {...props}\n data-slot=\"message-actions\"\n className={cn(\n 'flex flex-wrap items-center gap-1 group-data-[from=user]/message:flex-row-reverse',\n 'motion-safe:transition-opacity [&_button]:pointer-coarse:min-h-11 [&_button]:pointer-coarse:min-w-11',\n visibility === 'hover' &&\n 'group-focus-within/message:opacity-100 group-hover/message:opacity-100 pointer-fine:opacity-0',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\nexport function MessageMetadata({ className, ...props }: ComponentProps<'span'>) {\n return (\n <Txt {...props} as=\"span\" variant=\"meta\" tone=\"muted\" className={cn('inline-flex items-center gap-1', className)} />\n );\n}\n","import { CopyButton } from '../CopyButton';\n\nexport function MessageCopyButton({ text }: { text: string }) {\n return <CopyButton content={text} size=\"icon-sm\" variant=\"ghost\" tooltip=\"Copy message\" showToast={false} />;\n}\n","import { MessageMetadata } from './message';\nimport { formatDate, toDate } from '@/utils/date-format';\n\nexport function MessageTimestamp({ value }: { value: Date | string }) {\n const time = toDate(value);\n if (!time) return null;\n\n return (\n <MessageMetadata>\n <time dateTime={time.toISOString()} title={formatDate(time, 'date-time')}>\n {formatDate(time, 'time')}\n </time>\n </MessageMetadata>\n );\n}\n"],"mappings":";;;;;;;AAcA,SAAgB,QAAQ,EAAE,MAAM,QAAQ,QAAQ,aAAa,SAAS,UAAU,WAAW,GAAG,SAAuB;CACnH,MAAM,SAAS,SAAS;CAExB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EACE,GAAI;EACJ,aAAU;EACV,aAAW;EACX,wBAAsB,WAAW,KAAA;EACjC,WAAWA,cAAAA,GACT,oCACA,UAAU,yDACV,CAAC,UAAU,UAAU,QACrB,SACF;EAVF,UAAA,CAYG,QACD,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAWA,cAAAA,GAAG,WAAW,UAAU,yBAAyB;GAAjE,UAAA;IACG,eACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,aAAU;KAAsB,WAAU;KAC5C,UAAA;IACE,CAAA;IAEN,aAAa,KAAA,KAAa,aAAa,QAAQ,aAAa,SAC3D,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KACE,aAAU;KACV,WAAWA,cAAAA,GACT,4CACA,UAAUA,cAAAA,GAAAA,yEAAwB,WAAW,GAC7C,UAAU,WAAW,sCACrB,CAAC,UAAU,UAAU,sBACvB;KAEC;IACE,CAAA;IAEN,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KAAmB,UAAA;IAAY,CAAA;GACtD;EACF,CAAA,CAAA;;AAET;AAMA,SAAgB,eAAe,EAAE,aAAa,SAAS,UAAU,WAAW,GAAG,SAA8B;CAC3G,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,GAAI;EACJ,aAAU;EACV,WAAWA,cAAAA,GACT,qFACA,wGACA,eAAe,WACb,iGACF,SACF;EAEC;CACE,CAAA;AAET;AAEA,SAAgB,gBAAgB,EAAE,WAAW,GAAG,SAAiC;CAC/E,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,YAAAA,KAAD;EAAK,GAAI;EAAO,IAAG;EAAO,SAAQ;EAAO,MAAK;EAAQ,WAAWD,cAAAA,GAAG,kCAAkC,SAAS;CAAI,CAAA;AAEvH;;AChFA,SAAgB,kBAAkB,EAAE,QAA0B;CAC5D,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACE,oBAAAA,YAAD;EAAY,SAAS;EAAM,MAAK;EAAU,SAAQ;EAAQ,SAAQ;EAAe,WAAW;CAAQ,CAAA;AAC7G;;ACDA,SAAgB,iBAAiB,EAAE,SAAmC;CACpE,MAAM,OAAOC,0BAAAA,OAAO,KAAK;CACzB,IAAI,CAAC,MAAM,OAAO;CAElB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,UAAU,KAAK,YAAY;EAAG,OAAOC,0BAAAA,WAAW,MAAM,WAAW;EACpE,UAAAA,0BAAAA,WAAW,MAAM,MAAM;CACpB,CAAA,EACS,CAAA;AAErB"}
1
+ {"version":3,"file":"Message-DsCNQpou.cjs","names":["cn","Txt","CopyButton","toDate","formatDate"],"sources":["../src/ds/components/Message/message.tsx","../src/ds/components/Message/message-copy-button.tsx","../src/ds/components/Message/message-timestamp.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { Txt } from '@/ds/components/Txt';\nimport { messageSurfaceStyle } from '@/ds/primitives/message-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface MessageProps extends ComponentProps<'div'> {\n from: 'user' | 'assistant';\n avatar?: ReactNode;\n footer?: ReactNode;\n /** Sent files, displayed above and outside the text bubble. */\n attachments?: ReactNode;\n pending?: boolean;\n}\n\nexport function Message({ from, avatar, footer, attachments, pending, children, className, ...props }: MessageProps) {\n const isUser = from === 'user';\n\n return (\n <div\n {...props}\n data-slot=\"message\"\n data-from={from}\n data-message-pending={pending || undefined}\n className={cn(\n 'group/message max-w-full min-w-0',\n isUser && 'my-3 ml-auto flex w-fit max-w-[70%] items-start gap-2',\n !isUser && footer && 'mb-3',\n className,\n )}\n >\n {avatar}\n <div className={cn('min-w-0', isUser && 'flex flex-col items-end')}>\n {attachments && (\n <div data-slot=\"message-attachments\" className=\"mb-2 max-w-full min-w-0\">\n {attachments}\n </div>\n )}\n {children !== undefined && children !== null && children !== false && (\n <div\n data-slot=\"message-content\"\n className={cn(\n 'max-w-full min-w-0 text-body break-words',\n isUser && cn(messageSurfaceStyle, 'px-4 py-2'),\n isUser && pending && 'border border-dashed border-border',\n !isUser && footer && '[&>:last-child]:mb-0',\n )}\n >\n {children}\n </div>\n )}\n {footer && <div className=\"mt-1 max-w-full\">{footer}</div>}\n </div>\n </div>\n );\n}\n\nexport interface MessageActionsProps extends ComponentProps<'div'> {\n visibility?: 'hover' | 'always';\n}\n\nexport function MessageActions({ visibility = 'hover', children, className, ...props }: MessageActionsProps) {\n return (\n <div\n {...props}\n data-slot=\"message-actions\"\n className={cn(\n 'flex flex-wrap items-center gap-1 group-data-[from=user]/message:flex-row-reverse',\n 'motion-safe:transition-opacity [&_button]:pointer-coarse:min-h-11 [&_button]:pointer-coarse:min-w-11',\n visibility === 'hover' &&\n 'group-focus-within/message:opacity-100 group-hover/message:opacity-100 pointer-fine:opacity-0',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\nexport function MessageMetadata({ className, ...props }: ComponentProps<'span'>) {\n return (\n <Txt\n {...props}\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n className={cn('inline-flex items-center gap-1', className)}\n />\n );\n}\n","import { CopyButton } from '../CopyButton';\n\nexport function MessageCopyButton({ text }: { text: string }) {\n return <CopyButton content={text} size=\"icon-sm\" variant=\"ghost\" tooltip=\"Copy message\" showToast={false} />;\n}\n","import { MessageMetadata } from './message';\nimport { formatDate, toDate } from '@/utils/date-format';\n\nexport function MessageTimestamp({ value }: { value: Date | string }) {\n const time = toDate(value);\n if (!time) return null;\n\n return (\n <MessageMetadata>\n <time dateTime={time.toISOString()} title={formatDate(time, 'date-time')}>\n {formatDate(time, 'time')}\n </time>\n </MessageMetadata>\n );\n}\n"],"mappings":";;;;;;;AAcA,SAAgB,QAAQ,EAAE,MAAM,QAAQ,QAAQ,aAAa,SAAS,UAAU,WAAW,GAAG,SAAuB;CACnH,MAAM,SAAS,SAAS;CAExB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EACE,GAAI;EACJ,aAAU;EACV,aAAW;EACX,wBAAsB,WAAW,KAAA;EACjC,WAAWA,cAAAA,GACT,oCACA,UAAU,yDACV,CAAC,UAAU,UAAU,QACrB,SACF;EAVF,UAAA,CAYG,QACD,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAWA,cAAAA,GAAG,WAAW,UAAU,yBAAyB;GAAjE,UAAA;IACG,eACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,aAAU;KAAsB,WAAU;KAC5C,UAAA;IACE,CAAA;IAEN,aAAa,KAAA,KAAa,aAAa,QAAQ,aAAa,SAC3D,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KACE,aAAU;KACV,WAAWA,cAAAA,GACT,4CACA,UAAUA,cAAAA,GAAAA,yEAAwB,WAAW,GAC7C,UAAU,WAAW,sCACrB,CAAC,UAAU,UAAU,sBACvB;KAEC;IACE,CAAA;IAEN,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KAAmB,UAAA;IAAY,CAAA;GACtD;EACF,CAAA,CAAA;;AAET;AAMA,SAAgB,eAAe,EAAE,aAAa,SAAS,UAAU,WAAW,GAAG,SAA8B;CAC3G,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,GAAI;EACJ,aAAU;EACV,WAAWA,cAAAA,GACT,qFACA,wGACA,eAAe,WACb,iGACF,SACF;EAEC;CACE,CAAA;AAET;AAEA,SAAgB,gBAAgB,EAAE,WAAW,GAAG,SAAiC;CAC/E,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,YAAAA,KAAD;EACE,GAAI;EACJ,IAAG;EACH,SAAQ;EACR,MAAK;EACL,WAAWD,cAAAA,GAAG,kCAAkC,SAAS;CAC1D,CAAA;AAEL;;ACtFA,SAAgB,kBAAkB,EAAE,QAA0B;CAC5D,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACE,oBAAAA,YAAD;EAAY,SAAS;EAAM,MAAK;EAAU,SAAQ;EAAQ,SAAQ;EAAe,WAAW;CAAQ,CAAA;AAC7G;;ACDA,SAAgB,iBAAiB,EAAE,SAAmC;CACpE,MAAM,OAAOC,0BAAAA,OAAO,KAAK;CACzB,IAAI,CAAC,MAAM,OAAO;CAElB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,UAAU,KAAK,YAAY;EAAG,OAAOC,0BAAAA,WAAW,MAAM,WAAW;EACpE,UAAAA,0BAAAA,WAAW,MAAM,MAAM;CACpB,CAAA,EACS,CAAA;AAErB"}
@@ -46,7 +46,7 @@ function MessageMetadata({ className, ...props }) {
46
46
  return /* @__PURE__ */ jsx(Txt, {
47
47
  ...props,
48
48
  as: "span",
49
- variant: "meta",
49
+ variant: "caption",
50
50
  tone: "muted",
51
51
  className: cn("inline-flex items-center gap-1", className)
52
52
  });
@@ -73,4 +73,4 @@ function MessageTimestamp({ value }) {
73
73
  }
74
74
  export { MessageMetadata as a, MessageActions as i, MessageCopyButton as n, Message as r, MessageTimestamp as t };
75
75
 
76
- //# sourceMappingURL=Message-Bkf6Ro9H.js.map
76
+ //# sourceMappingURL=Message-nVI6tMS3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Message-Bkf6Ro9H.js","names":[],"sources":["../src/ds/components/Message/message.tsx","../src/ds/components/Message/message-copy-button.tsx","../src/ds/components/Message/message-timestamp.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { Txt } from '@/ds/components/Txt';\nimport { messageSurfaceStyle } from '@/ds/primitives/message-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface MessageProps extends ComponentProps<'div'> {\n from: 'user' | 'assistant';\n avatar?: ReactNode;\n footer?: ReactNode;\n /** Sent files, displayed above and outside the text bubble. */\n attachments?: ReactNode;\n pending?: boolean;\n}\n\nexport function Message({ from, avatar, footer, attachments, pending, children, className, ...props }: MessageProps) {\n const isUser = from === 'user';\n\n return (\n <div\n {...props}\n data-slot=\"message\"\n data-from={from}\n data-message-pending={pending || undefined}\n className={cn(\n 'group/message max-w-full min-w-0',\n isUser && 'my-3 ml-auto flex w-fit max-w-[70%] items-start gap-2',\n !isUser && footer && 'mb-3',\n className,\n )}\n >\n {avatar}\n <div className={cn('min-w-0', isUser && 'flex flex-col items-end')}>\n {attachments && (\n <div data-slot=\"message-attachments\" className=\"mb-2 max-w-full min-w-0\">\n {attachments}\n </div>\n )}\n {children !== undefined && children !== null && children !== false && (\n <div\n data-slot=\"message-content\"\n className={cn(\n 'max-w-full min-w-0 text-body break-words',\n isUser && cn(messageSurfaceStyle, 'px-4 py-2'),\n isUser && pending && 'border border-dashed border-border',\n !isUser && footer && '[&>:last-child]:mb-0',\n )}\n >\n {children}\n </div>\n )}\n {footer && <div className=\"mt-1 max-w-full\">{footer}</div>}\n </div>\n </div>\n );\n}\n\nexport interface MessageActionsProps extends ComponentProps<'div'> {\n visibility?: 'hover' | 'always';\n}\n\nexport function MessageActions({ visibility = 'hover', children, className, ...props }: MessageActionsProps) {\n return (\n <div\n {...props}\n data-slot=\"message-actions\"\n className={cn(\n 'flex flex-wrap items-center gap-1 group-data-[from=user]/message:flex-row-reverse',\n 'motion-safe:transition-opacity [&_button]:pointer-coarse:min-h-11 [&_button]:pointer-coarse:min-w-11',\n visibility === 'hover' &&\n 'group-focus-within/message:opacity-100 group-hover/message:opacity-100 pointer-fine:opacity-0',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\nexport function MessageMetadata({ className, ...props }: ComponentProps<'span'>) {\n return (\n <Txt {...props} as=\"span\" variant=\"meta\" tone=\"muted\" className={cn('inline-flex items-center gap-1', className)} />\n );\n}\n","import { CopyButton } from '../CopyButton';\n\nexport function MessageCopyButton({ text }: { text: string }) {\n return <CopyButton content={text} size=\"icon-sm\" variant=\"ghost\" tooltip=\"Copy message\" showToast={false} />;\n}\n","import { MessageMetadata } from './message';\nimport { formatDate, toDate } from '@/utils/date-format';\n\nexport function MessageTimestamp({ value }: { value: Date | string }) {\n const time = toDate(value);\n if (!time) return null;\n\n return (\n <MessageMetadata>\n <time dateTime={time.toISOString()} title={formatDate(time, 'date-time')}>\n {formatDate(time, 'time')}\n </time>\n </MessageMetadata>\n );\n}\n"],"mappings":";;;;;;;AAcA,SAAgB,QAAQ,EAAE,MAAM,QAAQ,QAAQ,aAAa,SAAS,UAAU,WAAW,GAAG,SAAuB;CACnH,MAAM,SAAS,SAAS;CAExB,OACE,qBAAC,OAAD;EACE,GAAI;EACJ,aAAU;EACV,aAAW;EACX,wBAAsB,WAAW,KAAA;EACjC,WAAW,GACT,oCACA,UAAU,yDACV,CAAC,UAAU,UAAU,QACrB,SACF;EAVF,UAAA,CAYG,QACD,qBAAC,OAAD;GAAK,WAAW,GAAG,WAAW,UAAU,yBAAyB;GAAjE,UAAA;IACG,eACC,oBAAC,OAAD;KAAK,aAAU;KAAsB,WAAU;KAC5C,UAAA;IACE,CAAA;IAEN,aAAa,KAAA,KAAa,aAAa,QAAQ,aAAa,SAC3D,oBAAC,OAAD;KACE,aAAU;KACV,WAAW,GACT,4CACA,UAAU,GAAA,yEAAwB,WAAW,GAC7C,UAAU,WAAW,sCACrB,CAAC,UAAU,UAAU,sBACvB;KAEC;IACE,CAAA;IAEN,UAAU,oBAAC,OAAD;KAAK,WAAU;KAAmB,UAAA;IAAY,CAAA;GACtD;EACF,CAAA,CAAA;;AAET;AAMA,SAAgB,eAAe,EAAE,aAAa,SAAS,UAAU,WAAW,GAAG,SAA8B;CAC3G,OACE,oBAAC,OAAD;EACE,GAAI;EACJ,aAAU;EACV,WAAW,GACT,qFACA,wGACA,eAAe,WACb,iGACF,SACF;EAEC;CACE,CAAA;AAET;AAEA,SAAgB,gBAAgB,EAAE,WAAW,GAAG,SAAiC;CAC/E,OACE,oBAAC,KAAD;EAAK,GAAI;EAAO,IAAG;EAAO,SAAQ;EAAO,MAAK;EAAQ,WAAW,GAAG,kCAAkC,SAAS;CAAI,CAAA;AAEvH;;AChFA,SAAgB,kBAAkB,EAAE,QAA0B;CAC5D,OAAO,oBAAC,YAAD;EAAY,SAAS;EAAM,MAAK;EAAU,SAAQ;EAAQ,SAAQ;EAAe,WAAW;CAAQ,CAAA;AAC7G;;ACDA,SAAgB,iBAAiB,EAAE,SAAmC;CACpE,MAAM,OAAO,OAAO,KAAK;CACzB,IAAI,CAAC,MAAM,OAAO;CAElB,OACE,oBAAC,iBAAD,EAAA,UACE,oBAAC,QAAD;EAAM,UAAU,KAAK,YAAY;EAAG,OAAO,WAAW,MAAM,WAAW;EACpE,UAAA,WAAW,MAAM,MAAM;CACpB,CAAA,EACS,CAAA;AAErB"}
1
+ {"version":3,"file":"Message-nVI6tMS3.js","names":[],"sources":["../src/ds/components/Message/message.tsx","../src/ds/components/Message/message-copy-button.tsx","../src/ds/components/Message/message-timestamp.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { Txt } from '@/ds/components/Txt';\nimport { messageSurfaceStyle } from '@/ds/primitives/message-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface MessageProps extends ComponentProps<'div'> {\n from: 'user' | 'assistant';\n avatar?: ReactNode;\n footer?: ReactNode;\n /** Sent files, displayed above and outside the text bubble. */\n attachments?: ReactNode;\n pending?: boolean;\n}\n\nexport function Message({ from, avatar, footer, attachments, pending, children, className, ...props }: MessageProps) {\n const isUser = from === 'user';\n\n return (\n <div\n {...props}\n data-slot=\"message\"\n data-from={from}\n data-message-pending={pending || undefined}\n className={cn(\n 'group/message max-w-full min-w-0',\n isUser && 'my-3 ml-auto flex w-fit max-w-[70%] items-start gap-2',\n !isUser && footer && 'mb-3',\n className,\n )}\n >\n {avatar}\n <div className={cn('min-w-0', isUser && 'flex flex-col items-end')}>\n {attachments && (\n <div data-slot=\"message-attachments\" className=\"mb-2 max-w-full min-w-0\">\n {attachments}\n </div>\n )}\n {children !== undefined && children !== null && children !== false && (\n <div\n data-slot=\"message-content\"\n className={cn(\n 'max-w-full min-w-0 text-body break-words',\n isUser && cn(messageSurfaceStyle, 'px-4 py-2'),\n isUser && pending && 'border border-dashed border-border',\n !isUser && footer && '[&>:last-child]:mb-0',\n )}\n >\n {children}\n </div>\n )}\n {footer && <div className=\"mt-1 max-w-full\">{footer}</div>}\n </div>\n </div>\n );\n}\n\nexport interface MessageActionsProps extends ComponentProps<'div'> {\n visibility?: 'hover' | 'always';\n}\n\nexport function MessageActions({ visibility = 'hover', children, className, ...props }: MessageActionsProps) {\n return (\n <div\n {...props}\n data-slot=\"message-actions\"\n className={cn(\n 'flex flex-wrap items-center gap-1 group-data-[from=user]/message:flex-row-reverse',\n 'motion-safe:transition-opacity [&_button]:pointer-coarse:min-h-11 [&_button]:pointer-coarse:min-w-11',\n visibility === 'hover' &&\n 'group-focus-within/message:opacity-100 group-hover/message:opacity-100 pointer-fine:opacity-0',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\nexport function MessageMetadata({ className, ...props }: ComponentProps<'span'>) {\n return (\n <Txt\n {...props}\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n className={cn('inline-flex items-center gap-1', className)}\n />\n );\n}\n","import { CopyButton } from '../CopyButton';\n\nexport function MessageCopyButton({ text }: { text: string }) {\n return <CopyButton content={text} size=\"icon-sm\" variant=\"ghost\" tooltip=\"Copy message\" showToast={false} />;\n}\n","import { MessageMetadata } from './message';\nimport { formatDate, toDate } from '@/utils/date-format';\n\nexport function MessageTimestamp({ value }: { value: Date | string }) {\n const time = toDate(value);\n if (!time) return null;\n\n return (\n <MessageMetadata>\n <time dateTime={time.toISOString()} title={formatDate(time, 'date-time')}>\n {formatDate(time, 'time')}\n </time>\n </MessageMetadata>\n );\n}\n"],"mappings":";;;;;;;AAcA,SAAgB,QAAQ,EAAE,MAAM,QAAQ,QAAQ,aAAa,SAAS,UAAU,WAAW,GAAG,SAAuB;CACnH,MAAM,SAAS,SAAS;CAExB,OACE,qBAAC,OAAD;EACE,GAAI;EACJ,aAAU;EACV,aAAW;EACX,wBAAsB,WAAW,KAAA;EACjC,WAAW,GACT,oCACA,UAAU,yDACV,CAAC,UAAU,UAAU,QACrB,SACF;EAVF,UAAA,CAYG,QACD,qBAAC,OAAD;GAAK,WAAW,GAAG,WAAW,UAAU,yBAAyB;GAAjE,UAAA;IACG,eACC,oBAAC,OAAD;KAAK,aAAU;KAAsB,WAAU;KAC5C,UAAA;IACE,CAAA;IAEN,aAAa,KAAA,KAAa,aAAa,QAAQ,aAAa,SAC3D,oBAAC,OAAD;KACE,aAAU;KACV,WAAW,GACT,4CACA,UAAU,GAAA,yEAAwB,WAAW,GAC7C,UAAU,WAAW,sCACrB,CAAC,UAAU,UAAU,sBACvB;KAEC;IACE,CAAA;IAEN,UAAU,oBAAC,OAAD;KAAK,WAAU;KAAmB,UAAA;IAAY,CAAA;GACtD;EACF,CAAA,CAAA;;AAET;AAMA,SAAgB,eAAe,EAAE,aAAa,SAAS,UAAU,WAAW,GAAG,SAA8B;CAC3G,OACE,oBAAC,OAAD;EACE,GAAI;EACJ,aAAU;EACV,WAAW,GACT,qFACA,wGACA,eAAe,WACb,iGACF,SACF;EAEC;CACE,CAAA;AAET;AAEA,SAAgB,gBAAgB,EAAE,WAAW,GAAG,SAAiC;CAC/E,OACE,oBAAC,KAAD;EACE,GAAI;EACJ,IAAG;EACH,SAAQ;EACR,MAAK;EACL,WAAW,GAAG,kCAAkC,SAAS;CAC1D,CAAA;AAEL;;ACtFA,SAAgB,kBAAkB,EAAE,QAA0B;CAC5D,OAAO,oBAAC,YAAD;EAAY,SAAS;EAAM,MAAK;EAAU,SAAQ;EAAQ,SAAQ;EAAe,WAAW;CAAQ,CAAA;AAC7G;;ACDA,SAAgB,iBAAiB,EAAE,SAAmC;CACpE,MAAM,OAAO,OAAO,KAAK;CACzB,IAAI,CAAC,MAAM,OAAO;CAElB,OACE,oBAAC,iBAAD,EAAA,UACE,oBAAC,QAAD;EAAM,UAAU,KAAK,YAAY;EAAG,OAAO,WAAW,MAAM,WAAW;EACpE,UAAA,WAAW,MAAM,MAAM;CACpB,CAAA,EACS,CAAA;AAErB"}
@@ -1,19 +1,19 @@
1
1
  const require_utils = require("./utils-uDc1ofX1.cjs");
2
2
  const require_Txt = require("./Txt-BnoSqxKE.cjs");
3
3
  const require_dropdown_menu = require("./dropdown-menu-BETTTPBB.cjs");
4
- const require_tabs_tab = require("./tabs-tab-Qp3RJ17z.cjs");
5
4
  const require_components_Skeleton = require("./components/Skeleton.cjs.js");
6
5
  const require_spinner = require("./spinner-C8ZxiA5C.cjs");
6
+ const require_MetricsKpiCard = require("./MetricsKpiCard-By_-sagx.cjs");
7
7
  const require_Card = require("./Card-C6iEBgVq.cjs");
8
- const require_MetricsKpiCard = require("./MetricsKpiCard-Uw0nyMgW.cjs");
9
8
  let react_jsx_runtime = require("react/jsx-runtime");
10
9
  let lucide_react = require("lucide-react");
11
10
  // src/ds/components/MetricsCard/metrics-card-actions.tsx
12
11
  /** Container for icon buttons / small actions in the top bar of a MetricsCard,
13
- * placed between `TitleAndDescription` and `Summary` (which always renders last). */
12
+ * placed between the title and `Total` (which always renders last). Small (28px) buttons sit
13
+ * centered on the 20px title line without making the top bar taller. */
14
14
  function MetricsCardActions({ children, reveal = "always", className }) {
15
15
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
16
- className: require_utils.cn("flex shrink-0 items-center gap-1 self-center", reveal === "hover" && "opacity-0 transition-opacity duration-150 group-hover/metrics-card:opacity-100 focus-within:opacity-100", className),
16
+ className: require_utils.cn("-my-1 flex shrink-0 items-center gap-1 self-start", reveal === "hover" && "opacity-0 transition-opacity duration-150 group-hover/metrics-card:opacity-100 focus-within:opacity-100", className),
17
17
  children
18
18
  });
19
19
  }
@@ -29,14 +29,6 @@ function MetricsCardContent({ children, className }) {
29
29
  children
30
30
  });
31
31
  }
32
- // src/ds/components/MetricsCard/metrics-card-description.tsx
33
- function MetricsCardDescription({ children, className }) {
34
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
35
- tone: "faint",
36
- className: require_utils.cn("mt-0.5", className),
37
- children
38
- });
39
- }
40
32
  // src/ds/components/MetricsCard/metrics-card-error.tsx
41
33
  function MetricsCardError({ message = "Failed to load data", className }) {
42
34
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
@@ -48,6 +40,33 @@ function MetricsCardError({ message = "Failed to load data", className }) {
48
40
  })
49
41
  });
50
42
  }
43
+ // src/ds/components/MetricsCard/metrics-card-headline.tsx
44
+ /**
45
+ * The header of a card with one large chart (an explorer, a detail page): the label over a large
46
+ * value, the change against the previous period beside it. Cards in a grid use the compact title
47
+ * and `MetricsCard.Total` instead. A skeleton while loading, in the value's own line box.
48
+ */
49
+ function MetricsCardHeadline({ label, value, change, isLoading = false, className }) {
50
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
51
+ className: require_utils.cn("grid gap-1.5", className),
52
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
53
+ className: "text-body-sm text-muted-foreground",
54
+ children: label
55
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
56
+ className: "flex items-baseline gap-2",
57
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
58
+ className: "text-title text-foreground tabular-nums [text-box:trim-both_cap_alphabetic]",
59
+ children: isLoading ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Skeleton.SkeletonText, {
60
+ line: "text-title",
61
+ className: "w-24"
62
+ }) : value
63
+ }), !isLoading && change && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
64
+ className: "text-body-sm text-muted-foreground tabular-nums",
65
+ children: [change, " vs previous"]
66
+ })]
67
+ })]
68
+ });
69
+ }
51
70
  // src/ds/components/MetricsCard/metrics-card-loading.tsx
52
71
  function MetricsCardLoading({ className }) {
53
72
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
@@ -76,106 +95,46 @@ function MetricsCardRoot({ children, className }) {
76
95
  children
77
96
  });
78
97
  }
79
- // src/ds/components/MetricsCard/metrics-card-summary.tsx
80
- /** Always the top bar's last item, so action buttons sit to its left and the value hugs the edge. */
81
- function MetricsCardSummary({ value, label, isLoading = false, className }) {
82
- if (isLoading) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
83
- className: require_utils.cn("order-last flex shrink-0 flex-col items-end", className),
84
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Skeleton.SkeletonText, {
85
- line: "text-body",
86
- className: "h-4 w-14"
87
- }), label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Skeleton.SkeletonText, {
88
- line: "text-body mt-0.5",
89
- className: "w-10"
90
- })]
91
- });
92
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
93
- className: require_utils.cn("order-last text-right", className),
94
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
95
- tone: "muted",
96
- className: "tabular-nums",
97
- children: value
98
- }), label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
99
- tone: "faint",
100
- className: "mt-0.5",
101
- children: label
102
- })]
103
- });
104
- }
105
- // src/ds/components/MetricsCard/metrics-card-tabs.tsx
106
- /**
107
- * The view switch in a metrics card's toolbar (e.g. Agents / Workflows / Tools): ghost tabs a
108
- * size under the control rung, so the switch stays quieter than the data. Metrics cards only;
109
- * anywhere else use `TabList`, which lines up with buttons and inputs.
110
- */
111
- function MetricsCardTabs({ value, onValueChange, children }) {
112
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_tabs_tab.Tabs, {
113
- value,
114
- onValueChange,
115
- defaultTab: value,
116
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_tabs_tab.TabList, {
117
- variant: "pill-ghost",
118
- size: "sm",
119
- children
120
- })
121
- });
122
- }
123
- /** One `MetricsCard.Tabs` option: 24px tall with 12px labels. */
124
- function MetricsCardTab({ className, ...props }) {
125
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_tabs_tab.Tab, {
126
- ...props,
127
- className: require_utils.cn("h-6 px-2.5 text-column", className)
128
- });
129
- }
130
98
  // src/ds/components/MetricsCard/metrics-card-title.tsx
131
- function MetricsCardTitle({ children, className, as: Tag = "h2", weight = "regular" }) {
99
+ function MetricsCardTitle({ children, className, as: Tag = "h3" }) {
132
100
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Tag, {
133
- className: require_utils.cn("text-body text-foreground", weight === "medium" && "font-medium", className),
101
+ className: require_utils.cn("text-body font-medium text-foreground", className),
134
102
  children
135
103
  });
136
104
  }
137
- // src/ds/components/MetricsCard/metrics-card-title-and-description.tsx
138
- function MetricsCardTitleAndDescription(props) {
139
- if ("children" in props) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
140
- className: props.className,
141
- children: props.children
142
- });
143
- const { title, description, titleAs } = props;
144
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
145
- className: props.className,
146
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MetricsCardTitle, {
147
- as: titleAs,
148
- children: title
149
- }), description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MetricsCardDescription, { children: description })]
150
- });
151
- }
152
105
  // src/ds/components/MetricsCard/metrics-card-title-menu.tsx
153
106
  /**
154
107
  * A card title that switches the card's view, as on Vercel's usage cards: the title is the
155
108
  * trigger, with a chevron. The hover fill bleeds past the text so the title stays aligned.
109
+ * Wrapped, so the top bar stretches the wrapper rather than the button, and the menu's open-state
110
+ * nodes next to the trigger don't become the top bar's first child.
156
111
  */
157
112
  function MetricsCardTitleMenu({ title, value, onValueChange, options, className }) {
158
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_dropdown_menu.DropdownMenu, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_dropdown_menu.DropdownMenu.Trigger, {
159
- render: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
160
- type: "button",
161
- className: require_utils.cn("-mx-1.5 -my-0.5 flex items-center gap-1 self-start rounded-md px-1.5 py-0.5 text-left text-body font-medium text-foreground hover:bg-fill-subtle", className)
162
- }),
163
- children: [title, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronDownIcon, { className: "size-3.5 text-muted-foreground" })]
164
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_dropdown_menu.DropdownMenu.Content, {
165
- align: "start",
166
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_dropdown_menu.DropdownMenu.RadioOptions, {
167
- options,
168
- value,
169
- onValueChange
170
- })
171
- })] });
113
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
114
+ className: "flex min-w-0",
115
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_dropdown_menu.DropdownMenu, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_dropdown_menu.DropdownMenu.Trigger, {
116
+ render: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
117
+ type: "button",
118
+ className: require_utils.cn("-mx-1.5 -my-0.5 flex items-center gap-1 self-start rounded-md px-1.5 py-0.5 text-left text-body font-medium text-foreground hover:bg-fill-subtle", className)
119
+ }),
120
+ children: [title, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronDownIcon, { className: "size-3.5 text-muted-foreground" })]
121
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_dropdown_menu.DropdownMenu.Content, {
122
+ align: "start",
123
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_dropdown_menu.DropdownMenu.RadioOptions, {
124
+ options,
125
+ value,
126
+ onValueChange,
127
+ closeOnSelect: true
128
+ })
129
+ })] })
130
+ });
172
131
  }
173
132
  // src/ds/components/MetricsCard/metrics-card-toolbar.tsx
174
133
  /**
175
- * One row under the top bar for a card's controls: small tabs, a legend, list column headers.
134
+ * One row under the top bar for a card's controls: a legend, list column headers.
176
135
  * The first child sits on the left, the last on the right; either side may be omitted. When
177
- * both don't fit (a narrow card), the right side wraps to its own line, still on the right. At least as
178
- * tall as `MetricsCard.Tabs`, so a legend-only toolbar matches a card with tabs in the same row.
136
+ * both don't fit (a narrow card), the right side wraps to its own line, still on the right. At least 24px
137
+ * tall, so toolbars line up across cards in the same row.
179
138
  */
180
139
  function MetricsCardToolbar({ children, className }) {
181
140
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
@@ -192,16 +151,43 @@ function MetricsCardTopBar({ children, className }) {
192
151
  }
193
152
  // src/ds/components/MetricsCard/metrics-card-total.tsx
194
153
  /**
195
- * A compact card's total, right of the title in the same type (14px, medium). Always the top
196
- * bar's last item. A skeleton while loading, in the value's own line box.
154
+ * A card's total, right of the title in the same type (14px, medium). Always the top
155
+ * bar's last item. A skeleton while loading, in the value's own line box. A card charting a
156
+ * few series of different things (resources, threads) can give one total each, each after a
157
+ * marker in its series' color, like the legend.
197
158
  */
198
159
  function MetricsCardTotal({ value, isLoading = false, className }) {
199
160
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
200
161
  className: require_utils.cn("order-last shrink-0 text-body font-medium text-foreground tabular-nums", className),
201
- children: isLoading ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Skeleton.SkeletonText, {
202
- line: "text-body",
203
- className: "h-4 w-14"
204
- }) : value
162
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TotalValue, {
163
+ value,
164
+ isLoading
165
+ })
166
+ });
167
+ }
168
+ function TotalValue({ value, isLoading }) {
169
+ if (isLoading) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Skeleton.SkeletonText, {
170
+ line: "text-body",
171
+ className: "h-4 w-14"
172
+ });
173
+ if (typeof value === "string") return value;
174
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
175
+ className: "inline-flex items-center gap-3",
176
+ children: value.map((part) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
177
+ className: "inline-flex items-center gap-1.5",
178
+ children: [
179
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
180
+ "aria-hidden": true,
181
+ className: "size-2 shrink-0 rounded-[2px]",
182
+ style: { backgroundColor: part.color }
183
+ }),
184
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
185
+ className: "sr-only",
186
+ children: [part.label, " "]
187
+ }),
188
+ part.value
189
+ ]
190
+ }, part.label))
205
191
  });
206
192
  }
207
193
  // src/ds/components/MetricsCard/metrics-card.tsx
@@ -210,15 +196,11 @@ var MetricsCard = Object.assign(MetricsCardRoot, {
210
196
  Kpi: require_MetricsKpiCard.MetricsKpiCard,
211
197
  TopBar: MetricsCardTopBar,
212
198
  Toolbar: MetricsCardToolbar,
213
- Tabs: MetricsCardTabs,
214
- Tab: MetricsCardTab,
215
199
  Actions: MetricsCardActions,
216
- TitleAndDescription: MetricsCardTitleAndDescription,
217
200
  Title: MetricsCardTitle,
218
201
  TitleMenu: MetricsCardTitleMenu,
219
- Description: MetricsCardDescription,
220
- Summary: MetricsCardSummary,
221
202
  Total: MetricsCardTotal,
203
+ Headline: MetricsCardHeadline,
222
204
  Loading: MetricsCardLoading,
223
205
  Error: MetricsCardError,
224
206
  Content: MetricsCardContent,
@@ -231,4 +213,4 @@ Object.defineProperty(exports, "MetricsCard", {
231
213
  }
232
214
  });
233
215
 
234
- //# sourceMappingURL=MetricsCard-Dly_H3oX.cjs.map
216
+ //# sourceMappingURL=MetricsCard-CEB-f2sv.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsCard-CEB-f2sv.cjs","names":["cn","cn","cn","Txt","cn","SkeletonText","cn","Spinner","cn","Txt","Card","cn","cn","DropdownMenu","cn","ChevronDownIcon","cn","cn","cn","SkeletonText","MetricsKpiCard"],"sources":["../src/ds/components/MetricsCard/metrics-card-actions.tsx","../src/ds/components/MetricsCard/metrics-card-content.tsx","../src/ds/components/MetricsCard/metrics-card-error.tsx","../src/ds/components/MetricsCard/metrics-card-headline.tsx","../src/ds/components/MetricsCard/metrics-card-loading.tsx","../src/ds/components/MetricsCard/metrics-card-no-data.tsx","../src/ds/components/MetricsCard/metrics-card-root.tsx","../src/ds/components/MetricsCard/metrics-card-title.tsx","../src/ds/components/MetricsCard/metrics-card-title-menu.tsx","../src/ds/components/MetricsCard/metrics-card-toolbar.tsx","../src/ds/components/MetricsCard/metrics-card-top-bar.tsx","../src/ds/components/MetricsCard/metrics-card-total.tsx","../src/ds/components/MetricsCard/metrics-card.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\n/** Container for icon buttons / small actions in the top bar of a MetricsCard,\n * placed between the title and `Total` (which always renders last). Small (28px) buttons sit\n * centered on the 20px title line without making the top bar taller. */\nexport function MetricsCardActions({\n children,\n reveal = 'always',\n className,\n}: {\n children: ReactNode;\n /**\n * `hover`: the actions appear while the card is hovered or one of them has focus, so a page\n * of cards doesn't read as a page of buttons.\n */\n reveal?: 'always' | 'hover';\n className?: string;\n}) {\n return (\n <div\n className={cn(\n '-my-1 flex shrink-0 items-center gap-1 self-start',\n reveal === 'hover' &&\n 'opacity-0 transition-opacity duration-150 group-hover/metrics-card:opacity-100 focus-within:opacity-100',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\n/**\n * Scrolls sideways only (wide tables). Vertical overflow is hidden: a chart filling a card with a\n * fractional height rounds 1px past it, which otherwise turns the content into a scroll box.\n * Tables inside a card drop the last row's border: the card edge already closes them.\n */\nexport function MetricsCardContent({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <div className={cn('overflow-x-auto overflow-y-hidden [&_tbody>tr:last-child]:border-b-0', className)}>\n {children}\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardError({\n message = 'Failed to load data',\n className,\n}: {\n message?: string;\n className?: string;\n}) {\n return (\n <div className={cn('flex flex-col items-center justify-center gap-3', className)}>\n <Txt variant=\"caption\" className=\"text-destructive-foreground\">\n {message}\n </Txt>\n </div>\n );\n}\n","import { SkeletonText } from '@/ds/components/Skeleton';\nimport { cn } from '@/lib/utils';\n\n/**\n * The header of a card with one large chart (an explorer, a detail page): the label over a large\n * value, the change against the previous period beside it. Cards in a grid use the compact title\n * and `MetricsCard.Total` instead. A skeleton while loading, in the value's own line box.\n */\nexport function MetricsCardHeadline({\n label,\n value,\n change,\n isLoading = false,\n className,\n}: {\n label: string;\n value: string;\n /** E.g. \"+71.4%\"; shown as \"+71.4% vs previous\". */\n change?: string;\n isLoading?: boolean;\n className?: string;\n}) {\n return (\n <div className={cn('grid gap-1.5', className)}>\n <h3 className=\"text-body-sm text-muted-foreground\">{label}</h3>\n <span className=\"flex items-baseline gap-2\">\n <span className=\"text-title text-foreground tabular-nums [text-box:trim-both_cap_alphabetic]\">\n {isLoading ? <SkeletonText line=\"text-title\" className=\"w-24\" /> : value}\n </span>\n {!isLoading && change && (\n <span className=\"text-body-sm text-muted-foreground tabular-nums\">{change} vs previous</span>\n )}\n </span>\n </div>\n );\n}\n","import { Spinner } from '@/ds/components/Spinner/spinner';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardLoading({ className }: { className?: string }) {\n return (\n <div className={cn('flex items-center justify-center', className)}>\n <Spinner size=\"md\" variant=\"pulse\" className=\"text-placeholder\" />\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardNoData({ message = 'No data yet', className }: { message?: string; className?: string }) {\n return (\n <div className={cn('flex h-full items-center justify-center', className)}>\n <Txt tone=\"faint\">{message}</Txt>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Card } from '@/ds/components/Card';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardRoot({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <Card\n className={cn(\n 'group/metrics-card grid min-h-72 min-w-80 flex-1 grid-rows-[auto_1fr] gap-4 px-4 py-3 2xl:min-w-120 md:min-w-88 lg:min-w-sm xl:min-w-104',\n className,\n )}\n >\n {children}\n </Card>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsCardTitle({\n children,\n className,\n as: Tag = 'h3',\n}: {\n children: string;\n className?: string;\n as?: 'h2' | 'h3' | 'h4';\n}) {\n return <Tag className={cn('text-body font-medium text-foreground', className)}>{children}</Tag>;\n}\n","import { ChevronDownIcon } from 'lucide-react';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport type { DropdownMenuRadioOption } from '@/ds/components/DropdownMenu';\nimport { cn } from '@/lib/utils';\n\nexport type MetricsCardTitleMenuProps<V extends string> = {\n /** The card title for the picked view (e.g. \"Spend by model\"). */\n title: string;\n value: V;\n onValueChange: (value: V) => void;\n /** The views (e.g. \"By model\", \"By provider\"). */\n options: readonly DropdownMenuRadioOption<V>[];\n className?: string;\n};\n\n/**\n * A card title that switches the card's view, as on Vercel's usage cards: the title is the\n * trigger, with a chevron. The hover fill bleeds past the text so the title stays aligned.\n * Wrapped, so the top bar stretches the wrapper rather than the button, and the menu's open-state\n * nodes next to the trigger don't become the top bar's first child.\n */\nexport function MetricsCardTitleMenu<V extends string>({\n title,\n value,\n onValueChange,\n options,\n className,\n}: MetricsCardTitleMenuProps<V>) {\n return (\n <div className=\"flex min-w-0\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <button\n type=\"button\"\n className={cn(\n '-mx-1.5 -my-0.5 flex items-center gap-1 self-start rounded-md px-1.5 py-0.5 text-left text-body font-medium text-foreground hover:bg-fill-subtle',\n className,\n )}\n />\n }\n >\n {title}\n <ChevronDownIcon className=\"size-3.5 text-muted-foreground\" />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"start\">\n <DropdownMenu.RadioOptions options={options} value={value} onValueChange={onValueChange} closeOnSelect />\n </DropdownMenu.Content>\n </DropdownMenu>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\n/**\n * One row under the top bar for a card's controls: a legend, list column headers.\n * The first child sits on the left, the last on the right; either side may be omitted. When\n * both don't fit (a narrow card), the right side wraps to its own line, still on the right. At least 24px\n * tall, so toolbars line up across cards in the same row.\n */\nexport function MetricsCardToolbar({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <div\n className={cn(\n 'flex min-h-6 min-w-0 flex-wrap items-center justify-between gap-x-4 gap-y-2 [&>*:first-child]:min-w-0 [&>*:last-child:not(:first-child)]:ml-auto',\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardTopBar({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <div className={cn('flex items-start gap-4 [&>:first-child]:min-w-0 [&>:first-child]:flex-1', className)}>\n {children}\n </div>\n );\n}\n","import { SkeletonText } from '@/ds/components/Skeleton';\nimport { cn } from '@/lib/utils';\n\n/** One of several totals in a card that charts a few series, marked with its series' color. */\nexport type MetricsCardTotalPart = { label: string; value: string; color: string };\n\n/**\n * A card's total, right of the title in the same type (14px, medium). Always the top\n * bar's last item. A skeleton while loading, in the value's own line box. A card charting a\n * few series of different things (resources, threads) can give one total each, each after a\n * marker in its series' color, like the legend.\n */\nexport function MetricsCardTotal({\n value,\n isLoading = false,\n className,\n}: {\n value: string | readonly MetricsCardTotalPart[];\n isLoading?: boolean;\n className?: string;\n}) {\n return (\n <span className={cn('order-last shrink-0 text-body font-medium text-foreground tabular-nums', className)}>\n <TotalValue value={value} isLoading={isLoading} />\n </span>\n );\n}\n\nfunction TotalValue({ value, isLoading }: { value: string | readonly MetricsCardTotalPart[]; isLoading: boolean }) {\n if (isLoading) return <SkeletonText line=\"text-body\" className=\"h-4 w-14\" />;\n if (typeof value === 'string') return value;\n return (\n <span className=\"inline-flex items-center gap-3\">\n {value.map(part => (\n <span key={part.label} className=\"inline-flex items-center gap-1.5\">\n <span aria-hidden className=\"size-2 shrink-0 rounded-[2px]\" style={{ backgroundColor: part.color }} />\n {/* The marker is decorative; screen readers hear which total this is. */}\n <span className=\"sr-only\">{part.label} </span>\n {part.value}\n </span>\n ))}\n </span>\n );\n}\n","import { MetricsCardActions } from './metrics-card-actions';\nimport { MetricsCardContent } from './metrics-card-content';\nimport { MetricsCardError } from './metrics-card-error';\nimport { MetricsCardHeadline } from './metrics-card-headline';\nimport { MetricsCardLoading } from './metrics-card-loading';\nimport { MetricsCardNoData } from './metrics-card-no-data';\nimport { MetricsCardRoot } from './metrics-card-root';\nimport { MetricsCardTitle } from './metrics-card-title';\nimport { MetricsCardTitleMenu } from './metrics-card-title-menu';\nimport { MetricsCardToolbar } from './metrics-card-toolbar';\nimport { MetricsCardTopBar } from './metrics-card-top-bar';\nimport { MetricsCardTotal } from './metrics-card-total';\nimport { MetricsKpiCard } from '@/ds/components/MetricsKpiCard';\n\nexport const MetricsCard = Object.assign(MetricsCardRoot, {\n Root: MetricsCardRoot,\n Kpi: MetricsKpiCard,\n TopBar: MetricsCardTopBar,\n Toolbar: MetricsCardToolbar,\n Actions: MetricsCardActions,\n Title: MetricsCardTitle,\n TitleMenu: MetricsCardTitleMenu,\n Total: MetricsCardTotal,\n Headline: MetricsCardHeadline,\n Loading: MetricsCardLoading,\n Error: MetricsCardError,\n Content: MetricsCardContent,\n NoData: MetricsCardNoData,\n});\n"],"mappings":"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"}