@mastra/playground-ui 58.1.0-alpha.0 → 59.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 (594) hide show
  1. package/README.md +62 -0
  2. package/dist/{Header-BVnFQlzE.js → Header-hTHhO02b.js} +2 -2
  3. package/dist/{Header-BVnFQlzE.js.map → Header-hTHhO02b.js.map} +1 -1
  4. package/dist/{Header-CGjhJ0nQ.cjs → Header-y51Sfo3G.cjs} +2 -2
  5. package/dist/{Header-CGjhJ0nQ.cjs.map → Header-y51Sfo3G.cjs.map} +1 -1
  6. package/dist/{Txt-DTh3Pa_a.js → Txt-BP1SRHmL.js} +4 -10
  7. package/dist/Txt-BP1SRHmL.js.map +1 -0
  8. package/dist/{Txt-B4-2nLaI.cjs → Txt-DPmEpNbp.cjs} +4 -10
  9. package/dist/Txt-DPmEpNbp.cjs.map +1 -0
  10. package/dist/{ask-user-pPTuoPKI.cjs → ask-user-4pnmHbuC.cjs} +2 -2
  11. package/dist/{ask-user-pPTuoPKI.cjs.map → ask-user-4pnmHbuC.cjs.map} +1 -1
  12. package/dist/{ask-user-DtF4a9Vr.js → ask-user-CFcQN_7m.js} +2 -2
  13. package/dist/{ask-user-DtF4a9Vr.js.map → ask-user-CFcQN_7m.js.map} +1 -1
  14. package/dist/{chat-notification-C4P2InUX.js → chat-notification-BI_WRUvG.js} +2 -2
  15. package/dist/{chat-notification-C4P2InUX.js.map → chat-notification-BI_WRUvG.js.map} +1 -1
  16. package/dist/{chat-notification-HP18KxlS.cjs → chat-notification-Dc7jwULm.cjs} +2 -2
  17. package/dist/{chat-notification-HP18KxlS.cjs.map → chat-notification-Dc7jwULm.cjs.map} +1 -1
  18. package/dist/{chat-signal-BP9RN6Rh.cjs → chat-signal-BodewV33.cjs} +3 -3
  19. package/dist/{chat-signal-BP9RN6Rh.cjs.map → chat-signal-BodewV33.cjs.map} +1 -1
  20. package/dist/{chat-signal-CQnmFp3V.js → chat-signal-D0zw80bU.js} +3 -3
  21. package/dist/{chat-signal-CQnmFp3V.js.map → chat-signal-D0zw80bU.js.map} +1 -1
  22. package/dist/{combobox-BoSB-muq.cjs → combobox-B19HJqE-.cjs} +2 -2
  23. package/dist/{combobox-BoSB-muq.cjs.map → combobox-B19HJqE-.cjs.map} +1 -1
  24. package/dist/{combobox-Cd0JPUQW.js → combobox-D_kmwSKS.js} +2 -2
  25. package/dist/{combobox-Cd0JPUQW.js.map → combobox-D_kmwSKS.js.map} +1 -1
  26. package/dist/components/Avatar.cjs.js +1 -1
  27. package/dist/components/Avatar.es.js +1 -1
  28. package/dist/components/ClampedText.cjs.js +1 -1
  29. package/dist/components/ClampedText.es.js +1 -1
  30. package/dist/components/Combobox.cjs.js +1 -1
  31. package/dist/components/Combobox.es.js +1 -1
  32. package/dist/components/Comment.cjs.js +2 -2
  33. package/dist/components/Comment.es.js +2 -2
  34. package/dist/components/CompactNumber.cjs.js +24 -0
  35. package/dist/components/CompactNumber.cjs.js.map +1 -0
  36. package/dist/components/CompactNumber.d.ts +2 -0
  37. package/dist/components/CompactNumber.es.js +20 -0
  38. package/dist/components/CompactNumber.es.js.map +1 -0
  39. package/dist/components/DataCodeSection.cjs.js +1 -1
  40. package/dist/components/DataCodeSection.es.js +1 -1
  41. package/dist/components/DataList.cjs.js +8 -14
  42. package/dist/components/DataList.cjs.js.map +1 -1
  43. package/dist/components/DataList.es.js +8 -14
  44. package/dist/components/DataList.es.js.map +1 -1
  45. package/dist/components/DataPanel.cjs.js +1 -1
  46. package/dist/components/DataPanel.es.js +1 -1
  47. package/dist/components/DateRangeTimeline.cjs.js +1 -1
  48. package/dist/components/DateRangeTimeline.es.js +1 -1
  49. package/dist/components/DateTimePicker.cjs.js +1 -1
  50. package/dist/components/DateTimePicker.es.js +1 -1
  51. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  52. package/dist/components/DateTimeRangePicker.es.js +1 -1
  53. package/dist/components/Entity.cjs.js +1 -1
  54. package/dist/components/Entity.es.js +1 -1
  55. package/dist/components/EntityHeader.cjs.js +1 -1
  56. package/dist/components/EntityHeader.es.js +1 -1
  57. package/dist/components/Entry.cjs.js +1 -1
  58. package/dist/components/Entry.es.js +1 -1
  59. package/dist/components/EnvironmentVariablesEditor.cjs.js +3 -3
  60. package/dist/components/EnvironmentVariablesEditor.es.js +3 -3
  61. package/dist/components/FilterBar.cjs.js +1 -1
  62. package/dist/components/FilterBar.es.js +1 -1
  63. package/dist/components/FormFieldBlocks.cjs.js +4 -4
  64. package/dist/components/FormFieldBlocks.es.js +4 -4
  65. package/dist/components/Header.cjs.js +1 -1
  66. package/dist/components/Header.es.js +1 -1
  67. package/dist/components/InlineCode.cjs.js +10 -0
  68. package/dist/components/InlineCode.cjs.js.map +1 -0
  69. package/dist/components/InlineCode.d.ts +2 -0
  70. package/dist/components/InlineCode.es.js +2 -0
  71. package/dist/components/InlineCode.es.js.map +1 -0
  72. package/dist/components/ItemList.cjs.js +4 -16
  73. package/dist/components/ItemList.cjs.js.map +1 -1
  74. package/dist/components/ItemList.es.js +4 -16
  75. package/dist/components/ItemList.es.js.map +1 -1
  76. package/dist/components/JSONSchemaForm.cjs.js +2 -2
  77. package/dist/components/JSONSchemaForm.es.js +2 -2
  78. package/dist/components/ListSearch.cjs.js +1 -1
  79. package/dist/components/ListSearch.es.js +1 -1
  80. package/dist/components/LogsDataList.cjs.js +2 -2
  81. package/dist/components/LogsDataList.es.js +2 -2
  82. package/dist/components/Message.cjs.js +4 -5
  83. package/dist/components/Message.cjs.js.map +1 -1
  84. package/dist/components/Message.es.js +4 -5
  85. package/dist/components/Message.es.js.map +1 -1
  86. package/dist/components/PageLayout.cjs.js +1 -1
  87. package/dist/components/PageLayout.es.js +1 -1
  88. package/dist/components/PropertyFilter.cjs.js +1 -1
  89. package/dist/components/PropertyFilter.es.js +1 -1
  90. package/dist/components/RelativeTimestamp.cjs.js +119 -0
  91. package/dist/components/RelativeTimestamp.cjs.js.map +1 -0
  92. package/dist/components/RelativeTimestamp.d.ts +2 -0
  93. package/dist/components/RelativeTimestamp.es.js +115 -0
  94. package/dist/components/RelativeTimestamp.es.js.map +1 -0
  95. package/dist/components/Section.cjs.js +1 -1
  96. package/dist/components/Section.es.js +1 -1
  97. package/dist/components/SettingsRow.cjs.js +1 -1
  98. package/dist/components/SettingsRow.es.js +1 -1
  99. package/dist/components/SideDialog.cjs.js +1 -1
  100. package/dist/components/SideDialog.es.js +1 -1
  101. package/dist/components/StatusIndicators.cjs.js +21 -14
  102. package/dist/components/StatusIndicators.cjs.js.map +1 -1
  103. package/dist/components/StatusIndicators.es.js +21 -15
  104. package/dist/components/StatusIndicators.es.js.map +1 -1
  105. package/dist/components/Table.cjs.js +3 -21
  106. package/dist/components/Table.cjs.js.map +1 -1
  107. package/dist/components/Table.es.js +3 -21
  108. package/dist/components/Table.es.js.map +1 -1
  109. package/dist/components/ThreadList.cjs.js +1 -1
  110. package/dist/components/ThreadList.es.js +1 -1
  111. package/dist/components/Truncate.cjs.js +1 -1
  112. package/dist/components/Truncate.es.js +1 -1
  113. package/dist/components/Txt.cjs.js +1 -1
  114. package/dist/components/Txt.es.js +1 -1
  115. package/dist/components/Workflow.cjs.js +8 -12
  116. package/dist/components/Workflow.cjs.js.map +1 -1
  117. package/dist/components/Workflow.es.js +8 -12
  118. package/dist/components/Workflow.es.js.map +1 -1
  119. package/dist/components/ai/ask-user.cjs.js +1 -1
  120. package/dist/components/ai/ask-user.es.js +1 -1
  121. package/dist/components/ai/chat-event.cjs.js +3 -3
  122. package/dist/components/ai/chat-event.es.js +4 -4
  123. package/dist/components/ai/plan.cjs.js +2 -2
  124. package/dist/components/ai/plan.cjs.js.map +1 -1
  125. package/dist/components/ai/plan.es.js +2 -2
  126. package/dist/components/ai/plan.es.js.map +1 -1
  127. package/dist/components/ai/tool-call.cjs.js +7 -9
  128. package/dist/components/ai/tool-call.cjs.js.map +1 -1
  129. package/dist/components/ai/tool-call.es.js +8 -10
  130. package/dist/components/ai/tool-call.es.js.map +1 -1
  131. package/dist/{data-code-section-Cth9zVkj.js → data-code-section-BKrCkj90.js} +2 -2
  132. package/dist/{data-code-section-Cth9zVkj.js.map → data-code-section-BKrCkj90.js.map} +1 -1
  133. package/dist/{data-code-section-DE4AgaTU.cjs → data-code-section-C9z94ytx.cjs} +2 -2
  134. package/dist/{data-code-section-DE4AgaTU.cjs.map → data-code-section-C9z94ytx.cjs.map} +1 -1
  135. package/dist/{data-list-DisTjDHP.js → data-list-5-nRJbEO.js} +3 -3
  136. package/dist/{data-list-DisTjDHP.js.map → data-list-5-nRJbEO.js.map} +1 -1
  137. package/dist/{data-list-PwFpP_mo.cjs → data-list-RI8c32dk.cjs} +3 -3
  138. package/dist/{data-list-PwFpP_mo.cjs.map → data-list-RI8c32dk.cjs.map} +1 -1
  139. package/dist/{data-list-skeleton-DAfM8AjW.js → data-list-skeleton-BrSh9Y_3.js} +2 -2
  140. package/dist/{data-list-skeleton-DAfM8AjW.js.map → data-list-skeleton-BrSh9Y_3.js.map} +1 -1
  141. package/dist/{data-list-skeleton-CjwR0o3w.cjs → data-list-skeleton-CgbWqYky.cjs} +2 -2
  142. package/dist/{data-list-skeleton-CjwR0o3w.cjs.map → data-list-skeleton-CgbWqYky.cjs.map} +1 -1
  143. package/dist/{data-list-spacer-DEcgVGFM.cjs → data-list-spacer-1OqlC7WX.cjs} +2 -2
  144. package/dist/{data-list-spacer-DEcgVGFM.cjs.map → data-list-spacer-1OqlC7WX.cjs.map} +1 -1
  145. package/dist/{data-list-spacer-BmorAN0V.js → data-list-spacer-D3Rn1evn.js} +2 -2
  146. package/dist/{data-list-spacer-BmorAN0V.js.map → data-list-spacer-D3Rn1evn.js.map} +1 -1
  147. package/dist/{data-list-top-DpbOA3uw.js → data-list-top-B-AopfvE.js} +13 -21
  148. package/dist/data-list-top-B-AopfvE.js.map +1 -0
  149. package/dist/{data-list-top-WGUY167p.cjs → data-list-top-DFnudSA_.cjs} +13 -21
  150. package/dist/data-list-top-DFnudSA_.cjs.map +1 -0
  151. package/dist/{data-panel-BQVTKo86.js → data-panel-BWgExbHs.js} +2 -2
  152. package/dist/{data-panel-BQVTKo86.js.map → data-panel-BWgExbHs.js.map} +1 -1
  153. package/dist/{data-panel-XPXrhYJI.cjs → data-panel-C_BqhzeL.cjs} +2 -2
  154. package/dist/{data-panel-XPXrhYJI.cjs.map → data-panel-C_BqhzeL.cjs.map} +1 -1
  155. package/dist/{date-time-range-picker-C-t3Kdpk.js → date-time-range-picker-Bnviv7s-.js} +2 -2
  156. package/dist/{date-time-range-picker-C-t3Kdpk.js.map → date-time-range-picker-Bnviv7s-.js.map} +1 -1
  157. package/dist/{date-time-range-picker-BCzvSYx3.cjs → date-time-range-picker-sT5qAW-_.cjs} +2 -2
  158. package/dist/{date-time-range-picker-BCzvSYx3.cjs.map → date-time-range-picker-sT5qAW-_.cjs.map} +1 -1
  159. package/dist/domains/capabilities/hooks/use-feedback-available.cjs.js +16 -0
  160. package/dist/domains/capabilities/hooks/use-feedback-available.cjs.js.map +1 -0
  161. package/dist/domains/capabilities/hooks/use-feedback-available.d.ts +2 -0
  162. package/dist/domains/capabilities/hooks/use-feedback-available.es.js +12 -0
  163. package/dist/domains/capabilities/hooks/use-feedback-available.es.js.map +1 -0
  164. package/dist/domains/capabilities/hooks/use-observability-capabilities.cjs.js +20 -0
  165. package/dist/domains/capabilities/hooks/use-observability-capabilities.cjs.js.map +1 -0
  166. package/dist/domains/capabilities/hooks/use-observability-capabilities.d.ts +2 -0
  167. package/dist/domains/capabilities/hooks/use-observability-capabilities.es.js +16 -0
  168. package/dist/domains/capabilities/hooks/use-observability-capabilities.es.js.map +1 -0
  169. package/dist/domains/capabilities/hooks/use-trace-query-available.cjs.js +16 -0
  170. package/dist/domains/capabilities/hooks/use-trace-query-available.cjs.js.map +1 -0
  171. package/dist/domains/capabilities/hooks/use-trace-query-available.d.ts +2 -0
  172. package/dist/domains/capabilities/hooks/use-trace-query-available.es.js +12 -0
  173. package/dist/domains/capabilities/hooks/use-trace-query-available.es.js.map +1 -0
  174. package/dist/domains/capabilities/hooks.cjs.js +14 -0
  175. package/dist/domains/capabilities/hooks.cjs.js.map +1 -0
  176. package/dist/domains/capabilities/hooks.d.ts +2 -0
  177. package/dist/domains/capabilities/hooks.es.js +4 -0
  178. package/dist/domains/capabilities/hooks.es.js.map +1 -0
  179. package/dist/domains/capabilities.cjs.js +14 -0
  180. package/dist/domains/capabilities.cjs.js.map +1 -0
  181. package/dist/domains/capabilities.d.ts +2 -0
  182. package/dist/domains/capabilities.es.js +4 -0
  183. package/dist/domains/capabilities.es.js.map +1 -0
  184. package/dist/domains/chat/attachments/attachment-kind.es.js +1 -1
  185. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  186. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  187. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
  188. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
  189. package/dist/domains/chat/components/section-label.cjs.js +1 -1
  190. package/dist/domains/chat/components/section-label.es.js +1 -1
  191. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  192. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  193. package/dist/domains/chat/messages/reasoning-streaming-line.cjs.js +1 -1
  194. package/dist/domains/chat/messages/reasoning-streaming-line.es.js +1 -1
  195. package/dist/domains/chat/messages/reasoning.cjs.js +4 -3
  196. package/dist/domains/chat/messages/reasoning.cjs.js.map +1 -1
  197. package/dist/domains/chat/messages/reasoning.es.js +4 -3
  198. package/dist/domains/chat/messages/reasoning.es.js.map +1 -1
  199. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +2 -2
  200. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js.map +1 -1
  201. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +2 -2
  202. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js.map +1 -1
  203. package/dist/domains/chat/messages/renderers/user-file-part-renderer.es.js +1 -1
  204. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  205. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  206. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
  207. package/dist/domains/chat/messages/system-reminder-badge.cjs.js.map +1 -1
  208. package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
  209. package/dist/domains/chat/messages/system-reminder-badge.es.js.map +1 -1
  210. package/dist/domains/chat/messages/tripwire-notice.cjs.js +1 -1
  211. package/dist/domains/chat/messages/tripwire-notice.cjs.js.map +1 -1
  212. package/dist/domains/chat/messages/tripwire-notice.es.js +1 -1
  213. package/dist/domains/chat/messages/tripwire-notice.es.js.map +1 -1
  214. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  215. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  216. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +3 -3
  217. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js.map +1 -1
  218. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +3 -3
  219. package/dist/domains/chat/tools/badges/code-mode-badge.es.js.map +1 -1
  220. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +5 -3
  221. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js.map +1 -1
  222. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +5 -3
  223. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js.map +1 -1
  224. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +11 -8
  225. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js.map +1 -1
  226. package/dist/domains/chat/tools/badges/observation-renderer.es.js +11 -8
  227. package/dist/domains/chat/tools/badges/observation-renderer.es.js.map +1 -1
  228. package/dist/domains/logs/components/log-data-panel.cjs.js +3 -6
  229. package/dist/domains/logs/components/log-data-panel.cjs.js.map +1 -1
  230. package/dist/domains/logs/components/log-data-panel.es.js +3 -6
  231. package/dist/domains/logs/components/log-data-panel.es.js.map +1 -1
  232. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
  233. package/dist/domains/logs/components/logs-list-view.es.js +2 -2
  234. package/dist/domains/logs/components/no-logs-info.cjs.js +3 -4
  235. package/dist/domains/logs/components/no-logs-info.cjs.js.map +1 -1
  236. package/dist/domains/logs/components/no-logs-info.es.js +3 -4
  237. package/dist/domains/logs/components/no-logs-info.es.js.map +1 -1
  238. package/dist/domains/memory/components/flame-graph.cjs.js +7 -5
  239. package/dist/domains/memory/components/flame-graph.cjs.js.map +1 -1
  240. package/dist/domains/memory/components/flame-graph.es.js +8 -6
  241. package/dist/domains/memory/components/flame-graph.es.js.map +1 -1
  242. package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
  243. package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
  244. package/dist/domains/memory/components/observation-detail-view.cjs.js +4 -5
  245. package/dist/domains/memory/components/observation-detail-view.cjs.js.map +1 -1
  246. package/dist/domains/memory/components/observation-detail-view.es.js +4 -5
  247. package/dist/domains/memory/components/observation-detail-view.es.js.map +1 -1
  248. package/dist/domains/memory/components/thread-context-progress.cjs.js +1 -1
  249. package/dist/domains/memory/components/thread-context-progress.cjs.js.map +1 -1
  250. package/dist/domains/memory/components/thread-context-progress.es.js +1 -1
  251. package/dist/domains/memory/components/thread-context-progress.es.js.map +1 -1
  252. package/dist/domains/memory/lib/timeline.cjs.js +0 -9
  253. package/dist/domains/memory/lib/timeline.cjs.js.map +1 -1
  254. package/dist/domains/memory/lib/timeline.es.js +1 -9
  255. package/dist/domains/memory/lib/timeline.es.js.map +1 -1
  256. package/dist/domains/metrics/components/bar-list.cjs.js +4 -4
  257. package/dist/domains/metrics/components/bar-list.cjs.js.map +1 -1
  258. package/dist/domains/metrics/components/bar-list.es.js +4 -4
  259. package/dist/domains/metrics/components/bar-list.es.js.map +1 -1
  260. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  261. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  262. package/dist/domains/metrics/components/kpi-card-view.cjs.js.map +1 -1
  263. package/dist/domains/metrics/components/kpi-card-view.es.js.map +1 -1
  264. package/dist/domains/metrics/components/memory-card-view.cjs.js +6 -5
  265. package/dist/domains/metrics/components/memory-card-view.cjs.js.map +1 -1
  266. package/dist/domains/metrics/components/memory-card-view.es.js +5 -4
  267. package/dist/domains/metrics/components/memory-card-view.es.js.map +1 -1
  268. package/dist/domains/metrics/components/metrics-utils.cjs.js +0 -15
  269. package/dist/domains/metrics/components/metrics-utils.cjs.js.map +1 -1
  270. package/dist/domains/metrics/components/metrics-utils.es.js +1 -14
  271. package/dist/domains/metrics/components/metrics-utils.es.js.map +1 -1
  272. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +5 -4
  273. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js.map +1 -1
  274. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +3 -2
  275. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js.map +1 -1
  276. package/dist/domains/metrics/components/scores-card-view.cjs.js +1 -1
  277. package/dist/domains/metrics/components/scores-card-view.es.js +1 -1
  278. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +4 -3
  279. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js.map +1 -1
  280. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +4 -3
  281. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js.map +1 -1
  282. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +3 -2
  283. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js.map +1 -1
  284. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +3 -2
  285. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js.map +1 -1
  286. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +3 -2
  287. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js.map +1 -1
  288. package/dist/domains/metrics/components/traces-volume-card-view.es.js +4 -3
  289. package/dist/domains/metrics/components/traces-volume-card-view.es.js.map +1 -1
  290. package/dist/domains/metrics/components.cjs.js +0 -2
  291. package/dist/domains/metrics/components.cjs.js.map +1 -1
  292. package/dist/domains/metrics/components.es.js +1 -1
  293. package/dist/domains/metrics/hooks/use-metrics.cjs.js +3 -3
  294. package/dist/domains/metrics/hooks/use-metrics.cjs.js.map +1 -1
  295. package/dist/domains/metrics/hooks/use-metrics.es.js +3 -3
  296. package/dist/domains/metrics/hooks/use-metrics.es.js.map +1 -1
  297. package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.cjs.js +5 -5
  298. package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.cjs.js.map +1 -1
  299. package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.es.js +5 -5
  300. package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.es.js.map +1 -1
  301. package/dist/domains/metrics/hooks/use-scores-metrics.cjs.js +6 -7
  302. package/dist/domains/metrics/hooks/use-scores-metrics.cjs.js.map +1 -1
  303. package/dist/domains/metrics/hooks/use-scores-metrics.es.js +6 -7
  304. package/dist/domains/metrics/hooks/use-scores-metrics.es.js.map +1 -1
  305. package/dist/domains/metrics/metrics-interval.cjs.js +4 -2
  306. package/dist/domains/metrics/metrics-interval.cjs.js.map +1 -1
  307. package/dist/domains/metrics/metrics-interval.es.js +4 -2
  308. package/dist/domains/metrics/metrics-interval.es.js.map +1 -1
  309. package/dist/domains/metrics.cjs.js +0 -2
  310. package/dist/domains/metrics.cjs.js.map +1 -1
  311. package/dist/domains/metrics.es.js +1 -1
  312. package/dist/domains/traces/components/no-traces-info.cjs.js +3 -4
  313. package/dist/domains/traces/components/no-traces-info.cjs.js.map +1 -1
  314. package/dist/domains/traces/components/no-traces-info.es.js +3 -4
  315. package/dist/domains/traces/components/no-traces-info.es.js.map +1 -1
  316. package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -1
  317. package/dist/domains/traces/components/span-data-panel-view.es.js +1 -1
  318. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  319. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  320. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  321. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  322. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +3 -2
  323. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js.map +1 -1
  324. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +3 -2
  325. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js.map +1 -1
  326. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +1 -1
  327. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js.map +1 -1
  328. package/dist/domains/traces/components/span-payload/span-payload-json.es.js +1 -1
  329. package/dist/domains/traces/components/span-payload/span-payload-json.es.js.map +1 -1
  330. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +1 -1
  331. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +1 -1
  332. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
  333. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
  334. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  335. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  336. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
  337. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
  338. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +3 -2
  339. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js.map +1 -1
  340. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +3 -2
  341. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js.map +1 -1
  342. package/dist/domains/traces/components/span-summary-description.cjs.js +6 -4
  343. package/dist/domains/traces/components/span-summary-description.cjs.js.map +1 -1
  344. package/dist/domains/traces/components/span-summary-description.es.js +7 -5
  345. package/dist/domains/traces/components/span-summary-description.es.js.map +1 -1
  346. package/dist/domains/traces/components/span-timeline-row.cjs.js +3 -4
  347. package/dist/domains/traces/components/span-timeline-row.cjs.js.map +1 -1
  348. package/dist/domains/traces/components/span-timeline-row.es.js +3 -4
  349. package/dist/domains/traces/components/span-timeline-row.es.js.map +1 -1
  350. package/dist/domains/traces/components/span-timing-hover-card.cjs.js +6 -11
  351. package/dist/domains/traces/components/span-timing-hover-card.cjs.js.map +1 -1
  352. package/dist/domains/traces/components/span-timing-hover-card.es.js +6 -11
  353. package/dist/domains/traces/components/span-timing-hover-card.es.js.map +1 -1
  354. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  355. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  356. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +1 -1
  357. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +1 -1
  358. package/dist/domains/traces/components/timeline-timing-col.cjs.js +3 -4
  359. package/dist/domains/traces/components/timeline-timing-col.cjs.js.map +1 -1
  360. package/dist/domains/traces/components/timeline-timing-col.es.js +3 -4
  361. package/dist/domains/traces/components/timeline-timing-col.es.js.map +1 -1
  362. package/dist/domains/traces/components/trace-columns-menu.cjs.js +21 -18
  363. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  364. package/dist/domains/traces/components/trace-columns-menu.es.js +21 -18
  365. package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
  366. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +2 -2
  367. package/dist/domains/traces/components/trace-data-panel-view.es.js +2 -2
  368. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  369. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  370. package/dist/domains/traces/components/trace-span-timeline.cjs.js +10 -4
  371. package/dist/domains/traces/components/trace-span-timeline.cjs.js.map +1 -1
  372. package/dist/domains/traces/components/trace-span-timeline.es.js +10 -4
  373. package/dist/domains/traces/components/trace-span-timeline.es.js.map +1 -1
  374. package/dist/domains/traces/components/trace-span-tree.cjs.js +3 -4
  375. package/dist/domains/traces/components/trace-span-tree.cjs.js.map +1 -1
  376. package/dist/domains/traces/components/trace-span-tree.es.js +3 -4
  377. package/dist/domains/traces/components/trace-span-tree.es.js.map +1 -1
  378. package/dist/domains/traces/components/trace-summary-description.cjs.js +13 -10
  379. package/dist/domains/traces/components/trace-summary-description.cjs.js.map +1 -1
  380. package/dist/domains/traces/components/trace-summary-description.es.js +13 -10
  381. package/dist/domains/traces/components/trace-summary-description.es.js.map +1 -1
  382. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +1 -1
  383. package/dist/domains/traces/components/trace-time-range-chip.es.js +1 -1
  384. package/dist/domains/traces/components/traces-list-view.cjs.js +12 -10
  385. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  386. package/dist/domains/traces/components/traces-list-view.es.js +12 -10
  387. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  388. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -1
  389. package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -1
  390. package/dist/domains/traces/hooks/use-branch.cjs.js +0 -1
  391. package/dist/domains/traces/hooks/use-branch.cjs.js.map +1 -1
  392. package/dist/domains/traces/hooks/use-branch.es.js +0 -1
  393. package/dist/domains/traces/hooks/use-branch.es.js.map +1 -1
  394. package/dist/domains/traces/hooks/use-trace-light-spans.cjs.js +0 -1
  395. package/dist/domains/traces/hooks/use-trace-light-spans.cjs.js.map +1 -1
  396. package/dist/domains/traces/hooks/use-trace-light-spans.es.js +0 -1
  397. package/dist/domains/traces/hooks/use-trace-light-spans.es.js.map +1 -1
  398. package/dist/domains/traces/hooks/use-trace-query.cjs.js +63 -3
  399. package/dist/domains/traces/hooks/use-trace-query.cjs.js.map +1 -1
  400. package/dist/domains/traces/hooks/use-trace-query.es.js +61 -4
  401. package/dist/domains/traces/hooks/use-trace-query.es.js.map +1 -1
  402. package/dist/domains/traces/hooks/use-trace-search.cjs.js +0 -1
  403. package/dist/domains/traces/hooks/use-trace-search.cjs.js.map +1 -1
  404. package/dist/domains/traces/hooks/use-trace-search.es.js +0 -1
  405. package/dist/domains/traces/hooks/use-trace-search.es.js.map +1 -1
  406. package/dist/domains/traces/hooks/use-trace-spans.cjs.js +0 -1
  407. package/dist/domains/traces/hooks/use-trace-spans.cjs.js.map +1 -1
  408. package/dist/domains/traces/hooks/use-trace-spans.es.js +0 -1
  409. package/dist/domains/traces/hooks/use-trace-spans.es.js.map +1 -1
  410. package/dist/domains/traces/hooks/use-traces-list-source.cjs.js +42 -0
  411. package/dist/domains/traces/hooks/use-traces-list-source.cjs.js.map +1 -0
  412. package/dist/domains/traces/hooks/use-traces-list-source.d.ts +2 -0
  413. package/dist/domains/traces/hooks/use-traces-list-source.es.js +38 -0
  414. package/dist/domains/traces/hooks/use-traces-list-source.es.js.map +1 -0
  415. package/dist/domains/traces/hooks.cjs.js +2 -0
  416. package/dist/domains/traces/hooks.cjs.js.map +1 -1
  417. package/dist/domains/traces/hooks.es.js +1 -0
  418. package/dist/domains/traces/hooks.es.js.map +1 -1
  419. package/dist/domains/traces/trace-filters.cjs.js +10 -1
  420. package/dist/domains/traces/trace-filters.cjs.js.map +1 -1
  421. package/dist/domains/traces/trace-filters.es.js +10 -1
  422. package/dist/domains/traces/trace-filters.es.js.map +1 -1
  423. package/dist/domains/traces/utils/span-utils.cjs.js +4 -36
  424. package/dist/domains/traces/utils/span-utils.cjs.js.map +1 -1
  425. package/dist/domains/traces/utils/span-utils.es.js +4 -32
  426. package/dist/domains/traces/utils/span-utils.es.js.map +1 -1
  427. package/dist/domains/traces/utils.cjs.js +1 -1
  428. package/dist/domains/traces/utils.es.js +1 -1
  429. package/dist/domains/traces.cjs.js +3 -1
  430. package/dist/domains/traces.cjs.js.map +1 -1
  431. package/dist/domains/traces.es.js +2 -1
  432. package/dist/domains/traces.es.js.map +1 -1
  433. package/dist/ee/signals/components/entity-index-list.cjs.js +1 -1
  434. package/dist/ee/signals/components/entity-index-list.es.js +1 -1
  435. package/dist/ee/signals/components/entity-index-model.cjs.js +3 -2
  436. package/dist/ee/signals/components/entity-index-model.cjs.js.map +1 -1
  437. package/dist/ee/signals/components/entity-index-model.es.js +3 -2
  438. package/dist/ee/signals/components/entity-index-model.es.js.map +1 -1
  439. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +2 -2
  440. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +2 -2
  441. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -2
  442. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +2 -2
  443. package/dist/ee/signals/signal-formatting.cjs.js +6 -34
  444. package/dist/ee/signals/signal-formatting.cjs.js.map +1 -1
  445. package/dist/ee/signals/signal-formatting.es.js +6 -34
  446. package/dist/ee/signals/signal-formatting.es.js.map +1 -1
  447. package/dist/ee/signals/snapshot-timeline-data.cjs.js +1 -1
  448. package/dist/ee/signals/snapshot-timeline-data.cjs.js.map +1 -1
  449. package/dist/ee/signals/snapshot-timeline-data.es.js +1 -1
  450. package/dist/ee/signals/snapshot-timeline-data.es.js.map +1 -1
  451. package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
  452. package/dist/ee/signals/view-mode-tab.es.js +1 -1
  453. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +1 -1
  454. package/dist/ee/topics/components/topic-trace-summary-list.es.js +1 -1
  455. package/dist/field-block-error-msg-Y0fi0HUC.js +22 -0
  456. package/dist/field-block-error-msg-Y0fi0HUC.js.map +1 -0
  457. package/dist/field-block-error-msg-oudJz2Hx.cjs +24 -0
  458. package/dist/field-block-error-msg-oudJz2Hx.cjs.map +1 -0
  459. package/dist/{field-error-id-DyWx33Fu.js → field-error-id-DD7OARLU.js} +2 -13
  460. package/dist/field-error-id-DD7OARLU.js.map +1 -0
  461. package/dist/{field-error-id-6EfqmQ4C.cjs → field-error-id-V_WejsRL.cjs} +4 -15
  462. package/dist/field-error-id-V_WejsRL.cjs.map +1 -0
  463. package/dist/hooks/use-elapsed-time.cjs.js +25 -0
  464. package/dist/hooks/use-elapsed-time.cjs.js.map +1 -0
  465. package/dist/hooks/use-elapsed-time.d.ts +2 -0
  466. package/dist/hooks/use-elapsed-time.es.js +21 -0
  467. package/dist/hooks/use-elapsed-time.es.js.map +1 -0
  468. package/dist/inline-code-BW6W121s.js +13 -0
  469. package/dist/inline-code-BW6W121s.js.map +1 -0
  470. package/dist/inline-code-CSwG-x8D.cjs +15 -0
  471. package/dist/inline-code-CSwG-x8D.cjs.map +1 -0
  472. package/dist/layout/tabbed-container.cjs.js +3 -3
  473. package/dist/layout/tabbed-container.es.js +3 -3
  474. package/dist/{list-search-S1mco9Bl.cjs → list-search-CsYQX8qR.cjs} +2 -2
  475. package/dist/{list-search-S1mco9Bl.cjs.map → list-search-CsYQX8qR.cjs.map} +1 -1
  476. package/dist/{list-search-FJ1O5F3S.js → list-search-D1FD8FCL.js} +2 -2
  477. package/dist/{list-search-FJ1O5F3S.js.map → list-search-D1FD8FCL.js.map} +1 -1
  478. package/dist/{logs-data-list-CgDcNIvS.js → logs-data-list-BKE5vYZR.js} +3 -3
  479. package/dist/{logs-data-list-CgDcNIvS.js.map → logs-data-list-BKE5vYZR.js.map} +1 -1
  480. package/dist/{logs-data-list-BHvJOeec.cjs → logs-data-list-lJK0yGYj.cjs} +3 -3
  481. package/dist/{logs-data-list-BHvJOeec.cjs.map → logs-data-list-lJK0yGYj.cjs.map} +1 -1
  482. package/dist/new/settings.cjs.js +2 -2
  483. package/dist/new/settings.es.js +2 -2
  484. package/dist/{schemes-C9EhSOkB.js → schemes-CGK3gQJ6.js} +2 -2
  485. package/dist/{schemes-C9EhSOkB.js.map → schemes-CGK3gQJ6.js.map} +1 -1
  486. package/dist/{search-field-block-fU3tStmB.js → search-field-block-Dj2KJyjQ.js} +2 -2
  487. package/dist/{search-field-block-fU3tStmB.js.map → search-field-block-Dj2KJyjQ.js.map} +1 -1
  488. package/dist/{search-field-block-7-ufp4uG.cjs → search-field-block-K_e_S9WY.cjs} +2 -2
  489. package/dist/{search-field-block-7-ufp4uG.cjs.map → search-field-block-K_e_S9WY.cjs.map} +1 -1
  490. package/dist/{section-B9OLuEq3.js → section-Bi0g7cn6.js} +2 -2
  491. package/dist/{section-B9OLuEq3.js.map → section-Bi0g7cn6.js.map} +1 -1
  492. package/dist/{section-CTihfzmc.cjs → section-p9vCSmPq.cjs} +2 -2
  493. package/dist/{section-CTihfzmc.cjs.map → section-p9vCSmPq.cjs.map} +1 -1
  494. package/dist/{select-field-block-BfiHq9t6.js → select-field-block-BF8v698d.js} +2 -2
  495. package/dist/{select-field-block-BfiHq9t6.js.map → select-field-block-BF8v698d.js.map} +1 -1
  496. package/dist/{select-field-block-DJo2cX9Y.cjs → select-field-block-CaGjpIKM.cjs} +2 -2
  497. package/dist/{select-field-block-DJo2cX9Y.cjs.map → select-field-block-CaGjpIKM.cjs.map} +1 -1
  498. package/dist/{settings-row-BoAuUUuH.cjs → settings-row-Cr8gaO5a.cjs} +14 -4
  499. package/dist/settings-row-Cr8gaO5a.cjs.map +1 -0
  500. package/dist/{settings-row-B2IekRyH.js → settings-row-Cr9DsBSX.js} +14 -4
  501. package/dist/settings-row-Cr9DsBSX.js.map +1 -0
  502. package/dist/{span-payload-primitives-Buq9V8nK.js → span-payload-primitives-Dmzm3mb2.js} +2 -2
  503. package/dist/{span-payload-primitives-Buq9V8nK.js.map → span-payload-primitives-Dmzm3mb2.js.map} +1 -1
  504. package/dist/{span-payload-primitives-CjlNH9C-.cjs → span-payload-primitives-Dq8WqqNm.cjs} +2 -2
  505. package/dist/{span-payload-primitives-CjlNH9C-.cjs.map → span-payload-primitives-Dq8WqqNm.cjs.map} +1 -1
  506. package/dist/src/domains/capabilities/hooks/index.d.ts +3 -0
  507. package/dist/src/domains/capabilities/hooks/use-feedback-available.d.ts +8 -0
  508. package/dist/src/domains/capabilities/hooks/use-observability-capabilities.d.ts +22 -0
  509. package/dist/src/domains/capabilities/hooks/use-trace-query-available.d.ts +8 -0
  510. package/dist/src/domains/capabilities/index.d.ts +1 -0
  511. package/dist/src/domains/chat/messages/reasoning.d.ts +3 -1
  512. package/dist/src/domains/chat/messages/renderers/reasoning-part-renderer.d.ts +3 -1
  513. package/dist/src/domains/chat/stories/reasoning.stories.d.ts +1 -1
  514. package/dist/src/domains/memory/lib/timeline.d.ts +0 -1
  515. package/dist/src/domains/metrics/components/index.d.ts +1 -1
  516. package/dist/src/domains/metrics/components/kpi-card-view.d.ts +2 -1
  517. package/dist/src/domains/metrics/components/metrics-utils.d.ts +0 -2
  518. package/dist/src/domains/traces/components/trace-columns-menu.d.ts +3 -1
  519. package/dist/src/domains/traces/components/trace-data-panel-view.stories.d.ts +1 -1
  520. package/dist/src/domains/traces/hooks/index.d.ts +1 -0
  521. package/dist/src/domains/traces/hooks/use-trace-query.d.ts +19 -2
  522. package/dist/src/domains/traces/hooks/use-traces-list-source.d.ts +46 -0
  523. package/dist/src/domains/traces/trace-filters.d.ts +6 -1
  524. package/dist/src/domains/traces/utils/index.d.ts +1 -1
  525. package/dist/src/domains/traces/utils/span-utils.d.ts +1 -6
  526. package/dist/src/ds/components/Card/Card.d.ts +2 -2
  527. package/dist/src/ds/components/CompactNumber/compact-number.d.ts +6 -0
  528. package/dist/src/ds/components/CompactNumber/compact-number.stories.d.ts +7 -0
  529. package/dist/src/ds/components/CompactNumber/index.d.ts +1 -0
  530. package/dist/src/ds/components/DataList/data-list-cells.d.ts +4 -3
  531. package/dist/src/ds/components/InlineCode/index.d.ts +1 -0
  532. package/dist/src/ds/components/InlineCode/inline-code.d.ts +3 -0
  533. package/dist/src/ds/components/InlineCode/inline-code.stories.d.ts +13 -0
  534. package/dist/src/ds/components/ItemList/item-list-date-cell.d.ts +3 -2
  535. package/dist/src/ds/components/RelativeTimestamp/index.d.ts +1 -0
  536. package/dist/src/ds/components/RelativeTimestamp/relative-timestamp.d.ts +6 -0
  537. package/dist/src/ds/components/RelativeTimestamp/relative-timestamp.stories.d.ts +7 -0
  538. package/dist/src/ds/components/StatusIndicators/status-dot-styles.d.ts +31 -2
  539. package/dist/src/ds/components/StatusIndicators/status-dot.stories.d.ts +3 -4
  540. package/dist/src/ds/components/StatusIndicators/status.d.ts +2 -3
  541. package/dist/src/ds/components/StatusIndicators/status.stories.d.ts +2 -1
  542. package/dist/src/ds/components/Txt/Txt.d.ts +5 -1
  543. package/dist/src/ds/new/settings/settings-row.d.ts +3 -1
  544. package/dist/src/ds/new/settings/settings.stories.d.ts +1 -0
  545. package/dist/src/hooks/stories/state/use-elapsed-time.stories.d.ts +17 -0
  546. package/dist/src/hooks/use-elapsed-time.d.ts +2 -0
  547. package/dist/src/lib/cost.d.ts +6 -0
  548. package/dist/src/utils/cost.d.ts +1 -0
  549. package/dist/src/utils/date-format.d.ts +28 -0
  550. package/dist/src/utils/duration.d.ts +7 -1
  551. package/dist/src/utils/relative-time.d.ts +7 -0
  552. package/dist/style.css +25 -4
  553. package/dist/{text-field-block-DGIM1i3Z.js → text-field-block-BYPiO9h4.js} +2 -2
  554. package/dist/{text-field-block-DGIM1i3Z.js.map → text-field-block-BYPiO9h4.js.map} +1 -1
  555. package/dist/{text-field-block-DePCgDOh.cjs → text-field-block-CRh8sRXP.cjs} +2 -2
  556. package/dist/{text-field-block-DePCgDOh.cjs.map → text-field-block-CRh8sRXP.cjs.map} +1 -1
  557. package/dist/{tool-call-Bs-9Cah5.js → tool-call-CIeNEYpK.js} +2 -2
  558. package/dist/{tool-call-Bs-9Cah5.js.map → tool-call-CIeNEYpK.js.map} +1 -1
  559. package/dist/{tool-call-C0JeHe8Z.cjs → tool-call-CnEm3eE0.cjs} +2 -2
  560. package/dist/{tool-call-C0JeHe8Z.cjs.map → tool-call-CnEm3eE0.cjs.map} +1 -1
  561. package/dist/{traces-data-list-D3k50j4n.cjs → traces-data-list-C5KZesk6.cjs} +4 -4
  562. package/dist/{traces-data-list-D3k50j4n.cjs.map → traces-data-list-C5KZesk6.cjs.map} +1 -1
  563. package/dist/{traces-data-list-B5MkMMBi.js → traces-data-list-CdWW9J6z.js} +4 -4
  564. package/dist/{traces-data-list-B5MkMMBi.js.map → traces-data-list-CdWW9J6z.js.map} +1 -1
  565. package/dist/utils/cost.cjs.js +40 -0
  566. package/dist/utils/cost.cjs.js.map +1 -0
  567. package/dist/utils/cost.d.ts +2 -0
  568. package/dist/utils/cost.es.js +34 -0
  569. package/dist/utils/cost.es.js.map +1 -0
  570. package/dist/utils/date-format.cjs.js +99 -0
  571. package/dist/utils/date-format.cjs.js.map +1 -0
  572. package/dist/utils/date-format.d.ts +2 -0
  573. package/dist/utils/date-format.es.js +91 -0
  574. package/dist/utils/date-format.es.js.map +1 -0
  575. package/dist/utils/duration.cjs.js +19 -2
  576. package/dist/utils/duration.cjs.js.map +1 -1
  577. package/dist/utils/duration.es.js +18 -3
  578. package/dist/utils/duration.es.js.map +1 -1
  579. package/dist/utils/file.es.js +2 -2
  580. package/dist/utils/relative-time.cjs.js +12 -0
  581. package/dist/utils/relative-time.cjs.js.map +1 -0
  582. package/dist/utils/relative-time.d.ts +2 -0
  583. package/dist/utils/relative-time.es.js +8 -0
  584. package/dist/utils/relative-time.es.js.map +1 -0
  585. package/package.json +8 -8
  586. package/dist/Txt-B4-2nLaI.cjs.map +0 -1
  587. package/dist/Txt-DTh3Pa_a.js.map +0 -1
  588. package/dist/data-list-top-DpbOA3uw.js.map +0 -1
  589. package/dist/data-list-top-WGUY167p.cjs.map +0 -1
  590. package/dist/field-error-id-6EfqmQ4C.cjs.map +0 -1
  591. package/dist/field-error-id-DyWx33Fu.js.map +0 -1
  592. package/dist/settings-row-B2IekRyH.js.map +0 -1
  593. package/dist/settings-row-BoAuUUuH.cjs.map +0 -1
  594. package/dist/src/ds/components/Table/utils.d.ts +0 -4
@@ -9,11 +9,10 @@ const domains_traces_utils_spanTiming = require('../utils/span-timing.cjs.js');
9
9
  const domains_traces_components_spanTimingHoverCard = require('./span-timing-hover-card.cjs.js');
10
10
  const domains_traces_components_timelineStructureSign = require('./timeline-structure-sign.cjs.js');
11
11
  const hoverCard = require('../../../hover-card-DVfZ2INZ.cjs');
12
+ const Txt = require('../../../Txt-DPmEpNbp.cjs');
12
13
  const utils_cn = require('../../../cn-DG0X1KEP.cjs');
14
+ const utils_duration = require('../../../utils/duration.cjs.js');
13
15
 
14
- function formatDuration(ms) {
15
- return ms < 1e3 ? `${Math.round(ms)} ms` : `${(ms / 1e3).toFixed(2)} s`;
16
- }
17
16
  function SpanTimelineRow({ ctx }) {
18
17
  const {
19
18
  span,
@@ -124,7 +123,7 @@ function SpanTimelineRow({ ctx }) {
124
123
  }
125
124
  }
126
125
  ) }),
127
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-12 text-right text-meta text-muted-foreground tabular-nums", children: formatDuration(span.latency) })
126
+ /* @__PURE__ */ jsxRuntime.jsx(Txt.Txt, { as: "div", variant: "meta", tone: "muted", font: "mono", className: "w-12 text-right", children: utils_duration.formatDurationPrecise(span.latency) })
128
127
  ]
129
128
  }
130
129
  ),
@@ -1 +1 @@
1
- {"version":3,"file":"span-timeline-row.cjs.js","sources":["../../../../src/domains/traces/components/span-timeline-row.tsx"],"sourcesContent":["import { ChevronDownIcon, ChevronRightIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport { getSpanTimingLayout } from '../utils/span-timing';\nimport type { SpanRowContext } from './span-rows';\nimport { SpanTimingHoverCard } from './span-timing-hover-card';\nimport { TimelineStructureSign } from './timeline-structure-sign';\nimport { HoverCard, HoverCardTrigger } from '@/ds/components/HoverCard';\nimport { cn } from '@/lib/utils';\n\nexport type SpanTimelineRowProps = {\n ctx: SpanRowContext;\n};\n\nfunction formatDuration(ms: number) {\n return ms < 1000 ? `${Math.round(ms)} ms` : `${(ms / 1000).toFixed(2)} s`;\n}\n\n/**\n * One row of `TraceSpanTimeline`: compact single-line name cell plus a bar on the\n * shared trace time axis. The row spans both grid columns (subgrid) so hover and\n * selection cover the name and the bar together.\n */\nexport function SpanTimelineRow({ ctx }: SpanTimelineRowProps) {\n const {\n span,\n spanUI,\n depth,\n isRootSpan,\n isLastChild,\n isExpanded,\n isSelected,\n isFaded,\n isRevealed,\n overallLatency,\n overallStartTime,\n onSpanClick,\n expansion,\n } = ctx;\n const rowRef = useRef<HTMLDivElement>(null);\n const shouldScrollIntoView = isSelected || isRevealed;\n\n // Nested rows mount late, once expansion opens, so scroll on mount as well as on change.\n useEffect(() => {\n if (!shouldScrollIntoView) return;\n rowRef.current?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }, [shouldScrollIntoView]);\n\n const { startShiftMs, leftPercent, widthPercent } = getSpanTimingLayout(span, overallLatency, overallStartTime);\n const toggleLabel = isExpanded\n ? `Collapse children (${expansion.numOfChildren})`\n : `Expand children (${expansion.numOfChildren})`;\n\n return (\n <div\n ref={rowRef}\n aria-label={`View details for span ${span.name}`}\n aria-selected={isSelected}\n // The whole row selects the span; the name button is the keyboard target and its click bubbles here.\n onClick={() => onSpanClick?.(span.id)}\n className={cn(\n 'col-span-2 grid h-7 cursor-pointer grid-cols-subgrid items-stretch rounded-md opacity-80 hover:bg-fill-subtle',\n {\n 'opacity-40 dark:opacity-30 [&:hover]:opacity-70 dark:[&:hover]:opacity-60': isFaded,\n 'bg-fill-hover': isSelected,\n },\n )}\n >\n <div className=\"flex min-w-0 items-stretch\" style={{ paddingLeft: `${depth}rem` }}>\n {!isRootSpan && <TimelineStructureSign isLastChild={isLastChild} />}\n\n <button\n type=\"button\"\n className={cn(\n 'flex min-w-0 flex-1 cursor-pointer items-center gap-1.5 rounded-md px-2 text-left text-caption text-foreground',\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\n data-highlight={span.matchedInPayloadOnly ? undefined : ''}\n data-highlight-indirect={span.matchedInPayloadOnly ? '' : undefined}\n title={span.matchedInPayloadOnly ? 'Matches your search in this span’s details' : undefined}\n className=\"min-w-0 truncate\"\n >\n {span.name}\n </span>\n </button>\n\n {/* Slot is always present so names stay aligned whether or not the span has children. */}\n <div className=\"flex w-7 shrink-0 items-center justify-center\">\n {expansion.hasChildren && (\n <button\n type=\"button\"\n onClick={e => {\n e.stopPropagation();\n expansion.toggleChildren();\n }}\n aria-label={toggleLabel}\n aria-expanded={isExpanded}\n className={cn(\n 'flex size-5 cursor-pointer items-center justify-center rounded-md',\n 'hover:bg-fill [&:hover>svg]:opacity-100 [&>svg]:size-4 [&>svg]:opacity-50',\n 'focus:outline-none focus-visible:ring-1 focus-visible:ring-accent1',\n )}\n >\n {isExpanded ? <ChevronDownIcon /> : <ChevronRightIcon />}\n </button>\n )}\n </div>\n </div>\n\n <HoverCard>\n <HoverCardTrigger\n render={<div />}\n className=\"grid min-w-0 cursor-help grid-cols-[minmax(0,1fr)_auto] items-center gap-2 px-2\"\n >\n <div className=\"relative h-4 w-full rounded-sm bg-fill-subtle\">\n <div\n data-testid=\"span-timeline-bar\"\n className=\"absolute inset-y-0 rounded-sm\"\n style={{\n left: `${leftPercent}%`,\n width: widthPercent ? `${widthPercent}%` : '2px',\n backgroundColor: spanUI?.color,\n }}\n />\n </div>\n <div className=\"w-12 text-right text-meta text-muted-foreground tabular-nums\">\n {formatDuration(span.latency)}\n </div>\n </HoverCardTrigger>\n <SpanTimingHoverCard span={span} startShiftMs={startShiftMs} />\n </HoverCard>\n </div>\n );\n}\n"],"names":["useRef","useEffect","getSpanTimingLayout","jsxs","cn","jsx","TimelineStructureSign","ChevronDownIcon","ChevronRightIcon","HoverCard","HoverCardTrigger","SpanTimingHoverCard"],"mappings":"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"}
1
+ {"version":3,"file":"span-timeline-row.cjs.js","sources":["../../../../src/domains/traces/components/span-timeline-row.tsx"],"sourcesContent":["import { ChevronDownIcon, ChevronRightIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport { getSpanTimingLayout } from '../utils/span-timing';\nimport type { SpanRowContext } from './span-rows';\nimport { SpanTimingHoverCard } from './span-timing-hover-card';\nimport { TimelineStructureSign } from './timeline-structure-sign';\nimport { HoverCard, HoverCardTrigger } from '@/ds/components/HoverCard';\nimport { Txt } from '@/ds/components/Txt/Txt';\nimport { cn } from '@/lib/utils';\nimport { formatDurationPrecise } from '@/utils/duration';\n\nexport type SpanTimelineRowProps = {\n ctx: SpanRowContext;\n};\n\n/**\n * One row of `TraceSpanTimeline`: compact single-line name cell plus a bar on the\n * shared trace time axis. The row spans both grid columns (subgrid) so hover and\n * selection cover the name and the bar together.\n */\nexport function SpanTimelineRow({ ctx }: SpanTimelineRowProps) {\n const {\n span,\n spanUI,\n depth,\n isRootSpan,\n isLastChild,\n isExpanded,\n isSelected,\n isFaded,\n isRevealed,\n overallLatency,\n overallStartTime,\n onSpanClick,\n expansion,\n } = ctx;\n const rowRef = useRef<HTMLDivElement>(null);\n const shouldScrollIntoView = isSelected || isRevealed;\n\n // Nested rows mount late, once expansion opens, so scroll on mount as well as on change.\n useEffect(() => {\n if (!shouldScrollIntoView) return;\n rowRef.current?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }, [shouldScrollIntoView]);\n\n const { startShiftMs, leftPercent, widthPercent } = getSpanTimingLayout(span, overallLatency, overallStartTime);\n const toggleLabel = isExpanded\n ? `Collapse children (${expansion.numOfChildren})`\n : `Expand children (${expansion.numOfChildren})`;\n\n return (\n <div\n ref={rowRef}\n aria-label={`View details for span ${span.name}`}\n aria-selected={isSelected}\n // The whole row selects the span; the name button is the keyboard target and its click bubbles here.\n onClick={() => onSpanClick?.(span.id)}\n className={cn(\n 'col-span-2 grid h-7 cursor-pointer grid-cols-subgrid items-stretch rounded-md opacity-80 hover:bg-fill-subtle',\n {\n 'opacity-40 dark:opacity-30 [&:hover]:opacity-70 dark:[&:hover]:opacity-60': isFaded,\n 'bg-fill-hover': isSelected,\n },\n )}\n >\n <div className=\"flex min-w-0 items-stretch\" style={{ paddingLeft: `${depth}rem` }}>\n {!isRootSpan && <TimelineStructureSign isLastChild={isLastChild} />}\n\n <button\n type=\"button\"\n className={cn(\n 'flex min-w-0 flex-1 cursor-pointer items-center gap-1.5 rounded-md px-2 text-left text-caption text-foreground',\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\n data-highlight={span.matchedInPayloadOnly ? undefined : ''}\n data-highlight-indirect={span.matchedInPayloadOnly ? '' : undefined}\n title={span.matchedInPayloadOnly ? 'Matches your search in this span’s details' : undefined}\n className=\"min-w-0 truncate\"\n >\n {span.name}\n </span>\n </button>\n\n {/* Slot is always present so names stay aligned whether or not the span has children. */}\n <div className=\"flex w-7 shrink-0 items-center justify-center\">\n {expansion.hasChildren && (\n <button\n type=\"button\"\n onClick={e => {\n e.stopPropagation();\n expansion.toggleChildren();\n }}\n aria-label={toggleLabel}\n aria-expanded={isExpanded}\n className={cn(\n 'flex size-5 cursor-pointer items-center justify-center rounded-md',\n 'hover:bg-fill [&:hover>svg]:opacity-100 [&>svg]:size-4 [&>svg]:opacity-50',\n 'focus:outline-none focus-visible:ring-1 focus-visible:ring-accent1',\n )}\n >\n {isExpanded ? <ChevronDownIcon /> : <ChevronRightIcon />}\n </button>\n )}\n </div>\n </div>\n\n <HoverCard>\n <HoverCardTrigger\n render={<div />}\n className=\"grid min-w-0 cursor-help grid-cols-[minmax(0,1fr)_auto] items-center gap-2 px-2\"\n >\n <div className=\"relative h-4 w-full rounded-sm bg-fill-subtle\">\n <div\n data-testid=\"span-timeline-bar\"\n className=\"absolute inset-y-0 rounded-sm\"\n style={{\n left: `${leftPercent}%`,\n width: widthPercent ? `${widthPercent}%` : '2px',\n backgroundColor: spanUI?.color,\n }}\n />\n </div>\n <Txt as=\"div\" variant=\"meta\" tone=\"muted\" font=\"mono\" className=\"w-12 text-right\">\n {formatDurationPrecise(span.latency)}\n </Txt>\n </HoverCardTrigger>\n <SpanTimingHoverCard span={span} startShiftMs={startShiftMs} />\n </HoverCard>\n </div>\n );\n}\n"],"names":["useRef","useEffect","getSpanTimingLayout","jsxs","cn","jsx","TimelineStructureSign","ChevronDownIcon","ChevronRightIcon","HoverCard","HoverCardTrigger","Txt","formatDurationPrecise","SpanTimingHoverCard"],"mappings":"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"}
@@ -5,11 +5,10 @@ import { getSpanTimingLayout } from '../utils/span-timing.es.js';
5
5
  import { SpanTimingHoverCard } from './span-timing-hover-card.es.js';
6
6
  import { TimelineStructureSign } from './timeline-structure-sign.es.js';
7
7
  import { H as HoverCard, b as HoverCardTrigger } from '../../../hover-card-B1-n3amu.js';
8
+ import { T as Txt } from '../../../Txt-BP1SRHmL.js';
8
9
  import { c as cn } from '../../../cn-65Adrsfj.js';
10
+ import { formatDurationPrecise } from '../../../utils/duration.es.js';
9
11
 
10
- function formatDuration(ms) {
11
- return ms < 1e3 ? `${Math.round(ms)} ms` : `${(ms / 1e3).toFixed(2)} s`;
12
- }
13
12
  function SpanTimelineRow({ ctx }) {
14
13
  const {
15
14
  span,
@@ -120,7 +119,7 @@ function SpanTimelineRow({ ctx }) {
120
119
  }
121
120
  }
122
121
  ) }),
123
- /* @__PURE__ */ jsx("div", { className: "w-12 text-right text-meta text-muted-foreground tabular-nums", children: formatDuration(span.latency) })
122
+ /* @__PURE__ */ jsx(Txt, { as: "div", variant: "meta", tone: "muted", font: "mono", className: "w-12 text-right", children: formatDurationPrecise(span.latency) })
124
123
  ]
125
124
  }
126
125
  ),
@@ -1 +1 @@
1
- {"version":3,"file":"span-timeline-row.es.js","sources":["../../../../src/domains/traces/components/span-timeline-row.tsx"],"sourcesContent":["import { ChevronDownIcon, ChevronRightIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport { getSpanTimingLayout } from '../utils/span-timing';\nimport type { SpanRowContext } from './span-rows';\nimport { SpanTimingHoverCard } from './span-timing-hover-card';\nimport { TimelineStructureSign } from './timeline-structure-sign';\nimport { HoverCard, HoverCardTrigger } from '@/ds/components/HoverCard';\nimport { cn } from '@/lib/utils';\n\nexport type SpanTimelineRowProps = {\n ctx: SpanRowContext;\n};\n\nfunction formatDuration(ms: number) {\n return ms < 1000 ? `${Math.round(ms)} ms` : `${(ms / 1000).toFixed(2)} s`;\n}\n\n/**\n * One row of `TraceSpanTimeline`: compact single-line name cell plus a bar on the\n * shared trace time axis. The row spans both grid columns (subgrid) so hover and\n * selection cover the name and the bar together.\n */\nexport function SpanTimelineRow({ ctx }: SpanTimelineRowProps) {\n const {\n span,\n spanUI,\n depth,\n isRootSpan,\n isLastChild,\n isExpanded,\n isSelected,\n isFaded,\n isRevealed,\n overallLatency,\n overallStartTime,\n onSpanClick,\n expansion,\n } = ctx;\n const rowRef = useRef<HTMLDivElement>(null);\n const shouldScrollIntoView = isSelected || isRevealed;\n\n // Nested rows mount late, once expansion opens, so scroll on mount as well as on change.\n useEffect(() => {\n if (!shouldScrollIntoView) return;\n rowRef.current?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }, [shouldScrollIntoView]);\n\n const { startShiftMs, leftPercent, widthPercent } = getSpanTimingLayout(span, overallLatency, overallStartTime);\n const toggleLabel = isExpanded\n ? `Collapse children (${expansion.numOfChildren})`\n : `Expand children (${expansion.numOfChildren})`;\n\n return (\n <div\n ref={rowRef}\n aria-label={`View details for span ${span.name}`}\n aria-selected={isSelected}\n // The whole row selects the span; the name button is the keyboard target and its click bubbles here.\n onClick={() => onSpanClick?.(span.id)}\n className={cn(\n 'col-span-2 grid h-7 cursor-pointer grid-cols-subgrid items-stretch rounded-md opacity-80 hover:bg-fill-subtle',\n {\n 'opacity-40 dark:opacity-30 [&:hover]:opacity-70 dark:[&:hover]:opacity-60': isFaded,\n 'bg-fill-hover': isSelected,\n },\n )}\n >\n <div className=\"flex min-w-0 items-stretch\" style={{ paddingLeft: `${depth}rem` }}>\n {!isRootSpan && <TimelineStructureSign isLastChild={isLastChild} />}\n\n <button\n type=\"button\"\n className={cn(\n 'flex min-w-0 flex-1 cursor-pointer items-center gap-1.5 rounded-md px-2 text-left text-caption text-foreground',\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\n data-highlight={span.matchedInPayloadOnly ? undefined : ''}\n data-highlight-indirect={span.matchedInPayloadOnly ? '' : undefined}\n title={span.matchedInPayloadOnly ? 'Matches your search in this span’s details' : undefined}\n className=\"min-w-0 truncate\"\n >\n {span.name}\n </span>\n </button>\n\n {/* Slot is always present so names stay aligned whether or not the span has children. */}\n <div className=\"flex w-7 shrink-0 items-center justify-center\">\n {expansion.hasChildren && (\n <button\n type=\"button\"\n onClick={e => {\n e.stopPropagation();\n expansion.toggleChildren();\n }}\n aria-label={toggleLabel}\n aria-expanded={isExpanded}\n className={cn(\n 'flex size-5 cursor-pointer items-center justify-center rounded-md',\n 'hover:bg-fill [&:hover>svg]:opacity-100 [&>svg]:size-4 [&>svg]:opacity-50',\n 'focus:outline-none focus-visible:ring-1 focus-visible:ring-accent1',\n )}\n >\n {isExpanded ? <ChevronDownIcon /> : <ChevronRightIcon />}\n </button>\n )}\n </div>\n </div>\n\n <HoverCard>\n <HoverCardTrigger\n render={<div />}\n className=\"grid min-w-0 cursor-help grid-cols-[minmax(0,1fr)_auto] items-center gap-2 px-2\"\n >\n <div className=\"relative h-4 w-full rounded-sm bg-fill-subtle\">\n <div\n data-testid=\"span-timeline-bar\"\n className=\"absolute inset-y-0 rounded-sm\"\n style={{\n left: `${leftPercent}%`,\n width: widthPercent ? `${widthPercent}%` : '2px',\n backgroundColor: spanUI?.color,\n }}\n />\n </div>\n <div className=\"w-12 text-right text-meta text-muted-foreground tabular-nums\">\n {formatDuration(span.latency)}\n </div>\n </HoverCardTrigger>\n <SpanTimingHoverCard span={span} startShiftMs={startShiftMs} />\n </HoverCard>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"span-timeline-row.es.js","sources":["../../../../src/domains/traces/components/span-timeline-row.tsx"],"sourcesContent":["import { ChevronDownIcon, ChevronRightIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport { getSpanTimingLayout } from '../utils/span-timing';\nimport type { SpanRowContext } from './span-rows';\nimport { SpanTimingHoverCard } from './span-timing-hover-card';\nimport { TimelineStructureSign } from './timeline-structure-sign';\nimport { HoverCard, HoverCardTrigger } from '@/ds/components/HoverCard';\nimport { Txt } from '@/ds/components/Txt/Txt';\nimport { cn } from '@/lib/utils';\nimport { formatDurationPrecise } from '@/utils/duration';\n\nexport type SpanTimelineRowProps = {\n ctx: SpanRowContext;\n};\n\n/**\n * One row of `TraceSpanTimeline`: compact single-line name cell plus a bar on the\n * shared trace time axis. The row spans both grid columns (subgrid) so hover and\n * selection cover the name and the bar together.\n */\nexport function SpanTimelineRow({ ctx }: SpanTimelineRowProps) {\n const {\n span,\n spanUI,\n depth,\n isRootSpan,\n isLastChild,\n isExpanded,\n isSelected,\n isFaded,\n isRevealed,\n overallLatency,\n overallStartTime,\n onSpanClick,\n expansion,\n } = ctx;\n const rowRef = useRef<HTMLDivElement>(null);\n const shouldScrollIntoView = isSelected || isRevealed;\n\n // Nested rows mount late, once expansion opens, so scroll on mount as well as on change.\n useEffect(() => {\n if (!shouldScrollIntoView) return;\n rowRef.current?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }, [shouldScrollIntoView]);\n\n const { startShiftMs, leftPercent, widthPercent } = getSpanTimingLayout(span, overallLatency, overallStartTime);\n const toggleLabel = isExpanded\n ? `Collapse children (${expansion.numOfChildren})`\n : `Expand children (${expansion.numOfChildren})`;\n\n return (\n <div\n ref={rowRef}\n aria-label={`View details for span ${span.name}`}\n aria-selected={isSelected}\n // The whole row selects the span; the name button is the keyboard target and its click bubbles here.\n onClick={() => onSpanClick?.(span.id)}\n className={cn(\n 'col-span-2 grid h-7 cursor-pointer grid-cols-subgrid items-stretch rounded-md opacity-80 hover:bg-fill-subtle',\n {\n 'opacity-40 dark:opacity-30 [&:hover]:opacity-70 dark:[&:hover]:opacity-60': isFaded,\n 'bg-fill-hover': isSelected,\n },\n )}\n >\n <div className=\"flex min-w-0 items-stretch\" style={{ paddingLeft: `${depth}rem` }}>\n {!isRootSpan && <TimelineStructureSign isLastChild={isLastChild} />}\n\n <button\n type=\"button\"\n className={cn(\n 'flex min-w-0 flex-1 cursor-pointer items-center gap-1.5 rounded-md px-2 text-left text-caption text-foreground',\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\n data-highlight={span.matchedInPayloadOnly ? undefined : ''}\n data-highlight-indirect={span.matchedInPayloadOnly ? '' : undefined}\n title={span.matchedInPayloadOnly ? 'Matches your search in this span’s details' : undefined}\n className=\"min-w-0 truncate\"\n >\n {span.name}\n </span>\n </button>\n\n {/* Slot is always present so names stay aligned whether or not the span has children. */}\n <div className=\"flex w-7 shrink-0 items-center justify-center\">\n {expansion.hasChildren && (\n <button\n type=\"button\"\n onClick={e => {\n e.stopPropagation();\n expansion.toggleChildren();\n }}\n aria-label={toggleLabel}\n aria-expanded={isExpanded}\n className={cn(\n 'flex size-5 cursor-pointer items-center justify-center rounded-md',\n 'hover:bg-fill [&:hover>svg]:opacity-100 [&>svg]:size-4 [&>svg]:opacity-50',\n 'focus:outline-none focus-visible:ring-1 focus-visible:ring-accent1',\n )}\n >\n {isExpanded ? <ChevronDownIcon /> : <ChevronRightIcon />}\n </button>\n )}\n </div>\n </div>\n\n <HoverCard>\n <HoverCardTrigger\n render={<div />}\n className=\"grid min-w-0 cursor-help grid-cols-[minmax(0,1fr)_auto] items-center gap-2 px-2\"\n >\n <div className=\"relative h-4 w-full rounded-sm bg-fill-subtle\">\n <div\n data-testid=\"span-timeline-bar\"\n className=\"absolute inset-y-0 rounded-sm\"\n style={{\n left: `${leftPercent}%`,\n width: widthPercent ? `${widthPercent}%` : '2px',\n backgroundColor: spanUI?.color,\n }}\n />\n </div>\n <Txt as=\"div\" variant=\"meta\" tone=\"muted\" font=\"mono\" className=\"w-12 text-right\">\n {formatDurationPrecise(span.latency)}\n </Txt>\n </HoverCardTrigger>\n <SpanTimingHoverCard span={span} startShiftMs={startShiftMs} />\n </HoverCard>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -3,29 +3,24 @@
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
5
  const jsxRuntime = require('react/jsx-runtime');
6
- const format = require('date-fns/format');
7
6
  const dataKeysAndValues = require('../../../data-keys-and-values-CMJ9zHKm.cjs');
8
7
  const hoverCard = require('../../../hover-card-DVfZ2INZ.cjs');
9
8
  const utils_cn = require('../../../cn-DG0X1KEP.cjs');
9
+ const utils_dateFormat = require('../../../utils/date-format.cjs.js');
10
+ const utils_duration = require('../../../utils/duration.cjs.js');
10
11
 
11
12
  function SpanTimingHoverCard({ span, startShiftMs }) {
12
13
  return /* @__PURE__ */ jsxRuntime.jsxs(hoverCard.HoverCardContent, { className: "pr-6", children: [
13
14
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils_cn.cn("mt-1 mb-2 flex items-center gap-2 text-caption"), children: "Span Timing" }),
14
15
  /* @__PURE__ */ jsxRuntime.jsxs(dataKeysAndValues.DataKeysAndValues, { children: [
15
16
  /* @__PURE__ */ jsxRuntime.jsx(dataKeysAndValues.DataKeysAndValues.Key, { children: "Latency" }),
16
- /* @__PURE__ */ jsxRuntime.jsxs(dataKeysAndValues.DataKeysAndValues.Value, { children: [
17
- span.latency,
18
- " ms"
19
- ] }),
17
+ /* @__PURE__ */ jsxRuntime.jsx(dataKeysAndValues.DataKeysAndValues.Value, { children: utils_duration.formatDurationPrecise(span.latency) ?? "-" }),
20
18
  /* @__PURE__ */ jsxRuntime.jsx(dataKeysAndValues.DataKeysAndValues.Key, { children: "Started at" }),
21
- /* @__PURE__ */ jsxRuntime.jsx(dataKeysAndValues.DataKeysAndValues.Value, { children: span.startTime ? format.format(new Date(span.startTime), "hh:mm:ss:SSS a") : "-" }),
19
+ /* @__PURE__ */ jsxRuntime.jsx(dataKeysAndValues.DataKeysAndValues.Value, { children: utils_dateFormat.formatTimestampPrecise(span.startTime) ?? "-" }),
22
20
  /* @__PURE__ */ jsxRuntime.jsx(dataKeysAndValues.DataKeysAndValues.Key, { children: "Ended at" }),
23
- /* @__PURE__ */ jsxRuntime.jsx(dataKeysAndValues.DataKeysAndValues.Value, { children: span.endTime ? format.format(new Date(span.endTime), "hh:mm:ss:SSS a") : "-" }),
21
+ /* @__PURE__ */ jsxRuntime.jsx(dataKeysAndValues.DataKeysAndValues.Value, { children: utils_dateFormat.formatTimestampPrecise(span.endTime) ?? "-" }),
24
22
  /* @__PURE__ */ jsxRuntime.jsx(dataKeysAndValues.DataKeysAndValues.Key, { children: "Start Shift" }),
25
- /* @__PURE__ */ jsxRuntime.jsxs(dataKeysAndValues.DataKeysAndValues.Value, { children: [
26
- startShiftMs,
27
- "ms"
28
- ] })
23
+ /* @__PURE__ */ jsxRuntime.jsx(dataKeysAndValues.DataKeysAndValues.Value, { children: utils_duration.formatDurationPrecise(startShiftMs) ?? "-" })
29
24
  ] })
30
25
  ] });
31
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"span-timing-hover-card.cjs.js","sources":["../../../../src/domains/traces/components/span-timing-hover-card.tsx"],"sourcesContent":["import { format } from 'date-fns/format';\nimport type { UISpan } from '../types';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { HoverCardContent } from '@/ds/components/HoverCard';\nimport { cn } from '@/lib/utils';\n\ntype SpanTimingHoverCardProps = {\n span: UISpan;\n startShiftMs: number;\n};\n\nexport function SpanTimingHoverCard({ span, startShiftMs }: SpanTimingHoverCardProps) {\n return (\n <HoverCardContent className=\"pr-6\">\n <div className={cn('mt-1 mb-2 flex items-center gap-2 text-caption')}>Span Timing</div>\n <DataKeysAndValues>\n <DataKeysAndValues.Key>Latency</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.latency} ms</DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Started at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {span.startTime ? format(new Date(span.startTime), 'hh:mm:ss:SSS a') : '-'}\n </DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Ended at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {span.endTime ? format(new Date(span.endTime), 'hh:mm:ss:SSS a') : '-'}\n </DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Start Shift</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{startShiftMs}ms</DataKeysAndValues.Value>\n </DataKeysAndValues>\n </HoverCardContent>\n );\n}\n"],"names":["jsxs","HoverCardContent","jsx","cn","DataKeysAndValues","format"],"mappings":";;;;;;;;;;AAWO,SAAS,mBAAA,CAAoB,EAAE,IAAA,EAAM,YAAA,EAAa,EAA6B;AACpF,EAAA,uBACEA,eAAA,CAACC,0BAAA,EAAA,EAAiB,SAAA,EAAU,MAAA,EAC1B,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,WAAA,CAAG,gDAAgD,GAAG,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,oCAChFC,mCAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAACE,mCAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,sBAC9BJ,eAAA,CAACI,mCAAA,CAAkB,KAAA,EAAlB,EAAyB,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,OAAA;AAAA,QAAQ;AAAA,OAAA,EAAG,CAAA;AAAA,sBAC1CF,cAAA,CAACE,mCAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,sBACjCF,cAAA,CAACE,mCAAA,CAAkB,KAAA,EAAlB,EACE,eAAK,SAAA,GAAYC,aAAA,CAAO,IAAI,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,EAAG,gBAAgB,IAAI,GAAA,EACzE,CAAA;AAAA,sBACAH,cAAA,CAACE,mCAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,sBAC/BF,cAAA,CAACE,mCAAA,CAAkB,KAAA,EAAlB,EACE,eAAK,OAAA,GAAUC,aAAA,CAAO,IAAI,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,EAAG,gBAAgB,IAAI,GAAA,EACrE,CAAA;AAAA,sBACAH,cAAA,CAACE,mCAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,sBAClCJ,eAAA,CAACI,mCAAA,CAAkB,KAAA,EAAlB,EAAyB,QAAA,EAAA;AAAA,QAAA,YAAA;AAAA,QAAa;AAAA,OAAA,EAAE;AAAA,KAAA,EAC3C;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"span-timing-hover-card.cjs.js","sources":["../../../../src/domains/traces/components/span-timing-hover-card.tsx"],"sourcesContent":["import type { UISpan } from '../types';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { HoverCardContent } from '@/ds/components/HoverCard';\nimport { cn } from '@/lib/utils';\nimport { formatTimestampPrecise } from '@/utils/date-format';\nimport { formatDurationPrecise } from '@/utils/duration';\n\ntype SpanTimingHoverCardProps = {\n span: UISpan;\n startShiftMs: number;\n};\n\nexport function SpanTimingHoverCard({ span, startShiftMs }: SpanTimingHoverCardProps) {\n return (\n <HoverCardContent className=\"pr-6\">\n <div className={cn('mt-1 mb-2 flex items-center gap-2 text-caption')}>Span Timing</div>\n <DataKeysAndValues>\n <DataKeysAndValues.Key>Latency</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{formatDurationPrecise(span.latency) ?? '-'}</DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Started at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{formatTimestampPrecise(span.startTime) ?? '-'}</DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Ended at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{formatTimestampPrecise(span.endTime) ?? '-'}</DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Start Shift</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{formatDurationPrecise(startShiftMs) ?? '-'}</DataKeysAndValues.Value>\n </DataKeysAndValues>\n </HoverCardContent>\n );\n}\n"],"names":["jsxs","HoverCardContent","jsx","cn","DataKeysAndValues","formatDurationPrecise"],"mappings":";;;;;;;;;;;AAYO,SAAS,mBAAA,CAAoB,EAAE,IAAA,EAAM,YAAA,EAAa,EAA6B;AACpF,EAAA,uBACEA,eAAA,CAACC,0BAAA,EAAA,EAAiB,SAAA,EAAU,MAAA,EAC1B,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,WAAA,CAAG,gDAAgD,GAAG,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,oCAChFC,mCAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAACE,mCAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,sBAC9BF,cAAA,CAACE,oCAAkB,KAAA,EAAlB,EAAyB,+CAAsB,IAAA,CAAK,OAAO,KAAK,GAAA,EAAI,CAAA;AAAA,sBACrEF,cAAA,CAACE,mCAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,sBACjCF,cAAA,CAACE,oCAAkB,KAAA,EAAlB,EAAyB,kDAAuB,IAAA,CAAK,SAAS,KAAK,GAAA,EAAI,CAAA;AAAA,sBACxEF,cAAA,CAACE,mCAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,sBAC/BF,cAAA,CAACE,oCAAkB,KAAA,EAAlB,EAAyB,kDAAuB,IAAA,CAAK,OAAO,KAAK,GAAA,EAAI,CAAA;AAAA,sBACtEF,cAAA,CAACE,mCAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,qCACjCA,mCAAA,CAAkB,KAAA,EAAlB,EAAyB,QAAA,EAAAC,oCAAA,CAAsB,YAAY,KAAK,GAAA,EAAI;AAAA,KAAA,EACvE;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1,27 +1,22 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { format } from 'date-fns/format';
3
2
  import { D as DataKeysAndValues } from '../../../data-keys-and-values-BTYDB-K2.js';
4
3
  import { a as HoverCardContent } from '../../../hover-card-B1-n3amu.js';
5
4
  import { c as cn } from '../../../cn-65Adrsfj.js';
5
+ import { formatTimestampPrecise } from '../../../utils/date-format.es.js';
6
+ import { formatDurationPrecise } from '../../../utils/duration.es.js';
6
7
 
7
8
  function SpanTimingHoverCard({ span, startShiftMs }) {
8
9
  return /* @__PURE__ */ jsxs(HoverCardContent, { className: "pr-6", children: [
9
10
  /* @__PURE__ */ jsx("div", { className: cn("mt-1 mb-2 flex items-center gap-2 text-caption"), children: "Span Timing" }),
10
11
  /* @__PURE__ */ jsxs(DataKeysAndValues, { children: [
11
12
  /* @__PURE__ */ jsx(DataKeysAndValues.Key, { children: "Latency" }),
12
- /* @__PURE__ */ jsxs(DataKeysAndValues.Value, { children: [
13
- span.latency,
14
- " ms"
15
- ] }),
13
+ /* @__PURE__ */ jsx(DataKeysAndValues.Value, { children: formatDurationPrecise(span.latency) ?? "-" }),
16
14
  /* @__PURE__ */ jsx(DataKeysAndValues.Key, { children: "Started at" }),
17
- /* @__PURE__ */ jsx(DataKeysAndValues.Value, { children: span.startTime ? format(new Date(span.startTime), "hh:mm:ss:SSS a") : "-" }),
15
+ /* @__PURE__ */ jsx(DataKeysAndValues.Value, { children: formatTimestampPrecise(span.startTime) ?? "-" }),
18
16
  /* @__PURE__ */ jsx(DataKeysAndValues.Key, { children: "Ended at" }),
19
- /* @__PURE__ */ jsx(DataKeysAndValues.Value, { children: span.endTime ? format(new Date(span.endTime), "hh:mm:ss:SSS a") : "-" }),
17
+ /* @__PURE__ */ jsx(DataKeysAndValues.Value, { children: formatTimestampPrecise(span.endTime) ?? "-" }),
20
18
  /* @__PURE__ */ jsx(DataKeysAndValues.Key, { children: "Start Shift" }),
21
- /* @__PURE__ */ jsxs(DataKeysAndValues.Value, { children: [
22
- startShiftMs,
23
- "ms"
24
- ] })
19
+ /* @__PURE__ */ jsx(DataKeysAndValues.Value, { children: formatDurationPrecise(startShiftMs) ?? "-" })
25
20
  ] })
26
21
  ] });
27
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"span-timing-hover-card.es.js","sources":["../../../../src/domains/traces/components/span-timing-hover-card.tsx"],"sourcesContent":["import { format } from 'date-fns/format';\nimport type { UISpan } from '../types';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { HoverCardContent } from '@/ds/components/HoverCard';\nimport { cn } from '@/lib/utils';\n\ntype SpanTimingHoverCardProps = {\n span: UISpan;\n startShiftMs: number;\n};\n\nexport function SpanTimingHoverCard({ span, startShiftMs }: SpanTimingHoverCardProps) {\n return (\n <HoverCardContent className=\"pr-6\">\n <div className={cn('mt-1 mb-2 flex items-center gap-2 text-caption')}>Span Timing</div>\n <DataKeysAndValues>\n <DataKeysAndValues.Key>Latency</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.latency} ms</DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Started at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {span.startTime ? format(new Date(span.startTime), 'hh:mm:ss:SSS a') : '-'}\n </DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Ended at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {span.endTime ? format(new Date(span.endTime), 'hh:mm:ss:SSS a') : '-'}\n </DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Start Shift</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{startShiftMs}ms</DataKeysAndValues.Value>\n </DataKeysAndValues>\n </HoverCardContent>\n );\n}\n"],"names":[],"mappings":";;;;;;AAWO,SAAS,mBAAA,CAAoB,EAAE,IAAA,EAAM,YAAA,EAAa,EAA6B;AACpF,EAAA,uBACE,IAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,MAAA,EAC1B,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,gDAAgD,GAAG,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,yBAChF,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,iBAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,sBAC9B,IAAA,CAAC,iBAAA,CAAkB,KAAA,EAAlB,EAAyB,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,OAAA;AAAA,QAAQ;AAAA,OAAA,EAAG,CAAA;AAAA,sBAC1C,GAAA,CAAC,iBAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,sBACjC,GAAA,CAAC,iBAAA,CAAkB,KAAA,EAAlB,EACE,eAAK,SAAA,GAAY,MAAA,CAAO,IAAI,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,EAAG,gBAAgB,IAAI,GAAA,EACzE,CAAA;AAAA,sBACA,GAAA,CAAC,iBAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,sBAC/B,GAAA,CAAC,iBAAA,CAAkB,KAAA,EAAlB,EACE,eAAK,OAAA,GAAU,MAAA,CAAO,IAAI,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,EAAG,gBAAgB,IAAI,GAAA,EACrE,CAAA;AAAA,sBACA,GAAA,CAAC,iBAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,sBAClC,IAAA,CAAC,iBAAA,CAAkB,KAAA,EAAlB,EAAyB,QAAA,EAAA;AAAA,QAAA,YAAA;AAAA,QAAa;AAAA,OAAA,EAAE;AAAA,KAAA,EAC3C;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"span-timing-hover-card.es.js","sources":["../../../../src/domains/traces/components/span-timing-hover-card.tsx"],"sourcesContent":["import type { UISpan } from '../types';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { HoverCardContent } from '@/ds/components/HoverCard';\nimport { cn } from '@/lib/utils';\nimport { formatTimestampPrecise } from '@/utils/date-format';\nimport { formatDurationPrecise } from '@/utils/duration';\n\ntype SpanTimingHoverCardProps = {\n span: UISpan;\n startShiftMs: number;\n};\n\nexport function SpanTimingHoverCard({ span, startShiftMs }: SpanTimingHoverCardProps) {\n return (\n <HoverCardContent className=\"pr-6\">\n <div className={cn('mt-1 mb-2 flex items-center gap-2 text-caption')}>Span Timing</div>\n <DataKeysAndValues>\n <DataKeysAndValues.Key>Latency</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{formatDurationPrecise(span.latency) ?? '-'}</DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Started at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{formatTimestampPrecise(span.startTime) ?? '-'}</DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Ended at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{formatTimestampPrecise(span.endTime) ?? '-'}</DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Start Shift</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{formatDurationPrecise(startShiftMs) ?? '-'}</DataKeysAndValues.Value>\n </DataKeysAndValues>\n </HoverCardContent>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAYO,SAAS,mBAAA,CAAoB,EAAE,IAAA,EAAM,YAAA,EAAa,EAA6B;AACpF,EAAA,uBACE,IAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,MAAA,EAC1B,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,gDAAgD,GAAG,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,yBAChF,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,iBAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,sBAC9B,GAAA,CAAC,kBAAkB,KAAA,EAAlB,EAAyB,gCAAsB,IAAA,CAAK,OAAO,KAAK,GAAA,EAAI,CAAA;AAAA,sBACrE,GAAA,CAAC,iBAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,sBACjC,GAAA,CAAC,kBAAkB,KAAA,EAAlB,EAAyB,iCAAuB,IAAA,CAAK,SAAS,KAAK,GAAA,EAAI,CAAA;AAAA,sBACxE,GAAA,CAAC,iBAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,sBAC/B,GAAA,CAAC,kBAAkB,KAAA,EAAlB,EAAyB,iCAAuB,IAAA,CAAK,OAAO,KAAK,GAAA,EAAI,CAAA;AAAA,sBACtE,GAAA,CAAC,iBAAA,CAAkB,GAAA,EAAlB,EAAsB,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,0BACjC,iBAAA,CAAkB,KAAA,EAAlB,EAAyB,QAAA,EAAA,qBAAA,CAAsB,YAAY,KAAK,GAAA,EAAI;AAAA,KAAA,EACvE;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
5
  const jsxRuntime = require('react/jsx-runtime');
6
6
  const domains_traces_components_threadTrace_threadTraceRowContext = require('./thread-trace-row-context.cjs.js');
7
- const dataPanel = require('../../../../data-panel-XPXrhYJI.cjs');
7
+ const dataPanel = require('../../../../data-panel-C_BqhzeL.cjs');
8
8
  const utils_cn = require('../../../../cn-DG0X1KEP.cjs');
9
9
 
10
10
  function ThreadTraceDetails({ className, children, ...props }) {
@@ -1,6 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { useThreadTraceRow } from './thread-trace-row-context.es.js';
3
- import { D as DataPanel } from '../../../../data-panel-BQVTKo86.js';
3
+ import { D as DataPanel } from '../../../../data-panel-BWgExbHs.js';
4
4
  import { c as cn } from '../../../../cn-65Adrsfj.js';
5
5
 
6
6
  function ThreadTraceDetails({ className, children, ...props }) {
@@ -5,7 +5,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
  const jsxRuntime = require('react/jsx-runtime');
6
6
  const domains_traces_components_threadTrace_threadTraceRow = require('./thread-trace-row.cjs.js');
7
7
  const domains_traces_components_threadTrace_threadTraceRowContext = require('./thread-trace-row-context.cjs.js');
8
- const dataPanel = require('../../../../data-panel-XPXrhYJI.cjs');
8
+ const dataPanel = require('../../../../data-panel-C_BqhzeL.cjs');
9
9
  const tabsRoot = require('../../../../tabs-root-COCL6jcx.cjs');
10
10
  const tabsTab = require('../../../../tabs-tab-DFmRMdi3.cjs');
11
11
  const tabsContent = require('../../../../tabs-content-DlCJoQUW.cjs');
@@ -1,7 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { THREAD_TRACE_MESSAGES_TAB } from './thread-trace-row.es.js';
3
3
  import { useThreadTraceRow } from './thread-trace-row-context.es.js';
4
- import { D as DataPanel } from '../../../../data-panel-BQVTKo86.js';
4
+ import { D as DataPanel } from '../../../../data-panel-BWgExbHs.js';
5
5
  import { T as TabList, a as Tabs } from '../../../../tabs-root-UNPxoGhW.js';
6
6
  import { T as Tab } from '../../../../tabs-tab-DluwCnDF.js';
7
7
  import { T as TabContent } from '../../../../tabs-content-7ODUUdQ0.js';
@@ -6,7 +6,9 @@ const jsxRuntime = require('react/jsx-runtime');
6
6
  const domains_traces_utils_spanTiming = require('../utils/span-timing.cjs.js');
7
7
  const domains_traces_components_spanTimingHoverCard = require('./span-timing-hover-card.cjs.js');
8
8
  const hoverCard = require('../../../hover-card-DVfZ2INZ.cjs');
9
+ const Txt = require('../../../Txt-DPmEpNbp.cjs');
9
10
  const utils_cn = require('../../../cn-DG0X1KEP.cjs');
11
+ const utils_duration = require('../../../utils/duration.cjs.js');
10
12
 
11
13
  function TimelineTimingCol({
12
14
  span,
@@ -43,10 +45,7 @@ function TimelineTimingCol({
43
45
  }
44
46
  }
45
47
  ) }) }),
46
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils_cn.cn("flex justify-end text-meta text-muted-foreground"), children: [
47
- (span.latency / 1e3).toFixed(3),
48
- " s"
49
- ] })
48
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils_cn.cn("flex justify-end text-meta text-muted-foreground"), children: /* @__PURE__ */ jsxRuntime.jsx(Txt.Txt, { as: "span", variant: "meta", font: "mono", children: utils_duration.formatDurationPrecise(span.latency) }) })
50
49
  ]
51
50
  }
52
51
  ),
@@ -1 +1 @@
1
- {"version":3,"file":"timeline-timing-col.cjs.js","sources":["../../../../src/domains/traces/components/timeline-timing-col.tsx"],"sourcesContent":["import type { UISpan } from '../types';\nimport { getSpanTimingLayout } from '../utils/span-timing';\nimport { SpanTimingHoverCard } from './span-timing-hover-card';\nimport { HoverCard, HoverCardTrigger } from '@/ds/components/HoverCard';\nimport { cn } from '@/lib/utils';\n\ntype TimelineTimingColProps = {\n span: UISpan;\n selectedSpanId?: string;\n isFaded?: boolean;\n overallLatency?: number;\n overallStartTime?: string;\n color?: string;\n chartWidth?: 'wide' | 'default';\n};\n\nexport function TimelineTimingCol({\n span,\n selectedSpanId,\n isFaded,\n overallLatency,\n overallStartTime,\n color,\n chartWidth = 'default',\n}: TimelineTimingColProps) {\n const { startShiftMs, leftPercent, widthPercent } = getSpanTimingLayout(span, overallLatency, overallStartTime);\n\n return (\n <HoverCard>\n <HoverCardTrigger\n className={cn(\n 'grid h-8 cursor-help grid-cols-[1fr_auto] items-center gap-2 rounded-r-md p-1 pr-2',\n chartWidth === 'wide' ? 'min-w-72' : 'min-w-32',\n '[&:hover>div]:bg-fill',\n {\n 'opacity-40 dark:opacity-30 [&:hover]:opacity-70 dark:[&:hover]:opacity-60': isFaded,\n 'bg-fill-hover': selectedSpanId === span.id,\n },\n )}\n >\n <div className={cn('w-full rounded-md bg-muted p-1.5')}>\n <div className=\"relative h-1.5 w-full overflow-hidden rounded-sm\">\n <div\n className={cn('absolute top-0 h-1.5 rounded-sm bg-placeholder')}\n style={{\n width: widthPercent ? `${widthPercent}%` : '2px',\n left: `${leftPercent}%`,\n backgroundColor: color,\n }}\n ></div>\n </div>\n </div>\n\n <div className={cn('flex justify-end text-meta text-muted-foreground')}>\n {(span.latency / 1000).toFixed(3)}&nbsp;s\n </div>\n </HoverCardTrigger>\n <SpanTimingHoverCard span={span} startShiftMs={startShiftMs} />\n </HoverCard>\n );\n}\n"],"names":["getSpanTimingLayout","HoverCard","jsxs","HoverCardTrigger","cn","jsx","SpanTimingHoverCard"],"mappings":";;;;;;;;;;AAgBO,SAAS,iBAAA,CAAkB;AAAA,EAChC,IAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,EAA2B;AACzB,EAAA,MAAM,EAAE,cAAc,WAAA,EAAa,YAAA,KAAiBA,mDAAA,CAAoB,IAAA,EAAM,gBAAgB,gBAAgB,CAAA;AAE9G,EAAA,uCACGC,mBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAC,eAAA;AAAA,MAACC,0BAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWC,WAAA;AAAA,UACT,oFAAA;AAAA,UACA,UAAA,KAAe,SAAS,UAAA,GAAa,UAAA;AAAA,UACrC,uBAAA;AAAA,UACA;AAAA,YACE,2EAAA,EAA6E,OAAA;AAAA,YAC7E,eAAA,EAAiB,mBAAmB,IAAA,CAAK;AAAA;AAC3C,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,WAAWD,WAAA,CAAG,kCAAkC,GACnD,QAAA,kBAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kDAAA,EACb,QAAA,kBAAAA,cAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAWD,YAAG,gDAAgD,CAAA;AAAA,cAC9D,KAAA,EAAO;AAAA,gBACL,KAAA,EAAO,YAAA,GAAe,CAAA,EAAG,YAAY,CAAA,CAAA,CAAA,GAAM,KAAA;AAAA,gBAC3C,IAAA,EAAM,GAAG,WAAW,CAAA,CAAA,CAAA;AAAA,gBACpB,eAAA,EAAiB;AAAA;AACnB;AAAA,aAEJ,CAAA,EACF,CAAA;AAAA,0BAEAF,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWE,WAAA,CAAG,kDAAkD,CAAA,EACjE,QAAA,EAAA;AAAA,YAAA,CAAA,IAAA,CAAK,OAAA,GAAU,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,YAAE;AAAA,WAAA,EACpC;AAAA;AAAA;AAAA,KACF;AAAA,oBACAC,cAAA,CAACC,iEAAA,EAAA,EAAoB,IAAA,EAAY,YAAA,EAA4B;AAAA,GAAA,EAC/D,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"timeline-timing-col.cjs.js","sources":["../../../../src/domains/traces/components/timeline-timing-col.tsx"],"sourcesContent":["import type { UISpan } from '../types';\nimport { getSpanTimingLayout } from '../utils/span-timing';\nimport { SpanTimingHoverCard } from './span-timing-hover-card';\nimport { HoverCard, HoverCardTrigger } from '@/ds/components/HoverCard';\nimport { Txt } from '@/ds/components/Txt/Txt';\nimport { cn } from '@/lib/utils';\nimport { formatDurationPrecise } from '@/utils/duration';\n\ntype TimelineTimingColProps = {\n span: UISpan;\n selectedSpanId?: string;\n isFaded?: boolean;\n overallLatency?: number;\n overallStartTime?: string;\n color?: string;\n chartWidth?: 'wide' | 'default';\n};\n\nexport function TimelineTimingCol({\n span,\n selectedSpanId,\n isFaded,\n overallLatency,\n overallStartTime,\n color,\n chartWidth = 'default',\n}: TimelineTimingColProps) {\n const { startShiftMs, leftPercent, widthPercent } = getSpanTimingLayout(span, overallLatency, overallStartTime);\n\n return (\n <HoverCard>\n <HoverCardTrigger\n className={cn(\n 'grid h-8 cursor-help grid-cols-[1fr_auto] items-center gap-2 rounded-r-md p-1 pr-2',\n chartWidth === 'wide' ? 'min-w-72' : 'min-w-32',\n '[&:hover>div]:bg-fill',\n {\n 'opacity-40 dark:opacity-30 [&:hover]:opacity-70 dark:[&:hover]:opacity-60': isFaded,\n 'bg-fill-hover': selectedSpanId === span.id,\n },\n )}\n >\n <div className={cn('w-full rounded-md bg-muted p-1.5')}>\n <div className=\"relative h-1.5 w-full overflow-hidden rounded-sm\">\n <div\n className={cn('absolute top-0 h-1.5 rounded-sm bg-placeholder')}\n style={{\n width: widthPercent ? `${widthPercent}%` : '2px',\n left: `${leftPercent}%`,\n backgroundColor: color,\n }}\n ></div>\n </div>\n </div>\n\n <div className={cn('flex justify-end text-meta text-muted-foreground')}>\n <Txt as=\"span\" variant=\"meta\" font=\"mono\">\n {formatDurationPrecise(span.latency)}\n </Txt>\n </div>\n </HoverCardTrigger>\n <SpanTimingHoverCard span={span} startShiftMs={startShiftMs} />\n </HoverCard>\n );\n}\n"],"names":["getSpanTimingLayout","HoverCard","jsxs","HoverCardTrigger","cn","jsx","Txt","SpanTimingHoverCard"],"mappings":";;;;;;;;;;;;AAkBO,SAAS,iBAAA,CAAkB;AAAA,EAChC,IAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,EAA2B;AACzB,EAAA,MAAM,EAAE,cAAc,WAAA,EAAa,YAAA,KAAiBA,mDAAA,CAAoB,IAAA,EAAM,gBAAgB,gBAAgB,CAAA;AAE9G,EAAA,uCACGC,mBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAC,eAAA;AAAA,MAACC,0BAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWC,WAAA;AAAA,UACT,oFAAA;AAAA,UACA,UAAA,KAAe,SAAS,UAAA,GAAa,UAAA;AAAA,UACrC,uBAAA;AAAA,UACA;AAAA,YACE,2EAAA,EAA6E,OAAA;AAAA,YAC7E,eAAA,EAAiB,mBAAmB,IAAA,CAAK;AAAA;AAC3C,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,WAAWD,WAAA,CAAG,kCAAkC,GACnD,QAAA,kBAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kDAAA,EACb,QAAA,kBAAAA,cAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAWD,YAAG,gDAAgD,CAAA;AAAA,cAC9D,KAAA,EAAO;AAAA,gBACL,KAAA,EAAO,YAAA,GAAe,CAAA,EAAG,YAAY,CAAA,CAAA,CAAA,GAAM,KAAA;AAAA,gBAC3C,IAAA,EAAM,GAAG,WAAW,CAAA,CAAA,CAAA;AAAA,gBACpB,eAAA,EAAiB;AAAA;AACnB;AAAA,aAEJ,CAAA,EACF,CAAA;AAAA,yCAEC,KAAA,EAAA,EAAI,SAAA,EAAWA,YAAG,kDAAkD,CAAA,EACnE,yCAACE,OAAA,EAAA,EAAI,EAAA,EAAG,MAAA,EAAO,OAAA,EAAQ,QAAO,IAAA,EAAK,MAAA,EAChC,+CAAsB,IAAA,CAAK,OAAO,GACrC,CAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,oBACAD,cAAA,CAACE,iEAAA,EAAA,EAAoB,IAAA,EAAY,YAAA,EAA4B;AAAA,GAAA,EAC/D,CAAA;AAEJ;;;;"}
@@ -2,7 +2,9 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { getSpanTimingLayout } from '../utils/span-timing.es.js';
3
3
  import { SpanTimingHoverCard } from './span-timing-hover-card.es.js';
4
4
  import { H as HoverCard, b as HoverCardTrigger } from '../../../hover-card-B1-n3amu.js';
5
+ import { T as Txt } from '../../../Txt-BP1SRHmL.js';
5
6
  import { c as cn } from '../../../cn-65Adrsfj.js';
7
+ import { formatDurationPrecise } from '../../../utils/duration.es.js';
6
8
 
7
9
  function TimelineTimingCol({
8
10
  span,
@@ -39,10 +41,7 @@ function TimelineTimingCol({
39
41
  }
40
42
  }
41
43
  ) }) }),
42
- /* @__PURE__ */ jsxs("div", { className: cn("flex justify-end text-meta text-muted-foreground"), children: [
43
- (span.latency / 1e3).toFixed(3),
44
- " s"
45
- ] })
44
+ /* @__PURE__ */ jsx("div", { className: cn("flex justify-end text-meta text-muted-foreground"), children: /* @__PURE__ */ jsx(Txt, { as: "span", variant: "meta", font: "mono", children: formatDurationPrecise(span.latency) }) })
46
45
  ]
47
46
  }
48
47
  ),
@@ -1 +1 @@
1
- {"version":3,"file":"timeline-timing-col.es.js","sources":["../../../../src/domains/traces/components/timeline-timing-col.tsx"],"sourcesContent":["import type { UISpan } from '../types';\nimport { getSpanTimingLayout } from '../utils/span-timing';\nimport { SpanTimingHoverCard } from './span-timing-hover-card';\nimport { HoverCard, HoverCardTrigger } from '@/ds/components/HoverCard';\nimport { cn } from '@/lib/utils';\n\ntype TimelineTimingColProps = {\n span: UISpan;\n selectedSpanId?: string;\n isFaded?: boolean;\n overallLatency?: number;\n overallStartTime?: string;\n color?: string;\n chartWidth?: 'wide' | 'default';\n};\n\nexport function TimelineTimingCol({\n span,\n selectedSpanId,\n isFaded,\n overallLatency,\n overallStartTime,\n color,\n chartWidth = 'default',\n}: TimelineTimingColProps) {\n const { startShiftMs, leftPercent, widthPercent } = getSpanTimingLayout(span, overallLatency, overallStartTime);\n\n return (\n <HoverCard>\n <HoverCardTrigger\n className={cn(\n 'grid h-8 cursor-help grid-cols-[1fr_auto] items-center gap-2 rounded-r-md p-1 pr-2',\n chartWidth === 'wide' ? 'min-w-72' : 'min-w-32',\n '[&:hover>div]:bg-fill',\n {\n 'opacity-40 dark:opacity-30 [&:hover]:opacity-70 dark:[&:hover]:opacity-60': isFaded,\n 'bg-fill-hover': selectedSpanId === span.id,\n },\n )}\n >\n <div className={cn('w-full rounded-md bg-muted p-1.5')}>\n <div className=\"relative h-1.5 w-full overflow-hidden rounded-sm\">\n <div\n className={cn('absolute top-0 h-1.5 rounded-sm bg-placeholder')}\n style={{\n width: widthPercent ? `${widthPercent}%` : '2px',\n left: `${leftPercent}%`,\n backgroundColor: color,\n }}\n ></div>\n </div>\n </div>\n\n <div className={cn('flex justify-end text-meta text-muted-foreground')}>\n {(span.latency / 1000).toFixed(3)}&nbsp;s\n </div>\n </HoverCardTrigger>\n <SpanTimingHoverCard span={span} startShiftMs={startShiftMs} />\n </HoverCard>\n );\n}\n"],"names":[],"mappings":";;;;;;AAgBO,SAAS,iBAAA,CAAkB;AAAA,EAChC,IAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,EAA2B;AACzB,EAAA,MAAM,EAAE,cAAc,WAAA,EAAa,YAAA,KAAiB,mBAAA,CAAoB,IAAA,EAAM,gBAAgB,gBAAgB,CAAA;AAE9G,EAAA,4BACG,SAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,oFAAA;AAAA,UACA,UAAA,KAAe,SAAS,UAAA,GAAa,UAAA;AAAA,UACrC,uBAAA;AAAA,UACA;AAAA,YACE,2EAAA,EAA6E,OAAA;AAAA,YAC7E,eAAA,EAAiB,mBAAmB,IAAA,CAAK;AAAA;AAC3C,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,kCAAkC,GACnD,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kDAAA,EACb,QAAA,kBAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,GAAG,gDAAgD,CAAA;AAAA,cAC9D,KAAA,EAAO;AAAA,gBACL,KAAA,EAAO,YAAA,GAAe,CAAA,EAAG,YAAY,CAAA,CAAA,CAAA,GAAM,KAAA;AAAA,gBAC3C,IAAA,EAAM,GAAG,WAAW,CAAA,CAAA,CAAA;AAAA,gBACpB,eAAA,EAAiB;AAAA;AACnB;AAAA,aAEJ,CAAA,EACF,CAAA;AAAA,0BAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,kDAAkD,CAAA,EACjE,QAAA,EAAA;AAAA,YAAA,CAAA,IAAA,CAAK,OAAA,GAAU,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,YAAE;AAAA,WAAA,EACpC;AAAA;AAAA;AAAA,KACF;AAAA,oBACA,GAAA,CAAC,mBAAA,EAAA,EAAoB,IAAA,EAAY,YAAA,EAA4B;AAAA,GAAA,EAC/D,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"timeline-timing-col.es.js","sources":["../../../../src/domains/traces/components/timeline-timing-col.tsx"],"sourcesContent":["import type { UISpan } from '../types';\nimport { getSpanTimingLayout } from '../utils/span-timing';\nimport { SpanTimingHoverCard } from './span-timing-hover-card';\nimport { HoverCard, HoverCardTrigger } from '@/ds/components/HoverCard';\nimport { Txt } from '@/ds/components/Txt/Txt';\nimport { cn } from '@/lib/utils';\nimport { formatDurationPrecise } from '@/utils/duration';\n\ntype TimelineTimingColProps = {\n span: UISpan;\n selectedSpanId?: string;\n isFaded?: boolean;\n overallLatency?: number;\n overallStartTime?: string;\n color?: string;\n chartWidth?: 'wide' | 'default';\n};\n\nexport function TimelineTimingCol({\n span,\n selectedSpanId,\n isFaded,\n overallLatency,\n overallStartTime,\n color,\n chartWidth = 'default',\n}: TimelineTimingColProps) {\n const { startShiftMs, leftPercent, widthPercent } = getSpanTimingLayout(span, overallLatency, overallStartTime);\n\n return (\n <HoverCard>\n <HoverCardTrigger\n className={cn(\n 'grid h-8 cursor-help grid-cols-[1fr_auto] items-center gap-2 rounded-r-md p-1 pr-2',\n chartWidth === 'wide' ? 'min-w-72' : 'min-w-32',\n '[&:hover>div]:bg-fill',\n {\n 'opacity-40 dark:opacity-30 [&:hover]:opacity-70 dark:[&:hover]:opacity-60': isFaded,\n 'bg-fill-hover': selectedSpanId === span.id,\n },\n )}\n >\n <div className={cn('w-full rounded-md bg-muted p-1.5')}>\n <div className=\"relative h-1.5 w-full overflow-hidden rounded-sm\">\n <div\n className={cn('absolute top-0 h-1.5 rounded-sm bg-placeholder')}\n style={{\n width: widthPercent ? `${widthPercent}%` : '2px',\n left: `${leftPercent}%`,\n backgroundColor: color,\n }}\n ></div>\n </div>\n </div>\n\n <div className={cn('flex justify-end text-meta text-muted-foreground')}>\n <Txt as=\"span\" variant=\"meta\" font=\"mono\">\n {formatDurationPrecise(span.latency)}\n </Txt>\n </div>\n </HoverCardTrigger>\n <SpanTimingHoverCard span={span} startShiftMs={startShiftMs} />\n </HoverCard>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAkBO,SAAS,iBAAA,CAAkB;AAAA,EAChC,IAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,EAA2B;AACzB,EAAA,MAAM,EAAE,cAAc,WAAA,EAAa,YAAA,KAAiB,mBAAA,CAAoB,IAAA,EAAM,gBAAgB,gBAAgB,CAAA;AAE9G,EAAA,4BACG,SAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,oFAAA;AAAA,UACA,UAAA,KAAe,SAAS,UAAA,GAAa,UAAA;AAAA,UACrC,uBAAA;AAAA,UACA;AAAA,YACE,2EAAA,EAA6E,OAAA;AAAA,YAC7E,eAAA,EAAiB,mBAAmB,IAAA,CAAK;AAAA;AAC3C,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,kCAAkC,GACnD,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kDAAA,EACb,QAAA,kBAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,GAAG,gDAAgD,CAAA;AAAA,cAC9D,KAAA,EAAO;AAAA,gBACL,KAAA,EAAO,YAAA,GAAe,CAAA,EAAG,YAAY,CAAA,CAAA,CAAA,GAAM,KAAA;AAAA,gBAC3C,IAAA,EAAM,GAAG,WAAW,CAAA,CAAA,CAAA;AAAA,gBACpB,eAAA,EAAiB;AAAA;AACnB;AAAA,aAEJ,CAAA,EACF,CAAA;AAAA,8BAEC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,kDAAkD,CAAA,EACnE,8BAAC,GAAA,EAAA,EAAI,EAAA,EAAG,MAAA,EAAO,OAAA,EAAQ,QAAO,IAAA,EAAK,MAAA,EAChC,gCAAsB,IAAA,CAAK,OAAO,GACrC,CAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,oBACA,GAAA,CAAC,mBAAA,EAAA,EAAoB,IAAA,EAAY,YAAA,EAA4B;AAAA,GAAA,EAC/D,CAAA;AAEJ;;;;"}
@@ -7,11 +7,11 @@ const lucideReact = require('lucide-react');
7
7
  const React = require('react');
8
8
  const domains_traces_traceListColumns = require('../trace-list-columns.cjs.js');
9
9
  const Button = require('../../../Button-BAMnPqos.cjs');
10
- const combobox = require('../../../combobox-BoSB-muq.cjs');
10
+ const combobox = require('../../../combobox-B19HJqE-.cjs');
11
11
  require('@base-ui/react/combobox');
12
12
  const dialog = require('../../../dialog-Vvcjm0rZ.cjs');
13
13
  const dropdownMenu = require('../../../dropdown-menu-j2y37TL5.cjs');
14
- const fieldErrorId = require('../../../field-error-id-6EfqmQ4C.cjs');
14
+ const fieldErrorId = require('../../../field-error-id-V_WejsRL.cjs');
15
15
 
16
16
  const METADATA_KEY_FIELD_NAME = "trace-metadata-key";
17
17
  const EMPTY_KEYS = [];
@@ -31,6 +31,7 @@ function TraceColumnsMenu({
31
31
  preferences,
32
32
  availableMetadataKeys = EMPTY_KEYS,
33
33
  usageDisabledReason,
34
+ withQueryTrace = true,
34
35
  onToggleColumn,
35
36
  onAddCustomColumn,
36
37
  onRemoveCustomColumn,
@@ -113,27 +114,29 @@ function TraceColumnsMenu({
113
114
  field
114
115
  );
115
116
  }),
116
- /* @__PURE__ */ jsxRuntime.jsx(dropdownMenu.DropdownMenu.Separator, {}),
117
- /* @__PURE__ */ jsxRuntime.jsx(dropdownMenu.DropdownMenu.Label, { children: "Metadata columns" }),
118
- preferences.metadataKeys.map((key) => /* @__PURE__ */ jsxRuntime.jsx(
119
- dropdownMenu.DropdownMenu.CheckboxItem,
120
- {
121
- checked: true,
122
- title: key,
123
- onCheckedChange: () => onRemoveMetadataColumn(key),
124
- children: key
125
- },
126
- key
127
- )),
128
- /* @__PURE__ */ jsxRuntime.jsxs(dropdownMenu.DropdownMenu.Item, { onSelect: () => setIsMetadataDialogOpen(true), children: [
129
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PlusIcon, { "aria-hidden": true }),
130
- "Add metadata column"
117
+ (withQueryTrace || preferences.metadataKeys.length > 0) && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
118
+ /* @__PURE__ */ jsxRuntime.jsx(dropdownMenu.DropdownMenu.Separator, {}),
119
+ /* @__PURE__ */ jsxRuntime.jsx(dropdownMenu.DropdownMenu.Label, { children: "Metadata columns" }),
120
+ preferences.metadataKeys.map((key) => /* @__PURE__ */ jsxRuntime.jsx(
121
+ dropdownMenu.DropdownMenu.CheckboxItem,
122
+ {
123
+ checked: true,
124
+ title: key,
125
+ onCheckedChange: () => onRemoveMetadataColumn(key),
126
+ children: key
127
+ },
128
+ key
129
+ )),
130
+ withQueryTrace && /* @__PURE__ */ jsxRuntime.jsxs(dropdownMenu.DropdownMenu.Item, { onSelect: () => setIsMetadataDialogOpen(true), children: [
131
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PlusIcon, { "aria-hidden": true }),
132
+ "Add metadata column"
133
+ ] })
131
134
  ] }),
132
135
  /* @__PURE__ */ jsxRuntime.jsx(dropdownMenu.DropdownMenu.Separator, {}),
133
136
  /* @__PURE__ */ jsxRuntime.jsx(dropdownMenu.DropdownMenu.Item, { onSelect: onReset, children: "Reset to defaults" })
134
137
  ] })
135
138
  ] }),
136
- /* @__PURE__ */ jsxRuntime.jsx(dialog.Dialog, { open: isMetadataDialogOpen, onOpenChange: handleDialogOpenChange, children: /* @__PURE__ */ jsxRuntime.jsx(dialog.DialogContent, { children: /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleAddMetadata, children: [
139
+ withQueryTrace && /* @__PURE__ */ jsxRuntime.jsx(dialog.Dialog, { open: isMetadataDialogOpen, onOpenChange: handleDialogOpenChange, children: /* @__PURE__ */ jsxRuntime.jsx(dialog.DialogContent, { children: /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleAddMetadata, children: [
137
140
  /* @__PURE__ */ jsxRuntime.jsxs(dialog.DialogHeader, { children: [
138
141
  /* @__PURE__ */ jsxRuntime.jsx(dialog.DialogTitle, { children: "Add metadata column" }),
139
142
  /* @__PURE__ */ jsxRuntime.jsx(dialog.DialogDescription, { children: "Pick a top-level trace metadata key observed in the current time range, or type one. Only the key is saved, never its values." })
@@ -1 +1 @@
1
- {"version":3,"file":"trace-columns-menu.cjs.js","sources":["../../../../src/domains/traces/components/trace-columns-menu.tsx"],"sourcesContent":["import { Columns3Icon, PlusIcon, Columns3, X } from 'lucide-react';\nimport { useMemo, useState, type FormEvent } from 'react';\nimport { TRACE_CUSTOM_COLUMN_FIELDS, TRACE_CUSTOM_COLUMN_LABELS, TRACE_USAGE_COLUMNS } from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceOptionalColumn } from '../trace-list-columns';\nimport { Button } from '@/ds/components/Button';\nimport { Combobox } from '@/ds/components/Combobox';\nimport {\n Dialog,\n DialogBody,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/ds/components/Dialog';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { FieldBlock } from '@/ds/components/FormFieldBlocks';\n\nconst METADATA_KEY_FIELD_NAME = 'trace-metadata-key';\nconst EMPTY_KEYS: readonly string[] = [];\n\nconst STANDARD_COLUMNS: readonly TraceOptionalColumn[] = ['type', 'input', 'duration', 'endTime', 'environment'];\n\nconst COLUMN_LABELS: Record<TraceOptionalColumn, string> = {\n type: 'Type',\n input: 'Input',\n duration: 'Duration',\n endTime: 'End',\n environment: 'Environment',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n totalTokens: 'Total tokens',\n estimatedCost: 'Estimated cost',\n};\n\ntype TraceColumnsMenuProps = {\n preferences: TraceColumnPreferences;\n /** Top-level metadata keys observed on traces in the current time range, offered in the picker. */\n availableMetadataKeys?: readonly string[];\n usageDisabledReason?: string;\n onToggleColumn: (column: TraceOptionalColumn) => void;\n onAddCustomColumn: (field: TraceCustomColumn) => void;\n onRemoveCustomColumn: (field: TraceCustomColumn) => void;\n onAddMetadataColumn: (key: string) => void;\n onRemoveMetadataColumn: (key: string) => void;\n onReset: () => void;\n};\n\nexport function TraceColumnsMenu({\n preferences,\n availableMetadataKeys = EMPTY_KEYS,\n usageDisabledReason,\n onToggleColumn,\n onAddCustomColumn,\n onRemoveCustomColumn,\n onAddMetadataColumn,\n onRemoveMetadataColumn,\n onReset,\n}: TraceColumnsMenuProps) {\n const [isMetadataDialogOpen, setIsMetadataDialogOpen] = useState(false);\n const [metadataKey, setMetadataKey] = useState('');\n const [metadataError, setMetadataError] = useState<string | undefined>();\n\n // Keys already shown as columns are left out; a typed key that discovery\n // hasn't seen is kept in the list so the trigger can display it once picked.\n const metadataKeyOptions = useMemo(() => {\n const keys = availableMetadataKeys.filter(key => !preferences.metadataKeys.includes(key));\n if (metadataKey && !keys.includes(metadataKey)) keys.push(metadataKey);\n return keys.map(key => ({ label: key, value: key }));\n }, [availableMetadataKeys, preferences.metadataKeys, metadataKey]);\n\n const handleDialogOpenChange = (open: boolean) => {\n setIsMetadataDialogOpen(open);\n if (!open) {\n setMetadataKey('');\n setMetadataError(undefined);\n }\n };\n\n const handleAddMetadata = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const normalizedKey = metadataKey.trim();\n if (!normalizedKey) {\n setMetadataError('Enter a metadata key.');\n return;\n }\n if (preferences.metadataKeys.includes(normalizedKey)) {\n setMetadataError('That metadata column is already visible.');\n return;\n }\n\n onAddMetadataColumn(normalizedKey);\n handleDialogOpenChange(false);\n };\n\n return (\n <>\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button variant=\"ghost\" size=\"md\" icon={<Columns3Icon aria-hidden />}>\n Columns\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\" className=\"min-w-56\">\n <DropdownMenu.Label>Standard columns</DropdownMenu.Label>\n {STANDARD_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Usage columns</DropdownMenu.Label>\n {TRACE_USAGE_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n disabled={Boolean(usageDisabledReason)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n {usageDisabledReason && (\n <p className=\"px-2 py-1 text-meta text-placeholder\" role=\"note\">\n {usageDisabledReason}\n </p>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Custom columns</DropdownMenu.Label>\n {TRACE_CUSTOM_COLUMN_FIELDS.map(field => {\n const isVisible = preferences.customColumns.includes(field);\n return (\n <DropdownMenu.CheckboxItem\n key={field}\n checked={isVisible}\n onCheckedChange={() => (isVisible ? onRemoveCustomColumn(field) : onAddCustomColumn(field))}\n >\n {TRACE_CUSTOM_COLUMN_LABELS[field]}\n </DropdownMenu.CheckboxItem>\n );\n })}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Metadata columns</DropdownMenu.Label>\n {preferences.metadataKeys.map(key => (\n <DropdownMenu.CheckboxItem\n key={key}\n checked\n title={key}\n onCheckedChange={() => onRemoveMetadataColumn(key)}\n >\n {key}\n </DropdownMenu.CheckboxItem>\n ))}\n <DropdownMenu.Item onSelect={() => setIsMetadataDialogOpen(true)}>\n <PlusIcon aria-hidden />\n Add metadata column\n </DropdownMenu.Item>\n\n <DropdownMenu.Separator />\n <DropdownMenu.Item onSelect={onReset}>Reset to defaults</DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n\n <Dialog open={isMetadataDialogOpen} onOpenChange={handleDialogOpenChange}>\n <DialogContent>\n <form onSubmit={handleAddMetadata}>\n <DialogHeader>\n <DialogTitle>Add metadata column</DialogTitle>\n <DialogDescription>\n Pick a top-level trace metadata key observed in the current time range, or type one. Only the key is\n saved, never its values.\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <FieldBlock.Column>\n <FieldBlock.Label name={METADATA_KEY_FIELD_NAME}>Metadata key</FieldBlock.Label>\n <Combobox\n id={`input-${METADATA_KEY_FIELD_NAME}`}\n name={METADATA_KEY_FIELD_NAME}\n options={metadataKeyOptions}\n value={metadataKey}\n onValueChange={key => {\n setMetadataKey(key);\n setMetadataError(undefined);\n }}\n allowCustomValue\n placeholder=\"Select a metadata key…\"\n searchPlaceholder=\"Search metadata keys…\"\n emptyText=\"No metadata keys observed. Type one to add it.\"\n error={metadataError}\n />\n </FieldBlock.Column>\n </DialogBody>\n <DialogFooter>\n <Button icon={<X />} type=\"button\" onClick={() => handleDialogOpenChange(false)}>\n Cancel\n </Button>\n <Button icon={<Columns3 />} type=\"submit\" variant=\"primary\">\n Add column\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"],"names":["useState","useMemo","jsxs","Fragment","DropdownMenu","jsx","Button","Columns3Icon","TRACE_USAGE_COLUMNS","TRACE_CUSTOM_COLUMN_FIELDS","PlusIcon","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogBody","FieldBlock","Combobox","DialogFooter","X","Columns3"],"mappings":"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"}
1
+ {"version":3,"file":"trace-columns-menu.cjs.js","sources":["../../../../src/domains/traces/components/trace-columns-menu.tsx"],"sourcesContent":["import { Columns3Icon, PlusIcon, Columns3, X } from 'lucide-react';\nimport { useMemo, useState, type FormEvent } from 'react';\nimport { TRACE_CUSTOM_COLUMN_FIELDS, TRACE_CUSTOM_COLUMN_LABELS, TRACE_USAGE_COLUMNS } from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceOptionalColumn } from '../trace-list-columns';\nimport { Button } from '@/ds/components/Button';\nimport { Combobox } from '@/ds/components/Combobox';\nimport {\n Dialog,\n DialogBody,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/ds/components/Dialog';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { FieldBlock } from '@/ds/components/FormFieldBlocks';\n\nconst METADATA_KEY_FIELD_NAME = 'trace-metadata-key';\nconst EMPTY_KEYS: readonly string[] = [];\n\nconst STANDARD_COLUMNS: readonly TraceOptionalColumn[] = ['type', 'input', 'duration', 'endTime', 'environment'];\n\nconst COLUMN_LABELS: Record<TraceOptionalColumn, string> = {\n type: 'Type',\n input: 'Input',\n duration: 'Duration',\n endTime: 'End',\n environment: 'Environment',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n totalTokens: 'Total tokens',\n estimatedCost: 'Estimated cost',\n};\n\ntype TraceColumnsMenuProps = {\n preferences: TraceColumnPreferences;\n /** Top-level metadata keys observed on traces in the current time range, offered in the picker. */\n availableMetadataKeys?: readonly string[];\n usageDisabledReason?: string;\n /** When false (server without the trace-query API), metadata columns can't be added. Defaults to true. */\n withQueryTrace?: boolean;\n onToggleColumn: (column: TraceOptionalColumn) => void;\n onAddCustomColumn: (field: TraceCustomColumn) => void;\n onRemoveCustomColumn: (field: TraceCustomColumn) => void;\n onAddMetadataColumn: (key: string) => void;\n onRemoveMetadataColumn: (key: string) => void;\n onReset: () => void;\n};\n\nexport function TraceColumnsMenu({\n preferences,\n availableMetadataKeys = EMPTY_KEYS,\n usageDisabledReason,\n withQueryTrace = true,\n onToggleColumn,\n onAddCustomColumn,\n onRemoveCustomColumn,\n onAddMetadataColumn,\n onRemoveMetadataColumn,\n onReset,\n}: TraceColumnsMenuProps) {\n const [isMetadataDialogOpen, setIsMetadataDialogOpen] = useState(false);\n const [metadataKey, setMetadataKey] = useState('');\n const [metadataError, setMetadataError] = useState<string | undefined>();\n\n // Keys already shown as columns are left out; a typed key that discovery\n // hasn't seen is kept in the list so the trigger can display it once picked.\n const metadataKeyOptions = useMemo(() => {\n const keys = availableMetadataKeys.filter(key => !preferences.metadataKeys.includes(key));\n if (metadataKey && !keys.includes(metadataKey)) keys.push(metadataKey);\n return keys.map(key => ({ label: key, value: key }));\n }, [availableMetadataKeys, preferences.metadataKeys, metadataKey]);\n\n const handleDialogOpenChange = (open: boolean) => {\n setIsMetadataDialogOpen(open);\n if (!open) {\n setMetadataKey('');\n setMetadataError(undefined);\n }\n };\n\n const handleAddMetadata = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const normalizedKey = metadataKey.trim();\n if (!normalizedKey) {\n setMetadataError('Enter a metadata key.');\n return;\n }\n if (preferences.metadataKeys.includes(normalizedKey)) {\n setMetadataError('That metadata column is already visible.');\n return;\n }\n\n onAddMetadataColumn(normalizedKey);\n handleDialogOpenChange(false);\n };\n\n return (\n <>\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button variant=\"ghost\" size=\"md\" icon={<Columns3Icon aria-hidden />}>\n Columns\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\" className=\"min-w-56\">\n <DropdownMenu.Label>Standard columns</DropdownMenu.Label>\n {STANDARD_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Usage columns</DropdownMenu.Label>\n {TRACE_USAGE_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n disabled={Boolean(usageDisabledReason)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n {usageDisabledReason && (\n <p className=\"px-2 py-1 text-meta text-placeholder\" role=\"note\">\n {usageDisabledReason}\n </p>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Custom columns</DropdownMenu.Label>\n {TRACE_CUSTOM_COLUMN_FIELDS.map(field => {\n const isVisible = preferences.customColumns.includes(field);\n return (\n <DropdownMenu.CheckboxItem\n key={field}\n checked={isVisible}\n onCheckedChange={() => (isVisible ? onRemoveCustomColumn(field) : onAddCustomColumn(field))}\n >\n {TRACE_CUSTOM_COLUMN_LABELS[field]}\n </DropdownMenu.CheckboxItem>\n );\n })}\n\n {(withQueryTrace || preferences.metadataKeys.length > 0) && (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Metadata columns</DropdownMenu.Label>\n {preferences.metadataKeys.map(key => (\n <DropdownMenu.CheckboxItem\n key={key}\n checked\n title={key}\n onCheckedChange={() => onRemoveMetadataColumn(key)}\n >\n {key}\n </DropdownMenu.CheckboxItem>\n ))}\n {withQueryTrace && (\n <DropdownMenu.Item onSelect={() => setIsMetadataDialogOpen(true)}>\n <PlusIcon aria-hidden />\n Add metadata column\n </DropdownMenu.Item>\n )}\n </>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Item onSelect={onReset}>Reset to defaults</DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n\n {withQueryTrace && (\n <Dialog open={isMetadataDialogOpen} onOpenChange={handleDialogOpenChange}>\n <DialogContent>\n <form onSubmit={handleAddMetadata}>\n <DialogHeader>\n <DialogTitle>Add metadata column</DialogTitle>\n <DialogDescription>\n Pick a top-level trace metadata key observed in the current time range, or type one. Only the key is\n saved, never its values.\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <FieldBlock.Column>\n <FieldBlock.Label name={METADATA_KEY_FIELD_NAME}>Metadata key</FieldBlock.Label>\n <Combobox\n id={`input-${METADATA_KEY_FIELD_NAME}`}\n name={METADATA_KEY_FIELD_NAME}\n options={metadataKeyOptions}\n value={metadataKey}\n onValueChange={key => {\n setMetadataKey(key);\n setMetadataError(undefined);\n }}\n allowCustomValue\n placeholder=\"Select a metadata key…\"\n searchPlaceholder=\"Search metadata keys…\"\n emptyText=\"No metadata keys observed. Type one to add it.\"\n error={metadataError}\n />\n </FieldBlock.Column>\n </DialogBody>\n <DialogFooter>\n <Button icon={<X />} type=\"button\" onClick={() => handleDialogOpenChange(false)}>\n Cancel\n </Button>\n <Button icon={<Columns3 />} type=\"submit\" variant=\"primary\">\n Add column\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )}\n </>\n );\n}\n"],"names":["useState","useMemo","jsxs","Fragment","DropdownMenu","jsx","Button","Columns3Icon","TRACE_USAGE_COLUMNS","TRACE_CUSTOM_COLUMN_FIELDS","PlusIcon","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogBody","FieldBlock","Combobox","DialogFooter","X","Columns3"],"mappings":"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"}