@mastra/playground-ui 63.0.0 → 63.1.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 (445) hide show
  1. package/dist/{alert-dialog-DVAC9zdj.js → alert-dialog-Cpx4g1sS.js} +2 -2
  2. package/dist/{alert-dialog-DVAC9zdj.js.map → alert-dialog-Cpx4g1sS.js.map} +1 -1
  3. package/dist/{alert-dialog-C-ODvRWT.cjs → alert-dialog-Djojjgjo.cjs} +2 -2
  4. package/dist/{alert-dialog-C-ODvRWT.cjs.map → alert-dialog-Djojjgjo.cjs.map} +1 -1
  5. package/dist/{code-block-vvYFcnqm.js → code-block-BzUcNWrb.js} +2 -2
  6. package/dist/{code-block-vvYFcnqm.js.map → code-block-BzUcNWrb.js.map} +1 -1
  7. package/dist/{code-block-BuGosknt.cjs → code-block-CKLCdWtP.cjs} +2 -2
  8. package/dist/{code-block-BuGosknt.cjs.map → code-block-CKLCdWtP.cjs.map} +1 -1
  9. package/dist/{combobox-fEMKH9nJ.cjs → combobox-CdTP_FZ0.cjs} +9 -2
  10. package/dist/combobox-CdTP_FZ0.cjs.map +1 -0
  11. package/dist/{combobox-so2V71F7.js → combobox-CeYDCkXk.js} +9 -2
  12. package/dist/combobox-CeYDCkXk.js.map +1 -0
  13. package/dist/{command-B_C36ppQ.cjs → command-CSl9Mfrp.cjs} +3 -3
  14. package/dist/{command-B_C36ppQ.cjs.map → command-CSl9Mfrp.cjs.map} +1 -1
  15. package/dist/{command-DMqzDhzs.js → command-DQAGSkdK.js} +3 -3
  16. package/dist/{command-DMqzDhzs.js.map → command-DQAGSkdK.js.map} +1 -1
  17. package/dist/components/AlertDialog.cjs.js +1 -1
  18. package/dist/components/AlertDialog.es.js +1 -1
  19. package/dist/components/CodeBlock.cjs.js +1 -1
  20. package/dist/components/CodeBlock.es.js +1 -1
  21. package/dist/components/Combobox.cjs.js +1 -1
  22. package/dist/components/Combobox.es.js +1 -1
  23. package/dist/components/Command.cjs.js +1 -1
  24. package/dist/components/Command.es.js +1 -1
  25. package/dist/components/CommandPalette.cjs.js +2 -2
  26. package/dist/components/CommandPalette.es.js +2 -2
  27. package/dist/components/Comment.cjs.js +1 -1
  28. package/dist/components/Comment.es.js +1 -1
  29. package/dist/components/Composer.cjs.js +2 -2
  30. package/dist/components/Composer.es.js +2 -2
  31. package/dist/components/DataCodeSection.cjs.js +1 -1
  32. package/dist/components/DataCodeSection.es.js +1 -1
  33. package/dist/components/DataList.cjs.js +17 -15
  34. package/dist/components/DataList.cjs.js.map +1 -1
  35. package/dist/components/DataList.es.js +5 -4
  36. package/dist/components/DataList.es.js.map +1 -1
  37. package/dist/components/DataPanel.cjs.js +1 -1
  38. package/dist/components/DataPanel.es.js +1 -1
  39. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  40. package/dist/components/DateTimeRangePicker.es.js +1 -1
  41. package/dist/components/Dialog.cjs.js +2 -2
  42. package/dist/components/Dialog.es.js +2 -2
  43. package/dist/components/DropdownMenu.cjs.js +1 -1
  44. package/dist/components/DropdownMenu.es.js +1 -1
  45. package/dist/components/EnvironmentVariablesEditor.cjs.js +2 -2
  46. package/dist/components/EnvironmentVariablesEditor.es.js +2 -2
  47. package/dist/components/InputGroup.cjs.js +1 -1
  48. package/dist/components/InputGroup.es.js +1 -1
  49. package/dist/components/InputNumber.cjs.js +1 -1
  50. package/dist/components/InputNumber.es.js +1 -1
  51. package/dist/components/ListSearch.cjs.js +1 -1
  52. package/dist/components/ListSearch.es.js +1 -1
  53. package/dist/components/LogsDataList.cjs.js +2 -5
  54. package/dist/components/LogsDataList.cjs.js.map +1 -1
  55. package/dist/components/LogsDataList.es.js +2 -5
  56. package/dist/components/LogsDataList.es.js.map +1 -1
  57. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  58. package/dist/components/MarkdownRenderer.es.js +1 -1
  59. package/dist/components/MetricsCard.cjs.js +1 -1
  60. package/dist/components/MetricsCard.es.js +1 -1
  61. package/dist/components/PageLayout.cjs.js +11 -8
  62. package/dist/components/PageLayout.cjs.js.map +1 -1
  63. package/dist/components/PageLayout.es.js +11 -8
  64. package/dist/components/PageLayout.es.js.map +1 -1
  65. package/dist/components/PropertyFilter.cjs.js +2 -2
  66. package/dist/components/PropertyFilter.es.js +3 -3
  67. package/dist/components/SavedViews.cjs.js +1 -1
  68. package/dist/components/SavedViews.es.js +1 -1
  69. package/dist/components/ScrollArea.cjs.js +1 -1
  70. package/dist/components/ScrollArea.es.js +1 -1
  71. package/dist/components/SearchInput.cjs.js +1 -1
  72. package/dist/components/SearchInput.es.js +1 -1
  73. package/dist/components/Sidebar.cjs.js +3 -3
  74. package/dist/components/Sidebar.es.js +3 -3
  75. package/dist/components/Tabs.cjs.js +1 -1
  76. package/dist/components/Tabs.es.js +1 -1
  77. package/dist/components/ThreadRail.cjs.js +1 -1
  78. package/dist/components/ThreadRail.es.js +1 -1
  79. package/dist/components/Workflow.cjs.js +3 -3
  80. package/dist/components/Workflow.es.js +3 -3
  81. package/dist/components/ai/activity.cjs.js +1 -1
  82. package/dist/components/ai/activity.es.js +1 -1
  83. package/dist/components/ai/plan.cjs.js +1 -1
  84. package/dist/components/ai/plan.es.js +1 -1
  85. package/dist/components/ai/task-list.cjs.js +1 -1
  86. package/dist/components/ai/task-list.es.js +1 -1
  87. package/dist/components/ai/tool-approval.cjs.js +1 -1
  88. package/dist/components/ai/tool-approval.es.js +1 -1
  89. package/dist/components/ai/tool-call.cjs.js +2 -2
  90. package/dist/components/ai/tool-call.es.js +2 -2
  91. package/dist/{composer-CxmOOUX8.js → composer-B0i1WZgt.js} +2 -2
  92. package/dist/{composer-CxmOOUX8.js.map → composer-B0i1WZgt.js.map} +1 -1
  93. package/dist/{composer-Cg5bXN1r.cjs → composer-DJsfHivH.cjs} +2 -2
  94. package/dist/{composer-Cg5bXN1r.cjs.map → composer-DJsfHivH.cjs.map} +1 -1
  95. package/dist/{data-code-section-Bs8sHDux.cjs → data-code-section-BB2RWius.cjs} +3 -3
  96. package/dist/{data-code-section-Bs8sHDux.cjs.map → data-code-section-BB2RWius.cjs.map} +1 -1
  97. package/dist/{data-code-section-CqdjmClK.js → data-code-section-DsU-ubVW.js} +3 -3
  98. package/dist/{data-code-section-CqdjmClK.js.map → data-code-section-DsU-ubVW.js.map} +1 -1
  99. package/dist/data-list-CaifGmFh.cjs +142 -0
  100. package/dist/data-list-CaifGmFh.cjs.map +1 -0
  101. package/dist/data-list-kilUFo3I.js +138 -0
  102. package/dist/data-list-kilUFo3I.js.map +1 -0
  103. package/dist/{data-list-skeleton-BNsWWamC.js → data-list-skeleton-C_zFfUy5.js} +2 -2
  104. package/dist/{data-list-skeleton-BNsWWamC.js.map → data-list-skeleton-C_zFfUy5.js.map} +1 -1
  105. package/dist/{data-list-skeleton-BGJD4qMF.cjs → data-list-skeleton-Cgo1Urkr.cjs} +6 -6
  106. package/dist/{data-list-skeleton-BGJD4qMF.cjs.map → data-list-skeleton-Cgo1Urkr.cjs.map} +1 -1
  107. package/dist/data-list-spacer-D9J0nV_S.cjs +218 -0
  108. package/dist/data-list-spacer-D9J0nV_S.cjs.map +1 -0
  109. package/dist/data-list-spacer-DGUCD6oy.js +209 -0
  110. package/dist/data-list-spacer-DGUCD6oy.js.map +1 -0
  111. package/dist/{data-list-BLfHObw8.cjs → data-list-top-DYnH-IhJ.cjs} +14 -340
  112. package/dist/data-list-top-DYnH-IhJ.cjs.map +1 -0
  113. package/dist/{data-list-B2ArWwsJ.js → data-list-top-Dk9Wz_w5.js} +6 -333
  114. package/dist/data-list-top-Dk9Wz_w5.js.map +1 -0
  115. package/dist/{data-panel-Wjgbl6zx.cjs → data-panel-CtFwwsPs.cjs} +2 -2
  116. package/dist/{data-panel-Wjgbl6zx.cjs.map → data-panel-CtFwwsPs.cjs.map} +1 -1
  117. package/dist/{data-panel-BdCw3F_h.js → data-panel-CwIdwpov.js} +2 -2
  118. package/dist/{data-panel-BdCw3F_h.js.map → data-panel-CwIdwpov.js.map} +1 -1
  119. package/dist/{date-time-range-picker-SU1Q1h1h.js → date-time-range-picker-BT9qan60.js} +2 -2
  120. package/dist/{date-time-range-picker-SU1Q1h1h.js.map → date-time-range-picker-BT9qan60.js.map} +1 -1
  121. package/dist/{date-time-range-picker-ByNvjYuV.cjs → date-time-range-picker-DQa5XLST.cjs} +2 -2
  122. package/dist/{date-time-range-picker-ByNvjYuV.cjs.map → date-time-range-picker-DQa5XLST.cjs.map} +1 -1
  123. package/dist/{dialog-B5nLi0ER.cjs → dialog-BAlSUqcF.cjs} +2 -2
  124. package/dist/{dialog-B5nLi0ER.cjs.map → dialog-BAlSUqcF.cjs.map} +1 -1
  125. package/dist/{dialog-Jz2ZfO-z.js → dialog-CboDo8Pj.js} +2 -2
  126. package/dist/{dialog-Jz2ZfO-z.js.map → dialog-CboDo8Pj.js.map} +1 -1
  127. package/dist/{dialog-action-DdkbsKfP.cjs → dialog-action-DWE9XalB.cjs} +2 -2
  128. package/dist/{dialog-action-DdkbsKfP.cjs.map → dialog-action-DWE9XalB.cjs.map} +1 -1
  129. package/dist/{dialog-action-BxXhAz-P.js → dialog-action-DpctEQ9l.js} +2 -2
  130. package/dist/{dialog-action-BxXhAz-P.js.map → dialog-action-DpctEQ9l.js.map} +1 -1
  131. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +1 -1
  132. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +1 -1
  133. package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +2 -2
  134. package/dist/domains/chat/attachments/composer-attachment-list.es.js +2 -2
  135. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
  136. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
  137. package/dist/domains/chat/messages/dataset-save-action.cjs.js +2 -2
  138. package/dist/domains/chat/messages/dataset-save-action.es.js +2 -2
  139. package/dist/domains/chat/messages/message-row.cjs.js +1 -1
  140. package/dist/domains/chat/messages/message-row.es.js +1 -1
  141. package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
  142. package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
  143. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  144. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  145. package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
  146. package/dist/domains/chat/messages/skill-message.es.js +2 -2
  147. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +1 -1
  148. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +1 -1
  149. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +1 -1
  150. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +1 -1
  151. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +1 -1
  152. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +1 -1
  153. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +1 -1
  154. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +1 -1
  155. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  156. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  157. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  158. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  159. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +1 -1
  160. package/dist/domains/chat/tools/badges/tool-badge.es.js +1 -1
  161. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +1 -2
  162. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
  163. package/dist/domains/chat/tools/badges/workflow-badge.es.js +1 -2
  164. package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
  165. package/dist/domains/chat/tools/submit-plan-tool.cjs.js +1 -1
  166. package/dist/domains/chat/tools/submit-plan-tool.es.js +1 -1
  167. package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
  168. package/dist/domains/logs/components/log-data-panel.es.js +1 -1
  169. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -3
  170. package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
  171. package/dist/domains/logs/components/logs-list-view.es.js +2 -3
  172. package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
  173. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  174. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  175. package/dist/domains/metrics/components/agent-runs-card.cjs.js +1 -1
  176. package/dist/domains/metrics/components/agent-runs-card.es.js +1 -1
  177. package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
  178. package/dist/domains/metrics/components/chart-area.es.js +1 -1
  179. package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
  180. package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
  181. package/dist/domains/metrics/components/chart-card.cjs.js +1 -1
  182. package/dist/domains/metrics/components/chart-card.es.js +1 -1
  183. package/dist/domains/metrics/components/date-range-selector.cjs.js +5 -44
  184. package/dist/domains/metrics/components/date-range-selector.cjs.js.map +1 -1
  185. package/dist/domains/metrics/components/date-range-selector.es.js +3 -42
  186. package/dist/domains/metrics/components/date-range-selector.es.js.map +1 -1
  187. package/dist/domains/metrics/components/failure-rate-card.cjs.js +1 -1
  188. package/dist/domains/metrics/components/failure-rate-card.es.js +1 -1
  189. package/dist/domains/metrics/components/latency-card.cjs.js +1 -1
  190. package/dist/domains/metrics/components/latency-card.es.js +1 -1
  191. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +26 -0
  192. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js.map +1 -0
  193. package/dist/domains/metrics/components/metrics-time-range-chip.d.ts +2 -0
  194. package/dist/domains/metrics/components/metrics-time-range-chip.es.js +22 -0
  195. package/dist/domains/metrics/components/metrics-time-range-chip.es.js.map +1 -0
  196. package/dist/domains/metrics/components/scores-card.cjs.js +1 -1
  197. package/dist/domains/metrics/components/scores-card.es.js +1 -1
  198. package/dist/domains/metrics/components/token-usage-card.cjs.js +1 -1
  199. package/dist/domains/metrics/components/token-usage-card.es.js +1 -1
  200. package/dist/domains/metrics/components/trace-volume-card.cjs.js +1 -1
  201. package/dist/domains/metrics/components/trace-volume-card.es.js +1 -1
  202. package/dist/domains/metrics/components/usage-card.cjs.js +1 -1
  203. package/dist/domains/metrics/components/usage-card.es.js +1 -1
  204. package/dist/domains/metrics/components.cjs.js +2 -0
  205. package/dist/domains/metrics/components.cjs.js.map +1 -1
  206. package/dist/domains/metrics/components.es.js +1 -0
  207. package/dist/domains/metrics/components.es.js.map +1 -1
  208. package/dist/domains/metrics/hooks.cjs.js +4 -0
  209. package/dist/domains/metrics/hooks.cjs.js.map +1 -1
  210. package/dist/domains/metrics/hooks.es.js +1 -1
  211. package/dist/domains/metrics/metrics-date-presets.cjs.js +49 -0
  212. package/dist/domains/metrics/metrics-date-presets.cjs.js.map +1 -0
  213. package/dist/domains/metrics/metrics-date-presets.d.ts +2 -0
  214. package/dist/domains/metrics/metrics-date-presets.es.js +43 -0
  215. package/dist/domains/metrics/metrics-date-presets.es.js.map +1 -0
  216. package/dist/domains/metrics/metrics-filters.cjs.js +94 -0
  217. package/dist/domains/metrics/metrics-filters.cjs.js.map +1 -1
  218. package/dist/domains/metrics/metrics-filters.es.js +91 -1
  219. package/dist/domains/metrics/metrics-filters.es.js.map +1 -1
  220. package/dist/domains/metrics.cjs.js +6 -0
  221. package/dist/domains/metrics.cjs.js.map +1 -1
  222. package/dist/domains/metrics.es.js +2 -1
  223. package/dist/domains/metrics.es.js.map +1 -1
  224. package/dist/domains/scores/components/score-data-panel.cjs.js +1 -1
  225. package/dist/domains/scores/components/score-data-panel.es.js +1 -1
  226. package/dist/domains/scores/components/span-scoring.cjs.js +3 -3
  227. package/dist/domains/scores/components/span-scoring.es.js +3 -3
  228. package/dist/domains/scores/components/trace-scores-tab.cjs.js +1 -2
  229. package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
  230. package/dist/domains/scores/components/trace-scores-tab.es.js +1 -2
  231. package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
  232. package/dist/domains/traces/components/feedback-thread.cjs.js +3 -3
  233. package/dist/domains/traces/components/feedback-thread.es.js +3 -3
  234. package/dist/domains/traces/components/span-data-panel-view.cjs.js +2 -2
  235. package/dist/domains/traces/components/span-data-panel-view.es.js +2 -2
  236. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  237. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  238. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  239. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  240. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
  241. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
  242. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
  243. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  244. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +2 -2
  245. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
  246. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  247. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  248. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  249. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  250. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +1 -1
  251. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +1 -1
  252. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  253. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  254. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  255. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  256. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +1 -1
  257. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +1 -1
  258. package/dist/domains/traces/components/trace-columns-menu.cjs.js +4 -4
  259. package/dist/domains/traces/components/trace-columns-menu.es.js +4 -4
  260. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +4 -4
  261. package/dist/domains/traces/components/trace-data-panel-view.es.js +4 -4
  262. package/dist/domains/traces/components/trace-data-panel.cjs.js +1 -3
  263. package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
  264. package/dist/domains/traces/components/trace-data-panel.es.js +1 -3
  265. package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
  266. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  267. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  268. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  269. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  270. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
  271. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
  272. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +1 -1
  273. package/dist/domains/traces/components/trace-time-range-chip.es.js +1 -1
  274. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
  275. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
  276. package/dist/domains/traces/components/traces-list-view.cjs.js +6 -5
  277. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  278. package/dist/domains/traces/components/traces-list-view.es.js +5 -4
  279. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  280. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -4
  281. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  282. package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -4
  283. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  284. package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
  285. package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
  286. package/dist/domains/workflows/components/workflow-information.cjs.js +1 -1
  287. package/dist/domains/workflows/components/workflow-information.es.js +1 -1
  288. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
  289. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
  290. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +2 -2
  291. package/dist/domains/workflows/runs/workflow-run-list.es.js +2 -2
  292. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  293. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  294. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  295. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  296. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -0
  297. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js.map +1 -1
  298. package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -0
  299. package/dist/domains/workflows/workflow/workflow-input-data.es.js.map +1 -1
  300. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +1 -1
  301. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +1 -1
  302. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +1 -1
  303. package/dist/domains/workflows/workflow/workflow-run-data.es.js +1 -1
  304. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +2 -2
  305. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +2 -2
  306. package/dist/domains/workflows/workflow/workflow-trigger.cjs.js +1 -1
  307. package/dist/domains/workflows/workflow/workflow-trigger.es.js +1 -1
  308. package/dist/domains/workspace/components/workspace-active-file.cjs.js +1 -1
  309. package/dist/domains/workspace/components/workspace-active-file.es.js +1 -1
  310. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +5 -5
  311. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +5 -5
  312. package/dist/domains/workspace/components/workspace-create-directory.cjs.js +1 -1
  313. package/dist/domains/workspace/components/workspace-create-directory.es.js +1 -1
  314. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +2 -2
  315. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +2 -2
  316. package/dist/domains/workspace/components/workspace-parts.cjs.js +1 -1
  317. package/dist/domains/workspace/components/workspace-parts.es.js +1 -1
  318. package/dist/domains/workspace/components/workspace-tree.cjs.js +1 -1
  319. package/dist/domains/workspace/components/workspace-tree.es.js +1 -1
  320. package/dist/{dropdown-menu-D8GR_NhL.js → dropdown-menu-C6VtAiYJ.js} +43 -4
  321. package/dist/dropdown-menu-C6VtAiYJ.js.map +1 -0
  322. package/dist/{dropdown-menu-Bg96BCnK.cjs → dropdown-menu-dHvHFLji.cjs} +42 -3
  323. package/dist/dropdown-menu-dHvHFLji.cjs.map +1 -0
  324. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +1 -1
  325. package/dist/ee/signals/components/entity-index-compact-grid.es.js +1 -1
  326. package/dist/ee/signals/components/entity-index-list.cjs.js +1 -3
  327. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  328. package/dist/ee/signals/components/entity-index-list.es.js +1 -3
  329. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  330. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +2 -4
  331. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  332. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +2 -4
  333. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  334. package/dist/ee/signals/sankey-signals.cjs.js +1 -1
  335. package/dist/ee/signals/sankey-signals.es.js +1 -1
  336. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -2
  337. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +2 -2
  338. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +2 -2
  339. package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
  340. package/dist/{input-group-DQuyC9Pz.cjs → input-group-Bj2RbkNg.cjs} +20 -3
  341. package/dist/input-group-Bj2RbkNg.cjs.map +1 -0
  342. package/dist/{input-group-CIIwoggO.js → input-group-CrumkDCF.js} +20 -3
  343. package/dist/input-group-CrumkDCF.js.map +1 -0
  344. package/dist/layout/tabbed-container.cjs.js +4 -4
  345. package/dist/layout/tabbed-container.es.js +4 -4
  346. package/dist/{list-search-Cwp-OPvC.js → list-search-C7ro2_qL.js} +2 -2
  347. package/dist/{list-search-Cwp-OPvC.js.map → list-search-C7ro2_qL.js.map} +1 -1
  348. package/dist/{list-search-C5j3HYkb.cjs → list-search-Y3z6P6IO.cjs} +2 -2
  349. package/dist/{list-search-C5j3HYkb.cjs.map → list-search-Y3z6P6IO.cjs.map} +1 -1
  350. package/dist/{logs-data-list-B-gmgU74.js → logs-data-list-1KFnVsFz.js} +3 -2
  351. package/dist/{logs-data-list-B-gmgU74.js.map → logs-data-list-1KFnVsFz.js.map} +1 -1
  352. package/dist/{logs-data-list-CaXnNnC5.cjs → logs-data-list-BafttkM2.cjs} +22 -21
  353. package/dist/{logs-data-list-CaXnNnC5.cjs.map → logs-data-list-BafttkM2.cjs.map} +1 -1
  354. package/dist/{markdown-renderer-BXTNiZbz.cjs → markdown-renderer-BRu3RpQD.cjs} +3 -3
  355. package/dist/{markdown-renderer-BXTNiZbz.cjs.map → markdown-renderer-BRu3RpQD.cjs.map} +1 -1
  356. package/dist/{markdown-renderer-Ct-q_KTF.js → markdown-renderer-WesDzhMr.js} +3 -3
  357. package/dist/{markdown-renderer-Ct-q_KTF.js.map → markdown-renderer-WesDzhMr.js.map} +1 -1
  358. package/dist/{metrics-card-C33VsuXf.js → metrics-card-BI5okAsj.js} +2 -2
  359. package/dist/{metrics-card-C33VsuXf.js.map → metrics-card-BI5okAsj.js.map} +1 -1
  360. package/dist/{metrics-card-CxOVpP1t.cjs → metrics-card-CcesVPLN.cjs} +2 -2
  361. package/dist/{metrics-card-CxOVpP1t.cjs.map → metrics-card-CcesVPLN.cjs.map} +1 -1
  362. package/dist/{plan-TXWANP1R.js → plan-CBiLa54G.js} +2 -2
  363. package/dist/{plan-TXWANP1R.js.map → plan-CBiLa54G.js.map} +1 -1
  364. package/dist/{plan-CL-lbDuy.cjs → plan-ColU7p3H.cjs} +2 -2
  365. package/dist/{plan-CL-lbDuy.cjs.map → plan-ColU7p3H.cjs.map} +1 -1
  366. package/dist/primitives/menu-item.cjs.js +2 -0
  367. package/dist/primitives/menu-item.cjs.js.map +1 -1
  368. package/dist/primitives/menu-item.es.js +2 -1
  369. package/dist/primitives/menu-item.es.js.map +1 -1
  370. package/dist/{property-filter-applied-Ru3OQoGo.js → property-filter-applied-BCeGn2zQ.js} +2 -2
  371. package/dist/{property-filter-applied-Ru3OQoGo.js.map → property-filter-applied-BCeGn2zQ.js.map} +1 -1
  372. package/dist/{property-filter-applied-BBvaTC4B.cjs → property-filter-applied-CpelyBH9.cjs} +2 -2
  373. package/dist/{property-filter-applied-BBvaTC4B.cjs.map → property-filter-applied-CpelyBH9.cjs.map} +1 -1
  374. package/dist/{reasoning-activity-CFEaSv4J.cjs → reasoning-activity-B8bR8ib_.cjs} +2 -2
  375. package/dist/{reasoning-activity-CFEaSv4J.cjs.map → reasoning-activity-B8bR8ib_.cjs.map} +1 -1
  376. package/dist/{reasoning-activity-CHlEe011.js → reasoning-activity-DLrXgE9k.js} +2 -2
  377. package/dist/{reasoning-activity-CHlEe011.js.map → reasoning-activity-DLrXgE9k.js.map} +1 -1
  378. package/dist/{scroll-area-CVgjRzTS.cjs → scroll-area-BakRKj2k.cjs} +3 -3
  379. package/dist/scroll-area-BakRKj2k.cjs.map +1 -0
  380. package/dist/{scroll-area-BywIlj3F.js → scroll-area-D6gKFavi.js} +3 -3
  381. package/dist/scroll-area-D6gKFavi.js.map +1 -0
  382. package/dist/{search-input-RybUdqzg.js → search-input-BEAKPGH8.js} +2 -2
  383. package/dist/{search-input-RybUdqzg.js.map → search-input-BEAKPGH8.js.map} +1 -1
  384. package/dist/{search-input-2DhcUIvn.cjs → search-input-DdRhkYqy.cjs} +2 -2
  385. package/dist/{search-input-2DhcUIvn.cjs.map → search-input-DdRhkYqy.cjs.map} +1 -1
  386. package/dist/{span-payload-primitives-DIxmotnO.cjs → span-payload-primitives-BymKsUAo.cjs} +2 -2
  387. package/dist/{span-payload-primitives-DIxmotnO.cjs.map → span-payload-primitives-BymKsUAo.cjs.map} +1 -1
  388. package/dist/{span-payload-primitives-dTs5UrjA.js → span-payload-primitives-DBNNkmHo.js} +2 -2
  389. package/dist/{span-payload-primitives-dTs5UrjA.js.map → span-payload-primitives-DBNNkmHo.js.map} +1 -1
  390. package/dist/src/domains/metrics/components/date-range-selector.d.ts +1 -0
  391. package/dist/src/domains/metrics/components/index.d.ts +1 -0
  392. package/dist/src/domains/metrics/components/metrics-time-range-chip.d.ts +5 -0
  393. package/dist/src/domains/metrics/hooks/index.d.ts +1 -1
  394. package/dist/src/domains/metrics/metrics-date-presets.d.ts +6 -0
  395. package/dist/src/domains/metrics/metrics-filters.d.ts +23 -1
  396. package/dist/src/ds/components/Combobox/combobox.d.ts +2 -0
  397. package/dist/src/ds/components/DropdownMenu/dropdown-menu.d.ts +19 -6
  398. package/dist/src/ds/components/InputGroup/input-group.d.ts +6 -2
  399. package/dist/src/ds/components/PageLayout/page-layout.d.ts +8 -1
  400. package/dist/src/ds/components/ScrollArea/scroll-area.d.ts +2 -1
  401. package/dist/src/ds/primitives/menu-item.d.ts +1 -0
  402. package/dist/style.css +16 -4
  403. package/dist/{tabs-list-DY_hziv7.js → tabs-list-CDep3C2w.js} +2 -2
  404. package/dist/{tabs-list-DY_hziv7.js.map → tabs-list-CDep3C2w.js.map} +1 -1
  405. package/dist/{tabs-list-xikY_dug.cjs → tabs-list-DwQsMVKI.cjs} +2 -2
  406. package/dist/{tabs-list-xikY_dug.cjs.map → tabs-list-DwQsMVKI.cjs.map} +1 -1
  407. package/dist/{tool-approval-TB8r2U_c.js → tool-approval-BK2j7aj_.js} +2 -2
  408. package/dist/{tool-approval-TB8r2U_c.js.map → tool-approval-BK2j7aj_.js.map} +1 -1
  409. package/dist/{tool-approval-S6ml_xyU.cjs → tool-approval-Bza_sgxa.cjs} +2 -2
  410. package/dist/{tool-approval-S6ml_xyU.cjs.map → tool-approval-Bza_sgxa.cjs.map} +1 -1
  411. package/dist/{tool-call-arguments-CCkJ1btR.js → tool-call-arguments-BLCAiFYg.js} +2 -2
  412. package/dist/{tool-call-arguments-CCkJ1btR.js.map → tool-call-arguments-BLCAiFYg.js.map} +1 -1
  413. package/dist/{tool-call-arguments-DyukJmhY.cjs → tool-call-arguments-CK3kQ_FX.cjs} +2 -2
  414. package/dist/{tool-call-arguments-DyukJmhY.cjs.map → tool-call-arguments-CK3kQ_FX.cjs.map} +1 -1
  415. package/dist/{tool-call-group-CZBqGjMh.js → tool-call-group-C_zxf6OA.js} +2 -2
  416. package/dist/{tool-call-group-CZBqGjMh.js.map → tool-call-group-C_zxf6OA.js.map} +1 -1
  417. package/dist/{tool-call-group-CFpdexuw.cjs → tool-call-group-Cdgv7red.cjs} +2 -2
  418. package/dist/{tool-call-group-CFpdexuw.cjs.map → tool-call-group-Cdgv7red.cjs.map} +1 -1
  419. package/dist/{traces-data-list-1X6UBM6Y.js → traces-data-list-CDvg5G_2.js} +4 -2
  420. package/dist/{traces-data-list-1X6UBM6Y.js.map → traces-data-list-CDvg5G_2.js.map} +1 -1
  421. package/dist/{traces-data-list-BXSXW3E6.cjs → traces-data-list-Dy-9AIr2.cjs} +19 -17
  422. package/dist/{traces-data-list-BXSXW3E6.cjs.map → traces-data-list-Dy-9AIr2.cjs.map} +1 -1
  423. package/dist/{workflow-data-edge-view-De0xCrVu.js → workflow-data-edge-view-BWyUa9am.js} +2 -2
  424. package/dist/{workflow-data-edge-view-De0xCrVu.js.map → workflow-data-edge-view-BWyUa9am.js.map} +1 -1
  425. package/dist/{workflow-data-edge-view-kmB6j-ui.cjs → workflow-data-edge-view-BpnN4W_5.cjs} +2 -2
  426. package/dist/{workflow-data-edge-view-kmB6j-ui.cjs.map → workflow-data-edge-view-BpnN4W_5.cjs.map} +1 -1
  427. package/dist/{workflow-edge-data-button-av1zCMfP.cjs → workflow-edge-data-button-Du5ZDm72.cjs} +2 -2
  428. package/dist/{workflow-edge-data-button-av1zCMfP.cjs.map → workflow-edge-data-button-Du5ZDm72.cjs.map} +1 -1
  429. package/dist/{workflow-edge-data-button-CXbj67U9.js → workflow-edge-data-button-DvGFB2L6.js} +2 -2
  430. package/dist/{workflow-edge-data-button-CXbj67U9.js.map → workflow-edge-data-button-DvGFB2L6.js.map} +1 -1
  431. package/dist/{workflow-step-action-BsBZk7j6.cjs → workflow-step-action-DNrU8on1.cjs} +2 -2
  432. package/dist/{workflow-step-action-BsBZk7j6.cjs.map → workflow-step-action-DNrU8on1.cjs.map} +1 -1
  433. package/dist/{workflow-step-action-AG05Ly8P.js → workflow-step-action-ac1gNDdn.js} +2 -2
  434. package/dist/{workflow-step-action-AG05Ly8P.js.map → workflow-step-action-ac1gNDdn.js.map} +1 -1
  435. package/package.json +7 -7
  436. package/dist/combobox-fEMKH9nJ.cjs.map +0 -1
  437. package/dist/combobox-so2V71F7.js.map +0 -1
  438. package/dist/data-list-B2ArWwsJ.js.map +0 -1
  439. package/dist/data-list-BLfHObw8.cjs.map +0 -1
  440. package/dist/dropdown-menu-Bg96BCnK.cjs.map +0 -1
  441. package/dist/dropdown-menu-D8GR_NhL.js.map +0 -1
  442. package/dist/input-group-CIIwoggO.js.map +0 -1
  443. package/dist/input-group-DQuyC9Pz.cjs.map +0 -1
  444. package/dist/scroll-area-BywIlj3F.js.map +0 -1
  445. package/dist/scroll-area-CVgjRzTS.cjs.map +0 -1
@@ -2,6 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
+ const lucideReact = require('lucide-react');
6
+ const domains_traces_traceQueryFilters = require('../../trace-filters-Bh4dVNPX.cjs');
7
+
5
8
  const METRICS_ROOT_ENTITY_TYPE_OPTIONS = [
6
9
  { label: "Agent", entityType: "agent" },
7
10
  { label: "Workflow", entityType: "workflow_run" },
@@ -132,6 +135,93 @@ function createMetricsPropertyFilterFields({
132
135
  const text = fields.filter((f) => f.kind === "text").sort(byLabel);
133
136
  return [...pickMulti, ...text];
134
137
  }
138
+ const METRICS_TAGS_OPERATOR_ID = "hasAll";
139
+ const METRICS_FILTER_BAR_OPERATORS = [
140
+ { id: "is", label: "is" },
141
+ { id: METRICS_TAGS_OPERATOR_ID, label: "has all of", arity: "many" }
142
+ ];
143
+ const METRICS_FILTER_BAR_LABELS = {
144
+ rootEntityType: "Primitive type",
145
+ entityName: "Primitive name",
146
+ tags: "Tags",
147
+ serviceName: "Service Name",
148
+ environment: "Environment",
149
+ threadId: "Thread ID",
150
+ resourceId: "Resource ID",
151
+ userId: "User ID",
152
+ organizationId: "Organization ID",
153
+ runId: "Run ID",
154
+ sessionId: "Session ID",
155
+ requestId: "Request ID",
156
+ experimentId: "Experiment ID",
157
+ provider: "Provider",
158
+ model: "Model"
159
+ };
160
+ const METRICS_FILTER_BAR_ICONS = {
161
+ provider: lucideReact.CloudIcon,
162
+ model: lucideReact.CpuIcon
163
+ };
164
+ const METRICS_FILTER_BAR_TEXT_FIELD_IDS = [
165
+ "threadId",
166
+ "resourceId",
167
+ "userId",
168
+ "organizationId",
169
+ "runId",
170
+ "sessionId",
171
+ "requestId",
172
+ "experimentId"
173
+ ];
174
+ const metricsFieldBase = (id) => ({
175
+ id,
176
+ label: METRICS_FILTER_BAR_LABELS[id],
177
+ icon: METRICS_FILTER_BAR_ICONS[id] ?? domains_traces_traceQueryFilters.traceFilterFieldIcon(id),
178
+ color: domains_traces_traceQueryFilters.traceFilterFieldColor()
179
+ });
180
+ const byFieldLabel = (a, b) => a.label.localeCompare(b.label);
181
+ function createMetricsFilterBarFields({
182
+ availableTags,
183
+ availableEntityNames,
184
+ availableServiceNames,
185
+ availableEnvironments
186
+ }) {
187
+ const pick = (id, suggestions) => ({
188
+ ...metricsFieldBase(id),
189
+ operators: ["is"],
190
+ strict: true,
191
+ suggestions
192
+ });
193
+ const text = (id) => ({ ...metricsFieldBase(id), operators: ["is"] });
194
+ const options = (values) => values.map((value) => ({ value }));
195
+ const pickFields = [
196
+ pick(
197
+ "rootEntityType",
198
+ METRICS_ROOT_ENTITY_TYPE_OPTIONS.map((o) => ({ value: o.entityType, label: o.label }))
199
+ ),
200
+ pick("entityName", options(availableEntityNames)),
201
+ { ...pick("tags", options(availableTags)), operators: [METRICS_TAGS_OPERATOR_ID] },
202
+ pick("serviceName", options(availableServiceNames)),
203
+ pick("environment", options(availableEnvironments))
204
+ ];
205
+ const textFields = METRICS_FILTER_BAR_TEXT_FIELD_IDS.map(text);
206
+ const urlOnlyFields = ["provider", "model"].map((id) => ({ ...text(id), hidden: true }));
207
+ return [...pickFields.toSorted(byFieldLabel), ...textFields.toSorted(byFieldLabel), ...urlOnlyFields];
208
+ }
209
+ function metricsTokensToFilterBarItems(tokens) {
210
+ return tokens.map((token) => {
211
+ if (token.fieldId === "tags") {
212
+ const value2 = [token.value].flat().filter((tag) => tag !== "");
213
+ return { id: token.fieldId, fieldId: token.fieldId, operatorId: METRICS_TAGS_OPERATOR_ID, value: value2 };
214
+ }
215
+ const value = Array.isArray(token.value) ? token.value[0] ?? "" : token.value;
216
+ return { id: token.fieldId, fieldId: token.fieldId, operatorId: "is", value: isNeutralValue(value) ? "" : value };
217
+ });
218
+ }
219
+ function filterBarItemsToMetricsTokens(items) {
220
+ return items.map((item) => ({
221
+ fieldId: item.fieldId,
222
+ value: Array.isArray(item.value) ? item.value.map(String) : String(item.value)
223
+ }));
224
+ }
135
225
  function getMetricsPropertyFilterTokens(searchParams) {
136
226
  const tokens = [];
137
227
  const paramToFieldId = /* @__PURE__ */ new Map([[METRICS_ROOT_ENTITY_TYPE_PARAM, "rootEntityType"]]);
@@ -234,6 +324,7 @@ function buildMetricsDimensionalFilter(tokens) {
234
324
  return result;
235
325
  }
236
326
 
327
+ exports.METRICS_FILTER_BAR_OPERATORS = METRICS_FILTER_BAR_OPERATORS;
237
328
  exports.METRICS_PROPERTY_FILTER_FIELD_IDS = METRICS_PROPERTY_FILTER_FIELD_IDS;
238
329
  exports.METRICS_PROPERTY_FILTER_PARAM_BY_FIELD = METRICS_PROPERTY_FILTER_PARAM_BY_FIELD;
239
330
  exports.METRICS_ROOT_ENTITY_TYPE_OPTIONS = METRICS_ROOT_ENTITY_TYPE_OPTIONS;
@@ -242,10 +333,13 @@ exports.METRICS_SYNTHETIC_FILTER_FIELD_IDS = METRICS_SYNTHETIC_FILTER_FIELD_IDS;
242
333
  exports.applyMetricsPropertyFilterTokens = applyMetricsPropertyFilterTokens;
243
334
  exports.buildMetricsDimensionalFilter = buildMetricsDimensionalFilter;
244
335
  exports.clearSavedMetricsFilters = clearSavedMetricsFilters;
336
+ exports.createMetricsFilterBarFields = createMetricsFilterBarFields;
245
337
  exports.createMetricsPropertyFilterFields = createMetricsPropertyFilterFields;
338
+ exports.filterBarItemsToMetricsTokens = filterBarItemsToMetricsTokens;
246
339
  exports.getMetricsPropertyFilterTokens = getMetricsPropertyFilterTokens;
247
340
  exports.getPreservedMetricsFilterParams = getPreservedMetricsFilterParams;
248
341
  exports.hasAnyMetricsFilterParams = hasAnyMetricsFilterParams;
249
342
  exports.loadMetricsFiltersFromStorage = loadMetricsFiltersFromStorage;
343
+ exports.metricsTokensToFilterBarItems = metricsTokensToFilterBarItems;
250
344
  exports.saveMetricsFiltersToStorage = saveMetricsFiltersToStorage;
251
345
  //# sourceMappingURL=metrics-filters.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-filters.cjs.js","sources":["../../../src/domains/metrics/metrics-filters.ts"],"sourcesContent":["import type { EntityType } from '@mastra/core/observability';\nimport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\ntype EntityTypeValue = `${EntityType}`;\n\n/** Primitive type options — matches the traces filter vocabulary. */\nexport const METRICS_ROOT_ENTITY_TYPE_OPTIONS = [\n { label: 'Agent', entityType: 'agent' },\n { label: 'Workflow', entityType: 'workflow_run' },\n { label: 'Scorer', entityType: 'scorer' },\n { label: 'Ingest', entityType: 'rag_ingestion' },\n] as const satisfies readonly { label: string; entityType: EntityTypeValue }[];\n\n/** Field IDs that live in dedicated URL params (not the generic `filterX` set). */\nexport const METRICS_SYNTHETIC_FILTER_FIELD_IDS = ['rootEntityType'] as const;\n\nexport const METRICS_ROOT_ENTITY_TYPE_PARAM = 'rootEntityType';\n\n/** URL param name for each generic property filter field. Mirrors traces for\n * cross-page URL consistency (user can copy a trace's filter URL and paste\n * equivalent dimensions into metrics). */\nexport const METRICS_PROPERTY_FILTER_PARAM_BY_FIELD = {\n tags: 'filterTags',\n entityName: 'filterEntityName',\n runId: 'filterRunId',\n threadId: 'filterThreadId',\n sessionId: 'filterSessionId',\n requestId: 'filterRequestId',\n resourceId: 'filterResourceId',\n userId: 'filterUserId',\n organizationId: 'filterOrganizationId',\n serviceName: 'filterServiceName',\n environment: 'filterEnvironment',\n experimentId: 'filterExperimentId',\n provider: 'filterProvider',\n model: 'filterModel',\n} as const;\n\nexport type MetricsPropertyFilterFieldId = keyof typeof METRICS_PROPERTY_FILTER_PARAM_BY_FIELD;\n\nexport const METRICS_PROPERTY_FILTER_FIELD_IDS = Object.keys(\n METRICS_PROPERTY_FILTER_PARAM_BY_FIELD,\n) as Array<MetricsPropertyFilterFieldId>;\n\nconst METRICS_FILTERS_STORAGE_KEY = 'mastra:metrics:saved-filters';\n\n/** Save the current metrics filter URL params so the metrics page can restore\n * them on next visit (same pattern as traces/logs). */\nexport function saveMetricsFiltersToStorage(params: URLSearchParams): void {\n const serialized = getPreservedMetricsFilterParams(params);\n try {\n localStorage.setItem(METRICS_FILTERS_STORAGE_KEY, serialized.toString());\n } catch {\n // localStorage may be unavailable — silently skip.\n }\n}\n\nexport function clearSavedMetricsFilters(): void {\n try {\n localStorage.removeItem(METRICS_FILTERS_STORAGE_KEY);\n } catch {\n // ignore\n }\n}\n\nexport function loadMetricsFiltersFromStorage(): URLSearchParams | null {\n try {\n const raw = localStorage.getItem(METRICS_FILTERS_STORAGE_KEY);\n if (!raw) return null;\n const parsed = new URLSearchParams(raw);\n return parsed.toString() ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport function hasAnyMetricsFilterParams(params: URLSearchParams): boolean {\n if (params.has(METRICS_ROOT_ENTITY_TYPE_PARAM)) return true;\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n if (params.has(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId])) return true;\n }\n return false;\n}\n\n/** Build the PropertyFilterField list shown in the metrics filter popover.\n *\n * The field order is curated for OLAP efficiency: columnar/LowCardinality\n * dimensions first, then bloom_filter-indexed high-cardinality IDs as\n * free-text. Fields that are expensive to filter without an index are\n * intentionally omitted from this dashboard surface. */\nexport function createMetricsPropertyFilterFields({\n availableTags,\n availableEntityNames,\n availableServiceNames,\n availableEnvironments,\n loading,\n}: {\n availableTags: string[];\n availableEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n loading?: {\n tags?: boolean;\n entityNames?: boolean;\n serviceNames?: boolean;\n environments?: boolean;\n };\n}): PropertyFilterField[] {\n const fields: PropertyFilterField[] = [\n {\n id: 'rootEntityType',\n label: 'Primitive type',\n kind: 'pick-multi',\n searchable: false,\n options: METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ label: o.label, value: o.entityType })),\n placeholder: 'Choose entity type',\n emptyText: 'No entity types.',\n },\n {\n id: 'entityName',\n label: 'Primitive name',\n kind: 'pick-multi',\n options: availableEntityNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose entity names',\n emptyText: 'No entity names found.',\n isLoading: loading?.entityNames,\n },\n {\n id: 'tags',\n label: 'Tags',\n kind: 'pick-multi',\n multi: true,\n options: availableTags.map(tag => ({ label: tag, value: tag })),\n placeholder: 'Choose tags',\n emptyText: 'No tags found.',\n isLoading: loading?.tags,\n },\n {\n id: 'serviceName',\n label: 'Service Name',\n kind: 'pick-multi',\n options: availableServiceNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose service names',\n emptyText: 'No service names found.',\n isLoading: loading?.serviceNames,\n },\n {\n id: 'environment',\n label: 'Environment',\n kind: 'pick-multi',\n options: availableEnvironments.map(env => ({ label: env, value: env })),\n placeholder: 'Choose environments',\n emptyText: 'No environments found.',\n isLoading: loading?.environments,\n },\n // Provider / model are filterable by URL (filterProvider / filterModel) but\n // are omitted from the popover until we expose a discovery endpoint.\n // High-cardinality IDs — free-text. Backed by bloom_filter skip indexes on\n // ClickHouse, narrow timestamp range pruning on DuckDB.\n { id: 'threadId', label: 'Thread ID', kind: 'text' },\n { id: 'resourceId', label: 'Resource ID', kind: 'text' },\n { id: 'userId', label: 'User ID', kind: 'text' },\n { id: 'organizationId', label: 'Organization ID', kind: 'text' },\n { id: 'runId', label: 'Run ID', kind: 'text' },\n { id: 'sessionId', label: 'Session ID', kind: 'text' },\n { id: 'requestId', label: 'Request ID', kind: 'text' },\n { id: 'experimentId', label: 'Experiment ID', kind: 'text' },\n ];\n const byLabel = (a: PropertyFilterField, b: PropertyFilterField) => a.label.localeCompare(b.label);\n const pickMulti = fields.filter(f => f.kind === 'pick-multi').sort(byLabel);\n const text = fields.filter(f => f.kind === 'text').sort(byLabel);\n return [...pickMulti, ...text];\n}\n\n/** Parse filter tokens from URL params, preserving insertion order. */\nexport function getMetricsPropertyFilterTokens(searchParams: URLSearchParams): PropertyFilterToken[] {\n const tokens: PropertyFilterToken[] = [];\n\n const paramToFieldId = new Map<string, string>([[METRICS_ROOT_ENTITY_TYPE_PARAM, 'rootEntityType']]);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n paramToFieldId.set(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId], fieldId);\n }\n\n const seen = new Set<string>();\n for (const [paramName] of searchParams.entries()) {\n const fieldId = paramToFieldId.get(paramName);\n if (!fieldId || seen.has(fieldId)) continue;\n seen.add(fieldId);\n\n if (fieldId === 'tags') {\n const raw = searchParams.getAll(paramName);\n if (raw.length === 0) continue;\n tokens.push({ fieldId, value: raw.filter(Boolean) });\n continue;\n }\n\n // Multi-value pick-multi fields: collect all occurrences.\n if (\n fieldId === 'rootEntityType' ||\n fieldId === 'entityName' ||\n fieldId === 'serviceName' ||\n fieldId === 'environment' ||\n fieldId === 'provider' ||\n fieldId === 'model'\n ) {\n const raw = searchParams.getAll(paramName);\n if (raw.length > 1) {\n tokens.push({ fieldId, value: raw });\n continue;\n }\n }\n\n const value = searchParams.get(paramName);\n if (value !== null) tokens.push({ fieldId, value });\n }\n\n return tokens;\n}\n\n/** Return a fresh URLSearchParams containing only metrics filter params. */\nexport function getPreservedMetricsFilterParams(searchParams: URLSearchParams): URLSearchParams {\n const next = new URLSearchParams();\n const rootEntityValues = searchParams.getAll(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const v of rootEntityValues) next.append(METRICS_ROOT_ENTITY_TYPE_PARAM, v);\n\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n const param = METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId];\n const values = searchParams.getAll(param);\n for (const v of values) next.append(param, v);\n }\n return next;\n}\n\n/** Mutate `params` in place: strip every metrics filter param, then re-write\n * them from `tokens` in order. Token insertion order drives URL order so\n * filter pill order is stable across reloads. */\nexport function applyMetricsPropertyFilterTokens(params: URLSearchParams, tokens: PropertyFilterToken[]): void {\n params.delete(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n params.delete(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n\n for (const token of tokens) {\n const paramName =\n token.fieldId === 'rootEntityType'\n ? METRICS_ROOT_ENTITY_TYPE_PARAM\n : METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[token.fieldId as MetricsPropertyFilterFieldId];\n if (!paramName) continue;\n\n if (Array.isArray(token.value)) {\n const values = token.value.filter(v => typeof v === 'string' && v !== '');\n if (values.length === 0) {\n // Keep an empty sentinel for `tags` so the pill survives a Reset.\n if (token.fieldId === 'tags') params.append(paramName, '');\n continue;\n }\n for (const v of values) params.append(paramName, v);\n } else if (typeof token.value === 'string') {\n // Persist even empty / 'Any' strings so newly-created pills (and\n // neutralized-but-still-visible pills after a Reset) survive URL\n // round-trips. `buildMetricsDimensionalFilter` drops these on the API\n // query side so neutrals never reach the backend.\n params.set(paramName, token.value.trim());\n }\n }\n}\n\n/** Shape of the dimensional filter object fed into `MetricsFilter` on client\n * calls. Kept compatible with `metricsFilterSchema` in @internal/core — every\n * scalar field maps to a single-string column filter, and `tags` is the only\n * array field (matched via `has()` / equivalent on backends). */\nexport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\n\n/** Convert the active token list into a `MetricsFilter`-compatible object.\n *\n * Single-value text fields are assigned as strings; `pick-multi` fields are\n * assigned as string arrays. Empty/neutral values are dropped. */\n/** \"Neutral\" sentinel for single-select pick-multi fields. Emitted by the\n * toolbar's Clear action so pills stay visible after reset; must be stripped\n * before the filter object is sent to the backend (it is not a valid enum\n * option for fields like `rootEntityType`). */\nconst NEUTRAL_PICK_VALUE = 'Any';\n\nfunction isNeutralValue(v: string): boolean {\n const trimmed = v.trim();\n return trimmed === '' || trimmed === NEUTRAL_PICK_VALUE;\n}\n\n/** `rootEntityType` is enum-valued at the backend; URL-supplied or stale stored\n * values can be arbitrary strings, so we validate against the allowed set\n * before letting them reach the filter object. Returns `undefined` if the\n * value isn't a known enum option. */\nconst VALID_ROOT_ENTITY_TYPES: ReadonlySet<EntityTypeValue> = new Set(\n METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => o.entityType),\n);\nfunction toValidRootEntityType(v: string): EntityType | undefined {\n const trimmed = v.trim();\n return VALID_ROOT_ENTITY_TYPES.has(trimmed as EntityTypeValue) ? (trimmed as EntityType) : undefined;\n}\n\nexport function buildMetricsDimensionalFilter(tokens: PropertyFilterToken[]): MetricsDimensionalFilter {\n const result: MetricsDimensionalFilter = {};\n for (const token of tokens) {\n const fieldId = token.fieldId as keyof MetricsDimensionalFilter;\n if (Array.isArray(token.value)) {\n const values = token.value\n .filter((v): v is string => typeof v === 'string')\n .map(v => v.trim())\n .filter(v => !isNeutralValue(v));\n if (values.length === 0) continue;\n if (fieldId === 'tags') {\n result.tags = values;\n } else if (fieldId === 'rootEntityType') {\n const firstValue = values[0];\n const validated = firstValue !== undefined ? toValidRootEntityType(firstValue) : undefined;\n if (validated) result.rootEntityType = validated;\n } else {\n // Backend accepts a single string per dimension; take the first selection.\n (result as Record<string, unknown>)[fieldId] = values[0];\n }\n } else if (typeof token.value === 'string') {\n if (isNeutralValue(token.value)) continue;\n const trimmed = token.value.trim();\n if (fieldId === 'rootEntityType') {\n const validated = toValidRootEntityType(trimmed);\n if (validated) result.rootEntityType = validated;\n } else {\n (result as Record<string, unknown>)[fieldId] = trimmed;\n }\n }\n }\n return result;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics-filters.cjs.js","sources":["../../../src/domains/metrics/metrics-filters.ts"],"sourcesContent":["import type { EntityType } from '@mastra/core/observability';\nimport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\nimport { CloudIcon, CpuIcon } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\nimport { traceFilterFieldColor, traceFilterFieldIcon } from '../traces/trace-filters';\nimport type {\n FilterBarField,\n FilterBarItem,\n FilterBarOperator,\n FilterBarOption,\n} from '@/ds/components/FilterBar/types';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\ntype EntityTypeValue = `${EntityType}`;\n\n/** Primitive type options — matches the traces filter vocabulary. */\nexport const METRICS_ROOT_ENTITY_TYPE_OPTIONS = [\n { label: 'Agent', entityType: 'agent' },\n { label: 'Workflow', entityType: 'workflow_run' },\n { label: 'Scorer', entityType: 'scorer' },\n { label: 'Ingest', entityType: 'rag_ingestion' },\n] as const satisfies readonly { label: string; entityType: EntityTypeValue }[];\n\n/** Field IDs that live in dedicated URL params (not the generic `filterX` set). */\nexport const METRICS_SYNTHETIC_FILTER_FIELD_IDS = ['rootEntityType'] as const;\n\nexport const METRICS_ROOT_ENTITY_TYPE_PARAM = 'rootEntityType';\n\n/** URL param name for each generic property filter field. Mirrors traces for\n * cross-page URL consistency (user can copy a trace's filter URL and paste\n * equivalent dimensions into metrics). */\nexport const METRICS_PROPERTY_FILTER_PARAM_BY_FIELD = {\n tags: 'filterTags',\n entityName: 'filterEntityName',\n runId: 'filterRunId',\n threadId: 'filterThreadId',\n sessionId: 'filterSessionId',\n requestId: 'filterRequestId',\n resourceId: 'filterResourceId',\n userId: 'filterUserId',\n organizationId: 'filterOrganizationId',\n serviceName: 'filterServiceName',\n environment: 'filterEnvironment',\n experimentId: 'filterExperimentId',\n provider: 'filterProvider',\n model: 'filterModel',\n} as const;\n\nexport type MetricsPropertyFilterFieldId = keyof typeof METRICS_PROPERTY_FILTER_PARAM_BY_FIELD;\n\nexport const METRICS_PROPERTY_FILTER_FIELD_IDS = Object.keys(\n METRICS_PROPERTY_FILTER_PARAM_BY_FIELD,\n) as Array<MetricsPropertyFilterFieldId>;\n\nconst METRICS_FILTERS_STORAGE_KEY = 'mastra:metrics:saved-filters';\n\n/** Save the current metrics filter URL params so the metrics page can restore\n * them on next visit (same pattern as traces/logs). */\nexport function saveMetricsFiltersToStorage(params: URLSearchParams): void {\n const serialized = getPreservedMetricsFilterParams(params);\n try {\n localStorage.setItem(METRICS_FILTERS_STORAGE_KEY, serialized.toString());\n } catch {\n // localStorage may be unavailable — silently skip.\n }\n}\n\nexport function clearSavedMetricsFilters(): void {\n try {\n localStorage.removeItem(METRICS_FILTERS_STORAGE_KEY);\n } catch {\n // ignore\n }\n}\n\nexport function loadMetricsFiltersFromStorage(): URLSearchParams | null {\n try {\n const raw = localStorage.getItem(METRICS_FILTERS_STORAGE_KEY);\n if (!raw) return null;\n const parsed = new URLSearchParams(raw);\n return parsed.toString() ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport function hasAnyMetricsFilterParams(params: URLSearchParams): boolean {\n if (params.has(METRICS_ROOT_ENTITY_TYPE_PARAM)) return true;\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n if (params.has(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId])) return true;\n }\n return false;\n}\n\n/** Build the PropertyFilterField list shown in the metrics filter popover.\n *\n * The field order is curated for OLAP efficiency: columnar/LowCardinality\n * dimensions first, then bloom_filter-indexed high-cardinality IDs as\n * free-text. Fields that are expensive to filter without an index are\n * intentionally omitted from this dashboard surface.\n *\n * @deprecated The metrics dashboard filters through `FilterBar`. Use `createMetricsFilterBarFields`. */\nexport function createMetricsPropertyFilterFields({\n availableTags,\n availableEntityNames,\n availableServiceNames,\n availableEnvironments,\n loading,\n}: {\n availableTags: string[];\n availableEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n loading?: {\n tags?: boolean;\n entityNames?: boolean;\n serviceNames?: boolean;\n environments?: boolean;\n };\n}): PropertyFilterField[] {\n const fields: PropertyFilterField[] = [\n {\n id: 'rootEntityType',\n label: 'Primitive type',\n kind: 'pick-multi',\n searchable: false,\n options: METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ label: o.label, value: o.entityType })),\n placeholder: 'Choose entity type',\n emptyText: 'No entity types.',\n },\n {\n id: 'entityName',\n label: 'Primitive name',\n kind: 'pick-multi',\n options: availableEntityNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose entity names',\n emptyText: 'No entity names found.',\n isLoading: loading?.entityNames,\n },\n {\n id: 'tags',\n label: 'Tags',\n kind: 'pick-multi',\n multi: true,\n options: availableTags.map(tag => ({ label: tag, value: tag })),\n placeholder: 'Choose tags',\n emptyText: 'No tags found.',\n isLoading: loading?.tags,\n },\n {\n id: 'serviceName',\n label: 'Service Name',\n kind: 'pick-multi',\n options: availableServiceNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose service names',\n emptyText: 'No service names found.',\n isLoading: loading?.serviceNames,\n },\n {\n id: 'environment',\n label: 'Environment',\n kind: 'pick-multi',\n options: availableEnvironments.map(env => ({ label: env, value: env })),\n placeholder: 'Choose environments',\n emptyText: 'No environments found.',\n isLoading: loading?.environments,\n },\n // Provider / model are filterable by URL (filterProvider / filterModel) but\n // are omitted from the popover until we expose a discovery endpoint.\n // High-cardinality IDs — free-text. Backed by bloom_filter skip indexes on\n // ClickHouse, narrow timestamp range pruning on DuckDB.\n { id: 'threadId', label: 'Thread ID', kind: 'text' },\n { id: 'resourceId', label: 'Resource ID', kind: 'text' },\n { id: 'userId', label: 'User ID', kind: 'text' },\n { id: 'organizationId', label: 'Organization ID', kind: 'text' },\n { id: 'runId', label: 'Run ID', kind: 'text' },\n { id: 'sessionId', label: 'Session ID', kind: 'text' },\n { id: 'requestId', label: 'Request ID', kind: 'text' },\n { id: 'experimentId', label: 'Experiment ID', kind: 'text' },\n ];\n const byLabel = (a: PropertyFilterField, b: PropertyFilterField) => a.label.localeCompare(b.label);\n const pickMulti = fields.filter(f => f.kind === 'pick-multi').sort(byLabel);\n const text = fields.filter(f => f.kind === 'text').sort(byLabel);\n return [...pickMulti, ...text];\n}\n\ntype MetricsFilterBarFieldId = MetricsPropertyFilterFieldId | 'rootEntityType';\n\nconst METRICS_TAGS_OPERATOR_ID = 'hasAll';\n\n/** Operators of the metrics filter bar. The metrics API matches one value per dimension, so `is`\n * never widens to \"is any of\", and it requires every listed tag. */\nexport const METRICS_FILTER_BAR_OPERATORS: FilterBarOperator[] = [\n { id: 'is', label: 'is' },\n { id: METRICS_TAGS_OPERATOR_ID, label: 'has all of', arity: 'many' },\n];\n\n/** Same labels as the trace filters, so a dimension reads the same on Metrics and Traces. */\nconst METRICS_FILTER_BAR_LABELS: Record<MetricsFilterBarFieldId, string> = {\n rootEntityType: 'Primitive type',\n entityName: 'Primitive name',\n tags: 'Tags',\n serviceName: 'Service Name',\n environment: 'Environment',\n threadId: 'Thread ID',\n resourceId: 'Resource ID',\n userId: 'User ID',\n organizationId: 'Organization ID',\n runId: 'Run ID',\n sessionId: 'Session ID',\n requestId: 'Request ID',\n experimentId: 'Experiment ID',\n provider: 'Provider',\n model: 'Model',\n};\n\n/** Icons for the dimensions the trace filters key differently (`spans.provider`, `spans.model`). */\nconst METRICS_FILTER_BAR_ICONS: Partial<Record<MetricsFilterBarFieldId, LucideIcon>> = {\n provider: CloudIcon,\n model: CpuIcon,\n};\n\nconst METRICS_FILTER_BAR_TEXT_FIELD_IDS = [\n 'threadId',\n 'resourceId',\n 'userId',\n 'organizationId',\n 'runId',\n 'sessionId',\n 'requestId',\n 'experimentId',\n] as const satisfies readonly MetricsFilterBarFieldId[];\n\nconst metricsFieldBase = (id: MetricsFilterBarFieldId) => ({\n id,\n label: METRICS_FILTER_BAR_LABELS[id],\n icon: METRICS_FILTER_BAR_ICONS[id] ?? traceFilterFieldIcon(id),\n color: traceFilterFieldColor(id),\n});\n\nconst byFieldLabel = (a: FilterBarField, b: FilterBarField) => a.label.localeCompare(b.label);\n\n/** FilterBar fields for the metrics dashboard, in the same order as before: discovered\n * dimensions first, then the high-cardinality IDs as free text. Provider and model are\n * never offered (there is no discovery endpoint for them yet) but still label the chips\n * that links bring in through `filterProvider` / `filterModel`. */\nexport function createMetricsFilterBarFields({\n availableTags,\n availableEntityNames,\n availableServiceNames,\n availableEnvironments,\n}: {\n availableTags: string[];\n availableEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n}): FilterBarField[] {\n const pick = (id: MetricsFilterBarFieldId, suggestions: FilterBarOption[]): FilterBarField => ({\n ...metricsFieldBase(id),\n operators: ['is'],\n strict: true,\n suggestions,\n });\n const text = (id: MetricsFilterBarFieldId): FilterBarField => ({ ...metricsFieldBase(id), operators: ['is'] });\n const options = (values: string[]) => values.map(value => ({ value }));\n\n const pickFields: FilterBarField[] = [\n pick(\n 'rootEntityType',\n METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ value: o.entityType, label: o.label })),\n ),\n pick('entityName', options(availableEntityNames)),\n { ...pick('tags', options(availableTags)), operators: [METRICS_TAGS_OPERATOR_ID] },\n pick('serviceName', options(availableServiceNames)),\n pick('environment', options(availableEnvironments)),\n ];\n const textFields = METRICS_FILTER_BAR_TEXT_FIELD_IDS.map(text);\n const urlOnlyFields = (['provider', 'model'] as const).map(id => ({ ...text(id), hidden: true }));\n\n return [...pickFields.toSorted(byFieldLabel), ...textFields.toSorted(byFieldLabel), ...urlOnlyFields];\n}\n\n/** One FilterBar item per token, keyed by field id so chip order == URL order. Empty values\n * are kept: they are chips whose value hasn't been picked yet. The legacy 'Any' sentinel\n * reads as empty, and a repeated single-value param keeps its first value, which is the one\n * the metrics API applies. */\nexport function metricsTokensToFilterBarItems(tokens: PropertyFilterToken[]): FilterBarItem[] {\n return tokens.map(token => {\n if (token.fieldId === 'tags') {\n const value = [token.value].flat().filter(tag => tag !== '');\n return { id: token.fieldId, fieldId: token.fieldId, operatorId: METRICS_TAGS_OPERATOR_ID, value };\n }\n const value = Array.isArray(token.value) ? (token.value[0] ?? '') : token.value;\n return { id: token.fieldId, fieldId: token.fieldId, operatorId: 'is', value: isNeutralValue(value) ? '' : value };\n });\n}\n\nexport function filterBarItemsToMetricsTokens(items: FilterBarItem[]): PropertyFilterToken[] {\n return items.map(item => ({\n fieldId: item.fieldId,\n value: Array.isArray(item.value) ? item.value.map(String) : String(item.value),\n }));\n}\n\n/** Parse filter tokens from URL params, preserving insertion order. */\nexport function getMetricsPropertyFilterTokens(searchParams: URLSearchParams): PropertyFilterToken[] {\n const tokens: PropertyFilterToken[] = [];\n\n const paramToFieldId = new Map<string, string>([[METRICS_ROOT_ENTITY_TYPE_PARAM, 'rootEntityType']]);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n paramToFieldId.set(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId], fieldId);\n }\n\n const seen = new Set<string>();\n for (const [paramName] of searchParams.entries()) {\n const fieldId = paramToFieldId.get(paramName);\n if (!fieldId || seen.has(fieldId)) continue;\n seen.add(fieldId);\n\n if (fieldId === 'tags') {\n const raw = searchParams.getAll(paramName);\n if (raw.length === 0) continue;\n tokens.push({ fieldId, value: raw.filter(Boolean) });\n continue;\n }\n\n // Multi-value pick-multi fields: collect all occurrences.\n if (\n fieldId === 'rootEntityType' ||\n fieldId === 'entityName' ||\n fieldId === 'serviceName' ||\n fieldId === 'environment' ||\n fieldId === 'provider' ||\n fieldId === 'model'\n ) {\n const raw = searchParams.getAll(paramName);\n if (raw.length > 1) {\n tokens.push({ fieldId, value: raw });\n continue;\n }\n }\n\n const value = searchParams.get(paramName);\n if (value !== null) tokens.push({ fieldId, value });\n }\n\n return tokens;\n}\n\n/** Return a fresh URLSearchParams containing only metrics filter params. */\nexport function getPreservedMetricsFilterParams(searchParams: URLSearchParams): URLSearchParams {\n const next = new URLSearchParams();\n const rootEntityValues = searchParams.getAll(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const v of rootEntityValues) next.append(METRICS_ROOT_ENTITY_TYPE_PARAM, v);\n\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n const param = METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId];\n const values = searchParams.getAll(param);\n for (const v of values) next.append(param, v);\n }\n return next;\n}\n\n/** Mutate `params` in place: strip every metrics filter param, then re-write\n * them from `tokens` in order. Token insertion order drives URL order so\n * filter pill order is stable across reloads. */\nexport function applyMetricsPropertyFilterTokens(params: URLSearchParams, tokens: PropertyFilterToken[]): void {\n params.delete(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n params.delete(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n\n for (const token of tokens) {\n const paramName =\n token.fieldId === 'rootEntityType'\n ? METRICS_ROOT_ENTITY_TYPE_PARAM\n : METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[token.fieldId as MetricsPropertyFilterFieldId];\n if (!paramName) continue;\n\n if (Array.isArray(token.value)) {\n const values = token.value.filter(v => typeof v === 'string' && v !== '');\n if (values.length === 0) {\n // Keep an empty sentinel for `tags` so the pill survives a Reset.\n if (token.fieldId === 'tags') params.append(paramName, '');\n continue;\n }\n for (const v of values) params.append(paramName, v);\n } else if (typeof token.value === 'string') {\n // Persist even empty / 'Any' strings so newly-created pills (and\n // neutralized-but-still-visible pills after a Reset) survive URL\n // round-trips. `buildMetricsDimensionalFilter` drops these on the API\n // query side so neutrals never reach the backend.\n params.set(paramName, token.value.trim());\n }\n }\n}\n\n/** Shape of the dimensional filter object fed into `MetricsFilter` on client\n * calls. Kept compatible with `metricsFilterSchema` in @internal/core — every\n * scalar field maps to a single-string column filter, and `tags` is the only\n * array field (matched via `has()` / equivalent on backends). */\nexport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\n\n/** Convert the active token list into a `MetricsFilter`-compatible object.\n *\n * Single-value text fields are assigned as strings; `pick-multi` fields are\n * assigned as string arrays. Empty/neutral values are dropped. */\n/** \"Neutral\" sentinel for single-select pick-multi fields. Emitted by the\n * toolbar's Clear action so pills stay visible after reset; must be stripped\n * before the filter object is sent to the backend (it is not a valid enum\n * option for fields like `rootEntityType`). */\nconst NEUTRAL_PICK_VALUE = 'Any';\n\nfunction isNeutralValue(v: string): boolean {\n const trimmed = v.trim();\n return trimmed === '' || trimmed === NEUTRAL_PICK_VALUE;\n}\n\n/** `rootEntityType` is enum-valued at the backend; URL-supplied or stale stored\n * values can be arbitrary strings, so we validate against the allowed set\n * before letting them reach the filter object. Returns `undefined` if the\n * value isn't a known enum option. */\nconst VALID_ROOT_ENTITY_TYPES: ReadonlySet<EntityTypeValue> = new Set(\n METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => o.entityType),\n);\nfunction toValidRootEntityType(v: string): EntityType | undefined {\n const trimmed = v.trim();\n return VALID_ROOT_ENTITY_TYPES.has(trimmed as EntityTypeValue) ? (trimmed as EntityType) : undefined;\n}\n\nexport function buildMetricsDimensionalFilter(tokens: PropertyFilterToken[]): MetricsDimensionalFilter {\n const result: MetricsDimensionalFilter = {};\n for (const token of tokens) {\n const fieldId = token.fieldId as keyof MetricsDimensionalFilter;\n if (Array.isArray(token.value)) {\n const values = token.value\n .filter((v): v is string => typeof v === 'string')\n .map(v => v.trim())\n .filter(v => !isNeutralValue(v));\n if (values.length === 0) continue;\n if (fieldId === 'tags') {\n result.tags = values;\n } else if (fieldId === 'rootEntityType') {\n const firstValue = values[0];\n const validated = firstValue !== undefined ? toValidRootEntityType(firstValue) : undefined;\n if (validated) result.rootEntityType = validated;\n } else {\n // Backend accepts a single string per dimension; take the first selection.\n (result as Record<string, unknown>)[fieldId] = values[0];\n }\n } else if (typeof token.value === 'string') {\n if (isNeutralValue(token.value)) continue;\n const trimmed = token.value.trim();\n if (fieldId === 'rootEntityType') {\n const validated = toValidRootEntityType(trimmed);\n if (validated) result.rootEntityType = validated;\n } else {\n (result as Record<string, unknown>)[fieldId] = trimmed;\n }\n }\n }\n return result;\n}\n"],"names":["CloudIcon","CpuIcon","traceFilterFieldIcon","traceFilterFieldColor","value"],"mappings":"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"}
@@ -1,3 +1,6 @@
1
+ import { CpuIcon, CloudIcon } from 'lucide-react';
2
+ import { X as traceFilterFieldColor, Y as traceFilterFieldIcon } from '../../trace-filters-C71gmCq4.js';
3
+
1
4
  const METRICS_ROOT_ENTITY_TYPE_OPTIONS = [
2
5
  { label: "Agent", entityType: "agent" },
3
6
  { label: "Workflow", entityType: "workflow_run" },
@@ -128,6 +131,93 @@ function createMetricsPropertyFilterFields({
128
131
  const text = fields.filter((f) => f.kind === "text").sort(byLabel);
129
132
  return [...pickMulti, ...text];
130
133
  }
134
+ const METRICS_TAGS_OPERATOR_ID = "hasAll";
135
+ const METRICS_FILTER_BAR_OPERATORS = [
136
+ { id: "is", label: "is" },
137
+ { id: METRICS_TAGS_OPERATOR_ID, label: "has all of", arity: "many" }
138
+ ];
139
+ const METRICS_FILTER_BAR_LABELS = {
140
+ rootEntityType: "Primitive type",
141
+ entityName: "Primitive name",
142
+ tags: "Tags",
143
+ serviceName: "Service Name",
144
+ environment: "Environment",
145
+ threadId: "Thread ID",
146
+ resourceId: "Resource ID",
147
+ userId: "User ID",
148
+ organizationId: "Organization ID",
149
+ runId: "Run ID",
150
+ sessionId: "Session ID",
151
+ requestId: "Request ID",
152
+ experimentId: "Experiment ID",
153
+ provider: "Provider",
154
+ model: "Model"
155
+ };
156
+ const METRICS_FILTER_BAR_ICONS = {
157
+ provider: CloudIcon,
158
+ model: CpuIcon
159
+ };
160
+ const METRICS_FILTER_BAR_TEXT_FIELD_IDS = [
161
+ "threadId",
162
+ "resourceId",
163
+ "userId",
164
+ "organizationId",
165
+ "runId",
166
+ "sessionId",
167
+ "requestId",
168
+ "experimentId"
169
+ ];
170
+ const metricsFieldBase = (id) => ({
171
+ id,
172
+ label: METRICS_FILTER_BAR_LABELS[id],
173
+ icon: METRICS_FILTER_BAR_ICONS[id] ?? traceFilterFieldIcon(id),
174
+ color: traceFilterFieldColor()
175
+ });
176
+ const byFieldLabel = (a, b) => a.label.localeCompare(b.label);
177
+ function createMetricsFilterBarFields({
178
+ availableTags,
179
+ availableEntityNames,
180
+ availableServiceNames,
181
+ availableEnvironments
182
+ }) {
183
+ const pick = (id, suggestions) => ({
184
+ ...metricsFieldBase(id),
185
+ operators: ["is"],
186
+ strict: true,
187
+ suggestions
188
+ });
189
+ const text = (id) => ({ ...metricsFieldBase(id), operators: ["is"] });
190
+ const options = (values) => values.map((value) => ({ value }));
191
+ const pickFields = [
192
+ pick(
193
+ "rootEntityType",
194
+ METRICS_ROOT_ENTITY_TYPE_OPTIONS.map((o) => ({ value: o.entityType, label: o.label }))
195
+ ),
196
+ pick("entityName", options(availableEntityNames)),
197
+ { ...pick("tags", options(availableTags)), operators: [METRICS_TAGS_OPERATOR_ID] },
198
+ pick("serviceName", options(availableServiceNames)),
199
+ pick("environment", options(availableEnvironments))
200
+ ];
201
+ const textFields = METRICS_FILTER_BAR_TEXT_FIELD_IDS.map(text);
202
+ const urlOnlyFields = ["provider", "model"].map((id) => ({ ...text(id), hidden: true }));
203
+ return [...pickFields.toSorted(byFieldLabel), ...textFields.toSorted(byFieldLabel), ...urlOnlyFields];
204
+ }
205
+ function metricsTokensToFilterBarItems(tokens) {
206
+ return tokens.map((token) => {
207
+ if (token.fieldId === "tags") {
208
+ const value2 = [token.value].flat().filter((tag) => tag !== "");
209
+ return { id: token.fieldId, fieldId: token.fieldId, operatorId: METRICS_TAGS_OPERATOR_ID, value: value2 };
210
+ }
211
+ const value = Array.isArray(token.value) ? token.value[0] ?? "" : token.value;
212
+ return { id: token.fieldId, fieldId: token.fieldId, operatorId: "is", value: isNeutralValue(value) ? "" : value };
213
+ });
214
+ }
215
+ function filterBarItemsToMetricsTokens(items) {
216
+ return items.map((item) => ({
217
+ fieldId: item.fieldId,
218
+ value: Array.isArray(item.value) ? item.value.map(String) : String(item.value)
219
+ }));
220
+ }
131
221
  function getMetricsPropertyFilterTokens(searchParams) {
132
222
  const tokens = [];
133
223
  const paramToFieldId = /* @__PURE__ */ new Map([[METRICS_ROOT_ENTITY_TYPE_PARAM, "rootEntityType"]]);
@@ -230,5 +320,5 @@ function buildMetricsDimensionalFilter(tokens) {
230
320
  return result;
231
321
  }
232
322
 
233
- export { METRICS_PROPERTY_FILTER_FIELD_IDS, METRICS_PROPERTY_FILTER_PARAM_BY_FIELD, METRICS_ROOT_ENTITY_TYPE_OPTIONS, METRICS_ROOT_ENTITY_TYPE_PARAM, METRICS_SYNTHETIC_FILTER_FIELD_IDS, applyMetricsPropertyFilterTokens, buildMetricsDimensionalFilter, clearSavedMetricsFilters, createMetricsPropertyFilterFields, getMetricsPropertyFilterTokens, getPreservedMetricsFilterParams, hasAnyMetricsFilterParams, loadMetricsFiltersFromStorage, saveMetricsFiltersToStorage };
323
+ export { METRICS_FILTER_BAR_OPERATORS, METRICS_PROPERTY_FILTER_FIELD_IDS, METRICS_PROPERTY_FILTER_PARAM_BY_FIELD, METRICS_ROOT_ENTITY_TYPE_OPTIONS, METRICS_ROOT_ENTITY_TYPE_PARAM, METRICS_SYNTHETIC_FILTER_FIELD_IDS, applyMetricsPropertyFilterTokens, buildMetricsDimensionalFilter, clearSavedMetricsFilters, createMetricsFilterBarFields, createMetricsPropertyFilterFields, filterBarItemsToMetricsTokens, getMetricsPropertyFilterTokens, getPreservedMetricsFilterParams, hasAnyMetricsFilterParams, loadMetricsFiltersFromStorage, metricsTokensToFilterBarItems, saveMetricsFiltersToStorage };
234
324
  //# sourceMappingURL=metrics-filters.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-filters.es.js","sources":["../../../src/domains/metrics/metrics-filters.ts"],"sourcesContent":["import type { EntityType } from '@mastra/core/observability';\nimport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\ntype EntityTypeValue = `${EntityType}`;\n\n/** Primitive type options — matches the traces filter vocabulary. */\nexport const METRICS_ROOT_ENTITY_TYPE_OPTIONS = [\n { label: 'Agent', entityType: 'agent' },\n { label: 'Workflow', entityType: 'workflow_run' },\n { label: 'Scorer', entityType: 'scorer' },\n { label: 'Ingest', entityType: 'rag_ingestion' },\n] as const satisfies readonly { label: string; entityType: EntityTypeValue }[];\n\n/** Field IDs that live in dedicated URL params (not the generic `filterX` set). */\nexport const METRICS_SYNTHETIC_FILTER_FIELD_IDS = ['rootEntityType'] as const;\n\nexport const METRICS_ROOT_ENTITY_TYPE_PARAM = 'rootEntityType';\n\n/** URL param name for each generic property filter field. Mirrors traces for\n * cross-page URL consistency (user can copy a trace's filter URL and paste\n * equivalent dimensions into metrics). */\nexport const METRICS_PROPERTY_FILTER_PARAM_BY_FIELD = {\n tags: 'filterTags',\n entityName: 'filterEntityName',\n runId: 'filterRunId',\n threadId: 'filterThreadId',\n sessionId: 'filterSessionId',\n requestId: 'filterRequestId',\n resourceId: 'filterResourceId',\n userId: 'filterUserId',\n organizationId: 'filterOrganizationId',\n serviceName: 'filterServiceName',\n environment: 'filterEnvironment',\n experimentId: 'filterExperimentId',\n provider: 'filterProvider',\n model: 'filterModel',\n} as const;\n\nexport type MetricsPropertyFilterFieldId = keyof typeof METRICS_PROPERTY_FILTER_PARAM_BY_FIELD;\n\nexport const METRICS_PROPERTY_FILTER_FIELD_IDS = Object.keys(\n METRICS_PROPERTY_FILTER_PARAM_BY_FIELD,\n) as Array<MetricsPropertyFilterFieldId>;\n\nconst METRICS_FILTERS_STORAGE_KEY = 'mastra:metrics:saved-filters';\n\n/** Save the current metrics filter URL params so the metrics page can restore\n * them on next visit (same pattern as traces/logs). */\nexport function saveMetricsFiltersToStorage(params: URLSearchParams): void {\n const serialized = getPreservedMetricsFilterParams(params);\n try {\n localStorage.setItem(METRICS_FILTERS_STORAGE_KEY, serialized.toString());\n } catch {\n // localStorage may be unavailable — silently skip.\n }\n}\n\nexport function clearSavedMetricsFilters(): void {\n try {\n localStorage.removeItem(METRICS_FILTERS_STORAGE_KEY);\n } catch {\n // ignore\n }\n}\n\nexport function loadMetricsFiltersFromStorage(): URLSearchParams | null {\n try {\n const raw = localStorage.getItem(METRICS_FILTERS_STORAGE_KEY);\n if (!raw) return null;\n const parsed = new URLSearchParams(raw);\n return parsed.toString() ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport function hasAnyMetricsFilterParams(params: URLSearchParams): boolean {\n if (params.has(METRICS_ROOT_ENTITY_TYPE_PARAM)) return true;\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n if (params.has(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId])) return true;\n }\n return false;\n}\n\n/** Build the PropertyFilterField list shown in the metrics filter popover.\n *\n * The field order is curated for OLAP efficiency: columnar/LowCardinality\n * dimensions first, then bloom_filter-indexed high-cardinality IDs as\n * free-text. Fields that are expensive to filter without an index are\n * intentionally omitted from this dashboard surface. */\nexport function createMetricsPropertyFilterFields({\n availableTags,\n availableEntityNames,\n availableServiceNames,\n availableEnvironments,\n loading,\n}: {\n availableTags: string[];\n availableEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n loading?: {\n tags?: boolean;\n entityNames?: boolean;\n serviceNames?: boolean;\n environments?: boolean;\n };\n}): PropertyFilterField[] {\n const fields: PropertyFilterField[] = [\n {\n id: 'rootEntityType',\n label: 'Primitive type',\n kind: 'pick-multi',\n searchable: false,\n options: METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ label: o.label, value: o.entityType })),\n placeholder: 'Choose entity type',\n emptyText: 'No entity types.',\n },\n {\n id: 'entityName',\n label: 'Primitive name',\n kind: 'pick-multi',\n options: availableEntityNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose entity names',\n emptyText: 'No entity names found.',\n isLoading: loading?.entityNames,\n },\n {\n id: 'tags',\n label: 'Tags',\n kind: 'pick-multi',\n multi: true,\n options: availableTags.map(tag => ({ label: tag, value: tag })),\n placeholder: 'Choose tags',\n emptyText: 'No tags found.',\n isLoading: loading?.tags,\n },\n {\n id: 'serviceName',\n label: 'Service Name',\n kind: 'pick-multi',\n options: availableServiceNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose service names',\n emptyText: 'No service names found.',\n isLoading: loading?.serviceNames,\n },\n {\n id: 'environment',\n label: 'Environment',\n kind: 'pick-multi',\n options: availableEnvironments.map(env => ({ label: env, value: env })),\n placeholder: 'Choose environments',\n emptyText: 'No environments found.',\n isLoading: loading?.environments,\n },\n // Provider / model are filterable by URL (filterProvider / filterModel) but\n // are omitted from the popover until we expose a discovery endpoint.\n // High-cardinality IDs — free-text. Backed by bloom_filter skip indexes on\n // ClickHouse, narrow timestamp range pruning on DuckDB.\n { id: 'threadId', label: 'Thread ID', kind: 'text' },\n { id: 'resourceId', label: 'Resource ID', kind: 'text' },\n { id: 'userId', label: 'User ID', kind: 'text' },\n { id: 'organizationId', label: 'Organization ID', kind: 'text' },\n { id: 'runId', label: 'Run ID', kind: 'text' },\n { id: 'sessionId', label: 'Session ID', kind: 'text' },\n { id: 'requestId', label: 'Request ID', kind: 'text' },\n { id: 'experimentId', label: 'Experiment ID', kind: 'text' },\n ];\n const byLabel = (a: PropertyFilterField, b: PropertyFilterField) => a.label.localeCompare(b.label);\n const pickMulti = fields.filter(f => f.kind === 'pick-multi').sort(byLabel);\n const text = fields.filter(f => f.kind === 'text').sort(byLabel);\n return [...pickMulti, ...text];\n}\n\n/** Parse filter tokens from URL params, preserving insertion order. */\nexport function getMetricsPropertyFilterTokens(searchParams: URLSearchParams): PropertyFilterToken[] {\n const tokens: PropertyFilterToken[] = [];\n\n const paramToFieldId = new Map<string, string>([[METRICS_ROOT_ENTITY_TYPE_PARAM, 'rootEntityType']]);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n paramToFieldId.set(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId], fieldId);\n }\n\n const seen = new Set<string>();\n for (const [paramName] of searchParams.entries()) {\n const fieldId = paramToFieldId.get(paramName);\n if (!fieldId || seen.has(fieldId)) continue;\n seen.add(fieldId);\n\n if (fieldId === 'tags') {\n const raw = searchParams.getAll(paramName);\n if (raw.length === 0) continue;\n tokens.push({ fieldId, value: raw.filter(Boolean) });\n continue;\n }\n\n // Multi-value pick-multi fields: collect all occurrences.\n if (\n fieldId === 'rootEntityType' ||\n fieldId === 'entityName' ||\n fieldId === 'serviceName' ||\n fieldId === 'environment' ||\n fieldId === 'provider' ||\n fieldId === 'model'\n ) {\n const raw = searchParams.getAll(paramName);\n if (raw.length > 1) {\n tokens.push({ fieldId, value: raw });\n continue;\n }\n }\n\n const value = searchParams.get(paramName);\n if (value !== null) tokens.push({ fieldId, value });\n }\n\n return tokens;\n}\n\n/** Return a fresh URLSearchParams containing only metrics filter params. */\nexport function getPreservedMetricsFilterParams(searchParams: URLSearchParams): URLSearchParams {\n const next = new URLSearchParams();\n const rootEntityValues = searchParams.getAll(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const v of rootEntityValues) next.append(METRICS_ROOT_ENTITY_TYPE_PARAM, v);\n\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n const param = METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId];\n const values = searchParams.getAll(param);\n for (const v of values) next.append(param, v);\n }\n return next;\n}\n\n/** Mutate `params` in place: strip every metrics filter param, then re-write\n * them from `tokens` in order. Token insertion order drives URL order so\n * filter pill order is stable across reloads. */\nexport function applyMetricsPropertyFilterTokens(params: URLSearchParams, tokens: PropertyFilterToken[]): void {\n params.delete(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n params.delete(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n\n for (const token of tokens) {\n const paramName =\n token.fieldId === 'rootEntityType'\n ? METRICS_ROOT_ENTITY_TYPE_PARAM\n : METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[token.fieldId as MetricsPropertyFilterFieldId];\n if (!paramName) continue;\n\n if (Array.isArray(token.value)) {\n const values = token.value.filter(v => typeof v === 'string' && v !== '');\n if (values.length === 0) {\n // Keep an empty sentinel for `tags` so the pill survives a Reset.\n if (token.fieldId === 'tags') params.append(paramName, '');\n continue;\n }\n for (const v of values) params.append(paramName, v);\n } else if (typeof token.value === 'string') {\n // Persist even empty / 'Any' strings so newly-created pills (and\n // neutralized-but-still-visible pills after a Reset) survive URL\n // round-trips. `buildMetricsDimensionalFilter` drops these on the API\n // query side so neutrals never reach the backend.\n params.set(paramName, token.value.trim());\n }\n }\n}\n\n/** Shape of the dimensional filter object fed into `MetricsFilter` on client\n * calls. Kept compatible with `metricsFilterSchema` in @internal/core — every\n * scalar field maps to a single-string column filter, and `tags` is the only\n * array field (matched via `has()` / equivalent on backends). */\nexport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\n\n/** Convert the active token list into a `MetricsFilter`-compatible object.\n *\n * Single-value text fields are assigned as strings; `pick-multi` fields are\n * assigned as string arrays. Empty/neutral values are dropped. */\n/** \"Neutral\" sentinel for single-select pick-multi fields. Emitted by the\n * toolbar's Clear action so pills stay visible after reset; must be stripped\n * before the filter object is sent to the backend (it is not a valid enum\n * option for fields like `rootEntityType`). */\nconst NEUTRAL_PICK_VALUE = 'Any';\n\nfunction isNeutralValue(v: string): boolean {\n const trimmed = v.trim();\n return trimmed === '' || trimmed === NEUTRAL_PICK_VALUE;\n}\n\n/** `rootEntityType` is enum-valued at the backend; URL-supplied or stale stored\n * values can be arbitrary strings, so we validate against the allowed set\n * before letting them reach the filter object. Returns `undefined` if the\n * value isn't a known enum option. */\nconst VALID_ROOT_ENTITY_TYPES: ReadonlySet<EntityTypeValue> = new Set(\n METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => o.entityType),\n);\nfunction toValidRootEntityType(v: string): EntityType | undefined {\n const trimmed = v.trim();\n return VALID_ROOT_ENTITY_TYPES.has(trimmed as EntityTypeValue) ? (trimmed as EntityType) : undefined;\n}\n\nexport function buildMetricsDimensionalFilter(tokens: PropertyFilterToken[]): MetricsDimensionalFilter {\n const result: MetricsDimensionalFilter = {};\n for (const token of tokens) {\n const fieldId = token.fieldId as keyof MetricsDimensionalFilter;\n if (Array.isArray(token.value)) {\n const values = token.value\n .filter((v): v is string => typeof v === 'string')\n .map(v => v.trim())\n .filter(v => !isNeutralValue(v));\n if (values.length === 0) continue;\n if (fieldId === 'tags') {\n result.tags = values;\n } else if (fieldId === 'rootEntityType') {\n const firstValue = values[0];\n const validated = firstValue !== undefined ? toValidRootEntityType(firstValue) : undefined;\n if (validated) result.rootEntityType = validated;\n } else {\n // Backend accepts a single string per dimension; take the first selection.\n (result as Record<string, unknown>)[fieldId] = values[0];\n }\n } else if (typeof token.value === 'string') {\n if (isNeutralValue(token.value)) continue;\n const trimmed = token.value.trim();\n if (fieldId === 'rootEntityType') {\n const validated = toValidRootEntityType(trimmed);\n if (validated) result.rootEntityType = validated;\n } else {\n (result as Record<string, unknown>)[fieldId] = trimmed;\n }\n }\n }\n return result;\n}\n"],"names":[],"mappings":"AAOO,MAAM,gCAAA,GAAmC;AAAA,EAC9C,EAAE,KAAA,EAAO,OAAA,EAAS,UAAA,EAAY,OAAA,EAAQ;AAAA,EACtC,EAAE,KAAA,EAAO,UAAA,EAAY,UAAA,EAAY,cAAA,EAAe;AAAA,EAChD,EAAE,KAAA,EAAO,QAAA,EAAU,UAAA,EAAY,QAAA,EAAS;AAAA,EACxC,EAAE,KAAA,EAAO,QAAA,EAAU,UAAA,EAAY,eAAA;AACjC;AAGO,MAAM,kCAAA,GAAqC,CAAC,gBAAgB;AAE5D,MAAM,8BAAA,GAAiC;AAKvC,MAAM,sCAAA,GAAyC;AAAA,EACpD,IAAA,EAAM,YAAA;AAAA,EACN,UAAA,EAAY,kBAAA;AAAA,EACZ,KAAA,EAAO,aAAA;AAAA,EACP,QAAA,EAAU,gBAAA;AAAA,EACV,SAAA,EAAW,iBAAA;AAAA,EACX,SAAA,EAAW,iBAAA;AAAA,EACX,UAAA,EAAY,kBAAA;AAAA,EACZ,MAAA,EAAQ,cAAA;AAAA,EACR,cAAA,EAAgB,sBAAA;AAAA,EAChB,WAAA,EAAa,mBAAA;AAAA,EACb,WAAA,EAAa,mBAAA;AAAA,EACb,YAAA,EAAc,oBAAA;AAAA,EACd,QAAA,EAAU,gBAAA;AAAA,EACV,KAAA,EAAO;AACT;AAIO,MAAM,oCAAoC,MAAA,CAAO,IAAA;AAAA,EACtD;AACF;AAEA,MAAM,2BAAA,GAA8B,8BAAA;AAI7B,SAAS,4BAA4B,MAAA,EAA+B;AACzE,EAAA,MAAM,UAAA,GAAa,gCAAgC,MAAM,CAAA;AACzD,EAAA,IAAI;AACF,IAAA,YAAA,CAAa,OAAA,CAAQ,2BAAA,EAA6B,UAAA,CAAW,QAAA,EAAU,CAAA;AAAA,EACzE,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAEO,SAAS,wBAAA,GAAiC;AAC/C,EAAA,IAAI;AACF,IAAA,YAAA,CAAa,WAAW,2BAA2B,CAAA;AAAA,EACrD,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAEO,SAAS,6BAAA,GAAwD;AACtE,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,YAAA,CAAa,OAAA,CAAQ,2BAA2B,CAAA;AAC5D,IAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,GAAG,CAAA;AACtC,IAAA,OAAO,MAAA,CAAO,QAAA,EAAS,GAAI,MAAA,GAAS,IAAA;AAAA,EACtC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEO,SAAS,0BAA0B,MAAA,EAAkC;AAC1E,EAAA,IAAI,MAAA,CAAO,GAAA,CAAI,8BAA8B,CAAA,EAAG,OAAO,IAAA;AACvD,EAAA,KAAA,MAAW,WAAW,iCAAA,EAAmC;AACvD,IAAA,IAAI,OAAO,GAAA,CAAI,sCAAA,CAAuC,OAAO,CAAC,GAAG,OAAO,IAAA;AAAA,EAC1E;AACA,EAAA,OAAO,KAAA;AACT;AAQO,SAAS,iCAAA,CAAkC;AAAA,EAChD,aAAA;AAAA,EACA,oBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA;AACF,CAAA,EAW0B;AACxB,EAAA,MAAM,MAAA,GAAgC;AAAA,IACpC;AAAA,MACE,EAAA,EAAI,gBAAA;AAAA,MACJ,KAAA,EAAO,gBAAA;AAAA,MACP,IAAA,EAAM,YAAA;AAAA,MACN,UAAA,EAAY,KAAA;AAAA,MACZ,OAAA,EAAS,gCAAA,CAAiC,GAAA,CAAI,CAAA,CAAA,MAAM,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAO,KAAA,EAAO,CAAA,CAAE,UAAA,EAAW,CAAE,CAAA;AAAA,MAC5F,WAAA,EAAa,oBAAA;AAAA,MACb,SAAA,EAAW;AAAA,KACb;AAAA,IACA;AAAA,MACE,EAAA,EAAI,YAAA;AAAA,MACJ,KAAA,EAAO,gBAAA;AAAA,MACP,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,qBAAqB,GAAA,CAAI,CAAA,IAAA,MAAS,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK,CAAE,CAAA;AAAA,MACxE,WAAA,EAAa,qBAAA;AAAA,MACb,SAAA,EAAW,wBAAA;AAAA,MACX,WAAW,OAAA,EAAS;AAAA,KACtB;AAAA,IACA;AAAA,MACE,EAAA,EAAI,MAAA;AAAA,MACJ,KAAA,EAAO,MAAA;AAAA,MACP,IAAA,EAAM,YAAA;AAAA,MACN,KAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAS,cAAc,GAAA,CAAI,CAAA,GAAA,MAAQ,EAAE,KAAA,EAAO,GAAA,EAAK,KAAA,EAAO,GAAA,EAAI,CAAE,CAAA;AAAA,MAC9D,WAAA,EAAa,aAAA;AAAA,MACb,SAAA,EAAW,gBAAA;AAAA,MACX,WAAW,OAAA,EAAS;AAAA,KACtB;AAAA,IACA;AAAA,MACE,EAAA,EAAI,aAAA;AAAA,MACJ,KAAA,EAAO,cAAA;AAAA,MACP,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,sBAAsB,GAAA,CAAI,CAAA,IAAA,MAAS,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK,CAAE,CAAA;AAAA,MACzE,WAAA,EAAa,sBAAA;AAAA,MACb,SAAA,EAAW,yBAAA;AAAA,MACX,WAAW,OAAA,EAAS;AAAA,KACtB;AAAA,IACA;AAAA,MACE,EAAA,EAAI,aAAA;AAAA,MACJ,KAAA,EAAO,aAAA;AAAA,MACP,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,sBAAsB,GAAA,CAAI,CAAA,GAAA,MAAQ,EAAE,KAAA,EAAO,GAAA,EAAK,KAAA,EAAO,GAAA,EAAI,CAAE,CAAA;AAAA,MACtE,WAAA,EAAa,qBAAA;AAAA,MACb,SAAA,EAAW,wBAAA;AAAA,MACX,WAAW,OAAA,EAAS;AAAA,KACtB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,EAAE,EAAA,EAAI,UAAA,EAAY,KAAA,EAAO,WAAA,EAAa,MAAM,MAAA,EAAO;AAAA,IACnD,EAAE,EAAA,EAAI,YAAA,EAAc,KAAA,EAAO,aAAA,EAAe,MAAM,MAAA,EAAO;AAAA,IACvD,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,SAAA,EAAW,MAAM,MAAA,EAAO;AAAA,IAC/C,EAAE,EAAA,EAAI,gBAAA,EAAkB,KAAA,EAAO,iBAAA,EAAmB,MAAM,MAAA,EAAO;AAAA,IAC/D,EAAE,EAAA,EAAI,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,MAAM,MAAA,EAAO;AAAA,IAC7C,EAAE,EAAA,EAAI,WAAA,EAAa,KAAA,EAAO,YAAA,EAAc,MAAM,MAAA,EAAO;AAAA,IACrD,EAAE,EAAA,EAAI,WAAA,EAAa,KAAA,EAAO,YAAA,EAAc,MAAM,MAAA,EAAO;AAAA,IACrD,EAAE,EAAA,EAAI,cAAA,EAAgB,KAAA,EAAO,eAAA,EAAiB,MAAM,MAAA;AAAO,GAC7D;AACA,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,EAAwB,CAAA,KAA2B,EAAE,KAAA,CAAM,aAAA,CAAc,EAAE,KAAK,CAAA;AACjG,EAAA,MAAM,SAAA,GAAY,OAAO,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,IAAA,KAAS,YAAY,CAAA,CAAE,IAAA,CAAK,OAAO,CAAA;AAC1E,EAAA,MAAM,IAAA,GAAO,OAAO,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,IAAA,KAAS,MAAM,CAAA,CAAE,IAAA,CAAK,OAAO,CAAA;AAC/D,EAAA,OAAO,CAAC,GAAG,SAAA,EAAW,GAAG,IAAI,CAAA;AAC/B;AAGO,SAAS,+BAA+B,YAAA,EAAsD;AACnG,EAAA,MAAM,SAAgC,EAAC;AAEvC,EAAA,MAAM,cAAA,uBAAqB,GAAA,CAAoB,CAAC,CAAC,8BAAA,EAAgC,gBAAgB,CAAC,CAAC,CAAA;AACnG,EAAA,KAAA,MAAW,WAAW,iCAAA,EAAmC;AACvD,IAAA,cAAA,CAAe,GAAA,CAAI,sCAAA,CAAuC,OAAO,CAAA,EAAG,OAAO,CAAA;AAAA,EAC7E;AAEA,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,CAAC,SAAS,CAAA,IAAK,YAAA,CAAa,SAAQ,EAAG;AAChD,IAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,CAAI,SAAS,CAAA;AAC5C,IAAA,IAAI,CAAC,OAAA,IAAW,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,EAAG;AACnC,IAAA,IAAA,CAAK,IAAI,OAAO,CAAA;AAEhB,IAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,MAAA,MAAM,GAAA,GAAM,YAAA,CAAa,MAAA,CAAO,SAAS,CAAA;AACzC,MAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACtB,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,OAAA,EAAS,KAAA,EAAO,IAAI,MAAA,CAAO,OAAO,GAAG,CAAA;AACnD,MAAA;AAAA,IACF;AAGA,IAAA,IACE,OAAA,KAAY,gBAAA,IACZ,OAAA,KAAY,YAAA,IACZ,OAAA,KAAY,aAAA,IACZ,OAAA,KAAY,aAAA,IACZ,OAAA,KAAY,UAAA,IACZ,OAAA,KAAY,OAAA,EACZ;AACA,MAAA,MAAM,GAAA,GAAM,YAAA,CAAa,MAAA,CAAO,SAAS,CAAA;AACzC,MAAA,IAAI,GAAA,CAAI,SAAS,CAAA,EAAG;AAClB,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,OAAA,EAAS,KAAA,EAAO,KAAK,CAAA;AACnC,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,SAAS,CAAA;AACxC,IAAA,IAAI,UAAU,IAAA,EAAM,MAAA,CAAO,KAAK,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,EACpD;AAEA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,gCAAgC,YAAA,EAAgD;AAC9F,EAAA,MAAM,IAAA,GAAO,IAAI,eAAA,EAAgB;AACjC,EAAA,MAAM,gBAAA,GAAmB,YAAA,CAAa,MAAA,CAAO,8BAA8B,CAAA;AAC3E,EAAA,KAAA,MAAW,CAAA,IAAK,gBAAA,EAAkB,IAAA,CAAK,MAAA,CAAO,gCAAgC,CAAC,CAAA;AAE/E,EAAA,KAAA,MAAW,WAAW,iCAAA,EAAmC;AACvD,IAAA,MAAM,KAAA,GAAQ,uCAAuC,OAAO,CAAA;AAC5D,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA;AACxC,IAAA,KAAA,MAAW,CAAA,IAAK,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,EAC9C;AACA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,gCAAA,CAAiC,QAAyB,MAAA,EAAqC;AAC7G,EAAA,MAAA,CAAO,OAAO,8BAA8B,CAAA;AAC5C,EAAA,KAAA,MAAW,WAAW,iCAAA,EAAmC;AACvD,IAAA,MAAA,CAAO,MAAA,CAAO,sCAAA,CAAuC,OAAO,CAAC,CAAA;AAAA,EAC/D;AAEA,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,YACJ,KAAA,CAAM,OAAA,KAAY,mBACd,8BAAA,GACA,sCAAA,CAAuC,MAAM,OAAuC,CAAA;AAC1F,IAAA,IAAI,CAAC,SAAA,EAAW;AAEhB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,EAAG;AAC9B,MAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,MAAA,CAAO,OAAK,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,EAAE,CAAA;AACxE,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AAEvB,QAAA,IAAI,MAAM,OAAA,KAAY,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,WAAW,EAAE,CAAA;AACzD,QAAA;AAAA,MACF;AACA,MAAA,KAAA,MAAW,CAAA,IAAK,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,WAAW,CAAC,CAAA;AAAA,IACpD,CAAA,MAAA,IAAW,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,EAAU;AAK1C,MAAA,MAAA,CAAO,GAAA,CAAI,SAAA,EAAW,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA;AAAA,IAC1C;AAAA,EACF;AACF;AAgBA,MAAM,kBAAA,GAAqB,KAAA;AAE3B,SAAS,eAAe,CAAA,EAAoB;AAC1C,EAAA,MAAM,OAAA,GAAU,EAAE,IAAA,EAAK;AACvB,EAAA,OAAO,OAAA,KAAY,MAAM,OAAA,KAAY,kBAAA;AACvC;AAMA,MAAM,0BAAwD,IAAI,GAAA;AAAA,EAChE,gCAAA,CAAiC,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,UAAU;AACxD,CAAA;AACA,SAAS,sBAAsB,CAAA,EAAmC;AAChE,EAAA,MAAM,OAAA,GAAU,EAAE,IAAA,EAAK;AACvB,EAAA,OAAO,uBAAA,CAAwB,GAAA,CAAI,OAA0B,CAAA,GAAK,OAAA,GAAyB,MAAA;AAC7F;AAEO,SAAS,8BAA8B,MAAA,EAAyD;AACrG,EAAA,MAAM,SAAmC,EAAC;AAC1C,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AACtB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,EAAG;AAC9B,MAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAClB,MAAA,CAAO,CAAC,CAAA,KAAmB,OAAO,MAAM,QAAQ,CAAA,CAChD,IAAI,CAAA,CAAA,KAAK,CAAA,CAAE,MAAM,CAAA,CACjB,OAAO,CAAA,CAAA,KAAK,CAAC,cAAA,CAAe,CAAC,CAAC,CAAA;AACjC,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACzB,MAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,QAAA,MAAA,CAAO,IAAA,GAAO,MAAA;AAAA,MAChB,CAAA,MAAA,IAAW,YAAY,gBAAA,EAAkB;AACvC,QAAA,MAAM,UAAA,GAAa,OAAO,CAAC,CAAA;AAC3B,QAAA,MAAM,SAAA,GAAY,UAAA,KAAe,MAAA,GAAY,qBAAA,CAAsB,UAAU,CAAA,GAAI,MAAA;AACjF,QAAA,IAAI,SAAA,SAAkB,cAAA,GAAiB,SAAA;AAAA,MACzC,CAAA,MAAO;AAEL,QAAC,MAAA,CAAmC,OAAO,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA;AAAA,MACzD;AAAA,IACF,CAAA,MAAA,IAAW,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,EAAU;AAC1C,MAAA,IAAI,cAAA,CAAe,KAAA,CAAM,KAAK,CAAA,EAAG;AACjC,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,KAAA,CAAM,IAAA,EAAK;AACjC,MAAA,IAAI,YAAY,gBAAA,EAAkB;AAChC,QAAA,MAAM,SAAA,GAAY,sBAAsB,OAAO,CAAA;AAC/C,QAAA,IAAI,SAAA,SAAkB,cAAA,GAAiB,SAAA;AAAA,MACzC,CAAA,MAAO;AACL,QAAC,MAAA,CAAmC,OAAO,CAAA,GAAI,OAAA;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;;;;"}
1
+ {"version":3,"file":"metrics-filters.es.js","sources":["../../../src/domains/metrics/metrics-filters.ts"],"sourcesContent":["import type { EntityType } from '@mastra/core/observability';\nimport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\nimport { CloudIcon, CpuIcon } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\nimport { traceFilterFieldColor, traceFilterFieldIcon } from '../traces/trace-filters';\nimport type {\n FilterBarField,\n FilterBarItem,\n FilterBarOperator,\n FilterBarOption,\n} from '@/ds/components/FilterBar/types';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\ntype EntityTypeValue = `${EntityType}`;\n\n/** Primitive type options — matches the traces filter vocabulary. */\nexport const METRICS_ROOT_ENTITY_TYPE_OPTIONS = [\n { label: 'Agent', entityType: 'agent' },\n { label: 'Workflow', entityType: 'workflow_run' },\n { label: 'Scorer', entityType: 'scorer' },\n { label: 'Ingest', entityType: 'rag_ingestion' },\n] as const satisfies readonly { label: string; entityType: EntityTypeValue }[];\n\n/** Field IDs that live in dedicated URL params (not the generic `filterX` set). */\nexport const METRICS_SYNTHETIC_FILTER_FIELD_IDS = ['rootEntityType'] as const;\n\nexport const METRICS_ROOT_ENTITY_TYPE_PARAM = 'rootEntityType';\n\n/** URL param name for each generic property filter field. Mirrors traces for\n * cross-page URL consistency (user can copy a trace's filter URL and paste\n * equivalent dimensions into metrics). */\nexport const METRICS_PROPERTY_FILTER_PARAM_BY_FIELD = {\n tags: 'filterTags',\n entityName: 'filterEntityName',\n runId: 'filterRunId',\n threadId: 'filterThreadId',\n sessionId: 'filterSessionId',\n requestId: 'filterRequestId',\n resourceId: 'filterResourceId',\n userId: 'filterUserId',\n organizationId: 'filterOrganizationId',\n serviceName: 'filterServiceName',\n environment: 'filterEnvironment',\n experimentId: 'filterExperimentId',\n provider: 'filterProvider',\n model: 'filterModel',\n} as const;\n\nexport type MetricsPropertyFilterFieldId = keyof typeof METRICS_PROPERTY_FILTER_PARAM_BY_FIELD;\n\nexport const METRICS_PROPERTY_FILTER_FIELD_IDS = Object.keys(\n METRICS_PROPERTY_FILTER_PARAM_BY_FIELD,\n) as Array<MetricsPropertyFilterFieldId>;\n\nconst METRICS_FILTERS_STORAGE_KEY = 'mastra:metrics:saved-filters';\n\n/** Save the current metrics filter URL params so the metrics page can restore\n * them on next visit (same pattern as traces/logs). */\nexport function saveMetricsFiltersToStorage(params: URLSearchParams): void {\n const serialized = getPreservedMetricsFilterParams(params);\n try {\n localStorage.setItem(METRICS_FILTERS_STORAGE_KEY, serialized.toString());\n } catch {\n // localStorage may be unavailable — silently skip.\n }\n}\n\nexport function clearSavedMetricsFilters(): void {\n try {\n localStorage.removeItem(METRICS_FILTERS_STORAGE_KEY);\n } catch {\n // ignore\n }\n}\n\nexport function loadMetricsFiltersFromStorage(): URLSearchParams | null {\n try {\n const raw = localStorage.getItem(METRICS_FILTERS_STORAGE_KEY);\n if (!raw) return null;\n const parsed = new URLSearchParams(raw);\n return parsed.toString() ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport function hasAnyMetricsFilterParams(params: URLSearchParams): boolean {\n if (params.has(METRICS_ROOT_ENTITY_TYPE_PARAM)) return true;\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n if (params.has(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId])) return true;\n }\n return false;\n}\n\n/** Build the PropertyFilterField list shown in the metrics filter popover.\n *\n * The field order is curated for OLAP efficiency: columnar/LowCardinality\n * dimensions first, then bloom_filter-indexed high-cardinality IDs as\n * free-text. Fields that are expensive to filter without an index are\n * intentionally omitted from this dashboard surface.\n *\n * @deprecated The metrics dashboard filters through `FilterBar`. Use `createMetricsFilterBarFields`. */\nexport function createMetricsPropertyFilterFields({\n availableTags,\n availableEntityNames,\n availableServiceNames,\n availableEnvironments,\n loading,\n}: {\n availableTags: string[];\n availableEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n loading?: {\n tags?: boolean;\n entityNames?: boolean;\n serviceNames?: boolean;\n environments?: boolean;\n };\n}): PropertyFilterField[] {\n const fields: PropertyFilterField[] = [\n {\n id: 'rootEntityType',\n label: 'Primitive type',\n kind: 'pick-multi',\n searchable: false,\n options: METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ label: o.label, value: o.entityType })),\n placeholder: 'Choose entity type',\n emptyText: 'No entity types.',\n },\n {\n id: 'entityName',\n label: 'Primitive name',\n kind: 'pick-multi',\n options: availableEntityNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose entity names',\n emptyText: 'No entity names found.',\n isLoading: loading?.entityNames,\n },\n {\n id: 'tags',\n label: 'Tags',\n kind: 'pick-multi',\n multi: true,\n options: availableTags.map(tag => ({ label: tag, value: tag })),\n placeholder: 'Choose tags',\n emptyText: 'No tags found.',\n isLoading: loading?.tags,\n },\n {\n id: 'serviceName',\n label: 'Service Name',\n kind: 'pick-multi',\n options: availableServiceNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose service names',\n emptyText: 'No service names found.',\n isLoading: loading?.serviceNames,\n },\n {\n id: 'environment',\n label: 'Environment',\n kind: 'pick-multi',\n options: availableEnvironments.map(env => ({ label: env, value: env })),\n placeholder: 'Choose environments',\n emptyText: 'No environments found.',\n isLoading: loading?.environments,\n },\n // Provider / model are filterable by URL (filterProvider / filterModel) but\n // are omitted from the popover until we expose a discovery endpoint.\n // High-cardinality IDs — free-text. Backed by bloom_filter skip indexes on\n // ClickHouse, narrow timestamp range pruning on DuckDB.\n { id: 'threadId', label: 'Thread ID', kind: 'text' },\n { id: 'resourceId', label: 'Resource ID', kind: 'text' },\n { id: 'userId', label: 'User ID', kind: 'text' },\n { id: 'organizationId', label: 'Organization ID', kind: 'text' },\n { id: 'runId', label: 'Run ID', kind: 'text' },\n { id: 'sessionId', label: 'Session ID', kind: 'text' },\n { id: 'requestId', label: 'Request ID', kind: 'text' },\n { id: 'experimentId', label: 'Experiment ID', kind: 'text' },\n ];\n const byLabel = (a: PropertyFilterField, b: PropertyFilterField) => a.label.localeCompare(b.label);\n const pickMulti = fields.filter(f => f.kind === 'pick-multi').sort(byLabel);\n const text = fields.filter(f => f.kind === 'text').sort(byLabel);\n return [...pickMulti, ...text];\n}\n\ntype MetricsFilterBarFieldId = MetricsPropertyFilterFieldId | 'rootEntityType';\n\nconst METRICS_TAGS_OPERATOR_ID = 'hasAll';\n\n/** Operators of the metrics filter bar. The metrics API matches one value per dimension, so `is`\n * never widens to \"is any of\", and it requires every listed tag. */\nexport const METRICS_FILTER_BAR_OPERATORS: FilterBarOperator[] = [\n { id: 'is', label: 'is' },\n { id: METRICS_TAGS_OPERATOR_ID, label: 'has all of', arity: 'many' },\n];\n\n/** Same labels as the trace filters, so a dimension reads the same on Metrics and Traces. */\nconst METRICS_FILTER_BAR_LABELS: Record<MetricsFilterBarFieldId, string> = {\n rootEntityType: 'Primitive type',\n entityName: 'Primitive name',\n tags: 'Tags',\n serviceName: 'Service Name',\n environment: 'Environment',\n threadId: 'Thread ID',\n resourceId: 'Resource ID',\n userId: 'User ID',\n organizationId: 'Organization ID',\n runId: 'Run ID',\n sessionId: 'Session ID',\n requestId: 'Request ID',\n experimentId: 'Experiment ID',\n provider: 'Provider',\n model: 'Model',\n};\n\n/** Icons for the dimensions the trace filters key differently (`spans.provider`, `spans.model`). */\nconst METRICS_FILTER_BAR_ICONS: Partial<Record<MetricsFilterBarFieldId, LucideIcon>> = {\n provider: CloudIcon,\n model: CpuIcon,\n};\n\nconst METRICS_FILTER_BAR_TEXT_FIELD_IDS = [\n 'threadId',\n 'resourceId',\n 'userId',\n 'organizationId',\n 'runId',\n 'sessionId',\n 'requestId',\n 'experimentId',\n] as const satisfies readonly MetricsFilterBarFieldId[];\n\nconst metricsFieldBase = (id: MetricsFilterBarFieldId) => ({\n id,\n label: METRICS_FILTER_BAR_LABELS[id],\n icon: METRICS_FILTER_BAR_ICONS[id] ?? traceFilterFieldIcon(id),\n color: traceFilterFieldColor(id),\n});\n\nconst byFieldLabel = (a: FilterBarField, b: FilterBarField) => a.label.localeCompare(b.label);\n\n/** FilterBar fields for the metrics dashboard, in the same order as before: discovered\n * dimensions first, then the high-cardinality IDs as free text. Provider and model are\n * never offered (there is no discovery endpoint for them yet) but still label the chips\n * that links bring in through `filterProvider` / `filterModel`. */\nexport function createMetricsFilterBarFields({\n availableTags,\n availableEntityNames,\n availableServiceNames,\n availableEnvironments,\n}: {\n availableTags: string[];\n availableEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n}): FilterBarField[] {\n const pick = (id: MetricsFilterBarFieldId, suggestions: FilterBarOption[]): FilterBarField => ({\n ...metricsFieldBase(id),\n operators: ['is'],\n strict: true,\n suggestions,\n });\n const text = (id: MetricsFilterBarFieldId): FilterBarField => ({ ...metricsFieldBase(id), operators: ['is'] });\n const options = (values: string[]) => values.map(value => ({ value }));\n\n const pickFields: FilterBarField[] = [\n pick(\n 'rootEntityType',\n METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ value: o.entityType, label: o.label })),\n ),\n pick('entityName', options(availableEntityNames)),\n { ...pick('tags', options(availableTags)), operators: [METRICS_TAGS_OPERATOR_ID] },\n pick('serviceName', options(availableServiceNames)),\n pick('environment', options(availableEnvironments)),\n ];\n const textFields = METRICS_FILTER_BAR_TEXT_FIELD_IDS.map(text);\n const urlOnlyFields = (['provider', 'model'] as const).map(id => ({ ...text(id), hidden: true }));\n\n return [...pickFields.toSorted(byFieldLabel), ...textFields.toSorted(byFieldLabel), ...urlOnlyFields];\n}\n\n/** One FilterBar item per token, keyed by field id so chip order == URL order. Empty values\n * are kept: they are chips whose value hasn't been picked yet. The legacy 'Any' sentinel\n * reads as empty, and a repeated single-value param keeps its first value, which is the one\n * the metrics API applies. */\nexport function metricsTokensToFilterBarItems(tokens: PropertyFilterToken[]): FilterBarItem[] {\n return tokens.map(token => {\n if (token.fieldId === 'tags') {\n const value = [token.value].flat().filter(tag => tag !== '');\n return { id: token.fieldId, fieldId: token.fieldId, operatorId: METRICS_TAGS_OPERATOR_ID, value };\n }\n const value = Array.isArray(token.value) ? (token.value[0] ?? '') : token.value;\n return { id: token.fieldId, fieldId: token.fieldId, operatorId: 'is', value: isNeutralValue(value) ? '' : value };\n });\n}\n\nexport function filterBarItemsToMetricsTokens(items: FilterBarItem[]): PropertyFilterToken[] {\n return items.map(item => ({\n fieldId: item.fieldId,\n value: Array.isArray(item.value) ? item.value.map(String) : String(item.value),\n }));\n}\n\n/** Parse filter tokens from URL params, preserving insertion order. */\nexport function getMetricsPropertyFilterTokens(searchParams: URLSearchParams): PropertyFilterToken[] {\n const tokens: PropertyFilterToken[] = [];\n\n const paramToFieldId = new Map<string, string>([[METRICS_ROOT_ENTITY_TYPE_PARAM, 'rootEntityType']]);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n paramToFieldId.set(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId], fieldId);\n }\n\n const seen = new Set<string>();\n for (const [paramName] of searchParams.entries()) {\n const fieldId = paramToFieldId.get(paramName);\n if (!fieldId || seen.has(fieldId)) continue;\n seen.add(fieldId);\n\n if (fieldId === 'tags') {\n const raw = searchParams.getAll(paramName);\n if (raw.length === 0) continue;\n tokens.push({ fieldId, value: raw.filter(Boolean) });\n continue;\n }\n\n // Multi-value pick-multi fields: collect all occurrences.\n if (\n fieldId === 'rootEntityType' ||\n fieldId === 'entityName' ||\n fieldId === 'serviceName' ||\n fieldId === 'environment' ||\n fieldId === 'provider' ||\n fieldId === 'model'\n ) {\n const raw = searchParams.getAll(paramName);\n if (raw.length > 1) {\n tokens.push({ fieldId, value: raw });\n continue;\n }\n }\n\n const value = searchParams.get(paramName);\n if (value !== null) tokens.push({ fieldId, value });\n }\n\n return tokens;\n}\n\n/** Return a fresh URLSearchParams containing only metrics filter params. */\nexport function getPreservedMetricsFilterParams(searchParams: URLSearchParams): URLSearchParams {\n const next = new URLSearchParams();\n const rootEntityValues = searchParams.getAll(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const v of rootEntityValues) next.append(METRICS_ROOT_ENTITY_TYPE_PARAM, v);\n\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n const param = METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId];\n const values = searchParams.getAll(param);\n for (const v of values) next.append(param, v);\n }\n return next;\n}\n\n/** Mutate `params` in place: strip every metrics filter param, then re-write\n * them from `tokens` in order. Token insertion order drives URL order so\n * filter pill order is stable across reloads. */\nexport function applyMetricsPropertyFilterTokens(params: URLSearchParams, tokens: PropertyFilterToken[]): void {\n params.delete(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n params.delete(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n\n for (const token of tokens) {\n const paramName =\n token.fieldId === 'rootEntityType'\n ? METRICS_ROOT_ENTITY_TYPE_PARAM\n : METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[token.fieldId as MetricsPropertyFilterFieldId];\n if (!paramName) continue;\n\n if (Array.isArray(token.value)) {\n const values = token.value.filter(v => typeof v === 'string' && v !== '');\n if (values.length === 0) {\n // Keep an empty sentinel for `tags` so the pill survives a Reset.\n if (token.fieldId === 'tags') params.append(paramName, '');\n continue;\n }\n for (const v of values) params.append(paramName, v);\n } else if (typeof token.value === 'string') {\n // Persist even empty / 'Any' strings so newly-created pills (and\n // neutralized-but-still-visible pills after a Reset) survive URL\n // round-trips. `buildMetricsDimensionalFilter` drops these on the API\n // query side so neutrals never reach the backend.\n params.set(paramName, token.value.trim());\n }\n }\n}\n\n/** Shape of the dimensional filter object fed into `MetricsFilter` on client\n * calls. Kept compatible with `metricsFilterSchema` in @internal/core — every\n * scalar field maps to a single-string column filter, and `tags` is the only\n * array field (matched via `has()` / equivalent on backends). */\nexport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\n\n/** Convert the active token list into a `MetricsFilter`-compatible object.\n *\n * Single-value text fields are assigned as strings; `pick-multi` fields are\n * assigned as string arrays. Empty/neutral values are dropped. */\n/** \"Neutral\" sentinel for single-select pick-multi fields. Emitted by the\n * toolbar's Clear action so pills stay visible after reset; must be stripped\n * before the filter object is sent to the backend (it is not a valid enum\n * option for fields like `rootEntityType`). */\nconst NEUTRAL_PICK_VALUE = 'Any';\n\nfunction isNeutralValue(v: string): boolean {\n const trimmed = v.trim();\n return trimmed === '' || trimmed === NEUTRAL_PICK_VALUE;\n}\n\n/** `rootEntityType` is enum-valued at the backend; URL-supplied or stale stored\n * values can be arbitrary strings, so we validate against the allowed set\n * before letting them reach the filter object. Returns `undefined` if the\n * value isn't a known enum option. */\nconst VALID_ROOT_ENTITY_TYPES: ReadonlySet<EntityTypeValue> = new Set(\n METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => o.entityType),\n);\nfunction toValidRootEntityType(v: string): EntityType | undefined {\n const trimmed = v.trim();\n return VALID_ROOT_ENTITY_TYPES.has(trimmed as EntityTypeValue) ? (trimmed as EntityType) : undefined;\n}\n\nexport function buildMetricsDimensionalFilter(tokens: PropertyFilterToken[]): MetricsDimensionalFilter {\n const result: MetricsDimensionalFilter = {};\n for (const token of tokens) {\n const fieldId = token.fieldId as keyof MetricsDimensionalFilter;\n if (Array.isArray(token.value)) {\n const values = token.value\n .filter((v): v is string => typeof v === 'string')\n .map(v => v.trim())\n .filter(v => !isNeutralValue(v));\n if (values.length === 0) continue;\n if (fieldId === 'tags') {\n result.tags = values;\n } else if (fieldId === 'rootEntityType') {\n const firstValue = values[0];\n const validated = firstValue !== undefined ? toValidRootEntityType(firstValue) : undefined;\n if (validated) result.rootEntityType = validated;\n } else {\n // Backend accepts a single string per dimension; take the first selection.\n (result as Record<string, unknown>)[fieldId] = values[0];\n }\n } else if (typeof token.value === 'string') {\n if (isNeutralValue(token.value)) continue;\n const trimmed = token.value.trim();\n if (fieldId === 'rootEntityType') {\n const validated = toValidRootEntityType(trimmed);\n if (validated) result.rootEntityType = validated;\n } else {\n (result as Record<string, unknown>)[fieldId] = trimmed;\n }\n }\n }\n return result;\n}\n"],"names":["value"],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
5
  const domains_metrics_components_dateRangeSelector = require('./metrics/components/date-range-selector.cjs.js');
6
+ const domains_metrics_components_metricsTimeRangeChip = require('./metrics/components/metrics-time-range-chip.cjs.js');
6
7
  const domains_metrics_components_cardActionButtons = require('./metrics/components/card-action-buttons.cjs.js');
7
8
  const domains_metrics_components_chartArea = require('./metrics/components/chart-area.cjs.js');
8
9
  const domains_metrics_components_chartCard = require('./metrics/components/chart-card.cjs.js');
@@ -34,6 +35,7 @@ const domains_metrics_lib_bucketLabels = require('./metrics/lib/bucket-labels.cj
34
35
 
35
36
 
36
37
  exports.DateRangeSelector = domains_metrics_components_dateRangeSelector.DateRangeSelector;
38
+ exports.MetricsTimeRangeChip = domains_metrics_components_metricsTimeRangeChip.MetricsTimeRangeChip;
37
39
  exports.OpenErrorsInLogsButton = domains_metrics_components_cardActionButtons.OpenErrorsInLogsButton;
38
40
  exports.OpenInTracesButton = domains_metrics_components_cardActionButtons.OpenInTracesButton;
39
41
  exports.ChartArea = domains_metrics_components_chartArea.ChartArea;
@@ -116,13 +118,17 @@ Object.defineProperty(exports, "useTraceVolumeMetrics", {
116
118
  });
117
119
  exports.buildLogsDrilldownUrl = domains_metrics_drilldown.buildLogsDrilldownUrl;
118
120
  exports.buildTracesDrilldownUrl = domains_metrics_drilldown.buildTracesDrilldownUrl;
121
+ exports.METRICS_FILTER_BAR_OPERATORS = domains_metrics_metricsFilters.METRICS_FILTER_BAR_OPERATORS;
119
122
  exports.applyMetricsPropertyFilterTokens = domains_metrics_metricsFilters.applyMetricsPropertyFilterTokens;
120
123
  exports.buildMetricsDimensionalFilter = domains_metrics_metricsFilters.buildMetricsDimensionalFilter;
121
124
  exports.clearSavedMetricsFilters = domains_metrics_metricsFilters.clearSavedMetricsFilters;
125
+ exports.createMetricsFilterBarFields = domains_metrics_metricsFilters.createMetricsFilterBarFields;
122
126
  exports.createMetricsPropertyFilterFields = domains_metrics_metricsFilters.createMetricsPropertyFilterFields;
127
+ exports.filterBarItemsToMetricsTokens = domains_metrics_metricsFilters.filterBarItemsToMetricsTokens;
123
128
  exports.getMetricsPropertyFilterTokens = domains_metrics_metricsFilters.getMetricsPropertyFilterTokens;
124
129
  exports.hasAnyMetricsFilterParams = domains_metrics_metricsFilters.hasAnyMetricsFilterParams;
125
130
  exports.loadMetricsFiltersFromStorage = domains_metrics_metricsFilters.loadMetricsFiltersFromStorage;
131
+ exports.metricsTokensToFilterBarItems = domains_metrics_metricsFilters.metricsTokensToFilterBarItems;
126
132
  exports.saveMetricsFiltersToStorage = domains_metrics_metricsFilters.saveMetricsFiltersToStorage;
127
133
  exports.useMetricsActivity = domains_metrics_hooks_useMetricsActivity.useMetricsActivity;
128
134
  exports.useMetricsLatency = domains_metrics_hooks_useMetricsLatency.useMetricsLatency;
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"metrics.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +1,5 @@
1
1
  export { DateRangeSelector } from './metrics/components/date-range-selector.es.js';
2
+ export { MetricsTimeRangeChip } from './metrics/components/metrics-time-range-chip.es.js';
2
3
  export { OpenErrorsInLogsButton, OpenInTracesButton } from './metrics/components/card-action-buttons.es.js';
3
4
  export { ChartArea } from './metrics/components/chart-area.es.js';
4
5
  export { ChartCard } from './metrics/components/chart-card.es.js';
@@ -17,7 +18,7 @@ export { DATE_PRESETS, MetricsProvider, isValidPreset, useMetrics } from './metr
17
18
  export { useMetricsFilters } from './metrics/hooks/use-metrics-filters.es.js';
18
19
  export { chooseMetricsInterval, formatMetricsBucketLabel, useActiveResourcesKpiMetrics, useActiveThreadsKpiMetrics, useAgentRunsKpiMetrics, useLatencyMetrics, useModelCostKpiMetrics, useModelUsageCostMetrics, useScoresMetrics, useTokenUsageByAgentMetrics, useTokenUsageTimeSeries, useTopActiveThreadsMetrics, useTopResourcesByThreadsMetrics, useTotalTokensKpiMetrics, useTraceVolumeMetrics } from '@mastra/react/hooks/metrics';
19
20
  export { buildLogsDrilldownUrl, buildTracesDrilldownUrl } from './metrics/drilldown.es.js';
20
- export { applyMetricsPropertyFilterTokens, buildMetricsDimensionalFilter, clearSavedMetricsFilters, createMetricsPropertyFilterFields, getMetricsPropertyFilterTokens, hasAnyMetricsFilterParams, loadMetricsFiltersFromStorage, saveMetricsFiltersToStorage } from './metrics/metrics-filters.es.js';
21
+ export { METRICS_FILTER_BAR_OPERATORS, applyMetricsPropertyFilterTokens, buildMetricsDimensionalFilter, clearSavedMetricsFilters, createMetricsFilterBarFields, createMetricsPropertyFilterFields, filterBarItemsToMetricsTokens, getMetricsPropertyFilterTokens, hasAnyMetricsFilterParams, loadMetricsFiltersFromStorage, metricsTokensToFilterBarItems, saveMetricsFiltersToStorage } from './metrics/metrics-filters.es.js';
21
22
  export { useMetricsActivity } from './metrics/hooks/use-metrics-activity.es.js';
22
23
  export { useMetricsLatency } from './metrics/hooks/use-metrics-latency.es.js';
23
24
  export { useMetricsScores } from './metrics/hooks/use-metrics-scores.es.js';
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"metrics.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -8,7 +8,7 @@ const React = require('react');
8
8
  const domains_scores_components_scoreAsItemDialog = require('./score-as-item-dialog.cjs.js');
9
9
  const Button = require('../../../Button-CAVPKK09.cjs');
10
10
  const dataKeysAndValues = require('../../../data-keys-and-values-C1I--hWn.cjs');
11
- const dataPanel = require('../../../data-panel-Wjgbl6zx.cjs');
11
+ const dataPanel = require('../../../data-panel-CtFwwsPs.cjs');
12
12
  const Txt = require('../../../Txt-DXjXpX9r.cjs');
13
13
  const lib_framework = require('../../../lib/framework.cjs.js');
14
14
  const utils_cn = require('../../../cn-TqD01zH-.cjs');
@@ -4,7 +4,7 @@ import { useState } from 'react';
4
4
  import { ScoreAsItemDialog } from './score-as-item-dialog.es.js';
5
5
  import { B as Button } from '../../../Button-60jVnaHt.js';
6
6
  import { D as DataKeysAndValues } from '../../../data-keys-and-values-B1u00ihh.js';
7
- import { D as DataPanel } from '../../../data-panel-BdCw3F_h.js';
7
+ import { D as DataPanel } from '../../../data-panel-CwIdwpov.js';
8
8
  import { T as Txt } from '../../../Txt-BuzYj7Vy.js';
9
9
  import { useLinkComponent } from '../../../lib/framework.es.js';
10
10
  import { c as cn } from '../../../cn-coERSHz5.js';
@@ -6,13 +6,13 @@ const jsxRuntime = require('react/jsx-runtime');
6
6
  const scores = require('@mastra/react/hooks/scores');
7
7
  const lucideReact = require('lucide-react');
8
8
  const React = require('react');
9
- const combobox = require('../../../combobox-fEMKH9nJ.cjs');
9
+ const combobox = require('../../../combobox-CdTP_FZ0.cjs');
10
10
  require('@base-ui/react/combobox');
11
- const dialog = require('../../../dialog-B5nLi0ER.cjs');
11
+ const dialog = require('../../../dialog-BAlSUqcF.cjs');
12
12
  const Notice = require('../../../Notice-c8dMiAtZ.cjs');
13
13
  const textAndIcon = require('../../../text-and-icon-BJ5wgYf5.cjs');
14
14
  const toast = require('../../../toast-C8a7bWV8.cjs');
15
- const dialogAction = require('../../../dialog-action-DdkbsKfP.cjs');
15
+ const dialogAction = require('../../../dialog-action-DWE9XalB.cjs');
16
16
 
17
17
  function SpanScoring({
18
18
  traceId,
@@ -2,13 +2,13 @@ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { useTriggerScorer } from '@mastra/react/hooks/scores';
3
3
  import { InfoIcon } from 'lucide-react';
4
4
  import { useState } from 'react';
5
- import { C as Combobox } from '../../../combobox-so2V71F7.js';
5
+ import { C as Combobox } from '../../../combobox-CeYDCkXk.js';
6
6
  import '@base-ui/react/combobox';
7
- import { a as DialogBody, f as DialogFooter, b as DialogCancel, e as DialogDescription } from '../../../dialog-Jz2ZfO-z.js';
7
+ import { a as DialogBody, f as DialogFooter, b as DialogCancel, e as DialogDescription } from '../../../dialog-CboDo8Pj.js';
8
8
  import { N as Notice } from '../../../Notice-Wy1grdLu.js';
9
9
  import { T as TextAndIcon } from '../../../text-and-icon-CGupOpWs.js';
10
10
  import { t as toast } from '../../../toast-WCmYXnuT.js';
11
- import { D as DialogAction } from '../../../dialog-action-BxXhAz-P.js';
11
+ import { D as DialogAction } from '../../../dialog-action-DpctEQ9l.js';
12
12
 
13
13
  function SpanScoring({
14
14
  traceId,