@mastra/playground-ui 60.1.0 → 60.2.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 (729) hide show
  1. package/dist/{ask-user-Dlz2346n.js → ask-user-DE8TaPhb.js} +62 -53
  2. package/dist/ask-user-DE8TaPhb.js.map +1 -0
  3. package/dist/{ask-user-CXu4b7Jw.cjs → ask-user-XYY0fUoI.cjs} +61 -52
  4. package/dist/ask-user-XYY0fUoI.cjs.map +1 -0
  5. package/dist/{checkbox-CI8JtZKS.cjs → checkbox-Bkobte27.cjs} +3 -1
  6. package/dist/checkbox-Bkobte27.cjs.map +1 -0
  7. package/dist/{checkbox-CQedzgsi.js → checkbox-DcNIsz5L.js} +3 -1
  8. package/dist/checkbox-DcNIsz5L.js.map +1 -0
  9. package/dist/{code-block-DY5KsTGY.js → code-block-Bnz7Pq0Q.js} +3 -3
  10. package/dist/code-block-Bnz7Pq0Q.js.map +1 -0
  11. package/dist/{code-block-BzoMjjtf.cjs → code-block-C3DbSINk.cjs} +3 -3
  12. package/dist/code-block-C3DbSINk.cjs.map +1 -0
  13. package/dist/{code-editor-B_wPmKPf.cjs → code-editor-Btr1qm_5.cjs} +26 -6
  14. package/dist/code-editor-Btr1qm_5.cjs.map +1 -0
  15. package/dist/{code-editor-28chVxHw.js → code-editor-DzhYz1fH.js} +26 -6
  16. package/dist/code-editor-DzhYz1fH.js.map +1 -0
  17. package/dist/{combobox-B15qTrWO.js → combobox-DKFPbNMB.js} +13 -11
  18. package/dist/combobox-DKFPbNMB.js.map +1 -0
  19. package/dist/{combobox-DJ0c4o4S.cjs → combobox-RzEkcOuu.cjs} +14 -12
  20. package/dist/combobox-RzEkcOuu.cjs.map +1 -0
  21. package/dist/{combobox-styles-C2MEEpaG.js → combobox-styles-mbcWlNZQ.js} +6 -7
  22. package/dist/combobox-styles-mbcWlNZQ.js.map +1 -0
  23. package/dist/{combobox-styles-DLflBH-G.cjs → combobox-styles-qL3FSgmU.cjs} +5 -6
  24. package/dist/combobox-styles-qL3FSgmU.cjs.map +1 -0
  25. package/dist/components/Checkbox.cjs.js +1 -1
  26. package/dist/components/Checkbox.es.js +1 -1
  27. package/dist/components/CodeBlock.cjs.js +1 -1
  28. package/dist/components/CodeBlock.es.js +1 -1
  29. package/dist/components/CodeEditor.cjs.js +1 -1
  30. package/dist/components/CodeEditor.es.js +1 -1
  31. package/dist/components/Combobox.cjs.js +2 -2
  32. package/dist/components/Combobox.es.js +2 -2
  33. package/dist/components/Comment.cjs.js +7 -9
  34. package/dist/components/Comment.cjs.js.map +1 -1
  35. package/dist/components/Comment.es.js +8 -10
  36. package/dist/components/Comment.es.js.map +1 -1
  37. package/dist/components/DataCodeSection.cjs.js +1 -1
  38. package/dist/components/DataCodeSection.es.js +1 -1
  39. package/dist/components/DataList.cjs.js +5 -5
  40. package/dist/components/DataList.es.js +5 -5
  41. package/dist/components/DataPanel.cjs.js +1 -1
  42. package/dist/components/DataPanel.es.js +1 -1
  43. package/dist/components/DateTimePicker.cjs.js +9 -14
  44. package/dist/components/DateTimePicker.cjs.js.map +1 -1
  45. package/dist/components/DateTimePicker.es.js +9 -14
  46. package/dist/components/DateTimePicker.es.js.map +1 -1
  47. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  48. package/dist/components/DateTimeRangePicker.es.js +1 -1
  49. package/dist/components/EnvironmentVariablesEditor.cjs.js +12 -22
  50. package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
  51. package/dist/components/EnvironmentVariablesEditor.es.js +12 -22
  52. package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
  53. package/dist/components/Field.cjs.js +19 -0
  54. package/dist/components/Field.cjs.js.map +1 -0
  55. package/dist/components/Field.d.ts +2 -0
  56. package/dist/components/Field.es.js +3 -0
  57. package/dist/components/Field.es.js.map +1 -0
  58. package/dist/components/FilterBar.cjs.js +2 -2
  59. package/dist/components/FilterBar.es.js +3 -3
  60. package/dist/components/Form.cjs.js +10 -0
  61. package/dist/components/Form.cjs.js.map +1 -0
  62. package/dist/components/Form.d.ts +2 -0
  63. package/dist/components/Form.es.js +2 -0
  64. package/dist/components/Form.es.js.map +1 -0
  65. package/dist/components/FormFieldBlocks.cjs.js +270 -11
  66. package/dist/components/FormFieldBlocks.cjs.js.map +1 -1
  67. package/dist/components/FormFieldBlocks.es.js +267 -8
  68. package/dist/components/FormFieldBlocks.es.js.map +1 -1
  69. package/dist/components/Input.cjs.js +1 -1
  70. package/dist/components/Input.es.js +1 -1
  71. package/dist/components/InputGroup.cjs.js +1 -1
  72. package/dist/components/InputGroup.es.js +1 -1
  73. package/dist/components/JSONSchemaForm.cjs.js +51 -52
  74. package/dist/components/JSONSchemaForm.cjs.js.map +1 -1
  75. package/dist/components/JSONSchemaForm.es.js +44 -45
  76. package/dist/components/JSONSchemaForm.es.js.map +1 -1
  77. package/dist/components/Label.cjs.js +33 -2
  78. package/dist/components/Label.cjs.js.map +1 -1
  79. package/dist/components/Label.es.js +17 -1
  80. package/dist/components/Label.es.js.map +1 -1
  81. package/dist/components/ListSearch.cjs.js +1 -1
  82. package/dist/components/ListSearch.es.js +1 -1
  83. package/dist/components/LogsDataList.cjs.js +2 -2
  84. package/dist/components/LogsDataList.es.js +2 -2
  85. package/dist/components/MainSidebar.cjs.js +11 -125
  86. package/dist/components/MainSidebar.cjs.js.map +1 -1
  87. package/dist/components/MainSidebar.es.js +1 -120
  88. package/dist/components/MainSidebar.es.js.map +1 -1
  89. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  90. package/dist/components/MarkdownRenderer.es.js +1 -1
  91. package/dist/components/PropertyFilter.cjs.js +24 -21
  92. package/dist/components/PropertyFilter.cjs.js.map +1 -1
  93. package/dist/components/PropertyFilter.es.js +25 -22
  94. package/dist/components/PropertyFilter.es.js.map +1 -1
  95. package/dist/components/RadioGroup.cjs.js +1 -1
  96. package/dist/components/RadioGroup.es.js +1 -1
  97. package/dist/components/RuleBuilder.cjs.js +2 -2
  98. package/dist/components/RuleBuilder.es.js +2 -2
  99. package/dist/components/SearchInput.cjs.js +10 -0
  100. package/dist/components/SearchInput.cjs.js.map +1 -0
  101. package/dist/components/SearchInput.d.ts +2 -0
  102. package/dist/components/SearchInput.es.js +2 -0
  103. package/dist/components/SearchInput.es.js.map +1 -0
  104. package/dist/components/Section.cjs.js +1 -1
  105. package/dist/components/Section.es.js +1 -1
  106. package/dist/components/SegmentedControl.cjs.js +1 -1
  107. package/dist/components/SegmentedControl.es.js +1 -1
  108. package/dist/components/Select.cjs.js +1 -1
  109. package/dist/components/Select.es.js +1 -1
  110. package/dist/components/SideDialog.cjs.js +1 -1
  111. package/dist/components/SideDialog.es.js +1 -1
  112. package/dist/components/Switch.cjs.js +1 -1
  113. package/dist/components/Switch.es.js +1 -1
  114. package/dist/components/Textarea.cjs.js +1 -1
  115. package/dist/components/Textarea.es.js +1 -1
  116. package/dist/components/ThemeToggle.cjs.js +1 -1
  117. package/dist/components/ThemeToggle.es.js +1 -1
  118. package/dist/components/Workflow.cjs.js +3 -3
  119. package/dist/components/Workflow.es.js +3 -3
  120. package/dist/components/ai/activity.cjs.js +1 -1
  121. package/dist/components/ai/activity.es.js +1 -1
  122. package/dist/components/ai/ask-user.cjs.js +1 -1
  123. package/dist/components/ai/ask-user.es.js +1 -1
  124. package/dist/components/ai/plan.cjs.js +1 -1
  125. package/dist/components/ai/plan.es.js +1 -1
  126. package/dist/components/ai/tool-call.cjs.js +1 -1
  127. package/dist/components/ai/tool-call.es.js +1 -1
  128. package/dist/{custom-auto-form-field-yEMBGXu-.js → custom-auto-form-field-BvEhSH73.js} +2 -6
  129. package/dist/custom-auto-form-field-BvEhSH73.js.map +1 -0
  130. package/dist/{custom-auto-form-field-Brfb-0Te.cjs → custom-auto-form-field-DVse5pih.cjs} +2 -6
  131. package/dist/custom-auto-form-field-DVse5pih.cjs.map +1 -0
  132. package/dist/{data-code-section-It6myyvZ.js → data-code-section-DFxE6ckH.js} +22 -19
  133. package/dist/data-code-section-DFxE6ckH.js.map +1 -0
  134. package/dist/{data-code-section-DWBfkrmO.cjs → data-code-section-Ds79F6W-.cjs} +21 -18
  135. package/dist/data-code-section-Ds79F6W-.cjs.map +1 -0
  136. package/dist/{data-list-Y42KyuI1.cjs → data-list-Bqf-fhMx.cjs} +3 -3
  137. package/dist/{data-list-Y42KyuI1.cjs.map → data-list-Bqf-fhMx.cjs.map} +1 -1
  138. package/dist/{data-list-CyeD_u-6.js → data-list-CEIYm7FY.js} +3 -3
  139. package/dist/{data-list-CyeD_u-6.js.map → data-list-CEIYm7FY.js.map} +1 -1
  140. package/dist/{data-list-skeleton-Bk9LI0J0.js → data-list-skeleton-CeyLefM5.js} +2 -2
  141. package/dist/{data-list-skeleton-Bk9LI0J0.js.map → data-list-skeleton-CeyLefM5.js.map} +1 -1
  142. package/dist/{data-list-skeleton-BXPfL0s7.cjs → data-list-skeleton-DuqQkzwC.cjs} +2 -2
  143. package/dist/{data-list-skeleton-BXPfL0s7.cjs.map → data-list-skeleton-DuqQkzwC.cjs.map} +1 -1
  144. package/dist/{data-list-spacer-C8z32twc.js → data-list-spacer-BH2DjRdk.js} +2 -2
  145. package/dist/{data-list-spacer-C8z32twc.js.map → data-list-spacer-BH2DjRdk.js.map} +1 -1
  146. package/dist/{data-list-spacer-BSg2hCx7.cjs → data-list-spacer-DFvaAEqo.cjs} +2 -2
  147. package/dist/{data-list-spacer-BSg2hCx7.cjs.map → data-list-spacer-DFvaAEqo.cjs.map} +1 -1
  148. package/dist/{data-list-top-C-pLBax7.cjs → data-list-top-CvD3KI8R.cjs} +2 -2
  149. package/dist/{data-list-top-C-pLBax7.cjs.map → data-list-top-CvD3KI8R.cjs.map} +1 -1
  150. package/dist/{data-list-top-DheFgb0M.js → data-list-top-CxUWL8gh.js} +2 -2
  151. package/dist/{data-list-top-DheFgb0M.js.map → data-list-top-CxUWL8gh.js.map} +1 -1
  152. package/dist/{data-panel-DuLf5j8S.js → data-panel-CbomKGJt.js} +2 -2
  153. package/dist/{data-panel-DuLf5j8S.js.map → data-panel-CbomKGJt.js.map} +1 -1
  154. package/dist/{data-panel-D7Qk4iwZ.cjs → data-panel-o-QLWuFV.cjs} +2 -2
  155. package/dist/{data-panel-D7Qk4iwZ.cjs.map → data-panel-o-QLWuFV.cjs.map} +1 -1
  156. package/dist/{date-time-range-picker-BDylIIzt.js → date-time-range-picker-B1zYIQTC.js} +56 -55
  157. package/dist/date-time-range-picker-B1zYIQTC.js.map +1 -0
  158. package/dist/{date-time-range-picker-UheN070q.cjs → date-time-range-picker-Bb-CGVEL.cjs} +56 -55
  159. package/dist/date-time-range-picker-Bb-CGVEL.cjs.map +1 -0
  160. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
  161. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
  162. package/dist/domains/chat/messages/dataset-save-action.cjs.js +11 -10
  163. package/dist/domains/chat/messages/dataset-save-action.cjs.js.map +1 -1
  164. package/dist/domains/chat/messages/dataset-save-action.es.js +11 -10
  165. package/dist/domains/chat/messages/dataset-save-action.es.js.map +1 -1
  166. package/dist/domains/chat/messages/message-row.cjs.js +1 -1
  167. package/dist/domains/chat/messages/message-row.es.js +1 -1
  168. package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
  169. package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
  170. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  171. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  172. package/dist/domains/chat/messages/skill-message.cjs.js +1 -1
  173. package/dist/domains/chat/messages/skill-message.es.js +1 -1
  174. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  175. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  176. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +2 -2
  177. package/dist/domains/chat/tools/badges/agent-badge.es.js +2 -2
  178. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  179. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  180. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +1 -1
  181. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +1 -1
  182. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +2 -2
  183. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
  184. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +1 -1
  185. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +1 -1
  186. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +1 -1
  187. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +1 -1
  188. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  189. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  190. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +2 -2
  191. package/dist/domains/chat/tools/badges/tool-badge.es.js +2 -2
  192. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +2 -2
  193. package/dist/domains/chat/tools/badges/workflow-badge.es.js +2 -2
  194. package/dist/domains/chat/tools/submit-plan-tool.cjs.js +2 -2
  195. package/dist/domains/chat/tools/submit-plan-tool.es.js +2 -2
  196. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  197. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  198. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +18 -16
  199. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js.map +1 -1
  200. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +18 -16
  201. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js.map +1 -1
  202. package/dist/domains/feedback/utils/feedback-refetch-interval.cjs.js +1 -1
  203. package/dist/domains/feedback/utils/feedback-refetch-interval.cjs.js.map +1 -1
  204. package/dist/domains/feedback/utils/feedback-refetch-interval.es.js +1 -1
  205. package/dist/domains/feedback/utils/feedback-refetch-interval.es.js.map +1 -1
  206. package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
  207. package/dist/domains/logs/components/log-data-panel.es.js +1 -1
  208. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
  209. package/dist/domains/logs/components/logs-list-view.es.js +2 -2
  210. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  211. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  212. package/dist/domains/memory/components/observation-detail-view.cjs.js +5 -3
  213. package/dist/domains/memory/components/observation-detail-view.cjs.js.map +1 -1
  214. package/dist/domains/memory/components/observation-detail-view.es.js +5 -3
  215. package/dist/domains/memory/components/observation-detail-view.es.js.map +1 -1
  216. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  217. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  218. package/dist/domains/metrics/components/memory-card-view.cjs.js +1 -1
  219. package/dist/domains/metrics/components/memory-card-view.es.js +1 -1
  220. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +1 -1
  221. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +1 -1
  222. package/dist/domains/metrics/components/scores-card-view.cjs.js +1 -1
  223. package/dist/domains/metrics/components/scores-card-view.es.js +1 -1
  224. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +16 -15
  225. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js.map +1 -1
  226. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +16 -15
  227. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js.map +1 -1
  228. package/dist/domains/request-context/components/request-context-label.cjs.js +4 -3
  229. package/dist/domains/request-context/components/request-context-label.cjs.js.map +1 -1
  230. package/dist/domains/request-context/components/request-context-label.es.js +4 -3
  231. package/dist/domains/request-context/components/request-context-label.es.js.map +1 -1
  232. package/dist/domains/scores/components/score-data-panel.cjs.js +1 -1
  233. package/dist/domains/scores/components/score-data-panel.es.js +1 -1
  234. package/dist/domains/scores/components/span-scoring.cjs.js +1 -1
  235. package/dist/domains/scores/components/span-scoring.es.js +1 -1
  236. package/dist/domains/scores/components/trace-scores-tab.cjs.js +1 -1
  237. package/dist/domains/scores/components/trace-scores-tab.es.js +1 -1
  238. package/dist/domains/scores/hooks/use-scorers.cjs.js +1 -1
  239. package/dist/domains/scores/hooks/use-scorers.cjs.js.map +1 -1
  240. package/dist/domains/scores/hooks/use-scorers.es.js +1 -1
  241. package/dist/domains/scores/hooks/use-scorers.es.js.map +1 -1
  242. package/dist/domains/scores/hooks/use-trace-span-scores.cjs.js +1 -1
  243. package/dist/domains/scores/hooks/use-trace-span-scores.cjs.js.map +1 -1
  244. package/dist/domains/scores/hooks/use-trace-span-scores.es.js +1 -1
  245. package/dist/domains/scores/hooks/use-trace-span-scores.es.js.map +1 -1
  246. package/dist/domains/traces/components/feedback-thread.cjs.js +1 -1
  247. package/dist/domains/traces/components/feedback-thread.es.js +1 -1
  248. package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -1
  249. package/dist/domains/traces/components/span-data-panel-view.es.js +1 -1
  250. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  251. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  252. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  253. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  254. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
  255. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
  256. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
  257. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  258. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +2 -2
  259. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
  260. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  261. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  262. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  263. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  264. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +1 -1
  265. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +1 -1
  266. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  267. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  268. package/dist/domains/traces/components/thread-trace/thread-trace-context.cjs.js.map +1 -1
  269. package/dist/domains/traces/components/thread-trace/thread-trace-context.es.js.map +1 -1
  270. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  271. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  272. package/dist/domains/traces/components/thread-trace/thread-trace-list.cjs.js +7 -8
  273. package/dist/domains/traces/components/thread-trace/thread-trace-list.cjs.js.map +1 -1
  274. package/dist/domains/traces/components/thread-trace/thread-trace-list.es.js +7 -8
  275. package/dist/domains/traces/components/thread-trace/thread-trace-list.es.js.map +1 -1
  276. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +1 -1
  277. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +1 -1
  278. package/dist/domains/traces/components/thread-trace/thread-trace-root.cjs.js +23 -16
  279. package/dist/domains/traces/components/thread-trace/thread-trace-root.cjs.js.map +1 -1
  280. package/dist/domains/traces/components/thread-trace/thread-trace-root.es.js +23 -16
  281. package/dist/domains/traces/components/thread-trace/thread-trace-root.es.js.map +1 -1
  282. package/dist/domains/traces/components/thread-trace/thread-trace-row-context.cjs.js.map +1 -1
  283. package/dist/domains/traces/components/thread-trace/thread-trace-row-context.es.js.map +1 -1
  284. package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js +3 -9
  285. package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js.map +1 -1
  286. package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js +3 -9
  287. package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js.map +1 -1
  288. package/dist/domains/traces/components/thread-trace.cjs.js +0 -2
  289. package/dist/domains/traces/components/thread-trace.cjs.js.map +1 -1
  290. package/dist/domains/traces/components/thread-trace.es.js +0 -2
  291. package/dist/domains/traces/components/thread-trace.es.js.map +1 -1
  292. package/dist/domains/traces/components/thread-view-by-trace.cjs.js +20 -53
  293. package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
  294. package/dist/domains/traces/components/thread-view-by-trace.es.js +21 -54
  295. package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
  296. package/dist/domains/traces/components/trace-columns-menu.cjs.js +10 -11
  297. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  298. package/dist/domains/traces/components/trace-columns-menu.es.js +10 -11
  299. package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
  300. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +5 -9
  301. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  302. package/dist/domains/traces/components/trace-data-panel-view.es.js +6 -10
  303. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  304. package/dist/domains/traces/components/trace-data-panel.cjs.js +1 -0
  305. package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
  306. package/dist/domains/traces/components/trace-data-panel.es.js +1 -0
  307. package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
  308. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  309. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  310. package/dist/domains/traces/components/trace-span-panel.cjs.js +0 -1
  311. package/dist/domains/traces/components/trace-span-panel.cjs.js.map +1 -1
  312. package/dist/domains/traces/components/trace-span-panel.es.js +0 -1
  313. package/dist/domains/traces/components/trace-span-panel.es.js.map +1 -1
  314. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  315. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  316. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -3
  317. package/dist/domains/traces/components/trace-thread-panel.cjs.js.map +1 -1
  318. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -3
  319. package/dist/domains/traces/components/trace-thread-panel.es.js.map +1 -1
  320. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
  321. package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
  322. package/dist/domains/traces/components/traces-list-view.cjs.js +3 -3
  323. package/dist/domains/traces/components/traces-list-view.es.js +3 -3
  324. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -1
  325. package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -1
  326. package/dist/domains/traces/hooks/use-traces-list-source.cjs.js +2 -0
  327. package/dist/domains/traces/hooks/use-traces-list-source.cjs.js.map +1 -1
  328. package/dist/domains/traces/hooks/use-traces-list-source.es.js +2 -0
  329. package/dist/domains/traces/hooks/use-traces-list-source.es.js.map +1 -1
  330. package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
  331. package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
  332. package/dist/domains/workflows/components/workflow-step-detail.cjs.js +2 -2
  333. package/dist/domains/workflows/components/workflow-step-detail.es.js +2 -2
  334. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
  335. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
  336. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  337. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  338. package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +1 -1
  339. package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +1 -1
  340. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +7 -14
  341. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js.map +1 -1
  342. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +7 -14
  343. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js.map +1 -1
  344. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +39 -42
  345. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js.map +1 -1
  346. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +40 -43
  347. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js.map +1 -1
  348. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +1 -1
  349. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +1 -1
  350. package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +1 -1
  351. package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
  352. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  353. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  354. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.cjs.js +8 -16
  355. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.cjs.js.map +1 -1
  356. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.es.js +9 -17
  357. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.es.js.map +1 -1
  358. package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +1 -1
  359. package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +1 -1
  360. package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +1 -1
  361. package/dist/domains/workflows/workflow/workflow-graph-node.es.js +1 -1
  362. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -1
  363. package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -1
  364. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +1 -1
  365. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +1 -1
  366. package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +2 -2
  367. package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +2 -2
  368. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +1 -1
  369. package/dist/domains/workflows/workflow/workflow-run-data.es.js +1 -1
  370. package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
  371. package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
  372. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +1 -1
  373. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +1 -1
  374. package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +1 -1
  375. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +1 -1
  376. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +8 -21
  377. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js.map +1 -1
  378. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +9 -22
  379. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js.map +1 -1
  380. package/dist/ee/signals/components/entity-index-list.cjs.js +1 -1
  381. package/dist/ee/signals/components/entity-index-list.es.js +1 -1
  382. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +3 -3
  383. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +3 -3
  384. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +62 -68
  385. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js.map +1 -1
  386. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +62 -68
  387. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js.map +1 -1
  388. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +1 -1
  389. package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
  390. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +13 -16
  391. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js.map +1 -1
  392. package/dist/ee/topics/components/topic-trace-summary-list.es.js +14 -17
  393. package/dist/ee/topics/components/topic-trace-summary-list.es.js.map +1 -1
  394. package/dist/field-BtvEQ68O.js +170 -0
  395. package/dist/field-BtvEQ68O.js.map +1 -0
  396. package/dist/field-control-aria-DB6y41tQ.js +26 -0
  397. package/dist/field-control-aria-DB6y41tQ.js.map +1 -0
  398. package/dist/field-control-aria-WzMGs0A4.cjs +31 -0
  399. package/dist/field-control-aria-WzMGs0A4.cjs.map +1 -0
  400. package/dist/{field-block-DtaPqBa3.cjs → field-error-id-4DYu4KZ2.cjs} +24 -4
  401. package/dist/field-error-id-4DYu4KZ2.cjs.map +1 -0
  402. package/dist/{field-block--PeppIRb.js → field-error-id-BSQLcfHo.js} +22 -3
  403. package/dist/field-error-id-BSQLcfHo.js.map +1 -0
  404. package/dist/field-ip9xiOVa.cjs +198 -0
  405. package/dist/field-ip9xiOVa.cjs.map +1 -0
  406. package/dist/{filter-bar-chip-CBlHsz4A.cjs → filter-bar-chip-BsWm7SQr.cjs} +2 -2
  407. package/dist/{filter-bar-chip-CBlHsz4A.cjs.map → filter-bar-chip-BsWm7SQr.cjs.map} +1 -1
  408. package/dist/{filter-bar-chip-DFOtEvpW.js → filter-bar-chip-Dmboyu1t.js} +2 -2
  409. package/dist/{filter-bar-chip-DFOtEvpW.js.map → filter-bar-chip-Dmboyu1t.js.map} +1 -1
  410. package/dist/form-ChOlos7g.cjs +12 -0
  411. package/dist/form-ChOlos7g.cjs.map +1 -0
  412. package/dist/form-uj2xap-j.js +10 -0
  413. package/dist/form-uj2xap-j.js.map +1 -0
  414. package/dist/{input-bd223EJW.cjs → input-D0UPyj6A.cjs} +16 -45
  415. package/dist/input-D0UPyj6A.cjs.map +1 -0
  416. package/dist/{input-CHghVv3k.js → input-D5_B67_r.js} +17 -27
  417. package/dist/input-D5_B67_r.js.map +1 -0
  418. package/dist/{input-group-BRhBfeHC.cjs → input-group-BgCXLSRV.cjs} +77 -96
  419. package/dist/input-group-BgCXLSRV.cjs.map +1 -0
  420. package/dist/{input-group-0G9ZX_cM.js → input-group-wzirc-1k.js} +78 -97
  421. package/dist/input-group-wzirc-1k.js.map +1 -0
  422. package/dist/keyboard/keyboard-dispatcher.cjs.js +2 -0
  423. package/dist/keyboard/keyboard-dispatcher.cjs.js.map +1 -1
  424. package/dist/keyboard/keyboard-dispatcher.es.js +2 -0
  425. package/dist/keyboard/keyboard-dispatcher.es.js.map +1 -1
  426. package/dist/keyboard/use-keydown.cjs.js +7 -1
  427. package/dist/keyboard/use-keydown.cjs.js.map +1 -1
  428. package/dist/keyboard/use-keydown.es.js +7 -1
  429. package/dist/keyboard/use-keydown.es.js.map +1 -1
  430. package/dist/layout/tabbed-container.cjs.js +3 -3
  431. package/dist/layout/tabbed-container.es.js +3 -3
  432. package/dist/lib/form/components/boolean-field.cjs.js +6 -6
  433. package/dist/lib/form/components/boolean-field.cjs.js.map +1 -1
  434. package/dist/lib/form/components/boolean-field.es.js +5 -5
  435. package/dist/lib/form/components/boolean-field.es.js.map +1 -1
  436. package/dist/lib/form/components/custom-array-field.cjs.js +1 -1
  437. package/dist/lib/form/components/custom-array-field.es.js +1 -1
  438. package/dist/lib/form/components/custom-auto-form-field.cjs.js +1 -2
  439. package/dist/lib/form/components/custom-auto-form-field.cjs.js.map +1 -1
  440. package/dist/lib/form/components/custom-auto-form-field.es.js +1 -2
  441. package/dist/lib/form/components/custom-auto-form-field.es.js.map +1 -1
  442. package/dist/lib/form/components/custom-object-field.cjs.js +1 -1
  443. package/dist/lib/form/components/custom-object-field.es.js +1 -1
  444. package/dist/lib/form/components/date-field.cjs.js +6 -3
  445. package/dist/lib/form/components/date-field.cjs.js.map +1 -1
  446. package/dist/lib/form/components/date-field.es.js +6 -3
  447. package/dist/lib/form/components/date-field.es.js.map +1 -1
  448. package/dist/lib/form/components/discriminated-union-field.cjs.js +1 -1
  449. package/dist/lib/form/components/discriminated-union-field.es.js +1 -1
  450. package/dist/lib/form/components/field-wrapper.cjs.js +30 -9
  451. package/dist/lib/form/components/field-wrapper.cjs.js.map +1 -1
  452. package/dist/lib/form/components/field-wrapper.es.js +30 -9
  453. package/dist/lib/form/components/field-wrapper.es.js.map +1 -1
  454. package/dist/lib/form/components/form.cjs.js +4 -4
  455. package/dist/lib/form/components/form.cjs.js.map +1 -1
  456. package/dist/lib/form/components/form.es.js +4 -4
  457. package/dist/lib/form/components/form.es.js.map +1 -1
  458. package/dist/lib/form/components/number-field.cjs.js +3 -4
  459. package/dist/lib/form/components/number-field.cjs.js.map +1 -1
  460. package/dist/lib/form/components/number-field.es.js +3 -4
  461. package/dist/lib/form/components/number-field.es.js.map +1 -1
  462. package/dist/lib/form/components/record-field.cjs.js +13 -2
  463. package/dist/lib/form/components/record-field.cjs.js.map +1 -1
  464. package/dist/lib/form/components/record-field.es.js +13 -2
  465. package/dist/lib/form/components/record-field.es.js.map +1 -1
  466. package/dist/lib/form/components/select-field.cjs.js +4 -19
  467. package/dist/lib/form/components/select-field.cjs.js.map +1 -1
  468. package/dist/lib/form/components/select-field.es.js +4 -19
  469. package/dist/lib/form/components/select-field.es.js.map +1 -1
  470. package/dist/lib/form/components/string-field.cjs.js +2 -4
  471. package/dist/lib/form/components/string-field.cjs.js.map +1 -1
  472. package/dist/lib/form/components/string-field.es.js +2 -4
  473. package/dist/lib/form/components/string-field.es.js.map +1 -1
  474. package/dist/lib/form/components/union-field.cjs.js +1 -1
  475. package/dist/lib/form/components/union-field.es.js +1 -1
  476. package/dist/lib/form/custom-auto-form.cjs.js +1 -1
  477. package/dist/lib/form/custom-auto-form.es.js +1 -1
  478. package/dist/lib/form/dynamic-form.cjs.js +0 -5
  479. package/dist/lib/form/dynamic-form.cjs.js.map +1 -1
  480. package/dist/lib/form/dynamic-form.es.js +0 -5
  481. package/dist/lib/form/dynamic-form.es.js.map +1 -1
  482. package/dist/{list-search-BzAIj0DB.cjs → list-search-CTGQJCh1.cjs} +14 -21
  483. package/dist/list-search-CTGQJCh1.cjs.map +1 -0
  484. package/dist/{list-search-DI1DH7vU.js → list-search-CmOCmTwL.js} +15 -22
  485. package/dist/list-search-CmOCmTwL.js.map +1 -0
  486. package/dist/{logs-data-list-CtHern11.cjs → logs-data-list-B9CAqAHD.cjs} +3 -3
  487. package/dist/{logs-data-list-CtHern11.cjs.map → logs-data-list-B9CAqAHD.cjs.map} +1 -1
  488. package/dist/{logs-data-list-ButZV-2H.js → logs-data-list-DfzdzgXB.js} +3 -3
  489. package/dist/{logs-data-list-ButZV-2H.js.map → logs-data-list-DfzdzgXB.js.map} +1 -1
  490. package/dist/{main-sidebar-link-active-buZAhlHo.js → main-sidebar-B0ivY7lW.js} +118 -6
  491. package/dist/main-sidebar-B0ivY7lW.js.map +1 -0
  492. package/dist/{main-sidebar-link-active-D8VSuJKx.cjs → main-sidebar-BWKVSRoQ.cjs} +117 -4
  493. package/dist/main-sidebar-BWKVSRoQ.cjs.map +1 -0
  494. package/dist/{markdown-renderer-CZV6neya.cjs → markdown-renderer-DPwN7Vtm.cjs} +2 -2
  495. package/dist/{markdown-renderer-CZV6neya.cjs.map → markdown-renderer-DPwN7Vtm.cjs.map} +1 -1
  496. package/dist/{markdown-renderer-Cy7Iwy1c.js → markdown-renderer-zvB6a8uj.js} +2 -2
  497. package/dist/{markdown-renderer-Cy7Iwy1c.js.map → markdown-renderer-zvB6a8uj.js.map} +1 -1
  498. package/dist/new/settings.cjs.js +2 -1
  499. package/dist/new/settings.cjs.js.map +1 -1
  500. package/dist/new/settings.es.js +1 -1
  501. package/dist/new/sidebar.cjs.js +34 -34
  502. package/dist/new/sidebar.cjs.js.map +1 -1
  503. package/dist/new/sidebar.es.js +2 -2
  504. package/dist/{plan-CvTAGIWv.js → plan-BtOryfz5.js} +2 -2
  505. package/dist/{plan-CvTAGIWv.js.map → plan-BtOryfz5.js.map} +1 -1
  506. package/dist/{plan-DsfNN3a0.cjs → plan-D8rM4i4S.cjs} +2 -2
  507. package/dist/{plan-DsfNN3a0.cjs.map → plan-D8rM4i4S.cjs.map} +1 -1
  508. package/dist/primitives/form-element.cjs.js +9 -1
  509. package/dist/primitives/form-element.cjs.js.map +1 -1
  510. package/dist/primitives/form-element.es.js +7 -2
  511. package/dist/primitives/form-element.es.js.map +1 -1
  512. package/dist/primitives/textarea-control.cjs.js +24 -0
  513. package/dist/primitives/textarea-control.cjs.js.map +1 -0
  514. package/dist/primitives/textarea-control.d.ts +2 -0
  515. package/dist/primitives/textarea-control.es.js +20 -0
  516. package/dist/primitives/textarea-control.es.js.map +1 -0
  517. package/dist/{property-filter-applied-C9verwDR.js → property-filter-applied-B_nfBryj.js} +2 -2
  518. package/dist/{property-filter-applied-C9verwDR.js.map → property-filter-applied-B_nfBryj.js.map} +1 -1
  519. package/dist/{property-filter-applied-Bp2z4KBv.cjs → property-filter-applied-CSLLo3VJ.cjs} +2 -2
  520. package/dist/{property-filter-applied-Bp2z4KBv.cjs.map → property-filter-applied-CSLLo3VJ.cjs.map} +1 -1
  521. package/dist/{radio-group-BdEPWGzi.cjs → radio-group-QV7yVrSX.cjs} +13 -2
  522. package/dist/radio-group-QV7yVrSX.cjs.map +1 -0
  523. package/dist/{radio-group-CFZXUXZ5.js → radio-group-bvm7Sqq_.js} +13 -2
  524. package/dist/radio-group-bvm7Sqq_.js.map +1 -0
  525. package/dist/{reasoning-activity-OM1-hbCV.js → reasoning-activity-6VkIbDT4.js} +2 -2
  526. package/dist/{reasoning-activity-OM1-hbCV.js.map → reasoning-activity-6VkIbDT4.js.map} +1 -1
  527. package/dist/{reasoning-activity-BVviIdMe.cjs → reasoning-activity-DaXMgyr3.cjs} +2 -2
  528. package/dist/{reasoning-activity-BVviIdMe.cjs.map → reasoning-activity-DaXMgyr3.cjs.map} +1 -1
  529. package/dist/search-input-BKXiYeed.js +48 -0
  530. package/dist/search-input-BKXiYeed.js.map +1 -0
  531. package/dist/search-input-T0orZ7Jf.cjs +50 -0
  532. package/dist/search-input-T0orZ7Jf.cjs.map +1 -0
  533. package/dist/{section-dBeXxS69.cjs → section-Byml9qxH.cjs} +2 -2
  534. package/dist/{section-dBeXxS69.cjs.map → section-Byml9qxH.cjs.map} +1 -1
  535. package/dist/{section-BfEsNViI.js → section-DTooysg2.js} +2 -2
  536. package/dist/{section-BfEsNViI.js.map → section-DTooysg2.js.map} +1 -1
  537. package/dist/{segmented-control-BxeiypPR.js → segmented-control-ClbeK8DF.js} +4 -1
  538. package/dist/segmented-control-ClbeK8DF.js.map +1 -0
  539. package/dist/{segmented-control--I3IgW21.cjs → segmented-control-DwLkp3TP.cjs} +4 -1
  540. package/dist/segmented-control-DwLkp3TP.cjs.map +1 -0
  541. package/dist/{select-DZeNf-kI.js → select--ArpXYDc.js} +6 -3
  542. package/dist/select--ArpXYDc.js.map +1 -0
  543. package/dist/{select-DBY9LQFQ.cjs → select-DJQYAVcm.cjs} +5 -2
  544. package/dist/select-DJQYAVcm.cjs.map +1 -0
  545. package/dist/{settings-row-C1JZDdz_.js → settings-row-B0jGFpVw.js} +46 -39
  546. package/dist/settings-row-B0jGFpVw.js.map +1 -0
  547. package/dist/{settings-row-C7YKfUgY.cjs → settings-row-Dt4WnnRf.cjs} +47 -39
  548. package/dist/settings-row-Dt4WnnRf.cjs.map +1 -0
  549. package/dist/{side-dialog-DCzCcZs6.js → side-dialog-DZJc85m3.js} +2 -2
  550. package/dist/{side-dialog-DCzCcZs6.js.map → side-dialog-DZJc85m3.js.map} +1 -1
  551. package/dist/{side-dialog-DFnD1498.cjs → side-dialog-lQUx6B_M.cjs} +2 -2
  552. package/dist/{side-dialog-DFnD1498.cjs.map → side-dialog-lQUx6B_M.cjs.map} +1 -1
  553. package/dist/{span-payload-primitives-DL1Kr0cu.js → span-payload-primitives-CGamdu2t.js} +2 -2
  554. package/dist/{span-payload-primitives-DL1Kr0cu.js.map → span-payload-primitives-CGamdu2t.js.map} +1 -1
  555. package/dist/{span-payload-primitives-D0mhsndj.cjs → span-payload-primitives-SkL3U9hR.cjs} +2 -2
  556. package/dist/{span-payload-primitives-D0mhsndj.cjs.map → span-payload-primitives-SkL3U9hR.cjs.map} +1 -1
  557. package/dist/src/domains/feedback/utils/feedback-refetch-interval.d.ts +2 -2
  558. package/dist/src/domains/request-context/components/request-context-label.d.ts +1 -2
  559. package/dist/src/domains/scores/hooks/use-scorers.d.ts +1 -1
  560. package/dist/src/domains/scores/hooks/use-trace-span-scores.d.ts +1 -1
  561. package/dist/src/domains/traces/components/thread-trace/index.d.ts +1 -5
  562. package/dist/src/domains/traces/components/thread-trace/thread-trace-context.d.ts +0 -2
  563. package/dist/src/domains/traces/components/thread-trace/thread-trace-root.d.ts +3 -6
  564. package/dist/src/domains/traces/components/thread-trace/thread-trace-row-context.d.ts +0 -1
  565. package/dist/src/domains/traces/components/thread-view-by-trace.d.ts +7 -6
  566. package/dist/src/domains/traces/components/trace-thread-panel.d.ts +2 -4
  567. package/dist/src/domains/traces/hooks/use-traces-list-source.d.ts +3 -1
  568. package/dist/src/ds/components/Combobox/combobox-styles.d.ts +3 -4
  569. package/dist/src/ds/components/Combobox/combobox.d.ts +4 -2
  570. package/dist/src/ds/components/Comment/comment-composer.d.ts +2 -2
  571. package/dist/src/ds/components/DateTimePicker/time-picker.d.ts +2 -1
  572. package/dist/src/ds/components/Field/field-control-aria.d.ts +30 -0
  573. package/dist/src/ds/components/Field/field.d.ts +39 -0
  574. package/dist/src/ds/components/Field/field.stories.d.ts +12 -0
  575. package/dist/src/ds/components/Field/index.d.ts +2 -0
  576. package/dist/src/ds/components/Form/form.d.ts +7 -0
  577. package/dist/src/ds/components/Form/form.stories.d.ts +7 -0
  578. package/dist/src/ds/components/Form/index.d.ts +1 -0
  579. package/dist/src/ds/components/FormFieldBlocks/block/field-block.d.ts +1 -0
  580. package/dist/src/ds/components/FormFieldBlocks/block/field-error-id.d.ts +1 -5
  581. package/dist/src/ds/components/FormFieldBlocks/fields/search-field-block.d.ts +1 -0
  582. package/dist/src/ds/components/FormFieldBlocks/fields/select-field-block.d.ts +1 -0
  583. package/dist/src/ds/components/FormFieldBlocks/fields/text-field-block.d.ts +1 -0
  584. package/dist/src/ds/components/FormFieldBlocks/fields/textarea-field-block.d.ts +1 -0
  585. package/dist/src/ds/components/FormFieldBlocks/layout/field-blocks-layout.d.ts +1 -0
  586. package/dist/src/ds/components/Input/input.d.ts +3 -10
  587. package/dist/src/ds/components/InputGroup/input-group.d.ts +15 -25
  588. package/dist/src/ds/components/JSONSchemaForm/json-schema-form-field-description.d.ts +6 -3
  589. package/dist/src/ds/components/JSONSchemaForm/json-schema-form-field-name.d.ts +6 -3
  590. package/dist/src/ds/components/JSONSchemaForm/json-schema-form-field-type.d.ts +10 -3
  591. package/dist/src/ds/components/Label/label.d.ts +1 -0
  592. package/dist/src/ds/components/ListSearch/list-search.d.ts +2 -2
  593. package/dist/src/ds/components/SearchInput/index.d.ts +1 -0
  594. package/dist/src/ds/components/SearchInput/search-input.d.ts +12 -0
  595. package/dist/src/ds/components/SearchInput/search-input.stories.d.ts +8 -0
  596. package/dist/src/ds/components/Textarea/textarea.d.ts +3 -10
  597. package/dist/src/ds/components/ai/ask-user/ask-user.d.ts +2 -1
  598. package/dist/src/ds/new/settings/index.d.ts +1 -1
  599. package/dist/src/ds/new/settings/settings-row.d.ts +11 -3
  600. package/dist/src/ds/new/settings/settings-row.stories.d.ts +321 -0
  601. package/dist/src/ds/primitives/form-element.d.ts +6 -1
  602. package/dist/src/ds/primitives/textarea-control.d.ts +3 -0
  603. package/dist/src/lib/form/components/form.d.ts +1 -1
  604. package/dist/src/lib/keyboard/keyboard-dispatcher.d.ts +2 -0
  605. package/dist/src/lib/keyboard/use-keydown.d.ts +6 -0
  606. package/dist/style.css +50 -16
  607. package/dist/{switch-Swt75_Sb.cjs → switch-BlE5ReVZ.cjs} +3 -2
  608. package/dist/switch-BlE5ReVZ.cjs.map +1 -0
  609. package/dist/{switch-88fWFfVz.js → switch-MZ1oHrmp.js} +4 -3
  610. package/dist/switch-MZ1oHrmp.js.map +1 -0
  611. package/dist/{textarea-B6wvS_CQ.js → textarea-CxPNKg2q.js} +14 -22
  612. package/dist/textarea-CxPNKg2q.js.map +1 -0
  613. package/dist/{textarea-gUBUqpol.cjs → textarea-DNV5Gs9A.cjs} +13 -40
  614. package/dist/textarea-DNV5Gs9A.cjs.map +1 -0
  615. package/dist/{time-picker-BElZALzM.js → time-picker-DRSAkFuj.js} +18 -21
  616. package/dist/time-picker-DRSAkFuj.js.map +1 -0
  617. package/dist/{time-picker-_QJdolkZ.cjs → time-picker-KE48KlpH.cjs} +18 -21
  618. package/dist/time-picker-KE48KlpH.cjs.map +1 -0
  619. package/dist/{tool-call-arguments-CQYR65FB.cjs → tool-call-arguments-BemKsB9v.cjs} +2 -2
  620. package/dist/{tool-call-arguments-CQYR65FB.cjs.map → tool-call-arguments-BemKsB9v.cjs.map} +1 -1
  621. package/dist/{tool-call-arguments-B1MghuMZ.js → tool-call-arguments-CtUKj7IB.js} +2 -2
  622. package/dist/{tool-call-arguments-B1MghuMZ.js.map → tool-call-arguments-CtUKj7IB.js.map} +1 -1
  623. package/dist/{tool-card-rxo27sve.cjs → tool-card-D9nDQgpg.cjs} +2 -2
  624. package/dist/{tool-card-rxo27sve.cjs.map → tool-card-D9nDQgpg.cjs.map} +1 -1
  625. package/dist/{tool-card-C_K5PwrK.js → tool-card-tK9zedNb.js} +2 -2
  626. package/dist/{tool-card-C_K5PwrK.js.map → tool-card-tK9zedNb.js.map} +1 -1
  627. package/dist/{traces-data-list-BsAYYJ9t.cjs → traces-data-list-Dd8vMPQK.cjs} +4 -4
  628. package/dist/{traces-data-list-BsAYYJ9t.cjs.map → traces-data-list-Dd8vMPQK.cjs.map} +1 -1
  629. package/dist/{traces-data-list-CnNpGVRN.js → traces-data-list-Fvl8mlih.js} +4 -4
  630. package/dist/{traces-data-list-CnNpGVRN.js.map → traces-data-list-Fvl8mlih.js.map} +1 -1
  631. package/dist/{use-workflow-graph-runtime-CIs2HzoP.cjs → use-workflow-graph-runtime-BNAtEa06.cjs} +2 -2
  632. package/dist/{use-workflow-graph-runtime-CIs2HzoP.cjs.map → use-workflow-graph-runtime-BNAtEa06.cjs.map} +1 -1
  633. package/dist/{use-workflow-graph-runtime-CexS1ECI.js → use-workflow-graph-runtime-JQwLwNBD.js} +2 -2
  634. package/dist/{use-workflow-graph-runtime-CexS1ECI.js.map → use-workflow-graph-runtime-JQwLwNBD.js.map} +1 -1
  635. package/dist/{workflow-code-dialog-content-BM4ZnrUr.js → workflow-code-dialog-content-3AcgitHa.js} +2 -2
  636. package/dist/{workflow-code-dialog-content-BM4ZnrUr.js.map → workflow-code-dialog-content-3AcgitHa.js.map} +1 -1
  637. package/dist/{workflow-code-dialog-content-BFm2IWDl.cjs → workflow-code-dialog-content-DyoN3850.cjs} +2 -2
  638. package/dist/{workflow-code-dialog-content-BFm2IWDl.cjs.map → workflow-code-dialog-content-DyoN3850.cjs.map} +1 -1
  639. package/dist/{workflow-data-edge-view-BpGLV-at.js → workflow-data-edge-view-C4nbA2Fa.js} +2 -2
  640. package/dist/{workflow-data-edge-view-BpGLV-at.js.map → workflow-data-edge-view-C4nbA2Fa.js.map} +1 -1
  641. package/dist/{workflow-data-edge-view-7f8O6pVW.cjs → workflow-data-edge-view-aHAZkZOH.cjs} +2 -2
  642. package/dist/{workflow-data-edge-view-7f8O6pVW.cjs.map → workflow-data-edge-view-aHAZkZOH.cjs.map} +1 -1
  643. package/dist/{workflow-edge-data-button-C6eyWbcG.js → workflow-edge-data-button-2aIkzgev.js} +2 -2
  644. package/dist/{workflow-edge-data-button-C6eyWbcG.js.map → workflow-edge-data-button-2aIkzgev.js.map} +1 -1
  645. package/dist/{workflow-edge-data-button-BOVRo4xO.cjs → workflow-edge-data-button-BFNO-TRL.cjs} +2 -2
  646. package/dist/{workflow-edge-data-button-BOVRo4xO.cjs.map → workflow-edge-data-button-BFNO-TRL.cjs.map} +1 -1
  647. package/package.json +9 -9
  648. package/dist/ask-user-CXu4b7Jw.cjs.map +0 -1
  649. package/dist/ask-user-Dlz2346n.js.map +0 -1
  650. package/dist/checkbox-CI8JtZKS.cjs.map +0 -1
  651. package/dist/checkbox-CQedzgsi.js.map +0 -1
  652. package/dist/code-block-BzoMjjtf.cjs.map +0 -1
  653. package/dist/code-block-DY5KsTGY.js.map +0 -1
  654. package/dist/code-editor-28chVxHw.js.map +0 -1
  655. package/dist/code-editor-B_wPmKPf.cjs.map +0 -1
  656. package/dist/combobox-B15qTrWO.js.map +0 -1
  657. package/dist/combobox-DJ0c4o4S.cjs.map +0 -1
  658. package/dist/combobox-styles-C2MEEpaG.js.map +0 -1
  659. package/dist/combobox-styles-DLflBH-G.cjs.map +0 -1
  660. package/dist/custom-auto-form-field-Brfb-0Te.cjs.map +0 -1
  661. package/dist/custom-auto-form-field-yEMBGXu-.js.map +0 -1
  662. package/dist/data-code-section-DWBfkrmO.cjs.map +0 -1
  663. package/dist/data-code-section-It6myyvZ.js.map +0 -1
  664. package/dist/date-time-range-picker-BDylIIzt.js.map +0 -1
  665. package/dist/date-time-range-picker-UheN070q.cjs.map +0 -1
  666. package/dist/domains/traces/components/thread-trace/thread-trace-load-more-sentinel.cjs.js +0 -12
  667. package/dist/domains/traces/components/thread-trace/thread-trace-load-more-sentinel.cjs.js.map +0 -1
  668. package/dist/domains/traces/components/thread-trace/thread-trace-load-more-sentinel.d.ts +0 -2
  669. package/dist/domains/traces/components/thread-trace/thread-trace-load-more-sentinel.es.js +0 -8
  670. package/dist/domains/traces/components/thread-trace/thread-trace-load-more-sentinel.es.js.map +0 -1
  671. package/dist/field-block--PeppIRb.js.map +0 -1
  672. package/dist/field-block-DtaPqBa3.cjs.map +0 -1
  673. package/dist/field-block-error-msg-CkhEN6nU.cjs +0 -26
  674. package/dist/field-block-error-msg-CkhEN6nU.cjs.map +0 -1
  675. package/dist/field-block-error-msg-LXwhKzIq.js +0 -24
  676. package/dist/field-block-error-msg-LXwhKzIq.js.map +0 -1
  677. package/dist/field-error-id-B3Z2Zu5y.cjs +0 -6
  678. package/dist/field-error-id-B3Z2Zu5y.cjs.map +0 -1
  679. package/dist/field-error-id-D3yg1nBh.js +0 -4
  680. package/dist/field-error-id-D3yg1nBh.js.map +0 -1
  681. package/dist/input-CHghVv3k.js.map +0 -1
  682. package/dist/input-bd223EJW.cjs.map +0 -1
  683. package/dist/input-group-0G9ZX_cM.js.map +0 -1
  684. package/dist/input-group-BRhBfeHC.cjs.map +0 -1
  685. package/dist/label-DfAhywj_.cjs +0 -39
  686. package/dist/label-DfAhywj_.cjs.map +0 -1
  687. package/dist/label-Dxsz0dFs.js +0 -18
  688. package/dist/label-Dxsz0dFs.js.map +0 -1
  689. package/dist/list-search-BzAIj0DB.cjs.map +0 -1
  690. package/dist/list-search-DI1DH7vU.js.map +0 -1
  691. package/dist/main-sidebar-link-active-D8VSuJKx.cjs.map +0 -1
  692. package/dist/main-sidebar-link-active-buZAhlHo.js.map +0 -1
  693. package/dist/radio-group-BdEPWGzi.cjs.map +0 -1
  694. package/dist/radio-group-CFZXUXZ5.js.map +0 -1
  695. package/dist/search-field-block-BPJh5yuW.js +0 -125
  696. package/dist/search-field-block-BPJh5yuW.js.map +0 -1
  697. package/dist/search-field-block-DRa-ZNQj.cjs +0 -127
  698. package/dist/search-field-block-DRa-ZNQj.cjs.map +0 -1
  699. package/dist/segmented-control--I3IgW21.cjs.map +0 -1
  700. package/dist/segmented-control-BxeiypPR.js.map +0 -1
  701. package/dist/select-DBY9LQFQ.cjs.map +0 -1
  702. package/dist/select-DZeNf-kI.js.map +0 -1
  703. package/dist/select-field-block-C_x9wNpU.js +0 -59
  704. package/dist/select-field-block-C_x9wNpU.js.map +0 -1
  705. package/dist/select-field-block-D8AMzoQT.cjs +0 -61
  706. package/dist/select-field-block-D8AMzoQT.cjs.map +0 -1
  707. package/dist/settings-row-C1JZDdz_.js.map +0 -1
  708. package/dist/settings-row-C7YKfUgY.cjs.map +0 -1
  709. package/dist/src/domains/traces/components/thread-trace/thread-trace-load-more-sentinel.d.ts +0 -8
  710. package/dist/src/ds/components/FormFieldBlocks/block/field-block.stories.d.ts +0 -8
  711. package/dist/src/ds/components/FormFieldBlocks/fields/search-field-block.stories.d.ts +0 -15
  712. package/dist/src/ds/components/FormFieldBlocks/fields/select-field-block.stories.d.ts +0 -15
  713. package/dist/src/ds/components/FormFieldBlocks/fields/text-field-block.stories.d.ts +0 -16
  714. package/dist/src/ds/components/FormFieldBlocks/layout/field-blocks-layout.stories.d.ts +0 -6
  715. package/dist/src/ds/components/Label/label.stories.d.ts +0 -8
  716. package/dist/switch-88fWFfVz.js.map +0 -1
  717. package/dist/switch-Swt75_Sb.cjs.map +0 -1
  718. package/dist/text-field-block-DUntfMPu.cjs +0 -58
  719. package/dist/text-field-block-DUntfMPu.cjs.map +0 -1
  720. package/dist/text-field-block-DZaGiu5D.js +0 -56
  721. package/dist/text-field-block-DZaGiu5D.js.map +0 -1
  722. package/dist/textarea-B6wvS_CQ.js.map +0 -1
  723. package/dist/textarea-field-block-BscOSlvI.js +0 -52
  724. package/dist/textarea-field-block-BscOSlvI.js.map +0 -1
  725. package/dist/textarea-field-block-CKAhmLrz.cjs +0 -54
  726. package/dist/textarea-field-block-CKAhmLrz.cjs.map +0 -1
  727. package/dist/textarea-gUBUqpol.cjs.map +0 -1
  728. package/dist/time-picker-BElZALzM.js.map +0 -1
  729. package/dist/time-picker-_QJdolkZ.cjs.map +0 -1
@@ -7,15 +7,16 @@ const lucideReact = require('lucide-react');
7
7
  const React = require('react');
8
8
  const domains_traces_traceListColumns = require('../trace-list-columns.cjs.js');
9
9
  const Button = require('../../../Button-CXhSUBxN.cjs');
10
- const combobox = require('../../../combobox-DJ0c4o4S.cjs');
10
+ const combobox = require('../../../combobox-RzEkcOuu.cjs');
11
11
  require('@base-ui/react/combobox');
12
12
  const dialog = require('../../../dialog-d_AK1NQD.cjs');
13
13
  const dropdownMenu = require('../../../dropdown-menu-j2y37TL5.cjs');
14
- const fieldBlock = require('../../../field-block-DtaPqBa3.cjs');
14
+ const field = require('../../../field-ip9xiOVa.cjs');
15
+ require('../../../field-control-aria-WzMGs0A4.cjs');
16
+ const form = require('../../../form-ChOlos7g.cjs');
15
17
  const Txt = require('../../../Txt-DPmEpNbp.cjs');
16
18
  const dialogAction = require('../../../dialog-action-C3Tc7ZKI.cjs');
17
19
 
18
- const METADATA_KEY_FIELD_NAME = "trace-metadata-key";
19
20
  const EMPTY_KEYS = [];
20
21
  const STANDARD_COLUMNS = ["type", "input", "duration", "endTime", "environment"];
21
22
  const COLUMN_LABELS = {
@@ -138,18 +139,16 @@ function TraceColumnsMenu({
138
139
  /* @__PURE__ */ jsxRuntime.jsx(dropdownMenu.DropdownMenu.Item, { onSelect: onReset, children: "Reset to defaults" })
139
140
  ] })
140
141
  ] }),
141
- withQueryTrace && /* @__PURE__ */ jsxRuntime.jsx(dialog.Dialog, { open: isMetadataDialogOpen, onOpenChange: handleDialogOpenChange, children: /* @__PURE__ */ jsxRuntime.jsx(dialog.DialogContent, { children: /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleAddMetadata, children: [
142
+ withQueryTrace && /* @__PURE__ */ jsxRuntime.jsx(dialog.Dialog, { open: isMetadataDialogOpen, onOpenChange: handleDialogOpenChange, children: /* @__PURE__ */ jsxRuntime.jsx(dialog.DialogContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(form.Form, { onSubmit: handleAddMetadata, className: "gap-0", children: [
142
143
  /* @__PURE__ */ jsxRuntime.jsxs(dialog.DialogHeader, { children: [
143
144
  /* @__PURE__ */ jsxRuntime.jsx(dialog.DialogTitle, { children: "Add metadata column" }),
144
145
  /* @__PURE__ */ jsxRuntime.jsx(dialog.DialogDescription, { children: "Pick a top-level trace metadata key observed in the current time range, or type one. Only the key is saved, never its values." })
145
146
  ] }),
146
- /* @__PURE__ */ jsxRuntime.jsx(dialog.DialogBody, { children: /* @__PURE__ */ jsxRuntime.jsxs(fieldBlock.FieldBlock.Column, { children: [
147
- /* @__PURE__ */ jsxRuntime.jsx(fieldBlock.FieldBlock.Label, { name: METADATA_KEY_FIELD_NAME, children: "Metadata key" }),
147
+ /* @__PURE__ */ jsxRuntime.jsx(dialog.DialogBody, { children: /* @__PURE__ */ jsxRuntime.jsxs(field.Field, { invalid: Boolean(metadataError), children: [
148
+ /* @__PURE__ */ jsxRuntime.jsx(field.FieldLabel, { children: "Metadata key" }),
148
149
  /* @__PURE__ */ jsxRuntime.jsx(
149
150
  combobox.Combobox,
150
151
  {
151
- id: `input-${METADATA_KEY_FIELD_NAME}`,
152
- name: METADATA_KEY_FIELD_NAME,
153
152
  options: metadataKeyOptions,
154
153
  value: metadataKey,
155
154
  onValueChange: (key) => {
@@ -159,10 +158,10 @@ function TraceColumnsMenu({
159
158
  allowCustomValue: true,
160
159
  placeholder: "Select a metadata key…",
161
160
  searchPlaceholder: "Search metadata keys…",
162
- emptyText: "No metadata keys observed. Type one to add it.",
163
- error: metadataError
161
+ emptyText: "No metadata keys observed. Type one to add it."
164
162
  }
165
- )
163
+ ),
164
+ /* @__PURE__ */ jsxRuntime.jsx(field.FieldError, { children: metadataError })
166
165
  ] }) }),
167
166
  /* @__PURE__ */ jsxRuntime.jsxs(dialog.DialogFooter, { children: [
168
167
  /* @__PURE__ */ jsxRuntime.jsx(dialog.DialogCancel, { children: "Cancel" }),
@@ -1 +1 @@
1
- {"version":3,"file":"trace-columns-menu.cjs.js","sources":["../../../../src/domains/traces/components/trace-columns-menu.tsx"],"sourcesContent":["import { Columns3Icon, PlusIcon } from 'lucide-react';\nimport { useMemo, useState, type FormEvent } from 'react';\nimport { TRACE_CUSTOM_COLUMN_FIELDS, TRACE_CUSTOM_COLUMN_LABELS, TRACE_USAGE_COLUMNS } from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceOptionalColumn } from '../trace-list-columns';\nimport { Button } from '@/ds/components/Button';\nimport { Combobox } from '@/ds/components/Combobox';\nimport {\n Dialog,\n DialogAction,\n DialogBody,\n DialogCancel,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/ds/components/Dialog';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { FieldBlock } from '@/ds/components/FormFieldBlocks';\nimport { Txt } from '@/ds/components/Txt';\n\nconst METADATA_KEY_FIELD_NAME = 'trace-metadata-key';\nconst EMPTY_KEYS: readonly string[] = [];\n\nconst STANDARD_COLUMNS: readonly TraceOptionalColumn[] = ['type', 'input', 'duration', 'endTime', 'environment'];\n\nconst COLUMN_LABELS: Record<TraceOptionalColumn, string> = {\n type: 'Primitive type',\n input: 'Input',\n duration: 'Duration',\n endTime: 'End',\n environment: 'Environment',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n totalTokens: 'Total tokens',\n estimatedCost: 'Estimated cost',\n};\n\ntype TraceColumnsMenuProps = {\n preferences: TraceColumnPreferences;\n /** Top-level metadata keys observed on traces in the current time range, offered in the picker. */\n availableMetadataKeys?: readonly string[];\n usageDisabledReason?: string;\n /** When false (server without the trace-query API), metadata columns can't be added. Defaults to true. */\n withQueryTrace?: boolean;\n onToggleColumn: (column: TraceOptionalColumn) => void;\n onAddCustomColumn: (field: TraceCustomColumn) => void;\n onRemoveCustomColumn: (field: TraceCustomColumn) => void;\n onAddMetadataColumn: (key: string) => void;\n onRemoveMetadataColumn: (key: string) => void;\n onReset: () => void;\n};\n\nexport function TraceColumnsMenu({\n preferences,\n availableMetadataKeys = EMPTY_KEYS,\n usageDisabledReason,\n withQueryTrace = true,\n onToggleColumn,\n onAddCustomColumn,\n onRemoveCustomColumn,\n onAddMetadataColumn,\n onRemoveMetadataColumn,\n onReset,\n}: TraceColumnsMenuProps) {\n const [isMetadataDialogOpen, setIsMetadataDialogOpen] = useState(false);\n const [metadataKey, setMetadataKey] = useState('');\n const [metadataError, setMetadataError] = useState<string | undefined>();\n\n const metadataKeyOptions = useMemo(() => {\n const keys = availableMetadataKeys.filter(key => !preferences.metadataKeys.includes(key));\n if (metadataKey && !keys.includes(metadataKey)) keys.push(metadataKey);\n return keys.map(key => ({ label: key, value: key }));\n }, [availableMetadataKeys, preferences.metadataKeys, metadataKey]);\n\n const handleDialogOpenChange = (open: boolean) => {\n setIsMetadataDialogOpen(open);\n if (!open) {\n setMetadataKey('');\n setMetadataError(undefined);\n }\n };\n\n const handleAddMetadata = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const normalizedKey = metadataKey.trim();\n if (!normalizedKey) {\n setMetadataError('Enter a metadata key.');\n return;\n }\n if (preferences.metadataKeys.includes(normalizedKey)) {\n setMetadataError('That metadata column is already visible.');\n return;\n }\n\n onAddMetadataColumn(normalizedKey);\n handleDialogOpenChange(false);\n };\n\n return (\n <>\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button variant=\"ghost\" size=\"md\" icon={<Columns3Icon aria-hidden />}>\n Columns\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\" className=\"min-w-56\">\n <DropdownMenu.Label>Standard columns</DropdownMenu.Label>\n {STANDARD_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Usage columns</DropdownMenu.Label>\n {TRACE_USAGE_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n disabled={Boolean(usageDisabledReason)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n {usageDisabledReason && (\n <Txt variant=\"meta\" tone=\"faint\" className=\"px-2 py-1\" role=\"note\">\n {usageDisabledReason}\n </Txt>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Custom columns</DropdownMenu.Label>\n {TRACE_CUSTOM_COLUMN_FIELDS.map(field => {\n const isVisible = preferences.customColumns.includes(field);\n return (\n <DropdownMenu.CheckboxItem\n key={field}\n checked={isVisible}\n onCheckedChange={() => (isVisible ? onRemoveCustomColumn(field) : onAddCustomColumn(field))}\n >\n {TRACE_CUSTOM_COLUMN_LABELS[field]}\n </DropdownMenu.CheckboxItem>\n );\n })}\n\n {(withQueryTrace || preferences.metadataKeys.length > 0) && (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Metadata columns</DropdownMenu.Label>\n {preferences.metadataKeys.map(key => (\n <DropdownMenu.CheckboxItem\n key={key}\n checked\n title={key}\n onCheckedChange={() => onRemoveMetadataColumn(key)}\n >\n {key}\n </DropdownMenu.CheckboxItem>\n ))}\n {withQueryTrace && (\n <DropdownMenu.Item onSelect={() => setIsMetadataDialogOpen(true)}>\n <PlusIcon aria-hidden />\n Add metadata column\n </DropdownMenu.Item>\n )}\n </>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Item onSelect={onReset}>Reset to defaults</DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n\n {withQueryTrace && (\n <Dialog open={isMetadataDialogOpen} onOpenChange={handleDialogOpenChange}>\n <DialogContent>\n <form onSubmit={handleAddMetadata}>\n <DialogHeader>\n <DialogTitle>Add metadata column</DialogTitle>\n <DialogDescription>\n Pick a top-level trace metadata key observed in the current time range, or type one. Only the key is\n saved, never its values.\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <FieldBlock.Column>\n <FieldBlock.Label name={METADATA_KEY_FIELD_NAME}>Metadata key</FieldBlock.Label>\n <Combobox\n id={`input-${METADATA_KEY_FIELD_NAME}`}\n name={METADATA_KEY_FIELD_NAME}\n options={metadataKeyOptions}\n value={metadataKey}\n onValueChange={key => {\n setMetadataKey(key);\n setMetadataError(undefined);\n }}\n allowCustomValue\n placeholder=\"Select a metadata key…\"\n searchPlaceholder=\"Search metadata keys…\"\n emptyText=\"No metadata keys observed. Type one to add it.\"\n error={metadataError}\n />\n </FieldBlock.Column>\n </DialogBody>\n <DialogFooter>\n <DialogCancel>Cancel</DialogCancel>\n <DialogAction type=\"submit\">Add column</DialogAction>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )}\n </>\n );\n}\n"],"names":["useState","useMemo","jsxs","Fragment","DropdownMenu","jsx","Button","Columns3Icon","TRACE_USAGE_COLUMNS","Txt","TRACE_CUSTOM_COLUMN_FIELDS","PlusIcon","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogBody","FieldBlock","Combobox","DialogFooter","DialogCancel","DialogAction"],"mappings":";;;;;;;;;;;;;;;;;AAqBA,MAAM,uBAAA,GAA0B,oBAAA;AAChC,MAAM,aAAgC,EAAC;AAEvC,MAAM,mBAAmD,CAAC,MAAA,EAAQ,OAAA,EAAS,UAAA,EAAY,WAAW,aAAa,CAAA;AAE/G,MAAM,aAAA,GAAqD;AAAA,EACzD,IAAA,EAAM,gBAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,QAAA,EAAU,UAAA;AAAA,EACV,OAAA,EAAS,KAAA;AAAA,EACT,WAAA,EAAa,aAAA;AAAA,EACb,WAAA,EAAa,cAAA;AAAA,EACb,YAAA,EAAc,eAAA;AAAA,EACd,WAAA,EAAa,cAAA;AAAA,EACb,aAAA,EAAe;AACjB,CAAA;AAiBO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,WAAA;AAAA,EACA,qBAAA,GAAwB,UAAA;AAAA,EACxB,mBAAA;AAAA,EACA,cAAA,GAAiB,IAAA;AAAA,EACjB,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAIA,eAAS,KAAK,CAAA;AACtE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,cAAA,EAA6B;AAEvE,EAAA,MAAM,kBAAA,GAAqBC,cAAQ,MAAM;AACvC,IAAA,MAAM,IAAA,GAAO,sBAAsB,MAAA,CAAO,CAAA,GAAA,KAAO,CAAC,WAAA,CAAY,YAAA,CAAa,QAAA,CAAS,GAAG,CAAC,CAAA;AACxF,IAAA,IAAI,WAAA,IAAe,CAAC,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG,IAAA,CAAK,KAAK,WAAW,CAAA;AACrE,IAAA,OAAO,IAAA,CAAK,IAAI,CAAA,GAAA,MAAQ,EAAE,OAAO,GAAA,EAAK,KAAA,EAAO,KAAI,CAAE,CAAA;AAAA,EACrD,GAAG,CAAC,qBAAA,EAAuB,WAAA,CAAY,YAAA,EAAc,WAAW,CAAC,CAAA;AAEjE,EAAA,MAAM,sBAAA,GAAyB,CAAC,IAAA,KAAkB;AAChD,IAAA,uBAAA,CAAwB,IAAI,CAAA;AAC5B,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,cAAA,CAAe,EAAE,CAAA;AACjB,MAAA,gBAAA,CAAiB,MAAS,CAAA;AAAA,IAC5B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAsC;AAC/D,IAAA,KAAA,CAAM,cAAA,EAAe;AACrB,IAAA,MAAM,aAAA,GAAgB,YAAY,IAAA,EAAK;AACvC,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,gBAAA,CAAiB,uBAAuB,CAAA;AACxC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,WAAA,CAAY,YAAA,CAAa,QAAA,CAAS,aAAa,CAAA,EAAG;AACpD,MAAA,gBAAA,CAAiB,0CAA0C,CAAA;AAC3D,MAAA;AAAA,IACF;AAEA,IAAA,mBAAA,CAAoB,aAAa,CAAA;AACjC,IAAA,sBAAA,CAAuB,KAAK,CAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,uBACEC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAACE,yBAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAC,cAAA;AAAA,QAACD,yBAAA,CAAa,OAAA;AAAA,QAAb;AAAA,UACC,MAAA,kBACEC,cAAA,CAACC,aAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,IAAA,kBAAMD,cAAA,CAACE,wBAAA,EAAA,EAAa,aAAA,EAAW,IAAA,EAAC,GAAI,QAAA,EAAA,SAAA,EAEtE;AAAA;AAAA,OAEJ;AAAA,sCACCH,yBAAA,CAAa,OAAA,EAAb,EAAqB,KAAA,EAAM,KAAA,EAAM,WAAU,UAAA,EAC1C,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAACD,yBAAA,CAAa,KAAA,EAAb,EAAmB,QAAA,EAAA,kBAAA,EAAgB,CAAA;AAAA,QACnC,gBAAA,CAAiB,IAAI,CAAA,MAAA,qBACpBC,cAAA;AAAA,UAACD,yBAAA,CAAa,YAAA;AAAA,UAAb;AAAA,YAEC,OAAA,EAAS,WAAA,CAAY,cAAA,CAAe,QAAA,CAAS,MAAM,CAAA;AAAA,YACnD,eAAA,EAAiB,MAAM,cAAA,CAAe,MAAM,CAAA;AAAA,YAE3C,wBAAc,MAAM;AAAA,WAAA;AAAA,UAJhB;AAAA,SAMR,CAAA;AAAA,wBAEDC,cAAA,CAACD,yBAAA,CAAa,SAAA,EAAb,EAAuB,CAAA;AAAA,wBACxBC,cAAA,CAACD,yBAAA,CAAa,KAAA,EAAb,EAAmB,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,QAChCI,mDAAA,CAAoB,IAAI,CAAA,MAAA,qBACvBH,cAAA;AAAA,UAACD,yBAAA,CAAa,YAAA;AAAA,UAAb;AAAA,YAEC,OAAA,EAAS,WAAA,CAAY,cAAA,CAAe,QAAA,CAAS,MAAM,CAAA;AAAA,YACnD,QAAA,EAAU,QAAQ,mBAAmB,CAAA;AAAA,YACrC,eAAA,EAAiB,MAAM,cAAA,CAAe,MAAM,CAAA;AAAA,YAE3C,wBAAc,MAAM;AAAA,WAAA;AAAA,UALhB;AAAA,SAOR,CAAA;AAAA,QACA,mBAAA,oBACCC,cAAA,CAACI,OAAA,EAAA,EAAI,OAAA,EAAQ,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,SAAA,EAAU,WAAA,EAAY,IAAA,EAAK,MAAA,EACzD,QAAA,EAAA,mBAAA,EACH,CAAA;AAAA,wBAGFJ,cAAA,CAACD,yBAAA,CAAa,SAAA,EAAb,EAAuB,CAAA;AAAA,wBACxBC,cAAA,CAACD,yBAAA,CAAa,KAAA,EAAb,EAAmB,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,QACjCM,0DAAA,CAA2B,IAAI,CAAA,KAAA,KAAS;AACvC,UAAA,MAAM,SAAA,GAAY,WAAA,CAAY,aAAA,CAAc,QAAA,CAAS,KAAK,CAAA;AAC1D,UAAA,uBACEL,cAAA;AAAA,YAACD,yBAAA,CAAa,YAAA;AAAA,YAAb;AAAA,cAEC,OAAA,EAAS,SAAA;AAAA,cACT,iBAAiB,MAAO,SAAA,GAAY,qBAAqB,KAAK,CAAA,GAAI,kBAAkB,KAAK,CAAA;AAAA,cAExF,qEAA2B,KAAK;AAAA,aAAA;AAAA,YAJ5B;AAAA,WAKP;AAAA,QAEJ,CAAC,CAAA;AAAA,QAAA,CAEC,cAAA,IAAkB,WAAA,CAAY,YAAA,CAAa,MAAA,GAAS,sBACpDF,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAE,cAAA,CAACD,yBAAA,CAAa,WAAb,EAAuB,CAAA;AAAA,0BACxBC,cAAA,CAACD,yBAAA,CAAa,KAAA,EAAb,EAAmB,QAAA,EAAA,kBAAA,EAAgB,CAAA;AAAA,UACnC,WAAA,CAAY,YAAA,CAAa,GAAA,CAAI,CAAA,GAAA,qBAC5BC,cAAA;AAAA,YAACD,yBAAA,CAAa,YAAA;AAAA,YAAb;AAAA,cAEC,OAAA,EAAO,IAAA;AAAA,cACP,KAAA,EAAO,GAAA;AAAA,cACP,eAAA,EAAiB,MAAM,sBAAA,CAAuB,GAAG,CAAA;AAAA,cAEhD,QAAA,EAAA;AAAA,aAAA;AAAA,YALI;AAAA,WAOR,CAAA;AAAA,UACA,cAAA,oCACEA,yBAAA,CAAa,IAAA,EAAb,EAAkB,QAAA,EAAU,MAAM,uBAAA,CAAwB,IAAI,CAAA,EAC7D,QAAA,EAAA;AAAA,4BAAAC,cAAA,CAACM,oBAAA,EAAA,EAAS,eAAW,IAAA,EAAC,CAAA;AAAA,YAAE;AAAA,WAAA,EAE1B;AAAA,SAAA,EAEJ,CAAA;AAAA,wBAGFN,cAAA,CAACD,yBAAA,CAAa,SAAA,EAAb,EAAuB,CAAA;AAAA,uCACvBA,yBAAA,CAAa,IAAA,EAAb,EAAkB,QAAA,EAAU,SAAS,QAAA,EAAA,mBAAA,EAAiB;AAAA,OAAA,EACzD;AAAA,KAAA,EACF,CAAA;AAAA,IAEC,cAAA,oBACCC,cAAA,CAACO,aAAA,EAAA,EAAO,IAAA,EAAM,oBAAA,EAAsB,YAAA,EAAc,sBAAA,EAChD,QAAA,kBAAAP,cAAA,CAACQ,oBAAA,EAAA,EACC,QAAA,kBAAAX,eAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,iBAAA,EACd,QAAA,EAAA;AAAA,sBAAAA,eAAA,CAACY,mBAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAT,cAAA,CAACU,sBAAY,QAAA,EAAA,qBAAA,EAAmB,CAAA;AAAA,wBAChCV,cAAA,CAACW,4BAAkB,QAAA,EAAA,+HAAA,EAGnB;AAAA,OAAA,EACF,CAAA;AAAA,sBACAX,cAAA,CAACY,iBAAA,EAAA,EACC,QAAA,kBAAAf,eAAA,CAACgB,qBAAA,CAAW,QAAX,EACC,QAAA,EAAA;AAAA,wBAAAb,cAAA,CAACa,qBAAA,CAAW,KAAA,EAAX,EAAiB,IAAA,EAAM,yBAAyB,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,wBAC7Db,cAAA;AAAA,UAACc,iBAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,SAAS,uBAAuB,CAAA,CAAA;AAAA,YACpC,IAAA,EAAM,uBAAA;AAAA,YACN,OAAA,EAAS,kBAAA;AAAA,YACT,KAAA,EAAO,WAAA;AAAA,YACP,eAAe,CAAA,GAAA,KAAO;AACpB,cAAA,cAAA,CAAe,GAAG,CAAA;AAClB,cAAA,gBAAA,CAAiB,MAAS,CAAA;AAAA,YAC5B,CAAA;AAAA,YACA,gBAAA,EAAgB,IAAA;AAAA,YAChB,WAAA,EAAY,wBAAA;AAAA,YACZ,iBAAA,EAAkB,uBAAA;AAAA,YAClB,SAAA,EAAU,gDAAA;AAAA,YACV,KAAA,EAAO;AAAA;AAAA;AACT,OAAA,EACF,CAAA,EACF,CAAA;AAAA,sCACCC,mBAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAf,cAAA,CAACgB,uBAAa,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,wBACpBhB,cAAA,CAACiB,yBAAA,EAAA,EAAa,IAAA,EAAK,QAAA,EAAS,QAAA,EAAA,YAAA,EAAU;AAAA,OAAA,EACxC;AAAA,KAAA,EACF,GACF,CAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"trace-columns-menu.cjs.js","sources":["../../../../src/domains/traces/components/trace-columns-menu.tsx"],"sourcesContent":["import { Columns3Icon, PlusIcon } from 'lucide-react';\nimport { useMemo, useState, type FormEvent } from 'react';\nimport { TRACE_CUSTOM_COLUMN_FIELDS, TRACE_CUSTOM_COLUMN_LABELS, TRACE_USAGE_COLUMNS } from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceOptionalColumn } from '../trace-list-columns';\nimport { Button } from '@/ds/components/Button';\nimport { Combobox } from '@/ds/components/Combobox';\nimport {\n Dialog,\n DialogAction,\n DialogBody,\n DialogCancel,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/ds/components/Dialog';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Field, FieldError, FieldLabel } from '@/ds/components/Field';\nimport { Form } from '@/ds/components/Form';\nimport { Txt } from '@/ds/components/Txt';\n\nconst EMPTY_KEYS: readonly string[] = [];\n\nconst STANDARD_COLUMNS: readonly TraceOptionalColumn[] = ['type', 'input', 'duration', 'endTime', 'environment'];\n\nconst COLUMN_LABELS: Record<TraceOptionalColumn, string> = {\n type: 'Primitive type',\n input: 'Input',\n duration: 'Duration',\n endTime: 'End',\n environment: 'Environment',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n totalTokens: 'Total tokens',\n estimatedCost: 'Estimated cost',\n};\n\ntype TraceColumnsMenuProps = {\n preferences: TraceColumnPreferences;\n /** Top-level metadata keys observed on traces in the current time range, offered in the picker. */\n availableMetadataKeys?: readonly string[];\n usageDisabledReason?: string;\n /** When false (server without the trace-query API), metadata columns can't be added. Defaults to true. */\n withQueryTrace?: boolean;\n onToggleColumn: (column: TraceOptionalColumn) => void;\n onAddCustomColumn: (field: TraceCustomColumn) => void;\n onRemoveCustomColumn: (field: TraceCustomColumn) => void;\n onAddMetadataColumn: (key: string) => void;\n onRemoveMetadataColumn: (key: string) => void;\n onReset: () => void;\n};\n\nexport function TraceColumnsMenu({\n preferences,\n availableMetadataKeys = EMPTY_KEYS,\n usageDisabledReason,\n withQueryTrace = true,\n onToggleColumn,\n onAddCustomColumn,\n onRemoveCustomColumn,\n onAddMetadataColumn,\n onRemoveMetadataColumn,\n onReset,\n}: TraceColumnsMenuProps) {\n const [isMetadataDialogOpen, setIsMetadataDialogOpen] = useState(false);\n const [metadataKey, setMetadataKey] = useState('');\n const [metadataError, setMetadataError] = useState<string | undefined>();\n\n const metadataKeyOptions = useMemo(() => {\n const keys = availableMetadataKeys.filter(key => !preferences.metadataKeys.includes(key));\n if (metadataKey && !keys.includes(metadataKey)) keys.push(metadataKey);\n return keys.map(key => ({ label: key, value: key }));\n }, [availableMetadataKeys, preferences.metadataKeys, metadataKey]);\n\n const handleDialogOpenChange = (open: boolean) => {\n setIsMetadataDialogOpen(open);\n if (!open) {\n setMetadataKey('');\n setMetadataError(undefined);\n }\n };\n\n const handleAddMetadata = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const normalizedKey = metadataKey.trim();\n if (!normalizedKey) {\n setMetadataError('Enter a metadata key.');\n return;\n }\n if (preferences.metadataKeys.includes(normalizedKey)) {\n setMetadataError('That metadata column is already visible.');\n return;\n }\n\n onAddMetadataColumn(normalizedKey);\n handleDialogOpenChange(false);\n };\n\n return (\n <>\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button variant=\"ghost\" size=\"md\" icon={<Columns3Icon aria-hidden />}>\n Columns\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\" className=\"min-w-56\">\n <DropdownMenu.Label>Standard columns</DropdownMenu.Label>\n {STANDARD_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Usage columns</DropdownMenu.Label>\n {TRACE_USAGE_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n disabled={Boolean(usageDisabledReason)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n {usageDisabledReason && (\n <Txt variant=\"meta\" tone=\"faint\" className=\"px-2 py-1\" role=\"note\">\n {usageDisabledReason}\n </Txt>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Custom columns</DropdownMenu.Label>\n {TRACE_CUSTOM_COLUMN_FIELDS.map(field => {\n const isVisible = preferences.customColumns.includes(field);\n return (\n <DropdownMenu.CheckboxItem\n key={field}\n checked={isVisible}\n onCheckedChange={() => (isVisible ? onRemoveCustomColumn(field) : onAddCustomColumn(field))}\n >\n {TRACE_CUSTOM_COLUMN_LABELS[field]}\n </DropdownMenu.CheckboxItem>\n );\n })}\n\n {(withQueryTrace || preferences.metadataKeys.length > 0) && (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Metadata columns</DropdownMenu.Label>\n {preferences.metadataKeys.map(key => (\n <DropdownMenu.CheckboxItem\n key={key}\n checked\n title={key}\n onCheckedChange={() => onRemoveMetadataColumn(key)}\n >\n {key}\n </DropdownMenu.CheckboxItem>\n ))}\n {withQueryTrace && (\n <DropdownMenu.Item onSelect={() => setIsMetadataDialogOpen(true)}>\n <PlusIcon aria-hidden />\n Add metadata column\n </DropdownMenu.Item>\n )}\n </>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Item onSelect={onReset}>Reset to defaults</DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n\n {withQueryTrace && (\n <Dialog open={isMetadataDialogOpen} onOpenChange={handleDialogOpenChange}>\n <DialogContent>\n <Form onSubmit={handleAddMetadata} className=\"gap-0\">\n <DialogHeader>\n <DialogTitle>Add metadata column</DialogTitle>\n <DialogDescription>\n Pick a top-level trace metadata key observed in the current time range, or type one. Only the key is\n saved, never its values.\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <Field invalid={Boolean(metadataError)}>\n <FieldLabel>Metadata key</FieldLabel>\n <Combobox\n options={metadataKeyOptions}\n value={metadataKey}\n onValueChange={key => {\n setMetadataKey(key);\n setMetadataError(undefined);\n }}\n allowCustomValue\n placeholder=\"Select a metadata key…\"\n searchPlaceholder=\"Search metadata keys…\"\n emptyText=\"No metadata keys observed. Type one to add it.\"\n />\n <FieldError>{metadataError}</FieldError>\n </Field>\n </DialogBody>\n <DialogFooter>\n <DialogCancel>Cancel</DialogCancel>\n <DialogAction type=\"submit\">Add column</DialogAction>\n </DialogFooter>\n </Form>\n </DialogContent>\n </Dialog>\n )}\n </>\n );\n}\n"],"names":["useState","useMemo","jsxs","Fragment","DropdownMenu","jsx","Button","Columns3Icon","TRACE_USAGE_COLUMNS","Txt","TRACE_CUSTOM_COLUMN_FIELDS","PlusIcon","Dialog","DialogContent","Form","DialogHeader","DialogTitle","DialogDescription","DialogBody","Field","FieldLabel","Combobox","FieldError","DialogFooter","DialogCancel","DialogAction"],"mappings":"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"}
@@ -3,15 +3,16 @@ import { Columns3Icon, PlusIcon } from 'lucide-react';
3
3
  import { useState, useMemo } from 'react';
4
4
  import { TRACE_USAGE_COLUMNS, TRACE_CUSTOM_COLUMN_FIELDS, TRACE_CUSTOM_COLUMN_LABELS } from '../trace-list-columns.es.js';
5
5
  import { B as Button } from '../../../Button-D43ghVKt.js';
6
- import { C as Combobox } from '../../../combobox-B15qTrWO.js';
6
+ import { C as Combobox } from '../../../combobox-DKFPbNMB.js';
7
7
  import '@base-ui/react/combobox';
8
8
  import { D as Dialog, d as DialogContent, g as DialogHeader, j as DialogTitle, e as DialogDescription, a as DialogBody, f as DialogFooter, b as DialogCancel } from '../../../dialog-Dt5kASkl.js';
9
9
  import { D as DropdownMenu } from '../../../dropdown-menu-DpEn6HwK.js';
10
- import { F as FieldBlock } from '../../../field-block--PeppIRb.js';
10
+ import { F as Field, e as FieldLabel, c as FieldError } from '../../../field-BtvEQ68O.js';
11
+ import '../../../field-control-aria-DB6y41tQ.js';
12
+ import { F as Form } from '../../../form-uj2xap-j.js';
11
13
  import { T as Txt } from '../../../Txt-BP1SRHmL.js';
12
14
  import { D as DialogAction } from '../../../dialog-action-CB3h9Z2J.js';
13
15
 
14
- const METADATA_KEY_FIELD_NAME = "trace-metadata-key";
15
16
  const EMPTY_KEYS = [];
16
17
  const STANDARD_COLUMNS = ["type", "input", "duration", "endTime", "environment"];
17
18
  const COLUMN_LABELS = {
@@ -134,18 +135,16 @@ function TraceColumnsMenu({
134
135
  /* @__PURE__ */ jsx(DropdownMenu.Item, { onSelect: onReset, children: "Reset to defaults" })
135
136
  ] })
136
137
  ] }),
137
- withQueryTrace && /* @__PURE__ */ jsx(Dialog, { open: isMetadataDialogOpen, onOpenChange: handleDialogOpenChange, children: /* @__PURE__ */ jsx(DialogContent, { children: /* @__PURE__ */ jsxs("form", { onSubmit: handleAddMetadata, children: [
138
+ withQueryTrace && /* @__PURE__ */ jsx(Dialog, { open: isMetadataDialogOpen, onOpenChange: handleDialogOpenChange, children: /* @__PURE__ */ jsx(DialogContent, { children: /* @__PURE__ */ jsxs(Form, { onSubmit: handleAddMetadata, className: "gap-0", children: [
138
139
  /* @__PURE__ */ jsxs(DialogHeader, { children: [
139
140
  /* @__PURE__ */ jsx(DialogTitle, { children: "Add metadata column" }),
140
141
  /* @__PURE__ */ jsx(DialogDescription, { children: "Pick a top-level trace metadata key observed in the current time range, or type one. Only the key is saved, never its values." })
141
142
  ] }),
142
- /* @__PURE__ */ jsx(DialogBody, { children: /* @__PURE__ */ jsxs(FieldBlock.Column, { children: [
143
- /* @__PURE__ */ jsx(FieldBlock.Label, { name: METADATA_KEY_FIELD_NAME, children: "Metadata key" }),
143
+ /* @__PURE__ */ jsx(DialogBody, { children: /* @__PURE__ */ jsxs(Field, { invalid: Boolean(metadataError), children: [
144
+ /* @__PURE__ */ jsx(FieldLabel, { children: "Metadata key" }),
144
145
  /* @__PURE__ */ jsx(
145
146
  Combobox,
146
147
  {
147
- id: `input-${METADATA_KEY_FIELD_NAME}`,
148
- name: METADATA_KEY_FIELD_NAME,
149
148
  options: metadataKeyOptions,
150
149
  value: metadataKey,
151
150
  onValueChange: (key) => {
@@ -155,10 +154,10 @@ function TraceColumnsMenu({
155
154
  allowCustomValue: true,
156
155
  placeholder: "Select a metadata key…",
157
156
  searchPlaceholder: "Search metadata keys…",
158
- emptyText: "No metadata keys observed. Type one to add it.",
159
- error: metadataError
157
+ emptyText: "No metadata keys observed. Type one to add it."
160
158
  }
161
- )
159
+ ),
160
+ /* @__PURE__ */ jsx(FieldError, { children: metadataError })
162
161
  ] }) }),
163
162
  /* @__PURE__ */ jsxs(DialogFooter, { children: [
164
163
  /* @__PURE__ */ jsx(DialogCancel, { children: "Cancel" }),
@@ -1 +1 @@
1
- {"version":3,"file":"trace-columns-menu.es.js","sources":["../../../../src/domains/traces/components/trace-columns-menu.tsx"],"sourcesContent":["import { Columns3Icon, PlusIcon } from 'lucide-react';\nimport { useMemo, useState, type FormEvent } from 'react';\nimport { TRACE_CUSTOM_COLUMN_FIELDS, TRACE_CUSTOM_COLUMN_LABELS, TRACE_USAGE_COLUMNS } from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceOptionalColumn } from '../trace-list-columns';\nimport { Button } from '@/ds/components/Button';\nimport { Combobox } from '@/ds/components/Combobox';\nimport {\n Dialog,\n DialogAction,\n DialogBody,\n DialogCancel,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/ds/components/Dialog';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { FieldBlock } from '@/ds/components/FormFieldBlocks';\nimport { Txt } from '@/ds/components/Txt';\n\nconst METADATA_KEY_FIELD_NAME = 'trace-metadata-key';\nconst EMPTY_KEYS: readonly string[] = [];\n\nconst STANDARD_COLUMNS: readonly TraceOptionalColumn[] = ['type', 'input', 'duration', 'endTime', 'environment'];\n\nconst COLUMN_LABELS: Record<TraceOptionalColumn, string> = {\n type: 'Primitive type',\n input: 'Input',\n duration: 'Duration',\n endTime: 'End',\n environment: 'Environment',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n totalTokens: 'Total tokens',\n estimatedCost: 'Estimated cost',\n};\n\ntype TraceColumnsMenuProps = {\n preferences: TraceColumnPreferences;\n /** Top-level metadata keys observed on traces in the current time range, offered in the picker. */\n availableMetadataKeys?: readonly string[];\n usageDisabledReason?: string;\n /** When false (server without the trace-query API), metadata columns can't be added. Defaults to true. */\n withQueryTrace?: boolean;\n onToggleColumn: (column: TraceOptionalColumn) => void;\n onAddCustomColumn: (field: TraceCustomColumn) => void;\n onRemoveCustomColumn: (field: TraceCustomColumn) => void;\n onAddMetadataColumn: (key: string) => void;\n onRemoveMetadataColumn: (key: string) => void;\n onReset: () => void;\n};\n\nexport function TraceColumnsMenu({\n preferences,\n availableMetadataKeys = EMPTY_KEYS,\n usageDisabledReason,\n withQueryTrace = true,\n onToggleColumn,\n onAddCustomColumn,\n onRemoveCustomColumn,\n onAddMetadataColumn,\n onRemoveMetadataColumn,\n onReset,\n}: TraceColumnsMenuProps) {\n const [isMetadataDialogOpen, setIsMetadataDialogOpen] = useState(false);\n const [metadataKey, setMetadataKey] = useState('');\n const [metadataError, setMetadataError] = useState<string | undefined>();\n\n const metadataKeyOptions = useMemo(() => {\n const keys = availableMetadataKeys.filter(key => !preferences.metadataKeys.includes(key));\n if (metadataKey && !keys.includes(metadataKey)) keys.push(metadataKey);\n return keys.map(key => ({ label: key, value: key }));\n }, [availableMetadataKeys, preferences.metadataKeys, metadataKey]);\n\n const handleDialogOpenChange = (open: boolean) => {\n setIsMetadataDialogOpen(open);\n if (!open) {\n setMetadataKey('');\n setMetadataError(undefined);\n }\n };\n\n const handleAddMetadata = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const normalizedKey = metadataKey.trim();\n if (!normalizedKey) {\n setMetadataError('Enter a metadata key.');\n return;\n }\n if (preferences.metadataKeys.includes(normalizedKey)) {\n setMetadataError('That metadata column is already visible.');\n return;\n }\n\n onAddMetadataColumn(normalizedKey);\n handleDialogOpenChange(false);\n };\n\n return (\n <>\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button variant=\"ghost\" size=\"md\" icon={<Columns3Icon aria-hidden />}>\n Columns\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\" className=\"min-w-56\">\n <DropdownMenu.Label>Standard columns</DropdownMenu.Label>\n {STANDARD_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Usage columns</DropdownMenu.Label>\n {TRACE_USAGE_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n disabled={Boolean(usageDisabledReason)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n {usageDisabledReason && (\n <Txt variant=\"meta\" tone=\"faint\" className=\"px-2 py-1\" role=\"note\">\n {usageDisabledReason}\n </Txt>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Custom columns</DropdownMenu.Label>\n {TRACE_CUSTOM_COLUMN_FIELDS.map(field => {\n const isVisible = preferences.customColumns.includes(field);\n return (\n <DropdownMenu.CheckboxItem\n key={field}\n checked={isVisible}\n onCheckedChange={() => (isVisible ? onRemoveCustomColumn(field) : onAddCustomColumn(field))}\n >\n {TRACE_CUSTOM_COLUMN_LABELS[field]}\n </DropdownMenu.CheckboxItem>\n );\n })}\n\n {(withQueryTrace || preferences.metadataKeys.length > 0) && (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Metadata columns</DropdownMenu.Label>\n {preferences.metadataKeys.map(key => (\n <DropdownMenu.CheckboxItem\n key={key}\n checked\n title={key}\n onCheckedChange={() => onRemoveMetadataColumn(key)}\n >\n {key}\n </DropdownMenu.CheckboxItem>\n ))}\n {withQueryTrace && (\n <DropdownMenu.Item onSelect={() => setIsMetadataDialogOpen(true)}>\n <PlusIcon aria-hidden />\n Add metadata column\n </DropdownMenu.Item>\n )}\n </>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Item onSelect={onReset}>Reset to defaults</DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n\n {withQueryTrace && (\n <Dialog open={isMetadataDialogOpen} onOpenChange={handleDialogOpenChange}>\n <DialogContent>\n <form onSubmit={handleAddMetadata}>\n <DialogHeader>\n <DialogTitle>Add metadata column</DialogTitle>\n <DialogDescription>\n Pick a top-level trace metadata key observed in the current time range, or type one. Only the key is\n saved, never its values.\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <FieldBlock.Column>\n <FieldBlock.Label name={METADATA_KEY_FIELD_NAME}>Metadata key</FieldBlock.Label>\n <Combobox\n id={`input-${METADATA_KEY_FIELD_NAME}`}\n name={METADATA_KEY_FIELD_NAME}\n options={metadataKeyOptions}\n value={metadataKey}\n onValueChange={key => {\n setMetadataKey(key);\n setMetadataError(undefined);\n }}\n allowCustomValue\n placeholder=\"Select a metadata key…\"\n searchPlaceholder=\"Search metadata keys…\"\n emptyText=\"No metadata keys observed. Type one to add it.\"\n error={metadataError}\n />\n </FieldBlock.Column>\n </DialogBody>\n <DialogFooter>\n <DialogCancel>Cancel</DialogCancel>\n <DialogAction type=\"submit\">Add column</DialogAction>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trace-columns-menu.es.js","sources":["../../../../src/domains/traces/components/trace-columns-menu.tsx"],"sourcesContent":["import { Columns3Icon, PlusIcon } from 'lucide-react';\nimport { useMemo, useState, type FormEvent } from 'react';\nimport { TRACE_CUSTOM_COLUMN_FIELDS, TRACE_CUSTOM_COLUMN_LABELS, TRACE_USAGE_COLUMNS } from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceOptionalColumn } from '../trace-list-columns';\nimport { Button } from '@/ds/components/Button';\nimport { Combobox } from '@/ds/components/Combobox';\nimport {\n Dialog,\n DialogAction,\n DialogBody,\n DialogCancel,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/ds/components/Dialog';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Field, FieldError, FieldLabel } from '@/ds/components/Field';\nimport { Form } from '@/ds/components/Form';\nimport { Txt } from '@/ds/components/Txt';\n\nconst EMPTY_KEYS: readonly string[] = [];\n\nconst STANDARD_COLUMNS: readonly TraceOptionalColumn[] = ['type', 'input', 'duration', 'endTime', 'environment'];\n\nconst COLUMN_LABELS: Record<TraceOptionalColumn, string> = {\n type: 'Primitive type',\n input: 'Input',\n duration: 'Duration',\n endTime: 'End',\n environment: 'Environment',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n totalTokens: 'Total tokens',\n estimatedCost: 'Estimated cost',\n};\n\ntype TraceColumnsMenuProps = {\n preferences: TraceColumnPreferences;\n /** Top-level metadata keys observed on traces in the current time range, offered in the picker. */\n availableMetadataKeys?: readonly string[];\n usageDisabledReason?: string;\n /** When false (server without the trace-query API), metadata columns can't be added. Defaults to true. */\n withQueryTrace?: boolean;\n onToggleColumn: (column: TraceOptionalColumn) => void;\n onAddCustomColumn: (field: TraceCustomColumn) => void;\n onRemoveCustomColumn: (field: TraceCustomColumn) => void;\n onAddMetadataColumn: (key: string) => void;\n onRemoveMetadataColumn: (key: string) => void;\n onReset: () => void;\n};\n\nexport function TraceColumnsMenu({\n preferences,\n availableMetadataKeys = EMPTY_KEYS,\n usageDisabledReason,\n withQueryTrace = true,\n onToggleColumn,\n onAddCustomColumn,\n onRemoveCustomColumn,\n onAddMetadataColumn,\n onRemoveMetadataColumn,\n onReset,\n}: TraceColumnsMenuProps) {\n const [isMetadataDialogOpen, setIsMetadataDialogOpen] = useState(false);\n const [metadataKey, setMetadataKey] = useState('');\n const [metadataError, setMetadataError] = useState<string | undefined>();\n\n const metadataKeyOptions = useMemo(() => {\n const keys = availableMetadataKeys.filter(key => !preferences.metadataKeys.includes(key));\n if (metadataKey && !keys.includes(metadataKey)) keys.push(metadataKey);\n return keys.map(key => ({ label: key, value: key }));\n }, [availableMetadataKeys, preferences.metadataKeys, metadataKey]);\n\n const handleDialogOpenChange = (open: boolean) => {\n setIsMetadataDialogOpen(open);\n if (!open) {\n setMetadataKey('');\n setMetadataError(undefined);\n }\n };\n\n const handleAddMetadata = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const normalizedKey = metadataKey.trim();\n if (!normalizedKey) {\n setMetadataError('Enter a metadata key.');\n return;\n }\n if (preferences.metadataKeys.includes(normalizedKey)) {\n setMetadataError('That metadata column is already visible.');\n return;\n }\n\n onAddMetadataColumn(normalizedKey);\n handleDialogOpenChange(false);\n };\n\n return (\n <>\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button variant=\"ghost\" size=\"md\" icon={<Columns3Icon aria-hidden />}>\n Columns\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\" className=\"min-w-56\">\n <DropdownMenu.Label>Standard columns</DropdownMenu.Label>\n {STANDARD_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Usage columns</DropdownMenu.Label>\n {TRACE_USAGE_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n disabled={Boolean(usageDisabledReason)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n {usageDisabledReason && (\n <Txt variant=\"meta\" tone=\"faint\" className=\"px-2 py-1\" role=\"note\">\n {usageDisabledReason}\n </Txt>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Custom columns</DropdownMenu.Label>\n {TRACE_CUSTOM_COLUMN_FIELDS.map(field => {\n const isVisible = preferences.customColumns.includes(field);\n return (\n <DropdownMenu.CheckboxItem\n key={field}\n checked={isVisible}\n onCheckedChange={() => (isVisible ? onRemoveCustomColumn(field) : onAddCustomColumn(field))}\n >\n {TRACE_CUSTOM_COLUMN_LABELS[field]}\n </DropdownMenu.CheckboxItem>\n );\n })}\n\n {(withQueryTrace || preferences.metadataKeys.length > 0) && (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Metadata columns</DropdownMenu.Label>\n {preferences.metadataKeys.map(key => (\n <DropdownMenu.CheckboxItem\n key={key}\n checked\n title={key}\n onCheckedChange={() => onRemoveMetadataColumn(key)}\n >\n {key}\n </DropdownMenu.CheckboxItem>\n ))}\n {withQueryTrace && (\n <DropdownMenu.Item onSelect={() => setIsMetadataDialogOpen(true)}>\n <PlusIcon aria-hidden />\n Add metadata column\n </DropdownMenu.Item>\n )}\n </>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Item onSelect={onReset}>Reset to defaults</DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n\n {withQueryTrace && (\n <Dialog open={isMetadataDialogOpen} onOpenChange={handleDialogOpenChange}>\n <DialogContent>\n <Form onSubmit={handleAddMetadata} className=\"gap-0\">\n <DialogHeader>\n <DialogTitle>Add metadata column</DialogTitle>\n <DialogDescription>\n Pick a top-level trace metadata key observed in the current time range, or type one. Only the key is\n saved, never its values.\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <Field invalid={Boolean(metadataError)}>\n <FieldLabel>Metadata key</FieldLabel>\n <Combobox\n options={metadataKeyOptions}\n value={metadataKey}\n onValueChange={key => {\n setMetadataKey(key);\n setMetadataError(undefined);\n }}\n allowCustomValue\n placeholder=\"Select a metadata key…\"\n searchPlaceholder=\"Search metadata keys…\"\n emptyText=\"No metadata keys observed. Type one to add it.\"\n />\n <FieldError>{metadataError}</FieldError>\n </Field>\n </DialogBody>\n <DialogFooter>\n <DialogCancel>Cancel</DialogCancel>\n <DialogAction type=\"submit\">Add column</DialogAction>\n </DialogFooter>\n </Form>\n </DialogContent>\n </Dialog>\n )}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -15,10 +15,10 @@ const domains_traces_components_traceSpanTree = require('./trace-span-tree.cjs.j
15
15
  const domains_traces_components_traceSummaryDescription = require('./trace-summary-description.cjs.js');
16
16
  const Button = require('../../../Button-CXhSUBxN.cjs');
17
17
  const buttonsGroup = require('../../../buttons-group-CoZP3lJt.cjs');
18
- const dataPanel = require('../../../data-panel-D7Qk4iwZ.cjs');
18
+ const dataPanel = require('../../../data-panel-o-QLWuFV.cjs');
19
19
  const dropdownMenu = require('../../../dropdown-menu-j2y37TL5.cjs');
20
- const searchFieldBlock = require('../../../search-field-block-DRa-ZNQj.cjs');
21
20
  const Notice = require('../../../Notice-C4Tgmtgb.cjs');
21
+ const searchInput = require('../../../search-input-T0orZ7Jf.cjs');
22
22
  const tabsRoot = require('../../../tabs-root-C-ePF1y9.cjs');
23
23
  const tabsTab = require('../../../tabs-tab-BmIBFifi.cjs');
24
24
  const icons_Icon = require('../../../icons/Icon.cjs.js');
@@ -135,7 +135,6 @@ function TraceDataPanelView({
135
135
  onSpanSelect?.(void 0);
136
136
  }
137
137
  }, [initialSpanId, spans, isLoading]);
138
- const searchFieldName = React.useId();
139
138
  const { query, setQuery, results, payloadOnlyMatchIds } = domains_traces_hooks_useTraceSearch.useTraceSearch(spans ?? []);
140
139
  const hierarchicalSpans = React.useMemo(
141
140
  () => domains_traces_components_formatHierarchicalSpans.formatHierarchicalSpans(
@@ -247,16 +246,13 @@ function TraceDataPanelView({
247
246
  const isTimeline = spanView === "timeline";
248
247
  const searchHeader = /* @__PURE__ */ jsxRuntime.jsxs(dataPanel.DataPanel.Header, { className: "gap-2 border-b border-border", children: [
249
248
  /* @__PURE__ */ jsxRuntime.jsx(
250
- searchFieldBlock.SearchFieldBlock,
249
+ searchInput.SearchInput,
251
250
  {
252
- name: searchFieldName,
253
251
  label: "Search spans",
254
- labelIsHidden: true,
255
252
  placeholder: "Search spans...",
256
- value: query,
257
- onChange: (e) => setQuery(e.target.value),
258
- onReset: () => setQuery(""),
259
253
  size: "sm",
254
+ value: query,
255
+ onValueChange: setQuery,
260
256
  className: "w-full"
261
257
  }
262
258
  ),
@@ -1 +1 @@
1
- {"version":3,"file":"trace-data-panel-view.cjs.js","sources":["../../../../src/domains/traces/components/trace-data-panel-view.tsx"],"sourcesContent":["import {\n ChartGanttIcon,\n CircleGaugeIcon,\n DownloadIcon,\n Link2Icon,\n ListTreeIcon,\n Loader2Icon,\n MessageSquareReplyIcon,\n MessageSquareTextIcon,\n MoreHorizontalIcon,\n SaveIcon,\n WrenchIcon,\n} from 'lucide-react';\nimport { useEffect, useId, useMemo, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { getAllSpanIds } from '../hooks/get-all-span-ids';\nimport { useDownloadTraceJson } from '../hooks/use-download-trace-json';\nimport { useTraceSearch } from '../hooks/use-trace-search';\nimport type { TraceUsageSummary } from '../trace-list-columns';\nimport type { SearchableSpan } from '../types';\nimport { formatHierarchicalSpans } from './format-hierarchical-spans';\nimport { TraceIdButton } from './trace-id-button';\nimport { TraceSpanTimeline } from './trace-span-timeline';\nimport { TraceSpanTree } from './trace-span-tree';\nimport { TraceSummaryDescription } from './trace-summary-description';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport type { DataPanelProps } from '@/ds/components/DataPanel';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { SearchFieldBlock } from '@/ds/components/FormFieldBlocks';\nimport { Notice } from '@/ds/components/Notice';\nimport { Tab, TabList, Tabs } from '@/ds/components/Tabs';\nimport { Icon } from '@/ds/icons/Icon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { useScrollToFirstHighlight } from '@/hooks/use-scroll-to-first-highlight';\nimport { useTextHighlight } from '@/hooks/use-text-highlight';\nimport { cn } from '@/lib/utils';\n\nexport type TraceDataPanelPlacement = 'traces-list' | 'trace-page';\n\nexport type TraceSpanView = 'tree' | 'timeline';\n\n/** What the side column next to the span tree shows. */\nexport type TraceSideView = 'messages' | 'feedback' | 'scores';\n\nexport interface TraceDataPanelViewProps {\n /** Keep the panel mounted and pass `undefined` to close it, so the drawer animates out. */\n traceId?: string;\n /** Lightweight spans for the trace. Caller fetches via useTraceLightSpans. */\n spans: SearchableSpan[] | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onSpanSelect?: (spanId: string | undefined) => void;\n onEvaluateTrace?: () => void;\n /** When set, an \"Add full trace to dataset\" button appears; the consumer owns the dialog. */\n onSaveAsDatasetItem?: (args: { traceId: string; rootSpanId: string | undefined }) => void;\n /** When set, an \"Add tool mocks to item\" button appears; the consumer owns the dialog. */\n onAddTraceMocksToItem?: (args: { traceId: string }) => void;\n initialSpanId?: string | null;\n onPrevious?: () => void;\n onNext?: () => void;\n /** Drawer width; defaults to `wide` since the panel lays out several columns. */\n size?: DataPanelProps['size'];\n /** Elevation when opened next to other sibling panels. */\n depth?: DataPanelProps['depth'];\n /** Rendered inside the drawer above the trace header (e.g. inbox feedback context). */\n headerSlot?: ReactNode;\n /** Accessible drawer name; defaults to the trace id. */\n title?: string;\n placement: TraceDataPanelPlacement;\n /** @deprecated No longer used: the panel renders the span tree with the duration as text. */\n timelineChartWidth?: 'wide' | 'default';\n /** When both are provided, renders an \"Open trace page\" button. */\n LinkComponent?: LinkComponent;\n traceHref?: string;\n /** When provided, the entity name in the trace summary links to the entity's page. */\n entityHref?: string;\n /** Token and estimated-cost totals shown in the compact trace summary. */\n usage?: TraceUsageSummary;\n /**\n * Span treated as the displayed root of the timeline. Required for branch\n * subtrees from `getBranch` where the anchor has a real parent that's outside\n * `spans`. When omitted, the span with no parent is used (trace case).\n */\n anchorSpanId?: string;\n /**\n * Whether to render the \"Evaluating traces and saving them as dataset items is\n * available in Mastra Studio\" info notice when neither `onEvaluateTrace` nor\n * `onSaveAsDatasetItem` is provided. Defaults to `true`. Pass `false` when this\n * panel is rendered inside Studio in a context that intentionally omits those\n * handlers (e.g. inline below an experiment result).\n */\n showUnavailableFeaturesMsg?: boolean;\n /**\n * When provided, a \"Scores\" tab appears; the slot renders whatever trace-level\n * scoring UI the consumer wants.\n */\n scoresTabSlot?: (args: { traceId: string; rootSpanId: string | undefined }) => ReactNode;\n /** Optional count shown in the \"Scores\" tab label. */\n scoresTabBadge?: ReactNode;\n /**\n * When provided, a \"Feedback\" tab appears; the slot renders the trace-level\n * feedback UI. Trace feedback is not scoped to a span — the span panel owns that.\n */\n feedbackTabSlot?: (args: { traceId: string }) => ReactNode;\n /** Optional count rendered after the \"Feedback\" tab label, e.g. `Feedback (3)`. */\n feedbackTabBadge?: ReactNode;\n /** Span ids to feature in the timeline; every other span is faded. */\n featuredSpanIds?: string[];\n /**\n * The \"Messages\" view of the side column next to the span tree (typically the\n * trace as one reconstructed agent turn). Rendered without content padding.\n */\n messagesPanelSlot?: ReactNode;\n /** Controlled span view (tree or timeline); falls back to local state starting on the tree. */\n spanView?: TraceSpanView;\n onSpanViewChange?: (view: TraceSpanView) => void;\n /** Controlled side column view; falls back to the first available view. */\n sideView?: TraceSideView;\n onSideViewChange?: (view: TraceSideView) => void;\n /**\n * Rendered as a column to the right of the timeline inside the same card;\n * typically the span detail.\n */\n spanPanelSlot?: ReactNode;\n}\n\nexport function TraceDataPanelView({\n traceId,\n spans,\n isLoading,\n onClose,\n onSpanSelect,\n onEvaluateTrace,\n onSaveAsDatasetItem,\n onAddTraceMocksToItem,\n initialSpanId,\n onPrevious,\n onNext,\n size = 'wide',\n depth,\n headerSlot,\n title,\n placement,\n LinkComponent,\n traceHref,\n entityHref,\n usage,\n anchorSpanId,\n showUnavailableFeaturesMsg = true,\n scoresTabSlot,\n scoresTabBadge,\n feedbackTabSlot,\n feedbackTabBadge,\n featuredSpanIds,\n messagesPanelSlot,\n sideView: controlledSideView,\n onSideViewChange,\n spanView: controlledSpanView,\n onSpanViewChange,\n spanPanelSlot,\n}: TraceDataPanelViewProps) {\n const isOnTracePage = placement === 'trace-page';\n\n // The side column next to the span tree hosts Messages / Feedback / Scores;\n // which one is shown is purely a local viewing choice.\n const sideViews = useMemo(() => {\n const views: Array<{ value: TraceSideView; label: ReactNode }> = [];\n if (messagesPanelSlot) {\n views.push({\n value: 'messages',\n label: (\n <>\n <Icon size=\"xs\">\n <MessageSquareTextIcon />\n </Icon>\n Messages\n </>\n ),\n });\n }\n if (feedbackTabSlot) {\n views.push({\n value: 'feedback',\n label: (\n <>\n <Icon size=\"xs\">\n <MessageSquareReplyIcon />\n </Icon>\n Feedback{feedbackTabBadge != null && <> ({feedbackTabBadge})</>}\n </>\n ),\n });\n }\n if (scoresTabSlot) {\n views.push({\n value: 'scores',\n label: (\n <>\n <Icon size=\"xs\">\n <ScorersIcon />\n </Icon>\n Scores{scoresTabBadge != null && <> ({scoresTabBadge})</>}\n </>\n ),\n });\n }\n return views;\n }, [messagesPanelSlot, feedbackTabSlot, feedbackTabBadge, scoresTabSlot, scoresTabBadge]);\n const [uncontrolledSideView, setUncontrolledSideView] = useState<TraceSideView>();\n const chosenSideView = controlledSideView ?? uncontrolledSideView;\n const sideView = (sideViews.find(view => view.value === chosenSideView) ?? sideViews[0])?.value;\n const handleSideViewChange = (view: TraceSideView) => {\n setUncontrolledSideView(view);\n onSideViewChange?.(view);\n };\n\n const [uncontrolledSpanView, setUncontrolledSpanView] = useState<TraceSpanView>('tree');\n const spanView = controlledSpanView ?? uncontrolledSpanView;\n const setSpanView = (view: TraceSpanView) => {\n setUncontrolledSpanView(view);\n onSpanViewChange?.(view);\n };\n\n const { download: downloadTraceJson, isPending: isDownloadingTrace } = useDownloadTraceJson();\n\n const [selectedSpanId, setSelectedSpanId] = useState<string | undefined>(initialSpanId ?? undefined);\n\n // Sync selected span when initialSpanId or trace data changes\n useEffect(() => {\n // No span requested: clear immediately.\n if (!initialSpanId) {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n return;\n }\n // Span requested: wait for trace data before deciding so an in-flight\n // fetch doesn't wipe a URL-provided selection. Callers that default their\n // spans to `[]` while loading only say so through `isLoading`.\n if (isLoading || !spans) return;\n\n const found = spans.find(s => s.spanId === initialSpanId);\n if (found) {\n setSelectedSpanId(initialSpanId);\n onSpanSelect?.(initialSpanId);\n } else {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialSpanId, spans, isLoading]);\n\n const searchFieldName = useId();\n const { query, setQuery, results, payloadOnlyMatchIds } = useTraceSearch(spans ?? []);\n\n const hierarchicalSpans = useMemo(\n () =>\n formatHierarchicalSpans(\n // Carried on the span rather than drilled as a prop: the tree is rebuilt here and\n // rendered several components deeper.\n results.map(span => ({ ...span, matchedInPayloadOnly: payloadOnlyMatchIds.has(span.spanId) })),\n anchorSpanId,\n ),\n [results, payloadOnlyMatchIds, anchorSpanId],\n );\n\n const [expandedSpanIds, setExpandedSpanIds] = useState<string[]>([]);\n\n useEffect(() => {\n if (hierarchicalSpans.length > 0) {\n setExpandedSpanIds(getAllSpanIds(hierarchicalSpans));\n }\n }, [hierarchicalSpans]);\n\n const rootSpan = useMemo(\n () => (anchorSpanId ? spans?.find(s => s.spanId === anchorSpanId) : spans?.find(s => s.parentSpanId == null)),\n [spans, anchorSpanId],\n );\n const handleSpanClick = (id: string) => {\n const newId = selectedSpanId === id ? undefined : id;\n setSelectedSpanId(newId);\n onSpanSelect?.(newId);\n };\n\n const traceSummary = rootSpan && (\n <TraceSummaryDescription rootSpan={rootSpan} usage={usage} entityHref={entityHref} LinkComponent={LinkComponent} />\n );\n\n const traceActionsMenu = traceId && (\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button size=\"sm\" variant=\"ghost\" tooltip=\"Open trace actions\" aria-label=\"Open trace actions\">\n <MoreHorizontalIcon />\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\">\n {!isOnTracePage && onSaveAsDatasetItem && (\n <DropdownMenu.Item onSelect={() => onSaveAsDatasetItem({ traceId, rootSpanId: rootSpan?.spanId })}>\n <SaveIcon />\n Add full trace to dataset\n </DropdownMenu.Item>\n )}\n {!isOnTracePage && onAddTraceMocksToItem && (\n <DropdownMenu.Item onSelect={() => onAddTraceMocksToItem({ traceId })}>\n <WrenchIcon />\n Add tool mocks to item\n </DropdownMenu.Item>\n )}\n {!isOnTracePage && LinkComponent && traceHref && (\n <DropdownMenu.Item render={<LinkComponent href={traceHref} />}>\n <Link2Icon />\n Open trace page\n </DropdownMenu.Item>\n )}\n <DropdownMenu.Item disabled={isDownloadingTrace} onSelect={() => downloadTraceJson(traceId)}>\n {isDownloadingTrace ? <Loader2Icon className=\"animate-spin\" /> : <DownloadIcon />}\n Download trace JSON\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n );\n\n const sideColumn =\n traceId && sideView ? (\n <div data-trace-side-column className=\"flex h-full min-h-0 min-w-0 flex-col overflow-hidden\">\n {/* Same chrome as the trace column's Spans/Timeline header, so the two tab rows line up. */}\n <Tabs<TraceSideView> defaultTab={sideView} value={sideView} onValueChange={handleSideViewChange}>\n <DataPanel.Header className=\"border-b border-border\">\n <TabList variant=\"pill-ghost\" size=\"sm\">\n {sideViews.map(view => (\n <Tab key={view.value} value={view.value}>\n {view.label}\n </Tab>\n ))}\n </TabList>\n </DataPanel.Header>\n </Tabs>\n {/* The turn view brings its own padding; feedback and scores use the panel's. */}\n {sideView === 'messages' && <DataPanel.Content className=\"p-0\">{messagesPanelSlot}</DataPanel.Content>}\n {sideView === 'feedback' && <DataPanel.Content>{feedbackTabSlot?.({ traceId })}</DataPanel.Content>}\n {sideView === 'scores' && (\n <DataPanel.Content>{scoresTabSlot?.({ traceId, rootSpanId: rootSpan?.spanId })}</DataPanel.Content>\n )}\n </div>\n ) : null;\n\n return (\n <DataPanel\n open={!!traceId}\n onClose={onClose}\n title={title ?? (isOnTracePage ? 'Trace Timeline' : `Trace ${traceId ?? ''}`)}\n size={size}\n depth={depth}\n >\n {traceId && (\n <>\n {headerSlot}\n <DataPanel.Header>\n {isOnTracePage ? (\n <>\n <DataPanel.HeaderContent>\n <DataPanel.Heading>Trace Timeline</DataPanel.Heading>\n {traceSummary}\n </DataPanel.HeaderContent>\n <DataPanel.HeaderActions>{traceActionsMenu}</DataPanel.HeaderActions>\n </>\n ) : (\n <>\n <DataPanel.CloseButton onClick={onClose} />\n <DataPanel.HeaderContent>\n <DataPanel.Heading>\n Trace\n <TraceIdButton id={traceId} />\n </DataPanel.Heading>\n {traceSummary}\n </DataPanel.HeaderContent>\n <DataPanel.HeaderActions>\n {onEvaluateTrace && (\n <Button variant=\"primary\" size=\"sm\" onClick={onEvaluateTrace} disabled={!rootSpan}>\n <CircleGaugeIcon />\n Score trace\n </Button>\n )}\n {traceActionsMenu}\n {(onPrevious || onNext) && (\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Go to previous trace\"\n nextLabel=\"Go to next trace\"\n />\n )}\n </DataPanel.HeaderActions>\n </>\n )}\n </DataPanel.Header>\n\n <TracePanelColumns\n sideColumnSlot={sideColumn}\n spanPanelSlot={spanPanelSlot}\n highlightQuery={query}\n spanPanelKey={selectedSpanId}\n >\n {!isLoading && !spans?.length ? (\n <DataPanel.NoData>No spans found for this trace.</DataPanel.NoData>\n ) : (\n (() => {\n // Shared by the Spans and Timeline tabs: both views render the same\n // filtered `hierarchicalSpans`, so one query drives both.\n const isTimeline = spanView === 'timeline';\n const searchHeader = (\n <DataPanel.Header className=\"gap-2 border-b border-border\">\n <SearchFieldBlock\n name={searchFieldName}\n label=\"Search spans\"\n labelIsHidden\n placeholder=\"Search spans...\"\n value={query}\n onChange={e => setQuery(e.target.value)}\n onReset={() => setQuery('')}\n size=\"sm\"\n className=\"w-full\"\n />\n <ButtonsGroup size=\"sm\" className=\"shrink-0\">\n <Button\n variant={isTimeline ? 'default' : 'primary'}\n aria-pressed={!isTimeline}\n tooltip=\"Span tree\"\n onClick={() => setSpanView('tree')}\n >\n <ListTreeIcon />\n </Button>\n <Button\n variant={isTimeline ? 'primary' : 'default'}\n aria-pressed={isTimeline}\n tooltip=\"Timeline\"\n onClick={() => setSpanView('timeline')}\n >\n <ChartGanttIcon />\n </Button>\n </ButtonsGroup>\n </DataPanel.Header>\n );\n const noSearchResults = !isLoading && hierarchicalSpans.length === 0 && (\n <DataPanel.NoData>No spans match your search.</DataPanel.NoData>\n );\n const viewProps = {\n hierarchicalSpans,\n onSpanClick: handleSpanClick,\n selectedSpanId,\n expandedSpanIds,\n setExpandedSpanIds,\n featuredSpanIds,\n isLoading,\n };\n\n return (\n <>\n {searchHeader}\n <DataPanel.Content>\n {!isOnTracePage &&\n !onEvaluateTrace &&\n !onSaveAsDatasetItem &&\n !onAddTraceMocksToItem &&\n showUnavailableFeaturesMsg && (\n <Notice variant=\"info\" className=\"mb-6\">\n <Notice.Message>\n Evaluating traces and saving them as dataset items is available in Mastra Studio (local or\n deployed).\n </Notice.Message>\n </Notice>\n )}\n\n {/* Both views share selection + expansion state, and stay mounted with no\n results because they host the search field: unmounting would strand the\n user with a query they can no longer clear. */}\n {isTimeline ? <TraceSpanTimeline {...viewProps} /> : <TraceSpanTree {...viewProps} />}\n {noSearchResults}\n </DataPanel.Content>\n </>\n );\n })()\n )}\n </TracePanelColumns>\n </>\n )}\n </DataPanel>\n );\n}\n\n/**\n * Lays out the card body as three columns — `[side] [trace] [span]` — inside the\n * same card. The side column (messages / feedback / scores) is independent of the\n * Spans/Timeline tabs, so it sits beside them rather than inside a tab. The span\n * cell always exists and collapses to zero when hidden, so opening/closing it\n * animates via `grid-template-columns` rather than mounting/unmounting a DOM\n * column (which cannot be transitioned).\n * Search matches — span names in the timeline tree as well as values in the span\n * detail — are highlighted while a query is active.\n */\nfunction TracePanelColumns({\n sideColumnSlot,\n spanPanelSlot,\n highlightQuery,\n spanPanelKey,\n children,\n}: {\n /** Fixed-width column on the left; the trace and span tracks share the remaining space. */\n sideColumnSlot?: ReactNode;\n spanPanelSlot?: ReactNode;\n highlightQuery: string;\n /** Identity of the span shown in the panel; changing it re-triggers the match scroll. */\n spanPanelKey?: string;\n children: ReactNode;\n}) {\n // A single hook call on the common ancestor covers both the timeline tree and\n // the span detail, so span names and payload values highlight together.\n const { ref: highlightRef } = useTextHighlight<HTMLDivElement>(highlightQuery);\n\n // Scoped to the span-panel column only: a match deep in a large payload sits below\n // the fold, so the first painted match is brought into view when the panel opens.\n // The timeline column must never be scrolled by this.\n const { ref: scrollToMatchRef } = useScrollToFirstHighlight<HTMLDivElement>(highlightQuery, spanPanelKey);\n\n return (\n <div\n ref={highlightRef}\n data-trace-columns\n className={cn(\n 'grid min-h-0 flex-1 transition-[grid-template-columns] duration-300 ease-in-out',\n sideColumnSlot\n ? spanPanelSlot\n ? 'grid-cols-[18rem_1fr_1fr] lg:grid-cols-[24rem_1fr_1fr]'\n : 'grid-cols-[18rem_1fr_0fr] lg:grid-cols-[24rem_1fr_0fr]'\n : spanPanelSlot\n ? 'grid-cols-[0px_1fr_1fr]'\n : 'grid-cols-[0px_1fr_0fr]',\n )}\n >\n <div className={cn('flex min-h-0 min-w-0 flex-col overflow-hidden', sideColumnSlot && 'border-r border-border')}>\n {sideColumnSlot}\n </div>\n <div className=\"flex min-h-0 min-w-0 flex-col overflow-hidden\">{children}</div>\n {/* Searchable: the span detail is where a match hides inside a large payload. */}\n <div\n ref={scrollToMatchRef}\n data-highlight\n className={cn(\n 'flex min-h-0 min-w-0 flex-col overflow-hidden',\n spanPanelSlot && 'animate-in border-l border-border duration-300 fade-in-0',\n )}\n >\n {spanPanelSlot}\n </div>\n </div>\n );\n}\n"],"names":["useMemo","jsxs","Fragment","jsx","Icon","MessageSquareTextIcon","MessageSquareReplyIcon","ScorersIcon","useState","useDownloadTraceJson","useEffect","useId","useTraceSearch","formatHierarchicalSpans","getAllSpanIds","TraceSummaryDescription","DropdownMenu","Button","MoreHorizontalIcon","SaveIcon","WrenchIcon","Link2Icon","Loader2Icon","DownloadIcon","Tabs","DataPanel","TabList","Tab","TraceIdButton","CircleGaugeIcon","SearchFieldBlock","ButtonsGroup","ListTreeIcon","ChartGanttIcon","Notice","TraceSpanTimeline","TraceSpanTree","useTextHighlight","useScrollToFirstHighlight","cn"],"mappings":"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"}
1
+ {"version":3,"file":"trace-data-panel-view.cjs.js","sources":["../../../../src/domains/traces/components/trace-data-panel-view.tsx"],"sourcesContent":["import {\n ChartGanttIcon,\n CircleGaugeIcon,\n DownloadIcon,\n Link2Icon,\n ListTreeIcon,\n Loader2Icon,\n MessageSquareReplyIcon,\n MessageSquareTextIcon,\n MoreHorizontalIcon,\n SaveIcon,\n WrenchIcon,\n} from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { getAllSpanIds } from '../hooks/get-all-span-ids';\nimport { useDownloadTraceJson } from '../hooks/use-download-trace-json';\nimport { useTraceSearch } from '../hooks/use-trace-search';\nimport type { TraceUsageSummary } from '../trace-list-columns';\nimport type { SearchableSpan } from '../types';\nimport { formatHierarchicalSpans } from './format-hierarchical-spans';\nimport { TraceIdButton } from './trace-id-button';\nimport { TraceSpanTimeline } from './trace-span-timeline';\nimport { TraceSpanTree } from './trace-span-tree';\nimport { TraceSummaryDescription } from './trace-summary-description';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport type { DataPanelProps } from '@/ds/components/DataPanel';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Notice } from '@/ds/components/Notice';\nimport { SearchInput } from '@/ds/components/SearchInput';\nimport { Tab, TabList, Tabs } from '@/ds/components/Tabs';\nimport { Icon } from '@/ds/icons/Icon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { useScrollToFirstHighlight } from '@/hooks/use-scroll-to-first-highlight';\nimport { useTextHighlight } from '@/hooks/use-text-highlight';\nimport { cn } from '@/lib/utils';\n\nexport type TraceDataPanelPlacement = 'traces-list' | 'trace-page';\n\nexport type TraceSpanView = 'tree' | 'timeline';\n\n/** What the side column next to the span tree shows. */\nexport type TraceSideView = 'messages' | 'feedback' | 'scores';\n\nexport interface TraceDataPanelViewProps {\n /** Keep the panel mounted and pass `undefined` to close it, so the drawer animates out. */\n traceId?: string;\n /** Lightweight spans for the trace. Caller fetches via useTraceLightSpans. */\n spans: SearchableSpan[] | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onSpanSelect?: (spanId: string | undefined) => void;\n onEvaluateTrace?: () => void;\n /** When set, an \"Add full trace to dataset\" button appears; the consumer owns the dialog. */\n onSaveAsDatasetItem?: (args: { traceId: string; rootSpanId: string | undefined }) => void;\n /** When set, an \"Add tool mocks to item\" button appears; the consumer owns the dialog. */\n onAddTraceMocksToItem?: (args: { traceId: string }) => void;\n initialSpanId?: string | null;\n onPrevious?: () => void;\n onNext?: () => void;\n /** Drawer width; defaults to `wide` since the panel lays out several columns. */\n size?: DataPanelProps['size'];\n /** Elevation when opened next to other sibling panels. */\n depth?: DataPanelProps['depth'];\n /** Rendered inside the drawer above the trace header (e.g. inbox feedback context). */\n headerSlot?: ReactNode;\n /** Accessible drawer name; defaults to the trace id. */\n title?: string;\n placement: TraceDataPanelPlacement;\n /** @deprecated No longer used: the panel renders the span tree with the duration as text. */\n timelineChartWidth?: 'wide' | 'default';\n /** When both are provided, renders an \"Open trace page\" button. */\n LinkComponent?: LinkComponent;\n traceHref?: string;\n /** When provided, the entity name in the trace summary links to the entity's page. */\n entityHref?: string;\n /** Token and estimated-cost totals shown in the compact trace summary. */\n usage?: TraceUsageSummary;\n /**\n * Span treated as the displayed root of the timeline. Required for branch\n * subtrees from `getBranch` where the anchor has a real parent that's outside\n * `spans`. When omitted, the span with no parent is used (trace case).\n */\n anchorSpanId?: string;\n /**\n * Whether to render the \"Evaluating traces and saving them as dataset items is\n * available in Mastra Studio\" info notice when neither `onEvaluateTrace` nor\n * `onSaveAsDatasetItem` is provided. Defaults to `true`. Pass `false` when this\n * panel is rendered inside Studio in a context that intentionally omits those\n * handlers (e.g. inline below an experiment result).\n */\n showUnavailableFeaturesMsg?: boolean;\n /**\n * When provided, a \"Scores\" tab appears; the slot renders whatever trace-level\n * scoring UI the consumer wants.\n */\n scoresTabSlot?: (args: { traceId: string; rootSpanId: string | undefined }) => ReactNode;\n /** Optional count shown in the \"Scores\" tab label. */\n scoresTabBadge?: ReactNode;\n /**\n * When provided, a \"Feedback\" tab appears; the slot renders the trace-level\n * feedback UI. Trace feedback is not scoped to a span — the span panel owns that.\n */\n feedbackTabSlot?: (args: { traceId: string }) => ReactNode;\n /** Optional count rendered after the \"Feedback\" tab label, e.g. `Feedback (3)`. */\n feedbackTabBadge?: ReactNode;\n /** Span ids to feature in the timeline; every other span is faded. */\n featuredSpanIds?: string[];\n /**\n * The \"Messages\" view of the side column next to the span tree (typically the\n * trace as one reconstructed agent turn). Rendered without content padding.\n */\n messagesPanelSlot?: ReactNode;\n /** Controlled span view (tree or timeline); falls back to local state starting on the tree. */\n spanView?: TraceSpanView;\n onSpanViewChange?: (view: TraceSpanView) => void;\n /** Controlled side column view; falls back to the first available view. */\n sideView?: TraceSideView;\n onSideViewChange?: (view: TraceSideView) => void;\n /**\n * Rendered as a column to the right of the timeline inside the same card;\n * typically the span detail.\n */\n spanPanelSlot?: ReactNode;\n}\n\nexport function TraceDataPanelView({\n traceId,\n spans,\n isLoading,\n onClose,\n onSpanSelect,\n onEvaluateTrace,\n onSaveAsDatasetItem,\n onAddTraceMocksToItem,\n initialSpanId,\n onPrevious,\n onNext,\n size = 'wide',\n depth,\n headerSlot,\n title,\n placement,\n LinkComponent,\n traceHref,\n entityHref,\n usage,\n anchorSpanId,\n showUnavailableFeaturesMsg = true,\n scoresTabSlot,\n scoresTabBadge,\n feedbackTabSlot,\n feedbackTabBadge,\n featuredSpanIds,\n messagesPanelSlot,\n sideView: controlledSideView,\n onSideViewChange,\n spanView: controlledSpanView,\n onSpanViewChange,\n spanPanelSlot,\n}: TraceDataPanelViewProps) {\n const isOnTracePage = placement === 'trace-page';\n\n // The side column next to the span tree hosts Messages / Feedback / Scores;\n // which one is shown is purely a local viewing choice.\n const sideViews = useMemo(() => {\n const views: Array<{ value: TraceSideView; label: ReactNode }> = [];\n if (messagesPanelSlot) {\n views.push({\n value: 'messages',\n label: (\n <>\n <Icon size=\"xs\">\n <MessageSquareTextIcon />\n </Icon>\n Messages\n </>\n ),\n });\n }\n if (feedbackTabSlot) {\n views.push({\n value: 'feedback',\n label: (\n <>\n <Icon size=\"xs\">\n <MessageSquareReplyIcon />\n </Icon>\n Feedback{feedbackTabBadge != null && <> ({feedbackTabBadge})</>}\n </>\n ),\n });\n }\n if (scoresTabSlot) {\n views.push({\n value: 'scores',\n label: (\n <>\n <Icon size=\"xs\">\n <ScorersIcon />\n </Icon>\n Scores{scoresTabBadge != null && <> ({scoresTabBadge})</>}\n </>\n ),\n });\n }\n return views;\n }, [messagesPanelSlot, feedbackTabSlot, feedbackTabBadge, scoresTabSlot, scoresTabBadge]);\n const [uncontrolledSideView, setUncontrolledSideView] = useState<TraceSideView>();\n const chosenSideView = controlledSideView ?? uncontrolledSideView;\n const sideView = (sideViews.find(view => view.value === chosenSideView) ?? sideViews[0])?.value;\n const handleSideViewChange = (view: TraceSideView) => {\n setUncontrolledSideView(view);\n onSideViewChange?.(view);\n };\n\n const [uncontrolledSpanView, setUncontrolledSpanView] = useState<TraceSpanView>('tree');\n const spanView = controlledSpanView ?? uncontrolledSpanView;\n const setSpanView = (view: TraceSpanView) => {\n setUncontrolledSpanView(view);\n onSpanViewChange?.(view);\n };\n\n const { download: downloadTraceJson, isPending: isDownloadingTrace } = useDownloadTraceJson();\n\n const [selectedSpanId, setSelectedSpanId] = useState<string | undefined>(initialSpanId ?? undefined);\n\n // Sync selected span when initialSpanId or trace data changes\n useEffect(() => {\n // No span requested: clear immediately.\n if (!initialSpanId) {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n return;\n }\n // Span requested: wait for trace data before deciding so an in-flight\n // fetch doesn't wipe a URL-provided selection. Callers that default their\n // spans to `[]` while loading only say so through `isLoading`.\n if (isLoading || !spans) return;\n\n const found = spans.find(s => s.spanId === initialSpanId);\n if (found) {\n setSelectedSpanId(initialSpanId);\n onSpanSelect?.(initialSpanId);\n } else {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialSpanId, spans, isLoading]);\n\n const { query, setQuery, results, payloadOnlyMatchIds } = useTraceSearch(spans ?? []);\n\n const hierarchicalSpans = useMemo(\n () =>\n formatHierarchicalSpans(\n // Carried on the span rather than drilled as a prop: the tree is rebuilt here and\n // rendered several components deeper.\n results.map(span => ({ ...span, matchedInPayloadOnly: payloadOnlyMatchIds.has(span.spanId) })),\n anchorSpanId,\n ),\n [results, payloadOnlyMatchIds, anchorSpanId],\n );\n\n const [expandedSpanIds, setExpandedSpanIds] = useState<string[]>([]);\n\n useEffect(() => {\n if (hierarchicalSpans.length > 0) {\n setExpandedSpanIds(getAllSpanIds(hierarchicalSpans));\n }\n }, [hierarchicalSpans]);\n\n const rootSpan = useMemo(\n () => (anchorSpanId ? spans?.find(s => s.spanId === anchorSpanId) : spans?.find(s => s.parentSpanId == null)),\n [spans, anchorSpanId],\n );\n const handleSpanClick = (id: string) => {\n const newId = selectedSpanId === id ? undefined : id;\n setSelectedSpanId(newId);\n onSpanSelect?.(newId);\n };\n\n const traceSummary = rootSpan && (\n <TraceSummaryDescription rootSpan={rootSpan} usage={usage} entityHref={entityHref} LinkComponent={LinkComponent} />\n );\n\n const traceActionsMenu = traceId && (\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button size=\"sm\" variant=\"ghost\" tooltip=\"Open trace actions\" aria-label=\"Open trace actions\">\n <MoreHorizontalIcon />\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\">\n {!isOnTracePage && onSaveAsDatasetItem && (\n <DropdownMenu.Item onSelect={() => onSaveAsDatasetItem({ traceId, rootSpanId: rootSpan?.spanId })}>\n <SaveIcon />\n Add full trace to dataset\n </DropdownMenu.Item>\n )}\n {!isOnTracePage && onAddTraceMocksToItem && (\n <DropdownMenu.Item onSelect={() => onAddTraceMocksToItem({ traceId })}>\n <WrenchIcon />\n Add tool mocks to item\n </DropdownMenu.Item>\n )}\n {!isOnTracePage && LinkComponent && traceHref && (\n <DropdownMenu.Item render={<LinkComponent href={traceHref} />}>\n <Link2Icon />\n Open trace page\n </DropdownMenu.Item>\n )}\n <DropdownMenu.Item disabled={isDownloadingTrace} onSelect={() => downloadTraceJson(traceId)}>\n {isDownloadingTrace ? <Loader2Icon className=\"animate-spin\" /> : <DownloadIcon />}\n Download trace JSON\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n );\n\n const sideColumn =\n traceId && sideView ? (\n <div data-trace-side-column className=\"flex h-full min-h-0 min-w-0 flex-col overflow-hidden\">\n <Tabs<TraceSideView> defaultTab={sideView} value={sideView} onValueChange={handleSideViewChange}>\n <DataPanel.Header className=\"border-b border-border\">\n <TabList variant=\"pill-ghost\" size=\"sm\">\n {sideViews.map(view => (\n <Tab key={view.value} value={view.value}>\n {view.label}\n </Tab>\n ))}\n </TabList>\n </DataPanel.Header>\n </Tabs>\n {sideView === 'messages' && <DataPanel.Content className=\"p-0\">{messagesPanelSlot}</DataPanel.Content>}\n {sideView === 'feedback' && <DataPanel.Content>{feedbackTabSlot?.({ traceId })}</DataPanel.Content>}\n {sideView === 'scores' && (\n <DataPanel.Content>{scoresTabSlot?.({ traceId, rootSpanId: rootSpan?.spanId })}</DataPanel.Content>\n )}\n </div>\n ) : null;\n\n return (\n <DataPanel\n open={!!traceId}\n onClose={onClose}\n title={title ?? (isOnTracePage ? 'Trace Timeline' : `Trace ${traceId ?? ''}`)}\n size={size}\n depth={depth}\n >\n {traceId && (\n <>\n {headerSlot}\n <DataPanel.Header>\n {isOnTracePage ? (\n <>\n <DataPanel.HeaderContent>\n <DataPanel.Heading>Trace Timeline</DataPanel.Heading>\n {traceSummary}\n </DataPanel.HeaderContent>\n <DataPanel.HeaderActions>{traceActionsMenu}</DataPanel.HeaderActions>\n </>\n ) : (\n <>\n <DataPanel.CloseButton onClick={onClose} />\n <DataPanel.HeaderContent>\n <DataPanel.Heading>\n Trace\n <TraceIdButton id={traceId} />\n </DataPanel.Heading>\n {traceSummary}\n </DataPanel.HeaderContent>\n <DataPanel.HeaderActions>\n {onEvaluateTrace && (\n <Button variant=\"primary\" size=\"sm\" onClick={onEvaluateTrace} disabled={!rootSpan}>\n <CircleGaugeIcon />\n Score trace\n </Button>\n )}\n {traceActionsMenu}\n {(onPrevious || onNext) && (\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Go to previous trace\"\n nextLabel=\"Go to next trace\"\n />\n )}\n </DataPanel.HeaderActions>\n </>\n )}\n </DataPanel.Header>\n\n <TracePanelColumns\n sideColumnSlot={sideColumn}\n spanPanelSlot={spanPanelSlot}\n highlightQuery={query}\n spanPanelKey={selectedSpanId}\n >\n {!isLoading && !spans?.length ? (\n <DataPanel.NoData>No spans found for this trace.</DataPanel.NoData>\n ) : (\n (() => {\n // Shared by the Spans and Timeline tabs: both views render the same\n // filtered `hierarchicalSpans`, so one query drives both.\n const isTimeline = spanView === 'timeline';\n const searchHeader = (\n <DataPanel.Header className=\"gap-2 border-b border-border\">\n <SearchInput\n label=\"Search spans\"\n placeholder=\"Search spans...\"\n size=\"sm\"\n value={query}\n onValueChange={setQuery}\n className=\"w-full\"\n />\n <ButtonsGroup size=\"sm\" className=\"shrink-0\">\n <Button\n variant={isTimeline ? 'default' : 'primary'}\n aria-pressed={!isTimeline}\n tooltip=\"Span tree\"\n onClick={() => setSpanView('tree')}\n >\n <ListTreeIcon />\n </Button>\n <Button\n variant={isTimeline ? 'primary' : 'default'}\n aria-pressed={isTimeline}\n tooltip=\"Timeline\"\n onClick={() => setSpanView('timeline')}\n >\n <ChartGanttIcon />\n </Button>\n </ButtonsGroup>\n </DataPanel.Header>\n );\n const noSearchResults = !isLoading && hierarchicalSpans.length === 0 && (\n <DataPanel.NoData>No spans match your search.</DataPanel.NoData>\n );\n const viewProps = {\n hierarchicalSpans,\n onSpanClick: handleSpanClick,\n selectedSpanId,\n expandedSpanIds,\n setExpandedSpanIds,\n featuredSpanIds,\n isLoading,\n };\n\n return (\n <>\n {searchHeader}\n <DataPanel.Content>\n {!isOnTracePage &&\n !onEvaluateTrace &&\n !onSaveAsDatasetItem &&\n !onAddTraceMocksToItem &&\n showUnavailableFeaturesMsg && (\n <Notice variant=\"info\" className=\"mb-6\">\n <Notice.Message>\n Evaluating traces and saving them as dataset items is available in Mastra Studio (local or\n deployed).\n </Notice.Message>\n </Notice>\n )}\n\n {/* Both views share selection + expansion state, and stay mounted with no\n results because they host the search field: unmounting would strand the\n user with a query they can no longer clear. */}\n {isTimeline ? <TraceSpanTimeline {...viewProps} /> : <TraceSpanTree {...viewProps} />}\n {noSearchResults}\n </DataPanel.Content>\n </>\n );\n })()\n )}\n </TracePanelColumns>\n </>\n )}\n </DataPanel>\n );\n}\n\n/**\n * Lays out the card body as three columns — `[side] [trace] [span]` — inside the\n * same card. The side column (messages / feedback / scores) is independent of the\n * Spans/Timeline tabs, so it sits beside them rather than inside a tab. The span\n * cell always exists and collapses to zero when hidden, so opening/closing it\n * animates via `grid-template-columns` rather than mounting/unmounting a DOM\n * column (which cannot be transitioned).\n * Search matches — span names in the timeline tree as well as values in the span\n * detail — are highlighted while a query is active.\n */\nfunction TracePanelColumns({\n sideColumnSlot,\n spanPanelSlot,\n highlightQuery,\n spanPanelKey,\n children,\n}: {\n /** Fixed-width column on the left; the trace and span tracks share the remaining space. */\n sideColumnSlot?: ReactNode;\n spanPanelSlot?: ReactNode;\n highlightQuery: string;\n /** Identity of the span shown in the panel; changing it re-triggers the match scroll. */\n spanPanelKey?: string;\n children: ReactNode;\n}) {\n // A single hook call on the common ancestor covers both the timeline tree and\n // the span detail, so span names and payload values highlight together.\n const { ref: highlightRef } = useTextHighlight<HTMLDivElement>(highlightQuery);\n\n // Scoped to the span-panel column only: a match deep in a large payload sits below\n // the fold, so the first painted match is brought into view when the panel opens.\n // The timeline column must never be scrolled by this.\n const { ref: scrollToMatchRef } = useScrollToFirstHighlight<HTMLDivElement>(highlightQuery, spanPanelKey);\n\n return (\n <div\n ref={highlightRef}\n data-trace-columns\n className={cn(\n 'grid min-h-0 flex-1 transition-[grid-template-columns] duration-300 ease-in-out',\n sideColumnSlot\n ? spanPanelSlot\n ? 'grid-cols-[18rem_1fr_1fr] lg:grid-cols-[24rem_1fr_1fr]'\n : 'grid-cols-[18rem_1fr_0fr] lg:grid-cols-[24rem_1fr_0fr]'\n : spanPanelSlot\n ? 'grid-cols-[0px_1fr_1fr]'\n : 'grid-cols-[0px_1fr_0fr]',\n )}\n >\n <div className={cn('flex min-h-0 min-w-0 flex-col overflow-hidden', sideColumnSlot && 'border-r border-border')}>\n {sideColumnSlot}\n </div>\n <div className=\"flex min-h-0 min-w-0 flex-col overflow-hidden\">{children}</div>\n <div\n ref={scrollToMatchRef}\n data-highlight\n className={cn(\n 'flex min-h-0 min-w-0 flex-col overflow-hidden',\n spanPanelSlot && 'animate-in border-l border-border duration-300 fade-in-0',\n )}\n >\n {spanPanelSlot}\n </div>\n </div>\n );\n}\n"],"names":["useMemo","jsxs","Fragment","jsx","Icon","MessageSquareTextIcon","MessageSquareReplyIcon","ScorersIcon","useState","useDownloadTraceJson","useEffect","useTraceSearch","formatHierarchicalSpans","getAllSpanIds","TraceSummaryDescription","DropdownMenu","Button","MoreHorizontalIcon","SaveIcon","WrenchIcon","Link2Icon","Loader2Icon","DownloadIcon","Tabs","DataPanel","TabList","Tab","TraceIdButton","CircleGaugeIcon","SearchInput","ButtonsGroup","ListTreeIcon","ChartGanttIcon","Notice","TraceSpanTimeline","TraceSpanTree","useTextHighlight","useScrollToFirstHighlight","cn"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { MessageSquareTextIcon, MessageSquareReplyIcon, MoreHorizontalIcon, SaveIcon, WrenchIcon, Link2Icon, Loader2Icon, DownloadIcon, CircleGaugeIcon, ListTreeIcon, ChartGanttIcon } from 'lucide-react';
3
- import { useMemo, useState, useEffect, useId } from 'react';
3
+ import { useMemo, useState, useEffect } from 'react';
4
4
  import { getAllSpanIds } from '../hooks/get-all-span-ids.es.js';
5
5
  import { useDownloadTraceJson } from '../hooks/use-download-trace-json.es.js';
6
6
  import { useTraceSearch } from '../hooks/use-trace-search.es.js';
@@ -11,10 +11,10 @@ import { TraceSpanTree } from './trace-span-tree.es.js';
11
11
  import { TraceSummaryDescription } from './trace-summary-description.es.js';
12
12
  import { B as Button } from '../../../Button-D43ghVKt.js';
13
13
  import { B as ButtonsGroup } from '../../../buttons-group-DsZgrZBZ.js';
14
- import { D as DataPanel } from '../../../data-panel-DuLf5j8S.js';
14
+ import { D as DataPanel } from '../../../data-panel-CbomKGJt.js';
15
15
  import { D as DropdownMenu } from '../../../dropdown-menu-DpEn6HwK.js';
16
- import { S as SearchFieldBlock } from '../../../search-field-block-BPJh5yuW.js';
17
16
  import { N as Notice } from '../../../Notice-B8RIClJD.js';
17
+ import { S as SearchInput } from '../../../search-input-BKXiYeed.js';
18
18
  import { a as Tabs, T as TabList } from '../../../tabs-root-lrZZ3KwH.js';
19
19
  import { T as Tab } from '../../../tabs-tab-DoPSW-1s.js';
20
20
  import { Icon } from '../../../icons/Icon.es.js';
@@ -131,7 +131,6 @@ function TraceDataPanelView({
131
131
  onSpanSelect?.(void 0);
132
132
  }
133
133
  }, [initialSpanId, spans, isLoading]);
134
- const searchFieldName = useId();
135
134
  const { query, setQuery, results, payloadOnlyMatchIds } = useTraceSearch(spans ?? []);
136
135
  const hierarchicalSpans = useMemo(
137
136
  () => formatHierarchicalSpans(
@@ -243,16 +242,13 @@ function TraceDataPanelView({
243
242
  const isTimeline = spanView === "timeline";
244
243
  const searchHeader = /* @__PURE__ */ jsxs(DataPanel.Header, { className: "gap-2 border-b border-border", children: [
245
244
  /* @__PURE__ */ jsx(
246
- SearchFieldBlock,
245
+ SearchInput,
247
246
  {
248
- name: searchFieldName,
249
247
  label: "Search spans",
250
- labelIsHidden: true,
251
248
  placeholder: "Search spans...",
252
- value: query,
253
- onChange: (e) => setQuery(e.target.value),
254
- onReset: () => setQuery(""),
255
249
  size: "sm",
250
+ value: query,
251
+ onValueChange: setQuery,
256
252
  className: "w-full"
257
253
  }
258
254
  ),