@mastra/playground-ui 58.0.0 → 59.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (691) hide show
  1. package/README.md +62 -0
  2. package/dist/{Badge-TD55_qZJ.js → Badge-Bzn8Z-_I.js} +2 -2
  3. package/dist/Badge-Bzn8Z-_I.js.map +1 -0
  4. package/dist/{Badge-BEeYtjmv.cjs → Badge-DFNxcz-r.cjs} +2 -2
  5. package/dist/Badge-DFNxcz-r.cjs.map +1 -0
  6. package/dist/{Header-BVnFQlzE.js → Header-hTHhO02b.js} +2 -2
  7. package/dist/{Header-BVnFQlzE.js.map → Header-hTHhO02b.js.map} +1 -1
  8. package/dist/{Header-CGjhJ0nQ.cjs → Header-y51Sfo3G.cjs} +2 -2
  9. package/dist/{Header-CGjhJ0nQ.cjs.map → Header-y51Sfo3G.cjs.map} +1 -1
  10. package/dist/{Txt-DTh3Pa_a.js → Txt-BP1SRHmL.js} +4 -10
  11. package/dist/Txt-BP1SRHmL.js.map +1 -0
  12. package/dist/{Txt-B4-2nLaI.cjs → Txt-DPmEpNbp.cjs} +4 -10
  13. package/dist/Txt-DPmEpNbp.cjs.map +1 -0
  14. package/dist/{ask-user-BPpgiE7k.cjs → ask-user-4pnmHbuC.cjs} +3 -3
  15. package/dist/{ask-user-BPpgiE7k.cjs.map → ask-user-4pnmHbuC.cjs.map} +1 -1
  16. package/dist/{ask-user-jDUt7hgT.js → ask-user-CFcQN_7m.js} +3 -3
  17. package/dist/{ask-user-jDUt7hgT.js.map → ask-user-CFcQN_7m.js.map} +1 -1
  18. package/dist/{chat-notification-CmdRGO_D.js → chat-notification-BI_WRUvG.js} +3 -3
  19. package/dist/{chat-notification-CmdRGO_D.js.map → chat-notification-BI_WRUvG.js.map} +1 -1
  20. package/dist/{chat-notification-DJykWtoj.cjs → chat-notification-Dc7jwULm.cjs} +3 -3
  21. package/dist/{chat-notification-DJykWtoj.cjs.map → chat-notification-Dc7jwULm.cjs.map} +1 -1
  22. package/dist/{chat-signal-xs3FkPts.cjs → chat-signal-BodewV33.cjs} +3 -3
  23. package/dist/{chat-signal-xs3FkPts.cjs.map → chat-signal-BodewV33.cjs.map} +1 -1
  24. package/dist/{chat-signal-Vg8pGXwH.js → chat-signal-D0zw80bU.js} +3 -3
  25. package/dist/{chat-signal-Vg8pGXwH.js.map → chat-signal-D0zw80bU.js.map} +1 -1
  26. package/dist/{combobox-BoSB-muq.cjs → combobox-B19HJqE-.cjs} +2 -2
  27. package/dist/{combobox-BoSB-muq.cjs.map → combobox-B19HJqE-.cjs.map} +1 -1
  28. package/dist/{combobox-Cd0JPUQW.js → combobox-D_kmwSKS.js} +2 -2
  29. package/dist/{combobox-Cd0JPUQW.js.map → combobox-D_kmwSKS.js.map} +1 -1
  30. package/dist/components/Avatar.cjs.js +1 -1
  31. package/dist/components/Avatar.es.js +1 -1
  32. package/dist/components/Badge.cjs.js +1 -1
  33. package/dist/components/Badge.es.js +1 -1
  34. package/dist/components/ClampedText.cjs.js +1 -1
  35. package/dist/components/ClampedText.es.js +1 -1
  36. package/dist/components/Combobox.cjs.js +1 -1
  37. package/dist/components/Combobox.es.js +1 -1
  38. package/dist/components/Comment.cjs.js +2 -2
  39. package/dist/components/Comment.es.js +2 -2
  40. package/dist/components/CompactNumber.cjs.js +24 -0
  41. package/dist/components/CompactNumber.cjs.js.map +1 -0
  42. package/dist/components/CompactNumber.d.ts +2 -0
  43. package/dist/components/CompactNumber.es.js +20 -0
  44. package/dist/components/CompactNumber.es.js.map +1 -0
  45. package/dist/components/DataCodeSection.cjs.js +1 -1
  46. package/dist/components/DataCodeSection.es.js +1 -1
  47. package/dist/components/DataList.cjs.js +8 -14
  48. package/dist/components/DataList.cjs.js.map +1 -1
  49. package/dist/components/DataList.es.js +8 -14
  50. package/dist/components/DataList.es.js.map +1 -1
  51. package/dist/components/DataPanel.cjs.js +1 -1
  52. package/dist/components/DataPanel.es.js +1 -1
  53. package/dist/components/DateRangeTimeline.cjs.js +1 -1
  54. package/dist/components/DateRangeTimeline.es.js +1 -1
  55. package/dist/components/DateTimePicker.cjs.js +1 -1
  56. package/dist/components/DateTimePicker.es.js +1 -1
  57. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  58. package/dist/components/DateTimeRangePicker.es.js +1 -1
  59. package/dist/components/Entity.cjs.js +1 -1
  60. package/dist/components/Entity.es.js +1 -1
  61. package/dist/components/EntityHeader.cjs.js +1 -1
  62. package/dist/components/EntityHeader.es.js +1 -1
  63. package/dist/components/Entry.cjs.js +1 -1
  64. package/dist/components/Entry.es.js +1 -1
  65. package/dist/components/EnvironmentVariablesEditor.cjs.js +3 -3
  66. package/dist/components/EnvironmentVariablesEditor.es.js +3 -3
  67. package/dist/components/FilterBar.cjs.js +1 -1
  68. package/dist/components/FilterBar.es.js +1 -1
  69. package/dist/components/FormFieldBlocks.cjs.js +4 -4
  70. package/dist/components/FormFieldBlocks.es.js +4 -4
  71. package/dist/components/Header.cjs.js +1 -1
  72. package/dist/components/Header.es.js +1 -1
  73. package/dist/components/InlineCode.cjs.js +10 -0
  74. package/dist/components/InlineCode.cjs.js.map +1 -0
  75. package/dist/components/InlineCode.d.ts +2 -0
  76. package/dist/components/InlineCode.es.js +2 -0
  77. package/dist/components/InlineCode.es.js.map +1 -0
  78. package/dist/components/ItemList.cjs.js +5 -17
  79. package/dist/components/ItemList.cjs.js.map +1 -1
  80. package/dist/components/ItemList.es.js +5 -17
  81. package/dist/components/ItemList.es.js.map +1 -1
  82. package/dist/components/JSONSchemaForm.cjs.js +2 -2
  83. package/dist/components/JSONSchemaForm.es.js +2 -2
  84. package/dist/components/ListSearch.cjs.js +1 -1
  85. package/dist/components/ListSearch.es.js +1 -1
  86. package/dist/components/LogsDataList.cjs.js +2 -2
  87. package/dist/components/LogsDataList.es.js +2 -2
  88. package/dist/components/Message.cjs.js +4 -5
  89. package/dist/components/Message.cjs.js.map +1 -1
  90. package/dist/components/Message.es.js +4 -5
  91. package/dist/components/Message.es.js.map +1 -1
  92. package/dist/components/MetricsCard.cjs.js +1 -1
  93. package/dist/components/MetricsCard.es.js +1 -1
  94. package/dist/components/MetricsCardGroup.cjs.js +2 -11
  95. package/dist/components/MetricsCardGroup.cjs.js.map +1 -1
  96. package/dist/components/MetricsCardGroup.es.js +2 -11
  97. package/dist/components/MetricsCardGroup.es.js.map +1 -1
  98. package/dist/components/MetricsKpiCard.cjs.js +1 -1
  99. package/dist/components/MetricsKpiCard.es.js +1 -1
  100. package/dist/components/MetricsLineChart.cjs.js +2 -1
  101. package/dist/components/MetricsLineChart.cjs.js.map +1 -1
  102. package/dist/components/MetricsLineChart.es.js +1 -1
  103. package/dist/components/PageHeader.cjs.js +1 -1
  104. package/dist/components/PageHeader.es.js +1 -1
  105. package/dist/components/PageLayout.cjs.js +1 -1
  106. package/dist/components/PageLayout.es.js +1 -1
  107. package/dist/components/PropertyFilter.cjs.js +1 -1
  108. package/dist/components/PropertyFilter.es.js +1 -1
  109. package/dist/components/RelativeTimestamp.cjs.js +119 -0
  110. package/dist/components/RelativeTimestamp.cjs.js.map +1 -0
  111. package/dist/components/RelativeTimestamp.d.ts +2 -0
  112. package/dist/components/RelativeTimestamp.es.js +115 -0
  113. package/dist/components/RelativeTimestamp.es.js.map +1 -0
  114. package/dist/components/Section.cjs.js +1 -1
  115. package/dist/components/Section.es.js +1 -1
  116. package/dist/components/SettingsRow.cjs.js +1 -1
  117. package/dist/components/SettingsRow.es.js +1 -1
  118. package/dist/components/SideDialog.cjs.js +1 -1
  119. package/dist/components/SideDialog.es.js +1 -1
  120. package/dist/components/StatusIndicators.cjs.js +21 -14
  121. package/dist/components/StatusIndicators.cjs.js.map +1 -1
  122. package/dist/components/StatusIndicators.es.js +21 -15
  123. package/dist/components/StatusIndicators.es.js.map +1 -1
  124. package/dist/components/Table.cjs.js +3 -21
  125. package/dist/components/Table.cjs.js.map +1 -1
  126. package/dist/components/Table.es.js +3 -21
  127. package/dist/components/Table.es.js.map +1 -1
  128. package/dist/components/ThreadList.cjs.js +1 -1
  129. package/dist/components/ThreadList.es.js +1 -1
  130. package/dist/components/Truncate.cjs.js +1 -1
  131. package/dist/components/Truncate.es.js +1 -1
  132. package/dist/components/Txt.cjs.js +1 -1
  133. package/dist/components/Txt.es.js +1 -1
  134. package/dist/components/Workflow.cjs.js +9 -13
  135. package/dist/components/Workflow.cjs.js.map +1 -1
  136. package/dist/components/Workflow.es.js +9 -13
  137. package/dist/components/Workflow.es.js.map +1 -1
  138. package/dist/components/ai/ask-user.cjs.js +1 -1
  139. package/dist/components/ai/ask-user.es.js +1 -1
  140. package/dist/components/ai/chat-event.cjs.js +3 -3
  141. package/dist/components/ai/chat-event.es.js +4 -4
  142. package/dist/components/ai/plan.cjs.js +3 -3
  143. package/dist/components/ai/plan.cjs.js.map +1 -1
  144. package/dist/components/ai/plan.es.js +3 -3
  145. package/dist/components/ai/plan.es.js.map +1 -1
  146. package/dist/components/ai/task-list.cjs.js +370 -55
  147. package/dist/components/ai/task-list.cjs.js.map +1 -1
  148. package/dist/components/ai/task-list.es.js +374 -58
  149. package/dist/components/ai/task-list.es.js.map +1 -1
  150. package/dist/components/ai/tool-call.cjs.js +7 -9
  151. package/dist/components/ai/tool-call.cjs.js.map +1 -1
  152. package/dist/components/ai/tool-call.es.js +8 -10
  153. package/dist/components/ai/tool-call.es.js.map +1 -1
  154. package/dist/{data-code-section-Cth9zVkj.js → data-code-section-BKrCkj90.js} +2 -2
  155. package/dist/{data-code-section-Cth9zVkj.js.map → data-code-section-BKrCkj90.js.map} +1 -1
  156. package/dist/{data-code-section-DE4AgaTU.cjs → data-code-section-C9z94ytx.cjs} +2 -2
  157. package/dist/{data-code-section-DE4AgaTU.cjs.map → data-code-section-C9z94ytx.cjs.map} +1 -1
  158. package/dist/{data-list-DisTjDHP.js → data-list-5-nRJbEO.js} +3 -3
  159. package/dist/{data-list-DisTjDHP.js.map → data-list-5-nRJbEO.js.map} +1 -1
  160. package/dist/{data-list-PwFpP_mo.cjs → data-list-RI8c32dk.cjs} +3 -3
  161. package/dist/{data-list-PwFpP_mo.cjs.map → data-list-RI8c32dk.cjs.map} +1 -1
  162. package/dist/{data-list-skeleton-DAfM8AjW.js → data-list-skeleton-BrSh9Y_3.js} +2 -2
  163. package/dist/{data-list-skeleton-DAfM8AjW.js.map → data-list-skeleton-BrSh9Y_3.js.map} +1 -1
  164. package/dist/{data-list-skeleton-CjwR0o3w.cjs → data-list-skeleton-CgbWqYky.cjs} +2 -2
  165. package/dist/{data-list-skeleton-CjwR0o3w.cjs.map → data-list-skeleton-CgbWqYky.cjs.map} +1 -1
  166. package/dist/{data-list-spacer-DEcgVGFM.cjs → data-list-spacer-1OqlC7WX.cjs} +2 -2
  167. package/dist/{data-list-spacer-DEcgVGFM.cjs.map → data-list-spacer-1OqlC7WX.cjs.map} +1 -1
  168. package/dist/{data-list-spacer-BmorAN0V.js → data-list-spacer-D3Rn1evn.js} +2 -2
  169. package/dist/{data-list-spacer-BmorAN0V.js.map → data-list-spacer-D3Rn1evn.js.map} +1 -1
  170. package/dist/{data-list-top-DpbOA3uw.js → data-list-top-B-AopfvE.js} +13 -21
  171. package/dist/data-list-top-B-AopfvE.js.map +1 -0
  172. package/dist/{data-list-top-WGUY167p.cjs → data-list-top-DFnudSA_.cjs} +13 -21
  173. package/dist/data-list-top-DFnudSA_.cjs.map +1 -0
  174. package/dist/{data-panel-BQVTKo86.js → data-panel-BWgExbHs.js} +2 -2
  175. package/dist/{data-panel-BQVTKo86.js.map → data-panel-BWgExbHs.js.map} +1 -1
  176. package/dist/{data-panel-XPXrhYJI.cjs → data-panel-C_BqhzeL.cjs} +2 -2
  177. package/dist/{data-panel-XPXrhYJI.cjs.map → data-panel-C_BqhzeL.cjs.map} +1 -1
  178. package/dist/{date-time-range-picker-C-t3Kdpk.js → date-time-range-picker-Bnviv7s-.js} +2 -2
  179. package/dist/{date-time-range-picker-C-t3Kdpk.js.map → date-time-range-picker-Bnviv7s-.js.map} +1 -1
  180. package/dist/{date-time-range-picker-BCzvSYx3.cjs → date-time-range-picker-sT5qAW-_.cjs} +2 -2
  181. package/dist/{date-time-range-picker-BCzvSYx3.cjs.map → date-time-range-picker-sT5qAW-_.cjs.map} +1 -1
  182. package/dist/domains/capabilities/hooks/use-feedback-available.cjs.js +16 -0
  183. package/dist/domains/capabilities/hooks/use-feedback-available.cjs.js.map +1 -0
  184. package/dist/domains/capabilities/hooks/use-feedback-available.d.ts +2 -0
  185. package/dist/domains/capabilities/hooks/use-feedback-available.es.js +12 -0
  186. package/dist/domains/capabilities/hooks/use-feedback-available.es.js.map +1 -0
  187. package/dist/domains/capabilities/hooks/use-observability-capabilities.cjs.js +20 -0
  188. package/dist/domains/capabilities/hooks/use-observability-capabilities.cjs.js.map +1 -0
  189. package/dist/domains/capabilities/hooks/use-observability-capabilities.d.ts +2 -0
  190. package/dist/domains/capabilities/hooks/use-observability-capabilities.es.js +16 -0
  191. package/dist/domains/capabilities/hooks/use-observability-capabilities.es.js.map +1 -0
  192. package/dist/domains/capabilities/hooks/use-trace-query-available.cjs.js +16 -0
  193. package/dist/domains/capabilities/hooks/use-trace-query-available.cjs.js.map +1 -0
  194. package/dist/domains/capabilities/hooks/use-trace-query-available.d.ts +2 -0
  195. package/dist/domains/capabilities/hooks/use-trace-query-available.es.js +12 -0
  196. package/dist/domains/capabilities/hooks/use-trace-query-available.es.js.map +1 -0
  197. package/dist/domains/capabilities/hooks.cjs.js +14 -0
  198. package/dist/domains/capabilities/hooks.cjs.js.map +1 -0
  199. package/dist/domains/capabilities/hooks.d.ts +2 -0
  200. package/dist/domains/capabilities/hooks.es.js +4 -0
  201. package/dist/domains/capabilities/hooks.es.js.map +1 -0
  202. package/dist/domains/capabilities.cjs.js +14 -0
  203. package/dist/domains/capabilities.cjs.js.map +1 -0
  204. package/dist/domains/capabilities.d.ts +2 -0
  205. package/dist/domains/capabilities.es.js +4 -0
  206. package/dist/domains/capabilities.es.js.map +1 -0
  207. package/dist/domains/chat/attachments/attachment-kind.es.js +1 -1
  208. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  209. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  210. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
  211. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
  212. package/dist/domains/chat/components/section-label.cjs.js +1 -1
  213. package/dist/domains/chat/components/section-label.es.js +1 -1
  214. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  215. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  216. package/dist/domains/chat/messages/reasoning-streaming-line.cjs.js +1 -1
  217. package/dist/domains/chat/messages/reasoning-streaming-line.es.js +1 -1
  218. package/dist/domains/chat/messages/reasoning.cjs.js +4 -3
  219. package/dist/domains/chat/messages/reasoning.cjs.js.map +1 -1
  220. package/dist/domains/chat/messages/reasoning.es.js +4 -3
  221. package/dist/domains/chat/messages/reasoning.es.js.map +1 -1
  222. package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
  223. package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
  224. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +2 -2
  225. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js.map +1 -1
  226. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +2 -2
  227. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js.map +1 -1
  228. package/dist/domains/chat/messages/renderers/user-file-part-renderer.es.js +1 -1
  229. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  230. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  231. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
  232. package/dist/domains/chat/messages/system-reminder-badge.cjs.js.map +1 -1
  233. package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
  234. package/dist/domains/chat/messages/system-reminder-badge.es.js.map +1 -1
  235. package/dist/domains/chat/messages/tripwire-notice.cjs.js +2 -2
  236. package/dist/domains/chat/messages/tripwire-notice.cjs.js.map +1 -1
  237. package/dist/domains/chat/messages/tripwire-notice.es.js +2 -2
  238. package/dist/domains/chat/messages/tripwire-notice.es.js.map +1 -1
  239. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  240. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  241. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +3 -3
  242. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js.map +1 -1
  243. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +3 -3
  244. package/dist/domains/chat/tools/badges/code-mode-badge.es.js.map +1 -1
  245. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +6 -4
  246. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js.map +1 -1
  247. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +6 -4
  248. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js.map +1 -1
  249. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +11 -8
  250. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js.map +1 -1
  251. package/dist/domains/chat/tools/badges/observation-renderer.es.js +11 -8
  252. package/dist/domains/chat/tools/badges/observation-renderer.es.js.map +1 -1
  253. package/dist/domains/logs/components/log-data-panel.cjs.js +3 -6
  254. package/dist/domains/logs/components/log-data-panel.cjs.js.map +1 -1
  255. package/dist/domains/logs/components/log-data-panel.es.js +3 -6
  256. package/dist/domains/logs/components/log-data-panel.es.js.map +1 -1
  257. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
  258. package/dist/domains/logs/components/logs-list-view.es.js +2 -2
  259. package/dist/domains/logs/components/no-logs-info.cjs.js +3 -4
  260. package/dist/domains/logs/components/no-logs-info.cjs.js.map +1 -1
  261. package/dist/domains/logs/components/no-logs-info.es.js +3 -4
  262. package/dist/domains/logs/components/no-logs-info.es.js.map +1 -1
  263. package/dist/domains/memory/components/flame-graph.cjs.js +7 -5
  264. package/dist/domains/memory/components/flame-graph.cjs.js.map +1 -1
  265. package/dist/domains/memory/components/flame-graph.es.js +8 -6
  266. package/dist/domains/memory/components/flame-graph.es.js.map +1 -1
  267. package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
  268. package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
  269. package/dist/domains/memory/components/observation-detail-view.cjs.js +4 -5
  270. package/dist/domains/memory/components/observation-detail-view.cjs.js.map +1 -1
  271. package/dist/domains/memory/components/observation-detail-view.es.js +4 -5
  272. package/dist/domains/memory/components/observation-detail-view.es.js.map +1 -1
  273. package/dist/domains/memory/components/thread-context-progress.cjs.js +1 -1
  274. package/dist/domains/memory/components/thread-context-progress.cjs.js.map +1 -1
  275. package/dist/domains/memory/components/thread-context-progress.es.js +1 -1
  276. package/dist/domains/memory/components/thread-context-progress.es.js.map +1 -1
  277. package/dist/domains/memory/lib/timeline.cjs.js +0 -9
  278. package/dist/domains/memory/lib/timeline.cjs.js.map +1 -1
  279. package/dist/domains/memory/lib/timeline.es.js +1 -9
  280. package/dist/domains/memory/lib/timeline.es.js.map +1 -1
  281. package/dist/domains/metrics/components/bar-list.cjs.js +4 -4
  282. package/dist/domains/metrics/components/bar-list.cjs.js.map +1 -1
  283. package/dist/domains/metrics/components/bar-list.es.js +4 -4
  284. package/dist/domains/metrics/components/bar-list.es.js.map +1 -1
  285. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  286. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  287. package/dist/domains/metrics/components/kpi-card-view.cjs.js +1 -1
  288. package/dist/domains/metrics/components/kpi-card-view.cjs.js.map +1 -1
  289. package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
  290. package/dist/domains/metrics/components/kpi-card-view.es.js.map +1 -1
  291. package/dist/domains/metrics/components/latency-card-view.cjs.js +33 -24
  292. package/dist/domains/metrics/components/latency-card-view.cjs.js.map +1 -1
  293. package/dist/domains/metrics/components/latency-card-view.es.js +34 -25
  294. package/dist/domains/metrics/components/latency-card-view.es.js.map +1 -1
  295. package/dist/domains/metrics/components/memory-card-view.cjs.js +9 -8
  296. package/dist/domains/metrics/components/memory-card-view.cjs.js.map +1 -1
  297. package/dist/domains/metrics/components/memory-card-view.es.js +8 -7
  298. package/dist/domains/metrics/components/memory-card-view.es.js.map +1 -1
  299. package/dist/domains/metrics/components/metrics-utils.cjs.js +0 -15
  300. package/dist/domains/metrics/components/metrics-utils.cjs.js.map +1 -1
  301. package/dist/domains/metrics/components/metrics-utils.es.js +1 -14
  302. package/dist/domains/metrics/components/metrics-utils.es.js.map +1 -1
  303. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +6 -5
  304. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js.map +1 -1
  305. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +4 -3
  306. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js.map +1 -1
  307. package/dist/domains/metrics/components/scores-card-view.cjs.js +5 -5
  308. package/dist/domains/metrics/components/scores-card-view.cjs.js.map +1 -1
  309. package/dist/domains/metrics/components/scores-card-view.es.js +5 -5
  310. package/dist/domains/metrics/components/scores-card-view.es.js.map +1 -1
  311. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +7 -6
  312. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js.map +1 -1
  313. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +7 -6
  314. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js.map +1 -1
  315. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +13 -11
  316. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js.map +1 -1
  317. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +13 -11
  318. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js.map +1 -1
  319. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +7 -6
  320. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js.map +1 -1
  321. package/dist/domains/metrics/components/traces-volume-card-view.es.js +8 -7
  322. package/dist/domains/metrics/components/traces-volume-card-view.es.js.map +1 -1
  323. package/dist/domains/metrics/components.cjs.js +0 -2
  324. package/dist/domains/metrics/components.cjs.js.map +1 -1
  325. package/dist/domains/metrics/components.es.js +1 -1
  326. package/dist/domains/metrics/hooks/use-latency-metrics.cjs.js +11 -11
  327. package/dist/domains/metrics/hooks/use-latency-metrics.cjs.js.map +1 -1
  328. package/dist/domains/metrics/hooks/use-latency-metrics.es.js +12 -11
  329. package/dist/domains/metrics/hooks/use-latency-metrics.es.js.map +1 -1
  330. package/dist/domains/metrics/hooks/use-metrics.cjs.js +3 -3
  331. package/dist/domains/metrics/hooks/use-metrics.cjs.js.map +1 -1
  332. package/dist/domains/metrics/hooks/use-metrics.es.js +3 -3
  333. package/dist/domains/metrics/hooks/use-metrics.es.js.map +1 -1
  334. package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.cjs.js +5 -5
  335. package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.cjs.js.map +1 -1
  336. package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.es.js +5 -5
  337. package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.es.js.map +1 -1
  338. package/dist/domains/metrics/hooks/use-scores-metrics.cjs.js +6 -7
  339. package/dist/domains/metrics/hooks/use-scores-metrics.cjs.js.map +1 -1
  340. package/dist/domains/metrics/hooks/use-scores-metrics.es.js +6 -7
  341. package/dist/domains/metrics/hooks/use-scores-metrics.es.js.map +1 -1
  342. package/dist/domains/metrics/hooks/use-token-usage-timeseries.cjs.js +4 -12
  343. package/dist/domains/metrics/hooks/use-token-usage-timeseries.cjs.js.map +1 -1
  344. package/dist/domains/metrics/hooks/use-token-usage-timeseries.es.js +4 -12
  345. package/dist/domains/metrics/hooks/use-token-usage-timeseries.es.js.map +1 -1
  346. package/dist/domains/metrics/hooks.cjs.js +3 -0
  347. package/dist/domains/metrics/hooks.cjs.js.map +1 -1
  348. package/dist/domains/metrics/hooks.es.js +1 -0
  349. package/dist/domains/metrics/hooks.es.js.map +1 -1
  350. package/dist/domains/metrics/metrics-interval.cjs.js +20 -0
  351. package/dist/domains/metrics/metrics-interval.cjs.js.map +1 -0
  352. package/dist/domains/metrics/metrics-interval.d.ts +2 -0
  353. package/dist/domains/metrics/metrics-interval.es.js +15 -0
  354. package/dist/domains/metrics/metrics-interval.es.js.map +1 -0
  355. package/dist/domains/metrics.cjs.js +3 -2
  356. package/dist/domains/metrics.cjs.js.map +1 -1
  357. package/dist/domains/metrics.es.js +2 -1
  358. package/dist/domains/metrics.es.js.map +1 -1
  359. package/dist/domains/traces/components/no-traces-info.cjs.js +3 -4
  360. package/dist/domains/traces/components/no-traces-info.cjs.js.map +1 -1
  361. package/dist/domains/traces/components/no-traces-info.es.js +3 -4
  362. package/dist/domains/traces/components/no-traces-info.es.js.map +1 -1
  363. package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -1
  364. package/dist/domains/traces/components/span-data-panel-view.es.js +1 -1
  365. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  366. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  367. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  368. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  369. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +3 -2
  370. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js.map +1 -1
  371. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +3 -2
  372. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js.map +1 -1
  373. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +1 -1
  374. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js.map +1 -1
  375. package/dist/domains/traces/components/span-payload/span-payload-json.es.js +1 -1
  376. package/dist/domains/traces/components/span-payload/span-payload-json.es.js.map +1 -1
  377. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +1 -1
  378. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +1 -1
  379. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
  380. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
  381. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  382. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  383. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
  384. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
  385. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +3 -2
  386. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js.map +1 -1
  387. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +3 -2
  388. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js.map +1 -1
  389. package/dist/domains/traces/components/span-summary-description.cjs.js +6 -4
  390. package/dist/domains/traces/components/span-summary-description.cjs.js.map +1 -1
  391. package/dist/domains/traces/components/span-summary-description.es.js +7 -5
  392. package/dist/domains/traces/components/span-summary-description.es.js.map +1 -1
  393. package/dist/domains/traces/components/span-timeline-row.cjs.js +3 -4
  394. package/dist/domains/traces/components/span-timeline-row.cjs.js.map +1 -1
  395. package/dist/domains/traces/components/span-timeline-row.es.js +3 -4
  396. package/dist/domains/traces/components/span-timeline-row.es.js.map +1 -1
  397. package/dist/domains/traces/components/span-timing-hover-card.cjs.js +6 -11
  398. package/dist/domains/traces/components/span-timing-hover-card.cjs.js.map +1 -1
  399. package/dist/domains/traces/components/span-timing-hover-card.es.js +6 -11
  400. package/dist/domains/traces/components/span-timing-hover-card.es.js.map +1 -1
  401. package/dist/domains/traces/components/span-type-legend.cjs.js +1 -1
  402. package/dist/domains/traces/components/span-type-legend.es.js +1 -1
  403. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  404. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  405. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +1 -1
  406. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +1 -1
  407. package/dist/domains/traces/components/timeline-timing-col.cjs.js +3 -4
  408. package/dist/domains/traces/components/timeline-timing-col.cjs.js.map +1 -1
  409. package/dist/domains/traces/components/timeline-timing-col.es.js +3 -4
  410. package/dist/domains/traces/components/timeline-timing-col.es.js.map +1 -1
  411. package/dist/domains/traces/components/trace-columns-menu.cjs.js +21 -18
  412. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  413. package/dist/domains/traces/components/trace-columns-menu.es.js +21 -18
  414. package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
  415. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +2 -2
  416. package/dist/domains/traces/components/trace-data-panel-view.es.js +2 -2
  417. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  418. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  419. package/dist/domains/traces/components/trace-span-timeline.cjs.js +10 -4
  420. package/dist/domains/traces/components/trace-span-timeline.cjs.js.map +1 -1
  421. package/dist/domains/traces/components/trace-span-timeline.es.js +10 -4
  422. package/dist/domains/traces/components/trace-span-timeline.es.js.map +1 -1
  423. package/dist/domains/traces/components/trace-span-tree.cjs.js +3 -4
  424. package/dist/domains/traces/components/trace-span-tree.cjs.js.map +1 -1
  425. package/dist/domains/traces/components/trace-span-tree.es.js +3 -4
  426. package/dist/domains/traces/components/trace-span-tree.es.js.map +1 -1
  427. package/dist/domains/traces/components/trace-summary-description.cjs.js +13 -10
  428. package/dist/domains/traces/components/trace-summary-description.cjs.js.map +1 -1
  429. package/dist/domains/traces/components/trace-summary-description.es.js +13 -10
  430. package/dist/domains/traces/components/trace-summary-description.es.js.map +1 -1
  431. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +1 -1
  432. package/dist/domains/traces/components/trace-time-range-chip.es.js +1 -1
  433. package/dist/domains/traces/components/traces-list-view.cjs.js +12 -10
  434. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  435. package/dist/domains/traces/components/traces-list-view.es.js +12 -10
  436. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  437. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -1
  438. package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -1
  439. package/dist/domains/traces/hooks/use-branch.cjs.js +0 -1
  440. package/dist/domains/traces/hooks/use-branch.cjs.js.map +1 -1
  441. package/dist/domains/traces/hooks/use-branch.es.js +0 -1
  442. package/dist/domains/traces/hooks/use-branch.es.js.map +1 -1
  443. package/dist/domains/traces/hooks/use-trace-light-spans.cjs.js +0 -1
  444. package/dist/domains/traces/hooks/use-trace-light-spans.cjs.js.map +1 -1
  445. package/dist/domains/traces/hooks/use-trace-light-spans.es.js +0 -1
  446. package/dist/domains/traces/hooks/use-trace-light-spans.es.js.map +1 -1
  447. package/dist/domains/traces/hooks/use-trace-query.cjs.js +63 -3
  448. package/dist/domains/traces/hooks/use-trace-query.cjs.js.map +1 -1
  449. package/dist/domains/traces/hooks/use-trace-query.es.js +61 -4
  450. package/dist/domains/traces/hooks/use-trace-query.es.js.map +1 -1
  451. package/dist/domains/traces/hooks/use-trace-search.cjs.js +0 -1
  452. package/dist/domains/traces/hooks/use-trace-search.cjs.js.map +1 -1
  453. package/dist/domains/traces/hooks/use-trace-search.es.js +0 -1
  454. package/dist/domains/traces/hooks/use-trace-search.es.js.map +1 -1
  455. package/dist/domains/traces/hooks/use-trace-spans.cjs.js +0 -1
  456. package/dist/domains/traces/hooks/use-trace-spans.cjs.js.map +1 -1
  457. package/dist/domains/traces/hooks/use-trace-spans.es.js +0 -1
  458. package/dist/domains/traces/hooks/use-trace-spans.es.js.map +1 -1
  459. package/dist/domains/traces/hooks/use-traces-list-source.cjs.js +42 -0
  460. package/dist/domains/traces/hooks/use-traces-list-source.cjs.js.map +1 -0
  461. package/dist/domains/traces/hooks/use-traces-list-source.d.ts +2 -0
  462. package/dist/domains/traces/hooks/use-traces-list-source.es.js +38 -0
  463. package/dist/domains/traces/hooks/use-traces-list-source.es.js.map +1 -0
  464. package/dist/domains/traces/hooks.cjs.js +2 -0
  465. package/dist/domains/traces/hooks.cjs.js.map +1 -1
  466. package/dist/domains/traces/hooks.es.js +1 -0
  467. package/dist/domains/traces/hooks.es.js.map +1 -1
  468. package/dist/domains/traces/trace-filters.cjs.js +10 -1
  469. package/dist/domains/traces/trace-filters.cjs.js.map +1 -1
  470. package/dist/domains/traces/trace-filters.es.js +10 -1
  471. package/dist/domains/traces/trace-filters.es.js.map +1 -1
  472. package/dist/domains/traces/utils/span-utils.cjs.js +4 -36
  473. package/dist/domains/traces/utils/span-utils.cjs.js.map +1 -1
  474. package/dist/domains/traces/utils/span-utils.es.js +4 -32
  475. package/dist/domains/traces/utils/span-utils.es.js.map +1 -1
  476. package/dist/domains/traces/utils.cjs.js +1 -1
  477. package/dist/domains/traces/utils.es.js +1 -1
  478. package/dist/domains/traces.cjs.js +3 -1
  479. package/dist/domains/traces.cjs.js.map +1 -1
  480. package/dist/domains/traces.es.js +2 -1
  481. package/dist/domains/traces.es.js.map +1 -1
  482. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +1 -1
  483. package/dist/ee/signals/components/entity-index-compact-grid.es.js +1 -1
  484. package/dist/ee/signals/components/entity-index-list.cjs.js +2 -2
  485. package/dist/ee/signals/components/entity-index-list.es.js +2 -2
  486. package/dist/ee/signals/components/entity-index-model.cjs.js +3 -2
  487. package/dist/ee/signals/components/entity-index-model.cjs.js.map +1 -1
  488. package/dist/ee/signals/components/entity-index-model.es.js +3 -2
  489. package/dist/ee/signals/components/entity-index-model.es.js.map +1 -1
  490. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +2 -2
  491. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +2 -2
  492. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -2
  493. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +2 -2
  494. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +1 -1
  495. package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
  496. package/dist/ee/signals/signal-formatting.cjs.js +6 -34
  497. package/dist/ee/signals/signal-formatting.cjs.js.map +1 -1
  498. package/dist/ee/signals/signal-formatting.es.js +6 -34
  499. package/dist/ee/signals/signal-formatting.es.js.map +1 -1
  500. package/dist/ee/signals/snapshot-timeline-data.cjs.js +1 -1
  501. package/dist/ee/signals/snapshot-timeline-data.cjs.js.map +1 -1
  502. package/dist/ee/signals/snapshot-timeline-data.es.js +1 -1
  503. package/dist/ee/signals/snapshot-timeline-data.es.js.map +1 -1
  504. package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
  505. package/dist/ee/signals/view-mode-tab.es.js +1 -1
  506. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +1 -1
  507. package/dist/ee/topics/components/topic-trace-summary-list.es.js +1 -1
  508. package/dist/field-block-error-msg-Y0fi0HUC.js +22 -0
  509. package/dist/field-block-error-msg-Y0fi0HUC.js.map +1 -0
  510. package/dist/field-block-error-msg-oudJz2Hx.cjs +24 -0
  511. package/dist/field-block-error-msg-oudJz2Hx.cjs.map +1 -0
  512. package/dist/{field-error-id-DyWx33Fu.js → field-error-id-DD7OARLU.js} +2 -13
  513. package/dist/field-error-id-DD7OARLU.js.map +1 -0
  514. package/dist/{field-error-id-6EfqmQ4C.cjs → field-error-id-V_WejsRL.cjs} +4 -15
  515. package/dist/field-error-id-V_WejsRL.cjs.map +1 -0
  516. package/dist/hooks/use-elapsed-time.cjs.js +25 -0
  517. package/dist/hooks/use-elapsed-time.cjs.js.map +1 -0
  518. package/dist/hooks/use-elapsed-time.d.ts +2 -0
  519. package/dist/hooks/use-elapsed-time.es.js +21 -0
  520. package/dist/hooks/use-elapsed-time.es.js.map +1 -0
  521. package/dist/inline-code-BW6W121s.js +13 -0
  522. package/dist/inline-code-BW6W121s.js.map +1 -0
  523. package/dist/inline-code-CSwG-x8D.cjs +15 -0
  524. package/dist/inline-code-CSwG-x8D.cjs.map +1 -0
  525. package/dist/layout/tabbed-container.cjs.js +3 -3
  526. package/dist/layout/tabbed-container.es.js +3 -3
  527. package/dist/{list-search-S1mco9Bl.cjs → list-search-CsYQX8qR.cjs} +2 -2
  528. package/dist/{list-search-S1mco9Bl.cjs.map → list-search-CsYQX8qR.cjs.map} +1 -1
  529. package/dist/{list-search-FJ1O5F3S.js → list-search-D1FD8FCL.js} +2 -2
  530. package/dist/{list-search-FJ1O5F3S.js.map → list-search-D1FD8FCL.js.map} +1 -1
  531. package/dist/{logs-data-list-5BAeLU57.js → logs-data-list-BKE5vYZR.js} +4 -4
  532. package/dist/{logs-data-list-5BAeLU57.js.map → logs-data-list-BKE5vYZR.js.map} +1 -1
  533. package/dist/{logs-data-list-YL9yLKF3.cjs → logs-data-list-lJK0yGYj.cjs} +4 -4
  534. package/dist/{logs-data-list-YL9yLKF3.cjs.map → logs-data-list-lJK0yGYj.cjs.map} +1 -1
  535. package/dist/{metrics-card-Bzm6m1dy.js → metrics-card-C2RTi5Ew.js} +7 -7
  536. package/dist/metrics-card-C2RTi5Ew.js.map +1 -0
  537. package/dist/{metrics-card-DCCHIG-z.cjs → metrics-card-DzcVJTAN.cjs} +7 -7
  538. package/dist/metrics-card-DzcVJTAN.cjs.map +1 -0
  539. package/dist/{metrics-kpi-card-BrnFhFQm.js → metrics-kpi-card-BVCuXeDa.js} +21 -10
  540. package/dist/metrics-kpi-card-BVCuXeDa.js.map +1 -0
  541. package/dist/{metrics-kpi-card-Bhb4R4z0.cjs → metrics-kpi-card-DoIeHfv6.cjs} +21 -10
  542. package/dist/metrics-kpi-card-DoIeHfv6.cjs.map +1 -0
  543. package/dist/{metrics-line-chart-0FR3SYSt.cjs → metrics-line-chart-BNNRRxM8.cjs} +61 -25
  544. package/dist/metrics-line-chart-BNNRRxM8.cjs.map +1 -0
  545. package/dist/{metrics-line-chart-knlgw8bV.js → metrics-line-chart-CT_pqJtC.js} +62 -27
  546. package/dist/metrics-line-chart-CT_pqJtC.js.map +1 -0
  547. package/dist/new/layout/page-header.cjs.js +1 -1
  548. package/dist/new/layout/page-header.es.js +1 -1
  549. package/dist/new/settings.cjs.js +2 -2
  550. package/dist/new/settings.es.js +2 -2
  551. package/dist/{page-header-CyXAezlZ.js → page-header-BGyZw13s.js} +2 -2
  552. package/dist/page-header-BGyZw13s.js.map +1 -0
  553. package/dist/{page-header-Dk3s3XtC.cjs → page-header-CqvBk1wE.cjs} +2 -2
  554. package/dist/page-header-CqvBk1wE.cjs.map +1 -0
  555. package/dist/{schemes-C9EhSOkB.js → schemes-CGK3gQJ6.js} +2 -2
  556. package/dist/{schemes-C9EhSOkB.js.map → schemes-CGK3gQJ6.js.map} +1 -1
  557. package/dist/{search-field-block-fU3tStmB.js → search-field-block-Dj2KJyjQ.js} +2 -2
  558. package/dist/{search-field-block-fU3tStmB.js.map → search-field-block-Dj2KJyjQ.js.map} +1 -1
  559. package/dist/{search-field-block-7-ufp4uG.cjs → search-field-block-K_e_S9WY.cjs} +2 -2
  560. package/dist/{search-field-block-7-ufp4uG.cjs.map → search-field-block-K_e_S9WY.cjs.map} +1 -1
  561. package/dist/{section-B9OLuEq3.js → section-Bi0g7cn6.js} +2 -2
  562. package/dist/{section-B9OLuEq3.js.map → section-Bi0g7cn6.js.map} +1 -1
  563. package/dist/{section-CTihfzmc.cjs → section-p9vCSmPq.cjs} +2 -2
  564. package/dist/{section-CTihfzmc.cjs.map → section-p9vCSmPq.cjs.map} +1 -1
  565. package/dist/{select-field-block-BfiHq9t6.js → select-field-block-BF8v698d.js} +2 -2
  566. package/dist/{select-field-block-BfiHq9t6.js.map → select-field-block-BF8v698d.js.map} +1 -1
  567. package/dist/{select-field-block-DJo2cX9Y.cjs → select-field-block-CaGjpIKM.cjs} +2 -2
  568. package/dist/{select-field-block-DJo2cX9Y.cjs.map → select-field-block-CaGjpIKM.cjs.map} +1 -1
  569. package/dist/{settings-row-BoAuUUuH.cjs → settings-row-Cr8gaO5a.cjs} +14 -4
  570. package/dist/settings-row-Cr8gaO5a.cjs.map +1 -0
  571. package/dist/{settings-row-B2IekRyH.js → settings-row-Cr9DsBSX.js} +14 -4
  572. package/dist/settings-row-Cr9DsBSX.js.map +1 -0
  573. package/dist/{span-payload-primitives-Buq9V8nK.js → span-payload-primitives-Dmzm3mb2.js} +2 -2
  574. package/dist/{span-payload-primitives-Buq9V8nK.js.map → span-payload-primitives-Dmzm3mb2.js.map} +1 -1
  575. package/dist/{span-payload-primitives-CjlNH9C-.cjs → span-payload-primitives-Dq8WqqNm.cjs} +2 -2
  576. package/dist/{span-payload-primitives-CjlNH9C-.cjs.map → span-payload-primitives-Dq8WqqNm.cjs.map} +1 -1
  577. package/dist/src/domains/capabilities/hooks/index.d.ts +3 -0
  578. package/dist/src/domains/capabilities/hooks/use-feedback-available.d.ts +8 -0
  579. package/dist/src/domains/capabilities/hooks/use-observability-capabilities.d.ts +22 -0
  580. package/dist/src/domains/capabilities/hooks/use-trace-query-available.d.ts +8 -0
  581. package/dist/src/domains/capabilities/index.d.ts +1 -0
  582. package/dist/src/domains/chat/messages/reasoning.d.ts +3 -1
  583. package/dist/src/domains/chat/messages/renderers/reasoning-part-renderer.d.ts +3 -1
  584. package/dist/src/domains/chat/stories/reasoning.stories.d.ts +1 -1
  585. package/dist/src/domains/memory/lib/timeline.d.ts +0 -1
  586. package/dist/src/domains/metrics/components/index.d.ts +1 -1
  587. package/dist/src/domains/metrics/components/kpi-card-view.d.ts +2 -1
  588. package/dist/src/domains/metrics/components/latency-card-view.d.ts +4 -1
  589. package/dist/src/domains/metrics/components/metrics-utils.d.ts +0 -2
  590. package/dist/src/domains/metrics/hooks/index.d.ts +1 -0
  591. package/dist/src/domains/metrics/hooks/use-latency-metrics.d.ts +2 -2
  592. package/dist/src/domains/metrics/hooks/use-token-usage-timeseries.d.ts +2 -1
  593. package/dist/src/domains/metrics/metrics-interval.d.ts +7 -0
  594. package/dist/src/domains/traces/components/trace-columns-menu.d.ts +3 -1
  595. package/dist/src/domains/traces/components/trace-data-panel-view.stories.d.ts +1 -1
  596. package/dist/src/domains/traces/hooks/index.d.ts +1 -0
  597. package/dist/src/domains/traces/hooks/use-trace-query.d.ts +19 -2
  598. package/dist/src/domains/traces/hooks/use-traces-list-source.d.ts +46 -0
  599. package/dist/src/domains/traces/trace-filters.d.ts +6 -1
  600. package/dist/src/domains/traces/utils/index.d.ts +1 -1
  601. package/dist/src/domains/traces/utils/span-utils.d.ts +1 -6
  602. package/dist/src/ds/components/Card/Card.d.ts +2 -2
  603. package/dist/src/ds/components/CompactNumber/compact-number.d.ts +6 -0
  604. package/dist/src/ds/components/CompactNumber/compact-number.stories.d.ts +7 -0
  605. package/dist/src/ds/components/CompactNumber/index.d.ts +1 -0
  606. package/dist/src/ds/components/DataList/data-list-cells.d.ts +4 -3
  607. package/dist/src/ds/components/InlineCode/index.d.ts +1 -0
  608. package/dist/src/ds/components/InlineCode/inline-code.d.ts +3 -0
  609. package/dist/src/ds/components/InlineCode/inline-code.stories.d.ts +13 -0
  610. package/dist/src/ds/components/ItemList/item-list-date-cell.d.ts +3 -2
  611. package/dist/src/ds/components/MetricsCardGroup/metrics-card-group.d.ts +3 -8
  612. package/dist/src/ds/components/MetricsLineChart/index.d.ts +1 -0
  613. package/dist/src/ds/components/MetricsLineChart/metrics-line-chart-legend.d.ts +6 -0
  614. package/dist/src/ds/components/MetricsLineChart/metrics-line-chart.d.ts +6 -4
  615. package/dist/src/ds/components/MetricsLineChart/metrics-line-chart.stories.d.ts +1 -0
  616. package/dist/src/ds/components/RelativeTimestamp/index.d.ts +1 -0
  617. package/dist/src/ds/components/RelativeTimestamp/relative-timestamp.d.ts +6 -0
  618. package/dist/src/ds/components/RelativeTimestamp/relative-timestamp.stories.d.ts +7 -0
  619. package/dist/src/ds/components/StatusIndicators/status-dot-styles.d.ts +31 -2
  620. package/dist/src/ds/components/StatusIndicators/status-dot.stories.d.ts +3 -4
  621. package/dist/src/ds/components/StatusIndicators/status.d.ts +2 -3
  622. package/dist/src/ds/components/StatusIndicators/status.stories.d.ts +2 -1
  623. package/dist/src/ds/components/Txt/Txt.d.ts +5 -1
  624. package/dist/src/ds/components/ai/task-list/task-graph-node.d.ts +8 -0
  625. package/dist/src/ds/components/ai/task-list/task-graph.d.ts +8 -0
  626. package/dist/src/ds/components/ai/task-list/task-list.d.ts +4 -8
  627. package/dist/src/ds/components/ai/task-list/task-list.stories.d.ts +1 -1
  628. package/dist/src/ds/components/ai/task-list/use-focused-row-scroll.d.ts +12 -0
  629. package/dist/src/ds/new/layout/page-header/page-header.stories.d.ts +1 -0
  630. package/dist/src/ds/new/settings/settings-row.d.ts +3 -1
  631. package/dist/src/ds/new/settings/settings.stories.d.ts +1 -0
  632. package/dist/src/hooks/stories/state/use-elapsed-time.stories.d.ts +17 -0
  633. package/dist/src/hooks/use-elapsed-time.d.ts +2 -0
  634. package/dist/src/lib/cost.d.ts +6 -0
  635. package/dist/src/utils/cost.d.ts +1 -0
  636. package/dist/src/utils/date-format.d.ts +28 -0
  637. package/dist/src/utils/duration.d.ts +7 -1
  638. package/dist/src/utils/relative-time.d.ts +7 -0
  639. package/dist/style.css +329 -18
  640. package/dist/{text-field-block-DGIM1i3Z.js → text-field-block-BYPiO9h4.js} +2 -2
  641. package/dist/{text-field-block-DGIM1i3Z.js.map → text-field-block-BYPiO9h4.js.map} +1 -1
  642. package/dist/{text-field-block-DePCgDOh.cjs → text-field-block-CRh8sRXP.cjs} +2 -2
  643. package/dist/{text-field-block-DePCgDOh.cjs.map → text-field-block-CRh8sRXP.cjs.map} +1 -1
  644. package/dist/{tool-call-Bs-9Cah5.js → tool-call-CIeNEYpK.js} +2 -2
  645. package/dist/{tool-call-Bs-9Cah5.js.map → tool-call-CIeNEYpK.js.map} +1 -1
  646. package/dist/{tool-call-C0JeHe8Z.cjs → tool-call-CnEm3eE0.cjs} +2 -2
  647. package/dist/{tool-call-C0JeHe8Z.cjs.map → tool-call-CnEm3eE0.cjs.map} +1 -1
  648. package/dist/{traces-data-list-Dam8-XW-.cjs → traces-data-list-C5KZesk6.cjs} +5 -5
  649. package/dist/{traces-data-list-Dam8-XW-.cjs.map → traces-data-list-C5KZesk6.cjs.map} +1 -1
  650. package/dist/{traces-data-list-Dvi0s56v.js → traces-data-list-CdWW9J6z.js} +5 -5
  651. package/dist/{traces-data-list-Dvi0s56v.js.map → traces-data-list-CdWW9J6z.js.map} +1 -1
  652. package/dist/utils/cost.cjs.js +40 -0
  653. package/dist/utils/cost.cjs.js.map +1 -0
  654. package/dist/utils/cost.d.ts +2 -0
  655. package/dist/utils/cost.es.js +34 -0
  656. package/dist/utils/cost.es.js.map +1 -0
  657. package/dist/utils/date-format.cjs.js +99 -0
  658. package/dist/utils/date-format.cjs.js.map +1 -0
  659. package/dist/utils/date-format.d.ts +2 -0
  660. package/dist/utils/date-format.es.js +91 -0
  661. package/dist/utils/date-format.es.js.map +1 -0
  662. package/dist/utils/duration.cjs.js +19 -2
  663. package/dist/utils/duration.cjs.js.map +1 -1
  664. package/dist/utils/duration.es.js +18 -3
  665. package/dist/utils/duration.es.js.map +1 -1
  666. package/dist/utils/file.es.js +2 -2
  667. package/dist/utils/relative-time.cjs.js +12 -0
  668. package/dist/utils/relative-time.cjs.js.map +1 -0
  669. package/dist/utils/relative-time.d.ts +2 -0
  670. package/dist/utils/relative-time.es.js +8 -0
  671. package/dist/utils/relative-time.es.js.map +1 -0
  672. package/package.json +7 -7
  673. package/dist/Badge-BEeYtjmv.cjs.map +0 -1
  674. package/dist/Badge-TD55_qZJ.js.map +0 -1
  675. package/dist/Txt-B4-2nLaI.cjs.map +0 -1
  676. package/dist/Txt-DTh3Pa_a.js.map +0 -1
  677. package/dist/data-list-top-DpbOA3uw.js.map +0 -1
  678. package/dist/data-list-top-WGUY167p.cjs.map +0 -1
  679. package/dist/field-error-id-6EfqmQ4C.cjs.map +0 -1
  680. package/dist/field-error-id-DyWx33Fu.js.map +0 -1
  681. package/dist/metrics-card-Bzm6m1dy.js.map +0 -1
  682. package/dist/metrics-card-DCCHIG-z.cjs.map +0 -1
  683. package/dist/metrics-kpi-card-Bhb4R4z0.cjs.map +0 -1
  684. package/dist/metrics-kpi-card-BrnFhFQm.js.map +0 -1
  685. package/dist/metrics-line-chart-0FR3SYSt.cjs.map +0 -1
  686. package/dist/metrics-line-chart-knlgw8bV.js.map +0 -1
  687. package/dist/page-header-CyXAezlZ.js.map +0 -1
  688. package/dist/page-header-Dk3s3XtC.cjs.map +0 -1
  689. package/dist/settings-row-B2IekRyH.js.map +0 -1
  690. package/dist/settings-row-BoAuUUuH.cjs.map +0 -1
  691. package/dist/src/ds/components/Table/utils.d.ts +0 -4
@@ -2,8 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
+ const utils_dateFormat = require('../../../utils/date-format.cjs.js');
6
+
5
7
  const numberFormatter = new Intl.NumberFormat("en-US");
6
- const dateFormatter = new Intl.DateTimeFormat("en-US", { dateStyle: "medium", timeStyle: "short" });
7
8
  function filterAndSortEntities(entities, search, sort) {
8
9
  const term = search.trim().toLocaleLowerCase();
9
10
  const filtered = term ? entities.filter((entity) => `${entity.entityType} ${entity.entityId}`.toLocaleLowerCase().includes(term)) : [...entities];
@@ -19,7 +20,7 @@ function entityIndexMetadata(entity) {
19
20
  traceCount: entity.traceCount === void 0 ? "—" : numberFormatter.format(entity.traceCount),
20
21
  signalsSet: readySignalCount === void 0 || enabledSignalCount === void 0 ? "—" : `${readySignalCount} of ${enabledSignalCount}`,
21
22
  status: entity.status,
22
- updatedAt: entity.updatedAt === void 0 ? "—" : dateFormatter.format(new Date(entity.updatedAt))
23
+ updatedAt: utils_dateFormat.formatDate(entity.updatedAt, "date-time") ?? "—"
23
24
  };
24
25
  }
25
26
  function entityStatusLabel(status) {
@@ -1 +1 @@
1
- {"version":3,"file":"entity-index-model.cjs.js","sources":["../../../../src/ee/signals/components/entity-index-model.ts"],"sourcesContent":["import type { EntityLearningProgressStatus, ThemeLearningEntity } from '@mastra/client-js';\n\nexport type TraceIntelligenceEntitySort = 'default' | 'entity-asc' | 'entity-desc';\nexport type TraceIntelligenceEntityView = 'compact' | 'list';\n\nconst numberFormatter = new Intl.NumberFormat('en-US');\nconst dateFormatter = new Intl.DateTimeFormat('en-US', { dateStyle: 'medium', timeStyle: 'short' });\n\nexport type EntityIndexMetadata = {\n traceCount: string;\n signalsSet: string;\n status?: EntityLearningProgressStatus;\n updatedAt: string;\n};\n\nexport function filterAndSortEntities(\n entities: readonly ThemeLearningEntity[],\n search: string,\n sort: TraceIntelligenceEntitySort,\n): ThemeLearningEntity[] {\n const term = search.trim().toLocaleLowerCase();\n const filtered = term\n ? entities.filter(entity => `${entity.entityType} ${entity.entityId}`.toLocaleLowerCase().includes(term))\n : [...entities];\n if (sort === 'default') return filtered;\n\n const direction = sort === 'entity-asc' ? 1 : -1;\n return filtered.toSorted((left, right) => direction * left.entityId.localeCompare(right.entityId));\n}\n\nexport function entityIndexMetadata(entity: ThemeLearningEntity): EntityIndexMetadata {\n const enabledCatalog = entity.signalCatalog?.filter(signal => signal.enabled);\n const enabledSignalCount = entity.enabledSignalCount ?? enabledCatalog?.length;\n const readySignalCount =\n entity.readySignalCount ?? enabledCatalog?.filter(signal => signal.status === 'ready').length;\n return {\n traceCount: entity.traceCount === undefined ? '—' : numberFormatter.format(entity.traceCount),\n signalsSet:\n readySignalCount === undefined || enabledSignalCount === undefined\n ? '—'\n : `${readySignalCount} of ${enabledSignalCount}`,\n status: entity.status,\n updatedAt: entity.updatedAt === undefined ? '—' : dateFormatter.format(new Date(entity.updatedAt)),\n };\n}\n\nexport function entityStatusLabel(status: EntityLearningProgressStatus | undefined): string {\n if (!status) return 'Unavailable';\n return status.charAt(0).toUpperCase() + status.slice(1);\n}\n"],"names":[],"mappings":";;;;AAKA,MAAM,eAAA,GAAkB,IAAI,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AACrD,MAAM,aAAA,GAAgB,IAAI,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,EAAE,SAAA,EAAW,QAAA,EAAU,SAAA,EAAW,OAAA,EAAS,CAAA;AAS3F,SAAS,qBAAA,CACd,QAAA,EACA,MAAA,EACA,IAAA,EACuB;AACvB,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,EAAK,CAAE,iBAAA,EAAkB;AAC7C,EAAA,MAAM,QAAA,GAAW,OACb,QAAA,CAAS,MAAA,CAAO,YAAU,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,CAAA,EAAI,MAAA,CAAO,QAAQ,CAAA,CAAA,CAAG,iBAAA,GAAoB,QAAA,CAAS,IAAI,CAAC,CAAA,GACtG,CAAC,GAAG,QAAQ,CAAA;AAChB,EAAA,IAAI,IAAA,KAAS,WAAW,OAAO,QAAA;AAE/B,EAAA,MAAM,SAAA,GAAY,IAAA,KAAS,YAAA,GAAe,CAAA,GAAI,EAAA;AAC9C,EAAA,OAAO,QAAA,CAAS,QAAA,CAAS,CAAC,IAAA,EAAM,KAAA,KAAU,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,aAAA,CAAc,KAAA,CAAM,QAAQ,CAAC,CAAA;AACnG;AAEO,SAAS,oBAAoB,MAAA,EAAkD;AACpF,EAAA,MAAM,iBAAiB,MAAA,CAAO,aAAA,EAAe,MAAA,CAAO,CAAA,MAAA,KAAU,OAAO,OAAO,CAAA;AAC5E,EAAA,MAAM,kBAAA,GAAqB,MAAA,CAAO,kBAAA,IAAsB,cAAA,EAAgB,MAAA;AACxE,EAAA,MAAM,gBAAA,GACJ,OAAO,gBAAA,IAAoB,cAAA,EAAgB,OAAO,CAAA,MAAA,KAAU,MAAA,CAAO,MAAA,KAAW,OAAO,CAAA,CAAE,MAAA;AACzF,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,OAAO,UAAA,KAAe,MAAA,GAAY,MAAM,eAAA,CAAgB,MAAA,CAAO,OAAO,UAAU,CAAA;AAAA,IAC5F,UAAA,EACE,qBAAqB,MAAA,IAAa,kBAAA,KAAuB,SACrD,GAAA,GACA,CAAA,EAAG,gBAAgB,CAAA,IAAA,EAAO,kBAAkB,CAAA,CAAA;AAAA,IAClD,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,SAAA,EAAW,MAAA,CAAO,SAAA,KAAc,MAAA,GAAY,GAAA,GAAM,aAAA,CAAc,MAAA,CAAO,IAAI,IAAA,CAAK,MAAA,CAAO,SAAS,CAAC;AAAA,GACnG;AACF;AAEO,SAAS,kBAAkB,MAAA,EAA0D;AAC1F,EAAA,IAAI,CAAC,QAAQ,OAAO,aAAA;AACpB,EAAA,OAAO,MAAA,CAAO,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,MAAA,CAAO,MAAM,CAAC,CAAA;AACxD;;;;;;"}
1
+ {"version":3,"file":"entity-index-model.cjs.js","sources":["../../../../src/ee/signals/components/entity-index-model.ts"],"sourcesContent":["import type { EntityLearningProgressStatus, ThemeLearningEntity } from '@mastra/client-js';\nimport { formatDate } from '@/utils/date-format';\n\nexport type TraceIntelligenceEntitySort = 'default' | 'entity-asc' | 'entity-desc';\nexport type TraceIntelligenceEntityView = 'compact' | 'list';\n\nconst numberFormatter = new Intl.NumberFormat('en-US');\n\nexport type EntityIndexMetadata = {\n traceCount: string;\n signalsSet: string;\n status?: EntityLearningProgressStatus;\n updatedAt: string;\n};\n\nexport function filterAndSortEntities(\n entities: readonly ThemeLearningEntity[],\n search: string,\n sort: TraceIntelligenceEntitySort,\n): ThemeLearningEntity[] {\n const term = search.trim().toLocaleLowerCase();\n const filtered = term\n ? entities.filter(entity => `${entity.entityType} ${entity.entityId}`.toLocaleLowerCase().includes(term))\n : [...entities];\n if (sort === 'default') return filtered;\n\n const direction = sort === 'entity-asc' ? 1 : -1;\n return filtered.toSorted((left, right) => direction * left.entityId.localeCompare(right.entityId));\n}\n\nexport function entityIndexMetadata(entity: ThemeLearningEntity): EntityIndexMetadata {\n const enabledCatalog = entity.signalCatalog?.filter(signal => signal.enabled);\n const enabledSignalCount = entity.enabledSignalCount ?? enabledCatalog?.length;\n const readySignalCount =\n entity.readySignalCount ?? enabledCatalog?.filter(signal => signal.status === 'ready').length;\n return {\n traceCount: entity.traceCount === undefined ? '—' : numberFormatter.format(entity.traceCount),\n signalsSet:\n readySignalCount === undefined || enabledSignalCount === undefined\n ? '—'\n : `${readySignalCount} of ${enabledSignalCount}`,\n status: entity.status,\n updatedAt: formatDate(entity.updatedAt, 'date-time') ?? '—',\n };\n}\n\nexport function entityStatusLabel(status: EntityLearningProgressStatus | undefined): string {\n if (!status) return 'Unavailable';\n return status.charAt(0).toUpperCase() + status.slice(1);\n}\n"],"names":["formatDate"],"mappings":";;;;;;AAMA,MAAM,eAAA,GAAkB,IAAI,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AAS9C,SAAS,qBAAA,CACd,QAAA,EACA,MAAA,EACA,IAAA,EACuB;AACvB,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,EAAK,CAAE,iBAAA,EAAkB;AAC7C,EAAA,MAAM,QAAA,GAAW,OACb,QAAA,CAAS,MAAA,CAAO,YAAU,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,CAAA,EAAI,MAAA,CAAO,QAAQ,CAAA,CAAA,CAAG,iBAAA,GAAoB,QAAA,CAAS,IAAI,CAAC,CAAA,GACtG,CAAC,GAAG,QAAQ,CAAA;AAChB,EAAA,IAAI,IAAA,KAAS,WAAW,OAAO,QAAA;AAE/B,EAAA,MAAM,SAAA,GAAY,IAAA,KAAS,YAAA,GAAe,CAAA,GAAI,EAAA;AAC9C,EAAA,OAAO,QAAA,CAAS,QAAA,CAAS,CAAC,IAAA,EAAM,KAAA,KAAU,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,aAAA,CAAc,KAAA,CAAM,QAAQ,CAAC,CAAA;AACnG;AAEO,SAAS,oBAAoB,MAAA,EAAkD;AACpF,EAAA,MAAM,iBAAiB,MAAA,CAAO,aAAA,EAAe,MAAA,CAAO,CAAA,MAAA,KAAU,OAAO,OAAO,CAAA;AAC5E,EAAA,MAAM,kBAAA,GAAqB,MAAA,CAAO,kBAAA,IAAsB,cAAA,EAAgB,MAAA;AACxE,EAAA,MAAM,gBAAA,GACJ,OAAO,gBAAA,IAAoB,cAAA,EAAgB,OAAO,CAAA,MAAA,KAAU,MAAA,CAAO,MAAA,KAAW,OAAO,CAAA,CAAE,MAAA;AACzF,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,OAAO,UAAA,KAAe,MAAA,GAAY,MAAM,eAAA,CAAgB,MAAA,CAAO,OAAO,UAAU,CAAA;AAAA,IAC5F,UAAA,EACE,qBAAqB,MAAA,IAAa,kBAAA,KAAuB,SACrD,GAAA,GACA,CAAA,EAAG,gBAAgB,CAAA,IAAA,EAAO,kBAAkB,CAAA,CAAA;AAAA,IAClD,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,SAAA,EAAWA,2BAAA,CAAW,MAAA,CAAO,SAAA,EAAW,WAAW,CAAA,IAAK;AAAA,GAC1D;AACF;AAEO,SAAS,kBAAkB,MAAA,EAA0D;AAC1F,EAAA,IAAI,CAAC,QAAQ,OAAO,aAAA;AACpB,EAAA,OAAO,MAAA,CAAO,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,MAAA,CAAO,MAAM,CAAC,CAAA;AACxD;;;;;;"}
@@ -1,5 +1,6 @@
1
+ import { formatDate } from '../../../utils/date-format.es.js';
2
+
1
3
  const numberFormatter = new Intl.NumberFormat("en-US");
2
- const dateFormatter = new Intl.DateTimeFormat("en-US", { dateStyle: "medium", timeStyle: "short" });
3
4
  function filterAndSortEntities(entities, search, sort) {
4
5
  const term = search.trim().toLocaleLowerCase();
5
6
  const filtered = term ? entities.filter((entity) => `${entity.entityType} ${entity.entityId}`.toLocaleLowerCase().includes(term)) : [...entities];
@@ -15,7 +16,7 @@ function entityIndexMetadata(entity) {
15
16
  traceCount: entity.traceCount === void 0 ? "—" : numberFormatter.format(entity.traceCount),
16
17
  signalsSet: readySignalCount === void 0 || enabledSignalCount === void 0 ? "—" : `${readySignalCount} of ${enabledSignalCount}`,
17
18
  status: entity.status,
18
- updatedAt: entity.updatedAt === void 0 ? "—" : dateFormatter.format(new Date(entity.updatedAt))
19
+ updatedAt: formatDate(entity.updatedAt, "date-time") ?? "—"
19
20
  };
20
21
  }
21
22
  function entityStatusLabel(status) {
@@ -1 +1 @@
1
- {"version":3,"file":"entity-index-model.es.js","sources":["../../../../src/ee/signals/components/entity-index-model.ts"],"sourcesContent":["import type { EntityLearningProgressStatus, ThemeLearningEntity } from '@mastra/client-js';\n\nexport type TraceIntelligenceEntitySort = 'default' | 'entity-asc' | 'entity-desc';\nexport type TraceIntelligenceEntityView = 'compact' | 'list';\n\nconst numberFormatter = new Intl.NumberFormat('en-US');\nconst dateFormatter = new Intl.DateTimeFormat('en-US', { dateStyle: 'medium', timeStyle: 'short' });\n\nexport type EntityIndexMetadata = {\n traceCount: string;\n signalsSet: string;\n status?: EntityLearningProgressStatus;\n updatedAt: string;\n};\n\nexport function filterAndSortEntities(\n entities: readonly ThemeLearningEntity[],\n search: string,\n sort: TraceIntelligenceEntitySort,\n): ThemeLearningEntity[] {\n const term = search.trim().toLocaleLowerCase();\n const filtered = term\n ? entities.filter(entity => `${entity.entityType} ${entity.entityId}`.toLocaleLowerCase().includes(term))\n : [...entities];\n if (sort === 'default') return filtered;\n\n const direction = sort === 'entity-asc' ? 1 : -1;\n return filtered.toSorted((left, right) => direction * left.entityId.localeCompare(right.entityId));\n}\n\nexport function entityIndexMetadata(entity: ThemeLearningEntity): EntityIndexMetadata {\n const enabledCatalog = entity.signalCatalog?.filter(signal => signal.enabled);\n const enabledSignalCount = entity.enabledSignalCount ?? enabledCatalog?.length;\n const readySignalCount =\n entity.readySignalCount ?? enabledCatalog?.filter(signal => signal.status === 'ready').length;\n return {\n traceCount: entity.traceCount === undefined ? '—' : numberFormatter.format(entity.traceCount),\n signalsSet:\n readySignalCount === undefined || enabledSignalCount === undefined\n ? '—'\n : `${readySignalCount} of ${enabledSignalCount}`,\n status: entity.status,\n updatedAt: entity.updatedAt === undefined ? '—' : dateFormatter.format(new Date(entity.updatedAt)),\n };\n}\n\nexport function entityStatusLabel(status: EntityLearningProgressStatus | undefined): string {\n if (!status) return 'Unavailable';\n return status.charAt(0).toUpperCase() + status.slice(1);\n}\n"],"names":[],"mappings":"AAKA,MAAM,eAAA,GAAkB,IAAI,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AACrD,MAAM,aAAA,GAAgB,IAAI,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,EAAE,SAAA,EAAW,QAAA,EAAU,SAAA,EAAW,OAAA,EAAS,CAAA;AAS3F,SAAS,qBAAA,CACd,QAAA,EACA,MAAA,EACA,IAAA,EACuB;AACvB,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,EAAK,CAAE,iBAAA,EAAkB;AAC7C,EAAA,MAAM,QAAA,GAAW,OACb,QAAA,CAAS,MAAA,CAAO,YAAU,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,CAAA,EAAI,MAAA,CAAO,QAAQ,CAAA,CAAA,CAAG,iBAAA,GAAoB,QAAA,CAAS,IAAI,CAAC,CAAA,GACtG,CAAC,GAAG,QAAQ,CAAA;AAChB,EAAA,IAAI,IAAA,KAAS,WAAW,OAAO,QAAA;AAE/B,EAAA,MAAM,SAAA,GAAY,IAAA,KAAS,YAAA,GAAe,CAAA,GAAI,EAAA;AAC9C,EAAA,OAAO,QAAA,CAAS,QAAA,CAAS,CAAC,IAAA,EAAM,KAAA,KAAU,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,aAAA,CAAc,KAAA,CAAM,QAAQ,CAAC,CAAA;AACnG;AAEO,SAAS,oBAAoB,MAAA,EAAkD;AACpF,EAAA,MAAM,iBAAiB,MAAA,CAAO,aAAA,EAAe,MAAA,CAAO,CAAA,MAAA,KAAU,OAAO,OAAO,CAAA;AAC5E,EAAA,MAAM,kBAAA,GAAqB,MAAA,CAAO,kBAAA,IAAsB,cAAA,EAAgB,MAAA;AACxE,EAAA,MAAM,gBAAA,GACJ,OAAO,gBAAA,IAAoB,cAAA,EAAgB,OAAO,CAAA,MAAA,KAAU,MAAA,CAAO,MAAA,KAAW,OAAO,CAAA,CAAE,MAAA;AACzF,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,OAAO,UAAA,KAAe,MAAA,GAAY,MAAM,eAAA,CAAgB,MAAA,CAAO,OAAO,UAAU,CAAA;AAAA,IAC5F,UAAA,EACE,qBAAqB,MAAA,IAAa,kBAAA,KAAuB,SACrD,GAAA,GACA,CAAA,EAAG,gBAAgB,CAAA,IAAA,EAAO,kBAAkB,CAAA,CAAA;AAAA,IAClD,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,SAAA,EAAW,MAAA,CAAO,SAAA,KAAc,MAAA,GAAY,GAAA,GAAM,aAAA,CAAc,MAAA,CAAO,IAAI,IAAA,CAAK,MAAA,CAAO,SAAS,CAAC;AAAA,GACnG;AACF;AAEO,SAAS,kBAAkB,MAAA,EAA0D;AAC1F,EAAA,IAAI,CAAC,QAAQ,OAAO,aAAA;AACpB,EAAA,OAAO,MAAA,CAAO,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,MAAA,CAAO,MAAM,CAAC,CAAA;AACxD;;;;"}
1
+ {"version":3,"file":"entity-index-model.es.js","sources":["../../../../src/ee/signals/components/entity-index-model.ts"],"sourcesContent":["import type { EntityLearningProgressStatus, ThemeLearningEntity } from '@mastra/client-js';\nimport { formatDate } from '@/utils/date-format';\n\nexport type TraceIntelligenceEntitySort = 'default' | 'entity-asc' | 'entity-desc';\nexport type TraceIntelligenceEntityView = 'compact' | 'list';\n\nconst numberFormatter = new Intl.NumberFormat('en-US');\n\nexport type EntityIndexMetadata = {\n traceCount: string;\n signalsSet: string;\n status?: EntityLearningProgressStatus;\n updatedAt: string;\n};\n\nexport function filterAndSortEntities(\n entities: readonly ThemeLearningEntity[],\n search: string,\n sort: TraceIntelligenceEntitySort,\n): ThemeLearningEntity[] {\n const term = search.trim().toLocaleLowerCase();\n const filtered = term\n ? entities.filter(entity => `${entity.entityType} ${entity.entityId}`.toLocaleLowerCase().includes(term))\n : [...entities];\n if (sort === 'default') return filtered;\n\n const direction = sort === 'entity-asc' ? 1 : -1;\n return filtered.toSorted((left, right) => direction * left.entityId.localeCompare(right.entityId));\n}\n\nexport function entityIndexMetadata(entity: ThemeLearningEntity): EntityIndexMetadata {\n const enabledCatalog = entity.signalCatalog?.filter(signal => signal.enabled);\n const enabledSignalCount = entity.enabledSignalCount ?? enabledCatalog?.length;\n const readySignalCount =\n entity.readySignalCount ?? enabledCatalog?.filter(signal => signal.status === 'ready').length;\n return {\n traceCount: entity.traceCount === undefined ? '—' : numberFormatter.format(entity.traceCount),\n signalsSet:\n readySignalCount === undefined || enabledSignalCount === undefined\n ? '—'\n : `${readySignalCount} of ${enabledSignalCount}`,\n status: entity.status,\n updatedAt: formatDate(entity.updatedAt, 'date-time') ?? '—',\n };\n}\n\nexport function entityStatusLabel(status: EntityLearningProgressStatus | undefined): string {\n if (!status) return 'Unavailable';\n return status.charAt(0).toUpperCase() + status.slice(1);\n}\n"],"names":[],"mappings":";;AAMA,MAAM,eAAA,GAAkB,IAAI,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AAS9C,SAAS,qBAAA,CACd,QAAA,EACA,MAAA,EACA,IAAA,EACuB;AACvB,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,EAAK,CAAE,iBAAA,EAAkB;AAC7C,EAAA,MAAM,QAAA,GAAW,OACb,QAAA,CAAS,MAAA,CAAO,YAAU,CAAA,EAAG,MAAA,CAAO,UAAU,CAAA,CAAA,EAAI,MAAA,CAAO,QAAQ,CAAA,CAAA,CAAG,iBAAA,GAAoB,QAAA,CAAS,IAAI,CAAC,CAAA,GACtG,CAAC,GAAG,QAAQ,CAAA;AAChB,EAAA,IAAI,IAAA,KAAS,WAAW,OAAO,QAAA;AAE/B,EAAA,MAAM,SAAA,GAAY,IAAA,KAAS,YAAA,GAAe,CAAA,GAAI,EAAA;AAC9C,EAAA,OAAO,QAAA,CAAS,QAAA,CAAS,CAAC,IAAA,EAAM,KAAA,KAAU,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,aAAA,CAAc,KAAA,CAAM,QAAQ,CAAC,CAAA;AACnG;AAEO,SAAS,oBAAoB,MAAA,EAAkD;AACpF,EAAA,MAAM,iBAAiB,MAAA,CAAO,aAAA,EAAe,MAAA,CAAO,CAAA,MAAA,KAAU,OAAO,OAAO,CAAA;AAC5E,EAAA,MAAM,kBAAA,GAAqB,MAAA,CAAO,kBAAA,IAAsB,cAAA,EAAgB,MAAA;AACxE,EAAA,MAAM,gBAAA,GACJ,OAAO,gBAAA,IAAoB,cAAA,EAAgB,OAAO,CAAA,MAAA,KAAU,MAAA,CAAO,MAAA,KAAW,OAAO,CAAA,CAAE,MAAA;AACzF,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,OAAO,UAAA,KAAe,MAAA,GAAY,MAAM,eAAA,CAAgB,MAAA,CAAO,OAAO,UAAU,CAAA;AAAA,IAC5F,UAAA,EACE,qBAAqB,MAAA,IAAa,kBAAA,KAAuB,SACrD,GAAA,GACA,CAAA,EAAG,gBAAgB,CAAA,IAAA,EAAO,kBAAkB,CAAA,CAAA;AAAA,IAClD,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,SAAA,EAAW,WAAW,CAAA,IAAK;AAAA,GAC1D;AACF;AAEO,SAAS,kBAAkB,MAAA,EAA0D;AAC1F,EAAA,IAAI,CAAC,QAAQ,OAAO,aAAA;AACpB,EAAA,OAAO,MAAA,CAAO,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,MAAA,CAAO,MAAM,CAAC,CAAA;AACxD;;;;"}
@@ -17,10 +17,10 @@ const domains_auth_components_permissionDenied = require('../../../domains/auth/
17
17
  const domains_auth_components_sessionExpired = require('../../../domains/auth/components/session-expired.cjs.js');
18
18
  const Button = require('../../../Button-BAMnPqos.cjs');
19
19
  const buttonsGroup = require('../../../buttons-group-CoZP3lJt.cjs');
20
- const dataListSkeleton = require('../../../data-list-skeleton-CjwR0o3w.cjs');
20
+ const dataListSkeleton = require('../../../data-list-skeleton-CgbWqYky.cjs');
21
21
  require('../../../keyboard/keyboard-shortcuts-context.cjs.js');
22
22
  const EmptyState = require('../../../EmptyState-2XQgeju6.cjs');
23
- const listSearch = require('../../../list-search-S1mco9Bl.cjs');
23
+ const listSearch = require('../../../list-search-CsYQX8qR.cjs');
24
24
  const select = require('../../../select-BByMAS0L.cjs');
25
25
  const utils_queryUtils = require('../../../utils/query-utils.cjs.js');
26
26
 
@@ -13,10 +13,10 @@ import { PermissionDenied } from '../../../domains/auth/components/permission-de
13
13
  import { SessionExpired } from '../../../domains/auth/components/session-expired.es.js';
14
14
  import { B as Button } from '../../../Button-B8nF87ai.js';
15
15
  import { B as ButtonsGroup } from '../../../buttons-group-DsZgrZBZ.js';
16
- import { D as DataListSkeleton } from '../../../data-list-skeleton-DAfM8AjW.js';
16
+ import { D as DataListSkeleton } from '../../../data-list-skeleton-BrSh9Y_3.js';
17
17
  import '../../../keyboard/keyboard-shortcuts-context.es.js';
18
18
  import { E as EmptyState } from '../../../EmptyState-Bc4nJ9QH.js';
19
- import { L as ListSearch } from '../../../list-search-FJ1O5F3S.js';
19
+ import { L as ListSearch } from '../../../list-search-D1FD8FCL.js';
20
20
  import { S as Select, d as SelectTrigger, e as SelectValue, a as SelectContent, c as SelectItem } from '../../../select-Dkmx3L5p.js';
21
21
  import { is401UnauthorizedError, is403ForbiddenError } from '../../../utils/query-utils.es.js';
22
22
 
@@ -7,8 +7,8 @@ const lucideReact = require('lucide-react');
7
7
  const React = require('react');
8
8
  const Button = require('../../../Button-BAMnPqos.cjs');
9
9
  const dialog = require('../../../dialog-Vvcjm0rZ.cjs');
10
- const fieldErrorId = require('../../../field-error-id-6EfqmQ4C.cjs');
11
- const textFieldBlock = require('../../../text-field-block-DePCgDOh.cjs');
10
+ const fieldErrorId = require('../../../field-error-id-V_WejsRL.cjs');
11
+ const textFieldBlock = require('../../../text-field-block-CRh8sRXP.cjs');
12
12
  const Notice = require('../../../Notice-AUNd8fqT.cjs');
13
13
  const spinner = require('../../../spinner-BCpN7LL9.cjs');
14
14
  const textarea = require('../../../textarea-gUBUqpol.cjs');
@@ -3,8 +3,8 @@ import { X } from 'lucide-react';
3
3
  import { useId, useState } from 'react';
4
4
  import { B as Button } from '../../../Button-B8nF87ai.js';
5
5
  import { D as Dialog, a as DialogContent, b as DialogHeader, c as DialogTitle, d as DialogDescription, e as DialogBody, g as DialogFooter } from '../../../dialog-Dtfe1ylw.js';
6
- import { F as FieldBlock, f as fieldErrorId } from '../../../field-error-id-DyWx33Fu.js';
7
- import { T as TextFieldBlock } from '../../../text-field-block-DGIM1i3Z.js';
6
+ import { F as FieldBlock, f as fieldErrorId } from '../../../field-error-id-DD7OARLU.js';
7
+ import { T as TextFieldBlock } from '../../../text-field-block-BYPiO9h4.js';
8
8
  import { N as Notice } from '../../../Notice-WT8G4OA6.js';
9
9
  import { S as Spinner } from '../../../spinner-ylbE0TJA.js';
10
10
  import { T as Textarea } from '../../../textarea-B6wvS_CQ.js';
@@ -8,7 +8,7 @@ const React = require('react');
8
8
  const ee_signals_useTraceIntelligence = require('../use-trace-intelligence.cjs.js');
9
9
  const ee_signals_settings_signalDefinitionFormDialog = require('./signal-definition-form-dialog.cjs.js');
10
10
  const ee_signals_settings_useSignalManagement = require('./use-signal-management.cjs.js');
11
- const Badge = require('../../../Badge-BEeYtjmv.cjs');
11
+ const Badge = require('../../../Badge-DFNxcz-r.cjs');
12
12
  const Button = require('../../../Button-BAMnPqos.cjs');
13
13
  const components_DataDetailsPanel = require('../../../components/DataDetailsPanel.cjs.js');
14
14
  const Notice = require('../../../Notice-AUNd8fqT.cjs');
@@ -4,7 +4,7 @@ import { useState } from 'react';
4
4
  import { useTraceIntelligence } from '../use-trace-intelligence.es.js';
5
5
  import { SignalDefinitionFormDialog } from './signal-definition-form-dialog.es.js';
6
6
  import { useSignalManagementList, useSignalManagementMutations } from './use-signal-management.es.js';
7
- import { B as Badge } from '../../../Badge-TD55_qZJ.js';
7
+ import { B as Badge } from '../../../Badge-Bzn8Z-_I.js';
8
8
  import { B as Button } from '../../../Button-B8nF87ai.js';
9
9
  import { DataDetailsPanel } from '../../../components/DataDetailsPanel.es.js';
10
10
  import { N as Notice } from '../../../Notice-WT8G4OA6.js';
@@ -2,6 +2,8 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
+ const utils_dateFormat = require('../../utils/date-format.cjs.js');
6
+
5
7
  const BUILT_IN_SIGNAL_CATALOG = [
6
8
  {
7
9
  name: "goal",
@@ -87,45 +89,15 @@ function shareSentence(traceCount, coverage) {
87
89
  const stageTotal = Math.round(traceCount / coverage);
88
90
  return `${traceCount} of ${stageTotal} traces in this snapshot (${Math.round(coverage * 100)}%)`;
89
91
  }
90
- const SNAPSHOT_CUTOFF_FORMAT = new Intl.DateTimeFormat("en-US", {
91
- month: "short",
92
- day: "numeric",
93
- year: "numeric",
94
- hour: "2-digit",
95
- minute: "2-digit",
96
- hour12: false,
97
- timeZone: "UTC"
98
- });
99
- const SNAPSHOT_DATE_FORMAT = new Intl.DateTimeFormat("en-US", {
100
- month: "short",
101
- day: "numeric",
102
- year: "numeric",
103
- timeZone: "UTC"
104
- });
92
+ const UTC = { timeZone: "UTC" };
105
93
  function formatSnapshotDate(value) {
106
- const date = new Date(value);
107
- if (Number.isNaN(date.getTime())) return value;
108
- return SNAPSHOT_DATE_FORMAT.format(date);
94
+ return utils_dateFormat.formatShortDate(value, { ...UTC, now: 0 }) ?? value;
109
95
  }
110
96
  function formatSnapshotCutoff(cutoffAt) {
111
- const date = new Date(cutoffAt);
112
- if (Number.isNaN(date.getTime())) return cutoffAt;
113
- return SNAPSHOT_CUTOFF_FORMAT.format(date);
97
+ return utils_dateFormat.formatDate(cutoffAt, "date-time", UTC) ?? cutoffAt;
114
98
  }
115
99
  function formatSnapshotWindow(startedAt, endedAt) {
116
- const start = new Date(startedAt);
117
- const end = new Date(endedAt);
118
- if (Number.isNaN(start.getTime()) || Number.isNaN(end.getTime())) return `${startedAt}–${endedAt}`;
119
- const monthDay = new Intl.DateTimeFormat("en-US", { month: "short", day: "numeric", timeZone: "UTC" });
120
- const day = new Intl.DateTimeFormat("en-US", { day: "numeric", timeZone: "UTC" });
121
- const year = new Intl.DateTimeFormat("en-US", { year: "numeric", timeZone: "UTC" });
122
- const sameYear = start.getUTCFullYear() === end.getUTCFullYear();
123
- const sameMonth = sameYear && start.getUTCMonth() === end.getUTCMonth();
124
- const sameDay = sameMonth && start.getUTCDate() === end.getUTCDate();
125
- if (sameDay) return `${monthDay.format(start)}, ${year.format(start)}`;
126
- if (sameMonth) return `${monthDay.format(start)}–${day.format(end)}, ${year.format(end)}`;
127
- if (sameYear) return `${monthDay.format(start)}–${monthDay.format(end)}, ${year.format(end)}`;
128
- return `${monthDay.format(start)}, ${year.format(start)}–${monthDay.format(end)}, ${year.format(end)}`;
100
+ return utils_dateFormat.formatDateRange(startedAt, endedAt, UTC) ?? `${startedAt}–${endedAt}`;
129
101
  }
130
102
 
131
103
  exports.BUILT_IN_SIGNAL_CATALOG = BUILT_IN_SIGNAL_CATALOG;
@@ -1 +1 @@
1
- {"version":3,"file":"signal-formatting.cjs.js","sources":["../../../src/ee/signals/signal-formatting.ts"],"sourcesContent":["import type { BuiltInTraceSignalName, SignalCatalogEntry, TraceSignalName } from '@mastra/client-js';\n\n/** Catalog used with older servers that do not return signal metadata. */\nexport const BUILT_IN_SIGNAL_CATALOG: SignalCatalogEntry[] = [\n {\n name: 'goal',\n label: 'Goal',\n description: 'What the user wanted from the interaction.',\n order: 0,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n {\n name: 'sentiment',\n label: 'Sentiment',\n description: 'The tone the user expressed during the interaction.',\n order: 1,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n {\n name: 'behavior',\n label: 'Behavior',\n description: 'What the agent did in response.',\n order: 2,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n {\n name: 'outcome',\n label: 'Outcome',\n description: 'How the interaction ended.',\n order: 3,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n];\n\n/** Legacy built-in order retained for consumers using the existing export. */\nexport const SIGNAL_PROCESSING_ORDER: BuiltInTraceSignalName[] = BUILT_IN_SIGNAL_CATALOG.map(\n signal => signal.name as BuiltInTraceSignalName,\n);\n\nexport function formatSignalName(signalName: TraceSignalName) {\n return signalName.charAt(0).toUpperCase() + signalName.slice(1);\n}\n\n/** Plain-language meaning of each built-in trace signal. */\nexport const SIGNAL_DESCRIPTIONS: Record<BuiltInTraceSignalName, string> = Object.fromEntries(\n BUILT_IN_SIGNAL_CATALOG.map(signal => [signal.name, signal.description]),\n) as Record<BuiltInTraceSignalName, string>;\n\nfunction isBuiltInTraceSignalName(value: string): value is BuiltInTraceSignalName {\n return Object.prototype.hasOwnProperty.call(SIGNAL_DESCRIPTIONS, value);\n}\n\n/** Signal description lookup for callers that only hold an untyped column id. */\nexport function getSignalDescription(signalName: string): string | undefined {\n return isBuiltInTraceSignalName(signalName) ? SIGNAL_DESCRIPTIONS[signalName] : undefined;\n}\n\n/** Orders available names by catalog position without dropping uncatalogued historical data. */\nexport function orderedSignals(catalog: readonly SignalCatalogEntry[], signalNames?: readonly string[]): string[] {\n const names = [...new Set(signalNames ?? catalog.map(signal => signal.name))];\n const positions = new Map(catalog.map(signal => [signal.name, signal.order]));\n return names.sort((left, right) => {\n const leftOrder = positions.get(left);\n const rightOrder = positions.get(right);\n if (leftOrder === undefined && rightOrder === undefined) return 0;\n if (leftOrder === undefined) return 1;\n if (rightOrder === undefined) return -1;\n return leftOrder - rightOrder;\n });\n}\n\n/** Returns the server label or derives one from an uncatalogued slug. */\nexport function signalLabel(catalog: readonly SignalCatalogEntry[], signalName: string): string {\n return catalog.find(signal => signal.name === signalName)?.label ?? labelFromSignalName(signalName);\n}\n\n/** Returns the server description for a signal when one is available. */\nexport function signalDescription(catalog: readonly SignalCatalogEntry[], signalName: string): string | undefined {\n return catalog.find(signal => signal.name === signalName)?.description || undefined;\n}\n\nfunction labelFromSignalName(signalName: string): string {\n return signalName\n .split(/[-_]+/)\n .filter(Boolean)\n .map(part => part.charAt(0).toUpperCase() + part.slice(1))\n .join(' ');\n}\n\nexport function traceLabel(count: number) {\n return `${count} ${count === 1 ? 'trace' : 'traces'}`;\n}\n\nexport function themeLabel(count: number) {\n return `${count} ${count === 1 ? 'theme' : 'themes'}`;\n}\n\n/** \"28 of 70 traces in this snapshot (40%)\" — replaces the old \"Stage share\" stat. */\nexport function shareSentence(traceCount: number, coverage: number) {\n if (coverage <= 0) return `${traceLabel(traceCount)} in this snapshot`;\n const stageTotal = Math.round(traceCount / coverage);\n return `${traceCount} of ${stageTotal} traces in this snapshot (${Math.round(coverage * 100)}%)`;\n}\n\n// Hoisted: TimelineTrack formats every tick on each render.\nconst SNAPSHOT_CUTOFF_FORMAT = new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n timeZone: 'UTC',\n});\n\nconst SNAPSHOT_DATE_FORMAT = new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n timeZone: 'UTC',\n});\n\nexport function formatSnapshotDate(value: string) {\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return value;\n return SNAPSHOT_DATE_FORMAT.format(date);\n}\n\nexport function formatSnapshotCutoff(cutoffAt: string) {\n const date = new Date(cutoffAt);\n // Fall back to the raw server value instead of letting Intl throw on Invalid Date.\n if (Number.isNaN(date.getTime())) return cutoffAt;\n return SNAPSHOT_CUTOFF_FORMAT.format(date);\n}\n\nexport function formatSnapshotWindow(startedAt: string, endedAt: string) {\n const start = new Date(startedAt);\n const end = new Date(endedAt);\n // Fall back to the raw server values instead of letting Intl throw on Invalid Date.\n if (Number.isNaN(start.getTime()) || Number.isNaN(end.getTime())) return `${startedAt}–${endedAt}`;\n const monthDay = new Intl.DateTimeFormat('en-US', { month: 'short', day: 'numeric', timeZone: 'UTC' });\n const day = new Intl.DateTimeFormat('en-US', { day: 'numeric', timeZone: 'UTC' });\n const year = new Intl.DateTimeFormat('en-US', { year: 'numeric', timeZone: 'UTC' });\n const sameYear = start.getUTCFullYear() === end.getUTCFullYear();\n const sameMonth = sameYear && start.getUTCMonth() === end.getUTCMonth();\n const sameDay = sameMonth && start.getUTCDate() === end.getUTCDate();\n\n if (sameDay) return `${monthDay.format(start)}, ${year.format(start)}`;\n if (sameMonth) return `${monthDay.format(start)}–${day.format(end)}, ${year.format(end)}`;\n if (sameYear) return `${monthDay.format(start)}–${monthDay.format(end)}, ${year.format(end)}`;\n return `${monthDay.format(start)}, ${year.format(start)}–${monthDay.format(end)}, ${year.format(end)}`;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signal-formatting.cjs.js","sources":["../../../src/ee/signals/signal-formatting.ts"],"sourcesContent":["import type { BuiltInTraceSignalName, SignalCatalogEntry, TraceSignalName } from '@mastra/client-js';\nimport { formatDate, formatDateRange, formatShortDate } from '@/utils/date-format';\n\n/** Catalog used with older servers that do not return signal metadata. */\nexport const BUILT_IN_SIGNAL_CATALOG: SignalCatalogEntry[] = [\n {\n name: 'goal',\n label: 'Goal',\n description: 'What the user wanted from the interaction.',\n order: 0,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n {\n name: 'sentiment',\n label: 'Sentiment',\n description: 'The tone the user expressed during the interaction.',\n order: 1,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n {\n name: 'behavior',\n label: 'Behavior',\n description: 'What the agent did in response.',\n order: 2,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n {\n name: 'outcome',\n label: 'Outcome',\n description: 'How the interaction ended.',\n order: 3,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n];\n\n/** Legacy built-in order retained for consumers using the existing export. */\nexport const SIGNAL_PROCESSING_ORDER: BuiltInTraceSignalName[] = BUILT_IN_SIGNAL_CATALOG.map(\n signal => signal.name as BuiltInTraceSignalName,\n);\n\nexport function formatSignalName(signalName: TraceSignalName) {\n return signalName.charAt(0).toUpperCase() + signalName.slice(1);\n}\n\n/** Plain-language meaning of each built-in trace signal. */\nexport const SIGNAL_DESCRIPTIONS: Record<BuiltInTraceSignalName, string> = Object.fromEntries(\n BUILT_IN_SIGNAL_CATALOG.map(signal => [signal.name, signal.description]),\n) as Record<BuiltInTraceSignalName, string>;\n\nfunction isBuiltInTraceSignalName(value: string): value is BuiltInTraceSignalName {\n return Object.prototype.hasOwnProperty.call(SIGNAL_DESCRIPTIONS, value);\n}\n\n/** Signal description lookup for callers that only hold an untyped column id. */\nexport function getSignalDescription(signalName: string): string | undefined {\n return isBuiltInTraceSignalName(signalName) ? SIGNAL_DESCRIPTIONS[signalName] : undefined;\n}\n\n/** Orders available names by catalog position without dropping uncatalogued historical data. */\nexport function orderedSignals(catalog: readonly SignalCatalogEntry[], signalNames?: readonly string[]): string[] {\n const names = [...new Set(signalNames ?? catalog.map(signal => signal.name))];\n const positions = new Map(catalog.map(signal => [signal.name, signal.order]));\n return names.sort((left, right) => {\n const leftOrder = positions.get(left);\n const rightOrder = positions.get(right);\n if (leftOrder === undefined && rightOrder === undefined) return 0;\n if (leftOrder === undefined) return 1;\n if (rightOrder === undefined) return -1;\n return leftOrder - rightOrder;\n });\n}\n\n/** Returns the server label or derives one from an uncatalogued slug. */\nexport function signalLabel(catalog: readonly SignalCatalogEntry[], signalName: string): string {\n return catalog.find(signal => signal.name === signalName)?.label ?? labelFromSignalName(signalName);\n}\n\n/** Returns the server description for a signal when one is available. */\nexport function signalDescription(catalog: readonly SignalCatalogEntry[], signalName: string): string | undefined {\n return catalog.find(signal => signal.name === signalName)?.description || undefined;\n}\n\nfunction labelFromSignalName(signalName: string): string {\n return signalName\n .split(/[-_]+/)\n .filter(Boolean)\n .map(part => part.charAt(0).toUpperCase() + part.slice(1))\n .join(' ');\n}\n\nexport function traceLabel(count: number) {\n return `${count} ${count === 1 ? 'trace' : 'traces'}`;\n}\n\nexport function themeLabel(count: number) {\n return `${count} ${count === 1 ? 'theme' : 'themes'}`;\n}\n\n/** \"28 of 70 traces in this snapshot (40%)\" — replaces the old \"Stage share\" stat. */\nexport function shareSentence(traceCount: number, coverage: number) {\n if (coverage <= 0) return `${traceLabel(traceCount)} in this snapshot`;\n const stageTotal = Math.round(traceCount / coverage);\n return `${traceCount} of ${stageTotal} traces in this snapshot (${Math.round(coverage * 100)}%)`;\n}\n\n// Snapshots are bucketed in UTC, so their dates are shown in UTC too.\nconst UTC = { timeZone: 'UTC' };\n\nexport function formatSnapshotDate(value: string) {\n // `now: 0` makes the year always visible, since snapshots span years.\n return formatShortDate(value, { ...UTC, now: 0 }) ?? value;\n}\n\nexport function formatSnapshotCutoff(cutoffAt: string) {\n return formatDate(cutoffAt, 'date-time', UTC) ?? cutoffAt;\n}\n\nexport function formatSnapshotWindow(startedAt: string, endedAt: string) {\n return formatDateRange(startedAt, endedAt, UTC) ?? `${startedAt}–${endedAt}`;\n}\n"],"names":["formatShortDate","formatDate","formatDateRange"],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { formatDate, formatShortDate, formatDateRange } from '../../utils/date-format.es.js';
2
+
1
3
  const BUILT_IN_SIGNAL_CATALOG = [
2
4
  {
3
5
  name: "goal",
@@ -83,45 +85,15 @@ function shareSentence(traceCount, coverage) {
83
85
  const stageTotal = Math.round(traceCount / coverage);
84
86
  return `${traceCount} of ${stageTotal} traces in this snapshot (${Math.round(coverage * 100)}%)`;
85
87
  }
86
- const SNAPSHOT_CUTOFF_FORMAT = new Intl.DateTimeFormat("en-US", {
87
- month: "short",
88
- day: "numeric",
89
- year: "numeric",
90
- hour: "2-digit",
91
- minute: "2-digit",
92
- hour12: false,
93
- timeZone: "UTC"
94
- });
95
- const SNAPSHOT_DATE_FORMAT = new Intl.DateTimeFormat("en-US", {
96
- month: "short",
97
- day: "numeric",
98
- year: "numeric",
99
- timeZone: "UTC"
100
- });
88
+ const UTC = { timeZone: "UTC" };
101
89
  function formatSnapshotDate(value) {
102
- const date = new Date(value);
103
- if (Number.isNaN(date.getTime())) return value;
104
- return SNAPSHOT_DATE_FORMAT.format(date);
90
+ return formatShortDate(value, { ...UTC, now: 0 }) ?? value;
105
91
  }
106
92
  function formatSnapshotCutoff(cutoffAt) {
107
- const date = new Date(cutoffAt);
108
- if (Number.isNaN(date.getTime())) return cutoffAt;
109
- return SNAPSHOT_CUTOFF_FORMAT.format(date);
93
+ return formatDate(cutoffAt, "date-time", UTC) ?? cutoffAt;
110
94
  }
111
95
  function formatSnapshotWindow(startedAt, endedAt) {
112
- const start = new Date(startedAt);
113
- const end = new Date(endedAt);
114
- if (Number.isNaN(start.getTime()) || Number.isNaN(end.getTime())) return `${startedAt}–${endedAt}`;
115
- const monthDay = new Intl.DateTimeFormat("en-US", { month: "short", day: "numeric", timeZone: "UTC" });
116
- const day = new Intl.DateTimeFormat("en-US", { day: "numeric", timeZone: "UTC" });
117
- const year = new Intl.DateTimeFormat("en-US", { year: "numeric", timeZone: "UTC" });
118
- const sameYear = start.getUTCFullYear() === end.getUTCFullYear();
119
- const sameMonth = sameYear && start.getUTCMonth() === end.getUTCMonth();
120
- const sameDay = sameMonth && start.getUTCDate() === end.getUTCDate();
121
- if (sameDay) return `${monthDay.format(start)}, ${year.format(start)}`;
122
- if (sameMonth) return `${monthDay.format(start)}–${day.format(end)}, ${year.format(end)}`;
123
- if (sameYear) return `${monthDay.format(start)}–${monthDay.format(end)}, ${year.format(end)}`;
124
- return `${monthDay.format(start)}, ${year.format(start)}–${monthDay.format(end)}, ${year.format(end)}`;
96
+ return formatDateRange(startedAt, endedAt, UTC) ?? `${startedAt}–${endedAt}`;
125
97
  }
126
98
 
127
99
  export { BUILT_IN_SIGNAL_CATALOG, SIGNAL_DESCRIPTIONS, SIGNAL_PROCESSING_ORDER, formatSignalName, formatSnapshotCutoff, formatSnapshotDate, formatSnapshotWindow, getSignalDescription, orderedSignals, shareSentence, signalDescription, signalLabel, themeLabel, traceLabel };
@@ -1 +1 @@
1
- {"version":3,"file":"signal-formatting.es.js","sources":["../../../src/ee/signals/signal-formatting.ts"],"sourcesContent":["import type { BuiltInTraceSignalName, SignalCatalogEntry, TraceSignalName } from '@mastra/client-js';\n\n/** Catalog used with older servers that do not return signal metadata. */\nexport const BUILT_IN_SIGNAL_CATALOG: SignalCatalogEntry[] = [\n {\n name: 'goal',\n label: 'Goal',\n description: 'What the user wanted from the interaction.',\n order: 0,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n {\n name: 'sentiment',\n label: 'Sentiment',\n description: 'The tone the user expressed during the interaction.',\n order: 1,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n {\n name: 'behavior',\n label: 'Behavior',\n description: 'What the agent did in response.',\n order: 2,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n {\n name: 'outcome',\n label: 'Outcome',\n description: 'How the interaction ended.',\n order: 3,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n];\n\n/** Legacy built-in order retained for consumers using the existing export. */\nexport const SIGNAL_PROCESSING_ORDER: BuiltInTraceSignalName[] = BUILT_IN_SIGNAL_CATALOG.map(\n signal => signal.name as BuiltInTraceSignalName,\n);\n\nexport function formatSignalName(signalName: TraceSignalName) {\n return signalName.charAt(0).toUpperCase() + signalName.slice(1);\n}\n\n/** Plain-language meaning of each built-in trace signal. */\nexport const SIGNAL_DESCRIPTIONS: Record<BuiltInTraceSignalName, string> = Object.fromEntries(\n BUILT_IN_SIGNAL_CATALOG.map(signal => [signal.name, signal.description]),\n) as Record<BuiltInTraceSignalName, string>;\n\nfunction isBuiltInTraceSignalName(value: string): value is BuiltInTraceSignalName {\n return Object.prototype.hasOwnProperty.call(SIGNAL_DESCRIPTIONS, value);\n}\n\n/** Signal description lookup for callers that only hold an untyped column id. */\nexport function getSignalDescription(signalName: string): string | undefined {\n return isBuiltInTraceSignalName(signalName) ? SIGNAL_DESCRIPTIONS[signalName] : undefined;\n}\n\n/** Orders available names by catalog position without dropping uncatalogued historical data. */\nexport function orderedSignals(catalog: readonly SignalCatalogEntry[], signalNames?: readonly string[]): string[] {\n const names = [...new Set(signalNames ?? catalog.map(signal => signal.name))];\n const positions = new Map(catalog.map(signal => [signal.name, signal.order]));\n return names.sort((left, right) => {\n const leftOrder = positions.get(left);\n const rightOrder = positions.get(right);\n if (leftOrder === undefined && rightOrder === undefined) return 0;\n if (leftOrder === undefined) return 1;\n if (rightOrder === undefined) return -1;\n return leftOrder - rightOrder;\n });\n}\n\n/** Returns the server label or derives one from an uncatalogued slug. */\nexport function signalLabel(catalog: readonly SignalCatalogEntry[], signalName: string): string {\n return catalog.find(signal => signal.name === signalName)?.label ?? labelFromSignalName(signalName);\n}\n\n/** Returns the server description for a signal when one is available. */\nexport function signalDescription(catalog: readonly SignalCatalogEntry[], signalName: string): string | undefined {\n return catalog.find(signal => signal.name === signalName)?.description || undefined;\n}\n\nfunction labelFromSignalName(signalName: string): string {\n return signalName\n .split(/[-_]+/)\n .filter(Boolean)\n .map(part => part.charAt(0).toUpperCase() + part.slice(1))\n .join(' ');\n}\n\nexport function traceLabel(count: number) {\n return `${count} ${count === 1 ? 'trace' : 'traces'}`;\n}\n\nexport function themeLabel(count: number) {\n return `${count} ${count === 1 ? 'theme' : 'themes'}`;\n}\n\n/** \"28 of 70 traces in this snapshot (40%)\" — replaces the old \"Stage share\" stat. */\nexport function shareSentence(traceCount: number, coverage: number) {\n if (coverage <= 0) return `${traceLabel(traceCount)} in this snapshot`;\n const stageTotal = Math.round(traceCount / coverage);\n return `${traceCount} of ${stageTotal} traces in this snapshot (${Math.round(coverage * 100)}%)`;\n}\n\n// Hoisted: TimelineTrack formats every tick on each render.\nconst SNAPSHOT_CUTOFF_FORMAT = new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n timeZone: 'UTC',\n});\n\nconst SNAPSHOT_DATE_FORMAT = new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n timeZone: 'UTC',\n});\n\nexport function formatSnapshotDate(value: string) {\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return value;\n return SNAPSHOT_DATE_FORMAT.format(date);\n}\n\nexport function formatSnapshotCutoff(cutoffAt: string) {\n const date = new Date(cutoffAt);\n // Fall back to the raw server value instead of letting Intl throw on Invalid Date.\n if (Number.isNaN(date.getTime())) return cutoffAt;\n return SNAPSHOT_CUTOFF_FORMAT.format(date);\n}\n\nexport function formatSnapshotWindow(startedAt: string, endedAt: string) {\n const start = new Date(startedAt);\n const end = new Date(endedAt);\n // Fall back to the raw server values instead of letting Intl throw on Invalid Date.\n if (Number.isNaN(start.getTime()) || Number.isNaN(end.getTime())) return `${startedAt}–${endedAt}`;\n const monthDay = new Intl.DateTimeFormat('en-US', { month: 'short', day: 'numeric', timeZone: 'UTC' });\n const day = new Intl.DateTimeFormat('en-US', { day: 'numeric', timeZone: 'UTC' });\n const year = new Intl.DateTimeFormat('en-US', { year: 'numeric', timeZone: 'UTC' });\n const sameYear = start.getUTCFullYear() === end.getUTCFullYear();\n const sameMonth = sameYear && start.getUTCMonth() === end.getUTCMonth();\n const sameDay = sameMonth && start.getUTCDate() === end.getUTCDate();\n\n if (sameDay) return `${monthDay.format(start)}, ${year.format(start)}`;\n if (sameMonth) return `${monthDay.format(start)}–${day.format(end)}, ${year.format(end)}`;\n if (sameYear) return `${monthDay.format(start)}–${monthDay.format(end)}, ${year.format(end)}`;\n return `${monthDay.format(start)}, ${year.format(start)}–${monthDay.format(end)}, ${year.format(end)}`;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signal-formatting.es.js","sources":["../../../src/ee/signals/signal-formatting.ts"],"sourcesContent":["import type { BuiltInTraceSignalName, SignalCatalogEntry, TraceSignalName } from '@mastra/client-js';\nimport { formatDate, formatDateRange, formatShortDate } from '@/utils/date-format';\n\n/** Catalog used with older servers that do not return signal metadata. */\nexport const BUILT_IN_SIGNAL_CATALOG: SignalCatalogEntry[] = [\n {\n name: 'goal',\n label: 'Goal',\n description: 'What the user wanted from the interaction.',\n order: 0,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n {\n name: 'sentiment',\n label: 'Sentiment',\n description: 'The tone the user expressed during the interaction.',\n order: 1,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n {\n name: 'behavior',\n label: 'Behavior',\n description: 'What the agent did in response.',\n order: 2,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n {\n name: 'outcome',\n label: 'Outcome',\n description: 'How the interaction ended.',\n order: 3,\n builtIn: true,\n enabled: true,\n status: 'ready',\n },\n];\n\n/** Legacy built-in order retained for consumers using the existing export. */\nexport const SIGNAL_PROCESSING_ORDER: BuiltInTraceSignalName[] = BUILT_IN_SIGNAL_CATALOG.map(\n signal => signal.name as BuiltInTraceSignalName,\n);\n\nexport function formatSignalName(signalName: TraceSignalName) {\n return signalName.charAt(0).toUpperCase() + signalName.slice(1);\n}\n\n/** Plain-language meaning of each built-in trace signal. */\nexport const SIGNAL_DESCRIPTIONS: Record<BuiltInTraceSignalName, string> = Object.fromEntries(\n BUILT_IN_SIGNAL_CATALOG.map(signal => [signal.name, signal.description]),\n) as Record<BuiltInTraceSignalName, string>;\n\nfunction isBuiltInTraceSignalName(value: string): value is BuiltInTraceSignalName {\n return Object.prototype.hasOwnProperty.call(SIGNAL_DESCRIPTIONS, value);\n}\n\n/** Signal description lookup for callers that only hold an untyped column id. */\nexport function getSignalDescription(signalName: string): string | undefined {\n return isBuiltInTraceSignalName(signalName) ? SIGNAL_DESCRIPTIONS[signalName] : undefined;\n}\n\n/** Orders available names by catalog position without dropping uncatalogued historical data. */\nexport function orderedSignals(catalog: readonly SignalCatalogEntry[], signalNames?: readonly string[]): string[] {\n const names = [...new Set(signalNames ?? catalog.map(signal => signal.name))];\n const positions = new Map(catalog.map(signal => [signal.name, signal.order]));\n return names.sort((left, right) => {\n const leftOrder = positions.get(left);\n const rightOrder = positions.get(right);\n if (leftOrder === undefined && rightOrder === undefined) return 0;\n if (leftOrder === undefined) return 1;\n if (rightOrder === undefined) return -1;\n return leftOrder - rightOrder;\n });\n}\n\n/** Returns the server label or derives one from an uncatalogued slug. */\nexport function signalLabel(catalog: readonly SignalCatalogEntry[], signalName: string): string {\n return catalog.find(signal => signal.name === signalName)?.label ?? labelFromSignalName(signalName);\n}\n\n/** Returns the server description for a signal when one is available. */\nexport function signalDescription(catalog: readonly SignalCatalogEntry[], signalName: string): string | undefined {\n return catalog.find(signal => signal.name === signalName)?.description || undefined;\n}\n\nfunction labelFromSignalName(signalName: string): string {\n return signalName\n .split(/[-_]+/)\n .filter(Boolean)\n .map(part => part.charAt(0).toUpperCase() + part.slice(1))\n .join(' ');\n}\n\nexport function traceLabel(count: number) {\n return `${count} ${count === 1 ? 'trace' : 'traces'}`;\n}\n\nexport function themeLabel(count: number) {\n return `${count} ${count === 1 ? 'theme' : 'themes'}`;\n}\n\n/** \"28 of 70 traces in this snapshot (40%)\" — replaces the old \"Stage share\" stat. */\nexport function shareSentence(traceCount: number, coverage: number) {\n if (coverage <= 0) return `${traceLabel(traceCount)} in this snapshot`;\n const stageTotal = Math.round(traceCount / coverage);\n return `${traceCount} of ${stageTotal} traces in this snapshot (${Math.round(coverage * 100)}%)`;\n}\n\n// Snapshots are bucketed in UTC, so their dates are shown in UTC too.\nconst UTC = { timeZone: 'UTC' };\n\nexport function formatSnapshotDate(value: string) {\n // `now: 0` makes the year always visible, since snapshots span years.\n return formatShortDate(value, { ...UTC, now: 0 }) ?? value;\n}\n\nexport function formatSnapshotCutoff(cutoffAt: string) {\n return formatDate(cutoffAt, 'date-time', UTC) ?? cutoffAt;\n}\n\nexport function formatSnapshotWindow(startedAt: string, endedAt: string) {\n return formatDateRange(startedAt, endedAt, UTC) ?? `${startedAt}–${endedAt}`;\n}\n"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ function snapshotTickLabel(snapshot, totalCount) {
21
21
  const cutoff = snapshot.cutoffAt ? ee_signals_signalFormatting.formatSnapshotCutoff(snapshot.cutoffAt) : void 0;
22
22
  return `Snapshot ${snapshot.ordinal} of ${totalCount}${cutoff ? `, ${cutoff}` : ""}`;
23
23
  }
24
- const DAY_LABEL_FORMAT = new Intl.DateTimeFormat("en-US", { month: "2-digit", day: "2-digit", timeZone: "UTC" });
24
+ const DAY_LABEL_FORMAT = new Intl.DateTimeFormat(void 0, { month: "2-digit", day: "2-digit", timeZone: "UTC" });
25
25
  function timelineDayLabels(snapshots) {
26
26
  let previousDay;
27
27
  return snapshots.map((snapshot) => {
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-timeline-data.cjs.js","sources":["../../../src/ee/signals/snapshot-timeline-data.ts"],"sourcesContent":["import { formatSnapshotCutoff } from './signal-formatting';\nimport type { ThemeSnapshot } from './types';\n\n/**\n * Positions each landmark on a 0–100% time axis by its cutoff. Falls back to\n * even index spacing when cutoffs are unavailable (older servers).\n */\nexport function timelineTickPositions(snapshots: ThemeSnapshot[]): number[] {\n const epochs = snapshots.map(snapshot => (snapshot.cutoffAt ? Date.parse(snapshot.cutoffAt) : Number.NaN));\n const first = epochs[0];\n const last = epochs[epochs.length - 1];\n const hasTimeAxis =\n epochs.length > 1 &&\n epochs.every(epoch => Number.isFinite(epoch)) &&\n last !== undefined &&\n first !== undefined &&\n last > first;\n\n return snapshots.map((_, index) => {\n if (snapshots.length < 2) return 0;\n if (!hasTimeAxis) return (index / (snapshots.length - 1)) * 100;\n const epoch = epochs[index];\n if (epoch === undefined || first === undefined || last === undefined) return 0;\n return ((epoch - first) / (last - first)) * 100;\n });\n}\n\nexport function snapshotTickLabel(snapshot: ThemeSnapshot, totalCount: number) {\n const cutoff = snapshot.cutoffAt ? formatSnapshotCutoff(snapshot.cutoffAt) : undefined;\n return `Snapshot ${snapshot.ordinal} of ${totalCount}${cutoff ? `, ${cutoff}` : ''}`;\n}\n\nconst DAY_LABEL_FORMAT = new Intl.DateTimeFormat('en-US', { month: '2-digit', day: '2-digit', timeZone: 'UTC' });\n\n/**\n * Day label (\"07/24\") for each tick whose cutoff starts a new day compared to\n * the previous tick; undefined otherwise so the axis only marks day starts.\n */\nexport function timelineDayLabels(snapshots: ThemeSnapshot[]): Array<string | undefined> {\n let previousDay: string | undefined;\n return snapshots.map(snapshot => {\n const epoch = snapshot.cutoffAt ? Date.parse(snapshot.cutoffAt) : Number.NaN;\n if (!Number.isFinite(epoch)) return undefined;\n const day = DAY_LABEL_FORMAT.format(epoch);\n if (day === previousDay) return undefined;\n previousDay = day;\n return day;\n });\n}\n"],"names":["formatSnapshotCutoff"],"mappings":";;;;;;AAOO,SAAS,sBAAsB,SAAA,EAAsC;AAC1E,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,CAAI,CAAA,QAAA,KAAa,QAAA,CAAS,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,GAAI,MAAA,CAAO,GAAI,CAAA;AACzG,EAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AACrC,EAAA,MAAM,cACJ,MAAA,CAAO,MAAA,GAAS,CAAA,IAChB,MAAA,CAAO,MAAM,CAAA,KAAA,KAAS,MAAA,CAAO,QAAA,CAAS,KAAK,CAAC,CAAA,IAC5C,IAAA,KAAS,MAAA,IACT,KAAA,KAAU,UACV,IAAA,GAAO,KAAA;AAET,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,KAAU;AACjC,IAAA,IAAI,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG,OAAO,CAAA;AACjC,IAAA,IAAI,CAAC,WAAA,EAAa,OAAQ,KAAA,IAAS,SAAA,CAAU,SAAS,CAAA,CAAA,GAAM,GAAA;AAC5D,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC1B,IAAA,IAAI,UAAU,MAAA,IAAa,KAAA,KAAU,MAAA,IAAa,IAAA,KAAS,QAAW,OAAO,CAAA;AAC7E,IAAA,OAAA,CAAS,KAAA,GAAQ,KAAA,KAAU,IAAA,GAAO,KAAA,CAAA,GAAU,GAAA;AAAA,EAC9C,CAAC,CAAA;AACH;AAEO,SAAS,iBAAA,CAAkB,UAAyB,UAAA,EAAoB;AAC7E,EAAA,MAAM,SAAS,QAAA,CAAS,QAAA,GAAWA,gDAAA,CAAqB,QAAA,CAAS,QAAQ,CAAA,GAAI,MAAA;AAC7E,EAAA,OAAO,CAAA,SAAA,EAAY,QAAA,CAAS,OAAO,CAAA,IAAA,EAAO,UAAU,GAAG,MAAA,GAAS,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACpF;AAEA,MAAM,gBAAA,GAAmB,IAAI,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,EAAE,KAAA,EAAO,SAAA,EAAW,GAAA,EAAK,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,CAAA;AAMxG,SAAS,kBAAkB,SAAA,EAAuD;AACvF,EAAA,IAAI,WAAA;AACJ,EAAA,OAAO,SAAA,CAAU,IAAI,CAAA,QAAA,KAAY;AAC/B,IAAA,MAAM,KAAA,GAAQ,SAAS,QAAA,GAAW,IAAA,CAAK,MAAM,QAAA,CAAS,QAAQ,IAAI,MAAA,CAAO,GAAA;AACzE,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,GAAG,OAAO,MAAA;AACpC,IAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,MAAA,CAAO,KAAK,CAAA;AACzC,IAAA,IAAI,GAAA,KAAQ,aAAa,OAAO,MAAA;AAChC,IAAA,WAAA,GAAc,GAAA;AACd,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACH;;;;;;"}
1
+ {"version":3,"file":"snapshot-timeline-data.cjs.js","sources":["../../../src/ee/signals/snapshot-timeline-data.ts"],"sourcesContent":["import { formatSnapshotCutoff } from './signal-formatting';\nimport type { ThemeSnapshot } from './types';\n\n/**\n * Positions each landmark on a 0–100% time axis by its cutoff. Falls back to\n * even index spacing when cutoffs are unavailable (older servers).\n */\nexport function timelineTickPositions(snapshots: ThemeSnapshot[]): number[] {\n const epochs = snapshots.map(snapshot => (snapshot.cutoffAt ? Date.parse(snapshot.cutoffAt) : Number.NaN));\n const first = epochs[0];\n const last = epochs[epochs.length - 1];\n const hasTimeAxis =\n epochs.length > 1 &&\n epochs.every(epoch => Number.isFinite(epoch)) &&\n last !== undefined &&\n first !== undefined &&\n last > first;\n\n return snapshots.map((_, index) => {\n if (snapshots.length < 2) return 0;\n if (!hasTimeAxis) return (index / (snapshots.length - 1)) * 100;\n const epoch = epochs[index];\n if (epoch === undefined || first === undefined || last === undefined) return 0;\n return ((epoch - first) / (last - first)) * 100;\n });\n}\n\nexport function snapshotTickLabel(snapshot: ThemeSnapshot, totalCount: number) {\n const cutoff = snapshot.cutoffAt ? formatSnapshotCutoff(snapshot.cutoffAt) : undefined;\n return `Snapshot ${snapshot.ordinal} of ${totalCount}${cutoff ? `, ${cutoff}` : ''}`;\n}\n\nconst DAY_LABEL_FORMAT = new Intl.DateTimeFormat(undefined, { month: '2-digit', day: '2-digit', timeZone: 'UTC' });\n\n/**\n * Day label (\"07/24\") for each tick whose cutoff starts a new day compared to\n * the previous tick; undefined otherwise so the axis only marks day starts.\n */\nexport function timelineDayLabels(snapshots: ThemeSnapshot[]): Array<string | undefined> {\n let previousDay: string | undefined;\n return snapshots.map(snapshot => {\n const epoch = snapshot.cutoffAt ? Date.parse(snapshot.cutoffAt) : Number.NaN;\n if (!Number.isFinite(epoch)) return undefined;\n const day = DAY_LABEL_FORMAT.format(epoch);\n if (day === previousDay) return undefined;\n previousDay = day;\n return day;\n });\n}\n"],"names":["formatSnapshotCutoff"],"mappings":";;;;;;AAOO,SAAS,sBAAsB,SAAA,EAAsC;AAC1E,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,CAAI,CAAA,QAAA,KAAa,QAAA,CAAS,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,GAAI,MAAA,CAAO,GAAI,CAAA;AACzG,EAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AACrC,EAAA,MAAM,cACJ,MAAA,CAAO,MAAA,GAAS,CAAA,IAChB,MAAA,CAAO,MAAM,CAAA,KAAA,KAAS,MAAA,CAAO,QAAA,CAAS,KAAK,CAAC,CAAA,IAC5C,IAAA,KAAS,MAAA,IACT,KAAA,KAAU,UACV,IAAA,GAAO,KAAA;AAET,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,KAAU;AACjC,IAAA,IAAI,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG,OAAO,CAAA;AACjC,IAAA,IAAI,CAAC,WAAA,EAAa,OAAQ,KAAA,IAAS,SAAA,CAAU,SAAS,CAAA,CAAA,GAAM,GAAA;AAC5D,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC1B,IAAA,IAAI,UAAU,MAAA,IAAa,KAAA,KAAU,MAAA,IAAa,IAAA,KAAS,QAAW,OAAO,CAAA;AAC7E,IAAA,OAAA,CAAS,KAAA,GAAQ,KAAA,KAAU,IAAA,GAAO,KAAA,CAAA,GAAU,GAAA;AAAA,EAC9C,CAAC,CAAA;AACH;AAEO,SAAS,iBAAA,CAAkB,UAAyB,UAAA,EAAoB;AAC7E,EAAA,MAAM,SAAS,QAAA,CAAS,QAAA,GAAWA,gDAAA,CAAqB,QAAA,CAAS,QAAQ,CAAA,GAAI,MAAA;AAC7E,EAAA,OAAO,CAAA,SAAA,EAAY,QAAA,CAAS,OAAO,CAAA,IAAA,EAAO,UAAU,GAAG,MAAA,GAAS,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACpF;AAEA,MAAM,gBAAA,GAAmB,IAAI,IAAA,CAAK,cAAA,CAAe,MAAA,EAAW,EAAE,KAAA,EAAO,SAAA,EAAW,GAAA,EAAK,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,CAAA;AAM1G,SAAS,kBAAkB,SAAA,EAAuD;AACvF,EAAA,IAAI,WAAA;AACJ,EAAA,OAAO,SAAA,CAAU,IAAI,CAAA,QAAA,KAAY;AAC/B,IAAA,MAAM,KAAA,GAAQ,SAAS,QAAA,GAAW,IAAA,CAAK,MAAM,QAAA,CAAS,QAAQ,IAAI,MAAA,CAAO,GAAA;AACzE,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,GAAG,OAAO,MAAA;AACpC,IAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,MAAA,CAAO,KAAK,CAAA;AACzC,IAAA,IAAI,GAAA,KAAQ,aAAa,OAAO,MAAA;AAChC,IAAA,WAAA,GAAc,GAAA;AACd,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACH;;;;;;"}
@@ -17,7 +17,7 @@ function snapshotTickLabel(snapshot, totalCount) {
17
17
  const cutoff = snapshot.cutoffAt ? formatSnapshotCutoff(snapshot.cutoffAt) : void 0;
18
18
  return `Snapshot ${snapshot.ordinal} of ${totalCount}${cutoff ? `, ${cutoff}` : ""}`;
19
19
  }
20
- const DAY_LABEL_FORMAT = new Intl.DateTimeFormat("en-US", { month: "2-digit", day: "2-digit", timeZone: "UTC" });
20
+ const DAY_LABEL_FORMAT = new Intl.DateTimeFormat(void 0, { month: "2-digit", day: "2-digit", timeZone: "UTC" });
21
21
  function timelineDayLabels(snapshots) {
22
22
  let previousDay;
23
23
  return snapshots.map((snapshot) => {
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-timeline-data.es.js","sources":["../../../src/ee/signals/snapshot-timeline-data.ts"],"sourcesContent":["import { formatSnapshotCutoff } from './signal-formatting';\nimport type { ThemeSnapshot } from './types';\n\n/**\n * Positions each landmark on a 0–100% time axis by its cutoff. Falls back to\n * even index spacing when cutoffs are unavailable (older servers).\n */\nexport function timelineTickPositions(snapshots: ThemeSnapshot[]): number[] {\n const epochs = snapshots.map(snapshot => (snapshot.cutoffAt ? Date.parse(snapshot.cutoffAt) : Number.NaN));\n const first = epochs[0];\n const last = epochs[epochs.length - 1];\n const hasTimeAxis =\n epochs.length > 1 &&\n epochs.every(epoch => Number.isFinite(epoch)) &&\n last !== undefined &&\n first !== undefined &&\n last > first;\n\n return snapshots.map((_, index) => {\n if (snapshots.length < 2) return 0;\n if (!hasTimeAxis) return (index / (snapshots.length - 1)) * 100;\n const epoch = epochs[index];\n if (epoch === undefined || first === undefined || last === undefined) return 0;\n return ((epoch - first) / (last - first)) * 100;\n });\n}\n\nexport function snapshotTickLabel(snapshot: ThemeSnapshot, totalCount: number) {\n const cutoff = snapshot.cutoffAt ? formatSnapshotCutoff(snapshot.cutoffAt) : undefined;\n return `Snapshot ${snapshot.ordinal} of ${totalCount}${cutoff ? `, ${cutoff}` : ''}`;\n}\n\nconst DAY_LABEL_FORMAT = new Intl.DateTimeFormat('en-US', { month: '2-digit', day: '2-digit', timeZone: 'UTC' });\n\n/**\n * Day label (\"07/24\") for each tick whose cutoff starts a new day compared to\n * the previous tick; undefined otherwise so the axis only marks day starts.\n */\nexport function timelineDayLabels(snapshots: ThemeSnapshot[]): Array<string | undefined> {\n let previousDay: string | undefined;\n return snapshots.map(snapshot => {\n const epoch = snapshot.cutoffAt ? Date.parse(snapshot.cutoffAt) : Number.NaN;\n if (!Number.isFinite(epoch)) return undefined;\n const day = DAY_LABEL_FORMAT.format(epoch);\n if (day === previousDay) return undefined;\n previousDay = day;\n return day;\n });\n}\n"],"names":[],"mappings":";;AAOO,SAAS,sBAAsB,SAAA,EAAsC;AAC1E,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,CAAI,CAAA,QAAA,KAAa,QAAA,CAAS,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,GAAI,MAAA,CAAO,GAAI,CAAA;AACzG,EAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AACrC,EAAA,MAAM,cACJ,MAAA,CAAO,MAAA,GAAS,CAAA,IAChB,MAAA,CAAO,MAAM,CAAA,KAAA,KAAS,MAAA,CAAO,QAAA,CAAS,KAAK,CAAC,CAAA,IAC5C,IAAA,KAAS,MAAA,IACT,KAAA,KAAU,UACV,IAAA,GAAO,KAAA;AAET,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,KAAU;AACjC,IAAA,IAAI,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG,OAAO,CAAA;AACjC,IAAA,IAAI,CAAC,WAAA,EAAa,OAAQ,KAAA,IAAS,SAAA,CAAU,SAAS,CAAA,CAAA,GAAM,GAAA;AAC5D,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC1B,IAAA,IAAI,UAAU,MAAA,IAAa,KAAA,KAAU,MAAA,IAAa,IAAA,KAAS,QAAW,OAAO,CAAA;AAC7E,IAAA,OAAA,CAAS,KAAA,GAAQ,KAAA,KAAU,IAAA,GAAO,KAAA,CAAA,GAAU,GAAA;AAAA,EAC9C,CAAC,CAAA;AACH;AAEO,SAAS,iBAAA,CAAkB,UAAyB,UAAA,EAAoB;AAC7E,EAAA,MAAM,SAAS,QAAA,CAAS,QAAA,GAAW,oBAAA,CAAqB,QAAA,CAAS,QAAQ,CAAA,GAAI,MAAA;AAC7E,EAAA,OAAO,CAAA,SAAA,EAAY,QAAA,CAAS,OAAO,CAAA,IAAA,EAAO,UAAU,GAAG,MAAA,GAAS,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACpF;AAEA,MAAM,gBAAA,GAAmB,IAAI,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,EAAE,KAAA,EAAO,SAAA,EAAW,GAAA,EAAK,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,CAAA;AAMxG,SAAS,kBAAkB,SAAA,EAAuD;AACvF,EAAA,IAAI,WAAA;AACJ,EAAA,OAAO,SAAA,CAAU,IAAI,CAAA,QAAA,KAAY;AAC/B,IAAA,MAAM,KAAA,GAAQ,SAAS,QAAA,GAAW,IAAA,CAAK,MAAM,QAAA,CAAS,QAAQ,IAAI,MAAA,CAAO,GAAA;AACzE,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,GAAG,OAAO,MAAA;AACpC,IAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,MAAA,CAAO,KAAK,CAAA;AACzC,IAAA,IAAI,GAAA,KAAQ,aAAa,OAAO,MAAA;AAChC,IAAA,WAAA,GAAc,GAAA;AACd,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"snapshot-timeline-data.es.js","sources":["../../../src/ee/signals/snapshot-timeline-data.ts"],"sourcesContent":["import { formatSnapshotCutoff } from './signal-formatting';\nimport type { ThemeSnapshot } from './types';\n\n/**\n * Positions each landmark on a 0–100% time axis by its cutoff. Falls back to\n * even index spacing when cutoffs are unavailable (older servers).\n */\nexport function timelineTickPositions(snapshots: ThemeSnapshot[]): number[] {\n const epochs = snapshots.map(snapshot => (snapshot.cutoffAt ? Date.parse(snapshot.cutoffAt) : Number.NaN));\n const first = epochs[0];\n const last = epochs[epochs.length - 1];\n const hasTimeAxis =\n epochs.length > 1 &&\n epochs.every(epoch => Number.isFinite(epoch)) &&\n last !== undefined &&\n first !== undefined &&\n last > first;\n\n return snapshots.map((_, index) => {\n if (snapshots.length < 2) return 0;\n if (!hasTimeAxis) return (index / (snapshots.length - 1)) * 100;\n const epoch = epochs[index];\n if (epoch === undefined || first === undefined || last === undefined) return 0;\n return ((epoch - first) / (last - first)) * 100;\n });\n}\n\nexport function snapshotTickLabel(snapshot: ThemeSnapshot, totalCount: number) {\n const cutoff = snapshot.cutoffAt ? formatSnapshotCutoff(snapshot.cutoffAt) : undefined;\n return `Snapshot ${snapshot.ordinal} of ${totalCount}${cutoff ? `, ${cutoff}` : ''}`;\n}\n\nconst DAY_LABEL_FORMAT = new Intl.DateTimeFormat(undefined, { month: '2-digit', day: '2-digit', timeZone: 'UTC' });\n\n/**\n * Day label (\"07/24\") for each tick whose cutoff starts a new day compared to\n * the previous tick; undefined otherwise so the axis only marks day starts.\n */\nexport function timelineDayLabels(snapshots: ThemeSnapshot[]): Array<string | undefined> {\n let previousDay: string | undefined;\n return snapshots.map(snapshot => {\n const epoch = snapshot.cutoffAt ? Date.parse(snapshot.cutoffAt) : Number.NaN;\n if (!Number.isFinite(epoch)) return undefined;\n const day = DAY_LABEL_FORMAT.format(epoch);\n if (day === previousDay) return undefined;\n previousDay = day;\n return day;\n });\n}\n"],"names":[],"mappings":";;AAOO,SAAS,sBAAsB,SAAA,EAAsC;AAC1E,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,CAAI,CAAA,QAAA,KAAa,QAAA,CAAS,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,GAAI,MAAA,CAAO,GAAI,CAAA;AACzG,EAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AACrC,EAAA,MAAM,cACJ,MAAA,CAAO,MAAA,GAAS,CAAA,IAChB,MAAA,CAAO,MAAM,CAAA,KAAA,KAAS,MAAA,CAAO,QAAA,CAAS,KAAK,CAAC,CAAA,IAC5C,IAAA,KAAS,MAAA,IACT,KAAA,KAAU,UACV,IAAA,GAAO,KAAA;AAET,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,KAAU;AACjC,IAAA,IAAI,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG,OAAO,CAAA;AACjC,IAAA,IAAI,CAAC,WAAA,EAAa,OAAQ,KAAA,IAAS,SAAA,CAAU,SAAS,CAAA,CAAA,GAAM,GAAA;AAC5D,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC1B,IAAA,IAAI,UAAU,MAAA,IAAa,KAAA,KAAU,MAAA,IAAa,IAAA,KAAS,QAAW,OAAO,CAAA;AAC7E,IAAA,OAAA,CAAS,KAAA,GAAQ,KAAA,KAAU,IAAA,GAAO,KAAA,CAAA,GAAU,GAAA;AAAA,EAC9C,CAAC,CAAA;AACH;AAEO,SAAS,iBAAA,CAAkB,UAAyB,UAAA,EAAoB;AAC7E,EAAA,MAAM,SAAS,QAAA,CAAS,QAAA,GAAW,oBAAA,CAAqB,QAAA,CAAS,QAAQ,CAAA,GAAI,MAAA;AAC7E,EAAA,OAAO,CAAA,SAAA,EAAY,QAAA,CAAS,OAAO,CAAA,IAAA,EAAO,UAAU,GAAG,MAAA,GAAS,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACpF;AAEA,MAAM,gBAAA,GAAmB,IAAI,IAAA,CAAK,cAAA,CAAe,MAAA,EAAW,EAAE,KAAA,EAAO,SAAA,EAAW,GAAA,EAAK,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,CAAA;AAM1G,SAAS,kBAAkB,SAAA,EAAuD;AACvF,EAAA,IAAI,WAAA;AACJ,EAAA,OAAO,SAAA,CAAU,IAAI,CAAA,QAAA,KAAY;AAC/B,IAAA,MAAM,KAAA,GAAQ,SAAS,QAAA,GAAW,IAAA,CAAK,MAAM,QAAA,CAAS,QAAQ,IAAI,MAAA,CAAO,GAAA;AACzE,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,GAAG,OAAO,MAAA;AACpC,IAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,MAAA,CAAO,KAAK,CAAA;AACzC,IAAA,IAAI,GAAA,KAAQ,aAAa,OAAO,MAAA;AAChC,IAAA,WAAA,GAAc,GAAA;AACd,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACH;;;;"}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
5
  const jsxRuntime = require('react/jsx-runtime');
6
6
  const tabsTab = require('../../tabs-tab-DFmRMdi3.cjs');
7
- const Txt = require('../../Txt-B4-2nLaI.cjs');
7
+ const Txt = require('../../Txt-DPmEpNbp.cjs');
8
8
  const icons_Icon = require('../../icons/Icon.cjs.js');
9
9
 
10
10
  function ViewModeTab({ value, icon, label }) {
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { T as Tab } from '../../tabs-tab-DluwCnDF.js';
3
- import { T as Txt } from '../../Txt-DTh3Pa_a.js';
3
+ import { T as Txt } from '../../Txt-BP1SRHmL.js';
4
4
  import { Icon } from '../../icons/Icon.es.js';
5
5
 
6
6
  function ViewModeTab({ value, icon, label }) {
@@ -7,7 +7,7 @@ const lucideReact = require('lucide-react');
7
7
  const React = require('react');
8
8
  const ee_topics_utils = require('../utils.cjs.js');
9
9
  const Button = require('../../../Button-BAMnPqos.cjs');
10
- const dataList = require('../../../data-list-PwFpP_mo.cjs');
10
+ const dataList = require('../../../data-list-RI8c32dk.cjs');
11
11
  const useDataListKeyboard = require('../../../use-data-list-keyboard-DF3tLe10.cjs');
12
12
  const inputGroup = require('../../../input-group-BfnJ0RIj.cjs');
13
13
 
@@ -3,7 +3,7 @@ import { SearchIcon, ChevronDown } from 'lucide-react';
3
3
  import { useState, useMemo } from 'react';
4
4
  import { getVisibleTraceSummaries } from '../utils.es.js';
5
5
  import { B as Button } from '../../../Button-B8nF87ai.js';
6
- import { D as DataList } from '../../../data-list-DisTjDHP.js';
6
+ import { D as DataList } from '../../../data-list-5-nRJbEO.js';
7
7
  import { u as useDataListKeyboard } from '../../../use-data-list-keyboard-DFQr4t38.js';
8
8
  import { I as InputGroup, a as InputGroupAddon, c as InputGroupInput } from '../../../input-group-Jt7lZsN9.js';
9
9
 
@@ -0,0 +1,22 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { CircleAlertIcon } from 'lucide-react';
3
+ import { Icon } from './icons/Icon.es.js';
4
+ import { c as cn } from './cn-65Adrsfj.js';
5
+
6
+ function FieldBlockErrorMsg({ children, name, className }) {
7
+ return /* @__PURE__ */ jsxs(
8
+ "p",
9
+ {
10
+ role: "alert",
11
+ id: name !== void 0 ? `error-${name}` : void 0,
12
+ className: cn("flex gap-1 text-caption text-destructive", className),
13
+ children: [
14
+ /* @__PURE__ */ jsx(Icon, { size: "xs", className: "mt-0.75 shrink-0", "aria-hidden": true, children: /* @__PURE__ */ jsx(CircleAlertIcon, {}) }),
15
+ /* @__PURE__ */ jsx("span", { children })
16
+ ]
17
+ }
18
+ );
19
+ }
20
+
21
+ export { FieldBlockErrorMsg as F };
22
+ //# sourceMappingURL=field-block-error-msg-Y0fi0HUC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-block-error-msg-Y0fi0HUC.js","sources":["../src/ds/components/FormFieldBlocks/block/field-block-error-msg.tsx"],"sourcesContent":["import { CircleAlertIcon } from 'lucide-react';\nimport { Icon } from '@/ds/icons/Icon';\nimport { cn } from '@/lib/utils';\n\nexport type FieldBlockErrorMsgProps = {\n children?: React.ReactNode;\n /**\n * The field this message belongs to, matching the `name` given to `FieldBlock.Label`.\n * Sets a stable `error-<name>` id so the control can point at it with\n * `aria-describedby` and a screen reader reads the message with the field.\n */\n name?: string;\n className?: string;\n};\n\nexport function FieldBlockErrorMsg({ children, name, className }: FieldBlockErrorMsgProps) {\n return (\n <p\n // `role=\"alert\"` lives here rather than in a wrapper at every call site, so an\n // error announces itself wherever it is used instead of depending on each caller\n // remembering to wrap it.\n role=\"alert\"\n id={name !== undefined ? `error-${name}` : undefined}\n className={cn('flex gap-1 text-caption text-destructive', className)}\n >\n <Icon size=\"xs\" className=\"mt-0.75 shrink-0\" aria-hidden>\n <CircleAlertIcon />\n </Icon>\n <span>{children}</span>\n </p>\n );\n}\n"],"names":[],"mappings":";;;;;AAeO,SAAS,kBAAA,CAAmB,EAAE,QAAA,EAAU,IAAA,EAAM,WAAU,EAA4B;AACzF,EAAA,uBACE,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MAIC,IAAA,EAAK,OAAA;AAAA,MACL,EAAA,EAAI,IAAA,KAAS,MAAA,GAAY,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,GAAK,MAAA;AAAA,MAC3C,SAAA,EAAW,EAAA,CAAG,0CAAA,EAA4C,SAAS,CAAA;AAAA,MAEnE,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAK,IAAA,EAAK,SAAA,EAAU,oBAAmB,aAAA,EAAW,IAAA,EACtD,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,CAAA,EACnB,CAAA;AAAA,wBACA,GAAA,CAAC,UAAM,QAAA,EAAS;AAAA;AAAA;AAAA,GAClB;AAEJ;;;;"}
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ const jsxRuntime = require('react/jsx-runtime');
4
+ const lucideReact = require('lucide-react');
5
+ const icons_Icon = require('./icons/Icon.cjs.js');
6
+ const utils_cn = require('./cn-DG0X1KEP.cjs');
7
+
8
+ function FieldBlockErrorMsg({ children, name, className }) {
9
+ return /* @__PURE__ */ jsxRuntime.jsxs(
10
+ "p",
11
+ {
12
+ role: "alert",
13
+ id: name !== void 0 ? `error-${name}` : void 0,
14
+ className: utils_cn.cn("flex gap-1 text-caption text-destructive", className),
15
+ children: [
16
+ /* @__PURE__ */ jsxRuntime.jsx(icons_Icon.Icon, { size: "xs", className: "mt-0.75 shrink-0", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CircleAlertIcon, {}) }),
17
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children })
18
+ ]
19
+ }
20
+ );
21
+ }
22
+
23
+ exports.FieldBlockErrorMsg = FieldBlockErrorMsg;
24
+ //# sourceMappingURL=field-block-error-msg-oudJz2Hx.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-block-error-msg-oudJz2Hx.cjs","sources":["../src/ds/components/FormFieldBlocks/block/field-block-error-msg.tsx"],"sourcesContent":["import { CircleAlertIcon } from 'lucide-react';\nimport { Icon } from '@/ds/icons/Icon';\nimport { cn } from '@/lib/utils';\n\nexport type FieldBlockErrorMsgProps = {\n children?: React.ReactNode;\n /**\n * The field this message belongs to, matching the `name` given to `FieldBlock.Label`.\n * Sets a stable `error-<name>` id so the control can point at it with\n * `aria-describedby` and a screen reader reads the message with the field.\n */\n name?: string;\n className?: string;\n};\n\nexport function FieldBlockErrorMsg({ children, name, className }: FieldBlockErrorMsgProps) {\n return (\n <p\n // `role=\"alert\"` lives here rather than in a wrapper at every call site, so an\n // error announces itself wherever it is used instead of depending on each caller\n // remembering to wrap it.\n role=\"alert\"\n id={name !== undefined ? `error-${name}` : undefined}\n className={cn('flex gap-1 text-caption text-destructive', className)}\n >\n <Icon size=\"xs\" className=\"mt-0.75 shrink-0\" aria-hidden>\n <CircleAlertIcon />\n </Icon>\n <span>{children}</span>\n </p>\n );\n}\n"],"names":["jsxs","cn","jsx","Icon","CircleAlertIcon"],"mappings":";;;;;;;AAeO,SAAS,kBAAA,CAAmB,EAAE,QAAA,EAAU,IAAA,EAAM,WAAU,EAA4B;AACzF,EAAA,uBACEA,eAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MAIC,IAAA,EAAK,OAAA;AAAA,MACL,EAAA,EAAI,IAAA,KAAS,MAAA,GAAY,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,GAAK,MAAA;AAAA,MAC3C,SAAA,EAAWC,WAAA,CAAG,0CAAA,EAA4C,SAAS,CAAA;AAAA,MAEnE,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAACC,eAAA,EAAA,EAAK,MAAK,IAAA,EAAK,SAAA,EAAU,oBAAmB,aAAA,EAAW,IAAA,EACtD,QAAA,kBAAAD,cAAA,CAACE,2BAAA,EAAA,EAAgB,CAAA,EACnB,CAAA;AAAA,wBACAF,cAAA,CAAC,UAAM,QAAA,EAAS;AAAA;AAAA;AAAA,GAClB;AAEJ;;;;"}
@@ -1,22 +1,11 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { c as cn } from './cn-65Adrsfj.js';
3
+ import { F as FieldBlockErrorMsg } from './field-block-error-msg-Y0fi0HUC.js';
3
4
 
4
5
  function FieldBlockColumn({ children, className }) {
5
6
  return /* @__PURE__ */ jsx("div", { className: cn("grid gap-2 text-foreground", className), children });
6
7
  }
7
8
 
8
- function FieldBlockErrorMsg({ children, name, className }) {
9
- return /* @__PURE__ */ jsx(
10
- "p",
11
- {
12
- role: "alert",
13
- id: name !== void 0 ? `error-${name}` : void 0,
14
- className: cn("text-caption text-destructive", className),
15
- children
16
- }
17
- );
18
- }
19
-
20
9
  function FieldBlockHelpText({ children }) {
21
10
  return /* @__PURE__ */ jsx("p", { className: "text-caption text-muted-foreground", children });
22
11
  }
@@ -95,4 +84,4 @@ const FieldBlock = Object.assign(
95
84
  const fieldErrorId = (name) => `error-${name}`;
96
85
 
97
86
  export { FieldBlock as F, fieldErrorId as f };
98
- //# sourceMappingURL=field-error-id-DyWx33Fu.js.map
87
+ //# sourceMappingURL=field-error-id-DD7OARLU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-error-id-DD7OARLU.js","sources":["../src/ds/components/FormFieldBlocks/block/field-block-column.tsx","../src/ds/components/FormFieldBlocks/block/field-block-help-text.tsx","../src/ds/components/FormFieldBlocks/block/field-block-label.tsx","../src/ds/components/FormFieldBlocks/block/field-block-layout.tsx","../src/ds/components/FormFieldBlocks/block/field-block-message.tsx","../src/ds/components/FormFieldBlocks/block/field-block.tsx","../src/ds/components/FormFieldBlocks/block/field-error-id.ts"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nexport type FieldBlockColumnProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nexport function FieldBlockColumn({ children, className }: FieldBlockColumnProps) {\n return <div className={cn('grid gap-2 text-foreground', className)}>{children}</div>;\n}\n","export type FieldBlockHelpTextProps = {\n children?: React.ReactNode;\n};\n\nexport function FieldBlockHelpText({ children }: FieldBlockHelpTextProps) {\n return <p className=\"text-caption text-muted-foreground\">{children}</p>;\n}\n","import { cn } from '@/lib/utils';\n\nexport type FieldBlockLabelProps = {\n children: React.ReactNode;\n name: string;\n htmlFor?: string;\n required?: boolean;\n disabled?: boolean;\n size?: 'default' | 'bigger';\n className?: string;\n};\n\nexport function FieldBlockLabel({\n children,\n name,\n htmlFor = `input-${name}`,\n required,\n disabled = false,\n size = 'default',\n className,\n}: FieldBlockLabelProps) {\n return (\n <label\n htmlFor={htmlFor}\n className={cn(\n 'inline-flex items-center text-label',\n {\n 'text-body': size === 'bigger',\n 'text-foreground': !disabled,\n 'text-muted-foreground': disabled,\n },\n className,\n )}\n >\n {children}\n {required ? (\n <>\n <span aria-hidden className={cn('ml-0.5', disabled ? 'text-muted-foreground' : 'text-destructive')}>\n *\n </span>\n <span className=\"sr-only\"> (required)</span>\n </>\n ) : null}\n </label>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport type FieldBlockLayoutProps = {\n children: React.ReactNode;\n className?: string;\n layout?: 'vertical' | 'horizontal';\n // Optional prop to specify label column width in horizontal layout\n labelColumnWidth?: string; // e.g., '150px' or '30%'\n};\n\nexport function FieldBlockLayout({\n children,\n className,\n layout = 'vertical',\n labelColumnWidth,\n}: FieldBlockLayoutProps) {\n return (\n <div\n className={cn(\n 'relative grid gap-2 text-foreground',\n {\n 'horizontal-field-block grid-cols-[auto_1fr] items-baseline': layout === 'horizontal',\n },\n className,\n )}\n style={\n layout === 'horizontal' && labelColumnWidth ? { gridTemplateColumns: `${labelColumnWidth} 1fr` } : undefined\n }\n >\n {children}\n </div>\n );\n}\n","import { FieldBlockErrorMsg } from './field-block-error-msg';\nimport { FieldBlockHelpText } from './field-block-help-text';\n\nexport type FieldBlockMessageProps = {\n name: string;\n helpText?: React.ReactNode;\n errorMsg?: React.ReactNode;\n};\n\nexport function FieldBlockMessage({ name, helpText, errorMsg }: FieldBlockMessageProps) {\n return (\n <div className=\"h-[1lh] min-w-0 overflow-hidden text-caption [&>p]:truncate\">\n {errorMsg ? (\n <FieldBlockErrorMsg name={name} className=\"truncate\">\n {errorMsg}\n </FieldBlockErrorMsg>\n ) : helpText ? (\n <FieldBlockHelpText>{helpText}</FieldBlockHelpText>\n ) : null}\n </div>\n );\n}\n","import { FieldBlockColumn } from './field-block-column';\nimport { FieldBlockErrorMsg } from './field-block-error-msg';\nimport { FieldBlockHelpText } from './field-block-help-text';\nimport { FieldBlockLabel } from './field-block-label';\nimport { FieldBlockLayout } from './field-block-layout';\nimport { FieldBlockMessage } from './field-block-message';\n\nexport const FieldBlock = Object.assign(\n {},\n {\n Layout: FieldBlockLayout,\n Column: FieldBlockColumn,\n Label: FieldBlockLabel,\n HelpText: FieldBlockHelpText,\n ErrorMsg: FieldBlockErrorMsg,\n Message: FieldBlockMessage,\n },\n);\n","/**\n * Id of the error message for a field, so a control can point at its message with\n * `aria-describedby`. Lives apart from the component file: exporting it alongside a\n * component breaks fast refresh.\n */\nexport const fieldErrorId = (name: string) => `error-${name}`;\n"],"names":[],"mappings":"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"}