@mastra/playground-ui 55.0.0 → 56.0.0-alpha.5

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 (1617) hide show
  1. package/README.md +20 -0
  2. package/dist/Badge-5RAaa8U3.js +123 -0
  3. package/dist/Badge-5RAaa8U3.js.map +1 -0
  4. package/dist/Badge-DUXOjcfL.cjs +125 -0
  5. package/dist/Badge-DUXOjcfL.cjs.map +1 -0
  6. package/dist/Button-B1TWWXCy.cjs +137 -0
  7. package/dist/Button-B1TWWXCy.cjs.map +1 -0
  8. package/dist/Button-XSiL3zvL.js +133 -0
  9. package/dist/Button-XSiL3zvL.js.map +1 -0
  10. package/dist/Card-BnHDiblE.js +96 -0
  11. package/dist/Card-BnHDiblE.js.map +1 -0
  12. package/dist/Card-Cwtkduiw.cjs +123 -0
  13. package/dist/Card-Cwtkduiw.cjs.map +1 -0
  14. package/dist/EmptyState-BpwEnZ55.js +31 -0
  15. package/dist/EmptyState-BpwEnZ55.js.map +1 -0
  16. package/dist/EmptyState-CbHg7j-K.cjs +33 -0
  17. package/dist/EmptyState-CbHg7j-K.cjs.map +1 -0
  18. package/dist/Notice-BkL7EPmo.js +89 -0
  19. package/dist/Notice-BkL7EPmo.js.map +1 -0
  20. package/dist/Notice-CoaE5a2D.cjs +91 -0
  21. package/dist/Notice-CoaE5a2D.cjs.map +1 -0
  22. package/dist/PermissionDenied-CJaLT_6Y.js +22 -0
  23. package/dist/PermissionDenied-CJaLT_6Y.js.map +1 -0
  24. package/dist/PermissionDenied-NzPheIbg.cjs +24 -0
  25. package/dist/PermissionDenied-NzPheIbg.cjs.map +1 -0
  26. package/dist/PullRequestIcon.css +7 -0
  27. package/dist/SessionExpired-C2NfmuTN.cjs +47 -0
  28. package/dist/SessionExpired-C2NfmuTN.cjs.map +1 -0
  29. package/dist/SessionExpired-C_J0XX8S.js +45 -0
  30. package/dist/SessionExpired-C_J0XX8S.js.map +1 -0
  31. package/dist/Txt-23XtxAlc.js +28 -0
  32. package/dist/Txt-23XtxAlc.js.map +1 -0
  33. package/dist/Txt-BZXvaPLR.cjs +30 -0
  34. package/dist/Txt-BZXvaPLR.cjs.map +1 -0
  35. package/dist/activity-DP2I8sw_.js +49 -0
  36. package/dist/activity-DP2I8sw_.js.map +1 -0
  37. package/dist/activity-qA_Yy7v6.cjs +52 -0
  38. package/dist/activity-qA_Yy7v6.cjs.map +1 -0
  39. package/dist/activity.css +365 -0
  40. package/dist/arrival-CLDx8jeY.js +19 -0
  41. package/dist/arrival-CLDx8jeY.js.map +1 -0
  42. package/dist/arrival-CbbPGaqT.cjs +22 -0
  43. package/dist/arrival-CbbPGaqT.cjs.map +1 -0
  44. package/dist/ask-user-Bv1kGn_m.cjs +146 -0
  45. package/dist/ask-user-Bv1kGn_m.cjs.map +1 -0
  46. package/dist/ask-user-PM_6vU2N.js +137 -0
  47. package/dist/ask-user-PM_6vU2N.js.map +1 -0
  48. package/dist/buttons-group-ACr7Jau0.js +162 -0
  49. package/dist/buttons-group-ACr7Jau0.js.map +1 -0
  50. package/dist/buttons-group-CdQdd_cj.cjs +186 -0
  51. package/dist/buttons-group-CdQdd_cj.cjs.map +1 -0
  52. package/dist/chat-notification-Ct-Pi0rp.js +107 -0
  53. package/dist/chat-notification-Ct-Pi0rp.js.map +1 -0
  54. package/dist/chat-notification-EPdPuR9k.cjs +111 -0
  55. package/dist/chat-notification-EPdPuR9k.cjs.map +1 -0
  56. package/dist/chat-signal-BPlIIAtB.cjs +42 -0
  57. package/dist/chat-signal-BPlIIAtB.cjs.map +1 -0
  58. package/dist/chat-signal-evW1798B.js +40 -0
  59. package/dist/chat-signal-evW1798B.js.map +1 -0
  60. package/dist/checkbox-BDsWLL97.cjs +109 -0
  61. package/dist/checkbox-BDsWLL97.cjs.map +1 -0
  62. package/dist/checkbox-D0cJaGBz.js +88 -0
  63. package/dist/checkbox-D0cJaGBz.js.map +1 -0
  64. package/dist/cn-DPfV6E6L.cjs +3294 -0
  65. package/dist/cn-DPfV6E6L.cjs.map +1 -0
  66. package/dist/cn-Dxjsbr9n.js +3291 -0
  67. package/dist/cn-Dxjsbr9n.js.map +1 -0
  68. package/dist/code-block-B7ySYtNZ.js +86 -0
  69. package/dist/code-block-B7ySYtNZ.js.map +1 -0
  70. package/dist/code-block-C4soB6uN.cjs +88 -0
  71. package/dist/code-block-C4soB6uN.cjs.map +1 -0
  72. package/dist/code-editor-JI0lkx_d.cjs +486 -0
  73. package/dist/code-editor-JI0lkx_d.cjs.map +1 -0
  74. package/dist/code-editor-pVut50_I.js +478 -0
  75. package/dist/code-editor-pVut50_I.js.map +1 -0
  76. package/dist/collapsible-T4jTNOOE.cjs +61 -0
  77. package/dist/collapsible-T4jTNOOE.cjs.map +1 -0
  78. package/dist/collapsible-cOfcD1BM.js +57 -0
  79. package/dist/collapsible-cOfcD1BM.js.map +1 -0
  80. package/dist/combobox-0lN2FQ8-.js +171 -0
  81. package/dist/combobox-0lN2FQ8-.js.map +1 -0
  82. package/dist/combobox-D8Q-oa8_.cjs +192 -0
  83. package/dist/combobox-D8Q-oa8_.cjs.map +1 -0
  84. package/dist/combobox-styles-BjTWZmnO.cjs +93 -0
  85. package/dist/combobox-styles-BjTWZmnO.cjs.map +1 -0
  86. package/dist/combobox-styles-DOgXFKNk.js +89 -0
  87. package/dist/combobox-styles-DOgXFKNk.js.map +1 -0
  88. package/dist/command-BElAH1Uo.cjs +197 -0
  89. package/dist/command-BElAH1Uo.cjs.map +1 -0
  90. package/dist/command-Dnep1cdn.js +168 -0
  91. package/dist/command-Dnep1cdn.js.map +1 -0
  92. package/dist/components/Activity.cjs.js +11 -0
  93. package/dist/components/Activity.cjs.js.map +1 -0
  94. package/dist/components/Activity.d.ts +2 -0
  95. package/dist/components/Activity.es.js +2 -0
  96. package/dist/components/Activity.es.js.map +1 -0
  97. package/dist/components/AlertDialog.cjs.js +2 -2
  98. package/dist/components/AlertDialog.es.js +2 -2
  99. package/dist/components/Arrival.cjs.js +1 -1
  100. package/dist/components/Arrival.es.js +1 -1
  101. package/dist/components/Avatar.cjs.js +2 -2
  102. package/dist/components/Avatar.es.js +2 -2
  103. package/dist/components/Badge.cjs.js +1 -1
  104. package/dist/components/Badge.es.js +1 -1
  105. package/dist/components/BrandLoader.cjs.js +1 -1
  106. package/dist/components/BrandLoader.es.js +1 -1
  107. package/dist/components/Breadcrumb.cjs.js +2 -2
  108. package/dist/components/Breadcrumb.es.js +2 -2
  109. package/dist/components/Button.cjs.js +2 -2
  110. package/dist/components/Button.es.js +3 -3
  111. package/dist/components/ButtonsGroup.cjs.js +1 -1
  112. package/dist/components/ButtonsGroup.es.js +1 -1
  113. package/dist/components/Card.cjs.js +1 -1
  114. package/dist/components/Card.es.js +1 -1
  115. package/dist/components/ChatShell.cjs.js +2 -2
  116. package/dist/components/ChatShell.es.js +2 -2
  117. package/dist/components/Checkbox.cjs.js +1 -1
  118. package/dist/components/Checkbox.es.js +1 -1
  119. package/dist/components/ClampedText.cjs.js +3 -3
  120. package/dist/components/ClampedText.es.js +3 -3
  121. package/dist/components/CodeBlock.cjs.js +1 -1
  122. package/dist/components/CodeBlock.es.js +1 -1
  123. package/dist/components/CodeEditor.cjs.js +1 -1
  124. package/dist/components/CodeEditor.es.js +1 -1
  125. package/dist/components/Collapsible.cjs.js +1 -1
  126. package/dist/components/Collapsible.es.js +1 -1
  127. package/dist/components/Columns.cjs.js +2 -2
  128. package/dist/components/Columns.es.js +2 -2
  129. package/dist/components/Combobox.cjs.js +3 -2
  130. package/dist/components/Combobox.cjs.js.map +1 -1
  131. package/dist/components/Combobox.es.js +2 -1
  132. package/dist/components/Combobox.es.js.map +1 -1
  133. package/dist/components/Command.cjs.js +1 -1
  134. package/dist/components/Command.es.js +1 -1
  135. package/dist/components/CommandPalette.cjs.js +4 -4
  136. package/dist/components/CommandPalette.es.js +4 -4
  137. package/dist/components/Comment.cjs.js +6 -6
  138. package/dist/components/Comment.es.js +6 -6
  139. package/dist/components/Composer.cjs.js +12 -141
  140. package/dist/components/Composer.cjs.js.map +1 -1
  141. package/dist/components/Composer.es.js +5 -135
  142. package/dist/components/Composer.es.js.map +1 -1
  143. package/dist/components/ContextMenu.cjs.js +1 -1
  144. package/dist/components/ContextMenu.es.js +1 -1
  145. package/dist/components/CopyButton.cjs.js +1 -1
  146. package/dist/components/CopyButton.es.js +1 -1
  147. package/dist/components/DashboardCard.cjs.js +1 -1
  148. package/dist/components/DashboardCard.es.js +1 -1
  149. package/dist/components/DataCodeSection.cjs.js +1 -1
  150. package/dist/components/DataCodeSection.es.js +1 -1
  151. package/dist/components/DataDetailsPanel.cjs.js +21 -17
  152. package/dist/components/DataDetailsPanel.cjs.js.map +1 -1
  153. package/dist/components/DataDetailsPanel.es.js +21 -17
  154. package/dist/components/DataDetailsPanel.es.js.map +1 -1
  155. package/dist/components/DataFilter.cjs.js +3 -3
  156. package/dist/components/DataFilter.es.js +3 -3
  157. package/dist/components/DataKeysAndValues.cjs.js +1 -1
  158. package/dist/components/DataKeysAndValues.es.js +1 -1
  159. package/dist/components/DataList.cjs.js +4 -4
  160. package/dist/components/DataList.es.js +4 -4
  161. package/dist/components/DataPanel.cjs.js +1 -1
  162. package/dist/components/DataPanel.es.js +1 -1
  163. package/dist/components/DateRangeTimeline.cjs.js +5 -5
  164. package/dist/components/DateRangeTimeline.es.js +5 -5
  165. package/dist/components/DateTimePicker.cjs.js +6 -6
  166. package/dist/components/DateTimePicker.es.js +6 -6
  167. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  168. package/dist/components/DateTimeRangePicker.es.js +1 -1
  169. package/dist/components/Dialog.cjs.js +3 -3
  170. package/dist/components/Dialog.es.js +4 -4
  171. package/dist/components/Drawer.cjs.js +1 -1
  172. package/dist/components/Drawer.es.js +1 -1
  173. package/dist/components/DropdownMenu.cjs.js +1 -1
  174. package/dist/components/DropdownMenu.es.js +1 -1
  175. package/dist/components/EmptyState.cjs.js +1 -1
  176. package/dist/components/EmptyState.es.js +1 -1
  177. package/dist/components/Entity.cjs.js +2 -2
  178. package/dist/components/Entity.es.js +2 -2
  179. package/dist/components/EntityHeader.cjs.js +2 -2
  180. package/dist/components/EntityHeader.es.js +2 -2
  181. package/dist/components/Entry.cjs.js +1 -1
  182. package/dist/components/Entry.es.js +1 -1
  183. package/dist/components/EnvironmentVariablesEditor.cjs.js +7 -7
  184. package/dist/components/EnvironmentVariablesEditor.es.js +7 -7
  185. package/dist/components/ErrorBoundary.cjs.js +2 -2
  186. package/dist/components/ErrorBoundary.es.js +2 -2
  187. package/dist/components/FilterBar.cjs.js +415 -0
  188. package/dist/components/FilterBar.cjs.js.map +1 -0
  189. package/dist/components/FilterBar.d.ts +2 -0
  190. package/dist/components/FilterBar.es.js +404 -0
  191. package/dist/components/FilterBar.es.js.map +1 -0
  192. package/dist/components/FormFieldBlocks.cjs.js +5 -5
  193. package/dist/components/FormFieldBlocks.es.js +5 -5
  194. package/dist/components/Header.cjs.js +2 -2
  195. package/dist/components/Header.es.js +2 -2
  196. package/dist/components/HorizontalBars.cjs.js +1 -1
  197. package/dist/components/HorizontalBars.es.js +1 -1
  198. package/dist/components/HoverCard.cjs.js +1 -1
  199. package/dist/components/HoverCard.es.js +1 -1
  200. package/dist/components/Input.cjs.js +1 -1
  201. package/dist/components/Input.es.js +1 -1
  202. package/dist/components/InputGroup.cjs.js +1 -1
  203. package/dist/components/InputGroup.es.js +1 -1
  204. package/dist/components/IntegrationDialog.cjs.js +4 -4
  205. package/dist/components/IntegrationDialog.es.js +4 -4
  206. package/dist/components/ItemList.cjs.js +3 -3
  207. package/dist/components/ItemList.es.js +3 -3
  208. package/dist/components/JSONSchemaForm.cjs.js +5 -5
  209. package/dist/components/JSONSchemaForm.es.js +5 -5
  210. package/dist/components/Kbd.cjs.js +1 -1
  211. package/dist/components/Kbd.es.js +1 -1
  212. package/dist/components/KeyValueList.cjs.js +2 -2
  213. package/dist/components/KeyValueList.es.js +2 -2
  214. package/dist/components/Label.cjs.js +1 -1
  215. package/dist/components/Label.es.js +1 -1
  216. package/dist/components/ListSearch.cjs.js +1 -1
  217. package/dist/components/ListSearch.es.js +1 -1
  218. package/dist/components/Logo.cjs.js +1 -1
  219. package/dist/components/Logo.es.js +1 -1
  220. package/dist/components/LogsDataList.cjs.js +4 -2
  221. package/dist/components/LogsDataList.cjs.js.map +1 -1
  222. package/dist/components/LogsDataList.es.js +4 -2
  223. package/dist/components/LogsDataList.es.js.map +1 -1
  224. package/dist/components/MainContent.cjs.js +1 -1
  225. package/dist/components/MainContent.es.js +1 -1
  226. package/dist/components/MainHeader.cjs.js +1 -1
  227. package/dist/components/MainHeader.es.js +1 -1
  228. package/dist/components/MainSidebar.cjs.js +11 -836
  229. package/dist/components/MainSidebar.cjs.js.map +1 -1
  230. package/dist/components/MainSidebar.es.js +1 -830
  231. package/dist/components/MainSidebar.es.js.map +1 -1
  232. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  233. package/dist/components/MarkdownRenderer.es.js +1 -1
  234. package/dist/components/Message.cjs.js +26 -0
  235. package/dist/components/Message.cjs.js.map +1 -0
  236. package/dist/components/Message.d.ts +2 -0
  237. package/dist/components/Message.es.js +19 -0
  238. package/dist/components/Message.es.js.map +1 -0
  239. package/dist/components/MessageScroller.cjs.js +1 -1
  240. package/dist/components/MessageScroller.es.js +1 -1
  241. package/dist/components/MetricsCard.cjs.js +1 -1
  242. package/dist/components/MetricsCard.es.js +1 -1
  243. package/dist/components/MetricsFlexGrid.cjs.js +1 -1
  244. package/dist/components/MetricsFlexGrid.es.js +1 -1
  245. package/dist/components/MetricsKpiCard.cjs.js +1 -1
  246. package/dist/components/MetricsKpiCard.es.js +1 -1
  247. package/dist/components/Notice.cjs.js +1 -1
  248. package/dist/components/Notice.es.js +1 -1
  249. package/dist/components/PageHeader.cjs.js +1 -1
  250. package/dist/components/PageHeader.es.js +1 -1
  251. package/dist/components/PageLayout.cjs.js +1 -1
  252. package/dist/components/PageLayout.es.js +1 -1
  253. package/dist/components/PendingIndicator.cjs.js +1 -1
  254. package/dist/components/PendingIndicator.es.js +1 -1
  255. package/dist/components/PermissionDenied.cjs.js +1 -1
  256. package/dist/components/PermissionDenied.es.js +1 -1
  257. package/dist/components/Popover.cjs.js +1 -1
  258. package/dist/components/Popover.es.js +1 -1
  259. package/dist/components/PrevNextNav.cjs.js +2 -2
  260. package/dist/components/PrevNextNav.es.js +2 -2
  261. package/dist/components/PropertyFilter.cjs.js +5 -5
  262. package/dist/components/PropertyFilter.es.js +6 -6
  263. package/dist/components/PullRequestIcon.cjs.js +21 -0
  264. package/dist/components/PullRequestIcon.cjs.js.map +1 -0
  265. package/dist/components/PullRequestIcon.d.ts +2 -0
  266. package/dist/components/PullRequestIcon.es.js +17 -0
  267. package/dist/components/PullRequestIcon.es.js.map +1 -0
  268. package/dist/components/RadioGroup.cjs.js +1 -1
  269. package/dist/components/RadioGroup.es.js +1 -1
  270. package/dist/components/RuleBuilder.cjs.js +4 -4
  271. package/dist/components/RuleBuilder.es.js +4 -4
  272. package/dist/components/SankeyChart.cjs.js +1 -1
  273. package/dist/components/SankeyChart.es.js +1 -1
  274. package/dist/components/ScatterPlotChart.cjs.js +2 -2
  275. package/dist/components/ScatterPlotChart.es.js +2 -2
  276. package/dist/components/ScrollArea.cjs.js +1 -1
  277. package/dist/components/ScrollArea.es.js +1 -1
  278. package/dist/components/Section.cjs.js +1 -1
  279. package/dist/components/Section.es.js +1 -1
  280. package/dist/components/SectionCard.cjs.js +1 -1
  281. package/dist/components/SectionCard.es.js +1 -1
  282. package/dist/components/Sections.cjs.js +1 -1
  283. package/dist/components/Sections.es.js +1 -1
  284. package/dist/components/Select.cjs.js +1 -1
  285. package/dist/components/Select.es.js +1 -1
  286. package/dist/components/SessionExpired.cjs.js +1 -1
  287. package/dist/components/SessionExpired.es.js +1 -1
  288. package/dist/components/SettingsLayout.cjs.js +1 -1
  289. package/dist/components/SettingsLayout.es.js +1 -1
  290. package/dist/components/SettingsRow.cjs.js +1 -1
  291. package/dist/components/SettingsRow.es.js +1 -1
  292. package/dist/components/Shimmer.cjs.js +1 -1
  293. package/dist/components/Shimmer.es.js +1 -1
  294. package/dist/components/SideDialog.cjs.js +6 -6
  295. package/dist/components/SideDialog.es.js +6 -6
  296. package/dist/components/Skeleton.cjs.js +1 -1
  297. package/dist/components/Skeleton.es.js +1 -1
  298. package/dist/components/Slider.cjs.js +1 -1
  299. package/dist/components/Slider.es.js +1 -1
  300. package/dist/components/Spinner.cjs.js +1 -1
  301. package/dist/components/Spinner.es.js +1 -1
  302. package/dist/components/StatusIndicators.cjs.js +144 -0
  303. package/dist/components/StatusIndicators.cjs.js.map +1 -0
  304. package/dist/components/StatusIndicators.d.ts +2 -0
  305. package/dist/components/StatusIndicators.es.js +137 -0
  306. package/dist/components/StatusIndicators.es.js.map +1 -0
  307. package/dist/components/Steps.cjs.js +2 -2
  308. package/dist/components/Steps.es.js +2 -2
  309. package/dist/components/Switch.cjs.js +1 -1
  310. package/dist/components/Switch.es.js +1 -1
  311. package/dist/components/Table.cjs.js +2 -2
  312. package/dist/components/Table.es.js +2 -2
  313. package/dist/components/Tabs.cjs.js +3 -3
  314. package/dist/components/Tabs.es.js +3 -3
  315. package/dist/components/Text.cjs.js +1 -1
  316. package/dist/components/Text.es.js +1 -1
  317. package/dist/components/Textarea.cjs.js +1 -1
  318. package/dist/components/Textarea.es.js +1 -1
  319. package/dist/components/ThemeToggle.cjs.js +1 -1
  320. package/dist/components/ThemeToggle.es.js +1 -1
  321. package/dist/components/ThreadList.cjs.js +3 -3
  322. package/dist/components/ThreadList.es.js +3 -3
  323. package/dist/components/ThreadRail.cjs.js +1 -1
  324. package/dist/components/ThreadRail.es.js +1 -1
  325. package/dist/components/Toaster.cjs.js +1 -1
  326. package/dist/components/Toaster.es.js +1 -1
  327. package/dist/components/TokenBudget.cjs.js +1 -1
  328. package/dist/components/TokenBudget.es.js +1 -1
  329. package/dist/components/Tooltip.cjs.js +1 -1
  330. package/dist/components/Tooltip.es.js +1 -1
  331. package/dist/components/Tree.cjs.js +2 -2
  332. package/dist/components/Tree.es.js +2 -2
  333. package/dist/components/Truncate.cjs.js +4 -4
  334. package/dist/components/Truncate.es.js +4 -4
  335. package/dist/components/Txt.cjs.js +1 -1
  336. package/dist/components/Txt.es.js +1 -1
  337. package/dist/components/Workflow.cjs.js +675 -364
  338. package/dist/components/Workflow.cjs.js.map +1 -1
  339. package/dist/components/Workflow.es.js +679 -366
  340. package/dist/components/Workflow.es.js.map +1 -1
  341. package/dist/components/ai/ask-user.cjs.js +1 -1
  342. package/dist/components/ai/ask-user.es.js +1 -1
  343. package/dist/components/ai/chat-event.cjs.js +42 -0
  344. package/dist/components/ai/chat-event.cjs.js.map +1 -0
  345. package/dist/components/ai/chat-event.d.ts +2 -0
  346. package/dist/components/ai/chat-event.es.js +36 -0
  347. package/dist/components/ai/chat-event.es.js.map +1 -0
  348. package/dist/components/ai/plan.cjs.js +5 -5
  349. package/dist/components/ai/plan.es.js +5 -5
  350. package/dist/components/ai/task-list.cjs.js +4 -4
  351. package/dist/components/ai/task-list.es.js +4 -4
  352. package/dist/components/ai/tool-approval.cjs.js +11 -0
  353. package/dist/components/ai/tool-approval.cjs.js.map +1 -0
  354. package/dist/components/ai/tool-approval.d.ts +2 -0
  355. package/dist/components/ai/tool-approval.es.js +2 -0
  356. package/dist/components/ai/tool-approval.es.js.map +1 -0
  357. package/dist/components/ai/tool-call.cjs.js +46 -6
  358. package/dist/components/ai/tool-call.cjs.js.map +1 -1
  359. package/dist/components/ai/tool-call.es.js +46 -9
  360. package/dist/components/ai/tool-call.es.js.map +1 -1
  361. package/dist/composer-CocKItIW.js +148 -0
  362. package/dist/composer-CocKItIW.js.map +1 -0
  363. package/dist/composer-V_EBklyt.cjs +156 -0
  364. package/dist/composer-V_EBklyt.cjs.map +1 -0
  365. package/dist/composer.css +207 -0
  366. package/dist/copy-button-BBCLrGJB.js +36 -0
  367. package/dist/copy-button-BBCLrGJB.js.map +1 -0
  368. package/dist/copy-button-Clv2tQeH.cjs +38 -0
  369. package/dist/copy-button-Clv2tQeH.cjs.map +1 -0
  370. package/dist/dashboard-card-a6jDCcvz.js +9 -0
  371. package/dist/dashboard-card-a6jDCcvz.js.map +1 -0
  372. package/dist/dashboard-card-zx6leZwS.cjs +11 -0
  373. package/dist/dashboard-card-zx6leZwS.cjs.map +1 -0
  374. package/dist/data-code-section-AstkW2b3.js +348 -0
  375. package/dist/data-code-section-AstkW2b3.js.map +1 -0
  376. package/dist/data-code-section-CKb8P3pZ.cjs +350 -0
  377. package/dist/data-code-section-CKb8P3pZ.cjs.map +1 -0
  378. package/dist/data-keys-and-values-CDhHx4Tc.cjs +124 -0
  379. package/dist/data-keys-and-values-CDhHx4Tc.cjs.map +1 -0
  380. package/dist/data-keys-and-values-DNqDDNb0.js +122 -0
  381. package/dist/data-keys-and-values-DNqDDNb0.js.map +1 -0
  382. package/dist/data-list-CIUOCtR5.js +179 -0
  383. package/dist/data-list-CIUOCtR5.js.map +1 -0
  384. package/dist/data-list-DjSl3F2g.cjs +183 -0
  385. package/dist/data-list-DjSl3F2g.cjs.map +1 -0
  386. package/dist/data-list-skeleton--fY5L1tO.cjs +38 -0
  387. package/dist/data-list-skeleton--fY5L1tO.cjs.map +1 -0
  388. package/dist/data-list-skeleton-CL2Z3dY1.js +36 -0
  389. package/dist/data-list-skeleton-CL2Z3dY1.js.map +1 -0
  390. package/dist/data-list-top-BA2UVl0j.js +481 -0
  391. package/dist/data-list-top-BA2UVl0j.js.map +1 -0
  392. package/dist/data-list-top-B_RRVRf5.cjs +510 -0
  393. package/dist/data-list-top-B_RRVRf5.cjs.map +1 -0
  394. package/dist/data-panel-3TqqdlmK.js +220 -0
  395. package/dist/data-panel-3TqqdlmK.js.map +1 -0
  396. package/dist/data-panel-BmQlOkMA.cjs +241 -0
  397. package/dist/data-panel-BmQlOkMA.cjs.map +1 -0
  398. package/dist/data-panel-section-heading-BmSBR8A5.cjs +23 -0
  399. package/dist/data-panel-section-heading-BmSBR8A5.cjs.map +1 -0
  400. package/dist/data-panel-section-heading-DhzuleNL.js +21 -0
  401. package/dist/data-panel-section-heading-DhzuleNL.js.map +1 -0
  402. package/dist/date-picker-BpMCtOR1.js +48 -0
  403. package/dist/date-picker-BpMCtOR1.js.map +1 -0
  404. package/dist/date-picker-DXV1waxg.cjs +50 -0
  405. package/dist/date-picker-DXV1waxg.cjs.map +1 -0
  406. package/dist/date-time-range-picker-DG2DJpni.cjs +169 -0
  407. package/dist/date-time-range-picker-DG2DJpni.cjs.map +1 -0
  408. package/dist/date-time-range-picker-jOWChtnl.js +167 -0
  409. package/dist/date-time-range-picker-jOWChtnl.js.map +1 -0
  410. package/dist/dialog-BUcAVIly.js +242 -0
  411. package/dist/dialog-BUcAVIly.js.map +1 -0
  412. package/dist/dialog-h9MPZQgc.cjs +276 -0
  413. package/dist/dialog-h9MPZQgc.cjs.map +1 -0
  414. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +30 -14
  415. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js.map +1 -1
  416. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +31 -15
  417. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js.map +1 -1
  418. package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +21 -0
  419. package/dist/domains/chat/attachments/composer-attachment-list.cjs.js.map +1 -0
  420. package/dist/domains/chat/attachments/composer-attachment-list.d.ts +2 -0
  421. package/dist/domains/chat/attachments/composer-attachment-list.es.js +17 -0
  422. package/dist/domains/chat/attachments/composer-attachment-list.es.js.map +1 -0
  423. package/dist/domains/chat/attachments/composer-attachment.cjs.js +52 -0
  424. package/dist/domains/chat/attachments/composer-attachment.cjs.js.map +1 -0
  425. package/dist/domains/chat/attachments/composer-attachment.d.ts +2 -0
  426. package/dist/domains/chat/attachments/composer-attachment.es.js +48 -0
  427. package/dist/domains/chat/attachments/composer-attachment.es.js.map +1 -0
  428. package/dist/domains/chat/components/badge-wrapper.cjs.js +2 -2
  429. package/dist/domains/chat/components/badge-wrapper.es.js +2 -2
  430. package/dist/domains/chat/components/loading-badge.cjs.js +2 -2
  431. package/dist/domains/chat/components/loading-badge.es.js +2 -2
  432. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +4 -4
  433. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +4 -4
  434. package/dist/domains/chat/components/section-label.cjs.js +1 -1
  435. package/dist/domains/chat/components/section-label.es.js +1 -1
  436. package/dist/domains/chat/messages/notification-signal-notice-variant.cjs.js.map +1 -1
  437. package/dist/domains/chat/messages/notification-signal-notice-variant.es.js.map +1 -1
  438. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +8 -20
  439. package/dist/domains/chat/messages/notification-signal-notice.cjs.js.map +1 -1
  440. package/dist/domains/chat/messages/notification-signal-notice.es.js +9 -21
  441. package/dist/domains/chat/messages/notification-signal-notice.es.js.map +1 -1
  442. package/dist/domains/chat/messages/reasoning-content.cjs.js +14 -0
  443. package/dist/domains/chat/messages/reasoning-content.cjs.js.map +1 -0
  444. package/dist/domains/chat/messages/reasoning-content.d.ts +2 -0
  445. package/dist/domains/chat/messages/reasoning-content.es.js +10 -0
  446. package/dist/domains/chat/messages/reasoning-content.es.js.map +1 -0
  447. package/dist/domains/chat/messages/reasoning-streaming-line.cjs.js +3 -3
  448. package/dist/domains/chat/messages/reasoning-streaming-line.cjs.js.map +1 -1
  449. package/dist/domains/chat/messages/reasoning-streaming-line.es.js +3 -3
  450. package/dist/domains/chat/messages/reasoning-streaming-line.es.js.map +1 -1
  451. package/dist/domains/chat/messages/reasoning.cjs.js +30 -14
  452. package/dist/domains/chat/messages/reasoning.cjs.js.map +1 -1
  453. package/dist/domains/chat/messages/reasoning.es.js +32 -16
  454. package/dist/domains/chat/messages/reasoning.es.js.map +1 -1
  455. package/dist/domains/chat/messages/renderers/assistant-text-part-renderer.cjs.js.map +1 -1
  456. package/dist/domains/chat/messages/renderers/assistant-text-part-renderer.es.js.map +1 -1
  457. package/dist/domains/chat/messages/renderers/data-part-renderer.cjs.js.map +1 -1
  458. package/dist/domains/chat/messages/renderers/data-part-renderer.es.js.map +1 -1
  459. package/dist/domains/chat/messages/renderers/in-message-attachment.cjs.js +1 -1
  460. package/dist/domains/chat/messages/renderers/in-message-attachment.cjs.js.map +1 -1
  461. package/dist/domains/chat/messages/renderers/in-message-attachment.es.js +1 -1
  462. package/dist/domains/chat/messages/renderers/in-message-attachment.es.js.map +1 -1
  463. package/dist/domains/chat/messages/renderers/message-text.cjs.js +4 -4
  464. package/dist/domains/chat/messages/renderers/message-text.es.js +4 -4
  465. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +3 -8
  466. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js.map +1 -1
  467. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +3 -8
  468. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js.map +1 -1
  469. package/dist/domains/chat/messages/renderers/status-renderers.cjs.js +1 -1
  470. package/dist/domains/chat/messages/renderers/status-renderers.cjs.js.map +1 -1
  471. package/dist/domains/chat/messages/renderers/status-renderers.es.js +1 -1
  472. package/dist/domains/chat/messages/renderers/status-renderers.es.js.map +1 -1
  473. package/dist/domains/chat/messages/renderers/tool-part.cjs.js +12 -2
  474. package/dist/domains/chat/messages/renderers/tool-part.cjs.js.map +1 -1
  475. package/dist/domains/chat/messages/renderers/tool-part.es.js +12 -2
  476. package/dist/domains/chat/messages/renderers/tool-part.es.js.map +1 -1
  477. package/dist/domains/chat/messages/renderers/user-file-part-renderer.cjs.js +2 -1
  478. package/dist/domains/chat/messages/renderers/user-file-part-renderer.cjs.js.map +1 -1
  479. package/dist/domains/chat/messages/renderers/user-file-part-renderer.es.js +2 -1
  480. package/dist/domains/chat/messages/renderers/user-file-part-renderer.es.js.map +1 -1
  481. package/dist/domains/chat/messages/renderers/user-text-part-renderer.cjs.js.map +1 -1
  482. package/dist/domains/chat/messages/renderers/user-text-part-renderer.es.js.map +1 -1
  483. package/dist/domains/chat/messages/signal-badge.cjs.js +3 -19
  484. package/dist/domains/chat/messages/signal-badge.cjs.js.map +1 -1
  485. package/dist/domains/chat/messages/signal-badge.es.js +4 -20
  486. package/dist/domains/chat/messages/signal-badge.es.js.map +1 -1
  487. package/dist/domains/chat/messages/tripwire-notice.cjs.js +2 -2
  488. package/dist/domains/chat/messages/tripwire-notice.es.js +2 -2
  489. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  490. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  491. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +2 -2
  492. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
  493. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +3 -3
  494. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +3 -3
  495. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +2 -2
  496. package/dist/domains/chat/tools/badges/observation-renderer.es.js +2 -2
  497. package/dist/domains/chat/tools/badges/tool-approval-buttons.cjs.js +11 -24
  498. package/dist/domains/chat/tools/badges/tool-approval-buttons.cjs.js.map +1 -1
  499. package/dist/domains/chat/tools/badges/tool-approval-buttons.es.js +11 -24
  500. package/dist/domains/chat/tools/badges/tool-approval-buttons.es.js.map +1 -1
  501. package/dist/domains/chat/tools/tool-card-kind.cjs.js +2 -1
  502. package/dist/domains/chat/tools/tool-card-kind.cjs.js.map +1 -1
  503. package/dist/domains/chat/tools/tool-card-kind.es.js +2 -1
  504. package/dist/domains/chat/tools/tool-card-kind.es.js.map +1 -1
  505. package/dist/domains/chat/tools/tool-groups.cjs.js +1 -0
  506. package/dist/domains/chat/tools/tool-groups.cjs.js.map +1 -1
  507. package/dist/domains/chat/tools/tool-groups.es.js +1 -0
  508. package/dist/domains/chat/tools/tool-groups.es.js.map +1 -1
  509. package/dist/domains/logs/components/log-details-view.cjs.js +4 -4
  510. package/dist/domains/logs/components/log-details-view.es.js +4 -4
  511. package/dist/domains/logs/components/logs-error-content.cjs.js +3 -3
  512. package/dist/domains/logs/components/logs-error-content.es.js +3 -3
  513. package/dist/domains/logs/components/logs-layout.cjs.js +1 -1
  514. package/dist/domains/logs/components/logs-layout.es.js +1 -1
  515. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
  516. package/dist/domains/logs/components/logs-list-view.es.js +2 -2
  517. package/dist/domains/logs/components/logs-toolbar.cjs.js +2 -2
  518. package/dist/domains/logs/components/logs-toolbar.cjs.js.map +1 -1
  519. package/dist/domains/logs/components/logs-toolbar.es.js +2 -2
  520. package/dist/domains/logs/components/logs-toolbar.es.js.map +1 -1
  521. package/dist/domains/logs/components/no-logs-info.cjs.js +2 -2
  522. package/dist/domains/logs/components/no-logs-info.es.js +2 -2
  523. package/dist/domains/logs/hooks/use-logs-filter-persistence.cjs.js +1 -1
  524. package/dist/domains/logs/hooks/use-logs-filter-persistence.es.js +1 -1
  525. package/dist/domains/logs/hooks/use-logs.cjs.js.map +1 -1
  526. package/dist/domains/logs/hooks/use-logs.es.js.map +1 -1
  527. package/dist/domains/logs/log-filters.cjs.js.map +1 -1
  528. package/dist/domains/logs/log-filters.es.js.map +1 -1
  529. package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
  530. package/dist/domains/memory/components/flame-graph.es.js +1 -1
  531. package/dist/domains/memory/components/memory-studio-panel.cjs.js +3 -3
  532. package/dist/domains/memory/components/memory-studio-panel.es.js +3 -3
  533. package/dist/domains/memory/components/observation-detail-view.cjs.js +4 -4
  534. package/dist/domains/memory/components/observation-detail-view.es.js +4 -4
  535. package/dist/domains/memory/components/thread-context-progress.cjs.js +1 -1
  536. package/dist/domains/memory/components/thread-context-progress.es.js +1 -1
  537. package/dist/domains/metrics/components/bar-list.cjs.js +1 -1
  538. package/dist/domains/metrics/components/bar-list.es.js +1 -1
  539. package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
  540. package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
  541. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  542. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  543. package/dist/domains/metrics/components/kpi-card-view.cjs.js +1 -1
  544. package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
  545. package/dist/domains/metrics/components/latency-card-view.cjs.js +4 -4
  546. package/dist/domains/metrics/components/latency-card-view.es.js +4 -4
  547. package/dist/domains/metrics/components/memory-card-view.cjs.js +5 -5
  548. package/dist/domains/metrics/components/memory-card-view.es.js +5 -5
  549. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +2 -2
  550. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +2 -2
  551. package/dist/domains/metrics/components/scores-card-view.cjs.js +5 -5
  552. package/dist/domains/metrics/components/scores-card-view.es.js +5 -5
  553. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +5 -5
  554. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +5 -5
  555. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +4 -4
  556. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +4 -4
  557. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +5 -5
  558. package/dist/domains/metrics/components/traces-volume-card-view.es.js +5 -5
  559. package/dist/domains/traces/components/no-traces-info.cjs.js +1 -1
  560. package/dist/domains/traces/components/no-traces-info.es.js +1 -1
  561. package/dist/domains/traces/components/span-data-panel-view.cjs.js +42 -57
  562. package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
  563. package/dist/domains/traces/components/span-data-panel-view.es.js +42 -57
  564. package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
  565. package/dist/domains/traces/components/span-details-view.cjs.js +31 -8
  566. package/dist/domains/traces/components/span-details-view.cjs.js.map +1 -1
  567. package/dist/domains/traces/components/span-details-view.es.js +31 -8
  568. package/dist/domains/traces/components/span-details-view.es.js.map +1 -1
  569. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +38 -0
  570. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js.map +1 -0
  571. package/dist/domains/traces/components/span-payload/span-error-renderer.d.ts +2 -0
  572. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +34 -0
  573. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js.map +1 -0
  574. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +50 -0
  575. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js.map +1 -0
  576. package/dist/domains/traces/components/span-payload/span-input-renderers.d.ts +2 -0
  577. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +46 -0
  578. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js.map +1 -0
  579. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +97 -0
  580. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js.map +1 -0
  581. package/dist/domains/traces/components/span-payload/span-output-renderers.d.ts +2 -0
  582. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +93 -0
  583. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js.map +1 -0
  584. package/dist/domains/traces/components/span-payload/span-payload-attachment.cjs.js +34 -0
  585. package/dist/domains/traces/components/span-payload/span-payload-attachment.cjs.js.map +1 -0
  586. package/dist/domains/traces/components/span-payload/span-payload-attachment.d.ts +2 -0
  587. package/dist/domains/traces/components/span-payload/span-payload-attachment.es.js +30 -0
  588. package/dist/domains/traces/components/span-payload/span-payload-attachment.es.js.map +1 -0
  589. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +25 -0
  590. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js.map +1 -0
  591. package/dist/domains/traces/components/span-payload/span-payload-json.d.ts +2 -0
  592. package/dist/domains/traces/components/span-payload/span-payload-json.es.js +21 -0
  593. package/dist/domains/traces/components/span-payload/span-payload-json.es.js.map +1 -0
  594. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +79 -0
  595. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js.map +1 -0
  596. package/dist/domains/traces/components/span-payload/span-payload-messages.d.ts +2 -0
  597. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +75 -0
  598. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js.map +1 -0
  599. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +18 -0
  600. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js.map +1 -0
  601. package/dist/domains/traces/components/span-payload/span-payload-primitives.d.ts +2 -0
  602. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +6 -0
  603. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js.map +1 -0
  604. package/dist/domains/traces/components/span-payload/span-payload-registry.cjs.js +14 -0
  605. package/dist/domains/traces/components/span-payload/span-payload-registry.cjs.js.map +1 -0
  606. package/dist/domains/traces/components/span-payload/span-payload-registry.d.ts +2 -0
  607. package/dist/domains/traces/components/span-payload/span-payload-registry.es.js +9 -0
  608. package/dist/domains/traces/components/span-payload/span-payload-registry.es.js.map +1 -0
  609. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +73 -0
  610. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js.map +1 -0
  611. package/dist/domains/traces/components/span-payload/span-payload-section.d.ts +2 -0
  612. package/dist/domains/traces/components/span-payload/span-payload-section.es.js +69 -0
  613. package/dist/domains/traces/components/span-payload/span-payload-section.es.js.map +1 -0
  614. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +15 -0
  615. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js.map +1 -0
  616. package/dist/domains/traces/components/span-payload/span-payload-tool.d.ts +2 -0
  617. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +7 -0
  618. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js.map +1 -0
  619. package/dist/domains/traces/components/span-payload.cjs.js +20 -0
  620. package/dist/domains/traces/components/span-payload.cjs.js.map +1 -0
  621. package/dist/domains/traces/components/span-payload.d.ts +2 -0
  622. package/dist/domains/traces/components/span-payload.es.js +7 -0
  623. package/dist/domains/traces/components/span-payload.es.js.map +1 -0
  624. package/dist/domains/traces/components/span-rows.cjs.js +1 -55
  625. package/dist/domains/traces/components/span-rows.cjs.js.map +1 -1
  626. package/dist/domains/traces/components/span-rows.es.js +1 -55
  627. package/dist/domains/traces/components/span-rows.es.js.map +1 -1
  628. package/dist/domains/traces/components/span-summary-description.cjs.js +8 -44
  629. package/dist/domains/traces/components/span-summary-description.cjs.js.map +1 -1
  630. package/dist/domains/traces/components/span-summary-description.es.js +8 -44
  631. package/dist/domains/traces/components/span-summary-description.es.js.map +1 -1
  632. package/dist/domains/traces/components/span-timeline-row.cjs.js +139 -0
  633. package/dist/domains/traces/components/span-timeline-row.cjs.js.map +1 -0
  634. package/dist/domains/traces/components/span-timeline-row.d.ts +2 -0
  635. package/dist/domains/traces/components/span-timeline-row.es.js +135 -0
  636. package/dist/domains/traces/components/span-timeline-row.es.js.map +1 -0
  637. package/dist/domains/traces/components/span-timing-hover-card.cjs.js +3 -3
  638. package/dist/domains/traces/components/span-timing-hover-card.es.js +3 -3
  639. package/dist/domains/traces/components/span-token-usage.cjs.js +2 -2
  640. package/dist/domains/traces/components/span-token-usage.es.js +2 -2
  641. package/dist/domains/traces/components/span-tree-row.cjs.js +3 -20
  642. package/dist/domains/traces/components/span-tree-row.cjs.js.map +1 -1
  643. package/dist/domains/traces/components/span-tree-row.es.js +3 -20
  644. package/dist/domains/traces/components/span-tree-row.es.js.map +1 -1
  645. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +7 -12
  646. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js.map +1 -1
  647. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +7 -12
  648. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js.map +1 -1
  649. package/dist/domains/traces/components/thread-trace/thread-trace-list.cjs.js +1 -1
  650. package/dist/domains/traces/components/thread-trace/thread-trace-list.es.js +1 -1
  651. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +1 -1
  652. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +1 -1
  653. package/dist/domains/traces/components/thread-trace/thread-trace-rail.cjs.js +2 -2
  654. package/dist/domains/traces/components/thread-trace/thread-trace-rail.es.js +2 -2
  655. package/dist/domains/traces/components/thread-trace/thread-trace-root.cjs.js +1 -1
  656. package/dist/domains/traces/components/thread-trace/thread-trace-root.es.js +1 -1
  657. package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js +1 -1
  658. package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js +1 -1
  659. package/dist/domains/traces/components/thread-trace/thread-trace-span-panel.cjs.js +1 -1
  660. package/dist/domains/traces/components/thread-trace/thread-trace-span-panel.es.js +1 -1
  661. package/dist/domains/traces/components/thread-trace/thread-trace-spans-tab.cjs.js +3 -3
  662. package/dist/domains/traces/components/thread-trace/thread-trace-spans-tab.es.js +3 -3
  663. package/dist/domains/traces/components/timeline-name-col.cjs.js +51 -22
  664. package/dist/domains/traces/components/timeline-name-col.cjs.js.map +1 -1
  665. package/dist/domains/traces/components/timeline-name-col.es.js +51 -22
  666. package/dist/domains/traces/components/timeline-name-col.es.js.map +1 -1
  667. package/dist/domains/traces/components/timeline-structure-sign.cjs.js +2 -2
  668. package/dist/domains/traces/components/timeline-structure-sign.cjs.js.map +1 -1
  669. package/dist/domains/traces/components/timeline-structure-sign.es.js +2 -2
  670. package/dist/domains/traces/components/timeline-structure-sign.es.js.map +1 -1
  671. package/dist/domains/traces/components/timeline-timing-col.cjs.js +2 -2
  672. package/dist/domains/traces/components/timeline-timing-col.es.js +2 -2
  673. package/dist/domains/traces/components/trace-columns-menu.cjs.js +6 -6
  674. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  675. package/dist/domains/traces/components/trace-columns-menu.es.js +6 -6
  676. package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
  677. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +150 -146
  678. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  679. package/dist/domains/traces/components/trace-data-panel-view.es.js +151 -147
  680. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  681. package/dist/domains/traces/components/trace-details-view.cjs.js.map +1 -1
  682. package/dist/domains/traces/components/trace-details-view.es.js.map +1 -1
  683. package/dist/domains/traces/components/trace-id-button.cjs.js +2 -2
  684. package/dist/domains/traces/components/trace-id-button.es.js +2 -2
  685. package/dist/domains/traces/components/trace-keys-and-values.cjs.js +2 -2
  686. package/dist/domains/traces/components/trace-keys-and-values.es.js +2 -2
  687. package/dist/domains/traces/components/trace-span-timeline.cjs.js +10 -16
  688. package/dist/domains/traces/components/trace-span-timeline.cjs.js.map +1 -1
  689. package/dist/domains/traces/components/trace-span-timeline.es.js +10 -16
  690. package/dist/domains/traces/components/trace-span-timeline.es.js.map +1 -1
  691. package/dist/domains/traces/components/trace-span-tree.cjs.js +29 -18
  692. package/dist/domains/traces/components/trace-span-tree.cjs.js.map +1 -1
  693. package/dist/domains/traces/components/trace-span-tree.es.js +29 -18
  694. package/dist/domains/traces/components/trace-span-tree.es.js.map +1 -1
  695. package/dist/domains/traces/components/trace-status-value.cjs.js +1 -1
  696. package/dist/domains/traces/components/trace-status-value.es.js +1 -1
  697. package/dist/domains/traces/components/trace-summary-description.cjs.js +21 -75
  698. package/dist/domains/traces/components/trace-summary-description.cjs.js.map +1 -1
  699. package/dist/domains/traces/components/trace-summary-description.es.js +22 -76
  700. package/dist/domains/traces/components/trace-summary-description.es.js.map +1 -1
  701. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +74 -0
  702. package/dist/domains/traces/components/trace-time-range-chip.cjs.js.map +1 -0
  703. package/dist/domains/traces/components/trace-time-range-chip.d.ts +2 -0
  704. package/dist/domains/traces/components/trace-time-range-chip.es.js +67 -0
  705. package/dist/domains/traces/components/trace-time-range-chip.es.js.map +1 -0
  706. package/dist/domains/traces/components/traces-error-content.cjs.js +2 -2
  707. package/dist/domains/traces/components/traces-error-content.es.js +2 -2
  708. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +2 -2
  709. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +2 -2
  710. package/dist/domains/traces/components/traces-list-view-adapter.cjs.js +24 -0
  711. package/dist/domains/traces/components/traces-list-view-adapter.cjs.js.map +1 -0
  712. package/dist/domains/traces/components/traces-list-view-adapter.d.ts +2 -0
  713. package/dist/domains/traces/components/traces-list-view-adapter.es.js +20 -0
  714. package/dist/domains/traces/components/traces-list-view-adapter.es.js.map +1 -0
  715. package/dist/domains/traces/components/traces-list-view.cjs.js +4 -4
  716. package/dist/domains/traces/components/traces-list-view.es.js +4 -4
  717. package/dist/domains/traces/components.cjs.js +14 -10
  718. package/dist/domains/traces/components.cjs.js.map +1 -1
  719. package/dist/domains/traces/components.es.js +7 -5
  720. package/dist/domains/traces/components.es.js.map +1 -1
  721. package/dist/domains/traces/hooks/use-download-trace-json.cjs.js +1 -1
  722. package/dist/domains/traces/hooks/use-download-trace-json.es.js +1 -1
  723. package/dist/domains/traces/hooks/use-span-detail.cjs.js.map +1 -1
  724. package/dist/domains/traces/hooks/use-span-detail.es.js.map +1 -1
  725. package/dist/domains/traces/hooks/use-trace-query.cjs.js +90 -0
  726. package/dist/domains/traces/hooks/use-trace-query.cjs.js.map +1 -0
  727. package/dist/domains/traces/hooks/use-trace-query.d.ts +2 -0
  728. package/dist/domains/traces/hooks/use-trace-query.es.js +83 -0
  729. package/dist/domains/traces/hooks/use-trace-query.es.js.map +1 -0
  730. package/dist/domains/traces/hooks/use-trace-span-navigation.cjs.js.map +1 -1
  731. package/dist/domains/traces/hooks/use-trace-span-navigation.es.js.map +1 -1
  732. package/dist/domains/traces/hooks/use-trace-spans.cjs.js +2 -1
  733. package/dist/domains/traces/hooks/use-trace-spans.cjs.js.map +1 -1
  734. package/dist/domains/traces/hooks/use-trace-spans.es.js +3 -2
  735. package/dist/domains/traces/hooks/use-trace-spans.es.js.map +1 -1
  736. package/dist/domains/traces/hooks/use-trace-url-state.cjs.js +21 -2
  737. package/dist/domains/traces/hooks/use-trace-url-state.cjs.js.map +1 -1
  738. package/dist/domains/traces/hooks/use-trace-url-state.es.js +21 -2
  739. package/dist/domains/traces/hooks/use-trace-url-state.es.js.map +1 -1
  740. package/dist/domains/traces/hooks/use-traces.cjs.js +9 -7
  741. package/dist/domains/traces/hooks/use-traces.cjs.js.map +1 -1
  742. package/dist/domains/traces/hooks/use-traces.es.js +9 -7
  743. package/dist/domains/traces/hooks/use-traces.es.js.map +1 -1
  744. package/dist/domains/traces/hooks.cjs.js +2 -0
  745. package/dist/domains/traces/hooks.cjs.js.map +1 -1
  746. package/dist/domains/traces/hooks.es.js +1 -0
  747. package/dist/domains/traces/hooks.es.js.map +1 -1
  748. package/dist/domains/traces/trace-filters.cjs.js +117 -87
  749. package/dist/domains/traces/trace-filters.cjs.js.map +1 -1
  750. package/dist/domains/traces/trace-filters.es.js +112 -86
  751. package/dist/domains/traces/trace-filters.es.js.map +1 -1
  752. package/dist/domains/traces/trace-query-filters.cjs.js +66 -0
  753. package/dist/domains/traces/trace-query-filters.cjs.js.map +1 -0
  754. package/dist/domains/traces/trace-query-filters.d.ts +2 -0
  755. package/dist/domains/traces/trace-query-filters.es.js +61 -0
  756. package/dist/domains/traces/trace-query-filters.es.js.map +1 -0
  757. package/dist/domains/traces/types.cjs.js.map +1 -1
  758. package/dist/domains/traces/types.es.js.map +1 -1
  759. package/dist/domains/traces/utils/filter-spans-keeping-ancestors.cjs.js.map +1 -1
  760. package/dist/domains/traces/utils/filter-spans-keeping-ancestors.es.js.map +1 -1
  761. package/dist/domains/traces/utils/span-utils.cjs.js.map +1 -1
  762. package/dist/domains/traces/utils/span-utils.es.js.map +1 -1
  763. package/dist/domains/traces/utils/to-searchable-spans.cjs.js.map +1 -1
  764. package/dist/domains/traces/utils/to-searchable-spans.es.js.map +1 -1
  765. package/dist/domains/traces.cjs.js +25 -12
  766. package/dist/domains/traces.cjs.js.map +1 -1
  767. package/dist/domains/traces.es.js +10 -6
  768. package/dist/domains/traces.es.js.map +1 -1
  769. package/dist/drawer-B2GbH_X2.js +327 -0
  770. package/dist/drawer-B2GbH_X2.js.map +1 -0
  771. package/dist/drawer-BZ-HuIEI.cjs +367 -0
  772. package/dist/drawer-BZ-HuIEI.cjs.map +1 -0
  773. package/dist/dropdown-menu-BYns1-0U.js +206 -0
  774. package/dist/dropdown-menu-BYns1-0U.js.map +1 -0
  775. package/dist/dropdown-menu-CP2LVgOe.cjs +227 -0
  776. package/dist/dropdown-menu-CP2LVgOe.cjs.map +1 -0
  777. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +3 -3
  778. package/dist/ee/signals/components/entity-index-compact-grid.es.js +3 -3
  779. package/dist/ee/signals/components/entity-index-list.cjs.js +4 -2
  780. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  781. package/dist/ee/signals/components/entity-index-list.es.js +4 -2
  782. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  783. package/dist/ee/signals/components/signals-empty-state.cjs.js +2 -2
  784. package/dist/ee/signals/components/signals-empty-state.es.js +2 -2
  785. package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js +2 -2
  786. package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js +2 -2
  787. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +10 -9
  788. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  789. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +10 -9
  790. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  791. package/dist/ee/signals/examples-pager.cjs.js +1 -1
  792. package/dist/ee/signals/examples-pager.es.js +1 -1
  793. package/dist/ee/signals/flow-card.cjs.js +2 -2
  794. package/dist/ee/signals/flow-card.es.js +2 -2
  795. package/dist/ee/signals/noise-detail-panel.cjs.js +1 -1
  796. package/dist/ee/signals/noise-detail-panel.es.js +1 -1
  797. package/dist/ee/signals/sankey-signals.cjs.js +1 -1
  798. package/dist/ee/signals/sankey-signals.es.js +1 -1
  799. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +6 -6
  800. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +6 -6
  801. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +5 -5
  802. package/dist/ee/signals/settings/trace-signal-settings.es.js +5 -5
  803. package/dist/ee/signals/signal-delta-column.cjs.js +1 -1
  804. package/dist/ee/signals/signal-delta-column.es.js +1 -1
  805. package/dist/ee/signals/signal-lifelines.cjs.js +1 -1
  806. package/dist/ee/signals/signal-lifelines.es.js +1 -1
  807. package/dist/ee/signals/signals-error-state.cjs.js +1 -1
  808. package/dist/ee/signals/signals-error-state.es.js +1 -1
  809. package/dist/ee/signals/signals-loading-skeleton.cjs.js +1 -1
  810. package/dist/ee/signals/signals-loading-skeleton.es.js +1 -1
  811. package/dist/ee/signals/snapshot-timeline.cjs.js +1 -1
  812. package/dist/ee/signals/snapshot-timeline.es.js +1 -1
  813. package/dist/ee/signals/sortable-signal-headers.cjs.js +1 -1
  814. package/dist/ee/signals/sortable-signal-headers.es.js +1 -1
  815. package/dist/ee/signals/theme-detail-panel.cjs.js +2 -2
  816. package/dist/ee/signals/theme-detail-panel.es.js +2 -2
  817. package/dist/ee/signals/theme-filter-banner.cjs.js +1 -1
  818. package/dist/ee/signals/theme-filter-banner.es.js +1 -1
  819. package/dist/ee/signals/theme-trend-chart.cjs.js +1 -1
  820. package/dist/ee/signals/theme-trend-chart.es.js +1 -1
  821. package/dist/ee/signals/trace-insight-view.cjs.js +1 -1
  822. package/dist/ee/signals/trace-insight-view.es.js +1 -1
  823. package/dist/ee/signals/trace-intelligence-explainer.cjs.js +1 -1
  824. package/dist/ee/signals/trace-intelligence-explainer.es.js +1 -1
  825. package/dist/ee/signals/view-mode-tab.cjs.js +2 -2
  826. package/dist/ee/signals/view-mode-tab.es.js +2 -2
  827. package/dist/ee/topics/components/topic-trace-details-panel.cjs.js +1 -1
  828. package/dist/ee/topics/components/topic-trace-details-panel.es.js +1 -1
  829. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +3 -3
  830. package/dist/ee/topics/components/topic-trace-summary-list.es.js +3 -3
  831. package/dist/field-block-CygzGxNe.cjs +87 -0
  832. package/dist/field-block-CygzGxNe.cjs.map +1 -0
  833. package/dist/field-block-DtG78nn_.js +85 -0
  834. package/dist/field-block-DtG78nn_.js.map +1 -0
  835. package/dist/filter-bar-chip-BJOyhaA2.js +838 -0
  836. package/dist/filter-bar-chip-BJOyhaA2.js.map +1 -0
  837. package/dist/filter-bar-chip-CR_L2kMF.cjs +853 -0
  838. package/dist/filter-bar-chip-CR_L2kMF.cjs.map +1 -0
  839. package/dist/hooks/use-copy-to-clipboard.cjs.js +1 -1
  840. package/dist/hooks/use-copy-to-clipboard.es.js +1 -1
  841. package/dist/hooks/use-local-storage-state.cjs.js +49 -0
  842. package/dist/hooks/use-local-storage-state.cjs.js.map +1 -1
  843. package/dist/hooks/use-local-storage-state.es.js +50 -2
  844. package/dist/hooks/use-local-storage-state.es.js.map +1 -1
  845. package/dist/horizontal-bars-DIPivfLF.js +139 -0
  846. package/dist/horizontal-bars-DIPivfLF.js.map +1 -0
  847. package/dist/horizontal-bars-OAOC9rdk.cjs +141 -0
  848. package/dist/horizontal-bars-OAOC9rdk.cjs.map +1 -0
  849. package/dist/hover-card-CM9fAKvc.js +68 -0
  850. package/dist/hover-card-CM9fAKvc.js.map +1 -0
  851. package/dist/hover-card-Cc3NmZ4K.cjs +91 -0
  852. package/dist/hover-card-Cc3NmZ4K.cjs.map +1 -0
  853. package/dist/icons/Icon.cjs.js +1 -1
  854. package/dist/icons/Icon.es.js +1 -1
  855. package/dist/index-BXfwV6wk.js +45 -0
  856. package/dist/index-BXfwV6wk.js.map +1 -0
  857. package/dist/index-Bk0d-AeX.cjs +47 -0
  858. package/dist/index-Bk0d-AeX.cjs.map +1 -0
  859. package/dist/input-BCrGOM5G.cjs +85 -0
  860. package/dist/input-BCrGOM5G.cjs.map +1 -0
  861. package/dist/input-DtmX7xH7.js +64 -0
  862. package/dist/input-DtmX7xH7.js.map +1 -0
  863. package/dist/input-group-BU0Y5c26.cjs +242 -0
  864. package/dist/input-group-BU0Y5c26.cjs.map +1 -0
  865. package/dist/input-group-DoaB_TKp.js +216 -0
  866. package/dist/input-group-DoaB_TKp.js.map +1 -0
  867. package/dist/kbd-D5WtLU30.cjs +34 -0
  868. package/dist/kbd-D5WtLU30.cjs.map +1 -0
  869. package/dist/kbd-DB7Dmf_Y.js +32 -0
  870. package/dist/kbd-DB7Dmf_Y.js.map +1 -0
  871. package/dist/label-BBPnGszd.js +13 -0
  872. package/dist/label-BBPnGszd.js.map +1 -0
  873. package/dist/label-DzQOqIjw.cjs +34 -0
  874. package/dist/label-DzQOqIjw.cjs.map +1 -0
  875. package/dist/layout/tabbed-container.cjs.js +8 -8
  876. package/dist/layout/tabbed-container.es.js +8 -8
  877. package/dist/list-search-BnVN4tCC.cjs +73 -0
  878. package/dist/list-search-BnVN4tCC.cjs.map +1 -0
  879. package/dist/list-search-DQoVumEX.js +71 -0
  880. package/dist/list-search-DQoVumEX.js.map +1 -0
  881. package/dist/logs-data-list-Bd2_UAY0.js +79 -0
  882. package/dist/logs-data-list-Bd2_UAY0.js.map +1 -0
  883. package/dist/logs-data-list-DsYct8cw.cjs +81 -0
  884. package/dist/logs-data-list-DsYct8cw.cjs.map +1 -0
  885. package/dist/main-sidebar-CbjWru0s.js +830 -0
  886. package/dist/main-sidebar-CbjWru0s.js.map +1 -0
  887. package/dist/main-sidebar-Dff0E73N.cjs +848 -0
  888. package/dist/main-sidebar-Dff0E73N.cjs.map +1 -0
  889. package/dist/markdown-renderer-BSdZmxVF.js +408 -0
  890. package/dist/markdown-renderer-BSdZmxVF.js.map +1 -0
  891. package/dist/markdown-renderer-Dmz44_t7.cjs +410 -0
  892. package/dist/markdown-renderer-Dmz44_t7.cjs.map +1 -0
  893. package/dist/message-BUXs9JiZ.js +62 -0
  894. package/dist/message-BUXs9JiZ.js.map +1 -0
  895. package/dist/message-C5ND0pCv.cjs +66 -0
  896. package/dist/message-C5ND0pCv.cjs.map +1 -0
  897. package/dist/message-scroller-BVPLQUbE.cjs +857 -0
  898. package/dist/message-scroller-BVPLQUbE.cjs.map +1 -0
  899. package/dist/message-scroller-D9amU0Yo.js +831 -0
  900. package/dist/message-scroller-D9amU0Yo.js.map +1 -0
  901. package/dist/metrics-card-DBUsAdmf.js +93 -0
  902. package/dist/metrics-card-DBUsAdmf.js.map +1 -0
  903. package/dist/metrics-card-DpofvZg6.cjs +95 -0
  904. package/dist/metrics-card-DpofvZg6.cjs.map +1 -0
  905. package/dist/metrics-kpi-card-BPrFp1TR.cjs +79 -0
  906. package/dist/metrics-kpi-card-BPrFp1TR.cjs.map +1 -0
  907. package/dist/metrics-kpi-card-pmhPUTXh.js +77 -0
  908. package/dist/metrics-kpi-card-pmhPUTXh.js.map +1 -0
  909. package/dist/new/layout/app-shell.cjs.js +2 -12
  910. package/dist/new/layout/app-shell.cjs.js.map +1 -1
  911. package/dist/new/layout/app-shell.es.js +2 -12
  912. package/dist/new/layout/app-shell.es.js.map +1 -1
  913. package/dist/new/layout/page-header.cjs.js +1 -1
  914. package/dist/new/layout/page-header.es.js +1 -1
  915. package/dist/new/settings.cjs.js +5 -5
  916. package/dist/new/settings.es.js +5 -5
  917. package/dist/new/sidebar.cjs.js +460 -0
  918. package/dist/new/sidebar.cjs.js.map +1 -0
  919. package/dist/new/sidebar.d.ts +2 -0
  920. package/dist/new/sidebar.es.js +443 -0
  921. package/dist/new/sidebar.es.js.map +1 -0
  922. package/dist/no-data-page-layout-CvHNrd5V.cjs +104 -0
  923. package/dist/no-data-page-layout-CvHNrd5V.cjs.map +1 -0
  924. package/dist/no-data-page-layout-DrvRnmH_.js +101 -0
  925. package/dist/no-data-page-layout-DrvRnmH_.js.map +1 -0
  926. package/dist/page-header-AH0Kk_7X.cjs +125 -0
  927. package/dist/page-header-AH0Kk_7X.cjs.map +1 -0
  928. package/dist/page-header-CyhgAInp.js +123 -0
  929. package/dist/page-header-CyhgAInp.js.map +1 -0
  930. package/dist/popover-DJ0zMfQ2.js +97 -0
  931. package/dist/popover-DJ0zMfQ2.js.map +1 -0
  932. package/dist/popover-DUVKoksf.cjs +121 -0
  933. package/dist/popover-DUVKoksf.cjs.map +1 -0
  934. package/dist/primitives/menu-item.cjs.js +2 -2
  935. package/dist/primitives/menu-item.es.js +2 -2
  936. package/dist/primitives/resize-handle-indicator.cjs.js +2 -2
  937. package/dist/primitives/resize-handle-indicator.es.js +2 -2
  938. package/dist/primitives/trigger-button.cjs.js +2 -2
  939. package/dist/primitives/trigger-button.es.js +2 -2
  940. package/dist/property-filter-applied-DAb2fYrC.cjs +348 -0
  941. package/dist/property-filter-applied-DAb2fYrC.cjs.map +1 -0
  942. package/dist/property-filter-applied-JrhwHYy8.js +344 -0
  943. package/dist/property-filter-applied-JrhwHYy8.js.map +1 -0
  944. package/dist/resize/collapsible-panel.cjs.js +3 -3
  945. package/dist/resize/collapsible-panel.es.js +3 -3
  946. package/dist/resize/panel-drawer.cjs.js +2 -2
  947. package/dist/resize/panel-drawer.es.js +2 -2
  948. package/dist/resize/panel-group.cjs.js +1 -1
  949. package/dist/resize/panel-group.es.js +1 -1
  950. package/dist/resize/panel-icon-button.cjs.js +1 -1
  951. package/dist/resize/panel-icon-button.es.js +1 -1
  952. package/dist/resize/separator.cjs.js +5 -3
  953. package/dist/resize/separator.cjs.js.map +1 -1
  954. package/dist/resize/separator.es.js +5 -3
  955. package/dist/resize/separator.es.js.map +1 -1
  956. package/dist/sankey-chart-C-H3aTGD.cjs +926 -0
  957. package/dist/sankey-chart-C-H3aTGD.cjs.map +1 -0
  958. package/dist/sankey-chart-Cy2eAal0.js +916 -0
  959. package/dist/sankey-chart-Cy2eAal0.js.map +1 -0
  960. package/dist/scroll-area-CVqPmOtx.cjs +245 -0
  961. package/dist/scroll-area-CVqPmOtx.cjs.map +1 -0
  962. package/dist/scroll-area-DmygE5DR.js +223 -0
  963. package/dist/scroll-area-DmygE5DR.js.map +1 -0
  964. package/dist/search-field-block-BC_iZ1gM.js +119 -0
  965. package/dist/search-field-block-BC_iZ1gM.js.map +1 -0
  966. package/dist/search-field-block-DOVzCqW2.cjs +121 -0
  967. package/dist/search-field-block-DOVzCqW2.cjs.map +1 -0
  968. package/dist/section-CqNErNly.js +111 -0
  969. package/dist/section-CqNErNly.js.map +1 -0
  970. package/dist/section-DIpI_2jD.cjs +115 -0
  971. package/dist/section-DIpI_2jD.cjs.map +1 -0
  972. package/dist/select-BX-NDhBK.js +133 -0
  973. package/dist/select-BX-NDhBK.js.map +1 -0
  974. package/dist/select-DIOGGfVZ.cjs +159 -0
  975. package/dist/select-DIOGGfVZ.cjs.map +1 -0
  976. package/dist/select-field-block-B-6QQC7t.js +48 -0
  977. package/dist/select-field-block-B-6QQC7t.js.map +1 -0
  978. package/dist/select-field-block-DAf3Soge.cjs +50 -0
  979. package/dist/select-field-block-DAf3Soge.cjs.map +1 -0
  980. package/dist/settings-container-B61AM2uQ.cjs +29 -0
  981. package/dist/settings-container-B61AM2uQ.cjs.map +1 -0
  982. package/dist/settings-container-XeohBaUd.js +26 -0
  983. package/dist/settings-container-XeohBaUd.js.map +1 -0
  984. package/dist/settings-layout-0LmqNUIq.js +55 -0
  985. package/dist/settings-layout-0LmqNUIq.js.map +1 -0
  986. package/dist/settings-layout-e0UQtxvw.cjs +57 -0
  987. package/dist/settings-layout-e0UQtxvw.cjs.map +1 -0
  988. package/dist/settings-row-BjlCkP3o.cjs +92 -0
  989. package/dist/settings-row-BjlCkP3o.cjs.map +1 -0
  990. package/dist/settings-row-CxdGvdwb.js +89 -0
  991. package/dist/settings-row-CxdGvdwb.js.map +1 -0
  992. package/dist/shimmer-R2LMMF5x.js +23 -0
  993. package/dist/shimmer-R2LMMF5x.js.map +1 -0
  994. package/dist/shimmer-erjPu8YL.cjs +25 -0
  995. package/dist/shimmer-erjPu8YL.cjs.map +1 -0
  996. package/dist/skeleton-B3O2CoYQ.cjs +25 -0
  997. package/dist/skeleton-B3O2CoYQ.cjs.map +1 -0
  998. package/dist/skeleton-D-kHfsjd.js +23 -0
  999. package/dist/skeleton-D-kHfsjd.js.map +1 -0
  1000. package/dist/slider-CP5EfpIm.js +95 -0
  1001. package/dist/slider-CP5EfpIm.js.map +1 -0
  1002. package/dist/slider-CTJiezAe.cjs +97 -0
  1003. package/dist/slider-CTJiezAe.cjs.map +1 -0
  1004. package/dist/spacings-2GNiO8Oq.js +171 -0
  1005. package/dist/spacings-2GNiO8Oq.js.map +1 -0
  1006. package/dist/spacings-DJ7CTlfI.cjs +179 -0
  1007. package/dist/spacings-DJ7CTlfI.cjs.map +1 -0
  1008. package/dist/span-payload-primitives-Bc21pM0m.cjs +75 -0
  1009. package/dist/span-payload-primitives-Bc21pM0m.cjs.map +1 -0
  1010. package/dist/span-payload-primitives-DXg3l6FW.js +68 -0
  1011. package/dist/span-payload-primitives-DXg3l6FW.js.map +1 -0
  1012. package/dist/spinner-DcDI1lhS.cjs +53 -0
  1013. package/dist/spinner-DcDI1lhS.cjs.map +1 -0
  1014. package/dist/spinner-RdQ_iJAG.js +51 -0
  1015. package/dist/spinner-RdQ_iJAG.js.map +1 -0
  1016. package/dist/src/domains/chat/attachments/attachment-preview-dialog.d.ts +2 -10
  1017. package/dist/src/domains/chat/attachments/composer-attachment-list.d.ts +3 -0
  1018. package/dist/src/domains/chat/attachments/composer-attachment.d.ts +8 -0
  1019. package/dist/src/domains/chat/messages/notification-signal-notice-variant.d.ts +1 -2
  1020. package/dist/src/domains/chat/messages/reasoning-content.d.ts +3 -0
  1021. package/dist/src/domains/chat/messages/reasoning-streaming-line.d.ts +0 -5
  1022. package/dist/src/domains/chat/messages/reasoning.d.ts +2 -1
  1023. package/dist/src/domains/chat/messages/renderers/assistant-text-part-renderer.d.ts +1 -1
  1024. package/dist/src/domains/chat/messages/renderers/data-part-renderer.d.ts +1 -1
  1025. package/dist/src/domains/chat/messages/renderers/in-message-attachment.d.ts +0 -5
  1026. package/dist/src/domains/chat/messages/renderers/reasoning-part-renderer.d.ts +2 -14
  1027. package/dist/src/domains/chat/messages/renderers/status-renderers.d.ts +1 -1
  1028. package/dist/src/domains/chat/messages/renderers/tool-part.d.ts +3 -1
  1029. package/dist/src/domains/chat/messages/renderers/user-file-part-renderer.d.ts +1 -8
  1030. package/dist/src/domains/chat/messages/renderers/user-text-part-renderer.d.ts +1 -1
  1031. package/dist/src/domains/chat/stories/attachments.stories.d.ts +1 -0
  1032. package/dist/src/domains/chat/stories/composer-attachments.stories.d.ts +18 -0
  1033. package/dist/src/domains/chat/stories/reasoning.stories.d.ts +2 -1
  1034. package/dist/src/domains/chat/tools/tool-groups.d.ts +1 -1
  1035. package/dist/src/domains/logs/hooks/use-logs.d.ts +2 -1
  1036. package/dist/src/domains/logs/log-filters.d.ts +2 -1
  1037. package/dist/src/domains/metrics/hooks/use-active-resources-kpi-metrics.d.ts +6 -6
  1038. package/dist/src/domains/metrics/hooks/use-active-threads-kpi-metrics.d.ts +6 -6
  1039. package/dist/src/domains/metrics/hooks/use-agent-runs-kpi-metrics.d.ts +6 -6
  1040. package/dist/src/domains/traces/components/index.d.ts +2 -5
  1041. package/dist/src/domains/traces/components/span-data-panel-view.d.ts +1 -1
  1042. package/dist/src/domains/traces/components/span-details-view.d.ts +1 -1
  1043. package/dist/src/domains/traces/components/span-payload/index.d.ts +7 -0
  1044. package/dist/src/domains/traces/components/span-payload/span-error-renderer.d.ts +7 -0
  1045. package/dist/src/domains/traces/components/span-payload/span-input-renderers.d.ts +6 -0
  1046. package/dist/src/domains/traces/components/span-payload/span-output-renderers.d.ts +6 -0
  1047. package/dist/src/domains/traces/components/span-payload/span-payload-attachment.d.ts +3 -0
  1048. package/dist/src/domains/traces/components/span-payload/span-payload-json.d.ts +6 -0
  1049. package/dist/src/domains/traces/components/span-payload/span-payload-messages.d.ts +6 -0
  1050. package/dist/src/domains/traces/components/span-payload/span-payload-primitives.d.ts +22 -0
  1051. package/dist/src/domains/traces/components/span-payload/span-payload-registry.d.ts +31 -0
  1052. package/dist/src/domains/traces/components/span-payload/span-payload-section.d.ts +24 -0
  1053. package/dist/src/domains/traces/components/span-payload/span-payload-tool.d.ts +4 -0
  1054. package/dist/src/domains/traces/components/span-payload/span-payload.stories.d.ts +23 -0
  1055. package/dist/src/domains/traces/components/span-rows.d.ts +0 -8
  1056. package/dist/src/domains/traces/components/span-summary-description.d.ts +1 -2
  1057. package/dist/src/domains/traces/components/span-timeline-row.d.ts +10 -0
  1058. package/dist/src/domains/traces/components/span-tree-row.d.ts +5 -3
  1059. package/dist/src/domains/traces/components/thread-trace/thread-trace-details.d.ts +2 -4
  1060. package/dist/src/domains/traces/components/timeline-name-col.d.ts +6 -1
  1061. package/dist/src/domains/traces/components/trace-data-panel-view.d.ts +12 -6
  1062. package/dist/src/domains/traces/components/trace-details-view.d.ts +1 -1
  1063. package/dist/src/domains/traces/components/trace-span-timeline.d.ts +6 -5
  1064. package/dist/src/domains/traces/components/trace-span-tree.d.ts +2 -2
  1065. package/dist/src/domains/traces/components/trace-summary-description.d.ts +1 -2
  1066. package/dist/src/domains/traces/components/trace-time-range-chip.d.ts +17 -0
  1067. package/dist/src/domains/traces/components/traces-list-view-adapter.d.ts +3 -0
  1068. package/dist/src/domains/traces/hooks/index.d.ts +1 -0
  1069. package/dist/src/domains/traces/hooks/use-span-detail.d.ts +4 -7
  1070. package/dist/src/domains/traces/hooks/use-trace-query.d.ts +38 -0
  1071. package/dist/src/domains/traces/hooks/use-trace-span-navigation.d.ts +1 -1
  1072. package/dist/src/domains/traces/hooks/use-trace-spans.d.ts +188 -150
  1073. package/dist/src/domains/traces/hooks/use-trace-url-state.d.ts +3 -0
  1074. package/dist/src/domains/traces/hooks/use-traces.d.ts +7 -1
  1075. package/dist/src/domains/traces/index.d.ts +1 -0
  1076. package/dist/src/domains/traces/trace-filters.d.ts +22 -17
  1077. package/dist/src/domains/traces/trace-query-filters.d.ts +6 -0
  1078. package/dist/src/domains/traces/types.d.ts +6 -1
  1079. package/dist/src/domains/traces/utils/filter-spans-keeping-ancestors.d.ts +1 -1
  1080. package/dist/src/domains/traces/utils/span-utils.d.ts +1 -1
  1081. package/dist/src/domains/traces/utils/to-searchable-spans.d.ts +4 -3
  1082. package/dist/src/ds/components/Activity/activity.d.ts +10 -0
  1083. package/dist/src/ds/components/Activity/activity.stories.d.ts +20 -0
  1084. package/dist/src/ds/components/Activity/index.d.ts +1 -0
  1085. package/dist/src/ds/components/Collapsible/collapsible.d.ts +2 -0
  1086. package/dist/src/ds/components/Collapsible/collapsible.stories.d.ts +1 -0
  1087. package/dist/src/ds/components/Composer/composer.d.ts +8 -7
  1088. package/dist/src/ds/components/Composer/composer.stories.d.ts +7 -1
  1089. package/dist/src/ds/components/Composer/index.d.ts +2 -2
  1090. package/dist/src/ds/components/Composer/use-composer-pointer.d.ts +9 -0
  1091. package/dist/src/ds/components/DataCodeSection/data-code-section.d.ts +3 -1
  1092. package/dist/src/ds/components/DataDetailsPanel/data-details-panel-code-section.d.ts +3 -1
  1093. package/dist/src/ds/components/DataPanel/data-panel-close-button.d.ts +3 -1
  1094. package/dist/src/ds/components/DataPanel/data-panel-content.d.ts +3 -1
  1095. package/dist/src/ds/components/DataPanel/data-panel-header-actions.d.ts +8 -0
  1096. package/dist/src/ds/components/DataPanel/data-panel-header-content.d.ts +5 -0
  1097. package/dist/src/ds/components/DataPanel/data-panel-metadata.d.ts +18 -0
  1098. package/dist/src/ds/components/DataPanel/data-panel-next-prev-nav.d.ts +3 -1
  1099. package/dist/src/ds/components/DataPanel/data-panel-root.d.ts +24 -2
  1100. package/dist/src/ds/components/DataPanel/data-panel.d.ts +7 -0
  1101. package/dist/src/ds/components/DataPanel/data-panel.stories.d.ts +4 -1
  1102. package/dist/src/ds/components/DataPanel/index.d.ts +3 -0
  1103. package/dist/src/ds/components/DateTimeRangePicker/date-time-range-picker.d.ts +15 -1
  1104. package/dist/src/ds/components/FilterBar/default-operators.d.ts +3 -0
  1105. package/dist/src/ds/components/FilterBar/filter-bar-chip.d.ts +35 -0
  1106. package/dist/src/ds/components/FilterBar/filter-bar-clear.d.ts +4 -0
  1107. package/dist/src/ds/components/FilterBar/filter-bar-context.d.ts +46 -0
  1108. package/dist/src/ds/components/FilterBar/filter-bar-draft-chip.d.ts +11 -0
  1109. package/dist/src/ds/components/FilterBar/filter-bar-input.d.ts +10 -0
  1110. package/dist/src/ds/components/FilterBar/filter-bar-option-list.d.ts +17 -0
  1111. package/dist/src/ds/components/FilterBar/filter-bar.d.ts +34 -0
  1112. package/dist/src/ds/components/FilterBar/filter-bar.stories.d.ts +10 -0
  1113. package/dist/src/ds/components/FilterBar/index.d.ts +8 -0
  1114. package/dist/src/ds/components/FilterBar/match-query.d.ts +4 -0
  1115. package/dist/src/ds/components/FilterBar/types.d.ts +59 -0
  1116. package/dist/src/ds/components/FilterBar/use-value-step.d.ts +33 -0
  1117. package/dist/src/ds/components/FilterBar/use-value-suggestions.d.ts +23 -0
  1118. package/dist/src/ds/components/MainSidebar/main-sidebar-mobile-trigger.d.ts +0 -1
  1119. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-header.d.ts +0 -1
  1120. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-item-classes.d.ts +0 -11
  1121. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-link.d.ts +0 -6
  1122. package/dist/src/ds/components/Message/index.d.ts +4 -0
  1123. package/dist/src/ds/components/Message/message-copy-button.d.ts +3 -0
  1124. package/dist/src/ds/components/Message/message-timestamp.d.ts +3 -0
  1125. package/dist/src/ds/components/Message/message.d.ts +13 -0
  1126. package/dist/src/ds/components/Message/message.stories.d.ts +10 -0
  1127. package/dist/src/ds/components/PullRequestIcon/index.d.ts +2 -0
  1128. package/dist/src/ds/components/PullRequestIcon/pull-request-icon.d.ts +25 -0
  1129. package/dist/src/ds/components/PullRequestIcon/pull-request-icon.stories.d.ts +24 -0
  1130. package/dist/src/ds/components/Slider/slider.d.ts +2 -2
  1131. package/dist/src/ds/components/Slider/slider.stories.d.ts +1 -0
  1132. package/dist/src/ds/components/StatusIndicators/index.d.ts +3 -0
  1133. package/dist/src/ds/components/StatusIndicators/status-dot-styles.d.ts +11 -0
  1134. package/dist/src/ds/components/StatusIndicators/status-dot.d.ts +8 -0
  1135. package/dist/src/ds/components/StatusIndicators/status-dot.stories.d.ts +9 -0
  1136. package/dist/src/ds/components/StatusIndicators/status.d.ts +7 -0
  1137. package/dist/src/ds/components/StatusIndicators/status.stories.d.ts +7 -0
  1138. package/dist/src/ds/components/Workflow/cards/condition/workflow-condition-card-view.d.ts +2 -0
  1139. package/dist/src/ds/components/Workflow/cards/condition/workflow-condition-card.d.ts +3 -0
  1140. package/dist/src/ds/components/Workflow/cards/condition/workflow-condition-expression.d.ts +2 -0
  1141. package/dist/src/ds/components/Workflow/cards/condition/workflow-condition-source.d.ts +3 -0
  1142. package/dist/src/ds/components/Workflow/cards/step/workflow-step-card-view.d.ts +2 -0
  1143. package/dist/src/ds/components/Workflow/cards/timing/workflow-time-dial.d.ts +8 -0
  1144. package/dist/src/ds/components/Workflow/cards/timing/workflow-timing.d.ts +2 -0
  1145. package/dist/src/ds/components/Workflow/cards/workflow-card-badge-utils.d.ts +0 -1
  1146. package/dist/src/ds/components/Workflow/cards/workflow-card-kind.d.ts +10 -0
  1147. package/dist/src/ds/components/Workflow/cards/workflow-clock.d.ts +2 -1
  1148. package/dist/src/ds/components/Workflow/cards/workflow-type-badge.d.ts +2 -0
  1149. package/dist/src/ds/components/Workflow/controls/workflow-debug-controls.d.ts +5 -1
  1150. package/dist/src/ds/components/Workflow/data/workflow-edge-data-button.d.ts +4 -1
  1151. package/dist/src/ds/components/Workflow/graph/types.d.ts +1 -0
  1152. package/dist/src/ds/components/Workflow/graph/workflow-camera-duration.d.ts +1 -0
  1153. package/dist/src/ds/components/Workflow/graph/workflow-data-edge-view.d.ts +3 -1
  1154. package/dist/src/ds/components/Workflow/graph/workflow-graph-canvas.d.ts +5 -2
  1155. package/dist/src/ds/components/Workflow/graph/workflow-graph-groups.d.ts +11 -0
  1156. package/dist/src/ds/components/Workflow/graph/zoom-slider.d.ts +4 -1
  1157. package/dist/src/ds/components/Workflow/index.d.ts +5 -6
  1158. package/dist/src/ds/components/Workflow/stories/graph/graph-example.d.ts +4 -2
  1159. package/dist/src/ds/components/Workflow/stories/workflow-condition-card.stories.d.ts +4 -2
  1160. package/dist/src/ds/components/Workflow/stories/workflow-controls.stories.d.ts +5 -0
  1161. package/dist/src/ds/components/Workflow/stories/workflow-data.stories.d.ts +2 -1
  1162. package/dist/src/ds/components/Workflow/stories/workflow-graph.stories.d.ts +4 -1
  1163. package/dist/src/ds/components/Workflow/stories/workflow-step-card.stories.d.ts +7 -1
  1164. package/dist/src/ds/components/Workflow/types.d.ts +5 -11
  1165. package/dist/src/ds/components/Workflow/workflow-canvas-inset.d.ts +3 -0
  1166. package/dist/src/ds/components/ai/chat-event/chat-event-preview.d.ts +1 -0
  1167. package/dist/src/ds/components/ai/chat-event/chat-event.d.ts +14 -0
  1168. package/dist/src/ds/components/ai/chat-event/chat-notification.d.ts +17 -0
  1169. package/dist/src/ds/components/ai/chat-event/chat-signal.d.ts +9 -0
  1170. package/dist/src/ds/components/ai/chat-event/chat-skill.d.ts +7 -0
  1171. package/dist/src/ds/components/ai/chat-event/chat-time-gap.d.ts +3 -0
  1172. package/dist/src/ds/components/ai/chat-event/index.d.ts +7 -0
  1173. package/dist/src/ds/components/ai/chat-event/notification-variant.d.ts +2 -0
  1174. package/dist/src/ds/components/ai/chat-event/stories/notification.stories.d.ts +59 -0
  1175. package/dist/src/ds/components/ai/chat-event/stories/signal.stories.d.ts +46 -0
  1176. package/dist/src/ds/components/ai/chat-event/stories/skill.stories.d.ts +29 -0
  1177. package/dist/src/ds/components/ai/chat-event/stories/time-gap.stories.d.ts +16 -0
  1178. package/dist/src/ds/components/ai/tool-approval/index.d.ts +2 -0
  1179. package/dist/src/ds/components/ai/tool-approval/tool-approval-actions.stories.d.ts +44 -0
  1180. package/dist/src/ds/components/ai/tool-approval/tool-approval.d.ts +15 -0
  1181. package/dist/src/ds/components/ai/tool-approval/tool-approval.stories.d.ts +61 -0
  1182. package/dist/src/ds/components/ai/tool-call/index.d.ts +3 -0
  1183. package/dist/src/ds/components/ai/tool-call/tool-call-arguments.d.ts +8 -0
  1184. package/dist/src/ds/components/ai/tool-call/tool-call-output.d.ts +7 -0
  1185. package/dist/src/ds/components/ai/tool-call/tool-call-presentation.stories.d.ts +74 -0
  1186. package/dist/src/ds/components/ai/tool-call/tool-call-time.d.ts +3 -0
  1187. package/dist/src/ds/new/sidebar/index.d.ts +12 -0
  1188. package/dist/src/ds/new/sidebar/sidebar-new-brand.d.ts +6 -0
  1189. package/dist/src/ds/new/sidebar/sidebar-new-footer.d.ts +3 -0
  1190. package/dist/src/ds/new/sidebar/sidebar-new-header.d.ts +3 -0
  1191. package/dist/src/ds/new/sidebar/sidebar-new-meter.d.ts +24 -0
  1192. package/dist/src/ds/new/sidebar/sidebar-new-nav-header.d.ts +11 -0
  1193. package/dist/src/ds/new/sidebar/sidebar-new-nav-stack-context.d.ts +8 -0
  1194. package/dist/src/ds/new/sidebar/sidebar-new-nav-stack-page-classes.d.ts +1 -0
  1195. package/dist/src/ds/new/sidebar/sidebar-new-nav-stack-root-view.d.ts +3 -0
  1196. package/dist/src/ds/new/sidebar/sidebar-new-nav-stack-root.d.ts +7 -0
  1197. package/dist/src/ds/new/sidebar/sidebar-new-nav-stack-view.d.ts +9 -0
  1198. package/dist/src/ds/new/sidebar/sidebar-new-nav-stack.d.ts +10 -0
  1199. package/dist/src/ds/new/sidebar/sidebar-new-nav.d.ts +3 -0
  1200. package/dist/src/ds/new/sidebar/sidebar-new-root.d.ts +5 -0
  1201. package/dist/src/ds/new/sidebar/sidebar-new-section-link.d.ts +8 -0
  1202. package/dist/src/ds/new/sidebar/sidebar-new-sections.d.ts +8 -0
  1203. package/dist/src/ds/new/sidebar/sidebar-new-trigger.d.ts +3 -0
  1204. package/dist/src/ds/new/sidebar/sidebar-new.d.ts +36 -0
  1205. package/dist/src/ds/new/sidebar/sidebar-new.stories.d.ts +6 -0
  1206. package/dist/src/ds/tokens/color-foundations.stories.d.ts +5 -0
  1207. package/dist/src/ds/tokens/colors.d.ts +11 -0
  1208. package/dist/src/ds/tokens/tokens.stories.d.ts +2 -0
  1209. package/dist/src/ds/tokens/typography-foundations.stories.d.ts +5 -0
  1210. package/dist/src/hooks/use-local-storage-state.d.ts +16 -0
  1211. package/dist/src/lib/colors.d.ts +4 -0
  1212. package/dist/src/lib/resize/separator.d.ts +3 -3
  1213. package/dist/style.css +1158 -175
  1214. package/dist/switch-BcnKroGU.js +103 -0
  1215. package/dist/switch-BcnKroGU.js.map +1 -0
  1216. package/dist/switch-Ceskil-p.cjs +124 -0
  1217. package/dist/switch-Ceskil-p.cjs.map +1 -0
  1218. package/dist/tabs-content-BlFddYrd.cjs +31 -0
  1219. package/dist/tabs-content-BlFddYrd.cjs.map +1 -0
  1220. package/dist/tabs-content-CmPMnkWh.js +29 -0
  1221. package/dist/tabs-content-CmPMnkWh.js.map +1 -0
  1222. package/dist/tabs-root-BQher6zA.js +324 -0
  1223. package/dist/tabs-root-BQher6zA.js.map +1 -0
  1224. package/dist/tabs-root-C9QBXz5M.cjs +327 -0
  1225. package/dist/tabs-root-C9QBXz5M.cjs.map +1 -0
  1226. package/dist/tabs-tab-Bm3yxYaU.cjs +99 -0
  1227. package/dist/tabs-tab-Bm3yxYaU.cjs.map +1 -0
  1228. package/dist/tabs-tab-s-H_a_rq.js +97 -0
  1229. package/dist/tabs-tab-s-H_a_rq.js.map +1 -0
  1230. package/dist/text-field-block-CaKbUpyB.cjs +51 -0
  1231. package/dist/text-field-block-CaKbUpyB.cjs.map +1 -0
  1232. package/dist/text-field-block-CpyiVrs2.js +49 -0
  1233. package/dist/text-field-block-CpyiVrs2.js.map +1 -0
  1234. package/dist/textarea-Bmwc25Lg.js +62 -0
  1235. package/dist/textarea-Bmwc25Lg.js.map +1 -0
  1236. package/dist/textarea-DT2CGgeh.cjs +83 -0
  1237. package/dist/textarea-DT2CGgeh.cjs.map +1 -0
  1238. package/dist/thread-rail-CK8UN7hw.cjs +334 -0
  1239. package/dist/thread-rail-CK8UN7hw.cjs.map +1 -0
  1240. package/dist/thread-rail-DanTArf6.js +313 -0
  1241. package/dist/thread-rail-DanTArf6.js.map +1 -0
  1242. package/dist/time-picker-BDo0bkc7.js +76 -0
  1243. package/dist/time-picker-BDo0bkc7.js.map +1 -0
  1244. package/dist/time-picker-Cut4FeGH.cjs +78 -0
  1245. package/dist/time-picker-Cut4FeGH.cjs.map +1 -0
  1246. package/dist/toast-BfIhbri4.js +52 -0
  1247. package/dist/toast-BfIhbri4.js.map +1 -0
  1248. package/dist/toast-DF-uDV6R.cjs +55 -0
  1249. package/dist/toast-DF-uDV6R.cjs.map +1 -0
  1250. package/dist/tokens.cjs.js +1 -1
  1251. package/dist/tokens.es.js +1 -1
  1252. package/dist/tool-approval-B_6bj-6N.cjs +69 -0
  1253. package/dist/tool-approval-B_6bj-6N.cjs.map +1 -0
  1254. package/dist/tool-approval-RUhKvh57.js +66 -0
  1255. package/dist/tool-approval-RUhKvh57.js.map +1 -0
  1256. package/dist/tool-call-B-OO_6DC.js +181 -0
  1257. package/dist/tool-call-B-OO_6DC.js.map +1 -0
  1258. package/dist/tool-call-DEtotEm0.cjs +196 -0
  1259. package/dist/tool-call-DEtotEm0.cjs.map +1 -0
  1260. package/dist/tooltip-D1PLTHDf.js +112 -0
  1261. package/dist/tooltip-D1PLTHDf.js.map +1 -0
  1262. package/dist/tooltip-D9ylrXmx.cjs +136 -0
  1263. package/dist/tooltip-D9ylrXmx.cjs.map +1 -0
  1264. package/dist/tooltip.css +31 -0
  1265. package/dist/traces-data-list-B6WI6noa.cjs +86 -0
  1266. package/dist/traces-data-list-B6WI6noa.cjs.map +1 -0
  1267. package/dist/traces-data-list-DC2gtmyd.js +84 -0
  1268. package/dist/traces-data-list-DC2gtmyd.js.map +1 -0
  1269. package/dist/utils/cn.cjs.js +1 -1
  1270. package/dist/utils/cn.es.js +1 -1
  1271. package/dist/utils/colors.cjs.js +7 -0
  1272. package/dist/utils/colors.cjs.js.map +1 -1
  1273. package/dist/utils/colors.es.js +6 -1
  1274. package/dist/utils/colors.es.js.map +1 -1
  1275. package/dist/utils/toast.cjs.js +1 -1
  1276. package/dist/utils/toast.es.js +1 -1
  1277. package/new-theme.css +31 -0
  1278. package/package.json +19 -11
  1279. package/theme.css +53 -0
  1280. package/dist/Badge-B-LKnrNk.cjs +0 -125
  1281. package/dist/Badge-B-LKnrNk.cjs.map +0 -1
  1282. package/dist/Badge-BqVBVHGc.js +0 -123
  1283. package/dist/Badge-BqVBVHGc.js.map +0 -1
  1284. package/dist/Button-BJOVwaxp.cjs +0 -137
  1285. package/dist/Button-BJOVwaxp.cjs.map +0 -1
  1286. package/dist/Button-BVGwYwHT.js +0 -133
  1287. package/dist/Button-BVGwYwHT.js.map +0 -1
  1288. package/dist/Card-DYmiv8Dx.js +0 -96
  1289. package/dist/Card-DYmiv8Dx.js.map +0 -1
  1290. package/dist/Card-DZjvLsN9.cjs +0 -123
  1291. package/dist/Card-DZjvLsN9.cjs.map +0 -1
  1292. package/dist/Composer.css +0 -102
  1293. package/dist/EmptyState--bOUm8JU.cjs +0 -33
  1294. package/dist/EmptyState--bOUm8JU.cjs.map +0 -1
  1295. package/dist/EmptyState-CLoSRKxC.js +0 -31
  1296. package/dist/EmptyState-CLoSRKxC.js.map +0 -1
  1297. package/dist/Notice-CMZ86f1g.js +0 -89
  1298. package/dist/Notice-CMZ86f1g.js.map +0 -1
  1299. package/dist/Notice-D0Mvqvr0.cjs +0 -91
  1300. package/dist/Notice-D0Mvqvr0.cjs.map +0 -1
  1301. package/dist/PermissionDenied-BmAbJ1Xn.js +0 -22
  1302. package/dist/PermissionDenied-BmAbJ1Xn.js.map +0 -1
  1303. package/dist/PermissionDenied-Dge5a7OX.cjs +0 -24
  1304. package/dist/PermissionDenied-Dge5a7OX.cjs.map +0 -1
  1305. package/dist/SessionExpired-CAOgb-6E.cjs +0 -47
  1306. package/dist/SessionExpired-CAOgb-6E.cjs.map +0 -1
  1307. package/dist/SessionExpired-DSPFseGA.js +0 -45
  1308. package/dist/SessionExpired-DSPFseGA.js.map +0 -1
  1309. package/dist/Txt-CfPhlZOu.js +0 -28
  1310. package/dist/Txt-CfPhlZOu.js.map +0 -1
  1311. package/dist/Txt-i-sXSs2m.cjs +0 -30
  1312. package/dist/Txt-i-sXSs2m.cjs.map +0 -1
  1313. package/dist/arrival-Cf8ZO8cU.js +0 -19
  1314. package/dist/arrival-Cf8ZO8cU.js.map +0 -1
  1315. package/dist/arrival-Ck5yjMkc.cjs +0 -22
  1316. package/dist/arrival-Ck5yjMkc.cjs.map +0 -1
  1317. package/dist/ask-user-DQGe7ZTv.cjs +0 -146
  1318. package/dist/ask-user-DQGe7ZTv.cjs.map +0 -1
  1319. package/dist/ask-user-Dh9YowL4.js +0 -137
  1320. package/dist/ask-user-Dh9YowL4.js.map +0 -1
  1321. package/dist/buttons-group-CHyXDQBp.js +0 -162
  1322. package/dist/buttons-group-CHyXDQBp.js.map +0 -1
  1323. package/dist/buttons-group-jq7kUVlX.cjs +0 -186
  1324. package/dist/buttons-group-jq7kUVlX.cjs.map +0 -1
  1325. package/dist/checkbox-CC39oYEv.js +0 -88
  1326. package/dist/checkbox-CC39oYEv.js.map +0 -1
  1327. package/dist/checkbox-DWXCTy8y.cjs +0 -109
  1328. package/dist/checkbox-DWXCTy8y.cjs.map +0 -1
  1329. package/dist/cn-ByEbywDh.js +0 -3291
  1330. package/dist/cn-ByEbywDh.js.map +0 -1
  1331. package/dist/cn-DnbTIGXa.cjs +0 -3294
  1332. package/dist/cn-DnbTIGXa.cjs.map +0 -1
  1333. package/dist/code-block-BdzrmA-p.js +0 -86
  1334. package/dist/code-block-BdzrmA-p.js.map +0 -1
  1335. package/dist/code-block-D1RequlX.cjs +0 -88
  1336. package/dist/code-block-D1RequlX.cjs.map +0 -1
  1337. package/dist/code-editor-CopnXVKT.cjs +0 -486
  1338. package/dist/code-editor-CopnXVKT.cjs.map +0 -1
  1339. package/dist/code-editor-D7BftGSx.js +0 -478
  1340. package/dist/code-editor-D7BftGSx.js.map +0 -1
  1341. package/dist/collapsible-4eeo2ZU2.js +0 -57
  1342. package/dist/collapsible-4eeo2ZU2.js.map +0 -1
  1343. package/dist/collapsible-JOs0f0e1.cjs +0 -61
  1344. package/dist/collapsible-JOs0f0e1.cjs.map +0 -1
  1345. package/dist/combobox-DO__6QlF.cjs +0 -276
  1346. package/dist/combobox-DO__6QlF.cjs.map +0 -1
  1347. package/dist/combobox-Ua6bvpM8.js +0 -254
  1348. package/dist/combobox-Ua6bvpM8.js.map +0 -1
  1349. package/dist/command-CNKdcyyr.js +0 -168
  1350. package/dist/command-CNKdcyyr.js.map +0 -1
  1351. package/dist/command-Cva4qgS9.cjs +0 -197
  1352. package/dist/command-Cva4qgS9.cjs.map +0 -1
  1353. package/dist/copy-button-ChUCFd-x.js +0 -46
  1354. package/dist/copy-button-ChUCFd-x.js.map +0 -1
  1355. package/dist/copy-button-zLZfswrj.cjs +0 -48
  1356. package/dist/copy-button-zLZfswrj.cjs.map +0 -1
  1357. package/dist/dashboard-card-0kjXfhTF.cjs +0 -11
  1358. package/dist/dashboard-card-0kjXfhTF.cjs.map +0 -1
  1359. package/dist/dashboard-card-CDg79V_9.js +0 -9
  1360. package/dist/dashboard-card-CDg79V_9.js.map +0 -1
  1361. package/dist/data-code-section-BLvh46xK.cjs +0 -364
  1362. package/dist/data-code-section-BLvh46xK.cjs.map +0 -1
  1363. package/dist/data-code-section-DSelBhmP.js +0 -361
  1364. package/dist/data-code-section-DSelBhmP.js.map +0 -1
  1365. package/dist/data-keys-and-values-778xnwOK.js +0 -122
  1366. package/dist/data-keys-and-values-778xnwOK.js.map +0 -1
  1367. package/dist/data-keys-and-values-CUqVRfqS.cjs +0 -124
  1368. package/dist/data-keys-and-values-CUqVRfqS.cjs.map +0 -1
  1369. package/dist/data-list-4_cVlINT.cjs +0 -183
  1370. package/dist/data-list-4_cVlINT.cjs.map +0 -1
  1371. package/dist/data-list-Bm70XKg_.js +0 -179
  1372. package/dist/data-list-Bm70XKg_.js.map +0 -1
  1373. package/dist/data-list-skeleton-B7flrjdA.cjs +0 -38
  1374. package/dist/data-list-skeleton-B7flrjdA.cjs.map +0 -1
  1375. package/dist/data-list-skeleton-BJVs8rDE.js +0 -36
  1376. package/dist/data-list-skeleton-BJVs8rDE.js.map +0 -1
  1377. package/dist/data-list-top-BeUxfGy2.js +0 -481
  1378. package/dist/data-list-top-BeUxfGy2.js.map +0 -1
  1379. package/dist/data-list-top-D9zFnKEi.cjs +0 -510
  1380. package/dist/data-list-top-D9zFnKEi.cjs.map +0 -1
  1381. package/dist/data-panel-5iuux0r_.js +0 -89
  1382. package/dist/data-panel-5iuux0r_.js.map +0 -1
  1383. package/dist/data-panel-tSErqolu.cjs +0 -91
  1384. package/dist/data-panel-tSErqolu.cjs.map +0 -1
  1385. package/dist/date-picker-Cj8MwnUv.cjs +0 -50
  1386. package/dist/date-picker-Cj8MwnUv.cjs.map +0 -1
  1387. package/dist/date-picker-LbXedaEh.js +0 -48
  1388. package/dist/date-picker-LbXedaEh.js.map +0 -1
  1389. package/dist/date-time-range-picker-C0J7p78l.cjs +0 -167
  1390. package/dist/date-time-range-picker-C0J7p78l.cjs.map +0 -1
  1391. package/dist/date-time-range-picker-CcoU5-2_.js +0 -165
  1392. package/dist/date-time-range-picker-CcoU5-2_.js.map +0 -1
  1393. package/dist/dialog-B1DwyLJJ.cjs +0 -276
  1394. package/dist/dialog-B1DwyLJJ.cjs.map +0 -1
  1395. package/dist/dialog-Dfrt_JCJ.js +0 -242
  1396. package/dist/dialog-Dfrt_JCJ.js.map +0 -1
  1397. package/dist/domains/traces/components/span-duration-col.cjs.js +0 -25
  1398. package/dist/domains/traces/components/span-duration-col.cjs.js.map +0 -1
  1399. package/dist/domains/traces/components/span-duration-col.d.ts +0 -2
  1400. package/dist/domains/traces/components/span-duration-col.es.js +0 -21
  1401. package/dist/domains/traces/components/span-duration-col.es.js.map +0 -1
  1402. package/dist/domains/traces/components/span-timeline-col.cjs.js +0 -48
  1403. package/dist/domains/traces/components/span-timeline-col.cjs.js.map +0 -1
  1404. package/dist/domains/traces/components/span-timeline-col.d.ts +0 -2
  1405. package/dist/domains/traces/components/span-timeline-col.es.js +0 -44
  1406. package/dist/domains/traces/components/span-timeline-col.es.js.map +0 -1
  1407. package/dist/domains/traces/components/timeline-expand-col.cjs.js +0 -89
  1408. package/dist/domains/traces/components/timeline-expand-col.cjs.js.map +0 -1
  1409. package/dist/domains/traces/components/timeline-expand-col.d.ts +0 -2
  1410. package/dist/domains/traces/components/timeline-expand-col.es.js +0 -85
  1411. package/dist/domains/traces/components/timeline-expand-col.es.js.map +0 -1
  1412. package/dist/domains/traces/components/traces-layout.cjs.js +0 -63
  1413. package/dist/domains/traces/components/traces-layout.cjs.js.map +0 -1
  1414. package/dist/domains/traces/components/traces-layout.d.ts +0 -2
  1415. package/dist/domains/traces/components/traces-layout.es.js +0 -59
  1416. package/dist/domains/traces/components/traces-layout.es.js.map +0 -1
  1417. package/dist/domains/traces/components/traces-toolbar.cjs.js +0 -70
  1418. package/dist/domains/traces/components/traces-toolbar.cjs.js.map +0 -1
  1419. package/dist/domains/traces/components/traces-toolbar.d.ts +0 -2
  1420. package/dist/domains/traces/components/traces-toolbar.es.js +0 -66
  1421. package/dist/domains/traces/components/traces-toolbar.es.js.map +0 -1
  1422. package/dist/drawer-Bq7j_MiM.cjs +0 -366
  1423. package/dist/drawer-Bq7j_MiM.cjs.map +0 -1
  1424. package/dist/drawer-D1m2faHU.js +0 -326
  1425. package/dist/drawer-D1m2faHU.js.map +0 -1
  1426. package/dist/dropdown-menu-Bfh5ROWe.cjs +0 -227
  1427. package/dist/dropdown-menu-Bfh5ROWe.cjs.map +0 -1
  1428. package/dist/dropdown-menu-C853KwJJ.js +0 -206
  1429. package/dist/dropdown-menu-C853KwJJ.js.map +0 -1
  1430. package/dist/field-block-CVOfRWvX.js +0 -85
  1431. package/dist/field-block-CVOfRWvX.js.map +0 -1
  1432. package/dist/field-block-DosykAiQ.cjs +0 -87
  1433. package/dist/field-block-DosykAiQ.cjs.map +0 -1
  1434. package/dist/horizontal-bars--Czy2stS.cjs +0 -141
  1435. package/dist/horizontal-bars--Czy2stS.cjs.map +0 -1
  1436. package/dist/horizontal-bars-_vgi09Md.js +0 -139
  1437. package/dist/horizontal-bars-_vgi09Md.js.map +0 -1
  1438. package/dist/hover-card-B5zQKp9k.js +0 -68
  1439. package/dist/hover-card-B5zQKp9k.js.map +0 -1
  1440. package/dist/hover-card-B_Wz_e0F.cjs +0 -91
  1441. package/dist/hover-card-B_Wz_e0F.cjs.map +0 -1
  1442. package/dist/index-BxcigDwC.cjs +0 -47
  1443. package/dist/index-BxcigDwC.cjs.map +0 -1
  1444. package/dist/index-CZvpHqka.js +0 -45
  1445. package/dist/index-CZvpHqka.js.map +0 -1
  1446. package/dist/input-D3SUXvgI.cjs +0 -85
  1447. package/dist/input-D3SUXvgI.cjs.map +0 -1
  1448. package/dist/input-DinpgQXj.js +0 -64
  1449. package/dist/input-DinpgQXj.js.map +0 -1
  1450. package/dist/input-group-CBuqhxnJ.cjs +0 -242
  1451. package/dist/input-group-CBuqhxnJ.cjs.map +0 -1
  1452. package/dist/input-group-Dv1YsFDZ.js +0 -216
  1453. package/dist/input-group-Dv1YsFDZ.js.map +0 -1
  1454. package/dist/kbd-BaoBQUlL.cjs +0 -34
  1455. package/dist/kbd-BaoBQUlL.cjs.map +0 -1
  1456. package/dist/kbd-Bod0H0VQ.js +0 -32
  1457. package/dist/kbd-Bod0H0VQ.js.map +0 -1
  1458. package/dist/label-BICQQTjz.cjs +0 -34
  1459. package/dist/label-BICQQTjz.cjs.map +0 -1
  1460. package/dist/label-BKfZzqfr.js +0 -13
  1461. package/dist/label-BKfZzqfr.js.map +0 -1
  1462. package/dist/list-search-BwcO9d9M.cjs +0 -73
  1463. package/dist/list-search-BwcO9d9M.cjs.map +0 -1
  1464. package/dist/list-search-C8FBcDpo.js +0 -71
  1465. package/dist/list-search-C8FBcDpo.js.map +0 -1
  1466. package/dist/logs-data-list-B0hzHq0b.cjs +0 -81
  1467. package/dist/logs-data-list-B0hzHq0b.cjs.map +0 -1
  1468. package/dist/logs-data-list-CWu83qI7.js +0 -79
  1469. package/dist/logs-data-list-CWu83qI7.js.map +0 -1
  1470. package/dist/markdown-renderer-Dp1fJwUB.js +0 -408
  1471. package/dist/markdown-renderer-Dp1fJwUB.js.map +0 -1
  1472. package/dist/markdown-renderer-hBiN_N_-.cjs +0 -410
  1473. package/dist/markdown-renderer-hBiN_N_-.cjs.map +0 -1
  1474. package/dist/message-scroller-A5mO14YC.cjs +0 -857
  1475. package/dist/message-scroller-A5mO14YC.cjs.map +0 -1
  1476. package/dist/message-scroller-JeImISU5.js +0 -831
  1477. package/dist/message-scroller-JeImISU5.js.map +0 -1
  1478. package/dist/metrics-card-DJC-d549.cjs +0 -95
  1479. package/dist/metrics-card-DJC-d549.cjs.map +0 -1
  1480. package/dist/metrics-card-kreeaS1o.js +0 -93
  1481. package/dist/metrics-card-kreeaS1o.js.map +0 -1
  1482. package/dist/metrics-kpi-card-CgB7izeJ.cjs +0 -79
  1483. package/dist/metrics-kpi-card-CgB7izeJ.cjs.map +0 -1
  1484. package/dist/metrics-kpi-card-D5s2a9Xh.js +0 -77
  1485. package/dist/metrics-kpi-card-D5s2a9Xh.js.map +0 -1
  1486. package/dist/no-data-page-layout-BHmXbQix.js +0 -101
  1487. package/dist/no-data-page-layout-BHmXbQix.js.map +0 -1
  1488. package/dist/no-data-page-layout-BrqtWTU9.cjs +0 -104
  1489. package/dist/no-data-page-layout-BrqtWTU9.cjs.map +0 -1
  1490. package/dist/page-header-CGRV1f_f.js +0 -123
  1491. package/dist/page-header-CGRV1f_f.js.map +0 -1
  1492. package/dist/page-header-CTdBcOWK.cjs +0 -125
  1493. package/dist/page-header-CTdBcOWK.cjs.map +0 -1
  1494. package/dist/popover-DL_Vqxfp.cjs +0 -121
  1495. package/dist/popover-DL_Vqxfp.cjs.map +0 -1
  1496. package/dist/popover-L2o0kHi2.js +0 -97
  1497. package/dist/popover-L2o0kHi2.js.map +0 -1
  1498. package/dist/property-filter-applied-CF-InSu-.js +0 -344
  1499. package/dist/property-filter-applied-CF-InSu-.js.map +0 -1
  1500. package/dist/property-filter-applied-D35zWa7S.cjs +0 -348
  1501. package/dist/property-filter-applied-D35zWa7S.cjs.map +0 -1
  1502. package/dist/sankey-chart-D4lfGeI-.js +0 -916
  1503. package/dist/sankey-chart-D4lfGeI-.js.map +0 -1
  1504. package/dist/sankey-chart-ZfcUvZFu.cjs +0 -926
  1505. package/dist/sankey-chart-ZfcUvZFu.cjs.map +0 -1
  1506. package/dist/scroll-area-B0L1nYJS.js +0 -223
  1507. package/dist/scroll-area-B0L1nYJS.js.map +0 -1
  1508. package/dist/scroll-area-DK4w_mMg.cjs +0 -245
  1509. package/dist/scroll-area-DK4w_mMg.cjs.map +0 -1
  1510. package/dist/search-field-block-DhgD7NhZ.js +0 -119
  1511. package/dist/search-field-block-DhgD7NhZ.js.map +0 -1
  1512. package/dist/search-field-block-DnJYUEGi.cjs +0 -121
  1513. package/dist/search-field-block-DnJYUEGi.cjs.map +0 -1
  1514. package/dist/section-9jESC1la.js +0 -111
  1515. package/dist/section-9jESC1la.js.map +0 -1
  1516. package/dist/section-C_yrhQFt.cjs +0 -115
  1517. package/dist/section-C_yrhQFt.cjs.map +0 -1
  1518. package/dist/select-3GcRJGtd.js +0 -133
  1519. package/dist/select-3GcRJGtd.js.map +0 -1
  1520. package/dist/select-4dVGVp0V.cjs +0 -159
  1521. package/dist/select-4dVGVp0V.cjs.map +0 -1
  1522. package/dist/select-field-block-BEyjBDiB.js +0 -48
  1523. package/dist/select-field-block-BEyjBDiB.js.map +0 -1
  1524. package/dist/select-field-block-By8NfJoe.cjs +0 -50
  1525. package/dist/select-field-block-By8NfJoe.cjs.map +0 -1
  1526. package/dist/settings-container-C3d4Y528.js +0 -26
  1527. package/dist/settings-container-C3d4Y528.js.map +0 -1
  1528. package/dist/settings-container-aSJeNRdZ.cjs +0 -29
  1529. package/dist/settings-container-aSJeNRdZ.cjs.map +0 -1
  1530. package/dist/settings-layout-BjjVaZgN.cjs +0 -57
  1531. package/dist/settings-layout-BjjVaZgN.cjs.map +0 -1
  1532. package/dist/settings-layout-DlXTuCQ7.js +0 -55
  1533. package/dist/settings-layout-DlXTuCQ7.js.map +0 -1
  1534. package/dist/settings-row-BKz6r927.cjs +0 -92
  1535. package/dist/settings-row-BKz6r927.cjs.map +0 -1
  1536. package/dist/settings-row-T98nqxPD.js +0 -89
  1537. package/dist/settings-row-T98nqxPD.js.map +0 -1
  1538. package/dist/shimmer-Bt9INFuE.js +0 -23
  1539. package/dist/shimmer-Bt9INFuE.js.map +0 -1
  1540. package/dist/shimmer-GOCqjnzu.cjs +0 -25
  1541. package/dist/shimmer-GOCqjnzu.cjs.map +0 -1
  1542. package/dist/skeleton-DYq_5Fad.cjs +0 -25
  1543. package/dist/skeleton-DYq_5Fad.cjs.map +0 -1
  1544. package/dist/skeleton-KJCC29GI.js +0 -23
  1545. package/dist/skeleton-KJCC29GI.js.map +0 -1
  1546. package/dist/slider-AfRJ3a4W.js +0 -88
  1547. package/dist/slider-AfRJ3a4W.js.map +0 -1
  1548. package/dist/slider-BXYQmaQy.cjs +0 -90
  1549. package/dist/slider-BXYQmaQy.cjs.map +0 -1
  1550. package/dist/spacings-DQxytUI3.js +0 -162
  1551. package/dist/spacings-DQxytUI3.js.map +0 -1
  1552. package/dist/spacings-VmI3HJoY.cjs +0 -170
  1553. package/dist/spacings-VmI3HJoY.cjs.map +0 -1
  1554. package/dist/spinner-Bj7FQzLQ.cjs +0 -53
  1555. package/dist/spinner-Bj7FQzLQ.cjs.map +0 -1
  1556. package/dist/spinner-CUkNhTKC.js +0 -51
  1557. package/dist/spinner-CUkNhTKC.js.map +0 -1
  1558. package/dist/src/domains/traces/components/span-duration-col.d.ts +0 -9
  1559. package/dist/src/domains/traces/components/span-timeline-col.d.ts +0 -6
  1560. package/dist/src/domains/traces/components/timeline-expand-col.d.ts +0 -18
  1561. package/dist/src/domains/traces/components/traces-layout.d.ts +0 -30
  1562. package/dist/src/domains/traces/components/traces-toolbar.d.ts +0 -19
  1563. package/dist/src/ds/components/Composer/use-composer-pointer-angle.d.ts +0 -2
  1564. package/dist/src/ds/components/Workflow/cards/workflow-card-badges.d.ts +0 -6
  1565. package/dist/src/ds/components/Workflow/cards/workflow-card-status-icon.d.ts +0 -6
  1566. package/dist/src/ds/components/Workflow/cards/workflow-condition-card-view.d.ts +0 -2
  1567. package/dist/src/ds/components/Workflow/cards/workflow-condition-card.d.ts +0 -5
  1568. package/dist/src/ds/components/Workflow/cards/workflow-condition-code.d.ts +0 -12
  1569. package/dist/src/ds/components/Workflow/cards/workflow-step-card-view.d.ts +0 -2
  1570. package/dist/switch-A-j7GDcX.js +0 -103
  1571. package/dist/switch-A-j7GDcX.js.map +0 -1
  1572. package/dist/switch-BROLIeGF.cjs +0 -124
  1573. package/dist/switch-BROLIeGF.cjs.map +0 -1
  1574. package/dist/tabs-content-CV7YrtD1.cjs +0 -31
  1575. package/dist/tabs-content-CV7YrtD1.cjs.map +0 -1
  1576. package/dist/tabs-content-CW6RtAEV.js +0 -29
  1577. package/dist/tabs-content-CW6RtAEV.js.map +0 -1
  1578. package/dist/tabs-root-BAy8m6GO.js +0 -324
  1579. package/dist/tabs-root-BAy8m6GO.js.map +0 -1
  1580. package/dist/tabs-root-Dw7gHsnZ.cjs +0 -327
  1581. package/dist/tabs-root-Dw7gHsnZ.cjs.map +0 -1
  1582. package/dist/tabs-tab-CP-kzlvB.cjs +0 -99
  1583. package/dist/tabs-tab-CP-kzlvB.cjs.map +0 -1
  1584. package/dist/tabs-tab-K5mQhs7r.js +0 -97
  1585. package/dist/tabs-tab-K5mQhs7r.js.map +0 -1
  1586. package/dist/text-field-block-CUN9gL4j.js +0 -49
  1587. package/dist/text-field-block-CUN9gL4j.js.map +0 -1
  1588. package/dist/text-field-block-WuwrSNEX.cjs +0 -51
  1589. package/dist/text-field-block-WuwrSNEX.cjs.map +0 -1
  1590. package/dist/textarea-BCVPeJzr.js +0 -62
  1591. package/dist/textarea-BCVPeJzr.js.map +0 -1
  1592. package/dist/textarea-D9XsLoN5.cjs +0 -83
  1593. package/dist/textarea-D9XsLoN5.cjs.map +0 -1
  1594. package/dist/thread-rail-lebYetuv.cjs +0 -334
  1595. package/dist/thread-rail-lebYetuv.cjs.map +0 -1
  1596. package/dist/thread-rail-o19IAzcJ.js +0 -313
  1597. package/dist/thread-rail-o19IAzcJ.js.map +0 -1
  1598. package/dist/time-picker-BKpmCbXS.cjs +0 -78
  1599. package/dist/time-picker-BKpmCbXS.cjs.map +0 -1
  1600. package/dist/time-picker-SgrQvt0V.js +0 -76
  1601. package/dist/time-picker-SgrQvt0V.js.map +0 -1
  1602. package/dist/toast-FypW736q.cjs +0 -55
  1603. package/dist/toast-FypW736q.cjs.map +0 -1
  1604. package/dist/toast-Xv8jgrMR.js +0 -52
  1605. package/dist/toast-Xv8jgrMR.js.map +0 -1
  1606. package/dist/tool-call-BlKbOYRH.js +0 -181
  1607. package/dist/tool-call-BlKbOYRH.js.map +0 -1
  1608. package/dist/tool-call-DVh_yWov.cjs +0 -196
  1609. package/dist/tool-call-DVh_yWov.cjs.map +0 -1
  1610. package/dist/tooltip-BsSNtmxl.cjs +0 -136
  1611. package/dist/tooltip-BsSNtmxl.cjs.map +0 -1
  1612. package/dist/tooltip-Vj_jjcxE.js +0 -112
  1613. package/dist/tooltip-Vj_jjcxE.js.map +0 -1
  1614. package/dist/traces-data-list-0WfYCKdc.cjs +0 -86
  1615. package/dist/traces-data-list-0WfYCKdc.cjs.map +0 -1
  1616. package/dist/traces-data-list-BOiAOwYM.js +0 -84
  1617. package/dist/traces-data-list-BOiAOwYM.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"use-trace-url-state.cjs.js","sources":["../../../../src/domains/traces/hooks/use-trace-url-state.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef } from 'react';\nimport type { SpanTab, TraceDatePreset } from '../index';\nimport {\n ROOT_ENTITY_TYPE_OPTIONS,\n TRACE_ANCHOR_SPAN_ID_PARAM,\n TRACE_DATE_FROM_PARAM,\n TRACE_DATE_PRESET_PARAM,\n TRACE_DATE_PRESET_VALUES,\n TRACE_DATE_TO_PARAM,\n TRACE_PROPERTY_FILTER_FIELD_IDS,\n TRACE_LIST_MODE_PARAM,\n TRACE_LIST_MODE_VALUES,\n TRACE_PROPERTY_FILTER_PARAM_BY_FIELD,\n TRACE_ROOT_ENTITY_TYPE_PARAM,\n TRACE_STATUS_PARAM,\n TRACE_STATUS_VALUES,\n applyTracePropertyFilterTokens,\n getTracePropertyFilterTokens,\n} from '../trace-filters';\nimport type { EntityOptions, TraceListMode, TraceStatusFilter } from '../trace-filters';\nimport type { PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\nconst TRACE_ID_PARAM = 'traceId';\nconst SPAN_ID_PARAM = 'spanId';\nconst TAB_PARAM = 'tab';\nconst SCORE_ID_PARAM = 'scoreId';\nconst HIGHLIGHT_SPAN_IDS_PARAM = 'highlightSpanIds';\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\nconst PRESET_MS: Partial<Record<TraceDatePreset, number>> = {\n 'last-24h': DAY_MS,\n 'last-3d': 3 * DAY_MS,\n 'last-7d': 7 * DAY_MS,\n 'last-14d': 14 * DAY_MS,\n 'last-30d': 30 * DAY_MS,\n};\n\n/** Mutates `params` in place to drop the featured trace/span/tab/score selection.\n * Used whenever a filter changes — selection no longer makes sense in the new result set. */\nfunction clearSelectionParams(params: URLSearchParams) {\n params.delete(TRACE_ID_PARAM);\n params.delete(SPAN_ID_PARAM);\n params.delete(TRACE_ANCHOR_SPAN_ID_PARAM);\n params.delete(TAB_PARAM);\n params.delete(SCORE_ID_PARAM);\n params.delete(HIGHLIGHT_SPAN_IDS_PARAM);\n}\n\n/** Minimal interface compatible with react-router's `setSearchParams`. */\nexport type SetURLSearchParamsLike = (\n next: URLSearchParams | ((prev: URLSearchParams) => URLSearchParams),\n options?: { replace?: boolean; preventScrollReset?: boolean; state?: unknown },\n) => void;\n\nexport interface UseTraceUrlStateOptions {\n /** Called after `handleRemoveAll` clears all filter URL params. Use this to reset page-local\n * UI state (e.g. a \"group by thread\" toggle) without wrapping the handler. */\n onRemoveAll?: () => void;\n}\n\nexport interface UseTraceUrlStateResult {\n // Raw search params passed through for convenience\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n\n // Date state (derived from URL)\n datePreset: TraceDatePreset;\n selectedDateFrom: Date | undefined;\n selectedDateTo: Date | undefined;\n /** Synchronously-updated ref of the latest preset. Used to ignore onDateChange callbacks\n * the date picker fires after a non-custom preset switch. */\n datePresetRef: React.MutableRefObject<TraceDatePreset>;\n\n // Selection state (derived from URL)\n traceIdParam: string | undefined;\n spanIdParam: string | undefined;\n /** Branch-mode only: the anchor span that defines the displayed subtree. Stable while the\n * user navigates between spans inside the panel (which only changes `spanIdParam`). */\n anchorSpanIdParam: string | undefined;\n spanTabParam: SpanTab | undefined;\n scoreIdParam: string | undefined;\n /** Span ids featured in the timeline (e.g. the spans behind a reconstructed message). Empty when unset. */\n highlightSpanIdsParam: string[];\n\n // Filter state (derived from URL)\n listMode: TraceListMode;\n selectedEntityOption: EntityOptions | undefined;\n selectedStatus: TraceStatusFilter | undefined;\n filterTokens: PropertyFilterToken[];\n\n // URL-modifying handlers\n /**\n * Selects a row. In traces mode pass just `traceId` (and optionally a `spanId` for an\n * initial span selection in the panel). In branches mode also pass `anchorSpanId` — the\n * branch identity, kept stable while the user navigates between spans inside the panel.\n * Branch rows are identified by (traceId, anchorSpanId); trace rows by traceId alone.\n */\n handleTraceClick: (traceId: string, spanId?: string, anchorSpanId?: string) => void;\n /** Convenience: clears the featured trace selection. Equivalent to `handleTraceClick('')`. */\n handleTraceClose: () => void;\n handleSpanChange: (spanId: string | null) => void;\n /** Convenience: clears the featured span selection. Equivalent to `handleSpanChange(null)`. */\n handleSpanClose: () => void;\n handleSpanTabChange: (tab: SpanTab) => void;\n /** Selects a span AND switches its panel tab in a single URL update. Use when both must change\n * from one interaction (e.g. \"Evaluate Trace\"). Calling `handleSpanChange` + `handleSpanTabChange`\n * separately races: each functional `setSearchParams` updater reads the same pre-update\n * `searchParams` snapshot, so the second navigation overwrites the first (last write wins) and one\n * of the two changes is lost on the first click. */\n handleSpanChangeWithTab: (spanId: string, tab: SpanTab) => void;\n handleScoreChange: (scoreId: string | null) => void;\n /** Features `spanIds` in the timeline and selects the first one. An empty array clears the highlight. */\n handleHighlightSpans: (spanIds: string[]) => void;\n /** Switches the list view between traces and branches. Clears the current selection. */\n handleListModeChange: (mode: TraceListMode) => void;\n handleFilterTokensChange: (nextTokens: PropertyFilterToken[]) => void;\n handleDateChange: (value: Date | undefined, type: 'from' | 'to') => void;\n handleDatePresetChange: (preset: TraceDatePreset) => void;\n handleRemoveAll: () => void;\n\n /** Lower-level helper used by `handleClear`: writes a token set and clears the trace/span selection. */\n applyFilterTokens: (tokens: PropertyFilterToken[]) => void;\n}\n\n/**\n * Owns all URL-derived state and URL-modifying handlers for the traces page. Routing-agnostic —\n * pass `searchParams` and `setSearchParams` from whichever router the consumer uses.\n *\n * Stays focused on URL state: localStorage save/restore, filter discovery, and the error-view\n * short-circuit are intentionally NOT part of this hook so consumers can swap them independently.\n */\nexport function useTraceUrlState(\n searchParams: URLSearchParams,\n setSearchParams: SetURLSearchParamsLike,\n options?: UseTraceUrlStateOptions,\n): UseTraceUrlStateResult {\n const { onRemoveAll } = options ?? {};\n const datePreset = useMemo<TraceDatePreset>(() => {\n const value = searchParams.get(TRACE_DATE_PRESET_PARAM);\n return value && TRACE_DATE_PRESET_VALUES.has(value as TraceDatePreset) ? (value as TraceDatePreset) : 'last-24h';\n }, [searchParams]);\n\n const dateFromParamRaw = searchParams.get(TRACE_DATE_FROM_PARAM);\n const dateToParamRaw = searchParams.get(TRACE_DATE_TO_PARAM);\n\n const selectedDateFrom = useMemo(() => {\n if (datePreset === 'custom') {\n if (!dateFromParamRaw) return undefined;\n const parsed = new Date(dateFromParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }\n // 'all' has no entry in PRESET_MS, so it falls out as an open-ended window.\n const ms = PRESET_MS[datePreset];\n return ms ? new Date(Date.now() - ms) : undefined;\n }, [datePreset, dateFromParamRaw]);\n\n const selectedDateTo = useMemo(() => {\n if (datePreset !== 'custom' || !dateToParamRaw) return undefined;\n const parsed = new Date(dateToParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }, [datePreset, dateToParamRaw]);\n\n // Track the latest preset synchronously so onDateChange callbacks that follow\n // a non-custom preset switch can be ignored (router setSearchParams captures\n // searchParams in its closure, so multiple synchronous calls would otherwise\n // clobber each other).\n const datePresetRef = useRef(datePreset);\n datePresetRef.current = datePreset;\n\n const traceIdParam = searchParams.get(TRACE_ID_PARAM) || undefined;\n const spanIdParam = searchParams.get(SPAN_ID_PARAM) || undefined;\n /** Branch-mode only: identifies which branch (anchor span) the panel is viewing. Stays put\n * while the user navigates between spans inside the panel (which only changes spanIdParam). */\n const anchorSpanIdParam = searchParams.get(TRACE_ANCHOR_SPAN_ID_PARAM) || undefined;\n const tabParam = searchParams.get(TAB_PARAM);\n const spanTabParam: SpanTab | undefined =\n tabParam === 'feedback' ? 'feedback' : tabParam === 'details' ? 'details' : undefined;\n const scoreIdParam = searchParams.get(SCORE_ID_PARAM) || undefined;\n const highlightSpanIdsRaw = searchParams.get(HIGHLIGHT_SPAN_IDS_PARAM);\n const highlightSpanIdsParam = useMemo(\n () => (highlightSpanIdsRaw ? highlightSpanIdsRaw.split(',').filter(Boolean) : []),\n [highlightSpanIdsRaw],\n );\n\n const listMode = useMemo<TraceListMode>(() => {\n const value = searchParams.get(TRACE_LIST_MODE_PARAM);\n return value && TRACE_LIST_MODE_VALUES.has(value as TraceListMode) ? (value as TraceListMode) : 'traces';\n }, [searchParams]);\n const selectedEntityOption = useMemo(\n () => ROOT_ENTITY_TYPE_OPTIONS.find(option => option.entityType === searchParams.get(TRACE_ROOT_ENTITY_TYPE_PARAM)),\n [searchParams],\n );\n const selectedStatus = useMemo<TraceStatusFilter | undefined>(() => {\n const value = searchParams.get(TRACE_STATUS_PARAM);\n return value && TRACE_STATUS_VALUES.has(value as TraceStatusFilter) ? (value as TraceStatusFilter) : undefined;\n }, [searchParams]);\n const filterTokens = useMemo(() => getTracePropertyFilterTokens(searchParams), [searchParams]);\n\n const handleTraceClick = useCallback(\n (traceId: string, spanId?: string, anchorSpanId?: string) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (traceId) {\n next.set(TRACE_ID_PARAM, traceId);\n } else {\n next.delete(TRACE_ID_PARAM);\n }\n if (spanId) {\n next.set(SPAN_ID_PARAM, spanId);\n } else {\n next.delete(SPAN_ID_PARAM);\n }\n if (anchorSpanId) {\n next.set(TRACE_ANCHOR_SPAN_ID_PARAM, anchorSpanId);\n } else {\n next.delete(TRACE_ANCHOR_SPAN_ID_PARAM);\n }\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n next.delete(HIGHLIGHT_SPAN_IDS_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleTraceClose = useCallback(() => handleTraceClick(''), [handleTraceClick]);\n\n const handleSpanChange = useCallback(\n (spanId: string | null) => {\n const currentSpanId = searchParams.get(SPAN_ID_PARAM) || null;\n if (spanId === currentSpanId) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (spanId) {\n next.set(SPAN_ID_PARAM, spanId);\n } else {\n next.delete(SPAN_ID_PARAM);\n }\n // Tab + score are per-span; they'd point at the previous span's context otherwise.\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleSpanClose = useCallback(() => handleSpanChange(null), [handleSpanChange]);\n\n const handleSpanTabChange = useCallback(\n (tab: SpanTab) => {\n const currentTab = searchParams.get(TAB_PARAM) || null;\n if (tab === currentTab) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (tab && tab !== 'details') {\n next.set(TAB_PARAM, tab);\n } else {\n next.delete(TAB_PARAM);\n }\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleSpanChangeWithTab = useCallback(\n (spanId: string, tab: SpanTab) => {\n const nextTab = tab && tab !== 'details' ? tab : null;\n // No-op guard (same pattern as the sibling handlers): skip the navigation only when span,\n // tab AND score are already exactly what this call would produce.\n const isNoOp =\n spanId === (searchParams.get(SPAN_ID_PARAM) || null) &&\n nextTab === (searchParams.get(TAB_PARAM) || null) &&\n !searchParams.get(SCORE_ID_PARAM);\n if (isNoOp) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n next.set(SPAN_ID_PARAM, spanId);\n if (nextTab) {\n next.set(TAB_PARAM, nextTab);\n } else {\n next.delete(TAB_PARAM);\n }\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleScoreChange = useCallback(\n (scoreId: string | null) => {\n const currentScoreId = searchParams.get(SCORE_ID_PARAM) || null;\n if (scoreId === currentScoreId) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (scoreId) {\n next.set(SCORE_ID_PARAM, scoreId);\n } else {\n next.delete(SCORE_ID_PARAM);\n }\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleHighlightSpans = useCallback(\n (spanIds: string[]) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n const [firstSpanId] = spanIds;\n if (!firstSpanId) {\n next.delete(HIGHLIGHT_SPAN_IDS_PARAM);\n return next;\n }\n next.set(HIGHLIGHT_SPAN_IDS_PARAM, spanIds.join(','));\n // Open the detail panel on the first highlighted span.\n next.set(SPAN_ID_PARAM, firstSpanId);\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const applyFilterTokens = useCallback(\n (tokens: PropertyFilterToken[]) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n // applyTracePropertyFilterTokens wipes all filter params (including\n // rootEntityType / status) and re-adds them in `nextTokens` order so\n // URL insertion order == filter creation order.\n applyTracePropertyFilterTokens(next, tokens);\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleFilterTokensChange = applyFilterTokens;\n\n // Only relevant for 'custom' — the picker also fires onDateChange after a\n // non-custom preset switch, which we ignore to avoid racing URL updates.\n const handleDateChange = useCallback(\n (value: Date | undefined, type: 'from' | 'to') => {\n if (datePresetRef.current !== 'custom') return;\n const param = type === 'from' ? TRACE_DATE_FROM_PARAM : TRACE_DATE_TO_PARAM;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (value) {\n next.set(param, value.toISOString());\n } else {\n next.delete(param);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleDatePresetChange = useCallback(\n (preset: TraceDatePreset) => {\n // Update ref synchronously so any onDateChange fired by the picker in the\n // same tick (for non-custom presets) sees the new value and skips.\n datePresetRef.current = preset;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (preset === 'last-24h') {\n // Default — clear all date params.\n next.delete(TRACE_DATE_PRESET_PARAM);\n next.delete(TRACE_DATE_FROM_PARAM);\n next.delete(TRACE_DATE_TO_PARAM);\n } else if (preset === 'custom') {\n next.set(TRACE_DATE_PRESET_PARAM, 'custom');\n // Keep existing dateFrom/dateTo for the user to adjust.\n } else {\n // `last-*` or 'all' — only the preset is stored; dates are derived.\n next.set(TRACE_DATE_PRESET_PARAM, preset);\n next.delete(TRACE_DATE_FROM_PARAM);\n next.delete(TRACE_DATE_TO_PARAM);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleListModeChange = useCallback(\n (mode: TraceListMode) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (mode === 'traces') {\n next.delete(TRACE_LIST_MODE_PARAM);\n } else {\n next.set(TRACE_LIST_MODE_PARAM, mode);\n }\n // Clear selection: rows from the previous mode don't map cleanly to the new mode.\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleRemoveAll = useCallback(() => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n next.delete(TRACE_LIST_MODE_PARAM);\n next.delete(TRACE_ROOT_ENTITY_TYPE_PARAM);\n next.delete(TRACE_STATUS_PARAM);\n for (const fieldId of TRACE_PROPERTY_FILTER_FIELD_IDS) {\n next.delete(TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n onRemoveAll?.();\n }, [setSearchParams, onRemoveAll]);\n\n return {\n searchParams,\n setSearchParams,\n datePreset,\n selectedDateFrom,\n selectedDateTo,\n datePresetRef,\n traceIdParam,\n spanIdParam,\n anchorSpanIdParam,\n spanTabParam,\n scoreIdParam,\n highlightSpanIdsParam,\n listMode,\n selectedEntityOption,\n selectedStatus,\n filterTokens,\n handleTraceClick,\n handleTraceClose,\n handleSpanChange,\n handleSpanClose,\n handleSpanTabChange,\n handleSpanChangeWithTab,\n handleScoreChange,\n handleHighlightSpans,\n handleListModeChange,\n handleFilterTokensChange,\n handleDateChange,\n handleDatePresetChange,\n handleRemoveAll,\n applyFilterTokens,\n };\n}\n"],"names":["TRACE_ANCHOR_SPAN_ID_PARAM","useMemo","TRACE_DATE_PRESET_PARAM","TRACE_DATE_PRESET_VALUES","TRACE_DATE_FROM_PARAM","TRACE_DATE_TO_PARAM","useRef","TRACE_LIST_MODE_PARAM","TRACE_LIST_MODE_VALUES","ROOT_ENTITY_TYPE_OPTIONS","TRACE_ROOT_ENTITY_TYPE_PARAM","TRACE_STATUS_PARAM","TRACE_STATUS_VALUES","getTracePropertyFilterTokens","useCallback","applyTracePropertyFilterTokens","TRACE_PROPERTY_FILTER_FIELD_IDS","TRACE_PROPERTY_FILTER_PARAM_BY_FIELD"],"mappings":"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"}
1
+ {"version":3,"file":"use-trace-url-state.cjs.js","sources":["../../../../src/domains/traces/hooks/use-trace-url-state.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef } from 'react';\nimport type { SpanTab, TraceDatePreset } from '../index';\nimport {\n ROOT_ENTITY_TYPE_OPTIONS,\n TRACE_ANCHOR_SPAN_ID_PARAM,\n TRACE_DATE_FROM_PARAM,\n TRACE_DATE_PRESET_PARAM,\n TRACE_DATE_PRESET_VALUES,\n TRACE_DATE_TO_PARAM,\n TRACE_PROPERTY_FILTER_FIELD_IDS,\n TRACE_LIST_MODE_PARAM,\n TRACE_LIST_MODE_VALUES,\n TRACE_PROPERTY_FILTER_PARAM_BY_FIELD,\n TRACE_ROOT_ENTITY_TYPE_PARAM,\n TRACE_STATUS_PARAM,\n TRACE_STATUS_VALUES,\n applyTracePropertyFilterTokens,\n getTracePropertyFilterTokens,\n} from '../trace-filters';\nimport type { EntityOptions, TraceListMode, TraceStatusFilter } from '../trace-filters';\nimport type { PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\nconst TRACE_ID_PARAM = 'traceId';\nconst SPAN_ID_PARAM = 'spanId';\nconst TAB_PARAM = 'tab';\nconst SCORE_ID_PARAM = 'scoreId';\nconst HIGHLIGHT_SPAN_IDS_PARAM = 'highlightSpanIds';\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\nconst PRESET_MS: Partial<Record<TraceDatePreset, number>> = {\n 'last-24h': DAY_MS,\n 'last-3d': 3 * DAY_MS,\n 'last-7d': 7 * DAY_MS,\n 'last-14d': 14 * DAY_MS,\n 'last-30d': 30 * DAY_MS,\n};\n\n/** Mutates `params` in place to drop the featured trace/span/tab/score selection.\n * Used whenever a filter changes — selection no longer makes sense in the new result set. */\nfunction clearSelectionParams(params: URLSearchParams) {\n params.delete(TRACE_ID_PARAM);\n params.delete(SPAN_ID_PARAM);\n params.delete(TRACE_ANCHOR_SPAN_ID_PARAM);\n params.delete(TAB_PARAM);\n params.delete(SCORE_ID_PARAM);\n params.delete(HIGHLIGHT_SPAN_IDS_PARAM);\n}\n\n/** Minimal interface compatible with react-router's `setSearchParams`. */\nexport type SetURLSearchParamsLike = (\n next: URLSearchParams | ((prev: URLSearchParams) => URLSearchParams),\n options?: { replace?: boolean; preventScrollReset?: boolean; state?: unknown },\n) => void;\n\nexport interface UseTraceUrlStateOptions {\n /** Called after `handleRemoveAll` clears all filter URL params. Use this to reset page-local\n * UI state (e.g. a \"group by thread\" toggle) without wrapping the handler. */\n onRemoveAll?: () => void;\n}\n\nexport interface UseTraceUrlStateResult {\n // Raw search params passed through for convenience\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n\n // Date state (derived from URL)\n datePreset: TraceDatePreset;\n selectedDateFrom: Date | undefined;\n selectedDateTo: Date | undefined;\n /** Synchronously-updated ref of the latest preset. Used to ignore onDateChange callbacks\n * the date picker fires after a non-custom preset switch. */\n datePresetRef: React.MutableRefObject<TraceDatePreset>;\n\n // Selection state (derived from URL)\n traceIdParam: string | undefined;\n spanIdParam: string | undefined;\n /** Branch-mode only: the anchor span that defines the displayed subtree. Stable while the\n * user navigates between spans inside the panel (which only changes `spanIdParam`). */\n anchorSpanIdParam: string | undefined;\n spanTabParam: SpanTab | undefined;\n scoreIdParam: string | undefined;\n /** Span ids featured in the timeline (e.g. the spans behind a reconstructed message). Empty when unset. */\n highlightSpanIdsParam: string[];\n\n // Filter state (derived from URL)\n listMode: TraceListMode;\n selectedEntityOption: EntityOptions | undefined;\n selectedStatus: TraceStatusFilter | undefined;\n filterTokens: PropertyFilterToken[];\n\n // URL-modifying handlers\n /**\n * Selects a row. In traces mode pass just `traceId` (and optionally a `spanId` for an\n * initial span selection in the panel). In branches mode also pass `anchorSpanId` — the\n * branch identity, kept stable while the user navigates between spans inside the panel.\n * Branch rows are identified by (traceId, anchorSpanId); trace rows by traceId alone.\n */\n handleTraceClick: (traceId: string, spanId?: string, anchorSpanId?: string) => void;\n /** Convenience: clears the featured trace selection. Equivalent to `handleTraceClick('')`. */\n handleTraceClose: () => void;\n handleSpanChange: (spanId: string | null) => void;\n /** Convenience: clears the featured span selection. Equivalent to `handleSpanChange(null)`. */\n handleSpanClose: () => void;\n handleSpanTabChange: (tab: SpanTab) => void;\n /** Selects a span AND switches its panel tab in a single URL update. Use when both must change\n * from one interaction (e.g. \"Evaluate Trace\"). Calling `handleSpanChange` + `handleSpanTabChange`\n * separately races: each functional `setSearchParams` updater reads the same pre-update\n * `searchParams` snapshot, so the second navigation overwrites the first (last write wins) and one\n * of the two changes is lost on the first click. */\n handleSpanChangeWithTab: (spanId: string, tab: SpanTab) => void;\n handleScoreChange: (scoreId: string | null) => void;\n /** Features `spanIds` in the timeline and selects the first one. An empty array clears the highlight. */\n handleHighlightSpans: (spanIds: string[]) => void;\n /** Switches the list view between traces and branches. Clears the current selection. */\n handleListModeChange: (mode: TraceListMode) => void;\n handleFilterTokensChange: (nextTokens: PropertyFilterToken[]) => void;\n handleDateChange: (value: Date | undefined, type: 'from' | 'to') => void;\n /** Writes both ends of a custom range in one URL update (two `handleDateChange` calls in the\n * same tick would clobber each other through react-router's closure-bound setter). */\n handleDateRangeChange: (from: Date | undefined, to: Date | undefined) => void;\n handleDatePresetChange: (preset: TraceDatePreset) => void;\n handleRemoveAll: () => void;\n\n /** Lower-level helper used by `handleClear`: writes a token set and clears the trace/span selection. */\n applyFilterTokens: (tokens: PropertyFilterToken[]) => void;\n}\n\n/**\n * Owns all URL-derived state and URL-modifying handlers for the traces page. Routing-agnostic —\n * pass `searchParams` and `setSearchParams` from whichever router the consumer uses.\n *\n * Stays focused on URL state: localStorage save/restore, filter discovery, and the error-view\n * short-circuit are intentionally NOT part of this hook so consumers can swap them independently.\n */\nexport function useTraceUrlState(\n searchParams: URLSearchParams,\n setSearchParams: SetURLSearchParamsLike,\n options?: UseTraceUrlStateOptions,\n): UseTraceUrlStateResult {\n const { onRemoveAll } = options ?? {};\n const datePreset = useMemo<TraceDatePreset>(() => {\n const value = searchParams.get(TRACE_DATE_PRESET_PARAM);\n return value && value !== 'all' && TRACE_DATE_PRESET_VALUES.has(value as TraceDatePreset)\n ? (value as TraceDatePreset)\n : 'last-7d';\n }, [searchParams]);\n\n const dateFromParamRaw = searchParams.get(TRACE_DATE_FROM_PARAM);\n const dateToParamRaw = searchParams.get(TRACE_DATE_TO_PARAM);\n\n const selectedDateFrom = useMemo(() => {\n if (datePreset === 'custom') {\n if (!dateFromParamRaw) return undefined;\n const parsed = new Date(dateFromParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }\n // 'all' has no entry in PRESET_MS, so it falls out as an open-ended window.\n const ms = PRESET_MS[datePreset];\n return ms ? new Date(Date.now() - ms) : undefined;\n }, [datePreset, dateFromParamRaw]);\n\n const selectedDateTo = useMemo(() => {\n if (datePreset !== 'custom' || !dateToParamRaw) return undefined;\n const parsed = new Date(dateToParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }, [datePreset, dateToParamRaw]);\n\n // Track the latest preset synchronously so onDateChange callbacks that follow\n // a non-custom preset switch can be ignored (router setSearchParams captures\n // searchParams in its closure, so multiple synchronous calls would otherwise\n // clobber each other).\n const datePresetRef = useRef(datePreset);\n datePresetRef.current = datePreset;\n\n const traceIdParam = searchParams.get(TRACE_ID_PARAM) || undefined;\n const spanIdParam = searchParams.get(SPAN_ID_PARAM) || undefined;\n /** Branch-mode only: identifies which branch (anchor span) the panel is viewing. Stays put\n * while the user navigates between spans inside the panel (which only changes spanIdParam). */\n const anchorSpanIdParam = searchParams.get(TRACE_ANCHOR_SPAN_ID_PARAM) || undefined;\n const tabParam = searchParams.get(TAB_PARAM);\n const spanTabParam: SpanTab | undefined =\n tabParam === 'feedback' ? 'feedback' : tabParam === 'details' ? 'details' : undefined;\n const scoreIdParam = searchParams.get(SCORE_ID_PARAM) || undefined;\n const highlightSpanIdsRaw = searchParams.get(HIGHLIGHT_SPAN_IDS_PARAM);\n const highlightSpanIdsParam = useMemo(\n () => (highlightSpanIdsRaw ? highlightSpanIdsRaw.split(',').filter(Boolean) : []),\n [highlightSpanIdsRaw],\n );\n\n const listMode = useMemo<TraceListMode>(() => {\n const value = searchParams.get(TRACE_LIST_MODE_PARAM);\n return value && TRACE_LIST_MODE_VALUES.has(value as TraceListMode) ? (value as TraceListMode) : 'traces';\n }, [searchParams]);\n const selectedEntityOption = useMemo(\n () => ROOT_ENTITY_TYPE_OPTIONS.find(option => option.entityType === searchParams.get(TRACE_ROOT_ENTITY_TYPE_PARAM)),\n [searchParams],\n );\n const selectedStatus = useMemo<TraceStatusFilter | undefined>(() => {\n const value = searchParams.get(TRACE_STATUS_PARAM);\n return value && TRACE_STATUS_VALUES.has(value as TraceStatusFilter) ? (value as TraceStatusFilter) : undefined;\n }, [searchParams]);\n const filterTokens = useMemo(() => getTracePropertyFilterTokens(searchParams), [searchParams]);\n\n const handleTraceClick = useCallback(\n (traceId: string, spanId?: string, anchorSpanId?: string) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (traceId) {\n next.set(TRACE_ID_PARAM, traceId);\n } else {\n next.delete(TRACE_ID_PARAM);\n }\n if (spanId) {\n next.set(SPAN_ID_PARAM, spanId);\n } else {\n next.delete(SPAN_ID_PARAM);\n }\n if (anchorSpanId) {\n next.set(TRACE_ANCHOR_SPAN_ID_PARAM, anchorSpanId);\n } else {\n next.delete(TRACE_ANCHOR_SPAN_ID_PARAM);\n }\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n next.delete(HIGHLIGHT_SPAN_IDS_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleTraceClose = useCallback(() => handleTraceClick(''), [handleTraceClick]);\n\n const handleSpanChange = useCallback(\n (spanId: string | null) => {\n const currentSpanId = searchParams.get(SPAN_ID_PARAM) || null;\n if (spanId === currentSpanId) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (spanId) {\n next.set(SPAN_ID_PARAM, spanId);\n } else {\n next.delete(SPAN_ID_PARAM);\n }\n // Tab + score are per-span; they'd point at the previous span's context otherwise.\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleSpanClose = useCallback(() => handleSpanChange(null), [handleSpanChange]);\n\n const handleSpanTabChange = useCallback(\n (tab: SpanTab) => {\n const currentTab = searchParams.get(TAB_PARAM) || null;\n if (tab === currentTab) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (tab && tab !== 'details') {\n next.set(TAB_PARAM, tab);\n } else {\n next.delete(TAB_PARAM);\n }\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleSpanChangeWithTab = useCallback(\n (spanId: string, tab: SpanTab) => {\n const nextTab = tab && tab !== 'details' ? tab : null;\n // No-op guard (same pattern as the sibling handlers): skip the navigation only when span,\n // tab AND score are already exactly what this call would produce.\n const isNoOp =\n spanId === (searchParams.get(SPAN_ID_PARAM) || null) &&\n nextTab === (searchParams.get(TAB_PARAM) || null) &&\n !searchParams.get(SCORE_ID_PARAM);\n if (isNoOp) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n next.set(SPAN_ID_PARAM, spanId);\n if (nextTab) {\n next.set(TAB_PARAM, nextTab);\n } else {\n next.delete(TAB_PARAM);\n }\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleScoreChange = useCallback(\n (scoreId: string | null) => {\n const currentScoreId = searchParams.get(SCORE_ID_PARAM) || null;\n if (scoreId === currentScoreId) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (scoreId) {\n next.set(SCORE_ID_PARAM, scoreId);\n } else {\n next.delete(SCORE_ID_PARAM);\n }\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleHighlightSpans = useCallback(\n (spanIds: string[]) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n const [firstSpanId] = spanIds;\n if (!firstSpanId) {\n next.delete(HIGHLIGHT_SPAN_IDS_PARAM);\n return next;\n }\n next.set(HIGHLIGHT_SPAN_IDS_PARAM, spanIds.join(','));\n // Open the detail panel on the first highlighted span.\n next.set(SPAN_ID_PARAM, firstSpanId);\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const applyFilterTokens = useCallback(\n (tokens: PropertyFilterToken[]) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n // applyTracePropertyFilterTokens wipes all filter params (including\n // rootEntityType / status) and re-adds them in `nextTokens` order so\n // URL insertion order == filter creation order.\n applyTracePropertyFilterTokens(next, tokens);\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleFilterTokensChange = applyFilterTokens;\n\n // Only relevant for 'custom' — the picker also fires onDateChange after a\n // non-custom preset switch, which we ignore to avoid racing URL updates.\n const handleDateChange = useCallback(\n (value: Date | undefined, type: 'from' | 'to') => {\n if (datePresetRef.current !== 'custom') return;\n const param = type === 'from' ? TRACE_DATE_FROM_PARAM : TRACE_DATE_TO_PARAM;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (value) {\n next.set(param, value.toISOString());\n } else {\n next.delete(param);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleDateRangeChange = useCallback(\n (from: Date | undefined, to: Date | undefined) => {\n if (datePresetRef.current !== 'custom') return;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (from) next.set(TRACE_DATE_FROM_PARAM, from.toISOString());\n else next.delete(TRACE_DATE_FROM_PARAM);\n if (to) next.set(TRACE_DATE_TO_PARAM, to.toISOString());\n else next.delete(TRACE_DATE_TO_PARAM);\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleDatePresetChange = useCallback(\n (preset: TraceDatePreset) => {\n // Update ref synchronously so any onDateChange fired by the picker in the\n // same tick (for non-custom presets) sees the new value and skips.\n datePresetRef.current = preset;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (preset === 'last-7d') {\n // Default — clear all date params.\n next.delete(TRACE_DATE_PRESET_PARAM);\n next.delete(TRACE_DATE_FROM_PARAM);\n next.delete(TRACE_DATE_TO_PARAM);\n } else if (preset === 'custom') {\n next.set(TRACE_DATE_PRESET_PARAM, 'custom');\n // Keep existing dateFrom/dateTo for the user to adjust.\n } else {\n // `last-*` or 'all' — only the preset is stored; dates are derived.\n next.set(TRACE_DATE_PRESET_PARAM, preset);\n next.delete(TRACE_DATE_FROM_PARAM);\n next.delete(TRACE_DATE_TO_PARAM);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleListModeChange = useCallback(\n (mode: TraceListMode) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (mode === 'traces') {\n next.delete(TRACE_LIST_MODE_PARAM);\n } else {\n next.set(TRACE_LIST_MODE_PARAM, mode);\n }\n // Clear selection: rows from the previous mode don't map cleanly to the new mode.\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleRemoveAll = useCallback(() => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n next.delete(TRACE_LIST_MODE_PARAM);\n next.delete(TRACE_ROOT_ENTITY_TYPE_PARAM);\n next.delete(TRACE_STATUS_PARAM);\n for (const fieldId of TRACE_PROPERTY_FILTER_FIELD_IDS) {\n next.delete(TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n onRemoveAll?.();\n }, [setSearchParams, onRemoveAll]);\n\n return {\n searchParams,\n setSearchParams,\n datePreset,\n selectedDateFrom,\n selectedDateTo,\n datePresetRef,\n traceIdParam,\n spanIdParam,\n anchorSpanIdParam,\n spanTabParam,\n scoreIdParam,\n highlightSpanIdsParam,\n listMode,\n selectedEntityOption,\n selectedStatus,\n filterTokens,\n handleTraceClick,\n handleTraceClose,\n handleSpanChange,\n handleSpanClose,\n handleSpanTabChange,\n handleSpanChangeWithTab,\n handleScoreChange,\n handleHighlightSpans,\n handleListModeChange,\n handleFilterTokensChange,\n handleDateChange,\n handleDateRangeChange,\n handleDatePresetChange,\n handleRemoveAll,\n applyFilterTokens,\n };\n}\n"],"names":["TRACE_ANCHOR_SPAN_ID_PARAM","useMemo","TRACE_DATE_PRESET_PARAM","TRACE_DATE_PRESET_VALUES","TRACE_DATE_FROM_PARAM","TRACE_DATE_TO_PARAM","useRef","TRACE_LIST_MODE_PARAM","TRACE_LIST_MODE_VALUES","ROOT_ENTITY_TYPE_OPTIONS","TRACE_ROOT_ENTITY_TYPE_PARAM","TRACE_STATUS_PARAM","TRACE_STATUS_VALUES","getTracePropertyFilterTokens","useCallback","applyTracePropertyFilterTokens","TRACE_PROPERTY_FILTER_FIELD_IDS","TRACE_PROPERTY_FILTER_PARAM_BY_FIELD"],"mappings":"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"}
@@ -26,7 +26,7 @@ function useTraceUrlState(searchParams, setSearchParams, options) {
26
26
  const { onRemoveAll } = options ?? {};
27
27
  const datePreset = useMemo(() => {
28
28
  const value = searchParams.get(TRACE_DATE_PRESET_PARAM);
29
- return value && TRACE_DATE_PRESET_VALUES.has(value) ? value : "last-24h";
29
+ return value && value !== "all" && TRACE_DATE_PRESET_VALUES.has(value) ? value : "last-7d";
30
30
  }, [searchParams]);
31
31
  const dateFromParamRaw = searchParams.get(TRACE_DATE_FROM_PARAM);
32
32
  const dateToParamRaw = searchParams.get(TRACE_DATE_TO_PARAM);
@@ -240,13 +240,31 @@ function useTraceUrlState(searchParams, setSearchParams, options) {
240
240
  },
241
241
  [setSearchParams]
242
242
  );
243
+ const handleDateRangeChange = useCallback(
244
+ (from, to) => {
245
+ if (datePresetRef.current !== "custom") return;
246
+ setSearchParams(
247
+ (prev) => {
248
+ const next = new URLSearchParams(prev);
249
+ if (from) next.set(TRACE_DATE_FROM_PARAM, from.toISOString());
250
+ else next.delete(TRACE_DATE_FROM_PARAM);
251
+ if (to) next.set(TRACE_DATE_TO_PARAM, to.toISOString());
252
+ else next.delete(TRACE_DATE_TO_PARAM);
253
+ clearSelectionParams(next);
254
+ return next;
255
+ },
256
+ { replace: true }
257
+ );
258
+ },
259
+ [setSearchParams]
260
+ );
243
261
  const handleDatePresetChange = useCallback(
244
262
  (preset) => {
245
263
  datePresetRef.current = preset;
246
264
  setSearchParams(
247
265
  (prev) => {
248
266
  const next = new URLSearchParams(prev);
249
- if (preset === "last-24h") {
267
+ if (preset === "last-7d") {
250
268
  next.delete(TRACE_DATE_PRESET_PARAM);
251
269
  next.delete(TRACE_DATE_FROM_PARAM);
252
270
  next.delete(TRACE_DATE_TO_PARAM);
@@ -328,6 +346,7 @@ function useTraceUrlState(searchParams, setSearchParams, options) {
328
346
  handleListModeChange,
329
347
  handleFilterTokensChange,
330
348
  handleDateChange,
349
+ handleDateRangeChange,
331
350
  handleDatePresetChange,
332
351
  handleRemoveAll,
333
352
  applyFilterTokens
@@ -1 +1 @@
1
- {"version":3,"file":"use-trace-url-state.es.js","sources":["../../../../src/domains/traces/hooks/use-trace-url-state.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef } from 'react';\nimport type { SpanTab, TraceDatePreset } from '../index';\nimport {\n ROOT_ENTITY_TYPE_OPTIONS,\n TRACE_ANCHOR_SPAN_ID_PARAM,\n TRACE_DATE_FROM_PARAM,\n TRACE_DATE_PRESET_PARAM,\n TRACE_DATE_PRESET_VALUES,\n TRACE_DATE_TO_PARAM,\n TRACE_PROPERTY_FILTER_FIELD_IDS,\n TRACE_LIST_MODE_PARAM,\n TRACE_LIST_MODE_VALUES,\n TRACE_PROPERTY_FILTER_PARAM_BY_FIELD,\n TRACE_ROOT_ENTITY_TYPE_PARAM,\n TRACE_STATUS_PARAM,\n TRACE_STATUS_VALUES,\n applyTracePropertyFilterTokens,\n getTracePropertyFilterTokens,\n} from '../trace-filters';\nimport type { EntityOptions, TraceListMode, TraceStatusFilter } from '../trace-filters';\nimport type { PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\nconst TRACE_ID_PARAM = 'traceId';\nconst SPAN_ID_PARAM = 'spanId';\nconst TAB_PARAM = 'tab';\nconst SCORE_ID_PARAM = 'scoreId';\nconst HIGHLIGHT_SPAN_IDS_PARAM = 'highlightSpanIds';\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\nconst PRESET_MS: Partial<Record<TraceDatePreset, number>> = {\n 'last-24h': DAY_MS,\n 'last-3d': 3 * DAY_MS,\n 'last-7d': 7 * DAY_MS,\n 'last-14d': 14 * DAY_MS,\n 'last-30d': 30 * DAY_MS,\n};\n\n/** Mutates `params` in place to drop the featured trace/span/tab/score selection.\n * Used whenever a filter changes — selection no longer makes sense in the new result set. */\nfunction clearSelectionParams(params: URLSearchParams) {\n params.delete(TRACE_ID_PARAM);\n params.delete(SPAN_ID_PARAM);\n params.delete(TRACE_ANCHOR_SPAN_ID_PARAM);\n params.delete(TAB_PARAM);\n params.delete(SCORE_ID_PARAM);\n params.delete(HIGHLIGHT_SPAN_IDS_PARAM);\n}\n\n/** Minimal interface compatible with react-router's `setSearchParams`. */\nexport type SetURLSearchParamsLike = (\n next: URLSearchParams | ((prev: URLSearchParams) => URLSearchParams),\n options?: { replace?: boolean; preventScrollReset?: boolean; state?: unknown },\n) => void;\n\nexport interface UseTraceUrlStateOptions {\n /** Called after `handleRemoveAll` clears all filter URL params. Use this to reset page-local\n * UI state (e.g. a \"group by thread\" toggle) without wrapping the handler. */\n onRemoveAll?: () => void;\n}\n\nexport interface UseTraceUrlStateResult {\n // Raw search params passed through for convenience\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n\n // Date state (derived from URL)\n datePreset: TraceDatePreset;\n selectedDateFrom: Date | undefined;\n selectedDateTo: Date | undefined;\n /** Synchronously-updated ref of the latest preset. Used to ignore onDateChange callbacks\n * the date picker fires after a non-custom preset switch. */\n datePresetRef: React.MutableRefObject<TraceDatePreset>;\n\n // Selection state (derived from URL)\n traceIdParam: string | undefined;\n spanIdParam: string | undefined;\n /** Branch-mode only: the anchor span that defines the displayed subtree. Stable while the\n * user navigates between spans inside the panel (which only changes `spanIdParam`). */\n anchorSpanIdParam: string | undefined;\n spanTabParam: SpanTab | undefined;\n scoreIdParam: string | undefined;\n /** Span ids featured in the timeline (e.g. the spans behind a reconstructed message). Empty when unset. */\n highlightSpanIdsParam: string[];\n\n // Filter state (derived from URL)\n listMode: TraceListMode;\n selectedEntityOption: EntityOptions | undefined;\n selectedStatus: TraceStatusFilter | undefined;\n filterTokens: PropertyFilterToken[];\n\n // URL-modifying handlers\n /**\n * Selects a row. In traces mode pass just `traceId` (and optionally a `spanId` for an\n * initial span selection in the panel). In branches mode also pass `anchorSpanId` — the\n * branch identity, kept stable while the user navigates between spans inside the panel.\n * Branch rows are identified by (traceId, anchorSpanId); trace rows by traceId alone.\n */\n handleTraceClick: (traceId: string, spanId?: string, anchorSpanId?: string) => void;\n /** Convenience: clears the featured trace selection. Equivalent to `handleTraceClick('')`. */\n handleTraceClose: () => void;\n handleSpanChange: (spanId: string | null) => void;\n /** Convenience: clears the featured span selection. Equivalent to `handleSpanChange(null)`. */\n handleSpanClose: () => void;\n handleSpanTabChange: (tab: SpanTab) => void;\n /** Selects a span AND switches its panel tab in a single URL update. Use when both must change\n * from one interaction (e.g. \"Evaluate Trace\"). Calling `handleSpanChange` + `handleSpanTabChange`\n * separately races: each functional `setSearchParams` updater reads the same pre-update\n * `searchParams` snapshot, so the second navigation overwrites the first (last write wins) and one\n * of the two changes is lost on the first click. */\n handleSpanChangeWithTab: (spanId: string, tab: SpanTab) => void;\n handleScoreChange: (scoreId: string | null) => void;\n /** Features `spanIds` in the timeline and selects the first one. An empty array clears the highlight. */\n handleHighlightSpans: (spanIds: string[]) => void;\n /** Switches the list view between traces and branches. Clears the current selection. */\n handleListModeChange: (mode: TraceListMode) => void;\n handleFilterTokensChange: (nextTokens: PropertyFilterToken[]) => void;\n handleDateChange: (value: Date | undefined, type: 'from' | 'to') => void;\n handleDatePresetChange: (preset: TraceDatePreset) => void;\n handleRemoveAll: () => void;\n\n /** Lower-level helper used by `handleClear`: writes a token set and clears the trace/span selection. */\n applyFilterTokens: (tokens: PropertyFilterToken[]) => void;\n}\n\n/**\n * Owns all URL-derived state and URL-modifying handlers for the traces page. Routing-agnostic —\n * pass `searchParams` and `setSearchParams` from whichever router the consumer uses.\n *\n * Stays focused on URL state: localStorage save/restore, filter discovery, and the error-view\n * short-circuit are intentionally NOT part of this hook so consumers can swap them independently.\n */\nexport function useTraceUrlState(\n searchParams: URLSearchParams,\n setSearchParams: SetURLSearchParamsLike,\n options?: UseTraceUrlStateOptions,\n): UseTraceUrlStateResult {\n const { onRemoveAll } = options ?? {};\n const datePreset = useMemo<TraceDatePreset>(() => {\n const value = searchParams.get(TRACE_DATE_PRESET_PARAM);\n return value && TRACE_DATE_PRESET_VALUES.has(value as TraceDatePreset) ? (value as TraceDatePreset) : 'last-24h';\n }, [searchParams]);\n\n const dateFromParamRaw = searchParams.get(TRACE_DATE_FROM_PARAM);\n const dateToParamRaw = searchParams.get(TRACE_DATE_TO_PARAM);\n\n const selectedDateFrom = useMemo(() => {\n if (datePreset === 'custom') {\n if (!dateFromParamRaw) return undefined;\n const parsed = new Date(dateFromParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }\n // 'all' has no entry in PRESET_MS, so it falls out as an open-ended window.\n const ms = PRESET_MS[datePreset];\n return ms ? new Date(Date.now() - ms) : undefined;\n }, [datePreset, dateFromParamRaw]);\n\n const selectedDateTo = useMemo(() => {\n if (datePreset !== 'custom' || !dateToParamRaw) return undefined;\n const parsed = new Date(dateToParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }, [datePreset, dateToParamRaw]);\n\n // Track the latest preset synchronously so onDateChange callbacks that follow\n // a non-custom preset switch can be ignored (router setSearchParams captures\n // searchParams in its closure, so multiple synchronous calls would otherwise\n // clobber each other).\n const datePresetRef = useRef(datePreset);\n datePresetRef.current = datePreset;\n\n const traceIdParam = searchParams.get(TRACE_ID_PARAM) || undefined;\n const spanIdParam = searchParams.get(SPAN_ID_PARAM) || undefined;\n /** Branch-mode only: identifies which branch (anchor span) the panel is viewing. Stays put\n * while the user navigates between spans inside the panel (which only changes spanIdParam). */\n const anchorSpanIdParam = searchParams.get(TRACE_ANCHOR_SPAN_ID_PARAM) || undefined;\n const tabParam = searchParams.get(TAB_PARAM);\n const spanTabParam: SpanTab | undefined =\n tabParam === 'feedback' ? 'feedback' : tabParam === 'details' ? 'details' : undefined;\n const scoreIdParam = searchParams.get(SCORE_ID_PARAM) || undefined;\n const highlightSpanIdsRaw = searchParams.get(HIGHLIGHT_SPAN_IDS_PARAM);\n const highlightSpanIdsParam = useMemo(\n () => (highlightSpanIdsRaw ? highlightSpanIdsRaw.split(',').filter(Boolean) : []),\n [highlightSpanIdsRaw],\n );\n\n const listMode = useMemo<TraceListMode>(() => {\n const value = searchParams.get(TRACE_LIST_MODE_PARAM);\n return value && TRACE_LIST_MODE_VALUES.has(value as TraceListMode) ? (value as TraceListMode) : 'traces';\n }, [searchParams]);\n const selectedEntityOption = useMemo(\n () => ROOT_ENTITY_TYPE_OPTIONS.find(option => option.entityType === searchParams.get(TRACE_ROOT_ENTITY_TYPE_PARAM)),\n [searchParams],\n );\n const selectedStatus = useMemo<TraceStatusFilter | undefined>(() => {\n const value = searchParams.get(TRACE_STATUS_PARAM);\n return value && TRACE_STATUS_VALUES.has(value as TraceStatusFilter) ? (value as TraceStatusFilter) : undefined;\n }, [searchParams]);\n const filterTokens = useMemo(() => getTracePropertyFilterTokens(searchParams), [searchParams]);\n\n const handleTraceClick = useCallback(\n (traceId: string, spanId?: string, anchorSpanId?: string) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (traceId) {\n next.set(TRACE_ID_PARAM, traceId);\n } else {\n next.delete(TRACE_ID_PARAM);\n }\n if (spanId) {\n next.set(SPAN_ID_PARAM, spanId);\n } else {\n next.delete(SPAN_ID_PARAM);\n }\n if (anchorSpanId) {\n next.set(TRACE_ANCHOR_SPAN_ID_PARAM, anchorSpanId);\n } else {\n next.delete(TRACE_ANCHOR_SPAN_ID_PARAM);\n }\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n next.delete(HIGHLIGHT_SPAN_IDS_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleTraceClose = useCallback(() => handleTraceClick(''), [handleTraceClick]);\n\n const handleSpanChange = useCallback(\n (spanId: string | null) => {\n const currentSpanId = searchParams.get(SPAN_ID_PARAM) || null;\n if (spanId === currentSpanId) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (spanId) {\n next.set(SPAN_ID_PARAM, spanId);\n } else {\n next.delete(SPAN_ID_PARAM);\n }\n // Tab + score are per-span; they'd point at the previous span's context otherwise.\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleSpanClose = useCallback(() => handleSpanChange(null), [handleSpanChange]);\n\n const handleSpanTabChange = useCallback(\n (tab: SpanTab) => {\n const currentTab = searchParams.get(TAB_PARAM) || null;\n if (tab === currentTab) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (tab && tab !== 'details') {\n next.set(TAB_PARAM, tab);\n } else {\n next.delete(TAB_PARAM);\n }\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleSpanChangeWithTab = useCallback(\n (spanId: string, tab: SpanTab) => {\n const nextTab = tab && tab !== 'details' ? tab : null;\n // No-op guard (same pattern as the sibling handlers): skip the navigation only when span,\n // tab AND score are already exactly what this call would produce.\n const isNoOp =\n spanId === (searchParams.get(SPAN_ID_PARAM) || null) &&\n nextTab === (searchParams.get(TAB_PARAM) || null) &&\n !searchParams.get(SCORE_ID_PARAM);\n if (isNoOp) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n next.set(SPAN_ID_PARAM, spanId);\n if (nextTab) {\n next.set(TAB_PARAM, nextTab);\n } else {\n next.delete(TAB_PARAM);\n }\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleScoreChange = useCallback(\n (scoreId: string | null) => {\n const currentScoreId = searchParams.get(SCORE_ID_PARAM) || null;\n if (scoreId === currentScoreId) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (scoreId) {\n next.set(SCORE_ID_PARAM, scoreId);\n } else {\n next.delete(SCORE_ID_PARAM);\n }\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleHighlightSpans = useCallback(\n (spanIds: string[]) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n const [firstSpanId] = spanIds;\n if (!firstSpanId) {\n next.delete(HIGHLIGHT_SPAN_IDS_PARAM);\n return next;\n }\n next.set(HIGHLIGHT_SPAN_IDS_PARAM, spanIds.join(','));\n // Open the detail panel on the first highlighted span.\n next.set(SPAN_ID_PARAM, firstSpanId);\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const applyFilterTokens = useCallback(\n (tokens: PropertyFilterToken[]) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n // applyTracePropertyFilterTokens wipes all filter params (including\n // rootEntityType / status) and re-adds them in `nextTokens` order so\n // URL insertion order == filter creation order.\n applyTracePropertyFilterTokens(next, tokens);\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleFilterTokensChange = applyFilterTokens;\n\n // Only relevant for 'custom' — the picker also fires onDateChange after a\n // non-custom preset switch, which we ignore to avoid racing URL updates.\n const handleDateChange = useCallback(\n (value: Date | undefined, type: 'from' | 'to') => {\n if (datePresetRef.current !== 'custom') return;\n const param = type === 'from' ? TRACE_DATE_FROM_PARAM : TRACE_DATE_TO_PARAM;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (value) {\n next.set(param, value.toISOString());\n } else {\n next.delete(param);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleDatePresetChange = useCallback(\n (preset: TraceDatePreset) => {\n // Update ref synchronously so any onDateChange fired by the picker in the\n // same tick (for non-custom presets) sees the new value and skips.\n datePresetRef.current = preset;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (preset === 'last-24h') {\n // Default — clear all date params.\n next.delete(TRACE_DATE_PRESET_PARAM);\n next.delete(TRACE_DATE_FROM_PARAM);\n next.delete(TRACE_DATE_TO_PARAM);\n } else if (preset === 'custom') {\n next.set(TRACE_DATE_PRESET_PARAM, 'custom');\n // Keep existing dateFrom/dateTo for the user to adjust.\n } else {\n // `last-*` or 'all' — only the preset is stored; dates are derived.\n next.set(TRACE_DATE_PRESET_PARAM, preset);\n next.delete(TRACE_DATE_FROM_PARAM);\n next.delete(TRACE_DATE_TO_PARAM);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleListModeChange = useCallback(\n (mode: TraceListMode) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (mode === 'traces') {\n next.delete(TRACE_LIST_MODE_PARAM);\n } else {\n next.set(TRACE_LIST_MODE_PARAM, mode);\n }\n // Clear selection: rows from the previous mode don't map cleanly to the new mode.\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleRemoveAll = useCallback(() => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n next.delete(TRACE_LIST_MODE_PARAM);\n next.delete(TRACE_ROOT_ENTITY_TYPE_PARAM);\n next.delete(TRACE_STATUS_PARAM);\n for (const fieldId of TRACE_PROPERTY_FILTER_FIELD_IDS) {\n next.delete(TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n onRemoveAll?.();\n }, [setSearchParams, onRemoveAll]);\n\n return {\n searchParams,\n setSearchParams,\n datePreset,\n selectedDateFrom,\n selectedDateTo,\n datePresetRef,\n traceIdParam,\n spanIdParam,\n anchorSpanIdParam,\n spanTabParam,\n scoreIdParam,\n highlightSpanIdsParam,\n listMode,\n selectedEntityOption,\n selectedStatus,\n filterTokens,\n handleTraceClick,\n handleTraceClose,\n handleSpanChange,\n handleSpanClose,\n handleSpanTabChange,\n handleSpanChangeWithTab,\n handleScoreChange,\n handleHighlightSpans,\n handleListModeChange,\n handleFilterTokensChange,\n handleDateChange,\n handleDatePresetChange,\n handleRemoveAll,\n applyFilterTokens,\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-trace-url-state.es.js","sources":["../../../../src/domains/traces/hooks/use-trace-url-state.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef } from 'react';\nimport type { SpanTab, TraceDatePreset } from '../index';\nimport {\n ROOT_ENTITY_TYPE_OPTIONS,\n TRACE_ANCHOR_SPAN_ID_PARAM,\n TRACE_DATE_FROM_PARAM,\n TRACE_DATE_PRESET_PARAM,\n TRACE_DATE_PRESET_VALUES,\n TRACE_DATE_TO_PARAM,\n TRACE_PROPERTY_FILTER_FIELD_IDS,\n TRACE_LIST_MODE_PARAM,\n TRACE_LIST_MODE_VALUES,\n TRACE_PROPERTY_FILTER_PARAM_BY_FIELD,\n TRACE_ROOT_ENTITY_TYPE_PARAM,\n TRACE_STATUS_PARAM,\n TRACE_STATUS_VALUES,\n applyTracePropertyFilterTokens,\n getTracePropertyFilterTokens,\n} from '../trace-filters';\nimport type { EntityOptions, TraceListMode, TraceStatusFilter } from '../trace-filters';\nimport type { PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\nconst TRACE_ID_PARAM = 'traceId';\nconst SPAN_ID_PARAM = 'spanId';\nconst TAB_PARAM = 'tab';\nconst SCORE_ID_PARAM = 'scoreId';\nconst HIGHLIGHT_SPAN_IDS_PARAM = 'highlightSpanIds';\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\nconst PRESET_MS: Partial<Record<TraceDatePreset, number>> = {\n 'last-24h': DAY_MS,\n 'last-3d': 3 * DAY_MS,\n 'last-7d': 7 * DAY_MS,\n 'last-14d': 14 * DAY_MS,\n 'last-30d': 30 * DAY_MS,\n};\n\n/** Mutates `params` in place to drop the featured trace/span/tab/score selection.\n * Used whenever a filter changes — selection no longer makes sense in the new result set. */\nfunction clearSelectionParams(params: URLSearchParams) {\n params.delete(TRACE_ID_PARAM);\n params.delete(SPAN_ID_PARAM);\n params.delete(TRACE_ANCHOR_SPAN_ID_PARAM);\n params.delete(TAB_PARAM);\n params.delete(SCORE_ID_PARAM);\n params.delete(HIGHLIGHT_SPAN_IDS_PARAM);\n}\n\n/** Minimal interface compatible with react-router's `setSearchParams`. */\nexport type SetURLSearchParamsLike = (\n next: URLSearchParams | ((prev: URLSearchParams) => URLSearchParams),\n options?: { replace?: boolean; preventScrollReset?: boolean; state?: unknown },\n) => void;\n\nexport interface UseTraceUrlStateOptions {\n /** Called after `handleRemoveAll` clears all filter URL params. Use this to reset page-local\n * UI state (e.g. a \"group by thread\" toggle) without wrapping the handler. */\n onRemoveAll?: () => void;\n}\n\nexport interface UseTraceUrlStateResult {\n // Raw search params passed through for convenience\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n\n // Date state (derived from URL)\n datePreset: TraceDatePreset;\n selectedDateFrom: Date | undefined;\n selectedDateTo: Date | undefined;\n /** Synchronously-updated ref of the latest preset. Used to ignore onDateChange callbacks\n * the date picker fires after a non-custom preset switch. */\n datePresetRef: React.MutableRefObject<TraceDatePreset>;\n\n // Selection state (derived from URL)\n traceIdParam: string | undefined;\n spanIdParam: string | undefined;\n /** Branch-mode only: the anchor span that defines the displayed subtree. Stable while the\n * user navigates between spans inside the panel (which only changes `spanIdParam`). */\n anchorSpanIdParam: string | undefined;\n spanTabParam: SpanTab | undefined;\n scoreIdParam: string | undefined;\n /** Span ids featured in the timeline (e.g. the spans behind a reconstructed message). Empty when unset. */\n highlightSpanIdsParam: string[];\n\n // Filter state (derived from URL)\n listMode: TraceListMode;\n selectedEntityOption: EntityOptions | undefined;\n selectedStatus: TraceStatusFilter | undefined;\n filterTokens: PropertyFilterToken[];\n\n // URL-modifying handlers\n /**\n * Selects a row. In traces mode pass just `traceId` (and optionally a `spanId` for an\n * initial span selection in the panel). In branches mode also pass `anchorSpanId` — the\n * branch identity, kept stable while the user navigates between spans inside the panel.\n * Branch rows are identified by (traceId, anchorSpanId); trace rows by traceId alone.\n */\n handleTraceClick: (traceId: string, spanId?: string, anchorSpanId?: string) => void;\n /** Convenience: clears the featured trace selection. Equivalent to `handleTraceClick('')`. */\n handleTraceClose: () => void;\n handleSpanChange: (spanId: string | null) => void;\n /** Convenience: clears the featured span selection. Equivalent to `handleSpanChange(null)`. */\n handleSpanClose: () => void;\n handleSpanTabChange: (tab: SpanTab) => void;\n /** Selects a span AND switches its panel tab in a single URL update. Use when both must change\n * from one interaction (e.g. \"Evaluate Trace\"). Calling `handleSpanChange` + `handleSpanTabChange`\n * separately races: each functional `setSearchParams` updater reads the same pre-update\n * `searchParams` snapshot, so the second navigation overwrites the first (last write wins) and one\n * of the two changes is lost on the first click. */\n handleSpanChangeWithTab: (spanId: string, tab: SpanTab) => void;\n handleScoreChange: (scoreId: string | null) => void;\n /** Features `spanIds` in the timeline and selects the first one. An empty array clears the highlight. */\n handleHighlightSpans: (spanIds: string[]) => void;\n /** Switches the list view between traces and branches. Clears the current selection. */\n handleListModeChange: (mode: TraceListMode) => void;\n handleFilterTokensChange: (nextTokens: PropertyFilterToken[]) => void;\n handleDateChange: (value: Date | undefined, type: 'from' | 'to') => void;\n /** Writes both ends of a custom range in one URL update (two `handleDateChange` calls in the\n * same tick would clobber each other through react-router's closure-bound setter). */\n handleDateRangeChange: (from: Date | undefined, to: Date | undefined) => void;\n handleDatePresetChange: (preset: TraceDatePreset) => void;\n handleRemoveAll: () => void;\n\n /** Lower-level helper used by `handleClear`: writes a token set and clears the trace/span selection. */\n applyFilterTokens: (tokens: PropertyFilterToken[]) => void;\n}\n\n/**\n * Owns all URL-derived state and URL-modifying handlers for the traces page. Routing-agnostic —\n * pass `searchParams` and `setSearchParams` from whichever router the consumer uses.\n *\n * Stays focused on URL state: localStorage save/restore, filter discovery, and the error-view\n * short-circuit are intentionally NOT part of this hook so consumers can swap them independently.\n */\nexport function useTraceUrlState(\n searchParams: URLSearchParams,\n setSearchParams: SetURLSearchParamsLike,\n options?: UseTraceUrlStateOptions,\n): UseTraceUrlStateResult {\n const { onRemoveAll } = options ?? {};\n const datePreset = useMemo<TraceDatePreset>(() => {\n const value = searchParams.get(TRACE_DATE_PRESET_PARAM);\n return value && value !== 'all' && TRACE_DATE_PRESET_VALUES.has(value as TraceDatePreset)\n ? (value as TraceDatePreset)\n : 'last-7d';\n }, [searchParams]);\n\n const dateFromParamRaw = searchParams.get(TRACE_DATE_FROM_PARAM);\n const dateToParamRaw = searchParams.get(TRACE_DATE_TO_PARAM);\n\n const selectedDateFrom = useMemo(() => {\n if (datePreset === 'custom') {\n if (!dateFromParamRaw) return undefined;\n const parsed = new Date(dateFromParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }\n // 'all' has no entry in PRESET_MS, so it falls out as an open-ended window.\n const ms = PRESET_MS[datePreset];\n return ms ? new Date(Date.now() - ms) : undefined;\n }, [datePreset, dateFromParamRaw]);\n\n const selectedDateTo = useMemo(() => {\n if (datePreset !== 'custom' || !dateToParamRaw) return undefined;\n const parsed = new Date(dateToParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }, [datePreset, dateToParamRaw]);\n\n // Track the latest preset synchronously so onDateChange callbacks that follow\n // a non-custom preset switch can be ignored (router setSearchParams captures\n // searchParams in its closure, so multiple synchronous calls would otherwise\n // clobber each other).\n const datePresetRef = useRef(datePreset);\n datePresetRef.current = datePreset;\n\n const traceIdParam = searchParams.get(TRACE_ID_PARAM) || undefined;\n const spanIdParam = searchParams.get(SPAN_ID_PARAM) || undefined;\n /** Branch-mode only: identifies which branch (anchor span) the panel is viewing. Stays put\n * while the user navigates between spans inside the panel (which only changes spanIdParam). */\n const anchorSpanIdParam = searchParams.get(TRACE_ANCHOR_SPAN_ID_PARAM) || undefined;\n const tabParam = searchParams.get(TAB_PARAM);\n const spanTabParam: SpanTab | undefined =\n tabParam === 'feedback' ? 'feedback' : tabParam === 'details' ? 'details' : undefined;\n const scoreIdParam = searchParams.get(SCORE_ID_PARAM) || undefined;\n const highlightSpanIdsRaw = searchParams.get(HIGHLIGHT_SPAN_IDS_PARAM);\n const highlightSpanIdsParam = useMemo(\n () => (highlightSpanIdsRaw ? highlightSpanIdsRaw.split(',').filter(Boolean) : []),\n [highlightSpanIdsRaw],\n );\n\n const listMode = useMemo<TraceListMode>(() => {\n const value = searchParams.get(TRACE_LIST_MODE_PARAM);\n return value && TRACE_LIST_MODE_VALUES.has(value as TraceListMode) ? (value as TraceListMode) : 'traces';\n }, [searchParams]);\n const selectedEntityOption = useMemo(\n () => ROOT_ENTITY_TYPE_OPTIONS.find(option => option.entityType === searchParams.get(TRACE_ROOT_ENTITY_TYPE_PARAM)),\n [searchParams],\n );\n const selectedStatus = useMemo<TraceStatusFilter | undefined>(() => {\n const value = searchParams.get(TRACE_STATUS_PARAM);\n return value && TRACE_STATUS_VALUES.has(value as TraceStatusFilter) ? (value as TraceStatusFilter) : undefined;\n }, [searchParams]);\n const filterTokens = useMemo(() => getTracePropertyFilterTokens(searchParams), [searchParams]);\n\n const handleTraceClick = useCallback(\n (traceId: string, spanId?: string, anchorSpanId?: string) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (traceId) {\n next.set(TRACE_ID_PARAM, traceId);\n } else {\n next.delete(TRACE_ID_PARAM);\n }\n if (spanId) {\n next.set(SPAN_ID_PARAM, spanId);\n } else {\n next.delete(SPAN_ID_PARAM);\n }\n if (anchorSpanId) {\n next.set(TRACE_ANCHOR_SPAN_ID_PARAM, anchorSpanId);\n } else {\n next.delete(TRACE_ANCHOR_SPAN_ID_PARAM);\n }\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n next.delete(HIGHLIGHT_SPAN_IDS_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleTraceClose = useCallback(() => handleTraceClick(''), [handleTraceClick]);\n\n const handleSpanChange = useCallback(\n (spanId: string | null) => {\n const currentSpanId = searchParams.get(SPAN_ID_PARAM) || null;\n if (spanId === currentSpanId) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (spanId) {\n next.set(SPAN_ID_PARAM, spanId);\n } else {\n next.delete(SPAN_ID_PARAM);\n }\n // Tab + score are per-span; they'd point at the previous span's context otherwise.\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleSpanClose = useCallback(() => handleSpanChange(null), [handleSpanChange]);\n\n const handleSpanTabChange = useCallback(\n (tab: SpanTab) => {\n const currentTab = searchParams.get(TAB_PARAM) || null;\n if (tab === currentTab) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (tab && tab !== 'details') {\n next.set(TAB_PARAM, tab);\n } else {\n next.delete(TAB_PARAM);\n }\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleSpanChangeWithTab = useCallback(\n (spanId: string, tab: SpanTab) => {\n const nextTab = tab && tab !== 'details' ? tab : null;\n // No-op guard (same pattern as the sibling handlers): skip the navigation only when span,\n // tab AND score are already exactly what this call would produce.\n const isNoOp =\n spanId === (searchParams.get(SPAN_ID_PARAM) || null) &&\n nextTab === (searchParams.get(TAB_PARAM) || null) &&\n !searchParams.get(SCORE_ID_PARAM);\n if (isNoOp) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n next.set(SPAN_ID_PARAM, spanId);\n if (nextTab) {\n next.set(TAB_PARAM, nextTab);\n } else {\n next.delete(TAB_PARAM);\n }\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleScoreChange = useCallback(\n (scoreId: string | null) => {\n const currentScoreId = searchParams.get(SCORE_ID_PARAM) || null;\n if (scoreId === currentScoreId) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (scoreId) {\n next.set(SCORE_ID_PARAM, scoreId);\n } else {\n next.delete(SCORE_ID_PARAM);\n }\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleHighlightSpans = useCallback(\n (spanIds: string[]) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n const [firstSpanId] = spanIds;\n if (!firstSpanId) {\n next.delete(HIGHLIGHT_SPAN_IDS_PARAM);\n return next;\n }\n next.set(HIGHLIGHT_SPAN_IDS_PARAM, spanIds.join(','));\n // Open the detail panel on the first highlighted span.\n next.set(SPAN_ID_PARAM, firstSpanId);\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const applyFilterTokens = useCallback(\n (tokens: PropertyFilterToken[]) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n // applyTracePropertyFilterTokens wipes all filter params (including\n // rootEntityType / status) and re-adds them in `nextTokens` order so\n // URL insertion order == filter creation order.\n applyTracePropertyFilterTokens(next, tokens);\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleFilterTokensChange = applyFilterTokens;\n\n // Only relevant for 'custom' — the picker also fires onDateChange after a\n // non-custom preset switch, which we ignore to avoid racing URL updates.\n const handleDateChange = useCallback(\n (value: Date | undefined, type: 'from' | 'to') => {\n if (datePresetRef.current !== 'custom') return;\n const param = type === 'from' ? TRACE_DATE_FROM_PARAM : TRACE_DATE_TO_PARAM;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (value) {\n next.set(param, value.toISOString());\n } else {\n next.delete(param);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleDateRangeChange = useCallback(\n (from: Date | undefined, to: Date | undefined) => {\n if (datePresetRef.current !== 'custom') return;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (from) next.set(TRACE_DATE_FROM_PARAM, from.toISOString());\n else next.delete(TRACE_DATE_FROM_PARAM);\n if (to) next.set(TRACE_DATE_TO_PARAM, to.toISOString());\n else next.delete(TRACE_DATE_TO_PARAM);\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleDatePresetChange = useCallback(\n (preset: TraceDatePreset) => {\n // Update ref synchronously so any onDateChange fired by the picker in the\n // same tick (for non-custom presets) sees the new value and skips.\n datePresetRef.current = preset;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (preset === 'last-7d') {\n // Default — clear all date params.\n next.delete(TRACE_DATE_PRESET_PARAM);\n next.delete(TRACE_DATE_FROM_PARAM);\n next.delete(TRACE_DATE_TO_PARAM);\n } else if (preset === 'custom') {\n next.set(TRACE_DATE_PRESET_PARAM, 'custom');\n // Keep existing dateFrom/dateTo for the user to adjust.\n } else {\n // `last-*` or 'all' — only the preset is stored; dates are derived.\n next.set(TRACE_DATE_PRESET_PARAM, preset);\n next.delete(TRACE_DATE_FROM_PARAM);\n next.delete(TRACE_DATE_TO_PARAM);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleListModeChange = useCallback(\n (mode: TraceListMode) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (mode === 'traces') {\n next.delete(TRACE_LIST_MODE_PARAM);\n } else {\n next.set(TRACE_LIST_MODE_PARAM, mode);\n }\n // Clear selection: rows from the previous mode don't map cleanly to the new mode.\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleRemoveAll = useCallback(() => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n next.delete(TRACE_LIST_MODE_PARAM);\n next.delete(TRACE_ROOT_ENTITY_TYPE_PARAM);\n next.delete(TRACE_STATUS_PARAM);\n for (const fieldId of TRACE_PROPERTY_FILTER_FIELD_IDS) {\n next.delete(TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n onRemoveAll?.();\n }, [setSearchParams, onRemoveAll]);\n\n return {\n searchParams,\n setSearchParams,\n datePreset,\n selectedDateFrom,\n selectedDateTo,\n datePresetRef,\n traceIdParam,\n spanIdParam,\n anchorSpanIdParam,\n spanTabParam,\n scoreIdParam,\n highlightSpanIdsParam,\n listMode,\n selectedEntityOption,\n selectedStatus,\n filterTokens,\n handleTraceClick,\n handleTraceClose,\n handleSpanChange,\n handleSpanClose,\n handleSpanTabChange,\n handleSpanChangeWithTab,\n handleScoreChange,\n handleHighlightSpans,\n handleListModeChange,\n handleFilterTokensChange,\n handleDateChange,\n handleDateRangeChange,\n handleDatePresetChange,\n handleRemoveAll,\n applyFilterTokens,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -159,7 +159,8 @@ function mergeDeltaIntoPage0(old, delta, listMode) {
159
159
  const useTraces = ({
160
160
  filters,
161
161
  listMode = "traces",
162
- polling = {}
162
+ polling = {},
163
+ enabled = true
163
164
  }) => {
164
165
  const {
165
166
  deltaPollIntervalMs = DEFAULT_POLLING_CONFIG.deltaPollIntervalMs,
@@ -184,6 +185,7 @@ const useTraces = ({
184
185
  const tracesQueryKey = ["traces", listMode, filters];
185
186
  const query = reactQuery.useInfiniteQuery({
186
187
  queryKey: tracesQueryKey,
188
+ enabled,
187
189
  queryFn: ({ pageParam }) => fetchTracesFn({
188
190
  client,
189
191
  page: pageParam,
@@ -224,7 +226,7 @@ const useTraces = ({
224
226
  listMode
225
227
  });
226
228
  },
227
- enabled: !!cursor && !deltaUnsupported && autoRefetch,
229
+ enabled: enabled && !!cursor && !deltaUnsupported && autoRefetch,
228
230
  retry: false,
229
231
  refetchInterval: (q) => {
230
232
  if (q.state.error) return false;
@@ -271,7 +273,7 @@ const useTraces = ({
271
273
  filters,
272
274
  listMode
273
275
  }),
274
- enabled: !!cursor && !deltaUnsupported && autoRefetch,
276
+ enabled: enabled && !!cursor && !deltaUnsupported && autoRefetch,
275
277
  refetchInterval: page0StatusRefreshIntervalMs,
276
278
  refetchOnMount: false,
277
279
  retry: false
@@ -293,8 +295,8 @@ const useTraces = ({
293
295
  }, [query.dataUpdatedAt, deltaQuery.dataUpdatedAt, statusRefreshQuery.dataUpdatedAt]);
294
296
  const autoRefetchRef = React.useRef(autoRefetch);
295
297
  React.useEffect(() => {
296
- autoRefetchRef.current = autoRefetch;
297
- }, [autoRefetch]);
298
+ autoRefetchRef.current = enabled && autoRefetch;
299
+ }, [enabled, autoRefetch]);
298
300
  React.useEffect(() => {
299
301
  const handler = () => {
300
302
  if (document.visibilityState !== "visible") return;
@@ -307,10 +309,10 @@ const useTraces = ({
307
309
  }, [queryClient, listMode, filters, idleGuardThresholdMs]);
308
310
  const { hasNextPage, isFetchingNextPage, fetchNextPage } = query;
309
311
  React.useEffect(() => {
310
- if (isEndOfListInView && hasNextPage && !isFetchingNextPage) {
312
+ if (enabled && isEndOfListInView && hasNextPage && !isFetchingNextPage) {
311
313
  void fetchNextPage();
312
314
  }
313
- }, [isEndOfListInView, hasNextPage, isFetchingNextPage, fetchNextPage]);
315
+ }, [enabled, isEndOfListInView, hasNextPage, isFetchingNextPage, fetchNextPage]);
314
316
  const isFetchingAny = query.isFetching || statusRefreshQuery.isFetching || deltaQuery.isFetching;
315
317
  const lastActivityAt = Math.max(
316
318
  query.dataUpdatedAt,
@@ -1 +1 @@
1
- {"version":3,"file":"use-traces.cjs.js","sources":["../../../../src/domains/traces/hooks/use-traces.tsx"],"sourcesContent":["import type {\n LightSpanRecord,\n ListBranchesArgs,\n ListBranchesResponse,\n ListTracesArgs,\n ListTracesLightResponse,\n} from '@mastra/core/storage';\nimport { useMastraClient } from '@mastra/react';\nimport type { InfiniteData } from '@tanstack/react-query';\nimport { useInfiniteQuery, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect, useRef, useState } from 'react';\nimport type { TraceListMode } from '../trace-filters';\nimport { useInView } from '@/hooks/use-in-view';\nimport { is403ForbiddenError } from '@/lib/query-utils';\n\n/**\n * Per-MastraClient delta-polling support cache. Sticks once we observe a 501\n * or a page-0 response without `deltaCursor` (legacy server or store without\n * delta capability), so we don't re-probe on every mount.\n */\ntype DeltaSupport = 'unknown' | 'unsupported';\nconst deltaSupportByClient = new WeakMap<ReturnType<typeof useMastraClient>, DeltaSupport>();\n\n/**\n * Per-MastraClient light-list support cache. Sticks once the light endpoint is\n * shown not to be served, so every subsequent page fetch, delta poll and periodic\n * refresh uses the full list endpoint instead. Other failures (auth, rate limits,\n * outages) propagate without pinning — they'd hit the full endpoint too.\n */\ntype LightListSupport = 'unknown' | 'unsupported';\nconst lightListSupportByClient = new WeakMap<ReturnType<typeof useMastraClient>, LightListSupport>();\n\n/** When the current run of light-endpoint 500s started, per client. Cleared by any light success. */\nconst lightListFirstServerErrorAtByClient = new WeakMap<ReturnType<typeof useMastraClient>, number>();\n\n/** A 500 is ambiguous — an old core's store throwing, or a transient fault (DB hiccup, timeout).\n * Serve the request from the full endpoint either way, but only pin the session once the 500s\n * have outlasted a blip; a hiccup would otherwise degrade the list until the tab is reloaded.\n * Elapsed time, not a request count: the page refetch, the delta poll and the status refresh can\n * fail in the same instant, and a fallback response still looks like a success to the delta query,\n * so chase mode keeps re-polling every `deltaChaseIntervalMs` throughout the outage. */\nconst LIGHT_LIST_SERVER_ERROR_PIN_AFTER_MS = 10_000;\n\n/** Tunables for live-tail polling. All fields optional — defaults below.\n * Platform consumers override individual fields to throttle traffic or\n * reshape the freshness/visibility trade-offs. */\nexport interface TracesPollingConfig {\n /** Interval between delta polls. Default 5_000ms. */\n deltaPollIntervalMs?: number;\n /** Refetch delay when the server signals `delta.hasMore` (chase remaining updates immediately). Default 100ms. */\n deltaChaseIntervalMs?: number;\n /** Max rows per delta poll. Server caps at 100. Default 100. */\n deltaLimit?: number;\n /** Page-mode refetch interval used when the configured store does not support delta polling. Default 10_000ms. */\n pageModeRefetchIntervalMs?: number;\n /** Periodic page-0 refetch interval while delta is active. Delta only delivers new rows, so this\n * is how we surface status flips (running → success/error) on rows already visible. Default 60_000ms. */\n page0StatusRefreshIntervalMs?: number;\n /** When the tab returns from being hidden and the last successful poll was older than this, the\n * cursor is treated as stale (ClickHouse delta tables TTL after 2 days; other stores may be more\n * aggressive). The infinite query is reset so page 0 refetches and delta resumes from a fresh\n * cursor. Default 900_000ms (15 min). */\n idleGuardThresholdMs?: number;\n /** Minimum visible duration for `isRefetching` after any query completes. On localhost a delta\n * poll can resolve in tens of ms — too brief for the spinner's 1s rotation to register visually,\n * and quick enough that React may batch the start/finish transitions. Pulsing for this duration\n * on completion (~144° of rotation at 400ms) makes each poll perceptible as a heartbeat.\n * Default 400ms. */\n minRefetchSpinMs?: number;\n /** Window during which a delta-arrived row's key stays in `recentlyAddedKeys` so the list view\n * can apply its `animate-row-highlight` class. Should match the CSS animation duration\n * (currently 1_000ms — see `index.css`). Default 1_000ms. */\n deltaHighlightMs?: number;\n}\n\nconst DEFAULT_POLLING_CONFIG: Required<TracesPollingConfig> = {\n deltaPollIntervalMs: 5_000,\n deltaChaseIntervalMs: 100,\n deltaLimit: 100,\n pageModeRefetchIntervalMs: 10_000,\n page0StatusRefreshIntervalMs: 60_000,\n idleGuardThresholdMs: 15 * 60_000,\n minRefetchSpinMs: 400,\n deltaHighlightMs: 1_000,\n};\n\n/** Returns true when the cursor should be considered stale and re-seeded.\n * Exported for testing — pure function of timestamps. */\nexport function shouldResetAfterIdle(lastSuccessAt: number, now: number, thresholdMs: number): boolean {\n if (lastSuccessAt === 0) return false;\n return now - lastSuccessAt > thresholdMs;\n}\n\nfunction isHttp501(error: unknown): boolean {\n return (error as { status?: number } | null)?.status === 501;\n}\n\n/** Only 404 and 500 can mean the light endpoint isn't served: 404 from servers without\n * the route, 500 from cores whose store throws instead of serving the projection.\n * Anything else (401, 403, 429, other 5xx, the 501 disabled-domain signal) is a\n * condition the full endpoint would hit too, so it propagates instead of falling\n * back — mirroring how the delta-support cache matches exactly 501. */\nfunction lightListFallbackStatus(error: unknown): 404 | 500 | undefined {\n const status = (error as { status?: number } | null)?.status;\n return status === 404 || status === 500 ? status : undefined;\n}\n\n/** Whether a failed light-list request should pin the session to the full endpoint.\n * `firstServerErrorAt` is undefined when this 500 opens a new run of them, so a single\n * fault never pins. Exported for testing — pure function of the status and timestamps. */\nexport function shouldPinLightList(\n status: number | undefined,\n firstServerErrorAt: number | undefined,\n now: number,\n): boolean {\n if (status === 404) return true;\n if (status !== 500) return false;\n if (firstServerErrorAt === undefined) return false;\n return now - firstServerErrorAt >= LIGHT_LIST_SERVER_ERROR_PIN_AFTER_MS;\n}\n\ntype FetchTracesFnArgs = TracesFilters & {\n client: ReturnType<typeof useMastraClient>;\n} & ({ mode: 'delta'; after?: string; limit?: number } | { mode?: 'page'; page: number; perPage: number });\n\nconst fetchTracesFn = async (args: FetchTracesFnArgs) => {\n const { client, filters, listMode = 'traces' } = args;\n const params =\n args.mode === 'delta'\n ? { mode: 'delta' as const, after: args.after, limit: args.limit, filters }\n : { pagination: { page: args.page, perPage: args.perPage }, filters };\n\n if (listMode === 'branches') {\n return client.listBranches(params as ListBranchesArgs);\n }\n\n // The list only renders identity, timing, status and a short input preview, so ask\n // for the lightweight projection. Selecting a row fetches the full record separately.\n // Clients pinned to full mode keep using listTraces (page and delta alike), exactly\n // as before the light endpoint existed; full rows are a superset of the light ones.\n if (lightListSupportByClient.get(client) === 'unsupported') {\n return client.listTraces(params as ListTracesArgs);\n }\n try {\n const response = await client.listTracesLight(params as ListTracesArgs);\n // A 200 can still be a legacy projection: servers whose store implements the\n // pre-preview light list answer with rows carrying none of the new fields.\n // Current servers always set `status` on every row, so a non-empty page where\n // every row lacks it is legacy-shaped — pin and refetch the full rows. Empty\n // pages never pin (indistinguishable, and they render identically either way;\n // the next non-empty page decides).\n if (args.mode !== 'delta') {\n const spans = response.spans ?? [];\n if (spans.length > 0 && spans.every(span => span.status === undefined)) {\n lightListSupportByClient.set(client, 'unsupported');\n return client.listTraces(params as ListTracesArgs);\n }\n }\n lightListFirstServerErrorAtByClient.delete(client);\n return response;\n } catch (error) {\n const status = lightListFallbackStatus(error);\n if (status === undefined) throw error;\n\n const now = Date.now();\n const firstServerErrorAt = lightListFirstServerErrorAtByClient.get(client);\n if (status === 500 && firstServerErrorAt === undefined) {\n lightListFirstServerErrorAtByClient.set(client, now);\n }\n if (shouldPinLightList(status, firstServerErrorAt, now)) {\n lightListSupportByClient.set(client, 'unsupported');\n }\n return client.listTraces(params as ListTracesArgs);\n }\n};\n\nexport const TRACES_PER_PAGE = 25;\n\nexport interface TracesFilters {\n filters?: ListTracesArgs['filters'] | ListBranchesArgs['filters'];\n listMode?: TraceListMode;\n}\n\n/** Returns the next page number if the server indicates more pages are available. */\nexport function getTracesNextPageParam(\n lastPage: ListTracesLightResponse | ListBranchesResponse | undefined,\n _allPages: unknown,\n lastPageParam: number,\n) {\n if (lastPage?.pagination?.hasMore) {\n return lastPageParam + 1;\n }\n return undefined;\n}\n\ntype TracesPageResponse = ListTracesLightResponse | ListBranchesResponse;\n\n/** Branch rows are full spans and trace rows are lightweight; the list only reads the\n * fields they share, so both are surfaced as `LightSpanRecord`. */\nfunction getPageSpans(page: TracesPageResponse): LightSpanRecord[] {\n if ('branches' in page) return page.branches ?? [];\n return page.spans ?? [];\n}\n\n/** Deduplicates trace/branch rows by traceId + spanId across all loaded pages.\n * Also surfaces page 0's deltaCursor so the live-tail query can read it reactively. */\nexport function selectUniqueTraces(data: { pages: TracesPageResponse[] }): {\n spans: LightSpanRecord[];\n deltaCursor: string | undefined;\n} {\n const seen = new Set<string>();\n const spans = data.pages\n .flatMap(page => getPageSpans(page))\n .filter(span => {\n const key = `${span.traceId}:${span.spanId}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n\n return { spans, deltaCursor: data.pages[0]?.deltaCursor };\n}\n\ntype RowIdentity = { traceId: string; spanId?: string | null };\n\nfunction rowKey(row: RowIdentity): string {\n return `${row.traceId}:${row.spanId}`;\n}\n\nfunction indexRowsByKey<TRow extends RowIdentity>(rows: TRow[]): Map<string, TRow> {\n return new Map(rows.map(row => [rowKey(row), row]));\n}\n\n/** Replaces existing page-0 rows in place (keyed by traceId:spanId) with\n * refreshed copies from the server. Rows the server doesn't return are kept\n * as-is so delta-accumulated rows that have aged off the server's page 0\n * aren't dropped from the UI. New rows aren't added here — delta polling\n * delivers those. */\nexport function refreshPage0Rows(\n old: InfiniteData<TracesPageResponse> | undefined,\n refreshed: ListTracesLightResponse | ListBranchesResponse,\n listMode: TraceListMode,\n): InfiniteData<TracesPageResponse> | undefined {\n if (!old || old.pages.length === 0) return old;\n const [firstPage, ...rest] = old.pages;\n if (!firstPage) return old;\n\n // Branch and trace rows have different row shapes, so each mode keys its own map.\n let updatedFirst: TracesPageResponse;\n if (listMode === 'branches' && 'branches' in firstPage && 'branches' in refreshed) {\n const refreshedByKey = indexRowsByKey(refreshed.branches ?? []);\n if (refreshedByKey.size === 0) return old;\n updatedFirst = {\n ...firstPage,\n branches: (firstPage.branches ?? []).map(existing => refreshedByKey.get(rowKey(existing)) ?? existing),\n };\n } else if ('spans' in firstPage && 'spans' in refreshed) {\n const refreshedByKey = indexRowsByKey(refreshed.spans ?? []);\n if (refreshedByKey.size === 0) return old;\n updatedFirst = {\n ...firstPage,\n spans: (firstPage.spans ?? []).map(existing => refreshedByKey.get(rowKey(existing)) ?? existing),\n };\n } else {\n return old;\n }\n\n return { ...old, pages: [updatedFirst, ...rest] };\n}\n\n/** Stable `startedAt DESC` sort matching the server's default page-mode\n * ordering for both list endpoints. Rows missing `startedAt` sink to the\n * bottom (compared as time 0). */\nfunction sortRowsByStartedAtDesc<T extends { startedAt?: unknown }>(rows: T[]): T[] {\n return [...rows].sort((a, b) => {\n const aTime = a.startedAt ? new Date(a.startedAt as string | number | Date).getTime() : 0;\n const bTime = b.startedAt ? new Date(b.startedAt as string | number | Date).getTime() : 0;\n return bTime - aTime;\n });\n}\n\n/** Prepends delta-mode rows into page 0 and advances its deltaCursor.\n * Delta responses come back in server cursor order (insertion order into\n * the per-store delta index), not the `startedAt DESC` order page-mode\n * uses — so we re-sort the merged page 0 to match what the user sees on\n * a fresh page-mode load. Cross-page duplication is handled later by\n * selectUniqueTraces. */\nexport function mergeDeltaIntoPage0(\n old: InfiniteData<TracesPageResponse> | undefined,\n delta: ListTracesLightResponse | ListBranchesResponse,\n listMode: TraceListMode,\n): InfiniteData<TracesPageResponse> | undefined {\n if (!old || old.pages.length === 0) return old;\n const [firstPage, ...rest] = old.pages;\n if (!firstPage) return old;\n const nextCursor = delta.deltaCursor ?? firstPage.deltaCursor;\n\n let updatedFirst: TracesPageResponse;\n if (listMode === 'branches' && 'branches' in firstPage) {\n const newRows = (delta as ListBranchesResponse).branches ?? [];\n updatedFirst = {\n ...firstPage,\n branches: sortRowsByStartedAtDesc([...newRows, ...(firstPage.branches ?? [])]),\n deltaCursor: nextCursor,\n };\n } else if ('spans' in firstPage) {\n const newRows = (delta as ListTracesLightResponse).spans ?? [];\n updatedFirst = {\n ...firstPage,\n spans: sortRowsByStartedAtDesc([...newRows, ...(firstPage.spans ?? [])]),\n deltaCursor: nextCursor,\n };\n } else {\n return old;\n }\n\n return { ...old, pages: [updatedFirst, ...rest] };\n}\n\nexport interface UseTracesArgs extends TracesFilters {\n /** Optional overrides for the live-tail polling tunables. Any omitted fields fall back to the\n * built-in defaults; pass only what you want to change. */\n polling?: TracesPollingConfig;\n}\n\ninterface UseTracesReturn {\n data: { spans: LightSpanRecord[]; deltaCursor: string | undefined } | undefined;\n hasNextPage: boolean;\n isFetchingNextPage: boolean;\n fetchNextPage: () => void;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n setEndOfListElement: (node: HTMLDivElement | null) => void;\n isRefetching: boolean;\n autoRefetch: boolean;\n setAutoRefetch: (v: boolean) => void;\n recentlyAddedKeys: Set<string>;\n dataUpdatedAt: number;\n errorUpdatedAt: number;\n isFetching: boolean;\n isSuccess: boolean;\n fetchStatus: 'idle' | 'fetching' | 'paused';\n refetch: () => void;\n}\n\nexport const useTraces: (args: UseTracesArgs) => UseTracesReturn = ({\n filters,\n listMode = 'traces',\n polling = {},\n}: UseTracesArgs) => {\n const {\n deltaPollIntervalMs = DEFAULT_POLLING_CONFIG.deltaPollIntervalMs,\n deltaChaseIntervalMs = DEFAULT_POLLING_CONFIG.deltaChaseIntervalMs,\n deltaLimit = DEFAULT_POLLING_CONFIG.deltaLimit,\n pageModeRefetchIntervalMs = DEFAULT_POLLING_CONFIG.pageModeRefetchIntervalMs,\n page0StatusRefreshIntervalMs = DEFAULT_POLLING_CONFIG.page0StatusRefreshIntervalMs,\n idleGuardThresholdMs = DEFAULT_POLLING_CONFIG.idleGuardThresholdMs,\n minRefetchSpinMs = DEFAULT_POLLING_CONFIG.minRefetchSpinMs,\n deltaHighlightMs = DEFAULT_POLLING_CONFIG.deltaHighlightMs,\n } = polling;\n const client = useMastraClient();\n const queryClient = useQueryClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const [deltaSupport, setDeltaSupport] = useState<DeltaSupport>(() => deltaSupportByClient.get(client) ?? 'unknown');\n const deltaUnsupported = deltaSupport === 'unsupported';\n\n // When false, all automatic polling stops: delta polls, status refresh,\n // idle-guard resets, and the page-mode fallback interval. Manual `resync`\n // still works. Session-scoped (no persistence across mounts).\n const [autoRefetch, setAutoRefetch] = useState(true);\n\n // Keys (`traceId:spanId`) of rows that arrived via the most recent delta\n // poll(s). The list view reads this to apply a temporary highlight class\n // for deltaHighlightMs, then they auto-expire. Resets on filter/listMode\n // change since a new query key spawns a fresh list.\n const [recentlyAddedKeys, setRecentlyAddedKeys] = useState<Set<string>>(() => new Set());\n useEffect(() => {\n setRecentlyAddedKeys(new Set());\n }, [listMode, filters]);\n\n const tracesQueryKey = ['traces', listMode, filters] as const;\n\n const query = useInfiniteQuery({\n queryKey: tracesQueryKey,\n queryFn: ({ pageParam }) =>\n fetchTracesFn({\n client,\n page: pageParam,\n perPage: TRACES_PER_PAGE,\n filters,\n listMode,\n }),\n initialPageParam: 0,\n getNextPageParam: getTracesNextPageParam,\n select: selectUniqueTraces,\n retry: false,\n // Disable polling on 403 to prevent flickering.\n // Fall back to page-mode polling only when delta isn't running.\n refetchInterval: q => {\n if (is403ForbiddenError(q.state.error)) return false;\n if (!autoRefetch) return false;\n return deltaUnsupported ? pageModeRefetchIntervalMs : false;\n },\n });\n\n const cursor = query.data?.deltaCursor;\n\n // If page 0 came back without a deltaCursor, the server/store doesn't\n // support delta polling. Pin the client to 'unsupported' so the infinite\n // query resumes page-mode polling and we stop probing.\n useEffect(() => {\n if (query.isSuccess && cursor === undefined && deltaSupport === 'unknown') {\n deltaSupportByClient.set(client, 'unsupported');\n setDeltaSupport('unsupported');\n }\n }, [query.isSuccess, cursor, deltaSupport, client]);\n\n const deltaQuery = useQuery({\n queryKey: ['traces-delta', listMode, filters] as const,\n queryFn: () => {\n const current = queryClient.getQueryData<InfiniteData<TracesPageResponse>>(tracesQueryKey)?.pages[0]?.deltaCursor;\n if (!current) return null;\n return fetchTracesFn({\n client,\n mode: 'delta',\n after: current,\n limit: deltaLimit,\n filters,\n listMode,\n });\n },\n enabled: !!cursor && !deltaUnsupported && autoRefetch,\n retry: false,\n refetchInterval: q => {\n if (q.state.error) return false;\n const data = q.state.data as ListTracesLightResponse | ListBranchesResponse | null | undefined;\n if (data?.delta?.hasMore) return deltaChaseIntervalMs;\n return deltaPollIntervalMs;\n },\n });\n\n // Merge new delta rows into the infinite-query cache. Also captures the\n // arrived keys into `recentlyAddedKeys` for deltaHighlightMs so the UI\n // can briefly distinguish them. The cleanup timer is intentionally NOT\n // tied to the effect lifecycle — if a newer delta arrives first, we still\n // want each prior batch to expire on its own schedule.\n useEffect(() => {\n const result = deltaQuery.data;\n if (!result) return;\n queryClient.setQueryData<InfiniteData<TracesPageResponse>>(tracesQueryKey, old =>\n mergeDeltaIntoPage0(old, result, listMode),\n );\n\n const newRows: RowIdentity[] =\n listMode === 'branches' && 'branches' in result\n ? (result.branches ?? [])\n : 'spans' in result\n ? (result.spans ?? [])\n : [];\n if (newRows.length === 0) return;\n const keys = newRows.map(r => `${r.traceId}:${r.spanId ?? ''}`);\n setRecentlyAddedKeys(prev => {\n const next = new Set(prev);\n for (const k of keys) next.add(k);\n return next;\n });\n setTimeout(() => {\n setRecentlyAddedKeys(prev => {\n const next = new Set(prev);\n for (const k of keys) next.delete(k);\n return next;\n });\n }, deltaHighlightMs);\n // tracesQueryKey is a new array each render but its contents drive cache keying;\n // depending on its members (listMode/filters) is enough.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [deltaQuery.data, queryClient, listMode, filters, deltaHighlightMs]);\n\n // A 501 means the server is too old (or store doesn't support delta) — pin\n // 'unsupported' so the delta query disables and page-mode polling resumes.\n useEffect(() => {\n if (isHttp501(deltaQuery.error)) {\n deltaSupportByClient.set(client, 'unsupported');\n setDeltaSupport('unsupported');\n }\n }, [deltaQuery.error, client]);\n\n // Periodic page-0 refresh to surface status updates on visible rows\n // (running → success/error). Only runs while delta is the primary polling\n // mechanism; otherwise the infinite query's own refetchInterval covers it.\n const statusRefreshQuery = useQuery({\n queryKey: ['traces-status-refresh', listMode, filters] as const,\n queryFn: () =>\n fetchTracesFn({\n client,\n page: 0,\n perPage: TRACES_PER_PAGE,\n filters,\n listMode,\n }),\n enabled: !!cursor && !deltaUnsupported && autoRefetch,\n refetchInterval: page0StatusRefreshIntervalMs,\n refetchOnMount: false,\n retry: false,\n });\n\n useEffect(() => {\n const result = statusRefreshQuery.data;\n if (!result) return;\n queryClient.setQueryData<InfiniteData<TracesPageResponse>>(tracesQueryKey, old =>\n refreshPage0Rows(old, result, listMode),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [statusRefreshQuery.data, queryClient, listMode, filters]);\n\n // Idle guard: when the tab returns from being hidden, check how long it's\n // been since the last successful poll. If past the threshold, reset the\n // infinite query so page 0 refetches and the cursor is re-seeded.\n const lastSuccessAtRef = useRef(0);\n useEffect(() => {\n const ts = Math.max(query.dataUpdatedAt, deltaQuery.dataUpdatedAt, statusRefreshQuery.dataUpdatedAt);\n if (ts > lastSuccessAtRef.current) {\n lastSuccessAtRef.current = ts;\n }\n }, [query.dataUpdatedAt, deltaQuery.dataUpdatedAt, statusRefreshQuery.dataUpdatedAt]);\n\n // Track autoRefetch in a ref so the visibility listener (attached once)\n // reads the current value without needing to re-attach.\n const autoRefetchRef = useRef(autoRefetch);\n useEffect(() => {\n autoRefetchRef.current = autoRefetch;\n }, [autoRefetch]);\n\n useEffect(() => {\n const handler = () => {\n if (document.visibilityState !== 'visible') return;\n if (!autoRefetchRef.current) return;\n if (!shouldResetAfterIdle(lastSuccessAtRef.current, Date.now(), idleGuardThresholdMs)) return;\n void queryClient.resetQueries({ queryKey: ['traces', listMode, filters] });\n };\n document.addEventListener('visibilitychange', handler);\n return () => document.removeEventListener('visibilitychange', handler);\n }, [queryClient, listMode, filters, idleGuardThresholdMs]);\n\n const { hasNextPage, isFetchingNextPage, fetchNextPage } = query;\n\n useEffect(() => {\n if (isEndOfListInView && hasNextPage && !isFetchingNextPage) {\n void fetchNextPage();\n }\n }, [isEndOfListInView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n // `isRefetching` aggregates every active fetch — page-mode (initial, next\n // page, manual resync, idle reset), the 60s page-0 status refresh, AND the\n // delta polls — so a spinner bound to it acts as a heartbeat indicator.\n //\n // Short polls (e.g. delta on localhost) can resolve in tens of ms — too\n // brief for `animate-spin` (1s/rotation) to register visually, and quick\n // enough that React may batch the start/finish transitions so we never\n // even observe `isFetching: true`. So we also watch every query's\n // data/errorUpdatedAt; any advance pulses `isRefetching` true for at least\n // minRefetchSpinMs, which is ~144° of rotation — clearly perceptible.\n const isFetchingAny = query.isFetching || statusRefreshQuery.isFetching || deltaQuery.isFetching;\n const lastActivityAt = Math.max(\n query.dataUpdatedAt,\n query.errorUpdatedAt,\n deltaQuery.dataUpdatedAt,\n deltaQuery.errorUpdatedAt,\n statusRefreshQuery.dataUpdatedAt,\n statusRefreshQuery.errorUpdatedAt,\n );\n const [pulse, setPulse] = useState(false);\n const prevActivityAtRef = useRef(lastActivityAt);\n useEffect(() => {\n if (lastActivityAt > prevActivityAtRef.current) {\n prevActivityAtRef.current = lastActivityAt;\n setPulse(true);\n const t = setTimeout(() => setPulse(false), minRefetchSpinMs);\n return () => clearTimeout(t);\n }\n }, [lastActivityAt, minRefetchSpinMs]);\n const isRefetching = isFetchingAny || pulse;\n\n return {\n ...query,\n setEndOfListElement,\n isRefetching,\n autoRefetch,\n setAutoRefetch,\n recentlyAddedKeys,\n };\n};\n"],"names":["useMastraClient","useQueryClient","useInView","useState","useEffect","useInfiniteQuery","is403ForbiddenError","useQuery","useRef"],"mappings":";;;;;;;;;;AAqBA,MAAM,oBAAA,uBAA2B,OAAA,EAA0D;AAS3F,MAAM,wBAAA,uBAA+B,OAAA,EAA8D;AAGnG,MAAM,mCAAA,uBAA0C,OAAA,EAAoD;AAQpG,MAAM,oCAAA,GAAuC,GAAA;AAkC7C,MAAM,sBAAA,GAAwD;AAAA,EAC5D,mBAAA,EAAqB,GAAA;AAAA,EACrB,oBAAA,EAAsB,GAAA;AAAA,EACtB,UAAA,EAAY,GAAA;AAAA,EACZ,yBAAA,EAA2B,GAAA;AAAA,EAC3B,4BAAA,EAA8B,GAAA;AAAA,EAC9B,sBAAsB,EAAA,GAAK,GAAA;AAAA,EAC3B,gBAAA,EAAkB,GAAA;AAAA,EAClB,gBAAA,EAAkB;AACpB,CAAA;AAIO,SAAS,oBAAA,CAAqB,aAAA,EAAuB,GAAA,EAAa,WAAA,EAA8B;AACrG,EAAA,IAAI,aAAA,KAAkB,GAAG,OAAO,KAAA;AAChC,EAAA,OAAO,MAAM,aAAA,GAAgB,WAAA;AAC/B;AAEA,SAAS,UAAU,KAAA,EAAyB;AAC1C,EAAA,OAAQ,OAAsC,MAAA,KAAW,GAAA;AAC3D;AAOA,SAAS,wBAAwB,KAAA,EAAuC;AACtE,EAAA,MAAM,SAAU,KAAA,EAAsC,MAAA;AACtD,EAAA,OAAO,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,GAAA,GAAM,MAAA,GAAS,MAAA;AACrD;AAKO,SAAS,kBAAA,CACd,MAAA,EACA,kBAAA,EACA,GAAA,EACS;AACT,EAAA,IAAI,MAAA,KAAW,KAAK,OAAO,IAAA;AAC3B,EAAA,IAAI,MAAA,KAAW,KAAK,OAAO,KAAA;AAC3B,EAAA,IAAI,kBAAA,KAAuB,QAAW,OAAO,KAAA;AAC7C,EAAA,OAAO,MAAM,kBAAA,IAAsB,oCAAA;AACrC;AAMA,MAAM,aAAA,GAAgB,OAAO,IAAA,KAA4B;AACvD,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,QAAA,GAAW,UAAS,GAAI,IAAA;AACjD,EAAA,MAAM,MAAA,GACJ,IAAA,CAAK,IAAA,KAAS,OAAA,GACV,EAAE,MAAM,OAAA,EAAkB,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,KAAA,EAAO,IAAA,CAAK,OAAO,OAAA,EAAQ,GACxE,EAAE,UAAA,EAAY,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,OAAA,EAAS,IAAA,CAAK,OAAA,EAAQ,EAAG,OAAA,EAAQ;AAExE,EAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,IAAA,OAAO,MAAA,CAAO,aAAa,MAA0B,CAAA;AAAA,EACvD;AAMA,EAAA,IAAI,wBAAA,CAAyB,GAAA,CAAI,MAAM,CAAA,KAAM,aAAA,EAAe;AAC1D,IAAA,OAAO,MAAA,CAAO,WAAW,MAAwB,CAAA;AAAA,EACnD;AACA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,eAAA,CAAgB,MAAwB,CAAA;AAOtE,IAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,IAAS,EAAC;AACjC,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,IAAK,KAAA,CAAM,MAAM,CAAA,IAAA,KAAQ,IAAA,CAAK,MAAA,KAAW,KAAA,CAAS,CAAA,EAAG;AACtE,QAAA,wBAAA,CAAyB,GAAA,CAAI,QAAQ,aAAa,CAAA;AAClD,QAAA,OAAO,MAAA,CAAO,WAAW,MAAwB,CAAA;AAAA,MACnD;AAAA,IACF;AACA,IAAA,mCAAA,CAAoC,OAAO,MAAM,CAAA;AACjD,IAAA,OAAO,QAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,MAAA,GAAS,wBAAwB,KAAK,CAAA;AAC5C,IAAA,IAAI,MAAA,KAAW,QAAW,MAAM,KAAA;AAEhC,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,kBAAA,GAAqB,mCAAA,CAAoC,GAAA,CAAI,MAAM,CAAA;AACzE,IAAA,IAAI,MAAA,KAAW,GAAA,IAAO,kBAAA,KAAuB,MAAA,EAAW;AACtD,MAAA,mCAAA,CAAoC,GAAA,CAAI,QAAQ,GAAG,CAAA;AAAA,IACrD;AACA,IAAA,IAAI,kBAAA,CAAmB,MAAA,EAAQ,kBAAA,EAAoB,GAAG,CAAA,EAAG;AACvD,MAAA,wBAAA,CAAyB,GAAA,CAAI,QAAQ,aAAa,CAAA;AAAA,IACpD;AACA,IAAA,OAAO,MAAA,CAAO,WAAW,MAAwB,CAAA;AAAA,EACnD;AACF,CAAA;AAEO,MAAM,eAAA,GAAkB;AAQxB,SAAS,sBAAA,CACd,QAAA,EACA,SAAA,EACA,aAAA,EACA;AACA,EAAA,IAAI,QAAA,EAAU,YAAY,OAAA,EAAS;AACjC,IAAA,OAAO,aAAA,GAAgB,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,aAAa,IAAA,EAA6C;AACjE,EAAA,IAAI,UAAA,IAAc,IAAA,EAAM,OAAO,IAAA,CAAK,YAAY,EAAC;AACjD,EAAA,OAAO,IAAA,CAAK,SAAS,EAAC;AACxB;AAIO,SAAS,mBAAmB,IAAA,EAGjC;AACA,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAChB,OAAA,CAAQ,CAAA,IAAA,KAAQ,aAAa,IAAI,CAAC,CAAA,CAClC,MAAA,CAAO,CAAA,IAAA,KAAQ;AACd,IAAA,MAAM,MAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI,KAAK,MAAM,CAAA,CAAA;AAC1C,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,KAAA;AAC1B,IAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AAEH,EAAA,OAAO,EAAE,KAAA,EAAO,WAAA,EAAa,KAAK,KAAA,CAAM,CAAC,GAAG,WAAA,EAAY;AAC1D;AAIA,SAAS,OAAO,GAAA,EAA0B;AACxC,EAAA,OAAO,CAAA,EAAG,GAAA,CAAI,OAAO,CAAA,CAAA,EAAI,IAAI,MAAM,CAAA,CAAA;AACrC;AAEA,SAAS,eAAyC,IAAA,EAAiC;AACjF,EAAA,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,KAAO,CAAC,MAAA,CAAO,GAAG,CAAA,EAAG,GAAG,CAAC,CAAC,CAAA;AACpD;AAOO,SAAS,gBAAA,CACd,GAAA,EACA,SAAA,EACA,QAAA,EAC8C;AAC9C,EAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,GAAA;AAC3C,EAAA,MAAM,CAAC,SAAA,EAAW,GAAG,IAAI,IAAI,GAAA,CAAI,KAAA;AACjC,EAAA,IAAI,CAAC,WAAW,OAAO,GAAA;AAGvB,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI,QAAA,KAAa,UAAA,IAAc,UAAA,IAAc,SAAA,IAAa,cAAc,SAAA,EAAW;AACjF,IAAA,MAAM,cAAA,GAAiB,cAAA,CAAe,SAAA,CAAU,QAAA,IAAY,EAAE,CAAA;AAC9D,IAAA,IAAI,cAAA,CAAe,IAAA,KAAS,CAAA,EAAG,OAAO,GAAA;AACtC,IAAA,YAAA,GAAe;AAAA,MACb,GAAG,SAAA;AAAA,MACH,QAAA,EAAA,CAAW,SAAA,CAAU,QAAA,IAAY,EAAC,EAAG,GAAA,CAAI,CAAA,QAAA,KAAY,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAC,KAAK,QAAQ;AAAA,KACvG;AAAA,EACF,CAAA,MAAA,IAAW,OAAA,IAAW,SAAA,IAAa,OAAA,IAAW,SAAA,EAAW;AACvD,IAAA,MAAM,cAAA,GAAiB,cAAA,CAAe,SAAA,CAAU,KAAA,IAAS,EAAE,CAAA;AAC3D,IAAA,IAAI,cAAA,CAAe,IAAA,KAAS,CAAA,EAAG,OAAO,GAAA;AACtC,IAAA,YAAA,GAAe;AAAA,MACb,GAAG,SAAA;AAAA,MACH,KAAA,EAAA,CAAQ,SAAA,CAAU,KAAA,IAAS,EAAC,EAAG,GAAA,CAAI,CAAA,QAAA,KAAY,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAC,KAAK,QAAQ;AAAA,KACjG;AAAA,EACF,CAAA,MAAO;AACL,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,OAAO,EAAE,GAAG,GAAA,EAAK,KAAA,EAAO,CAAC,YAAA,EAAc,GAAG,IAAI,CAAA,EAAE;AAClD;AAKA,SAAS,wBAA2D,IAAA,EAAgB;AAClF,EAAA,OAAO,CAAC,GAAG,IAAI,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AAC9B,IAAA,MAAM,KAAA,GAAQ,EAAE,SAAA,GAAY,IAAI,KAAK,CAAA,CAAE,SAAmC,CAAA,CAAE,OAAA,EAAQ,GAAI,CAAA;AACxF,IAAA,MAAM,KAAA,GAAQ,EAAE,SAAA,GAAY,IAAI,KAAK,CAAA,CAAE,SAAmC,CAAA,CAAE,OAAA,EAAQ,GAAI,CAAA;AACxF,IAAA,OAAO,KAAA,GAAQ,KAAA;AAAA,EACjB,CAAC,CAAA;AACH;AAQO,SAAS,mBAAA,CACd,GAAA,EACA,KAAA,EACA,QAAA,EAC8C;AAC9C,EAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,GAAA;AAC3C,EAAA,MAAM,CAAC,SAAA,EAAW,GAAG,IAAI,IAAI,GAAA,CAAI,KAAA;AACjC,EAAA,IAAI,CAAC,WAAW,OAAO,GAAA;AACvB,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,WAAA,IAAe,SAAA,CAAU,WAAA;AAElD,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI,QAAA,KAAa,UAAA,IAAc,UAAA,IAAc,SAAA,EAAW;AACtD,IAAA,MAAM,OAAA,GAAW,KAAA,CAA+B,QAAA,IAAY,EAAC;AAC7D,IAAA,YAAA,GAAe;AAAA,MACb,GAAG,SAAA;AAAA,MACH,QAAA,EAAU,uBAAA,CAAwB,CAAC,GAAG,OAAA,EAAS,GAAI,SAAA,CAAU,QAAA,IAAY,EAAG,CAAC,CAAA;AAAA,MAC7E,WAAA,EAAa;AAAA,KACf;AAAA,EACF,CAAA,MAAA,IAAW,WAAW,SAAA,EAAW;AAC/B,IAAA,MAAM,OAAA,GAAW,KAAA,CAAkC,KAAA,IAAS,EAAC;AAC7D,IAAA,YAAA,GAAe;AAAA,MACb,GAAG,SAAA;AAAA,MACH,KAAA,EAAO,uBAAA,CAAwB,CAAC,GAAG,OAAA,EAAS,GAAI,SAAA,CAAU,KAAA,IAAS,EAAG,CAAC,CAAA;AAAA,MACvE,WAAA,EAAa;AAAA,KACf;AAAA,EACF,CAAA,MAAO;AACL,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,OAAO,EAAE,GAAG,GAAA,EAAK,KAAA,EAAO,CAAC,YAAA,EAAc,GAAG,IAAI,CAAA,EAAE;AAClD;AA6BO,MAAM,YAAsD,CAAC;AAAA,EAClE,OAAA;AAAA,EACA,QAAA,GAAW,QAAA;AAAA,EACX,UAAU;AACZ,CAAA,KAAqB;AACnB,EAAA,MAAM;AAAA,IACJ,sBAAsB,sBAAA,CAAuB,mBAAA;AAAA,IAC7C,uBAAuB,sBAAA,CAAuB,oBAAA;AAAA,IAC9C,aAAa,sBAAA,CAAuB,UAAA;AAAA,IACpC,4BAA4B,sBAAA,CAAuB,yBAAA;AAAA,IACnD,+BAA+B,sBAAA,CAAuB,4BAAA;AAAA,IACtD,uBAAuB,sBAAA,CAAuB,oBAAA;AAAA,IAC9C,mBAAmB,sBAAA,CAAuB,gBAAA;AAAA,IAC1C,mBAAmB,sBAAA,CAAuB;AAAA,GAC5C,GAAI,OAAA;AACJ,EAAA,MAAM,SAASA,qBAAA,EAAgB;AAC/B,EAAA,MAAM,cAAcC,yBAAA,EAAe;AACnC,EAAA,MAAM,EAAE,MAAA,EAAQ,iBAAA,EAAmB,MAAA,EAAQ,mBAAA,KAAwBC,yBAAA,EAAU;AAE7E,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIC,cAAA,CAAuB,MAAM,oBAAA,CAAqB,GAAA,CAAI,MAAM,CAAA,IAAK,SAAS,CAAA;AAClH,EAAA,MAAM,mBAAmB,YAAA,KAAiB,aAAA;AAK1C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,IAAI,CAAA;AAMnD,EAAA,MAAM,CAAC,mBAAmB,oBAAoB,CAAA,GAAIA,eAAsB,sBAAM,IAAI,KAAK,CAAA;AACvF,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,oBAAA,iBAAqB,IAAI,KAAK,CAAA;AAAA,EAChC,CAAA,EAAG,CAAC,QAAA,EAAU,OAAO,CAAC,CAAA;AAEtB,EAAA,MAAM,cAAA,GAAiB,CAAC,QAAA,EAAU,QAAA,EAAU,OAAO,CAAA;AAEnD,EAAA,MAAM,QAAQC,2BAAA,CAAiB;AAAA,IAC7B,QAAA,EAAU,cAAA;AAAA,IACV,OAAA,EAAS,CAAC,EAAE,SAAA,OACV,aAAA,CAAc;AAAA,MACZ,MAAA;AAAA,MACA,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS,eAAA;AAAA,MACT,OAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACH,gBAAA,EAAkB,CAAA;AAAA,IAClB,gBAAA,EAAkB,sBAAA;AAAA,IAClB,MAAA,EAAQ,kBAAA;AAAA,IACR,KAAA,EAAO,KAAA;AAAA;AAAA;AAAA,IAGP,iBAAiB,CAAA,CAAA,KAAK;AACpB,MAAA,IAAIC,oCAAA,CAAoB,CAAA,CAAE,KAAA,CAAM,KAAK,GAAG,OAAO,KAAA;AAC/C,MAAA,IAAI,CAAC,aAAa,OAAO,KAAA;AACzB,MAAA,OAAO,mBAAmB,yBAAA,GAA4B,KAAA;AAAA,IACxD;AAAA,GACD,CAAA;AAED,EAAA,MAAM,MAAA,GAAS,MAAM,IAAA,EAAM,WAAA;AAK3B,EAAAF,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,KAAA,CAAM,SAAA,IAAa,MAAA,KAAW,MAAA,IAAa,iBAAiB,SAAA,EAAW;AACzE,MAAA,oBAAA,CAAqB,GAAA,CAAI,QAAQ,aAAa,CAAA;AAC9C,MAAA,eAAA,CAAgB,aAAa,CAAA;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,KAAA,CAAM,WAAW,MAAA,EAAQ,YAAA,EAAc,MAAM,CAAC,CAAA;AAElD,EAAA,MAAM,aAAaG,mBAAA,CAAS;AAAA,IAC1B,QAAA,EAAU,CAAC,cAAA,EAAgB,QAAA,EAAU,OAAO,CAAA;AAAA,IAC5C,SAAS,MAAM;AACb,MAAA,MAAM,UAAU,WAAA,CAAY,YAAA,CAA+C,cAAc,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,EAAG,WAAA;AACtG,MAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,MAAA,OAAO,aAAA,CAAc;AAAA,QACnB,MAAA;AAAA,QACA,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,OAAA;AAAA,QACP,KAAA,EAAO,UAAA;AAAA,QACP,OAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,CAAC,MAAA,IAAU,CAAC,gBAAA,IAAoB,WAAA;AAAA,IAC1C,KAAA,EAAO,KAAA;AAAA,IACP,iBAAiB,CAAA,CAAA,KAAK;AACpB,MAAA,IAAI,CAAA,CAAE,KAAA,CAAM,KAAA,EAAO,OAAO,KAAA;AAC1B,MAAA,MAAM,IAAA,GAAO,EAAE,KAAA,CAAM,IAAA;AACrB,MAAA,IAAI,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,OAAO,oBAAA;AACjC,MAAA,OAAO,mBAAA;AAAA,IACT;AAAA,GACD,CAAA;AAOD,EAAAH,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,SAAS,UAAA,CAAW,IAAA;AAC1B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,WAAA,CAAY,YAAA;AAAA,MAA+C,cAAA;AAAA,MAAgB,CAAA,GAAA,KACzE,mBAAA,CAAoB,GAAA,EAAK,MAAA,EAAQ,QAAQ;AAAA,KAC3C;AAEA,IAAA,MAAM,OAAA,GACJ,QAAA,KAAa,UAAA,IAAc,UAAA,IAAc,SACpC,MAAA,CAAO,QAAA,IAAY,EAAC,GACrB,WAAW,MAAA,GACR,MAAA,CAAO,KAAA,IAAS,KACjB,EAAC;AACT,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAG,CAAA,CAAE,OAAO,CAAA,CAAA,EAAI,CAAA,CAAE,MAAA,IAAU,EAAE,CAAA,CAAE,CAAA;AAC9D,IAAA,oBAAA,CAAqB,CAAA,IAAA,KAAQ;AAC3B,MAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,MAAA,KAAA,MAAW,CAAA,IAAK,IAAA,EAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AAChC,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,oBAAA,CAAqB,CAAA,IAAA,KAAQ;AAC3B,QAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,QAAA,KAAA,MAAW,CAAA,IAAK,IAAA,EAAM,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AACnC,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,GAAG,gBAAgB,CAAA;AAAA,EAIrB,CAAA,EAAG,CAAC,UAAA,CAAW,IAAA,EAAM,aAAa,QAAA,EAAU,OAAA,EAAS,gBAAgB,CAAC,CAAA;AAItE,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,CAAU,UAAA,CAAW,KAAK,CAAA,EAAG;AAC/B,MAAA,oBAAA,CAAqB,GAAA,CAAI,QAAQ,aAAa,CAAA;AAC9C,MAAA,eAAA,CAAgB,aAAa,CAAA;AAAA,IAC/B;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,CAAW,KAAA,EAAO,MAAM,CAAC,CAAA;AAK7B,EAAA,MAAM,qBAAqBG,mBAAA,CAAS;AAAA,IAClC,QAAA,EAAU,CAAC,uBAAA,EAAyB,QAAA,EAAU,OAAO,CAAA;AAAA,IACrD,OAAA,EAAS,MACP,aAAA,CAAc;AAAA,MACZ,MAAA;AAAA,MACA,IAAA,EAAM,CAAA;AAAA,MACN,OAAA,EAAS,eAAA;AAAA,MACT,OAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACH,OAAA,EAAS,CAAC,CAAC,MAAA,IAAU,CAAC,gBAAA,IAAoB,WAAA;AAAA,IAC1C,eAAA,EAAiB,4BAAA;AAAA,IACjB,cAAA,EAAgB,KAAA;AAAA,IAChB,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAAH,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,SAAS,kBAAA,CAAmB,IAAA;AAClC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,WAAA,CAAY,YAAA;AAAA,MAA+C,cAAA;AAAA,MAAgB,CAAA,GAAA,KACzE,gBAAA,CAAiB,GAAA,EAAK,MAAA,EAAQ,QAAQ;AAAA,KACxC;AAAA,EAEF,GAAG,CAAC,kBAAA,CAAmB,MAAM,WAAA,EAAa,QAAA,EAAU,OAAO,CAAC,CAAA;AAK5D,EAAA,MAAM,gBAAA,GAAmBI,aAAO,CAAC,CAAA;AACjC,EAAAJ,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,EAAA,GAAK,KAAK,GAAA,CAAI,KAAA,CAAM,eAAe,UAAA,CAAW,aAAA,EAAe,mBAAmB,aAAa,CAAA;AACnG,IAAA,IAAI,EAAA,GAAK,iBAAiB,OAAA,EAAS;AACjC,MAAA,gBAAA,CAAiB,OAAA,GAAU,EAAA;AAAA,IAC7B;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,CAAM,aAAA,EAAe,WAAW,aAAA,EAAe,kBAAA,CAAmB,aAAa,CAAC,CAAA;AAIpF,EAAA,MAAM,cAAA,GAAiBI,aAAO,WAAW,CAAA;AACzC,EAAAJ,eAAA,CAAU,MAAM;AACd,IAAA,cAAA,CAAe,OAAA,GAAU,WAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,IAAI,QAAA,CAAS,oBAAoB,SAAA,EAAW;AAC5C,MAAA,IAAI,CAAC,eAAe,OAAA,EAAS;AAC7B,MAAA,IAAI,CAAC,qBAAqB,gBAAA,CAAiB,OAAA,EAAS,KAAK,GAAA,EAAI,EAAG,oBAAoB,CAAA,EAAG;AACvF,MAAA,KAAK,WAAA,CAAY,aAAa,EAAE,QAAA,EAAU,CAAC,QAAA,EAAU,QAAA,EAAU,OAAO,CAAA,EAAG,CAAA;AAAA,IAC3E,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,oBAAoB,OAAO,CAAA;AACrD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,kBAAA,EAAoB,OAAO,CAAA;AAAA,EACvE,GAAG,CAAC,WAAA,EAAa,QAAA,EAAU,OAAA,EAAS,oBAAoB,CAAC,CAAA;AAEzD,EAAA,MAAM,EAAE,WAAA,EAAa,kBAAA,EAAoB,aAAA,EAAc,GAAI,KAAA;AAE3D,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,iBAAA,IAAqB,WAAA,IAAe,CAAC,kBAAA,EAAoB;AAC3D,MAAA,KAAK,aAAA,EAAc;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,iBAAA,EAAmB,WAAA,EAAa,kBAAA,EAAoB,aAAa,CAAC,CAAA;AAYtE,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,UAAA,IAAc,kBAAA,CAAmB,cAAc,UAAA,CAAW,UAAA;AACtF,EAAA,MAAM,iBAAiB,IAAA,CAAK,GAAA;AAAA,IAC1B,KAAA,CAAM,aAAA;AAAA,IACN,KAAA,CAAM,cAAA;AAAA,IACN,UAAA,CAAW,aAAA;AAAA,IACX,UAAA,CAAW,cAAA;AAAA,IACX,kBAAA,CAAmB,aAAA;AAAA,IACnB,kBAAA,CAAmB;AAAA,GACrB;AACA,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAID,eAAS,KAAK,CAAA;AACxC,EAAA,MAAM,iBAAA,GAAoBK,aAAO,cAAc,CAAA;AAC/C,EAAAJ,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,cAAA,GAAiB,kBAAkB,OAAA,EAAS;AAC9C,MAAA,iBAAA,CAAkB,OAAA,GAAU,cAAA;AAC5B,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,MAAM,IAAI,UAAA,CAAW,MAAM,QAAA,CAAS,KAAK,GAAG,gBAAgB,CAAA;AAC5D,MAAA,OAAO,MAAM,aAAa,CAAC,CAAA;AAAA,IAC7B;AAAA,EACF,CAAA,EAAG,CAAC,cAAA,EAAgB,gBAAgB,CAAC,CAAA;AACrC,EAAA,MAAM,eAAe,aAAA,IAAiB,KAAA;AAEtC,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,mBAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AACF;;;;;;;;;;;"}
1
+ {"version":3,"file":"use-traces.cjs.js","sources":["../../../../src/domains/traces/hooks/use-traces.tsx"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { useMastraClient } from '@mastra/react';\nimport type { InfiniteData } from '@tanstack/react-query';\nimport { useInfiniteQuery, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect, useRef, useState } from 'react';\nimport type { TraceListMode } from '../trace-filters';\nimport { useInView } from '@/hooks/use-in-view';\nimport { is403ForbiddenError } from '@/lib/query-utils';\n\ntype ListBranchesArgs = NonNullable<Parameters<MastraClient['listBranches']>[0]>;\ntype ListBranchesResponse = Awaited<ReturnType<MastraClient['listBranches']>>;\ntype ListTracesArgs = NonNullable<Parameters<MastraClient['listTraces']>[0]>;\ntype ListTracesLightResponse = Awaited<ReturnType<MastraClient['listTracesLight']>>;\ntype LightSpanRecord = ListTracesLightResponse['spans'][number] | ListBranchesResponse['branches'][number];\n\n/**\n * Per-MastraClient delta-polling support cache. Sticks once we observe a 501\n * or a page-0 response without `deltaCursor` (legacy server or store without\n * delta capability), so we don't re-probe on every mount.\n */\ntype DeltaSupport = 'unknown' | 'unsupported';\nconst deltaSupportByClient = new WeakMap<ReturnType<typeof useMastraClient>, DeltaSupport>();\n\n/**\n * Per-MastraClient light-list support cache. Sticks once the light endpoint is\n * shown not to be served, so every subsequent page fetch, delta poll and periodic\n * refresh uses the full list endpoint instead. Other failures (auth, rate limits,\n * outages) propagate without pinning — they'd hit the full endpoint too.\n */\ntype LightListSupport = 'unknown' | 'unsupported';\nconst lightListSupportByClient = new WeakMap<ReturnType<typeof useMastraClient>, LightListSupport>();\n\n/** When the current run of light-endpoint 500s started, per client. Cleared by any light success. */\nconst lightListFirstServerErrorAtByClient = new WeakMap<ReturnType<typeof useMastraClient>, number>();\n\n/** A 500 is ambiguous — an old core's store throwing, or a transient fault (DB hiccup, timeout).\n * Serve the request from the full endpoint either way, but only pin the session once the 500s\n * have outlasted a blip; a hiccup would otherwise degrade the list until the tab is reloaded.\n * Elapsed time, not a request count: the page refetch, the delta poll and the status refresh can\n * fail in the same instant, and a fallback response still looks like a success to the delta query,\n * so chase mode keeps re-polling every `deltaChaseIntervalMs` throughout the outage. */\nconst LIGHT_LIST_SERVER_ERROR_PIN_AFTER_MS = 10_000;\n\n/** Tunables for live-tail polling. All fields optional — defaults below.\n * Platform consumers override individual fields to throttle traffic or\n * reshape the freshness/visibility trade-offs. */\nexport interface TracesPollingConfig {\n /** Interval between delta polls. Default 5_000ms. */\n deltaPollIntervalMs?: number;\n /** Refetch delay when the server signals `delta.hasMore` (chase remaining updates immediately). Default 100ms. */\n deltaChaseIntervalMs?: number;\n /** Max rows per delta poll. Server caps at 100. Default 100. */\n deltaLimit?: number;\n /** Page-mode refetch interval used when the configured store does not support delta polling. Default 10_000ms. */\n pageModeRefetchIntervalMs?: number;\n /** Periodic page-0 refetch interval while delta is active. Delta only delivers new rows, so this\n * is how we surface status flips (running → success/error) on rows already visible. Default 60_000ms. */\n page0StatusRefreshIntervalMs?: number;\n /** When the tab returns from being hidden and the last successful poll was older than this, the\n * cursor is treated as stale (ClickHouse delta tables TTL after 2 days; other stores may be more\n * aggressive). The infinite query is reset so page 0 refetches and delta resumes from a fresh\n * cursor. Default 900_000ms (15 min). */\n idleGuardThresholdMs?: number;\n /** Minimum visible duration for `isRefetching` after any query completes. On localhost a delta\n * poll can resolve in tens of ms — too brief for the spinner's 1s rotation to register visually,\n * and quick enough that React may batch the start/finish transitions. Pulsing for this duration\n * on completion (~144° of rotation at 400ms) makes each poll perceptible as a heartbeat.\n * Default 400ms. */\n minRefetchSpinMs?: number;\n /** Window during which a delta-arrived row's key stays in `recentlyAddedKeys` so the list view\n * can apply its `animate-row-highlight` class. Should match the CSS animation duration\n * (currently 1_000ms — see `index.css`). Default 1_000ms. */\n deltaHighlightMs?: number;\n}\n\nconst DEFAULT_POLLING_CONFIG: Required<TracesPollingConfig> = {\n deltaPollIntervalMs: 5_000,\n deltaChaseIntervalMs: 100,\n deltaLimit: 100,\n pageModeRefetchIntervalMs: 10_000,\n page0StatusRefreshIntervalMs: 60_000,\n idleGuardThresholdMs: 15 * 60_000,\n minRefetchSpinMs: 400,\n deltaHighlightMs: 1_000,\n};\n\n/** Returns true when the cursor should be considered stale and re-seeded.\n * Exported for testing — pure function of timestamps. */\nexport function shouldResetAfterIdle(lastSuccessAt: number, now: number, thresholdMs: number): boolean {\n if (lastSuccessAt === 0) return false;\n return now - lastSuccessAt > thresholdMs;\n}\n\nfunction isHttp501(error: unknown): boolean {\n return (error as { status?: number } | null)?.status === 501;\n}\n\n/** Only 404 and 500 can mean the light endpoint isn't served: 404 from servers without\n * the route, 500 from cores whose store throws instead of serving the projection.\n * Anything else (401, 403, 429, other 5xx, the 501 disabled-domain signal) is a\n * condition the full endpoint would hit too, so it propagates instead of falling\n * back — mirroring how the delta-support cache matches exactly 501. */\nfunction lightListFallbackStatus(error: unknown): 404 | 500 | undefined {\n const status = (error as { status?: number } | null)?.status;\n return status === 404 || status === 500 ? status : undefined;\n}\n\n/** Whether a failed light-list request should pin the session to the full endpoint.\n * `firstServerErrorAt` is undefined when this 500 opens a new run of them, so a single\n * fault never pins. Exported for testing — pure function of the status and timestamps. */\nexport function shouldPinLightList(\n status: number | undefined,\n firstServerErrorAt: number | undefined,\n now: number,\n): boolean {\n if (status === 404) return true;\n if (status !== 500) return false;\n if (firstServerErrorAt === undefined) return false;\n return now - firstServerErrorAt >= LIGHT_LIST_SERVER_ERROR_PIN_AFTER_MS;\n}\n\ntype FetchTracesFnArgs = TracesFilters & {\n client: ReturnType<typeof useMastraClient>;\n} & ({ mode: 'delta'; after?: string; limit?: number } | { mode?: 'page'; page: number; perPage: number });\n\nconst fetchTracesFn = async (args: FetchTracesFnArgs) => {\n const { client, filters, listMode = 'traces' } = args;\n const params =\n args.mode === 'delta'\n ? { mode: 'delta' as const, after: args.after, limit: args.limit, filters }\n : { pagination: { page: args.page, perPage: args.perPage }, filters };\n\n if (listMode === 'branches') {\n return client.listBranches(params as ListBranchesArgs);\n }\n\n // The list only renders identity, timing, status and a short input preview, so ask\n // for the lightweight projection. Selecting a row fetches the full record separately.\n // Clients pinned to full mode keep using listTraces (page and delta alike), exactly\n // as before the light endpoint existed; full rows are a superset of the light ones.\n if (lightListSupportByClient.get(client) === 'unsupported') {\n return client.listTraces(params as ListTracesArgs);\n }\n try {\n const response = await client.listTracesLight(params as ListTracesArgs);\n // A 200 can still be a legacy projection: servers whose store implements the\n // pre-preview light list answer with rows carrying none of the new fields.\n // Current servers always set `status` on every row, so a non-empty page where\n // every row lacks it is legacy-shaped — pin and refetch the full rows. Empty\n // pages never pin (indistinguishable, and they render identically either way;\n // the next non-empty page decides).\n if (args.mode !== 'delta') {\n const spans = response.spans ?? [];\n if (spans.length > 0 && spans.every(span => span.status === undefined)) {\n lightListSupportByClient.set(client, 'unsupported');\n return client.listTraces(params as ListTracesArgs);\n }\n }\n lightListFirstServerErrorAtByClient.delete(client);\n return response;\n } catch (error) {\n const status = lightListFallbackStatus(error);\n if (status === undefined) throw error;\n\n const now = Date.now();\n const firstServerErrorAt = lightListFirstServerErrorAtByClient.get(client);\n if (status === 500 && firstServerErrorAt === undefined) {\n lightListFirstServerErrorAtByClient.set(client, now);\n }\n if (shouldPinLightList(status, firstServerErrorAt, now)) {\n lightListSupportByClient.set(client, 'unsupported');\n }\n return client.listTraces(params as ListTracesArgs);\n }\n};\n\nexport const TRACES_PER_PAGE = 25;\n\nexport interface TracesFilters {\n filters?: ListTracesArgs['filters'] | ListBranchesArgs['filters'];\n listMode?: TraceListMode;\n}\n\n/** Returns the next page number if the server indicates more pages are available. */\nexport function getTracesNextPageParam(\n lastPage: ListTracesLightResponse | ListBranchesResponse | undefined,\n _allPages: unknown,\n lastPageParam: number,\n) {\n if (lastPage?.pagination?.hasMore) {\n return lastPageParam + 1;\n }\n return undefined;\n}\n\ntype TracesPageResponse = ListTracesLightResponse | ListBranchesResponse;\n\n/** Branch rows are full spans and trace rows are lightweight; the list only reads the\n * fields they share, so both are surfaced as `LightSpanRecord`. */\nfunction getPageSpans(page: TracesPageResponse): LightSpanRecord[] {\n if ('branches' in page) return page.branches ?? [];\n return page.spans ?? [];\n}\n\n/** Deduplicates trace/branch rows by traceId + spanId across all loaded pages.\n * Also surfaces page 0's deltaCursor so the live-tail query can read it reactively. */\nexport function selectUniqueTraces(data: { pages: TracesPageResponse[] }): {\n spans: LightSpanRecord[];\n deltaCursor: string | undefined;\n} {\n const seen = new Set<string>();\n const spans = data.pages\n .flatMap(page => getPageSpans(page))\n .filter(span => {\n const key = `${span.traceId}:${span.spanId}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n\n return { spans, deltaCursor: data.pages[0]?.deltaCursor };\n}\n\ntype RowIdentity = { traceId: string; spanId?: string | null };\n\nfunction rowKey(row: RowIdentity): string {\n return `${row.traceId}:${row.spanId}`;\n}\n\nfunction indexRowsByKey<TRow extends RowIdentity>(rows: TRow[]): Map<string, TRow> {\n return new Map(rows.map(row => [rowKey(row), row]));\n}\n\n/** Replaces existing page-0 rows in place (keyed by traceId:spanId) with\n * refreshed copies from the server. Rows the server doesn't return are kept\n * as-is so delta-accumulated rows that have aged off the server's page 0\n * aren't dropped from the UI. New rows aren't added here — delta polling\n * delivers those. */\nexport function refreshPage0Rows(\n old: InfiniteData<TracesPageResponse> | undefined,\n refreshed: ListTracesLightResponse | ListBranchesResponse,\n listMode: TraceListMode,\n): InfiniteData<TracesPageResponse> | undefined {\n if (!old || old.pages.length === 0) return old;\n const [firstPage, ...rest] = old.pages;\n if (!firstPage) return old;\n\n // Branch and trace rows have different row shapes, so each mode keys its own map.\n let updatedFirst: TracesPageResponse;\n if (listMode === 'branches' && 'branches' in firstPage && 'branches' in refreshed) {\n const refreshedByKey = indexRowsByKey(refreshed.branches ?? []);\n if (refreshedByKey.size === 0) return old;\n updatedFirst = {\n ...firstPage,\n branches: (firstPage.branches ?? []).map(existing => refreshedByKey.get(rowKey(existing)) ?? existing),\n };\n } else if ('spans' in firstPage && 'spans' in refreshed) {\n const refreshedByKey = indexRowsByKey(refreshed.spans ?? []);\n if (refreshedByKey.size === 0) return old;\n updatedFirst = {\n ...firstPage,\n spans: (firstPage.spans ?? []).map(existing => refreshedByKey.get(rowKey(existing)) ?? existing),\n };\n } else {\n return old;\n }\n\n return { ...old, pages: [updatedFirst, ...rest] };\n}\n\n/** Stable `startedAt DESC` sort matching the server's default page-mode\n * ordering for both list endpoints. Rows missing `startedAt` sink to the\n * bottom (compared as time 0). */\nfunction sortRowsByStartedAtDesc<T extends { startedAt?: unknown }>(rows: T[]): T[] {\n return [...rows].sort((a, b) => {\n const aTime = a.startedAt ? new Date(a.startedAt as string | number | Date).getTime() : 0;\n const bTime = b.startedAt ? new Date(b.startedAt as string | number | Date).getTime() : 0;\n return bTime - aTime;\n });\n}\n\n/** Prepends delta-mode rows into page 0 and advances its deltaCursor.\n * Delta responses come back in server cursor order (insertion order into\n * the per-store delta index), not the `startedAt DESC` order page-mode\n * uses — so we re-sort the merged page 0 to match what the user sees on\n * a fresh page-mode load. Cross-page duplication is handled later by\n * selectUniqueTraces. */\nexport function mergeDeltaIntoPage0(\n old: InfiniteData<TracesPageResponse> | undefined,\n delta: ListTracesLightResponse | ListBranchesResponse,\n listMode: TraceListMode,\n): InfiniteData<TracesPageResponse> | undefined {\n if (!old || old.pages.length === 0) return old;\n const [firstPage, ...rest] = old.pages;\n if (!firstPage) return old;\n const nextCursor = delta.deltaCursor ?? firstPage.deltaCursor;\n\n let updatedFirst: TracesPageResponse;\n if (listMode === 'branches' && 'branches' in firstPage) {\n const newRows = (delta as ListBranchesResponse).branches ?? [];\n updatedFirst = {\n ...firstPage,\n branches: sortRowsByStartedAtDesc([...newRows, ...(firstPage.branches ?? [])]),\n deltaCursor: nextCursor,\n };\n } else if ('spans' in firstPage) {\n const newRows = (delta as ListTracesLightResponse).spans ?? [];\n updatedFirst = {\n ...firstPage,\n spans: sortRowsByStartedAtDesc([...newRows, ...(firstPage.spans ?? [])]),\n deltaCursor: nextCursor,\n };\n } else {\n return old;\n }\n\n return { ...old, pages: [updatedFirst, ...rest] };\n}\n\nexport interface UseTracesArgs extends TracesFilters {\n enabled?: boolean;\n /** Optional overrides for the live-tail polling tunables. Any omitted fields fall back to the\n * built-in defaults; pass only what you want to change. */\n polling?: TracesPollingConfig;\n}\n\ninterface UseTracesReturn {\n data: { spans: LightSpanRecord[]; deltaCursor: string | undefined } | undefined;\n hasNextPage: boolean;\n isFetchingNextPage: boolean;\n fetchNextPage: () => void;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n setEndOfListElement: (node: HTMLDivElement | null) => void;\n isRefetching: boolean;\n autoRefetch: boolean;\n setAutoRefetch: (v: boolean) => void;\n recentlyAddedKeys: Set<string>;\n dataUpdatedAt: number;\n errorUpdatedAt: number;\n isFetching: boolean;\n isSuccess: boolean;\n fetchStatus: 'idle' | 'fetching' | 'paused';\n refetch: () => void;\n}\n\nexport const useTraces: (args: UseTracesArgs) => UseTracesReturn = ({\n filters,\n listMode = 'traces',\n polling = {},\n enabled = true,\n}: UseTracesArgs) => {\n const {\n deltaPollIntervalMs = DEFAULT_POLLING_CONFIG.deltaPollIntervalMs,\n deltaChaseIntervalMs = DEFAULT_POLLING_CONFIG.deltaChaseIntervalMs,\n deltaLimit = DEFAULT_POLLING_CONFIG.deltaLimit,\n pageModeRefetchIntervalMs = DEFAULT_POLLING_CONFIG.pageModeRefetchIntervalMs,\n page0StatusRefreshIntervalMs = DEFAULT_POLLING_CONFIG.page0StatusRefreshIntervalMs,\n idleGuardThresholdMs = DEFAULT_POLLING_CONFIG.idleGuardThresholdMs,\n minRefetchSpinMs = DEFAULT_POLLING_CONFIG.minRefetchSpinMs,\n deltaHighlightMs = DEFAULT_POLLING_CONFIG.deltaHighlightMs,\n } = polling;\n const client = useMastraClient();\n const queryClient = useQueryClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const [deltaSupport, setDeltaSupport] = useState<DeltaSupport>(() => deltaSupportByClient.get(client) ?? 'unknown');\n const deltaUnsupported = deltaSupport === 'unsupported';\n\n // When false, all automatic polling stops: delta polls, status refresh,\n // idle-guard resets, and the page-mode fallback interval. Manual `resync`\n // still works. Session-scoped (no persistence across mounts).\n const [autoRefetch, setAutoRefetch] = useState(true);\n\n // Keys (`traceId:spanId`) of rows that arrived via the most recent delta\n // poll(s). The list view reads this to apply a temporary highlight class\n // for deltaHighlightMs, then they auto-expire. Resets on filter/listMode\n // change since a new query key spawns a fresh list.\n const [recentlyAddedKeys, setRecentlyAddedKeys] = useState<Set<string>>(() => new Set());\n useEffect(() => {\n setRecentlyAddedKeys(new Set());\n }, [listMode, filters]);\n\n const tracesQueryKey = ['traces', listMode, filters] as const;\n\n const query = useInfiniteQuery({\n queryKey: tracesQueryKey,\n enabled,\n queryFn: ({ pageParam }) =>\n fetchTracesFn({\n client,\n page: pageParam,\n perPage: TRACES_PER_PAGE,\n filters,\n listMode,\n }),\n initialPageParam: 0,\n getNextPageParam: getTracesNextPageParam,\n select: selectUniqueTraces,\n retry: false,\n // Disable polling on 403 to prevent flickering.\n // Fall back to page-mode polling only when delta isn't running.\n refetchInterval: q => {\n if (is403ForbiddenError(q.state.error)) return false;\n if (!autoRefetch) return false;\n return deltaUnsupported ? pageModeRefetchIntervalMs : false;\n },\n });\n\n const cursor = query.data?.deltaCursor;\n\n // If page 0 came back without a deltaCursor, the server/store doesn't\n // support delta polling. Pin the client to 'unsupported' so the infinite\n // query resumes page-mode polling and we stop probing.\n useEffect(() => {\n if (query.isSuccess && cursor === undefined && deltaSupport === 'unknown') {\n deltaSupportByClient.set(client, 'unsupported');\n setDeltaSupport('unsupported');\n }\n }, [query.isSuccess, cursor, deltaSupport, client]);\n\n const deltaQuery = useQuery({\n queryKey: ['traces-delta', listMode, filters] as const,\n queryFn: () => {\n const current = queryClient.getQueryData<InfiniteData<TracesPageResponse>>(tracesQueryKey)?.pages[0]?.deltaCursor;\n if (!current) return null;\n return fetchTracesFn({\n client,\n mode: 'delta',\n after: current,\n limit: deltaLimit,\n filters,\n listMode,\n });\n },\n enabled: enabled && !!cursor && !deltaUnsupported && autoRefetch,\n retry: false,\n refetchInterval: q => {\n if (q.state.error) return false;\n const data = q.state.data as ListTracesLightResponse | ListBranchesResponse | null | undefined;\n if (data?.delta?.hasMore) return deltaChaseIntervalMs;\n return deltaPollIntervalMs;\n },\n });\n\n // Merge new delta rows into the infinite-query cache. Also captures the\n // arrived keys into `recentlyAddedKeys` for deltaHighlightMs so the UI\n // can briefly distinguish them. The cleanup timer is intentionally NOT\n // tied to the effect lifecycle — if a newer delta arrives first, we still\n // want each prior batch to expire on its own schedule.\n useEffect(() => {\n const result = deltaQuery.data;\n if (!result) return;\n queryClient.setQueryData<InfiniteData<TracesPageResponse>>(tracesQueryKey, old =>\n mergeDeltaIntoPage0(old, result, listMode),\n );\n\n const newRows: RowIdentity[] =\n listMode === 'branches' && 'branches' in result\n ? (result.branches ?? [])\n : 'spans' in result\n ? (result.spans ?? [])\n : [];\n if (newRows.length === 0) return;\n const keys = newRows.map(r => `${r.traceId}:${r.spanId ?? ''}`);\n setRecentlyAddedKeys(prev => {\n const next = new Set(prev);\n for (const k of keys) next.add(k);\n return next;\n });\n setTimeout(() => {\n setRecentlyAddedKeys(prev => {\n const next = new Set(prev);\n for (const k of keys) next.delete(k);\n return next;\n });\n }, deltaHighlightMs);\n // tracesQueryKey is a new array each render but its contents drive cache keying;\n // depending on its members (listMode/filters) is enough.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [deltaQuery.data, queryClient, listMode, filters, deltaHighlightMs]);\n\n // A 501 means the server is too old (or store doesn't support delta) — pin\n // 'unsupported' so the delta query disables and page-mode polling resumes.\n useEffect(() => {\n if (isHttp501(deltaQuery.error)) {\n deltaSupportByClient.set(client, 'unsupported');\n setDeltaSupport('unsupported');\n }\n }, [deltaQuery.error, client]);\n\n // Periodic page-0 refresh to surface status updates on visible rows\n // (running → success/error). Only runs while delta is the primary polling\n // mechanism; otherwise the infinite query's own refetchInterval covers it.\n const statusRefreshQuery = useQuery({\n queryKey: ['traces-status-refresh', listMode, filters] as const,\n queryFn: () =>\n fetchTracesFn({\n client,\n page: 0,\n perPage: TRACES_PER_PAGE,\n filters,\n listMode,\n }),\n enabled: enabled && !!cursor && !deltaUnsupported && autoRefetch,\n refetchInterval: page0StatusRefreshIntervalMs,\n refetchOnMount: false,\n retry: false,\n });\n\n useEffect(() => {\n const result = statusRefreshQuery.data;\n if (!result) return;\n queryClient.setQueryData<InfiniteData<TracesPageResponse>>(tracesQueryKey, old =>\n refreshPage0Rows(old, result, listMode),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [statusRefreshQuery.data, queryClient, listMode, filters]);\n\n // Idle guard: when the tab returns from being hidden, check how long it's\n // been since the last successful poll. If past the threshold, reset the\n // infinite query so page 0 refetches and the cursor is re-seeded.\n const lastSuccessAtRef = useRef(0);\n useEffect(() => {\n const ts = Math.max(query.dataUpdatedAt, deltaQuery.dataUpdatedAt, statusRefreshQuery.dataUpdatedAt);\n if (ts > lastSuccessAtRef.current) {\n lastSuccessAtRef.current = ts;\n }\n }, [query.dataUpdatedAt, deltaQuery.dataUpdatedAt, statusRefreshQuery.dataUpdatedAt]);\n\n // Track autoRefetch in a ref so the visibility listener (attached once)\n // reads the current value without needing to re-attach.\n const autoRefetchRef = useRef(autoRefetch);\n useEffect(() => {\n autoRefetchRef.current = enabled && autoRefetch;\n }, [enabled, autoRefetch]);\n\n useEffect(() => {\n const handler = () => {\n if (document.visibilityState !== 'visible') return;\n if (!autoRefetchRef.current) return;\n if (!shouldResetAfterIdle(lastSuccessAtRef.current, Date.now(), idleGuardThresholdMs)) return;\n void queryClient.resetQueries({ queryKey: ['traces', listMode, filters] });\n };\n document.addEventListener('visibilitychange', handler);\n return () => document.removeEventListener('visibilitychange', handler);\n }, [queryClient, listMode, filters, idleGuardThresholdMs]);\n\n const { hasNextPage, isFetchingNextPage, fetchNextPage } = query;\n\n useEffect(() => {\n if (enabled && isEndOfListInView && hasNextPage && !isFetchingNextPage) {\n void fetchNextPage();\n }\n }, [enabled, isEndOfListInView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n // `isRefetching` aggregates every active fetch — page-mode (initial, next\n // page, manual resync, idle reset), the 60s page-0 status refresh, AND the\n // delta polls — so a spinner bound to it acts as a heartbeat indicator.\n //\n // Short polls (e.g. delta on localhost) can resolve in tens of ms — too\n // brief for `animate-spin` (1s/rotation) to register visually, and quick\n // enough that React may batch the start/finish transitions so we never\n // even observe `isFetching: true`. So we also watch every query's\n // data/errorUpdatedAt; any advance pulses `isRefetching` true for at least\n // minRefetchSpinMs, which is ~144° of rotation — clearly perceptible.\n const isFetchingAny = query.isFetching || statusRefreshQuery.isFetching || deltaQuery.isFetching;\n const lastActivityAt = Math.max(\n query.dataUpdatedAt,\n query.errorUpdatedAt,\n deltaQuery.dataUpdatedAt,\n deltaQuery.errorUpdatedAt,\n statusRefreshQuery.dataUpdatedAt,\n statusRefreshQuery.errorUpdatedAt,\n );\n const [pulse, setPulse] = useState(false);\n const prevActivityAtRef = useRef(lastActivityAt);\n useEffect(() => {\n if (lastActivityAt > prevActivityAtRef.current) {\n prevActivityAtRef.current = lastActivityAt;\n setPulse(true);\n const t = setTimeout(() => setPulse(false), minRefetchSpinMs);\n return () => clearTimeout(t);\n }\n }, [lastActivityAt, minRefetchSpinMs]);\n const isRefetching = isFetchingAny || pulse;\n\n return {\n ...query,\n setEndOfListElement,\n isRefetching,\n autoRefetch,\n setAutoRefetch,\n recentlyAddedKeys,\n };\n};\n"],"names":["useMastraClient","useQueryClient","useInView","useState","useEffect","useInfiniteQuery","is403ForbiddenError","useQuery","useRef"],"mappings":"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"}