@mastra/playground-ui 56.0.0 → 57.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/dist/{EmptyState-CdRjFB06.cjs → EmptyState-0MgNiP40.cjs} +11 -5
  2. package/dist/EmptyState-0MgNiP40.cjs.map +1 -0
  3. package/dist/{EmptyState-UWXhBp5U.js → EmptyState-CiZVWvpH.js} +11 -5
  4. package/dist/EmptyState-CiZVWvpH.js.map +1 -0
  5. package/dist/ErrorState-C7-4A-rB.cjs +21 -0
  6. package/dist/ErrorState-C7-4A-rB.cjs.map +1 -0
  7. package/dist/ErrorState-l5gg5Nzw.js +19 -0
  8. package/dist/ErrorState-l5gg5Nzw.js.map +1 -0
  9. package/dist/Header-BVnFQlzE.js +31 -0
  10. package/dist/Header-BVnFQlzE.js.map +1 -0
  11. package/dist/Header-CGjhJ0nQ.cjs +36 -0
  12. package/dist/Header-CGjhJ0nQ.cjs.map +1 -0
  13. package/dist/{PermissionDenied-Dz5qXpQj.cjs → PermissionDenied-CwLIzjpC.cjs} +11 -6
  14. package/dist/PermissionDenied-CwLIzjpC.cjs.map +1 -0
  15. package/dist/{PermissionDenied-B6TSGolC.js → PermissionDenied-DPM04x0a.js} +11 -6
  16. package/dist/PermissionDenied-DPM04x0a.js.map +1 -0
  17. package/dist/{SessionExpired-CF0BGNo_.cjs → SessionExpired-07Lz91i3.cjs} +4 -5
  18. package/dist/SessionExpired-07Lz91i3.cjs.map +1 -0
  19. package/dist/{SessionExpired-Bq5LcsDu.js → SessionExpired-CnJ8zr5Y.js} +4 -5
  20. package/dist/SessionExpired-CnJ8zr5Y.js.map +1 -0
  21. package/dist/ask-user-B_O3GEjY.cjs +216 -0
  22. package/dist/ask-user-B_O3GEjY.cjs.map +1 -0
  23. package/dist/ask-user-gT9rODOe.js +206 -0
  24. package/dist/ask-user-gT9rODOe.js.map +1 -0
  25. package/dist/{combobox-BWM3VH-n.cjs → combobox-BTZyTiyL.cjs} +3 -4
  26. package/dist/{combobox-BWM3VH-n.cjs.map → combobox-BTZyTiyL.cjs.map} +1 -1
  27. package/dist/{combobox-D7xJFZuO.js → combobox-B_gv8nUN.js} +2 -3
  28. package/dist/{combobox-D7xJFZuO.js.map → combobox-B_gv8nUN.js.map} +1 -1
  29. package/dist/components/ActionRow.cjs.js +38 -0
  30. package/dist/components/ActionRow.cjs.js.map +1 -0
  31. package/dist/components/ActionRow.d.ts +2 -0
  32. package/dist/components/ActionRow.es.js +34 -0
  33. package/dist/components/ActionRow.es.js.map +1 -0
  34. package/dist/components/Combobox.cjs.js +1 -1
  35. package/dist/components/Combobox.es.js +1 -1
  36. package/dist/components/Comment.cjs.js +2 -3
  37. package/dist/components/Comment.cjs.js.map +1 -1
  38. package/dist/components/Comment.es.js +1 -2
  39. package/dist/components/Comment.es.js.map +1 -1
  40. package/dist/components/DataCodeSection.cjs.js +1 -1
  41. package/dist/components/DataCodeSection.es.js +1 -1
  42. package/dist/components/DataDetailsPanel.cjs.js +2 -2
  43. package/dist/components/DataDetailsPanel.cjs.js.map +1 -1
  44. package/dist/components/DataDetailsPanel.es.js +2 -2
  45. package/dist/components/DataDetailsPanel.es.js.map +1 -1
  46. package/dist/components/DataPanel.cjs.js +1 -1
  47. package/dist/components/DataPanel.es.js +1 -1
  48. package/dist/components/DateTimePicker.cjs.js +1 -1
  49. package/dist/components/DateTimePicker.es.js +1 -1
  50. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  51. package/dist/components/DateTimeRangePicker.es.js +1 -1
  52. package/dist/components/EmptyState.cjs.js +1 -1
  53. package/dist/components/EmptyState.es.js +1 -1
  54. package/dist/components/EnvironmentVariablesEditor.cjs.js +7 -8
  55. package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
  56. package/dist/components/EnvironmentVariablesEditor.es.js +1 -2
  57. package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
  58. package/dist/components/ErrorState.cjs.js +1 -1
  59. package/dist/components/ErrorState.es.js +1 -1
  60. package/dist/components/FilterBar.cjs.js +490 -38
  61. package/dist/components/FilterBar.cjs.js.map +1 -1
  62. package/dist/components/FilterBar.es.js +490 -42
  63. package/dist/components/FilterBar.es.js.map +1 -1
  64. package/dist/components/FormFieldBlocks.cjs.js +11 -12
  65. package/dist/components/FormFieldBlocks.cjs.js.map +1 -1
  66. package/dist/components/FormFieldBlocks.es.js +4 -5
  67. package/dist/components/FormFieldBlocks.es.js.map +1 -1
  68. package/dist/components/Header.cjs.js +6 -31
  69. package/dist/components/Header.cjs.js.map +1 -1
  70. package/dist/components/Header.es.js +1 -30
  71. package/dist/components/Header.es.js.map +1 -1
  72. package/dist/components/IntegrationDialog.cjs.js +1 -1
  73. package/dist/components/IntegrationDialog.es.js +1 -1
  74. package/dist/components/JSONSchemaForm.cjs.js +2 -2
  75. package/dist/components/JSONSchemaForm.es.js +2 -2
  76. package/dist/components/ListSearch.cjs.js +1 -1
  77. package/dist/components/ListSearch.es.js +1 -1
  78. package/dist/components/LogsDataList.cjs.js +2 -0
  79. package/dist/components/LogsDataList.cjs.js.map +1 -1
  80. package/dist/components/LogsDataList.es.js +2 -0
  81. package/dist/components/LogsDataList.es.js.map +1 -1
  82. package/dist/components/Message.cjs.js +1 -1
  83. package/dist/components/Message.es.js +2 -2
  84. package/dist/components/MetricsCard.cjs.js +1 -1
  85. package/dist/components/MetricsCard.es.js +1 -1
  86. package/dist/components/MetricsKpiCard.cjs.js +1 -1
  87. package/dist/components/MetricsKpiCard.es.js +1 -1
  88. package/dist/components/PageLayout.cjs.js +30 -8
  89. package/dist/components/PageLayout.cjs.js.map +1 -1
  90. package/dist/components/PageLayout.es.js +32 -3
  91. package/dist/components/PageLayout.es.js.map +1 -1
  92. package/dist/components/PermissionDenied.cjs.js +1 -1
  93. package/dist/components/PermissionDenied.es.js +1 -1
  94. package/dist/components/PropertyFilter.cjs.js +2 -2
  95. package/dist/components/PropertyFilter.es.js +3 -3
  96. package/dist/components/RadioGroup.cjs.js +3 -56
  97. package/dist/components/RadioGroup.cjs.js.map +1 -1
  98. package/dist/components/RadioGroup.es.js +1 -39
  99. package/dist/components/RadioGroup.es.js.map +1 -1
  100. package/dist/components/SessionExpired.cjs.js +1 -1
  101. package/dist/components/SessionExpired.es.js +1 -1
  102. package/dist/components/SideDialog.cjs.js +10 -2
  103. package/dist/components/SideDialog.cjs.js.map +1 -1
  104. package/dist/components/SideDialog.es.js +10 -2
  105. package/dist/components/SideDialog.es.js.map +1 -1
  106. package/dist/components/Spinner.cjs.js +1 -1
  107. package/dist/components/Spinner.es.js +1 -1
  108. package/dist/components/Steps.cjs.js +1 -1
  109. package/dist/components/Steps.es.js +1 -1
  110. package/dist/components/Workflow.cjs.js +6 -6
  111. package/dist/components/Workflow.cjs.js.map +1 -1
  112. package/dist/components/Workflow.es.js +6 -6
  113. package/dist/components/Workflow.es.js.map +1 -1
  114. package/dist/components/ai/ask-user.cjs.js +4 -3
  115. package/dist/components/ai/ask-user.cjs.js.map +1 -1
  116. package/dist/components/ai/ask-user.es.js +1 -1
  117. package/dist/components/ai/tool-call.cjs.js +1 -1
  118. package/dist/components/ai/tool-call.es.js +2 -2
  119. package/dist/{data-code-section-qujvEc6j.cjs → data-code-section-Dpd2hzmU.cjs} +4 -4
  120. package/dist/{data-code-section-qujvEc6j.cjs.map → data-code-section-Dpd2hzmU.cjs.map} +1 -1
  121. package/dist/{data-code-section-DKz9Okaz.js → data-code-section-O-DRRO6N.js} +4 -4
  122. package/dist/{data-code-section-DKz9Okaz.js.map → data-code-section-O-DRRO6N.js.map} +1 -1
  123. package/dist/{data-panel-CWjgS1Gh.js → data-panel-CDJMMCvz.js} +3 -3
  124. package/dist/{data-panel-CWjgS1Gh.js.map → data-panel-CDJMMCvz.js.map} +1 -1
  125. package/dist/{data-panel-CWZJKBeW.cjs → data-panel-DNPcL38C.cjs} +3 -3
  126. package/dist/{data-panel-CWZJKBeW.cjs.map → data-panel-DNPcL38C.cjs.map} +1 -1
  127. package/dist/{date-time-range-picker-BcjLbkGu.js → date-time-range-picker-B-C-PPI4.js} +2 -3
  128. package/dist/{date-time-range-picker-BcjLbkGu.js.map → date-time-range-picker-B-C-PPI4.js.map} +1 -1
  129. package/dist/{date-time-range-picker-C6hjZswK.cjs → date-time-range-picker-D_mHYCx_.cjs} +3 -4
  130. package/dist/{date-time-range-picker-C6hjZswK.cjs.map → date-time-range-picker-D_mHYCx_.cjs.map} +1 -1
  131. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  132. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  133. package/dist/domains/chat/components/loading-badge.cjs.js +1 -1
  134. package/dist/domains/chat/components/loading-badge.es.js +1 -1
  135. package/dist/domains/chat/messages/reasoning.cjs.js +1 -1
  136. package/dist/domains/chat/messages/reasoning.cjs.js.map +1 -1
  137. package/dist/domains/chat/messages/reasoning.es.js +1 -1
  138. package/dist/domains/chat/messages/reasoning.es.js.map +1 -1
  139. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +2 -2
  140. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js.map +1 -1
  141. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +2 -2
  142. package/dist/domains/chat/tools/badges/ask-user-badge.es.js.map +1 -1
  143. package/dist/domains/logs/components/logs-error-content.cjs.js +4 -7
  144. package/dist/domains/logs/components/logs-error-content.cjs.js.map +1 -1
  145. package/dist/domains/logs/components/logs-error-content.es.js +4 -7
  146. package/dist/domains/logs/components/logs-error-content.es.js.map +1 -1
  147. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  148. package/dist/domains/logs/components/logs-toolbar.cjs.js.map +1 -1
  149. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  150. package/dist/domains/logs/components/logs-toolbar.es.js.map +1 -1
  151. package/dist/domains/logs/components/no-logs-info.cjs.js +5 -5
  152. package/dist/domains/logs/components/no-logs-info.cjs.js.map +1 -1
  153. package/dist/domains/logs/components/no-logs-info.es.js +6 -6
  154. package/dist/domains/logs/components/no-logs-info.es.js.map +1 -1
  155. package/dist/domains/memory/components/flame-graph.cjs.js +6 -6
  156. package/dist/domains/memory/components/flame-graph.cjs.js.map +1 -1
  157. package/dist/domains/memory/components/flame-graph.es.js +6 -6
  158. package/dist/domains/memory/components/flame-graph.es.js.map +1 -1
  159. package/dist/domains/memory/components/observation-detail-view.cjs.js +10 -11
  160. package/dist/domains/memory/components/observation-detail-view.cjs.js.map +1 -1
  161. package/dist/domains/memory/components/observation-detail-view.es.js +10 -11
  162. package/dist/domains/memory/components/observation-detail-view.es.js.map +1 -1
  163. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  164. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  165. package/dist/domains/metrics/components/kpi-card-view.cjs.js +1 -1
  166. package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
  167. package/dist/domains/metrics/components/latency-card-view.cjs.js +1 -1
  168. package/dist/domains/metrics/components/latency-card-view.es.js +1 -1
  169. package/dist/domains/metrics/components/memory-card-view.cjs.js +1 -1
  170. package/dist/domains/metrics/components/memory-card-view.es.js +1 -1
  171. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +1 -1
  172. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +1 -1
  173. package/dist/domains/metrics/components/scores-card-view.cjs.js +1 -1
  174. package/dist/domains/metrics/components/scores-card-view.es.js +1 -1
  175. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +1 -1
  176. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +1 -1
  177. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +1 -1
  178. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +1 -1
  179. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +1 -1
  180. package/dist/domains/metrics/components/traces-volume-card-view.es.js +1 -1
  181. package/dist/domains/traces/components/no-traces-info.cjs.js +2 -3
  182. package/dist/domains/traces/components/no-traces-info.cjs.js.map +1 -1
  183. package/dist/domains/traces/components/no-traces-info.es.js +2 -3
  184. package/dist/domains/traces/components/no-traces-info.es.js.map +1 -1
  185. package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -1
  186. package/dist/domains/traces/components/span-data-panel-view.es.js +1 -1
  187. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  188. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  189. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  190. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  191. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +1 -1
  192. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +1 -1
  193. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
  194. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  195. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
  196. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
  197. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
  198. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
  199. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  200. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  201. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  202. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  203. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +1 -1
  204. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +1 -1
  205. package/dist/domains/traces/components/trace-columns-menu.cjs.js +4 -4
  206. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  207. package/dist/domains/traces/components/trace-columns-menu.es.js +2 -2
  208. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +2 -2
  209. package/dist/domains/traces/components/trace-data-panel-view.es.js +2 -2
  210. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  211. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  212. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  213. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  214. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
  215. package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
  216. package/dist/domains/traces/components/traces-error-content.cjs.js +3 -3
  217. package/dist/domains/traces/components/traces-error-content.cjs.js.map +1 -1
  218. package/dist/domains/traces/components/traces-error-content.es.js +3 -3
  219. package/dist/domains/traces/components/traces-error-content.es.js.map +1 -1
  220. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +2 -0
  221. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  222. package/dist/domains/traces/components/traces-page-skeleton.es.js +2 -0
  223. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  224. package/dist/domains/traces/hooks/use-trace-url-state.cjs.js +4 -2
  225. package/dist/domains/traces/hooks/use-trace-url-state.cjs.js.map +1 -1
  226. package/dist/domains/traces/hooks/use-trace-url-state.es.js +5 -3
  227. package/dist/domains/traces/hooks/use-trace-url-state.es.js.map +1 -1
  228. package/dist/domains/traces/trace-filters.cjs.js +92 -11
  229. package/dist/domains/traces/trace-filters.cjs.js.map +1 -1
  230. package/dist/domains/traces/trace-filters.es.js +87 -13
  231. package/dist/domains/traces/trace-filters.es.js.map +1 -1
  232. package/dist/domains/traces/trace-query-filters.cjs.js +76 -45
  233. package/dist/domains/traces/trace-query-filters.cjs.js.map +1 -1
  234. package/dist/domains/traces/trace-query-filters.es.js +76 -46
  235. package/dist/domains/traces/trace-query-filters.es.js.map +1 -1
  236. package/dist/domains/traces.cjs.js +7 -0
  237. package/dist/domains/traces.cjs.js.map +1 -1
  238. package/dist/domains/traces.es.js +2 -2
  239. package/dist/ee/signals/components/entity-index-list.cjs.js +2 -0
  240. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  241. package/dist/ee/signals/components/entity-index-list.es.js +2 -0
  242. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  243. package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js +5 -7
  244. package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js.map +1 -1
  245. package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js +5 -7
  246. package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js.map +1 -1
  247. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +11 -13
  248. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  249. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +12 -14
  250. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  251. package/dist/ee/signals/sankey-signals.cjs.js +2 -2
  252. package/dist/ee/signals/sankey-signals.cjs.js.map +1 -1
  253. package/dist/ee/signals/sankey-signals.es.js +2 -2
  254. package/dist/ee/signals/sankey-signals.es.js.map +1 -1
  255. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +10 -11
  256. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js.map +1 -1
  257. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +3 -4
  258. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js.map +1 -1
  259. package/dist/ee/topics/components/topics-layout.cjs.js +1 -1
  260. package/dist/ee/topics/components/topics-layout.cjs.js.map +1 -1
  261. package/dist/ee/topics/components/topics-layout.es.js +1 -1
  262. package/dist/ee/topics/components/topics-layout.es.js.map +1 -1
  263. package/dist/{field-block-DWkbNcsV.js → field-error-id-BLxISyNV.js} +4 -2
  264. package/dist/field-error-id-BLxISyNV.js.map +1 -0
  265. package/dist/{field-block-Dy1IaWbv.cjs → field-error-id-CXi0XkjZ.cjs} +4 -1
  266. package/dist/field-error-id-CXi0XkjZ.cjs.map +1 -0
  267. package/dist/{filter-bar-chip-BxI0NgEz.cjs → filter-bar-chip-D-IRgccJ.cjs} +296 -65
  268. package/dist/filter-bar-chip-D-IRgccJ.cjs.map +1 -0
  269. package/dist/{filter-bar-chip-C-JxWUU8.js → filter-bar-chip-luoMVy8-.js} +293 -67
  270. package/dist/filter-bar-chip-luoMVy8-.js.map +1 -0
  271. package/dist/filter-bar-chip.css +33 -1
  272. package/dist/layout/tabbed-container.cjs.js +2 -2
  273. package/dist/layout/tabbed-container.es.js +2 -2
  274. package/dist/{list-search-vyxsZMAK.cjs → list-search-BEDvqI5f.cjs} +2 -2
  275. package/dist/{list-search-vyxsZMAK.cjs.map → list-search-BEDvqI5f.cjs.map} +1 -1
  276. package/dist/{list-search-BTW0Neuc.js → list-search-BcOawrgy.js} +2 -2
  277. package/dist/{list-search-BTW0Neuc.js.map → list-search-BcOawrgy.js.map} +1 -1
  278. package/dist/{message-BrwbcLPi.js → message-Cs8NW-MR.js} +2 -2
  279. package/dist/{message-BrwbcLPi.js.map → message-Cs8NW-MR.js.map} +1 -1
  280. package/dist/{message-CszposMZ.cjs → message-D9b33Pf_.cjs} +2 -2
  281. package/dist/{message-CszposMZ.cjs.map → message-D9b33Pf_.cjs.map} +1 -1
  282. package/dist/{metrics-card-BUJxiwec.cjs → metrics-card-D-VjFkUM.cjs} +3 -3
  283. package/dist/{metrics-card-BUJxiwec.cjs.map → metrics-card-D-VjFkUM.cjs.map} +1 -1
  284. package/dist/{metrics-card-BlBt1WHw.js → metrics-card-jjLRvic4.js} +3 -3
  285. package/dist/{metrics-card-BlBt1WHw.js.map → metrics-card-jjLRvic4.js.map} +1 -1
  286. package/dist/{metrics-kpi-card-CBSNmtc5.js → metrics-kpi-card-CY6F7nTX.js} +2 -2
  287. package/dist/{metrics-kpi-card-CBSNmtc5.js.map → metrics-kpi-card-CY6F7nTX.js.map} +1 -1
  288. package/dist/{metrics-kpi-card-CgqmNcEC.cjs → metrics-kpi-card-krK6uG7U.cjs} +2 -2
  289. package/dist/{metrics-kpi-card-CgqmNcEC.cjs.map → metrics-kpi-card-krK6uG7U.cjs.map} +1 -1
  290. package/dist/new/layout/app-shell.cjs.js +23 -28
  291. package/dist/new/layout/app-shell.cjs.js.map +1 -1
  292. package/dist/new/layout/app-shell.es.js +23 -28
  293. package/dist/new/layout/app-shell.es.js.map +1 -1
  294. package/dist/{property-filter-applied-BmxCPe2d.cjs → property-filter-applied-CAiO4FBw.cjs} +2 -2
  295. package/dist/{property-filter-applied-BmxCPe2d.cjs.map → property-filter-applied-CAiO4FBw.cjs.map} +1 -1
  296. package/dist/{property-filter-applied-BBiUbtr0.js → property-filter-applied-MIKU9okW.js} +2 -2
  297. package/dist/{property-filter-applied-BBiUbtr0.js.map → property-filter-applied-MIKU9okW.js.map} +1 -1
  298. package/dist/radio-group-BdEPWGzi.cjs +62 -0
  299. package/dist/radio-group-BdEPWGzi.cjs.map +1 -0
  300. package/dist/radio-group-CFZXUXZ5.js +40 -0
  301. package/dist/radio-group-CFZXUXZ5.js.map +1 -0
  302. package/dist/{search-field-block-D0PUUCAE.cjs → search-field-block-DAdvPs1N.cjs} +8 -9
  303. package/dist/{search-field-block-D0PUUCAE.cjs.map → search-field-block-DAdvPs1N.cjs.map} +1 -1
  304. package/dist/{search-field-block-B5vUVTpl.js → search-field-block-DjN9AgLw.js} +2 -3
  305. package/dist/{search-field-block-B5vUVTpl.js.map → search-field-block-DjN9AgLw.js.map} +1 -1
  306. package/dist/{select-field-block-W2u2WmN3.cjs → select-field-block-7EHxArfT.cjs} +8 -9
  307. package/dist/{select-field-block-W2u2WmN3.cjs.map → select-field-block-7EHxArfT.cjs.map} +1 -1
  308. package/dist/{select-field-block-Bu7UXI2H.js → select-field-block-CBte2DyW.js} +2 -3
  309. package/dist/{select-field-block-Bu7UXI2H.js.map → select-field-block-CBte2DyW.js.map} +1 -1
  310. package/dist/{span-payload-primitives-DnRsP93D.cjs → span-payload-primitives-BLKf0qn0.cjs} +2 -2
  311. package/dist/{span-payload-primitives-DnRsP93D.cjs.map → span-payload-primitives-BLKf0qn0.cjs.map} +1 -1
  312. package/dist/{span-payload-primitives-sbxk4CHC.js → span-payload-primitives-CDLOoJfp.js} +2 -2
  313. package/dist/{span-payload-primitives-sbxk4CHC.js.map → span-payload-primitives-CDLOoJfp.js.map} +1 -1
  314. package/dist/{spinner-CqP-NaB2.cjs → spinner-BCpN7LL9.cjs} +9 -3
  315. package/dist/spinner-BCpN7LL9.cjs.map +1 -0
  316. package/dist/{spinner-D2C2DYw8.js → spinner-ylbE0TJA.js} +9 -3
  317. package/dist/spinner-ylbE0TJA.js.map +1 -0
  318. package/dist/src/domains/traces/components/traces-error-content.d.ts +2 -2
  319. package/dist/src/domains/traces/hooks/use-trace-url-state.d.ts +5 -3
  320. package/dist/src/domains/traces/trace-filters.d.ts +19 -4
  321. package/dist/src/domains/traces/trace-query-filters.d.ts +13 -1
  322. package/dist/src/ds/components/ActionRow/action-row.d.ts +9 -0
  323. package/dist/src/ds/components/ActionRow/action-row.stories.d.ts +8 -0
  324. package/dist/src/ds/components/ActionRow/index.d.ts +5 -0
  325. package/dist/src/ds/components/ButtonsGroup/buttons-group.stories.d.ts +7 -5
  326. package/dist/src/ds/components/EmptyState/EmptyState.d.ts +8 -2
  327. package/dist/src/ds/components/EmptyState/empty-state.stories.d.ts +1 -0
  328. package/dist/src/ds/components/ErrorState/ErrorState.d.ts +3 -1
  329. package/dist/src/ds/components/ErrorState/error-state.stories.d.ts +1 -0
  330. package/dist/src/ds/components/FilterBar/filter-bar-advanced-chip.d.ts +10 -0
  331. package/dist/src/ds/components/FilterBar/filter-bar-context.d.ts +46 -9
  332. package/dist/src/ds/components/FilterBar/filter-bar-group-editor.d.ts +25 -0
  333. package/dist/src/ds/components/FilterBar/filter-bar-input.d.ts +8 -1
  334. package/dist/src/ds/components/FilterBar/filter-bar-option-list.d.ts +5 -0
  335. package/dist/src/ds/components/FilterBar/filter-bar-tree.d.ts +36 -0
  336. package/dist/src/ds/components/FilterBar/filter-bar.d.ts +28 -7
  337. package/dist/src/ds/components/FilterBar/filter-bar.stories.d.ts +3 -0
  338. package/dist/src/ds/components/FilterBar/index.d.ts +6 -1
  339. package/dist/src/ds/components/FilterBar/types.d.ts +36 -0
  340. package/dist/src/ds/components/FilterBar/use-settle-on-leave.d.ts +2 -0
  341. package/dist/src/ds/components/PageLayout/index.d.ts +1 -2
  342. package/dist/src/ds/components/PageLayout/page-layout.d.ts +13 -11
  343. package/dist/src/ds/components/PageLayout/page-layout.stories.d.ts +1 -2
  344. package/dist/src/ds/components/PermissionDenied/PermissionDenied.d.ts +3 -1
  345. package/dist/src/ds/components/PermissionDenied/permission-denied.stories.d.ts +1 -0
  346. package/dist/src/ds/components/SessionExpired/SessionExpired.d.ts +3 -1
  347. package/dist/src/ds/components/SessionExpired/session-expired.stories.d.ts +1 -0
  348. package/dist/src/ds/components/Spinner/spinner.d.ts +6 -3
  349. package/dist/src/ds/components/Spinner/spinner.stories.d.ts +1 -0
  350. package/dist/src/ds/components/ai/ask-user/ask-user.d.ts +13 -8
  351. package/dist/src/ds/new/layout/app-shell/app-shell.d.ts +2 -8
  352. package/dist/src/ds/new/layout/app-shell/app-shell.stories.d.ts +0 -1
  353. package/dist/style.css +42 -92
  354. package/dist/{text-field-block--EUJKlY_.js → text-field-block-DBesvdaa.js} +2 -3
  355. package/dist/{text-field-block--EUJKlY_.js.map → text-field-block-DBesvdaa.js.map} +1 -1
  356. package/dist/{text-field-block-BLpLWmu8.cjs → text-field-block-DUMc8MTJ.cjs} +8 -9
  357. package/dist/{text-field-block-BLpLWmu8.cjs.map → text-field-block-DUMc8MTJ.cjs.map} +1 -1
  358. package/dist/{tool-call-K147tCug.js → tool-call-Du8XIzfo.js} +2 -2
  359. package/dist/{tool-call-K147tCug.js.map → tool-call-Du8XIzfo.js.map} +1 -1
  360. package/dist/{tool-call-CMRvRE-v.cjs → tool-call-ZKSbU3LR.cjs} +2 -2
  361. package/dist/{tool-call-CMRvRE-v.cjs.map → tool-call-ZKSbU3LR.cjs.map} +1 -1
  362. package/dist/types-CIPrYAzY.js +9 -0
  363. package/dist/types-CIPrYAzY.js.map +1 -0
  364. package/dist/types-Ns4ZNp-g.cjs +12 -0
  365. package/dist/types-Ns4ZNp-g.cjs.map +1 -0
  366. package/package.json +6 -6
  367. package/dist/EmptyState-CdRjFB06.cjs.map +0 -1
  368. package/dist/EmptyState-UWXhBp5U.js.map +0 -1
  369. package/dist/ErrorState-B3uTRAEd.cjs +0 -16
  370. package/dist/ErrorState-B3uTRAEd.cjs.map +0 -1
  371. package/dist/ErrorState-DqRx8Dw_.js +0 -14
  372. package/dist/ErrorState-DqRx8Dw_.js.map +0 -1
  373. package/dist/PermissionDenied-B6TSGolC.js.map +0 -1
  374. package/dist/PermissionDenied-Dz5qXpQj.cjs.map +0 -1
  375. package/dist/SessionExpired-Bq5LcsDu.js.map +0 -1
  376. package/dist/SessionExpired-CF0BGNo_.cjs.map +0 -1
  377. package/dist/ask-user-CS2e6Re4.cjs +0 -147
  378. package/dist/ask-user-CS2e6Re4.cjs.map +0 -1
  379. package/dist/ask-user-gS3Y1bCc.js +0 -138
  380. package/dist/ask-user-gS3Y1bCc.js.map +0 -1
  381. package/dist/components/MainContent.cjs.js +0 -81
  382. package/dist/components/MainContent.cjs.js.map +0 -1
  383. package/dist/components/MainContent.d.ts +0 -2
  384. package/dist/components/MainContent.es.js +0 -75
  385. package/dist/components/MainContent.es.js.map +0 -1
  386. package/dist/field-block-DWkbNcsV.js.map +0 -1
  387. package/dist/field-block-Dy1IaWbv.cjs.map +0 -1
  388. package/dist/field-error-id-B3Z2Zu5y.cjs +0 -6
  389. package/dist/field-error-id-B3Z2Zu5y.cjs.map +0 -1
  390. package/dist/field-error-id-D3yg1nBh.js +0 -4
  391. package/dist/field-error-id-D3yg1nBh.js.map +0 -1
  392. package/dist/filter-bar-chip-BxI0NgEz.cjs.map +0 -1
  393. package/dist/filter-bar-chip-C-JxWUU8.js.map +0 -1
  394. package/dist/new/layout/page-shell.cjs.js +0 -34
  395. package/dist/new/layout/page-shell.cjs.js.map +0 -1
  396. package/dist/new/layout/page-shell.d.ts +0 -2
  397. package/dist/new/layout/page-shell.es.js +0 -30
  398. package/dist/new/layout/page-shell.es.js.map +0 -1
  399. package/dist/no-data-page-layout-DcVPjj-J.js +0 -9
  400. package/dist/no-data-page-layout-DcVPjj-J.js.map +0 -1
  401. package/dist/no-data-page-layout-Drzbg_w8.cjs +0 -11
  402. package/dist/no-data-page-layout-Drzbg_w8.cjs.map +0 -1
  403. package/dist/page-heading-context-D3yjYoJE.js +0 -9
  404. package/dist/page-heading-context-D3yjYoJE.js.map +0 -1
  405. package/dist/page-heading-context-Du-CpxAx.cjs +0 -12
  406. package/dist/page-heading-context-Du-CpxAx.cjs.map +0 -1
  407. package/dist/page-layout-C9ifD9Q8.cjs +0 -99
  408. package/dist/page-layout-C9ifD9Q8.cjs.map +0 -1
  409. package/dist/page-layout-xcM8IR-B.js +0 -97
  410. package/dist/page-layout-xcM8IR-B.js.map +0 -1
  411. package/dist/spinner-CqP-NaB2.cjs.map +0 -1
  412. package/dist/spinner-D2C2DYw8.js.map +0 -1
  413. package/dist/src/ds/components/MainContent/index.d.ts +0 -1
  414. package/dist/src/ds/components/MainContent/main-content.d.ts +0 -21
  415. package/dist/src/ds/components/MainContent/main-content.stories.d.ts +0 -10
  416. package/dist/src/ds/components/PageLayout/no-data-page-layout.d.ts +0 -6
  417. package/dist/src/ds/components/PageLayout/page-heading-context.d.ts +0 -2
  418. package/dist/src/ds/components/PageLayout/page-layout-column.d.ts +0 -5
  419. package/dist/src/ds/components/PageLayout/page-layout-main-area.d.ts +0 -7
  420. package/dist/src/ds/components/PageLayout/page-layout-root.d.ts +0 -7
  421. package/dist/src/ds/components/PageLayout/page-layout-row.d.ts +0 -11
  422. package/dist/src/ds/components/PageLayout/page-layout-top-area.d.ts +0 -5
  423. package/dist/src/ds/new/layout/page-shell/index.d.ts +0 -1
  424. package/dist/src/ds/new/layout/page-shell/page-shell.d.ts +0 -24
  425. package/dist/src/ds/new/layout/page-shell/page-shell.stories.d.ts +0 -63
@@ -1 +1 @@
1
- {"version":3,"file":"span-payload-primitives-DnRsP93D.cjs","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 { ToolCallPresentedHeader } from '@/ds/components/ai/tool-call';\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 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={<ToolCallPresentedHeader {...presentTool(call.toolName, input)} />}\n >\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 </BadgeWrapper>\n </div>\n );\n}\n","import { ChevronRightIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { SpanPayloadTool } from './span-payload-tool';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\n\n/** Small-caps label above a field of a rich payload. */\nexport function SpanPayloadLabel({ children }: { children: ReactNode }) {\n return <div className=\"text-meta text-placeholder tracking-widest uppercase\">{children}</div>;\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-body 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=\"text-meta text-placeholder flex items-center gap-1 tracking-widest uppercase [&>svg]:size-3\">\n <ChevronRightIcon />\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":["jsx","SpanPayloadJson","jsxs","BadgeWrapper","ToolCallPresentedHeader","presentTool","MarkdownRenderer","Collapsible","CollapsibleTrigger","ChevronRightIcon","CollapsibleContent"],"mappings":"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"}
1
+ {"version":3,"file":"span-payload-primitives-BLKf0qn0.cjs","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 { ToolCallPresentedHeader } from '@/ds/components/ai/tool-call';\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 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={<ToolCallPresentedHeader {...presentTool(call.toolName, input)} />}\n >\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 </BadgeWrapper>\n </div>\n );\n}\n","import { ChevronRightIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { SpanPayloadTool } from './span-payload-tool';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\n\n/** Small-caps label above a field of a rich payload. */\nexport function SpanPayloadLabel({ children }: { children: ReactNode }) {\n return <div className=\"text-meta text-placeholder tracking-widest uppercase\">{children}</div>;\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-body 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=\"text-meta text-placeholder flex items-center gap-1 tracking-widest uppercase [&>svg]:size-3\">\n <ChevronRightIcon />\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":["jsx","SpanPayloadJson","jsxs","BadgeWrapper","ToolCallPresentedHeader","presentTool","MarkdownRenderer","Collapsible","CollapsibleTrigger","ChevronRightIcon","CollapsibleContent"],"mappings":";;;;;;;;;;;AAMA,MAAM,QAAA,GAAW,CAAC,KAAA,KAChB,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAE9D,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,SAAA,GAAY,MAAK,EAA4C;AACpG,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,GAAG,uBAAOA,cAAA,CAACC,yEAAgB,KAAA,EAAc,CAAA;AAC5D,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,KAAS,iBAAA,GAAoB,MAAM,cAAA,GAAiB,KAAA;AACvE,EAAA,IAAI,CAAC,QAAA,CAAS,IAAI,CAAA,IAAK,OAAO,KAAK,QAAA,KAAa,QAAA,IAAY,CAAC,IAAA,CAAK,QAAA,EAAU;AAC1E,IAAA,uBAAOD,cAAA,CAACC,yEAAgB,KAAA,EAAc,CAAA;AAAA,EACxC;AACA,EAAA,MAAM,KAAA,GAAQ,MAAA,IAAU,IAAA,GAAO,IAAA,CAAK,OAAO,IAAA,CAAK,KAAA;AAChD,EAAA,MAAM,MAAA,GAAS,QAAA,IAAY,IAAA,GAAO,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AACrD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,KAAY,IAAA,IAAQ,KAAK,KAAA,KAAU,cAAA;AACtD,EAAA,MAAM,YAAY,OAAO,IAAA,CAAK,SAAA,KAAc,QAAA,GAAW,KAAK,SAAA,GAAY,MAAA;AACxE,EAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,mBAAA,EAAoB,WAAU,qBAAA,EAC1C,QAAA,EAAA;AAAA,IAAA,SAAA,mCAAc,gBAAA,EAAA,EAAkB,QAAA,EAAA,KAAA,CAAM,IAAA,KAAS,aAAA,GAAgB,gBAAgB,WAAA,EAAY,CAAA;AAAA,oBAC5FF,cAAA;AAAA,MAACG,iDAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,QAAQ,OAAA,GAAU,MAAA;AAAA,QAC1B,MAAA,iCAASC,gCAAA,EAAA,EAAyB,GAAGC,6BAAY,IAAA,CAAK,QAAA,EAAU,KAAK,CAAA,EAAG,CAAA;AAAA,QAExE,QAAA,kBAAAH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACZ,QAAA,EAAA;AAAA,UAAA,KAAA,KAAU,MAAA,mCACR,gBAAA,EAAA,EAAiB,KAAA,EAAM,aACtB,QAAA,kBAAAF,cAAA,CAACC,qEAAA,EAAA,EAAgB,KAAA,EAAO,KAAA,EAAO,CAAA,EACjC,CAAA;AAAA,UAED,MAAA,KAAW,MAAA,oBACVD,cAAA,CAAC,gBAAA,EAAA,EAAiB,KAAA,EAAM,UACtB,QAAA,kBAAAA,cAAA,CAACC,qEAAA,EAAA,EAAgB,KAAA,EAAO,MAAA,EAAQ,CAAA,EAClC,CAAA;AAAA,UAED,SAAA,KAAc,MAAA,oBACbD,cAAA,CAAC,gBAAA,EAAA,EAAiB,KAAA,EAAM,SACtB,QAAA,kBAAAA,cAAA,CAACC,qEAAA,EAAA,EAAgB,KAAA,EAAO,SAAA,EAAW,CAAA,EACrC;AAAA,SAAA,EAEJ;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;;ACvCO,SAAS,gBAAA,CAAiB,EAAE,QAAA,EAAS,EAA4B;AACtE,EAAA,uBAAOD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EAAwD,QAAA,EAAS,CAAA;AACzF;AAEO,SAAS,gBAAA,CAAiB,EAAE,KAAA,EAAO,QAAA,EAAS,EAA8C;AAC/F,EAAA,uBACEE,eAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,oBAAA,EAAqB,WAAU,uBAAA,EAC5C,QAAA,EAAA;AAAA,oBAAAF,cAAA,CAAC,oBAAkB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IACxB;AAAA,GAAA,EACH,CAAA;AAEJ;AAEO,SAAS,mBAAA,CAAoB,EAAE,QAAA,EAAS,EAAyB;AACtE,EAAA,uBACEA,cAAA,CAAC,SAAI,WAAA,EAAU,uBAAA,EAAwB,WAAU,2BAAA,EAC/C,QAAA,kBAAAA,cAAA,CAACM,iCAAA,EAAA,EAAkB,QAAA,EAAS,CAAA,EAC9B,CAAA;AAEJ;AAGO,SAAS,sBAAA,CAAuB;AAAA,EACrC,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc;AAChB,CAAA,EAIG;AACD,EAAA,uBACEJ,eAAA,CAACK,2BAAY,WAAA,EACX,QAAA,EAAA;AAAA,oBAAAL,eAAA,CAACM,8BAAA,EAAA,EAAmB,WAAU,6FAAA,EAC5B,QAAA,EAAA;AAAA,sBAAAR,cAAA,CAACS,4BAAA,EAAA,EAAiB,CAAA;AAAA,MACjB;AAAA,KAAA,EACH,CAAA;AAAA,oBACAT,cAAA,CAACU,8BAAA,EAAA,EAAmB,SAAA,EAAU,QAAA,EAAU,QAAA,EAAS;AAAA,GAAA,EACnD,CAAA;AAEJ;AAGO,SAAS,oBAAA,CAAqB,EAAE,SAAA,EAAU,EAA6B;AAC5E,EAAA,uBACEV,cAAA,CAAC,QAAG,WAAA,EAAU,yBAAA,EAA0B,WAAU,qBAAA,EAC/C,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,oCACnB,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAA,CAAC,mBAAgB,KAAA,EAAO,IAAA,EAAM,WAAW,KAAA,EAAO,CAAA,EAAA,EADzC,KAET,CACD,CAAA,EACH,CAAA;AAEJ;;;;;;;;;"}
@@ -4,7 +4,7 @@ import { SpanPayloadJson } from './domains/traces/components/span-payload/span-p
4
4
  import { C as Collapsible, b as CollapsibleTrigger, a as CollapsibleContent } from './collapsible-B2uUy8w5.js';
5
5
  import { M as MarkdownRenderer } from './markdown-renderer-B0gTm_Ea.js';
6
6
  import { BadgeWrapper } from './domains/chat/components/badge-wrapper.es.js';
7
- import { j as ToolCallPresentedHeader } from './tool-call-K147tCug.js';
7
+ import { j as ToolCallPresentedHeader } from './tool-call-Du8XIzfo.js';
8
8
  import { p as presentTool } from './tool-presentation-D-smNbXC.js';
9
9
 
10
10
  const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
@@ -65,4 +65,4 @@ function SpanPayloadToolCalls({ toolCalls }) {
65
65
  }
66
66
 
67
67
  export { SpanPayloadField as S, SpanPayloadMarkdown as a, SpanPayloadToolCalls as b, SpanPayloadCollapsible as c, SpanPayloadLabel as d, SpanPayloadTool as e };
68
- //# sourceMappingURL=span-payload-primitives-sbxk4CHC.js.map
68
+ //# sourceMappingURL=span-payload-primitives-CDLOoJfp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"span-payload-primitives-sbxk4CHC.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 { ToolCallPresentedHeader } from '@/ds/components/ai/tool-call';\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 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={<ToolCallPresentedHeader {...presentTool(call.toolName, input)} />}\n >\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 </BadgeWrapper>\n </div>\n );\n}\n","import { ChevronRightIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { SpanPayloadTool } from './span-payload-tool';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\n\n/** Small-caps label above a field of a rich payload. */\nexport function SpanPayloadLabel({ children }: { children: ReactNode }) {\n return <div className=\"text-meta text-placeholder tracking-widest uppercase\">{children}</div>;\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-body 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=\"text-meta text-placeholder flex items-center gap-1 tracking-widest uppercase [&>svg]:size-3\">\n <ChevronRightIcon />\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-CDLOoJfp.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 { ToolCallPresentedHeader } from '@/ds/components/ai/tool-call';\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 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={<ToolCallPresentedHeader {...presentTool(call.toolName, input)} />}\n >\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 </BadgeWrapper>\n </div>\n );\n}\n","import { ChevronRightIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { SpanPayloadTool } from './span-payload-tool';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\n\n/** Small-caps label above a field of a rich payload. */\nexport function SpanPayloadLabel({ children }: { children: ReactNode }) {\n return <div className=\"text-meta text-placeholder tracking-widest uppercase\">{children}</div>;\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-body 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=\"text-meta text-placeholder flex items-center gap-1 tracking-widest uppercase [&>svg]:size-3\">\n <ChevronRightIcon />\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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"}
@@ -8,7 +8,8 @@ const spinnerVariants = index.cva("spinner inline-block text-foreground", {
8
8
  variants: {
9
9
  size: {
10
10
  sm: "size-4",
11
- md: "size-6"
11
+ md: "size-6",
12
+ lg: "size-8"
12
13
  },
13
14
  variant: {
14
15
  default: "",
@@ -24,13 +25,14 @@ function Spinner({
24
25
  className,
25
26
  size = "md",
26
27
  variant = "default",
28
+ fill = false,
27
29
  "aria-label": ariaLabel = "Loading",
28
30
  role = "status",
29
31
  ...props
30
32
  }) {
31
33
  const resolvedSize = size ?? "md";
32
34
  const resolvedVariant = variant ?? "default";
33
- return /* @__PURE__ */ jsxRuntime.jsx(
35
+ const svg = /* @__PURE__ */ jsxRuntime.jsx(
34
36
  "svg",
35
37
  {
36
38
  ...props,
@@ -47,7 +49,11 @@ function Spinner({
47
49
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("circle", { className: "spinner-ring", cx: "12", cy: "12", r: "8.5" })
48
50
  }
49
51
  );
52
+ if (fill) {
53
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "spinner-fill", className: "flex h-full items-center-safe justify-center-safe", children: svg });
54
+ }
55
+ return svg;
50
56
  }
51
57
 
52
58
  exports.Spinner = Spinner;
53
- //# sourceMappingURL=spinner-CqP-NaB2.cjs.map
59
+ //# sourceMappingURL=spinner-BCpN7LL9.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner-BCpN7LL9.cjs","sources":["../src/ds/components/Spinner/spinner.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nimport './spinner.css';\n\nconst spinnerVariants = cva('spinner inline-block text-foreground', {\n variants: {\n size: {\n sm: 'size-4',\n md: 'size-6',\n lg: 'size-8',\n },\n variant: {\n default: '',\n pulse: '',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'default',\n },\n});\n\ntype SpinnerVariantsProps = VariantProps<typeof spinnerVariants>;\nexport type SpinnerVariant = NonNullable<SpinnerVariantsProps['variant']>;\nexport type SpinnerSize = NonNullable<SpinnerVariantsProps['size']>;\n\nexport type SpinnerProps = Omit<ComponentPropsWithoutRef<'svg'>, 'color' | 'size' | 'fill'> &\n SpinnerVariantsProps & {\n /** Center the spinner in the full height of its parent — the parent must have a definite height. */\n fill?: boolean;\n };\n\nfunction Spinner({\n className,\n size = 'md',\n variant = 'default',\n fill = false,\n 'aria-label': ariaLabel = 'Loading',\n role = 'status',\n ...props\n}: SpinnerProps) {\n const resolvedSize = size ?? 'md';\n const resolvedVariant = variant ?? 'default';\n\n const svg = (\n <svg\n {...props}\n role={role}\n aria-label={ariaLabel}\n data-size={resolvedSize}\n data-variant={resolvedVariant}\n className={cn(spinnerVariants({ size: resolvedSize, variant: resolvedVariant }), className)}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n {resolvedVariant === 'pulse' ? (\n <>\n <circle className=\"spinner-pulse-ring\" cx=\"12\" cy=\"12\" r=\"7\" />\n <circle className=\"spinner-pulse-core\" cx=\"12\" cy=\"12\" r=\"5\" />\n </>\n ) : (\n <circle className=\"spinner-ring\" cx=\"12\" cy=\"12\" r=\"8.5\" />\n )}\n </svg>\n );\n\n if (fill) {\n return (\n <div data-slot=\"spinner-fill\" className=\"flex h-full items-center-safe justify-center-safe\">\n {svg}\n </div>\n );\n }\n\n return svg;\n}\n\nexport { Spinner };\n"],"names":["cva","jsx","cn","jsxs","Fragment"],"mappings":";;;;;;AAQA,MAAM,eAAA,GAAkBA,UAAI,sCAAA,EAAwC;AAAA,EAClE,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,QAAA;AAAA,MACJ,EAAA,EAAI,QAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AAAA,IACA,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,EAAA;AAAA,MACT,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,IAAA;AAAA,IACN,OAAA,EAAS;AAAA;AAEb,CAAC,CAAA;AAYD,SAAS,OAAA,CAAQ;AAAA,EACf,SAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,KAAA;AAAA,EACP,cAAc,SAAA,GAAY,SAAA;AAAA,EAC1B,IAAA,GAAO,QAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAiB;AACf,EAAA,MAAM,eAAe,IAAA,IAAQ,IAAA;AAC7B,EAAA,MAAM,kBAAkB,OAAA,IAAW,SAAA;AAEnC,EAAA,MAAM,GAAA,mBACJC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,IAAA;AAAA,MACA,YAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAW,YAAA;AAAA,MACX,cAAA,EAAc,eAAA;AAAA,MACd,SAAA,EAAWC,WAAA,CAAG,eAAA,CAAgB,EAAE,IAAA,EAAM,cAAc,OAAA,EAAS,eAAA,EAAiB,CAAA,EAAG,SAAS,CAAA;AAAA,MAC1F,KAAA,EAAM,4BAAA;AAAA,MACN,OAAA,EAAQ,WAAA;AAAA,MAEP,QAAA,EAAA,eAAA,KAAoB,0BACnBC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAH,cAAA,CAAC,QAAA,EAAA,EAAO,WAAU,oBAAA,EAAqB,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,GAAA,EAAI,CAAA;AAAA,wBAC7DA,cAAA,CAAC,YAAO,SAAA,EAAU,oBAAA,EAAqB,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,GAAA,EAAI;AAAA,OAAA,EAC/D,CAAA,mBAEAA,cAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,cAAA,EAAe,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,KAAA,EAAM;AAAA;AAAA,GAE7D;AAGF,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,sCACG,KAAA,EAAA,EAAI,WAAA,EAAU,cAAA,EAAe,SAAA,EAAU,qDACrC,QAAA,EAAA,GAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,OAAO,GAAA;AACT;;;;"}
@@ -6,7 +6,8 @@ import './spinner.css';const spinnerVariants = cva("spinner inline-block text-fo
6
6
  variants: {
7
7
  size: {
8
8
  sm: "size-4",
9
- md: "size-6"
9
+ md: "size-6",
10
+ lg: "size-8"
10
11
  },
11
12
  variant: {
12
13
  default: "",
@@ -22,13 +23,14 @@ function Spinner({
22
23
  className,
23
24
  size = "md",
24
25
  variant = "default",
26
+ fill = false,
25
27
  "aria-label": ariaLabel = "Loading",
26
28
  role = "status",
27
29
  ...props
28
30
  }) {
29
31
  const resolvedSize = size ?? "md";
30
32
  const resolvedVariant = variant ?? "default";
31
- return /* @__PURE__ */ jsx(
33
+ const svg = /* @__PURE__ */ jsx(
32
34
  "svg",
33
35
  {
34
36
  ...props,
@@ -45,7 +47,11 @@ function Spinner({
45
47
  ] }) : /* @__PURE__ */ jsx("circle", { className: "spinner-ring", cx: "12", cy: "12", r: "8.5" })
46
48
  }
47
49
  );
50
+ if (fill) {
51
+ return /* @__PURE__ */ jsx("div", { "data-slot": "spinner-fill", className: "flex h-full items-center-safe justify-center-safe", children: svg });
52
+ }
53
+ return svg;
48
54
  }
49
55
 
50
56
  export { Spinner as S };
51
- //# sourceMappingURL=spinner-D2C2DYw8.js.map
57
+ //# sourceMappingURL=spinner-ylbE0TJA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner-ylbE0TJA.js","sources":["../src/ds/components/Spinner/spinner.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nimport './spinner.css';\n\nconst spinnerVariants = cva('spinner inline-block text-foreground', {\n variants: {\n size: {\n sm: 'size-4',\n md: 'size-6',\n lg: 'size-8',\n },\n variant: {\n default: '',\n pulse: '',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'default',\n },\n});\n\ntype SpinnerVariantsProps = VariantProps<typeof spinnerVariants>;\nexport type SpinnerVariant = NonNullable<SpinnerVariantsProps['variant']>;\nexport type SpinnerSize = NonNullable<SpinnerVariantsProps['size']>;\n\nexport type SpinnerProps = Omit<ComponentPropsWithoutRef<'svg'>, 'color' | 'size' | 'fill'> &\n SpinnerVariantsProps & {\n /** Center the spinner in the full height of its parent — the parent must have a definite height. */\n fill?: boolean;\n };\n\nfunction Spinner({\n className,\n size = 'md',\n variant = 'default',\n fill = false,\n 'aria-label': ariaLabel = 'Loading',\n role = 'status',\n ...props\n}: SpinnerProps) {\n const resolvedSize = size ?? 'md';\n const resolvedVariant = variant ?? 'default';\n\n const svg = (\n <svg\n {...props}\n role={role}\n aria-label={ariaLabel}\n data-size={resolvedSize}\n data-variant={resolvedVariant}\n className={cn(spinnerVariants({ size: resolvedSize, variant: resolvedVariant }), className)}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n {resolvedVariant === 'pulse' ? (\n <>\n <circle className=\"spinner-pulse-ring\" cx=\"12\" cy=\"12\" r=\"7\" />\n <circle className=\"spinner-pulse-core\" cx=\"12\" cy=\"12\" r=\"5\" />\n </>\n ) : (\n <circle className=\"spinner-ring\" cx=\"12\" cy=\"12\" r=\"8.5\" />\n )}\n </svg>\n );\n\n if (fill) {\n return (\n <div data-slot=\"spinner-fill\" className=\"flex h-full items-center-safe justify-center-safe\">\n {svg}\n </div>\n );\n }\n\n return svg;\n}\n\nexport { Spinner };\n"],"names":[],"mappings":";;;;AAQA,MAAM,eAAA,GAAkB,IAAI,sCAAA,EAAwC;AAAA,EAClE,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,QAAA;AAAA,MACJ,EAAA,EAAI,QAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AAAA,IACA,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,EAAA;AAAA,MACT,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,IAAA;AAAA,IACN,OAAA,EAAS;AAAA;AAEb,CAAC,CAAA;AAYD,SAAS,OAAA,CAAQ;AAAA,EACf,SAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,KAAA;AAAA,EACP,cAAc,SAAA,GAAY,SAAA;AAAA,EAC1B,IAAA,GAAO,QAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAiB;AACf,EAAA,MAAM,eAAe,IAAA,IAAQ,IAAA;AAC7B,EAAA,MAAM,kBAAkB,OAAA,IAAW,SAAA;AAEnC,EAAA,MAAM,GAAA,mBACJ,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,IAAA;AAAA,MACA,YAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAW,YAAA;AAAA,MACX,cAAA,EAAc,eAAA;AAAA,MACd,SAAA,EAAW,EAAA,CAAG,eAAA,CAAgB,EAAE,IAAA,EAAM,cAAc,OAAA,EAAS,eAAA,EAAiB,CAAA,EAAG,SAAS,CAAA;AAAA,MAC1F,KAAA,EAAM,4BAAA;AAAA,MACN,OAAA,EAAQ,WAAA;AAAA,MAEP,QAAA,EAAA,eAAA,KAAoB,0BACnB,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAA,EAAA,EAAO,WAAU,oBAAA,EAAqB,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,GAAA,EAAI,CAAA;AAAA,wBAC7D,GAAA,CAAC,YAAO,SAAA,EAAU,oBAAA,EAAqB,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,GAAA,EAAI;AAAA,OAAA,EAC/D,CAAA,mBAEA,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,cAAA,EAAe,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,KAAA,EAAM;AAAA;AAAA,GAE7D;AAGF,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,2BACG,KAAA,EAAA,EAAI,WAAA,EAAU,cAAA,EAAe,SAAA,EAAU,qDACrC,QAAA,EAAA,GAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,OAAO,GAAA;AACT;;;;"}
@@ -10,7 +10,7 @@ export interface TracesErrorContentProps {
10
10
  * Renders the appropriate fallback content for a traces-related query error:
11
11
  * `<SessionExpired />` for 401, `<PermissionDenied />` for 403, otherwise `<ErrorState />`.
12
12
  *
13
- * The consumer wraps it in whatever layout they want (NoDataPageLayout for the list page,
14
- * PageLayout.MainArea for the detail page, etc.) — this component only owns the 3-branch decision.
13
+ * The consumer wraps it in whatever layout they want (PageLayout for the list page,
14
+ * a centered div for the detail page, etc.) — this component only owns the 3-branch decision.
15
15
  */
16
16
  export declare function TracesErrorContent({ error, resource, errorTitle }: TracesErrorContentProps): import("react").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  import { TraceSpanView } from '../components/trace-data-panel-view';
2
2
  import { SpanTab, TraceDatePreset } from '../index';
3
- import { EntityOptions, TraceFilterToken, TraceListMode, TraceStatusFilter } from '../trace-filters';
3
+ import { EntityOptions, TraceFilterGroup, TraceFilterToken, TraceListMode, TraceStatusFilter } from '../trace-filters';
4
4
  /** Minimal interface compatible with react-router's `setSearchParams`. */
5
5
  export type SetURLSearchParamsLike = (next: URLSearchParams | ((prev: URLSearchParams) => URLSearchParams), options?: {
6
6
  replace?: boolean;
@@ -36,6 +36,8 @@ export interface UseTraceUrlStateResult {
36
36
  selectedEntityOption: EntityOptions | undefined;
37
37
  selectedStatus: TraceStatusFilter | undefined;
38
38
  filterTokens: TraceFilterToken[];
39
+ /** Root-level advanced (AND/OR) filter groups, read from the `filterGroup` params. */
40
+ filterGroups: TraceFilterGroup[];
39
41
  /**
40
42
  * Selects a row. In traces mode pass just `traceId` (and optionally a `spanId` for an
41
43
  * initial span selection in the panel). In branches mode also pass `anchorSpanId` — the
@@ -61,7 +63,7 @@ export interface UseTraceUrlStateResult {
61
63
  handleHighlightSpans: (spanIds: string[]) => void;
62
64
  /** Switches the list view between traces and branches. Clears the current selection. */
63
65
  handleListModeChange: (mode: TraceListMode) => void;
64
- handleFilterTokensChange: (nextTokens: TraceFilterToken[]) => void;
66
+ handleFilterTokensChange: (nextTokens: TraceFilterToken[], nextGroups?: TraceFilterGroup[]) => void;
65
67
  handleDateChange: (value: Date | undefined, type: 'from' | 'to') => void;
66
68
  /** Writes both ends of a custom range in one URL update (two `handleDateChange` calls in the
67
69
  * same tick would clobber each other through react-router's closure-bound setter). */
@@ -69,7 +71,7 @@ export interface UseTraceUrlStateResult {
69
71
  handleDatePresetChange: (preset: TraceDatePreset) => void;
70
72
  handleRemoveAll: () => void;
71
73
  /** Lower-level helper used by `handleClear`: writes a token set and clears the trace/span selection. */
72
- applyFilterTokens: (tokens: TraceFilterToken[]) => void;
74
+ applyFilterTokens: (tokens: TraceFilterToken[], groups?: TraceFilterGroup[]) => void;
73
75
  }
74
76
  /**
75
77
  * Owns all URL-derived state and URL-modifying handlers for the traces page. Routing-agnostic —
@@ -1,11 +1,12 @@
1
1
  import { EntityType } from '@mastra/core/observability';
2
2
  import { ListTracesArgs } from '@mastra/core/storage';
3
3
  import { TraceMetadataFilterField } from './hooks/use-trace-metadata-filter-fields';
4
- import { TraceFilterOperatorId, TraceFilterToken, TraceQueryRelatedScope } from './trace-query-filters';
4
+ import { TraceFilterGroup, TraceFilterOperatorId, TraceFilterToken, TraceQueryRelatedScope } from './trace-query-filters';
5
5
  import { TraceDatePreset } from './types';
6
- import { FilterBarField, FilterBarItem, FilterBarOperator, FilterBarSuggestionsResolver } from '../../ds/components/FilterBar/types';
6
+ import { FilterBarExpression, FilterBarField, FilterBarItem, FilterBarOperator, FilterBarSuggestionsResolver } from '../../ds/components/FilterBar/types';
7
7
  import { PropertyFilterToken } from '../../ds/components/PropertyFilter/types';
8
- export type { TraceFilterOperatorId, TraceFilterToken, TraceQueryRelatedScope } from './trace-query-filters';
8
+ export type { TraceFilterGroup, TraceFilterLogic, TraceFilterNode, TraceFilterOperatorId, TraceFilterToken, TraceQueryRelatedScope, } from './trace-query-filters';
9
+ export { isTraceFilterGroup } from './trace-query-filters';
9
10
  type EntityTypeValue = `${EntityType}`;
10
11
  export type EntityOptions = {
11
12
  label: string;
@@ -150,6 +151,13 @@ export declare function createTraceFilterBarFields({ availableRootEntityNames, a
150
151
  * Only the legacy 'Any' sentinel is mapped back to an empty value. */
151
152
  export declare function traceTokensToFilterBarItems(tokens: TraceFilterToken[]): FilterBarItem[];
152
153
  export declare function filterBarItemsToTraceTokens(items: FilterBarItem[]): TraceFilterToken[];
154
+ /** Expression-mode value for the FilterBar: root tokens as items, then one
155
+ * group node per advanced filter. Ids inside groups are carried as-is. */
156
+ export declare function traceFiltersToFilterBarExpression(tokens: TraceFilterToken[], groups: TraceFilterGroup[]): FilterBarExpression;
157
+ export declare function filterBarExpressionToTraceFilters(expression: FilterBarExpression): {
158
+ tokens: TraceFilterToken[];
159
+ groups: TraceFilterGroup[];
160
+ };
153
161
  /**
154
162
  * Read filter tokens from URL search params preserving the order in which each
155
163
  * filter was first added (URLSearchParams iterates in insertion order). This
@@ -164,7 +172,14 @@ export declare function getPreservedTraceFilterParams(searchParams: URLSearchPar
164
172
  * creation order of filters. Handles the generic `filterX` params plus the
165
173
  * dedicated synthetic params (rootEntityType, status).
166
174
  */
167
- export declare function applyTracePropertyFilterTokens(params: URLSearchParams, tokens: TraceFilterToken[]): void;
175
+ export declare function applyTracePropertyFilterTokens(params: URLSearchParams, tokens: TraceFilterToken[], groups?: TraceFilterGroup[]): void;
176
+ /** Root-level advanced filter groups live in a repeatable `filterGroup` param,
177
+ * one compact JSON subtree each. Node ids are part of the payload so the
178
+ * FilterBar keeps chip identity across URL round-trips. */
179
+ export declare const TRACE_FILTER_GROUP_PARAM = "filterGroup";
180
+ export declare const serializeTraceFilterGroup: (group: TraceFilterGroup) => string;
181
+ export declare function getTraceFilterGroups(searchParams: URLSearchParams): TraceFilterGroup[];
182
+ export declare function parseTraceFilterGroupParam(raw: string): TraceFilterGroup | undefined;
168
183
  export declare function buildTraceListFilters({ rootEntityType, status, dateFrom, dateTo, tokens, }: {
169
184
  rootEntityType?: string;
170
185
  status?: TraceStatusFilter;
@@ -8,7 +8,18 @@ export declare const isTraceFilterOperatorId: (value: string) => value is TraceF
8
8
  /** A trace filter chip: `operatorId` defaults to `is` (equality / set membership). */
9
9
  export type TraceFilterToken = PropertyFilterToken & {
10
10
  operatorId?: TraceFilterOperatorId;
11
+ /** Only set for tokens inside a group: a group may hold several tokens on the same field. */
12
+ id?: string;
11
13
  };
14
+ export type TraceFilterLogic = 'and' | 'or';
15
+ /** An advanced filter: a nested boolean combination of tokens. */
16
+ export type TraceFilterGroup = {
17
+ id: string;
18
+ logic: TraceFilterLogic;
19
+ nodes: TraceFilterNode[];
20
+ };
21
+ export type TraceFilterNode = TraceFilterToken | TraceFilterGroup;
22
+ export declare const isTraceFilterGroup: (node: TraceFilterNode) => node is TraceFilterGroup;
12
23
  /** Fields whose values must be sent as numbers. Non-numeric input is dropped. */
13
24
  export declare const TRACE_QUERY_NUMERIC_FIELD_IDS: Set<string>;
14
25
  /** Trace-level fields that may be unset. "is not X" on these must also keep traces
@@ -16,9 +27,10 @@ export declare const TRACE_QUERY_NUMERIC_FIELD_IDS: Set<string>;
16
27
  export declare const TRACE_QUERY_OPTIONAL_TRACE_FIELD_IDS: Set<string>;
17
28
  declare const TRACE_QUERY_RELATED_SCOPES: readonly ["spans", "scores", "feedback"];
18
29
  export type TraceQueryRelatedScope = (typeof TRACE_QUERY_RELATED_SCOPES)[number];
19
- export declare function buildTraceQueryRequest({ rootEntityType, status, dateFrom, dateTo, tokens, now, }: Omit<Parameters<typeof buildTraceListFilters>[0], 'tokens' | 'status'> & {
30
+ export declare function buildTraceQueryRequest({ rootEntityType, status, dateFrom, dateTo, tokens, groups, now, }: Omit<Parameters<typeof buildTraceListFilters>[0], 'tokens' | 'status'> & {
20
31
  status?: TraceStatusFilter;
21
32
  tokens: TraceFilterToken[];
33
+ groups?: TraceFilterGroup[];
22
34
  now: Date;
23
35
  }): Pick<QueryTracesInput, 'timeRange' | 'where'>;
24
36
  export declare const TRACE_QUERY_DISCOVERY_MAX_RANGE_MS: number;
@@ -0,0 +1,9 @@
1
+ import { ComponentPropsWithoutRef } from 'react';
2
+ type DivProps = ComponentPropsWithoutRef<'div'>;
3
+ /** One toolbar line: a start group and an end group pushed apart, wrapping on narrow viewports. */
4
+ export declare function ActionRowRoot({ className, ...props }: DivProps): import("react").JSX.Element;
5
+ /** Actions positioned on the left. Grows to fill the line; keeps a floor so the end group wraps under it instead of squeezing it. */
6
+ export declare function ActionRowStart({ className, ...props }: DivProps): import("react").JSX.Element;
7
+ /** Actions positioned on the right. Never shrinks; wraps under the start group when needed. */
8
+ export declare function ActionRowEnd({ className, ...props }: DivProps): import("react").JSX.Element;
9
+ export {};
@@ -0,0 +1,8 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { ActionRow } from './index';
3
+ declare const meta: Meta<typeof ActionRow>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof ActionRow>;
6
+ export declare const StartOnly: Story;
7
+ export declare const StartAndEnd: Story;
8
+ export declare const EndOnly: Story;
@@ -0,0 +1,5 @@
1
+ import { ActionRowEnd, ActionRowRoot, ActionRowStart } from './action-row';
2
+ export declare const ActionRow: typeof ActionRowRoot & {
3
+ Start: typeof ActionRowStart;
4
+ End: typeof ActionRowEnd;
5
+ };
@@ -36,14 +36,16 @@ export declare const WithText: Story;
36
36
  * `ButtonsGroup` merger; an interactive clear button would go in an `InputGroupAddon`
37
37
  * (`align="inline-end"`) with an `InputGroupButton`.
38
38
  *
39
- * No layout classes on the children (`flex-1`/`min-w-0`/`shrink-0`): the group owns sizing in
40
- * `spacing="close"` — the InputGroup fills the row and the Select trigger sizes to its content.
41
- * The group collapses the touching borders into a divider and flattens the inner corners,
42
- * leaving the outer pill rounded.
39
+ * No layout classes on the children (`flex-1`/`min-w-0`/`shrink-0`): the group owns sizing — the
40
+ * InputGroup fills the row and the Select trigger sizes to its content. The group collapses the
41
+ * touching borders into a divider and flattens the inner corners, leaving the outer pill rounded.
42
+ *
43
+ * Both segments sit on the same rung of the size ladder (`md`, the default on both): the group
44
+ * imposes no height of its own, so a segment on a different rung pokes out of the pill.
43
45
  *
44
46
  * Only one class is passed: `rounded-full` on the `SelectTrigger`, an intentional shape choice
45
47
  * so its outer corner matches the InputGroup pill (the trigger's standalone default is
46
- * `rounded-lg`). The `w-[420px]` on the group is just the demo container width.
48
+ * `rounded-lg`). The `w-105` on the group is just the demo container width.
47
49
  */
48
50
  export declare const SearchWithDropdown: Story;
49
51
  /**
@@ -1,10 +1,16 @@
1
1
  import * as React from 'react';
2
2
  export type EmptyStateProps = {
3
- iconSlot: React.ReactNode;
3
+ /** Defaults to a circle-slash icon. Pass `null` to render no icon. */
4
+ iconSlot?: React.ReactNode;
4
5
  titleSlot: React.ReactNode;
5
6
  descriptionSlot?: React.ReactNode;
6
7
  actionSlot?: React.ReactNode;
7
8
  className?: string;
8
9
  as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
10
+ /**
11
+ * `inline` (default) renders the block in place.
12
+ * `fill` centers it in the full height of its parent — the parent must have a definite height.
13
+ */
14
+ variant?: 'inline' | 'fill';
9
15
  };
10
- export declare function EmptyState({ iconSlot, titleSlot, descriptionSlot, actionSlot, className, as: HeadingTag, }: EmptyStateProps): React.JSX.Element;
16
+ export declare function EmptyState({ iconSlot, titleSlot, descriptionSlot, actionSlot, className, as: HeadingTag, variant, }: EmptyStateProps): React.JSX.Element;
@@ -9,3 +9,4 @@ export declare const NoFiles: Story;
9
9
  export declare const NoTeamMembers: Story;
10
10
  export declare const WithoutAction: Story;
11
11
  export declare const CustomHeading: Story;
12
+ export declare const Fill: Story;
@@ -1,6 +1,8 @@
1
+ import { EmptyStateProps } from '../EmptyState';
1
2
  export type ErrorStateProps = {
2
3
  title: string;
3
4
  message: string;
4
5
  action?: React.ReactNode;
6
+ variant?: EmptyStateProps['variant'];
5
7
  };
6
- export declare function ErrorState({ title, message, action }: ErrorStateProps): import("react").JSX.Element;
8
+ export declare function ErrorState({ title, message, action, variant }: ErrorStateProps): import("react").JSX.Element;
@@ -5,3 +5,4 @@ export default meta;
5
5
  type Story = StoryObj<typeof ErrorState>;
6
6
  export declare const Default: Story;
7
7
  export declare const WithRecoveryAction: Story;
8
+ export declare const Fill: Story;
@@ -0,0 +1,10 @@
1
+ import { FilterBarGroup } from './types';
2
+ export type FilterBarAdvancedChipProps = {
3
+ group: FilterBarGroup;
4
+ className?: string;
5
+ };
6
+ /**
7
+ * A root-level group rendered as one "Advanced filter" chip. Its popover hosts the
8
+ * recursive rule builder; the chip's remove button drops the whole subtree.
9
+ */
10
+ export declare function FilterBarAdvancedChip({ group, className }: FilterBarAdvancedChipProps): import("react").JSX.Element;
@@ -1,30 +1,61 @@
1
1
  import { ReactNode } from 'react';
2
- import { FilterBarCommit, FilterBarDraft, FilterBarField, FilterBarItem, FilterBarOperator, FilterBarSegment, FilterBarValue } from './types';
2
+ import { FilterBarValueInput } from './filter-bar-tree';
3
+ import { FilterBarCommit, FilterBarDraft, FilterBarExpression, FilterBarField, FilterBarItem, FilterBarLogic, FilterBarOperator, FilterBarSegment, FilterBarValue } from './types';
4
+ /** Default nesting bound for advanced-filter groups (root-level group = depth 1). */
5
+ export declare const DEFAULT_MAX_GROUP_DEPTH = 3;
6
+ /**
7
+ * Marks a focus scope: the bar and each open advanced-filter popover. Arrow navigation
8
+ * never crosses scopes, so ←/→ inside a popover cannot land back in the bar.
9
+ */
10
+ export declare const FILTER_BAR_SCOPE_ATTR = "data-filter-bar-scope";
3
11
  export type FilterBarContextValue = {
4
12
  fields: FilterBarField[];
5
13
  operators: FilterBarOperator[];
14
+ /** Every rendered item in visual order (groups flattened), including leaving ones. */
6
15
  items: FilterBarItem[];
16
+ /** The rendered tree, including the pending commit and leaving nodes. */
17
+ expression: FilterBarExpression;
18
+ /** False when the consumer passed a flat `FilterBarItem[]`: no groups are offered. */
19
+ groupsEnabled: boolean;
20
+ /** Deepest allowed group nesting (root-level group = 1). */
21
+ maxDepth: number;
7
22
  /** Filter under construction in the input, once a field is picked; `null` otherwise. */
8
23
  draft: FilterBarDraft | null;
9
24
  /** Progress or reset the draft. Its id is assigned on first field pick and kept afterwards. */
10
- setDraft: (next: Omit<FilterBarDraft, 'id' | 'from'> | null) => void;
25
+ setDraft: (next: Omit<FilterBarDraft, 'id' | 'from' | 'groupId'> | null) => void;
11
26
  /** Append an item for the draft, reusing its id so the draft chip becomes the item's chip. */
12
- commitDraft: (next: Required<Omit<FilterBarDraft, 'id' | 'from'>>, value: FilterBarValue) => void;
27
+ commitDraft: (next: Required<Omit<FilterBarDraft, 'id' | 'from' | 'groupId'>>, value: FilterBarValue) => void;
13
28
  /** The draft that just became an item, until its chip has glinted or the bar moves on. */
14
29
  lastCommit: FilterBarCommit | null;
15
30
  settleCommit: () => void;
16
31
  updateItem: (id: string, patch: Partial<Omit<FilterBarItem, 'id'>>) => void;
32
+ /** Removes a leaf. Its group stays, even empty, until the popover closes (see `setOpenGroup`). */
17
33
  removeItem: (id: string) => void;
18
- /** Ids of removed items still rendered while their chip plays its exit animation. */
34
+ /** Ids of removed items and groups still rendered while their chip plays its exit animation. */
19
35
  leaving: ReadonlySet<string>;
20
36
  /** Called by a leaving chip once its exit animation has finished (or when nothing animates). */
21
37
  settleRemove: (id: string) => void;
22
- /** Removes every removable item (chips rendered with `removable={false}` stay). */
38
+ /** Removes every removable item (chips rendered with `removable={false}` stay) and every group left empty. */
23
39
  clear: () => void;
24
40
  /** Whether at least one item can be removed, i.e. whether Clear has anything to do. */
25
41
  hasRemovableItems: boolean;
26
42
  /** Called by chips so `clear` and the Clear button know which items are pinned. */
27
43
  registerNonRemovable: (itemId: string, nonRemovable: boolean) => void;
44
+ /** Appends an empty group to the root (`undefined`) or inside `parentId`, and points the input at it. */
45
+ addGroup: (parentId: string | undefined, logic: FilterBarLogic) => string;
46
+ /** Removes a group and everything below it. */
47
+ removeGroup: (groupId: string) => void;
48
+ setLogic: (groupId: string, logic: FilterBarLogic) => void;
49
+ /** Nesting level of a group (root-level = 1); 0 when unknown. */
50
+ getGroupDepth: (groupId: string) => number;
51
+ /** Root group whose advanced-filter popover is open. */
52
+ openGroupId: string | null;
53
+ /** Open a root group's popover, or close it with `null` (empty groups are pruned on close). */
54
+ setOpenGroup: (groupId: string | null) => void;
55
+ /** Group the input commits into; `undefined` = root. */
56
+ inputTarget: string | undefined;
57
+ /** Point the input at a group (or back at the root with `undefined`) and focus it. */
58
+ openGroupInput: (groupId: string | undefined) => void;
28
59
  getField: (fieldId: string) => FilterBarField | undefined;
29
60
  getOperator: (operatorId: string) => FilterBarOperator | undefined;
30
61
  /** Operators allowed for a field (`field.operators` or every root operator). */
@@ -34,7 +65,8 @@ export type FilterBarContextValue = {
34
65
  /**
35
66
  * Focus a segment of the nearest editable chip starting at `fromIndex` and
36
67
  * walking in `direction` (read-only chips register no segments and are skipped).
37
- * Returns false if nothing was focused.
68
+ * Never leaves the focus scope of the currently focused element. Returns false if
69
+ * nothing was focused.
38
70
  */
39
71
  focusChip: (fromIndex: number, direction: -1 | 1, segment: FilterBarSegment) => boolean;
40
72
  focusInput: () => void;
@@ -50,10 +82,15 @@ export declare function emptyValueFor(operator: FilterBarOperator | undefined):
50
82
  export type FilterBarProviderProps = {
51
83
  fields: FilterBarField[];
52
84
  operators: FilterBarOperator[];
53
- value: FilterBarItem[];
54
- onValueChange: (items: FilterBarItem[]) => void;
85
+ value: FilterBarValueInput;
86
+ /** Receives the same shape as `value` (method syntax so flat-only handlers stay assignable). */
87
+ onValueChange(value: FilterBarValueInput): void;
88
+ /** Derives ids for root-level items only; items inside groups always get a random id
89
+ * because a group may hold several conditions on the same field. */
55
90
  createItemId?: (fieldId: string) => string;
91
+ /** Deepest allowed group nesting (root-level group = 1). Defaults to 3. */
92
+ maxDepth?: number;
56
93
  ariaLabel: string;
57
94
  children: ReactNode;
58
95
  };
59
- export declare function FilterBarProvider({ fields, operators, value, onValueChange, createItemId, ariaLabel, children, }: FilterBarProviderProps): import("react").JSX.Element;
96
+ export declare function FilterBarProvider({ fields, operators, value, onValueChange, createItemId, maxDepth, ariaLabel, children, }: FilterBarProviderProps): import("react").JSX.Element;
@@ -0,0 +1,25 @@
1
+ import { FilterBarGroup, FilterBarLogic } from './types';
2
+ export type FilterBarLogicToggleProps = {
3
+ groupId: string;
4
+ logic: FilterBarLogic;
5
+ className?: string;
6
+ };
7
+ /** `and` / `or` connector in front of a row; every connector of a group shares its logic. */
8
+ export declare function FilterBarLogicToggle({ groupId, logic, className }: FilterBarLogicToggleProps): import("react").JSX.Element;
9
+ export type FilterBarGroupEditorProps = {
10
+ group: FilterBarGroup;
11
+ /** Nesting level of `group` (root-level group = 1). */
12
+ depth: number;
13
+ /** Drops this group; rendered as a trailing `Clear all` in the footer. */
14
+ onRemove?: () => void;
15
+ removeLabel?: string;
16
+ className?: string;
17
+ };
18
+ /**
19
+ * Recursive rule builder shown in an advanced-filter popover. Rows are laid out as
20
+ * `connector | condition`: the first row reads `where`, the following ones carry the
21
+ * group's `and` / `or` toggle. Nested groups render as bordered cards with their own
22
+ * header (logic switch + remove) and footer. The shared typeahead input renders as the
23
+ * last row of the group it is pointed at.
24
+ */
25
+ export declare function FilterBarGroupEditor({ group, depth, onRemove, removeLabel, className, }: FilterBarGroupEditorProps): import("react").JSX.Element;
@@ -2,9 +2,16 @@ export type FilterBarInputProps = {
2
2
  placeholder?: string;
3
3
  className?: string;
4
4
  'aria-label'?: string;
5
+ /**
6
+ * Group this instance commits into; omit for the bar's own input. Only the instance whose
7
+ * `groupId` matches the provider's `inputTarget` renders, so a single input is ever mounted.
8
+ */
9
+ groupId?: string;
10
+ /** Called when Escape is pressed on an empty query inside a group, after the input hands back to the bar. */
11
+ onLeave?: () => void;
5
12
  };
6
13
  /**
7
14
  * Typeahead entry point: type to pick a field, then an operator, then a value.
8
15
  * Focus never leaves the input; the popup is driven with the arrow keys.
9
16
  */
10
- export declare function FilterBarInput({ placeholder, className, 'aria-label': ariaLabel, }: FilterBarInputProps): import("react").JSX.Element;
17
+ export declare function FilterBarInput(props: FilterBarInputProps): import("react").JSX.Element | null;
@@ -1,4 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
+ import { FilterBarOption } from './types';
2
3
  export type FilterBarOptionListProps<T> = {
3
4
  getKey: (option: T) => string;
4
5
  renderOption: (option: T) => ReactNode;
@@ -10,6 +11,10 @@ export type FilterBarOptionListProps<T> = {
10
11
  'aria-label': string;
11
12
  'aria-multiselectable'?: boolean;
12
13
  };
14
+ /** Default value row: the option's leading node (avatar, swatch…) followed by its label. */
15
+ export declare function FilterBarOptionLabel({ option }: {
16
+ option: FilterBarOption;
17
+ }): import("react").JSX.Element;
13
18
  /**
14
19
  * List/status/empty rows for a `ComboboxPrimitive.Root`, laid out like the DS
15
20
  * `Combobox` popup (fluid hover highlight, scroller around the list). Items come