@mastra/playground-ui 63.0.0 → 63.1.0-alpha.1

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 (445) hide show
  1. package/dist/{alert-dialog-DVAC9zdj.js → alert-dialog-Cpx4g1sS.js} +2 -2
  2. package/dist/{alert-dialog-DVAC9zdj.js.map → alert-dialog-Cpx4g1sS.js.map} +1 -1
  3. package/dist/{alert-dialog-C-ODvRWT.cjs → alert-dialog-Djojjgjo.cjs} +2 -2
  4. package/dist/{alert-dialog-C-ODvRWT.cjs.map → alert-dialog-Djojjgjo.cjs.map} +1 -1
  5. package/dist/{code-block-vvYFcnqm.js → code-block-BzUcNWrb.js} +2 -2
  6. package/dist/{code-block-vvYFcnqm.js.map → code-block-BzUcNWrb.js.map} +1 -1
  7. package/dist/{code-block-BuGosknt.cjs → code-block-CKLCdWtP.cjs} +2 -2
  8. package/dist/{code-block-BuGosknt.cjs.map → code-block-CKLCdWtP.cjs.map} +1 -1
  9. package/dist/{combobox-fEMKH9nJ.cjs → combobox-CdTP_FZ0.cjs} +9 -2
  10. package/dist/combobox-CdTP_FZ0.cjs.map +1 -0
  11. package/dist/{combobox-so2V71F7.js → combobox-CeYDCkXk.js} +9 -2
  12. package/dist/combobox-CeYDCkXk.js.map +1 -0
  13. package/dist/{command-B_C36ppQ.cjs → command-CSl9Mfrp.cjs} +3 -3
  14. package/dist/{command-B_C36ppQ.cjs.map → command-CSl9Mfrp.cjs.map} +1 -1
  15. package/dist/{command-DMqzDhzs.js → command-DQAGSkdK.js} +3 -3
  16. package/dist/{command-DMqzDhzs.js.map → command-DQAGSkdK.js.map} +1 -1
  17. package/dist/components/AlertDialog.cjs.js +1 -1
  18. package/dist/components/AlertDialog.es.js +1 -1
  19. package/dist/components/CodeBlock.cjs.js +1 -1
  20. package/dist/components/CodeBlock.es.js +1 -1
  21. package/dist/components/Combobox.cjs.js +1 -1
  22. package/dist/components/Combobox.es.js +1 -1
  23. package/dist/components/Command.cjs.js +1 -1
  24. package/dist/components/Command.es.js +1 -1
  25. package/dist/components/CommandPalette.cjs.js +2 -2
  26. package/dist/components/CommandPalette.es.js +2 -2
  27. package/dist/components/Comment.cjs.js +1 -1
  28. package/dist/components/Comment.es.js +1 -1
  29. package/dist/components/Composer.cjs.js +2 -2
  30. package/dist/components/Composer.es.js +2 -2
  31. package/dist/components/DataCodeSection.cjs.js +1 -1
  32. package/dist/components/DataCodeSection.es.js +1 -1
  33. package/dist/components/DataList.cjs.js +17 -15
  34. package/dist/components/DataList.cjs.js.map +1 -1
  35. package/dist/components/DataList.es.js +5 -4
  36. package/dist/components/DataList.es.js.map +1 -1
  37. package/dist/components/DataPanel.cjs.js +1 -1
  38. package/dist/components/DataPanel.es.js +1 -1
  39. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  40. package/dist/components/DateTimeRangePicker.es.js +1 -1
  41. package/dist/components/Dialog.cjs.js +2 -2
  42. package/dist/components/Dialog.es.js +2 -2
  43. package/dist/components/DropdownMenu.cjs.js +1 -1
  44. package/dist/components/DropdownMenu.es.js +1 -1
  45. package/dist/components/EnvironmentVariablesEditor.cjs.js +2 -2
  46. package/dist/components/EnvironmentVariablesEditor.es.js +2 -2
  47. package/dist/components/InputGroup.cjs.js +1 -1
  48. package/dist/components/InputGroup.es.js +1 -1
  49. package/dist/components/InputNumber.cjs.js +1 -1
  50. package/dist/components/InputNumber.es.js +1 -1
  51. package/dist/components/ListSearch.cjs.js +1 -1
  52. package/dist/components/ListSearch.es.js +1 -1
  53. package/dist/components/LogsDataList.cjs.js +2 -5
  54. package/dist/components/LogsDataList.cjs.js.map +1 -1
  55. package/dist/components/LogsDataList.es.js +2 -5
  56. package/dist/components/LogsDataList.es.js.map +1 -1
  57. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  58. package/dist/components/MarkdownRenderer.es.js +1 -1
  59. package/dist/components/MetricsCard.cjs.js +1 -1
  60. package/dist/components/MetricsCard.es.js +1 -1
  61. package/dist/components/PageLayout.cjs.js +11 -8
  62. package/dist/components/PageLayout.cjs.js.map +1 -1
  63. package/dist/components/PageLayout.es.js +11 -8
  64. package/dist/components/PageLayout.es.js.map +1 -1
  65. package/dist/components/PropertyFilter.cjs.js +2 -2
  66. package/dist/components/PropertyFilter.es.js +3 -3
  67. package/dist/components/SavedViews.cjs.js +1 -1
  68. package/dist/components/SavedViews.es.js +1 -1
  69. package/dist/components/ScrollArea.cjs.js +1 -1
  70. package/dist/components/ScrollArea.es.js +1 -1
  71. package/dist/components/SearchInput.cjs.js +1 -1
  72. package/dist/components/SearchInput.es.js +1 -1
  73. package/dist/components/Sidebar.cjs.js +3 -3
  74. package/dist/components/Sidebar.es.js +3 -3
  75. package/dist/components/Tabs.cjs.js +1 -1
  76. package/dist/components/Tabs.es.js +1 -1
  77. package/dist/components/ThreadRail.cjs.js +1 -1
  78. package/dist/components/ThreadRail.es.js +1 -1
  79. package/dist/components/Workflow.cjs.js +3 -3
  80. package/dist/components/Workflow.es.js +3 -3
  81. package/dist/components/ai/activity.cjs.js +1 -1
  82. package/dist/components/ai/activity.es.js +1 -1
  83. package/dist/components/ai/plan.cjs.js +1 -1
  84. package/dist/components/ai/plan.es.js +1 -1
  85. package/dist/components/ai/task-list.cjs.js +1 -1
  86. package/dist/components/ai/task-list.es.js +1 -1
  87. package/dist/components/ai/tool-approval.cjs.js +1 -1
  88. package/dist/components/ai/tool-approval.es.js +1 -1
  89. package/dist/components/ai/tool-call.cjs.js +2 -2
  90. package/dist/components/ai/tool-call.es.js +2 -2
  91. package/dist/{composer-CxmOOUX8.js → composer-B0i1WZgt.js} +2 -2
  92. package/dist/{composer-CxmOOUX8.js.map → composer-B0i1WZgt.js.map} +1 -1
  93. package/dist/{composer-Cg5bXN1r.cjs → composer-DJsfHivH.cjs} +2 -2
  94. package/dist/{composer-Cg5bXN1r.cjs.map → composer-DJsfHivH.cjs.map} +1 -1
  95. package/dist/{data-code-section-Bs8sHDux.cjs → data-code-section-BB2RWius.cjs} +3 -3
  96. package/dist/{data-code-section-Bs8sHDux.cjs.map → data-code-section-BB2RWius.cjs.map} +1 -1
  97. package/dist/{data-code-section-CqdjmClK.js → data-code-section-DsU-ubVW.js} +3 -3
  98. package/dist/{data-code-section-CqdjmClK.js.map → data-code-section-DsU-ubVW.js.map} +1 -1
  99. package/dist/data-list-CaifGmFh.cjs +142 -0
  100. package/dist/data-list-CaifGmFh.cjs.map +1 -0
  101. package/dist/data-list-kilUFo3I.js +138 -0
  102. package/dist/data-list-kilUFo3I.js.map +1 -0
  103. package/dist/{data-list-skeleton-BNsWWamC.js → data-list-skeleton-C_zFfUy5.js} +2 -2
  104. package/dist/{data-list-skeleton-BNsWWamC.js.map → data-list-skeleton-C_zFfUy5.js.map} +1 -1
  105. package/dist/{data-list-skeleton-BGJD4qMF.cjs → data-list-skeleton-Cgo1Urkr.cjs} +6 -6
  106. package/dist/{data-list-skeleton-BGJD4qMF.cjs.map → data-list-skeleton-Cgo1Urkr.cjs.map} +1 -1
  107. package/dist/data-list-spacer-D9J0nV_S.cjs +218 -0
  108. package/dist/data-list-spacer-D9J0nV_S.cjs.map +1 -0
  109. package/dist/data-list-spacer-DGUCD6oy.js +209 -0
  110. package/dist/data-list-spacer-DGUCD6oy.js.map +1 -0
  111. package/dist/{data-list-BLfHObw8.cjs → data-list-top-DYnH-IhJ.cjs} +14 -340
  112. package/dist/data-list-top-DYnH-IhJ.cjs.map +1 -0
  113. package/dist/{data-list-B2ArWwsJ.js → data-list-top-Dk9Wz_w5.js} +6 -333
  114. package/dist/data-list-top-Dk9Wz_w5.js.map +1 -0
  115. package/dist/{data-panel-Wjgbl6zx.cjs → data-panel-CtFwwsPs.cjs} +2 -2
  116. package/dist/{data-panel-Wjgbl6zx.cjs.map → data-panel-CtFwwsPs.cjs.map} +1 -1
  117. package/dist/{data-panel-BdCw3F_h.js → data-panel-CwIdwpov.js} +2 -2
  118. package/dist/{data-panel-BdCw3F_h.js.map → data-panel-CwIdwpov.js.map} +1 -1
  119. package/dist/{date-time-range-picker-SU1Q1h1h.js → date-time-range-picker-BT9qan60.js} +2 -2
  120. package/dist/{date-time-range-picker-SU1Q1h1h.js.map → date-time-range-picker-BT9qan60.js.map} +1 -1
  121. package/dist/{date-time-range-picker-ByNvjYuV.cjs → date-time-range-picker-DQa5XLST.cjs} +2 -2
  122. package/dist/{date-time-range-picker-ByNvjYuV.cjs.map → date-time-range-picker-DQa5XLST.cjs.map} +1 -1
  123. package/dist/{dialog-B5nLi0ER.cjs → dialog-BAlSUqcF.cjs} +2 -2
  124. package/dist/{dialog-B5nLi0ER.cjs.map → dialog-BAlSUqcF.cjs.map} +1 -1
  125. package/dist/{dialog-Jz2ZfO-z.js → dialog-CboDo8Pj.js} +2 -2
  126. package/dist/{dialog-Jz2ZfO-z.js.map → dialog-CboDo8Pj.js.map} +1 -1
  127. package/dist/{dialog-action-DdkbsKfP.cjs → dialog-action-DWE9XalB.cjs} +2 -2
  128. package/dist/{dialog-action-DdkbsKfP.cjs.map → dialog-action-DWE9XalB.cjs.map} +1 -1
  129. package/dist/{dialog-action-BxXhAz-P.js → dialog-action-DpctEQ9l.js} +2 -2
  130. package/dist/{dialog-action-BxXhAz-P.js.map → dialog-action-DpctEQ9l.js.map} +1 -1
  131. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +1 -1
  132. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +1 -1
  133. package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +2 -2
  134. package/dist/domains/chat/attachments/composer-attachment-list.es.js +2 -2
  135. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
  136. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
  137. package/dist/domains/chat/messages/dataset-save-action.cjs.js +2 -2
  138. package/dist/domains/chat/messages/dataset-save-action.es.js +2 -2
  139. package/dist/domains/chat/messages/message-row.cjs.js +1 -1
  140. package/dist/domains/chat/messages/message-row.es.js +1 -1
  141. package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
  142. package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
  143. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  144. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  145. package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
  146. package/dist/domains/chat/messages/skill-message.es.js +2 -2
  147. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +1 -1
  148. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +1 -1
  149. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +1 -1
  150. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +1 -1
  151. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +1 -1
  152. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +1 -1
  153. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +1 -1
  154. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +1 -1
  155. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  156. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  157. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  158. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  159. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +1 -1
  160. package/dist/domains/chat/tools/badges/tool-badge.es.js +1 -1
  161. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +1 -2
  162. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
  163. package/dist/domains/chat/tools/badges/workflow-badge.es.js +1 -2
  164. package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
  165. package/dist/domains/chat/tools/submit-plan-tool.cjs.js +1 -1
  166. package/dist/domains/chat/tools/submit-plan-tool.es.js +1 -1
  167. package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
  168. package/dist/domains/logs/components/log-data-panel.es.js +1 -1
  169. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -3
  170. package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
  171. package/dist/domains/logs/components/logs-list-view.es.js +2 -3
  172. package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
  173. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  174. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  175. package/dist/domains/metrics/components/agent-runs-card.cjs.js +1 -1
  176. package/dist/domains/metrics/components/agent-runs-card.es.js +1 -1
  177. package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
  178. package/dist/domains/metrics/components/chart-area.es.js +1 -1
  179. package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
  180. package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
  181. package/dist/domains/metrics/components/chart-card.cjs.js +1 -1
  182. package/dist/domains/metrics/components/chart-card.es.js +1 -1
  183. package/dist/domains/metrics/components/date-range-selector.cjs.js +5 -44
  184. package/dist/domains/metrics/components/date-range-selector.cjs.js.map +1 -1
  185. package/dist/domains/metrics/components/date-range-selector.es.js +3 -42
  186. package/dist/domains/metrics/components/date-range-selector.es.js.map +1 -1
  187. package/dist/domains/metrics/components/failure-rate-card.cjs.js +1 -1
  188. package/dist/domains/metrics/components/failure-rate-card.es.js +1 -1
  189. package/dist/domains/metrics/components/latency-card.cjs.js +1 -1
  190. package/dist/domains/metrics/components/latency-card.es.js +1 -1
  191. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +26 -0
  192. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js.map +1 -0
  193. package/dist/domains/metrics/components/metrics-time-range-chip.d.ts +2 -0
  194. package/dist/domains/metrics/components/metrics-time-range-chip.es.js +22 -0
  195. package/dist/domains/metrics/components/metrics-time-range-chip.es.js.map +1 -0
  196. package/dist/domains/metrics/components/scores-card.cjs.js +1 -1
  197. package/dist/domains/metrics/components/scores-card.es.js +1 -1
  198. package/dist/domains/metrics/components/token-usage-card.cjs.js +1 -1
  199. package/dist/domains/metrics/components/token-usage-card.es.js +1 -1
  200. package/dist/domains/metrics/components/trace-volume-card.cjs.js +1 -1
  201. package/dist/domains/metrics/components/trace-volume-card.es.js +1 -1
  202. package/dist/domains/metrics/components/usage-card.cjs.js +1 -1
  203. package/dist/domains/metrics/components/usage-card.es.js +1 -1
  204. package/dist/domains/metrics/components.cjs.js +2 -0
  205. package/dist/domains/metrics/components.cjs.js.map +1 -1
  206. package/dist/domains/metrics/components.es.js +1 -0
  207. package/dist/domains/metrics/components.es.js.map +1 -1
  208. package/dist/domains/metrics/hooks.cjs.js +4 -0
  209. package/dist/domains/metrics/hooks.cjs.js.map +1 -1
  210. package/dist/domains/metrics/hooks.es.js +1 -1
  211. package/dist/domains/metrics/metrics-date-presets.cjs.js +49 -0
  212. package/dist/domains/metrics/metrics-date-presets.cjs.js.map +1 -0
  213. package/dist/domains/metrics/metrics-date-presets.d.ts +2 -0
  214. package/dist/domains/metrics/metrics-date-presets.es.js +43 -0
  215. package/dist/domains/metrics/metrics-date-presets.es.js.map +1 -0
  216. package/dist/domains/metrics/metrics-filters.cjs.js +94 -0
  217. package/dist/domains/metrics/metrics-filters.cjs.js.map +1 -1
  218. package/dist/domains/metrics/metrics-filters.es.js +91 -1
  219. package/dist/domains/metrics/metrics-filters.es.js.map +1 -1
  220. package/dist/domains/metrics.cjs.js +6 -0
  221. package/dist/domains/metrics.cjs.js.map +1 -1
  222. package/dist/domains/metrics.es.js +2 -1
  223. package/dist/domains/metrics.es.js.map +1 -1
  224. package/dist/domains/scores/components/score-data-panel.cjs.js +1 -1
  225. package/dist/domains/scores/components/score-data-panel.es.js +1 -1
  226. package/dist/domains/scores/components/span-scoring.cjs.js +3 -3
  227. package/dist/domains/scores/components/span-scoring.es.js +3 -3
  228. package/dist/domains/scores/components/trace-scores-tab.cjs.js +1 -2
  229. package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
  230. package/dist/domains/scores/components/trace-scores-tab.es.js +1 -2
  231. package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
  232. package/dist/domains/traces/components/feedback-thread.cjs.js +3 -3
  233. package/dist/domains/traces/components/feedback-thread.es.js +3 -3
  234. package/dist/domains/traces/components/span-data-panel-view.cjs.js +2 -2
  235. package/dist/domains/traces/components/span-data-panel-view.es.js +2 -2
  236. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  237. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  238. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  239. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  240. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
  241. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
  242. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
  243. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  244. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +2 -2
  245. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
  246. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  247. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  248. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  249. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  250. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +1 -1
  251. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +1 -1
  252. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  253. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  254. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  255. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  256. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +1 -1
  257. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +1 -1
  258. package/dist/domains/traces/components/trace-columns-menu.cjs.js +4 -4
  259. package/dist/domains/traces/components/trace-columns-menu.es.js +4 -4
  260. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +4 -4
  261. package/dist/domains/traces/components/trace-data-panel-view.es.js +4 -4
  262. package/dist/domains/traces/components/trace-data-panel.cjs.js +1 -3
  263. package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
  264. package/dist/domains/traces/components/trace-data-panel.es.js +1 -3
  265. package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
  266. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  267. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  268. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  269. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  270. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
  271. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
  272. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +1 -1
  273. package/dist/domains/traces/components/trace-time-range-chip.es.js +1 -1
  274. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
  275. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
  276. package/dist/domains/traces/components/traces-list-view.cjs.js +6 -5
  277. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  278. package/dist/domains/traces/components/traces-list-view.es.js +5 -4
  279. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  280. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -4
  281. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  282. package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -4
  283. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  284. package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
  285. package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
  286. package/dist/domains/workflows/components/workflow-information.cjs.js +1 -1
  287. package/dist/domains/workflows/components/workflow-information.es.js +1 -1
  288. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
  289. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
  290. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +2 -2
  291. package/dist/domains/workflows/runs/workflow-run-list.es.js +2 -2
  292. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  293. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  294. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  295. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  296. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -0
  297. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js.map +1 -1
  298. package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -0
  299. package/dist/domains/workflows/workflow/workflow-input-data.es.js.map +1 -1
  300. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +1 -1
  301. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +1 -1
  302. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +1 -1
  303. package/dist/domains/workflows/workflow/workflow-run-data.es.js +1 -1
  304. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +2 -2
  305. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +2 -2
  306. package/dist/domains/workflows/workflow/workflow-trigger.cjs.js +1 -1
  307. package/dist/domains/workflows/workflow/workflow-trigger.es.js +1 -1
  308. package/dist/domains/workspace/components/workspace-active-file.cjs.js +1 -1
  309. package/dist/domains/workspace/components/workspace-active-file.es.js +1 -1
  310. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +5 -5
  311. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +5 -5
  312. package/dist/domains/workspace/components/workspace-create-directory.cjs.js +1 -1
  313. package/dist/domains/workspace/components/workspace-create-directory.es.js +1 -1
  314. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +2 -2
  315. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +2 -2
  316. package/dist/domains/workspace/components/workspace-parts.cjs.js +1 -1
  317. package/dist/domains/workspace/components/workspace-parts.es.js +1 -1
  318. package/dist/domains/workspace/components/workspace-tree.cjs.js +1 -1
  319. package/dist/domains/workspace/components/workspace-tree.es.js +1 -1
  320. package/dist/{dropdown-menu-D8GR_NhL.js → dropdown-menu-C6VtAiYJ.js} +43 -4
  321. package/dist/dropdown-menu-C6VtAiYJ.js.map +1 -0
  322. package/dist/{dropdown-menu-Bg96BCnK.cjs → dropdown-menu-dHvHFLji.cjs} +42 -3
  323. package/dist/dropdown-menu-dHvHFLji.cjs.map +1 -0
  324. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +1 -1
  325. package/dist/ee/signals/components/entity-index-compact-grid.es.js +1 -1
  326. package/dist/ee/signals/components/entity-index-list.cjs.js +1 -3
  327. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  328. package/dist/ee/signals/components/entity-index-list.es.js +1 -3
  329. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  330. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +2 -4
  331. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  332. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +2 -4
  333. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  334. package/dist/ee/signals/sankey-signals.cjs.js +1 -1
  335. package/dist/ee/signals/sankey-signals.es.js +1 -1
  336. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -2
  337. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +2 -2
  338. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +2 -2
  339. package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
  340. package/dist/{input-group-DQuyC9Pz.cjs → input-group-Bj2RbkNg.cjs} +20 -3
  341. package/dist/input-group-Bj2RbkNg.cjs.map +1 -0
  342. package/dist/{input-group-CIIwoggO.js → input-group-CrumkDCF.js} +20 -3
  343. package/dist/input-group-CrumkDCF.js.map +1 -0
  344. package/dist/layout/tabbed-container.cjs.js +4 -4
  345. package/dist/layout/tabbed-container.es.js +4 -4
  346. package/dist/{list-search-Cwp-OPvC.js → list-search-C7ro2_qL.js} +2 -2
  347. package/dist/{list-search-Cwp-OPvC.js.map → list-search-C7ro2_qL.js.map} +1 -1
  348. package/dist/{list-search-C5j3HYkb.cjs → list-search-Y3z6P6IO.cjs} +2 -2
  349. package/dist/{list-search-C5j3HYkb.cjs.map → list-search-Y3z6P6IO.cjs.map} +1 -1
  350. package/dist/{logs-data-list-B-gmgU74.js → logs-data-list-1KFnVsFz.js} +3 -2
  351. package/dist/{logs-data-list-B-gmgU74.js.map → logs-data-list-1KFnVsFz.js.map} +1 -1
  352. package/dist/{logs-data-list-CaXnNnC5.cjs → logs-data-list-BafttkM2.cjs} +22 -21
  353. package/dist/{logs-data-list-CaXnNnC5.cjs.map → logs-data-list-BafttkM2.cjs.map} +1 -1
  354. package/dist/{markdown-renderer-BXTNiZbz.cjs → markdown-renderer-BRu3RpQD.cjs} +3 -3
  355. package/dist/{markdown-renderer-BXTNiZbz.cjs.map → markdown-renderer-BRu3RpQD.cjs.map} +1 -1
  356. package/dist/{markdown-renderer-Ct-q_KTF.js → markdown-renderer-WesDzhMr.js} +3 -3
  357. package/dist/{markdown-renderer-Ct-q_KTF.js.map → markdown-renderer-WesDzhMr.js.map} +1 -1
  358. package/dist/{metrics-card-C33VsuXf.js → metrics-card-BI5okAsj.js} +2 -2
  359. package/dist/{metrics-card-C33VsuXf.js.map → metrics-card-BI5okAsj.js.map} +1 -1
  360. package/dist/{metrics-card-CxOVpP1t.cjs → metrics-card-CcesVPLN.cjs} +2 -2
  361. package/dist/{metrics-card-CxOVpP1t.cjs.map → metrics-card-CcesVPLN.cjs.map} +1 -1
  362. package/dist/{plan-TXWANP1R.js → plan-CBiLa54G.js} +2 -2
  363. package/dist/{plan-TXWANP1R.js.map → plan-CBiLa54G.js.map} +1 -1
  364. package/dist/{plan-CL-lbDuy.cjs → plan-ColU7p3H.cjs} +2 -2
  365. package/dist/{plan-CL-lbDuy.cjs.map → plan-ColU7p3H.cjs.map} +1 -1
  366. package/dist/primitives/menu-item.cjs.js +2 -0
  367. package/dist/primitives/menu-item.cjs.js.map +1 -1
  368. package/dist/primitives/menu-item.es.js +2 -1
  369. package/dist/primitives/menu-item.es.js.map +1 -1
  370. package/dist/{property-filter-applied-Ru3OQoGo.js → property-filter-applied-BCeGn2zQ.js} +2 -2
  371. package/dist/{property-filter-applied-Ru3OQoGo.js.map → property-filter-applied-BCeGn2zQ.js.map} +1 -1
  372. package/dist/{property-filter-applied-BBvaTC4B.cjs → property-filter-applied-CpelyBH9.cjs} +2 -2
  373. package/dist/{property-filter-applied-BBvaTC4B.cjs.map → property-filter-applied-CpelyBH9.cjs.map} +1 -1
  374. package/dist/{reasoning-activity-CFEaSv4J.cjs → reasoning-activity-B8bR8ib_.cjs} +2 -2
  375. package/dist/{reasoning-activity-CFEaSv4J.cjs.map → reasoning-activity-B8bR8ib_.cjs.map} +1 -1
  376. package/dist/{reasoning-activity-CHlEe011.js → reasoning-activity-DLrXgE9k.js} +2 -2
  377. package/dist/{reasoning-activity-CHlEe011.js.map → reasoning-activity-DLrXgE9k.js.map} +1 -1
  378. package/dist/{scroll-area-CVgjRzTS.cjs → scroll-area-BakRKj2k.cjs} +3 -3
  379. package/dist/scroll-area-BakRKj2k.cjs.map +1 -0
  380. package/dist/{scroll-area-BywIlj3F.js → scroll-area-D6gKFavi.js} +3 -3
  381. package/dist/scroll-area-D6gKFavi.js.map +1 -0
  382. package/dist/{search-input-RybUdqzg.js → search-input-BEAKPGH8.js} +2 -2
  383. package/dist/{search-input-RybUdqzg.js.map → search-input-BEAKPGH8.js.map} +1 -1
  384. package/dist/{search-input-2DhcUIvn.cjs → search-input-DdRhkYqy.cjs} +2 -2
  385. package/dist/{search-input-2DhcUIvn.cjs.map → search-input-DdRhkYqy.cjs.map} +1 -1
  386. package/dist/{span-payload-primitives-DIxmotnO.cjs → span-payload-primitives-BymKsUAo.cjs} +2 -2
  387. package/dist/{span-payload-primitives-DIxmotnO.cjs.map → span-payload-primitives-BymKsUAo.cjs.map} +1 -1
  388. package/dist/{span-payload-primitives-dTs5UrjA.js → span-payload-primitives-DBNNkmHo.js} +2 -2
  389. package/dist/{span-payload-primitives-dTs5UrjA.js.map → span-payload-primitives-DBNNkmHo.js.map} +1 -1
  390. package/dist/src/domains/metrics/components/date-range-selector.d.ts +1 -0
  391. package/dist/src/domains/metrics/components/index.d.ts +1 -0
  392. package/dist/src/domains/metrics/components/metrics-time-range-chip.d.ts +5 -0
  393. package/dist/src/domains/metrics/hooks/index.d.ts +1 -1
  394. package/dist/src/domains/metrics/metrics-date-presets.d.ts +6 -0
  395. package/dist/src/domains/metrics/metrics-filters.d.ts +23 -1
  396. package/dist/src/ds/components/Combobox/combobox.d.ts +2 -0
  397. package/dist/src/ds/components/DropdownMenu/dropdown-menu.d.ts +19 -6
  398. package/dist/src/ds/components/InputGroup/input-group.d.ts +6 -2
  399. package/dist/src/ds/components/PageLayout/page-layout.d.ts +8 -1
  400. package/dist/src/ds/components/ScrollArea/scroll-area.d.ts +2 -1
  401. package/dist/src/ds/primitives/menu-item.d.ts +1 -0
  402. package/dist/style.css +16 -4
  403. package/dist/{tabs-list-DY_hziv7.js → tabs-list-CDep3C2w.js} +2 -2
  404. package/dist/{tabs-list-DY_hziv7.js.map → tabs-list-CDep3C2w.js.map} +1 -1
  405. package/dist/{tabs-list-xikY_dug.cjs → tabs-list-DwQsMVKI.cjs} +2 -2
  406. package/dist/{tabs-list-xikY_dug.cjs.map → tabs-list-DwQsMVKI.cjs.map} +1 -1
  407. package/dist/{tool-approval-TB8r2U_c.js → tool-approval-BK2j7aj_.js} +2 -2
  408. package/dist/{tool-approval-TB8r2U_c.js.map → tool-approval-BK2j7aj_.js.map} +1 -1
  409. package/dist/{tool-approval-S6ml_xyU.cjs → tool-approval-Bza_sgxa.cjs} +2 -2
  410. package/dist/{tool-approval-S6ml_xyU.cjs.map → tool-approval-Bza_sgxa.cjs.map} +1 -1
  411. package/dist/{tool-call-arguments-CCkJ1btR.js → tool-call-arguments-BLCAiFYg.js} +2 -2
  412. package/dist/{tool-call-arguments-CCkJ1btR.js.map → tool-call-arguments-BLCAiFYg.js.map} +1 -1
  413. package/dist/{tool-call-arguments-DyukJmhY.cjs → tool-call-arguments-CK3kQ_FX.cjs} +2 -2
  414. package/dist/{tool-call-arguments-DyukJmhY.cjs.map → tool-call-arguments-CK3kQ_FX.cjs.map} +1 -1
  415. package/dist/{tool-call-group-CZBqGjMh.js → tool-call-group-C_zxf6OA.js} +2 -2
  416. package/dist/{tool-call-group-CZBqGjMh.js.map → tool-call-group-C_zxf6OA.js.map} +1 -1
  417. package/dist/{tool-call-group-CFpdexuw.cjs → tool-call-group-Cdgv7red.cjs} +2 -2
  418. package/dist/{tool-call-group-CFpdexuw.cjs.map → tool-call-group-Cdgv7red.cjs.map} +1 -1
  419. package/dist/{traces-data-list-1X6UBM6Y.js → traces-data-list-CDvg5G_2.js} +4 -2
  420. package/dist/{traces-data-list-1X6UBM6Y.js.map → traces-data-list-CDvg5G_2.js.map} +1 -1
  421. package/dist/{traces-data-list-BXSXW3E6.cjs → traces-data-list-Dy-9AIr2.cjs} +19 -17
  422. package/dist/{traces-data-list-BXSXW3E6.cjs.map → traces-data-list-Dy-9AIr2.cjs.map} +1 -1
  423. package/dist/{workflow-data-edge-view-De0xCrVu.js → workflow-data-edge-view-BWyUa9am.js} +2 -2
  424. package/dist/{workflow-data-edge-view-De0xCrVu.js.map → workflow-data-edge-view-BWyUa9am.js.map} +1 -1
  425. package/dist/{workflow-data-edge-view-kmB6j-ui.cjs → workflow-data-edge-view-BpnN4W_5.cjs} +2 -2
  426. package/dist/{workflow-data-edge-view-kmB6j-ui.cjs.map → workflow-data-edge-view-BpnN4W_5.cjs.map} +1 -1
  427. package/dist/{workflow-edge-data-button-av1zCMfP.cjs → workflow-edge-data-button-Du5ZDm72.cjs} +2 -2
  428. package/dist/{workflow-edge-data-button-av1zCMfP.cjs.map → workflow-edge-data-button-Du5ZDm72.cjs.map} +1 -1
  429. package/dist/{workflow-edge-data-button-CXbj67U9.js → workflow-edge-data-button-DvGFB2L6.js} +2 -2
  430. package/dist/{workflow-edge-data-button-CXbj67U9.js.map → workflow-edge-data-button-DvGFB2L6.js.map} +1 -1
  431. package/dist/{workflow-step-action-BsBZk7j6.cjs → workflow-step-action-DNrU8on1.cjs} +2 -2
  432. package/dist/{workflow-step-action-BsBZk7j6.cjs.map → workflow-step-action-DNrU8on1.cjs.map} +1 -1
  433. package/dist/{workflow-step-action-AG05Ly8P.js → workflow-step-action-ac1gNDdn.js} +2 -2
  434. package/dist/{workflow-step-action-AG05Ly8P.js.map → workflow-step-action-ac1gNDdn.js.map} +1 -1
  435. package/package.json +7 -7
  436. package/dist/combobox-fEMKH9nJ.cjs.map +0 -1
  437. package/dist/combobox-so2V71F7.js.map +0 -1
  438. package/dist/data-list-B2ArWwsJ.js.map +0 -1
  439. package/dist/data-list-BLfHObw8.cjs.map +0 -1
  440. package/dist/dropdown-menu-Bg96BCnK.cjs.map +0 -1
  441. package/dist/dropdown-menu-D8GR_NhL.js.map +0 -1
  442. package/dist/input-group-CIIwoggO.js.map +0 -1
  443. package/dist/input-group-DQuyC9Pz.cjs.map +0 -1
  444. package/dist/scroll-area-BywIlj3F.js.map +0 -1
  445. package/dist/scroll-area-CVgjRzTS.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"span-payload-primitives-dTs5UrjA.js","sources":["../src/domains/traces/components/span-payload/span-payload-tool.tsx","../src/domains/traces/components/span-payload/span-payload-primitives.tsx"],"sourcesContent":["import { SpanPayloadJson } from './span-payload-json';\nimport { SpanPayloadField, SpanPayloadLabel } from './span-payload-primitives';\nimport { BadgeWrapper } from '@/domains/chat/components/badge-wrapper';\nimport { ActivityHeadline } from '@/ds/components/ai/activity';\nimport { presentTool } from '@/ds/components/ai/tool-call/tool-presentation';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport function SpanPayloadTool({ value, showLabel = true }: { value: unknown; showLabel?: boolean }) {\n if (!isRecord(value)) return <SpanPayloadJson value={value} />;\n const call = value.type === 'tool-invocation' ? value.toolInvocation : value;\n if (!isRecord(call) || typeof call.toolName !== 'string' || !call.toolName) {\n return <SpanPayloadJson value={value} />;\n }\n const input = 'args' in call ? call.args : call.input;\n const output = 'result' in call ? call.result : call.output;\n const error = call.isError === true || call.state === 'output-error';\n const errorText = typeof call.errorText === 'string' ? call.errorText : undefined;\n const { icon: ToolIcon, label, detail, description } = presentTool(call.toolName, input);\n const hasBody = input !== undefined || output !== undefined || errorText !== undefined;\n return (\n <div data-slot=\"span-payload-tool\" className=\"flex flex-col gap-2\">\n {showLabel && <SpanPayloadLabel>{value.type === 'tool-result' ? 'Tool result' : 'Tool call'}</SpanPayloadLabel>}\n <BadgeWrapper\n status={error ? 'error' : 'idle'}\n header={\n <ActivityHeadline icon={<ToolIcon aria-hidden />} label={label} detail={detail} description={description} />\n }\n >\n {hasBody && (\n <div className=\"flex flex-col gap-3\">\n {input !== undefined && (\n <SpanPayloadField label=\"Arguments\">\n <SpanPayloadJson value={input} />\n </SpanPayloadField>\n )}\n {output !== undefined && (\n <SpanPayloadField label=\"Result\">\n <SpanPayloadJson value={output} />\n </SpanPayloadField>\n )}\n {errorText !== undefined && (\n <SpanPayloadField label=\"Error\">\n <SpanPayloadJson value={errorText} />\n </SpanPayloadField>\n )}\n </div>\n )}\n </BadgeWrapper>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { SpanPayloadTool } from './span-payload-tool';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Txt } from '@/ds/components/Txt';\n\n/** Small-caps label above a field of a rich payload. */\nexport function SpanPayloadLabel({ children }: { children: ReactNode }) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"faint\" className=\"block uppercase\">\n {children}\n </Txt>\n );\n}\n\nexport function SpanPayloadField({ label, children }: { label: ReactNode; children: ReactNode }) {\n return (\n <div data-slot=\"span-payload-field\" className=\"flex flex-col gap-1.5\">\n <SpanPayloadLabel>{label}</SpanPayloadLabel>\n {children}\n </div>\n );\n}\n\nexport function SpanPayloadMarkdown({ children }: { children: string }) {\n return (\n <div data-slot=\"span-payload-markdown\" className=\"text-foreground\">\n <MarkdownRenderer>{children}</MarkdownRenderer>\n </div>\n );\n}\n\n/** A collapsed block for secondary data (reasoning, steps, warnings…). */\nexport function SpanPayloadCollapsible({\n label,\n children,\n defaultOpen = false,\n}: {\n label: ReactNode;\n children: ReactNode;\n defaultOpen?: boolean;\n}) {\n return (\n <Collapsible defaultOpen={defaultOpen}>\n <CollapsibleTrigger className=\"flex items-center gap-1 text-meta text-placeholder uppercase\">\n <DisclosureChevron direction=\"right\" className=\"size-3\" />\n {label}\n </CollapsibleTrigger>\n <CollapsibleContent className=\"pt-1.5\">{children}</CollapsibleContent>\n </Collapsible>\n );\n}\n\n/** Tool calls as core records them: `{ toolName, args | input }` when they have that shape, JSON otherwise. */\nexport function SpanPayloadToolCalls({ toolCalls }: { toolCalls: unknown[] }) {\n return (\n <ul data-slot=\"span-payload-tool-calls\" className=\"flex flex-col gap-2\">\n {toolCalls.map((call, index) => (\n <li key={index}>\n <SpanPayloadTool value={call} showLabel={false} />\n </li>\n ))}\n </ul>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"span-payload-primitives-DBNNkmHo.js","sources":["../src/domains/traces/components/span-payload/span-payload-tool.tsx","../src/domains/traces/components/span-payload/span-payload-primitives.tsx"],"sourcesContent":["import { SpanPayloadJson } from './span-payload-json';\nimport { SpanPayloadField, SpanPayloadLabel } from './span-payload-primitives';\nimport { BadgeWrapper } from '@/domains/chat/components/badge-wrapper';\nimport { ActivityHeadline } from '@/ds/components/ai/activity';\nimport { presentTool } from '@/ds/components/ai/tool-call/tool-presentation';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport function SpanPayloadTool({ value, showLabel = true }: { value: unknown; showLabel?: boolean }) {\n if (!isRecord(value)) return <SpanPayloadJson value={value} />;\n const call = value.type === 'tool-invocation' ? value.toolInvocation : value;\n if (!isRecord(call) || typeof call.toolName !== 'string' || !call.toolName) {\n return <SpanPayloadJson value={value} />;\n }\n const input = 'args' in call ? call.args : call.input;\n const output = 'result' in call ? call.result : call.output;\n const error = call.isError === true || call.state === 'output-error';\n const errorText = typeof call.errorText === 'string' ? call.errorText : undefined;\n const { icon: ToolIcon, label, detail, description } = presentTool(call.toolName, input);\n const hasBody = input !== undefined || output !== undefined || errorText !== undefined;\n return (\n <div data-slot=\"span-payload-tool\" className=\"flex flex-col gap-2\">\n {showLabel && <SpanPayloadLabel>{value.type === 'tool-result' ? 'Tool result' : 'Tool call'}</SpanPayloadLabel>}\n <BadgeWrapper\n status={error ? 'error' : 'idle'}\n header={\n <ActivityHeadline icon={<ToolIcon aria-hidden />} label={label} detail={detail} description={description} />\n }\n >\n {hasBody && (\n <div className=\"flex flex-col gap-3\">\n {input !== undefined && (\n <SpanPayloadField label=\"Arguments\">\n <SpanPayloadJson value={input} />\n </SpanPayloadField>\n )}\n {output !== undefined && (\n <SpanPayloadField label=\"Result\">\n <SpanPayloadJson value={output} />\n </SpanPayloadField>\n )}\n {errorText !== undefined && (\n <SpanPayloadField label=\"Error\">\n <SpanPayloadJson value={errorText} />\n </SpanPayloadField>\n )}\n </div>\n )}\n </BadgeWrapper>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { SpanPayloadTool } from './span-payload-tool';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Txt } from '@/ds/components/Txt';\n\n/** Small-caps label above a field of a rich payload. */\nexport function SpanPayloadLabel({ children }: { children: ReactNode }) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"faint\" className=\"block uppercase\">\n {children}\n </Txt>\n );\n}\n\nexport function SpanPayloadField({ label, children }: { label: ReactNode; children: ReactNode }) {\n return (\n <div data-slot=\"span-payload-field\" className=\"flex flex-col gap-1.5\">\n <SpanPayloadLabel>{label}</SpanPayloadLabel>\n {children}\n </div>\n );\n}\n\nexport function SpanPayloadMarkdown({ children }: { children: string }) {\n return (\n <div data-slot=\"span-payload-markdown\" className=\"text-foreground\">\n <MarkdownRenderer>{children}</MarkdownRenderer>\n </div>\n );\n}\n\n/** A collapsed block for secondary data (reasoning, steps, warnings…). */\nexport function SpanPayloadCollapsible({\n label,\n children,\n defaultOpen = false,\n}: {\n label: ReactNode;\n children: ReactNode;\n defaultOpen?: boolean;\n}) {\n return (\n <Collapsible defaultOpen={defaultOpen}>\n <CollapsibleTrigger className=\"flex items-center gap-1 text-meta text-placeholder uppercase\">\n <DisclosureChevron direction=\"right\" className=\"size-3\" />\n {label}\n </CollapsibleTrigger>\n <CollapsibleContent className=\"pt-1.5\">{children}</CollapsibleContent>\n </Collapsible>\n );\n}\n\n/** Tool calls as core records them: `{ toolName, args | input }` when they have that shape, JSON otherwise. */\nexport function SpanPayloadToolCalls({ toolCalls }: { toolCalls: unknown[] }) {\n return (\n <ul data-slot=\"span-payload-tool-calls\" className=\"flex flex-col gap-2\">\n {toolCalls.map((call, index) => (\n <li key={index}>\n <SpanPayloadTool value={call} showLabel={false} />\n </li>\n ))}\n </ul>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1,2 @@
1
+ /** @deprecated The metrics dashboard picks its range from the filter bar. Use `MetricsTimeRangeChip`. */
1
2
  export declare function DateRangeSelector(): import("react").JSX.Element;
@@ -1,4 +1,5 @@
1
1
  export { DateRangeSelector } from './date-range-selector';
2
+ export { MetricsTimeRangeChip } from './metrics-time-range-chip';
2
3
  export { OpenErrorsInLogsButton, OpenInTracesButton } from './card-action-buttons';
3
4
  export { ChartArea, type ChartAreaProps } from './chart-area';
4
5
  export { ChartCard, type ChartCardProps } from './chart-card';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * The dashboard's date range as the filter bar's `Time` chip, the same chip the Traces page shows.
3
+ * Render it from `FilterBar.Chips` for `TRACE_TIME_RANGE_ITEM`, inside a `MetricsProvider`.
4
+ */
5
+ export declare function MetricsTimeRangeChip(): import("react").JSX.Element;
@@ -16,7 +16,7 @@ export { useTopActiveThreadsMetrics, type ActiveThreadRow } from '@mastra/react/
16
16
  export { useTopResourcesByThreadsMetrics, type ResourceThreadsRow } from '@mastra/react/hooks/metrics';
17
17
  export { buildLogsDrilldownUrl, buildTracesDrilldownUrl, type DrilldownScope, type TimeRange } from '../drilldown';
18
18
  export { chooseMetricsInterval, formatMetricsBucketLabel, type MetricsInterval } from '@mastra/react/hooks/metrics';
19
- export { applyMetricsPropertyFilterTokens, buildMetricsDimensionalFilter, clearSavedMetricsFilters, createMetricsPropertyFilterFields, getMetricsPropertyFilterTokens, hasAnyMetricsFilterParams, loadMetricsFiltersFromStorage, saveMetricsFiltersToStorage, type MetricsDimensionalFilter, type MetricsPropertyFilterFieldId, } from '../metrics-filters';
19
+ export { applyMetricsPropertyFilterTokens, buildMetricsDimensionalFilter, clearSavedMetricsFilters, createMetricsFilterBarFields, createMetricsPropertyFilterFields, filterBarItemsToMetricsTokens, getMetricsPropertyFilterTokens, hasAnyMetricsFilterParams, loadMetricsFiltersFromStorage, metricsTokensToFilterBarItems, METRICS_FILTER_BAR_OPERATORS, saveMetricsFiltersToStorage, type MetricsDimensionalFilter, type MetricsPropertyFilterFieldId, } from '../metrics-filters';
20
20
  export { useMetricsActivity, type ActivityBucket } from './use-metrics-activity';
21
21
  export { useMetricsLatency, type LatencyBucket, type LatencyEntity } from './use-metrics-latency';
22
22
  export { useMetricsScores, type MetricsScores, type ScorerAverage, type ScoresBucket } from './use-metrics-scores';
@@ -0,0 +1,6 @@
1
+ import { DatePreset } from './hooks/use-metrics';
2
+ import { DateRangePreset } from '../../ds/components/DateTimeRangePicker';
3
+ /** The date presets the metrics dashboard offers, in `DateTimeRangePicker` terms. */
4
+ export declare const METRICS_PICKER_PRESETS: readonly DateRangePreset[];
5
+ export declare function toPickerPreset(preset: DatePreset): DateRangePreset;
6
+ export declare function fromPickerPreset(preset: DateRangePreset): DatePreset;
@@ -1,4 +1,5 @@
1
1
  import { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';
2
+ import { FilterBarField, FilterBarItem, FilterBarOperator } from '../../ds/components/FilterBar/types';
2
3
  import { PropertyFilterField, PropertyFilterToken } from '../../ds/components/PropertyFilter/types';
3
4
  /** Primitive type options — matches the traces filter vocabulary. */
4
5
  export declare const METRICS_ROOT_ENTITY_TYPE_OPTIONS: readonly [{
@@ -49,7 +50,9 @@ export declare function hasAnyMetricsFilterParams(params: URLSearchParams): bool
49
50
  * The field order is curated for OLAP efficiency: columnar/LowCardinality
50
51
  * dimensions first, then bloom_filter-indexed high-cardinality IDs as
51
52
  * free-text. Fields that are expensive to filter without an index are
52
- * intentionally omitted from this dashboard surface. */
53
+ * intentionally omitted from this dashboard surface.
54
+ *
55
+ * @deprecated The metrics dashboard filters through `FilterBar`. Use `createMetricsFilterBarFields`. */
53
56
  export declare function createMetricsPropertyFilterFields({ availableTags, availableEntityNames, availableServiceNames, availableEnvironments, loading, }: {
54
57
  availableTags: string[];
55
58
  availableEntityNames: string[];
@@ -62,6 +65,25 @@ export declare function createMetricsPropertyFilterFields({ availableTags, avail
62
65
  environments?: boolean;
63
66
  };
64
67
  }): PropertyFilterField[];
68
+ /** Operators of the metrics filter bar. The metrics API matches one value per dimension, so `is`
69
+ * never widens to "is any of", and it requires every listed tag. */
70
+ export declare const METRICS_FILTER_BAR_OPERATORS: FilterBarOperator[];
71
+ /** FilterBar fields for the metrics dashboard, in the same order as before: discovered
72
+ * dimensions first, then the high-cardinality IDs as free text. Provider and model are
73
+ * never offered (there is no discovery endpoint for them yet) but still label the chips
74
+ * that links bring in through `filterProvider` / `filterModel`. */
75
+ export declare function createMetricsFilterBarFields({ availableTags, availableEntityNames, availableServiceNames, availableEnvironments, }: {
76
+ availableTags: string[];
77
+ availableEntityNames: string[];
78
+ availableServiceNames: string[];
79
+ availableEnvironments: string[];
80
+ }): FilterBarField[];
81
+ /** One FilterBar item per token, keyed by field id so chip order == URL order. Empty values
82
+ * are kept: they are chips whose value hasn't been picked yet. The legacy 'Any' sentinel
83
+ * reads as empty, and a repeated single-value param keeps its first value, which is the one
84
+ * the metrics API applies. */
85
+ export declare function metricsTokensToFilterBarItems(tokens: PropertyFilterToken[]): FilterBarItem[];
86
+ export declare function filterBarItemsToMetricsTokens(items: FilterBarItem[]): PropertyFilterToken[];
65
87
  /** Parse filter tokens from URL params, preserving insertion order. */
66
88
  export declare function getMetricsPropertyFilterTokens(searchParams: URLSearchParams): PropertyFilterToken[];
67
89
  /** Return a fresh URLSearchParams containing only metrics filter params. */
@@ -9,6 +9,8 @@ export type ComboboxOption = {
9
9
  displayLabel?: React.ReactNode;
10
10
  start?: React.ReactNode;
11
11
  end?: React.ReactNode;
12
+ /** Extra terms the search matches besides `label` (aliases, ids, a provider name). Never displayed. */
13
+ keywords?: readonly string[];
12
14
  };
13
15
  type ComboboxSharedProps = {
14
16
  options: ComboboxOption[];
@@ -4,6 +4,7 @@ import * as React from 'react';
4
4
  export type DropdownMenuTriggerProps = Omit<MenuPrimitive.Trigger.Props, 'className'> & TriggerButtonProps;
5
5
  type DropdownMenuSubTriggerProps = MenuPrimitive.SubmenuTrigger.Props & {
6
6
  inset?: boolean;
7
+ hint?: React.ReactNode;
7
8
  };
8
9
  type DropdownMenuContentPositionerProps = Omit<MenuPositionerProps, keyof MenuPopupProps>;
9
10
  type DropdownMenuSubContentProps = MenuPopupProps & DropdownMenuContentPositionerProps;
@@ -18,12 +19,22 @@ type DropdownMenuItemProps = MenuPrimitive.Item.Props & {
18
19
  /** Alias for `onClick`, kept for compatibility with the previous Radix API. */
19
20
  onSelect?: MenuPrimitive.Item.Props['onClick'];
20
21
  };
21
- /**
22
- *
23
- * Right now, these are the props mostly used for the menu
24
- * if we find out, consumers need more props, we can just extend it
25
- * with componentProps
26
- */
22
+ export type DropdownMenuRadioOption<V extends string> = {
23
+ value: V;
24
+ label: string;
25
+ icon?: React.ReactNode;
26
+ };
27
+ type DropdownMenuRadioOptionsProps<V extends string> = {
28
+ options: readonly DropdownMenuRadioOption<V>[];
29
+ value: V;
30
+ onValueChange: (value: V) => void;
31
+ };
32
+ declare function DropdownMenuRadioOptions<V extends string>({ options, value, onValueChange, }: DropdownMenuRadioOptionsProps<V>): React.JSX.Element;
33
+ export type DropdownMenuRadioSubProps<V extends string> = DropdownMenuRadioOptionsProps<V> & {
34
+ label: string;
35
+ icon?: React.ReactNode;
36
+ };
37
+ declare function DropdownMenuRadioSub<V extends string>({ label, icon, options, value, onValueChange, }: DropdownMenuRadioSubProps<V>): React.JSX.Element;
27
38
  declare function DropdownMenu({ open, defaultOpen, onOpenChange, children, modal, }: {
28
39
  open?: boolean;
29
40
  defaultOpen?: boolean;
@@ -51,5 +62,7 @@ declare namespace DropdownMenu {
51
62
  var SubContent: React.ForwardRefExoticComponent<Omit<DropdownMenuSubContentProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
52
63
  var SubTrigger: React.ForwardRefExoticComponent<Omit<DropdownMenuSubTriggerProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
53
64
  var RadioGroup: React.NamedExoticComponent<Omit<import("@base-ui/react").ContextMenuRadioGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
65
+ var RadioOptions: typeof DropdownMenuRadioOptions;
66
+ var RadioSub: typeof DropdownMenuRadioSub;
54
67
  }
55
68
  export { DropdownMenu };
@@ -9,10 +9,14 @@ export type InputGroupProps = React.ComponentProps<'div'> & {
9
9
  };
10
10
  declare function InputGroup({ className, size, ...props }: InputGroupProps): React.JSX.Element;
11
11
  declare const inputGroupAddonVariants: (props?: ({
12
+ variant?: "default" | "flush" | null | undefined;
12
13
  align?: "inline-end" | "inline-start" | "block-end" | "block-start" | null | undefined;
13
14
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
14
- export type InputGroupAddonProps = React.ComponentProps<'div'> & VariantProps<typeof inputGroupAddonVariants>;
15
- declare function InputGroupAddon({ className, align, onClick, ...props }: InputGroupAddonProps): React.JSX.Element;
15
+ export type InputGroupAddonProps = React.ComponentProps<'div'> & Omit<VariantProps<typeof inputGroupAddonVariants>, 'variant'> & {
16
+ /** `flush` joins inline buttons without a gap or an inset from the field's outside edge. */
17
+ variant?: VariantProps<typeof inputGroupAddonVariants>['variant'];
18
+ };
19
+ declare function InputGroupAddon({ className, align, variant, onClick, ...props }: InputGroupAddonProps): React.JSX.Element;
16
20
  export declare const inputGroupControlClassName: string;
17
21
  export type InputGroupInputProps = Omit<React.ComponentProps<'input'>, 'size'> & {
18
22
  testId?: string;
@@ -1,4 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
+ import { ScrollAreaMask } from '../ScrollArea';
2
3
  export interface PageLayoutProps {
3
4
  children: ReactNode;
4
5
  /** Left side of the page header row. */
@@ -14,5 +15,11 @@ export interface PageLayoutProps {
14
15
  * `fit` lets the body fill the page edge to edge.
15
16
  */
16
17
  variant?: 'container' | 'fit' | 'narrow';
18
+ /**
19
+ * Fade the body's scrolled edges, using the same values as `ScrollArea`'s `mask`. Off by default.
20
+ * `{ y: true }` fades the top and bottom; `{ bottom: '3rem' }` sets one side's depth.
21
+ * A fade covers whatever sits at that edge, so leave it off for `fit` bodies that hold tables with sticky headers.
22
+ */
23
+ mask?: ScrollAreaMask;
17
24
  }
18
- export declare function PageLayout({ children, breadcrumbs, headerActions, actionRow, header, variant, }: PageLayoutProps): import("react").JSX.Element;
25
+ export declare function PageLayout({ children, breadcrumbs, headerActions, actionRow, header, variant, mask, }: PageLayoutProps): import("react").JSX.Element;
@@ -45,11 +45,12 @@ export type ScrollAreaProps = React.ComponentProps<typeof ScrollAreaPrimitive.Ro
45
45
  };
46
46
  export type ScrollAreaViewportProps = {
47
47
  className?: string;
48
+ contentClassName?: string;
48
49
  children?: React.ReactNode;
49
50
  /** The scrolling element, e.g. a virtualizer's `getScrollElement`. */
50
51
  ref?: React.Ref<HTMLDivElement>;
51
52
  };
52
- declare function ScrollAreaViewport({ className, children, ref }: ScrollAreaViewportProps): React.JSX.Element;
53
+ declare function ScrollAreaViewport({ className, contentClassName, children, ref }: ScrollAreaViewportProps): React.JSX.Element;
53
54
  declare function ScrollArea({ className, children, maxHeight, autoScroll, orientation, scrollButtons, mask, revealScrollbarOnHover, ...props }: ScrollAreaProps): React.JSX.Element;
54
55
  declare function ScrollBar({ className, orientation, revealOnHover, ...props }: React.ComponentProps<typeof ScrollAreaPrimitive.Scrollbar> & {
55
56
  revealOnHover?: boolean;
@@ -2,6 +2,7 @@ export declare const menuItemClass: string;
2
2
  export declare const menuItemDestructiveClass: string;
3
3
  export declare const menuItemTrailingIconClass = "ml-auto flex size-[1.1em] shrink-0 items-center justify-center [&>svg]:size-full";
4
4
  export declare const menuItemCheckClass: string;
5
+ export declare const menuItemHintClass = "ml-auto min-w-0 truncate text-muted-foreground";
5
6
  export declare const menuItemInsetClass = "pl-[calc(.9em+1.1em+.75em)]";
6
7
  export declare const MENU_SIDE_OFFSET = 4;
7
8
  export declare const menuPositionerClass = "z-50 outline-none data-[anchor-hidden]:hidden";
package/dist/style.css CHANGED
@@ -2711,6 +2711,10 @@
2711
2711
  min-height: var(--spacing-header-default);
2712
2712
  }
2713
2713
 
2714
+ .min-h-min {
2715
+ min-height: min-content;
2716
+ }
2717
+
2714
2718
  .min-h-screen {
2715
2719
  min-height: 100vh;
2716
2720
  }
@@ -3929,10 +3933,6 @@
3929
3933
  scroll-padding-block: calc(var(--spacing) * 8);
3930
3934
  }
3931
3935
 
3932
- .\[scrollbar-gutter\:stable\] {
3933
- scrollbar-gutter: stable;
3934
- }
3935
-
3936
3936
  .\[scrollbar-gutter\:stable_both-edges\] {
3937
3937
  scrollbar-gutter: stable both-edges;
3938
3938
  }
@@ -9929,10 +9929,18 @@
9929
9929
  justify-content: space-between;
9930
9930
  }
9931
9931
 
9932
+ .has-\[\>button\]\:pr-0:has( > button) {
9933
+ padding-right: 0;
9934
+ }
9935
+
9932
9936
  .has-\[\>button\]\:pr-1:has( > button) {
9933
9937
  padding-right: var(--spacing);
9934
9938
  }
9935
9939
 
9940
+ .has-\[\>button\]\:pl-0:has( > button) {
9941
+ padding-left: 0;
9942
+ }
9943
+
9936
9944
  .has-\[\>button\]\:pl-1:has( > button) {
9937
9945
  padding-left: var(--spacing);
9938
9946
  }
@@ -12674,6 +12682,10 @@
12674
12682
  color: var(--placeholder);
12675
12683
  }
12676
12684
 
12685
+ .\[\&\>button\]\:mx-0 > button {
12686
+ margin-inline: 0;
12687
+ }
12688
+
12677
12689
  .\[\&\>div\]\:flex > div {
12678
12690
  display: flex;
12679
12691
  }
@@ -3,7 +3,7 @@ import { Tabs } from '@base-ui/react/tabs';
3
3
  import { c as cva } from './index-D_f78K7e.js';
4
4
  import { X, ChevronDown } from 'lucide-react';
5
5
  import { useContext, useRef, useState, useCallback, useLayoutEffect, useMemo, Fragment } from 'react';
6
- import { D as DropdownMenu } from './dropdown-menu-D8GR_NhL.js';
6
+ import { D as DropdownMenu } from './dropdown-menu-C6VtAiYJ.js';
7
7
  import { b as TooltipProvider, T as Tooltip, c as TooltipTrigger, a as TooltipContent } from './tooltip-CCZcMbgy.js';
8
8
  import { T as TabsContext, a as TabListContext } from './tabs-context-Cbuw7i0u.js';
9
9
  import { controlHeight } from './primitives/control-size.es.js';
@@ -294,4 +294,4 @@ const TabList = ({ children, className, variant, size = "md", sticky, style }) =
294
294
  };
295
295
 
296
296
  export { TabList as T };
297
- //# sourceMappingURL=tabs-list-DY_hziv7.js.map
297
+ //# sourceMappingURL=tabs-list-CDep3C2w.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs-list-DY_hziv7.js","sources":["../src/ds/components/Tabs/tabs-list.tsx"],"sourcesContent":["import { Tabs as BaseTabs } from '@base-ui/react/tabs';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { ChevronDown, X } from 'lucide-react';\nimport { Fragment, useCallback, useContext, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { DropdownMenu } from '../DropdownMenu/dropdown-menu';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../Tooltip/tooltip';\nimport { TabListContext, TabsContext } from './tabs-context';\nimport type { TabMeasurement } from './tabs-context';\nimport { controlHeight } from '@/ds/primitives/control-size';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nconst tabListVariants = cva('relative flex items-center text-body', {\n variants: {\n variant: {\n pill: 'w-fit gap-1 rounded-full bg-fill-subtle p-1',\n 'pill-ghost': 'w-fit gap-0.5 rounded-full',\n },\n },\n defaultVariants: {\n variant: 'pill',\n },\n});\n\ntype TabListVariantsProps = VariantProps<typeof tabListVariants>;\n\nexport type TabListVariant = NonNullable<TabListVariantsProps['variant']>;\n\n/** The shared control rung: a list of a size lines up with a Button or Input of that size. */\nexport type TabListSize = 'sm' | 'md';\n\nexport type TabListProps = Omit<TabListVariantsProps, 'variant'> & {\n children: React.ReactNode;\n className?: string;\n sticky?: boolean;\n size?: TabListSize;\n variant?: TabListVariant | null;\n style?: React.CSSProperties;\n};\n\n/** The active pill sits inside the track's inset: 2px on the rung-sized track, 4px when contained. */\nfunction indicatorHeightClass(variant: TabListVariant, contained: boolean) {\n if (variant !== 'pill') return 'h-full';\n return contained ? 'h-[calc(100%-0.5rem)]' : 'h-[calc(100%-0.25rem)]';\n}\n\nexport const TabList = ({ children, className, variant, size = 'md', sticky, style }: TabListProps) => {\n const resolvedVariant = variant ?? 'pill';\n const tabs = useContext(TabsContext);\n const scrollRef = useRef<HTMLDivElement>(null);\n const closeRefs = useRef(new Map<string, HTMLDivElement>());\n const tabPositions = useRef(new Map<string, number>());\n const selectedValue = useRef(tabs?.value);\n const [available, setAvailable] = useState<number | null>(null);\n const [measurements, setMeasurements] = useState<TabMeasurement[]>([]);\n const register = useCallback((tab: TabMeasurement) => {\n setMeasurements(previous => {\n const existing = previous.find(item => item.value === tab.value);\n if (\n existing &&\n existing.element === tab.element &&\n existing.width === tab.width &&\n existing.label === tab.label &&\n existing.disabled === tab.disabled &&\n existing.onClick === tab.onClick &&\n existing.onClose === tab.onClose\n )\n return previous;\n const next = existing ? previous.map(item => (item.value === tab.value ? tab : item)) : [...previous, tab];\n return next.sort((a, b) => {\n if (a.element === b.element) return 0;\n return a.element.compareDocumentPosition(b.element) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n });\n });\n }, []);\n const unregister = useCallback(\n (value: string) => setMeasurements(previous => previous.filter(tab => tab.value !== value)),\n [],\n );\n const contained = tabs?.appearance === 'contained';\n const pillTrack = resolvedVariant === 'pill' && !contained;\n const indicatorHeight = indicatorHeightClass(resolvedVariant, contained);\n useLayoutEffect(() => {\n const viewport = scrollRef.current;\n if (!viewport || !contained) return;\n const measure = () => setAvailable(viewport.clientWidth);\n measure();\n if (!('ResizeObserver' in globalThis)) return;\n const observer = new ResizeObserver(measure);\n observer.observe(viewport);\n return () => observer.disconnect();\n }, [contained]);\n const gap = contained ? 4 : 0;\n const frameReserve = contained ? 30 : 0;\n const hiddenValues = useMemo(() => {\n const hidden = new Set<string>();\n if (!contained || available === null) return hidden;\n const tabTotal = measurements.reduce((sum, tab) => sum + tab.width, 0) + gap * Math.max(measurements.length - 1, 0);\n if (tabTotal + frameReserve <= available) return hidden;\n let remaining = available - frameReserve - 48;\n const active = measurements.find(tab => tab.value === tabs?.value);\n if (active) remaining -= active.width + gap;\n let full = false;\n for (const tab of measurements) {\n if (tab === active) continue;\n if (full || tab.width + gap > remaining) {\n full = true;\n hidden.add(tab.value);\n } else remaining -= tab.width + gap;\n }\n return hidden;\n }, [contained, available, measurements, gap, frameReserve, tabs?.value]);\n const hiddenTabs = measurements.filter(tab => hiddenValues.has(tab.value));\n const overflowX = measurements\n .filter(tab => !hiddenValues.has(tab.value))\n .reduce((sum, tab) => sum + tab.width + gap, contained ? 4 : 0);\n const visibleClosableTabs = measurements.filter(tab => !hiddenValues.has(tab.value) && tab.onClose);\n const listContext = useMemo(\n () => ({ variant: resolvedVariant, size, hiddenValues, register, unregister }),\n [resolvedVariant, size, hiddenValues, register, unregister],\n );\n useLayoutEffect(() => {\n const nextPositions = new Map(tabPositions.current);\n const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n for (const tab of measurements) {\n if (hiddenValues.has(tab.value)) continue;\n const left = tab.element.offsetLeft;\n const previousLeft = tabPositions.current.get(tab.value);\n const close = closeRefs.current.get(tab.value);\n if (close) {\n close.style.left = `${left}px`;\n close.style.top = `${tab.element.offsetTop}px`;\n close.style.width = `${tab.element.offsetWidth}px`;\n close.style.height = `${tab.element.offsetHeight}px`;\n }\n const delta = previousLeft === undefined ? 0 : previousLeft - left;\n const shouldAnimate = tab.value !== tabs?.value && Math.abs(delta) <= 32;\n if (!reduceMotion && shouldAnimate && delta !== 0 && 'animate' in tab.element) {\n tab.element.animate([{ transform: `translateX(${delta}px)` }, { transform: 'translateX(0)' }], {\n duration: 180,\n easing: 'cubic-bezier(0.32, 0.72, 0, 1)',\n });\n }\n nextPositions.set(tab.value, left);\n }\n for (const value of nextPositions.keys()) {\n if (!measurements.some(tab => tab.value === value)) nextPositions.delete(value);\n }\n tabPositions.current = nextPositions;\n }, [hiddenValues, measurements, tabs?.value]);\n useLayoutEffect(() => {\n const previousValue = selectedValue.current;\n selectedValue.current = tabs?.value;\n const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n if (!contained || previousValue === tabs?.value || reduceMotion) return;\n const indicator = scrollRef.current?.querySelector<HTMLElement>('[data-slot=\"tabs-indicator\"]');\n if (!indicator || !('animate' in indicator)) return;\n indicator.animate(\n [\n { opacity: 0.72, scale: '0.97' },\n { opacity: 1, scale: '1' },\n ],\n {\n duration: 140,\n easing: 'cubic-bezier(0.32, 0.72, 0, 1)',\n },\n );\n }, [contained, tabs?.value]);\n\n return (\n <TabListContext.Provider value={listContext}>\n <TooltipProvider delay={200}>\n <div\n ref={scrollRef}\n data-slot=\"tabs-list-scroll\"\n className={cn('relative w-full overflow-x-auto', sticky && 'sticky top-0 z-10 bg-background')}\n >\n <BaseTabs.List\n data-slot=\"tabs-list\"\n data-overflow={hiddenTabs.length > 0 || undefined}\n data-variant={resolvedVariant}\n data-size={size}\n className={cn(\n 'group/tabs-list',\n tabListVariants({ variant: resolvedVariant }),\n // A filled pill track is the control: its outer box takes the rung (like SegmentedControl),\n // and the tabs fill it inside the 2px inset.\n pillTrack && cn(controlHeight[size], 'items-stretch p-0.5'),\n className,\n )}\n style={style}\n >\n {children}\n <BaseTabs.Indicator\n className={cn(\n 'absolute top-1/2 left-0 z-0 rounded-full bg-[var(--tab-indicator-color,var(--fill-hover))]',\n indicatorHeight,\n 'w-[var(--active-tab-width)]',\n 'transition-[width,transform] duration-200 ease-in-out motion-reduce:transition-none',\n )}\n data-slot=\"tabs-indicator\"\n style={{ transform: 'translateY(var(--tabs-indicator-y, -50%)) translateX(var(--active-tab-left))' }}\n />\n </BaseTabs.List>\n <div data-slot=\"tabs-close-actions\">\n {visibleClosableTabs.map(tab => (\n <div\n key={tab.value}\n ref={element => {\n if (element) closeRefs.current.set(tab.value, element);\n else closeRefs.current.delete(tab.value);\n }}\n data-slot=\"tab-close-item\"\n data-visible={tabs?.value === tab.value || undefined}\n >\n <Tooltip>\n <TooltipTrigger\n render={\n <button\n type=\"button\"\n tabIndex={tabs?.value === tab.value ? 0 : -1}\n data-slot=\"tab-close\"\n onClick={tab.onClose}\n className={cn(\n 'rounded p-0.5 hover:bg-fill-hover hover:text-destructive-foreground',\n transitions.colors,\n )}\n />\n }\n >\n <span className=\"sr-only\">Close {tab.label}</span>\n <X aria-hidden=\"true\" className=\"size-3\" />\n </TooltipTrigger>\n <TooltipContent>Close {tab.label}</TooltipContent>\n </Tooltip>\n </div>\n ))}\n </div>\n {hiddenTabs.length > 0 && (\n <div\n data-slot=\"tabs-overflow\"\n style={{ transform: `translateX(${overflowX}px)` }}\n className=\"tabs-overflow\"\n >\n <DropdownMenu>\n <DropdownMenu.Trigger\n aria-label={`${hiddenTabs.length} more tabs`}\n variant=\"ghost\"\n size=\"sm\"\n className=\"tabular-nums\"\n >\n +{hiddenTabs.length}\n <ChevronDown aria-hidden=\"true\" className=\"size-3\" />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content className=\"grid\">\n {hiddenTabs.map((tab, index) => (\n <Fragment key={tab.value}>\n <DropdownMenu.Item\n data-slot=\"tabs-overflow-tab\"\n disabled={tab.disabled}\n className={tab.onClose ? 'pr-9' : undefined}\n style={{ gridArea: `${index + 1} / 1` }}\n onClick={() => {\n tabs?.select(tab.value);\n tab.onClick?.();\n }}\n >\n {tab.label}\n </DropdownMenu.Item>\n {tab.onClose ? (\n <Tooltip>\n <TooltipTrigger\n render={\n <DropdownMenu.Item\n data-slot=\"tabs-overflow-close\"\n className=\"pointer-events-none z-10 m-1 size-6 self-center justify-self-end p-0 opacity-0 hover:text-destructive-foreground data-[highlighted]:text-destructive-foreground\"\n style={{ gridArea: `${index + 1} / 1` }}\n onClick={tab.onClose}\n />\n }\n >\n <span className=\"sr-only\">Close {tab.label}</span>\n <X aria-hidden=\"true\" className=\"size-3\" />\n </TooltipTrigger>\n <TooltipContent side=\"right\">Close {tab.label}</TooltipContent>\n </Tooltip>\n ) : null}\n </Fragment>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n </div>\n )}\n </div>\n </TooltipProvider>\n </TabListContext.Provider>\n );\n};\n"],"names":["BaseTabs"],"mappings":"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"}
1
+ {"version":3,"file":"tabs-list-CDep3C2w.js","sources":["../src/ds/components/Tabs/tabs-list.tsx"],"sourcesContent":["import { Tabs as BaseTabs } from '@base-ui/react/tabs';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { ChevronDown, X } from 'lucide-react';\nimport { Fragment, useCallback, useContext, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { DropdownMenu } from '../DropdownMenu/dropdown-menu';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../Tooltip/tooltip';\nimport { TabListContext, TabsContext } from './tabs-context';\nimport type { TabMeasurement } from './tabs-context';\nimport { controlHeight } from '@/ds/primitives/control-size';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nconst tabListVariants = cva('relative flex items-center text-body', {\n variants: {\n variant: {\n pill: 'w-fit gap-1 rounded-full bg-fill-subtle p-1',\n 'pill-ghost': 'w-fit gap-0.5 rounded-full',\n },\n },\n defaultVariants: {\n variant: 'pill',\n },\n});\n\ntype TabListVariantsProps = VariantProps<typeof tabListVariants>;\n\nexport type TabListVariant = NonNullable<TabListVariantsProps['variant']>;\n\n/** The shared control rung: a list of a size lines up with a Button or Input of that size. */\nexport type TabListSize = 'sm' | 'md';\n\nexport type TabListProps = Omit<TabListVariantsProps, 'variant'> & {\n children: React.ReactNode;\n className?: string;\n sticky?: boolean;\n size?: TabListSize;\n variant?: TabListVariant | null;\n style?: React.CSSProperties;\n};\n\n/** The active pill sits inside the track's inset: 2px on the rung-sized track, 4px when contained. */\nfunction indicatorHeightClass(variant: TabListVariant, contained: boolean) {\n if (variant !== 'pill') return 'h-full';\n return contained ? 'h-[calc(100%-0.5rem)]' : 'h-[calc(100%-0.25rem)]';\n}\n\nexport const TabList = ({ children, className, variant, size = 'md', sticky, style }: TabListProps) => {\n const resolvedVariant = variant ?? 'pill';\n const tabs = useContext(TabsContext);\n const scrollRef = useRef<HTMLDivElement>(null);\n const closeRefs = useRef(new Map<string, HTMLDivElement>());\n const tabPositions = useRef(new Map<string, number>());\n const selectedValue = useRef(tabs?.value);\n const [available, setAvailable] = useState<number | null>(null);\n const [measurements, setMeasurements] = useState<TabMeasurement[]>([]);\n const register = useCallback((tab: TabMeasurement) => {\n setMeasurements(previous => {\n const existing = previous.find(item => item.value === tab.value);\n if (\n existing &&\n existing.element === tab.element &&\n existing.width === tab.width &&\n existing.label === tab.label &&\n existing.disabled === tab.disabled &&\n existing.onClick === tab.onClick &&\n existing.onClose === tab.onClose\n )\n return previous;\n const next = existing ? previous.map(item => (item.value === tab.value ? tab : item)) : [...previous, tab];\n return next.sort((a, b) => {\n if (a.element === b.element) return 0;\n return a.element.compareDocumentPosition(b.element) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n });\n });\n }, []);\n const unregister = useCallback(\n (value: string) => setMeasurements(previous => previous.filter(tab => tab.value !== value)),\n [],\n );\n const contained = tabs?.appearance === 'contained';\n const pillTrack = resolvedVariant === 'pill' && !contained;\n const indicatorHeight = indicatorHeightClass(resolvedVariant, contained);\n useLayoutEffect(() => {\n const viewport = scrollRef.current;\n if (!viewport || !contained) return;\n const measure = () => setAvailable(viewport.clientWidth);\n measure();\n if (!('ResizeObserver' in globalThis)) return;\n const observer = new ResizeObserver(measure);\n observer.observe(viewport);\n return () => observer.disconnect();\n }, [contained]);\n const gap = contained ? 4 : 0;\n const frameReserve = contained ? 30 : 0;\n const hiddenValues = useMemo(() => {\n const hidden = new Set<string>();\n if (!contained || available === null) return hidden;\n const tabTotal = measurements.reduce((sum, tab) => sum + tab.width, 0) + gap * Math.max(measurements.length - 1, 0);\n if (tabTotal + frameReserve <= available) return hidden;\n let remaining = available - frameReserve - 48;\n const active = measurements.find(tab => tab.value === tabs?.value);\n if (active) remaining -= active.width + gap;\n let full = false;\n for (const tab of measurements) {\n if (tab === active) continue;\n if (full || tab.width + gap > remaining) {\n full = true;\n hidden.add(tab.value);\n } else remaining -= tab.width + gap;\n }\n return hidden;\n }, [contained, available, measurements, gap, frameReserve, tabs?.value]);\n const hiddenTabs = measurements.filter(tab => hiddenValues.has(tab.value));\n const overflowX = measurements\n .filter(tab => !hiddenValues.has(tab.value))\n .reduce((sum, tab) => sum + tab.width + gap, contained ? 4 : 0);\n const visibleClosableTabs = measurements.filter(tab => !hiddenValues.has(tab.value) && tab.onClose);\n const listContext = useMemo(\n () => ({ variant: resolvedVariant, size, hiddenValues, register, unregister }),\n [resolvedVariant, size, hiddenValues, register, unregister],\n );\n useLayoutEffect(() => {\n const nextPositions = new Map(tabPositions.current);\n const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n for (const tab of measurements) {\n if (hiddenValues.has(tab.value)) continue;\n const left = tab.element.offsetLeft;\n const previousLeft = tabPositions.current.get(tab.value);\n const close = closeRefs.current.get(tab.value);\n if (close) {\n close.style.left = `${left}px`;\n close.style.top = `${tab.element.offsetTop}px`;\n close.style.width = `${tab.element.offsetWidth}px`;\n close.style.height = `${tab.element.offsetHeight}px`;\n }\n const delta = previousLeft === undefined ? 0 : previousLeft - left;\n const shouldAnimate = tab.value !== tabs?.value && Math.abs(delta) <= 32;\n if (!reduceMotion && shouldAnimate && delta !== 0 && 'animate' in tab.element) {\n tab.element.animate([{ transform: `translateX(${delta}px)` }, { transform: 'translateX(0)' }], {\n duration: 180,\n easing: 'cubic-bezier(0.32, 0.72, 0, 1)',\n });\n }\n nextPositions.set(tab.value, left);\n }\n for (const value of nextPositions.keys()) {\n if (!measurements.some(tab => tab.value === value)) nextPositions.delete(value);\n }\n tabPositions.current = nextPositions;\n }, [hiddenValues, measurements, tabs?.value]);\n useLayoutEffect(() => {\n const previousValue = selectedValue.current;\n selectedValue.current = tabs?.value;\n const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n if (!contained || previousValue === tabs?.value || reduceMotion) return;\n const indicator = scrollRef.current?.querySelector<HTMLElement>('[data-slot=\"tabs-indicator\"]');\n if (!indicator || !('animate' in indicator)) return;\n indicator.animate(\n [\n { opacity: 0.72, scale: '0.97' },\n { opacity: 1, scale: '1' },\n ],\n {\n duration: 140,\n easing: 'cubic-bezier(0.32, 0.72, 0, 1)',\n },\n );\n }, [contained, tabs?.value]);\n\n return (\n <TabListContext.Provider value={listContext}>\n <TooltipProvider delay={200}>\n <div\n ref={scrollRef}\n data-slot=\"tabs-list-scroll\"\n className={cn('relative w-full overflow-x-auto', sticky && 'sticky top-0 z-10 bg-background')}\n >\n <BaseTabs.List\n data-slot=\"tabs-list\"\n data-overflow={hiddenTabs.length > 0 || undefined}\n data-variant={resolvedVariant}\n data-size={size}\n className={cn(\n 'group/tabs-list',\n tabListVariants({ variant: resolvedVariant }),\n // A filled pill track is the control: its outer box takes the rung (like SegmentedControl),\n // and the tabs fill it inside the 2px inset.\n pillTrack && cn(controlHeight[size], 'items-stretch p-0.5'),\n className,\n )}\n style={style}\n >\n {children}\n <BaseTabs.Indicator\n className={cn(\n 'absolute top-1/2 left-0 z-0 rounded-full bg-[var(--tab-indicator-color,var(--fill-hover))]',\n indicatorHeight,\n 'w-[var(--active-tab-width)]',\n 'transition-[width,transform] duration-200 ease-in-out motion-reduce:transition-none',\n )}\n data-slot=\"tabs-indicator\"\n style={{ transform: 'translateY(var(--tabs-indicator-y, -50%)) translateX(var(--active-tab-left))' }}\n />\n </BaseTabs.List>\n <div data-slot=\"tabs-close-actions\">\n {visibleClosableTabs.map(tab => (\n <div\n key={tab.value}\n ref={element => {\n if (element) closeRefs.current.set(tab.value, element);\n else closeRefs.current.delete(tab.value);\n }}\n data-slot=\"tab-close-item\"\n data-visible={tabs?.value === tab.value || undefined}\n >\n <Tooltip>\n <TooltipTrigger\n render={\n <button\n type=\"button\"\n tabIndex={tabs?.value === tab.value ? 0 : -1}\n data-slot=\"tab-close\"\n onClick={tab.onClose}\n className={cn(\n 'rounded p-0.5 hover:bg-fill-hover hover:text-destructive-foreground',\n transitions.colors,\n )}\n />\n }\n >\n <span className=\"sr-only\">Close {tab.label}</span>\n <X aria-hidden=\"true\" className=\"size-3\" />\n </TooltipTrigger>\n <TooltipContent>Close {tab.label}</TooltipContent>\n </Tooltip>\n </div>\n ))}\n </div>\n {hiddenTabs.length > 0 && (\n <div\n data-slot=\"tabs-overflow\"\n style={{ transform: `translateX(${overflowX}px)` }}\n className=\"tabs-overflow\"\n >\n <DropdownMenu>\n <DropdownMenu.Trigger\n aria-label={`${hiddenTabs.length} more tabs`}\n variant=\"ghost\"\n size=\"sm\"\n className=\"tabular-nums\"\n >\n +{hiddenTabs.length}\n <ChevronDown aria-hidden=\"true\" className=\"size-3\" />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content className=\"grid\">\n {hiddenTabs.map((tab, index) => (\n <Fragment key={tab.value}>\n <DropdownMenu.Item\n data-slot=\"tabs-overflow-tab\"\n disabled={tab.disabled}\n className={tab.onClose ? 'pr-9' : undefined}\n style={{ gridArea: `${index + 1} / 1` }}\n onClick={() => {\n tabs?.select(tab.value);\n tab.onClick?.();\n }}\n >\n {tab.label}\n </DropdownMenu.Item>\n {tab.onClose ? (\n <Tooltip>\n <TooltipTrigger\n render={\n <DropdownMenu.Item\n data-slot=\"tabs-overflow-close\"\n className=\"pointer-events-none z-10 m-1 size-6 self-center justify-self-end p-0 opacity-0 hover:text-destructive-foreground data-[highlighted]:text-destructive-foreground\"\n style={{ gridArea: `${index + 1} / 1` }}\n onClick={tab.onClose}\n />\n }\n >\n <span className=\"sr-only\">Close {tab.label}</span>\n <X aria-hidden=\"true\" className=\"size-3\" />\n </TooltipTrigger>\n <TooltipContent side=\"right\">Close {tab.label}</TooltipContent>\n </Tooltip>\n ) : null}\n </Fragment>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n </div>\n )}\n </div>\n </TooltipProvider>\n </TabListContext.Provider>\n );\n};\n"],"names":["BaseTabs"],"mappings":"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"}
@@ -5,7 +5,7 @@ const tabs = require('@base-ui/react/tabs');
5
5
  const index = require('./index-DlPxfJz9.cjs');
6
6
  const lucideReact = require('lucide-react');
7
7
  const React = require('react');
8
- const dropdownMenu = require('./dropdown-menu-Bg96BCnK.cjs');
8
+ const dropdownMenu = require('./dropdown-menu-dHvHFLji.cjs');
9
9
  const tooltip = require('./tooltip-C4txPRSa.cjs');
10
10
  const tabsContext = require('./tabs-context-pnspPkI-.cjs');
11
11
  const primitives_controlSize = require('./primitives/control-size.cjs.js');
@@ -296,4 +296,4 @@ const TabList = ({ children, className, variant, size = "md", sticky, style }) =
296
296
  };
297
297
 
298
298
  exports.TabList = TabList;
299
- //# sourceMappingURL=tabs-list-xikY_dug.cjs.map
299
+ //# sourceMappingURL=tabs-list-DwQsMVKI.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs-list-xikY_dug.cjs","sources":["../src/ds/components/Tabs/tabs-list.tsx"],"sourcesContent":["import { Tabs as BaseTabs } from '@base-ui/react/tabs';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { ChevronDown, X } from 'lucide-react';\nimport { Fragment, useCallback, useContext, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { DropdownMenu } from '../DropdownMenu/dropdown-menu';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../Tooltip/tooltip';\nimport { TabListContext, TabsContext } from './tabs-context';\nimport type { TabMeasurement } from './tabs-context';\nimport { controlHeight } from '@/ds/primitives/control-size';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nconst tabListVariants = cva('relative flex items-center text-body', {\n variants: {\n variant: {\n pill: 'w-fit gap-1 rounded-full bg-fill-subtle p-1',\n 'pill-ghost': 'w-fit gap-0.5 rounded-full',\n },\n },\n defaultVariants: {\n variant: 'pill',\n },\n});\n\ntype TabListVariantsProps = VariantProps<typeof tabListVariants>;\n\nexport type TabListVariant = NonNullable<TabListVariantsProps['variant']>;\n\n/** The shared control rung: a list of a size lines up with a Button or Input of that size. */\nexport type TabListSize = 'sm' | 'md';\n\nexport type TabListProps = Omit<TabListVariantsProps, 'variant'> & {\n children: React.ReactNode;\n className?: string;\n sticky?: boolean;\n size?: TabListSize;\n variant?: TabListVariant | null;\n style?: React.CSSProperties;\n};\n\n/** The active pill sits inside the track's inset: 2px on the rung-sized track, 4px when contained. */\nfunction indicatorHeightClass(variant: TabListVariant, contained: boolean) {\n if (variant !== 'pill') return 'h-full';\n return contained ? 'h-[calc(100%-0.5rem)]' : 'h-[calc(100%-0.25rem)]';\n}\n\nexport const TabList = ({ children, className, variant, size = 'md', sticky, style }: TabListProps) => {\n const resolvedVariant = variant ?? 'pill';\n const tabs = useContext(TabsContext);\n const scrollRef = useRef<HTMLDivElement>(null);\n const closeRefs = useRef(new Map<string, HTMLDivElement>());\n const tabPositions = useRef(new Map<string, number>());\n const selectedValue = useRef(tabs?.value);\n const [available, setAvailable] = useState<number | null>(null);\n const [measurements, setMeasurements] = useState<TabMeasurement[]>([]);\n const register = useCallback((tab: TabMeasurement) => {\n setMeasurements(previous => {\n const existing = previous.find(item => item.value === tab.value);\n if (\n existing &&\n existing.element === tab.element &&\n existing.width === tab.width &&\n existing.label === tab.label &&\n existing.disabled === tab.disabled &&\n existing.onClick === tab.onClick &&\n existing.onClose === tab.onClose\n )\n return previous;\n const next = existing ? previous.map(item => (item.value === tab.value ? tab : item)) : [...previous, tab];\n return next.sort((a, b) => {\n if (a.element === b.element) return 0;\n return a.element.compareDocumentPosition(b.element) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n });\n });\n }, []);\n const unregister = useCallback(\n (value: string) => setMeasurements(previous => previous.filter(tab => tab.value !== value)),\n [],\n );\n const contained = tabs?.appearance === 'contained';\n const pillTrack = resolvedVariant === 'pill' && !contained;\n const indicatorHeight = indicatorHeightClass(resolvedVariant, contained);\n useLayoutEffect(() => {\n const viewport = scrollRef.current;\n if (!viewport || !contained) return;\n const measure = () => setAvailable(viewport.clientWidth);\n measure();\n if (!('ResizeObserver' in globalThis)) return;\n const observer = new ResizeObserver(measure);\n observer.observe(viewport);\n return () => observer.disconnect();\n }, [contained]);\n const gap = contained ? 4 : 0;\n const frameReserve = contained ? 30 : 0;\n const hiddenValues = useMemo(() => {\n const hidden = new Set<string>();\n if (!contained || available === null) return hidden;\n const tabTotal = measurements.reduce((sum, tab) => sum + tab.width, 0) + gap * Math.max(measurements.length - 1, 0);\n if (tabTotal + frameReserve <= available) return hidden;\n let remaining = available - frameReserve - 48;\n const active = measurements.find(tab => tab.value === tabs?.value);\n if (active) remaining -= active.width + gap;\n let full = false;\n for (const tab of measurements) {\n if (tab === active) continue;\n if (full || tab.width + gap > remaining) {\n full = true;\n hidden.add(tab.value);\n } else remaining -= tab.width + gap;\n }\n return hidden;\n }, [contained, available, measurements, gap, frameReserve, tabs?.value]);\n const hiddenTabs = measurements.filter(tab => hiddenValues.has(tab.value));\n const overflowX = measurements\n .filter(tab => !hiddenValues.has(tab.value))\n .reduce((sum, tab) => sum + tab.width + gap, contained ? 4 : 0);\n const visibleClosableTabs = measurements.filter(tab => !hiddenValues.has(tab.value) && tab.onClose);\n const listContext = useMemo(\n () => ({ variant: resolvedVariant, size, hiddenValues, register, unregister }),\n [resolvedVariant, size, hiddenValues, register, unregister],\n );\n useLayoutEffect(() => {\n const nextPositions = new Map(tabPositions.current);\n const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n for (const tab of measurements) {\n if (hiddenValues.has(tab.value)) continue;\n const left = tab.element.offsetLeft;\n const previousLeft = tabPositions.current.get(tab.value);\n const close = closeRefs.current.get(tab.value);\n if (close) {\n close.style.left = `${left}px`;\n close.style.top = `${tab.element.offsetTop}px`;\n close.style.width = `${tab.element.offsetWidth}px`;\n close.style.height = `${tab.element.offsetHeight}px`;\n }\n const delta = previousLeft === undefined ? 0 : previousLeft - left;\n const shouldAnimate = tab.value !== tabs?.value && Math.abs(delta) <= 32;\n if (!reduceMotion && shouldAnimate && delta !== 0 && 'animate' in tab.element) {\n tab.element.animate([{ transform: `translateX(${delta}px)` }, { transform: 'translateX(0)' }], {\n duration: 180,\n easing: 'cubic-bezier(0.32, 0.72, 0, 1)',\n });\n }\n nextPositions.set(tab.value, left);\n }\n for (const value of nextPositions.keys()) {\n if (!measurements.some(tab => tab.value === value)) nextPositions.delete(value);\n }\n tabPositions.current = nextPositions;\n }, [hiddenValues, measurements, tabs?.value]);\n useLayoutEffect(() => {\n const previousValue = selectedValue.current;\n selectedValue.current = tabs?.value;\n const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n if (!contained || previousValue === tabs?.value || reduceMotion) return;\n const indicator = scrollRef.current?.querySelector<HTMLElement>('[data-slot=\"tabs-indicator\"]');\n if (!indicator || !('animate' in indicator)) return;\n indicator.animate(\n [\n { opacity: 0.72, scale: '0.97' },\n { opacity: 1, scale: '1' },\n ],\n {\n duration: 140,\n easing: 'cubic-bezier(0.32, 0.72, 0, 1)',\n },\n );\n }, [contained, tabs?.value]);\n\n return (\n <TabListContext.Provider value={listContext}>\n <TooltipProvider delay={200}>\n <div\n ref={scrollRef}\n data-slot=\"tabs-list-scroll\"\n className={cn('relative w-full overflow-x-auto', sticky && 'sticky top-0 z-10 bg-background')}\n >\n <BaseTabs.List\n data-slot=\"tabs-list\"\n data-overflow={hiddenTabs.length > 0 || undefined}\n data-variant={resolvedVariant}\n data-size={size}\n className={cn(\n 'group/tabs-list',\n tabListVariants({ variant: resolvedVariant }),\n // A filled pill track is the control: its outer box takes the rung (like SegmentedControl),\n // and the tabs fill it inside the 2px inset.\n pillTrack && cn(controlHeight[size], 'items-stretch p-0.5'),\n className,\n )}\n style={style}\n >\n {children}\n <BaseTabs.Indicator\n className={cn(\n 'absolute top-1/2 left-0 z-0 rounded-full bg-[var(--tab-indicator-color,var(--fill-hover))]',\n indicatorHeight,\n 'w-[var(--active-tab-width)]',\n 'transition-[width,transform] duration-200 ease-in-out motion-reduce:transition-none',\n )}\n data-slot=\"tabs-indicator\"\n style={{ transform: 'translateY(var(--tabs-indicator-y, -50%)) translateX(var(--active-tab-left))' }}\n />\n </BaseTabs.List>\n <div data-slot=\"tabs-close-actions\">\n {visibleClosableTabs.map(tab => (\n <div\n key={tab.value}\n ref={element => {\n if (element) closeRefs.current.set(tab.value, element);\n else closeRefs.current.delete(tab.value);\n }}\n data-slot=\"tab-close-item\"\n data-visible={tabs?.value === tab.value || undefined}\n >\n <Tooltip>\n <TooltipTrigger\n render={\n <button\n type=\"button\"\n tabIndex={tabs?.value === tab.value ? 0 : -1}\n data-slot=\"tab-close\"\n onClick={tab.onClose}\n className={cn(\n 'rounded p-0.5 hover:bg-fill-hover hover:text-destructive-foreground',\n transitions.colors,\n )}\n />\n }\n >\n <span className=\"sr-only\">Close {tab.label}</span>\n <X aria-hidden=\"true\" className=\"size-3\" />\n </TooltipTrigger>\n <TooltipContent>Close {tab.label}</TooltipContent>\n </Tooltip>\n </div>\n ))}\n </div>\n {hiddenTabs.length > 0 && (\n <div\n data-slot=\"tabs-overflow\"\n style={{ transform: `translateX(${overflowX}px)` }}\n className=\"tabs-overflow\"\n >\n <DropdownMenu>\n <DropdownMenu.Trigger\n aria-label={`${hiddenTabs.length} more tabs`}\n variant=\"ghost\"\n size=\"sm\"\n className=\"tabular-nums\"\n >\n +{hiddenTabs.length}\n <ChevronDown aria-hidden=\"true\" className=\"size-3\" />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content className=\"grid\">\n {hiddenTabs.map((tab, index) => (\n <Fragment key={tab.value}>\n <DropdownMenu.Item\n data-slot=\"tabs-overflow-tab\"\n disabled={tab.disabled}\n className={tab.onClose ? 'pr-9' : undefined}\n style={{ gridArea: `${index + 1} / 1` }}\n onClick={() => {\n tabs?.select(tab.value);\n tab.onClick?.();\n }}\n >\n {tab.label}\n </DropdownMenu.Item>\n {tab.onClose ? (\n <Tooltip>\n <TooltipTrigger\n render={\n <DropdownMenu.Item\n data-slot=\"tabs-overflow-close\"\n className=\"pointer-events-none z-10 m-1 size-6 self-center justify-self-end p-0 opacity-0 hover:text-destructive-foreground data-[highlighted]:text-destructive-foreground\"\n style={{ gridArea: `${index + 1} / 1` }}\n onClick={tab.onClose}\n />\n }\n >\n <span className=\"sr-only\">Close {tab.label}</span>\n <X aria-hidden=\"true\" className=\"size-3\" />\n </TooltipTrigger>\n <TooltipContent side=\"right\">Close {tab.label}</TooltipContent>\n </Tooltip>\n ) : null}\n </Fragment>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n </div>\n )}\n </div>\n </TooltipProvider>\n </TabListContext.Provider>\n );\n};\n"],"names":["cva","tabs","useContext","TabsContext","useRef","useState","useCallback","useLayoutEffect","useMemo","jsx","TabListContext","TooltipProvider","jsxs","cn","BaseTabs","controlHeight","Tooltip","TooltipTrigger","transitions","X","TooltipContent","DropdownMenu","ChevronDown","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"tabs-list-DwQsMVKI.cjs","sources":["../src/ds/components/Tabs/tabs-list.tsx"],"sourcesContent":["import { Tabs as BaseTabs } from '@base-ui/react/tabs';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { ChevronDown, X } from 'lucide-react';\nimport { Fragment, useCallback, useContext, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { DropdownMenu } from '../DropdownMenu/dropdown-menu';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../Tooltip/tooltip';\nimport { TabListContext, TabsContext } from './tabs-context';\nimport type { TabMeasurement } from './tabs-context';\nimport { controlHeight } from '@/ds/primitives/control-size';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nconst tabListVariants = cva('relative flex items-center text-body', {\n variants: {\n variant: {\n pill: 'w-fit gap-1 rounded-full bg-fill-subtle p-1',\n 'pill-ghost': 'w-fit gap-0.5 rounded-full',\n },\n },\n defaultVariants: {\n variant: 'pill',\n },\n});\n\ntype TabListVariantsProps = VariantProps<typeof tabListVariants>;\n\nexport type TabListVariant = NonNullable<TabListVariantsProps['variant']>;\n\n/** The shared control rung: a list of a size lines up with a Button or Input of that size. */\nexport type TabListSize = 'sm' | 'md';\n\nexport type TabListProps = Omit<TabListVariantsProps, 'variant'> & {\n children: React.ReactNode;\n className?: string;\n sticky?: boolean;\n size?: TabListSize;\n variant?: TabListVariant | null;\n style?: React.CSSProperties;\n};\n\n/** The active pill sits inside the track's inset: 2px on the rung-sized track, 4px when contained. */\nfunction indicatorHeightClass(variant: TabListVariant, contained: boolean) {\n if (variant !== 'pill') return 'h-full';\n return contained ? 'h-[calc(100%-0.5rem)]' : 'h-[calc(100%-0.25rem)]';\n}\n\nexport const TabList = ({ children, className, variant, size = 'md', sticky, style }: TabListProps) => {\n const resolvedVariant = variant ?? 'pill';\n const tabs = useContext(TabsContext);\n const scrollRef = useRef<HTMLDivElement>(null);\n const closeRefs = useRef(new Map<string, HTMLDivElement>());\n const tabPositions = useRef(new Map<string, number>());\n const selectedValue = useRef(tabs?.value);\n const [available, setAvailable] = useState<number | null>(null);\n const [measurements, setMeasurements] = useState<TabMeasurement[]>([]);\n const register = useCallback((tab: TabMeasurement) => {\n setMeasurements(previous => {\n const existing = previous.find(item => item.value === tab.value);\n if (\n existing &&\n existing.element === tab.element &&\n existing.width === tab.width &&\n existing.label === tab.label &&\n existing.disabled === tab.disabled &&\n existing.onClick === tab.onClick &&\n existing.onClose === tab.onClose\n )\n return previous;\n const next = existing ? previous.map(item => (item.value === tab.value ? tab : item)) : [...previous, tab];\n return next.sort((a, b) => {\n if (a.element === b.element) return 0;\n return a.element.compareDocumentPosition(b.element) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n });\n });\n }, []);\n const unregister = useCallback(\n (value: string) => setMeasurements(previous => previous.filter(tab => tab.value !== value)),\n [],\n );\n const contained = tabs?.appearance === 'contained';\n const pillTrack = resolvedVariant === 'pill' && !contained;\n const indicatorHeight = indicatorHeightClass(resolvedVariant, contained);\n useLayoutEffect(() => {\n const viewport = scrollRef.current;\n if (!viewport || !contained) return;\n const measure = () => setAvailable(viewport.clientWidth);\n measure();\n if (!('ResizeObserver' in globalThis)) return;\n const observer = new ResizeObserver(measure);\n observer.observe(viewport);\n return () => observer.disconnect();\n }, [contained]);\n const gap = contained ? 4 : 0;\n const frameReserve = contained ? 30 : 0;\n const hiddenValues = useMemo(() => {\n const hidden = new Set<string>();\n if (!contained || available === null) return hidden;\n const tabTotal = measurements.reduce((sum, tab) => sum + tab.width, 0) + gap * Math.max(measurements.length - 1, 0);\n if (tabTotal + frameReserve <= available) return hidden;\n let remaining = available - frameReserve - 48;\n const active = measurements.find(tab => tab.value === tabs?.value);\n if (active) remaining -= active.width + gap;\n let full = false;\n for (const tab of measurements) {\n if (tab === active) continue;\n if (full || tab.width + gap > remaining) {\n full = true;\n hidden.add(tab.value);\n } else remaining -= tab.width + gap;\n }\n return hidden;\n }, [contained, available, measurements, gap, frameReserve, tabs?.value]);\n const hiddenTabs = measurements.filter(tab => hiddenValues.has(tab.value));\n const overflowX = measurements\n .filter(tab => !hiddenValues.has(tab.value))\n .reduce((sum, tab) => sum + tab.width + gap, contained ? 4 : 0);\n const visibleClosableTabs = measurements.filter(tab => !hiddenValues.has(tab.value) && tab.onClose);\n const listContext = useMemo(\n () => ({ variant: resolvedVariant, size, hiddenValues, register, unregister }),\n [resolvedVariant, size, hiddenValues, register, unregister],\n );\n useLayoutEffect(() => {\n const nextPositions = new Map(tabPositions.current);\n const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n for (const tab of measurements) {\n if (hiddenValues.has(tab.value)) continue;\n const left = tab.element.offsetLeft;\n const previousLeft = tabPositions.current.get(tab.value);\n const close = closeRefs.current.get(tab.value);\n if (close) {\n close.style.left = `${left}px`;\n close.style.top = `${tab.element.offsetTop}px`;\n close.style.width = `${tab.element.offsetWidth}px`;\n close.style.height = `${tab.element.offsetHeight}px`;\n }\n const delta = previousLeft === undefined ? 0 : previousLeft - left;\n const shouldAnimate = tab.value !== tabs?.value && Math.abs(delta) <= 32;\n if (!reduceMotion && shouldAnimate && delta !== 0 && 'animate' in tab.element) {\n tab.element.animate([{ transform: `translateX(${delta}px)` }, { transform: 'translateX(0)' }], {\n duration: 180,\n easing: 'cubic-bezier(0.32, 0.72, 0, 1)',\n });\n }\n nextPositions.set(tab.value, left);\n }\n for (const value of nextPositions.keys()) {\n if (!measurements.some(tab => tab.value === value)) nextPositions.delete(value);\n }\n tabPositions.current = nextPositions;\n }, [hiddenValues, measurements, tabs?.value]);\n useLayoutEffect(() => {\n const previousValue = selectedValue.current;\n selectedValue.current = tabs?.value;\n const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n if (!contained || previousValue === tabs?.value || reduceMotion) return;\n const indicator = scrollRef.current?.querySelector<HTMLElement>('[data-slot=\"tabs-indicator\"]');\n if (!indicator || !('animate' in indicator)) return;\n indicator.animate(\n [\n { opacity: 0.72, scale: '0.97' },\n { opacity: 1, scale: '1' },\n ],\n {\n duration: 140,\n easing: 'cubic-bezier(0.32, 0.72, 0, 1)',\n },\n );\n }, [contained, tabs?.value]);\n\n return (\n <TabListContext.Provider value={listContext}>\n <TooltipProvider delay={200}>\n <div\n ref={scrollRef}\n data-slot=\"tabs-list-scroll\"\n className={cn('relative w-full overflow-x-auto', sticky && 'sticky top-0 z-10 bg-background')}\n >\n <BaseTabs.List\n data-slot=\"tabs-list\"\n data-overflow={hiddenTabs.length > 0 || undefined}\n data-variant={resolvedVariant}\n data-size={size}\n className={cn(\n 'group/tabs-list',\n tabListVariants({ variant: resolvedVariant }),\n // A filled pill track is the control: its outer box takes the rung (like SegmentedControl),\n // and the tabs fill it inside the 2px inset.\n pillTrack && cn(controlHeight[size], 'items-stretch p-0.5'),\n className,\n )}\n style={style}\n >\n {children}\n <BaseTabs.Indicator\n className={cn(\n 'absolute top-1/2 left-0 z-0 rounded-full bg-[var(--tab-indicator-color,var(--fill-hover))]',\n indicatorHeight,\n 'w-[var(--active-tab-width)]',\n 'transition-[width,transform] duration-200 ease-in-out motion-reduce:transition-none',\n )}\n data-slot=\"tabs-indicator\"\n style={{ transform: 'translateY(var(--tabs-indicator-y, -50%)) translateX(var(--active-tab-left))' }}\n />\n </BaseTabs.List>\n <div data-slot=\"tabs-close-actions\">\n {visibleClosableTabs.map(tab => (\n <div\n key={tab.value}\n ref={element => {\n if (element) closeRefs.current.set(tab.value, element);\n else closeRefs.current.delete(tab.value);\n }}\n data-slot=\"tab-close-item\"\n data-visible={tabs?.value === tab.value || undefined}\n >\n <Tooltip>\n <TooltipTrigger\n render={\n <button\n type=\"button\"\n tabIndex={tabs?.value === tab.value ? 0 : -1}\n data-slot=\"tab-close\"\n onClick={tab.onClose}\n className={cn(\n 'rounded p-0.5 hover:bg-fill-hover hover:text-destructive-foreground',\n transitions.colors,\n )}\n />\n }\n >\n <span className=\"sr-only\">Close {tab.label}</span>\n <X aria-hidden=\"true\" className=\"size-3\" />\n </TooltipTrigger>\n <TooltipContent>Close {tab.label}</TooltipContent>\n </Tooltip>\n </div>\n ))}\n </div>\n {hiddenTabs.length > 0 && (\n <div\n data-slot=\"tabs-overflow\"\n style={{ transform: `translateX(${overflowX}px)` }}\n className=\"tabs-overflow\"\n >\n <DropdownMenu>\n <DropdownMenu.Trigger\n aria-label={`${hiddenTabs.length} more tabs`}\n variant=\"ghost\"\n size=\"sm\"\n className=\"tabular-nums\"\n >\n +{hiddenTabs.length}\n <ChevronDown aria-hidden=\"true\" className=\"size-3\" />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content className=\"grid\">\n {hiddenTabs.map((tab, index) => (\n <Fragment key={tab.value}>\n <DropdownMenu.Item\n data-slot=\"tabs-overflow-tab\"\n disabled={tab.disabled}\n className={tab.onClose ? 'pr-9' : undefined}\n style={{ gridArea: `${index + 1} / 1` }}\n onClick={() => {\n tabs?.select(tab.value);\n tab.onClick?.();\n }}\n >\n {tab.label}\n </DropdownMenu.Item>\n {tab.onClose ? (\n <Tooltip>\n <TooltipTrigger\n render={\n <DropdownMenu.Item\n data-slot=\"tabs-overflow-close\"\n className=\"pointer-events-none z-10 m-1 size-6 self-center justify-self-end p-0 opacity-0 hover:text-destructive-foreground data-[highlighted]:text-destructive-foreground\"\n style={{ gridArea: `${index + 1} / 1` }}\n onClick={tab.onClose}\n />\n }\n >\n <span className=\"sr-only\">Close {tab.label}</span>\n <X aria-hidden=\"true\" className=\"size-3\" />\n </TooltipTrigger>\n <TooltipContent side=\"right\">Close {tab.label}</TooltipContent>\n </Tooltip>\n ) : null}\n </Fragment>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n </div>\n )}\n </div>\n </TooltipProvider>\n </TabListContext.Provider>\n );\n};\n"],"names":["cva","tabs","useContext","TabsContext","useRef","useState","useCallback","useLayoutEffect","useMemo","jsx","TabListContext","TooltipProvider","jsxs","cn","BaseTabs","controlHeight","Tooltip","TooltipTrigger","transitions","X","TooltipContent","DropdownMenu","ChevronDown","Fragment"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { Check, X, ShieldCheck } from 'lucide-react';
3
3
  import { A as Activity, m as ActivityTrigger, d as ActivityHeader, f as ActivityIcon, a as ActivityContent } from './activity-BsrB5ADa.js';
4
- import { T as ToolCallArguments } from './tool-call-arguments-CCkJ1btR.js';
4
+ import { T as ToolCallArguments } from './tool-call-arguments-BLCAiFYg.js';
5
5
  import { p as presentTool } from './tool-presentation-BXAo24Ir.js';
6
6
  import { B as Badge } from './Badge-3-G2I_cx.js';
7
7
  import { B as Button } from './Button-60jVnaHt.js';
@@ -68,4 +68,4 @@ function ToolApproval({ toolName, args, status, children, ...actions }) {
68
68
  }
69
69
 
70
70
  export { ToolApproval as T, ToolApprovalActions as a, ToolApprovalStatus as b };
71
- //# sourceMappingURL=tool-approval-TB8r2U_c.js.map
71
+ //# sourceMappingURL=tool-approval-BK2j7aj_.js.map