@mastra/playground-ui 60.2.1-alpha.0 → 61.0.0-alpha.2

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 (1149) hide show
  1. package/README.md +18 -0
  2. package/dist/{Avatar-bHcyExU7.js → Avatar-Bg_EZRgZ.js} +2 -2
  3. package/dist/{Avatar-bHcyExU7.js.map → Avatar-Bg_EZRgZ.js.map} +1 -1
  4. package/dist/{Avatar-B3PwGdWv.cjs → Avatar-DchBEEMO.cjs} +2 -2
  5. package/dist/{Avatar-B3PwGdWv.cjs.map → Avatar-DchBEEMO.cjs.map} +1 -1
  6. package/dist/{Badge-D3EctKQo.cjs → Badge-DB59RxT5.cjs} +3 -3
  7. package/dist/Badge-DB59RxT5.cjs.map +1 -0
  8. package/dist/{Badge-DmOqFpXW.js → Badge-DId-8rYY.js} +3 -3
  9. package/dist/Badge-DId-8rYY.js.map +1 -0
  10. package/dist/{EmptyState-DyyUFpzY.js → EmptyState-DGzBN0Ix.js} +2 -2
  11. package/dist/{EmptyState-DyyUFpzY.js.map → EmptyState-DGzBN0Ix.js.map} +1 -1
  12. package/dist/{EmptyState-CuoMGNP0.cjs → EmptyState-DvSib3QC.cjs} +2 -2
  13. package/dist/{EmptyState-CuoMGNP0.cjs.map → EmptyState-DvSib3QC.cjs.map} +1 -1
  14. package/dist/{Header-hTHhO02b.js → Header-BXl3AZgO.js} +2 -2
  15. package/dist/{Header-hTHhO02b.js.map → Header-BXl3AZgO.js.map} +1 -1
  16. package/dist/{Header-y51Sfo3G.cjs → Header-W3PBmXia.cjs} +2 -2
  17. package/dist/{Header-y51Sfo3G.cjs.map → Header-W3PBmXia.cjs.map} +1 -1
  18. package/dist/{Notice-B8RIClJD.js → Notice-D4gMAkVI.js} +2 -2
  19. package/dist/{Notice-B8RIClJD.js.map → Notice-D4gMAkVI.js.map} +1 -1
  20. package/dist/{Notice-C4Tgmtgb.cjs → Notice-D4zc_oTj.cjs} +2 -2
  21. package/dist/{Notice-C4Tgmtgb.cjs.map → Notice-D4zc_oTj.cjs.map} +1 -1
  22. package/dist/{Txt-BP1SRHmL.js → Txt-C3cYJgKU.js} +4 -1
  23. package/dist/Txt-C3cYJgKU.js.map +1 -0
  24. package/dist/{Txt-DPmEpNbp.cjs → Txt-DNnvlrBo.cjs} +4 -1
  25. package/dist/Txt-DNnvlrBo.cjs.map +1 -0
  26. package/dist/{activity-CbQG59Oc.cjs → activity-ClKZR5_o.cjs} +2 -2
  27. package/dist/{activity-CbQG59Oc.cjs.map → activity-ClKZR5_o.cjs.map} +1 -1
  28. package/dist/{activity-BoXbE4Kz.js → activity-D0SefV4r.js} +2 -2
  29. package/dist/{activity-BoXbE4Kz.js.map → activity-D0SefV4r.js.map} +1 -1
  30. package/dist/{ask-user-DE8TaPhb.js → ask-user-CqCUiZRR.js} +4 -4
  31. package/dist/{ask-user-DE8TaPhb.js.map → ask-user-CqCUiZRR.js.map} +1 -1
  32. package/dist/{ask-user-XYY0fUoI.cjs → ask-user-DBb0lUh2.cjs} +4 -4
  33. package/dist/{ask-user-XYY0fUoI.cjs.map → ask-user-DBb0lUh2.cjs.map} +1 -1
  34. package/dist/buttons-group.css +1 -1
  35. package/dist/{code-BeWhOFT4.js → code-C8akLzcu.js} +12 -9
  36. package/dist/code-C8akLzcu.js.map +1 -0
  37. package/dist/{code-B-x-9sJ1.cjs → code-D_sH618U.cjs} +12 -9
  38. package/dist/code-D_sH618U.cjs.map +1 -0
  39. package/dist/{code-block-Bnz7Pq0Q.js → code-block-CXZNO_qi.js} +6 -5
  40. package/dist/{code-block-Bnz7Pq0Q.js.map → code-block-CXZNO_qi.js.map} +1 -1
  41. package/dist/{code-block-C3DbSINk.cjs → code-block-z2hVcNq7.cjs} +7 -6
  42. package/dist/{code-block-C3DbSINk.cjs.map → code-block-z2hVcNq7.cjs.map} +1 -1
  43. package/dist/collapsible-box-DW-y0Oi1.js +67 -0
  44. package/dist/collapsible-box-DW-y0Oi1.js.map +1 -0
  45. package/dist/collapsible-box-DdUueeh6.cjs +69 -0
  46. package/dist/collapsible-box-DdUueeh6.cjs.map +1 -0
  47. package/dist/{combobox-RzEkcOuu.cjs → combobox-DPpiBLWV.cjs} +3 -3
  48. package/dist/{combobox-RzEkcOuu.cjs.map → combobox-DPpiBLWV.cjs.map} +1 -1
  49. package/dist/{combobox-DKFPbNMB.js → combobox-DoJgbq9N.js} +3 -3
  50. package/dist/{combobox-DKFPbNMB.js.map → combobox-DoJgbq9N.js.map} +1 -1
  51. package/dist/{combobox-styles-mbcWlNZQ.js → combobox-styles-BuHYzri9.js} +3 -3
  52. package/dist/combobox-styles-BuHYzri9.js.map +1 -0
  53. package/dist/{combobox-styles-qL3FSgmU.cjs → combobox-styles-zdW4cHSq.cjs} +3 -3
  54. package/dist/combobox-styles-zdW4cHSq.cjs.map +1 -0
  55. package/dist/{command-DFin7kHN.js → command-CXPbrw66.js} +7 -4
  56. package/dist/command-CXPbrw66.js.map +1 -0
  57. package/dist/{command-Bm0VcX7X.cjs → command-DD3WIrQX.cjs} +7 -4
  58. package/dist/command-DD3WIrQX.cjs.map +1 -0
  59. package/dist/{comment-DKWkzdMj.js → comment-B1Cf9w4Z.js} +2 -2
  60. package/dist/{comment-DKWkzdMj.js.map → comment-B1Cf9w4Z.js.map} +1 -1
  61. package/dist/{comment-DWY6D0pZ.cjs → comment-DnbibTOe.cjs} +2 -2
  62. package/dist/{comment-DWY6D0pZ.cjs.map → comment-DnbibTOe.cjs.map} +1 -1
  63. package/dist/components/Avatar.cjs.js +1 -1
  64. package/dist/components/Avatar.es.js +1 -1
  65. package/dist/components/Badge.cjs.js +1 -1
  66. package/dist/components/Badge.es.js +1 -1
  67. package/dist/components/ChatShell.cjs.js +6 -5
  68. package/dist/components/ChatShell.cjs.js.map +1 -1
  69. package/dist/components/ChatShell.es.js +6 -5
  70. package/dist/components/ChatShell.es.js.map +1 -1
  71. package/dist/components/ClampedText.cjs.js +1 -1
  72. package/dist/components/ClampedText.es.js +1 -1
  73. package/dist/components/Code.cjs.js +1 -1
  74. package/dist/components/Code.es.js +1 -1
  75. package/dist/components/CodeBlock.cjs.js +1 -1
  76. package/dist/components/CodeBlock.es.js +1 -1
  77. package/dist/components/CollapsibleBox.cjs.js +3 -2
  78. package/dist/components/CollapsibleBox.cjs.js.map +1 -1
  79. package/dist/components/CollapsibleBox.es.js +2 -1
  80. package/dist/components/CollapsibleBox.es.js.map +1 -1
  81. package/dist/components/Combobox.cjs.js +2 -2
  82. package/dist/components/Combobox.es.js +2 -2
  83. package/dist/components/Command.cjs.js +1 -1
  84. package/dist/components/Command.es.js +1 -1
  85. package/dist/components/CommandPalette.cjs.js +2 -2
  86. package/dist/components/CommandPalette.es.js +2 -2
  87. package/dist/components/Comment.cjs.js +4 -4
  88. package/dist/components/Comment.es.js +5 -5
  89. package/dist/components/DataCodeSection.cjs.js +1 -1
  90. package/dist/components/DataCodeSection.es.js +1 -1
  91. package/dist/components/DataDetailsPanel.cjs.js +2 -2
  92. package/dist/components/DataDetailsPanel.es.js +2 -2
  93. package/dist/components/DataList.cjs.js +4 -4
  94. package/dist/components/DataList.es.js +4 -4
  95. package/dist/components/DataPanel.cjs.js +1 -1
  96. package/dist/components/DataPanel.es.js +1 -1
  97. package/dist/components/DateRangeTimeline.cjs.js +1 -1
  98. package/dist/components/DateRangeTimeline.es.js +1 -1
  99. package/dist/components/DateTimePicker.cjs.js +2 -2
  100. package/dist/components/DateTimePicker.es.js +2 -2
  101. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  102. package/dist/components/DateTimeRangePicker.es.js +1 -1
  103. package/dist/components/EmptyState.cjs.js +1 -1
  104. package/dist/components/EmptyState.es.js +1 -1
  105. package/dist/components/Entity.cjs.js +1 -1
  106. package/dist/components/Entity.es.js +1 -1
  107. package/dist/components/EntityHeader.cjs.js +1 -1
  108. package/dist/components/EntityHeader.es.js +1 -1
  109. package/dist/components/Entry.cjs.js +1 -1
  110. package/dist/components/Entry.es.js +1 -1
  111. package/dist/components/EnvironmentVariablesEditor.cjs.js +5 -5
  112. package/dist/components/EnvironmentVariablesEditor.es.js +5 -5
  113. package/dist/components/Field.cjs.js +1 -1
  114. package/dist/components/Field.es.js +1 -1
  115. package/dist/components/FileDropBackdrop.cjs.js +1 -1
  116. package/dist/components/FileDropBackdrop.es.js +1 -1
  117. package/dist/components/FilterBar.cjs.js +3 -3
  118. package/dist/components/FilterBar.es.js +4 -4
  119. package/dist/components/FormFieldBlocks.cjs.js +2 -2
  120. package/dist/components/FormFieldBlocks.es.js +2 -2
  121. package/dist/components/Header.cjs.js +1 -1
  122. package/dist/components/Header.es.js +1 -1
  123. package/dist/components/HorizontalBars.cjs.js +1 -1
  124. package/dist/components/HorizontalBars.es.js +1 -1
  125. package/dist/components/InputGroup.cjs.js +3 -1
  126. package/dist/components/InputGroup.cjs.js.map +1 -1
  127. package/dist/components/InputGroup.es.js +1 -1
  128. package/dist/components/InputNumber.cjs.js +95 -0
  129. package/dist/components/InputNumber.cjs.js.map +1 -0
  130. package/dist/components/InputNumber.d.ts +2 -0
  131. package/dist/components/InputNumber.es.js +68 -0
  132. package/dist/components/InputNumber.es.js.map +1 -0
  133. package/dist/components/JSONSchemaForm.cjs.js +2 -2
  134. package/dist/components/JSONSchemaForm.es.js +2 -2
  135. package/dist/components/KeyValueList.cjs.js +1 -1
  136. package/dist/components/KeyValueList.es.js +1 -1
  137. package/dist/components/ListSearch.cjs.js +1 -1
  138. package/dist/components/ListSearch.es.js +1 -1
  139. package/dist/components/LogsDataList.cjs.js +3 -1
  140. package/dist/components/LogsDataList.cjs.js.map +1 -1
  141. package/dist/components/LogsDataList.es.js +3 -1
  142. package/dist/components/LogsDataList.es.js.map +1 -1
  143. package/dist/components/MainHeader.cjs.js +1 -1
  144. package/dist/components/MainHeader.es.js +1 -1
  145. package/dist/components/MainSidebar.cjs.js +11 -125
  146. package/dist/components/MainSidebar.cjs.js.map +1 -1
  147. package/dist/components/MainSidebar.es.js +1 -120
  148. package/dist/components/MainSidebar.es.js.map +1 -1
  149. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  150. package/dist/components/MarkdownRenderer.es.js +1 -1
  151. package/dist/components/Message.cjs.js +1 -1
  152. package/dist/components/Message.es.js +2 -2
  153. package/dist/components/MessageScroller.cjs.js +1 -1
  154. package/dist/components/MessageScroller.es.js +1 -1
  155. package/dist/components/MetricsCard.cjs.js +1 -1
  156. package/dist/components/MetricsCard.es.js +1 -1
  157. package/dist/components/MetricsKpiCard.cjs.js +1 -1
  158. package/dist/components/MetricsKpiCard.es.js +1 -1
  159. package/dist/components/MetricsLineChart.cjs.js +2 -2
  160. package/dist/components/MetricsLineChart.es.js +2 -2
  161. package/dist/components/MetricsStackedBarChart.cjs.js +1 -1
  162. package/dist/components/MetricsStackedBarChart.es.js +1 -1
  163. package/dist/components/Notice.cjs.js +1 -1
  164. package/dist/components/Notice.es.js +1 -1
  165. package/dist/components/PageHeader.cjs.js +1 -1
  166. package/dist/components/PageHeader.es.js +1 -1
  167. package/dist/components/PageLayout.cjs.js +1 -1
  168. package/dist/components/PageLayout.es.js +1 -1
  169. package/dist/components/ProductBadge.cjs.js +1 -1
  170. package/dist/components/ProductBadge.es.js +1 -1
  171. package/dist/components/PropertyFilter.cjs.js +3 -3
  172. package/dist/components/PropertyFilter.es.js +3 -3
  173. package/dist/components/RelativeTimestamp.cjs.js +1 -1
  174. package/dist/components/RelativeTimestamp.es.js +1 -1
  175. package/dist/components/RuleBuilder.cjs.js +2 -2
  176. package/dist/components/RuleBuilder.es.js +2 -2
  177. package/dist/components/ScatterPlotChart.cjs.js +1 -1
  178. package/dist/components/ScatterPlotChart.es.js +1 -1
  179. package/dist/components/SearchInput.cjs.js +1 -1
  180. package/dist/components/SearchInput.es.js +1 -1
  181. package/dist/components/Section.cjs.js +1 -1
  182. package/dist/components/Section.es.js +1 -1
  183. package/dist/components/SectionCard.cjs.js +1 -1
  184. package/dist/components/SectionCard.es.js +1 -1
  185. package/dist/components/Select.cjs.js +1 -1
  186. package/dist/components/Select.es.js +1 -1
  187. package/dist/components/SideDialog.cjs.js +1 -1
  188. package/dist/components/SideDialog.es.js +1 -1
  189. package/dist/components/StatusIndicators.cjs.js +1 -1
  190. package/dist/components/StatusIndicators.es.js +1 -1
  191. package/dist/components/Steps.cjs.js +1 -1
  192. package/dist/components/Steps.es.js +1 -1
  193. package/dist/components/Table.cjs.js +1 -1
  194. package/dist/components/Table.es.js +1 -1
  195. package/dist/components/Tabs.cjs.js +5 -4
  196. package/dist/components/Tabs.cjs.js.map +1 -1
  197. package/dist/components/Tabs.es.js +4 -3
  198. package/dist/components/Tabs.es.js.map +1 -1
  199. package/dist/components/Text.cjs.js +1 -1
  200. package/dist/components/Text.es.js +1 -1
  201. package/dist/components/ThinkingLevel.cjs.js +230 -0
  202. package/dist/components/ThinkingLevel.cjs.js.map +1 -0
  203. package/dist/components/ThinkingLevel.d.ts +2 -0
  204. package/dist/components/ThinkingLevel.es.js +223 -0
  205. package/dist/components/ThinkingLevel.es.js.map +1 -0
  206. package/dist/components/ThreadList.cjs.js +1 -1
  207. package/dist/components/ThreadList.es.js +1 -1
  208. package/dist/components/ThreadRail.cjs.js +1 -1
  209. package/dist/components/ThreadRail.es.js +1 -1
  210. package/dist/components/TokenBudget.cjs.js +1 -1
  211. package/dist/components/TokenBudget.es.js +1 -1
  212. package/dist/components/Tree.cjs.js +2 -487
  213. package/dist/components/Tree.cjs.js.map +1 -1
  214. package/dist/components/Tree.es.js +1 -471
  215. package/dist/components/Tree.es.js.map +1 -1
  216. package/dist/components/Truncate.cjs.js +1 -1
  217. package/dist/components/Truncate.es.js +1 -1
  218. package/dist/components/Txt.cjs.js +1 -1
  219. package/dist/components/Txt.es.js +1 -1
  220. package/dist/components/Workflow.cjs.js +4 -4
  221. package/dist/components/Workflow.es.js +4 -4
  222. package/dist/components/ai/activity.cjs.js +4 -4
  223. package/dist/components/ai/activity.es.js +4 -4
  224. package/dist/components/ai/ask-user.cjs.js +1 -1
  225. package/dist/components/ai/ask-user.es.js +1 -1
  226. package/dist/components/ai/plan.cjs.js +1 -1
  227. package/dist/components/ai/plan.es.js +1 -1
  228. package/dist/components/ai/task-list.cjs.js +1 -1
  229. package/dist/components/ai/task-list.es.js +1 -1
  230. package/dist/components/ai/tool-call.cjs.js +2 -2
  231. package/dist/components/ai/tool-call.es.js +2 -2
  232. package/dist/components/ai/transcript-divider.cjs.js +3 -11
  233. package/dist/components/ai/transcript-divider.cjs.js.map +1 -1
  234. package/dist/components/ai/transcript-divider.es.js +1 -13
  235. package/dist/components/ai/transcript-divider.es.js.map +1 -1
  236. package/dist/{data-code-section-Ds79F6W-.cjs → data-code-section-BK0bftM-.cjs} +3 -3
  237. package/dist/{data-code-section-Ds79F6W-.cjs.map → data-code-section-BK0bftM-.cjs.map} +1 -1
  238. package/dist/{data-code-section-DFxE6ckH.js → data-code-section-yMYmVciV.js} +3 -3
  239. package/dist/{data-code-section-DFxE6ckH.js.map → data-code-section-yMYmVciV.js.map} +1 -1
  240. package/dist/{data-list-CEIYm7FY.js → data-list-DdsyfT8B.js} +3 -3
  241. package/dist/{data-list-CEIYm7FY.js.map → data-list-DdsyfT8B.js.map} +1 -1
  242. package/dist/{data-list-Bqf-fhMx.cjs → data-list-DoKc-wSe.cjs} +3 -3
  243. package/dist/{data-list-Bqf-fhMx.cjs.map → data-list-DoKc-wSe.cjs.map} +1 -1
  244. package/dist/{data-list-spacer-BH2DjRdk.js → data-list-spacer-7QVTcgIS.js} +2 -2
  245. package/dist/{data-list-spacer-BH2DjRdk.js.map → data-list-spacer-7QVTcgIS.js.map} +1 -1
  246. package/dist/{data-list-spacer-DFvaAEqo.cjs → data-list-spacer-CD4hD-As.cjs} +2 -2
  247. package/dist/{data-list-spacer-DFvaAEqo.cjs.map → data-list-spacer-CD4hD-As.cjs.map} +1 -1
  248. package/dist/{data-panel-CbomKGJt.js → data-panel-GT4fMXR0.js} +4 -4
  249. package/dist/data-panel-GT4fMXR0.js.map +1 -0
  250. package/dist/{data-panel-o-QLWuFV.cjs → data-panel-mzQKwVkT.cjs} +4 -4
  251. package/dist/data-panel-mzQKwVkT.cjs.map +1 -0
  252. package/dist/{date-time-range-picker-Bb-CGVEL.cjs → date-time-range-picker-BbX8F_LY.cjs} +4 -4
  253. package/dist/{date-time-range-picker-Bb-CGVEL.cjs.map → date-time-range-picker-BbX8F_LY.cjs.map} +1 -1
  254. package/dist/{date-time-range-picker-B1zYIQTC.js → date-time-range-picker-DzPLKJol.js} +4 -4
  255. package/dist/{date-time-range-picker-B1zYIQTC.js.map → date-time-range-picker-DzPLKJol.js.map} +1 -1
  256. package/dist/domains/auth/components/permission-denied.cjs.js +1 -1
  257. package/dist/domains/auth/components/permission-denied.es.js +1 -1
  258. package/dist/domains/auth/components/session-expired.cjs.js +1 -1
  259. package/dist/domains/auth/components/session-expired.es.js +1 -1
  260. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  261. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  262. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
  263. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
  264. package/dist/domains/chat/components/section-label.cjs.js +1 -1
  265. package/dist/domains/chat/components/section-label.es.js +1 -1
  266. package/dist/domains/chat/messages/assistant-message-actions.cjs.js +1 -1
  267. package/dist/domains/chat/messages/assistant-message-actions.es.js +1 -1
  268. package/dist/domains/chat/messages/dataset-save-action.cjs.js +2 -2
  269. package/dist/domains/chat/messages/dataset-save-action.es.js +2 -2
  270. package/dist/domains/chat/messages/message-row.cjs.js +4 -4
  271. package/dist/domains/chat/messages/message-row.es.js +4 -4
  272. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  273. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  274. package/dist/domains/chat/messages/renderers/message-text.cjs.js +3 -3
  275. package/dist/domains/chat/messages/renderers/message-text.es.js +3 -3
  276. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  277. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  278. package/dist/domains/chat/messages/renderers/status-renderers.cjs.js +1 -1
  279. package/dist/domains/chat/messages/renderers/status-renderers.es.js +1 -1
  280. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  281. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  282. package/dist/domains/chat/messages/skill-message.cjs.js +3 -3
  283. package/dist/domains/chat/messages/skill-message.es.js +3 -3
  284. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
  285. package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
  286. package/dist/domains/chat/messages/tripwire-notice.cjs.js +2 -2
  287. package/dist/domains/chat/messages/tripwire-notice.es.js +2 -2
  288. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  289. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  290. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +1 -1
  291. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +1 -1
  292. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +1 -1
  293. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +1 -1
  294. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +3 -3
  295. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +3 -3
  296. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +1 -1
  297. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +1 -1
  298. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +3 -3
  299. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +3 -3
  300. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +2 -2
  301. package/dist/domains/chat/tools/badges/observation-renderer.es.js +2 -2
  302. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +2 -2
  303. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +2 -2
  304. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +2 -2
  305. package/dist/domains/chat/tools/badges/tool-badge.es.js +2 -2
  306. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +2 -0
  307. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
  308. package/dist/domains/chat/tools/badges/workflow-badge.es.js +2 -0
  309. package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
  310. package/dist/domains/chat/tools/badges/workspace-link.cjs.js +1 -1
  311. package/dist/domains/chat/tools/badges/workspace-link.es.js +1 -1
  312. package/dist/domains/chat/tools/submit-plan-tool.cjs.js +2 -2
  313. package/dist/domains/chat/tools/submit-plan-tool.es.js +2 -2
  314. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +4 -4
  315. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +4 -4
  316. package/dist/domains/logs/components/log-data-panel.cjs.js +2 -2
  317. package/dist/domains/logs/components/log-data-panel.es.js +2 -2
  318. package/dist/domains/logs/components/logs-error-content.cjs.js +1 -1
  319. package/dist/domains/logs/components/logs-error-content.es.js +1 -1
  320. package/dist/domains/logs/components/logs-list-view.cjs.js +1 -1
  321. package/dist/domains/logs/components/logs-list-view.es.js +1 -1
  322. package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
  323. package/dist/domains/logs/components/no-logs-info.es.js +1 -1
  324. package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
  325. package/dist/domains/memory/components/flame-graph.es.js +1 -1
  326. package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
  327. package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
  328. package/dist/domains/memory/components/observation-detail-view.cjs.js +3 -3
  329. package/dist/domains/memory/components/observation-detail-view.es.js +3 -3
  330. package/dist/domains/metrics/components/bar-list.cjs.js +1 -1
  331. package/dist/domains/metrics/components/bar-list.es.js +1 -1
  332. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  333. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  334. package/dist/domains/metrics/components/kpi-card-view.cjs.js +1 -1
  335. package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
  336. package/dist/domains/metrics/components/latency-card-view.cjs.js +8 -7
  337. package/dist/domains/metrics/components/latency-card-view.cjs.js.map +1 -1
  338. package/dist/domains/metrics/components/latency-card-view.es.js +7 -6
  339. package/dist/domains/metrics/components/latency-card-view.es.js.map +1 -1
  340. package/dist/domains/metrics/components/memory-card-view.cjs.js +7 -6
  341. package/dist/domains/metrics/components/memory-card-view.cjs.js.map +1 -1
  342. package/dist/domains/metrics/components/memory-card-view.es.js +6 -5
  343. package/dist/domains/metrics/components/memory-card-view.es.js.map +1 -1
  344. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +2 -2
  345. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +2 -2
  346. package/dist/domains/metrics/components/scores-card-view.cjs.js +8 -7
  347. package/dist/domains/metrics/components/scores-card-view.cjs.js.map +1 -1
  348. package/dist/domains/metrics/components/scores-card-view.es.js +7 -6
  349. package/dist/domains/metrics/components/scores-card-view.es.js.map +1 -1
  350. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +7 -6
  351. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js.map +1 -1
  352. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +6 -5
  353. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js.map +1 -1
  354. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +8 -7
  355. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js.map +1 -1
  356. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +7 -6
  357. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js.map +1 -1
  358. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +7 -6
  359. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js.map +1 -1
  360. package/dist/domains/metrics/components/traces-volume-card-view.es.js +6 -5
  361. package/dist/domains/metrics/components/traces-volume-card-view.es.js.map +1 -1
  362. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +4 -4
  363. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +4 -4
  364. package/dist/domains/observability/components/trace-as-item-dialog.cjs.js +1 -1
  365. package/dist/domains/observability/components/trace-as-item-dialog.es.js +1 -1
  366. package/dist/domains/request-context/components/request-context-label.cjs.js +1 -1
  367. package/dist/domains/request-context/components/request-context-label.es.js +1 -1
  368. package/dist/domains/review/components/review-status-badge.cjs.js +1 -1
  369. package/dist/domains/review/components/review-status-badge.es.js +1 -1
  370. package/dist/domains/scores/components/score-as-item-dialog.cjs.js +1 -1
  371. package/dist/domains/scores/components/score-as-item-dialog.es.js +1 -1
  372. package/dist/domains/scores/components/score-data-panel.cjs.js +1 -1
  373. package/dist/domains/scores/components/score-data-panel.es.js +1 -1
  374. package/dist/domains/scores/components/span-scoring.cjs.js +3 -3
  375. package/dist/domains/scores/components/span-scoring.es.js +3 -3
  376. package/dist/domains/scores/components/trace-scores-tab.cjs.js +5 -4
  377. package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
  378. package/dist/domains/scores/components/trace-scores-tab.es.js +5 -4
  379. package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
  380. package/dist/domains/traces/components/feedback-thread.cjs.js +4 -4
  381. package/dist/domains/traces/components/feedback-thread.es.js +4 -4
  382. package/dist/domains/traces/components/no-traces-info.cjs.js +1 -1
  383. package/dist/domains/traces/components/no-traces-info.es.js +1 -1
  384. package/dist/domains/traces/components/span-data-panel-view.cjs.js +21 -16
  385. package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
  386. package/dist/domains/traces/components/span-data-panel-view.es.js +20 -15
  387. package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
  388. package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
  389. package/dist/domains/traces/components/span-details-view.es.js +1 -1
  390. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +2 -2
  391. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +2 -2
  392. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  393. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  394. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +3 -3
  395. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +3 -3
  396. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +1 -1
  397. package/dist/domains/traces/components/span-payload/span-payload-json.es.js +1 -1
  398. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +3 -3
  399. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +3 -3
  400. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +2 -2
  401. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
  402. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  403. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  404. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +3 -2
  405. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js.map +1 -1
  406. package/dist/domains/traces/components/span-payload/span-payload-section.es.js +2 -1
  407. package/dist/domains/traces/components/span-payload/span-payload-section.es.js.map +1 -1
  408. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
  409. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
  410. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +3 -3
  411. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +3 -3
  412. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  413. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  414. package/dist/domains/traces/components/span-timeline-row.cjs.js +1 -1
  415. package/dist/domains/traces/components/span-timeline-row.es.js +1 -1
  416. package/dist/domains/traces/components/span-token-usage.cjs.js +1 -1
  417. package/dist/domains/traces/components/span-token-usage.es.js +1 -1
  418. package/dist/domains/traces/components/span-type-legend.cjs.js +1 -1
  419. package/dist/domains/traces/components/span-type-legend.es.js +1 -1
  420. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +5 -3
  421. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js.map +1 -1
  422. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +5 -3
  423. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js.map +1 -1
  424. package/dist/domains/traces/components/thread-trace/thread-trace-list.cjs.js +4 -3
  425. package/dist/domains/traces/components/thread-trace/thread-trace-list.cjs.js.map +1 -1
  426. package/dist/domains/traces/components/thread-trace/thread-trace-list.es.js +4 -3
  427. package/dist/domains/traces/components/thread-trace/thread-trace-list.es.js.map +1 -1
  428. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +8 -16
  429. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js.map +1 -1
  430. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +8 -15
  431. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js.map +1 -1
  432. package/dist/domains/traces/components/thread-trace/thread-trace-root.cjs.js +3 -16
  433. package/dist/domains/traces/components/thread-trace/thread-trace-root.cjs.js.map +1 -1
  434. package/dist/domains/traces/components/thread-trace/thread-trace-root.es.js +3 -16
  435. package/dist/domains/traces/components/thread-trace/thread-trace-root.es.js.map +1 -1
  436. package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js +27 -5
  437. package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js.map +1 -1
  438. package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js +27 -7
  439. package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js.map +1 -1
  440. package/dist/domains/traces/components/thread-trace/thread-trace-span-panel.cjs.js +29 -24
  441. package/dist/domains/traces/components/thread-trace/thread-trace-span-panel.cjs.js.map +1 -1
  442. package/dist/domains/traces/components/thread-trace/thread-trace-span-panel.es.js +30 -25
  443. package/dist/domains/traces/components/thread-trace/thread-trace-span-panel.es.js.map +1 -1
  444. package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +45 -45
  445. package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js.map +1 -1
  446. package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +47 -47
  447. package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js.map +1 -1
  448. package/dist/domains/traces/components/thread-trace.cjs.js +2 -1
  449. package/dist/domains/traces/components/thread-trace.cjs.js.map +1 -1
  450. package/dist/domains/traces/components/thread-trace.es.js +4 -3
  451. package/dist/domains/traces/components/thread-trace.es.js.map +1 -1
  452. package/dist/domains/traces/components/thread-view-by-trace.cjs.js +43 -23
  453. package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
  454. package/dist/domains/traces/components/thread-view-by-trace.es.js +46 -26
  455. package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
  456. package/dist/domains/traces/components/thread-view-skeleton.cjs.js +28 -13
  457. package/dist/domains/traces/components/thread-view-skeleton.cjs.js.map +1 -1
  458. package/dist/domains/traces/components/thread-view-skeleton.es.js +28 -13
  459. package/dist/domains/traces/components/thread-view-skeleton.es.js.map +1 -1
  460. package/dist/domains/traces/components/timeline-name-col.cjs.js +5 -5
  461. package/dist/domains/traces/components/timeline-name-col.cjs.js.map +1 -1
  462. package/dist/domains/traces/components/timeline-name-col.es.js +5 -5
  463. package/dist/domains/traces/components/timeline-name-col.es.js.map +1 -1
  464. package/dist/domains/traces/components/timeline-timing-col.cjs.js +1 -1
  465. package/dist/domains/traces/components/timeline-timing-col.es.js +1 -1
  466. package/dist/domains/traces/components/trace-columns-menu.cjs.js +3 -3
  467. package/dist/domains/traces/components/trace-columns-menu.es.js +3 -3
  468. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +72 -50
  469. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  470. package/dist/domains/traces/components/trace-data-panel-view.es.js +72 -50
  471. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  472. package/dist/domains/traces/components/trace-data-panel.cjs.js +1 -0
  473. package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
  474. package/dist/domains/traces/components/trace-data-panel.es.js +1 -0
  475. package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
  476. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  477. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  478. package/dist/domains/traces/components/trace-messages-panel.cjs.js +2 -16
  479. package/dist/domains/traces/components/trace-messages-panel.cjs.js.map +1 -1
  480. package/dist/domains/traces/components/trace-messages-panel.es.js +3 -17
  481. package/dist/domains/traces/components/trace-messages-panel.es.js.map +1 -1
  482. package/dist/domains/traces/components/trace-messages-skeleton.cjs.js +18 -15
  483. package/dist/domains/traces/components/trace-messages-skeleton.cjs.js.map +1 -1
  484. package/dist/domains/traces/components/trace-messages-skeleton.es.js +18 -15
  485. package/dist/domains/traces/components/trace-messages-skeleton.es.js.map +1 -1
  486. package/dist/domains/traces/components/trace-span-panel.cjs.js +77 -66
  487. package/dist/domains/traces/components/trace-span-panel.cjs.js.map +1 -1
  488. package/dist/domains/traces/components/trace-span-panel.es.js +78 -67
  489. package/dist/domains/traces/components/trace-span-panel.es.js.map +1 -1
  490. package/dist/domains/traces/components/trace-span-tree-skeleton.cjs.js +11 -13
  491. package/dist/domains/traces/components/trace-span-tree-skeleton.cjs.js.map +1 -1
  492. package/dist/domains/traces/components/trace-span-tree-skeleton.es.js +11 -13
  493. package/dist/domains/traces/components/trace-span-tree-skeleton.es.js.map +1 -1
  494. package/dist/domains/traces/components/trace-span-tree.cjs.js +1 -1
  495. package/dist/domains/traces/components/trace-span-tree.es.js +1 -1
  496. package/dist/domains/traces/components/trace-summary-description.cjs.js +2 -2
  497. package/dist/domains/traces/components/trace-summary-description.es.js +2 -2
  498. package/dist/domains/traces/components/trace-thread-item-view.cjs.js +2 -2
  499. package/dist/domains/traces/components/trace-thread-item-view.cjs.js.map +1 -1
  500. package/dist/domains/traces/components/trace-thread-item-view.es.js +2 -2
  501. package/dist/domains/traces/components/trace-thread-item-view.es.js.map +1 -1
  502. package/dist/domains/traces/components/trace-thread-panel.cjs.js +32 -21
  503. package/dist/domains/traces/components/trace-thread-panel.cjs.js.map +1 -1
  504. package/dist/domains/traces/components/trace-thread-panel.es.js +32 -21
  505. package/dist/domains/traces/components/trace-thread-panel.es.js.map +1 -1
  506. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
  507. package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
  508. package/dist/domains/traces/components/traces-error-content.cjs.js +1 -1
  509. package/dist/domains/traces/components/traces-error-content.es.js +1 -1
  510. package/dist/domains/traces/components/traces-list-view.cjs.js +3 -3
  511. package/dist/domains/traces/components/traces-list-view.es.js +3 -3
  512. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +2 -0
  513. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  514. package/dist/domains/traces/components/traces-page-skeleton.es.js +2 -0
  515. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  516. package/dist/domains/traces/hooks/use-branch.cjs.js +0 -3
  517. package/dist/domains/traces/hooks/use-branch.cjs.js.map +1 -1
  518. package/dist/domains/traces/hooks/use-branch.es.js +0 -3
  519. package/dist/domains/traces/hooks/use-branch.es.js.map +1 -1
  520. package/dist/domains/traces/hooks/use-trace-light-spans.cjs.js +0 -3
  521. package/dist/domains/traces/hooks/use-trace-light-spans.cjs.js.map +1 -1
  522. package/dist/domains/traces/hooks/use-trace-light-spans.es.js +0 -3
  523. package/dist/domains/traces/hooks/use-trace-light-spans.es.js.map +1 -1
  524. package/dist/domains/traces/hooks/use-trace-or-branch-spans.cjs.js.map +1 -1
  525. package/dist/domains/traces/hooks/use-trace-or-branch-spans.es.js.map +1 -1
  526. package/dist/domains/traces/hooks/use-trace-query.cjs.js +2 -0
  527. package/dist/domains/traces/hooks/use-trace-query.cjs.js.map +1 -1
  528. package/dist/domains/traces/hooks/use-trace-query.es.js +2 -0
  529. package/dist/domains/traces/hooks/use-trace-query.es.js.map +1 -1
  530. package/dist/domains/traces/hooks/use-trace-search.cjs.js +7 -2
  531. package/dist/domains/traces/hooks/use-trace-search.cjs.js.map +1 -1
  532. package/dist/domains/traces/hooks/use-trace-search.es.js +7 -2
  533. package/dist/domains/traces/hooks/use-trace-search.es.js.map +1 -1
  534. package/dist/domains/traces/hooks/use-trace-spans.cjs.js +1 -5
  535. package/dist/domains/traces/hooks/use-trace-spans.cjs.js.map +1 -1
  536. package/dist/domains/traces/hooks/use-trace-spans.es.js +1 -5
  537. package/dist/domains/traces/hooks/use-trace-spans.es.js.map +1 -1
  538. package/dist/domains/traces/utils/to-searchable-spans.cjs.js +0 -5
  539. package/dist/domains/traces/utils/to-searchable-spans.cjs.js.map +1 -1
  540. package/dist/domains/traces/utils/to-searchable-spans.es.js +1 -5
  541. package/dist/domains/traces/utils/to-searchable-spans.es.js.map +1 -1
  542. package/dist/domains/traces/utils.cjs.js +0 -1
  543. package/dist/domains/traces/utils.cjs.js.map +1 -1
  544. package/dist/domains/traces/utils.es.js +1 -1
  545. package/dist/domains/traces.cjs.js +0 -1
  546. package/dist/domains/traces.cjs.js.map +1 -1
  547. package/dist/domains/traces.es.js +1 -1
  548. package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
  549. package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
  550. package/dist/domains/workflows/components/workflow-entity-header.cjs.js +2 -2
  551. package/dist/domains/workflows/components/workflow-entity-header.es.js +2 -2
  552. package/dist/domains/workflows/components/workflow-step-detail.cjs.js +3 -3
  553. package/dist/domains/workflows/components/workflow-step-detail.es.js +3 -3
  554. package/dist/domains/workflows/components/workflows-list/no-workflows-info.cjs.js +1 -1
  555. package/dist/domains/workflows/components/workflows-list/no-workflows-info.es.js +1 -1
  556. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +3 -3
  557. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +3 -3
  558. package/dist/domains/workflows/runs/workflow-run-details.cjs.js +1 -1
  559. package/dist/domains/workflows/runs/workflow-run-details.es.js +1 -1
  560. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +2 -2
  561. package/dist/domains/workflows/runs/workflow-run-list.es.js +2 -2
  562. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  563. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  564. package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +2 -2
  565. package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +2 -2
  566. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
  567. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
  568. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +2 -2
  569. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +2 -2
  570. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +2 -2
  571. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +2 -2
  572. package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +2 -2
  573. package/dist/domains/workflows/workflow/workflow-body-graph.es.js +2 -2
  574. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  575. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  576. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.cjs.js +1 -1
  577. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.es.js +1 -1
  578. package/dist/domains/workflows/workflow/workflow-debug-step-controls.cjs.js +1 -1
  579. package/dist/domains/workflows/workflow/workflow-debug-step-controls.es.js +1 -1
  580. package/dist/domains/workflows/workflow/workflow-graph-boundary.cjs.js +1 -1
  581. package/dist/domains/workflows/workflow/workflow-graph-boundary.es.js +1 -1
  582. package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +2 -2
  583. package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +2 -2
  584. package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +2 -2
  585. package/dist/domains/workflows/workflow/workflow-graph-node.es.js +2 -2
  586. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +2 -1
  587. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js.map +1 -1
  588. package/dist/domains/workflows/workflow/workflow-input-data.es.js +2 -1
  589. package/dist/domains/workflows/workflow/workflow-input-data.es.js.map +1 -1
  590. package/dist/domains/workflows/workflow/workflow-input-type-toggle.cjs.js +1 -1
  591. package/dist/domains/workflows/workflow/workflow-input-type-toggle.es.js +1 -1
  592. package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +4 -4
  593. package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +4 -4
  594. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +6 -5
  595. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js.map +1 -1
  596. package/dist/domains/workflows/workflow/workflow-run-data.es.js +5 -4
  597. package/dist/domains/workflows/workflow/workflow-run-data.es.js.map +1 -1
  598. package/dist/domains/workflows/workflow/workflow-run-error.cjs.js +1 -1
  599. package/dist/domains/workflows/workflow/workflow-run-error.es.js +1 -1
  600. package/dist/domains/workflows/workflow/workflow-run-header.cjs.js +3 -3
  601. package/dist/domains/workflows/workflow/workflow-run-header.es.js +3 -3
  602. package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
  603. package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
  604. package/dist/domains/workflows/workflow/workflow-steps-status.cjs.js +1 -1
  605. package/dist/domains/workflows/workflow/workflow-steps-status.es.js +1 -1
  606. package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +2 -2
  607. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +2 -2
  608. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +3 -3
  609. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +3 -3
  610. package/dist/domains/workflows/workflow/workflow-timeline-row.cjs.js +1 -1
  611. package/dist/domains/workflows/workflow/workflow-timeline-row.es.js +1 -1
  612. package/dist/domains/workflows/workflow/workflow-timeline.cjs.js +1 -1
  613. package/dist/domains/workflows/workflow/workflow-timeline.es.js +1 -1
  614. package/dist/domains/workflows/workflow/workflow-trigger-header.cjs.js +2 -2
  615. package/dist/domains/workflows/workflow/workflow-trigger-header.es.js +2 -2
  616. package/dist/domains/workflows/workflow/workflow-trigger.cjs.js +1 -1
  617. package/dist/domains/workflows/workflow/workflow-trigger.es.js +1 -1
  618. package/dist/domains/workspace/components/frontmatter.cjs.js +13 -0
  619. package/dist/domains/workspace/components/frontmatter.cjs.js.map +1 -0
  620. package/dist/domains/workspace/components/frontmatter.d.ts +2 -0
  621. package/dist/domains/workspace/components/frontmatter.es.js +9 -0
  622. package/dist/domains/workspace/components/frontmatter.es.js.map +1 -0
  623. package/dist/domains/workspace/components/mount-icon.cjs.js +42 -0
  624. package/dist/domains/workspace/components/mount-icon.cjs.js.map +1 -0
  625. package/dist/domains/workspace/components/mount-icon.d.ts +2 -0
  626. package/dist/domains/workspace/components/mount-icon.es.js +38 -0
  627. package/dist/domains/workspace/components/mount-icon.es.js.map +1 -0
  628. package/dist/domains/workspace/components/use-workspace-context.cjs.js +16 -0
  629. package/dist/domains/workspace/components/use-workspace-context.cjs.js.map +1 -0
  630. package/dist/domains/workspace/components/use-workspace-context.d.ts +2 -0
  631. package/dist/domains/workspace/components/use-workspace-context.es.js +11 -0
  632. package/dist/domains/workspace/components/use-workspace-context.es.js.map +1 -0
  633. package/dist/domains/workspace/components/workspace-active-file.cjs.js +72 -0
  634. package/dist/domains/workspace/components/workspace-active-file.cjs.js.map +1 -0
  635. package/dist/domains/workspace/components/workspace-active-file.d.ts +2 -0
  636. package/dist/domains/workspace/components/workspace-active-file.es.js +67 -0
  637. package/dist/domains/workspace/components/workspace-active-file.es.js.map +1 -0
  638. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +282 -0
  639. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js.map +1 -0
  640. package/dist/domains/workspace/components/workspace-add-skill-dialog.d.ts +2 -0
  641. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +278 -0
  642. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js.map +1 -0
  643. package/dist/domains/workspace/components/workspace-add-skill.cjs.js +48 -0
  644. package/dist/domains/workspace/components/workspace-add-skill.cjs.js.map +1 -0
  645. package/dist/domains/workspace/components/workspace-add-skill.d.ts +2 -0
  646. package/dist/domains/workspace/components/workspace-add-skill.es.js +44 -0
  647. package/dist/domains/workspace/components/workspace-add-skill.es.js.map +1 -0
  648. package/dist/domains/workspace/components/workspace-context.cjs.js +88 -0
  649. package/dist/domains/workspace/components/workspace-context.cjs.js.map +1 -0
  650. package/dist/domains/workspace/components/workspace-context.d.ts +2 -0
  651. package/dist/domains/workspace/components/workspace-context.es.js +84 -0
  652. package/dist/domains/workspace/components/workspace-context.es.js.map +1 -0
  653. package/dist/domains/workspace/components/workspace-create-directory.cjs.js +68 -0
  654. package/dist/domains/workspace/components/workspace-create-directory.cjs.js.map +1 -0
  655. package/dist/domains/workspace/components/workspace-create-directory.d.ts +2 -0
  656. package/dist/domains/workspace/components/workspace-create-directory.es.js +64 -0
  657. package/dist/domains/workspace/components/workspace-create-directory.es.js.map +1 -0
  658. package/dist/domains/workspace/components/workspace-error.cjs.js +26 -0
  659. package/dist/domains/workspace/components/workspace-error.cjs.js.map +1 -0
  660. package/dist/domains/workspace/components/workspace-error.d.ts +2 -0
  661. package/dist/domains/workspace/components/workspace-error.es.js +22 -0
  662. package/dist/domains/workspace/components/workspace-error.es.js.map +1 -0
  663. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +27 -0
  664. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js.map +1 -0
  665. package/dist/domains/workspace/components/workspace-markdown-preview.d.ts +2 -0
  666. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +23 -0
  667. package/dist/domains/workspace/components/workspace-markdown-preview.es.js.map +1 -0
  668. package/dist/domains/workspace/components/workspace-parts.cjs.js +94 -0
  669. package/dist/domains/workspace/components/workspace-parts.cjs.js.map +1 -0
  670. package/dist/domains/workspace/components/workspace-parts.d.ts +2 -0
  671. package/dist/domains/workspace/components/workspace-parts.es.js +84 -0
  672. package/dist/domains/workspace/components/workspace-parts.es.js.map +1 -0
  673. package/dist/domains/workspace/components/workspace-search.cjs.js +117 -0
  674. package/dist/domains/workspace/components/workspace-search.cjs.js.map +1 -0
  675. package/dist/domains/workspace/components/workspace-search.d.ts +2 -0
  676. package/dist/domains/workspace/components/workspace-search.es.js +111 -0
  677. package/dist/domains/workspace/components/workspace-search.es.js.map +1 -0
  678. package/dist/domains/workspace/components/workspace-tree-view.cjs.js +34 -0
  679. package/dist/domains/workspace/components/workspace-tree-view.cjs.js.map +1 -0
  680. package/dist/domains/workspace/components/workspace-tree-view.d.ts +2 -0
  681. package/dist/domains/workspace/components/workspace-tree-view.es.js +30 -0
  682. package/dist/domains/workspace/components/workspace-tree-view.es.js.map +1 -0
  683. package/dist/domains/workspace/components/workspace-tree.cjs.js +245 -0
  684. package/dist/domains/workspace/components/workspace-tree.cjs.js.map +1 -0
  685. package/dist/domains/workspace/components/workspace-tree.d.ts +2 -0
  686. package/dist/domains/workspace/components/workspace-tree.es.js +241 -0
  687. package/dist/domains/workspace/components/workspace-tree.es.js.map +1 -0
  688. package/dist/domains/workspace/components/workspace.cjs.js +25 -0
  689. package/dist/domains/workspace/components/workspace.cjs.js.map +1 -0
  690. package/dist/domains/workspace/components/workspace.d.ts +2 -0
  691. package/dist/domains/workspace/components/workspace.es.js +21 -0
  692. package/dist/domains/workspace/components/workspace.es.js.map +1 -0
  693. package/dist/domains/workspace/file-type.cjs.js +25 -0
  694. package/dist/domains/workspace/file-type.cjs.js.map +1 -0
  695. package/dist/domains/workspace/file-type.d.ts +2 -0
  696. package/dist/domains/workspace/file-type.es.js +17 -0
  697. package/dist/domains/workspace/file-type.es.js.map +1 -0
  698. package/dist/domains/workspace/hooks/use-skills-sh.cjs.js +72 -0
  699. package/dist/domains/workspace/hooks/use-skills-sh.cjs.js.map +1 -0
  700. package/dist/domains/workspace/hooks/use-skills-sh.d.ts +2 -0
  701. package/dist/domains/workspace/hooks/use-skills-sh.es.js +65 -0
  702. package/dist/domains/workspace/hooks/use-skills-sh.es.js.map +1 -0
  703. package/dist/domains/workspace/hooks/use-workspace-directory.cjs.js +21 -0
  704. package/dist/domains/workspace/hooks/use-workspace-directory.cjs.js.map +1 -0
  705. package/dist/domains/workspace/hooks/use-workspace-directory.d.ts +2 -0
  706. package/dist/domains/workspace/hooks/use-workspace-directory.es.js +16 -0
  707. package/dist/domains/workspace/hooks/use-workspace-directory.es.js.map +1 -0
  708. package/dist/domains/workspace/hooks/use-workspace-file-content.cjs.js +22 -0
  709. package/dist/domains/workspace/hooks/use-workspace-file-content.cjs.js.map +1 -0
  710. package/dist/domains/workspace/hooks/use-workspace-file-content.d.ts +2 -0
  711. package/dist/domains/workspace/hooks/use-workspace-file-content.es.js +18 -0
  712. package/dist/domains/workspace/hooks/use-workspace-file-content.es.js.map +1 -0
  713. package/dist/domains/workspace/hooks/use-workspace-search.cjs.js +53 -0
  714. package/dist/domains/workspace/hooks/use-workspace-search.cjs.js.map +1 -0
  715. package/dist/domains/workspace/hooks/use-workspace-search.d.ts +2 -0
  716. package/dist/domains/workspace/hooks/use-workspace-search.es.js +49 -0
  717. package/dist/domains/workspace/hooks/use-workspace-search.es.js.map +1 -0
  718. package/dist/domains/workspace/path.cjs.js +17 -0
  719. package/dist/domains/workspace/path.cjs.js.map +1 -0
  720. package/dist/domains/workspace/path.d.ts +2 -0
  721. package/dist/domains/workspace/path.es.js +10 -0
  722. package/dist/domains/workspace/path.es.js.map +1 -0
  723. package/dist/domains/workspace.cjs.js +24 -0
  724. package/dist/domains/workspace.cjs.js.map +1 -0
  725. package/dist/domains/workspace.d.ts +2 -0
  726. package/dist/domains/workspace.es.js +9 -0
  727. package/dist/domains/workspace.es.js.map +1 -0
  728. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +2 -2
  729. package/dist/ee/signals/components/entity-index-compact-grid.es.js +2 -2
  730. package/dist/ee/signals/components/entity-index-list.cjs.js +4 -2
  731. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  732. package/dist/ee/signals/components/entity-index-list.es.js +4 -2
  733. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  734. package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
  735. package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
  736. package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js +1 -1
  737. package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js +1 -1
  738. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +4 -3
  739. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  740. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +4 -3
  741. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  742. package/dist/ee/signals/examples-pager.cjs.js +1 -1
  743. package/dist/ee/signals/examples-pager.es.js +1 -1
  744. package/dist/ee/signals/flow-card.cjs.js +1 -1
  745. package/dist/ee/signals/flow-card.es.js +1 -1
  746. package/dist/ee/signals/lifeline-row.cjs.js +1 -1
  747. package/dist/ee/signals/lifeline-row.es.js +1 -1
  748. package/dist/ee/signals/noise-detail-panel.cjs.js +1 -1
  749. package/dist/ee/signals/noise-detail-panel.es.js +1 -1
  750. package/dist/ee/signals/sankey-signals.cjs.js +4 -3
  751. package/dist/ee/signals/sankey-signals.cjs.js.map +1 -1
  752. package/dist/ee/signals/sankey-signals.es.js +3 -2
  753. package/dist/ee/signals/sankey-signals.es.js.map +1 -1
  754. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +3 -3
  755. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +3 -3
  756. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +3 -3
  757. package/dist/ee/signals/settings/trace-signal-settings.es.js +3 -3
  758. package/dist/ee/signals/signal-delta-column.cjs.js +1 -1
  759. package/dist/ee/signals/signal-delta-column.es.js +1 -1
  760. package/dist/ee/signals/signal-lifelines.cjs.js +1 -1
  761. package/dist/ee/signals/signal-lifelines.es.js +1 -1
  762. package/dist/ee/signals/signals-error-state.cjs.js +1 -1
  763. package/dist/ee/signals/signals-error-state.es.js +1 -1
  764. package/dist/ee/signals/snapshot-timeline.cjs.js +1 -1
  765. package/dist/ee/signals/snapshot-timeline.es.js +1 -1
  766. package/dist/ee/signals/theme-compare.cjs.js +1 -1
  767. package/dist/ee/signals/theme-compare.es.js +1 -1
  768. package/dist/ee/signals/theme-detail-panel.cjs.js +1 -1
  769. package/dist/ee/signals/theme-detail-panel.es.js +1 -1
  770. package/dist/ee/signals/theme-filter-banner.cjs.js +1 -1
  771. package/dist/ee/signals/theme-filter-banner.es.js +1 -1
  772. package/dist/ee/signals/theme-lifelines.cjs.js +1 -1
  773. package/dist/ee/signals/theme-lifelines.es.js +1 -1
  774. package/dist/ee/signals/trace-insight-view.cjs.js +1 -1
  775. package/dist/ee/signals/trace-insight-view.es.js +1 -1
  776. package/dist/ee/signals/trace-intelligence-explainer.cjs.js +1 -1
  777. package/dist/ee/signals/trace-intelligence-explainer.es.js +1 -1
  778. package/dist/ee/signals/view-mode-tab.cjs.js +2 -2
  779. package/dist/ee/signals/view-mode-tab.es.js +2 -2
  780. package/dist/ee/topics/components/topic-trace-details-panel.cjs.js +2 -1
  781. package/dist/ee/topics/components/topic-trace-details-panel.cjs.js.map +1 -1
  782. package/dist/ee/topics/components/topic-trace-details-panel.es.js +2 -1
  783. package/dist/ee/topics/components/topic-trace-details-panel.es.js.map +1 -1
  784. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +2 -2
  785. package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
  786. package/dist/{entity-header-DEjkHoqj.cjs → entity-header-By57lpH8.cjs} +2 -2
  787. package/dist/{entity-header-DEjkHoqj.cjs.map → entity-header-By57lpH8.cjs.map} +1 -1
  788. package/dist/{entity-header-9qzr-3xQ.js → entity-header-DMjzE4Za.js} +2 -2
  789. package/dist/{entity-header-9qzr-3xQ.js.map → entity-header-DMjzE4Za.js.map} +1 -1
  790. package/dist/{field-BtvEQ68O.js → field-BiMIiq2Y.js} +3 -3
  791. package/dist/field-BiMIiq2Y.js.map +1 -0
  792. package/dist/{field-ip9xiOVa.cjs → field-BkeKcz_6.cjs} +3 -3
  793. package/dist/field-BkeKcz_6.cjs.map +1 -0
  794. package/dist/{field-error-id-4DYu4KZ2.cjs → field-error-id-4xiCVBJ_.cjs} +5 -5
  795. package/dist/field-error-id-4xiCVBJ_.cjs.map +1 -0
  796. package/dist/{field-error-id-BSQLcfHo.js → field-error-id-CSvLKtJE.js} +5 -5
  797. package/dist/field-error-id-CSvLKtJE.js.map +1 -0
  798. package/dist/{filter-bar-chip-Dmboyu1t.js → filter-bar-chip-CRejLco-.js} +2 -2
  799. package/dist/{filter-bar-chip-Dmboyu1t.js.map → filter-bar-chip-CRejLco-.js.map} +1 -1
  800. package/dist/{filter-bar-chip-BsWm7SQr.cjs → filter-bar-chip-Cr7kUN9G.cjs} +2 -2
  801. package/dist/{filter-bar-chip-BsWm7SQr.cjs.map → filter-bar-chip-Cr7kUN9G.cjs.map} +1 -1
  802. package/dist/hooks/use-fluid-hover.cjs.js +11 -0
  803. package/dist/hooks/use-fluid-hover.cjs.js.map +1 -1
  804. package/dist/hooks/use-fluid-hover.es.js +11 -0
  805. package/dist/hooks/use-fluid-hover.es.js.map +1 -1
  806. package/dist/{horizontal-bars-BSRESJsp.js → horizontal-bars-BL-GHeFh.js} +2 -2
  807. package/dist/{horizontal-bars-BSRESJsp.js.map → horizontal-bars-BL-GHeFh.js.map} +1 -1
  808. package/dist/{horizontal-bars-DRD7JkHL.cjs → horizontal-bars-D-rFCRbH.cjs} +2 -2
  809. package/dist/{horizontal-bars-DRD7JkHL.cjs.map → horizontal-bars-D-rFCRbH.cjs.map} +1 -1
  810. package/dist/icons/FileIcon.cjs.js +18 -0
  811. package/dist/icons/FileIcon.cjs.js.map +1 -0
  812. package/dist/icons/FileIcon.d.ts +2 -0
  813. package/dist/icons/FileIcon.es.js +14 -0
  814. package/dist/icons/FileIcon.es.js.map +1 -0
  815. package/dist/icons/SearchIcon.cjs.js +18 -0
  816. package/dist/icons/SearchIcon.cjs.js.map +1 -0
  817. package/dist/icons/SearchIcon.d.ts +2 -0
  818. package/dist/icons/SearchIcon.es.js +14 -0
  819. package/dist/icons/SearchIcon.es.js.map +1 -0
  820. package/dist/icons/TrashIcon.cjs.js +18 -0
  821. package/dist/icons/TrashIcon.cjs.js.map +1 -0
  822. package/dist/icons/TrashIcon.d.ts +2 -0
  823. package/dist/icons/TrashIcon.es.js +14 -0
  824. package/dist/icons/TrashIcon.es.js.map +1 -0
  825. package/dist/{input-group-wzirc-1k.js → input-group-D1XvzgI2.js} +10 -7
  826. package/dist/input-group-D1XvzgI2.js.map +1 -0
  827. package/dist/{input-group-BgCXLSRV.cjs → input-group-DBRe9V5t.cjs} +11 -6
  828. package/dist/input-group-DBRe9V5t.cjs.map +1 -0
  829. package/dist/layout/tabbed-container.cjs.js +11 -9
  830. package/dist/layout/tabbed-container.cjs.js.map +1 -1
  831. package/dist/layout/tabbed-container.es.js +9 -7
  832. package/dist/layout/tabbed-container.es.js.map +1 -1
  833. package/dist/lib/form/components/array-element-wrapper.cjs.js +1 -1
  834. package/dist/lib/form/components/array-element-wrapper.es.js +1 -1
  835. package/dist/lib/form/components/array-wrapper.cjs.js +1 -1
  836. package/dist/lib/form/components/array-wrapper.es.js +1 -1
  837. package/dist/lib/form/components/boolean-field.cjs.js +1 -1
  838. package/dist/lib/form/components/boolean-field.es.js +1 -1
  839. package/dist/lib/form/components/error-message.cjs.js +1 -1
  840. package/dist/lib/form/components/error-message.es.js +1 -1
  841. package/dist/lib/form/components/field-wrapper.cjs.js +1 -1
  842. package/dist/lib/form/components/field-wrapper.es.js +1 -1
  843. package/dist/lib/form/components/object-wrapper.cjs.js +1 -1
  844. package/dist/lib/form/components/object-wrapper.es.js +1 -1
  845. package/dist/lib/form/components/select-field.cjs.js +1 -1
  846. package/dist/lib/form/components/select-field.es.js +1 -1
  847. package/dist/lib/form/components/union-field.cjs.js +1 -1
  848. package/dist/lib/form/components/union-field.es.js +1 -1
  849. package/dist/{list-search-CTGQJCh1.cjs → list-search-CCHN2OMB.cjs} +2 -2
  850. package/dist/{list-search-CTGQJCh1.cjs.map → list-search-CCHN2OMB.cjs.map} +1 -1
  851. package/dist/{list-search-CmOCmTwL.js → list-search-DcACBmNB.js} +2 -2
  852. package/dist/{list-search-CmOCmTwL.js.map → list-search-DcACBmNB.js.map} +1 -1
  853. package/dist/{logs-data-list-B9CAqAHD.cjs → logs-data-list-BITdSK12.cjs} +4 -4
  854. package/dist/{logs-data-list-B9CAqAHD.cjs.map → logs-data-list-BITdSK12.cjs.map} +1 -1
  855. package/dist/{logs-data-list-DfzdzgXB.js → logs-data-list-PlH4_hgq.js} +4 -4
  856. package/dist/{logs-data-list-DfzdzgXB.js.map → logs-data-list-PlH4_hgq.js.map} +1 -1
  857. package/dist/{main-sidebar-link-active-buZAhlHo.js → main-sidebar-B0ivY7lW.js} +118 -6
  858. package/dist/main-sidebar-B0ivY7lW.js.map +1 -0
  859. package/dist/{main-sidebar-link-active-D8VSuJKx.cjs → main-sidebar-BWKVSRoQ.cjs} +117 -4
  860. package/dist/main-sidebar-BWKVSRoQ.cjs.map +1 -0
  861. package/dist/{markdown-renderer-DPwN7Vtm.cjs → markdown-renderer-4iyMU2Cm.cjs} +2 -2
  862. package/dist/{markdown-renderer-DPwN7Vtm.cjs.map → markdown-renderer-4iyMU2Cm.cjs.map} +1 -1
  863. package/dist/{markdown-renderer-zvB6a8uj.js → markdown-renderer-B3Pf1uW9.js} +2 -2
  864. package/dist/{markdown-renderer-zvB6a8uj.js.map → markdown-renderer-B3Pf1uW9.js.map} +1 -1
  865. package/dist/{message-C1c5oZE7.cjs → message-DGDmsmOT.cjs} +2 -2
  866. package/dist/{message-C1c5oZE7.cjs.map → message-DGDmsmOT.cjs.map} +1 -1
  867. package/dist/{message-C7hocqft.js → message-DoxVrgBX.js} +2 -2
  868. package/dist/{message-C7hocqft.js.map → message-DoxVrgBX.js.map} +1 -1
  869. package/dist/{message-scroller-E05PLPmT.cjs → message-scroller-D-_KN9Fv.cjs} +3 -1
  870. package/dist/message-scroller-D-_KN9Fv.cjs.map +1 -0
  871. package/dist/{message-scroller-CiFr8MwT.js → message-scroller-WWaQ-XU_.js} +3 -1
  872. package/dist/message-scroller-WWaQ-XU_.js.map +1 -0
  873. package/dist/{metrics-card-C1rTkbcn.js → metrics-card-DFEWxFkJ.js} +3 -3
  874. package/dist/{metrics-card-C1rTkbcn.js.map → metrics-card-DFEWxFkJ.js.map} +1 -1
  875. package/dist/{metrics-card-D7J9JDgn.cjs → metrics-card-xX9SHUpB.cjs} +3 -3
  876. package/dist/{metrics-card-D7J9JDgn.cjs.map → metrics-card-xX9SHUpB.cjs.map} +1 -1
  877. package/dist/{metrics-kpi-card-1hbihR2T.cjs → metrics-kpi-card-9L0j_oGY.cjs} +5 -14
  878. package/dist/metrics-kpi-card-9L0j_oGY.cjs.map +1 -0
  879. package/dist/{metrics-kpi-card-CiB88L41.js → metrics-kpi-card-DxcLqbDU.js} +5 -14
  880. package/dist/metrics-kpi-card-DxcLqbDU.js.map +1 -0
  881. package/dist/{metrics-line-chart-C3UMBQ38.js → metrics-line-chart-C9_EMuHK.js} +2 -2
  882. package/dist/{metrics-line-chart-C3UMBQ38.js.map → metrics-line-chart-C9_EMuHK.js.map} +1 -1
  883. package/dist/{metrics-line-chart-CjJxBbM-.cjs → metrics-line-chart-R-T_jyeP.cjs} +2 -2
  884. package/dist/{metrics-line-chart-CjJxBbM-.cjs.map → metrics-line-chart-R-T_jyeP.cjs.map} +1 -1
  885. package/dist/{metrics-line-chart-tooltip-DiXCgpik.cjs → metrics-line-chart-tooltip-BoG8nbkO.cjs} +2 -2
  886. package/dist/{metrics-line-chart-tooltip-DiXCgpik.cjs.map → metrics-line-chart-tooltip-BoG8nbkO.cjs.map} +1 -1
  887. package/dist/{metrics-line-chart-tooltip-mZXPH1yH.js → metrics-line-chart-tooltip-C3WAk3DN.js} +2 -2
  888. package/dist/{metrics-line-chart-tooltip-mZXPH1yH.js.map → metrics-line-chart-tooltip-C3WAk3DN.js.map} +1 -1
  889. package/dist/new/layout/page-header.cjs.js +1 -1
  890. package/dist/new/layout/page-header.es.js +1 -1
  891. package/dist/new/settings.cjs.js +2 -2
  892. package/dist/new/settings.es.js +2 -2
  893. package/dist/new/sidebar.cjs.js +35 -35
  894. package/dist/new/sidebar.cjs.js.map +1 -1
  895. package/dist/new/sidebar.es.js +3 -3
  896. package/dist/{notification-activity-CFR_b8eA.js → notification-activity-BDoleJAA.js} +4 -4
  897. package/dist/{notification-activity-CFR_b8eA.js.map → notification-activity-BDoleJAA.js.map} +1 -1
  898. package/dist/{notification-activity-Dk50wcE4.cjs → notification-activity-C_vZiswj.cjs} +4 -4
  899. package/dist/{notification-activity-Dk50wcE4.cjs.map → notification-activity-C_vZiswj.cjs.map} +1 -1
  900. package/dist/{page-header-DIS8V2TK.js → page-header-D5a7qrVc.js} +2 -2
  901. package/dist/{page-header-DIS8V2TK.js.map → page-header-D5a7qrVc.js.map} +1 -1
  902. package/dist/{page-header-C1WiOrTE.cjs → page-header-Dc2KSbnw.cjs} +2 -2
  903. package/dist/{page-header-C1WiOrTE.cjs.map → page-header-Dc2KSbnw.cjs.map} +1 -1
  904. package/dist/{plan-D8rM4i4S.cjs → plan-D49plJdQ.cjs} +7 -6
  905. package/dist/{plan-D8rM4i4S.cjs.map → plan-D49plJdQ.cjs.map} +1 -1
  906. package/dist/{plan-BtOryfz5.js → plan-DvkySMRk.js} +6 -5
  907. package/dist/{plan-BtOryfz5.js.map → plan-DvkySMRk.js.map} +1 -1
  908. package/dist/primitives/form-element.cjs.js +1 -1
  909. package/dist/primitives/form-element.cjs.js.map +1 -1
  910. package/dist/primitives/form-element.es.js +1 -1
  911. package/dist/primitives/form-element.es.js.map +1 -1
  912. package/dist/{reasoning-activity-DaXMgyr3.cjs → reasoning-activity-COiiln9U.cjs} +3 -3
  913. package/dist/{reasoning-activity-DaXMgyr3.cjs.map → reasoning-activity-COiiln9U.cjs.map} +1 -1
  914. package/dist/{reasoning-activity-6VkIbDT4.js → reasoning-activity-r7B4_j4d.js} +3 -3
  915. package/dist/{reasoning-activity-6VkIbDT4.js.map → reasoning-activity-r7B4_j4d.js.map} +1 -1
  916. package/dist/{relative-timestamp-BlmN8Vjn.cjs → relative-timestamp-Nnwtw7Rp.cjs} +2 -2
  917. package/dist/{relative-timestamp-BlmN8Vjn.cjs.map → relative-timestamp-Nnwtw7Rp.cjs.map} +1 -1
  918. package/dist/{relative-timestamp-Cnp4VeLp.js → relative-timestamp-Rn8mAobA.js} +2 -2
  919. package/dist/{relative-timestamp-Cnp4VeLp.js.map → relative-timestamp-Rn8mAobA.js.map} +1 -1
  920. package/dist/resize/panel-group.cjs.js +14 -2
  921. package/dist/resize/panel-group.cjs.js.map +1 -1
  922. package/dist/resize/panel-group.es.js +14 -2
  923. package/dist/resize/panel-group.es.js.map +1 -1
  924. package/dist/{search-input-BKXiYeed.js → search-input-63Y1_wgA.js} +3 -3
  925. package/dist/{search-input-BKXiYeed.js.map → search-input-63Y1_wgA.js.map} +1 -1
  926. package/dist/{search-input-T0orZ7Jf.cjs → search-input-CBhT3N4z.cjs} +3 -3
  927. package/dist/{search-input-T0orZ7Jf.cjs.map → search-input-CBhT3N4z.cjs.map} +1 -1
  928. package/dist/{section-Byml9qxH.cjs → section-C5r-Mtxk.cjs} +3 -3
  929. package/dist/{section-Byml9qxH.cjs.map → section-C5r-Mtxk.cjs.map} +1 -1
  930. package/dist/{section-DTooysg2.js → section-DYrbH35K.js} +3 -3
  931. package/dist/{section-DTooysg2.js.map → section-DYrbH35K.js.map} +1 -1
  932. package/dist/{select--ArpXYDc.js → select-CWxcmE3F.js} +2 -2
  933. package/dist/select-CWxcmE3F.js.map +1 -0
  934. package/dist/{select-DJQYAVcm.cjs → select-KV77JIvp.cjs} +2 -2
  935. package/dist/select-KV77JIvp.cjs.map +1 -0
  936. package/dist/{settings-row-B0jGFpVw.js → settings-row-Dc6ECXjj.js} +2 -2
  937. package/dist/{settings-row-B0jGFpVw.js.map → settings-row-Dc6ECXjj.js.map} +1 -1
  938. package/dist/{settings-row-Dt4WnnRf.cjs → settings-row-UPZXTcx1.cjs} +2 -2
  939. package/dist/{settings-row-Dt4WnnRf.cjs.map → settings-row-UPZXTcx1.cjs.map} +1 -1
  940. package/dist/{side-dialog-lQUx6B_M.cjs → side-dialog-CFTgnDXu.cjs} +2 -2
  941. package/dist/{side-dialog-lQUx6B_M.cjs.map → side-dialog-CFTgnDXu.cjs.map} +1 -1
  942. package/dist/{side-dialog-DZJc85m3.js → side-dialog-yvAvCday.js} +2 -2
  943. package/dist/{side-dialog-DZJc85m3.js.map → side-dialog-yvAvCday.js.map} +1 -1
  944. package/dist/{signal-activity-byCTRP86.cjs → signal-activity-BI-DRdjw.cjs} +4 -4
  945. package/dist/{signal-activity-byCTRP86.cjs.map → signal-activity-BI-DRdjw.cjs.map} +1 -1
  946. package/dist/{signal-activity-DW2ExjIp.js → signal-activity-_ChAbNsW.js} +4 -4
  947. package/dist/{signal-activity-DW2ExjIp.js.map → signal-activity-_ChAbNsW.js.map} +1 -1
  948. package/dist/{span-payload-primitives-CGamdu2t.js → span-payload-primitives-DceLKTQK.js} +3 -3
  949. package/dist/{span-payload-primitives-CGamdu2t.js.map → span-payload-primitives-DceLKTQK.js.map} +1 -1
  950. package/dist/{span-payload-primitives-SkL3U9hR.cjs → span-payload-primitives-DqeZJkw3.cjs} +3 -3
  951. package/dist/{span-payload-primitives-SkL3U9hR.cjs.map → span-payload-primitives-DqeZJkw3.cjs.map} +1 -1
  952. package/dist/src/domains/traces/components/span-data-panel-view.d.ts +3 -1
  953. package/dist/src/domains/traces/components/thread-trace/index.d.ts +23 -20
  954. package/dist/src/domains/traces/components/thread-trace/thread-trace-details.d.ts +1 -1
  955. package/dist/src/domains/traces/components/thread-trace/thread-trace-messages.d.ts +5 -15
  956. package/dist/src/domains/traces/components/thread-trace/thread-trace-root.d.ts +2 -2
  957. package/dist/src/domains/traces/components/thread-trace/thread-trace-row.d.ts +17 -2
  958. package/dist/src/domains/traces/components/thread-trace/thread-trace-span-panel.d.ts +3 -3
  959. package/dist/src/domains/traces/components/thread-trace/thread-trace-spans.d.ts +3 -4
  960. package/dist/src/domains/traces/components/thread-view-skeleton.d.ts +10 -4
  961. package/dist/src/domains/traces/components/trace-data-panel-view.d.ts +10 -3
  962. package/dist/src/domains/traces/components/trace-data-panel-view.stories.d.ts +7 -5
  963. package/dist/src/domains/traces/components/trace-messages-panel.d.ts +2 -10
  964. package/dist/src/domains/traces/components/trace-messages-skeleton.d.ts +9 -6
  965. package/dist/src/domains/traces/components/trace-span-panel.d.ts +1 -1
  966. package/dist/src/domains/traces/components/trace-span-tree-skeleton.d.ts +4 -6
  967. package/dist/src/domains/traces/components/trace-thread-panel.d.ts +7 -5
  968. package/dist/src/domains/traces/hooks/use-branch.d.ts +2 -2
  969. package/dist/src/domains/traces/hooks/use-trace-light-spans.d.ts +2 -2
  970. package/dist/src/domains/traces/hooks/use-trace-or-branch-spans.d.ts +2 -2
  971. package/dist/src/domains/traces/hooks/use-trace-query.d.ts +2 -0
  972. package/dist/src/domains/traces/hooks/use-trace-search.d.ts +11 -8
  973. package/dist/src/domains/traces/hooks/use-trace-spans.d.ts +1 -7
  974. package/dist/src/domains/traces/hooks/use-traces-list-source.d.ts +1 -0
  975. package/dist/src/domains/traces/utils/index.d.ts +1 -1
  976. package/dist/src/domains/traces/utils/to-searchable-spans.d.ts +2 -26
  977. package/dist/src/domains/workspace/components/frontmatter.d.ts +4 -0
  978. package/dist/src/domains/workspace/components/mount-icon.d.ts +6 -0
  979. package/dist/src/domains/workspace/components/use-workspace-context.d.ts +32 -0
  980. package/dist/src/domains/workspace/components/workspace-active-file.d.ts +13 -0
  981. package/dist/src/domains/workspace/components/workspace-add-skill-dialog.d.ts +39 -0
  982. package/dist/src/domains/workspace/components/workspace-add-skill.d.ts +10 -0
  983. package/dist/src/domains/workspace/components/workspace-context.d.ts +28 -0
  984. package/dist/src/domains/workspace/components/workspace-create-directory.d.ts +4 -0
  985. package/dist/src/domains/workspace/components/workspace-error.d.ts +5 -0
  986. package/dist/src/domains/workspace/components/workspace-markdown-preview.d.ts +4 -0
  987. package/dist/src/domains/workspace/components/workspace-parts.d.ts +25 -0
  988. package/dist/src/domains/workspace/components/workspace-search.d.ts +5 -0
  989. package/dist/src/domains/workspace/components/workspace-tree-view.d.ts +32 -0
  990. package/dist/src/domains/workspace/components/workspace-tree.d.ts +1 -0
  991. package/dist/src/domains/workspace/components/workspace.d.ts +18 -0
  992. package/dist/src/domains/workspace/file-type.d.ts +6 -0
  993. package/dist/src/domains/workspace/hooks/use-skills-sh.d.ts +51 -0
  994. package/dist/src/domains/workspace/hooks/use-workspace-directory.d.ts +17 -0
  995. package/dist/src/domains/workspace/hooks/use-workspace-file-content.d.ts +8 -0
  996. package/dist/src/domains/workspace/hooks/use-workspace-search.d.ts +11 -0
  997. package/dist/src/domains/workspace/index.d.ts +14 -0
  998. package/dist/src/domains/workspace/path.d.ts +6 -0
  999. package/dist/src/ds/components/Button/button.stories.d.ts +1 -0
  1000. package/dist/src/ds/components/ChatShell/chat-shell.d.ts +13 -8
  1001. package/dist/src/ds/components/Code/code.d.ts +1 -1
  1002. package/dist/src/ds/components/CollapsibleBox/collapsible-box.d.ts +5 -2
  1003. package/dist/src/ds/components/CollapsibleBox/collapsible-box.stories.d.ts +1 -0
  1004. package/dist/src/ds/components/Combobox/combobox-styles.d.ts +1 -1
  1005. package/dist/src/ds/components/Command/command.stories.d.ts +1 -0
  1006. package/dist/src/ds/components/InputGroup/input-group.d.ts +2 -0
  1007. package/dist/src/ds/components/InputGroup/input-group.stories.d.ts +0 -1
  1008. package/dist/src/ds/components/InputNumber/index.d.ts +1 -0
  1009. package/dist/src/ds/components/InputNumber/input-number.d.ts +26 -0
  1010. package/dist/src/ds/components/InputNumber/input-number.stories.d.ts +11 -0
  1011. package/dist/src/ds/components/Tabs/tabs-context.d.ts +0 -1
  1012. package/dist/src/ds/components/Tabs/tabs-list.d.ts +0 -7
  1013. package/dist/src/ds/components/Tabs/tabs-root.d.ts +1 -1
  1014. package/dist/src/ds/components/Tabs/tabs-tab.d.ts +3 -1
  1015. package/dist/src/ds/components/Tabs/tabs.stories.d.ts +0 -1
  1016. package/dist/src/ds/components/ThinkingLevel/index.d.ts +4 -0
  1017. package/dist/src/ds/components/ThinkingLevel/thinking-level-picker.d.ts +17 -0
  1018. package/dist/src/ds/components/ThinkingLevel/thinking-level-ramp.d.ts +9 -0
  1019. package/dist/src/ds/components/ThinkingLevel/thinking-level-slider.d.ts +13 -0
  1020. package/dist/src/ds/components/ThinkingLevel/thinking-level.stories.d.ts +14 -0
  1021. package/dist/src/ds/components/ThinkingLevel/use-thinking-level-stop.d.ts +29 -0
  1022. package/dist/src/ds/components/ai/transcript-divider/stories/transcript-divider.stories.d.ts +3 -0
  1023. package/dist/src/ds/components/ai/transcript-divider/transcript-divider.d.ts +6 -1
  1024. package/dist/src/ds/icons/FileIcon.d.ts +2 -0
  1025. package/dist/src/ds/icons/SearchIcon.d.ts +2 -0
  1026. package/dist/src/ds/icons/TrashIcon.d.ts +2 -0
  1027. package/dist/src/ds/icons/index.d.ts +3 -0
  1028. package/dist/src/ds/layout/tabbed-container/tabbed-container-root.d.ts +2 -1
  1029. package/dist/src/ds/tokens/fonts.d.ts +1 -1
  1030. package/dist/src/lib/resize/panel-group.d.ts +3 -1
  1031. package/dist/style.css +300 -127
  1032. package/dist/{tabs-content-DnscxcLI.cjs → tabs-content-DfH1hhpU.cjs} +3 -3
  1033. package/dist/{tabs-content-DnscxcLI.cjs.map → tabs-content-DfH1hhpU.cjs.map} +1 -1
  1034. package/dist/{tabs-content-CwbkTutf.js → tabs-content-OWF8un_n.js} +2 -2
  1035. package/dist/{tabs-content-CwbkTutf.js.map → tabs-content-OWF8un_n.js.map} +1 -1
  1036. package/dist/tabs-context-Cbuw7i0u.js +7 -0
  1037. package/dist/tabs-context-Cbuw7i0u.js.map +1 -0
  1038. package/dist/tabs-context-pnspPkI-.cjs +10 -0
  1039. package/dist/tabs-context-pnspPkI-.cjs.map +1 -0
  1040. package/dist/{tabs-root-C-ePF1y9.cjs → tabs-list-Tqj36HIL.cjs} +10 -43
  1041. package/dist/tabs-list-Tqj36HIL.cjs.map +1 -0
  1042. package/dist/{tabs-root-lrZZ3KwH.js → tabs-list-tLx5fgP0.js} +12 -44
  1043. package/dist/tabs-list-tLx5fgP0.js.map +1 -0
  1044. package/dist/tabs-root-BbzhUZl4.js +40 -0
  1045. package/dist/tabs-root-BbzhUZl4.js.map +1 -0
  1046. package/dist/tabs-root-Hkt7A6oq.cjs +42 -0
  1047. package/dist/tabs-root-Hkt7A6oq.cjs.map +1 -0
  1048. package/dist/tabs-root.css +0 -70
  1049. package/dist/{tabs-tab-BmIBFifi.cjs → tabs-tab-C-C2vX-D.cjs} +10 -7
  1050. package/dist/tabs-tab-C-C2vX-D.cjs.map +1 -0
  1051. package/dist/{tabs-tab-DoPSW-1s.js → tabs-tab-ClLIOGiC.js} +11 -6
  1052. package/dist/tabs-tab-ClLIOGiC.js.map +1 -0
  1053. package/dist/{text-and-icon-CuBm-Wjm.js → text-and-icon-Bo6NLLBl.js} +2 -2
  1054. package/dist/{text-and-icon-CuBm-Wjm.js.map → text-and-icon-Bo6NLLBl.js.map} +1 -1
  1055. package/dist/{text-and-icon-4eVhfmbb.cjs → text-and-icon-CvakH4YL.cjs} +2 -2
  1056. package/dist/{text-and-icon-4eVhfmbb.cjs.map → text-and-icon-CvakH4YL.cjs.map} +1 -1
  1057. package/dist/{thread-list-BTpezI4f.js → thread-list-D2zSEQWK.js} +2 -2
  1058. package/dist/{thread-list-BTpezI4f.js.map → thread-list-D2zSEQWK.js.map} +1 -1
  1059. package/dist/{thread-list-Drcptd4x.cjs → thread-list-DKBwiGfX.cjs} +2 -2
  1060. package/dist/{thread-list-Drcptd4x.cjs.map → thread-list-DKBwiGfX.cjs.map} +1 -1
  1061. package/dist/{time-picker-KE48KlpH.cjs → time-picker-Uz05Y0qU.cjs} +2 -2
  1062. package/dist/{time-picker-KE48KlpH.cjs.map → time-picker-Uz05Y0qU.cjs.map} +1 -1
  1063. package/dist/{time-picker-DRSAkFuj.js → time-picker-eQkyOP4X.js} +2 -2
  1064. package/dist/{time-picker-DRSAkFuj.js.map → time-picker-eQkyOP4X.js.map} +1 -1
  1065. package/dist/tokens.cjs.js +3 -0
  1066. package/dist/tokens.cjs.js.map +1 -1
  1067. package/dist/tokens.es.js +3 -0
  1068. package/dist/tokens.es.js.map +1 -1
  1069. package/dist/{tool-call-arguments-CtUKj7IB.js → tool-call-arguments-DQv3oaEC.js} +3 -3
  1070. package/dist/{tool-call-arguments-CtUKj7IB.js.map → tool-call-arguments-DQv3oaEC.js.map} +1 -1
  1071. package/dist/{tool-call-arguments-BemKsB9v.cjs → tool-call-arguments-DdO3E60i.cjs} +3 -3
  1072. package/dist/{tool-call-arguments-BemKsB9v.cjs.map → tool-call-arguments-DdO3E60i.cjs.map} +1 -1
  1073. package/dist/{tool-call-group-D_ioE9hT.cjs → tool-call-group-CALHT0zr.cjs} +3 -3
  1074. package/dist/{tool-call-group-D_ioE9hT.cjs.map → tool-call-group-CALHT0zr.cjs.map} +1 -1
  1075. package/dist/{tool-call-group-ZuYxpyDs.js → tool-call-group-UoMplOy2.js} +3 -3
  1076. package/dist/{tool-call-group-ZuYxpyDs.js.map → tool-call-group-UoMplOy2.js.map} +1 -1
  1077. package/dist/{traces-data-list-Dd8vMPQK.cjs → traces-data-list-D-wz-Je3.cjs} +5 -5
  1078. package/dist/{traces-data-list-Dd8vMPQK.cjs.map → traces-data-list-D-wz-Je3.cjs.map} +1 -1
  1079. package/dist/{traces-data-list-Fvl8mlih.js → traces-data-list-DmCgejAx.js} +5 -5
  1080. package/dist/{traces-data-list-Fvl8mlih.js.map → traces-data-list-DmCgejAx.js.map} +1 -1
  1081. package/dist/transcript-divider-273Bsdjs.cjs +30 -0
  1082. package/dist/transcript-divider-273Bsdjs.cjs.map +1 -0
  1083. package/dist/transcript-divider-CPIo8NUj.js +28 -0
  1084. package/dist/transcript-divider-CPIo8NUj.js.map +1 -0
  1085. package/dist/tree-DOVwqiSm.cjs +493 -0
  1086. package/dist/tree-DOVwqiSm.cjs.map +1 -0
  1087. package/dist/tree-DixCN7B0.js +472 -0
  1088. package/dist/tree-DixCN7B0.js.map +1 -0
  1089. package/dist/use-collapsible-box-B0t2_SvP.js +20 -0
  1090. package/dist/use-collapsible-box-B0t2_SvP.js.map +1 -0
  1091. package/dist/use-collapsible-box-BI80L4h_.cjs +23 -0
  1092. package/dist/use-collapsible-box-BI80L4h_.cjs.map +1 -0
  1093. package/dist/{use-workflow-graph-runtime-JQwLwNBD.js → use-workflow-graph-runtime-BF_NZEkj.js} +4 -4
  1094. package/dist/{use-workflow-graph-runtime-JQwLwNBD.js.map → use-workflow-graph-runtime-BF_NZEkj.js.map} +1 -1
  1095. package/dist/{use-workflow-graph-runtime-BNAtEa06.cjs → use-workflow-graph-runtime-r_OOpvSo.cjs} +4 -4
  1096. package/dist/{use-workflow-graph-runtime-BNAtEa06.cjs.map → use-workflow-graph-runtime-r_OOpvSo.cjs.map} +1 -1
  1097. package/dist/{workflow-condition-card-3J-As62x.js → workflow-condition-card-BCSYogql.js} +4 -4
  1098. package/dist/{workflow-condition-card-3J-As62x.js.map → workflow-condition-card-BCSYogql.js.map} +1 -1
  1099. package/dist/{workflow-condition-card-BjEAp0t6.cjs → workflow-condition-card-Dlo2PaKV.cjs} +4 -4
  1100. package/dist/{workflow-condition-card-BjEAp0t6.cjs.map → workflow-condition-card-Dlo2PaKV.cjs.map} +1 -1
  1101. package/dist/{workflow-data-edge-view-C4nbA2Fa.js → workflow-data-edge-view-JmkSlDp1.js} +2 -2
  1102. package/dist/{workflow-data-edge-view-C4nbA2Fa.js.map → workflow-data-edge-view-JmkSlDp1.js.map} +1 -1
  1103. package/dist/{workflow-data-edge-view-aHAZkZOH.cjs → workflow-data-edge-view-aNTgHQUk.cjs} +2 -2
  1104. package/dist/{workflow-data-edge-view-aHAZkZOH.cjs.map → workflow-data-edge-view-aNTgHQUk.cjs.map} +1 -1
  1105. package/dist/{workflow-debug-controls-tty6gLX2.js → workflow-debug-controls-CQc8ljAI.js} +3 -3
  1106. package/dist/{workflow-debug-controls-tty6gLX2.js.map → workflow-debug-controls-CQc8ljAI.js.map} +1 -1
  1107. package/dist/{workflow-debug-controls-VbxiluNZ.cjs → workflow-debug-controls-WXT05idC.cjs} +3 -3
  1108. package/dist/{workflow-debug-controls-VbxiluNZ.cjs.map → workflow-debug-controls-WXT05idC.cjs.map} +1 -1
  1109. package/dist/{workflow-edge-data-button-2aIkzgev.js → workflow-edge-data-button-B7bM7UqW.js} +2 -2
  1110. package/dist/{workflow-edge-data-button-2aIkzgev.js.map → workflow-edge-data-button-B7bM7UqW.js.map} +1 -1
  1111. package/dist/{workflow-edge-data-button-BFNO-TRL.cjs → workflow-edge-data-button-CHoNrfef.cjs} +2 -2
  1112. package/dist/{workflow-edge-data-button-BFNO-TRL.cjs.map → workflow-edge-data-button-CHoNrfef.cjs.map} +1 -1
  1113. package/package.json +10 -10
  1114. package/theme/colors.css +1 -1
  1115. package/theme/typography.css +19 -2
  1116. package/dist/Badge-D3EctKQo.cjs.map +0 -1
  1117. package/dist/Badge-DmOqFpXW.js.map +0 -1
  1118. package/dist/Txt-BP1SRHmL.js.map +0 -1
  1119. package/dist/Txt-DPmEpNbp.cjs.map +0 -1
  1120. package/dist/code-B-x-9sJ1.cjs.map +0 -1
  1121. package/dist/code-BeWhOFT4.js.map +0 -1
  1122. package/dist/combobox-styles-mbcWlNZQ.js.map +0 -1
  1123. package/dist/combobox-styles-qL3FSgmU.cjs.map +0 -1
  1124. package/dist/command-Bm0VcX7X.cjs.map +0 -1
  1125. package/dist/command-DFin7kHN.js.map +0 -1
  1126. package/dist/data-panel-CbomKGJt.js.map +0 -1
  1127. package/dist/data-panel-o-QLWuFV.cjs.map +0 -1
  1128. package/dist/field-BtvEQ68O.js.map +0 -1
  1129. package/dist/field-error-id-4DYu4KZ2.cjs.map +0 -1
  1130. package/dist/field-error-id-BSQLcfHo.js.map +0 -1
  1131. package/dist/field-ip9xiOVa.cjs.map +0 -1
  1132. package/dist/input-group-BgCXLSRV.cjs.map +0 -1
  1133. package/dist/input-group-wzirc-1k.js.map +0 -1
  1134. package/dist/main-sidebar-link-active-D8VSuJKx.cjs.map +0 -1
  1135. package/dist/main-sidebar-link-active-buZAhlHo.js.map +0 -1
  1136. package/dist/message-scroller-CiFr8MwT.js.map +0 -1
  1137. package/dist/message-scroller-E05PLPmT.cjs.map +0 -1
  1138. package/dist/metrics-kpi-card-1hbihR2T.cjs.map +0 -1
  1139. package/dist/metrics-kpi-card-CiB88L41.js.map +0 -1
  1140. package/dist/select--ArpXYDc.js.map +0 -1
  1141. package/dist/select-DJQYAVcm.cjs.map +0 -1
  1142. package/dist/tabs-root-C-ePF1y9.cjs.map +0 -1
  1143. package/dist/tabs-root-lrZZ3KwH.js.map +0 -1
  1144. package/dist/tabs-tab-BmIBFifi.cjs.map +0 -1
  1145. package/dist/tabs-tab-DoPSW-1s.js.map +0 -1
  1146. package/dist/use-collapsible-box-CCvsF_a9.js +0 -54
  1147. package/dist/use-collapsible-box-CCvsF_a9.js.map +0 -1
  1148. package/dist/use-collapsible-box-CbQOkokQ.cjs +0 -58
  1149. package/dist/use-collapsible-box-CbQOkokQ.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-scroller-WWaQ-XU_.js","sources":["../src/ds/components/MessageScroller/message-scroller-geometry.ts","../src/ds/components/MessageScroller/message-scroller-glide.ts","../src/ds/components/MessageScroller/message-scroller-trip.ts","../src/ds/components/MessageScroller/message-scroller.tsx"],"sourcesContent":["import type { MessageScrollerScrollAlign } from './message-scroller-context';\n\n/**\n * Geometry behind the scroller: how far to scroll for a given alignment, and\n * which anchored message the reader is currently on. Split out from the\n * component so each rule can be reasoned about — and tested — on its own.\n */\n\n/** A message the scroller tracks, and whether a turn is anchored to it. */\nexport type MessageScrollerItemRecord = {\n element: HTMLElement;\n scrollAnchor: boolean;\n};\n\n/** Sub-pixel slack, so a message resting exactly on the anchor line still counts. */\nexport const VISIBILITY_EPSILON = 0.5;\n\nexport const getContentPadding = (contentElement: HTMLElement | null) => {\n if (!contentElement) return { start: 0, end: 0 };\n const styles = window.getComputedStyle(contentElement);\n return {\n start: Number.parseFloat(styles.paddingBlockStart || styles.paddingTop) || 0,\n end: Number.parseFloat(styles.paddingBlockEnd || styles.paddingBottom) || 0,\n };\n};\n\nexport const getMaxScroll = (viewportElement: HTMLElement) =>\n Math.max(0, viewportElement.scrollHeight - viewportElement.clientHeight);\n\nexport const getRelativeTop = (element: HTMLElement, viewportElement: HTMLElement) => {\n const elementRect = element.getBoundingClientRect();\n const viewportRect = viewportElement.getBoundingClientRect();\n return elementRect.top - viewportRect.top + viewportElement.scrollTop;\n};\n\nexport const getScrollTarget = ({\n align,\n contentElement,\n element,\n scrollMargin,\n viewportElement,\n}: {\n align: MessageScrollerScrollAlign;\n /** The padding framing the transcript lives here, however deep the rows nest. */\n contentElement: HTMLElement | null;\n element: HTMLElement;\n scrollMargin: number;\n viewportElement: HTMLElement;\n}) => {\n const contentPadding = getContentPadding(contentElement);\n const elementTop = getRelativeTop(element, viewportElement);\n const elementHeight = element.getBoundingClientRect().height;\n const visibleHeight = Math.max(0, viewportElement.clientHeight - contentPadding.start - contentPadding.end);\n\n if (align === 'center') return elementTop - contentPadding.start - (visibleHeight - elementHeight) / 2 - scrollMargin;\n if (align === 'end')\n return elementTop - viewportElement.clientHeight + elementHeight + contentPadding.end + scrollMargin;\n\n if (align === 'nearest') {\n const elementBottom = elementTop + elementHeight;\n const viewportTop = viewportElement.scrollTop + contentPadding.start;\n const viewportBottom = viewportElement.scrollTop + viewportElement.clientHeight - contentPadding.end;\n if (elementTop >= viewportTop && elementBottom <= viewportBottom) return viewportElement.scrollTop;\n return elementTop < viewportTop\n ? elementTop - contentPadding.start - scrollMargin\n : elementBottom - viewportElement.clientHeight + contentPadding.end + scrollMargin;\n }\n\n return elementTop - contentPadding.start - scrollMargin;\n};\n\n/**\n * Where the reader must sit for the last row to rest at the end of the view.\n *\n * Not the end of the scroll: a chat reserves room under a live turn so a reply\n * grows into empty space, and docks its composer in the flow. Both sit below the\n * last row, so scrolling to the end of the box carries that row — and the message\n * that opened the turn — out of the view above. Reading it from the rows means no\n * one has to publish a height for anyone else to subtract.\n */\nexport const getFollowTarget = ({\n contentElement,\n items,\n viewportElement,\n}: {\n contentElement: HTMLElement | null;\n items: Array<readonly [string, MessageScrollerItemRecord]>;\n viewportElement: HTMLElement;\n}) => {\n const end = getMaxScroll(viewportElement);\n const lastRow = items.at(-1)?.[1].element;\n if (!lastRow || !contentElement) return end;\n\n const contentBottom = getRelativeTop(contentElement, viewportElement) + contentElement.getBoundingClientRect().height;\n const belowContent = Math.max(0, viewportElement.scrollHeight - contentBottom);\n const rowBottom = getRelativeTop(lastRow, viewportElement) + lastRow.getBoundingClientRect().height;\n\n return Math.min(end, Math.max(0, rowBottom + belowContent - viewportElement.clientHeight));\n};\n\nexport const getCurrentAnchorId = ({\n fallbackAnchorId,\n items,\n scrollMargin,\n scrollPreviousItemPeek,\n visibleMessageIds,\n viewportElement,\n}: {\n fallbackAnchorId: string | undefined;\n items: Array<readonly [string, MessageScrollerItemRecord]>;\n scrollMargin: number;\n scrollPreviousItemPeek: number;\n visibleMessageIds: Set<string>;\n viewportElement: HTMLElement;\n}) => {\n const anchorLine = viewportElement.getBoundingClientRect().top + scrollMargin + scrollPreviousItemPeek;\n const anchors = items.filter(([, item]) => item.scrollAnchor);\n let anchoredAboveViewport: string | undefined;\n\n for (const [messageId, item] of anchors) {\n if (item.element.getBoundingClientRect().top <= anchorLine + VISIBILITY_EPSILON) {\n anchoredAboveViewport = messageId;\n }\n }\n\n if (anchoredAboveViewport) return anchoredAboveViewport;\n return anchors.find(([messageId]) => visibleMessageIds.has(messageId))?.[0] ?? fallbackAnchorId;\n};\n","/** Longest single growth worth smoothing. Past it the move is one the reader asked for. */\nconst GLIDE_MAX = 240;\nconst GLIDE_MS = 220;\nconst GLIDE_EASE = 'cubic-bezier(0.33, 1, 0.68, 1)';\n\nfunction currentOffset(element: HTMLElement): number {\n if (typeof DOMMatrixReadOnly === 'undefined') return 0;\n const { transform } = getComputedStyle(element);\n if (!transform || transform === 'none') return 0;\n return new DOMMatrixReadOnly(transform).m42;\n}\n\nconst travels = new WeakMap<HTMLElement, AbortController>();\n\nfunction release(element: HTMLElement): void {\n travels.get(element)?.abort();\n travels.delete(element);\n element.style.transition = '';\n element.style.transform = '';\n}\n\nfunction calm(): boolean {\n if (typeof window === 'undefined' || !window.matchMedia) return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/**\n * Hides a scroll that has already happened. The end is pinned instantly, as it must\n * be, then the content is put back where the reader last saw it and travels to zero\n * on the compositor — so a reply growing a line at a time reads as one movement\n * rather than a snap per wrapped line.\n *\n * Transform, not layout: `scrollHeight` never changes, so nothing here can feed the\n * resize that called it. A line landing mid-travel only adds to the distance left.\n */\nexport function glideContent(element: HTMLElement | null, delta: number): void {\n if (!element || delta <= 0 || calm()) return;\n\n const offset = currentOffset(element) + delta;\n if (offset > GLIDE_MAX) {\n release(element);\n return;\n }\n\n element.style.transition = 'none';\n element.style.transform = `translateY(${offset}px)`;\n // Commit the displaced position, or the browser only ever sees the settled one.\n void element.offsetHeight;\n element.style.transition = `transform ${GLIDE_MS}ms ${GLIDE_EASE}`;\n element.style.transform = 'translateY(0)';\n // A settled transform would leave the content a containing block for anything\n // fixed inside it, so the styles come off once the travel is spent. Descendants'\n // transitions bubble here too, so only the content's own settle counts.\n travels.get(element)?.abort();\n const travel = new AbortController();\n travels.set(element, travel);\n const settle = (event: TransitionEvent) => {\n if (event.target !== element) return;\n if (currentOffset(element) === 0) release(element);\n };\n element.addEventListener('transitionend', settle, { signal: travel.signal });\n element.addEventListener('transitioncancel', settle, { signal: travel.signal });\n}\n","import { VISIBILITY_EPSILON } from './message-scroller-geometry';\n\n/** One designed curve for the one scripted trip: fast liftoff, long settle. */\nconst TRIP_MS = 560;\n/** How long past its clock a trip may chase a destination the layout hasn't released yet. */\nconst TRIP_OVERTIME_MS = 240;\n\nconst easeOutQuint = (t: number) => 1 - (1 - t) ** 5;\n\nexport type TripEndReason = 'arrived' | 'interrupted' | 'expired';\n\nexport interface TripAnimation {\n cancel: () => void;\n}\n\n/**\n * Drives the viewport to a destination the way a transition would, not the way\n * `scrollTo({ behavior: 'smooth' })` does: the destination is re-read every frame,\n * so a layout still settling under the trip — the reserved room opening beneath a\n * new turn — bends the path instead of restarting the curve. Writes are clamped by\n * the browser, so until the room has opened far enough the trip simply rides the\n * end of the box down.\n *\n * The reader keeps the last word: a scroll position this trip didn't write ends it.\n */\nexport function startTrip(\n viewportElement: HTMLElement,\n getTarget: () => number | undefined,\n onEnd: (reason: TripEndReason) => void,\n): TripAnimation {\n const reduceMotion =\n typeof window.matchMedia === 'function' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n const duration = reduceMotion ? 0 : TRIP_MS;\n const startedAt = performance.now();\n const from = viewportElement.scrollTop;\n let lastWritten = from;\n let frame = 0;\n let ended = false;\n\n const end = (reason: TripEndReason) => {\n ended = true;\n onEnd(reason);\n };\n\n const step = () => {\n if (Math.abs(viewportElement.scrollTop - lastWritten) > 1) return end('interrupted');\n const target = getTarget();\n if (target === undefined) return end('expired');\n const elapsed = performance.now() - startedAt;\n const progress = duration === 0 ? 1 : Math.min(1, elapsed / duration);\n viewportElement.scrollTop = from + (target - from) * easeOutQuint(progress);\n lastWritten = viewportElement.scrollTop;\n if (progress === 1 && Math.abs(lastWritten - target) <= VISIBILITY_EPSILON) return end('arrived');\n if (elapsed >= duration + TRIP_OVERTIME_MS) return end('expired');\n frame = window.requestAnimationFrame(step);\n };\n\n frame = window.requestAnimationFrame(step);\n\n return {\n cancel: () => {\n if (ended) return;\n ended = true;\n window.cancelAnimationFrame(frame);\n },\n };\n}\n","import { ArrowDownIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport {\n AUTO_SCROLL_ATTACH_THRESHOLD,\n DEFAULT_REACH_START_THRESHOLD,\n DEFAULT_SCROLL_EDGE_THRESHOLD,\n DEFAULT_SCROLL_MARGIN,\n DEFAULT_SCROLL_PREVIOUS_ITEM_PEEK,\n DEFAULT_SCROLLABLE,\n DEFAULT_VISIBILITY,\n MessageScrollerActionsContext,\n MessageScrollerScrollableContext,\n MessageScrollerVisibilityContext,\n useRequiredMessageScrollerActionsContext,\n useRequiredMessageScrollerScrollableContext,\n} from './message-scroller-context';\nimport type {\n MessageScrollerActionsContextValue,\n MessageScrollerButtonDirection,\n MessageScrollerDefaultScrollPosition,\n MessageScrollerScrollAlign,\n MessageScrollerScrollOptions,\n MessageScrollerScrollable,\n MessageScrollerVisibility,\n} from './message-scroller-context';\n\nimport {\n VISIBILITY_EPSILON,\n getCurrentAnchorId,\n getFollowTarget,\n getMaxScroll,\n getScrollTarget,\n} from './message-scroller-geometry';\nimport type { MessageScrollerItemRecord } from './message-scroller-geometry';\nimport { glideContent } from './message-scroller-glide';\nimport { startTrip } from './message-scroller-trip';\nimport type { TripAnimation } from './message-scroller-trip';\n\nimport { overlaySurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { mergeRefs } from '@/lib/merge-refs';\nimport { cn } from '@/lib/utils';\n\nexport type {\n MessageScrollerButtonDirection,\n MessageScrollerDefaultScrollPosition,\n MessageScrollerScrollAlign,\n MessageScrollerScrollOptions,\n MessageScrollerScrollable,\n MessageScrollerVisibility,\n} from './message-scroller-context';\n\nconst scrollableMatches = (left: MessageScrollerScrollable, right: MessageScrollerScrollable) =>\n left.start === right.start && left.end === right.end;\n\nconst visibilityMatches = (left: MessageScrollerVisibility, right: MessageScrollerVisibility) =>\n left.currentAnchorId === right.currentAnchorId &&\n left.visibleMessageIds.length === right.visibleMessageIds.length &&\n left.visibleMessageIds.every((messageId, index) => messageId === right.visibleMessageIds[index]);\n\nconst orderItemsByDocumentPosition = (items: Array<readonly [string, MessageScrollerItemRecord]>) =>\n items.sort(([, left], [, right]) => {\n const position = left.element.compareDocumentPosition(right.element);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n return 0;\n });\n\nconst scrollViewportTo = (viewportElement: HTMLElement, top: number, behavior: ScrollBehavior) => {\n if (typeof viewportElement.scrollTo === 'function') {\n viewportElement.scrollTo({ top, behavior });\n return;\n }\n\n viewportElement.scrollTop = top;\n};\n\nconst scheduleScrollSync = (callback: () => void) => {\n if (typeof window.requestAnimationFrame === 'function') {\n window.requestAnimationFrame(callback);\n return;\n }\n\n window.setTimeout(callback, 0);\n};\n\nexport interface MessageScrollerProviderProps {\n /** Carry the reader with the stream, re-attaching on a new turn. Off still parks a new turn, without following the reply. */\n autoScroll?: boolean;\n children?: React.ReactNode;\n defaultScrollPosition?: MessageScrollerDefaultScrollPosition;\n /** Called when the reader scrolls near the start — where older history is loaded. */\n onReachStart?: () => void;\n /** Hold the reading position when older items are added above the current ones. */\n preserveScrollOnPrepend?: boolean;\n reachStartThreshold?: number;\n scrollEdgeThreshold?: number;\n scrollMargin?: number;\n scrollPreviousItemPeek?: number;\n}\n\nexport function MessageScrollerProvider({\n autoScroll = false,\n children,\n defaultScrollPosition = 'end',\n onReachStart,\n preserveScrollOnPrepend = false,\n reachStartThreshold = DEFAULT_REACH_START_THRESHOLD,\n scrollEdgeThreshold = DEFAULT_SCROLL_EDGE_THRESHOLD,\n scrollMargin = DEFAULT_SCROLL_MARGIN,\n scrollPreviousItemPeek = DEFAULT_SCROLL_PREVIOUS_ITEM_PEEK,\n}: MessageScrollerProviderProps) {\n const itemsRef = React.useRef<Map<string, MessageScrollerItemRecord> | null>(null);\n itemsRef.current ??= new Map<string, MessageScrollerItemRecord>();\n const itemsRegistry = itemsRef.current;\n // Rebuilt on register/unregister only — scroll runs this too often to sort per event.\n const orderedItemsRef = React.useRef<Array<readonly [string, MessageScrollerItemRecord]> | null>(null);\n const visibleMessageIdsRef = React.useRef<Set<string> | null>(null);\n visibleMessageIdsRef.current ??= new Set<string>();\n const intersectingMessageIds = visibleMessageIdsRef.current;\n const [itemsVersion, setItemsVersion] = React.useState(0);\n const [rootElement, setRootElement] = React.useState<HTMLDivElement | null>(null);\n const [viewportElement, setViewportElement] = React.useState<HTMLDivElement | null>(null);\n const [contentElement, setContentElement] = React.useState<HTMLDivElement | null>(null);\n const defaultScrollAppliedRef = React.useRef(false);\n const deferDefaultScrollRef = React.useRef(false);\n const defaultScrollScheduledRef = React.useRef(false);\n const seenAnchorIdsRef = React.useRef<Set<string> | null>(null);\n seenAnchorIdsRef.current ??= new Set<string>();\n const seenAnchorIds = seenAnchorIdsRef.current;\n // Message ID reconciliation keeps the row element while replacing its ID.\n const seenAnchorElementsRef = React.useRef<WeakSet<HTMLElement> | null>(null);\n seenAnchorElementsRef.current ??= new WeakSet<HTMLElement>();\n const seenAnchorElements = seenAnchorElementsRef.current;\n const turnAnchoringArmedRef = React.useRef(false);\n const [scrollable, setScrollable] = React.useState<MessageScrollerScrollable>(DEFAULT_SCROLLABLE);\n const [visibility, setVisibility] = React.useState<MessageScrollerVisibility>(DEFAULT_VISIBILITY);\n const atEndRef = React.useRef(true);\n // Attachment is a mode, not a measurement: a growing reply moves the end away\n // without the reader having moved, so only the reader detaches it.\n const followingRef = React.useRef(true);\n // A smooth trip in flight, remembered by destination — the end of the stream, or\n // the anchor a new turn parks at. Sampled mid-flight it reads as a reader who\n // left, so it suspends detachment; a position going backwards calls it off.\n const tripRef = React.useRef<'end' | { anchorId: string } | null>(null);\n // The frame loop behind an anchor trip. Owns clearing its trip: it alone can\n // tell the reader taking over from its own writes landing.\n const tripAnimationRef = React.useRef<TripAnimation | null>(null);\n const lastScrollTopRef = React.useRef(0);\n // Only a reader moving backwards asks for older history: a mount sitting at\n // scrollTop 0 before the default scroll lands has not moved.\n const reachStartArmedRef = React.useRef(false);\n const reachStartFiredRef = React.useRef(false);\n const prependAnchorRef = React.useRef<{ scrollHeight: number; scrollTop: number } | null>(null);\n const firstItemIdRef = React.useRef<string | undefined>(undefined);\n // Off notifyScroll's deps on purpose: consumers pass it inline, and a fresh\n // identity per render would republish the actions context to every consumer.\n const onReachStartRef = React.useRef(onReachStart);\n React.useEffect(() => {\n onReachStartRef.current = onReachStart;\n }, [onReachStart]);\n\n const publishScrollable = React.useCallback(\n (nextScrollable: MessageScrollerScrollable) => {\n const scrollableValue = [nextScrollable.start && 'start', nextScrollable.end && 'end'].filter(Boolean).join(' ');\n\n for (const element of [rootElement, viewportElement]) {\n if (!element) continue;\n if (scrollableValue) {\n element.setAttribute('data-scrollable', scrollableValue);\n } else {\n element.removeAttribute('data-scrollable');\n }\n }\n\n setScrollable(current => (scrollableMatches(current, nextScrollable) ? current : nextScrollable));\n },\n [rootElement, viewportElement],\n );\n\n const publishVisibility = React.useCallback((nextVisibility: MessageScrollerVisibility) => {\n setVisibility(current => (visibilityMatches(current, nextVisibility) ? current : nextVisibility));\n }, []);\n\n // Registration is mount order, not document order, once history is prepended.\n const getOrderedItems = React.useCallback(() => {\n orderedItemsRef.current ??= orderItemsByDocumentPosition(Array.from(itemsRegistry.entries()));\n return orderedItemsRef.current;\n }, [itemsRegistry]);\n\n // The one definition of \"the end\" — following it, resting at it, offering the trip\n // back to it. Everything below the last row (reserved room, the docked composer)\n // is room to grow into, never somewhere to scroll.\n const followTarget = React.useCallback(() => {\n if (!viewportElement) return 0;\n\n return getFollowTarget({ contentElement, items: getOrderedItems(), viewportElement });\n }, [contentElement, getOrderedItems, viewportElement]);\n\n const anchorTripTarget = React.useCallback(\n (anchorId: string) => {\n const item = itemsRegistry.get(anchorId);\n if (!item || !viewportElement) return undefined;\n return Math.max(\n 0,\n getScrollTarget({ align: 'start', contentElement, element: item.element, scrollMargin, viewportElement }),\n );\n },\n [contentElement, itemsRegistry, scrollMargin, viewportElement],\n );\n\n // The motion's destination, never the decision's: the room under a fresh turn is\n // still opening when the trip starts — on a short thread the box has not even\n // grown yet — so the cap is re-read per frame and the trip rides the end of the\n // box until the opened room decides where the message rests.\n const parkTripTarget = React.useCallback(\n (anchorId: string) => {\n const target = anchorTripTarget(anchorId);\n if (target === undefined || !viewportElement) return target;\n return Math.min(target, getMaxScroll(viewportElement));\n },\n [anchorTripTarget, viewportElement],\n );\n\n const cancelTripAnimation = React.useCallback(() => {\n tripAnimationRef.current?.cancel();\n tripAnimationRef.current = null;\n }, []);\n\n const updateScrollable = React.useCallback(\n ({ fromScroll = false }: { fromScroll?: boolean } = {}) => {\n if (!viewportElement) {\n atEndRef.current = true;\n publishScrollable(DEFAULT_SCROLLABLE);\n return false;\n }\n\n const { scrollTop } = viewportElement;\n const remainingScroll = followTarget() - scrollTop;\n const wentBack = scrollTop < lastScrollTopRef.current;\n atEndRef.current = remainingScroll < AUTO_SCROLL_ATTACH_THRESHOLD;\n if (tripRef.current === 'end' && (wentBack || atEndRef.current)) tripRef.current = null;\n lastScrollTopRef.current = scrollTop;\n // Scrolling back is the only way out of the stream, the end the only way back in:\n // a position merely left behind by a growing reply is us chasing it, not them leaving.\n if (fromScroll && tripRef.current === null && (wentBack || atEndRef.current)) {\n followingRef.current = atEndRef.current;\n }\n\n publishScrollable({\n start: scrollTop > scrollEdgeThreshold,\n end: remainingScroll > scrollEdgeThreshold && !(autoScroll && followingRef.current),\n });\n\n return wentBack;\n },\n [autoScroll, followTarget, publishScrollable, scrollEdgeThreshold, viewportElement],\n );\n\n const getLastAnchorId = React.useCallback(\n () =>\n getOrderedItems()\n .filter(([, item]) => item.scrollAnchor)\n .at(-1)?.[0],\n [getOrderedItems],\n );\n\n const updateVisibility = React.useCallback(() => {\n const items = getOrderedItems();\n const fallbackAnchorId = getLastAnchorId() ?? items.at(-1)?.[0];\n\n if (items.length === 0) {\n publishVisibility(DEFAULT_VISIBILITY);\n return;\n }\n\n if (!viewportElement) {\n publishVisibility({\n currentAnchorId: fallbackAnchorId,\n visibleMessageIds: fallbackAnchorId ? [fallbackAnchorId] : [],\n });\n return;\n }\n\n const viewportRect = viewportElement.getBoundingClientRect();\n const visibleMessageIds = new Set<string>();\n\n if (typeof IntersectionObserver === 'undefined') {\n const visibilityTop = viewportRect.top + scrollMargin + scrollPreviousItemPeek;\n items.forEach(([messageId, item]) => {\n const rect = item.element.getBoundingClientRect();\n if (rect.bottom > visibilityTop && rect.top < viewportRect.bottom) visibleMessageIds.add(messageId);\n });\n } else {\n intersectingMessageIds.forEach(messageId => visibleMessageIds.add(messageId));\n }\n\n const orderedVisibleMessageIds = items.flatMap(([messageId]) =>\n visibleMessageIds.has(messageId) ? [messageId] : [],\n );\n\n publishVisibility({\n currentAnchorId: getCurrentAnchorId({\n fallbackAnchorId,\n items,\n scrollMargin,\n scrollPreviousItemPeek,\n visibleMessageIds,\n viewportElement,\n }),\n visibleMessageIds:\n orderedVisibleMessageIds.length > 0 ? orderedVisibleMessageIds : fallbackAnchorId ? [fallbackAnchorId] : [],\n });\n }, [\n getLastAnchorId,\n getOrderedItems,\n intersectingMessageIds,\n publishVisibility,\n scrollMargin,\n scrollPreviousItemPeek,\n viewportElement,\n ]);\n\n const syncAfterScroll = React.useCallback(() => {\n updateScrollable();\n updateVisibility();\n }, [updateScrollable, updateVisibility]);\n\n const notifyScroll = React.useCallback(() => {\n const wasScrollable = Boolean(viewportElement && viewportElement.scrollHeight > viewportElement.clientHeight);\n const readerWentBack = updateScrollable({ fromScroll: true });\n updateVisibility();\n if (!viewportElement) return;\n\n if (readerWentBack && wasScrollable) reachStartArmedRef.current = true;\n\n if (!reachStartArmedRef.current) return;\n if (!wasScrollable) return;\n if (viewportElement.scrollTop > reachStartThreshold) {\n reachStartFiredRef.current = false;\n return;\n }\n // One request per trip to the start: staying there must not queue a second.\n if (reachStartFiredRef.current) return;\n if (!onReachStartRef.current) return;\n\n reachStartFiredRef.current = true;\n if (preserveScrollOnPrepend) {\n prependAnchorRef.current = {\n scrollHeight: viewportElement.scrollHeight,\n scrollTop: viewportElement.scrollTop,\n };\n }\n onReachStartRef.current();\n }, [preserveScrollOnPrepend, reachStartThreshold, updateScrollable, updateVisibility, viewportElement]);\n\n const scrollToElement = React.useCallback(\n (\n element: HTMLElement,\n {\n align = 'start',\n behavior = 'auto',\n scrollMargin: optionScrollMargin = scrollMargin,\n }: MessageScrollerScrollOptions = {},\n ) => {\n if (!viewportElement || !contentElement?.contains(element)) return false;\n\n const nextScrollTop = Math.max(\n 0,\n getScrollTarget({ align, contentElement, element, scrollMargin: optionScrollMargin, viewportElement }),\n );\n\n if (Math.abs(viewportElement.scrollTop - nextScrollTop) <= VISIBILITY_EPSILON) {\n scrollViewportTo(viewportElement, nextScrollTop, 'auto');\n syncAfterScroll();\n return true;\n }\n\n scrollViewportTo(viewportElement, nextScrollTop, behavior);\n scheduleScrollSync(syncAfterScroll);\n return true;\n },\n [contentElement, scrollMargin, syncAfterScroll, viewportElement],\n );\n\n const scrollToStart = React.useCallback(\n ({ behavior = 'auto' }: MessageScrollerScrollOptions = {}) => {\n if (!viewportElement) return false;\n cancelTripAnimation();\n tripRef.current = null;\n scrollViewportTo(viewportElement, 0, behavior);\n scheduleScrollSync(syncAfterScroll);\n return true;\n },\n [cancelTripAnimation, syncAfterScroll, viewportElement],\n );\n\n const scrollToEnd = React.useCallback(\n ({ behavior = 'auto' }: MessageScrollerScrollOptions = {}) => {\n if (!viewportElement) return false;\n cancelTripAnimation();\n followingRef.current = true;\n tripRef.current = behavior === 'smooth' ? 'end' : null;\n scrollViewportTo(viewportElement, followTarget(), behavior);\n // Published now, not next frame: a button that hears about the trip late flashes.\n syncAfterScroll();\n scheduleScrollSync(syncAfterScroll);\n return true;\n },\n [cancelTripAnimation, followTarget, syncAfterScroll, viewportElement],\n );\n\n const scrollToMessage = React.useCallback(\n (messageId: string, options?: MessageScrollerScrollOptions) => {\n const item = itemsRegistry.get(messageId);\n if (!item) return false;\n return scrollToElement(item.element, options);\n },\n [itemsRegistry, scrollToElement],\n );\n\n // A reply grows into the room its turn reserved and moves nothing: only once the\n // last row would fall past the end of the view is there anything to follow, and\n // then by exactly what it overflowed — pinned instantly, glided on the compositor.\n const notifyContentResize = React.useCallback(() => {\n const trip = tripRef.current;\n const onAnchorTrip = trip !== null && trip !== 'end';\n // An anchor trip re-reads its destination every frame, so a layout settling\n // under it — the reserved room opening — bends its path without help from here.\n if (!onAnchorTrip && autoScroll && defaultScrollAppliedRef.current && followingRef.current && viewportElement) {\n const overflow = followTarget() - viewportElement.scrollTop;\n if (overflow > VISIBILITY_EPSILON) {\n // A trip already in flight is retargeted rather than cut short; only the\n // instant catch-up needs the glide to read as one movement.\n const travelling = trip === 'end';\n scrollViewportTo(viewportElement, followTarget(), travelling ? 'smooth' : 'auto');\n if (!travelling) glideContent(contentElement, overflow);\n }\n }\n syncAfterScroll();\n }, [autoScroll, contentElement, followTarget, syncAfterScroll, viewportElement]);\n\n const registerItem = React.useCallback(\n (messageId: string, element: HTMLElement, scrollAnchor: boolean) => {\n itemsRegistry.set(messageId, { element, scrollAnchor });\n orderedItemsRef.current = null;\n setItemsVersion(version => version + 1);\n\n return () => {\n const current = itemsRegistry.get(messageId);\n if (current?.element !== element) return;\n itemsRegistry.delete(messageId);\n intersectingMessageIds.delete(messageId);\n orderedItemsRef.current = null;\n setItemsVersion(version => version + 1);\n };\n },\n [intersectingMessageIds, itemsRegistry],\n );\n\n React.useEffect(() => {\n if (!contentElement || !viewportElement || typeof IntersectionObserver === 'undefined') {\n updateVisibility();\n return undefined;\n }\n\n const messageIdByElement = new Map<Element, string>();\n for (const [messageId, item] of itemsRegistry) {\n messageIdByElement.set(item.element, messageId);\n }\n\n const observer = new IntersectionObserver(\n entries => {\n for (const entry of entries) {\n const messageId = messageIdByElement.get(entry.target);\n if (!messageId) continue;\n if (entry.isIntersecting) {\n intersectingMessageIds.add(messageId);\n } else {\n intersectingMessageIds.delete(messageId);\n }\n }\n updateVisibility();\n },\n {\n root: viewportElement,\n rootMargin: `${-(scrollMargin + scrollPreviousItemPeek)}px 0px 0px 0px`,\n threshold: [0, 0.01, 0.5, 1],\n },\n );\n\n for (const [, item] of itemsRegistry) observer.observe(item.element);\n updateVisibility();\n\n return () => observer.disconnect();\n }, [\n contentElement,\n intersectingMessageIds,\n itemsRegistry,\n itemsVersion,\n scrollMargin,\n scrollPreviousItemPeek,\n updateVisibility,\n viewportElement,\n ]);\n\n React.useEffect(() => {\n if (!viewportElement || typeof ResizeObserver === 'undefined') return undefined;\n const observer = new ResizeObserver(syncAfterScroll);\n observer.observe(viewportElement);\n return () => observer.disconnect();\n }, [syncAfterScroll, viewportElement]);\n\n React.useLayoutEffect(() => {\n updateScrollable();\n updateVisibility();\n }, [itemsVersion, updateScrollable, updateVisibility]);\n\n React.useLayoutEffect(() => {\n if (defaultScrollAppliedRef.current || !viewportElement) return undefined;\n if (itemsRegistry.size === 0) {\n deferDefaultScrollRef.current = true;\n return undefined;\n }\n\n const applyDefaultScroll = () => {\n const lastAnchorId = getLastAnchorId();\n // Where a thread opens decides whether it starts attached: a restored reading\n // position has the stream below it. `scrollToEnd` takes this back when it lands.\n followingRef.current = false;\n let didScroll = false;\n if (defaultScrollPosition === 'start') {\n didScroll = scrollToStart({ behavior: 'auto' });\n } else if (defaultScrollPosition === 'last-anchor') {\n didScroll = lastAnchorId\n ? scrollToMessage(lastAnchorId, { align: 'start', behavior: 'auto' })\n : scrollToEnd({ behavior: 'auto' });\n } else {\n didScroll = scrollToEnd({ behavior: 'auto' });\n }\n\n if (!didScroll) return;\n defaultScrollAppliedRef.current = true;\n // A fresh thread opens on its first message with nothing to scroll yet: it is\n // at its end, so the reply streaming in under it is followed.\n if (autoScroll && getMaxScroll(viewportElement) <= VISIBILITY_EPSILON) followingRef.current = true;\n // Settling is what arms turn anchoring: the rows the transcript opened with\n // are recorded as read here, and on a settled thread the next anchor to\n // register is the send itself — an arming left to a later anchoring pass\n // would be eaten by that send instead of parking it.\n for (const [messageId, item] of getOrderedItems()) {\n if (!item.scrollAnchor) continue;\n seenAnchorIds.add(messageId);\n seenAnchorElements.add(item.element);\n }\n turnAnchoringArmedRef.current = true;\n };\n\n if (!deferDefaultScrollRef.current) {\n applyDefaultScroll();\n return undefined;\n }\n if (defaultScrollScheduledRef.current) return undefined;\n\n defaultScrollScheduledRef.current = true;\n let cancelled = false;\n scheduleScrollSync(() => {\n scheduleScrollSync(() => {\n defaultScrollScheduledRef.current = false;\n if (!cancelled && !defaultScrollAppliedRef.current) applyDefaultScroll();\n });\n });\n return () => {\n cancelled = true;\n defaultScrollScheduledRef.current = false;\n };\n }, [\n autoScroll,\n defaultScrollPosition,\n getLastAnchorId,\n getOrderedItems,\n itemsRegistry,\n itemsVersion,\n scrollToEnd,\n scrollToMessage,\n scrollToStart,\n seenAnchorElements,\n seenAnchorIds,\n viewportElement,\n ]);\n\n // A turn opening is the one scripted scroll of a conversation: it carries the\n // reader to the message they just sent and parks it as high as the room the turn\n // reserves under it allows. The answer then grows into that room and moves\n // nothing at all — following only takes over once it outgrows the room.\n React.useLayoutEffect(() => {\n const lastAnchorId = getLastAnchorId();\n const lastAnchor = lastAnchorId ? itemsRegistry.get(lastAnchorId) : undefined;\n const opensTurn =\n turnAnchoringArmedRef.current &&\n lastAnchorId !== undefined &&\n lastAnchor !== undefined &&\n !seenAnchorIds.has(lastAnchorId) &&\n !seenAnchorElements.has(lastAnchor.element);\n\n for (const [messageId, item] of getOrderedItems()) {\n if (!item.scrollAnchor) continue;\n seenAnchorIds.add(messageId);\n seenAnchorElements.add(item.element);\n }\n turnAnchoringArmedRef.current = defaultScrollAppliedRef.current;\n\n if (opensTurn && lastAnchorId) {\n if (autoScroll) followingRef.current = true;\n cancelTripAnimation();\n const target = viewportElement ? anchorTripTarget(lastAnchorId) : undefined;\n // A turn opening at the top of the transcript — the first message of a fresh\n // thread — is already parked: no trip, and nothing moves.\n if (\n target === undefined ||\n !viewportElement ||\n Math.abs(target - viewportElement.scrollTop) <= VISIBILITY_EPSILON\n ) {\n tripRef.current = null;\n } else {\n tripRef.current = { anchorId: lastAnchorId };\n tripAnimationRef.current = startTrip(\n viewportElement,\n () => parkTripTarget(lastAnchorId),\n reason => {\n tripAnimationRef.current = null;\n tripRef.current = null;\n if (reason === 'interrupted') followingRef.current = atEndRef.current;\n syncAfterScroll();\n },\n );\n }\n // Published now: the reader just re-attached, and a button that hears late flashes.\n syncAfterScroll();\n return;\n }\n\n // Rows landing outside a turn — restored history, a notice — still belong to a\n // reader riding the stream, and reach them without a second animation. A trip\n // to an anchor keeps the viewport; a parked reader has new rows growing into\n // the room above the fold, with nothing below to catch up to.\n if (!autoScroll || !defaultScrollAppliedRef.current || !followingRef.current) return;\n if (tripRef.current !== null && tripRef.current !== 'end') return;\n if (viewportElement && followTarget() - viewportElement.scrollTop <= VISIBILITY_EPSILON) return;\n scrollToEnd({ behavior: tripRef.current === 'end' ? 'smooth' : 'auto' });\n }, [\n anchorTripTarget,\n autoScroll,\n cancelTripAnimation,\n followTarget,\n getLastAnchorId,\n getOrderedItems,\n itemsRegistry,\n itemsVersion,\n parkTripTarget,\n scrollToEnd,\n seenAnchorElements,\n seenAnchorIds,\n syncAfterScroll,\n viewportElement,\n ]);\n\n // A viewport going away mid-trip strands the frame loop on a detached element.\n React.useEffect(\n () => () => {\n cancelTripAnimation();\n tripRef.current = null;\n },\n [cancelTripAnimation, viewportElement],\n );\n\n // Older items land above the reader and shove their position down. A prepend is\n // told from an append by the first item's id, then undone by offsetting\n // scrollTop by however much taller the content got.\n React.useLayoutEffect(() => {\n const previousFirstItemId = firstItemIdRef.current;\n // From the DOM, not the registry: prepended items register last, so registry\n // order stops matching reading order.\n const firstItemId = contentElement?.querySelector<HTMLElement>('[data-slot=\"message-scroller-item\"]')?.dataset\n .messageId;\n firstItemIdRef.current = firstItemId;\n\n const anchor = prependAnchorRef.current;\n prependAnchorRef.current = null;\n if (!anchor || !viewportElement || firstItemId === previousFirstItemId) return;\n\n reachStartFiredRef.current = false;\n const grownBy = viewportElement.scrollHeight - anchor.scrollHeight;\n if (grownBy > 0) viewportElement.scrollTop = anchor.scrollTop + grownBy;\n }, [contentElement, itemsVersion, viewportElement]);\n\n const actionsContextValue = React.useMemo<MessageScrollerActionsContextValue>(\n () => ({\n notifyContentResize,\n notifyScroll,\n registerItem,\n scrollToEnd,\n scrollToMessage,\n scrollToStart,\n setContentElement,\n setRootElement,\n setViewportElement,\n syncAfterScroll,\n }),\n [notifyContentResize, notifyScroll, registerItem, scrollToEnd, scrollToMessage, scrollToStart, syncAfterScroll],\n );\n\n const scrollableContextValue = React.useMemo<MessageScrollerScrollable>(\n () => ({\n end: scrollable.end,\n start: scrollable.start,\n }),\n [scrollable.end, scrollable.start],\n );\n\n const visibilityContextValue = React.useMemo<MessageScrollerVisibility>(\n () => ({\n currentAnchorId: visibility.currentAnchorId,\n visibleMessageIds: visibility.visibleMessageIds,\n }),\n [visibility.currentAnchorId, visibility.visibleMessageIds],\n );\n\n return (\n <MessageScrollerActionsContext.Provider value={actionsContextValue}>\n <MessageScrollerScrollableContext.Provider value={scrollableContextValue}>\n <MessageScrollerVisibilityContext.Provider value={visibilityContextValue}>\n {children}\n </MessageScrollerVisibilityContext.Provider>\n </MessageScrollerScrollableContext.Provider>\n </MessageScrollerActionsContext.Provider>\n );\n}\n\nexport type MessageScrollerProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const MessageScroller = React.forwardRef<HTMLDivElement, MessageScrollerProps>(\n ({ className, ...props }, ref) => {\n const { setRootElement } = useRequiredMessageScrollerActionsContext('MessageScroller');\n return (\n <div\n ref={mergeRefs(setRootElement, ref)}\n data-slot=\"message-scroller\"\n className={cn('group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden', className)}\n {...props}\n />\n );\n },\n);\nMessageScroller.displayName = 'MessageScroller';\n\nexport type MessageScrollerViewportProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const MessageScrollerViewport = React.forwardRef<HTMLDivElement, MessageScrollerViewportProps>(\n ({ className, onScroll, role, tabIndex, ...props }, ref) => {\n const { setViewportElement, notifyScroll } = useRequiredMessageScrollerActionsContext('MessageScrollerViewport');\n const viewportRef = React.useMemo(() => mergeRefs(setViewportElement, ref), [ref, setViewportElement]);\n\n return (\n <div\n ref={viewportRef}\n role={role ?? 'region'}\n tabIndex={tabIndex ?? 0}\n data-slot=\"message-scroller-viewport\"\n className={cn(\n // Size container so consumers can size the room under a live turn in cqh.\n '[container-type:size] size-full min-h-0 min-w-0 overflow-y-auto overscroll-contain',\n 'data-autoscrolling:scrollbar-thumb-transparent data-autoscrolling:scrollbar-track-transparent',\n className,\n )}\n onScroll={event => {\n notifyScroll();\n onScroll?.(event);\n }}\n {...props}\n />\n );\n },\n);\nMessageScrollerViewport.displayName = 'MessageScrollerViewport';\n\nexport type MessageScrollerContentProps = React.HTMLAttributes<HTMLDivElement> & {\n spacerClassName?: string;\n};\n\nexport const MessageScrollerContent = React.forwardRef<HTMLDivElement, MessageScrollerContentProps>(\n ({ children, className, spacerClassName, role, 'aria-relevant': ariaRelevant = 'additions', ...props }, ref) => {\n const { setContentElement, notifyContentResize, syncAfterScroll } =\n useRequiredMessageScrollerActionsContext('MessageScrollerContent');\n const [contentElement, setLocalContentElement] = React.useState<HTMLDivElement | null>(null);\n\n const contentRef = React.useMemo(\n () => mergeRefs<HTMLDivElement>(setContentElement, setLocalContentElement, ref),\n [ref, setContentElement],\n );\n\n React.useLayoutEffect(() => {\n syncAfterScroll();\n }, [syncAfterScroll]);\n\n React.useEffect(() => {\n if (!contentElement || typeof MutationObserver === 'undefined') return undefined;\n const observer = new MutationObserver(notifyContentResize);\n observer.observe(contentElement, { childList: true, subtree: false });\n return () => observer.disconnect();\n }, [contentElement, notifyContentResize]);\n\n React.useEffect(() => {\n if (!contentElement || typeof ResizeObserver === 'undefined') return undefined;\n const observer = new ResizeObserver(notifyContentResize);\n observer.observe(contentElement);\n return () => observer.disconnect();\n }, [contentElement, notifyContentResize]);\n\n return (\n <div\n ref={contentRef}\n role={role ?? 'log'}\n aria-relevant={ariaRelevant}\n data-slot=\"message-scroller-content\"\n className={cn('flex h-max min-h-full flex-col gap-6', className)}\n {...props}\n >\n {children}\n <div aria-hidden=\"true\" data-message-scroller-spacer=\"\" hidden className={spacerClassName} />\n </div>\n );\n },\n);\nMessageScrollerContent.displayName = 'MessageScrollerContent';\n\nexport type MessageScrollerItemProps = React.HTMLAttributes<HTMLDivElement> & {\n messageId?: string;\n scrollAnchor?: boolean;\n};\n\nexport const MessageScrollerItem = React.forwardRef<HTMLDivElement, MessageScrollerItemProps>(\n ({ className, messageId, scrollAnchor = false, ...props }, ref) => {\n // Optional, unlike the other slots: the same row renderer is reused outside a\n // scroller (draft pages, previews), where there is simply nothing to register.\n const registerItem = React.useContext(MessageScrollerActionsContext)?.registerItem;\n const unregisterRef = React.useRef<(() => void) | undefined>(undefined);\n const itemRef = React.useCallback(\n (element: HTMLDivElement | null) => {\n unregisterRef.current?.();\n unregisterRef.current = undefined;\n mergeRefs(ref)(element);\n\n if (!element || !messageId || !registerItem) return;\n unregisterRef.current = registerItem(messageId, element, scrollAnchor);\n },\n [messageId, ref, registerItem, scrollAnchor],\n );\n\n return (\n <div\n ref={itemRef}\n data-slot=\"message-scroller-item\"\n data-message-id={messageId}\n data-scroll-anchor={scrollAnchor ? 'true' : 'false'}\n className={cn('min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]', className)}\n {...props}\n />\n );\n },\n);\nMessageScrollerItem.displayName = 'MessageScrollerItem';\n\nexport type MessageScrollerButtonProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> & {\n behavior?: ScrollBehavior;\n children?: React.ReactNode;\n direction?: MessageScrollerButtonDirection;\n};\n\nexport const MessageScrollerButton = React.forwardRef<HTMLButtonElement, MessageScrollerButtonProps>(\n (\n { behavior = 'smooth', direction = 'end', className, children, onClick, tabIndex, type = 'button', ...props },\n ref,\n ) => {\n const { scrollToEnd, scrollToStart } = useRequiredMessageScrollerActionsContext('MessageScrollerButton');\n const { start, end } = useRequiredMessageScrollerScrollableContext('MessageScrollerButton');\n const active = direction === 'start' ? start : end;\n\n return (\n <button\n ref={ref}\n type={type}\n {...props}\n data-slot=\"message-scroller-button\"\n data-active={active ? 'true' : 'false'}\n data-direction={direction}\n tabIndex={active ? tabIndex : -1}\n className={cn(\n overlaySurfaceStyle,\n 'absolute inset-s-1/2 inline-flex min-h-5 min-w-7 -translate-x-1/2 items-center justify-center rounded-full text-foreground transition-[translate,scale,opacity] duration-200 hover:[--surface-tint:var(--fill-subtle)] data-[active=false]:pointer-events-none data-[active=false]:scale-95 data-[active=false]:opacity-0 data-[active=false]:duration-400 data-[active=false]:ease-[cubic-bezier(0.7,0,0.84,0)] data-[active=true]:translate-y-0 data-[active=true]:scale-100 data-[active=true]:opacity-100 data-[active=true]:ease-[cubic-bezier(0.23,1,0.32,1)] data-[direction=end]:bottom-4 data-[direction=end]:data-[active=false]:translate-y-full data-[direction=start]:top-4 data-[direction=start]:data-[active=false]:-translate-y-full rtl:translate-x-1/2 data-[direction=start]:[&_svg]:rotate-180',\n className,\n )}\n onClick={event => {\n if (!active) return;\n onClick?.(event);\n if (event.defaultPrevented) return;\n event.currentTarget.blur();\n if (direction === 'start') {\n scrollToStart({ behavior });\n } else {\n scrollToEnd({ behavior });\n }\n }}\n >\n {children ?? (\n <>\n <ArrowDownIcon className=\"size-4\" aria-hidden />\n <span className=\"sr-only\">{direction === 'end' ? 'Scroll to end' : 'Scroll to start'}</span>\n </>\n )}\n </button>\n );\n },\n);\nMessageScrollerButton.displayName = 'MessageScrollerButton';\n"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { c as cn } from './cn-65Adrsfj.js';
3
- import { T as Txt } from './Txt-BP1SRHmL.js';
3
+ import { T as Txt } from './Txt-C3cYJgKU.js';
4
4
  import { S as Spinner } from './spinner-ylbE0TJA.js';
5
5
  import { C as Card } from './Card-DVy0QS4m.js';
6
- import { M as MetricsKpiCard } from './metrics-kpi-card-CiB88L41.js';
6
+ import { M as MetricsKpiCard } from './metrics-kpi-card-DxcLqbDU.js';
7
7
 
8
8
  function MetricsCardActions({ children, className }) {
9
9
  return /* @__PURE__ */ jsx("div", { className: cn("flex shrink-0 items-center gap-1", className), children });
@@ -91,4 +91,4 @@ const MetricsCard = Object.assign(MetricsCardRoot, {
91
91
  });
92
92
 
93
93
  export { MetricsCard as M };
94
- //# sourceMappingURL=metrics-card-C1rTkbcn.js.map
94
+ //# sourceMappingURL=metrics-card-DFEWxFkJ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-card-C1rTkbcn.js","sources":["../src/ds/components/MetricsCard/metrics-card-actions.tsx","../src/ds/components/MetricsCard/metrics-card-content.tsx","../src/ds/components/MetricsCard/metrics-card-description.tsx","../src/ds/components/MetricsCard/metrics-card-error.tsx","../src/ds/components/MetricsCard/metrics-card-loading.tsx","../src/ds/components/MetricsCard/metrics-card-no-data.tsx","../src/ds/components/MetricsCard/metrics-card-root.tsx","../src/ds/components/MetricsCard/metrics-card-summary.tsx","../src/ds/components/MetricsCard/metrics-card-title.tsx","../src/ds/components/MetricsCard/metrics-card-title-and-description.tsx","../src/ds/components/MetricsCard/metrics-card-top-bar.tsx","../src/ds/components/MetricsCard/metrics-card.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\n/** Container for icon buttons / small actions in the top bar of a MetricsCard,\n * placed alongside `TitleAndDescription` + `Summary`. */\nexport function MetricsCardActions({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cn('flex shrink-0 items-center gap-1', className)}>{children}</div>;\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardContent({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cn('overflow-x-auto', className)}>{children}</div>;\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardDescription({ children, className }: { children: string; className?: string }) {\n return (\n <Txt tone=\"faint\" className={cn('mt-0.5', className)}>\n {children}\n </Txt>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardError({\n message = 'Failed to load data',\n className,\n}: {\n message?: string;\n className?: string;\n}) {\n return (\n <div className={cn('flex flex-col items-center justify-center gap-3', className)}>\n <Txt variant=\"caption\" className=\"text-destructive-foreground\">\n {message}\n </Txt>\n </div>\n );\n}\n","import { Spinner } from '@/ds/components/Spinner/spinner';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardLoading({ className }: { className?: string }) {\n return (\n <div className={cn('flex items-center justify-center', className)}>\n <Spinner size=\"md\" variant=\"pulse\" className=\"text-placeholder\" />\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardNoData({ message = 'No data yet', className }: { message?: string; className?: string }) {\n return (\n <div className={cn('flex h-full items-center justify-center', className)}>\n <Txt tone=\"faint\">{message}</Txt>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Card } from '@/ds/components/Card';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardRoot({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <Card\n className={cn(\n 'grid min-h-72 min-w-80 flex-1 grid-rows-[auto_1fr] gap-4 px-4 py-3 2xl:min-w-120 md:min-w-88 lg:min-w-sm xl:min-w-104',\n className,\n )}\n >\n {children}\n </Card>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardSummary({ value, label, className }: { value: string; label?: string; className?: string }) {\n return (\n <div className={cn('text-right', className)}>\n <Txt tone=\"muted\" className=\"tabular-nums\">\n {value}\n </Txt>\n {label && (\n <Txt tone=\"faint\" className=\"mt-0.5\">\n {label}\n </Txt>\n )}\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsCardTitle({\n children,\n className,\n as: Tag = 'h2',\n}: {\n children: string;\n className?: string;\n as?: 'h2' | 'h3' | 'h4';\n}) {\n return <Tag className={cn('text-body text-foreground', className)}>{children}</Tag>;\n}\n","import type { ReactNode } from 'react';\n\nimport { MetricsCardDescription } from './metrics-card-description';\nimport { MetricsCardTitle } from './metrics-card-title';\n\ntype PropsWithTitleDescription = {\n title: string;\n description?: string;\n titleAs?: 'h2' | 'h3' | 'h4';\n children?: never;\n className?: string;\n};\n\ntype PropsWithChildren = {\n title?: never;\n description?: never;\n children: ReactNode;\n className?: string;\n};\n\nexport function MetricsCardTitleAndDescription(props: PropsWithTitleDescription | PropsWithChildren) {\n if ('children' in props) {\n return <div className={props.className}>{props.children}</div>;\n }\n\n const { title, description, titleAs } = props;\n\n return (\n <div className={props.className}>\n <MetricsCardTitle as={titleAs}>{title}</MetricsCardTitle>\n {description && <MetricsCardDescription>{description}</MetricsCardDescription>}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardTopBar({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <div className={cn('flex items-start gap-4 [&>:first-child]:min-w-0 [&>:first-child]:flex-1', className)}>\n {children}\n </div>\n );\n}\n","import { MetricsCardActions } from './metrics-card-actions';\nimport { MetricsCardContent } from './metrics-card-content';\nimport { MetricsCardDescription } from './metrics-card-description';\nimport { MetricsCardError } from './metrics-card-error';\nimport { MetricsCardLoading } from './metrics-card-loading';\nimport { MetricsCardNoData } from './metrics-card-no-data';\nimport { MetricsCardRoot } from './metrics-card-root';\nimport { MetricsCardSummary } from './metrics-card-summary';\nimport { MetricsCardTitle } from './metrics-card-title';\nimport { MetricsCardTitleAndDescription } from './metrics-card-title-and-description';\nimport { MetricsCardTopBar } from './metrics-card-top-bar';\nimport { MetricsKpiCard } from '@/ds/components/MetricsKpiCard';\n\nexport const MetricsCard = Object.assign(MetricsCardRoot, {\n Root: MetricsCardRoot,\n Kpi: MetricsKpiCard,\n TopBar: MetricsCardTopBar,\n Actions: MetricsCardActions,\n TitleAndDescription: MetricsCardTitleAndDescription,\n Title: MetricsCardTitle,\n Description: MetricsCardDescription,\n Summary: MetricsCardSummary,\n Loading: MetricsCardLoading,\n Error: MetricsCardError,\n Content: MetricsCardContent,\n NoData: MetricsCardNoData,\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics-card-DFEWxFkJ.js","sources":["../src/ds/components/MetricsCard/metrics-card-actions.tsx","../src/ds/components/MetricsCard/metrics-card-content.tsx","../src/ds/components/MetricsCard/metrics-card-description.tsx","../src/ds/components/MetricsCard/metrics-card-error.tsx","../src/ds/components/MetricsCard/metrics-card-loading.tsx","../src/ds/components/MetricsCard/metrics-card-no-data.tsx","../src/ds/components/MetricsCard/metrics-card-root.tsx","../src/ds/components/MetricsCard/metrics-card-summary.tsx","../src/ds/components/MetricsCard/metrics-card-title.tsx","../src/ds/components/MetricsCard/metrics-card-title-and-description.tsx","../src/ds/components/MetricsCard/metrics-card-top-bar.tsx","../src/ds/components/MetricsCard/metrics-card.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\n/** Container for icon buttons / small actions in the top bar of a MetricsCard,\n * placed alongside `TitleAndDescription` + `Summary`. */\nexport function MetricsCardActions({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cn('flex shrink-0 items-center gap-1', className)}>{children}</div>;\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardContent({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cn('overflow-x-auto', className)}>{children}</div>;\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardDescription({ children, className }: { children: string; className?: string }) {\n return (\n <Txt tone=\"faint\" className={cn('mt-0.5', className)}>\n {children}\n </Txt>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardError({\n message = 'Failed to load data',\n className,\n}: {\n message?: string;\n className?: string;\n}) {\n return (\n <div className={cn('flex flex-col items-center justify-center gap-3', className)}>\n <Txt variant=\"caption\" className=\"text-destructive-foreground\">\n {message}\n </Txt>\n </div>\n );\n}\n","import { Spinner } from '@/ds/components/Spinner/spinner';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardLoading({ className }: { className?: string }) {\n return (\n <div className={cn('flex items-center justify-center', className)}>\n <Spinner size=\"md\" variant=\"pulse\" className=\"text-placeholder\" />\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardNoData({ message = 'No data yet', className }: { message?: string; className?: string }) {\n return (\n <div className={cn('flex h-full items-center justify-center', className)}>\n <Txt tone=\"faint\">{message}</Txt>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Card } from '@/ds/components/Card';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardRoot({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <Card\n className={cn(\n 'grid min-h-72 min-w-80 flex-1 grid-rows-[auto_1fr] gap-4 px-4 py-3 2xl:min-w-120 md:min-w-88 lg:min-w-sm xl:min-w-104',\n className,\n )}\n >\n {children}\n </Card>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardSummary({ value, label, className }: { value: string; label?: string; className?: string }) {\n return (\n <div className={cn('text-right', className)}>\n <Txt tone=\"muted\" className=\"tabular-nums\">\n {value}\n </Txt>\n {label && (\n <Txt tone=\"faint\" className=\"mt-0.5\">\n {label}\n </Txt>\n )}\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsCardTitle({\n children,\n className,\n as: Tag = 'h2',\n}: {\n children: string;\n className?: string;\n as?: 'h2' | 'h3' | 'h4';\n}) {\n return <Tag className={cn('text-body text-foreground', className)}>{children}</Tag>;\n}\n","import type { ReactNode } from 'react';\n\nimport { MetricsCardDescription } from './metrics-card-description';\nimport { MetricsCardTitle } from './metrics-card-title';\n\ntype PropsWithTitleDescription = {\n title: string;\n description?: string;\n titleAs?: 'h2' | 'h3' | 'h4';\n children?: never;\n className?: string;\n};\n\ntype PropsWithChildren = {\n title?: never;\n description?: never;\n children: ReactNode;\n className?: string;\n};\n\nexport function MetricsCardTitleAndDescription(props: PropsWithTitleDescription | PropsWithChildren) {\n if ('children' in props) {\n return <div className={props.className}>{props.children}</div>;\n }\n\n const { title, description, titleAs } = props;\n\n return (\n <div className={props.className}>\n <MetricsCardTitle as={titleAs}>{title}</MetricsCardTitle>\n {description && <MetricsCardDescription>{description}</MetricsCardDescription>}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardTopBar({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <div className={cn('flex items-start gap-4 [&>:first-child]:min-w-0 [&>:first-child]:flex-1', className)}>\n {children}\n </div>\n );\n}\n","import { MetricsCardActions } from './metrics-card-actions';\nimport { MetricsCardContent } from './metrics-card-content';\nimport { MetricsCardDescription } from './metrics-card-description';\nimport { MetricsCardError } from './metrics-card-error';\nimport { MetricsCardLoading } from './metrics-card-loading';\nimport { MetricsCardNoData } from './metrics-card-no-data';\nimport { MetricsCardRoot } from './metrics-card-root';\nimport { MetricsCardSummary } from './metrics-card-summary';\nimport { MetricsCardTitle } from './metrics-card-title';\nimport { MetricsCardTitleAndDescription } from './metrics-card-title-and-description';\nimport { MetricsCardTopBar } from './metrics-card-top-bar';\nimport { MetricsKpiCard } from '@/ds/components/MetricsKpiCard';\n\nexport const MetricsCard = Object.assign(MetricsCardRoot, {\n Root: MetricsCardRoot,\n Kpi: MetricsKpiCard,\n TopBar: MetricsCardTopBar,\n Actions: MetricsCardActions,\n TitleAndDescription: MetricsCardTitleAndDescription,\n Title: MetricsCardTitle,\n Description: MetricsCardDescription,\n Summary: MetricsCardSummary,\n Loading: MetricsCardLoading,\n Error: MetricsCardError,\n Content: MetricsCardContent,\n NoData: MetricsCardNoData,\n});\n"],"names":[],"mappings":"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"}
@@ -2,10 +2,10 @@
2
2
 
3
3
  const jsxRuntime = require('react/jsx-runtime');
4
4
  const utils_cn = require('./cn-DG0X1KEP.cjs');
5
- const Txt = require('./Txt-DPmEpNbp.cjs');
5
+ const Txt = require('./Txt-DNnvlrBo.cjs');
6
6
  const spinner = require('./spinner-BCpN7LL9.cjs');
7
7
  const Card = require('./Card-BQsKHkyB.cjs');
8
- const metricsKpiCard = require('./metrics-kpi-card-1hbihR2T.cjs');
8
+ const metricsKpiCard = require('./metrics-kpi-card-9L0j_oGY.cjs');
9
9
 
10
10
  function MetricsCardActions({ children, className }) {
11
11
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils_cn.cn("flex shrink-0 items-center gap-1", className), children });
@@ -93,4 +93,4 @@ const MetricsCard = Object.assign(MetricsCardRoot, {
93
93
  });
94
94
 
95
95
  exports.MetricsCard = MetricsCard;
96
- //# sourceMappingURL=metrics-card-D7J9JDgn.cjs.map
96
+ //# sourceMappingURL=metrics-card-xX9SHUpB.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-card-D7J9JDgn.cjs","sources":["../src/ds/components/MetricsCard/metrics-card-actions.tsx","../src/ds/components/MetricsCard/metrics-card-content.tsx","../src/ds/components/MetricsCard/metrics-card-description.tsx","../src/ds/components/MetricsCard/metrics-card-error.tsx","../src/ds/components/MetricsCard/metrics-card-loading.tsx","../src/ds/components/MetricsCard/metrics-card-no-data.tsx","../src/ds/components/MetricsCard/metrics-card-root.tsx","../src/ds/components/MetricsCard/metrics-card-summary.tsx","../src/ds/components/MetricsCard/metrics-card-title.tsx","../src/ds/components/MetricsCard/metrics-card-title-and-description.tsx","../src/ds/components/MetricsCard/metrics-card-top-bar.tsx","../src/ds/components/MetricsCard/metrics-card.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\n/** Container for icon buttons / small actions in the top bar of a MetricsCard,\n * placed alongside `TitleAndDescription` + `Summary`. */\nexport function MetricsCardActions({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cn('flex shrink-0 items-center gap-1', className)}>{children}</div>;\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardContent({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cn('overflow-x-auto', className)}>{children}</div>;\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardDescription({ children, className }: { children: string; className?: string }) {\n return (\n <Txt tone=\"faint\" className={cn('mt-0.5', className)}>\n {children}\n </Txt>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardError({\n message = 'Failed to load data',\n className,\n}: {\n message?: string;\n className?: string;\n}) {\n return (\n <div className={cn('flex flex-col items-center justify-center gap-3', className)}>\n <Txt variant=\"caption\" className=\"text-destructive-foreground\">\n {message}\n </Txt>\n </div>\n );\n}\n","import { Spinner } from '@/ds/components/Spinner/spinner';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardLoading({ className }: { className?: string }) {\n return (\n <div className={cn('flex items-center justify-center', className)}>\n <Spinner size=\"md\" variant=\"pulse\" className=\"text-placeholder\" />\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardNoData({ message = 'No data yet', className }: { message?: string; className?: string }) {\n return (\n <div className={cn('flex h-full items-center justify-center', className)}>\n <Txt tone=\"faint\">{message}</Txt>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Card } from '@/ds/components/Card';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardRoot({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <Card\n className={cn(\n 'grid min-h-72 min-w-80 flex-1 grid-rows-[auto_1fr] gap-4 px-4 py-3 2xl:min-w-120 md:min-w-88 lg:min-w-sm xl:min-w-104',\n className,\n )}\n >\n {children}\n </Card>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardSummary({ value, label, className }: { value: string; label?: string; className?: string }) {\n return (\n <div className={cn('text-right', className)}>\n <Txt tone=\"muted\" className=\"tabular-nums\">\n {value}\n </Txt>\n {label && (\n <Txt tone=\"faint\" className=\"mt-0.5\">\n {label}\n </Txt>\n )}\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsCardTitle({\n children,\n className,\n as: Tag = 'h2',\n}: {\n children: string;\n className?: string;\n as?: 'h2' | 'h3' | 'h4';\n}) {\n return <Tag className={cn('text-body text-foreground', className)}>{children}</Tag>;\n}\n","import type { ReactNode } from 'react';\n\nimport { MetricsCardDescription } from './metrics-card-description';\nimport { MetricsCardTitle } from './metrics-card-title';\n\ntype PropsWithTitleDescription = {\n title: string;\n description?: string;\n titleAs?: 'h2' | 'h3' | 'h4';\n children?: never;\n className?: string;\n};\n\ntype PropsWithChildren = {\n title?: never;\n description?: never;\n children: ReactNode;\n className?: string;\n};\n\nexport function MetricsCardTitleAndDescription(props: PropsWithTitleDescription | PropsWithChildren) {\n if ('children' in props) {\n return <div className={props.className}>{props.children}</div>;\n }\n\n const { title, description, titleAs } = props;\n\n return (\n <div className={props.className}>\n <MetricsCardTitle as={titleAs}>{title}</MetricsCardTitle>\n {description && <MetricsCardDescription>{description}</MetricsCardDescription>}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardTopBar({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <div className={cn('flex items-start gap-4 [&>:first-child]:min-w-0 [&>:first-child]:flex-1', className)}>\n {children}\n </div>\n );\n}\n","import { MetricsCardActions } from './metrics-card-actions';\nimport { MetricsCardContent } from './metrics-card-content';\nimport { MetricsCardDescription } from './metrics-card-description';\nimport { MetricsCardError } from './metrics-card-error';\nimport { MetricsCardLoading } from './metrics-card-loading';\nimport { MetricsCardNoData } from './metrics-card-no-data';\nimport { MetricsCardRoot } from './metrics-card-root';\nimport { MetricsCardSummary } from './metrics-card-summary';\nimport { MetricsCardTitle } from './metrics-card-title';\nimport { MetricsCardTitleAndDescription } from './metrics-card-title-and-description';\nimport { MetricsCardTopBar } from './metrics-card-top-bar';\nimport { MetricsKpiCard } from '@/ds/components/MetricsKpiCard';\n\nexport const MetricsCard = Object.assign(MetricsCardRoot, {\n Root: MetricsCardRoot,\n Kpi: MetricsKpiCard,\n TopBar: MetricsCardTopBar,\n Actions: MetricsCardActions,\n TitleAndDescription: MetricsCardTitleAndDescription,\n Title: MetricsCardTitle,\n Description: MetricsCardDescription,\n Summary: MetricsCardSummary,\n Loading: MetricsCardLoading,\n Error: MetricsCardError,\n Content: MetricsCardContent,\n NoData: MetricsCardNoData,\n});\n"],"names":["cn","jsx","Txt","Spinner","Card","jsxs","MetricsKpiCard"],"mappings":"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"}
1
+ {"version":3,"file":"metrics-card-xX9SHUpB.cjs","sources":["../src/ds/components/MetricsCard/metrics-card-actions.tsx","../src/ds/components/MetricsCard/metrics-card-content.tsx","../src/ds/components/MetricsCard/metrics-card-description.tsx","../src/ds/components/MetricsCard/metrics-card-error.tsx","../src/ds/components/MetricsCard/metrics-card-loading.tsx","../src/ds/components/MetricsCard/metrics-card-no-data.tsx","../src/ds/components/MetricsCard/metrics-card-root.tsx","../src/ds/components/MetricsCard/metrics-card-summary.tsx","../src/ds/components/MetricsCard/metrics-card-title.tsx","../src/ds/components/MetricsCard/metrics-card-title-and-description.tsx","../src/ds/components/MetricsCard/metrics-card-top-bar.tsx","../src/ds/components/MetricsCard/metrics-card.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\n/** Container for icon buttons / small actions in the top bar of a MetricsCard,\n * placed alongside `TitleAndDescription` + `Summary`. */\nexport function MetricsCardActions({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cn('flex shrink-0 items-center gap-1', className)}>{children}</div>;\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardContent({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cn('overflow-x-auto', className)}>{children}</div>;\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardDescription({ children, className }: { children: string; className?: string }) {\n return (\n <Txt tone=\"faint\" className={cn('mt-0.5', className)}>\n {children}\n </Txt>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardError({\n message = 'Failed to load data',\n className,\n}: {\n message?: string;\n className?: string;\n}) {\n return (\n <div className={cn('flex flex-col items-center justify-center gap-3', className)}>\n <Txt variant=\"caption\" className=\"text-destructive-foreground\">\n {message}\n </Txt>\n </div>\n );\n}\n","import { Spinner } from '@/ds/components/Spinner/spinner';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardLoading({ className }: { className?: string }) {\n return (\n <div className={cn('flex items-center justify-center', className)}>\n <Spinner size=\"md\" variant=\"pulse\" className=\"text-placeholder\" />\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardNoData({ message = 'No data yet', className }: { message?: string; className?: string }) {\n return (\n <div className={cn('flex h-full items-center justify-center', className)}>\n <Txt tone=\"faint\">{message}</Txt>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Card } from '@/ds/components/Card';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardRoot({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <Card\n className={cn(\n 'grid min-h-72 min-w-80 flex-1 grid-rows-[auto_1fr] gap-4 px-4 py-3 2xl:min-w-120 md:min-w-88 lg:min-w-sm xl:min-w-104',\n className,\n )}\n >\n {children}\n </Card>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardSummary({ value, label, className }: { value: string; label?: string; className?: string }) {\n return (\n <div className={cn('text-right', className)}>\n <Txt tone=\"muted\" className=\"tabular-nums\">\n {value}\n </Txt>\n {label && (\n <Txt tone=\"faint\" className=\"mt-0.5\">\n {label}\n </Txt>\n )}\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsCardTitle({\n children,\n className,\n as: Tag = 'h2',\n}: {\n children: string;\n className?: string;\n as?: 'h2' | 'h3' | 'h4';\n}) {\n return <Tag className={cn('text-body text-foreground', className)}>{children}</Tag>;\n}\n","import type { ReactNode } from 'react';\n\nimport { MetricsCardDescription } from './metrics-card-description';\nimport { MetricsCardTitle } from './metrics-card-title';\n\ntype PropsWithTitleDescription = {\n title: string;\n description?: string;\n titleAs?: 'h2' | 'h3' | 'h4';\n children?: never;\n className?: string;\n};\n\ntype PropsWithChildren = {\n title?: never;\n description?: never;\n children: ReactNode;\n className?: string;\n};\n\nexport function MetricsCardTitleAndDescription(props: PropsWithTitleDescription | PropsWithChildren) {\n if ('children' in props) {\n return <div className={props.className}>{props.children}</div>;\n }\n\n const { title, description, titleAs } = props;\n\n return (\n <div className={props.className}>\n <MetricsCardTitle as={titleAs}>{title}</MetricsCardTitle>\n {description && <MetricsCardDescription>{description}</MetricsCardDescription>}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardTopBar({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <div className={cn('flex items-start gap-4 [&>:first-child]:min-w-0 [&>:first-child]:flex-1', className)}>\n {children}\n </div>\n );\n}\n","import { MetricsCardActions } from './metrics-card-actions';\nimport { MetricsCardContent } from './metrics-card-content';\nimport { MetricsCardDescription } from './metrics-card-description';\nimport { MetricsCardError } from './metrics-card-error';\nimport { MetricsCardLoading } from './metrics-card-loading';\nimport { MetricsCardNoData } from './metrics-card-no-data';\nimport { MetricsCardRoot } from './metrics-card-root';\nimport { MetricsCardSummary } from './metrics-card-summary';\nimport { MetricsCardTitle } from './metrics-card-title';\nimport { MetricsCardTitleAndDescription } from './metrics-card-title-and-description';\nimport { MetricsCardTopBar } from './metrics-card-top-bar';\nimport { MetricsKpiCard } from '@/ds/components/MetricsKpiCard';\n\nexport const MetricsCard = Object.assign(MetricsCardRoot, {\n Root: MetricsCardRoot,\n Kpi: MetricsKpiCard,\n TopBar: MetricsCardTopBar,\n Actions: MetricsCardActions,\n TitleAndDescription: MetricsCardTitleAndDescription,\n Title: MetricsCardTitle,\n Description: MetricsCardDescription,\n Summary: MetricsCardSummary,\n Loading: MetricsCardLoading,\n Error: MetricsCardError,\n Content: MetricsCardContent,\n NoData: MetricsCardNoData,\n});\n"],"names":["cn","jsx","Txt","Spinner","Card","jsxs","MetricsKpiCard"],"mappings":"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"}
@@ -2,8 +2,8 @@
2
2
 
3
3
  const jsxRuntime = require('react/jsx-runtime');
4
4
  const lucideReact = require('lucide-react');
5
- const Badge = require('./Badge-D3EctKQo.cjs');
6
- const Txt = require('./Txt-DPmEpNbp.cjs');
5
+ const Badge = require('./Badge-DB59RxT5.cjs');
6
+ const Txt = require('./Txt-DNnvlrBo.cjs');
7
7
  const utils_cn = require('./cn-DG0X1KEP.cjs');
8
8
  const spinner = require('./spinner-BCpN7LL9.cjs');
9
9
  const Card = require('./Card-BQsKHkyB.cjs');
@@ -53,7 +53,7 @@ function MetricsKpiCardError({
53
53
  }
54
54
 
55
55
  function MetricsKpiCardLabel({ children, className }) {
56
- return /* @__PURE__ */ jsxRuntime.jsx(Txt.Txt, { as: "span", tone: "ink", className: utils_cn.cn("font-medium", className), children });
56
+ return /* @__PURE__ */ jsxRuntime.jsx(Txt.Txt, { as: "span", variant: "subheading", tone: "ink", className, children });
57
57
  }
58
58
 
59
59
  function MetricsKpiCardLoading({ className }) {
@@ -76,16 +76,7 @@ function MetricsKpiCardRoot({ children, className }) {
76
76
  }
77
77
 
78
78
  function MetricsKpiCardValue({ children, className }) {
79
- return /* @__PURE__ */ jsxRuntime.jsx(
80
- "strong",
81
- {
82
- className: utils_cn.cn(
83
- "text-title font-semibold text-foreground tabular-nums [text-box:trim-both_cap_alphabetic]",
84
- className
85
- ),
86
- children
87
- }
88
- );
79
+ return /* @__PURE__ */ jsxRuntime.jsx("strong", { className: utils_cn.cn("text-title text-foreground tabular-nums [text-box:trim-both_cap_alphabetic]", className), children });
89
80
  }
90
81
 
91
82
  function MetricsKpiCardValueRow({ children, className }) {
@@ -104,4 +95,4 @@ const MetricsKpiCard = Object.assign(MetricsKpiCardRoot, {
104
95
  });
105
96
 
106
97
  exports.MetricsKpiCard = MetricsKpiCard;
107
- //# sourceMappingURL=metrics-kpi-card-1hbihR2T.cjs.map
98
+ //# sourceMappingURL=metrics-kpi-card-9L0j_oGY.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics-kpi-card-9L0j_oGY.cjs","sources":["../src/ds/components/MetricsKpiCard/metrics-kpi-card-change.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-error.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-label.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-loading.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-no-change.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-no-data.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-root.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-value.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-value-row.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card.tsx"],"sourcesContent":["import { ArrowDownRightIcon, ArrowUpRightIcon } from 'lucide-react';\nimport { Badge } from '@/ds/components/Badge';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nconst compact = new Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 });\n\n// Past +1000% a percentage is unreadable, so show how many times bigger the value got instead.\nfunction formatChange(changePct: number) {\n if (changePct >= 1000) return `×${compact.format(1 + changePct / 100)}`;\n const digits = Math.abs(changePct) < 10 ? 1 : 0;\n return `${changePct > 0 ? '+' : ''}${changePct.toFixed(digits)}%`;\n}\n\nexport function MetricsKpiCardChange({\n changePct,\n prevValue,\n lowerIsBetter,\n className,\n}: {\n changePct: number;\n prevValue?: string;\n lowerIsBetter?: boolean;\n className?: string;\n}) {\n const isGood = lowerIsBetter ? changePct < 0 : changePct >= 0;\n const Icon = changePct >= 0 ? ArrowUpRightIcon : ArrowDownRightIcon;\n const formattedChange = formatChange(changePct);\n\n return (\n <div className={cn('flex items-center gap-1.5', className)}>\n <Badge\n variant={isGood ? 'success' : 'destructive'}\n emphasis=\"subtle\"\n size=\"xs\"\n icon={<Icon />}\n className=\"tabular-nums\"\n >\n {formattedChange}\n </Badge>\n <Txt as=\"span\" variant=\"meta\" tone=\"faint\">\n vs prior period\n {prevValue ? <span className=\"sr-only\">, previous value {prevValue}</span> : null}\n </Txt>\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardError({\n message = 'Failed to load data',\n className,\n}: {\n message?: string;\n className?: string;\n}) {\n return (\n <Txt as=\"span\" variant=\"meta\" className={cn('text-destructive-foreground', className)}>\n {message}\n </Txt>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\n\nexport function MetricsKpiCardLabel({ children, className }: { children: string; className?: string }) {\n return (\n <Txt as=\"span\" variant=\"subheading\" tone=\"ink\" className={className}>\n {children}\n </Txt>\n );\n}\n","import { Spinner } from '@/ds/components/Spinner/spinner';\nimport { Txt } from '@/ds/components/Txt';\n\nexport function MetricsKpiCardLoading({ className }: { className?: string }) {\n return (\n <Txt as=\"span\" className={className}>\n <Spinner size=\"md\" variant=\"pulse\" className=\"text-placeholder\" />\n </Txt>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\n\nexport function MetricsKpiCardNoChange({\n message = 'No previous value to compare',\n className,\n}: {\n message?: string;\n className?: string;\n}) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"faint\" className={className}>\n {message}\n </Txt>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\n\nexport function MetricsKpiCardNoData({ message = 'No data yet', className }: { message?: string; className?: string }) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"faint\" className={className}>\n {message}\n </Txt>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Card } from '@/ds/components/Card';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardRoot({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <Card className={cn('min-w-72 flex-1 px-5 py-4', className)}>\n <div className=\"grid gap-1.5\">{children}</div>\n </Card>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardValue({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <strong className={cn('text-title text-foreground tabular-nums [text-box:trim-both_cap_alphabetic]', className)}>\n {children}\n </strong>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardValueRow({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cn('flex min-h-6 flex-wrap items-center gap-x-2 gap-y-1', className)}>{children}</div>;\n}\n","import { MetricsKpiCardChange } from './metrics-kpi-card-change';\nimport { MetricsKpiCardError } from './metrics-kpi-card-error';\nimport { MetricsKpiCardLabel } from './metrics-kpi-card-label';\nimport { MetricsKpiCardLoading } from './metrics-kpi-card-loading';\nimport { MetricsKpiCardNoChange } from './metrics-kpi-card-no-change';\nimport { MetricsKpiCardNoData } from './metrics-kpi-card-no-data';\nimport { MetricsKpiCardRoot } from './metrics-kpi-card-root';\nimport { MetricsKpiCardValue } from './metrics-kpi-card-value';\nimport { MetricsKpiCardValueRow } from './metrics-kpi-card-value-row';\n\nexport const MetricsKpiCard = Object.assign(MetricsKpiCardRoot, {\n Label: MetricsKpiCardLabel,\n ValueRow: MetricsKpiCardValueRow,\n Value: MetricsKpiCardValue,\n Change: MetricsKpiCardChange,\n NoChange: MetricsKpiCardNoChange,\n NoData: MetricsKpiCardNoData,\n Error: MetricsKpiCardError,\n Loading: MetricsKpiCardLoading,\n});\n"],"names":["ArrowUpRightIcon","ArrowDownRightIcon","cn","jsx","Badge","Txt","jsxs","Spinner","Card"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { ArrowUpRightIcon, ArrowDownRightIcon } from 'lucide-react';
3
- import { B as Badge } from './Badge-DmOqFpXW.js';
4
- import { T as Txt } from './Txt-BP1SRHmL.js';
3
+ import { B as Badge } from './Badge-DId-8rYY.js';
4
+ import { T as Txt } from './Txt-C3cYJgKU.js';
5
5
  import { c as cn } from './cn-65Adrsfj.js';
6
6
  import { S as Spinner } from './spinner-ylbE0TJA.js';
7
7
  import { C as Card } from './Card-DVy0QS4m.js';
@@ -51,7 +51,7 @@ function MetricsKpiCardError({
51
51
  }
52
52
 
53
53
  function MetricsKpiCardLabel({ children, className }) {
54
- return /* @__PURE__ */ jsx(Txt, { as: "span", tone: "ink", className: cn("font-medium", className), children });
54
+ return /* @__PURE__ */ jsx(Txt, { as: "span", variant: "subheading", tone: "ink", className, children });
55
55
  }
56
56
 
57
57
  function MetricsKpiCardLoading({ className }) {
@@ -74,16 +74,7 @@ function MetricsKpiCardRoot({ children, className }) {
74
74
  }
75
75
 
76
76
  function MetricsKpiCardValue({ children, className }) {
77
- return /* @__PURE__ */ jsx(
78
- "strong",
79
- {
80
- className: cn(
81
- "text-title font-semibold text-foreground tabular-nums [text-box:trim-both_cap_alphabetic]",
82
- className
83
- ),
84
- children
85
- }
86
- );
77
+ return /* @__PURE__ */ jsx("strong", { className: cn("text-title text-foreground tabular-nums [text-box:trim-both_cap_alphabetic]", className), children });
87
78
  }
88
79
 
89
80
  function MetricsKpiCardValueRow({ children, className }) {
@@ -102,4 +93,4 @@ const MetricsKpiCard = Object.assign(MetricsKpiCardRoot, {
102
93
  });
103
94
 
104
95
  export { MetricsKpiCard as M };
105
- //# sourceMappingURL=metrics-kpi-card-CiB88L41.js.map
96
+ //# sourceMappingURL=metrics-kpi-card-DxcLqbDU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics-kpi-card-DxcLqbDU.js","sources":["../src/ds/components/MetricsKpiCard/metrics-kpi-card-change.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-error.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-label.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-loading.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-no-change.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-no-data.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-root.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-value.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-value-row.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card.tsx"],"sourcesContent":["import { ArrowDownRightIcon, ArrowUpRightIcon } from 'lucide-react';\nimport { Badge } from '@/ds/components/Badge';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nconst compact = new Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 });\n\n// Past +1000% a percentage is unreadable, so show how many times bigger the value got instead.\nfunction formatChange(changePct: number) {\n if (changePct >= 1000) return `×${compact.format(1 + changePct / 100)}`;\n const digits = Math.abs(changePct) < 10 ? 1 : 0;\n return `${changePct > 0 ? '+' : ''}${changePct.toFixed(digits)}%`;\n}\n\nexport function MetricsKpiCardChange({\n changePct,\n prevValue,\n lowerIsBetter,\n className,\n}: {\n changePct: number;\n prevValue?: string;\n lowerIsBetter?: boolean;\n className?: string;\n}) {\n const isGood = lowerIsBetter ? changePct < 0 : changePct >= 0;\n const Icon = changePct >= 0 ? ArrowUpRightIcon : ArrowDownRightIcon;\n const formattedChange = formatChange(changePct);\n\n return (\n <div className={cn('flex items-center gap-1.5', className)}>\n <Badge\n variant={isGood ? 'success' : 'destructive'}\n emphasis=\"subtle\"\n size=\"xs\"\n icon={<Icon />}\n className=\"tabular-nums\"\n >\n {formattedChange}\n </Badge>\n <Txt as=\"span\" variant=\"meta\" tone=\"faint\">\n vs prior period\n {prevValue ? <span className=\"sr-only\">, previous value {prevValue}</span> : null}\n </Txt>\n </div>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardError({\n message = 'Failed to load data',\n className,\n}: {\n message?: string;\n className?: string;\n}) {\n return (\n <Txt as=\"span\" variant=\"meta\" className={cn('text-destructive-foreground', className)}>\n {message}\n </Txt>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\n\nexport function MetricsKpiCardLabel({ children, className }: { children: string; className?: string }) {\n return (\n <Txt as=\"span\" variant=\"subheading\" tone=\"ink\" className={className}>\n {children}\n </Txt>\n );\n}\n","import { Spinner } from '@/ds/components/Spinner/spinner';\nimport { Txt } from '@/ds/components/Txt';\n\nexport function MetricsKpiCardLoading({ className }: { className?: string }) {\n return (\n <Txt as=\"span\" className={className}>\n <Spinner size=\"md\" variant=\"pulse\" className=\"text-placeholder\" />\n </Txt>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\n\nexport function MetricsKpiCardNoChange({\n message = 'No previous value to compare',\n className,\n}: {\n message?: string;\n className?: string;\n}) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"faint\" className={className}>\n {message}\n </Txt>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\n\nexport function MetricsKpiCardNoData({ message = 'No data yet', className }: { message?: string; className?: string }) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"faint\" className={className}>\n {message}\n </Txt>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Card } from '@/ds/components/Card';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardRoot({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <Card className={cn('min-w-72 flex-1 px-5 py-4', className)}>\n <div className=\"grid gap-1.5\">{children}</div>\n </Card>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardValue({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <strong className={cn('text-title text-foreground tabular-nums [text-box:trim-both_cap_alphabetic]', className)}>\n {children}\n </strong>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardValueRow({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cn('flex min-h-6 flex-wrap items-center gap-x-2 gap-y-1', className)}>{children}</div>;\n}\n","import { MetricsKpiCardChange } from './metrics-kpi-card-change';\nimport { MetricsKpiCardError } from './metrics-kpi-card-error';\nimport { MetricsKpiCardLabel } from './metrics-kpi-card-label';\nimport { MetricsKpiCardLoading } from './metrics-kpi-card-loading';\nimport { MetricsKpiCardNoChange } from './metrics-kpi-card-no-change';\nimport { MetricsKpiCardNoData } from './metrics-kpi-card-no-data';\nimport { MetricsKpiCardRoot } from './metrics-kpi-card-root';\nimport { MetricsKpiCardValue } from './metrics-kpi-card-value';\nimport { MetricsKpiCardValueRow } from './metrics-kpi-card-value-row';\n\nexport const MetricsKpiCard = Object.assign(MetricsKpiCardRoot, {\n Label: MetricsKpiCardLabel,\n ValueRow: MetricsKpiCardValueRow,\n Value: MetricsKpiCardValue,\n Change: MetricsKpiCardChange,\n NoChange: MetricsKpiCardNoChange,\n NoData: MetricsKpiCardNoData,\n Error: MetricsKpiCardError,\n Loading: MetricsKpiCardLoading,\n});\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { ResponsiveContainer, LineChart, CartesianGrid, XAxis, YAxis, Tooltip, Line } from 'recharts';
3
- import { M as MetricsLineChartLegend, a as MetricsLineChartTooltip } from './metrics-line-chart-tooltip-mZXPH1yH.js';
3
+ import { M as MetricsLineChartLegend, a as MetricsLineChartTooltip } from './metrics-line-chart-tooltip-C3WAk3DN.js';
4
4
  import { CHART_LABEL_COLOR, CHART_TICK_FONT_SIZE } from './tokens.es.js';
5
5
 
6
6
  const compactNumber = new Intl.NumberFormat("en", { notation: "compact", maximumFractionDigits: 1 });
@@ -99,4 +99,4 @@ function MetricsLineChart({
99
99
  }
100
100
 
101
101
  export { MetricsLineChart as M };
102
- //# sourceMappingURL=metrics-line-chart-C3UMBQ38.js.map
102
+ //# sourceMappingURL=metrics-line-chart-C9_EMuHK.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-line-chart-C3UMBQ38.js","sources":["../src/ds/components/MetricsLineChart/metrics-line-chart.tsx"],"sourcesContent":["import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts';\nimport { MetricsLineChartLegend } from './metrics-line-chart-legend';\nimport { MetricsLineChartTooltip } from './metrics-line-chart-tooltip';\nimport { CHART_LABEL_COLOR, CHART_TICK_FONT_SIZE } from '@/ds/tokens';\n\nexport type MetricsLineChartSeries = {\n dataKey: string;\n label: string;\n color: string;\n aggregate?: (data: Record<string, unknown>[]) => { value: string; suffix?: string };\n};\n\nconst compactNumber = new Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 });\n\n// Positioned via transform so the hover line glides between points instead of jumping.\nfunction SmoothCursor({ points }: { points?: { x: number; y: number }[] }) {\n const [top, bottom] = points ?? [];\n if (!top || !bottom) return null;\n return (\n <line\n x1={0}\n x2={0}\n y1={top.y}\n y2={bottom.y}\n stroke=\"currentColor\"\n strokeOpacity={0.2}\n strokeWidth={1}\n className=\"pointer-events-none text-black transition-transform duration-150 ease-out dark:text-white\"\n style={{ transform: `translateX(${top.x}px)` }}\n />\n );\n}\n\nexport type MetricsLineChartPointClickHandler = (point: Record<string, unknown>, seriesKey: string) => void;\n\nexport function MetricsLineChart({\n data,\n series,\n height = 210,\n yDomain,\n onPointClick,\n xAxisInterval = 'preserveStartEnd',\n xAxisMinTickGap = 28,\n showDots = false,\n showLegend = true,\n}: {\n data: Record<string, unknown>[];\n series: MetricsLineChartSeries[];\n height?: number;\n yDomain?: [number, number];\n onPointClick?: MetricsLineChartPointClickHandler;\n /** X-axis tick density. Defaults to `\"preserveStartEnd\"`, which drops labels\n * to fit the chart width. Pass a number for a fixed step instead. */\n xAxisInterval?: number | 'preserveStart' | 'preserveEnd' | 'preserveStartEnd';\n /** Minimum px gap between rendered ticks; recharts drops labels to honor it. Default `28`. */\n xAxisMinTickGap?: number;\n /** Render a visible dot on every point (needed for single-point series). */\n showDots?: boolean;\n /** Set to `false` to render `MetricsLineChartLegend` elsewhere, e.g. next to tabs. */\n showLegend?: boolean;\n}) {\n const isClickable = typeof onPointClick === 'function';\n\n return (\n <div>\n {showLegend && <MetricsLineChartLegend data={data} series={series} className=\"mb-4\" />}\n <div style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart data={data} margin={{ top: 5, right: 5, bottom: 5, left: 0 }}>\n <CartesianGrid\n stroke=\"currentColor\"\n strokeOpacity={0.08}\n strokeDasharray=\"4 4\"\n vertical={false}\n className=\"text-black dark:text-white\"\n />\n <XAxis\n dataKey=\"time\"\n tick={{ fontSize: CHART_TICK_FONT_SIZE, fill: CHART_LABEL_COLOR, fontFamily: 'var(--font-mono)' }}\n tickLine={false}\n axisLine={false}\n interval={xAxisInterval}\n minTickGap={xAxisMinTickGap}\n />\n <YAxis\n tick={{ fontSize: CHART_TICK_FONT_SIZE, fill: CHART_LABEL_COLOR, fontFamily: 'var(--font-mono)' }}\n tickLine={false}\n axisLine={false}\n width=\"auto\"\n tickFormatter={(value: number) => compactNumber.format(value)}\n domain={yDomain}\n tickCount={3}\n />\n <Tooltip content={<MetricsLineChartTooltip />} cursor={<SmoothCursor />} />\n {series.map(s => (\n <Line\n key={s.dataKey}\n type=\"linear\"\n dataKey={s.dataKey}\n stroke={s.color}\n strokeWidth={2}\n dot={showDots ? { r: 3, fill: s.color, strokeWidth: 0 } : false}\n activeDot={\n isClickable\n ? {\n r: 4,\n stroke: s.color,\n strokeOpacity: 0.3,\n strokeWidth: 4,\n style: { cursor: 'pointer' },\n onClick: (_: unknown, payload: unknown) => {\n const datum = (payload as { payload?: Record<string, unknown> } | undefined)?.payload;\n if (datum) onPointClick(datum, s.dataKey);\n },\n }\n : { r: 4, stroke: s.color, strokeOpacity: 0.3, strokeWidth: 4 }\n }\n name={s.label}\n />\n ))}\n </LineChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics-line-chart-C9_EMuHK.js","sources":["../src/ds/components/MetricsLineChart/metrics-line-chart.tsx"],"sourcesContent":["import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts';\nimport { MetricsLineChartLegend } from './metrics-line-chart-legend';\nimport { MetricsLineChartTooltip } from './metrics-line-chart-tooltip';\nimport { CHART_LABEL_COLOR, CHART_TICK_FONT_SIZE } from '@/ds/tokens';\n\nexport type MetricsLineChartSeries = {\n dataKey: string;\n label: string;\n color: string;\n aggregate?: (data: Record<string, unknown>[]) => { value: string; suffix?: string };\n};\n\nconst compactNumber = new Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 });\n\n// Positioned via transform so the hover line glides between points instead of jumping.\nfunction SmoothCursor({ points }: { points?: { x: number; y: number }[] }) {\n const [top, bottom] = points ?? [];\n if (!top || !bottom) return null;\n return (\n <line\n x1={0}\n x2={0}\n y1={top.y}\n y2={bottom.y}\n stroke=\"currentColor\"\n strokeOpacity={0.2}\n strokeWidth={1}\n className=\"pointer-events-none text-black transition-transform duration-150 ease-out dark:text-white\"\n style={{ transform: `translateX(${top.x}px)` }}\n />\n );\n}\n\nexport type MetricsLineChartPointClickHandler = (point: Record<string, unknown>, seriesKey: string) => void;\n\nexport function MetricsLineChart({\n data,\n series,\n height = 210,\n yDomain,\n onPointClick,\n xAxisInterval = 'preserveStartEnd',\n xAxisMinTickGap = 28,\n showDots = false,\n showLegend = true,\n}: {\n data: Record<string, unknown>[];\n series: MetricsLineChartSeries[];\n height?: number;\n yDomain?: [number, number];\n onPointClick?: MetricsLineChartPointClickHandler;\n /** X-axis tick density. Defaults to `\"preserveStartEnd\"`, which drops labels\n * to fit the chart width. Pass a number for a fixed step instead. */\n xAxisInterval?: number | 'preserveStart' | 'preserveEnd' | 'preserveStartEnd';\n /** Minimum px gap between rendered ticks; recharts drops labels to honor it. Default `28`. */\n xAxisMinTickGap?: number;\n /** Render a visible dot on every point (needed for single-point series). */\n showDots?: boolean;\n /** Set to `false` to render `MetricsLineChartLegend` elsewhere, e.g. next to tabs. */\n showLegend?: boolean;\n}) {\n const isClickable = typeof onPointClick === 'function';\n\n return (\n <div>\n {showLegend && <MetricsLineChartLegend data={data} series={series} className=\"mb-4\" />}\n <div style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart data={data} margin={{ top: 5, right: 5, bottom: 5, left: 0 }}>\n <CartesianGrid\n stroke=\"currentColor\"\n strokeOpacity={0.08}\n strokeDasharray=\"4 4\"\n vertical={false}\n className=\"text-black dark:text-white\"\n />\n <XAxis\n dataKey=\"time\"\n tick={{ fontSize: CHART_TICK_FONT_SIZE, fill: CHART_LABEL_COLOR, fontFamily: 'var(--font-mono)' }}\n tickLine={false}\n axisLine={false}\n interval={xAxisInterval}\n minTickGap={xAxisMinTickGap}\n />\n <YAxis\n tick={{ fontSize: CHART_TICK_FONT_SIZE, fill: CHART_LABEL_COLOR, fontFamily: 'var(--font-mono)' }}\n tickLine={false}\n axisLine={false}\n width=\"auto\"\n tickFormatter={(value: number) => compactNumber.format(value)}\n domain={yDomain}\n tickCount={3}\n />\n <Tooltip content={<MetricsLineChartTooltip />} cursor={<SmoothCursor />} />\n {series.map(s => (\n <Line\n key={s.dataKey}\n type=\"linear\"\n dataKey={s.dataKey}\n stroke={s.color}\n strokeWidth={2}\n dot={showDots ? { r: 3, fill: s.color, strokeWidth: 0 } : false}\n activeDot={\n isClickable\n ? {\n r: 4,\n stroke: s.color,\n strokeOpacity: 0.3,\n strokeWidth: 4,\n style: { cursor: 'pointer' },\n onClick: (_: unknown, payload: unknown) => {\n const datum = (payload as { payload?: Record<string, unknown> } | undefined)?.payload;\n if (datum) onPointClick(datum, s.dataKey);\n },\n }\n : { r: 4, stroke: s.color, strokeOpacity: 0.3, strokeWidth: 4 }\n }\n name={s.label}\n />\n ))}\n </LineChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  const jsxRuntime = require('react/jsx-runtime');
4
4
  const recharts = require('recharts');
5
- const metricsLineChartTooltip = require('./metrics-line-chart-tooltip-DiXCgpik.cjs');
5
+ const metricsLineChartTooltip = require('./metrics-line-chart-tooltip-BoG8nbkO.cjs');
6
6
  const tokens = require('./tokens.cjs.js');
7
7
 
8
8
  const compactNumber = new Intl.NumberFormat("en", { notation: "compact", maximumFractionDigits: 1 });
@@ -101,4 +101,4 @@ function MetricsLineChart({
101
101
  }
102
102
 
103
103
  exports.MetricsLineChart = MetricsLineChart;
104
- //# sourceMappingURL=metrics-line-chart-CjJxBbM-.cjs.map
104
+ //# sourceMappingURL=metrics-line-chart-R-T_jyeP.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-line-chart-CjJxBbM-.cjs","sources":["../src/ds/components/MetricsLineChart/metrics-line-chart.tsx"],"sourcesContent":["import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts';\nimport { MetricsLineChartLegend } from './metrics-line-chart-legend';\nimport { MetricsLineChartTooltip } from './metrics-line-chart-tooltip';\nimport { CHART_LABEL_COLOR, CHART_TICK_FONT_SIZE } from '@/ds/tokens';\n\nexport type MetricsLineChartSeries = {\n dataKey: string;\n label: string;\n color: string;\n aggregate?: (data: Record<string, unknown>[]) => { value: string; suffix?: string };\n};\n\nconst compactNumber = new Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 });\n\n// Positioned via transform so the hover line glides between points instead of jumping.\nfunction SmoothCursor({ points }: { points?: { x: number; y: number }[] }) {\n const [top, bottom] = points ?? [];\n if (!top || !bottom) return null;\n return (\n <line\n x1={0}\n x2={0}\n y1={top.y}\n y2={bottom.y}\n stroke=\"currentColor\"\n strokeOpacity={0.2}\n strokeWidth={1}\n className=\"pointer-events-none text-black transition-transform duration-150 ease-out dark:text-white\"\n style={{ transform: `translateX(${top.x}px)` }}\n />\n );\n}\n\nexport type MetricsLineChartPointClickHandler = (point: Record<string, unknown>, seriesKey: string) => void;\n\nexport function MetricsLineChart({\n data,\n series,\n height = 210,\n yDomain,\n onPointClick,\n xAxisInterval = 'preserveStartEnd',\n xAxisMinTickGap = 28,\n showDots = false,\n showLegend = true,\n}: {\n data: Record<string, unknown>[];\n series: MetricsLineChartSeries[];\n height?: number;\n yDomain?: [number, number];\n onPointClick?: MetricsLineChartPointClickHandler;\n /** X-axis tick density. Defaults to `\"preserveStartEnd\"`, which drops labels\n * to fit the chart width. Pass a number for a fixed step instead. */\n xAxisInterval?: number | 'preserveStart' | 'preserveEnd' | 'preserveStartEnd';\n /** Minimum px gap between rendered ticks; recharts drops labels to honor it. Default `28`. */\n xAxisMinTickGap?: number;\n /** Render a visible dot on every point (needed for single-point series). */\n showDots?: boolean;\n /** Set to `false` to render `MetricsLineChartLegend` elsewhere, e.g. next to tabs. */\n showLegend?: boolean;\n}) {\n const isClickable = typeof onPointClick === 'function';\n\n return (\n <div>\n {showLegend && <MetricsLineChartLegend data={data} series={series} className=\"mb-4\" />}\n <div style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart data={data} margin={{ top: 5, right: 5, bottom: 5, left: 0 }}>\n <CartesianGrid\n stroke=\"currentColor\"\n strokeOpacity={0.08}\n strokeDasharray=\"4 4\"\n vertical={false}\n className=\"text-black dark:text-white\"\n />\n <XAxis\n dataKey=\"time\"\n tick={{ fontSize: CHART_TICK_FONT_SIZE, fill: CHART_LABEL_COLOR, fontFamily: 'var(--font-mono)' }}\n tickLine={false}\n axisLine={false}\n interval={xAxisInterval}\n minTickGap={xAxisMinTickGap}\n />\n <YAxis\n tick={{ fontSize: CHART_TICK_FONT_SIZE, fill: CHART_LABEL_COLOR, fontFamily: 'var(--font-mono)' }}\n tickLine={false}\n axisLine={false}\n width=\"auto\"\n tickFormatter={(value: number) => compactNumber.format(value)}\n domain={yDomain}\n tickCount={3}\n />\n <Tooltip content={<MetricsLineChartTooltip />} cursor={<SmoothCursor />} />\n {series.map(s => (\n <Line\n key={s.dataKey}\n type=\"linear\"\n dataKey={s.dataKey}\n stroke={s.color}\n strokeWidth={2}\n dot={showDots ? { r: 3, fill: s.color, strokeWidth: 0 } : false}\n activeDot={\n isClickable\n ? {\n r: 4,\n stroke: s.color,\n strokeOpacity: 0.3,\n strokeWidth: 4,\n style: { cursor: 'pointer' },\n onClick: (_: unknown, payload: unknown) => {\n const datum = (payload as { payload?: Record<string, unknown> } | undefined)?.payload;\n if (datum) onPointClick(datum, s.dataKey);\n },\n }\n : { r: 4, stroke: s.color, strokeOpacity: 0.3, strokeWidth: 4 }\n }\n name={s.label}\n />\n ))}\n </LineChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n"],"names":["jsx","MetricsLineChartLegend","ResponsiveContainer","LineChart","CartesianGrid","XAxis","CHART_TICK_FONT_SIZE","CHART_LABEL_COLOR","YAxis","Tooltip","MetricsLineChartTooltip","Line"],"mappings":";;;;;;;AAYA,MAAM,aAAA,GAAgB,IAAI,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,EAAE,QAAA,EAAU,SAAA,EAAW,qBAAA,EAAuB,CAAA,EAAG,CAAA;AAGnG,SAAS,YAAA,CAAa,EAAE,MAAA,EAAO,EAA4C;AACzE,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,UAAU,EAAC;AACjC,EAAA,IAAI,CAAC,GAAA,IAAO,CAAC,MAAA,EAAQ,OAAO,IAAA;AAC5B,EAAA,uBACEA,cAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,CAAA;AAAA,MACJ,EAAA,EAAI,CAAA;AAAA,MACJ,IAAI,GAAA,CAAI,CAAA;AAAA,MACR,IAAI,MAAA,CAAO,CAAA;AAAA,MACX,MAAA,EAAO,cAAA;AAAA,MACP,aAAA,EAAe,GAAA;AAAA,MACf,WAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAU,2FAAA;AAAA,MACV,OAAO,EAAE,SAAA,EAAW,CAAA,WAAA,EAAc,GAAA,CAAI,CAAC,CAAA,GAAA,CAAA;AAAM;AAAA,GAC/C;AAEJ;AAIO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,IAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA,GAAS,GAAA;AAAA,EACT,OAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA,GAAgB,kBAAA;AAAA,EAChB,eAAA,GAAkB,EAAA;AAAA,EAClB,QAAA,GAAW,KAAA;AAAA,EACX,UAAA,GAAa;AACf,CAAA,EAeG;AACD,EAAA,MAAM,WAAA,GAAc,OAAO,YAAA,KAAiB,UAAA;AAE5C,EAAA,uCACG,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,UAAA,oBAAcA,cAAA,CAACC,8CAAA,EAAA,EAAuB,IAAA,EAAY,MAAA,EAAgB,WAAU,MAAA,EAAO,CAAA;AAAA,oBACpFD,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,MAAA,IACZ,QAAA,kBAAAA,cAAA,CAACE,4BAAA,EAAA,EAAoB,KAAA,EAAM,MAAA,EAAO,MAAA,EAAO,MAAA,EACvC,0CAACC,kBAAA,EAAA,EAAU,IAAA,EAAY,MAAA,EAAQ,EAAE,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,CAAA,EAAE,EACpE,QAAA,EAAA;AAAA,sBAAAH,cAAA;AAAA,QAACI,sBAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAO,cAAA;AAAA,UACP,aAAA,EAAe,IAAA;AAAA,UACf,eAAA,EAAgB,KAAA;AAAA,UAChB,QAAA,EAAU,KAAA;AAAA,UACV,SAAA,EAAU;AAAA;AAAA,OACZ;AAAA,sBACAJ,cAAA;AAAA,QAACK,cAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,MAAA;AAAA,UACR,MAAM,EAAE,QAAA,EAAUC,6BAAsB,IAAA,EAAMC,wBAAA,EAAmB,YAAY,kBAAA,EAAmB;AAAA,UAChG,QAAA,EAAU,KAAA;AAAA,UACV,QAAA,EAAU,KAAA;AAAA,UACV,QAAA,EAAU,aAAA;AAAA,UACV,UAAA,EAAY;AAAA;AAAA,OACd;AAAA,sBACAP,cAAA;AAAA,QAACQ,cAAA;AAAA,QAAA;AAAA,UACC,MAAM,EAAE,QAAA,EAAUF,6BAAsB,IAAA,EAAMC,wBAAA,EAAmB,YAAY,kBAAA,EAAmB;AAAA,UAChG,QAAA,EAAU,KAAA;AAAA,UACV,QAAA,EAAU,KAAA;AAAA,UACV,KAAA,EAAM,MAAA;AAAA,UACN,aAAA,EAAe,CAAC,KAAA,KAAkB,aAAA,CAAc,OAAO,KAAK,CAAA;AAAA,UAC5D,MAAA,EAAQ,OAAA;AAAA,UACR,SAAA,EAAW;AAAA;AAAA,OACb;AAAA,sBACAP,cAAA,CAACS,oBAAQ,OAAA,kBAAST,cAAA,CAACU,mDAAwB,CAAA,EAAI,MAAA,kBAAQV,cAAA,CAAC,YAAA,EAAA,EAAa,CAAA,EAAI,CAAA;AAAA,MACxE,MAAA,CAAO,IAAI,CAAA,CAAA,qBACVA,cAAA;AAAA,QAACW,aAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,SAAS,CAAA,CAAE,OAAA;AAAA,UACX,QAAQ,CAAA,CAAE,KAAA;AAAA,UACV,WAAA,EAAa,CAAA;AAAA,UACb,GAAA,EAAK,QAAA,GAAW,EAAE,CAAA,EAAG,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,EAAO,WAAA,EAAa,CAAA,EAAE,GAAI,KAAA;AAAA,UAC1D,WACE,WAAA,GACI;AAAA,YACE,CAAA,EAAG,CAAA;AAAA,YACH,QAAQ,CAAA,CAAE,KAAA;AAAA,YACV,aAAA,EAAe,GAAA;AAAA,YACf,WAAA,EAAa,CAAA;AAAA,YACb,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAU;AAAA,YAC3B,OAAA,EAAS,CAAC,CAAA,EAAY,OAAA,KAAqB;AACzC,cAAA,MAAM,QAAS,OAAA,EAA+D,OAAA;AAC9E,cAAA,IAAI,KAAA,EAAO,YAAA,CAAa,KAAA,EAAO,CAAA,CAAE,OAAO,CAAA;AAAA,YAC1C;AAAA,WACF,GACA,EAAE,CAAA,EAAG,CAAA,EAAG,MAAA,EAAQ,EAAE,KAAA,EAAO,aAAA,EAAe,GAAA,EAAK,WAAA,EAAa,CAAA,EAAE;AAAA,UAElE,MAAM,CAAA,CAAE;AAAA,SAAA;AAAA,QArBH,CAAA,CAAE;AAAA,OAuBV;AAAA,KAAA,EACH,GACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"metrics-line-chart-R-T_jyeP.cjs","sources":["../src/ds/components/MetricsLineChart/metrics-line-chart.tsx"],"sourcesContent":["import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts';\nimport { MetricsLineChartLegend } from './metrics-line-chart-legend';\nimport { MetricsLineChartTooltip } from './metrics-line-chart-tooltip';\nimport { CHART_LABEL_COLOR, CHART_TICK_FONT_SIZE } from '@/ds/tokens';\n\nexport type MetricsLineChartSeries = {\n dataKey: string;\n label: string;\n color: string;\n aggregate?: (data: Record<string, unknown>[]) => { value: string; suffix?: string };\n};\n\nconst compactNumber = new Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 });\n\n// Positioned via transform so the hover line glides between points instead of jumping.\nfunction SmoothCursor({ points }: { points?: { x: number; y: number }[] }) {\n const [top, bottom] = points ?? [];\n if (!top || !bottom) return null;\n return (\n <line\n x1={0}\n x2={0}\n y1={top.y}\n y2={bottom.y}\n stroke=\"currentColor\"\n strokeOpacity={0.2}\n strokeWidth={1}\n className=\"pointer-events-none text-black transition-transform duration-150 ease-out dark:text-white\"\n style={{ transform: `translateX(${top.x}px)` }}\n />\n );\n}\n\nexport type MetricsLineChartPointClickHandler = (point: Record<string, unknown>, seriesKey: string) => void;\n\nexport function MetricsLineChart({\n data,\n series,\n height = 210,\n yDomain,\n onPointClick,\n xAxisInterval = 'preserveStartEnd',\n xAxisMinTickGap = 28,\n showDots = false,\n showLegend = true,\n}: {\n data: Record<string, unknown>[];\n series: MetricsLineChartSeries[];\n height?: number;\n yDomain?: [number, number];\n onPointClick?: MetricsLineChartPointClickHandler;\n /** X-axis tick density. Defaults to `\"preserveStartEnd\"`, which drops labels\n * to fit the chart width. Pass a number for a fixed step instead. */\n xAxisInterval?: number | 'preserveStart' | 'preserveEnd' | 'preserveStartEnd';\n /** Minimum px gap between rendered ticks; recharts drops labels to honor it. Default `28`. */\n xAxisMinTickGap?: number;\n /** Render a visible dot on every point (needed for single-point series). */\n showDots?: boolean;\n /** Set to `false` to render `MetricsLineChartLegend` elsewhere, e.g. next to tabs. */\n showLegend?: boolean;\n}) {\n const isClickable = typeof onPointClick === 'function';\n\n return (\n <div>\n {showLegend && <MetricsLineChartLegend data={data} series={series} className=\"mb-4\" />}\n <div style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart data={data} margin={{ top: 5, right: 5, bottom: 5, left: 0 }}>\n <CartesianGrid\n stroke=\"currentColor\"\n strokeOpacity={0.08}\n strokeDasharray=\"4 4\"\n vertical={false}\n className=\"text-black dark:text-white\"\n />\n <XAxis\n dataKey=\"time\"\n tick={{ fontSize: CHART_TICK_FONT_SIZE, fill: CHART_LABEL_COLOR, fontFamily: 'var(--font-mono)' }}\n tickLine={false}\n axisLine={false}\n interval={xAxisInterval}\n minTickGap={xAxisMinTickGap}\n />\n <YAxis\n tick={{ fontSize: CHART_TICK_FONT_SIZE, fill: CHART_LABEL_COLOR, fontFamily: 'var(--font-mono)' }}\n tickLine={false}\n axisLine={false}\n width=\"auto\"\n tickFormatter={(value: number) => compactNumber.format(value)}\n domain={yDomain}\n tickCount={3}\n />\n <Tooltip content={<MetricsLineChartTooltip />} cursor={<SmoothCursor />} />\n {series.map(s => (\n <Line\n key={s.dataKey}\n type=\"linear\"\n dataKey={s.dataKey}\n stroke={s.color}\n strokeWidth={2}\n dot={showDots ? { r: 3, fill: s.color, strokeWidth: 0 } : false}\n activeDot={\n isClickable\n ? {\n r: 4,\n stroke: s.color,\n strokeOpacity: 0.3,\n strokeWidth: 4,\n style: { cursor: 'pointer' },\n onClick: (_: unknown, payload: unknown) => {\n const datum = (payload as { payload?: Record<string, unknown> } | undefined)?.payload;\n if (datum) onPointClick(datum, s.dataKey);\n },\n }\n : { r: 4, stroke: s.color, strokeOpacity: 0.3, strokeWidth: 4 }\n }\n name={s.label}\n />\n ))}\n </LineChart>\n </ResponsiveContainer>\n </div>\n </div>\n );\n}\n"],"names":["jsx","MetricsLineChartLegend","ResponsiveContainer","LineChart","CartesianGrid","XAxis","CHART_TICK_FONT_SIZE","CHART_LABEL_COLOR","YAxis","Tooltip","MetricsLineChartTooltip","Line"],"mappings":";;;;;;;AAYA,MAAM,aAAA,GAAgB,IAAI,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,EAAE,QAAA,EAAU,SAAA,EAAW,qBAAA,EAAuB,CAAA,EAAG,CAAA;AAGnG,SAAS,YAAA,CAAa,EAAE,MAAA,EAAO,EAA4C;AACzE,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,UAAU,EAAC;AACjC,EAAA,IAAI,CAAC,GAAA,IAAO,CAAC,MAAA,EAAQ,OAAO,IAAA;AAC5B,EAAA,uBACEA,cAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,CAAA;AAAA,MACJ,EAAA,EAAI,CAAA;AAAA,MACJ,IAAI,GAAA,CAAI,CAAA;AAAA,MACR,IAAI,MAAA,CAAO,CAAA;AAAA,MACX,MAAA,EAAO,cAAA;AAAA,MACP,aAAA,EAAe,GAAA;AAAA,MACf,WAAA,EAAa,CAAA;AAAA,MACb,SAAA,EAAU,2FAAA;AAAA,MACV,OAAO,EAAE,SAAA,EAAW,CAAA,WAAA,EAAc,GAAA,CAAI,CAAC,CAAA,GAAA,CAAA;AAAM;AAAA,GAC/C;AAEJ;AAIO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,IAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA,GAAS,GAAA;AAAA,EACT,OAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA,GAAgB,kBAAA;AAAA,EAChB,eAAA,GAAkB,EAAA;AAAA,EAClB,QAAA,GAAW,KAAA;AAAA,EACX,UAAA,GAAa;AACf,CAAA,EAeG;AACD,EAAA,MAAM,WAAA,GAAc,OAAO,YAAA,KAAiB,UAAA;AAE5C,EAAA,uCACG,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,UAAA,oBAAcA,cAAA,CAACC,8CAAA,EAAA,EAAuB,IAAA,EAAY,MAAA,EAAgB,WAAU,MAAA,EAAO,CAAA;AAAA,oBACpFD,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,MAAA,IACZ,QAAA,kBAAAA,cAAA,CAACE,4BAAA,EAAA,EAAoB,KAAA,EAAM,MAAA,EAAO,MAAA,EAAO,MAAA,EACvC,0CAACC,kBAAA,EAAA,EAAU,IAAA,EAAY,MAAA,EAAQ,EAAE,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,CAAA,EAAE,EACpE,QAAA,EAAA;AAAA,sBAAAH,cAAA;AAAA,QAACI,sBAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAO,cAAA;AAAA,UACP,aAAA,EAAe,IAAA;AAAA,UACf,eAAA,EAAgB,KAAA;AAAA,UAChB,QAAA,EAAU,KAAA;AAAA,UACV,SAAA,EAAU;AAAA;AAAA,OACZ;AAAA,sBACAJ,cAAA;AAAA,QAACK,cAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,MAAA;AAAA,UACR,MAAM,EAAE,QAAA,EAAUC,6BAAsB,IAAA,EAAMC,wBAAA,EAAmB,YAAY,kBAAA,EAAmB;AAAA,UAChG,QAAA,EAAU,KAAA;AAAA,UACV,QAAA,EAAU,KAAA;AAAA,UACV,QAAA,EAAU,aAAA;AAAA,UACV,UAAA,EAAY;AAAA;AAAA,OACd;AAAA,sBACAP,cAAA;AAAA,QAACQ,cAAA;AAAA,QAAA;AAAA,UACC,MAAM,EAAE,QAAA,EAAUF,6BAAsB,IAAA,EAAMC,wBAAA,EAAmB,YAAY,kBAAA,EAAmB;AAAA,UAChG,QAAA,EAAU,KAAA;AAAA,UACV,QAAA,EAAU,KAAA;AAAA,UACV,KAAA,EAAM,MAAA;AAAA,UACN,aAAA,EAAe,CAAC,KAAA,KAAkB,aAAA,CAAc,OAAO,KAAK,CAAA;AAAA,UAC5D,MAAA,EAAQ,OAAA;AAAA,UACR,SAAA,EAAW;AAAA;AAAA,OACb;AAAA,sBACAP,cAAA,CAACS,oBAAQ,OAAA,kBAAST,cAAA,CAACU,mDAAwB,CAAA,EAAI,MAAA,kBAAQV,cAAA,CAAC,YAAA,EAAA,EAAa,CAAA,EAAI,CAAA;AAAA,MACxE,MAAA,CAAO,IAAI,CAAA,CAAA,qBACVA,cAAA;AAAA,QAACW,aAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,SAAS,CAAA,CAAE,OAAA;AAAA,UACX,QAAQ,CAAA,CAAE,KAAA;AAAA,UACV,WAAA,EAAa,CAAA;AAAA,UACb,GAAA,EAAK,QAAA,GAAW,EAAE,CAAA,EAAG,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,EAAO,WAAA,EAAa,CAAA,EAAE,GAAI,KAAA;AAAA,UAC1D,WACE,WAAA,GACI;AAAA,YACE,CAAA,EAAG,CAAA;AAAA,YACH,QAAQ,CAAA,CAAE,KAAA;AAAA,YACV,aAAA,EAAe,GAAA;AAAA,YACf,WAAA,EAAa,CAAA;AAAA,YACb,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAU;AAAA,YAC3B,OAAA,EAAS,CAAC,CAAA,EAAY,OAAA,KAAqB;AACzC,cAAA,MAAM,QAAS,OAAA,EAA+D,OAAA;AAC9E,cAAA,IAAI,KAAA,EAAO,YAAA,CAAa,KAAA,EAAO,CAAA,CAAE,OAAO,CAAA;AAAA,YAC1C;AAAA,WACF,GACA,EAAE,CAAA,EAAG,CAAA,EAAG,MAAA,EAAQ,EAAE,KAAA,EAAO,aAAA,EAAe,GAAA,EAAK,WAAA,EAAa,CAAA,EAAE;AAAA,UAElE,MAAM,CAAA,CAAE;AAAA,SAAA;AAAA,QArBH,CAAA,CAAE;AAAA,OAuBV;AAAA,KAAA,EACH,GACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}