@mastra/playground-ui 48.0.0-alpha.8 → 48.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. package/CHANGELOG.md +338 -0
  2. package/dist/{Button-Bm94fEF2.cjs → Button-B4Ixj2aW.cjs} +4 -3
  3. package/dist/Button-B4Ixj2aW.cjs.map +1 -0
  4. package/dist/{Button-Bx2lFdqb.js → Button-C-9Pzy-Z.js} +4 -3
  5. package/dist/Button-C-9Pzy-Z.js.map +1 -0
  6. package/dist/{Notice-B9cdEg8R.cjs → Notice-DSfh1Ap5.cjs} +2 -2
  7. package/dist/{Notice-B9cdEg8R.cjs.map → Notice-DSfh1Ap5.cjs.map} +1 -1
  8. package/dist/{Notice-DIK9IZsq.js → Notice-DWHQgxkA.js} +2 -2
  9. package/dist/{Notice-DIK9IZsq.js.map → Notice-DWHQgxkA.js.map} +1 -1
  10. package/dist/{SessionExpired-C5ADs4NL.cjs → SessionExpired-CL4bppLl.cjs} +2 -2
  11. package/dist/{SessionExpired-C5ADs4NL.cjs.map → SessionExpired-CL4bppLl.cjs.map} +1 -1
  12. package/dist/{SessionExpired-CHF__hq9.js → SessionExpired-qvMB5AP_.js} +2 -2
  13. package/dist/{SessionExpired-CHF__hq9.js.map → SessionExpired-qvMB5AP_.js.map} +1 -1
  14. package/dist/Shimmer.css +37 -0
  15. package/dist/{combobox-sa_Pxyl4.js → combobox-CH9vBToX.js} +2 -2
  16. package/dist/{combobox-sa_Pxyl4.js.map → combobox-CH9vBToX.js.map} +1 -1
  17. package/dist/{combobox-DXwbHjvQ.cjs → combobox-Z3NehlIY.cjs} +2 -2
  18. package/dist/{combobox-DXwbHjvQ.cjs.map → combobox-Z3NehlIY.cjs.map} +1 -1
  19. package/dist/{command-Duq1xsiS.js → command-BZ7S7MR-.js} +2 -2
  20. package/dist/{command-Duq1xsiS.js.map → command-BZ7S7MR-.js.map} +1 -1
  21. package/dist/{command-qsEykgml.cjs → command-DJwcGKv_.cjs} +2 -2
  22. package/dist/{command-qsEykgml.cjs.map → command-DJwcGKv_.cjs.map} +1 -1
  23. package/dist/components/AlertDialog.cjs.js +1 -1
  24. package/dist/components/AlertDialog.es.js +1 -1
  25. package/dist/components/Button.cjs.js +1 -1
  26. package/dist/components/Button.es.js +1 -1
  27. package/dist/components/ChatShell.cjs.js +10 -6
  28. package/dist/components/ChatShell.cjs.js.map +1 -1
  29. package/dist/components/ChatShell.es.js +10 -6
  30. package/dist/components/ChatShell.es.js.map +1 -1
  31. package/dist/components/ClampedText.cjs.js +1 -1
  32. package/dist/components/ClampedText.es.js +1 -1
  33. package/dist/components/CodeBlock.cjs.js +6 -5
  34. package/dist/components/CodeBlock.cjs.js.map +1 -1
  35. package/dist/components/CodeBlock.es.js +4 -3
  36. package/dist/components/CodeBlock.es.js.map +1 -1
  37. package/dist/components/CodeEditor.cjs.js +1 -1
  38. package/dist/components/CodeEditor.es.js +1 -1
  39. package/dist/components/Columns.cjs.js +1 -1
  40. package/dist/components/Columns.es.js +1 -1
  41. package/dist/components/Combobox.cjs.js +1 -1
  42. package/dist/components/Combobox.es.js +1 -1
  43. package/dist/components/Command.cjs.js +1 -1
  44. package/dist/components/Command.es.js +1 -1
  45. package/dist/components/CommandPalette.cjs.js +1 -1
  46. package/dist/components/CommandPalette.es.js +1 -1
  47. package/dist/components/CopyButton.cjs.js +1 -1
  48. package/dist/components/CopyButton.es.js +1 -1
  49. package/dist/components/DataCodeSection.cjs.js +1 -1
  50. package/dist/components/DataCodeSection.es.js +1 -1
  51. package/dist/components/DataDetailsPanel.cjs.js +2 -2
  52. package/dist/components/DataDetailsPanel.es.js +2 -2
  53. package/dist/components/DataFilter.cjs.js +2 -2
  54. package/dist/components/DataFilter.es.js +2 -2
  55. package/dist/components/DataList.cjs.js +2 -2
  56. package/dist/components/DataList.es.js +2 -2
  57. package/dist/components/DataPanel.cjs.js +1 -1
  58. package/dist/components/DataPanel.es.js +1 -1
  59. package/dist/components/DateRangeTimeline.cjs.js +1 -1
  60. package/dist/components/DateRangeTimeline.es.js +1 -1
  61. package/dist/components/DateTimePicker.cjs.js +2 -2
  62. package/dist/components/DateTimePicker.es.js +2 -2
  63. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  64. package/dist/components/DateTimeRangePicker.es.js +1 -1
  65. package/dist/components/Dialog.cjs.js +1 -1
  66. package/dist/components/Dialog.es.js +1 -1
  67. package/dist/components/Drawer.cjs.js +1 -1
  68. package/dist/components/Drawer.es.js +1 -1
  69. package/dist/components/DropdownMenu.cjs.js +1 -1
  70. package/dist/components/DropdownMenu.es.js +1 -1
  71. package/dist/components/EnvironmentVariablesEditor.cjs.js +4 -4
  72. package/dist/components/EnvironmentVariablesEditor.es.js +4 -4
  73. package/dist/components/ErrorBoundary.cjs.js +1 -1
  74. package/dist/components/ErrorBoundary.es.js +1 -1
  75. package/dist/components/FormFieldBlocks.cjs.js +2 -2
  76. package/dist/components/FormFieldBlocks.es.js +2 -2
  77. package/dist/components/HoverCard.cjs.js +1 -1
  78. package/dist/components/HoverCard.es.js +1 -1
  79. package/dist/components/InputGroup.cjs.js +1 -1
  80. package/dist/components/InputGroup.es.js +1 -1
  81. package/dist/components/JSONSchemaForm.cjs.js +2 -2
  82. package/dist/components/JSONSchemaForm.es.js +2 -2
  83. package/dist/components/KeyValueList.cjs.js +1 -1
  84. package/dist/components/KeyValueList.es.js +1 -1
  85. package/dist/components/ListSearch.cjs.js +1 -1
  86. package/dist/components/ListSearch.es.js +1 -1
  87. package/dist/components/MainSidebar.cjs.js +73 -50
  88. package/dist/components/MainSidebar.cjs.js.map +1 -1
  89. package/dist/components/MainSidebar.es.js +73 -50
  90. package/dist/components/MainSidebar.es.js.map +1 -1
  91. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  92. package/dist/components/MarkdownRenderer.es.js +1 -1
  93. package/dist/components/MessageScroller.cjs.js +1 -1
  94. package/dist/components/MessageScroller.es.js +1 -1
  95. package/dist/components/Notice.cjs.js +1 -1
  96. package/dist/components/Notice.es.js +1 -1
  97. package/dist/components/PrevNextNav.cjs.js +1 -1
  98. package/dist/components/PrevNextNav.es.js +1 -1
  99. package/dist/components/PropertyFilter.cjs.js +3 -3
  100. package/dist/components/PropertyFilter.es.js +4 -4
  101. package/dist/components/RuleBuilder.cjs.js +2 -2
  102. package/dist/components/RuleBuilder.es.js +2 -2
  103. package/dist/components/SankeyChart.cjs.js +10 -709
  104. package/dist/components/SankeyChart.cjs.js.map +1 -1
  105. package/dist/components/SankeyChart.es.js +2 -706
  106. package/dist/components/SankeyChart.es.js.map +1 -1
  107. package/dist/components/Select.cjs.js +1 -1
  108. package/dist/components/Select.es.js +1 -1
  109. package/dist/components/SessionExpired.cjs.js +1 -1
  110. package/dist/components/SessionExpired.es.js +1 -1
  111. package/dist/components/Shimmer.cjs.js +2 -15
  112. package/dist/components/Shimmer.cjs.js.map +1 -1
  113. package/dist/components/Shimmer.es.js +2 -15
  114. package/dist/components/Shimmer.es.js.map +1 -1
  115. package/dist/components/SideDialog.cjs.js +3 -3
  116. package/dist/components/SideDialog.es.js +3 -3
  117. package/dist/components/Tabs.cjs.js +4 -3
  118. package/dist/components/Tabs.cjs.js.map +1 -1
  119. package/dist/components/Tabs.es.js +2 -1
  120. package/dist/components/Tabs.es.js.map +1 -1
  121. package/dist/components/ThreadList.cjs.js +1 -1
  122. package/dist/components/ThreadList.es.js +1 -1
  123. package/dist/components/ThreadRail.cjs.js +6 -5
  124. package/dist/components/ThreadRail.cjs.js.map +1 -1
  125. package/dist/components/ThreadRail.es.js +6 -6
  126. package/dist/components/ThreadRail.es.js.map +1 -1
  127. package/dist/components/Truncate.cjs.js +1 -1
  128. package/dist/components/Truncate.es.js +1 -1
  129. package/dist/components/ai/ask-user.cjs.js +1 -1
  130. package/dist/components/ai/ask-user.es.js +1 -1
  131. package/dist/components/ai/plan.cjs.js +2 -2
  132. package/dist/components/ai/plan.es.js +2 -2
  133. package/dist/{copy-button-H2iaKMng.js → copy-button-B1GWIQ-x.js} +2 -2
  134. package/dist/{copy-button-H2iaKMng.js.map → copy-button-B1GWIQ-x.js.map} +1 -1
  135. package/dist/{copy-button-BKFcsNE1.cjs → copy-button-DwZ3c7D4.cjs} +2 -2
  136. package/dist/{copy-button-BKFcsNE1.cjs.map → copy-button-DwZ3c7D4.cjs.map} +1 -1
  137. package/dist/{data-code-section-D2zjah_b.cjs → data-code-section-BjmFgJpC.cjs} +5 -5
  138. package/dist/{data-code-section-D2zjah_b.cjs.map → data-code-section-BjmFgJpC.cjs.map} +1 -1
  139. package/dist/{data-code-section-MHMkC6q9.js → data-code-section-PJM5l3aS.js} +5 -5
  140. package/dist/{data-code-section-MHMkC6q9.js.map → data-code-section-PJM5l3aS.js.map} +1 -1
  141. package/dist/{data-list-CnQRIUyN.js → data-list-CnQWE0QP.js} +2 -2
  142. package/dist/{data-list-CnQRIUyN.js.map → data-list-CnQWE0QP.js.map} +1 -1
  143. package/dist/{data-list-Cb-piK4z.cjs → data-list-Cnnnx_vD.cjs} +2 -2
  144. package/dist/{data-list-Cb-piK4z.cjs.map → data-list-Cnnnx_vD.cjs.map} +1 -1
  145. package/dist/{data-panel-BEvHk4wg.js → data-panel-BQqPr6ew.js} +3 -3
  146. package/dist/{data-panel-BEvHk4wg.js.map → data-panel-BQqPr6ew.js.map} +1 -1
  147. package/dist/{data-panel-BumsjXVz.cjs → data-panel-C85h9XvH.cjs} +3 -3
  148. package/dist/{data-panel-BumsjXVz.cjs.map → data-panel-C85h9XvH.cjs.map} +1 -1
  149. package/dist/{date-time-range-picker-yJBIm34J.js → date-time-range-picker-BQpZVrH7.js} +4 -4
  150. package/dist/{date-time-range-picker-yJBIm34J.js.map → date-time-range-picker-BQpZVrH7.js.map} +1 -1
  151. package/dist/{date-time-range-picker-ue0m5G27.cjs → date-time-range-picker-sT6pHDmU.cjs} +4 -4
  152. package/dist/{date-time-range-picker-ue0m5G27.cjs.map → date-time-range-picker-sT6pHDmU.cjs.map} +1 -1
  153. package/dist/{dialog-ClItuCFY.cjs → dialog-5ZYCeKf-.cjs} +2 -2
  154. package/dist/{dialog-ClItuCFY.cjs.map → dialog-5ZYCeKf-.cjs.map} +1 -1
  155. package/dist/{dialog-bnt6epW2.js → dialog-DDXW5M21.js} +2 -2
  156. package/dist/{dialog-bnt6epW2.js.map → dialog-DDXW5M21.js.map} +1 -1
  157. package/dist/domains/logs/components/log-details-view.cjs.js +2 -2
  158. package/dist/domains/logs/components/log-details-view.es.js +2 -2
  159. package/dist/domains/logs/components/logs-error-content.cjs.js +1 -1
  160. package/dist/domains/logs/components/logs-error-content.es.js +1 -1
  161. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  162. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  163. package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
  164. package/dist/domains/logs/components/no-logs-info.es.js +1 -1
  165. package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
  166. package/dist/domains/memory/components/flame-graph.es.js +1 -1
  167. package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
  168. package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
  169. package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
  170. package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
  171. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  172. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  173. package/dist/domains/metrics/components/latency-card-view.cjs.js +4 -3
  174. package/dist/domains/metrics/components/latency-card-view.cjs.js.map +1 -1
  175. package/dist/domains/metrics/components/latency-card-view.es.js +2 -1
  176. package/dist/domains/metrics/components/latency-card-view.es.js.map +1 -1
  177. package/dist/domains/metrics/components/memory-card-view.cjs.js +5 -4
  178. package/dist/domains/metrics/components/memory-card-view.cjs.js.map +1 -1
  179. package/dist/domains/metrics/components/memory-card-view.es.js +3 -2
  180. package/dist/domains/metrics/components/memory-card-view.es.js.map +1 -1
  181. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +1 -1
  182. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +1 -1
  183. package/dist/domains/metrics/components/scores-card-view.cjs.js +5 -4
  184. package/dist/domains/metrics/components/scores-card-view.cjs.js.map +1 -1
  185. package/dist/domains/metrics/components/scores-card-view.es.js +3 -2
  186. package/dist/domains/metrics/components/scores-card-view.es.js.map +1 -1
  187. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +4 -3
  188. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js.map +1 -1
  189. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +2 -1
  190. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js.map +1 -1
  191. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +4 -3
  192. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js.map +1 -1
  193. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +2 -1
  194. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js.map +1 -1
  195. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +4 -3
  196. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js.map +1 -1
  197. package/dist/domains/metrics/components/traces-volume-card-view.es.js +2 -1
  198. package/dist/domains/metrics/components/traces-volume-card-view.es.js.map +1 -1
  199. package/dist/domains/traces/components/no-traces-info.cjs.js +1 -1
  200. package/dist/domains/traces/components/no-traces-info.es.js +1 -1
  201. package/dist/domains/traces/components/shared.cjs.js +8 -0
  202. package/dist/domains/traces/components/shared.cjs.js.map +1 -1
  203. package/dist/domains/traces/components/shared.es.js +8 -0
  204. package/dist/domains/traces/components/shared.es.js.map +1 -1
  205. package/dist/domains/traces/components/span-data-panel-view.cjs.js +6 -5
  206. package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
  207. package/dist/domains/traces/components/span-data-panel-view.es.js +4 -3
  208. package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
  209. package/dist/domains/traces/components/timeline-name-col.cjs.js +6 -2
  210. package/dist/domains/traces/components/timeline-name-col.cjs.js.map +1 -1
  211. package/dist/domains/traces/components/timeline-name-col.es.js +6 -2
  212. package/dist/domains/traces/components/timeline-name-col.es.js.map +1 -1
  213. package/dist/domains/traces/components/timeline-timing-col.cjs.js +1 -1
  214. package/dist/domains/traces/components/timeline-timing-col.es.js +1 -1
  215. package/dist/domains/traces/components/trace-columns-menu.cjs.js +3 -3
  216. package/dist/domains/traces/components/trace-columns-menu.es.js +3 -3
  217. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +4 -10
  218. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  219. package/dist/domains/traces/components/trace-data-panel-view.es.js +5 -11
  220. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  221. package/dist/domains/traces/components/traces-error-content.cjs.js +1 -1
  222. package/dist/domains/traces/components/traces-error-content.es.js +1 -1
  223. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +2 -2
  224. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +2 -2
  225. package/dist/domains/traces/components/traces-list-view.cjs.js +2 -2
  226. package/dist/domains/traces/components/traces-list-view.es.js +2 -2
  227. package/dist/domains/traces/components/traces-toolbar.cjs.js +1 -1
  228. package/dist/domains/traces/components/traces-toolbar.es.js +1 -1
  229. package/dist/domains/traces/hooks/use-entity-names.cjs.js +12 -4
  230. package/dist/domains/traces/hooks/use-entity-names.cjs.js.map +1 -1
  231. package/dist/domains/traces/hooks/use-entity-names.es.js +12 -4
  232. package/dist/domains/traces/hooks/use-entity-names.es.js.map +1 -1
  233. package/dist/{drawer-DZ9amYo_.js → drawer-C8jNXutE.js} +2 -2
  234. package/dist/{drawer-DZ9amYo_.js.map → drawer-C8jNXutE.js.map} +1 -1
  235. package/dist/{drawer-CdsTitFp.cjs → drawer-CNnvBMfD.cjs} +2 -2
  236. package/dist/{drawer-CdsTitFp.cjs.map → drawer-CNnvBMfD.cjs.map} +1 -1
  237. package/dist/{dropdown-menu-ppWztidX.cjs → dropdown-menu-BZGlERgf.cjs} +4 -3
  238. package/dist/dropdown-menu-BZGlERgf.cjs.map +1 -0
  239. package/dist/{dropdown-menu-DEFygDZI.js → dropdown-menu-DCMh8P4w.js} +4 -3
  240. package/dist/dropdown-menu-DCMh8P4w.js.map +1 -0
  241. package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
  242. package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
  243. package/dist/ee/signals/entity-learning-api.cjs.js +113 -0
  244. package/dist/ee/signals/entity-learning-api.cjs.js.map +1 -0
  245. package/dist/ee/signals/entity-learning-api.d.ts +2 -0
  246. package/dist/ee/signals/entity-learning-api.es.js +99 -0
  247. package/dist/ee/signals/entity-learning-api.es.js.map +1 -0
  248. package/dist/ee/signals/examples-pager.cjs.js +49 -0
  249. package/dist/ee/signals/examples-pager.cjs.js.map +1 -0
  250. package/dist/ee/signals/examples-pager.d.ts +2 -0
  251. package/dist/ee/signals/examples-pager.es.js +44 -0
  252. package/dist/ee/signals/examples-pager.es.js.map +1 -0
  253. package/dist/ee/signals/flow-card.cjs.js +105 -0
  254. package/dist/ee/signals/flow-card.cjs.js.map +1 -0
  255. package/dist/ee/signals/flow-card.d.ts +2 -0
  256. package/dist/ee/signals/flow-card.es.js +101 -0
  257. package/dist/ee/signals/flow-card.es.js.map +1 -0
  258. package/dist/ee/signals/hooks/theme-query-guards.cjs.js +20 -0
  259. package/dist/ee/signals/hooks/theme-query-guards.cjs.js.map +1 -0
  260. package/dist/ee/signals/hooks/theme-query-guards.d.ts +2 -0
  261. package/dist/ee/signals/hooks/theme-query-guards.es.js +14 -0
  262. package/dist/ee/signals/hooks/theme-query-guards.es.js.map +1 -0
  263. package/dist/ee/signals/hooks/use-entity-learning-progress.cjs.js +19 -0
  264. package/dist/ee/signals/hooks/use-entity-learning-progress.cjs.js.map +1 -0
  265. package/dist/ee/signals/hooks/use-entity-learning-progress.d.ts +2 -0
  266. package/dist/ee/signals/hooks/use-entity-learning-progress.es.js +15 -0
  267. package/dist/ee/signals/hooks/use-entity-learning-progress.es.js.map +1 -0
  268. package/dist/ee/signals/hooks/use-noise-examples.cjs.js +32 -0
  269. package/dist/ee/signals/hooks/use-noise-examples.cjs.js.map +1 -0
  270. package/dist/ee/signals/hooks/use-noise-examples.d.ts +2 -0
  271. package/dist/ee/signals/hooks/use-noise-examples.es.js +28 -0
  272. package/dist/ee/signals/hooks/use-noise-examples.es.js.map +1 -0
  273. package/dist/ee/signals/hooks/use-noise.cjs.js +22 -0
  274. package/dist/ee/signals/hooks/use-noise.cjs.js.map +1 -0
  275. package/dist/ee/signals/hooks/use-noise.d.ts +2 -0
  276. package/dist/ee/signals/hooks/use-noise.es.js +18 -0
  277. package/dist/ee/signals/hooks/use-noise.es.js.map +1 -0
  278. package/dist/ee/signals/hooks/use-snapshot-playback.cjs.js +22 -0
  279. package/dist/ee/signals/hooks/use-snapshot-playback.cjs.js.map +1 -0
  280. package/dist/ee/signals/hooks/use-snapshot-playback.d.ts +2 -0
  281. package/dist/ee/signals/hooks/use-snapshot-playback.es.js +18 -0
  282. package/dist/ee/signals/hooks/use-snapshot-playback.es.js.map +1 -0
  283. package/dist/ee/signals/hooks/use-theme-detail.cjs.js +27 -0
  284. package/dist/ee/signals/hooks/use-theme-detail.cjs.js.map +1 -0
  285. package/dist/ee/signals/hooks/use-theme-detail.d.ts +2 -0
  286. package/dist/ee/signals/hooks/use-theme-detail.es.js +23 -0
  287. package/dist/ee/signals/hooks/use-theme-detail.es.js.map +1 -0
  288. package/dist/ee/signals/hooks/use-theme-entities.cjs.js +18 -0
  289. package/dist/ee/signals/hooks/use-theme-entities.cjs.js.map +1 -0
  290. package/dist/ee/signals/hooks/use-theme-entities.d.ts +2 -0
  291. package/dist/ee/signals/hooks/use-theme-entities.es.js +14 -0
  292. package/dist/ee/signals/hooks/use-theme-entities.es.js.map +1 -0
  293. package/dist/ee/signals/hooks/use-theme-examples.cjs.js +40 -0
  294. package/dist/ee/signals/hooks/use-theme-examples.cjs.js.map +1 -0
  295. package/dist/ee/signals/hooks/use-theme-examples.d.ts +2 -0
  296. package/dist/ee/signals/hooks/use-theme-examples.es.js +36 -0
  297. package/dist/ee/signals/hooks/use-theme-examples.es.js.map +1 -0
  298. package/dist/ee/signals/hooks/use-theme-flow.cjs.js +23 -0
  299. package/dist/ee/signals/hooks/use-theme-flow.cjs.js.map +1 -0
  300. package/dist/ee/signals/hooks/use-theme-flow.d.ts +2 -0
  301. package/dist/ee/signals/hooks/use-theme-flow.es.js +19 -0
  302. package/dist/ee/signals/hooks/use-theme-flow.es.js.map +1 -0
  303. package/dist/ee/signals/hooks/use-theme-flows.cjs.js +22 -0
  304. package/dist/ee/signals/hooks/use-theme-flows.cjs.js.map +1 -0
  305. package/dist/ee/signals/hooks/use-theme-flows.d.ts +2 -0
  306. package/dist/ee/signals/hooks/use-theme-flows.es.js +18 -0
  307. package/dist/ee/signals/hooks/use-theme-flows.es.js.map +1 -0
  308. package/dist/ee/signals/hooks/use-theme-history.cjs.js +20 -0
  309. package/dist/ee/signals/hooks/use-theme-history.cjs.js.map +1 -0
  310. package/dist/ee/signals/hooks/use-theme-history.d.ts +2 -0
  311. package/dist/ee/signals/hooks/use-theme-history.es.js +16 -0
  312. package/dist/ee/signals/hooks/use-theme-history.es.js.map +1 -0
  313. package/dist/ee/signals/hooks/use-theme-paths.cjs.js +21 -0
  314. package/dist/ee/signals/hooks/use-theme-paths.cjs.js.map +1 -0
  315. package/dist/ee/signals/hooks/use-theme-paths.d.ts +2 -0
  316. package/dist/ee/signals/hooks/use-theme-paths.es.js +17 -0
  317. package/dist/ee/signals/hooks/use-theme-paths.es.js.map +1 -0
  318. package/dist/ee/signals/hooks/use-theme-snapshots.cjs.js +22 -0
  319. package/dist/ee/signals/hooks/use-theme-snapshots.cjs.js.map +1 -0
  320. package/dist/ee/signals/hooks/use-theme-snapshots.d.ts +2 -0
  321. package/dist/ee/signals/hooks/use-theme-snapshots.es.js +18 -0
  322. package/dist/ee/signals/hooks/use-theme-snapshots.es.js.map +1 -0
  323. package/dist/ee/signals/hooks/use-trace-insight.cjs.js +21 -0
  324. package/dist/ee/signals/hooks/use-trace-insight.cjs.js.map +1 -0
  325. package/dist/ee/signals/hooks/use-trace-insight.d.ts +2 -0
  326. package/dist/ee/signals/hooks/use-trace-insight.es.js +17 -0
  327. package/dist/ee/signals/hooks/use-trace-insight.es.js.map +1 -0
  328. package/dist/ee/signals/hooks.cjs.js +30 -0
  329. package/dist/ee/signals/hooks.cjs.js.map +1 -0
  330. package/dist/ee/signals/hooks.d.ts +2 -0
  331. package/dist/ee/signals/hooks.es.js +12 -0
  332. package/dist/ee/signals/hooks.es.js.map +1 -0
  333. package/dist/ee/signals/lifeline-point.cjs.js +73 -0
  334. package/dist/ee/signals/lifeline-point.cjs.js.map +1 -0
  335. package/dist/ee/signals/lifeline-point.d.ts +2 -0
  336. package/dist/ee/signals/lifeline-point.es.js +69 -0
  337. package/dist/ee/signals/lifeline-point.es.js.map +1 -0
  338. package/dist/ee/signals/lifeline-row.cjs.js +118 -0
  339. package/dist/ee/signals/lifeline-row.cjs.js.map +1 -0
  340. package/dist/ee/signals/lifeline-row.d.ts +2 -0
  341. package/dist/ee/signals/lifeline-row.es.js +114 -0
  342. package/dist/ee/signals/lifeline-row.es.js.map +1 -0
  343. package/dist/ee/signals/noise-detail-panel.cjs.js +96 -0
  344. package/dist/ee/signals/noise-detail-panel.cjs.js.map +1 -0
  345. package/dist/ee/signals/noise-detail-panel.d.ts +2 -0
  346. package/dist/ee/signals/noise-detail-panel.es.js +92 -0
  347. package/dist/ee/signals/noise-detail-panel.es.js.map +1 -0
  348. package/dist/ee/signals/sankey-signals-data.cjs.js +138 -0
  349. package/dist/ee/signals/sankey-signals-data.cjs.js.map +1 -0
  350. package/dist/ee/signals/sankey-signals-data.d.ts +2 -0
  351. package/dist/ee/signals/sankey-signals-data.es.js +127 -0
  352. package/dist/ee/signals/sankey-signals-data.es.js.map +1 -0
  353. package/dist/ee/signals/sankey-signals.cjs.js +367 -0
  354. package/dist/ee/signals/sankey-signals.cjs.js.map +1 -0
  355. package/dist/ee/signals/sankey-signals.d.ts +2 -0
  356. package/dist/ee/signals/sankey-signals.es.js +363 -0
  357. package/dist/ee/signals/sankey-signals.es.js.map +1 -0
  358. package/dist/ee/signals/signal-delta-column.cjs.js +90 -0
  359. package/dist/ee/signals/signal-delta-column.cjs.js.map +1 -0
  360. package/dist/ee/signals/signal-delta-column.d.ts +2 -0
  361. package/dist/ee/signals/signal-delta-column.es.js +86 -0
  362. package/dist/ee/signals/signal-delta-column.es.js.map +1 -0
  363. package/dist/ee/signals/signal-formatting.cjs.js +83 -0
  364. package/dist/ee/signals/signal-formatting.cjs.js.map +1 -0
  365. package/dist/ee/signals/signal-formatting.d.ts +2 -0
  366. package/dist/ee/signals/signal-formatting.es.js +70 -0
  367. package/dist/ee/signals/signal-formatting.es.js.map +1 -0
  368. package/dist/ee/signals/signal-lifelines.cjs.js +69 -0
  369. package/dist/ee/signals/signal-lifelines.cjs.js.map +1 -0
  370. package/dist/ee/signals/signal-lifelines.d.ts +2 -0
  371. package/dist/ee/signals/signal-lifelines.es.js +65 -0
  372. package/dist/ee/signals/signal-lifelines.es.js.map +1 -0
  373. package/dist/ee/signals/signals-error-state.cjs.js +28 -0
  374. package/dist/ee/signals/signals-error-state.cjs.js.map +1 -0
  375. package/dist/ee/signals/signals-error-state.d.ts +2 -0
  376. package/dist/ee/signals/signals-error-state.es.js +24 -0
  377. package/dist/ee/signals/signals-error-state.es.js.map +1 -0
  378. package/dist/ee/signals/signals-loading-skeleton.cjs.js +57 -0
  379. package/dist/ee/signals/signals-loading-skeleton.cjs.js.map +1 -0
  380. package/dist/ee/signals/signals-loading-skeleton.d.ts +2 -0
  381. package/dist/ee/signals/signals-loading-skeleton.es.js +52 -0
  382. package/dist/ee/signals/signals-loading-skeleton.es.js.map +1 -0
  383. package/dist/ee/signals/snapshot-timeline-data.cjs.js +40 -0
  384. package/dist/ee/signals/snapshot-timeline-data.cjs.js.map +1 -0
  385. package/dist/ee/signals/snapshot-timeline-data.d.ts +2 -0
  386. package/dist/ee/signals/snapshot-timeline-data.es.js +34 -0
  387. package/dist/ee/signals/snapshot-timeline-data.es.js.map +1 -0
  388. package/dist/ee/signals/snapshot-timeline.cjs.js +109 -0
  389. package/dist/ee/signals/snapshot-timeline.cjs.js.map +1 -0
  390. package/dist/ee/signals/snapshot-timeline.d.ts +2 -0
  391. package/dist/ee/signals/snapshot-timeline.es.js +104 -0
  392. package/dist/ee/signals/snapshot-timeline.es.js.map +1 -0
  393. package/dist/ee/signals/sortable-signal-headers.cjs.js +145 -0
  394. package/dist/ee/signals/sortable-signal-headers.cjs.js.map +1 -0
  395. package/dist/ee/signals/sortable-signal-headers.d.ts +2 -0
  396. package/dist/ee/signals/sortable-signal-headers.es.js +141 -0
  397. package/dist/ee/signals/sortable-signal-headers.es.js.map +1 -0
  398. package/dist/ee/signals/theme-compare-data.cjs.js +46 -0
  399. package/dist/ee/signals/theme-compare-data.cjs.js.map +1 -0
  400. package/dist/ee/signals/theme-compare-data.d.ts +2 -0
  401. package/dist/ee/signals/theme-compare-data.es.js +41 -0
  402. package/dist/ee/signals/theme-compare-data.es.js.map +1 -0
  403. package/dist/ee/signals/theme-compare-sparkline.cjs.js +67 -0
  404. package/dist/ee/signals/theme-compare-sparkline.cjs.js.map +1 -0
  405. package/dist/ee/signals/theme-compare-sparkline.d.ts +2 -0
  406. package/dist/ee/signals/theme-compare-sparkline.es.js +63 -0
  407. package/dist/ee/signals/theme-compare-sparkline.es.js.map +1 -0
  408. package/dist/ee/signals/theme-compare.cjs.js +103 -0
  409. package/dist/ee/signals/theme-compare.cjs.js.map +1 -0
  410. package/dist/ee/signals/theme-compare.d.ts +2 -0
  411. package/dist/ee/signals/theme-compare.es.js +99 -0
  412. package/dist/ee/signals/theme-compare.es.js.map +1 -0
  413. package/dist/ee/signals/theme-detail-panel.cjs.js +171 -0
  414. package/dist/ee/signals/theme-detail-panel.cjs.js.map +1 -0
  415. package/dist/ee/signals/theme-detail-panel.d.ts +2 -0
  416. package/dist/ee/signals/theme-detail-panel.es.js +167 -0
  417. package/dist/ee/signals/theme-detail-panel.es.js.map +1 -0
  418. package/dist/ee/signals/theme-drilldown-data.cjs.js +115 -0
  419. package/dist/ee/signals/theme-drilldown-data.cjs.js.map +1 -0
  420. package/dist/ee/signals/theme-drilldown-data.d.ts +2 -0
  421. package/dist/ee/signals/theme-drilldown-data.es.js +109 -0
  422. package/dist/ee/signals/theme-drilldown-data.es.js.map +1 -0
  423. package/dist/ee/signals/theme-filter-banner.cjs.js +64 -0
  424. package/dist/ee/signals/theme-filter-banner.cjs.js.map +1 -0
  425. package/dist/ee/signals/theme-filter-banner.d.ts +2 -0
  426. package/dist/ee/signals/theme-filter-banner.es.js +60 -0
  427. package/dist/ee/signals/theme-filter-banner.es.js.map +1 -0
  428. package/dist/ee/signals/theme-lifelines-data.cjs.js +62 -0
  429. package/dist/ee/signals/theme-lifelines-data.cjs.js.map +1 -0
  430. package/dist/ee/signals/theme-lifelines-data.d.ts +2 -0
  431. package/dist/ee/signals/theme-lifelines-data.es.js +56 -0
  432. package/dist/ee/signals/theme-lifelines-data.es.js.map +1 -0
  433. package/dist/ee/signals/theme-lifelines.cjs.js +75 -0
  434. package/dist/ee/signals/theme-lifelines.cjs.js.map +1 -0
  435. package/dist/ee/signals/theme-lifelines.d.ts +2 -0
  436. package/dist/ee/signals/theme-lifelines.es.js +71 -0
  437. package/dist/ee/signals/theme-lifelines.es.js.map +1 -0
  438. package/dist/ee/signals/theme-trend-chart.cjs.js +83 -0
  439. package/dist/ee/signals/theme-trend-chart.cjs.js.map +1 -0
  440. package/dist/ee/signals/theme-trend-chart.d.ts +2 -0
  441. package/dist/ee/signals/theme-trend-chart.es.js +79 -0
  442. package/dist/ee/signals/theme-trend-chart.es.js.map +1 -0
  443. package/dist/ee/signals/theme-trend.cjs.js +27 -0
  444. package/dist/ee/signals/theme-trend.cjs.js.map +1 -0
  445. package/dist/ee/signals/theme-trend.d.ts +2 -0
  446. package/dist/ee/signals/theme-trend.es.js +22 -0
  447. package/dist/ee/signals/theme-trend.es.js.map +1 -0
  448. package/dist/ee/signals/trace-insight-view.cjs.js +89 -0
  449. package/dist/ee/signals/trace-insight-view.cjs.js.map +1 -0
  450. package/dist/ee/signals/trace-insight-view.d.ts +2 -0
  451. package/dist/ee/signals/trace-insight-view.es.js +85 -0
  452. package/dist/ee/signals/trace-insight-view.es.js.map +1 -0
  453. package/dist/ee/signals/trace-intelligence-context.cjs.js +24 -0
  454. package/dist/ee/signals/trace-intelligence-context.cjs.js.map +1 -0
  455. package/dist/ee/signals/trace-intelligence-context.d.ts +2 -0
  456. package/dist/ee/signals/trace-intelligence-context.es.js +19 -0
  457. package/dist/ee/signals/trace-intelligence-context.es.js.map +1 -0
  458. package/dist/ee/signals/trace-intelligence-explainer.cjs.js +45 -0
  459. package/dist/ee/signals/trace-intelligence-explainer.cjs.js.map +1 -0
  460. package/dist/ee/signals/trace-intelligence-explainer.d.ts +2 -0
  461. package/dist/ee/signals/trace-intelligence-explainer.es.js +41 -0
  462. package/dist/ee/signals/trace-intelligence-explainer.es.js.map +1 -0
  463. package/dist/ee/signals/trace-intelligence-provider.cjs.js +19 -0
  464. package/dist/ee/signals/trace-intelligence-provider.cjs.js.map +1 -0
  465. package/dist/ee/signals/trace-intelligence-provider.d.ts +2 -0
  466. package/dist/ee/signals/trace-intelligence-provider.es.js +15 -0
  467. package/dist/ee/signals/trace-intelligence-provider.es.js.map +1 -0
  468. package/dist/ee/signals/types.cjs.js +3 -0
  469. package/dist/ee/signals/types.cjs.js.map +1 -0
  470. package/dist/ee/signals/types.d.ts +2 -0
  471. package/dist/ee/signals/types.es.js +2 -0
  472. package/dist/ee/signals/types.es.js.map +1 -0
  473. package/dist/ee/signals/use-trace-intelligence.cjs.js +13 -0
  474. package/dist/ee/signals/use-trace-intelligence.cjs.js.map +1 -0
  475. package/dist/ee/signals/use-trace-intelligence.d.ts +2 -0
  476. package/dist/ee/signals/use-trace-intelligence.es.js +9 -0
  477. package/dist/ee/signals/use-trace-intelligence.es.js.map +1 -0
  478. package/dist/ee/signals/view-mode-tab.cjs.js +18 -0
  479. package/dist/ee/signals/view-mode-tab.cjs.js.map +1 -0
  480. package/dist/ee/signals/view-mode-tab.d.ts +2 -0
  481. package/dist/ee/signals/view-mode-tab.es.js +14 -0
  482. package/dist/ee/signals/view-mode-tab.es.js.map +1 -0
  483. package/dist/ee/signals.cjs.js +38 -0
  484. package/dist/ee/signals.cjs.js.map +1 -1
  485. package/dist/ee/signals.es.js +18 -0
  486. package/dist/ee/signals.es.js.map +1 -1
  487. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +3 -3
  488. package/dist/ee/topics/components/topic-trace-summary-list.es.js +3 -3
  489. package/dist/{hover-card-crVofiZO.js → hover-card-Bs845QbV.js} +2 -2
  490. package/dist/{hover-card-crVofiZO.js.map → hover-card-Bs845QbV.js.map} +1 -1
  491. package/dist/{hover-card-Bx258om1.cjs → hover-card-Cd9QK50X.cjs} +2 -2
  492. package/dist/{hover-card-Bx258om1.cjs.map → hover-card-Cd9QK50X.cjs.map} +1 -1
  493. package/dist/{input-group-CH72YUVL.cjs → input-group-BTaw3Ycd.cjs} +2 -2
  494. package/dist/{input-group-CH72YUVL.cjs.map → input-group-BTaw3Ycd.cjs.map} +1 -1
  495. package/dist/{input-group-Dzs-ai0n.js → input-group-CWT_IwX0.js} +2 -2
  496. package/dist/{input-group-Dzs-ai0n.js.map → input-group-CWT_IwX0.js.map} +1 -1
  497. package/dist/{markdown-renderer-Bi2fWeoF.js → markdown-renderer-DszxuuNM.js} +36 -18
  498. package/dist/markdown-renderer-DszxuuNM.js.map +1 -0
  499. package/dist/{markdown-renderer-DwfNrhEH.cjs → markdown-renderer-g8xNLOc0.cjs} +36 -18
  500. package/dist/markdown-renderer-g8xNLOc0.cjs.map +1 -0
  501. package/dist/{message-scroller-BmzjZZNs.cjs → message-scroller-BssU0EKT.cjs} +89 -16
  502. package/dist/message-scroller-BssU0EKT.cjs.map +1 -0
  503. package/dist/{message-scroller-D5O7sUS5.js → message-scroller-DlVS0FW7.js} +89 -16
  504. package/dist/message-scroller-DlVS0FW7.js.map +1 -0
  505. package/dist/{property-filter-applied-DI4w1ACS.js → property-filter-applied-C2teL4uw.js} +3 -3
  506. package/dist/{property-filter-applied-DI4w1ACS.js.map → property-filter-applied-C2teL4uw.js.map} +1 -1
  507. package/dist/{property-filter-applied-BhxbHAN8.cjs → property-filter-applied-ChK5XtsC.cjs} +3 -3
  508. package/dist/{property-filter-applied-BhxbHAN8.cjs.map → property-filter-applied-ChK5XtsC.cjs.map} +1 -1
  509. package/dist/resize/panel-drawer.cjs.js +1 -1
  510. package/dist/resize/panel-drawer.es.js +1 -1
  511. package/dist/sankey-chart-Bp-DrL1q.cjs +925 -0
  512. package/dist/sankey-chart-Bp-DrL1q.cjs.map +1 -0
  513. package/dist/sankey-chart-zhW_F0Rm.js +915 -0
  514. package/dist/sankey-chart-zhW_F0Rm.js.map +1 -0
  515. package/dist/{search-field-block-DCnFZzRK.js → search-field-block-D0PBxCxK.js} +2 -2
  516. package/dist/{search-field-block-DCnFZzRK.js.map → search-field-block-D0PBxCxK.js.map} +1 -1
  517. package/dist/{search-field-block-D6TdrHZX.cjs → search-field-block-D4vuLoZI.cjs} +2 -2
  518. package/dist/{search-field-block-D6TdrHZX.cjs.map → search-field-block-D4vuLoZI.cjs.map} +1 -1
  519. package/dist/{select-Beo8qQ0e.js → select-B_E0ADD5.js} +2 -2
  520. package/dist/{select-Beo8qQ0e.js.map → select-B_E0ADD5.js.map} +1 -1
  521. package/dist/{select-B6ce20XX.cjs → select-OAXqZLkC.cjs} +2 -2
  522. package/dist/{select-B6ce20XX.cjs.map → select-OAXqZLkC.cjs.map} +1 -1
  523. package/dist/{select-field-block-svlHplxW.cjs → select-field-block-BN9oU5B5.cjs} +2 -2
  524. package/dist/{select-field-block-svlHplxW.cjs.map → select-field-block-BN9oU5B5.cjs.map} +1 -1
  525. package/dist/{select-field-block-DXw3tD0y.js → select-field-block-D1Na8gZW.js} +2 -2
  526. package/dist/{select-field-block-DXw3tD0y.js.map → select-field-block-D1Na8gZW.js.map} +1 -1
  527. package/dist/src/domains/traces/hooks/use-entity-names.d.ts +2 -1
  528. package/dist/src/ds/components/ChatShell/chat-shell.d.ts +9 -6
  529. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-item-classes.d.ts +13 -2
  530. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-link.d.ts +2 -2
  531. package/dist/src/ds/components/MarkdownRenderer/markdown-renderer.d.ts +3 -1
  532. package/dist/src/ds/components/SankeyChart/sankey-chart.d.ts +7 -2
  533. package/dist/src/ds/components/SankeyChart/sankey-portal-tooltip.d.ts +8 -0
  534. package/dist/src/ds/components/SankeyChart/use-sankey-geometry-transition.d.ts +11 -0
  535. package/dist/src/ds/components/SankeyChart/use-sankey-hover-tooltip.d.ts +15 -0
  536. package/dist/src/ds/components/ThreadRail/thread-rail-turns.d.ts +2 -0
  537. package/dist/src/ee/signals/entity-learning-api.d.ts +13 -0
  538. package/dist/src/ee/signals/examples-pager.d.ts +7 -0
  539. package/dist/src/ee/signals/flow-card.d.ts +14 -0
  540. package/dist/src/ee/signals/hooks/index.d.ts +11 -0
  541. package/dist/src/ee/signals/hooks/theme-query-guards.d.ts +3 -0
  542. package/dist/src/ee/signals/hooks/use-entity-learning-progress.d.ts +1 -0
  543. package/dist/src/ee/signals/hooks/use-noise-examples.d.ts +2 -0
  544. package/dist/src/ee/signals/hooks/use-noise.d.ts +2 -0
  545. package/dist/src/ee/signals/hooks/use-snapshot-playback.d.ts +9 -0
  546. package/dist/src/ee/signals/hooks/use-theme-detail.d.ts +2 -0
  547. package/dist/src/ee/signals/hooks/use-theme-entities.d.ts +1 -0
  548. package/dist/src/ee/signals/hooks/use-theme-examples.d.ts +2 -0
  549. package/dist/src/ee/signals/hooks/use-theme-flow.d.ts +2 -0
  550. package/dist/src/ee/signals/hooks/use-theme-flows.d.ts +2 -0
  551. package/dist/src/ee/signals/hooks/use-theme-history.d.ts +2 -0
  552. package/dist/src/ee/signals/hooks/use-theme-paths.d.ts +2 -0
  553. package/dist/src/ee/signals/hooks/use-theme-snapshots.d.ts +2 -0
  554. package/dist/src/ee/signals/hooks/use-trace-insight.d.ts +1 -0
  555. package/dist/src/ee/signals/index.d.ts +9 -0
  556. package/dist/src/ee/signals/lifeline-point.d.ts +8 -0
  557. package/dist/src/ee/signals/lifeline-row.d.ts +11 -0
  558. package/dist/src/ee/signals/noise-detail-panel.d.ts +10 -0
  559. package/dist/src/ee/signals/sankey-signals-data.d.ts +41 -0
  560. package/dist/src/ee/signals/sankey-signals.d.ts +12 -0
  561. package/dist/src/ee/signals/signal-delta-column.d.ts +12 -0
  562. package/dist/src/ee/signals/signal-formatting.d.ts +15 -0
  563. package/dist/src/ee/signals/signal-lifelines.d.ts +9 -0
  564. package/dist/src/ee/signals/signals-error-state.d.ts +5 -0
  565. package/dist/src/ee/signals/signals-loading-skeleton.d.ts +2 -0
  566. package/dist/src/ee/signals/snapshot-timeline-data.d.ts +12 -0
  567. package/dist/src/ee/signals/snapshot-timeline.d.ts +25 -0
  568. package/dist/src/ee/signals/sortable-signal-headers.d.ts +6 -0
  569. package/dist/src/ee/signals/theme-compare-data.d.ts +24 -0
  570. package/dist/src/ee/signals/theme-compare-sparkline.d.ts +5 -0
  571. package/dist/src/ee/signals/theme-compare.d.ts +17 -0
  572. package/dist/src/ee/signals/theme-detail-panel.d.ts +11 -0
  573. package/dist/src/ee/signals/theme-drilldown-data.d.ts +10 -0
  574. package/dist/src/ee/signals/theme-filter-banner.d.ts +8 -0
  575. package/dist/src/ee/signals/theme-lifelines-data.d.ts +35 -0
  576. package/dist/src/ee/signals/theme-lifelines.d.ts +17 -0
  577. package/dist/src/ee/signals/theme-trend-chart.d.ts +6 -0
  578. package/dist/src/ee/signals/theme-trend.d.ts +17 -0
  579. package/dist/src/ee/signals/trace-insight-view.d.ts +6 -0
  580. package/dist/src/ee/signals/trace-intelligence-context.d.ts +10 -0
  581. package/dist/src/ee/signals/trace-intelligence-explainer.d.ts +2 -0
  582. package/dist/src/ee/signals/trace-intelligence-provider.d.ts +11 -0
  583. package/dist/src/ee/signals/types.d.ts +1 -0
  584. package/dist/src/ee/signals/use-trace-intelligence.d.ts +1 -0
  585. package/dist/src/ee/signals/view-mode-tab.d.ts +6 -0
  586. package/dist/src/test/msw-server.d.ts +1 -0
  587. package/dist/src/test/vitest-setup.d.ts +1 -0
  588. package/dist/style.css +306 -18
  589. package/dist/tabs-root-BBPou4QC.js +69 -0
  590. package/dist/tabs-root-BBPou4QC.js.map +1 -0
  591. package/dist/tabs-root-VtBc6K2q.cjs +72 -0
  592. package/dist/tabs-root-VtBc6K2q.cjs.map +1 -0
  593. package/dist/{tabs-tab-BkUCE-4E.cjs → tabs-tab-Cq4YR31P.cjs} +2 -67
  594. package/dist/tabs-tab-Cq4YR31P.cjs.map +1 -0
  595. package/dist/{tabs-tab-DDGltcUc.js → tabs-tab-D5JTAehi.js} +6 -69
  596. package/dist/tabs-tab-D5JTAehi.js.map +1 -0
  597. package/dist/{time-picker-mLzcoQMO.js → time-picker-CkqREdQB.js} +2 -2
  598. package/dist/{time-picker-mLzcoQMO.js.map → time-picker-CkqREdQB.js.map} +1 -1
  599. package/dist/{time-picker-BOQtPoyD.cjs → time-picker-Dy2oyq8P.cjs} +2 -2
  600. package/dist/{time-picker-BOQtPoyD.cjs.map → time-picker-Dy2oyq8P.cjs.map} +1 -1
  601. package/dist/{traces-data-list-DtuaCDES.js → traces-data-list-B3wMvCfk.js} +2 -2
  602. package/dist/{traces-data-list-DtuaCDES.js.map → traces-data-list-B3wMvCfk.js.map} +1 -1
  603. package/dist/{traces-data-list-vsvvvEiP.cjs → traces-data-list-pTNo_zbS.cjs} +2 -2
  604. package/dist/{traces-data-list-vsvvvEiP.cjs.map → traces-data-list-pTNo_zbS.cjs.map} +1 -1
  605. package/package.json +8 -8
  606. package/theme.css +6 -8
  607. package/dist/Button-Bm94fEF2.cjs.map +0 -1
  608. package/dist/Button-Bx2lFdqb.js.map +0 -1
  609. package/dist/dropdown-menu-DEFygDZI.js.map +0 -1
  610. package/dist/dropdown-menu-ppWztidX.cjs.map +0 -1
  611. package/dist/markdown-renderer-Bi2fWeoF.js.map +0 -1
  612. package/dist/markdown-renderer-DwfNrhEH.cjs.map +0 -1
  613. package/dist/message-scroller-BmzjZZNs.cjs.map +0 -1
  614. package/dist/message-scroller-D5O7sUS5.js.map +0 -1
  615. package/dist/tabs-tab-BkUCE-4E.cjs.map +0 -1
  616. package/dist/tabs-tab-DDGltcUc.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"span-data-panel-view.es.js","sources":["../../../../src/domains/traces/components/span-data-panel-view.tsx"],"sourcesContent":["import type { SpanRecord } from '@mastra/core/storage';\nimport { format } from 'date-fns';\nimport { BracesIcon, FileInputIcon, FileOutputIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { formatSpanDuration, getTokenLimitMessage, isTokenLimitExceeded } from '../utils/span-utils';\nimport { SpanTokenUsage } from './span-token-usage';\nimport type { TokenUsage } from './span-token-usage';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport { Notice } from '@/ds/components/Notice';\nimport { Tab, TabContent, TabList, Tabs } from '@/ds/components/Tabs';\n\nfunction buildDialogTitle(sectionTitle: string, icon: ReactNode, span: { spanId: string; traceId: string }) {\n return (\n <>\n <span className=\"text-neutral2 flex items-center gap-1.5 tracking-widest uppercase [&>svg]:size-3.5\">\n {icon}\n {sectionTitle}\n </span>\n <span>\n › Span <b className=\"text-neutral3\">#{span.spanId}</b>\n </span>\n <span>\n › Trace <b className=\"text-neutral3\">#{span.traceId}</b>\n </span>\n </>\n );\n}\n\nexport interface SpanDataPanelViewProps {\n traceId: string;\n spanId: string;\n /** Full span record. Caller fetches via useSpanDetail. */\n span: SpanRecord | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onPrevious?: () => void;\n onNext?: () => void;\n activeTab?: string;\n onTabChange?: (tab: string) => void;\n /**\n * When provided, a \"Scoring\" tab appears; the slot receives the loaded span and renders\n * whatever scoring UI the consumer wants. When undefined, only the \"Details\" tab renders.\n */\n scoringTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n /** Optional count shown in the \"Scoring\" tab label (e.g. number of scores). */\n scoringTabBadge?: ReactNode;\n /**\n * When provided, a \"Feedback\" tab appears; the slot receives the loaded span and renders\n * whatever feedback UI the consumer wants.\n */\n feedbackTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n /** Optional count shown in the \"Feedback\" tab label. */\n feedbackTabBadge?: ReactNode;\n /**\n * Whether this span is the displayed root of the current view (trace root or\n * branch anchor). Controls visibility of trace-level metadata fields. Defaults\n * to `span.parentSpanId == null` (trace case) when omitted.\n */\n isAnchor?: boolean;\n}\n\nexport function SpanDataPanelView({\n traceId,\n spanId,\n span,\n isLoading,\n onClose,\n onPrevious,\n onNext,\n activeTab,\n onTabChange,\n scoringTabSlot,\n scoringTabBadge,\n feedbackTabSlot,\n feedbackTabBadge,\n isAnchor,\n}: SpanDataPanelViewProps) {\n return (\n <DataPanel>\n <DataPanel.Header>\n <DataPanel.Heading>\n Span <b># {spanId}</b>\n </DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Previous span\"\n nextLabel=\"Next span\"\n />\n <DataPanel.CloseButton onClick={onClose} />\n </ButtonsGroup>\n </DataPanel.Header>\n\n {isLoading ? (\n <DataPanel.LoadingData>Loading span details...</DataPanel.LoadingData>\n ) : !span ? (\n <DataPanel.NoData>Span not found.</DataPanel.NoData>\n ) : (\n <SpanDataPanelContent\n span={span}\n traceId={traceId}\n spanId={spanId}\n activeTab={activeTab}\n onTabChange={onTabChange}\n scoringTabSlot={scoringTabSlot}\n scoringTabBadge={scoringTabBadge}\n feedbackTabSlot={feedbackTabSlot}\n feedbackTabBadge={feedbackTabBadge}\n isAnchor={isAnchor}\n />\n )}\n </DataPanel>\n );\n}\n\nfunction SpanDataPanelContent({\n span,\n traceId,\n spanId,\n activeTab,\n onTabChange,\n scoringTabSlot,\n scoringTabBadge,\n feedbackTabSlot,\n feedbackTabBadge,\n isAnchor,\n}: {\n span: SpanRecord;\n traceId: string;\n spanId: string;\n activeTab?: string;\n onTabChange?: (tab: string) => void;\n scoringTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n scoringTabBadge?: ReactNode;\n feedbackTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n feedbackTabBadge?: ReactNode;\n isAnchor?: boolean;\n}) {\n const duration = formatSpanDuration(span.startedAt, span.endedAt);\n const usage = span.attributes?.usage as TokenUsage | undefined;\n\n const detailsBody = (\n <>\n {isTokenLimitExceeded(span) && (\n <div className=\"mb-3\">\n <Notice variant=\"warning\" title=\"Token Limit Exceeded\">\n <Notice.Message>{getTokenLimitMessage(span)}</Notice.Message>\n </Notice>\n </div>\n )}\n\n {usage && <SpanTokenUsage usage={usage} className=\"mb-3\" />}\n\n <DataKeysAndValues>\n {/* Anchor-only: rich trace-context fields. Live on the full SpanRecord, not on the\n * lightweight payload, so they only have values once the full span is loaded. */}\n {(isAnchor ?? span.parentSpanId == null) && (\n <>\n {span.traceId && (\n <>\n <DataKeysAndValues.Key>Trace Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy Trace Id to clipboard\" copyValue={span.traceId}>\n {span.traceId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.tags && span.tags.length > 0 && (\n <>\n <DataKeysAndValues.Key>Tags</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.tags.join(', ')}</DataKeysAndValues.Value>\n </>\n )}\n {span.runId && (\n <>\n <DataKeysAndValues.Key>Run Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy Run Id to clipboard\" copyValue={span.runId}>\n {span.runId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.threadId && (\n <>\n <DataKeysAndValues.Key>Thread Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy Thread Id to clipboard\" copyValue={span.threadId}>\n {span.threadId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.sessionId && (\n <>\n <DataKeysAndValues.Key>Session Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Session Id to clipboard\"\n copyValue={span.sessionId}\n >\n {span.sessionId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.requestId && (\n <>\n <DataKeysAndValues.Key>Request Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Request Id to clipboard\"\n copyValue={span.requestId}\n >\n {span.requestId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.resourceId && (\n <>\n <DataKeysAndValues.Key>Resource Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Resource Id to clipboard\"\n copyValue={span.resourceId}\n >\n {span.resourceId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.userId && (\n <>\n <DataKeysAndValues.Key>User Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy User Id to clipboard\" copyValue={span.userId}>\n {span.userId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.organizationId && (\n <>\n <DataKeysAndValues.Key>Organization Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Organization Id to clipboard\"\n copyValue={span.organizationId}\n >\n {span.organizationId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.experimentId && (\n <>\n <DataKeysAndValues.Key>Experiment Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Experiment Id to clipboard\"\n copyValue={span.experimentId}\n >\n {span.experimentId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n </>\n )}\n {span.name && (\n <>\n <DataKeysAndValues.Key>Name</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.name}</DataKeysAndValues.Value>\n </>\n )}\n {span.spanType && (\n <>\n <DataKeysAndValues.Key>Type</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.spanType}</DataKeysAndValues.Value>\n </>\n )}\n {span.startedAt && (\n <>\n <DataKeysAndValues.Key>Started</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {format(new Date(span.startedAt), 'MMM dd, HH:mm:ss.SSS')}\n </DataKeysAndValues.Value>\n </>\n )}\n {span.endedAt && (\n <>\n <DataKeysAndValues.Key>Ended</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{format(new Date(span.endedAt), 'MMM dd, HH:mm:ss.SSS')}</DataKeysAndValues.Value>\n </>\n )}\n {duration && (\n <>\n <DataKeysAndValues.Key>Duration</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{duration}</DataKeysAndValues.Value>\n </>\n )}\n </DataKeysAndValues>\n\n <div className=\"mt-3 grid gap-3\">\n <DataPanel.CodeSection\n title=\"Input\"\n dialogTitle={buildDialogTitle('Input', <FileInputIcon />, { spanId, traceId })}\n icon={<FileInputIcon />}\n codeStr={JSON.stringify(span.input ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Output\"\n dialogTitle={buildDialogTitle('Output', <FileOutputIcon />, { spanId, traceId })}\n icon={<FileOutputIcon />}\n codeStr={JSON.stringify(span.output ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Metadata\"\n dialogTitle={buildDialogTitle('Metadata', <BracesIcon />, { spanId, traceId })}\n icon={<BracesIcon />}\n codeStr={JSON.stringify(span.metadata ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Attributes\"\n dialogTitle={buildDialogTitle('Attributes', <BracesIcon />, { spanId, traceId })}\n icon={<BracesIcon />}\n codeStr={JSON.stringify(span.attributes ?? null, null, 2)}\n />\n </div>\n </>\n );\n\n // No extra tab slots → render details directly without the Tabs/TabList wrapper.\n if (!scoringTabSlot && !feedbackTabSlot) {\n return <DataPanel.Content>{detailsBody}</DataPanel.Content>;\n }\n\n return (\n <DataPanel.Content>\n <Tabs defaultTab=\"details\" value={activeTab} onValueChange={onTabChange}>\n <TabList>\n <Tab value=\"details\">Details</Tab>\n {scoringTabSlot && <Tab value=\"scoring\">Scoring {scoringTabBadge != null && <>({scoringTabBadge})</>}</Tab>}\n {feedbackTabSlot && (\n <Tab value=\"feedback\">Feedback {feedbackTabBadge != null && <>({feedbackTabBadge})</>}</Tab>\n )}\n </TabList>\n\n <TabContent value=\"details\">{detailsBody}</TabContent>\n {scoringTabSlot && <TabContent value=\"scoring\">{scoringTabSlot({ span, traceId, spanId })}</TabContent>}\n {feedbackTabSlot && <TabContent value=\"feedback\">{feedbackTabSlot({ span, traceId, spanId })}</TabContent>}\n </Tabs>\n </DataPanel.Content>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"span-data-panel-view.es.js","sources":["../../../../src/domains/traces/components/span-data-panel-view.tsx"],"sourcesContent":["import type { SpanRecord } from '@mastra/core/storage';\nimport { format } from 'date-fns';\nimport { BracesIcon, FileInputIcon, FileOutputIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { formatSpanDuration, getTokenLimitMessage, isTokenLimitExceeded } from '../utils/span-utils';\nimport { SpanTokenUsage } from './span-token-usage';\nimport type { TokenUsage } from './span-token-usage';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport { Notice } from '@/ds/components/Notice';\nimport { Tab, TabContent, TabList, Tabs } from '@/ds/components/Tabs';\n\nfunction buildDialogTitle(sectionTitle: string, icon: ReactNode, span: { spanId: string; traceId: string }) {\n return (\n <>\n <span className=\"text-neutral2 flex items-center gap-1.5 tracking-widest uppercase [&>svg]:size-3.5\">\n {icon}\n {sectionTitle}\n </span>\n <span>\n › Span <b className=\"text-neutral3\">#{span.spanId}</b>\n </span>\n <span>\n › Trace <b className=\"text-neutral3\">#{span.traceId}</b>\n </span>\n </>\n );\n}\n\nexport interface SpanDataPanelViewProps {\n traceId: string;\n spanId: string;\n /** Full span record. Caller fetches via useSpanDetail. */\n span: SpanRecord | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onPrevious?: () => void;\n onNext?: () => void;\n activeTab?: string;\n onTabChange?: (tab: string) => void;\n /**\n * When provided, a \"Scoring\" tab appears; the slot receives the loaded span and renders\n * whatever scoring UI the consumer wants. When undefined, only the \"Details\" tab renders.\n */\n scoringTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n /** Optional count shown in the \"Scoring\" tab label (e.g. number of scores). */\n scoringTabBadge?: ReactNode;\n /**\n * When provided, a \"Feedback\" tab appears; the slot receives the loaded span and renders\n * whatever feedback UI the consumer wants.\n */\n feedbackTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n /** Optional count shown in the \"Feedback\" tab label. */\n feedbackTabBadge?: ReactNode;\n /**\n * Whether this span is the displayed root of the current view (trace root or\n * branch anchor). Controls visibility of trace-level metadata fields. Defaults\n * to `span.parentSpanId == null` (trace case) when omitted.\n */\n isAnchor?: boolean;\n}\n\nexport function SpanDataPanelView({\n traceId,\n spanId,\n span,\n isLoading,\n onClose,\n onPrevious,\n onNext,\n activeTab,\n onTabChange,\n scoringTabSlot,\n scoringTabBadge,\n feedbackTabSlot,\n feedbackTabBadge,\n isAnchor,\n}: SpanDataPanelViewProps) {\n return (\n <DataPanel>\n <DataPanel.Header>\n <DataPanel.Heading>\n Span <b># {spanId}</b>\n </DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Previous span\"\n nextLabel=\"Next span\"\n />\n <DataPanel.CloseButton onClick={onClose} />\n </ButtonsGroup>\n </DataPanel.Header>\n\n {isLoading ? (\n <DataPanel.LoadingData>Loading span details...</DataPanel.LoadingData>\n ) : !span ? (\n <DataPanel.NoData>Span not found.</DataPanel.NoData>\n ) : (\n <SpanDataPanelContent\n span={span}\n traceId={traceId}\n spanId={spanId}\n activeTab={activeTab}\n onTabChange={onTabChange}\n scoringTabSlot={scoringTabSlot}\n scoringTabBadge={scoringTabBadge}\n feedbackTabSlot={feedbackTabSlot}\n feedbackTabBadge={feedbackTabBadge}\n isAnchor={isAnchor}\n />\n )}\n </DataPanel>\n );\n}\n\nfunction SpanDataPanelContent({\n span,\n traceId,\n spanId,\n activeTab,\n onTabChange,\n scoringTabSlot,\n scoringTabBadge,\n feedbackTabSlot,\n feedbackTabBadge,\n isAnchor,\n}: {\n span: SpanRecord;\n traceId: string;\n spanId: string;\n activeTab?: string;\n onTabChange?: (tab: string) => void;\n scoringTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n scoringTabBadge?: ReactNode;\n feedbackTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n feedbackTabBadge?: ReactNode;\n isAnchor?: boolean;\n}) {\n const duration = formatSpanDuration(span.startedAt, span.endedAt);\n const usage = span.attributes?.usage as TokenUsage | undefined;\n\n const detailsBody = (\n <>\n {isTokenLimitExceeded(span) && (\n <div className=\"mb-3\">\n <Notice variant=\"warning\" title=\"Token Limit Exceeded\">\n <Notice.Message>{getTokenLimitMessage(span)}</Notice.Message>\n </Notice>\n </div>\n )}\n\n {usage && <SpanTokenUsage usage={usage} className=\"mb-3\" />}\n\n <DataKeysAndValues>\n {/* Anchor-only: rich trace-context fields. Live on the full SpanRecord, not on the\n * lightweight payload, so they only have values once the full span is loaded. */}\n {(isAnchor ?? span.parentSpanId == null) && (\n <>\n {span.traceId && (\n <>\n <DataKeysAndValues.Key>Trace Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy Trace Id to clipboard\" copyValue={span.traceId}>\n {span.traceId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.tags && span.tags.length > 0 && (\n <>\n <DataKeysAndValues.Key>Tags</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.tags.join(', ')}</DataKeysAndValues.Value>\n </>\n )}\n {span.runId && (\n <>\n <DataKeysAndValues.Key>Run Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy Run Id to clipboard\" copyValue={span.runId}>\n {span.runId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.threadId && (\n <>\n <DataKeysAndValues.Key>Thread Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy Thread Id to clipboard\" copyValue={span.threadId}>\n {span.threadId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.sessionId && (\n <>\n <DataKeysAndValues.Key>Session Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Session Id to clipboard\"\n copyValue={span.sessionId}\n >\n {span.sessionId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.requestId && (\n <>\n <DataKeysAndValues.Key>Request Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Request Id to clipboard\"\n copyValue={span.requestId}\n >\n {span.requestId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.resourceId && (\n <>\n <DataKeysAndValues.Key>Resource Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Resource Id to clipboard\"\n copyValue={span.resourceId}\n >\n {span.resourceId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.userId && (\n <>\n <DataKeysAndValues.Key>User Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy User Id to clipboard\" copyValue={span.userId}>\n {span.userId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.organizationId && (\n <>\n <DataKeysAndValues.Key>Organization Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Organization Id to clipboard\"\n copyValue={span.organizationId}\n >\n {span.organizationId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.experimentId && (\n <>\n <DataKeysAndValues.Key>Experiment Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Experiment Id to clipboard\"\n copyValue={span.experimentId}\n >\n {span.experimentId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n </>\n )}\n {span.name && (\n <>\n <DataKeysAndValues.Key>Name</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.name}</DataKeysAndValues.Value>\n </>\n )}\n {span.spanType && (\n <>\n <DataKeysAndValues.Key>Type</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.spanType}</DataKeysAndValues.Value>\n </>\n )}\n {span.startedAt && (\n <>\n <DataKeysAndValues.Key>Started</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {format(new Date(span.startedAt), 'MMM dd, HH:mm:ss.SSS')}\n </DataKeysAndValues.Value>\n </>\n )}\n {span.endedAt && (\n <>\n <DataKeysAndValues.Key>Ended</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{format(new Date(span.endedAt), 'MMM dd, HH:mm:ss.SSS')}</DataKeysAndValues.Value>\n </>\n )}\n {duration && (\n <>\n <DataKeysAndValues.Key>Duration</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{duration}</DataKeysAndValues.Value>\n </>\n )}\n </DataKeysAndValues>\n\n <div className=\"mt-3 grid gap-3\">\n <DataPanel.CodeSection\n title=\"Input\"\n dialogTitle={buildDialogTitle('Input', <FileInputIcon />, { spanId, traceId })}\n icon={<FileInputIcon />}\n codeStr={JSON.stringify(span.input ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Output\"\n dialogTitle={buildDialogTitle('Output', <FileOutputIcon />, { spanId, traceId })}\n icon={<FileOutputIcon />}\n codeStr={JSON.stringify(span.output ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Metadata\"\n dialogTitle={buildDialogTitle('Metadata', <BracesIcon />, { spanId, traceId })}\n icon={<BracesIcon />}\n codeStr={JSON.stringify(span.metadata ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Attributes\"\n dialogTitle={buildDialogTitle('Attributes', <BracesIcon />, { spanId, traceId })}\n icon={<BracesIcon />}\n codeStr={JSON.stringify(span.attributes ?? null, null, 2)}\n />\n </div>\n </>\n );\n\n // No extra tab slots → render details directly without the Tabs/TabList wrapper.\n if (!scoringTabSlot && !feedbackTabSlot) {\n return <DataPanel.Content>{detailsBody}</DataPanel.Content>;\n }\n\n return (\n <DataPanel.Content>\n <Tabs defaultTab=\"details\" value={activeTab} onValueChange={onTabChange}>\n <TabList>\n <Tab value=\"details\">Details</Tab>\n {scoringTabSlot && <Tab value=\"scoring\">Scoring {scoringTabBadge != null && <>({scoringTabBadge})</>}</Tab>}\n {feedbackTabSlot && (\n <Tab value=\"feedback\">Feedback {feedbackTabBadge != null && <>({feedbackTabBadge})</>}</Tab>\n )}\n </TabList>\n\n <TabContent value=\"details\">{detailsBody}</TabContent>\n {scoringTabSlot && <TabContent value=\"scoring\">{scoringTabSlot({ span, traceId, spanId })}</TabContent>}\n {feedbackTabSlot && <TabContent value=\"feedback\">{feedbackTabSlot({ span, traceId, spanId })}</TabContent>}\n </Tabs>\n </DataPanel.Content>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -6,6 +6,9 @@ const jsxRuntime = require('react/jsx-runtime');
6
6
  const domains_traces_components_timelineStructureSign = require('./timeline-structure-sign.cjs.js');
7
7
  const utils_cn = require('../../../cn-vA5sWo9W.cjs');
8
8
 
9
+ const revealRow = (node) => {
10
+ node?.scrollIntoView({ block: "nearest" });
11
+ };
9
12
  function TimelineNameCol({
10
13
  span,
11
14
  spanUI,
@@ -18,14 +21,15 @@ function TimelineNameCol({
18
21
  isRootSpan,
19
22
  isExpanded: _isExpanded
20
23
  }) {
24
+ const isSelected = selectedSpanId === span.id;
21
25
  return /* @__PURE__ */ jsxRuntime.jsxs(
22
26
  "div",
23
27
  {
24
- "data-span-id": span.id,
28
+ ref: isSelected ? revealRow : void 0,
25
29
  "aria-label": `View details for span ${span.name}`,
26
30
  className: utils_cn.cn("flex min-h-8 items-center rounded-md rounded-l-lg opacity-80", {
27
31
  "opacity-30 [&:hover]:opacity-60": isFaded,
28
- "bg-surface4": selectedSpanId === span.id
32
+ "bg-surface4": isSelected
29
33
  }),
30
34
  style: { paddingLeft: `${depth * 1}rem` },
31
35
  children: [
@@ -1 +1 @@
1
- {"version":3,"file":"timeline-name-col.cjs.js","sources":["../../../../src/domains/traces/components/timeline-name-col.tsx"],"sourcesContent":["import type { UISpan, UISpanStyle } from '../types';\nimport { TimelineStructureSign } from './timeline-structure-sign';\nimport { cn } from '@/lib/utils';\n\ntype TimelineNameColProps = {\n span: UISpan;\n spanUI?: UISpanStyle | null;\n isFaded?: boolean;\n depth?: number;\n onSpanClick?: (id: string) => void;\n selectedSpanId?: string;\n isLastChild?: boolean;\n hasChildren?: boolean;\n isRootSpan?: boolean;\n isExpanded?: boolean;\n};\n\nexport function TimelineNameCol({\n span,\n spanUI,\n isFaded,\n depth = 0,\n onSpanClick,\n selectedSpanId,\n isLastChild,\n hasChildren: _hasChildren,\n isRootSpan,\n isExpanded: _isExpanded,\n}: TimelineNameColProps) {\n return (\n <div\n data-span-id={span.id}\n aria-label={`View details for span ${span.name}`}\n className={cn('flex min-h-8 items-center rounded-md rounded-l-lg opacity-80', {\n 'opacity-30 [&:hover]:opacity-60': isFaded,\n 'bg-surface4': selectedSpanId === span.id,\n })}\n style={{ paddingLeft: `${depth * 1}rem` }}\n >\n {!isRootSpan && <TimelineStructureSign isLastChild={isLastChild} />}\n\n <button\n onClick={() => onSpanClick?.(span.id)}\n className={cn(\n 'flex size-full min-w-0 items-center gap-1.5 rounded-md px-2 py-1 text-left text-ui-smd text-neutral6 transition-colors',\n '[&>svg]:ml-auto [&>svg]:size-[1em] [&>svg]:shrink-0 [&>svg]:opacity-0 [&>svg]:transition-all',\n 'hover:bg-surface4 [&:hover>svg]:opacity-60',\n 'focus:outline-none focus-visible:ring-1 focus-visible:ring-accent1 focus-visible:ring-inset',\n )}\n >\n {spanUI?.color && (\n <span\n aria-hidden\n title={spanUI.label}\n className=\"inline-block size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: spanUI.color }}\n />\n )}\n <span className=\"min-w-0 truncate\">{span.name}</span>\n </button>\n </div>\n );\n}\n"],"names":["jsxs","cn","jsx","TimelineStructureSign"],"mappings":";;;;;;;;AAiBO,SAAS,eAAA,CAAgB;AAAA,EAC9B,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA,GAAQ,CAAA;AAAA,EACR,WAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA,EAAa,YAAA;AAAA,EACb,UAAA;AAAA,EACA,UAAA,EAAY;AACd,CAAA,EAAyB;AACvB,EAAA,uBACEA,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,gBAAc,IAAA,CAAK,EAAA;AAAA,MACnB,YAAA,EAAY,CAAA,sBAAA,EAAyB,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,MAC9C,SAAA,EAAWC,YAAG,8DAAA,EAAgE;AAAA,QAC5E,iCAAA,EAAmC,OAAA;AAAA,QACnC,aAAA,EAAe,mBAAmB,IAAA,CAAK;AAAA,OACxC,CAAA;AAAA,MACD,OAAO,EAAE,WAAA,EAAa,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAA,GAAA,CAAA,EAAM;AAAA,MAEvC,QAAA,EAAA;AAAA,QAAA,CAAC,UAAA,oBAAcC,cAAA,CAACC,qEAAA,EAAA,EAAsB,WAAA,EAA0B,CAAA;AAAA,wBAEjEH,eAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,WAAA,GAAc,IAAA,CAAK,EAAE,CAAA;AAAA,YACpC,SAAA,EAAWC,WAAA;AAAA,cACT,wHAAA;AAAA,cACA,8FAAA;AAAA,cACA,4CAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,MAAA,EAAQ,KAAA,oBACPC,cAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,aAAA,EAAW,IAAA;AAAA,kBACX,OAAO,MAAA,CAAO,KAAA;AAAA,kBACd,SAAA,EAAU,2CAAA;AAAA,kBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,MAAA,CAAO,KAAA;AAAM;AAAA,eACzC;AAAA,8BAEFA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,eAAK,IAAA,EAAK;AAAA;AAAA;AAAA;AAChD;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"timeline-name-col.cjs.js","sources":["../../../../src/domains/traces/components/timeline-name-col.tsx"],"sourcesContent":["import type { UISpan, UISpanStyle } from '../types';\nimport { TimelineStructureSign } from './timeline-structure-sign';\nimport { cn } from '@/lib/utils';\n\ntype TimelineNameColProps = {\n span: UISpan;\n spanUI?: UISpanStyle | null;\n isFaded?: boolean;\n depth?: number;\n onSpanClick?: (id: string) => void;\n selectedSpanId?: string;\n isLastChild?: boolean;\n hasChildren?: boolean;\n isRootSpan?: boolean;\n isExpanded?: boolean;\n};\n\n// Nested rows mount late, once expansion opens their ancestors.\nconst revealRow = (node: HTMLDivElement | null) => {\n node?.scrollIntoView({ block: 'nearest' });\n};\n\nexport function TimelineNameCol({\n span,\n spanUI,\n isFaded,\n depth = 0,\n onSpanClick,\n selectedSpanId,\n isLastChild,\n hasChildren: _hasChildren,\n isRootSpan,\n isExpanded: _isExpanded,\n}: TimelineNameColProps) {\n const isSelected = selectedSpanId === span.id;\n\n return (\n <div\n ref={isSelected ? revealRow : undefined}\n aria-label={`View details for span ${span.name}`}\n className={cn('flex min-h-8 items-center rounded-md rounded-l-lg opacity-80', {\n 'opacity-30 [&:hover]:opacity-60': isFaded,\n 'bg-surface4': isSelected,\n })}\n style={{ paddingLeft: `${depth * 1}rem` }}\n >\n {!isRootSpan && <TimelineStructureSign isLastChild={isLastChild} />}\n\n <button\n onClick={() => onSpanClick?.(span.id)}\n className={cn(\n 'flex size-full min-w-0 items-center gap-1.5 rounded-md px-2 py-1 text-left text-ui-smd text-neutral6 transition-colors',\n '[&>svg]:ml-auto [&>svg]:size-[1em] [&>svg]:shrink-0 [&>svg]:opacity-0 [&>svg]:transition-all',\n 'hover:bg-surface4 [&:hover>svg]:opacity-60',\n 'focus:outline-none focus-visible:ring-1 focus-visible:ring-accent1 focus-visible:ring-inset',\n )}\n >\n {spanUI?.color && (\n <span\n aria-hidden\n title={spanUI.label}\n className=\"inline-block size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: spanUI.color }}\n />\n )}\n <span className=\"min-w-0 truncate\">{span.name}</span>\n </button>\n </div>\n );\n}\n"],"names":["jsxs","cn","jsx","TimelineStructureSign"],"mappings":";;;;;;;;AAkBA,MAAM,SAAA,GAAY,CAAC,IAAA,KAAgC;AACjD,EAAA,IAAA,EAAM,cAAA,CAAe,EAAE,KAAA,EAAO,SAAA,EAAW,CAAA;AAC3C,CAAA;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA,GAAQ,CAAA;AAAA,EACR,WAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA,EAAa,YAAA;AAAA,EACb,UAAA;AAAA,EACA,UAAA,EAAY;AACd,CAAA,EAAyB;AACvB,EAAA,MAAM,UAAA,GAAa,mBAAmB,IAAA,CAAK,EAAA;AAE3C,EAAA,uBACEA,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,aAAa,SAAA,GAAY,MAAA;AAAA,MAC9B,YAAA,EAAY,CAAA,sBAAA,EAAyB,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,MAC9C,SAAA,EAAWC,YAAG,8DAAA,EAAgE;AAAA,QAC5E,iCAAA,EAAmC,OAAA;AAAA,QACnC,aAAA,EAAe;AAAA,OAChB,CAAA;AAAA,MACD,OAAO,EAAE,WAAA,EAAa,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAA,GAAA,CAAA,EAAM;AAAA,MAEvC,QAAA,EAAA;AAAA,QAAA,CAAC,UAAA,oBAAcC,cAAA,CAACC,qEAAA,EAAA,EAAsB,WAAA,EAA0B,CAAA;AAAA,wBAEjEH,eAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,WAAA,GAAc,IAAA,CAAK,EAAE,CAAA;AAAA,YACpC,SAAA,EAAWC,WAAA;AAAA,cACT,wHAAA;AAAA,cACA,8FAAA;AAAA,cACA,4CAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,MAAA,EAAQ,KAAA,oBACPC,cAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,aAAA,EAAW,IAAA;AAAA,kBACX,OAAO,MAAA,CAAO,KAAA;AAAA,kBACd,SAAA,EAAU,2CAAA;AAAA,kBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,MAAA,CAAO,KAAA;AAAM;AAAA,eACzC;AAAA,8BAEFA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,eAAK,IAAA,EAAK;AAAA;AAAA;AAAA;AAChD;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -2,6 +2,9 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { TimelineStructureSign } from './timeline-structure-sign.es.js';
3
3
  import { c as cn } from '../../../cn-BakJzhuv.js';
4
4
 
5
+ const revealRow = (node) => {
6
+ node?.scrollIntoView({ block: "nearest" });
7
+ };
5
8
  function TimelineNameCol({
6
9
  span,
7
10
  spanUI,
@@ -14,14 +17,15 @@ function TimelineNameCol({
14
17
  isRootSpan,
15
18
  isExpanded: _isExpanded
16
19
  }) {
20
+ const isSelected = selectedSpanId === span.id;
17
21
  return /* @__PURE__ */ jsxs(
18
22
  "div",
19
23
  {
20
- "data-span-id": span.id,
24
+ ref: isSelected ? revealRow : void 0,
21
25
  "aria-label": `View details for span ${span.name}`,
22
26
  className: cn("flex min-h-8 items-center rounded-md rounded-l-lg opacity-80", {
23
27
  "opacity-30 [&:hover]:opacity-60": isFaded,
24
- "bg-surface4": selectedSpanId === span.id
28
+ "bg-surface4": isSelected
25
29
  }),
26
30
  style: { paddingLeft: `${depth * 1}rem` },
27
31
  children: [
@@ -1 +1 @@
1
- {"version":3,"file":"timeline-name-col.es.js","sources":["../../../../src/domains/traces/components/timeline-name-col.tsx"],"sourcesContent":["import type { UISpan, UISpanStyle } from '../types';\nimport { TimelineStructureSign } from './timeline-structure-sign';\nimport { cn } from '@/lib/utils';\n\ntype TimelineNameColProps = {\n span: UISpan;\n spanUI?: UISpanStyle | null;\n isFaded?: boolean;\n depth?: number;\n onSpanClick?: (id: string) => void;\n selectedSpanId?: string;\n isLastChild?: boolean;\n hasChildren?: boolean;\n isRootSpan?: boolean;\n isExpanded?: boolean;\n};\n\nexport function TimelineNameCol({\n span,\n spanUI,\n isFaded,\n depth = 0,\n onSpanClick,\n selectedSpanId,\n isLastChild,\n hasChildren: _hasChildren,\n isRootSpan,\n isExpanded: _isExpanded,\n}: TimelineNameColProps) {\n return (\n <div\n data-span-id={span.id}\n aria-label={`View details for span ${span.name}`}\n className={cn('flex min-h-8 items-center rounded-md rounded-l-lg opacity-80', {\n 'opacity-30 [&:hover]:opacity-60': isFaded,\n 'bg-surface4': selectedSpanId === span.id,\n })}\n style={{ paddingLeft: `${depth * 1}rem` }}\n >\n {!isRootSpan && <TimelineStructureSign isLastChild={isLastChild} />}\n\n <button\n onClick={() => onSpanClick?.(span.id)}\n className={cn(\n 'flex size-full min-w-0 items-center gap-1.5 rounded-md px-2 py-1 text-left text-ui-smd text-neutral6 transition-colors',\n '[&>svg]:ml-auto [&>svg]:size-[1em] [&>svg]:shrink-0 [&>svg]:opacity-0 [&>svg]:transition-all',\n 'hover:bg-surface4 [&:hover>svg]:opacity-60',\n 'focus:outline-none focus-visible:ring-1 focus-visible:ring-accent1 focus-visible:ring-inset',\n )}\n >\n {spanUI?.color && (\n <span\n aria-hidden\n title={spanUI.label}\n className=\"inline-block size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: spanUI.color }}\n />\n )}\n <span className=\"min-w-0 truncate\">{span.name}</span>\n </button>\n </div>\n );\n}\n"],"names":[],"mappings":";;;;AAiBO,SAAS,eAAA,CAAgB;AAAA,EAC9B,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA,GAAQ,CAAA;AAAA,EACR,WAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA,EAAa,YAAA;AAAA,EACb,UAAA;AAAA,EACA,UAAA,EAAY;AACd,CAAA,EAAyB;AACvB,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,gBAAc,IAAA,CAAK,EAAA;AAAA,MACnB,YAAA,EAAY,CAAA,sBAAA,EAAyB,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,MAC9C,SAAA,EAAW,GAAG,8DAAA,EAAgE;AAAA,QAC5E,iCAAA,EAAmC,OAAA;AAAA,QACnC,aAAA,EAAe,mBAAmB,IAAA,CAAK;AAAA,OACxC,CAAA;AAAA,MACD,OAAO,EAAE,WAAA,EAAa,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAA,GAAA,CAAA,EAAM;AAAA,MAEvC,QAAA,EAAA;AAAA,QAAA,CAAC,UAAA,oBAAc,GAAA,CAAC,qBAAA,EAAA,EAAsB,WAAA,EAA0B,CAAA;AAAA,wBAEjE,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,WAAA,GAAc,IAAA,CAAK,EAAE,CAAA;AAAA,YACpC,SAAA,EAAW,EAAA;AAAA,cACT,wHAAA;AAAA,cACA,8FAAA;AAAA,cACA,4CAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,MAAA,EAAQ,KAAA,oBACP,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,aAAA,EAAW,IAAA;AAAA,kBACX,OAAO,MAAA,CAAO,KAAA;AAAA,kBACd,SAAA,EAAU,2CAAA;AAAA,kBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,MAAA,CAAO,KAAA;AAAM;AAAA,eACzC;AAAA,8BAEF,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,eAAK,IAAA,EAAK;AAAA;AAAA;AAAA;AAChD;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"timeline-name-col.es.js","sources":["../../../../src/domains/traces/components/timeline-name-col.tsx"],"sourcesContent":["import type { UISpan, UISpanStyle } from '../types';\nimport { TimelineStructureSign } from './timeline-structure-sign';\nimport { cn } from '@/lib/utils';\n\ntype TimelineNameColProps = {\n span: UISpan;\n spanUI?: UISpanStyle | null;\n isFaded?: boolean;\n depth?: number;\n onSpanClick?: (id: string) => void;\n selectedSpanId?: string;\n isLastChild?: boolean;\n hasChildren?: boolean;\n isRootSpan?: boolean;\n isExpanded?: boolean;\n};\n\n// Nested rows mount late, once expansion opens their ancestors.\nconst revealRow = (node: HTMLDivElement | null) => {\n node?.scrollIntoView({ block: 'nearest' });\n};\n\nexport function TimelineNameCol({\n span,\n spanUI,\n isFaded,\n depth = 0,\n onSpanClick,\n selectedSpanId,\n isLastChild,\n hasChildren: _hasChildren,\n isRootSpan,\n isExpanded: _isExpanded,\n}: TimelineNameColProps) {\n const isSelected = selectedSpanId === span.id;\n\n return (\n <div\n ref={isSelected ? revealRow : undefined}\n aria-label={`View details for span ${span.name}`}\n className={cn('flex min-h-8 items-center rounded-md rounded-l-lg opacity-80', {\n 'opacity-30 [&:hover]:opacity-60': isFaded,\n 'bg-surface4': isSelected,\n })}\n style={{ paddingLeft: `${depth * 1}rem` }}\n >\n {!isRootSpan && <TimelineStructureSign isLastChild={isLastChild} />}\n\n <button\n onClick={() => onSpanClick?.(span.id)}\n className={cn(\n 'flex size-full min-w-0 items-center gap-1.5 rounded-md px-2 py-1 text-left text-ui-smd text-neutral6 transition-colors',\n '[&>svg]:ml-auto [&>svg]:size-[1em] [&>svg]:shrink-0 [&>svg]:opacity-0 [&>svg]:transition-all',\n 'hover:bg-surface4 [&:hover>svg]:opacity-60',\n 'focus:outline-none focus-visible:ring-1 focus-visible:ring-accent1 focus-visible:ring-inset',\n )}\n >\n {spanUI?.color && (\n <span\n aria-hidden\n title={spanUI.label}\n className=\"inline-block size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: spanUI.color }}\n />\n )}\n <span className=\"min-w-0 truncate\">{span.name}</span>\n </button>\n </div>\n );\n}\n"],"names":[],"mappings":";;;;AAkBA,MAAM,SAAA,GAAY,CAAC,IAAA,KAAgC;AACjD,EAAA,IAAA,EAAM,cAAA,CAAe,EAAE,KAAA,EAAO,SAAA,EAAW,CAAA;AAC3C,CAAA;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA,GAAQ,CAAA;AAAA,EACR,WAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA,EAAa,YAAA;AAAA,EACb,UAAA;AAAA,EACA,UAAA,EAAY;AACd,CAAA,EAAyB;AACvB,EAAA,MAAM,UAAA,GAAa,mBAAmB,IAAA,CAAK,EAAA;AAE3C,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,aAAa,SAAA,GAAY,MAAA;AAAA,MAC9B,YAAA,EAAY,CAAA,sBAAA,EAAyB,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,MAC9C,SAAA,EAAW,GAAG,8DAAA,EAAgE;AAAA,QAC5E,iCAAA,EAAmC,OAAA;AAAA,QACnC,aAAA,EAAe;AAAA,OAChB,CAAA;AAAA,MACD,OAAO,EAAE,WAAA,EAAa,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAA,GAAA,CAAA,EAAM;AAAA,MAEvC,QAAA,EAAA;AAAA,QAAA,CAAC,UAAA,oBAAc,GAAA,CAAC,qBAAA,EAAA,EAAsB,WAAA,EAA0B,CAAA;AAAA,wBAEjE,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,WAAA,GAAc,IAAA,CAAK,EAAE,CAAA;AAAA,YACpC,SAAA,EAAW,EAAA;AAAA,cACT,wHAAA;AAAA,cACA,8FAAA;AAAA,cACA,4CAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,MAAA,EAAQ,KAAA,oBACP,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,aAAA,EAAW,IAAA;AAAA,kBACX,OAAO,MAAA,CAAO,KAAA;AAAA,kBACd,SAAA,EAAU,2CAAA;AAAA,kBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,MAAA,CAAO,KAAA;AAAM;AAAA,eACzC;AAAA,8BAEF,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,eAAK,IAAA,EAAK;AAAA;AAAA;AAAA;AAChD;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -5,7 +5,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
  const jsxRuntime = require('react/jsx-runtime');
6
6
  const format = require('date-fns/format');
7
7
  const dataKeysAndValues = require('../../../data-keys-and-values-sjag88jf.cjs');
8
- const hoverCard = require('../../../hover-card-Bx258om1.cjs');
8
+ const hoverCard = require('../../../hover-card-Cd9QK50X.cjs');
9
9
  const utils_cn = require('../../../cn-vA5sWo9W.cjs');
10
10
 
11
11
  function TimelineTimingCol({
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { format } from 'date-fns/format';
3
3
  import { D as DataKeysAndValues } from '../../../data-keys-and-values-BJynhd6V.js';
4
- import { H as HoverCard, b as HoverCardTrigger, a as HoverCardContent } from '../../../hover-card-crVofiZO.js';
4
+ import { H as HoverCard, b as HoverCardTrigger, a as HoverCardContent } from '../../../hover-card-Bs845QbV.js';
5
5
  import { c as cn } from '../../../cn-BakJzhuv.js';
6
6
 
7
7
  function TimelineTimingCol({
@@ -6,9 +6,9 @@ const jsxRuntime = require('react/jsx-runtime');
6
6
  const lucideReact = require('lucide-react');
7
7
  const React = require('react');
8
8
  const domains_traces_traceListColumns = require('../trace-list-columns.cjs.js');
9
- const Button = require('../../../Button-Bm94fEF2.cjs');
10
- const dialog = require('../../../dialog-ClItuCFY.cjs');
11
- const dropdownMenu = require('../../../dropdown-menu-ppWztidX.cjs');
9
+ const Button = require('../../../Button-B4Ixj2aW.cjs');
10
+ const dialog = require('../../../dialog-5ZYCeKf-.cjs');
11
+ const dropdownMenu = require('../../../dropdown-menu-BZGlERgf.cjs');
12
12
  const input = require('../../../input-0R-fQTCF.cjs');
13
13
  const label = require('../../../label-B-UbxfJf.cjs');
14
14
 
@@ -2,9 +2,9 @@ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { Columns3Icon, PlusIcon } from 'lucide-react';
3
3
  import { useState } from 'react';
4
4
  import { TRACE_USAGE_COLUMNS } from '../trace-list-columns.es.js';
5
- import { B as Button } from '../../../Button-Bx2lFdqb.js';
6
- import { D as Dialog, c as DialogContent, f as DialogHeader, i as DialogTitle, d as DialogDescription, a as DialogBody, e as DialogFooter } from '../../../dialog-bnt6epW2.js';
7
- import { D as DropdownMenu } from '../../../dropdown-menu-DEFygDZI.js';
5
+ import { B as Button } from '../../../Button-C-9Pzy-Z.js';
6
+ import { D as Dialog, c as DialogContent, f as DialogHeader, i as DialogTitle, d as DialogDescription, a as DialogBody, e as DialogFooter } from '../../../dialog-DDXW5M21.js';
7
+ import { D as DropdownMenu } from '../../../dropdown-menu-DCMh8P4w.js';
8
8
  import { I as Input } from '../../../input-DVZ0-3KP.js';
9
9
  import { L as Label } from '../../../label-WtU3xT6v.js';
10
10
 
@@ -10,10 +10,10 @@ const domains_traces_hooks_useDownloadTraceJson = require('../hooks/use-download
10
10
  const domains_traces_components_formatHierarchicalSpans = require('./format-hierarchical-spans.cjs.js');
11
11
  const domains_traces_components_traceKeysAndValues = require('./trace-keys-and-values.cjs.js');
12
12
  const domains_traces_components_traceTimeline = require('./trace-timeline.cjs.js');
13
- const Button = require('../../../Button-Bm94fEF2.cjs');
13
+ const Button = require('../../../Button-B4Ixj2aW.cjs');
14
14
  const buttonsGroup = require('../../../buttons-group-Dw8Wu4sj.cjs');
15
- const dataPanel = require('../../../data-panel-BumsjXVz.cjs');
16
- const Notice = require('../../../Notice-B9cdEg8R.cjs');
15
+ const dataPanel = require('../../../data-panel-C85h9XvH.cjs');
16
+ const Notice = require('../../../Notice-DSfh1Ap5.cjs');
17
17
  const icons_Icon = require('../../../icons/Icon.cjs.js');
18
18
  const utils_truncateString = require('../../../utils/truncate-string.cjs.js');
19
19
 
@@ -43,7 +43,6 @@ function TraceDataPanelView({
43
43
  const collapsed = controlledCollapsed ?? internalCollapsed;
44
44
  const setCollapsed = onCollapsedChange ?? setInternalCollapsed;
45
45
  const { download: downloadTraceJson, isPending: isDownloadingTrace } = domains_traces_hooks_useDownloadTraceJson.useDownloadTraceJson();
46
- const contentRef = React.useRef(null);
47
46
  const [selectedSpanId, setSelectedSpanId] = React.useState(initialSpanId ?? void 0);
48
47
  React.useEffect(() => {
49
48
  if (!initialSpanId) {
@@ -61,11 +60,6 @@ function TraceDataPanelView({
61
60
  onSpanSelect?.(void 0);
62
61
  }
63
62
  }, [initialSpanId, spans, isLoading]);
64
- React.useEffect(() => {
65
- if (isLoading || !selectedSpanId || !contentRef.current) return;
66
- const el = contentRef.current.querySelector(`[data-span-id="${selectedSpanId}"]`);
67
- el?.scrollIntoView({ block: "nearest" });
68
- }, [selectedSpanId, isLoading]);
69
63
  const hierarchicalSpans = React.useMemo(() => domains_traces_components_formatHierarchicalSpans.formatHierarchicalSpans(spans ?? [], anchorSpanId), [spans, anchorSpanId]);
70
64
  const [expandedSpanIds, setExpandedSpanIds] = React.useState([]);
71
65
  React.useEffect(() => {
@@ -140,7 +134,7 @@ function TraceDataPanelView({
140
134
  /* @__PURE__ */ jsxRuntime.jsx(dataPanel.DataPanel.CloseButton, { onClick: onClose })
141
135
  ] })
142
136
  ] }) }),
143
- !collapsed && (isLoading ? /* @__PURE__ */ jsxRuntime.jsx(dataPanel.DataPanel.LoadingData, { children: "Loading trace..." }) : hierarchicalSpans.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(dataPanel.DataPanel.NoData, { children: "No spans found for this trace." }) : /* @__PURE__ */ jsxRuntime.jsxs(dataPanel.DataPanel.Content, { ref: contentRef, children: [
137
+ !collapsed && (isLoading ? /* @__PURE__ */ jsxRuntime.jsx(dataPanel.DataPanel.LoadingData, { children: "Loading trace..." }) : hierarchicalSpans.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(dataPanel.DataPanel.NoData, { children: "No spans found for this trace." }) : /* @__PURE__ */ jsxRuntime.jsxs(dataPanel.DataPanel.Content, { children: [
144
138
  !isOnTracePage && rootSpan && /* @__PURE__ */ jsxRuntime.jsx(domains_traces_components_traceKeysAndValues.TraceKeysAndValues, { rootSpan, className: "mb-6" }),
145
139
  !isOnTracePage && (onEvaluateTrace || onSaveAsDatasetItem || onAddTraceMocksToItem) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-6 flex flex-wrap items-center justify-between gap-4", children: [
146
140
  onEvaluateTrace && /* @__PURE__ */ jsxRuntime.jsxs(Button.Button, { size: "sm", onClick: onEvaluateTrace, children: [
@@ -1 +1 @@
1
- {"version":3,"file":"trace-data-panel-view.cjs.js","sources":["../../../../src/domains/traces/components/trace-data-panel-view.tsx"],"sourcesContent":["import type { LightSpanRecord } from '@mastra/core/storage';\nimport {\n CircleGaugeIcon,\n ChevronsDownUpIcon,\n ChevronsUpDownIcon,\n DownloadIcon,\n Link2Icon,\n Loader2Icon,\n SaveIcon,\n WrenchIcon,\n} from 'lucide-react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { getAllSpanIds } from '../hooks/get-all-span-ids';\nimport { useDownloadTraceJson } from '../hooks/use-download-trace-json';\nimport { formatHierarchicalSpans } from './format-hierarchical-spans';\nimport { TraceKeysAndValues } from './trace-keys-and-values';\nimport { TraceTimeline } from './trace-timeline';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport { Notice } from '@/ds/components/Notice';\nimport { Icon } from '@/ds/icons/Icon';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { truncateString } from '@/lib/truncate-string';\n\nexport type TraceDataPanelPlacement = 'traces-list' | 'trace-page';\n\nexport interface TraceDataPanelViewProps {\n traceId: string;\n /** Lightweight spans for the trace. Caller fetches via useTraceLightSpans. */\n spans: LightSpanRecord[] | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onSpanSelect?: (spanId: string | undefined) => void;\n onEvaluateTrace?: () => void;\n /** When set, a \"Save as Dataset Item\" 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 collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n placement: TraceDataPanelPlacement;\n timelineChartWidth?: 'wide' | 'default';\n /** When both are provided, renders an \"Open trace page\" button. */\n LinkComponent?: LinkComponent;\n traceHref?: string;\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\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 collapsed: controlledCollapsed,\n onCollapsedChange,\n placement,\n timelineChartWidth = 'default',\n LinkComponent,\n traceHref,\n anchorSpanId,\n showUnavailableFeaturesMsg = true,\n}: TraceDataPanelViewProps) {\n const isOnTracePage = placement === 'trace-page';\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const setCollapsed = onCollapsedChange ?? setInternalCollapsed;\n\n const { download: downloadTraceJson, isPending: isDownloadingTrace } = useDownloadTraceJson();\n\n const contentRef = useRef<HTMLDivElement>(null);\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 // Scroll the selected span into view within the timeline, which only exists\n // once the trace has loaded.\n useEffect(() => {\n if (isLoading || !selectedSpanId || !contentRef.current) return;\n const el = contentRef.current.querySelector(`[data-span-id=\"${selectedSpanId}\"]`);\n el?.scrollIntoView({ block: 'nearest' });\n }, [selectedSpanId, isLoading]);\n\n const hierarchicalSpans = useMemo(() => formatHierarchicalSpans(spans ?? [], anchorSpanId), [spans, anchorSpanId]);\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\n const handleSpanClick = (id: string) => {\n const newId = selectedSpanId === id ? undefined : id;\n setSelectedSpanId(newId);\n onSpanSelect?.(newId);\n };\n\n const showOpenTracePageLink = !isOnTracePage && LinkComponent && traceHref;\n\n // Shared across both header layouts (list side panel and full trace page) so a trace can be\n // downloaded from wherever it's being inspected.\n const downloadTraceButton = (\n <Button\n size=\"md\"\n tooltip=\"Download trace JSON\"\n aria-label=\"Download trace JSON\"\n disabled={isDownloadingTrace}\n onClick={() => downloadTraceJson(traceId)}\n >\n {isDownloadingTrace ? <Loader2Icon className=\"animate-spin\" /> : <DownloadIcon />}\n </Button>\n );\n\n return (\n <DataPanel collapsed={collapsed}>\n <DataPanel.Header>\n {isOnTracePage ? (\n <>\n <DataPanel.Heading>Trace Timeline</DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">{downloadTraceButton}</ButtonsGroup>\n </>\n ) : (\n <>\n <DataPanel.Heading>\n Trace <b># {truncateString(traceId, 12)}</b>\n </DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">\n {onCollapsedChange && (\n <Button\n size=\"md\"\n tooltip={collapsed ? 'Expand panel' : 'Collapse panel'}\n onClick={() => setCollapsed(!collapsed)}\n >\n {collapsed ? <ChevronsUpDownIcon /> : <ChevronsDownUpIcon />}\n </Button>\n )}\n {(onPrevious || onNext) && (\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Previous trace\"\n nextLabel=\"Next trace\"\n />\n )}\n {showOpenTracePageLink && (\n <Button\n as={LinkComponent}\n href={traceHref}\n size=\"md\"\n tooltip=\"Open trace page\"\n aria-label=\"Open trace page\"\n >\n <Link2Icon />\n </Button>\n )}\n {downloadTraceButton}\n <DataPanel.CloseButton onClick={onClose} />\n </ButtonsGroup>\n </>\n )}\n </DataPanel.Header>\n\n {!collapsed &&\n (isLoading ? (\n <DataPanel.LoadingData>Loading trace...</DataPanel.LoadingData>\n ) : hierarchicalSpans.length === 0 ? (\n <DataPanel.NoData>No spans found for this trace.</DataPanel.NoData>\n ) : (\n <DataPanel.Content ref={contentRef}>\n {!isOnTracePage && rootSpan && <TraceKeysAndValues rootSpan={rootSpan} className=\"mb-6\" />}\n\n {!isOnTracePage && (onEvaluateTrace || onSaveAsDatasetItem || onAddTraceMocksToItem) && (\n <div className=\"mb-6 flex flex-wrap items-center justify-between gap-4\">\n {onEvaluateTrace && (\n <Button size=\"sm\" onClick={onEvaluateTrace}>\n <Icon>\n <CircleGaugeIcon />\n </Icon>\n Evaluate Trace\n </Button>\n )}\n {onSaveAsDatasetItem && (\n <Button size=\"sm\" onClick={() => onSaveAsDatasetItem({ traceId, rootSpanId: rootSpan?.spanId })}>\n <Icon>\n <SaveIcon />\n </Icon>\n Save as Dataset Item\n </Button>\n )}\n {onAddTraceMocksToItem && (\n <Button size=\"sm\" onClick={() => onAddTraceMocksToItem({ traceId })}>\n <Icon>\n <WrenchIcon />\n </Icon>\n Add tool mocks to item\n </Button>\n )}\n </div>\n )}\n\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 <TraceTimeline\n hierarchicalSpans={hierarchicalSpans}\n onSpanClick={handleSpanClick}\n selectedSpanId={selectedSpanId}\n expandedSpanIds={expandedSpanIds}\n setExpandedSpanIds={setExpandedSpanIds}\n chartWidth={timelineChartWidth}\n />\n </DataPanel.Content>\n ))}\n </DataPanel>\n );\n}\n"],"names":["useState","useDownloadTraceJson","useRef","useEffect","useMemo","formatHierarchicalSpans","getAllSpanIds","jsx","Button","Loader2Icon","DownloadIcon","jsxs","DataPanel","Fragment","ButtonsGroup","truncateString","ChevronsUpDownIcon","ChevronsDownUpIcon","Link2Icon","TraceKeysAndValues","Icon","CircleGaugeIcon","SaveIcon","WrenchIcon","Notice","TraceTimeline"],"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 type { LightSpanRecord } from '@mastra/core/storage';\nimport {\n CircleGaugeIcon,\n ChevronsDownUpIcon,\n ChevronsUpDownIcon,\n DownloadIcon,\n Link2Icon,\n Loader2Icon,\n SaveIcon,\n WrenchIcon,\n} from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { getAllSpanIds } from '../hooks/get-all-span-ids';\nimport { useDownloadTraceJson } from '../hooks/use-download-trace-json';\nimport { formatHierarchicalSpans } from './format-hierarchical-spans';\nimport { TraceKeysAndValues } from './trace-keys-and-values';\nimport { TraceTimeline } from './trace-timeline';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport { Notice } from '@/ds/components/Notice';\nimport { Icon } from '@/ds/icons/Icon';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { truncateString } from '@/lib/truncate-string';\n\nexport type TraceDataPanelPlacement = 'traces-list' | 'trace-page';\n\nexport interface TraceDataPanelViewProps {\n traceId: string;\n /** Lightweight spans for the trace. Caller fetches via useTraceLightSpans. */\n spans: LightSpanRecord[] | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onSpanSelect?: (spanId: string | undefined) => void;\n onEvaluateTrace?: () => void;\n /** When set, a \"Save as Dataset Item\" 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 collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n placement: TraceDataPanelPlacement;\n timelineChartWidth?: 'wide' | 'default';\n /** When both are provided, renders an \"Open trace page\" button. */\n LinkComponent?: LinkComponent;\n traceHref?: string;\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\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 collapsed: controlledCollapsed,\n onCollapsedChange,\n placement,\n timelineChartWidth = 'default',\n LinkComponent,\n traceHref,\n anchorSpanId,\n showUnavailableFeaturesMsg = true,\n}: TraceDataPanelViewProps) {\n const isOnTracePage = placement === 'trace-page';\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const setCollapsed = onCollapsedChange ?? setInternalCollapsed;\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 hierarchicalSpans = useMemo(() => formatHierarchicalSpans(spans ?? [], anchorSpanId), [spans, anchorSpanId]);\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\n const handleSpanClick = (id: string) => {\n const newId = selectedSpanId === id ? undefined : id;\n setSelectedSpanId(newId);\n onSpanSelect?.(newId);\n };\n\n const showOpenTracePageLink = !isOnTracePage && LinkComponent && traceHref;\n\n // Shared across both header layouts (list side panel and full trace page) so a trace can be\n // downloaded from wherever it's being inspected.\n const downloadTraceButton = (\n <Button\n size=\"md\"\n tooltip=\"Download trace JSON\"\n aria-label=\"Download trace JSON\"\n disabled={isDownloadingTrace}\n onClick={() => downloadTraceJson(traceId)}\n >\n {isDownloadingTrace ? <Loader2Icon className=\"animate-spin\" /> : <DownloadIcon />}\n </Button>\n );\n\n return (\n <DataPanel collapsed={collapsed}>\n <DataPanel.Header>\n {isOnTracePage ? (\n <>\n <DataPanel.Heading>Trace Timeline</DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">{downloadTraceButton}</ButtonsGroup>\n </>\n ) : (\n <>\n <DataPanel.Heading>\n Trace <b># {truncateString(traceId, 12)}</b>\n </DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">\n {onCollapsedChange && (\n <Button\n size=\"md\"\n tooltip={collapsed ? 'Expand panel' : 'Collapse panel'}\n onClick={() => setCollapsed(!collapsed)}\n >\n {collapsed ? <ChevronsUpDownIcon /> : <ChevronsDownUpIcon />}\n </Button>\n )}\n {(onPrevious || onNext) && (\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Previous trace\"\n nextLabel=\"Next trace\"\n />\n )}\n {showOpenTracePageLink && (\n <Button\n as={LinkComponent}\n href={traceHref}\n size=\"md\"\n tooltip=\"Open trace page\"\n aria-label=\"Open trace page\"\n >\n <Link2Icon />\n </Button>\n )}\n {downloadTraceButton}\n <DataPanel.CloseButton onClick={onClose} />\n </ButtonsGroup>\n </>\n )}\n </DataPanel.Header>\n\n {!collapsed &&\n (isLoading ? (\n <DataPanel.LoadingData>Loading trace...</DataPanel.LoadingData>\n ) : hierarchicalSpans.length === 0 ? (\n <DataPanel.NoData>No spans found for this trace.</DataPanel.NoData>\n ) : (\n <DataPanel.Content>\n {!isOnTracePage && rootSpan && <TraceKeysAndValues rootSpan={rootSpan} className=\"mb-6\" />}\n\n {!isOnTracePage && (onEvaluateTrace || onSaveAsDatasetItem || onAddTraceMocksToItem) && (\n <div className=\"mb-6 flex flex-wrap items-center justify-between gap-4\">\n {onEvaluateTrace && (\n <Button size=\"sm\" onClick={onEvaluateTrace}>\n <Icon>\n <CircleGaugeIcon />\n </Icon>\n Evaluate Trace\n </Button>\n )}\n {onSaveAsDatasetItem && (\n <Button size=\"sm\" onClick={() => onSaveAsDatasetItem({ traceId, rootSpanId: rootSpan?.spanId })}>\n <Icon>\n <SaveIcon />\n </Icon>\n Save as Dataset Item\n </Button>\n )}\n {onAddTraceMocksToItem && (\n <Button size=\"sm\" onClick={() => onAddTraceMocksToItem({ traceId })}>\n <Icon>\n <WrenchIcon />\n </Icon>\n Add tool mocks to item\n </Button>\n )}\n </div>\n )}\n\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 <TraceTimeline\n hierarchicalSpans={hierarchicalSpans}\n onSpanClick={handleSpanClick}\n selectedSpanId={selectedSpanId}\n expandedSpanIds={expandedSpanIds}\n setExpandedSpanIds={setExpandedSpanIds}\n chartWidth={timelineChartWidth}\n />\n </DataPanel.Content>\n ))}\n </DataPanel>\n );\n}\n"],"names":["useState","useDownloadTraceJson","useEffect","useMemo","formatHierarchicalSpans","getAllSpanIds","jsx","Button","Loader2Icon","DownloadIcon","jsxs","DataPanel","Fragment","ButtonsGroup","truncateString","ChevronsUpDownIcon","ChevronsDownUpIcon","Link2Icon","TraceKeysAndValues","Icon","CircleGaugeIcon","SaveIcon","WrenchIcon","Notice","TraceTimeline"],"mappings":"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"}
@@ -1,15 +1,15 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { ChevronsUpDownIcon, ChevronsDownUpIcon, Link2Icon, CircleGaugeIcon, SaveIcon, WrenchIcon, Loader2Icon, DownloadIcon } from 'lucide-react';
3
- import { useState, useRef, useEffect, useMemo } from 'react';
3
+ import { useState, useEffect, useMemo } 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 { formatHierarchicalSpans } from './format-hierarchical-spans.es.js';
7
7
  import { TraceKeysAndValues } from './trace-keys-and-values.es.js';
8
8
  import { TraceTimeline } from './trace-timeline.es.js';
9
- import { B as Button } from '../../../Button-Bx2lFdqb.js';
9
+ import { B as Button } from '../../../Button-C-9Pzy-Z.js';
10
10
  import { B as ButtonsGroup } from '../../../buttons-group-DJh4wnMs.js';
11
- import { D as DataPanel } from '../../../data-panel-BEvHk4wg.js';
12
- import { N as Notice } from '../../../Notice-DIK9IZsq.js';
11
+ import { D as DataPanel } from '../../../data-panel-BQqPr6ew.js';
12
+ import { N as Notice } from '../../../Notice-DWHQgxkA.js';
13
13
  import { Icon } from '../../../icons/Icon.es.js';
14
14
  import { truncateString } from '../../../utils/truncate-string.es.js';
15
15
 
@@ -39,7 +39,6 @@ function TraceDataPanelView({
39
39
  const collapsed = controlledCollapsed ?? internalCollapsed;
40
40
  const setCollapsed = onCollapsedChange ?? setInternalCollapsed;
41
41
  const { download: downloadTraceJson, isPending: isDownloadingTrace } = useDownloadTraceJson();
42
- const contentRef = useRef(null);
43
42
  const [selectedSpanId, setSelectedSpanId] = useState(initialSpanId ?? void 0);
44
43
  useEffect(() => {
45
44
  if (!initialSpanId) {
@@ -57,11 +56,6 @@ function TraceDataPanelView({
57
56
  onSpanSelect?.(void 0);
58
57
  }
59
58
  }, [initialSpanId, spans, isLoading]);
60
- useEffect(() => {
61
- if (isLoading || !selectedSpanId || !contentRef.current) return;
62
- const el = contentRef.current.querySelector(`[data-span-id="${selectedSpanId}"]`);
63
- el?.scrollIntoView({ block: "nearest" });
64
- }, [selectedSpanId, isLoading]);
65
59
  const hierarchicalSpans = useMemo(() => formatHierarchicalSpans(spans ?? [], anchorSpanId), [spans, anchorSpanId]);
66
60
  const [expandedSpanIds, setExpandedSpanIds] = useState([]);
67
61
  useEffect(() => {
@@ -136,7 +130,7 @@ function TraceDataPanelView({
136
130
  /* @__PURE__ */ jsx(DataPanel.CloseButton, { onClick: onClose })
137
131
  ] })
138
132
  ] }) }),
139
- !collapsed && (isLoading ? /* @__PURE__ */ jsx(DataPanel.LoadingData, { children: "Loading trace..." }) : hierarchicalSpans.length === 0 ? /* @__PURE__ */ jsx(DataPanel.NoData, { children: "No spans found for this trace." }) : /* @__PURE__ */ jsxs(DataPanel.Content, { ref: contentRef, children: [
133
+ !collapsed && (isLoading ? /* @__PURE__ */ jsx(DataPanel.LoadingData, { children: "Loading trace..." }) : hierarchicalSpans.length === 0 ? /* @__PURE__ */ jsx(DataPanel.NoData, { children: "No spans found for this trace." }) : /* @__PURE__ */ jsxs(DataPanel.Content, { children: [
140
134
  !isOnTracePage && rootSpan && /* @__PURE__ */ jsx(TraceKeysAndValues, { rootSpan, className: "mb-6" }),
141
135
  !isOnTracePage && (onEvaluateTrace || onSaveAsDatasetItem || onAddTraceMocksToItem) && /* @__PURE__ */ jsxs("div", { className: "mb-6 flex flex-wrap items-center justify-between gap-4", children: [
142
136
  onEvaluateTrace && /* @__PURE__ */ jsxs(Button, { size: "sm", onClick: onEvaluateTrace, children: [
@@ -1 +1 @@
1
- {"version":3,"file":"trace-data-panel-view.es.js","sources":["../../../../src/domains/traces/components/trace-data-panel-view.tsx"],"sourcesContent":["import type { LightSpanRecord } from '@mastra/core/storage';\nimport {\n CircleGaugeIcon,\n ChevronsDownUpIcon,\n ChevronsUpDownIcon,\n DownloadIcon,\n Link2Icon,\n Loader2Icon,\n SaveIcon,\n WrenchIcon,\n} from 'lucide-react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { getAllSpanIds } from '../hooks/get-all-span-ids';\nimport { useDownloadTraceJson } from '../hooks/use-download-trace-json';\nimport { formatHierarchicalSpans } from './format-hierarchical-spans';\nimport { TraceKeysAndValues } from './trace-keys-and-values';\nimport { TraceTimeline } from './trace-timeline';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport { Notice } from '@/ds/components/Notice';\nimport { Icon } from '@/ds/icons/Icon';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { truncateString } from '@/lib/truncate-string';\n\nexport type TraceDataPanelPlacement = 'traces-list' | 'trace-page';\n\nexport interface TraceDataPanelViewProps {\n traceId: string;\n /** Lightweight spans for the trace. Caller fetches via useTraceLightSpans. */\n spans: LightSpanRecord[] | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onSpanSelect?: (spanId: string | undefined) => void;\n onEvaluateTrace?: () => void;\n /** When set, a \"Save as Dataset Item\" 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 collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n placement: TraceDataPanelPlacement;\n timelineChartWidth?: 'wide' | 'default';\n /** When both are provided, renders an \"Open trace page\" button. */\n LinkComponent?: LinkComponent;\n traceHref?: string;\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\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 collapsed: controlledCollapsed,\n onCollapsedChange,\n placement,\n timelineChartWidth = 'default',\n LinkComponent,\n traceHref,\n anchorSpanId,\n showUnavailableFeaturesMsg = true,\n}: TraceDataPanelViewProps) {\n const isOnTracePage = placement === 'trace-page';\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const setCollapsed = onCollapsedChange ?? setInternalCollapsed;\n\n const { download: downloadTraceJson, isPending: isDownloadingTrace } = useDownloadTraceJson();\n\n const contentRef = useRef<HTMLDivElement>(null);\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 // Scroll the selected span into view within the timeline, which only exists\n // once the trace has loaded.\n useEffect(() => {\n if (isLoading || !selectedSpanId || !contentRef.current) return;\n const el = contentRef.current.querySelector(`[data-span-id=\"${selectedSpanId}\"]`);\n el?.scrollIntoView({ block: 'nearest' });\n }, [selectedSpanId, isLoading]);\n\n const hierarchicalSpans = useMemo(() => formatHierarchicalSpans(spans ?? [], anchorSpanId), [spans, anchorSpanId]);\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\n const handleSpanClick = (id: string) => {\n const newId = selectedSpanId === id ? undefined : id;\n setSelectedSpanId(newId);\n onSpanSelect?.(newId);\n };\n\n const showOpenTracePageLink = !isOnTracePage && LinkComponent && traceHref;\n\n // Shared across both header layouts (list side panel and full trace page) so a trace can be\n // downloaded from wherever it's being inspected.\n const downloadTraceButton = (\n <Button\n size=\"md\"\n tooltip=\"Download trace JSON\"\n aria-label=\"Download trace JSON\"\n disabled={isDownloadingTrace}\n onClick={() => downloadTraceJson(traceId)}\n >\n {isDownloadingTrace ? <Loader2Icon className=\"animate-spin\" /> : <DownloadIcon />}\n </Button>\n );\n\n return (\n <DataPanel collapsed={collapsed}>\n <DataPanel.Header>\n {isOnTracePage ? (\n <>\n <DataPanel.Heading>Trace Timeline</DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">{downloadTraceButton}</ButtonsGroup>\n </>\n ) : (\n <>\n <DataPanel.Heading>\n Trace <b># {truncateString(traceId, 12)}</b>\n </DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">\n {onCollapsedChange && (\n <Button\n size=\"md\"\n tooltip={collapsed ? 'Expand panel' : 'Collapse panel'}\n onClick={() => setCollapsed(!collapsed)}\n >\n {collapsed ? <ChevronsUpDownIcon /> : <ChevronsDownUpIcon />}\n </Button>\n )}\n {(onPrevious || onNext) && (\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Previous trace\"\n nextLabel=\"Next trace\"\n />\n )}\n {showOpenTracePageLink && (\n <Button\n as={LinkComponent}\n href={traceHref}\n size=\"md\"\n tooltip=\"Open trace page\"\n aria-label=\"Open trace page\"\n >\n <Link2Icon />\n </Button>\n )}\n {downloadTraceButton}\n <DataPanel.CloseButton onClick={onClose} />\n </ButtonsGroup>\n </>\n )}\n </DataPanel.Header>\n\n {!collapsed &&\n (isLoading ? (\n <DataPanel.LoadingData>Loading trace...</DataPanel.LoadingData>\n ) : hierarchicalSpans.length === 0 ? (\n <DataPanel.NoData>No spans found for this trace.</DataPanel.NoData>\n ) : (\n <DataPanel.Content ref={contentRef}>\n {!isOnTracePage && rootSpan && <TraceKeysAndValues rootSpan={rootSpan} className=\"mb-6\" />}\n\n {!isOnTracePage && (onEvaluateTrace || onSaveAsDatasetItem || onAddTraceMocksToItem) && (\n <div className=\"mb-6 flex flex-wrap items-center justify-between gap-4\">\n {onEvaluateTrace && (\n <Button size=\"sm\" onClick={onEvaluateTrace}>\n <Icon>\n <CircleGaugeIcon />\n </Icon>\n Evaluate Trace\n </Button>\n )}\n {onSaveAsDatasetItem && (\n <Button size=\"sm\" onClick={() => onSaveAsDatasetItem({ traceId, rootSpanId: rootSpan?.spanId })}>\n <Icon>\n <SaveIcon />\n </Icon>\n Save as Dataset Item\n </Button>\n )}\n {onAddTraceMocksToItem && (\n <Button size=\"sm\" onClick={() => onAddTraceMocksToItem({ traceId })}>\n <Icon>\n <WrenchIcon />\n </Icon>\n Add tool mocks to item\n </Button>\n )}\n </div>\n )}\n\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 <TraceTimeline\n hierarchicalSpans={hierarchicalSpans}\n onSpanClick={handleSpanClick}\n selectedSpanId={selectedSpanId}\n expandedSpanIds={expandedSpanIds}\n setExpandedSpanIds={setExpandedSpanIds}\n chartWidth={timelineChartWidth}\n />\n </DataPanel.Content>\n ))}\n </DataPanel>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trace-data-panel-view.es.js","sources":["../../../../src/domains/traces/components/trace-data-panel-view.tsx"],"sourcesContent":["import type { LightSpanRecord } from '@mastra/core/storage';\nimport {\n CircleGaugeIcon,\n ChevronsDownUpIcon,\n ChevronsUpDownIcon,\n DownloadIcon,\n Link2Icon,\n Loader2Icon,\n SaveIcon,\n WrenchIcon,\n} from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { getAllSpanIds } from '../hooks/get-all-span-ids';\nimport { useDownloadTraceJson } from '../hooks/use-download-trace-json';\nimport { formatHierarchicalSpans } from './format-hierarchical-spans';\nimport { TraceKeysAndValues } from './trace-keys-and-values';\nimport { TraceTimeline } from './trace-timeline';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport { Notice } from '@/ds/components/Notice';\nimport { Icon } from '@/ds/icons/Icon';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { truncateString } from '@/lib/truncate-string';\n\nexport type TraceDataPanelPlacement = 'traces-list' | 'trace-page';\n\nexport interface TraceDataPanelViewProps {\n traceId: string;\n /** Lightweight spans for the trace. Caller fetches via useTraceLightSpans. */\n spans: LightSpanRecord[] | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onSpanSelect?: (spanId: string | undefined) => void;\n onEvaluateTrace?: () => void;\n /** When set, a \"Save as Dataset Item\" 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 collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n placement: TraceDataPanelPlacement;\n timelineChartWidth?: 'wide' | 'default';\n /** When both are provided, renders an \"Open trace page\" button. */\n LinkComponent?: LinkComponent;\n traceHref?: string;\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\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 collapsed: controlledCollapsed,\n onCollapsedChange,\n placement,\n timelineChartWidth = 'default',\n LinkComponent,\n traceHref,\n anchorSpanId,\n showUnavailableFeaturesMsg = true,\n}: TraceDataPanelViewProps) {\n const isOnTracePage = placement === 'trace-page';\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const setCollapsed = onCollapsedChange ?? setInternalCollapsed;\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 hierarchicalSpans = useMemo(() => formatHierarchicalSpans(spans ?? [], anchorSpanId), [spans, anchorSpanId]);\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\n const handleSpanClick = (id: string) => {\n const newId = selectedSpanId === id ? undefined : id;\n setSelectedSpanId(newId);\n onSpanSelect?.(newId);\n };\n\n const showOpenTracePageLink = !isOnTracePage && LinkComponent && traceHref;\n\n // Shared across both header layouts (list side panel and full trace page) so a trace can be\n // downloaded from wherever it's being inspected.\n const downloadTraceButton = (\n <Button\n size=\"md\"\n tooltip=\"Download trace JSON\"\n aria-label=\"Download trace JSON\"\n disabled={isDownloadingTrace}\n onClick={() => downloadTraceJson(traceId)}\n >\n {isDownloadingTrace ? <Loader2Icon className=\"animate-spin\" /> : <DownloadIcon />}\n </Button>\n );\n\n return (\n <DataPanel collapsed={collapsed}>\n <DataPanel.Header>\n {isOnTracePage ? (\n <>\n <DataPanel.Heading>Trace Timeline</DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">{downloadTraceButton}</ButtonsGroup>\n </>\n ) : (\n <>\n <DataPanel.Heading>\n Trace <b># {truncateString(traceId, 12)}</b>\n </DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">\n {onCollapsedChange && (\n <Button\n size=\"md\"\n tooltip={collapsed ? 'Expand panel' : 'Collapse panel'}\n onClick={() => setCollapsed(!collapsed)}\n >\n {collapsed ? <ChevronsUpDownIcon /> : <ChevronsDownUpIcon />}\n </Button>\n )}\n {(onPrevious || onNext) && (\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Previous trace\"\n nextLabel=\"Next trace\"\n />\n )}\n {showOpenTracePageLink && (\n <Button\n as={LinkComponent}\n href={traceHref}\n size=\"md\"\n tooltip=\"Open trace page\"\n aria-label=\"Open trace page\"\n >\n <Link2Icon />\n </Button>\n )}\n {downloadTraceButton}\n <DataPanel.CloseButton onClick={onClose} />\n </ButtonsGroup>\n </>\n )}\n </DataPanel.Header>\n\n {!collapsed &&\n (isLoading ? (\n <DataPanel.LoadingData>Loading trace...</DataPanel.LoadingData>\n ) : hierarchicalSpans.length === 0 ? (\n <DataPanel.NoData>No spans found for this trace.</DataPanel.NoData>\n ) : (\n <DataPanel.Content>\n {!isOnTracePage && rootSpan && <TraceKeysAndValues rootSpan={rootSpan} className=\"mb-6\" />}\n\n {!isOnTracePage && (onEvaluateTrace || onSaveAsDatasetItem || onAddTraceMocksToItem) && (\n <div className=\"mb-6 flex flex-wrap items-center justify-between gap-4\">\n {onEvaluateTrace && (\n <Button size=\"sm\" onClick={onEvaluateTrace}>\n <Icon>\n <CircleGaugeIcon />\n </Icon>\n Evaluate Trace\n </Button>\n )}\n {onSaveAsDatasetItem && (\n <Button size=\"sm\" onClick={() => onSaveAsDatasetItem({ traceId, rootSpanId: rootSpan?.spanId })}>\n <Icon>\n <SaveIcon />\n </Icon>\n Save as Dataset Item\n </Button>\n )}\n {onAddTraceMocksToItem && (\n <Button size=\"sm\" onClick={() => onAddTraceMocksToItem({ traceId })}>\n <Icon>\n <WrenchIcon />\n </Icon>\n Add tool mocks to item\n </Button>\n )}\n </div>\n )}\n\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 <TraceTimeline\n hierarchicalSpans={hierarchicalSpans}\n onSpanClick={handleSpanClick}\n selectedSpanId={selectedSpanId}\n expandedSpanIds={expandedSpanIds}\n setExpandedSpanIds={setExpandedSpanIds}\n chartWidth={timelineChartWidth}\n />\n </DataPanel.Content>\n ))}\n </DataPanel>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
  const jsxRuntime = require('react/jsx-runtime');
6
6
  const ErrorState = require('../../../ErrorState-DvsG3RMz.cjs');
7
7
  const PermissionDenied = require('../../../PermissionDenied-Dtre6Wn1.cjs');
8
- const SessionExpired = require('../../../SessionExpired-C5ADs4NL.cjs');
8
+ const SessionExpired = require('../../../SessionExpired-CL4bppLl.cjs');
9
9
  const utils_errors = require('../../../utils/errors.cjs.js');
10
10
  const utils_queryUtils = require('../../../utils/query-utils.cjs.js');
11
11
 
@@ -1,7 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { E as ErrorState } from '../../../ErrorState-t59EAa55.js';
3
3
  import { P as PermissionDenied } from '../../../PermissionDenied-8otNeK_X.js';
4
- import { S as SessionExpired } from '../../../SessionExpired-CHF__hq9.js';
4
+ import { S as SessionExpired } from '../../../SessionExpired-qvMB5AP_.js';
5
5
  import { parseError } from '../../../utils/errors.es.js';
6
6
  import { is401UnauthorizedError, is403ForbiddenError } from '../../../utils/query-utils.es.js';
7
7
 
@@ -4,8 +4,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
5
  const jsxRuntime = require('react/jsx-runtime');
6
6
  const lucideReact = require('lucide-react');
7
- const Button = require('../../../Button-Bm94fEF2.cjs');
8
- const dropdownMenu = require('../../../dropdown-menu-ppWztidX.cjs');
7
+ const Button = require('../../../Button-B4Ixj2aW.cjs');
8
+ const dropdownMenu = require('../../../dropdown-menu-BZGlERgf.cjs');
9
9
 
10
10
  const TRACES_LIST_MODE_LABELS = {
11
11
  traces: "Top-level traces only",
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { ChevronDownIcon } from 'lucide-react';
3
- import { B as Button } from '../../../Button-Bx2lFdqb.js';
4
- import { D as DropdownMenu } from '../../../dropdown-menu-DEFygDZI.js';
3
+ import { B as Button } from '../../../Button-C-9Pzy-Z.js';
4
+ import { D as DropdownMenu } from '../../../dropdown-menu-DCMh8P4w.js';
5
5
 
6
6
  const TRACES_LIST_MODE_LABELS = {
7
7
  traces: "Top-level traces only",
@@ -8,9 +8,9 @@ const React = require('react');
8
8
  const domains_traces_traceListColumns = require('../trace-list-columns.cjs.js');
9
9
  const domains_traces_utils_spanUtils = require('../utils/span-utils.cjs.js');
10
10
  const domains_metrics_components_metricsUtils = require('../../metrics/components/metrics-utils.cjs.js');
11
- const dataList = require('../../../data-list-Cb-piK4z.cjs');
11
+ const dataList = require('../../../data-list-Cnnnx_vD.cjs');
12
12
  const dataListSkeleton = require('../../../data-list-skeleton--tiF5mjH.cjs');
13
- const tracesDataList = require('../../../traces-data-list-vsvvvEiP.cjs');
13
+ const tracesDataList = require('../../../traces-data-list-pTNo_zbS.cjs');
14
14
  const utils_cn = require('../../../cn-vA5sWo9W.cjs');
15
15
 
16
16
  const ROW_HEIGHT = 36;