@mastra/playground-ui 68.0.0-alpha.2 → 68.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 (479) hide show
  1. package/dist/{FilterBar-CQl04O6t.cjs → FilterBar-BSP2UTjc.cjs} +2 -2
  2. package/dist/{FilterBar-CQl04O6t.cjs.map → FilterBar-BSP2UTjc.cjs.map} +1 -1
  3. package/dist/{FilterBar-BgW2dqRQ.js → FilterBar-PSQ1OwqH.js} +2 -2
  4. package/dist/{FilterBar-BgW2dqRQ.js.map → FilterBar-PSQ1OwqH.js.map} +1 -1
  5. package/dist/KnowledgePageGraph.css +55 -0
  6. package/dist/{MarkdownRenderer-2GOXQJEv.js → MarkdownRenderer-CI30RqdB.js} +19 -6
  7. package/dist/MarkdownRenderer-CI30RqdB.js.map +1 -0
  8. package/dist/{MarkdownRenderer-CB8Z_CHc.cjs → MarkdownRenderer-y65WGBhC.cjs} +19 -6
  9. package/dist/MarkdownRenderer-y65WGBhC.cjs.map +1 -0
  10. package/dist/{MetricsCard-CEB-f2sv.cjs → MetricsCard-BEwiS7Pe.cjs} +8 -8
  11. package/dist/MetricsCard-BEwiS7Pe.cjs.map +1 -0
  12. package/dist/{MetricsCard-M8awJ2B_.js → MetricsCard-ua6C6b8a.js} +10 -10
  13. package/dist/MetricsCard-ua6C6b8a.js.map +1 -0
  14. package/dist/{MetricsLineChart-BhHoduO0.js → MetricsLineChart-4SwxBbQx.js} +14 -3
  15. package/dist/MetricsLineChart-4SwxBbQx.js.map +1 -0
  16. package/dist/{MetricsLineChart-CjBm4IXu.cjs → MetricsLineChart-tZxsauau.cjs} +13 -2
  17. package/dist/MetricsLineChart-tZxsauau.cjs.map +1 -0
  18. package/dist/{MetricsStackedBarChart-BdMlKv6G.cjs → MetricsStackedBarChart-CDLE76IB.cjs} +2 -2
  19. package/dist/{MetricsStackedBarChart-BdMlKv6G.cjs.map → MetricsStackedBarChart-CDLE76IB.cjs.map} +1 -1
  20. package/dist/{MetricsStackedBarChart-BRuA6MTE.js → MetricsStackedBarChart-D2QyS4-z.js} +2 -2
  21. package/dist/{MetricsStackedBarChart-BRuA6MTE.js.map → MetricsStackedBarChart-D2QyS4-z.js.map} +1 -1
  22. package/dist/{activity-rJ1NQl_2.js → activity-C8Ql81WM.js} +2 -2
  23. package/dist/{activity-rJ1NQl_2.js.map → activity-C8Ql81WM.js.map} +1 -1
  24. package/dist/{activity-DyB5H3gF.cjs → activity-CcQZeDYi.cjs} +2 -2
  25. package/dist/{activity-DyB5H3gF.cjs.map → activity-CcQZeDYi.cjs.map} +1 -1
  26. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  27. package/dist/components/DateTimeRangePicker.es.js +1 -1
  28. package/dist/components/FilterBar.cjs.js +2 -2
  29. package/dist/components/FilterBar.es.js +2 -2
  30. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  31. package/dist/components/MarkdownRenderer.es.js +1 -1
  32. package/dist/components/MetricsCard.cjs.js +1 -1
  33. package/dist/components/MetricsCard.es.js +1 -1
  34. package/dist/components/MetricsLineChart.cjs.js +1 -1
  35. package/dist/components/MetricsLineChart.es.js +1 -1
  36. package/dist/components/MetricsStackedBarChart.cjs.js +1 -1
  37. package/dist/components/MetricsStackedBarChart.es.js +1 -1
  38. package/dist/components/SavedViews.cjs.js +1 -1
  39. package/dist/components/SavedViews.es.js +1 -1
  40. package/dist/components/ai/activity.cjs.js +1 -1
  41. package/dist/components/ai/activity.es.js +1 -1
  42. package/dist/components/ai/plan.cjs.js +1 -1
  43. package/dist/components/ai/plan.es.js +1 -1
  44. package/dist/components/ai/tool-approval.cjs.js +1 -1
  45. package/dist/components/ai/tool-approval.es.js +1 -1
  46. package/dist/components/ai/tool-call.cjs.js +2 -2
  47. package/dist/components/ai/tool-call.es.js +2 -2
  48. package/dist/{date-time-range-picker-CTt7Od0P.cjs → date-time-range-picker-CWGjoR3j.cjs} +40 -13
  49. package/dist/date-time-range-picker-CWGjoR3j.cjs.map +1 -0
  50. package/dist/{date-time-range-picker-DKh1K9Iy.js → date-time-range-picker-CdSiXwB4.js} +40 -13
  51. package/dist/date-time-range-picker-CdSiXwB4.js.map +1 -0
  52. package/dist/domains/chat/activity/activity-stretch-line.cjs.js +1 -1
  53. package/dist/domains/chat/activity/activity-stretch-line.es.js +1 -1
  54. package/dist/domains/chat/activity/components/activity-fold.cjs.js +1 -1
  55. package/dist/domains/chat/activity/components/activity-fold.es.js +1 -1
  56. package/dist/domains/chat/activity/components/activity-timed-trigger.cjs.js +1 -1
  57. package/dist/domains/chat/activity/components/activity-timed-trigger.es.js +1 -1
  58. package/dist/domains/chat/activity/components/calls-panel.cjs.js +1 -1
  59. package/dist/domains/chat/activity/components/calls-panel.es.js +1 -1
  60. package/dist/domains/chat/activity/components/stretch-content.cjs.js +1 -1
  61. package/dist/domains/chat/activity/components/stretch-content.es.js +1 -1
  62. package/dist/domains/chat/activity/components/stretch-thought.cjs.js +1 -1
  63. package/dist/domains/chat/activity/components/stretch-thought.es.js +1 -1
  64. package/dist/domains/chat/activity/model/activity-segments.cjs.js +1 -1
  65. package/dist/domains/chat/activity/model/activity-segments.es.js +1 -1
  66. package/dist/domains/chat/activity/model/activity-words.cjs.js +2 -2
  67. package/dist/domains/chat/activity/model/activity-words.es.js +2 -2
  68. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  69. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  70. package/dist/domains/chat/knowledge/knowledge-links.cjs.js +52 -6
  71. package/dist/domains/chat/knowledge/knowledge-links.cjs.js.map +1 -1
  72. package/dist/domains/chat/knowledge/knowledge-links.es.js +53 -9
  73. package/dist/domains/chat/knowledge/knowledge-links.es.js.map +1 -1
  74. package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js +10 -3
  75. package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js.map +1 -1
  76. package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js +10 -3
  77. package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js.map +1 -1
  78. package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js +8 -3
  79. package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js.map +1 -1
  80. package/dist/domains/chat/knowledge/pinned-knowledge.es.js +8 -3
  81. package/dist/domains/chat/knowledge/pinned-knowledge.es.js.map +1 -1
  82. package/dist/domains/chat/knowledge.cjs.js +2 -0
  83. package/dist/domains/chat/knowledge.es.js +2 -2
  84. package/dist/domains/chat/messages/message-row.cjs.js +3 -3
  85. package/dist/domains/chat/messages/message-row.es.js +3 -3
  86. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  87. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  88. package/dist/domains/chat/messages/reasoning-content.cjs.js +1 -1
  89. package/dist/domains/chat/messages/reasoning-content.es.js +1 -1
  90. package/dist/domains/chat/messages/renderers/message-text.cjs.js +35 -1
  91. package/dist/domains/chat/messages/renderers/message-text.cjs.js.map +1 -1
  92. package/dist/domains/chat/messages/renderers/message-text.es.js +36 -2
  93. package/dist/domains/chat/messages/renderers/message-text.es.js.map +1 -1
  94. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  95. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  96. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  97. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  98. package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
  99. package/dist/domains/chat/messages/skill-message.es.js +2 -2
  100. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
  101. package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
  102. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  103. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  104. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
  105. package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
  106. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +2 -2
  107. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +2 -2
  108. package/dist/domains/chat/tools/badges/knowledge-body-range.cjs.js +80 -0
  109. package/dist/domains/chat/tools/badges/knowledge-body-range.cjs.js.map +1 -0
  110. package/dist/domains/chat/tools/badges/knowledge-body-range.d.ts +1 -0
  111. package/dist/domains/chat/tools/badges/knowledge-body-range.es.js +78 -0
  112. package/dist/domains/chat/tools/badges/knowledge-body-range.es.js.map +1 -0
  113. package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js +163 -13
  114. package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js.map +1 -1
  115. package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js +165 -15
  116. package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js.map +1 -1
  117. package/dist/domains/chat/tools/badges/mcp-input-request-badge.cjs.js +51 -0
  118. package/dist/domains/chat/tools/badges/mcp-input-request-badge.cjs.js.map +1 -0
  119. package/dist/domains/chat/tools/badges/mcp-input-request-badge.d.ts +1 -0
  120. package/dist/domains/chat/tools/badges/mcp-input-request-badge.es.js +49 -0
  121. package/dist/domains/chat/tools/badges/mcp-input-request-badge.es.js.map +1 -0
  122. package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js +7 -2
  123. package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js.map +1 -1
  124. package/dist/domains/chat/tools/badges/mcp-task-chip.es.js +7 -2
  125. package/dist/domains/chat/tools/badges/mcp-task-chip.es.js.map +1 -1
  126. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +2 -2
  127. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +2 -2
  128. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +2 -2
  129. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +2 -2
  130. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  131. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  132. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +2 -2
  133. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +2 -2
  134. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  135. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  136. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +9 -4
  137. package/dist/domains/chat/tools/badges/tool-badge.cjs.js.map +1 -1
  138. package/dist/domains/chat/tools/badges/tool-badge.es.js +9 -4
  139. package/dist/domains/chat/tools/badges/tool-badge.es.js.map +1 -1
  140. package/dist/domains/chat/tools/badges/use-deferred-input-request.cjs.js +81 -0
  141. package/dist/domains/chat/tools/badges/use-deferred-input-request.cjs.js.map +1 -0
  142. package/dist/domains/chat/tools/badges/use-deferred-input-request.d.ts +1 -0
  143. package/dist/domains/chat/tools/badges/use-deferred-input-request.es.js +77 -0
  144. package/dist/domains/chat/tools/badges/use-deferred-input-request.es.js.map +1 -0
  145. package/dist/domains/chat/tools/badges/use-mcp-task-progress.cjs.js +11 -2
  146. package/dist/domains/chat/tools/badges/use-mcp-task-progress.cjs.js.map +1 -1
  147. package/dist/domains/chat/tools/badges/use-mcp-task-progress.es.js +11 -2
  148. package/dist/domains/chat/tools/badges/use-mcp-task-progress.es.js.map +1 -1
  149. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +1 -1
  150. package/dist/domains/chat/tools/badges/workflow-badge.es.js +1 -1
  151. package/dist/domains/chat/tools/connect-prompt-tool.cjs.js +79 -4
  152. package/dist/domains/chat/tools/connect-prompt-tool.cjs.js.map +1 -1
  153. package/dist/domains/chat/tools/connect-prompt-tool.es.js +79 -4
  154. package/dist/domains/chat/tools/connect-prompt-tool.es.js.map +1 -1
  155. package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js +238 -0
  156. package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js.map +1 -0
  157. package/dist/domains/chat/tools/mcp-input-request-tool.d.ts +1 -0
  158. package/dist/domains/chat/tools/mcp-input-request-tool.es.js +237 -0
  159. package/dist/domains/chat/tools/mcp-input-request-tool.es.js.map +1 -0
  160. package/dist/domains/chat/tools/mcp-input-request.cjs.js +40 -0
  161. package/dist/domains/chat/tools/mcp-input-request.cjs.js.map +1 -0
  162. package/dist/domains/chat/tools/mcp-input-request.d.ts +1 -0
  163. package/dist/domains/chat/tools/mcp-input-request.es.js +33 -0
  164. package/dist/domains/chat/tools/mcp-input-request.es.js.map +1 -0
  165. package/dist/domains/chat/tools/tool-card-kind.cjs.js +9 -4
  166. package/dist/domains/chat/tools/tool-card-kind.cjs.js.map +1 -1
  167. package/dist/domains/chat/tools/tool-card-kind.es.js +9 -5
  168. package/dist/domains/chat/tools/tool-card-kind.es.js.map +1 -1
  169. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  170. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  171. package/dist/domains/chat/tools/tool-groups.cjs.js +1 -1
  172. package/dist/domains/chat/tools/tool-groups.es.js +1 -1
  173. package/dist/domains/chat.cjs.js +5 -3
  174. package/dist/domains/chat.es.js +4 -4
  175. package/dist/domains/connect/types.cjs.js.map +1 -1
  176. package/dist/domains/connect/types.es.js.map +1 -1
  177. package/dist/domains/connect/use-user-connect.cjs.js +19 -2
  178. package/dist/domains/connect/use-user-connect.cjs.js.map +1 -1
  179. package/dist/domains/connect/use-user-connect.es.js +19 -2
  180. package/dist/domains/connect/use-user-connect.es.js.map +1 -1
  181. package/dist/domains/dashboards/components/dashboard-renderer.cjs.js +4 -3
  182. package/dist/domains/dashboards/components/dashboard-renderer.cjs.js.map +1 -1
  183. package/dist/domains/dashboards/components/dashboard-renderer.es.js +4 -3
  184. package/dist/domains/dashboards/components/dashboard-renderer.es.js.map +1 -1
  185. package/dist/domains/dashboards/components/widget-chrome.cjs.js +1 -1
  186. package/dist/domains/dashboards/components/widget-chrome.es.js +1 -1
  187. package/dist/domains/dashboards/components/widget-error.cjs.js +1 -1
  188. package/dist/domains/dashboards/components/widget-error.es.js +1 -1
  189. package/dist/domains/dashboards/hooks/use-widget-views.cjs.js +4 -3
  190. package/dist/domains/dashboards/hooks/use-widget-views.cjs.js.map +1 -1
  191. package/dist/domains/dashboards/hooks/use-widget-views.es.js +4 -3
  192. package/dist/domains/dashboards/hooks/use-widget-views.es.js.map +1 -1
  193. package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js +9 -6
  194. package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js.map +1 -1
  195. package/dist/domains/dashboards/kinds/scores/scores-widget.es.js +9 -6
  196. package/dist/domains/dashboards/kinds/scores/scores-widget.es.js.map +1 -1
  197. package/dist/domains/dashboards/kinds/table/table-tabs.cjs.js +2 -2
  198. package/dist/domains/dashboards/kinds/table/table-tabs.es.js +2 -2
  199. package/dist/domains/dashboards/kinds/table/table-widget.cjs.js +1 -1
  200. package/dist/domains/dashboards/kinds/table/table-widget.es.js +1 -1
  201. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js +6 -5
  202. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js.map +1 -1
  203. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js +6 -5
  204. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js.map +1 -1
  205. package/dist/domains/dashboards/lib/chrome.cjs.js +9 -2
  206. package/dist/domains/dashboards/lib/chrome.cjs.js.map +1 -1
  207. package/dist/domains/dashboards/lib/chrome.es.js +9 -2
  208. package/dist/domains/dashboards/lib/chrome.es.js.map +1 -1
  209. package/dist/domains/dashboards/widget-kind.cjs.js.map +1 -1
  210. package/dist/domains/dashboards/widget-kind.es.js.map +1 -1
  211. package/dist/domains/knowledge/components/KnowledgePageCard.cjs.js +48 -0
  212. package/dist/domains/knowledge/components/KnowledgePageCard.cjs.js.map +1 -0
  213. package/dist/domains/knowledge/components/KnowledgePageCard.d.ts +1 -0
  214. package/dist/domains/knowledge/components/KnowledgePageCard.es.js +47 -0
  215. package/dist/domains/knowledge/components/KnowledgePageCard.es.js.map +1 -0
  216. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js +63 -5
  217. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js.map +1 -1
  218. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js +64 -6
  219. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js.map +1 -1
  220. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js +485 -47
  221. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js.map +1 -1
  222. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js +487 -50
  223. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js.map +1 -1
  224. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js +1051 -123
  225. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js.map +1 -1
  226. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js +1054 -126
  227. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js.map +1 -1
  228. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js +75 -3
  229. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js.map +1 -1
  230. package/dist/domains/knowledge/components/KnowledgePageTree.es.js +76 -4
  231. package/dist/domains/knowledge/components/KnowledgePageTree.es.js.map +1 -1
  232. package/dist/domains/knowledge/lib/circleText.cjs.js +9 -0
  233. package/dist/domains/knowledge/lib/circleText.cjs.js.map +1 -0
  234. package/dist/domains/knowledge/lib/circleText.d.ts +1 -0
  235. package/dist/domains/knowledge/lib/circleText.es.js +8 -0
  236. package/dist/domains/knowledge/lib/circleText.es.js.map +1 -0
  237. package/dist/domains/knowledge/lib/fitViewport.cjs.js +82 -0
  238. package/dist/domains/knowledge/lib/fitViewport.cjs.js.map +1 -0
  239. package/dist/domains/knowledge/lib/fitViewport.d.ts +1 -0
  240. package/dist/domains/knowledge/lib/fitViewport.es.js +73 -0
  241. package/dist/domains/knowledge/lib/fitViewport.es.js.map +1 -0
  242. package/dist/domains/knowledge/lib/graphShape.cjs.js +524 -0
  243. package/dist/domains/knowledge/lib/graphShape.cjs.js.map +1 -0
  244. package/dist/domains/knowledge/lib/graphShape.d.ts +1 -0
  245. package/dist/domains/knowledge/lib/graphShape.es.js +499 -0
  246. package/dist/domains/knowledge/lib/graphShape.es.js.map +1 -0
  247. package/dist/domains/knowledge/lib/linkCountsText.cjs.js +11 -0
  248. package/dist/domains/knowledge/lib/linkCountsText.cjs.js.map +1 -0
  249. package/dist/domains/knowledge/lib/linkCountsText.d.ts +1 -0
  250. package/dist/domains/knowledge/lib/linkCountsText.es.js +10 -0
  251. package/dist/domains/knowledge/lib/linkCountsText.es.js.map +1 -0
  252. package/dist/domains/knowledge/lib/pageAddress.cjs.js +29 -0
  253. package/dist/domains/knowledge/lib/pageAddress.cjs.js.map +1 -0
  254. package/dist/domains/knowledge/lib/pageAddress.d.ts +1 -0
  255. package/dist/domains/knowledge/lib/pageAddress.es.js +27 -0
  256. package/dist/domains/knowledge/lib/pageAddress.es.js.map +1 -0
  257. package/dist/domains/knowledge/lib/pageGraph.cjs.js +11 -11
  258. package/dist/domains/knowledge/lib/pageGraph.cjs.js.map +1 -1
  259. package/dist/domains/knowledge/lib/pageGraph.es.js +11 -11
  260. package/dist/domains/knowledge/lib/pageGraph.es.js.map +1 -1
  261. package/dist/domains/knowledge/lib/pageRefs.cjs.js +69 -0
  262. package/dist/domains/knowledge/lib/pageRefs.cjs.js.map +1 -0
  263. package/dist/domains/knowledge/lib/pageRefs.d.ts +1 -0
  264. package/dist/domains/knowledge/lib/pageRefs.es.js +66 -0
  265. package/dist/domains/knowledge/lib/pageRefs.es.js.map +1 -0
  266. package/dist/domains/knowledge/lib/pageTree.cjs.js +5 -0
  267. package/dist/domains/knowledge/lib/pageTree.cjs.js.map +1 -1
  268. package/dist/domains/knowledge/lib/pageTree.es.js +5 -1
  269. package/dist/domains/knowledge/lib/pageTree.es.js.map +1 -1
  270. package/dist/domains/knowledge/lib/remarkKnowledgeLinks.cjs.js +82 -0
  271. package/dist/domains/knowledge/lib/remarkKnowledgeLinks.cjs.js.map +1 -0
  272. package/dist/domains/knowledge/lib/remarkKnowledgeLinks.d.ts +1 -0
  273. package/dist/domains/knowledge/lib/remarkKnowledgeLinks.es.js +78 -0
  274. package/dist/domains/knowledge/lib/remarkKnowledgeLinks.es.js.map +1 -0
  275. package/dist/domains/knowledge/lib/tooltipSide.cjs.js +77 -0
  276. package/dist/domains/knowledge/lib/tooltipSide.cjs.js.map +1 -0
  277. package/dist/domains/knowledge/lib/tooltipSide.d.ts +1 -0
  278. package/dist/domains/knowledge/lib/tooltipSide.es.js +75 -0
  279. package/dist/domains/knowledge/lib/tooltipSide.es.js.map +1 -0
  280. package/dist/domains/knowledge/lib/useLeavingNodes.cjs.js +65 -0
  281. package/dist/domains/knowledge/lib/useLeavingNodes.cjs.js.map +1 -0
  282. package/dist/domains/knowledge/lib/useLeavingNodes.d.ts +1 -0
  283. package/dist/domains/knowledge/lib/useLeavingNodes.es.js +62 -0
  284. package/dist/domains/knowledge/lib/useLeavingNodes.es.js.map +1 -0
  285. package/dist/domains/knowledge/lib/useStableWhile.cjs.js +15 -0
  286. package/dist/domains/knowledge/lib/useStableWhile.cjs.js.map +1 -0
  287. package/dist/domains/knowledge/lib/useStableWhile.d.ts +1 -0
  288. package/dist/domains/knowledge/lib/useStableWhile.es.js +14 -0
  289. package/dist/domains/knowledge/lib/useStableWhile.es.js.map +1 -0
  290. package/dist/domains/metrics/components/agent-runs-card.cjs.js +3 -3
  291. package/dist/domains/metrics/components/agent-runs-card.es.js +3 -3
  292. package/dist/domains/metrics/components/breakdown/breakdown-tab-body.cjs.js +1 -1
  293. package/dist/domains/metrics/components/breakdown/breakdown-tab-body.es.js +1 -1
  294. package/dist/domains/metrics/components/breakdown-card.cjs.js +1 -1
  295. package/dist/domains/metrics/components/breakdown-card.es.js +1 -1
  296. package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
  297. package/dist/domains/metrics/components/chart-area.es.js +1 -1
  298. package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
  299. package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
  300. package/dist/domains/metrics/components/chart-card.cjs.js +1 -1
  301. package/dist/domains/metrics/components/chart-card.es.js +1 -1
  302. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  303. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  304. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.cjs.js +3 -2
  305. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.cjs.js.map +1 -1
  306. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.es.js +3 -2
  307. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.es.js.map +1 -1
  308. package/dist/domains/metrics/components/failure-rate-card.cjs.js +3 -2
  309. package/dist/domains/metrics/components/failure-rate-card.cjs.js.map +1 -1
  310. package/dist/domains/metrics/components/failure-rate-card.es.js +3 -2
  311. package/dist/domains/metrics/components/failure-rate-card.es.js.map +1 -1
  312. package/dist/domains/metrics/components/latency-card.cjs.js +3 -2
  313. package/dist/domains/metrics/components/latency-card.cjs.js.map +1 -1
  314. package/dist/domains/metrics/components/latency-card.es.js +3 -2
  315. package/dist/domains/metrics/components/latency-card.es.js.map +1 -1
  316. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +1 -1
  317. package/dist/domains/metrics/components/metrics-time-range-chip.es.js +1 -1
  318. package/dist/domains/metrics/components/scores-card.cjs.js +2 -1
  319. package/dist/domains/metrics/components/scores-card.cjs.js.map +1 -1
  320. package/dist/domains/metrics/components/scores-card.es.js +2 -1
  321. package/dist/domains/metrics/components/scores-card.es.js.map +1 -1
  322. package/dist/domains/metrics/components/token-usage-card.cjs.js +3 -3
  323. package/dist/domains/metrics/components/token-usage-card.es.js +3 -3
  324. package/dist/domains/metrics/components/trace-aggregate-card.cjs.js +1 -1
  325. package/dist/domains/metrics/components/trace-aggregate-card.es.js +1 -1
  326. package/dist/domains/observability/components/observability-histogram.cjs.js +1 -1
  327. package/dist/domains/observability/components/observability-histogram.es.js +1 -1
  328. package/dist/domains/scores/components/trace-scores-list.cjs.js +2 -2
  329. package/dist/domains/scores/components/trace-scores-list.es.js +2 -2
  330. package/dist/domains/skills/skill-simple-form.cjs.js +1 -1
  331. package/dist/domains/skills/skill-simple-form.es.js +1 -1
  332. package/dist/domains/spans/components/spans-filter-bar.cjs.js +2 -2
  333. package/dist/domains/spans/components/spans-filter-bar.es.js +2 -2
  334. package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +1 -1
  335. package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +1 -1
  336. package/dist/domains/threads/components/threads-filter-bar.cjs.js +2 -2
  337. package/dist/domains/threads/components/threads-filter-bar.es.js +2 -2
  338. package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +1 -1
  339. package/dist/domains/threads/hooks/use-threads-filter-bar.es.js +1 -1
  340. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  341. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  342. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  343. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  344. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
  345. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
  346. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
  347. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  348. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
  349. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
  350. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  351. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  352. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  353. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  354. package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +1 -1
  355. package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +1 -1
  356. package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +1 -1
  357. package/dist/domains/traces/components/span-payload/span-tools-section.es.js +1 -1
  358. package/dist/domains/traces/components/span-timeline-row.cjs.js +1 -1
  359. package/dist/domains/traces/components/span-timeline-row.es.js +1 -1
  360. package/dist/domains/traces/components/span-timing-hover-card.cjs.js +1 -1
  361. package/dist/domains/traces/components/span-timing-hover-card.es.js +1 -1
  362. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +8 -2
  363. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  364. package/dist/domains/traces/components/trace-data-panel-view.es.js +8 -2
  365. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  366. package/dist/domains/traces/components/trace-error-cell.cjs.js +1 -1
  367. package/dist/domains/traces/components/trace-error-cell.es.js +1 -1
  368. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +2 -2
  369. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +2 -2
  370. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +1 -1
  371. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +1 -1
  372. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +1 -1
  373. package/dist/domains/workflows/runs/workflow-run-list.es.js +1 -1
  374. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +2 -2
  375. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +2 -2
  376. package/dist/domains/workflows/workflow/use-workflow-trigger.cjs.js +3 -3
  377. package/dist/domains/workflows/workflow/use-workflow-trigger.es.js +3 -3
  378. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -1
  379. package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -1
  380. package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +2 -2
  381. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +2 -2
  382. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +2 -2
  383. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +2 -2
  384. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +1 -1
  385. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +1 -1
  386. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +1 -1
  387. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +1 -1
  388. package/dist/{filter-bar-time-range-mg9JeYue.js → filter-bar-time-range-qlV8p7hp.js} +2 -2
  389. package/dist/{filter-bar-time-range-mg9JeYue.js.map → filter-bar-time-range-qlV8p7hp.js.map} +1 -1
  390. package/dist/{filter-bar-time-range-BA-pXMlo.cjs → filter-bar-time-range-zdM024JD.cjs} +2 -2
  391. package/dist/{filter-bar-time-range-BA-pXMlo.cjs.map → filter-bar-time-range-zdM024JD.cjs.map} +1 -1
  392. package/dist/lib/form/dynamic-form.cjs.js +2 -2
  393. package/dist/lib/form/dynamic-form.es.js +2 -2
  394. package/dist/lib/form/json-draft.cjs.js +1 -1
  395. package/dist/lib/form/json-draft.es.js +1 -1
  396. package/dist/lib/form/zod-provider.cjs.js +1 -1
  397. package/dist/lib/form/zod-provider.es.js +1 -1
  398. package/dist/{span-payload-primitives-B3RdahsC.js → span-payload-primitives-CKKIAVPJ.js} +4 -4
  399. package/dist/{span-payload-primitives-B3RdahsC.js.map → span-payload-primitives-CKKIAVPJ.js.map} +1 -1
  400. package/dist/{span-payload-primitives-_2d-pAOD.cjs → span-payload-primitives-D4tHWN2W.cjs} +4 -4
  401. package/dist/{span-payload-primitives-_2d-pAOD.cjs.map → span-payload-primitives-D4tHWN2W.cjs.map} +1 -1
  402. package/dist/src/domains/chat/knowledge/knowledge-links.d.ts +32 -4
  403. package/dist/src/domains/chat/knowledge/pinned-knowledge-data.d.ts +2 -0
  404. package/dist/src/domains/chat/tools/badges/knowledge-body-range.d.ts +12 -0
  405. package/dist/src/domains/chat/tools/badges/knowledge-tool-badge.d.ts +5 -2
  406. package/dist/src/domains/chat/tools/badges/mcp-input-request-badge.d.ts +18 -0
  407. package/dist/src/domains/chat/tools/badges/tool-badge.d.ts +4 -1
  408. package/dist/src/domains/chat/tools/badges/use-deferred-input-request.d.ts +44 -0
  409. package/dist/src/domains/chat/tools/badges/use-mcp-task-progress.d.ts +6 -1
  410. package/dist/src/domains/chat/tools/connect-prompt-tool.d.ts +10 -1
  411. package/dist/src/domains/chat/tools/mcp-input-request-tool.d.ts +18 -0
  412. package/dist/src/domains/chat/tools/mcp-input-request.d.ts +40 -0
  413. package/dist/src/domains/chat/tools/tool-card-kind.d.ts +4 -2
  414. package/dist/src/domains/chat/tools/tool-card.d.ts +1 -1
  415. package/dist/src/domains/connect/types.d.ts +16 -0
  416. package/dist/src/domains/dashboards/components/dashboard-renderer.d.ts +4 -2
  417. package/dist/src/domains/dashboards/hooks/use-widget-views.d.ts +4 -3
  418. package/dist/src/domains/dashboards/index.d.ts +1 -1
  419. package/dist/src/domains/dashboards/kinds/scores/scores-widget.d.ts +1 -1
  420. package/dist/src/domains/dashboards/lib/chrome.d.ts +6 -4
  421. package/dist/src/domains/dashboards/widget-kind.d.ts +12 -0
  422. package/dist/src/domains/knowledge/components/KnowledgePageCard.d.ts +23 -0
  423. package/dist/src/domains/knowledge/components/KnowledgePageExplorer.d.ts +29 -0
  424. package/dist/src/domains/knowledge/components/KnowledgePageGraph.d.ts +27 -1
  425. package/dist/src/domains/knowledge/components/KnowledgePageTree.d.ts +2 -1
  426. package/dist/src/domains/knowledge/lib/circleText.d.ts +2 -0
  427. package/dist/src/domains/knowledge/lib/fitViewport.d.ts +67 -0
  428. package/dist/src/domains/knowledge/lib/graphShape.d.ts +131 -0
  429. package/dist/src/domains/knowledge/lib/linkCountsText.d.ts +5 -0
  430. package/dist/src/domains/knowledge/lib/pageAddress.d.ts +5 -0
  431. package/dist/src/domains/knowledge/lib/pageGraph.d.ts +4 -4
  432. package/dist/src/domains/knowledge/lib/pageRefs.d.ts +15 -0
  433. package/dist/src/domains/knowledge/lib/pageTree.d.ts +2 -0
  434. package/dist/src/domains/knowledge/lib/remarkKnowledgeLinks.d.ts +13 -0
  435. package/dist/src/domains/knowledge/lib/tooltipSide.d.ts +40 -0
  436. package/dist/src/domains/knowledge/lib/useLeavingNodes.d.ts +14 -0
  437. package/dist/src/domains/knowledge/lib/useStableWhile.d.ts +5 -0
  438. package/dist/src/domains/knowledge/pageTypes.d.ts +6 -1
  439. package/dist/src/ds/components/DateTimeRangePicker/date-time-range-picker.d.ts +12 -1
  440. package/dist/src/ds/components/MarkdownRenderer/markdown-renderer.d.ts +8 -1
  441. package/dist/src/ds/components/MetricsCard/metrics-card-headline.d.ts +1 -1
  442. package/dist/src/ds/components/MetricsLineChart/metrics-line-chart.d.ts +8 -0
  443. package/dist/src/ds/components/ai/tool-call/tool-phrases.d.ts +6 -0
  444. package/dist/style.css +73 -2
  445. package/dist/{tool-approval-1qiB4hhG.cjs → tool-approval-CJvPDL7D.cjs} +4 -4
  446. package/dist/{tool-approval-1qiB4hhG.cjs.map → tool-approval-CJvPDL7D.cjs.map} +1 -1
  447. package/dist/{tool-approval-B6MFcaKV.js → tool-approval-DyN11vFA.js} +4 -4
  448. package/dist/{tool-approval-B6MFcaKV.js.map → tool-approval-DyN11vFA.js.map} +1 -1
  449. package/dist/{tool-call-Bu66PkD-.cjs → tool-call-DBn14X-3.cjs} +9 -3
  450. package/dist/{tool-call-Bu66PkD-.cjs.map → tool-call-DBn14X-3.cjs.map} +1 -1
  451. package/dist/{tool-call-Ch9-jjXU.js → tool-call-Dsj43lvJ.js} +9 -3
  452. package/dist/{tool-call-Ch9-jjXU.js.map → tool-call-Dsj43lvJ.js.map} +1 -1
  453. package/dist/{tool-card-DrqPZfPQ.cjs → tool-card-BOLXeKIp.cjs} +167 -126
  454. package/dist/tool-card-BOLXeKIp.cjs.map +1 -0
  455. package/dist/{tool-card-sO6P2Qj4.js → tool-card-HZ5bm7ue.js} +168 -127
  456. package/dist/tool-card-HZ5bm7ue.js.map +1 -0
  457. package/dist/{tool-presentation-DvCsb_kz.js → tool-presentation-CvibOP1J.js} +6 -1
  458. package/dist/tool-presentation-CvibOP1J.js.map +1 -0
  459. package/dist/{tool-presentation-CQlDEwgS.cjs → tool-presentation-D6nzVruN.cjs} +6 -1
  460. package/dist/tool-presentation-D6nzVruN.cjs.map +1 -0
  461. package/package.json +11 -11
  462. package/dist/MarkdownRenderer-2GOXQJEv.js.map +0 -1
  463. package/dist/MarkdownRenderer-CB8Z_CHc.cjs.map +0 -1
  464. package/dist/MetricsCard-CEB-f2sv.cjs.map +0 -1
  465. package/dist/MetricsCard-M8awJ2B_.js.map +0 -1
  466. package/dist/MetricsLineChart-BhHoduO0.js.map +0 -1
  467. package/dist/MetricsLineChart-CjBm4IXu.cjs.map +0 -1
  468. package/dist/date-time-range-picker-CTt7Od0P.cjs.map +0 -1
  469. package/dist/date-time-range-picker-DKh1K9Iy.js.map +0 -1
  470. package/dist/domains/knowledge/lib/pageLayout.cjs.js +0 -49
  471. package/dist/domains/knowledge/lib/pageLayout.cjs.js.map +0 -1
  472. package/dist/domains/knowledge/lib/pageLayout.d.ts +0 -1
  473. package/dist/domains/knowledge/lib/pageLayout.es.js +0 -48
  474. package/dist/domains/knowledge/lib/pageLayout.es.js.map +0 -1
  475. package/dist/src/domains/knowledge/lib/pageLayout.d.ts +0 -24
  476. package/dist/tool-card-DrqPZfPQ.cjs.map +0 -1
  477. package/dist/tool-card-sO6P2Qj4.js.map +0 -1
  478. package/dist/tool-presentation-CQlDEwgS.cjs.map +0 -1
  479. package/dist/tool-presentation-DvCsb_kz.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MetricsStackedBarChart-BRuA6MTE.js","names":["_Fragment"],"sources":["../src/ds/components/MetricsStackedBarChart/metrics-stacked-bar-chart.tsx"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { Bar, CartesianGrid, ComposedChart, LabelList, Line, Rectangle, ReferenceLine, Tooltip } from 'recharts';\nimport type { LabelProps } from 'recharts';\nimport { ChartSkeleton } from '@/ds/components/ChartSkeleton';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChartLegend, MetricsLineChartTooltip } from '@/ds/components/MetricsLineChart';\nimport { CHART_GRID_PROPS, CHART_TOOLTIP_PROPS, useChartSize } from '@/ds/primitives/chart-axes';\nimport type { ChartXLabels } from '@/ds/primitives/chart-axes';\nimport { singleBarBox, stackedSegmentBox } from '@/ds/primitives/chart-column-layout';\nimport type { SegmentBox } from '@/ds/primitives/chart-column-layout';\nimport {\n CHART_TICK,\n Y_AXIS_WIDTH,\n compactNumber,\n dataMax,\n isWholeData,\n timeXAxis,\n valueYAxis,\n} from '@/ds/primitives/chart-frame';\nimport type { ChartHeight } from '@/ds/primitives/chart-frame';\nimport { CHART_AXIS_FONT_SIZE, CHART_MARGIN } from '@/ds/primitives/chart-layout';\nimport { ChartPlot } from '@/ds/primitives/chart-plot';\nimport { ChartTooltipPosition } from '@/ds/primitives/chart-tooltip-position';\nimport { DragSelectionBand, activeIndex, useDragSelection } from '@/ds/primitives/charts/drag-selection';\nimport type { DragSelectionRange } from '@/ds/primitives/charts/drag-selection';\nimport { useChartDefsId } from '@/ds/primitives/use-chart-defs-id';\nimport { cn } from '@/lib/utils';\n\n/** Corner radius of every segment; thin segments scale it down so they stay crisp rectangles. */\nconst RADIUS = 2;\n/** Pixels between stacked segments, so neighbouring segments read as separate blocks. */\nconst SEGMENT_GAP = 2;\n/** Opacity at the base of a segment's gradient (the top is fully opaque). */\nconst GRADIENT_BASE = 0.75;\n/** Single-series bars: translucent body under a solid cap that marks the value. */\nconst CAP_BODY = 0.55;\nconst CAP_HEIGHT = 3;\n/** Opacity of the other columns while one is hovered. */\nconst DIMMED = 0.3;\nconst COLUMN_LABEL_SPACE = 16;\n\ntype SegmentProps = {\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n index?: number;\n payload?: Record<string, unknown>;\n};\n\nfunction segmentShape({\n fill,\n color,\n capped,\n keys,\n dataKey,\n}: {\n fill: string;\n color: string;\n capped: boolean;\n /** The column's data keys, bottom to top. */\n keys: string[];\n dataKey: string;\n}) {\n return function Segment({ x = 0, width = 0, index, payload, ...geo }: SegmentProps) {\n const values = keys.map(k => Number(payload?.[k]) || 0);\n const self = keys.indexOf(dataKey);\n const box = { y: geo.y ?? 0, height: Math.max(geo.height ?? 0, 0) };\n // Every non-zero value gets a few readable pixels; zeros draw nothing.\n const laid =\n keys.length > 1\n ? stackedSegmentBox(values, self, box, { gap: SEGMENT_GAP })\n : singleBarBox(values[self] ?? 0, box);\n if (!laid) return <g />;\n const { y, height: h } = laid;\n const radius = Math.min(RADIUS, Math.floor(h / 3));\n // Dimming is a CSS rule keyed on `data-bucket` (see `HoverDim`), so hovering re-renders no bars.\n const bucket = { 'data-bucket': index };\n\n if (capped) {\n return (\n <g {...bucket}>\n <Rectangle x={x} y={y} width={width} height={h} radius={radius} fill={color} fillOpacity={CAP_BODY} />\n <Rectangle x={x} y={y} width={width} height={Math.min(CAP_HEIGHT, h)} radius={radius} fill={color} />\n </g>\n );\n }\n return (\n <g {...bucket}>\n <Rectangle x={x} y={y} width={width} height={h} radius={radius} fill={fill} />\n </g>\n );\n };\n}\n\n/**\n * Dims every column outside the hovered one, or outside the range being dragged. Its own tiny\n * state, so a move only re-renders this <style> tag: with hundreds of buckets, re-rendering the\n * bars on each move froze the pointer.\n */\nfunction HoverDim({\n scope,\n setter,\n}: {\n scope: string;\n setter: { current: (range: DragSelectionRange | undefined) => void };\n}) {\n const [lit, setLit] = useState<DragSelectionRange>();\n useLayoutEffect(() => {\n setter.current = setLit;\n }, [setter]);\n if (!lit) return null;\n const columns = `[data-chart-scope=\"${scope}\"] [data-bucket]`;\n const kept = Array.from(\n { length: lit.end - lit.start + 1 },\n (_, i) => `${columns}[data-bucket=\"${lit.start + i}\"]`,\n ).join(',');\n return <style>{`${columns}{opacity:${DIMMED}}${kept}{opacity:1}`}</style>;\n}\n\n/** A line drawn over the bars on its own scale, e.g. average wake time over cold starts. */\nexport type MetricsStackedBarChartOverlay = MetricsLineChartSeries & {\n valueFormatter?: (value: number) => string;\n};\n\nexport type MetricsStackedBarChartProps = {\n data: Record<string, unknown>[];\n series: MetricsLineChartSeries[];\n /** Pixels, or `fill` to grow with the parent (a flex column, e.g. a card's content). */\n height?: ChartHeight;\n yDomain?: [number, number];\n /** Formats tooltip values, and y-axis ticks unless `axisFormatter` is set. */\n valueFormatter?: (value: number) => string;\n /** Formats y-axis ticks, when they need a shorter form than the tooltip. */\n axisFormatter?: (value: number) => string;\n showLegend?: boolean;\n referenceLine?: { value: number; label: string; color: string };\n /**\n * `gradient`: segments fade gently toward the base. Reads best for stacks.\n * `capped`: a translucent body under a solid cap that marks the value. Reads best for one\n * value per column.\n */\n variant?: 'gradient' | 'capped';\n /**\n * Set to `false` to drop the y-axis labels and let the plot span the card. The gridlines stay\n * for relative scale; exact values come from the tooltip and the card's summary.\n */\n showYAxis?: boolean;\n /** Adds a \"Total\" row (the column's height) to the tooltip. Defaults to on for stacks. */\n showTotal?: boolean;\n /** Row field printed under the x-axis. */\n xKey?: string;\n /** Row field with the bucket's start time (ms), which places labels on round clock times. */\n timestampKey?: string;\n /** `auto` fits as many labels as the width allows; `edges` prints only the first and last. */\n xLabels?: ChartXLabels;\n /** Row field for the tooltip heading (e.g. a longer date); defaults to the x-axis label. */\n tooltipLabelKey?: string;\n columnLabelKey?: string;\n /** Widest a column gets, in pixels. Defaults to 28; raise it for dense strips of many thin columns. */\n maxBarSize?: number;\n /** Click a column (e.g. to open its traces); the plot shows a pointer cursor. */\n onBucketClick?: (row: Record<string, unknown>, index: number) => void;\n /**\n * Drag across two or more columns to select them (e.g. to zoom into that time span); reports the\n * first and last selected row indices. A press and release on one column stays a click.\n */\n onZoom?: (range: DragSelectionRange) => void;\n /** One dashed line over the bars, on its own hidden scale (e.g. a duration over counts). */\n overlay?: MetricsStackedBarChartOverlay;\n /** Show a ghost of the chart while data loads, in the chart's own footprint. */\n isLoading?: boolean;\n className?: string;\n};\n\nexport function MetricsStackedBarChart(props: MetricsStackedBarChartProps) {\n const { data, series, overlay, height = 210, showLegend = true, isLoading = false, className } = props;\n const id = useChartDefsId();\n const root = cn(height === 'fill' && 'flex min-h-0 flex-1 flex-col', className);\n const legend = overlay ? [...series, { ...overlay, dashed: true }] : series;\n // The legend stays while loading: it comes from the series, not the data.\n return (\n <div className={root} data-chart-scope={id}>\n {showLegend && <MetricsLineChartLegend series={legend} className=\"mb-4\" />}\n {isLoading ? <ChartSkeleton kind=\"bar\" height={height} /> : <BarPlot {...props} id={id} />}\n </div>\n );\n}\n\n/** The plot itself, once the data is in; `id` scopes its gradients and hover rule. */\nfunction BarPlot({\n data,\n series,\n height = 210,\n yDomain,\n valueFormatter,\n axisFormatter,\n referenceLine,\n variant = 'gradient',\n showYAxis = true,\n showTotal = series.length > 1,\n xKey = 'time',\n timestampKey = 'tsMs',\n xLabels = 'auto',\n tooltipLabelKey,\n columnLabelKey,\n maxBarSize = 28,\n onBucketClick,\n onZoom,\n overlay,\n id,\n}: MetricsStackedBarChartProps & { id: string }) {\n const setLit = useRef<(range: DragSelectionRange | undefined) => void>(() => {});\n const { size, onResize, ref } = useChartSize();\n // The dragged columns stay lit through the same rule as hover, so a drag never re-renders the bars.\n const selection = useDragSelection({ onSelect: onZoom, onPreview: range => setLit.current(range) });\n\n const keyList = series.map(s => s.dataKey).join('\\u0000');\n const colorList = series.map(s => s.color).join('\\u0000');\n // Stable shapes, so Recharts doesn't re-render every bar when the parent re-renders.\n const shapes = useMemo(() => {\n const keys = keyList.split('\\u0000');\n const colors = colorList.split('\\u0000');\n return keys.map((dataKey, i) =>\n segmentShape({\n fill: `url(#${id}-bar-${i})`,\n color: colors[i] ?? '',\n capped: variant === 'capped',\n keys,\n dataKey,\n }),\n );\n }, [keyList, colorList, variant, id]);\n\n const format = valueFormatter ?? compactNumber.format;\n const plotWidth = size.width - (showYAxis ? Y_AXIS_WIDTH : 0);\n const margin = columnLabelKey ? { ...CHART_MARGIN, top: CHART_MARGIN.top + COLUMN_LABEL_SPACE } : CHART_MARGIN;\n\n return (\n <>\n <HoverDim scope={id} setter={setLit} />\n <ChartPlot\n height={height}\n plotRef={ref}\n onResize={onResize}\n clickable={!!onBucketClick && !selection.enabled}\n className={selection.className}\n >\n <ComposedChart\n data={data}\n margin={margin}\n onMouseDown={selection.onMouseDown}\n onMouseMove={state => {\n if (selection.isDragging()) return selection.onMouseMove(state);\n const index = activeIndex(state);\n setLit.current(index === undefined ? undefined : { start: index, end: index });\n }}\n onMouseLeave={() => {\n // Mid-drag the selection stays lit until the release.\n if (!selection.isDragging()) setLit.current(undefined);\n }}\n onClick={state => {\n if (selection.consumeReleaseClick()) return;\n const i = activeIndex(state);\n const row = i === undefined ? undefined : data[i];\n if (onBucketClick && row && i !== undefined) onBucketClick(row, i);\n }}\n >\n <defs>\n {series.map((s, i) => (\n <linearGradient key={s.dataKey} id={`${id}-bar-${i}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={s.color} stopOpacity={1} />\n <stop offset=\"100%\" stopColor={s.color} stopOpacity={GRADIENT_BASE} />\n </linearGradient>\n ))}\n </defs>\n <CartesianGrid {...CHART_GRID_PROPS} />\n {selection.enabled && <DragSelectionBand selection={selection} count={data.length} />}\n {timeXAxis({ data, xKey, timestampKey, xLabels, plotWidth })}\n {valueYAxis({\n show: showYAxis,\n size,\n formatter: axisFormatter ?? format,\n domain: yDomain,\n // A reference line above the bars stays on the axis.\n max: Math.max(\n dataMax(\n data,\n series.map(s => s.dataKey),\n true,\n ),\n referenceLine?.value ?? 0,\n ),\n integer: isWholeData(\n data,\n series.map(s => s.dataKey),\n ),\n })}\n {overlay &&\n valueYAxis({\n id: 'overlay',\n show: false,\n size,\n formatter: overlay.valueFormatter ?? compactNumber.format,\n max: dataMax(data, [overlay.dataKey]),\n integer: isWholeData(data, [overlay.dataKey]),\n right: true,\n })}\n <Tooltip\n {...CHART_TOOLTIP_PROPS}\n cursor={false}\n content={\n <ChartTooltipPosition>\n <MetricsLineChartTooltip\n formatValue={format}\n showTotal={showTotal && !overlay}\n labelKey={tooltipLabelKey}\n formatByKey={overlay?.valueFormatter ? { [overlay.dataKey]: overlay.valueFormatter } : undefined}\n />\n </ChartTooltipPosition>\n }\n />\n {series.map((s, i) => (\n <Bar\n key={s.dataKey}\n dataKey={s.dataKey}\n name={s.label}\n stackId=\"1\"\n fill={s.color}\n maxBarSize={maxBarSize}\n isAnimationActive={false}\n shape={shapes[i]}\n >\n {columnLabelKey && (\n <LabelList\n dataKey={columnLabelKey}\n content={(props: LabelProps) => (\n <ColumnLabel\n {...props}\n row={data[Number(props.index)]}\n keys={series.map(({ dataKey }) => dataKey)}\n self={i}\n color={s.color}\n />\n )}\n />\n )}\n </Bar>\n ))}\n {overlay && (\n <Line\n yAxisId=\"overlay\"\n type=\"monotone\"\n dataKey={overlay.dataKey}\n name={overlay.label}\n stroke={overlay.color}\n strokeWidth={1.75}\n strokeDasharray=\"4 3\"\n dot={false}\n activeDot={{ r: 3.5, fill: overlay.color, stroke: 'var(--background)', strokeWidth: 2 }}\n isAnimationActive={false}\n connectNulls\n />\n )}\n {referenceLine && (\n <ReferenceLine\n y={referenceLine.value}\n ifOverflow=\"extendDomain\"\n stroke={referenceLine.color}\n strokeDasharray=\"4 4\"\n label={{ value: referenceLine.label, position: 'insideTopLeft', ...CHART_TICK }}\n />\n )}\n </ComposedChart>\n </ChartPlot>\n </>\n );\n}\n\ntype ColumnLabelProps = LabelProps & {\n row: MetricsStackedBarChartProps['data'][number] | undefined;\n keys: string[];\n self: number;\n color: string;\n};\n\nfunction paintedTop(values: number[], self: number, box: SegmentBox) {\n if (values.length > 1) return stackedSegmentBox(values, self, box, { gap: SEGMENT_GAP })?.y;\n return singleBarBox(values[self] ?? 0, box)?.y;\n}\n\nfunction ColumnLabel({ x, y, width, height, value, row, keys, self, color }: ColumnLabelProps) {\n if (value === undefined || value === null || value === '') return null;\n const values = keys.map(key => Number(row?.[key]) || 0);\n const topmost = values.findLastIndex(v => v > 0);\n if (self !== (topmost === -1 ? keys.length - 1 : topmost)) return null;\n const top = paintedTop(values, self, { y: Number(y), height: Math.max(Number(height), 0) }) ?? Number(y);\n return (\n <text\n x={Number(x) + Number(width) / 2}\n y={top - 6}\n textAnchor=\"middle\"\n fontSize={CHART_AXIS_FONT_SIZE}\n fill={color}\n className=\"tabular-nums\"\n >\n {String(value)}\n </text>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MetricsStackedBarChart-D2QyS4-z.js","names":["_Fragment"],"sources":["../src/ds/components/MetricsStackedBarChart/metrics-stacked-bar-chart.tsx"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { Bar, CartesianGrid, ComposedChart, LabelList, Line, Rectangle, ReferenceLine, Tooltip } from 'recharts';\nimport type { LabelProps } from 'recharts';\nimport { ChartSkeleton } from '@/ds/components/ChartSkeleton';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChartLegend, MetricsLineChartTooltip } from '@/ds/components/MetricsLineChart';\nimport { CHART_GRID_PROPS, CHART_TOOLTIP_PROPS, useChartSize } from '@/ds/primitives/chart-axes';\nimport type { ChartXLabels } from '@/ds/primitives/chart-axes';\nimport { singleBarBox, stackedSegmentBox } from '@/ds/primitives/chart-column-layout';\nimport type { SegmentBox } from '@/ds/primitives/chart-column-layout';\nimport {\n CHART_TICK,\n Y_AXIS_WIDTH,\n compactNumber,\n dataMax,\n isWholeData,\n timeXAxis,\n valueYAxis,\n} from '@/ds/primitives/chart-frame';\nimport type { ChartHeight } from '@/ds/primitives/chart-frame';\nimport { CHART_AXIS_FONT_SIZE, CHART_MARGIN } from '@/ds/primitives/chart-layout';\nimport { ChartPlot } from '@/ds/primitives/chart-plot';\nimport { ChartTooltipPosition } from '@/ds/primitives/chart-tooltip-position';\nimport { DragSelectionBand, activeIndex, useDragSelection } from '@/ds/primitives/charts/drag-selection';\nimport type { DragSelectionRange } from '@/ds/primitives/charts/drag-selection';\nimport { useChartDefsId } from '@/ds/primitives/use-chart-defs-id';\nimport { cn } from '@/lib/utils';\n\n/** Corner radius of every segment; thin segments scale it down so they stay crisp rectangles. */\nconst RADIUS = 2;\n/** Pixels between stacked segments, so neighbouring segments read as separate blocks. */\nconst SEGMENT_GAP = 2;\n/** Opacity at the base of a segment's gradient (the top is fully opaque). */\nconst GRADIENT_BASE = 0.75;\n/** Single-series bars: translucent body under a solid cap that marks the value. */\nconst CAP_BODY = 0.55;\nconst CAP_HEIGHT = 3;\n/** Opacity of the other columns while one is hovered. */\nconst DIMMED = 0.3;\nconst COLUMN_LABEL_SPACE = 16;\n\ntype SegmentProps = {\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n index?: number;\n payload?: Record<string, unknown>;\n};\n\nfunction segmentShape({\n fill,\n color,\n capped,\n keys,\n dataKey,\n}: {\n fill: string;\n color: string;\n capped: boolean;\n /** The column's data keys, bottom to top. */\n keys: string[];\n dataKey: string;\n}) {\n return function Segment({ x = 0, width = 0, index, payload, ...geo }: SegmentProps) {\n const values = keys.map(k => Number(payload?.[k]) || 0);\n const self = keys.indexOf(dataKey);\n const box = { y: geo.y ?? 0, height: Math.max(geo.height ?? 0, 0) };\n // Every non-zero value gets a few readable pixels; zeros draw nothing.\n const laid =\n keys.length > 1\n ? stackedSegmentBox(values, self, box, { gap: SEGMENT_GAP })\n : singleBarBox(values[self] ?? 0, box);\n if (!laid) return <g />;\n const { y, height: h } = laid;\n const radius = Math.min(RADIUS, Math.floor(h / 3));\n // Dimming is a CSS rule keyed on `data-bucket` (see `HoverDim`), so hovering re-renders no bars.\n const bucket = { 'data-bucket': index };\n\n if (capped) {\n return (\n <g {...bucket}>\n <Rectangle x={x} y={y} width={width} height={h} radius={radius} fill={color} fillOpacity={CAP_BODY} />\n <Rectangle x={x} y={y} width={width} height={Math.min(CAP_HEIGHT, h)} radius={radius} fill={color} />\n </g>\n );\n }\n return (\n <g {...bucket}>\n <Rectangle x={x} y={y} width={width} height={h} radius={radius} fill={fill} />\n </g>\n );\n };\n}\n\n/**\n * Dims every column outside the hovered one, or outside the range being dragged. Its own tiny\n * state, so a move only re-renders this <style> tag: with hundreds of buckets, re-rendering the\n * bars on each move froze the pointer.\n */\nfunction HoverDim({\n scope,\n setter,\n}: {\n scope: string;\n setter: { current: (range: DragSelectionRange | undefined) => void };\n}) {\n const [lit, setLit] = useState<DragSelectionRange>();\n useLayoutEffect(() => {\n setter.current = setLit;\n }, [setter]);\n if (!lit) return null;\n const columns = `[data-chart-scope=\"${scope}\"] [data-bucket]`;\n const kept = Array.from(\n { length: lit.end - lit.start + 1 },\n (_, i) => `${columns}[data-bucket=\"${lit.start + i}\"]`,\n ).join(',');\n return <style>{`${columns}{opacity:${DIMMED}}${kept}{opacity:1}`}</style>;\n}\n\n/** A line drawn over the bars on its own scale, e.g. average wake time over cold starts. */\nexport type MetricsStackedBarChartOverlay = MetricsLineChartSeries & {\n valueFormatter?: (value: number) => string;\n};\n\nexport type MetricsStackedBarChartProps = {\n data: Record<string, unknown>[];\n series: MetricsLineChartSeries[];\n /** Pixels, or `fill` to grow with the parent (a flex column, e.g. a card's content). */\n height?: ChartHeight;\n yDomain?: [number, number];\n /** Formats tooltip values, and y-axis ticks unless `axisFormatter` is set. */\n valueFormatter?: (value: number) => string;\n /** Formats y-axis ticks, when they need a shorter form than the tooltip. */\n axisFormatter?: (value: number) => string;\n showLegend?: boolean;\n referenceLine?: { value: number; label: string; color: string };\n /**\n * `gradient`: segments fade gently toward the base. Reads best for stacks.\n * `capped`: a translucent body under a solid cap that marks the value. Reads best for one\n * value per column.\n */\n variant?: 'gradient' | 'capped';\n /**\n * Set to `false` to drop the y-axis labels and let the plot span the card. The gridlines stay\n * for relative scale; exact values come from the tooltip and the card's summary.\n */\n showYAxis?: boolean;\n /** Adds a \"Total\" row (the column's height) to the tooltip. Defaults to on for stacks. */\n showTotal?: boolean;\n /** Row field printed under the x-axis. */\n xKey?: string;\n /** Row field with the bucket's start time (ms), which places labels on round clock times. */\n timestampKey?: string;\n /** `auto` fits as many labels as the width allows; `edges` prints only the first and last. */\n xLabels?: ChartXLabels;\n /** Row field for the tooltip heading (e.g. a longer date); defaults to the x-axis label. */\n tooltipLabelKey?: string;\n columnLabelKey?: string;\n /** Widest a column gets, in pixels. Defaults to 28; raise it for dense strips of many thin columns. */\n maxBarSize?: number;\n /** Click a column (e.g. to open its traces); the plot shows a pointer cursor. */\n onBucketClick?: (row: Record<string, unknown>, index: number) => void;\n /**\n * Drag across two or more columns to select them (e.g. to zoom into that time span); reports the\n * first and last selected row indices. A press and release on one column stays a click.\n */\n onZoom?: (range: DragSelectionRange) => void;\n /** One dashed line over the bars, on its own hidden scale (e.g. a duration over counts). */\n overlay?: MetricsStackedBarChartOverlay;\n /** Show a ghost of the chart while data loads, in the chart's own footprint. */\n isLoading?: boolean;\n className?: string;\n};\n\nexport function MetricsStackedBarChart(props: MetricsStackedBarChartProps) {\n const { data, series, overlay, height = 210, showLegend = true, isLoading = false, className } = props;\n const id = useChartDefsId();\n const root = cn(height === 'fill' && 'flex min-h-0 flex-1 flex-col', className);\n const legend = overlay ? [...series, { ...overlay, dashed: true }] : series;\n // The legend stays while loading: it comes from the series, not the data.\n return (\n <div className={root} data-chart-scope={id}>\n {showLegend && <MetricsLineChartLegend series={legend} className=\"mb-4\" />}\n {isLoading ? <ChartSkeleton kind=\"bar\" height={height} /> : <BarPlot {...props} id={id} />}\n </div>\n );\n}\n\n/** The plot itself, once the data is in; `id` scopes its gradients and hover rule. */\nfunction BarPlot({\n data,\n series,\n height = 210,\n yDomain,\n valueFormatter,\n axisFormatter,\n referenceLine,\n variant = 'gradient',\n showYAxis = true,\n showTotal = series.length > 1,\n xKey = 'time',\n timestampKey = 'tsMs',\n xLabels = 'auto',\n tooltipLabelKey,\n columnLabelKey,\n maxBarSize = 28,\n onBucketClick,\n onZoom,\n overlay,\n id,\n}: MetricsStackedBarChartProps & { id: string }) {\n const setLit = useRef<(range: DragSelectionRange | undefined) => void>(() => {});\n const { size, onResize, ref } = useChartSize();\n // The dragged columns stay lit through the same rule as hover, so a drag never re-renders the bars.\n const selection = useDragSelection({ onSelect: onZoom, onPreview: range => setLit.current(range) });\n\n const keyList = series.map(s => s.dataKey).join('\\u0000');\n const colorList = series.map(s => s.color).join('\\u0000');\n // Stable shapes, so Recharts doesn't re-render every bar when the parent re-renders.\n const shapes = useMemo(() => {\n const keys = keyList.split('\\u0000');\n const colors = colorList.split('\\u0000');\n return keys.map((dataKey, i) =>\n segmentShape({\n fill: `url(#${id}-bar-${i})`,\n color: colors[i] ?? '',\n capped: variant === 'capped',\n keys,\n dataKey,\n }),\n );\n }, [keyList, colorList, variant, id]);\n\n const format = valueFormatter ?? compactNumber.format;\n const plotWidth = size.width - (showYAxis ? Y_AXIS_WIDTH : 0);\n const margin = columnLabelKey ? { ...CHART_MARGIN, top: CHART_MARGIN.top + COLUMN_LABEL_SPACE } : CHART_MARGIN;\n\n return (\n <>\n <HoverDim scope={id} setter={setLit} />\n <ChartPlot\n height={height}\n plotRef={ref}\n onResize={onResize}\n clickable={!!onBucketClick && !selection.enabled}\n className={selection.className}\n >\n <ComposedChart\n data={data}\n margin={margin}\n onMouseDown={selection.onMouseDown}\n onMouseMove={state => {\n if (selection.isDragging()) return selection.onMouseMove(state);\n const index = activeIndex(state);\n setLit.current(index === undefined ? undefined : { start: index, end: index });\n }}\n onMouseLeave={() => {\n // Mid-drag the selection stays lit until the release.\n if (!selection.isDragging()) setLit.current(undefined);\n }}\n onClick={state => {\n if (selection.consumeReleaseClick()) return;\n const i = activeIndex(state);\n const row = i === undefined ? undefined : data[i];\n if (onBucketClick && row && i !== undefined) onBucketClick(row, i);\n }}\n >\n <defs>\n {series.map((s, i) => (\n <linearGradient key={s.dataKey} id={`${id}-bar-${i}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={s.color} stopOpacity={1} />\n <stop offset=\"100%\" stopColor={s.color} stopOpacity={GRADIENT_BASE} />\n </linearGradient>\n ))}\n </defs>\n <CartesianGrid {...CHART_GRID_PROPS} />\n {selection.enabled && <DragSelectionBand selection={selection} count={data.length} />}\n {timeXAxis({ data, xKey, timestampKey, xLabels, plotWidth })}\n {valueYAxis({\n show: showYAxis,\n size,\n formatter: axisFormatter ?? format,\n domain: yDomain,\n // A reference line above the bars stays on the axis.\n max: Math.max(\n dataMax(\n data,\n series.map(s => s.dataKey),\n true,\n ),\n referenceLine?.value ?? 0,\n ),\n integer: isWholeData(\n data,\n series.map(s => s.dataKey),\n ),\n })}\n {overlay &&\n valueYAxis({\n id: 'overlay',\n show: false,\n size,\n formatter: overlay.valueFormatter ?? compactNumber.format,\n max: dataMax(data, [overlay.dataKey]),\n integer: isWholeData(data, [overlay.dataKey]),\n right: true,\n })}\n <Tooltip\n {...CHART_TOOLTIP_PROPS}\n cursor={false}\n content={\n <ChartTooltipPosition>\n <MetricsLineChartTooltip\n formatValue={format}\n showTotal={showTotal && !overlay}\n labelKey={tooltipLabelKey}\n formatByKey={overlay?.valueFormatter ? { [overlay.dataKey]: overlay.valueFormatter } : undefined}\n />\n </ChartTooltipPosition>\n }\n />\n {series.map((s, i) => (\n <Bar\n key={s.dataKey}\n dataKey={s.dataKey}\n name={s.label}\n stackId=\"1\"\n fill={s.color}\n maxBarSize={maxBarSize}\n isAnimationActive={false}\n shape={shapes[i]}\n >\n {columnLabelKey && (\n <LabelList\n dataKey={columnLabelKey}\n content={(props: LabelProps) => (\n <ColumnLabel\n {...props}\n row={data[Number(props.index)]}\n keys={series.map(({ dataKey }) => dataKey)}\n self={i}\n color={s.color}\n />\n )}\n />\n )}\n </Bar>\n ))}\n {overlay && (\n <Line\n yAxisId=\"overlay\"\n type=\"monotone\"\n dataKey={overlay.dataKey}\n name={overlay.label}\n stroke={overlay.color}\n strokeWidth={1.75}\n strokeDasharray=\"4 3\"\n dot={false}\n activeDot={{ r: 3.5, fill: overlay.color, stroke: 'var(--background)', strokeWidth: 2 }}\n isAnimationActive={false}\n connectNulls\n />\n )}\n {referenceLine && (\n <ReferenceLine\n y={referenceLine.value}\n ifOverflow=\"extendDomain\"\n stroke={referenceLine.color}\n strokeDasharray=\"4 4\"\n label={{ value: referenceLine.label, position: 'insideTopLeft', ...CHART_TICK }}\n />\n )}\n </ComposedChart>\n </ChartPlot>\n </>\n );\n}\n\ntype ColumnLabelProps = LabelProps & {\n row: MetricsStackedBarChartProps['data'][number] | undefined;\n keys: string[];\n self: number;\n color: string;\n};\n\nfunction paintedTop(values: number[], self: number, box: SegmentBox) {\n if (values.length > 1) return stackedSegmentBox(values, self, box, { gap: SEGMENT_GAP })?.y;\n return singleBarBox(values[self] ?? 0, box)?.y;\n}\n\nfunction ColumnLabel({ x, y, width, height, value, row, keys, self, color }: ColumnLabelProps) {\n if (value === undefined || value === null || value === '') return null;\n const values = keys.map(key => Number(row?.[key]) || 0);\n const topmost = values.findLastIndex(v => v > 0);\n if (self !== (topmost === -1 ? keys.length - 1 : topmost)) return null;\n const top = paintedTop(values, self, { y: Number(y), height: Math.max(Number(height), 0) }) ?? Number(y);\n return (\n <text\n x={Number(x) + Number(width) / 2}\n y={top - 6}\n textAnchor=\"middle\"\n fontSize={CHART_AXIS_FONT_SIZE}\n fill={color}\n className=\"tabular-nums\"\n >\n {String(value)}\n </text>\n );\n}\n"],"mappings":"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"}
@@ -8,7 +8,7 @@ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "./component
8
8
  import { DisclosureChevron } from "./components/DisclosureChevron.es.js";
9
9
  import { Shimmer } from "./components/Shimmer.es.js";
10
10
  import { t as Badge } from "./Badge-aVu5iGAF.js";
11
- import { t as MarkdownRenderer } from "./MarkdownRenderer-2GOXQJEv.js";
11
+ import { t as MarkdownRenderer } from "./MarkdownRenderer-CI30RqdB.js";
12
12
  import { createContext, useContext, useId, useState } from "react";
13
13
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
14
14
  import { Bell, ExternalLink, X } from "lucide-react";
@@ -447,4 +447,4 @@ function SignalActivity({ appearance = "row", ...signal }) {
447
447
  }
448
448
  export { useRelativePaths as S, ActivitySpacer as _, ReasoningText as a, ActivityTrigger as b, ActivityContent as c, ActivityHeader as d, ActivityHeadline as f, ActivityLeading as g, ActivityLabel as h, hasVisibleReasoning as i, ActivityDetail as l, ActivityItem as m, ReasoningActivity as n, NotificationActivity as o, ActivityIcon$1 as p, hasReasoningText as r, Activity as s, SignalActivity as t, ActivityDisclosure as u, ActivitySummary as v, ActivityWorkingDirectory as x, ActivityTrailing as y };
449
449
 
450
- //# sourceMappingURL=activity-rJ1NQl_2.js.map
450
+ //# sourceMappingURL=activity-C8Ql81WM.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"activity-rJ1NQl_2.js","names":["ActivityIcon","_Fragment","ActivityIcon","_Fragment"],"sources":["../src/ds/components/ai/activity/use-relative-paths.ts","../src/ds/components/ai/activity/activity.tsx","../src/ds/components/ai/activity/presets/message-preview.ts","../src/ds/components/ai/activity/presets/notification-activity.tsx","../src/ds/components/ai/activity/presets/reasoning-text.tsx","../src/ds/components/ai/activity/presets/reasoning-visibility.ts","../src/ds/components/ai/activity/presets/reasoning-activity.tsx","../src/ds/components/ai/activity/presets/signal-activity.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport const WorkingDirectoryContext = createContext<string | undefined>(undefined);\n\nfunction relativeTo(directory: string | undefined, text: string): string {\n const root = directory?.replace(/\\/+$/, '');\n if (!root) return text;\n const escaped = root.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return text.replace(new RegExp(`(?<![^\\\\s'\"=(])${escaped}(?:/(?=[^\\\\s/])|(?![\\\\w.-]))`, 'g'), match =>\n match.endsWith('/') ? '' : '.',\n );\n}\n\n/** Rewrites text the way `ActivityDetail` shows it, for names that must say the same thing. */\nexport function useRelativePaths(): (text: string) => string {\n const directory = useContext(WorkingDirectoryContext);\n return text => relativeTo(directory, text);\n}\n","import { X } from 'lucide-react';\nimport { createContext, useContext, useId, useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport { useRelativePaths, WorkingDirectoryContext } from './use-relative-paths';\nimport { ArrivalScope, useArriving } from '@/ds/components/Arrival';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { Shimmer } from '@/ds/components/Shimmer';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\ntype ActivityStatus = 'idle' | 'running' | 'error';\n\n/** `row` sits on a hover surface; `inline` reads as text beside prose: no surface, no inset, the line lifts on hover. */\ntype ActivityAppearance = 'row' | 'inline';\n\ninterface ActivityContextValue {\n open: boolean;\n foldable: boolean;\n status: ActivityStatus;\n appearance: ActivityAppearance;\n nested: boolean;\n toggle: () => void;\n}\n\nconst LIFTS = 'transition-colors motion-reduce:transition-none';\nconst LIFTS_TO_FOREGROUND = `${LIFTS} group-hover/row:text-foreground group-has-focus-visible/row:text-foreground`;\nconst LIFTS_TO_MUTED = `${LIFTS} group-hover/row:text-muted-foreground group-has-focus-visible/row:text-muted-foreground`;\n\nconst ActivityContext = createContext<ActivityContextValue | undefined>(undefined);\n\n// Stryker disable next-line ArrowFunction: the default callback is intentionally behaviorless.\nconst noopOpenChange = () => {};\n\nfunction useActivity() {\n const context = useContext(ActivityContext);\n if (!context) throw new Error('Activity compounds must be rendered within Activity');\n return context;\n}\n\nfunction useInline() {\n return useContext(ActivityContext)?.appearance === 'inline';\n}\n\nexport interface ActivityProps extends Omit<\n ComponentProps<typeof Collapsible>,\n 'defaultOpen' | 'onOpenChange' | 'open'\n> {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n foldable?: boolean;\n status?: ActivityStatus;\n appearance?: ActivityAppearance;\n}\n\nexport function Activity({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange = noopOpenChange,\n foldable = true,\n status = 'idle',\n appearance = 'row',\n className,\n children,\n ...props\n}: ActivityProps) {\n const nested = useContext(ActivityContext) !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const open = controlledOpen ?? (foldable && uncontrolledOpen);\n const statusId = useId();\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (controlledOpen === undefined) setUncontrolledOpen(nextOpen);\n onOpenChange(nextOpen);\n };\n\n return (\n <ActivityContext.Provider\n value={{ open, foldable, status, appearance, nested, toggle: () => handleOpenChange(!open) }}\n >\n <Collapsible\n open={open}\n onOpenChange={handleOpenChange}\n className={cn('max-w-full min-w-0', className)}\n role=\"group\"\n aria-busy={status === 'running'}\n aria-invalid={status === 'error' || undefined}\n aria-describedby={status === 'idle' ? undefined : statusId}\n data-status={status}\n {...props}\n >\n {children}\n <span id={statusId} className=\"sr-only\" aria-live=\"polite\">\n {status === 'running' && 'Running'}\n {status === 'error' && 'Failed'}\n </span>\n </Collapsible>\n </ActivityContext.Provider>\n );\n}\n\nexport const ActivityTrigger = ({ className, children, ...props }: ComponentProps<'div'>) => {\n const { foldable, appearance } = useActivity();\n const lineId = useId();\n\n return (\n <div\n className={cn(\n 'group/row relative w-full min-w-0 rounded-md transition-colors motion-reduce:transition-none',\n foldable && appearance === 'row' && 'hover:bg-fill',\n className,\n )}\n {...props}\n >\n {foldable && (\n <CollapsibleTrigger\n aria-labelledby={lineId}\n className=\"absolute inset-0 cursor-pointer rounded-md focus-visible:ring-1 focus-visible:ring-border-focus focus-visible:outline-hidden\"\n />\n )}\n <div id={lineId} className={cn(foldable && 'pointer-events-none relative')}>\n {children}\n </div>\n </div>\n );\n};\n\nexport const ActivityHeader = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { status, appearance } = useActivity();\n\n return (\n <Shimmer\n active={status === 'running'}\n className={cn(\n 'flex min-w-0 items-center gap-2 py-1',\n appearance === 'inline' ? 'w-fit max-w-full' : 'w-full px-1.5',\n className,\n )}\n {...props}\n >\n {children}\n </Shimmer>\n );\n};\n\nexport const ActivityLeading = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { foldable, toggle } = useActivity();\n\n if (!children) return null;\n\n return (\n <span\n className={cn('pointer-events-auto flex shrink-0 empty:hidden', foldable && 'cursor-pointer', className)}\n onClick={foldable ? toggle : undefined}\n {...props}\n >\n {children}\n </span>\n );\n};\n\nexport const ActivityIcon = ({ className, ...props }: ComponentProps<'span'>) => {\n const { status, appearance } = useActivity();\n\n return (\n <span\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center [&_svg]:size-3.5 [&_svg]:shrink-0',\n status === 'error' ? 'text-destructive-foreground' : 'text-placeholder',\n status !== 'error' && appearance === 'inline' && LIFTS_TO_MUTED,\n className,\n )}\n {...props}\n />\n );\n};\n\nexport interface ActivityLabelProps extends ComponentProps<typeof Txt> {\n wrap?: boolean;\n}\n\nexport const ActivityLabel = ({ wrap = false, className, ...props }: ActivityLabelProps) => {\n const inline = useInline();\n\n return (\n <Txt\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n className={cn(\n wrap ? 'min-w-0 break-words' : 'shrink-0 truncate',\n inline ? `max-w-none ${LIFTS_TO_FOREGROUND}` : 'max-w-[55%]',\n className,\n )}\n {...props}\n />\n );\n};\n\n/** Paths under the agent's working directory read relative to it, the way the agent itself refers to them. */\nexport function ActivityWorkingDirectory({ path, children }: { path: string | undefined; children: ReactNode }) {\n return <WorkingDirectoryContext value={path}>{children}</WorkingDirectoryContext>;\n}\n\nexport interface ActivityDetailProps extends Omit<ComponentProps<typeof Txt>, 'font'> {\n wrap?: boolean;\n}\n\nexport const ActivityDetail = ({ wrap = false, className, children, ...props }: ActivityDetailProps) => {\n const arriving = useArriving();\n const inline = useInline();\n const relative = useRelativePaths();\n\n return (\n <Txt\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n className={cn('min-w-0', wrap ? 'break-words' : 'truncate', inline && LIFTS_TO_FOREGROUND, arriving, className)}\n {...props}\n >\n {typeof children === 'string' ? relative(children) : children}\n </Txt>\n );\n};\n\nexport const ActivitySummary = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('flex min-w-0 items-center gap-1', className)} {...props} />\n);\n\nexport interface ActivitySpacerProps extends ComponentProps<'span'> {\n rule?: boolean;\n}\n\nexport const ActivitySpacer = ({ rule, className, ...props }: ActivitySpacerProps) => {\n const inline = useInline();\n\n return (\n <span\n aria-hidden\n className={cn(\n 'min-w-2 flex-1',\n rule && 'h-px bg-border mask-r-from-[calc(100%-min(100%,160px))]',\n inline && !rule && 'hidden',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const ActivityTrailing = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('flex shrink-0 items-center', className)} {...props} />\n);\n\nexport const ActivityDisclosure = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { open, foldable, nested } = useActivity();\n\n return (\n <span\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center transition-opacity duration-150 motion-reduce:transition-none starting:opacity-0',\n !foldable && 'hidden',\n foldable && nested && 'hidden group-hover/row:flex group-has-focus-visible/row:flex',\n className,\n )}\n {...props}\n >\n <span\n aria-hidden\n className={cn(\n 'flex shrink-0 items-center text-muted-foreground/60 transition duration-150 motion-reduce:transition-none',\n 'group-hover/row:text-muted-foreground group-has-focus-visible/row:text-muted-foreground',\n open && 'text-muted-foreground',\n open && children != null && 'rotate-90',\n )}\n >\n {children ?? <DisclosureChevron direction=\"right\" open={open} className=\"size-3.25\" />}\n </span>\n </span>\n );\n};\n\nexport interface ActivityHeadlineProps extends Omit<ComponentProps<typeof ActivityHeader>, 'children'> {\n leading?: ReactNode;\n icon: ReactNode;\n label: ReactNode;\n detail?: string;\n description?: string;\n wrapDetail?: boolean;\n badges?: ReactNode;\n}\n\nexport const ActivityHeadline = ({\n leading,\n icon,\n label,\n detail,\n description,\n wrapDetail,\n badges,\n ...props\n}: ActivityHeadlineProps) => {\n const { status, appearance } = useActivity();\n const hasBadges = Boolean(badges);\n const labelShrinks = Boolean(description) || (appearance === 'inline' && !detail);\n\n return (\n <ActivityHeader {...props}>\n <ActivityLeading>{leading}</ActivityLeading>\n <ActivityIcon>{icon}</ActivityIcon>\n <span className={cn('contents', hasBadges && 'flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1')}>\n <ActivityLabel className={cn(labelShrinks && 'max-w-none min-w-0 shrink')}>\n {description || label}\n </ActivityLabel>\n {badges}\n {!description && detail && (\n <ActivityDetail wrap={wrapDetail} className={cn(hasBadges && 'grow basis-40')}>\n {detail}\n </ActivityDetail>\n )}\n </span>\n <ActivitySpacer className={cn(hasBadges && 'flex-none')} />\n {status === 'error' && (\n <ActivityTrailing>\n <X size={13} role=\"img\" aria-label=\"Failed\" className=\"shrink-0 text-destructive-foreground\" />\n </ActivityTrailing>\n )}\n <ActivityDisclosure />\n </ActivityHeader>\n );\n};\n\nexport interface ActivityContentProps extends ComponentProps<typeof CollapsibleContent> {\n /** Drop the rail and its indent, so the content lines up with the text around the line. */\n flush?: boolean;\n}\n\nexport const ActivityContent = ({ flush = false, className, children, ...props }: ActivityContentProps) => {\n const inline = useInline();\n\n return (\n <CollapsibleContent className=\"max-w-full min-w-0\" {...props}>\n <div\n className={cn(\n 'relative flex max-w-full min-w-0 flex-col py-1.5',\n !flush &&\n \"gap-1.5 pr-1 pl-4 before:absolute before:inset-y-0 before:left-0 before:w-px before:bg-border before:mask-b-from-[calc(100%-min(40%,80px))] before:content-['']\",\n !flush && (inline ? 'ml-2' : 'ml-[14px]'),\n className,\n )}\n >\n <ArrivalScope>{children}</ArrivalScope>\n </div>\n </CollapsibleContent>\n );\n};\n\nexport interface ActivityItemProps extends Omit<ActivityProps, 'children' | 'open' | 'onOpenChange' | 'foldable'> {\n icon: ReactNode;\n label: string;\n detail?: string;\n badges?: ReactNode;\n collapsible?: boolean;\n children?: ReactNode;\n 'aria-label': string;\n}\n\nexport function ActivityItem({\n icon,\n label,\n detail,\n badges,\n collapsible = true,\n children,\n ...props\n}: ActivityItemProps) {\n const folds = collapsible && Boolean(children);\n\n return (\n <Activity {...props} foldable={folds} open={collapsible ? undefined : true}>\n <ActivityTrigger>\n <ActivityHeadline icon={icon} label={label} detail={detail} wrapDetail={!folds} badges={badges} />\n </ActivityTrigger>\n {children && <ActivityContent>{children}</ActivityContent>}\n </Activity>\n );\n}\n\nexport type { ActivityAppearance, ActivityStatus };\n","import { truncateString } from '@/lib/truncate-string';\n\nexport function messagePreview(message: string): string {\n return truncateString(message, 72);\n}\n\nexport function messagePreviewShowsAll(message: string): boolean {\n return !message.includes('\\n') && messagePreview(message) === message;\n}\n","import { Bell, ExternalLink } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { ActivityItem } from '../activity';\nimport { messagePreview, messagePreviewShowsAll } from './message-preview';\nimport { Badge } from '@/ds/components/Badge';\nimport type { BadgeVariant } from '@/ds/components/Badge';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface NotificationActivityProps {\n label: string;\n message: string;\n state?: string;\n icon?: ReactNode;\n priority?: string;\n status?: string;\n pending?: string;\n link?: { href: string; label: string };\n defaultOpen?: boolean;\n /** Badges rendered after the priority, status and pending badges. */\n extraBadges?: ReactNode;\n /** A label shown above the message once opened, e.g. to flag it as untrusted. */\n messageLabel?: string;\n}\n\nconst priorityBadgeVariants: Partial<Record<string, BadgeVariant>> = {\n urgent: 'red',\n high: 'orange',\n medium: 'blue',\n};\n\nexport function NotificationActivity({\n label,\n message,\n state = 'notification',\n icon,\n priority,\n status,\n pending,\n link,\n defaultOpen,\n extraBadges,\n messageLabel,\n}: NotificationActivityProps) {\n const lineHoldsMessage = messagePreviewShowsAll(message) && !messageLabel;\n const hasBadges = Boolean(priority || status || pending || extraBadges);\n\n return (\n <ActivityItem\n label={label}\n detail={messagePreview(message)}\n icon={icon ?? <Bell className=\"text-warning-foreground\" aria-hidden />}\n badges={\n hasBadges && (\n <>\n {priority && (\n <Badge size=\"xs\" variant={priorityBadgeVariants[priority]}>\n {priority}\n </Badge>\n )}\n {status && <Badge size=\"xs\">{status}</Badge>}\n {pending && <Badge size=\"xs\">{pending} pending</Badge>}\n {extraBadges}\n </>\n )\n }\n defaultOpen={defaultOpen}\n data-notification-state={state}\n aria-label={`Notification: ${label}`}\n >\n {(!lineHoldsMessage || link) && (\n <div className=\"flex flex-col gap-2\">\n {messageLabel && (\n <Txt variant=\"caption\" tone=\"muted\">\n {messageLabel}\n </Txt>\n )}\n {message && (\n <Txt variant=\"caption\" className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n )}\n {link && <NotificationLink link={link} message={message} />}\n </div>\n )}\n </ActivityItem>\n );\n}\n\nfunction NotificationLink({\n link,\n message,\n}: {\n link: NonNullable<NotificationActivityProps['link']>;\n message: string;\n}) {\n return (\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={`${link.label}: ${messagePreview(message)}`}\n className=\"flex w-fit items-center gap-1 text-meta text-muted-foreground hover:text-foreground\"\n >\n {link.label}\n <ExternalLink size={12} aria-hidden />\n </a>\n );\n}\n","import type { ReasoningContent } from './reasoning-visibility';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\n\nexport interface ReasoningTextProps {\n content: ReasoningContent;\n className?: string;\n}\n\nexport function ReasoningText({ content: { text, redacted, streaming }, className }: ReasoningTextProps) {\n return (\n <MarkdownRenderer className={className} streaming={streaming && !redacted}>\n {redacted ? 'Reasoning was redacted by the provider.' : text}\n </MarkdownRenderer>\n );\n}\n","export interface ReasoningContent {\n text: string;\n redacted?: boolean;\n streaming?: boolean;\n}\n\nexport function hasVisibleReasoning({ text, redacted, streaming }: ReasoningContent): boolean {\n return Boolean(streaming || redacted) || hasReasoningText({ text, redacted });\n}\n\n/** Whether the passage has something to read: its text, or the notice that it was redacted. */\nexport function hasReasoningText({ text, redacted }: ReasoningContent): boolean {\n return Boolean(redacted) || text.trim().length > 0;\n}\n","import { ActivityItem } from '../activity';\nimport { ReasoningText } from './reasoning-text';\nimport { hasReasoningText, hasVisibleReasoning } from './reasoning-visibility';\nimport type { ReasoningContent } from './reasoning-visibility';\nimport { agentGlyph } from '@/ds/components/AgentIndicator';\n\nconst ThinkingGlyph = agentGlyph('thinking');\n\nexport interface ReasoningActivityProps extends ReasoningContent {\n defaultOpen?: boolean;\n}\n\nexport function ReasoningActivity({ defaultOpen = true, ...content }: ReasoningActivityProps) {\n if (!hasVisibleReasoning(content)) return null;\n\n return (\n <ActivityItem\n icon={<ThinkingGlyph aria-hidden />}\n label=\"Reasoning\"\n status={content.streaming ? 'running' : 'idle'}\n defaultOpen={defaultOpen}\n aria-label=\"Reasoning\"\n >\n {hasReasoningText(content) && (\n <ReasoningText content={content} className=\"text-caption text-muted-foreground [&_p]:my-0.5\" />\n )}\n </ActivityItem>\n );\n}\n","import {\n Activity,\n ActivityContent,\n ActivityDetail,\n ActivityDisclosure,\n ActivityHeader,\n ActivityIcon,\n ActivityItem,\n ActivityLabel,\n ActivityTrigger,\n} from '../activity';\nimport type { ActivityAppearance } from '../activity';\nimport { messagePreview, messagePreviewShowsAll } from './message-preview';\nimport { agentGlyph } from '@/ds/components/AgentIndicator';\nimport { Badge } from '@/ds/components/Badge';\nimport { Txt } from '@/ds/components/Txt';\nimport { humanize } from '@/lib/string';\n\nexport interface SignalActivityProps {\n kind: 'state' | 'reactive' | 'reminder';\n label: string;\n message: string;\n detail?: string;\n mode?: string;\n defaultOpen?: boolean;\n /** `inline` reads like the agent's own lines: their glyph, type and weight, the message as prose. */\n appearance?: ActivityAppearance;\n}\n\nconst signalKinds = {\n state: {\n Icon: agentGlyph('context'),\n accent: 'text-badge-purple-indicator',\n body: { variant: 'caption' },\n },\n reactive: {\n Icon: agentGlyph('notice'),\n accent: undefined,\n body: { variant: 'caption' },\n },\n reminder: {\n Icon: agentGlyph('notice'),\n accent: 'text-info-indicator',\n body: { variant: 'meta', font: 'mono' },\n },\n} as const;\n\nfunction SignalLine({ kind, label, message, detail, mode, defaultOpen }: Omit<SignalActivityProps, 'appearance'>) {\n const { Icon } = signalKinds[kind];\n const name = humanize(label);\n const lineHoldsMessage = detail === undefined && messagePreviewShowsAll(message);\n\n return (\n <Activity\n appearance=\"inline\"\n foldable={!lineHoldsMessage}\n defaultOpen={defaultOpen}\n data-signal-kind={kind}\n aria-label={`Signal: ${name}`}\n >\n <ActivityTrigger>\n <ActivityHeader>\n <ActivityIcon className=\"[&_svg]:size-4\">\n <Icon />\n </ActivityIcon>\n <ActivityLabel className=\"text-body font-medium\">{name}</ActivityLabel>\n {mode && <ActivityLabel className=\"-ml-1 text-body before:content-['·_']\">{mode}</ActivityLabel>}\n {detail && <ActivityDetail className=\"text-body-sm\">{detail}</ActivityDetail>}\n {lineHoldsMessage && message && (\n <ActivityLabel wrap className=\"text-body\">\n {message}\n </ActivityLabel>\n )}\n <ActivityDisclosure />\n </ActivityHeader>\n </ActivityTrigger>\n {!lineHoldsMessage && (\n <ActivityContent>\n <Txt tone=\"muted\" className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n </ActivityContent>\n )}\n </Activity>\n );\n}\n\nexport function SignalActivity({ appearance = 'row', ...signal }: SignalActivityProps) {\n if (appearance === 'inline') return <SignalLine {...signal} />;\n const { kind, label, message, detail, mode, defaultOpen } = signal;\n const { Icon, accent, body } = signalKinds[kind];\n const lineHoldsMessage = detail === undefined && messagePreviewShowsAll(message);\n\n return (\n <ActivityItem\n icon={<Icon className={accent} aria-hidden />}\n label={label}\n detail={detail ?? messagePreview(message)}\n badges={mode ? <Badge size=\"xs\">{mode}</Badge> : undefined}\n defaultOpen={defaultOpen}\n data-signal-kind={kind}\n aria-label={`Signal: ${label}`}\n >\n {message && !lineHoldsMessage && (\n <>\n {detail && (\n <Txt variant=\"meta\" font=\"mono\" tone=\"muted\" className=\"break-all\">\n {detail}\n </Txt>\n )}\n <Txt {...body} className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n </>\n )}\n </ActivityItem>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"activity-C8Ql81WM.js","names":["ActivityIcon","_Fragment","ActivityIcon","_Fragment"],"sources":["../src/ds/components/ai/activity/use-relative-paths.ts","../src/ds/components/ai/activity/activity.tsx","../src/ds/components/ai/activity/presets/message-preview.ts","../src/ds/components/ai/activity/presets/notification-activity.tsx","../src/ds/components/ai/activity/presets/reasoning-text.tsx","../src/ds/components/ai/activity/presets/reasoning-visibility.ts","../src/ds/components/ai/activity/presets/reasoning-activity.tsx","../src/ds/components/ai/activity/presets/signal-activity.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport const WorkingDirectoryContext = createContext<string | undefined>(undefined);\n\nfunction relativeTo(directory: string | undefined, text: string): string {\n const root = directory?.replace(/\\/+$/, '');\n if (!root) return text;\n const escaped = root.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return text.replace(new RegExp(`(?<![^\\\\s'\"=(])${escaped}(?:/(?=[^\\\\s/])|(?![\\\\w.-]))`, 'g'), match =>\n match.endsWith('/') ? '' : '.',\n );\n}\n\n/** Rewrites text the way `ActivityDetail` shows it, for names that must say the same thing. */\nexport function useRelativePaths(): (text: string) => string {\n const directory = useContext(WorkingDirectoryContext);\n return text => relativeTo(directory, text);\n}\n","import { X } from 'lucide-react';\nimport { createContext, useContext, useId, useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport { useRelativePaths, WorkingDirectoryContext } from './use-relative-paths';\nimport { ArrivalScope, useArriving } from '@/ds/components/Arrival';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { Shimmer } from '@/ds/components/Shimmer';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\ntype ActivityStatus = 'idle' | 'running' | 'error';\n\n/** `row` sits on a hover surface; `inline` reads as text beside prose: no surface, no inset, the line lifts on hover. */\ntype ActivityAppearance = 'row' | 'inline';\n\ninterface ActivityContextValue {\n open: boolean;\n foldable: boolean;\n status: ActivityStatus;\n appearance: ActivityAppearance;\n nested: boolean;\n toggle: () => void;\n}\n\nconst LIFTS = 'transition-colors motion-reduce:transition-none';\nconst LIFTS_TO_FOREGROUND = `${LIFTS} group-hover/row:text-foreground group-has-focus-visible/row:text-foreground`;\nconst LIFTS_TO_MUTED = `${LIFTS} group-hover/row:text-muted-foreground group-has-focus-visible/row:text-muted-foreground`;\n\nconst ActivityContext = createContext<ActivityContextValue | undefined>(undefined);\n\n// Stryker disable next-line ArrowFunction: the default callback is intentionally behaviorless.\nconst noopOpenChange = () => {};\n\nfunction useActivity() {\n const context = useContext(ActivityContext);\n if (!context) throw new Error('Activity compounds must be rendered within Activity');\n return context;\n}\n\nfunction useInline() {\n return useContext(ActivityContext)?.appearance === 'inline';\n}\n\nexport interface ActivityProps extends Omit<\n ComponentProps<typeof Collapsible>,\n 'defaultOpen' | 'onOpenChange' | 'open'\n> {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n foldable?: boolean;\n status?: ActivityStatus;\n appearance?: ActivityAppearance;\n}\n\nexport function Activity({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange = noopOpenChange,\n foldable = true,\n status = 'idle',\n appearance = 'row',\n className,\n children,\n ...props\n}: ActivityProps) {\n const nested = useContext(ActivityContext) !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const open = controlledOpen ?? (foldable && uncontrolledOpen);\n const statusId = useId();\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (controlledOpen === undefined) setUncontrolledOpen(nextOpen);\n onOpenChange(nextOpen);\n };\n\n return (\n <ActivityContext.Provider\n value={{ open, foldable, status, appearance, nested, toggle: () => handleOpenChange(!open) }}\n >\n <Collapsible\n open={open}\n onOpenChange={handleOpenChange}\n className={cn('max-w-full min-w-0', className)}\n role=\"group\"\n aria-busy={status === 'running'}\n aria-invalid={status === 'error' || undefined}\n aria-describedby={status === 'idle' ? undefined : statusId}\n data-status={status}\n {...props}\n >\n {children}\n <span id={statusId} className=\"sr-only\" aria-live=\"polite\">\n {status === 'running' && 'Running'}\n {status === 'error' && 'Failed'}\n </span>\n </Collapsible>\n </ActivityContext.Provider>\n );\n}\n\nexport const ActivityTrigger = ({ className, children, ...props }: ComponentProps<'div'>) => {\n const { foldable, appearance } = useActivity();\n const lineId = useId();\n\n return (\n <div\n className={cn(\n 'group/row relative w-full min-w-0 rounded-md transition-colors motion-reduce:transition-none',\n foldable && appearance === 'row' && 'hover:bg-fill',\n className,\n )}\n {...props}\n >\n {foldable && (\n <CollapsibleTrigger\n aria-labelledby={lineId}\n className=\"absolute inset-0 cursor-pointer rounded-md focus-visible:ring-1 focus-visible:ring-border-focus focus-visible:outline-hidden\"\n />\n )}\n <div id={lineId} className={cn(foldable && 'pointer-events-none relative')}>\n {children}\n </div>\n </div>\n );\n};\n\nexport const ActivityHeader = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { status, appearance } = useActivity();\n\n return (\n <Shimmer\n active={status === 'running'}\n className={cn(\n 'flex min-w-0 items-center gap-2 py-1',\n appearance === 'inline' ? 'w-fit max-w-full' : 'w-full px-1.5',\n className,\n )}\n {...props}\n >\n {children}\n </Shimmer>\n );\n};\n\nexport const ActivityLeading = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { foldable, toggle } = useActivity();\n\n if (!children) return null;\n\n return (\n <span\n className={cn('pointer-events-auto flex shrink-0 empty:hidden', foldable && 'cursor-pointer', className)}\n onClick={foldable ? toggle : undefined}\n {...props}\n >\n {children}\n </span>\n );\n};\n\nexport const ActivityIcon = ({ className, ...props }: ComponentProps<'span'>) => {\n const { status, appearance } = useActivity();\n\n return (\n <span\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center [&_svg]:size-3.5 [&_svg]:shrink-0',\n status === 'error' ? 'text-destructive-foreground' : 'text-placeholder',\n status !== 'error' && appearance === 'inline' && LIFTS_TO_MUTED,\n className,\n )}\n {...props}\n />\n );\n};\n\nexport interface ActivityLabelProps extends ComponentProps<typeof Txt> {\n wrap?: boolean;\n}\n\nexport const ActivityLabel = ({ wrap = false, className, ...props }: ActivityLabelProps) => {\n const inline = useInline();\n\n return (\n <Txt\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n className={cn(\n wrap ? 'min-w-0 break-words' : 'shrink-0 truncate',\n inline ? `max-w-none ${LIFTS_TO_FOREGROUND}` : 'max-w-[55%]',\n className,\n )}\n {...props}\n />\n );\n};\n\n/** Paths under the agent's working directory read relative to it, the way the agent itself refers to them. */\nexport function ActivityWorkingDirectory({ path, children }: { path: string | undefined; children: ReactNode }) {\n return <WorkingDirectoryContext value={path}>{children}</WorkingDirectoryContext>;\n}\n\nexport interface ActivityDetailProps extends Omit<ComponentProps<typeof Txt>, 'font'> {\n wrap?: boolean;\n}\n\nexport const ActivityDetail = ({ wrap = false, className, children, ...props }: ActivityDetailProps) => {\n const arriving = useArriving();\n const inline = useInline();\n const relative = useRelativePaths();\n\n return (\n <Txt\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n className={cn('min-w-0', wrap ? 'break-words' : 'truncate', inline && LIFTS_TO_FOREGROUND, arriving, className)}\n {...props}\n >\n {typeof children === 'string' ? relative(children) : children}\n </Txt>\n );\n};\n\nexport const ActivitySummary = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('flex min-w-0 items-center gap-1', className)} {...props} />\n);\n\nexport interface ActivitySpacerProps extends ComponentProps<'span'> {\n rule?: boolean;\n}\n\nexport const ActivitySpacer = ({ rule, className, ...props }: ActivitySpacerProps) => {\n const inline = useInline();\n\n return (\n <span\n aria-hidden\n className={cn(\n 'min-w-2 flex-1',\n rule && 'h-px bg-border mask-r-from-[calc(100%-min(100%,160px))]',\n inline && !rule && 'hidden',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const ActivityTrailing = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('flex shrink-0 items-center', className)} {...props} />\n);\n\nexport const ActivityDisclosure = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { open, foldable, nested } = useActivity();\n\n return (\n <span\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center transition-opacity duration-150 motion-reduce:transition-none starting:opacity-0',\n !foldable && 'hidden',\n foldable && nested && 'hidden group-hover/row:flex group-has-focus-visible/row:flex',\n className,\n )}\n {...props}\n >\n <span\n aria-hidden\n className={cn(\n 'flex shrink-0 items-center text-muted-foreground/60 transition duration-150 motion-reduce:transition-none',\n 'group-hover/row:text-muted-foreground group-has-focus-visible/row:text-muted-foreground',\n open && 'text-muted-foreground',\n open && children != null && 'rotate-90',\n )}\n >\n {children ?? <DisclosureChevron direction=\"right\" open={open} className=\"size-3.25\" />}\n </span>\n </span>\n );\n};\n\nexport interface ActivityHeadlineProps extends Omit<ComponentProps<typeof ActivityHeader>, 'children'> {\n leading?: ReactNode;\n icon: ReactNode;\n label: ReactNode;\n detail?: string;\n description?: string;\n wrapDetail?: boolean;\n badges?: ReactNode;\n}\n\nexport const ActivityHeadline = ({\n leading,\n icon,\n label,\n detail,\n description,\n wrapDetail,\n badges,\n ...props\n}: ActivityHeadlineProps) => {\n const { status, appearance } = useActivity();\n const hasBadges = Boolean(badges);\n const labelShrinks = Boolean(description) || (appearance === 'inline' && !detail);\n\n return (\n <ActivityHeader {...props}>\n <ActivityLeading>{leading}</ActivityLeading>\n <ActivityIcon>{icon}</ActivityIcon>\n <span className={cn('contents', hasBadges && 'flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1')}>\n <ActivityLabel className={cn(labelShrinks && 'max-w-none min-w-0 shrink')}>\n {description || label}\n </ActivityLabel>\n {badges}\n {!description && detail && (\n <ActivityDetail wrap={wrapDetail} className={cn(hasBadges && 'grow basis-40')}>\n {detail}\n </ActivityDetail>\n )}\n </span>\n <ActivitySpacer className={cn(hasBadges && 'flex-none')} />\n {status === 'error' && (\n <ActivityTrailing>\n <X size={13} role=\"img\" aria-label=\"Failed\" className=\"shrink-0 text-destructive-foreground\" />\n </ActivityTrailing>\n )}\n <ActivityDisclosure />\n </ActivityHeader>\n );\n};\n\nexport interface ActivityContentProps extends ComponentProps<typeof CollapsibleContent> {\n /** Drop the rail and its indent, so the content lines up with the text around the line. */\n flush?: boolean;\n}\n\nexport const ActivityContent = ({ flush = false, className, children, ...props }: ActivityContentProps) => {\n const inline = useInline();\n\n return (\n <CollapsibleContent className=\"max-w-full min-w-0\" {...props}>\n <div\n className={cn(\n 'relative flex max-w-full min-w-0 flex-col py-1.5',\n !flush &&\n \"gap-1.5 pr-1 pl-4 before:absolute before:inset-y-0 before:left-0 before:w-px before:bg-border before:mask-b-from-[calc(100%-min(40%,80px))] before:content-['']\",\n !flush && (inline ? 'ml-2' : 'ml-[14px]'),\n className,\n )}\n >\n <ArrivalScope>{children}</ArrivalScope>\n </div>\n </CollapsibleContent>\n );\n};\n\nexport interface ActivityItemProps extends Omit<ActivityProps, 'children' | 'open' | 'onOpenChange' | 'foldable'> {\n icon: ReactNode;\n label: string;\n detail?: string;\n badges?: ReactNode;\n collapsible?: boolean;\n children?: ReactNode;\n 'aria-label': string;\n}\n\nexport function ActivityItem({\n icon,\n label,\n detail,\n badges,\n collapsible = true,\n children,\n ...props\n}: ActivityItemProps) {\n const folds = collapsible && Boolean(children);\n\n return (\n <Activity {...props} foldable={folds} open={collapsible ? undefined : true}>\n <ActivityTrigger>\n <ActivityHeadline icon={icon} label={label} detail={detail} wrapDetail={!folds} badges={badges} />\n </ActivityTrigger>\n {children && <ActivityContent>{children}</ActivityContent>}\n </Activity>\n );\n}\n\nexport type { ActivityAppearance, ActivityStatus };\n","import { truncateString } from '@/lib/truncate-string';\n\nexport function messagePreview(message: string): string {\n return truncateString(message, 72);\n}\n\nexport function messagePreviewShowsAll(message: string): boolean {\n return !message.includes('\\n') && messagePreview(message) === message;\n}\n","import { Bell, ExternalLink } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { ActivityItem } from '../activity';\nimport { messagePreview, messagePreviewShowsAll } from './message-preview';\nimport { Badge } from '@/ds/components/Badge';\nimport type { BadgeVariant } from '@/ds/components/Badge';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface NotificationActivityProps {\n label: string;\n message: string;\n state?: string;\n icon?: ReactNode;\n priority?: string;\n status?: string;\n pending?: string;\n link?: { href: string; label: string };\n defaultOpen?: boolean;\n /** Badges rendered after the priority, status and pending badges. */\n extraBadges?: ReactNode;\n /** A label shown above the message once opened, e.g. to flag it as untrusted. */\n messageLabel?: string;\n}\n\nconst priorityBadgeVariants: Partial<Record<string, BadgeVariant>> = {\n urgent: 'red',\n high: 'orange',\n medium: 'blue',\n};\n\nexport function NotificationActivity({\n label,\n message,\n state = 'notification',\n icon,\n priority,\n status,\n pending,\n link,\n defaultOpen,\n extraBadges,\n messageLabel,\n}: NotificationActivityProps) {\n const lineHoldsMessage = messagePreviewShowsAll(message) && !messageLabel;\n const hasBadges = Boolean(priority || status || pending || extraBadges);\n\n return (\n <ActivityItem\n label={label}\n detail={messagePreview(message)}\n icon={icon ?? <Bell className=\"text-warning-foreground\" aria-hidden />}\n badges={\n hasBadges && (\n <>\n {priority && (\n <Badge size=\"xs\" variant={priorityBadgeVariants[priority]}>\n {priority}\n </Badge>\n )}\n {status && <Badge size=\"xs\">{status}</Badge>}\n {pending && <Badge size=\"xs\">{pending} pending</Badge>}\n {extraBadges}\n </>\n )\n }\n defaultOpen={defaultOpen}\n data-notification-state={state}\n aria-label={`Notification: ${label}`}\n >\n {(!lineHoldsMessage || link) && (\n <div className=\"flex flex-col gap-2\">\n {messageLabel && (\n <Txt variant=\"caption\" tone=\"muted\">\n {messageLabel}\n </Txt>\n )}\n {message && (\n <Txt variant=\"caption\" className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n )}\n {link && <NotificationLink link={link} message={message} />}\n </div>\n )}\n </ActivityItem>\n );\n}\n\nfunction NotificationLink({\n link,\n message,\n}: {\n link: NonNullable<NotificationActivityProps['link']>;\n message: string;\n}) {\n return (\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={`${link.label}: ${messagePreview(message)}`}\n className=\"flex w-fit items-center gap-1 text-meta text-muted-foreground hover:text-foreground\"\n >\n {link.label}\n <ExternalLink size={12} aria-hidden />\n </a>\n );\n}\n","import type { ReasoningContent } from './reasoning-visibility';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\n\nexport interface ReasoningTextProps {\n content: ReasoningContent;\n className?: string;\n}\n\nexport function ReasoningText({ content: { text, redacted, streaming }, className }: ReasoningTextProps) {\n return (\n <MarkdownRenderer className={className} streaming={streaming && !redacted}>\n {redacted ? 'Reasoning was redacted by the provider.' : text}\n </MarkdownRenderer>\n );\n}\n","export interface ReasoningContent {\n text: string;\n redacted?: boolean;\n streaming?: boolean;\n}\n\nexport function hasVisibleReasoning({ text, redacted, streaming }: ReasoningContent): boolean {\n return Boolean(streaming || redacted) || hasReasoningText({ text, redacted });\n}\n\n/** Whether the passage has something to read: its text, or the notice that it was redacted. */\nexport function hasReasoningText({ text, redacted }: ReasoningContent): boolean {\n return Boolean(redacted) || text.trim().length > 0;\n}\n","import { ActivityItem } from '../activity';\nimport { ReasoningText } from './reasoning-text';\nimport { hasReasoningText, hasVisibleReasoning } from './reasoning-visibility';\nimport type { ReasoningContent } from './reasoning-visibility';\nimport { agentGlyph } from '@/ds/components/AgentIndicator';\n\nconst ThinkingGlyph = agentGlyph('thinking');\n\nexport interface ReasoningActivityProps extends ReasoningContent {\n defaultOpen?: boolean;\n}\n\nexport function ReasoningActivity({ defaultOpen = true, ...content }: ReasoningActivityProps) {\n if (!hasVisibleReasoning(content)) return null;\n\n return (\n <ActivityItem\n icon={<ThinkingGlyph aria-hidden />}\n label=\"Reasoning\"\n status={content.streaming ? 'running' : 'idle'}\n defaultOpen={defaultOpen}\n aria-label=\"Reasoning\"\n >\n {hasReasoningText(content) && (\n <ReasoningText content={content} className=\"text-caption text-muted-foreground [&_p]:my-0.5\" />\n )}\n </ActivityItem>\n );\n}\n","import {\n Activity,\n ActivityContent,\n ActivityDetail,\n ActivityDisclosure,\n ActivityHeader,\n ActivityIcon,\n ActivityItem,\n ActivityLabel,\n ActivityTrigger,\n} from '../activity';\nimport type { ActivityAppearance } from '../activity';\nimport { messagePreview, messagePreviewShowsAll } from './message-preview';\nimport { agentGlyph } from '@/ds/components/AgentIndicator';\nimport { Badge } from '@/ds/components/Badge';\nimport { Txt } from '@/ds/components/Txt';\nimport { humanize } from '@/lib/string';\n\nexport interface SignalActivityProps {\n kind: 'state' | 'reactive' | 'reminder';\n label: string;\n message: string;\n detail?: string;\n mode?: string;\n defaultOpen?: boolean;\n /** `inline` reads like the agent's own lines: their glyph, type and weight, the message as prose. */\n appearance?: ActivityAppearance;\n}\n\nconst signalKinds = {\n state: {\n Icon: agentGlyph('context'),\n accent: 'text-badge-purple-indicator',\n body: { variant: 'caption' },\n },\n reactive: {\n Icon: agentGlyph('notice'),\n accent: undefined,\n body: { variant: 'caption' },\n },\n reminder: {\n Icon: agentGlyph('notice'),\n accent: 'text-info-indicator',\n body: { variant: 'meta', font: 'mono' },\n },\n} as const;\n\nfunction SignalLine({ kind, label, message, detail, mode, defaultOpen }: Omit<SignalActivityProps, 'appearance'>) {\n const { Icon } = signalKinds[kind];\n const name = humanize(label);\n const lineHoldsMessage = detail === undefined && messagePreviewShowsAll(message);\n\n return (\n <Activity\n appearance=\"inline\"\n foldable={!lineHoldsMessage}\n defaultOpen={defaultOpen}\n data-signal-kind={kind}\n aria-label={`Signal: ${name}`}\n >\n <ActivityTrigger>\n <ActivityHeader>\n <ActivityIcon className=\"[&_svg]:size-4\">\n <Icon />\n </ActivityIcon>\n <ActivityLabel className=\"text-body font-medium\">{name}</ActivityLabel>\n {mode && <ActivityLabel className=\"-ml-1 text-body before:content-['·_']\">{mode}</ActivityLabel>}\n {detail && <ActivityDetail className=\"text-body-sm\">{detail}</ActivityDetail>}\n {lineHoldsMessage && message && (\n <ActivityLabel wrap className=\"text-body\">\n {message}\n </ActivityLabel>\n )}\n <ActivityDisclosure />\n </ActivityHeader>\n </ActivityTrigger>\n {!lineHoldsMessage && (\n <ActivityContent>\n <Txt tone=\"muted\" className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n </ActivityContent>\n )}\n </Activity>\n );\n}\n\nexport function SignalActivity({ appearance = 'row', ...signal }: SignalActivityProps) {\n if (appearance === 'inline') return <SignalLine {...signal} />;\n const { kind, label, message, detail, mode, defaultOpen } = signal;\n const { Icon, accent, body } = signalKinds[kind];\n const lineHoldsMessage = detail === undefined && messagePreviewShowsAll(message);\n\n return (\n <ActivityItem\n icon={<Icon className={accent} aria-hidden />}\n label={label}\n detail={detail ?? messagePreview(message)}\n badges={mode ? <Badge size=\"xs\">{mode}</Badge> : undefined}\n defaultOpen={defaultOpen}\n data-signal-kind={kind}\n aria-label={`Signal: ${label}`}\n >\n {message && !lineHoldsMessage && (\n <>\n {detail && (\n <Txt variant=\"meta\" font=\"mono\" tone=\"muted\" className=\"break-all\">\n {detail}\n </Txt>\n )}\n <Txt {...body} className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n </>\n )}\n </ActivityItem>\n );\n}\n"],"mappings":"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"}
@@ -8,7 +8,7 @@ const require_components_Collapsible = require("./components/Collapsible.cjs.js"
8
8
  const require_components_DisclosureChevron = require("./components/DisclosureChevron.cjs.js");
9
9
  const require_components_Shimmer = require("./components/Shimmer.cjs.js");
10
10
  const require_Badge = require("./Badge-DZ6r6bcw.cjs");
11
- const require_MarkdownRenderer = require("./MarkdownRenderer-CB8Z_CHc.cjs");
11
+ const require_MarkdownRenderer = require("./MarkdownRenderer-y65WGBhC.cjs");
12
12
  let react = require("react");
13
13
  let react_jsx_runtime = require("react/jsx-runtime");
14
14
  let lucide_react = require("lucide-react");
@@ -578,4 +578,4 @@ Object.defineProperty(exports, "useRelativePaths", {
578
578
  }
579
579
  });
580
580
 
581
- //# sourceMappingURL=activity-DyB5H3gF.cjs.map
581
+ //# sourceMappingURL=activity-CcQZeDYi.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"activity-DyB5H3gF.cjs","names":["createContext","useContext","createContext","useContext","useState","useId","Collapsible","cn","CollapsibleTrigger","Shimmer","Txt","useArriving","DisclosureChevron","X","CollapsibleContent","ArrivalScope","truncateString","Bell","_Fragment","Badge","Txt","ExternalLink","MarkdownRenderer","agentGlyph","agentGlyph","humanize","Txt","Badge","_Fragment"],"sources":["../src/ds/components/ai/activity/use-relative-paths.ts","../src/ds/components/ai/activity/activity.tsx","../src/ds/components/ai/activity/presets/message-preview.ts","../src/ds/components/ai/activity/presets/notification-activity.tsx","../src/ds/components/ai/activity/presets/reasoning-text.tsx","../src/ds/components/ai/activity/presets/reasoning-visibility.ts","../src/ds/components/ai/activity/presets/reasoning-activity.tsx","../src/ds/components/ai/activity/presets/signal-activity.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport const WorkingDirectoryContext = createContext<string | undefined>(undefined);\n\nfunction relativeTo(directory: string | undefined, text: string): string {\n const root = directory?.replace(/\\/+$/, '');\n if (!root) return text;\n const escaped = root.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return text.replace(new RegExp(`(?<![^\\\\s'\"=(])${escaped}(?:/(?=[^\\\\s/])|(?![\\\\w.-]))`, 'g'), match =>\n match.endsWith('/') ? '' : '.',\n );\n}\n\n/** Rewrites text the way `ActivityDetail` shows it, for names that must say the same thing. */\nexport function useRelativePaths(): (text: string) => string {\n const directory = useContext(WorkingDirectoryContext);\n return text => relativeTo(directory, text);\n}\n","import { X } from 'lucide-react';\nimport { createContext, useContext, useId, useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport { useRelativePaths, WorkingDirectoryContext } from './use-relative-paths';\nimport { ArrivalScope, useArriving } from '@/ds/components/Arrival';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { Shimmer } from '@/ds/components/Shimmer';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\ntype ActivityStatus = 'idle' | 'running' | 'error';\n\n/** `row` sits on a hover surface; `inline` reads as text beside prose: no surface, no inset, the line lifts on hover. */\ntype ActivityAppearance = 'row' | 'inline';\n\ninterface ActivityContextValue {\n open: boolean;\n foldable: boolean;\n status: ActivityStatus;\n appearance: ActivityAppearance;\n nested: boolean;\n toggle: () => void;\n}\n\nconst LIFTS = 'transition-colors motion-reduce:transition-none';\nconst LIFTS_TO_FOREGROUND = `${LIFTS} group-hover/row:text-foreground group-has-focus-visible/row:text-foreground`;\nconst LIFTS_TO_MUTED = `${LIFTS} group-hover/row:text-muted-foreground group-has-focus-visible/row:text-muted-foreground`;\n\nconst ActivityContext = createContext<ActivityContextValue | undefined>(undefined);\n\n// Stryker disable next-line ArrowFunction: the default callback is intentionally behaviorless.\nconst noopOpenChange = () => {};\n\nfunction useActivity() {\n const context = useContext(ActivityContext);\n if (!context) throw new Error('Activity compounds must be rendered within Activity');\n return context;\n}\n\nfunction useInline() {\n return useContext(ActivityContext)?.appearance === 'inline';\n}\n\nexport interface ActivityProps extends Omit<\n ComponentProps<typeof Collapsible>,\n 'defaultOpen' | 'onOpenChange' | 'open'\n> {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n foldable?: boolean;\n status?: ActivityStatus;\n appearance?: ActivityAppearance;\n}\n\nexport function Activity({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange = noopOpenChange,\n foldable = true,\n status = 'idle',\n appearance = 'row',\n className,\n children,\n ...props\n}: ActivityProps) {\n const nested = useContext(ActivityContext) !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const open = controlledOpen ?? (foldable && uncontrolledOpen);\n const statusId = useId();\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (controlledOpen === undefined) setUncontrolledOpen(nextOpen);\n onOpenChange(nextOpen);\n };\n\n return (\n <ActivityContext.Provider\n value={{ open, foldable, status, appearance, nested, toggle: () => handleOpenChange(!open) }}\n >\n <Collapsible\n open={open}\n onOpenChange={handleOpenChange}\n className={cn('max-w-full min-w-0', className)}\n role=\"group\"\n aria-busy={status === 'running'}\n aria-invalid={status === 'error' || undefined}\n aria-describedby={status === 'idle' ? undefined : statusId}\n data-status={status}\n {...props}\n >\n {children}\n <span id={statusId} className=\"sr-only\" aria-live=\"polite\">\n {status === 'running' && 'Running'}\n {status === 'error' && 'Failed'}\n </span>\n </Collapsible>\n </ActivityContext.Provider>\n );\n}\n\nexport const ActivityTrigger = ({ className, children, ...props }: ComponentProps<'div'>) => {\n const { foldable, appearance } = useActivity();\n const lineId = useId();\n\n return (\n <div\n className={cn(\n 'group/row relative w-full min-w-0 rounded-md transition-colors motion-reduce:transition-none',\n foldable && appearance === 'row' && 'hover:bg-fill',\n className,\n )}\n {...props}\n >\n {foldable && (\n <CollapsibleTrigger\n aria-labelledby={lineId}\n className=\"absolute inset-0 cursor-pointer rounded-md focus-visible:ring-1 focus-visible:ring-border-focus focus-visible:outline-hidden\"\n />\n )}\n <div id={lineId} className={cn(foldable && 'pointer-events-none relative')}>\n {children}\n </div>\n </div>\n );\n};\n\nexport const ActivityHeader = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { status, appearance } = useActivity();\n\n return (\n <Shimmer\n active={status === 'running'}\n className={cn(\n 'flex min-w-0 items-center gap-2 py-1',\n appearance === 'inline' ? 'w-fit max-w-full' : 'w-full px-1.5',\n className,\n )}\n {...props}\n >\n {children}\n </Shimmer>\n );\n};\n\nexport const ActivityLeading = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { foldable, toggle } = useActivity();\n\n if (!children) return null;\n\n return (\n <span\n className={cn('pointer-events-auto flex shrink-0 empty:hidden', foldable && 'cursor-pointer', className)}\n onClick={foldable ? toggle : undefined}\n {...props}\n >\n {children}\n </span>\n );\n};\n\nexport const ActivityIcon = ({ className, ...props }: ComponentProps<'span'>) => {\n const { status, appearance } = useActivity();\n\n return (\n <span\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center [&_svg]:size-3.5 [&_svg]:shrink-0',\n status === 'error' ? 'text-destructive-foreground' : 'text-placeholder',\n status !== 'error' && appearance === 'inline' && LIFTS_TO_MUTED,\n className,\n )}\n {...props}\n />\n );\n};\n\nexport interface ActivityLabelProps extends ComponentProps<typeof Txt> {\n wrap?: boolean;\n}\n\nexport const ActivityLabel = ({ wrap = false, className, ...props }: ActivityLabelProps) => {\n const inline = useInline();\n\n return (\n <Txt\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n className={cn(\n wrap ? 'min-w-0 break-words' : 'shrink-0 truncate',\n inline ? `max-w-none ${LIFTS_TO_FOREGROUND}` : 'max-w-[55%]',\n className,\n )}\n {...props}\n />\n );\n};\n\n/** Paths under the agent's working directory read relative to it, the way the agent itself refers to them. */\nexport function ActivityWorkingDirectory({ path, children }: { path: string | undefined; children: ReactNode }) {\n return <WorkingDirectoryContext value={path}>{children}</WorkingDirectoryContext>;\n}\n\nexport interface ActivityDetailProps extends Omit<ComponentProps<typeof Txt>, 'font'> {\n wrap?: boolean;\n}\n\nexport const ActivityDetail = ({ wrap = false, className, children, ...props }: ActivityDetailProps) => {\n const arriving = useArriving();\n const inline = useInline();\n const relative = useRelativePaths();\n\n return (\n <Txt\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n className={cn('min-w-0', wrap ? 'break-words' : 'truncate', inline && LIFTS_TO_FOREGROUND, arriving, className)}\n {...props}\n >\n {typeof children === 'string' ? relative(children) : children}\n </Txt>\n );\n};\n\nexport const ActivitySummary = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('flex min-w-0 items-center gap-1', className)} {...props} />\n);\n\nexport interface ActivitySpacerProps extends ComponentProps<'span'> {\n rule?: boolean;\n}\n\nexport const ActivitySpacer = ({ rule, className, ...props }: ActivitySpacerProps) => {\n const inline = useInline();\n\n return (\n <span\n aria-hidden\n className={cn(\n 'min-w-2 flex-1',\n rule && 'h-px bg-border mask-r-from-[calc(100%-min(100%,160px))]',\n inline && !rule && 'hidden',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const ActivityTrailing = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('flex shrink-0 items-center', className)} {...props} />\n);\n\nexport const ActivityDisclosure = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { open, foldable, nested } = useActivity();\n\n return (\n <span\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center transition-opacity duration-150 motion-reduce:transition-none starting:opacity-0',\n !foldable && 'hidden',\n foldable && nested && 'hidden group-hover/row:flex group-has-focus-visible/row:flex',\n className,\n )}\n {...props}\n >\n <span\n aria-hidden\n className={cn(\n 'flex shrink-0 items-center text-muted-foreground/60 transition duration-150 motion-reduce:transition-none',\n 'group-hover/row:text-muted-foreground group-has-focus-visible/row:text-muted-foreground',\n open && 'text-muted-foreground',\n open && children != null && 'rotate-90',\n )}\n >\n {children ?? <DisclosureChevron direction=\"right\" open={open} className=\"size-3.25\" />}\n </span>\n </span>\n );\n};\n\nexport interface ActivityHeadlineProps extends Omit<ComponentProps<typeof ActivityHeader>, 'children'> {\n leading?: ReactNode;\n icon: ReactNode;\n label: ReactNode;\n detail?: string;\n description?: string;\n wrapDetail?: boolean;\n badges?: ReactNode;\n}\n\nexport const ActivityHeadline = ({\n leading,\n icon,\n label,\n detail,\n description,\n wrapDetail,\n badges,\n ...props\n}: ActivityHeadlineProps) => {\n const { status, appearance } = useActivity();\n const hasBadges = Boolean(badges);\n const labelShrinks = Boolean(description) || (appearance === 'inline' && !detail);\n\n return (\n <ActivityHeader {...props}>\n <ActivityLeading>{leading}</ActivityLeading>\n <ActivityIcon>{icon}</ActivityIcon>\n <span className={cn('contents', hasBadges && 'flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1')}>\n <ActivityLabel className={cn(labelShrinks && 'max-w-none min-w-0 shrink')}>\n {description || label}\n </ActivityLabel>\n {badges}\n {!description && detail && (\n <ActivityDetail wrap={wrapDetail} className={cn(hasBadges && 'grow basis-40')}>\n {detail}\n </ActivityDetail>\n )}\n </span>\n <ActivitySpacer className={cn(hasBadges && 'flex-none')} />\n {status === 'error' && (\n <ActivityTrailing>\n <X size={13} role=\"img\" aria-label=\"Failed\" className=\"shrink-0 text-destructive-foreground\" />\n </ActivityTrailing>\n )}\n <ActivityDisclosure />\n </ActivityHeader>\n );\n};\n\nexport interface ActivityContentProps extends ComponentProps<typeof CollapsibleContent> {\n /** Drop the rail and its indent, so the content lines up with the text around the line. */\n flush?: boolean;\n}\n\nexport const ActivityContent = ({ flush = false, className, children, ...props }: ActivityContentProps) => {\n const inline = useInline();\n\n return (\n <CollapsibleContent className=\"max-w-full min-w-0\" {...props}>\n <div\n className={cn(\n 'relative flex max-w-full min-w-0 flex-col py-1.5',\n !flush &&\n \"gap-1.5 pr-1 pl-4 before:absolute before:inset-y-0 before:left-0 before:w-px before:bg-border before:mask-b-from-[calc(100%-min(40%,80px))] before:content-['']\",\n !flush && (inline ? 'ml-2' : 'ml-[14px]'),\n className,\n )}\n >\n <ArrivalScope>{children}</ArrivalScope>\n </div>\n </CollapsibleContent>\n );\n};\n\nexport interface ActivityItemProps extends Omit<ActivityProps, 'children' | 'open' | 'onOpenChange' | 'foldable'> {\n icon: ReactNode;\n label: string;\n detail?: string;\n badges?: ReactNode;\n collapsible?: boolean;\n children?: ReactNode;\n 'aria-label': string;\n}\n\nexport function ActivityItem({\n icon,\n label,\n detail,\n badges,\n collapsible = true,\n children,\n ...props\n}: ActivityItemProps) {\n const folds = collapsible && Boolean(children);\n\n return (\n <Activity {...props} foldable={folds} open={collapsible ? undefined : true}>\n <ActivityTrigger>\n <ActivityHeadline icon={icon} label={label} detail={detail} wrapDetail={!folds} badges={badges} />\n </ActivityTrigger>\n {children && <ActivityContent>{children}</ActivityContent>}\n </Activity>\n );\n}\n\nexport type { ActivityAppearance, ActivityStatus };\n","import { truncateString } from '@/lib/truncate-string';\n\nexport function messagePreview(message: string): string {\n return truncateString(message, 72);\n}\n\nexport function messagePreviewShowsAll(message: string): boolean {\n return !message.includes('\\n') && messagePreview(message) === message;\n}\n","import { Bell, ExternalLink } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { ActivityItem } from '../activity';\nimport { messagePreview, messagePreviewShowsAll } from './message-preview';\nimport { Badge } from '@/ds/components/Badge';\nimport type { BadgeVariant } from '@/ds/components/Badge';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface NotificationActivityProps {\n label: string;\n message: string;\n state?: string;\n icon?: ReactNode;\n priority?: string;\n status?: string;\n pending?: string;\n link?: { href: string; label: string };\n defaultOpen?: boolean;\n /** Badges rendered after the priority, status and pending badges. */\n extraBadges?: ReactNode;\n /** A label shown above the message once opened, e.g. to flag it as untrusted. */\n messageLabel?: string;\n}\n\nconst priorityBadgeVariants: Partial<Record<string, BadgeVariant>> = {\n urgent: 'red',\n high: 'orange',\n medium: 'blue',\n};\n\nexport function NotificationActivity({\n label,\n message,\n state = 'notification',\n icon,\n priority,\n status,\n pending,\n link,\n defaultOpen,\n extraBadges,\n messageLabel,\n}: NotificationActivityProps) {\n const lineHoldsMessage = messagePreviewShowsAll(message) && !messageLabel;\n const hasBadges = Boolean(priority || status || pending || extraBadges);\n\n return (\n <ActivityItem\n label={label}\n detail={messagePreview(message)}\n icon={icon ?? <Bell className=\"text-warning-foreground\" aria-hidden />}\n badges={\n hasBadges && (\n <>\n {priority && (\n <Badge size=\"xs\" variant={priorityBadgeVariants[priority]}>\n {priority}\n </Badge>\n )}\n {status && <Badge size=\"xs\">{status}</Badge>}\n {pending && <Badge size=\"xs\">{pending} pending</Badge>}\n {extraBadges}\n </>\n )\n }\n defaultOpen={defaultOpen}\n data-notification-state={state}\n aria-label={`Notification: ${label}`}\n >\n {(!lineHoldsMessage || link) && (\n <div className=\"flex flex-col gap-2\">\n {messageLabel && (\n <Txt variant=\"caption\" tone=\"muted\">\n {messageLabel}\n </Txt>\n )}\n {message && (\n <Txt variant=\"caption\" className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n )}\n {link && <NotificationLink link={link} message={message} />}\n </div>\n )}\n </ActivityItem>\n );\n}\n\nfunction NotificationLink({\n link,\n message,\n}: {\n link: NonNullable<NotificationActivityProps['link']>;\n message: string;\n}) {\n return (\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={`${link.label}: ${messagePreview(message)}`}\n className=\"flex w-fit items-center gap-1 text-meta text-muted-foreground hover:text-foreground\"\n >\n {link.label}\n <ExternalLink size={12} aria-hidden />\n </a>\n );\n}\n","import type { ReasoningContent } from './reasoning-visibility';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\n\nexport interface ReasoningTextProps {\n content: ReasoningContent;\n className?: string;\n}\n\nexport function ReasoningText({ content: { text, redacted, streaming }, className }: ReasoningTextProps) {\n return (\n <MarkdownRenderer className={className} streaming={streaming && !redacted}>\n {redacted ? 'Reasoning was redacted by the provider.' : text}\n </MarkdownRenderer>\n );\n}\n","export interface ReasoningContent {\n text: string;\n redacted?: boolean;\n streaming?: boolean;\n}\n\nexport function hasVisibleReasoning({ text, redacted, streaming }: ReasoningContent): boolean {\n return Boolean(streaming || redacted) || hasReasoningText({ text, redacted });\n}\n\n/** Whether the passage has something to read: its text, or the notice that it was redacted. */\nexport function hasReasoningText({ text, redacted }: ReasoningContent): boolean {\n return Boolean(redacted) || text.trim().length > 0;\n}\n","import { ActivityItem } from '../activity';\nimport { ReasoningText } from './reasoning-text';\nimport { hasReasoningText, hasVisibleReasoning } from './reasoning-visibility';\nimport type { ReasoningContent } from './reasoning-visibility';\nimport { agentGlyph } from '@/ds/components/AgentIndicator';\n\nconst ThinkingGlyph = agentGlyph('thinking');\n\nexport interface ReasoningActivityProps extends ReasoningContent {\n defaultOpen?: boolean;\n}\n\nexport function ReasoningActivity({ defaultOpen = true, ...content }: ReasoningActivityProps) {\n if (!hasVisibleReasoning(content)) return null;\n\n return (\n <ActivityItem\n icon={<ThinkingGlyph aria-hidden />}\n label=\"Reasoning\"\n status={content.streaming ? 'running' : 'idle'}\n defaultOpen={defaultOpen}\n aria-label=\"Reasoning\"\n >\n {hasReasoningText(content) && (\n <ReasoningText content={content} className=\"text-caption text-muted-foreground [&_p]:my-0.5\" />\n )}\n </ActivityItem>\n );\n}\n","import {\n Activity,\n ActivityContent,\n ActivityDetail,\n ActivityDisclosure,\n ActivityHeader,\n ActivityIcon,\n ActivityItem,\n ActivityLabel,\n ActivityTrigger,\n} from '../activity';\nimport type { ActivityAppearance } from '../activity';\nimport { messagePreview, messagePreviewShowsAll } from './message-preview';\nimport { agentGlyph } from '@/ds/components/AgentIndicator';\nimport { Badge } from '@/ds/components/Badge';\nimport { Txt } from '@/ds/components/Txt';\nimport { humanize } from '@/lib/string';\n\nexport interface SignalActivityProps {\n kind: 'state' | 'reactive' | 'reminder';\n label: string;\n message: string;\n detail?: string;\n mode?: string;\n defaultOpen?: boolean;\n /** `inline` reads like the agent's own lines: their glyph, type and weight, the message as prose. */\n appearance?: ActivityAppearance;\n}\n\nconst signalKinds = {\n state: {\n Icon: agentGlyph('context'),\n accent: 'text-badge-purple-indicator',\n body: { variant: 'caption' },\n },\n reactive: {\n Icon: agentGlyph('notice'),\n accent: undefined,\n body: { variant: 'caption' },\n },\n reminder: {\n Icon: agentGlyph('notice'),\n accent: 'text-info-indicator',\n body: { variant: 'meta', font: 'mono' },\n },\n} as const;\n\nfunction SignalLine({ kind, label, message, detail, mode, defaultOpen }: Omit<SignalActivityProps, 'appearance'>) {\n const { Icon } = signalKinds[kind];\n const name = humanize(label);\n const lineHoldsMessage = detail === undefined && messagePreviewShowsAll(message);\n\n return (\n <Activity\n appearance=\"inline\"\n foldable={!lineHoldsMessage}\n defaultOpen={defaultOpen}\n data-signal-kind={kind}\n aria-label={`Signal: ${name}`}\n >\n <ActivityTrigger>\n <ActivityHeader>\n <ActivityIcon className=\"[&_svg]:size-4\">\n <Icon />\n </ActivityIcon>\n <ActivityLabel className=\"text-body font-medium\">{name}</ActivityLabel>\n {mode && <ActivityLabel className=\"-ml-1 text-body before:content-['·_']\">{mode}</ActivityLabel>}\n {detail && <ActivityDetail className=\"text-body-sm\">{detail}</ActivityDetail>}\n {lineHoldsMessage && message && (\n <ActivityLabel wrap className=\"text-body\">\n {message}\n </ActivityLabel>\n )}\n <ActivityDisclosure />\n </ActivityHeader>\n </ActivityTrigger>\n {!lineHoldsMessage && (\n <ActivityContent>\n <Txt tone=\"muted\" className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n </ActivityContent>\n )}\n </Activity>\n );\n}\n\nexport function SignalActivity({ appearance = 'row', ...signal }: SignalActivityProps) {\n if (appearance === 'inline') return <SignalLine {...signal} />;\n const { kind, label, message, detail, mode, defaultOpen } = signal;\n const { Icon, accent, body } = signalKinds[kind];\n const lineHoldsMessage = detail === undefined && messagePreviewShowsAll(message);\n\n return (\n <ActivityItem\n icon={<Icon className={accent} aria-hidden />}\n label={label}\n detail={detail ?? messagePreview(message)}\n badges={mode ? <Badge size=\"xs\">{mode}</Badge> : undefined}\n defaultOpen={defaultOpen}\n data-signal-kind={kind}\n aria-label={`Signal: ${label}`}\n >\n {message && !lineHoldsMessage && (\n <>\n {detail && (\n <Txt variant=\"meta\" font=\"mono\" tone=\"muted\" className=\"break-all\">\n {detail}\n </Txt>\n )}\n <Txt {...body} className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n </>\n )}\n </ActivityItem>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"activity-CcQZeDYi.cjs","names":["createContext","useContext","createContext","useContext","useState","useId","Collapsible","cn","CollapsibleTrigger","Shimmer","Txt","useArriving","DisclosureChevron","X","CollapsibleContent","ArrivalScope","truncateString","Bell","_Fragment","Badge","Txt","ExternalLink","MarkdownRenderer","agentGlyph","agentGlyph","humanize","Txt","Badge","_Fragment"],"sources":["../src/ds/components/ai/activity/use-relative-paths.ts","../src/ds/components/ai/activity/activity.tsx","../src/ds/components/ai/activity/presets/message-preview.ts","../src/ds/components/ai/activity/presets/notification-activity.tsx","../src/ds/components/ai/activity/presets/reasoning-text.tsx","../src/ds/components/ai/activity/presets/reasoning-visibility.ts","../src/ds/components/ai/activity/presets/reasoning-activity.tsx","../src/ds/components/ai/activity/presets/signal-activity.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport const WorkingDirectoryContext = createContext<string | undefined>(undefined);\n\nfunction relativeTo(directory: string | undefined, text: string): string {\n const root = directory?.replace(/\\/+$/, '');\n if (!root) return text;\n const escaped = root.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return text.replace(new RegExp(`(?<![^\\\\s'\"=(])${escaped}(?:/(?=[^\\\\s/])|(?![\\\\w.-]))`, 'g'), match =>\n match.endsWith('/') ? '' : '.',\n );\n}\n\n/** Rewrites text the way `ActivityDetail` shows it, for names that must say the same thing. */\nexport function useRelativePaths(): (text: string) => string {\n const directory = useContext(WorkingDirectoryContext);\n return text => relativeTo(directory, text);\n}\n","import { X } from 'lucide-react';\nimport { createContext, useContext, useId, useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport { useRelativePaths, WorkingDirectoryContext } from './use-relative-paths';\nimport { ArrivalScope, useArriving } from '@/ds/components/Arrival';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { Shimmer } from '@/ds/components/Shimmer';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\ntype ActivityStatus = 'idle' | 'running' | 'error';\n\n/** `row` sits on a hover surface; `inline` reads as text beside prose: no surface, no inset, the line lifts on hover. */\ntype ActivityAppearance = 'row' | 'inline';\n\ninterface ActivityContextValue {\n open: boolean;\n foldable: boolean;\n status: ActivityStatus;\n appearance: ActivityAppearance;\n nested: boolean;\n toggle: () => void;\n}\n\nconst LIFTS = 'transition-colors motion-reduce:transition-none';\nconst LIFTS_TO_FOREGROUND = `${LIFTS} group-hover/row:text-foreground group-has-focus-visible/row:text-foreground`;\nconst LIFTS_TO_MUTED = `${LIFTS} group-hover/row:text-muted-foreground group-has-focus-visible/row:text-muted-foreground`;\n\nconst ActivityContext = createContext<ActivityContextValue | undefined>(undefined);\n\n// Stryker disable next-line ArrowFunction: the default callback is intentionally behaviorless.\nconst noopOpenChange = () => {};\n\nfunction useActivity() {\n const context = useContext(ActivityContext);\n if (!context) throw new Error('Activity compounds must be rendered within Activity');\n return context;\n}\n\nfunction useInline() {\n return useContext(ActivityContext)?.appearance === 'inline';\n}\n\nexport interface ActivityProps extends Omit<\n ComponentProps<typeof Collapsible>,\n 'defaultOpen' | 'onOpenChange' | 'open'\n> {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n foldable?: boolean;\n status?: ActivityStatus;\n appearance?: ActivityAppearance;\n}\n\nexport function Activity({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange = noopOpenChange,\n foldable = true,\n status = 'idle',\n appearance = 'row',\n className,\n children,\n ...props\n}: ActivityProps) {\n const nested = useContext(ActivityContext) !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const open = controlledOpen ?? (foldable && uncontrolledOpen);\n const statusId = useId();\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (controlledOpen === undefined) setUncontrolledOpen(nextOpen);\n onOpenChange(nextOpen);\n };\n\n return (\n <ActivityContext.Provider\n value={{ open, foldable, status, appearance, nested, toggle: () => handleOpenChange(!open) }}\n >\n <Collapsible\n open={open}\n onOpenChange={handleOpenChange}\n className={cn('max-w-full min-w-0', className)}\n role=\"group\"\n aria-busy={status === 'running'}\n aria-invalid={status === 'error' || undefined}\n aria-describedby={status === 'idle' ? undefined : statusId}\n data-status={status}\n {...props}\n >\n {children}\n <span id={statusId} className=\"sr-only\" aria-live=\"polite\">\n {status === 'running' && 'Running'}\n {status === 'error' && 'Failed'}\n </span>\n </Collapsible>\n </ActivityContext.Provider>\n );\n}\n\nexport const ActivityTrigger = ({ className, children, ...props }: ComponentProps<'div'>) => {\n const { foldable, appearance } = useActivity();\n const lineId = useId();\n\n return (\n <div\n className={cn(\n 'group/row relative w-full min-w-0 rounded-md transition-colors motion-reduce:transition-none',\n foldable && appearance === 'row' && 'hover:bg-fill',\n className,\n )}\n {...props}\n >\n {foldable && (\n <CollapsibleTrigger\n aria-labelledby={lineId}\n className=\"absolute inset-0 cursor-pointer rounded-md focus-visible:ring-1 focus-visible:ring-border-focus focus-visible:outline-hidden\"\n />\n )}\n <div id={lineId} className={cn(foldable && 'pointer-events-none relative')}>\n {children}\n </div>\n </div>\n );\n};\n\nexport const ActivityHeader = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { status, appearance } = useActivity();\n\n return (\n <Shimmer\n active={status === 'running'}\n className={cn(\n 'flex min-w-0 items-center gap-2 py-1',\n appearance === 'inline' ? 'w-fit max-w-full' : 'w-full px-1.5',\n className,\n )}\n {...props}\n >\n {children}\n </Shimmer>\n );\n};\n\nexport const ActivityLeading = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { foldable, toggle } = useActivity();\n\n if (!children) return null;\n\n return (\n <span\n className={cn('pointer-events-auto flex shrink-0 empty:hidden', foldable && 'cursor-pointer', className)}\n onClick={foldable ? toggle : undefined}\n {...props}\n >\n {children}\n </span>\n );\n};\n\nexport const ActivityIcon = ({ className, ...props }: ComponentProps<'span'>) => {\n const { status, appearance } = useActivity();\n\n return (\n <span\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center [&_svg]:size-3.5 [&_svg]:shrink-0',\n status === 'error' ? 'text-destructive-foreground' : 'text-placeholder',\n status !== 'error' && appearance === 'inline' && LIFTS_TO_MUTED,\n className,\n )}\n {...props}\n />\n );\n};\n\nexport interface ActivityLabelProps extends ComponentProps<typeof Txt> {\n wrap?: boolean;\n}\n\nexport const ActivityLabel = ({ wrap = false, className, ...props }: ActivityLabelProps) => {\n const inline = useInline();\n\n return (\n <Txt\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n className={cn(\n wrap ? 'min-w-0 break-words' : 'shrink-0 truncate',\n inline ? `max-w-none ${LIFTS_TO_FOREGROUND}` : 'max-w-[55%]',\n className,\n )}\n {...props}\n />\n );\n};\n\n/** Paths under the agent's working directory read relative to it, the way the agent itself refers to them. */\nexport function ActivityWorkingDirectory({ path, children }: { path: string | undefined; children: ReactNode }) {\n return <WorkingDirectoryContext value={path}>{children}</WorkingDirectoryContext>;\n}\n\nexport interface ActivityDetailProps extends Omit<ComponentProps<typeof Txt>, 'font'> {\n wrap?: boolean;\n}\n\nexport const ActivityDetail = ({ wrap = false, className, children, ...props }: ActivityDetailProps) => {\n const arriving = useArriving();\n const inline = useInline();\n const relative = useRelativePaths();\n\n return (\n <Txt\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n className={cn('min-w-0', wrap ? 'break-words' : 'truncate', inline && LIFTS_TO_FOREGROUND, arriving, className)}\n {...props}\n >\n {typeof children === 'string' ? relative(children) : children}\n </Txt>\n );\n};\n\nexport const ActivitySummary = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('flex min-w-0 items-center gap-1', className)} {...props} />\n);\n\nexport interface ActivitySpacerProps extends ComponentProps<'span'> {\n rule?: boolean;\n}\n\nexport const ActivitySpacer = ({ rule, className, ...props }: ActivitySpacerProps) => {\n const inline = useInline();\n\n return (\n <span\n aria-hidden\n className={cn(\n 'min-w-2 flex-1',\n rule && 'h-px bg-border mask-r-from-[calc(100%-min(100%,160px))]',\n inline && !rule && 'hidden',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const ActivityTrailing = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('flex shrink-0 items-center', className)} {...props} />\n);\n\nexport const ActivityDisclosure = ({ className, children, ...props }: ComponentProps<'span'>) => {\n const { open, foldable, nested } = useActivity();\n\n return (\n <span\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center transition-opacity duration-150 motion-reduce:transition-none starting:opacity-0',\n !foldable && 'hidden',\n foldable && nested && 'hidden group-hover/row:flex group-has-focus-visible/row:flex',\n className,\n )}\n {...props}\n >\n <span\n aria-hidden\n className={cn(\n 'flex shrink-0 items-center text-muted-foreground/60 transition duration-150 motion-reduce:transition-none',\n 'group-hover/row:text-muted-foreground group-has-focus-visible/row:text-muted-foreground',\n open && 'text-muted-foreground',\n open && children != null && 'rotate-90',\n )}\n >\n {children ?? <DisclosureChevron direction=\"right\" open={open} className=\"size-3.25\" />}\n </span>\n </span>\n );\n};\n\nexport interface ActivityHeadlineProps extends Omit<ComponentProps<typeof ActivityHeader>, 'children'> {\n leading?: ReactNode;\n icon: ReactNode;\n label: ReactNode;\n detail?: string;\n description?: string;\n wrapDetail?: boolean;\n badges?: ReactNode;\n}\n\nexport const ActivityHeadline = ({\n leading,\n icon,\n label,\n detail,\n description,\n wrapDetail,\n badges,\n ...props\n}: ActivityHeadlineProps) => {\n const { status, appearance } = useActivity();\n const hasBadges = Boolean(badges);\n const labelShrinks = Boolean(description) || (appearance === 'inline' && !detail);\n\n return (\n <ActivityHeader {...props}>\n <ActivityLeading>{leading}</ActivityLeading>\n <ActivityIcon>{icon}</ActivityIcon>\n <span className={cn('contents', hasBadges && 'flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1')}>\n <ActivityLabel className={cn(labelShrinks && 'max-w-none min-w-0 shrink')}>\n {description || label}\n </ActivityLabel>\n {badges}\n {!description && detail && (\n <ActivityDetail wrap={wrapDetail} className={cn(hasBadges && 'grow basis-40')}>\n {detail}\n </ActivityDetail>\n )}\n </span>\n <ActivitySpacer className={cn(hasBadges && 'flex-none')} />\n {status === 'error' && (\n <ActivityTrailing>\n <X size={13} role=\"img\" aria-label=\"Failed\" className=\"shrink-0 text-destructive-foreground\" />\n </ActivityTrailing>\n )}\n <ActivityDisclosure />\n </ActivityHeader>\n );\n};\n\nexport interface ActivityContentProps extends ComponentProps<typeof CollapsibleContent> {\n /** Drop the rail and its indent, so the content lines up with the text around the line. */\n flush?: boolean;\n}\n\nexport const ActivityContent = ({ flush = false, className, children, ...props }: ActivityContentProps) => {\n const inline = useInline();\n\n return (\n <CollapsibleContent className=\"max-w-full min-w-0\" {...props}>\n <div\n className={cn(\n 'relative flex max-w-full min-w-0 flex-col py-1.5',\n !flush &&\n \"gap-1.5 pr-1 pl-4 before:absolute before:inset-y-0 before:left-0 before:w-px before:bg-border before:mask-b-from-[calc(100%-min(40%,80px))] before:content-['']\",\n !flush && (inline ? 'ml-2' : 'ml-[14px]'),\n className,\n )}\n >\n <ArrivalScope>{children}</ArrivalScope>\n </div>\n </CollapsibleContent>\n );\n};\n\nexport interface ActivityItemProps extends Omit<ActivityProps, 'children' | 'open' | 'onOpenChange' | 'foldable'> {\n icon: ReactNode;\n label: string;\n detail?: string;\n badges?: ReactNode;\n collapsible?: boolean;\n children?: ReactNode;\n 'aria-label': string;\n}\n\nexport function ActivityItem({\n icon,\n label,\n detail,\n badges,\n collapsible = true,\n children,\n ...props\n}: ActivityItemProps) {\n const folds = collapsible && Boolean(children);\n\n return (\n <Activity {...props} foldable={folds} open={collapsible ? undefined : true}>\n <ActivityTrigger>\n <ActivityHeadline icon={icon} label={label} detail={detail} wrapDetail={!folds} badges={badges} />\n </ActivityTrigger>\n {children && <ActivityContent>{children}</ActivityContent>}\n </Activity>\n );\n}\n\nexport type { ActivityAppearance, ActivityStatus };\n","import { truncateString } from '@/lib/truncate-string';\n\nexport function messagePreview(message: string): string {\n return truncateString(message, 72);\n}\n\nexport function messagePreviewShowsAll(message: string): boolean {\n return !message.includes('\\n') && messagePreview(message) === message;\n}\n","import { Bell, ExternalLink } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { ActivityItem } from '../activity';\nimport { messagePreview, messagePreviewShowsAll } from './message-preview';\nimport { Badge } from '@/ds/components/Badge';\nimport type { BadgeVariant } from '@/ds/components/Badge';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface NotificationActivityProps {\n label: string;\n message: string;\n state?: string;\n icon?: ReactNode;\n priority?: string;\n status?: string;\n pending?: string;\n link?: { href: string; label: string };\n defaultOpen?: boolean;\n /** Badges rendered after the priority, status and pending badges. */\n extraBadges?: ReactNode;\n /** A label shown above the message once opened, e.g. to flag it as untrusted. */\n messageLabel?: string;\n}\n\nconst priorityBadgeVariants: Partial<Record<string, BadgeVariant>> = {\n urgent: 'red',\n high: 'orange',\n medium: 'blue',\n};\n\nexport function NotificationActivity({\n label,\n message,\n state = 'notification',\n icon,\n priority,\n status,\n pending,\n link,\n defaultOpen,\n extraBadges,\n messageLabel,\n}: NotificationActivityProps) {\n const lineHoldsMessage = messagePreviewShowsAll(message) && !messageLabel;\n const hasBadges = Boolean(priority || status || pending || extraBadges);\n\n return (\n <ActivityItem\n label={label}\n detail={messagePreview(message)}\n icon={icon ?? <Bell className=\"text-warning-foreground\" aria-hidden />}\n badges={\n hasBadges && (\n <>\n {priority && (\n <Badge size=\"xs\" variant={priorityBadgeVariants[priority]}>\n {priority}\n </Badge>\n )}\n {status && <Badge size=\"xs\">{status}</Badge>}\n {pending && <Badge size=\"xs\">{pending} pending</Badge>}\n {extraBadges}\n </>\n )\n }\n defaultOpen={defaultOpen}\n data-notification-state={state}\n aria-label={`Notification: ${label}`}\n >\n {(!lineHoldsMessage || link) && (\n <div className=\"flex flex-col gap-2\">\n {messageLabel && (\n <Txt variant=\"caption\" tone=\"muted\">\n {messageLabel}\n </Txt>\n )}\n {message && (\n <Txt variant=\"caption\" className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n )}\n {link && <NotificationLink link={link} message={message} />}\n </div>\n )}\n </ActivityItem>\n );\n}\n\nfunction NotificationLink({\n link,\n message,\n}: {\n link: NonNullable<NotificationActivityProps['link']>;\n message: string;\n}) {\n return (\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={`${link.label}: ${messagePreview(message)}`}\n className=\"flex w-fit items-center gap-1 text-meta text-muted-foreground hover:text-foreground\"\n >\n {link.label}\n <ExternalLink size={12} aria-hidden />\n </a>\n );\n}\n","import type { ReasoningContent } from './reasoning-visibility';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\n\nexport interface ReasoningTextProps {\n content: ReasoningContent;\n className?: string;\n}\n\nexport function ReasoningText({ content: { text, redacted, streaming }, className }: ReasoningTextProps) {\n return (\n <MarkdownRenderer className={className} streaming={streaming && !redacted}>\n {redacted ? 'Reasoning was redacted by the provider.' : text}\n </MarkdownRenderer>\n );\n}\n","export interface ReasoningContent {\n text: string;\n redacted?: boolean;\n streaming?: boolean;\n}\n\nexport function hasVisibleReasoning({ text, redacted, streaming }: ReasoningContent): boolean {\n return Boolean(streaming || redacted) || hasReasoningText({ text, redacted });\n}\n\n/** Whether the passage has something to read: its text, or the notice that it was redacted. */\nexport function hasReasoningText({ text, redacted }: ReasoningContent): boolean {\n return Boolean(redacted) || text.trim().length > 0;\n}\n","import { ActivityItem } from '../activity';\nimport { ReasoningText } from './reasoning-text';\nimport { hasReasoningText, hasVisibleReasoning } from './reasoning-visibility';\nimport type { ReasoningContent } from './reasoning-visibility';\nimport { agentGlyph } from '@/ds/components/AgentIndicator';\n\nconst ThinkingGlyph = agentGlyph('thinking');\n\nexport interface ReasoningActivityProps extends ReasoningContent {\n defaultOpen?: boolean;\n}\n\nexport function ReasoningActivity({ defaultOpen = true, ...content }: ReasoningActivityProps) {\n if (!hasVisibleReasoning(content)) return null;\n\n return (\n <ActivityItem\n icon={<ThinkingGlyph aria-hidden />}\n label=\"Reasoning\"\n status={content.streaming ? 'running' : 'idle'}\n defaultOpen={defaultOpen}\n aria-label=\"Reasoning\"\n >\n {hasReasoningText(content) && (\n <ReasoningText content={content} className=\"text-caption text-muted-foreground [&_p]:my-0.5\" />\n )}\n </ActivityItem>\n );\n}\n","import {\n Activity,\n ActivityContent,\n ActivityDetail,\n ActivityDisclosure,\n ActivityHeader,\n ActivityIcon,\n ActivityItem,\n ActivityLabel,\n ActivityTrigger,\n} from '../activity';\nimport type { ActivityAppearance } from '../activity';\nimport { messagePreview, messagePreviewShowsAll } from './message-preview';\nimport { agentGlyph } from '@/ds/components/AgentIndicator';\nimport { Badge } from '@/ds/components/Badge';\nimport { Txt } from '@/ds/components/Txt';\nimport { humanize } from '@/lib/string';\n\nexport interface SignalActivityProps {\n kind: 'state' | 'reactive' | 'reminder';\n label: string;\n message: string;\n detail?: string;\n mode?: string;\n defaultOpen?: boolean;\n /** `inline` reads like the agent's own lines: their glyph, type and weight, the message as prose. */\n appearance?: ActivityAppearance;\n}\n\nconst signalKinds = {\n state: {\n Icon: agentGlyph('context'),\n accent: 'text-badge-purple-indicator',\n body: { variant: 'caption' },\n },\n reactive: {\n Icon: agentGlyph('notice'),\n accent: undefined,\n body: { variant: 'caption' },\n },\n reminder: {\n Icon: agentGlyph('notice'),\n accent: 'text-info-indicator',\n body: { variant: 'meta', font: 'mono' },\n },\n} as const;\n\nfunction SignalLine({ kind, label, message, detail, mode, defaultOpen }: Omit<SignalActivityProps, 'appearance'>) {\n const { Icon } = signalKinds[kind];\n const name = humanize(label);\n const lineHoldsMessage = detail === undefined && messagePreviewShowsAll(message);\n\n return (\n <Activity\n appearance=\"inline\"\n foldable={!lineHoldsMessage}\n defaultOpen={defaultOpen}\n data-signal-kind={kind}\n aria-label={`Signal: ${name}`}\n >\n <ActivityTrigger>\n <ActivityHeader>\n <ActivityIcon className=\"[&_svg]:size-4\">\n <Icon />\n </ActivityIcon>\n <ActivityLabel className=\"text-body font-medium\">{name}</ActivityLabel>\n {mode && <ActivityLabel className=\"-ml-1 text-body before:content-['·_']\">{mode}</ActivityLabel>}\n {detail && <ActivityDetail className=\"text-body-sm\">{detail}</ActivityDetail>}\n {lineHoldsMessage && message && (\n <ActivityLabel wrap className=\"text-body\">\n {message}\n </ActivityLabel>\n )}\n <ActivityDisclosure />\n </ActivityHeader>\n </ActivityTrigger>\n {!lineHoldsMessage && (\n <ActivityContent>\n <Txt tone=\"muted\" className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n </ActivityContent>\n )}\n </Activity>\n );\n}\n\nexport function SignalActivity({ appearance = 'row', ...signal }: SignalActivityProps) {\n if (appearance === 'inline') return <SignalLine {...signal} />;\n const { kind, label, message, detail, mode, defaultOpen } = signal;\n const { Icon, accent, body } = signalKinds[kind];\n const lineHoldsMessage = detail === undefined && messagePreviewShowsAll(message);\n\n return (\n <ActivityItem\n icon={<Icon className={accent} aria-hidden />}\n label={label}\n detail={detail ?? messagePreview(message)}\n badges={mode ? <Badge size=\"xs\">{mode}</Badge> : undefined}\n defaultOpen={defaultOpen}\n data-signal-kind={kind}\n aria-label={`Signal: ${label}`}\n >\n {message && !lineHoldsMessage && (\n <>\n {detail && (\n <Txt variant=\"meta\" font=\"mono\" tone=\"muted\" className=\"break-all\">\n {detail}\n </Txt>\n )}\n <Txt {...body} className=\"break-words whitespace-pre-wrap\">\n {message}\n </Txt>\n </>\n )}\n </ActivityItem>\n );\n}\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_date_time_range_picker = require("../date-time-range-picker-CTt7Od0P.cjs");
2
+ const require_date_time_range_picker = require("../date-time-range-picker-CWGjoR3j.cjs");
3
3
  exports.DateTimeRangePicker = require_date_time_range_picker.DateTimeRangePicker;
@@ -1 +1 @@
1
- export { t as DateTimeRangePicker } from "../date-time-range-picker-DKh1K9Iy.js";
1
+ export { t as DateTimeRangePicker } from "../date-time-range-picker-CdSiXwB4.js";
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_types = require("../types-CP7wbYua.cjs");
3
3
  const require_filter_bar_chip = require("../filter-bar-chip-Cg-UbIwP.cjs");
4
- const require_filter_bar_time_range = require("../filter-bar-time-range-BA-pXMlo.cjs");
5
- const require_FilterBar = require("../FilterBar-CQl04O6t.cjs");
4
+ const require_filter_bar_time_range = require("../filter-bar-time-range-zdM024JD.cjs");
5
+ const require_FilterBar = require("../FilterBar-BSP2UTjc.cjs");
6
6
  exports.DEFAULT_FILTER_OPERATORS = require_FilterBar.DEFAULT_FILTER_OPERATORS;
7
7
  exports.FILTER_BAR_TIME_RANGE_FIELD = require_filter_bar_time_range.FILTER_BAR_TIME_RANGE_FIELD;
8
8
  exports.FILTER_BAR_TIME_RANGE_FIELD_ID = require_filter_bar_time_range.FILTER_BAR_TIME_RANGE_FIELD_ID;
@@ -1,5 +1,5 @@
1
1
  import { t as isFilterBarGroup } from "../types-DiiL5mTO.js";
2
2
  import { a as FilterBarChipValue, i as FilterBarChipRemove, n as FilterBarChipField, r as FilterBarChipOperator, t as FilterBarChip } from "../filter-bar-chip-CABeKrtf.js";
3
- import { i as FilterBarTimeRange, n as FILTER_BAR_TIME_RANGE_FIELD_ID, r as FILTER_BAR_TIME_RANGE_ITEM, t as FILTER_BAR_TIME_RANGE_FIELD } from "../filter-bar-time-range-mg9JeYue.js";
4
- import { a as FilterBarGroupEditor, i as FilterBarAdvancedChip, n as FilterBar, o as FilterBarLogicToggle, r as FilterBarChips, s as FilterBarInput, t as DEFAULT_FILTER_OPERATORS } from "../FilterBar-BgW2dqRQ.js";
3
+ import { i as FilterBarTimeRange, n as FILTER_BAR_TIME_RANGE_FIELD_ID, r as FILTER_BAR_TIME_RANGE_ITEM, t as FILTER_BAR_TIME_RANGE_FIELD } from "../filter-bar-time-range-qlV8p7hp.js";
4
+ import { a as FilterBarGroupEditor, i as FilterBarAdvancedChip, n as FilterBar, o as FilterBarLogicToggle, r as FilterBarChips, s as FilterBarInput, t as DEFAULT_FILTER_OPERATORS } from "../FilterBar-PSQ1OwqH.js";
5
5
  export { DEFAULT_FILTER_OPERATORS, FILTER_BAR_TIME_RANGE_FIELD, FILTER_BAR_TIME_RANGE_FIELD_ID, FILTER_BAR_TIME_RANGE_ITEM, FilterBar, FilterBarAdvancedChip, FilterBarChip, FilterBarChipField, FilterBarChipOperator, FilterBarChipRemove, FilterBarChipValue, FilterBarChips, FilterBarGroupEditor, FilterBarInput, FilterBarLogicToggle, FilterBarTimeRange, isFilterBarGroup };
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_MarkdownRenderer = require("../MarkdownRenderer-CB8Z_CHc.cjs");
2
+ const require_MarkdownRenderer = require("../MarkdownRenderer-y65WGBhC.cjs");
3
3
  const require_use_reveal = require("../use-reveal-DrxyKxtC.cjs");
4
4
  exports.MarkdownRenderer = require_MarkdownRenderer.MarkdownRenderer;
5
5
  exports.useRevealedText = require_use_reveal.useRevealedText;
@@ -1,3 +1,3 @@
1
- import { t as MarkdownRenderer } from "../MarkdownRenderer-2GOXQJEv.js";
1
+ import { t as MarkdownRenderer } from "../MarkdownRenderer-CI30RqdB.js";
2
2
  import { t as useRevealedText } from "../use-reveal-QiESqYTa.js";
3
3
  export { MarkdownRenderer, useRevealedText };
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_MetricsCard = require("../MetricsCard-CEB-f2sv.cjs");
2
+ const require_MetricsCard = require("../MetricsCard-BEwiS7Pe.cjs");
3
3
  exports.MetricsCard = require_MetricsCard.MetricsCard;
@@ -1 +1 @@
1
- export { t as MetricsCard } from "../MetricsCard-M8awJ2B_.js";
1
+ export { t as MetricsCard } from "../MetricsCard-ua6C6b8a.js";
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_MetricsLineChart = require("../MetricsLineChart-CjBm4IXu.cjs");
2
+ const require_MetricsLineChart = require("../MetricsLineChart-tZxsauau.cjs");
3
3
  exports.MetricsLineChart = require_MetricsLineChart.MetricsLineChart;
4
4
  exports.MetricsLineChartLegend = require_MetricsLineChart.MetricsLineChartLegend;
5
5
  exports.MetricsLineChartTooltip = require_MetricsLineChart.MetricsLineChartTooltip;
@@ -1 +1 @@
1
- export { t as MetricsLineChart, r as MetricsLineChartLegend, n as MetricsLineChartTooltip } from "../MetricsLineChart-BhHoduO0.js";
1
+ export { t as MetricsLineChart, r as MetricsLineChartLegend, n as MetricsLineChartTooltip } from "../MetricsLineChart-4SwxBbQx.js";
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_MetricsStackedBarChart = require("../MetricsStackedBarChart-BdMlKv6G.cjs");
2
+ const require_MetricsStackedBarChart = require("../MetricsStackedBarChart-CDLE76IB.cjs");
3
3
  exports.MetricsStackedBarChart = require_MetricsStackedBarChart.MetricsStackedBarChart;
@@ -1 +1 @@
1
- export { t as MetricsStackedBarChart } from "../MetricsStackedBarChart-BRuA6MTE.js";
1
+ export { t as MetricsStackedBarChart } from "../MetricsStackedBarChart-D2QyS4-z.js";
@@ -8,9 +8,9 @@ const require_Txt = require("../Txt-BnoSqxKE.cjs");
8
8
  const require_primitives_password_manager_autofill = require("../primitives/password-manager-autofill.cjs.js");
9
9
  const require_dropdown_menu = require("../dropdown-menu-BETTTPBB.cjs");
10
10
  const require_context_menu = require("../context-menu-DTFPCyae.cjs");
11
+ const require_components_HoverCard = require("./HoverCard.cjs.js");
11
12
  const require_saved_view_schema = require("../saved-view-schema-DRJYELfK.cjs");
12
13
  const require_filter_bar_chip = require("../filter-bar-chip-Cg-UbIwP.cjs");
13
- const require_components_HoverCard = require("./HoverCard.cjs.js");
14
14
  let react = require("react");
15
15
  let react_jsx_runtime = require("react/jsx-runtime");
16
16
  let lucide_react = require("lucide-react");