@mastra/playground-ui 56.0.0 → 57.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1044) hide show
  1. package/dist/{Button-CVewl8nT.cjs → Button-C0DBEBcJ.cjs} +12 -5
  2. package/dist/Button-C0DBEBcJ.cjs.map +1 -0
  3. package/dist/{Button-cWcBEd-G.js → Button-C9cvaVFG.js} +13 -6
  4. package/dist/Button-C9cvaVFG.js.map +1 -0
  5. package/dist/{Card-DEvGFj-Z.js → Card-B_buJ5yF.js} +3 -3
  6. package/dist/{Card-DEvGFj-Z.js.map → Card-B_buJ5yF.js.map} +1 -1
  7. package/dist/{Card-D0kFp9j9.cjs → Card-DwGasv0K.cjs} +3 -3
  8. package/dist/{Card-D0kFp9j9.cjs.map → Card-DwGasv0K.cjs.map} +1 -1
  9. package/dist/{EmptyState-UWXhBp5U.js → EmptyState-B6cyZw6m.js} +12 -6
  10. package/dist/EmptyState-B6cyZw6m.js.map +1 -0
  11. package/dist/{EmptyState-CdRjFB06.cjs → EmptyState-DiSP6UIy.cjs} +12 -6
  12. package/dist/EmptyState-DiSP6UIy.cjs.map +1 -0
  13. package/dist/ErrorState-B0839u-q.cjs +21 -0
  14. package/dist/ErrorState-B0839u-q.cjs.map +1 -0
  15. package/dist/ErrorState-HyRJdaA2.js +19 -0
  16. package/dist/ErrorState-HyRJdaA2.js.map +1 -0
  17. package/dist/Header-BVnFQlzE.js +31 -0
  18. package/dist/Header-BVnFQlzE.js.map +1 -0
  19. package/dist/Header-CGjhJ0nQ.cjs +36 -0
  20. package/dist/Header-CGjhJ0nQ.cjs.map +1 -0
  21. package/dist/{Notice-Cjti0e0j.cjs → Notice-CoFjo8O6.cjs} +3 -3
  22. package/dist/{Notice-Cjti0e0j.cjs.map → Notice-CoFjo8O6.cjs.map} +1 -1
  23. package/dist/{Notice-Ah-84yi6.js → Notice-DUdQkUqH.js} +3 -3
  24. package/dist/{Notice-Ah-84yi6.js.map → Notice-DUdQkUqH.js.map} +1 -1
  25. package/dist/{PermissionDenied-B6TSGolC.js → PermissionDenied-CTqnE57B.js} +11 -6
  26. package/dist/PermissionDenied-CTqnE57B.js.map +1 -0
  27. package/dist/{PermissionDenied-Dz5qXpQj.cjs → PermissionDenied-fdVmTjjf.cjs} +11 -6
  28. package/dist/PermissionDenied-fdVmTjjf.cjs.map +1 -0
  29. package/dist/{SessionExpired-CF0BGNo_.cjs → SessionExpired-CFGTqnU5.cjs} +5 -6
  30. package/dist/SessionExpired-CFGTqnU5.cjs.map +1 -0
  31. package/dist/{SessionExpired-Bq5LcsDu.js → SessionExpired-COK6flhT.js} +5 -6
  32. package/dist/SessionExpired-COK6flhT.js.map +1 -0
  33. package/dist/ask-user-3fufbFt8.cjs +216 -0
  34. package/dist/ask-user-3fufbFt8.cjs.map +1 -0
  35. package/dist/ask-user-CvCMHkhI.js +206 -0
  36. package/dist/ask-user-CvCMHkhI.js.map +1 -0
  37. package/dist/buttons-group-CoZP3lJt.cjs +59 -0
  38. package/dist/buttons-group-CoZP3lJt.cjs.map +1 -0
  39. package/dist/buttons-group-DsZgrZBZ.js +37 -0
  40. package/dist/buttons-group-DsZgrZBZ.js.map +1 -0
  41. package/dist/buttons-group.css +113 -22
  42. package/dist/{chat-notification-4OuPNhtu.js → chat-notification-BM24QnK9.js} +7 -7
  43. package/dist/{chat-notification-4OuPNhtu.js.map → chat-notification-BM24QnK9.js.map} +1 -1
  44. package/dist/{chat-notification-CPrlBwP_.cjs → chat-notification-CQlc3Z3y.cjs} +7 -7
  45. package/dist/{chat-notification-CPrlBwP_.cjs.map → chat-notification-CQlc3Z3y.cjs.map} +1 -1
  46. package/dist/{chat-signal-CG5-vy21.js → chat-signal-5gAZo10e.js} +6 -6
  47. package/dist/{chat-signal-CG5-vy21.js.map → chat-signal-5gAZo10e.js.map} +1 -1
  48. package/dist/{chat-signal-B_T2DSzo.cjs → chat-signal-CUkeTh1i.cjs} +6 -6
  49. package/dist/{chat-signal-B_T2DSzo.cjs.map → chat-signal-CUkeTh1i.cjs.map} +1 -1
  50. package/dist/{code-block-Cd4u7Bo9.cjs → code-block-D2q4w1t-.cjs} +10 -10
  51. package/dist/{code-block-Cd4u7Bo9.cjs.map → code-block-D2q4w1t-.cjs.map} +1 -1
  52. package/dist/{code-block-CSqjpBvb.js → code-block-D3BWud_S.js} +10 -10
  53. package/dist/{code-block-CSqjpBvb.js.map → code-block-D3BWud_S.js.map} +1 -1
  54. package/dist/{code-diff-C5uY-3Hz.js → code-diff-BHZTS4Zh.js} +2 -2
  55. package/dist/{code-diff-C5uY-3Hz.js.map → code-diff-BHZTS4Zh.js.map} +1 -1
  56. package/dist/{code-diff-DBtbPe9D.cjs → code-diff-CG8veSa-.cjs} +2 -2
  57. package/dist/{code-diff-DBtbPe9D.cjs.map → code-diff-CG8veSa-.cjs.map} +1 -1
  58. package/dist/{code-editor-vCt7l9Bl.js → code-editor-7wJJDE9d.js} +2 -2
  59. package/dist/{code-editor-vCt7l9Bl.js.map → code-editor-7wJJDE9d.js.map} +1 -1
  60. package/dist/{code-editor-DgY7d8kg.cjs → code-editor-Ce1FXyFV.cjs} +2 -2
  61. package/dist/{code-editor-DgY7d8kg.cjs.map → code-editor-Ce1FXyFV.cjs.map} +1 -1
  62. package/dist/{collapsible-BvrI6XnN.cjs → collapsible-BFSJouuI.cjs} +2 -2
  63. package/dist/{collapsible-BvrI6XnN.cjs.map → collapsible-BFSJouuI.cjs.map} +1 -1
  64. package/dist/{collapsible-B2uUy8w5.js → collapsible-DhhP5p1j.js} +2 -2
  65. package/dist/{collapsible-B2uUy8w5.js.map → collapsible-DhhP5p1j.js.map} +1 -1
  66. package/dist/{combobox-D7xJFZuO.js → combobox-CV-Ue388.js} +5 -5
  67. package/dist/combobox-CV-Ue388.js.map +1 -0
  68. package/dist/{combobox-BWM3VH-n.cjs → combobox-Dw3W6EHS.cjs} +6 -6
  69. package/dist/combobox-Dw3W6EHS.cjs.map +1 -0
  70. package/dist/{combobox-styles-CRebmeht.js → combobox-styles-Dgc_Jp-E.js} +3 -6
  71. package/dist/combobox-styles-Dgc_Jp-E.js.map +1 -0
  72. package/dist/{combobox-styles-DYlNNjKC.cjs → combobox-styles-ExU7SMb7.cjs} +3 -6
  73. package/dist/combobox-styles-ExU7SMb7.cjs.map +1 -0
  74. package/dist/{command-DuT06mTw.cjs → command-BJrGchxZ.cjs} +6 -6
  75. package/dist/{command-DuT06mTw.cjs.map → command-BJrGchxZ.cjs.map} +1 -1
  76. package/dist/{command-jRiL1vXM.js → command-kHnYspgO.js} +6 -6
  77. package/dist/{command-jRiL1vXM.js.map → command-kHnYspgO.js.map} +1 -1
  78. package/dist/components/ActionRow.cjs.js +38 -0
  79. package/dist/components/ActionRow.cjs.js.map +1 -0
  80. package/dist/components/ActionRow.d.ts +2 -0
  81. package/dist/components/ActionRow.es.js +34 -0
  82. package/dist/components/ActionRow.es.js.map +1 -0
  83. package/dist/components/AlertDialog.cjs.js +1 -1
  84. package/dist/components/AlertDialog.es.js +1 -1
  85. package/dist/components/Breadcrumb.cjs.js +1 -1
  86. package/dist/components/Breadcrumb.cjs.js.map +1 -1
  87. package/dist/components/Breadcrumb.es.js +1 -1
  88. package/dist/components/Breadcrumb.es.js.map +1 -1
  89. package/dist/components/Button.cjs.js +2 -2
  90. package/dist/components/Button.es.js +3 -3
  91. package/dist/components/ButtonsGroup.cjs.js +1 -2
  92. package/dist/components/ButtonsGroup.cjs.js.map +1 -1
  93. package/dist/components/ButtonsGroup.es.js +1 -1
  94. package/dist/components/Card.cjs.js +1 -1
  95. package/dist/components/Card.es.js +1 -1
  96. package/dist/components/ClampedText.cjs.js +1 -1
  97. package/dist/components/ClampedText.es.js +1 -1
  98. package/dist/components/CodeBlock.cjs.js +1 -1
  99. package/dist/components/CodeBlock.es.js +1 -1
  100. package/dist/components/CodeDiff.cjs.js +1 -1
  101. package/dist/components/CodeDiff.es.js +1 -1
  102. package/dist/components/CodeEditor.cjs.js +1 -1
  103. package/dist/components/CodeEditor.es.js +1 -1
  104. package/dist/components/Collapsible.cjs.js +1 -1
  105. package/dist/components/Collapsible.es.js +1 -1
  106. package/dist/components/Columns.cjs.js +1 -1
  107. package/dist/components/Columns.es.js +1 -1
  108. package/dist/components/Combobox.cjs.js +2 -2
  109. package/dist/components/Combobox.es.js +2 -2
  110. package/dist/components/Command.cjs.js +1 -1
  111. package/dist/components/Command.es.js +1 -1
  112. package/dist/components/CommandPalette.cjs.js +12 -12
  113. package/dist/components/CommandPalette.cjs.js.map +1 -1
  114. package/dist/components/CommandPalette.es.js +12 -12
  115. package/dist/components/CommandPalette.es.js.map +1 -1
  116. package/dist/components/Comment.cjs.js +6 -7
  117. package/dist/components/Comment.cjs.js.map +1 -1
  118. package/dist/components/Comment.es.js +5 -6
  119. package/dist/components/Comment.es.js.map +1 -1
  120. package/dist/components/Composer.cjs.js +6 -6
  121. package/dist/components/Composer.cjs.js.map +1 -1
  122. package/dist/components/Composer.es.js +6 -6
  123. package/dist/components/Composer.es.js.map +1 -1
  124. package/dist/components/ContextMenu.cjs.js +1 -6
  125. package/dist/components/ContextMenu.cjs.js.map +1 -1
  126. package/dist/components/ContextMenu.es.js +1 -6
  127. package/dist/components/ContextMenu.es.js.map +1 -1
  128. package/dist/components/CopyButton.cjs.js +1 -1
  129. package/dist/components/CopyButton.es.js +1 -1
  130. package/dist/components/DataCodeSection.cjs.js +1 -1
  131. package/dist/components/DataCodeSection.es.js +1 -1
  132. package/dist/components/DataDetailsPanel.cjs.js +10 -11
  133. package/dist/components/DataDetailsPanel.cjs.js.map +1 -1
  134. package/dist/components/DataDetailsPanel.es.js +10 -11
  135. package/dist/components/DataDetailsPanel.es.js.map +1 -1
  136. package/dist/components/DataFilter.cjs.js +2 -2
  137. package/dist/components/DataFilter.es.js +2 -2
  138. package/dist/components/DataKeysAndValues.cjs.js +1 -1
  139. package/dist/components/DataKeysAndValues.es.js +1 -1
  140. package/dist/components/DataList.cjs.js +8 -8
  141. package/dist/components/DataList.cjs.js.map +1 -1
  142. package/dist/components/DataList.es.js +8 -8
  143. package/dist/components/DataList.es.js.map +1 -1
  144. package/dist/components/DataPanel.cjs.js +1 -1
  145. package/dist/components/DataPanel.es.js +1 -1
  146. package/dist/components/DateRangeTimeline.cjs.js +6 -6
  147. package/dist/components/DateRangeTimeline.cjs.js.map +1 -1
  148. package/dist/components/DateRangeTimeline.es.js +6 -6
  149. package/dist/components/DateRangeTimeline.es.js.map +1 -1
  150. package/dist/components/DateTimePicker.cjs.js +4 -4
  151. package/dist/components/DateTimePicker.cjs.js.map +1 -1
  152. package/dist/components/DateTimePicker.es.js +4 -4
  153. package/dist/components/DateTimePicker.es.js.map +1 -1
  154. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  155. package/dist/components/DateTimeRangePicker.es.js +1 -1
  156. package/dist/components/Dialog.cjs.js +2 -2
  157. package/dist/components/Dialog.es.js +3 -3
  158. package/dist/components/Drawer.cjs.js +1 -1
  159. package/dist/components/Drawer.es.js +1 -1
  160. package/dist/components/DropdownMenu.cjs.js +1 -1
  161. package/dist/components/DropdownMenu.es.js +1 -1
  162. package/dist/components/EmptyState.cjs.js +1 -1
  163. package/dist/components/EmptyState.es.js +1 -1
  164. package/dist/components/EntityHeader.cjs.js +1 -1
  165. package/dist/components/EntityHeader.cjs.js.map +1 -1
  166. package/dist/components/EntityHeader.es.js +1 -1
  167. package/dist/components/EntityHeader.es.js.map +1 -1
  168. package/dist/components/EnvironmentVariablesEditor.cjs.js +15 -16
  169. package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
  170. package/dist/components/EnvironmentVariablesEditor.es.js +9 -10
  171. package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
  172. package/dist/components/ErrorBoundary.cjs.js +3 -3
  173. package/dist/components/ErrorBoundary.cjs.js.map +1 -1
  174. package/dist/components/ErrorBoundary.es.js +3 -3
  175. package/dist/components/ErrorBoundary.es.js.map +1 -1
  176. package/dist/components/ErrorState.cjs.js +1 -1
  177. package/dist/components/ErrorState.es.js +1 -1
  178. package/dist/components/FilterBar.cjs.js +495 -43
  179. package/dist/components/FilterBar.cjs.js.map +1 -1
  180. package/dist/components/FilterBar.es.js +495 -47
  181. package/dist/components/FilterBar.es.js.map +1 -1
  182. package/dist/components/FormFieldBlocks.cjs.js +11 -12
  183. package/dist/components/FormFieldBlocks.cjs.js.map +1 -1
  184. package/dist/components/FormFieldBlocks.es.js +4 -5
  185. package/dist/components/FormFieldBlocks.es.js.map +1 -1
  186. package/dist/components/Header.cjs.js +6 -31
  187. package/dist/components/Header.cjs.js.map +1 -1
  188. package/dist/components/Header.es.js +1 -30
  189. package/dist/components/Header.es.js.map +1 -1
  190. package/dist/components/HorizontalBars.cjs.js +1 -1
  191. package/dist/components/HorizontalBars.es.js +1 -1
  192. package/dist/components/HoverCard.cjs.js +1 -1
  193. package/dist/components/HoverCard.es.js +1 -1
  194. package/dist/components/InputGroup.cjs.js +1 -1
  195. package/dist/components/InputGroup.es.js +1 -1
  196. package/dist/components/IntegrationDialog.cjs.js +6 -6
  197. package/dist/components/IntegrationDialog.cjs.js.map +1 -1
  198. package/dist/components/IntegrationDialog.es.js +6 -6
  199. package/dist/components/IntegrationDialog.es.js.map +1 -1
  200. package/dist/components/ItemList.cjs.js +4 -4
  201. package/dist/components/ItemList.cjs.js.map +1 -1
  202. package/dist/components/ItemList.es.js +4 -4
  203. package/dist/components/ItemList.es.js.map +1 -1
  204. package/dist/components/JSONSchemaForm.cjs.js +3 -3
  205. package/dist/components/JSONSchemaForm.es.js +3 -3
  206. package/dist/components/Kbd.cjs.js +1 -1
  207. package/dist/components/Kbd.es.js +1 -1
  208. package/dist/components/KeyValueList.cjs.js +1 -1
  209. package/dist/components/KeyValueList.es.js +1 -1
  210. package/dist/components/ListSearch.cjs.js +1 -1
  211. package/dist/components/ListSearch.es.js +1 -1
  212. package/dist/components/LogsDataList.cjs.js +4 -2
  213. package/dist/components/LogsDataList.cjs.js.map +1 -1
  214. package/dist/components/LogsDataList.es.js +4 -2
  215. package/dist/components/LogsDataList.es.js.map +1 -1
  216. package/dist/components/MainHeader.cjs.js +3 -3
  217. package/dist/components/MainHeader.cjs.js.map +1 -1
  218. package/dist/components/MainHeader.es.js +3 -3
  219. package/dist/components/MainHeader.es.js.map +1 -1
  220. package/dist/components/MainSidebar.cjs.js +11 -125
  221. package/dist/components/MainSidebar.cjs.js.map +1 -1
  222. package/dist/components/MainSidebar.es.js +1 -120
  223. package/dist/components/MainSidebar.es.js.map +1 -1
  224. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  225. package/dist/components/MarkdownRenderer.es.js +1 -1
  226. package/dist/components/Message.cjs.js +2 -2
  227. package/dist/components/Message.es.js +3 -3
  228. package/dist/components/MetricsCard.cjs.js +1 -1
  229. package/dist/components/MetricsCard.es.js +1 -1
  230. package/dist/components/MetricsKpiCard.cjs.js +1 -1
  231. package/dist/components/MetricsKpiCard.es.js +1 -1
  232. package/dist/components/MetricsLineChart.cjs.js +1 -1
  233. package/dist/components/MetricsLineChart.es.js +1 -1
  234. package/dist/components/Notice.cjs.js +1 -1
  235. package/dist/components/Notice.es.js +1 -1
  236. package/dist/components/PageHeader.cjs.js +1 -1
  237. package/dist/components/PageHeader.es.js +1 -1
  238. package/dist/components/PageLayout.cjs.js +30 -8
  239. package/dist/components/PageLayout.cjs.js.map +1 -1
  240. package/dist/components/PageLayout.es.js +32 -3
  241. package/dist/components/PageLayout.es.js.map +1 -1
  242. package/dist/components/PendingIndicator.cjs.js +1 -1
  243. package/dist/components/PendingIndicator.cjs.js.map +1 -1
  244. package/dist/components/PendingIndicator.es.js +1 -1
  245. package/dist/components/PendingIndicator.es.js.map +1 -1
  246. package/dist/components/PermissionDenied.cjs.js +1 -1
  247. package/dist/components/PermissionDenied.es.js +1 -1
  248. package/dist/components/PrevNextNav.cjs.js +1 -1
  249. package/dist/components/PrevNextNav.es.js +1 -1
  250. package/dist/components/PropertyFilter.cjs.js +18 -19
  251. package/dist/components/PropertyFilter.cjs.js.map +1 -1
  252. package/dist/components/PropertyFilter.es.js +21 -22
  253. package/dist/components/PropertyFilter.es.js.map +1 -1
  254. package/dist/components/RadioGroup.cjs.js +3 -56
  255. package/dist/components/RadioGroup.cjs.js.map +1 -1
  256. package/dist/components/RadioGroup.es.js +1 -39
  257. package/dist/components/RadioGroup.es.js.map +1 -1
  258. package/dist/components/RuleBuilder.cjs.js +10 -10
  259. package/dist/components/RuleBuilder.cjs.js.map +1 -1
  260. package/dist/components/RuleBuilder.es.js +10 -10
  261. package/dist/components/RuleBuilder.es.js.map +1 -1
  262. package/dist/components/SankeyChart.cjs.js +1 -1
  263. package/dist/components/SankeyChart.es.js +1 -1
  264. package/dist/components/ScatterPlotChart.cjs.js +2 -2
  265. package/dist/components/ScatterPlotChart.cjs.js.map +1 -1
  266. package/dist/components/ScatterPlotChart.es.js +2 -2
  267. package/dist/components/ScatterPlotChart.es.js.map +1 -1
  268. package/dist/components/ScrollArea.cjs.js +1 -1
  269. package/dist/components/ScrollArea.es.js +1 -1
  270. package/dist/components/Select.cjs.js +1 -1
  271. package/dist/components/Select.es.js +1 -1
  272. package/dist/components/SessionExpired.cjs.js +1 -1
  273. package/dist/components/SessionExpired.es.js +1 -1
  274. package/dist/components/SettingsLayout.cjs.js +1 -1
  275. package/dist/components/SettingsLayout.es.js +1 -1
  276. package/dist/components/SideDialog.cjs.js +17 -10
  277. package/dist/components/SideDialog.cjs.js.map +1 -1
  278. package/dist/components/SideDialog.es.js +17 -10
  279. package/dist/components/SideDialog.es.js.map +1 -1
  280. package/dist/components/Spinner.cjs.js +1 -1
  281. package/dist/components/Spinner.es.js +1 -1
  282. package/dist/components/StatusIndicators.cjs.js +3 -3
  283. package/dist/components/StatusIndicators.cjs.js.map +1 -1
  284. package/dist/components/StatusIndicators.es.js +3 -3
  285. package/dist/components/StatusIndicators.es.js.map +1 -1
  286. package/dist/components/Steps.cjs.js +3 -3
  287. package/dist/components/Steps.cjs.js.map +1 -1
  288. package/dist/components/Steps.es.js +3 -3
  289. package/dist/components/Steps.es.js.map +1 -1
  290. package/dist/components/Tabs.cjs.js +3 -3
  291. package/dist/components/Tabs.es.js +3 -3
  292. package/dist/components/ThreadList.cjs.js +2 -2
  293. package/dist/components/ThreadList.cjs.js.map +1 -1
  294. package/dist/components/ThreadList.es.js +2 -2
  295. package/dist/components/ThreadList.es.js.map +1 -1
  296. package/dist/components/ThreadRail.cjs.js +1 -1
  297. package/dist/components/ThreadRail.es.js +1 -1
  298. package/dist/components/TokenBudget.cjs.js +1 -1
  299. package/dist/components/TokenBudget.cjs.js.map +1 -1
  300. package/dist/components/TokenBudget.es.js +1 -1
  301. package/dist/components/TokenBudget.es.js.map +1 -1
  302. package/dist/components/Tree.cjs.js +3 -3
  303. package/dist/components/Tree.cjs.js.map +1 -1
  304. package/dist/components/Tree.es.js +3 -3
  305. package/dist/components/Tree.es.js.map +1 -1
  306. package/dist/components/Truncate.cjs.js +1 -1
  307. package/dist/components/Truncate.es.js +1 -1
  308. package/dist/components/Workflow.cjs.js +36 -36
  309. package/dist/components/Workflow.cjs.js.map +1 -1
  310. package/dist/components/Workflow.es.js +36 -36
  311. package/dist/components/Workflow.es.js.map +1 -1
  312. package/dist/components/ai/ask-user.cjs.js +4 -3
  313. package/dist/components/ai/ask-user.cjs.js.map +1 -1
  314. package/dist/components/ai/ask-user.es.js +1 -1
  315. package/dist/components/ai/chat-event.cjs.js +6 -6
  316. package/dist/components/ai/chat-event.cjs.js.map +1 -1
  317. package/dist/components/ai/chat-event.es.js +7 -7
  318. package/dist/components/ai/chat-event.es.js.map +1 -1
  319. package/dist/components/ai/plan.cjs.js +2 -2
  320. package/dist/components/ai/plan.es.js +2 -2
  321. package/dist/components/ai/task-list.cjs.js +7 -7
  322. package/dist/components/ai/task-list.cjs.js.map +1 -1
  323. package/dist/components/ai/task-list.es.js +7 -7
  324. package/dist/components/ai/task-list.es.js.map +1 -1
  325. package/dist/components/ai/tool-approval.cjs.js +1 -1
  326. package/dist/components/ai/tool-approval.es.js +1 -1
  327. package/dist/components/ai/tool-call.cjs.js +8 -8
  328. package/dist/components/ai/tool-call.cjs.js.map +1 -1
  329. package/dist/components/ai/tool-call.es.js +9 -9
  330. package/dist/components/ai/tool-call.es.js.map +1 -1
  331. package/dist/components/fluid-hover-highlight.cjs.js +13 -35
  332. package/dist/components/fluid-hover-highlight.cjs.js.map +1 -1
  333. package/dist/components/fluid-hover-highlight.es.js +14 -33
  334. package/dist/components/fluid-hover-highlight.es.js.map +1 -1
  335. package/dist/{composer-BUoRnMDd.cjs → composer-B_Err196.cjs} +6 -6
  336. package/dist/{composer-BUoRnMDd.cjs.map → composer-B_Err196.cjs.map} +1 -1
  337. package/dist/{composer-CEL1glw7.js → composer-DJGAoBcn.js} +6 -6
  338. package/dist/{composer-CEL1glw7.js.map → composer-DJGAoBcn.js.map} +1 -1
  339. package/dist/{copy-button-BbDBpBMl.cjs → copy-button-C5dMlWsW.cjs} +2 -2
  340. package/dist/{copy-button-BbDBpBMl.cjs.map → copy-button-C5dMlWsW.cjs.map} +1 -1
  341. package/dist/{copy-button-2cwdZ3dW.js → copy-button-C6RswD_D.js} +2 -2
  342. package/dist/{copy-button-2cwdZ3dW.js.map → copy-button-C6RswD_D.js.map} +1 -1
  343. package/dist/{data-code-section-qujvEc6j.cjs → data-code-section-B-y2WPBl.cjs} +17 -19
  344. package/dist/data-code-section-B-y2WPBl.cjs.map +1 -0
  345. package/dist/{data-code-section-DKz9Okaz.js → data-code-section-DcocgDAN.js} +17 -19
  346. package/dist/data-code-section-DcocgDAN.js.map +1 -0
  347. package/dist/{data-keys-and-values-4pYpSbqS.cjs → data-keys-and-values-BduKvvC5.cjs} +2 -2
  348. package/dist/{data-keys-and-values-4pYpSbqS.cjs.map → data-keys-and-values-BduKvvC5.cjs.map} +1 -1
  349. package/dist/{data-keys-and-values-j0NVKPOl.js → data-keys-and-values-DhC4U4Yl.js} +2 -2
  350. package/dist/{data-keys-and-values-j0NVKPOl.js.map → data-keys-and-values-DhC4U4Yl.js.map} +1 -1
  351. package/dist/{data-list-DnSdaRES.js → data-list-gN4SP7a8.js} +5 -5
  352. package/dist/{data-list-DnSdaRES.js.map → data-list-gN4SP7a8.js.map} +1 -1
  353. package/dist/{data-list-skeleton-ADXw-opu.cjs → data-list-skeleton-DYG2LLri.cjs} +2 -2
  354. package/dist/{data-list-skeleton-ADXw-opu.cjs.map → data-list-skeleton-DYG2LLri.cjs.map} +1 -1
  355. package/dist/{data-list-skeleton-D7-glFuk.js → data-list-skeleton-PXHovGLv.js} +2 -2
  356. package/dist/{data-list-skeleton-D7-glFuk.js.map → data-list-skeleton-PXHovGLv.js.map} +1 -1
  357. package/dist/{data-list-spacer-DRHNUeeP.js → data-list-spacer-D-AQzTYw.js} +3 -3
  358. package/dist/{data-list-spacer-DRHNUeeP.js.map → data-list-spacer-D-AQzTYw.js.map} +1 -1
  359. package/dist/{data-list-spacer-EWo65MrK.cjs → data-list-spacer-MpuBsXjL.cjs} +3 -3
  360. package/dist/{data-list-spacer-EWo65MrK.cjs.map → data-list-spacer-MpuBsXjL.cjs.map} +1 -1
  361. package/dist/{data-list-top-DLwt_Sv-.js → data-list-top-BTeM7hI4.js} +5 -5
  362. package/dist/{data-list-top-DLwt_Sv-.js.map → data-list-top-BTeM7hI4.js.map} +1 -1
  363. package/dist/{data-list-top-RK_yX6z8.cjs → data-list-top-DDux1Eu4.cjs} +5 -5
  364. package/dist/{data-list-top-RK_yX6z8.cjs.map → data-list-top-DDux1Eu4.cjs.map} +1 -1
  365. package/dist/{data-list-CypPKOQ_.cjs → data-list-yJm-3f2w.cjs} +5 -5
  366. package/dist/{data-list-CypPKOQ_.cjs.map → data-list-yJm-3f2w.cjs.map} +1 -1
  367. package/dist/{data-panel-CWZJKBeW.cjs → data-panel-CM3N_4M7.cjs} +9 -9
  368. package/dist/{data-panel-CWZJKBeW.cjs.map → data-panel-CM3N_4M7.cjs.map} +1 -1
  369. package/dist/{data-panel-CWjgS1Gh.js → data-panel-D3UfzCoE.js} +9 -9
  370. package/dist/{data-panel-CWjgS1Gh.js.map → data-panel-D3UfzCoE.js.map} +1 -1
  371. package/dist/{date-time-range-picker-C6hjZswK.cjs → date-time-range-picker-2Pkg-FoU.cjs} +6 -7
  372. package/dist/{date-time-range-picker-C6hjZswK.cjs.map → date-time-range-picker-2Pkg-FoU.cjs.map} +1 -1
  373. package/dist/{date-time-range-picker-BcjLbkGu.js → date-time-range-picker-DHg-fuV3.js} +5 -6
  374. package/dist/{date-time-range-picker-BcjLbkGu.js.map → date-time-range-picker-DHg-fuV3.js.map} +1 -1
  375. package/dist/{dialog-Dm33cZqt.cjs → dialog-Cyj59QsZ.cjs} +3 -3
  376. package/dist/{dialog-Dm33cZqt.cjs.map → dialog-Cyj59QsZ.cjs.map} +1 -1
  377. package/dist/{dialog-DRpMek34.js → dialog-D8fuBETk.js} +3 -3
  378. package/dist/{dialog-DRpMek34.js.map → dialog-D8fuBETk.js.map} +1 -1
  379. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -2
  380. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -2
  381. package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +1 -1
  382. package/dist/domains/chat/attachments/composer-attachment-list.es.js +1 -1
  383. package/dist/domains/chat/attachments/composer-attachment.cjs.js +1 -1
  384. package/dist/domains/chat/attachments/composer-attachment.es.js +1 -1
  385. package/dist/domains/chat/components/badge-wrapper.cjs.js +2 -2
  386. package/dist/domains/chat/components/badge-wrapper.cjs.js.map +1 -1
  387. package/dist/domains/chat/components/badge-wrapper.es.js +2 -2
  388. package/dist/domains/chat/components/badge-wrapper.es.js.map +1 -1
  389. package/dist/domains/chat/components/loading-badge.cjs.js +1 -1
  390. package/dist/domains/chat/components/loading-badge.es.js +1 -1
  391. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +4 -4
  392. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js.map +1 -1
  393. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +4 -4
  394. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js.map +1 -1
  395. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  396. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  397. package/dist/domains/chat/messages/reasoning-streaming-line.cjs.js +1 -1
  398. package/dist/domains/chat/messages/reasoning-streaming-line.cjs.js.map +1 -1
  399. package/dist/domains/chat/messages/reasoning-streaming-line.es.js +1 -1
  400. package/dist/domains/chat/messages/reasoning-streaming-line.es.js.map +1 -1
  401. package/dist/domains/chat/messages/reasoning.cjs.js +4 -4
  402. package/dist/domains/chat/messages/reasoning.cjs.js.map +1 -1
  403. package/dist/domains/chat/messages/reasoning.es.js +4 -4
  404. package/dist/domains/chat/messages/reasoning.es.js.map +1 -1
  405. package/dist/domains/chat/messages/renderers/message-text.cjs.js +2 -2
  406. package/dist/domains/chat/messages/renderers/message-text.es.js +2 -2
  407. package/dist/domains/chat/messages/renderers/status-renderers.cjs.js +1 -1
  408. package/dist/domains/chat/messages/renderers/status-renderers.es.js +1 -1
  409. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  410. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  411. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +6 -6
  412. package/dist/domains/chat/messages/system-reminder-badge.cjs.js.map +1 -1
  413. package/dist/domains/chat/messages/system-reminder-badge.es.js +6 -6
  414. package/dist/domains/chat/messages/system-reminder-badge.es.js.map +1 -1
  415. package/dist/domains/chat/messages/tripwire-notice.cjs.js +3 -3
  416. package/dist/domains/chat/messages/tripwire-notice.cjs.js.map +1 -1
  417. package/dist/domains/chat/messages/tripwire-notice.es.js +3 -3
  418. package/dist/domains/chat/messages/tripwire-notice.es.js.map +1 -1
  419. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +2 -2
  420. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js.map +1 -1
  421. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +2 -2
  422. package/dist/domains/chat/tools/badges/ask-user-badge.es.js.map +1 -1
  423. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +5 -5
  424. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js.map +1 -1
  425. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +5 -5
  426. package/dist/domains/chat/tools/badges/code-mode-badge.es.js.map +1 -1
  427. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +29 -29
  428. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js.map +1 -1
  429. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +29 -29
  430. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js.map +1 -1
  431. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +11 -11
  432. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js.map +1 -1
  433. package/dist/domains/chat/tools/badges/observation-renderer.es.js +11 -11
  434. package/dist/domains/chat/tools/badges/observation-renderer.es.js.map +1 -1
  435. package/dist/domains/chat/tools/badges/tool-approval-buttons.cjs.js +1 -1
  436. package/dist/domains/chat/tools/badges/tool-approval-buttons.es.js +1 -1
  437. package/dist/domains/logs/components/log-details-view.cjs.js +10 -12
  438. package/dist/domains/logs/components/log-details-view.cjs.js.map +1 -1
  439. package/dist/domains/logs/components/log-details-view.es.js +10 -12
  440. package/dist/domains/logs/components/log-details-view.es.js.map +1 -1
  441. package/dist/domains/logs/components/logs-error-content.cjs.js +4 -7
  442. package/dist/domains/logs/components/logs-error-content.cjs.js.map +1 -1
  443. package/dist/domains/logs/components/logs-error-content.es.js +4 -7
  444. package/dist/domains/logs/components/logs-error-content.es.js.map +1 -1
  445. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
  446. package/dist/domains/logs/components/logs-list-view.es.js +2 -2
  447. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  448. package/dist/domains/logs/components/logs-toolbar.cjs.js.map +1 -1
  449. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  450. package/dist/domains/logs/components/logs-toolbar.es.js.map +1 -1
  451. package/dist/domains/logs/components/no-logs-info.cjs.js +6 -6
  452. package/dist/domains/logs/components/no-logs-info.cjs.js.map +1 -1
  453. package/dist/domains/logs/components/no-logs-info.es.js +7 -7
  454. package/dist/domains/logs/components/no-logs-info.es.js.map +1 -1
  455. package/dist/domains/memory/components/flame-graph.cjs.js +19 -19
  456. package/dist/domains/memory/components/flame-graph.cjs.js.map +1 -1
  457. package/dist/domains/memory/components/flame-graph.es.js +19 -19
  458. package/dist/domains/memory/components/flame-graph.es.js.map +1 -1
  459. package/dist/domains/memory/components/memory-studio-panel.cjs.js +4 -4
  460. package/dist/domains/memory/components/memory-studio-panel.cjs.js.map +1 -1
  461. package/dist/domains/memory/components/memory-studio-panel.es.js +4 -4
  462. package/dist/domains/memory/components/memory-studio-panel.es.js.map +1 -1
  463. package/dist/domains/memory/components/observation-detail-view.cjs.js +17 -18
  464. package/dist/domains/memory/components/observation-detail-view.cjs.js.map +1 -1
  465. package/dist/domains/memory/components/observation-detail-view.es.js +17 -18
  466. package/dist/domains/memory/components/observation-detail-view.es.js.map +1 -1
  467. package/dist/domains/memory/components/thread-context-progress.cjs.js +3 -3
  468. package/dist/domains/memory/components/thread-context-progress.cjs.js.map +1 -1
  469. package/dist/domains/memory/components/thread-context-progress.es.js +3 -3
  470. package/dist/domains/memory/components/thread-context-progress.es.js.map +1 -1
  471. package/dist/domains/metrics/components/bar-list.cjs.js +9 -9
  472. package/dist/domains/metrics/components/bar-list.cjs.js.map +1 -1
  473. package/dist/domains/metrics/components/bar-list.es.js +9 -9
  474. package/dist/domains/metrics/components/bar-list.es.js.map +1 -1
  475. package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
  476. package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
  477. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  478. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  479. package/dist/domains/metrics/components/kpi-card-view.cjs.js +1 -1
  480. package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
  481. package/dist/domains/metrics/components/latency-card-view.cjs.js +5 -5
  482. package/dist/domains/metrics/components/latency-card-view.es.js +5 -5
  483. package/dist/domains/metrics/components/memory-card-view.cjs.js +5 -5
  484. package/dist/domains/metrics/components/memory-card-view.es.js +5 -5
  485. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +2 -2
  486. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +2 -2
  487. package/dist/domains/metrics/components/scores-card-view.cjs.js +6 -6
  488. package/dist/domains/metrics/components/scores-card-view.es.js +6 -6
  489. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +5 -5
  490. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +5 -5
  491. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +5 -5
  492. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +5 -5
  493. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +5 -5
  494. package/dist/domains/metrics/components/traces-volume-card-view.es.js +5 -5
  495. package/dist/domains/traces/components/no-traces-info.cjs.js +2 -3
  496. package/dist/domains/traces/components/no-traces-info.cjs.js.map +1 -1
  497. package/dist/domains/traces/components/no-traces-info.es.js +2 -3
  498. package/dist/domains/traces/components/no-traces-info.es.js.map +1 -1
  499. package/dist/domains/traces/components/span-data-panel-view.cjs.js +7 -7
  500. package/dist/domains/traces/components/span-data-panel-view.es.js +7 -7
  501. package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
  502. package/dist/domains/traces/components/span-details-view.es.js +1 -1
  503. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +3 -3
  504. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +3 -3
  505. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +3 -3
  506. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +3 -3
  507. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +4 -4
  508. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +4 -4
  509. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
  510. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  511. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +3 -3
  512. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +3 -3
  513. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +4 -6
  514. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js.map +1 -1
  515. package/dist/domains/traces/components/span-payload/span-payload-section.es.js +4 -6
  516. package/dist/domains/traces/components/span-payload/span-payload-section.es.js.map +1 -1
  517. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
  518. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
  519. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  520. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  521. package/dist/domains/traces/components/span-timeline-row.cjs.js +4 -4
  522. package/dist/domains/traces/components/span-timeline-row.cjs.js.map +1 -1
  523. package/dist/domains/traces/components/span-timeline-row.es.js +4 -4
  524. package/dist/domains/traces/components/span-timeline-row.es.js.map +1 -1
  525. package/dist/domains/traces/components/span-timing-hover-card.cjs.js +2 -2
  526. package/dist/domains/traces/components/span-timing-hover-card.es.js +2 -2
  527. package/dist/domains/traces/components/span-token-usage.cjs.js +5 -5
  528. package/dist/domains/traces/components/span-token-usage.cjs.js.map +1 -1
  529. package/dist/domains/traces/components/span-token-usage.es.js +5 -5
  530. package/dist/domains/traces/components/span-token-usage.es.js.map +1 -1
  531. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +2 -2
  532. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js.map +1 -1
  533. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +2 -2
  534. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js.map +1 -1
  535. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +4 -4
  536. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +4 -4
  537. package/dist/domains/traces/components/thread-trace/thread-trace-rail.cjs.js +1 -1
  538. package/dist/domains/traces/components/thread-trace/thread-trace-rail.es.js +1 -1
  539. package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +2 -2
  540. package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js.map +1 -1
  541. package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +2 -2
  542. package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js.map +1 -1
  543. package/dist/domains/traces/components/timeline-name-col.cjs.js +2 -2
  544. package/dist/domains/traces/components/timeline-name-col.cjs.js.map +1 -1
  545. package/dist/domains/traces/components/timeline-name-col.es.js +2 -2
  546. package/dist/domains/traces/components/timeline-name-col.es.js.map +1 -1
  547. package/dist/domains/traces/components/timeline-structure-sign.cjs.js +1 -1
  548. package/dist/domains/traces/components/timeline-structure-sign.cjs.js.map +1 -1
  549. package/dist/domains/traces/components/timeline-structure-sign.es.js +1 -1
  550. package/dist/domains/traces/components/timeline-structure-sign.es.js.map +1 -1
  551. package/dist/domains/traces/components/timeline-timing-col.cjs.js +2 -2
  552. package/dist/domains/traces/components/timeline-timing-col.cjs.js.map +1 -1
  553. package/dist/domains/traces/components/timeline-timing-col.es.js +2 -2
  554. package/dist/domains/traces/components/timeline-timing-col.es.js.map +1 -1
  555. package/dist/domains/traces/components/trace-columns-menu.cjs.js +8 -8
  556. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  557. package/dist/domains/traces/components/trace-columns-menu.es.js +6 -6
  558. package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
  559. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +11 -13
  560. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  561. package/dist/domains/traces/components/trace-data-panel-view.es.js +11 -13
  562. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  563. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  564. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  565. package/dist/domains/traces/components/trace-keys-and-values.cjs.js +1 -1
  566. package/dist/domains/traces/components/trace-keys-and-values.es.js +1 -1
  567. package/dist/domains/traces/components/trace-span-timeline.cjs.js +1 -1
  568. package/dist/domains/traces/components/trace-span-timeline.cjs.js.map +1 -1
  569. package/dist/domains/traces/components/trace-span-timeline.es.js +1 -1
  570. package/dist/domains/traces/components/trace-span-timeline.es.js.map +1 -1
  571. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  572. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  573. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
  574. package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
  575. package/dist/domains/traces/components/traces-error-content.cjs.js +3 -3
  576. package/dist/domains/traces/components/traces-error-content.cjs.js.map +1 -1
  577. package/dist/domains/traces/components/traces-error-content.es.js +3 -3
  578. package/dist/domains/traces/components/traces-error-content.es.js.map +1 -1
  579. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +2 -2
  580. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +2 -2
  581. package/dist/domains/traces/components/traces-list-view.cjs.js +5 -5
  582. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  583. package/dist/domains/traces/components/traces-list-view.es.js +5 -5
  584. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  585. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +3 -1
  586. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  587. package/dist/domains/traces/components/traces-page-skeleton.es.js +3 -1
  588. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  589. package/dist/domains/traces/hooks/use-trace-url-state.cjs.js +4 -2
  590. package/dist/domains/traces/hooks/use-trace-url-state.cjs.js.map +1 -1
  591. package/dist/domains/traces/hooks/use-trace-url-state.es.js +5 -3
  592. package/dist/domains/traces/hooks/use-trace-url-state.es.js.map +1 -1
  593. package/dist/domains/traces/trace-filters.cjs.js +92 -11
  594. package/dist/domains/traces/trace-filters.cjs.js.map +1 -1
  595. package/dist/domains/traces/trace-filters.es.js +87 -13
  596. package/dist/domains/traces/trace-filters.es.js.map +1 -1
  597. package/dist/domains/traces/trace-query-filters.cjs.js +76 -45
  598. package/dist/domains/traces/trace-query-filters.cjs.js.map +1 -1
  599. package/dist/domains/traces/trace-query-filters.es.js +76 -46
  600. package/dist/domains/traces/trace-query-filters.es.js.map +1 -1
  601. package/dist/domains/traces.cjs.js +7 -0
  602. package/dist/domains/traces.cjs.js.map +1 -1
  603. package/dist/domains/traces.es.js +2 -2
  604. package/dist/{drawer-BL5shtHH.cjs → drawer-9eoZbmRK.cjs} +5 -5
  605. package/dist/{drawer-BL5shtHH.cjs.map → drawer-9eoZbmRK.cjs.map} +1 -1
  606. package/dist/{drawer-Bv2DRY8E.js → drawer-DnfOugYZ.js} +5 -5
  607. package/dist/{drawer-Bv2DRY8E.js.map → drawer-DnfOugYZ.js.map} +1 -1
  608. package/dist/{dropdown-menu-DL0MzjEb.js → dropdown-menu-DpEn6HwK.js} +2 -7
  609. package/dist/dropdown-menu-DpEn6HwK.js.map +1 -0
  610. package/dist/{dropdown-menu-DNRCA4Gj.cjs → dropdown-menu-j2y37TL5.cjs} +2 -7
  611. package/dist/dropdown-menu-j2y37TL5.cjs.map +1 -0
  612. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +4 -4
  613. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js.map +1 -1
  614. package/dist/ee/signals/components/entity-index-compact-grid.es.js +4 -4
  615. package/dist/ee/signals/components/entity-index-compact-grid.es.js.map +1 -1
  616. package/dist/ee/signals/components/entity-index-list.cjs.js +3 -1
  617. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  618. package/dist/ee/signals/components/entity-index-list.es.js +3 -1
  619. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  620. package/dist/ee/signals/components/signals-empty-state.cjs.js +34 -34
  621. package/dist/ee/signals/components/signals-empty-state.cjs.js.map +1 -1
  622. package/dist/ee/signals/components/signals-empty-state.es.js +34 -34
  623. package/dist/ee/signals/components/signals-empty-state.es.js.map +1 -1
  624. package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js +5 -7
  625. package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js.map +1 -1
  626. package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js +5 -7
  627. package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js.map +1 -1
  628. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +15 -17
  629. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  630. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +16 -18
  631. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  632. package/dist/ee/signals/examples-pager.cjs.js +2 -2
  633. package/dist/ee/signals/examples-pager.cjs.js.map +1 -1
  634. package/dist/ee/signals/examples-pager.es.js +2 -2
  635. package/dist/ee/signals/examples-pager.es.js.map +1 -1
  636. package/dist/ee/signals/flow-card.cjs.js +6 -6
  637. package/dist/ee/signals/flow-card.cjs.js.map +1 -1
  638. package/dist/ee/signals/flow-card.es.js +6 -6
  639. package/dist/ee/signals/flow-card.es.js.map +1 -1
  640. package/dist/ee/signals/lifeline-row.cjs.js +4 -4
  641. package/dist/ee/signals/lifeline-row.cjs.js.map +1 -1
  642. package/dist/ee/signals/lifeline-row.es.js +4 -4
  643. package/dist/ee/signals/lifeline-row.es.js.map +1 -1
  644. package/dist/ee/signals/noise-detail-panel.cjs.js +12 -12
  645. package/dist/ee/signals/noise-detail-panel.cjs.js.map +1 -1
  646. package/dist/ee/signals/noise-detail-panel.es.js +12 -12
  647. package/dist/ee/signals/noise-detail-panel.es.js.map +1 -1
  648. package/dist/ee/signals/sankey-signals.cjs.js +6 -6
  649. package/dist/ee/signals/sankey-signals.cjs.js.map +1 -1
  650. package/dist/ee/signals/sankey-signals.es.js +6 -6
  651. package/dist/ee/signals/sankey-signals.es.js.map +1 -1
  652. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +13 -14
  653. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js.map +1 -1
  654. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +6 -7
  655. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js.map +1 -1
  656. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +9 -9
  657. package/dist/ee/signals/settings/trace-signal-settings.cjs.js.map +1 -1
  658. package/dist/ee/signals/settings/trace-signal-settings.es.js +9 -9
  659. package/dist/ee/signals/settings/trace-signal-settings.es.js.map +1 -1
  660. package/dist/ee/signals/signal-delta-column.cjs.js +7 -7
  661. package/dist/ee/signals/signal-delta-column.cjs.js.map +1 -1
  662. package/dist/ee/signals/signal-delta-column.es.js +7 -7
  663. package/dist/ee/signals/signal-delta-column.es.js.map +1 -1
  664. package/dist/ee/signals/signal-lifelines.cjs.js +2 -2
  665. package/dist/ee/signals/signal-lifelines.cjs.js.map +1 -1
  666. package/dist/ee/signals/signal-lifelines.es.js +2 -2
  667. package/dist/ee/signals/signal-lifelines.es.js.map +1 -1
  668. package/dist/ee/signals/signals-error-state.cjs.js +3 -3
  669. package/dist/ee/signals/signals-error-state.cjs.js.map +1 -1
  670. package/dist/ee/signals/signals-error-state.es.js +3 -3
  671. package/dist/ee/signals/signals-error-state.es.js.map +1 -1
  672. package/dist/ee/signals/signals-loading-skeleton.cjs.js +1 -1
  673. package/dist/ee/signals/signals-loading-skeleton.cjs.js.map +1 -1
  674. package/dist/ee/signals/signals-loading-skeleton.es.js +1 -1
  675. package/dist/ee/signals/signals-loading-skeleton.es.js.map +1 -1
  676. package/dist/ee/signals/snapshot-timeline.cjs.js +5 -5
  677. package/dist/ee/signals/snapshot-timeline.cjs.js.map +1 -1
  678. package/dist/ee/signals/snapshot-timeline.es.js +5 -5
  679. package/dist/ee/signals/snapshot-timeline.es.js.map +1 -1
  680. package/dist/ee/signals/sortable-signal-headers.cjs.js +1 -1
  681. package/dist/ee/signals/sortable-signal-headers.cjs.js.map +1 -1
  682. package/dist/ee/signals/sortable-signal-headers.es.js +1 -1
  683. package/dist/ee/signals/sortable-signal-headers.es.js.map +1 -1
  684. package/dist/ee/signals/theme-compare-sparkline.cjs.js +1 -1
  685. package/dist/ee/signals/theme-compare-sparkline.cjs.js.map +1 -1
  686. package/dist/ee/signals/theme-compare-sparkline.es.js +1 -1
  687. package/dist/ee/signals/theme-compare-sparkline.es.js.map +1 -1
  688. package/dist/ee/signals/theme-compare.cjs.js +5 -5
  689. package/dist/ee/signals/theme-compare.cjs.js.map +1 -1
  690. package/dist/ee/signals/theme-compare.es.js +5 -5
  691. package/dist/ee/signals/theme-compare.es.js.map +1 -1
  692. package/dist/ee/signals/theme-detail-panel.cjs.js +18 -18
  693. package/dist/ee/signals/theme-detail-panel.cjs.js.map +1 -1
  694. package/dist/ee/signals/theme-detail-panel.es.js +18 -18
  695. package/dist/ee/signals/theme-detail-panel.es.js.map +1 -1
  696. package/dist/ee/signals/theme-filter-banner.cjs.js +2 -2
  697. package/dist/ee/signals/theme-filter-banner.cjs.js.map +1 -1
  698. package/dist/ee/signals/theme-filter-banner.es.js +2 -2
  699. package/dist/ee/signals/theme-filter-banner.es.js.map +1 -1
  700. package/dist/ee/signals/theme-lifelines.cjs.js +1 -1
  701. package/dist/ee/signals/theme-lifelines.cjs.js.map +1 -1
  702. package/dist/ee/signals/theme-lifelines.es.js +1 -1
  703. package/dist/ee/signals/theme-lifelines.es.js.map +1 -1
  704. package/dist/ee/signals/theme-trend-chart.cjs.js +1 -1
  705. package/dist/ee/signals/theme-trend-chart.cjs.js.map +1 -1
  706. package/dist/ee/signals/theme-trend-chart.es.js +1 -1
  707. package/dist/ee/signals/theme-trend-chart.es.js.map +1 -1
  708. package/dist/ee/signals/trace-insight-view.cjs.js +12 -12
  709. package/dist/ee/signals/trace-insight-view.cjs.js.map +1 -1
  710. package/dist/ee/signals/trace-insight-view.es.js +12 -12
  711. package/dist/ee/signals/trace-insight-view.es.js.map +1 -1
  712. package/dist/ee/signals/trace-intelligence-explainer.cjs.js +2 -2
  713. package/dist/ee/signals/trace-intelligence-explainer.cjs.js.map +1 -1
  714. package/dist/ee/signals/trace-intelligence-explainer.es.js +2 -2
  715. package/dist/ee/signals/trace-intelligence-explainer.es.js.map +1 -1
  716. package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
  717. package/dist/ee/signals/view-mode-tab.es.js +1 -1
  718. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +3 -3
  719. package/dist/ee/topics/components/topic-trace-summary-list.es.js +3 -3
  720. package/dist/ee/topics/components/topics-layout.cjs.js +3 -3
  721. package/dist/ee/topics/components/topics-layout.cjs.js.map +1 -1
  722. package/dist/ee/topics/components/topics-layout.es.js +3 -3
  723. package/dist/ee/topics/components/topics-layout.es.js.map +1 -1
  724. package/dist/{field-block-Dy1IaWbv.cjs → field-error-id-6EfqmQ4C.cjs} +5 -2
  725. package/dist/field-error-id-6EfqmQ4C.cjs.map +1 -0
  726. package/dist/{field-block-DWkbNcsV.js → field-error-id-DyWx33Fu.js} +5 -3
  727. package/dist/field-error-id-DyWx33Fu.js.map +1 -0
  728. package/dist/{filter-bar-chip-BxI0NgEz.cjs → filter-bar-chip-D8O9jpCW.cjs} +300 -69
  729. package/dist/filter-bar-chip-D8O9jpCW.cjs.map +1 -0
  730. package/dist/{filter-bar-chip-C-JxWUU8.js → filter-bar-chip-DMhUPTt8.js} +297 -71
  731. package/dist/filter-bar-chip-DMhUPTt8.js.map +1 -0
  732. package/dist/filter-bar-chip.css +33 -1
  733. package/dist/hooks/use-fluid-hover.cjs.js +15 -9
  734. package/dist/hooks/use-fluid-hover.cjs.js.map +1 -1
  735. package/dist/hooks/use-fluid-hover.es.js +15 -9
  736. package/dist/hooks/use-fluid-hover.es.js.map +1 -1
  737. package/dist/{horizontal-bars-nyWGmQ7g.cjs → horizontal-bars-BkVi2dEb.cjs} +7 -7
  738. package/dist/{horizontal-bars-nyWGmQ7g.cjs.map → horizontal-bars-BkVi2dEb.cjs.map} +1 -1
  739. package/dist/{horizontal-bars-CksEKcCE.js → horizontal-bars-nTOFylzc.js} +7 -7
  740. package/dist/{horizontal-bars-CksEKcCE.js.map → horizontal-bars-nTOFylzc.js.map} +1 -1
  741. package/dist/{hover-card-Ch5smNcf.js → hover-card-B1-n3amu.js} +3 -3
  742. package/dist/{hover-card-Ch5smNcf.js.map → hover-card-B1-n3amu.js.map} +1 -1
  743. package/dist/{hover-card-DdHnkGcs.cjs → hover-card-DVfZ2INZ.cjs} +3 -3
  744. package/dist/{hover-card-DdHnkGcs.cjs.map → hover-card-DVfZ2INZ.cjs.map} +1 -1
  745. package/dist/icons/Icon.cjs.js +1 -1
  746. package/dist/icons/Icon.cjs.js.map +1 -1
  747. package/dist/icons/Icon.es.js +1 -1
  748. package/dist/icons/Icon.es.js.map +1 -1
  749. package/dist/{input-group-CvWwK1Vz.cjs → input-group-2yWKRuq9.cjs} +7 -5
  750. package/dist/input-group-2yWKRuq9.cjs.map +1 -0
  751. package/dist/{input-group-BEdHivvy.js → input-group-Czviwtvr.js} +8 -6
  752. package/dist/input-group-Czviwtvr.js.map +1 -0
  753. package/dist/{kbd-CINtikLh.js → kbd-BDVTQHD_.js} +2 -2
  754. package/dist/{kbd-CINtikLh.js.map → kbd-BDVTQHD_.js.map} +1 -1
  755. package/dist/{kbd-B-Z2sNvK.cjs → kbd-BptPsKP6.cjs} +2 -2
  756. package/dist/{kbd-B-Z2sNvK.cjs.map → kbd-BptPsKP6.cjs.map} +1 -1
  757. package/dist/layout/tabbed-container.cjs.js +6 -6
  758. package/dist/layout/tabbed-container.es.js +6 -6
  759. package/dist/{list-search-BTW0Neuc.js → list-search-Jm6SLN0g.js} +2 -2
  760. package/dist/{list-search-BTW0Neuc.js.map → list-search-Jm6SLN0g.js.map} +1 -1
  761. package/dist/{list-search-vyxsZMAK.cjs → list-search-s3DRIfz6.cjs} +2 -2
  762. package/dist/{list-search-vyxsZMAK.cjs.map → list-search-s3DRIfz6.cjs.map} +1 -1
  763. package/dist/{logs-data-list-BSHJPGi6.cjs → logs-data-list-C5tjRtkQ.cjs} +5 -5
  764. package/dist/{logs-data-list-BSHJPGi6.cjs.map → logs-data-list-C5tjRtkQ.cjs.map} +1 -1
  765. package/dist/{logs-data-list-CG-UgC_x.js → logs-data-list-Cl3abARp.js} +5 -5
  766. package/dist/{logs-data-list-CG-UgC_x.js.map → logs-data-list-Cl3abARp.js.map} +1 -1
  767. package/dist/{main-sidebar-link-active-DbCvKZy2.cjs → main-sidebar-BsEmFpKN.cjs} +122 -9
  768. package/dist/main-sidebar-BsEmFpKN.cjs.map +1 -0
  769. package/dist/{main-sidebar-link-active-CmDoiX6g.js → main-sidebar-C5PU7zgc.js} +123 -11
  770. package/dist/main-sidebar-C5PU7zgc.js.map +1 -0
  771. package/dist/{markdown-renderer-D8qYAU7K.cjs → markdown-renderer-C74wABzc.cjs} +6 -7
  772. package/dist/markdown-renderer-C74wABzc.cjs.map +1 -0
  773. package/dist/{markdown-renderer-B0gTm_Ea.js → markdown-renderer-DZAcPOxC.js} +6 -7
  774. package/dist/markdown-renderer-DZAcPOxC.js.map +1 -0
  775. package/dist/{message-BrwbcLPi.js → message-Cs8NW-MR.js} +2 -2
  776. package/dist/{message-BrwbcLPi.js.map → message-Cs8NW-MR.js.map} +1 -1
  777. package/dist/{message-CszposMZ.cjs → message-D9b33Pf_.cjs} +2 -2
  778. package/dist/{message-CszposMZ.cjs.map → message-D9b33Pf_.cjs.map} +1 -1
  779. package/dist/{metrics-card-BUJxiwec.cjs → metrics-card-BdWGPlnt.cjs} +8 -8
  780. package/dist/metrics-card-BdWGPlnt.cjs.map +1 -0
  781. package/dist/{metrics-card-BlBt1WHw.js → metrics-card-C5znWn69.js} +8 -8
  782. package/dist/metrics-card-C5znWn69.js.map +1 -0
  783. package/dist/{metrics-kpi-card-CBSNmtc5.js → metrics-kpi-card-CinKYTBn.js} +4 -4
  784. package/dist/{metrics-kpi-card-CBSNmtc5.js.map → metrics-kpi-card-CinKYTBn.js.map} +1 -1
  785. package/dist/{metrics-kpi-card-CgqmNcEC.cjs → metrics-kpi-card-HU17WRTT.cjs} +4 -4
  786. package/dist/{metrics-kpi-card-CgqmNcEC.cjs.map → metrics-kpi-card-HU17WRTT.cjs.map} +1 -1
  787. package/dist/{metrics-line-chart-B_sP3eiL.cjs → metrics-line-chart-0FR3SYSt.cjs} +3 -3
  788. package/dist/{metrics-line-chart-B_sP3eiL.cjs.map → metrics-line-chart-0FR3SYSt.cjs.map} +1 -1
  789. package/dist/{metrics-line-chart-DHyrDPkJ.js → metrics-line-chart-knlgw8bV.js} +3 -3
  790. package/dist/{metrics-line-chart-DHyrDPkJ.js.map → metrics-line-chart-knlgw8bV.js.map} +1 -1
  791. package/dist/new/layout/app-shell.cjs.js +23 -28
  792. package/dist/new/layout/app-shell.cjs.js.map +1 -1
  793. package/dist/new/layout/app-shell.es.js +23 -28
  794. package/dist/new/layout/app-shell.es.js.map +1 -1
  795. package/dist/new/layout/page-header.cjs.js +1 -1
  796. package/dist/new/layout/page-header.es.js +1 -1
  797. package/dist/new/settings.cjs.js +1 -1
  798. package/dist/new/settings.es.js +1 -1
  799. package/dist/new/sidebar.cjs.js +40 -40
  800. package/dist/new/sidebar.cjs.js.map +1 -1
  801. package/dist/new/sidebar.es.js +10 -10
  802. package/dist/new/sidebar.es.js.map +1 -1
  803. package/dist/{page-header-BIoUf7MA.js → page-header-CSigVThQ.js} +2 -2
  804. package/dist/{page-header-BIoUf7MA.js.map → page-header-CSigVThQ.js.map} +1 -1
  805. package/dist/{page-header-BBlPmW-T.cjs → page-header-DzEEkOca.cjs} +2 -2
  806. package/dist/{page-header-BBlPmW-T.cjs.map → page-header-DzEEkOca.cjs.map} +1 -1
  807. package/dist/primitives/control-size.cjs.js +24 -2
  808. package/dist/primitives/control-size.cjs.js.map +1 -1
  809. package/dist/primitives/control-size.es.js +5 -3
  810. package/dist/primitives/control-size.es.js.map +1 -1
  811. package/dist/primitives/fluid-menu.cjs.js +30 -18
  812. package/dist/primitives/fluid-menu.cjs.js.map +1 -1
  813. package/dist/primitives/fluid-menu.es.js +30 -18
  814. package/dist/primitives/fluid-menu.es.js.map +1 -1
  815. package/dist/primitives/form-element.cjs.js +4 -4
  816. package/dist/primitives/form-element.cjs.js.map +1 -1
  817. package/dist/primitives/form-element.es.js +4 -3
  818. package/dist/primitives/form-element.es.js.map +1 -1
  819. package/dist/primitives/menu-item.cjs.js +7 -4
  820. package/dist/primitives/menu-item.cjs.js.map +1 -1
  821. package/dist/primitives/menu-item.es.js +7 -4
  822. package/dist/primitives/menu-item.es.js.map +1 -1
  823. package/dist/primitives/trigger-button.cjs.js +1 -1
  824. package/dist/primitives/trigger-button.es.js +1 -1
  825. package/dist/{property-filter-applied-BBiUbtr0.js → property-filter-applied-C15IJHLs.js} +30 -36
  826. package/dist/property-filter-applied-C15IJHLs.js.map +1 -0
  827. package/dist/{property-filter-applied-BmxCPe2d.cjs → property-filter-applied-DtSjGypB.cjs} +30 -36
  828. package/dist/property-filter-applied-DtSjGypB.cjs.map +1 -0
  829. package/dist/radio-group-BdEPWGzi.cjs +62 -0
  830. package/dist/radio-group-BdEPWGzi.cjs.map +1 -0
  831. package/dist/radio-group-CFZXUXZ5.js +40 -0
  832. package/dist/radio-group-CFZXUXZ5.js.map +1 -0
  833. package/dist/resize/collapsible-panel.cjs.js +1 -1
  834. package/dist/resize/collapsible-panel.es.js +1 -1
  835. package/dist/resize/panel-drawer.cjs.js +1 -1
  836. package/dist/resize/panel-drawer.es.js +1 -1
  837. package/dist/{sankey-chart-Bcm9jMhe.cjs → sankey-chart-C1e0nRc3.cjs} +4 -4
  838. package/dist/{sankey-chart-Bcm9jMhe.cjs.map → sankey-chart-C1e0nRc3.cjs.map} +1 -1
  839. package/dist/{sankey-chart-CqngN2lw.js → sankey-chart-jvMXKzud.js} +4 -4
  840. package/dist/{sankey-chart-CqngN2lw.js.map → sankey-chart-jvMXKzud.js.map} +1 -1
  841. package/dist/{scroll-area-Qjf7e0Ik.cjs → scroll-area-BzOyuS8Y.cjs} +2 -2
  842. package/dist/{scroll-area-Qjf7e0Ik.cjs.map → scroll-area-BzOyuS8Y.cjs.map} +1 -1
  843. package/dist/{scroll-area-CdQ_5bLm.js → scroll-area-DyTZoISq.js} +2 -2
  844. package/dist/{scroll-area-CdQ_5bLm.js.map → scroll-area-DyTZoISq.js.map} +1 -1
  845. package/dist/{search-field-block-D0PUUCAE.cjs → search-field-block-ChXCuPrB.cjs} +9 -10
  846. package/dist/{search-field-block-D0PUUCAE.cjs.map → search-field-block-ChXCuPrB.cjs.map} +1 -1
  847. package/dist/{search-field-block-B5vUVTpl.js → search-field-block-nVeIkFXN.js} +3 -4
  848. package/dist/{search-field-block-B5vUVTpl.js.map → search-field-block-nVeIkFXN.js.map} +1 -1
  849. package/dist/{select--DXpTg0O.js → select-CDIt5aab.js} +3 -6
  850. package/dist/select-CDIt5aab.js.map +1 -0
  851. package/dist/{select-7ACAVdGX.cjs → select-CH5XO18L.cjs} +3 -6
  852. package/dist/select-CH5XO18L.cjs.map +1 -0
  853. package/dist/{select-field-block-Bu7UXI2H.js → select-field-block-BtjE0P5d.js} +3 -4
  854. package/dist/{select-field-block-Bu7UXI2H.js.map → select-field-block-BtjE0P5d.js.map} +1 -1
  855. package/dist/{select-field-block-W2u2WmN3.cjs → select-field-block-CpzMTsP6.cjs} +9 -10
  856. package/dist/{select-field-block-W2u2WmN3.cjs.map → select-field-block-CpzMTsP6.cjs.map} +1 -1
  857. package/dist/{settings-layout-NP_1dC-e.cjs → settings-layout-BGvMSClL.cjs} +2 -2
  858. package/dist/{settings-layout-NP_1dC-e.cjs.map → settings-layout-BGvMSClL.cjs.map} +1 -1
  859. package/dist/{settings-layout-C80s-D31.js → settings-layout-DA-JWqW3.js} +2 -2
  860. package/dist/{settings-layout-C80s-D31.js.map → settings-layout-DA-JWqW3.js.map} +1 -1
  861. package/dist/{span-payload-primitives-DnRsP93D.cjs → span-payload-primitives-70wznWZl.cjs} +6 -6
  862. package/dist/{span-payload-primitives-DnRsP93D.cjs.map → span-payload-primitives-70wznWZl.cjs.map} +1 -1
  863. package/dist/{span-payload-primitives-sbxk4CHC.js → span-payload-primitives-BvoMauDb.js} +6 -6
  864. package/dist/{span-payload-primitives-sbxk4CHC.js.map → span-payload-primitives-BvoMauDb.js.map} +1 -1
  865. package/dist/{spinner-CqP-NaB2.cjs → spinner-BCpN7LL9.cjs} +9 -3
  866. package/dist/spinner-BCpN7LL9.cjs.map +1 -0
  867. package/dist/{spinner-D2C2DYw8.js → spinner-ylbE0TJA.js} +9 -3
  868. package/dist/spinner-ylbE0TJA.js.map +1 -0
  869. package/dist/src/components/fluid-hover-highlight.d.ts +4 -58
  870. package/dist/src/domains/traces/components/traces-error-content.d.ts +2 -2
  871. package/dist/src/domains/traces/hooks/use-trace-url-state.d.ts +5 -3
  872. package/dist/src/domains/traces/trace-filters.d.ts +19 -4
  873. package/dist/src/domains/traces/trace-query-filters.d.ts +13 -1
  874. package/dist/src/ds/components/ActionRow/action-row.d.ts +9 -0
  875. package/dist/src/ds/components/ActionRow/action-row.stories.d.ts +8 -0
  876. package/dist/src/ds/components/ActionRow/index.d.ts +5 -0
  877. package/dist/src/ds/components/Badge/badge.stories.d.ts +0 -1
  878. package/dist/src/ds/components/ButtonsGroup/buttons-group.d.ts +11 -11
  879. package/dist/src/ds/components/ButtonsGroup/buttons-group.stories.d.ts +17 -7
  880. package/dist/src/ds/components/EmptyState/EmptyState.d.ts +8 -2
  881. package/dist/src/ds/components/EmptyState/empty-state.stories.d.ts +1 -0
  882. package/dist/src/ds/components/ErrorState/ErrorState.d.ts +3 -1
  883. package/dist/src/ds/components/ErrorState/error-state.stories.d.ts +1 -0
  884. package/dist/src/ds/components/FilterBar/filter-bar-advanced-chip.d.ts +10 -0
  885. package/dist/src/ds/components/FilterBar/filter-bar-context.d.ts +46 -9
  886. package/dist/src/ds/components/FilterBar/filter-bar-group-editor.d.ts +25 -0
  887. package/dist/src/ds/components/FilterBar/filter-bar-input.d.ts +8 -1
  888. package/dist/src/ds/components/FilterBar/filter-bar-option-list.d.ts +5 -0
  889. package/dist/src/ds/components/FilterBar/filter-bar-tree.d.ts +36 -0
  890. package/dist/src/ds/components/FilterBar/filter-bar.d.ts +28 -7
  891. package/dist/src/ds/components/FilterBar/filter-bar.stories.d.ts +3 -0
  892. package/dist/src/ds/components/FilterBar/index.d.ts +6 -1
  893. package/dist/src/ds/components/FilterBar/types.d.ts +36 -0
  894. package/dist/src/ds/components/FilterBar/use-settle-on-leave.d.ts +2 -0
  895. package/dist/src/ds/components/PageLayout/index.d.ts +1 -2
  896. package/dist/src/ds/components/PageLayout/page-layout.d.ts +13 -11
  897. package/dist/src/ds/components/PageLayout/page-layout.stories.d.ts +1 -2
  898. package/dist/src/ds/components/PermissionDenied/PermissionDenied.d.ts +3 -1
  899. package/dist/src/ds/components/PermissionDenied/permission-denied.stories.d.ts +1 -0
  900. package/dist/src/ds/components/SessionExpired/SessionExpired.d.ts +3 -1
  901. package/dist/src/ds/components/SessionExpired/session-expired.stories.d.ts +1 -0
  902. package/dist/src/ds/components/Spinner/spinner.d.ts +6 -3
  903. package/dist/src/ds/components/Spinner/spinner.stories.d.ts +1 -0
  904. package/dist/src/ds/components/ai/ask-user/ask-user.d.ts +13 -8
  905. package/dist/src/ds/new/layout/app-shell/app-shell.d.ts +2 -8
  906. package/dist/src/ds/new/layout/app-shell/app-shell.stories.d.ts +0 -1
  907. package/dist/src/ds/primitives/control-size.d.ts +3 -1
  908. package/dist/src/ds/primitives/fluid-menu.d.ts +8 -3
  909. package/dist/src/ds/primitives/form-element.d.ts +1 -2
  910. package/dist/src/hooks/use-fluid-hover.d.ts +7 -2
  911. package/dist/style.css +83 -120
  912. package/dist/{tabs-content-CKC4kIpH.js → tabs-content-BeFlc4E_.js} +2 -2
  913. package/dist/{tabs-content-CKC4kIpH.js.map → tabs-content-BeFlc4E_.js.map} +1 -1
  914. package/dist/{tabs-content-Bz6CZuv9.cjs → tabs-content-Cdu6HP8U.cjs} +2 -2
  915. package/dist/{tabs-content-Bz6CZuv9.cjs.map → tabs-content-Cdu6HP8U.cjs.map} +1 -1
  916. package/dist/{tabs-root-C5ABfm1F.cjs → tabs-root-BiV8irc3.cjs} +4 -4
  917. package/dist/{tabs-root-C5ABfm1F.cjs.map → tabs-root-BiV8irc3.cjs.map} +1 -1
  918. package/dist/{tabs-root-CcEQrwTM.js → tabs-root-CJ3GkDzi.js} +4 -4
  919. package/dist/{tabs-root-CcEQrwTM.js.map → tabs-root-CJ3GkDzi.js.map} +1 -1
  920. package/dist/{tabs-tab-BycF4dvx.js → tabs-tab-CoSCf5Ku.js} +2 -2
  921. package/dist/{tabs-tab-BycF4dvx.js.map → tabs-tab-CoSCf5Ku.js.map} +1 -1
  922. package/dist/{tabs-tab-DA466DbX.cjs → tabs-tab-J91Szy3Q.cjs} +2 -2
  923. package/dist/{tabs-tab-DA466DbX.cjs.map → tabs-tab-J91Szy3Q.cjs.map} +1 -1
  924. package/dist/{text-field-block-BLpLWmu8.cjs → text-field-block-BmWGMw3a.cjs} +8 -9
  925. package/dist/{text-field-block-BLpLWmu8.cjs.map → text-field-block-BmWGMw3a.cjs.map} +1 -1
  926. package/dist/{text-field-block--EUJKlY_.js → text-field-block-Cihf0IRw.js} +2 -3
  927. package/dist/{text-field-block--EUJKlY_.js.map → text-field-block-Cihf0IRw.js.map} +1 -1
  928. package/dist/{thread-rail-b-8RHNX_.cjs → thread-rail-BVpfkSyT.cjs} +6 -6
  929. package/dist/{thread-rail-b-8RHNX_.cjs.map → thread-rail-BVpfkSyT.cjs.map} +1 -1
  930. package/dist/{thread-rail-vsR5C0j4.js → thread-rail-DV89nFnn.js} +6 -6
  931. package/dist/{thread-rail-vsR5C0j4.js.map → thread-rail-DV89nFnn.js.map} +1 -1
  932. package/dist/{time-picker-Dlm-C-n4.cjs → time-picker-DXuXFGa-.cjs} +2 -2
  933. package/dist/{time-picker-Dlm-C-n4.cjs.map → time-picker-DXuXFGa-.cjs.map} +1 -1
  934. package/dist/{time-picker-DVt1ZUsS.js → time-picker-vFozGRyK.js} +2 -2
  935. package/dist/{time-picker-DVt1ZUsS.js.map → time-picker-vFozGRyK.js.map} +1 -1
  936. package/dist/{tool-approval-DB82iiRa.js → tool-approval-C11ECt4s.js} +5 -5
  937. package/dist/{tool-approval-DB82iiRa.js.map → tool-approval-C11ECt4s.js.map} +1 -1
  938. package/dist/{tool-approval-Dys524ty.cjs → tool-approval-DODxfqk7.cjs} +5 -5
  939. package/dist/{tool-approval-Dys524ty.cjs.map → tool-approval-DODxfqk7.cjs.map} +1 -1
  940. package/dist/{tool-call-K147tCug.js → tool-call-BjAGFbH-.js} +5 -5
  941. package/dist/{tool-call-K147tCug.js.map → tool-call-BjAGFbH-.js.map} +1 -1
  942. package/dist/{tool-call-CMRvRE-v.cjs → tool-call-CNBGnCmO.cjs} +5 -5
  943. package/dist/{tool-call-CMRvRE-v.cjs.map → tool-call-CNBGnCmO.cjs.map} +1 -1
  944. package/dist/{traces-data-list-CDNE9P8W.js → traces-data-list-BhKK8-wa.js} +7 -7
  945. package/dist/{traces-data-list-CDNE9P8W.js.map → traces-data-list-BhKK8-wa.js.map} +1 -1
  946. package/dist/{traces-data-list-B3q_cy6c.cjs → traces-data-list-D58cw23x.cjs} +7 -7
  947. package/dist/{traces-data-list-B3q_cy6c.cjs.map → traces-data-list-D58cw23x.cjs.map} +1 -1
  948. package/dist/types-CIPrYAzY.js +9 -0
  949. package/dist/types-CIPrYAzY.js.map +1 -0
  950. package/dist/types-Ns4ZNp-g.cjs +12 -0
  951. package/dist/types-Ns4ZNp-g.cjs.map +1 -0
  952. package/package.json +6 -7
  953. package/theme/surfaces.css +2 -2
  954. package/dist/Button-CVewl8nT.cjs.map +0 -1
  955. package/dist/Button-cWcBEd-G.js.map +0 -1
  956. package/dist/EmptyState-CdRjFB06.cjs.map +0 -1
  957. package/dist/EmptyState-UWXhBp5U.js.map +0 -1
  958. package/dist/ErrorState-B3uTRAEd.cjs +0 -16
  959. package/dist/ErrorState-B3uTRAEd.cjs.map +0 -1
  960. package/dist/ErrorState-DqRx8Dw_.js +0 -14
  961. package/dist/ErrorState-DqRx8Dw_.js.map +0 -1
  962. package/dist/PermissionDenied-B6TSGolC.js.map +0 -1
  963. package/dist/PermissionDenied-Dz5qXpQj.cjs.map +0 -1
  964. package/dist/SessionExpired-Bq5LcsDu.js.map +0 -1
  965. package/dist/SessionExpired-CF0BGNo_.cjs.map +0 -1
  966. package/dist/ask-user-CS2e6Re4.cjs +0 -147
  967. package/dist/ask-user-CS2e6Re4.cjs.map +0 -1
  968. package/dist/ask-user-gS3Y1bCc.js +0 -138
  969. package/dist/ask-user-gS3Y1bCc.js.map +0 -1
  970. package/dist/buttons-group-BiLEV_Ak.cjs +0 -101
  971. package/dist/buttons-group-BiLEV_Ak.cjs.map +0 -1
  972. package/dist/buttons-group-CaA7KAWf.js +0 -78
  973. package/dist/buttons-group-CaA7KAWf.js.map +0 -1
  974. package/dist/combobox-BWM3VH-n.cjs.map +0 -1
  975. package/dist/combobox-D7xJFZuO.js.map +0 -1
  976. package/dist/combobox-styles-CRebmeht.js.map +0 -1
  977. package/dist/combobox-styles-DYlNNjKC.cjs.map +0 -1
  978. package/dist/components/MainContent.cjs.js +0 -81
  979. package/dist/components/MainContent.cjs.js.map +0 -1
  980. package/dist/components/MainContent.d.ts +0 -2
  981. package/dist/components/MainContent.es.js +0 -75
  982. package/dist/components/MainContent.es.js.map +0 -1
  983. package/dist/data-code-section-DKz9Okaz.js.map +0 -1
  984. package/dist/data-code-section-qujvEc6j.cjs.map +0 -1
  985. package/dist/dropdown-menu-DL0MzjEb.js.map +0 -1
  986. package/dist/dropdown-menu-DNRCA4Gj.cjs.map +0 -1
  987. package/dist/field-block-DWkbNcsV.js.map +0 -1
  988. package/dist/field-block-Dy1IaWbv.cjs.map +0 -1
  989. package/dist/field-error-id-B3Z2Zu5y.cjs +0 -6
  990. package/dist/field-error-id-B3Z2Zu5y.cjs.map +0 -1
  991. package/dist/field-error-id-D3yg1nBh.js +0 -4
  992. package/dist/field-error-id-D3yg1nBh.js.map +0 -1
  993. package/dist/filter-bar-chip-BxI0NgEz.cjs.map +0 -1
  994. package/dist/filter-bar-chip-C-JxWUU8.js.map +0 -1
  995. package/dist/input-group-BEdHivvy.js.map +0 -1
  996. package/dist/input-group-CvWwK1Vz.cjs.map +0 -1
  997. package/dist/lib/springs.cjs.js +0 -32
  998. package/dist/lib/springs.cjs.js.map +0 -1
  999. package/dist/lib/springs.d.ts +0 -2
  1000. package/dist/lib/springs.es.js +0 -27
  1001. package/dist/lib/springs.es.js.map +0 -1
  1002. package/dist/main-sidebar-link-active-CmDoiX6g.js.map +0 -1
  1003. package/dist/main-sidebar-link-active-DbCvKZy2.cjs.map +0 -1
  1004. package/dist/markdown-renderer-B0gTm_Ea.js.map +0 -1
  1005. package/dist/markdown-renderer-D8qYAU7K.cjs.map +0 -1
  1006. package/dist/metrics-card-BUJxiwec.cjs.map +0 -1
  1007. package/dist/metrics-card-BlBt1WHw.js.map +0 -1
  1008. package/dist/new/layout/page-shell.cjs.js +0 -34
  1009. package/dist/new/layout/page-shell.cjs.js.map +0 -1
  1010. package/dist/new/layout/page-shell.d.ts +0 -2
  1011. package/dist/new/layout/page-shell.es.js +0 -30
  1012. package/dist/new/layout/page-shell.es.js.map +0 -1
  1013. package/dist/no-data-page-layout-DcVPjj-J.js +0 -9
  1014. package/dist/no-data-page-layout-DcVPjj-J.js.map +0 -1
  1015. package/dist/no-data-page-layout-Drzbg_w8.cjs +0 -11
  1016. package/dist/no-data-page-layout-Drzbg_w8.cjs.map +0 -1
  1017. package/dist/page-heading-context-D3yjYoJE.js +0 -9
  1018. package/dist/page-heading-context-D3yjYoJE.js.map +0 -1
  1019. package/dist/page-heading-context-Du-CpxAx.cjs +0 -12
  1020. package/dist/page-heading-context-Du-CpxAx.cjs.map +0 -1
  1021. package/dist/page-layout-C9ifD9Q8.cjs +0 -99
  1022. package/dist/page-layout-C9ifD9Q8.cjs.map +0 -1
  1023. package/dist/page-layout-xcM8IR-B.js +0 -97
  1024. package/dist/page-layout-xcM8IR-B.js.map +0 -1
  1025. package/dist/property-filter-applied-BBiUbtr0.js.map +0 -1
  1026. package/dist/property-filter-applied-BmxCPe2d.cjs.map +0 -1
  1027. package/dist/select--DXpTg0O.js.map +0 -1
  1028. package/dist/select-7ACAVdGX.cjs.map +0 -1
  1029. package/dist/spinner-CqP-NaB2.cjs.map +0 -1
  1030. package/dist/spinner-D2C2DYw8.js.map +0 -1
  1031. package/dist/src/ds/components/MainContent/index.d.ts +0 -1
  1032. package/dist/src/ds/components/MainContent/main-content.d.ts +0 -21
  1033. package/dist/src/ds/components/MainContent/main-content.stories.d.ts +0 -10
  1034. package/dist/src/ds/components/PageLayout/no-data-page-layout.d.ts +0 -6
  1035. package/dist/src/ds/components/PageLayout/page-heading-context.d.ts +0 -2
  1036. package/dist/src/ds/components/PageLayout/page-layout-column.d.ts +0 -5
  1037. package/dist/src/ds/components/PageLayout/page-layout-main-area.d.ts +0 -7
  1038. package/dist/src/ds/components/PageLayout/page-layout-root.d.ts +0 -7
  1039. package/dist/src/ds/components/PageLayout/page-layout-row.d.ts +0 -11
  1040. package/dist/src/ds/components/PageLayout/page-layout-top-area.d.ts +0 -5
  1041. package/dist/src/ds/new/layout/page-shell/index.d.ts +0 -1
  1042. package/dist/src/ds/new/layout/page-shell/page-shell.d.ts +0 -24
  1043. package/dist/src/ds/new/layout/page-shell/page-shell.stories.d.ts +0 -63
  1044. package/dist/src/lib/springs.d.ts +0 -31
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-bar-chip-DMhUPTt8.js","sources":["../src/ds/components/FilterBar/filter-bar-tree.ts","../src/ds/components/FilterBar/filter-bar-context.tsx","../src/ds/components/FilterBar/filter-bar-option-list.tsx","../src/ds/components/FilterBar/match-query.ts","../src/ds/components/FilterBar/use-value-suggestions.ts","../src/ds/components/FilterBar/use-value-step.ts","../src/ds/components/FilterBar/filter-bar-chip.tsx"],"sourcesContent":["import type { FilterBarExpression, FilterBarGroup, FilterBarItem, FilterBarLogic, FilterBarNode } from './types';\nimport { isFilterBarGroup } from './types';\n\nexport type FilterBarValueInput = FilterBarItem[] | FilterBarExpression;\n\nexport const ROOT_GROUP_ID = 'root';\n\nexport const normalize = (value: FilterBarValueInput): FilterBarExpression =>\n Array.isArray(value) ? { logic: 'and', nodes: value } : value;\n\n/** Hands back the shape the consumer gave us: flat arrays only ever contain items. */\nexport const denormalize = (expr: FilterBarExpression, flat: boolean): FilterBarValueInput =>\n flat ? expr.nodes.filter((node): node is FilterBarItem => !isFilterBarGroup(node)) : expr;\n\nexport type FlatEntry = { item: FilterBarItem; groupId?: string };\n\n/**\n * Items in document order (pre-order, depth-first), each tagged with the group it lives\n * in. A group's leaves sit where its advanced chip sits in the bar, so arrow navigation\n * walks the bar left to right.\n */\nexport const flattenItems = (expr: FilterBarExpression): FlatEntry[] => {\n const out: FlatEntry[] = [];\n const walk = (nodes: FilterBarNode[], groupId: string | undefined) => {\n for (const node of nodes) {\n if (isFilterBarGroup(node)) walk(node.nodes, node.id);\n else out.push(groupId ? { item: node, groupId } : { item: node });\n }\n };\n walk(expr.nodes, undefined);\n return out;\n};\n\nconst findGroupIn = (nodes: FilterBarNode[], groupId: string): FilterBarGroup | undefined => {\n for (const node of nodes) {\n if (!isFilterBarGroup(node)) continue;\n if (node.id === groupId) return node;\n const nested = findGroupIn(node.nodes, groupId);\n if (nested) return nested;\n }\n return undefined;\n};\n\nexport const findGroup = (expr: FilterBarExpression, groupId: string): FilterBarGroup | undefined =>\n findGroupIn(expr.nodes, groupId);\n\nexport const findItem = (expr: FilterBarExpression, itemId: string): FlatEntry | undefined =>\n flattenItems(expr).find(entry => entry.item.id === itemId);\n\n/** Nesting level of a group: root-level groups are at depth 1; `0` when not found. */\nexport const groupDepth = (expr: FilterBarExpression, groupId: string): number => {\n const walk = (nodes: FilterBarNode[], depth: number): number => {\n for (const node of nodes) {\n if (!isFilterBarGroup(node)) continue;\n if (node.id === groupId) return depth;\n const nested = walk(node.nodes, depth + 1);\n if (nested) return nested;\n }\n return 0;\n };\n return walk(expr.nodes, 1);\n};\n\n/** Number of leaf conditions under a group, at any depth. */\nexport const countLeaves = (group: FilterBarGroup): number =>\n group.nodes.reduce((sum, node) => sum + (isFilterBarGroup(node) ? countLeaves(node) : 1), 0);\n\n/** Ids of a group and every node below it. */\nexport const collectIds = (group: FilterBarGroup): string[] => [\n group.id,\n ...group.nodes.flatMap(node => (isFilterBarGroup(node) ? collectIds(node) : [node.id])),\n];\n\nconst mapGroup = (\n nodes: FilterBarNode[],\n groupId: string,\n fn: (group: FilterBarGroup) => FilterBarGroup,\n): FilterBarNode[] =>\n nodes.map(node => {\n if (!isFilterBarGroup(node)) return node;\n return node.id === groupId ? fn(node) : { ...node, nodes: mapGroup(node.nodes, groupId, fn) };\n });\n\nconst mapItems = (nodes: FilterBarNode[], fn: (item: FilterBarItem) => FilterBarItem): FilterBarNode[] =>\n nodes.map(node => (isFilterBarGroup(node) ? { ...node, nodes: mapItems(node.nodes, fn) } : fn(node)));\n\nconst filterNodes = (nodes: FilterBarNode[], keep: (node: FilterBarNode) => boolean): FilterBarNode[] =>\n nodes.filter(keep).map(node => (isFilterBarGroup(node) ? { ...node, nodes: filterNodes(node.nodes, keep) } : node));\n\nexport const updateItem = (\n expr: FilterBarExpression,\n itemId: string,\n patch: Partial<Omit<FilterBarItem, 'id'>>,\n): FilterBarExpression => ({\n ...expr,\n nodes: mapItems(expr.nodes, item => (item.id === itemId ? { ...item, ...patch } : item)),\n});\n\n/** Removes an item or a group by id at any depth. Groups left empty are kept (see `pruneEmptyGroups`). */\nexport const removeNode = (expr: FilterBarExpression, id: string): FilterBarExpression => ({\n ...expr,\n nodes: filterNodes(expr.nodes, node => node.id !== id),\n});\n\nexport const removeNodes = (expr: FilterBarExpression, ids: Iterable<string>): FilterBarExpression => {\n const drop = new Set(ids);\n return { ...expr, nodes: filterNodes(expr.nodes, node => !drop.has(node.id)) };\n};\n\nconst pruneNodes = (nodes: FilterBarNode[]): FilterBarNode[] =>\n nodes.flatMap((node): FilterBarNode[] => {\n if (!isFilterBarGroup(node)) return [node];\n const pruned = pruneNodes(node.nodes);\n return pruned.length === 0 ? [] : [{ ...node, nodes: pruned }];\n });\n\n/** Drops every group with no leaf left, bottom-up. */\nexport const pruneEmptyGroups = (expr: FilterBarExpression): FilterBarExpression => ({\n ...expr,\n nodes: pruneNodes(expr.nodes),\n});\n\nexport const insertItem = (\n expr: FilterBarExpression,\n groupId: string | undefined,\n item: FilterBarItem,\n): FilterBarExpression => {\n if (!groupId || groupId === ROOT_GROUP_ID) return { ...expr, nodes: [...expr.nodes, item] };\n return { ...expr, nodes: mapGroup(expr.nodes, groupId, group => ({ ...group, nodes: [...group.nodes, item] })) };\n};\n\nexport const setGroupLogic = (\n expr: FilterBarExpression,\n groupId: string,\n logic: FilterBarLogic,\n): FilterBarExpression => {\n if (groupId === ROOT_GROUP_ID) return { ...expr, logic };\n return { ...expr, nodes: mapGroup(expr.nodes, groupId, group => ({ ...group, logic })) };\n};\n\n/** Appends a group to the root, or inside `parentId`. */\nexport const createGroup = (\n expr: FilterBarExpression,\n parentId: string | undefined,\n group: FilterBarGroup,\n): FilterBarExpression => {\n if (!parentId || parentId === ROOT_GROUP_ID) return { ...expr, nodes: [...expr.nodes, group] };\n return { ...expr, nodes: mapGroup(expr.nodes, parentId, parent => ({ ...parent, nodes: [...parent.nodes, group] })) };\n};\n\n/** Drops removable items at any depth and every group that ends up empty; pinned items stay. */\nexport const clearRemovable = (expr: FilterBarExpression, pinned: ReadonlySet<string>): FilterBarExpression =>\n pruneEmptyGroups({\n ...expr,\n nodes: filterNodes(expr.nodes, node => isFilterBarGroup(node) || pinned.has(node.id)),\n });\n","/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useCallback, useContext, useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport {\n clearRemovable,\n collectIds,\n createGroup,\n denormalize,\n findGroup,\n flattenItems,\n groupDepth,\n insertItem,\n normalize,\n pruneEmptyGroups,\n removeNode,\n setGroupLogic,\n updateItem as updateTreeItem,\n} from './filter-bar-tree';\nimport type { FilterBarValueInput } from './filter-bar-tree';\nimport { isFilterBarGroup } from './types';\nimport type {\n DraftStage,\n FilterBarCommit,\n FilterBarDraft,\n FilterBarExpression,\n FilterBarField,\n FilterBarGroup,\n FilterBarItem,\n FilterBarLogic,\n FilterBarNode,\n FilterBarOperator,\n FilterBarSegment,\n FilterBarValue,\n} from './types';\n\ntype SegmentKey = `${string}:${FilterBarSegment}`;\n\nconst SEGMENTS_LEFT_TO_RIGHT: FilterBarSegment[] = ['field', 'operator', 'value', 'remove'];\nconst SEGMENTS_RIGHT_TO_LEFT: FilterBarSegment[] = [...SEGMENTS_LEFT_TO_RIGHT].reverse();\n\n/** Default nesting bound for advanced-filter groups (root-level group = depth 1). */\nexport const DEFAULT_MAX_GROUP_DEPTH = 3;\n\n/**\n * Marks a focus scope: the bar and each open advanced-filter popover. Arrow navigation\n * never crosses scopes, so ←/→ inside a popover cannot land back in the bar.\n */\nexport const FILTER_BAR_SCOPE_ATTR = 'data-filter-bar-scope';\n\nconst scopeOf = (el: Element | null | undefined) => el?.closest(`[${FILTER_BAR_SCOPE_ATTR}]`) ?? null;\n\nconst stageOf = (draft: FilterBarDraft | null): DraftStage => {\n if (!draft) return 'none';\n return draft.operatorId ? 'operator' : 'field';\n};\n\nexport type FilterBarContextValue = {\n fields: FilterBarField[];\n operators: FilterBarOperator[];\n /** Every rendered item in visual order (groups flattened), including leaving ones. */\n items: FilterBarItem[];\n /** The rendered tree, including the pending commit and leaving nodes. */\n expression: FilterBarExpression;\n /** False when the consumer passed a flat `FilterBarItem[]`: no groups are offered. */\n groupsEnabled: boolean;\n /** Deepest allowed group nesting (root-level group = 1). */\n maxDepth: number;\n /** Filter under construction in the input, once a field is picked; `null` otherwise. */\n draft: FilterBarDraft | null;\n /** Progress or reset the draft. Its id is assigned on first field pick and kept afterwards. */\n setDraft: (next: Omit<FilterBarDraft, 'id' | 'from' | 'groupId'> | null) => void;\n /** Append an item for the draft, reusing its id so the draft chip becomes the item's chip. */\n commitDraft: (next: Required<Omit<FilterBarDraft, 'id' | 'from' | 'groupId'>>, value: FilterBarValue) => void;\n /** The draft that just became an item, until its chip has glinted or the bar moves on. */\n lastCommit: FilterBarCommit | null;\n settleCommit: () => void;\n updateItem: (id: string, patch: Partial<Omit<FilterBarItem, 'id'>>) => void;\n /** Removes a leaf. Its group stays, even empty, until the popover closes (see `setOpenGroup`). */\n removeItem: (id: string) => void;\n /** Ids of removed items and groups still rendered while their chip plays its exit animation. */\n leaving: ReadonlySet<string>;\n /** Called by a leaving chip once its exit animation has finished (or when nothing animates). */\n settleRemove: (id: string) => void;\n /** Removes every removable item (chips rendered with `removable={false}` stay) and every group left empty. */\n clear: () => void;\n /** Whether at least one item can be removed, i.e. whether Clear has anything to do. */\n hasRemovableItems: boolean;\n /** Called by chips so `clear` and the Clear button know which items are pinned. */\n registerNonRemovable: (itemId: string, nonRemovable: boolean) => void;\n /** Appends an empty group to the root (`undefined`) or inside `parentId`, and points the input at it. */\n addGroup: (parentId: string | undefined, logic: FilterBarLogic) => string;\n /** Removes a group and everything below it. */\n removeGroup: (groupId: string) => void;\n setLogic: (groupId: string, logic: FilterBarLogic) => void;\n /** Nesting level of a group (root-level = 1); 0 when unknown. */\n getGroupDepth: (groupId: string) => number;\n /** Root group whose advanced-filter popover is open. */\n openGroupId: string | null;\n /** Open a root group's popover, or close it with `null` (empty groups are pruned on close). */\n setOpenGroup: (groupId: string | null) => void;\n /** Group the input commits into; `undefined` = root. */\n inputTarget: string | undefined;\n /** Point the input at a group (or back at the root with `undefined`) and focus it. */\n openGroupInput: (groupId: string | undefined) => void;\n getField: (fieldId: string) => FilterBarField | undefined;\n getOperator: (operatorId: string) => FilterBarOperator | undefined;\n /** Operators allowed for a field (`field.operators` or every root operator). */\n getFieldOperators: (field: FilterBarField) => FilterBarOperator[];\n registerSegment: (itemId: string, segment: FilterBarSegment, el: HTMLElement | null) => void;\n registerInput: (el: HTMLInputElement | null) => void;\n /**\n * Focus a segment of the nearest editable chip starting at `fromIndex` and\n * walking in `direction` (read-only chips register no segments and are skipped).\n * Never leaves the focus scope of the currently focused element. Returns false if\n * nothing was focused.\n */\n focusChip: (fromIndex: number, direction: -1 | 1, segment: FilterBarSegment) => boolean;\n focusInput: () => void;\n /** Called by chips to move focus after a removal. */\n focusAfterRemove: (removedIndex: number) => void;\n announce: (message: string) => void;\n announcement: string;\n ariaLabel: string;\n};\n\nconst FilterBarContext = createContext<FilterBarContextValue | null>(null);\n\nexport function useFilterBarContext(): FilterBarContextValue {\n const ctx = useContext(FilterBarContext);\n if (!ctx) throw new Error('FilterBar compound components must be rendered inside <FilterBar>.');\n return ctx;\n}\n\nlet idCounter = 0;\nexport function createFilterId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') return crypto.randomUUID();\n idCounter += 1;\n return `filter-${idCounter}`;\n}\n\nexport function emptyValueFor(operator: FilterBarOperator | undefined): string | string[] {\n return operator?.arity === 'many' ? [] : '';\n}\n\nexport type FilterBarProviderProps = {\n fields: FilterBarField[];\n operators: FilterBarOperator[];\n value: FilterBarValueInput;\n /** Receives the same shape as `value` (method syntax so flat-only handlers stay assignable). */\n onValueChange(value: FilterBarValueInput): void;\n /** Derives ids for root-level items only; items inside groups always get a random id\n * because a group may hold several conditions on the same field. */\n createItemId?: (fieldId: string) => string;\n /** Deepest allowed group nesting (root-level group = 1). Defaults to 3. */\n maxDepth?: number;\n ariaLabel: string;\n children: ReactNode;\n};\n\nconst idsOf = (nodes: FilterBarNode[], out = new Set<string>()): Set<string> => {\n for (const node of nodes) {\n out.add(node.id);\n if (isFilterBarGroup(node)) idsOf(node.nodes, out);\n }\n return out;\n};\n\n/**\n * The previously rendered tree with the consumer's new `value` folded in: nodes still\n * present take their new version (in their old position), leaving nodes stay where they\n * were, and nodes the consumer added are appended. Once nothing is leaving the result is\n * exactly `next`, so consumer reorders are only deferred, never lost.\n */\nconst mergeNodes = (prev: FilterBarNode[], next: FilterBarNode[], leaving: ReadonlySet<string>): FilterBarNode[] => {\n const nextById = new Map(next.map(node => [node.id, node]));\n const seen = new Set<string>();\n const out: FilterBarNode[] = [];\n for (const old of prev) {\n const fresh = nextById.get(old.id);\n if (fresh) {\n seen.add(old.id);\n out.push(\n isFilterBarGroup(fresh) && isFilterBarGroup(old)\n ? { ...fresh, nodes: mergeNodes(old.nodes, fresh.nodes, leaving) }\n : fresh,\n );\n } else if (leaving.has(old.id)) {\n out.push(old);\n }\n }\n for (const node of next) if (!seen.has(node.id)) out.push(node);\n return out;\n};\n\nexport function FilterBarProvider({\n fields,\n operators,\n value,\n onValueChange,\n createItemId,\n maxDepth = DEFAULT_MAX_GROUP_DEPTH,\n ariaLabel,\n children,\n}: FilterBarProviderProps) {\n const segments = useRef(new Map<SegmentKey, HTMLElement>());\n const inputRef = useRef<HTMLInputElement | null>(null);\n const flat = Array.isArray(value);\n const expression = useMemo(() => normalize(value), [value]);\n const exprRef = useRef(expression);\n exprRef.current = expression;\n const [announcement, setAnnouncement] = useState('');\n const [nonRemovableIds, setNonRemovableIds] = useState<ReadonlySet<string>>(() => new Set());\n const [inputTarget, setInputTarget] = useState<string | undefined>(undefined);\n const [openGroupId, setOpenGroupId] = useState<string | null>(null);\n\n const emit = useCallback(\n (next: FilterBarExpression) => onValueChange(denormalize(next, flat)),\n [onValueChange, flat],\n );\n\n const getField = useCallback((fieldId: string) => fields.find(f => f.id === fieldId), [fields]);\n const getOperator = useCallback((operatorId: string) => operators.find(o => o.id === operatorId), [operators]);\n const getFieldOperators = useCallback(\n (field: FilterBarField) => {\n if (!field.operators) return operators;\n const allowed = new Set(field.operators);\n return operators.filter(o => allowed.has(o.id));\n },\n [operators],\n );\n\n const announce = useCallback((message: string) => setAnnouncement(message), []);\n\n const [draft, setDraftState] = useState<FilterBarDraft | null>(null);\n const draftRef = useRef(draft);\n draftRef.current = draft;\n const [lastCommit, setLastCommit] = useState<FilterBarCommit | null>(null);\n const settleCommit = useCallback(() => setLastCommit(prev => (prev ? { ...prev, glint: false } : null)), []);\n // Removed nodes stay rendered at their old position until their chip has animated out.\n const [leavingIds, setLeavingIds] = useState<ReadonlySet<string>>(() => new Set());\n const settleRemove = useCallback((id: string) => {\n setLeavingIds(prev => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n }, []);\n const markLeaving = useCallback((ids: Iterable<string>) => {\n const list = [...ids];\n if (list.length === 0) return;\n setLeavingIds(prev => new Set([...prev, ...list]));\n }, []);\n\n // Until the consumer reflects the commit in `value`, the committed item is ours to show;\n // nodes on their way out keep their place in the previously rendered tree.\n const renderedTreeRef = useRef<FilterBarNode[]>(expression.nodes);\n const { rendered, items, leaving, rootGroupOf } = useMemo(() => {\n const present = idsOf(expression.nodes);\n let rendered: FilterBarExpression =\n leavingIds.size === 0\n ? expression\n : { ...expression, nodes: mergeNodes(renderedTreeRef.current, expression.nodes, leavingIds) };\n if (lastCommit && !present.has(lastCommit.item.id)) {\n rendered = insertItem(rendered, lastCommit.groupId, lastCommit.item);\n }\n renderedTreeRef.current = rendered.nodes;\n const shown = idsOf(rendered.nodes);\n const leaving = new Set([...leavingIds].filter(id => shown.has(id) && !present.has(id)));\n // Each leaf's root-level group: arrow navigation lands on that group's advanced chip\n // when the leaf itself is unmounted (closed popover).\n const rootGroupOf = new Map<string, string>();\n for (const node of rendered.nodes) {\n if (isFilterBarGroup(node))\n for (const { item } of flattenItems({ logic: 'and', nodes: [node] })) rootGroupOf.set(item.id, node.id);\n }\n return { rendered, items: flattenItems(rendered).map(e => e.item), leaving, rootGroupOf };\n }, [expression, lastCommit, leavingIds]);\n\n // The draft chip is keyed by the id the committed item will carry, so React keeps the same\n // element through the commit. Consumers who derive ids themselves supply `createItemId` so\n // the id we hand back in `onValueChange` is the one they'll hand back in `value`.\n const newItemId = useCallback(\n (fieldId: string) => (createItemId && inputTarget === undefined ? createItemId(fieldId) : createFilterId()),\n [createItemId, inputTarget],\n );\n\n const setDraft = useCallback(\n (next: Omit<FilterBarDraft, 'id' | 'from' | 'groupId'> | null) => {\n setLastCommit(null);\n setDraftState(prev =>\n next\n ? {\n ...next,\n id: prev?.fieldId === next.fieldId ? prev.id : newItemId(next.fieldId),\n from: stageOf(prev),\n groupId: inputTarget,\n }\n : null,\n );\n },\n [newItemId, inputTarget],\n );\n\n const commitDraft = useCallback(\n ({ fieldId, operatorId }: Required<Omit<FilterBarDraft, 'id' | 'from' | 'groupId'>>, value: FilterBarValue) => {\n // Operators without a value commit straight from the operator step, before a draft exists.\n const id = draftRef.current?.id ?? newItemId(fieldId);\n const groupId = draftRef.current?.groupId ?? inputTarget;\n const item = { id, fieldId, operatorId, value };\n emit(insertItem(exprRef.current, groupId, item));\n setLastCommit({ item, from: stageOf(draftRef.current), glint: true, groupId });\n setDraftState(null);\n announce('Filter added');\n },\n [emit, announce, newItemId, inputTarget],\n );\n\n const updateItem = useCallback(\n (id: string, patch: Partial<Omit<FilterBarItem, 'id'>>) => {\n emit(updateTreeItem(exprRef.current, id, patch));\n },\n [emit],\n );\n\n const removeItem = useCallback(\n (id: string) => {\n markLeaving([id]);\n emit(removeNode(exprRef.current, id));\n setLastCommit(null);\n announce('Filter removed');\n },\n [emit, announce, markLeaving],\n );\n\n const releaseInputTarget = useCallback((gone: ReadonlySet<string>) => {\n setInputTarget(prev => (prev && gone.has(prev) ? undefined : prev));\n }, []);\n\n const removeGroup = useCallback(\n (groupId: string) => {\n const expr = exprRef.current;\n const group = findGroup(expr, groupId);\n const gone = new Set(group ? collectIds(group) : [groupId]);\n markLeaving(gone);\n emit(removeNode(expr, groupId));\n setLastCommit(null);\n setDraftState(null);\n releaseInputTarget(gone);\n setOpenGroupId(prev => (prev === groupId ? null : prev));\n announce('Advanced filter removed');\n },\n [emit, announce, markLeaving, releaseInputTarget],\n );\n\n const addGroup = useCallback(\n (parentId: string | undefined, logic: FilterBarLogic) => {\n const group: FilterBarGroup = { id: createFilterId(), kind: 'group', logic, nodes: [] };\n emit(createGroup(exprRef.current, parentId, group));\n setLastCommit(null);\n setDraftState(null);\n setInputTarget(group.id);\n announce(parentId ? 'Nested group added' : 'Advanced filter added');\n return group.id;\n },\n [emit, announce],\n );\n\n const setLogic = useCallback(\n (groupId: string, logic: FilterBarLogic) => {\n emit(setGroupLogic(exprRef.current, groupId, logic));\n announce(`Conditions joined with ${logic}`);\n },\n [emit, announce],\n );\n\n const getGroupDepth = useCallback((groupId: string) => groupDepth(exprRef.current, groupId), []);\n\n const setOpenGroup = useCallback(\n (groupId: string | null) => {\n setOpenGroupId(groupId);\n if (groupId !== null) return;\n // Closing the editor: whatever was left empty goes away, and the input returns to the bar.\n const expr = exprRef.current;\n const pruned = pruneEmptyGroups(expr);\n const kept = idsOf(pruned.nodes);\n const gone = new Set([...idsOf(expr.nodes)].filter(id => !kept.has(id)));\n if (gone.size > 0) {\n markLeaving(gone);\n emit(pruned);\n }\n setDraftState(null);\n setInputTarget(undefined);\n },\n [emit, markLeaving],\n );\n\n const focusInput = useCallback(() => {\n inputRef.current?.focus();\n }, []);\n\n const openGroupInput = useCallback(\n (groupId: string | undefined) => {\n setInputTarget(groupId);\n setDraftState(null);\n // The input for a group mounts with the next render and focuses itself.\n if (groupId === undefined) focusInput();\n },\n [focusInput],\n );\n\n const clear = useCallback(() => {\n const expr = exprRef.current;\n const next = clearRemovable(expr, nonRemovableIds);\n const kept = idsOf(next.nodes);\n const gone = new Set([...idsOf(expr.nodes)].filter(id => !kept.has(id)));\n markLeaving(gone);\n emit(next);\n setLastCommit(null);\n setDraftState(null);\n setInputTarget(undefined);\n setOpenGroupId(null);\n announce('All filters removed');\n }, [emit, announce, nonRemovableIds, markLeaving]);\n\n const hasRemovableItems = flattenItems(expression).some(({ item }) => !nonRemovableIds.has(item.id));\n\n const registerNonRemovable = useCallback((itemId: string, nonRemovable: boolean) => {\n setNonRemovableIds(prev => {\n if (prev.has(itemId) === nonRemovable) return prev;\n const next = new Set(prev);\n if (nonRemovable) next.add(itemId);\n else next.delete(itemId);\n return next;\n });\n }, []);\n\n const registerSegment = useCallback((itemId: string, segment: FilterBarSegment, el: HTMLElement | null) => {\n const key: SegmentKey = `${itemId}:${segment}`;\n if (el) segments.current.set(key, el);\n else segments.current.delete(key);\n }, []);\n\n const registerInput = useCallback((el: HTMLInputElement | null) => {\n // An unmounting input must not clear the ref if another input already took over.\n if (el) inputRef.current = el;\n else if (!inputRef.current?.isConnected) inputRef.current = null;\n }, []);\n\n // Chip indices refer to the rendered list (which may still hold leaving chips), not `value`.\n const renderedRef = useRef(items);\n renderedRef.current = items;\n\n const rootGroupRef = useRef(rootGroupOf);\n rootGroupRef.current = rootGroupOf;\n\n const focusChip = useCallback((fromIndex: number, direction: -1 | 1, segment: FilterBarSegment) => {\n const items = renderedRef.current;\n const rootGroupOf = rootGroupRef.current;\n // Stay within the scope of the focused element, or (after a mouse click, which does not\n // move focus) of the chip we navigate away from. Unknown scope: any chip qualifies.\n const origin = items[fromIndex - direction];\n const originEl = origin\n ? [...SEGMENTS_LEFT_TO_RIGHT].map(s => segments.current.get(`${origin.id}:${s}`)).find(Boolean)\n : null;\n const scope =\n scopeOf(typeof document === 'undefined' ? null : document.activeElement) ?? scopeOf(originEl) ?? undefined;\n // Custom chips may register only some segments (e.g. just `value`): when the\n // requested one is missing, land on the chip's outermost segment on the side\n // we arrive from.\n const fallbacks: FilterBarSegment[] = direction === -1 ? SEGMENTS_RIGHT_TO_LEFT : SEGMENTS_LEFT_TO_RIGHT;\n for (let i = fromIndex; i >= 0 && i < items.length; i += direction) {\n const item = items[i];\n if (!item) break;\n // A leaf inside a closed popover has no segments: land on its advanced chip instead.\n const ownerIds = [item.id, rootGroupOf.get(item.id)].filter((id): id is string => id !== undefined);\n for (const ownerId of ownerIds) {\n for (const candidate of [segment, ...fallbacks]) {\n const el = segments.current.get(`${ownerId}:${candidate}`);\n if (el && (scope === undefined || scopeOf(el) === scope)) {\n el.focus();\n return true;\n }\n }\n }\n }\n return false;\n }, []);\n\n const focusAfterRemove = useCallback(\n (removedIndex: number) => {\n // Called synchronously after `removeItem`, before React re-renders: the rendered list\n // still holds the removed chip and every neighbour's DOM node is still mounted.\n // Leaving neighbours register no segments, so they are skipped over.\n if (focusChip(removedIndex + 1, 1, 'value') || focusChip(removedIndex - 1, -1, 'value')) return;\n focusInput();\n },\n [focusChip, focusInput],\n );\n\n const ctx = useMemo<FilterBarContextValue>(\n () => ({\n fields,\n operators,\n items,\n expression: rendered,\n groupsEnabled: !flat,\n maxDepth,\n draft,\n setDraft,\n commitDraft,\n lastCommit,\n settleCommit,\n updateItem,\n removeItem,\n leaving,\n settleRemove,\n clear,\n hasRemovableItems,\n registerNonRemovable,\n addGroup,\n removeGroup,\n setLogic,\n getGroupDepth,\n openGroupId,\n setOpenGroup,\n inputTarget,\n openGroupInput,\n getField,\n getOperator,\n getFieldOperators,\n registerSegment,\n registerInput,\n focusChip,\n focusInput,\n focusAfterRemove,\n announce,\n announcement,\n ariaLabel,\n }),\n [\n fields,\n operators,\n items,\n rendered,\n flat,\n maxDepth,\n draft,\n setDraft,\n commitDraft,\n lastCommit,\n settleCommit,\n updateItem,\n removeItem,\n leaving,\n settleRemove,\n clear,\n hasRemovableItems,\n registerNonRemovable,\n addGroup,\n removeGroup,\n setLogic,\n getGroupDepth,\n openGroupId,\n setOpenGroup,\n inputTarget,\n openGroupInput,\n getField,\n getOperator,\n getFieldOperators,\n registerSegment,\n registerInput,\n focusChip,\n focusInput,\n focusAfterRemove,\n announce,\n announcement,\n ariaLabel,\n ],\n );\n\n return <FilterBarContext.Provider value={ctx}>{children}</FilterBarContext.Provider>;\n}\n","import { CheckIcon } from 'lucide-react';\nimport { forwardRef } from 'react';\nimport type { ReactNode } from 'react';\nimport type { FilterBarOption } from './types';\nimport { ComboboxPrimitive, comboboxStyles } from '@/ds/components/Combobox';\nimport { Spinner } from '@/ds/components/Spinner/spinner';\nimport { FluidMenuItems, useFluidMenu, useFluidMenuItemRef } from '@/ds/primitives/fluid-menu';\nimport { cn } from '@/lib/utils';\n\nexport type FilterBarOptionListProps<T> = {\n getKey: (option: T) => string;\n renderOption: (option: T) => ReactNode;\n /** Explicit check mark, used where Base UI's selection state is not the source of truth (multi-value step). */\n isSelected?: (option: T) => boolean;\n isLoading?: boolean;\n error?: unknown;\n emptyText?: string;\n 'aria-label': string;\n 'aria-multiselectable'?: boolean;\n};\n\n/** Default value row: the option's leading node (avatar, swatch…) followed by its label. */\nexport function FilterBarOptionLabel({ option }: { option: FilterBarOption }) {\n return (\n <>\n {option.start}\n <span className=\"min-w-0 truncate\">{option.label ?? option.value}</span>\n </>\n );\n}\n\nconst FluidItem = forwardRef<HTMLDivElement, ComboboxPrimitive.Item.Props>((props, ref) => (\n <ComboboxPrimitive.Item ref={useFluidMenuItemRef(ref)} {...props} />\n));\nFluidItem.displayName = 'FilterBarOptionItem';\n\n/**\n * List/status/empty rows for a `ComboboxPrimitive.Root`, laid out like the DS\n * `Combobox` popup (fluid hover highlight, scroller around the list). Items come\n * from the root's `items`; highlight and keyboard navigation are owned by Base UI.\n */\nexport function FilterBarOptionList<T>({\n getKey,\n renderOption,\n isSelected,\n isLoading,\n error,\n emptyText = 'No results.',\n 'aria-label': ariaLabel,\n 'aria-multiselectable': multiselectable,\n}: FilterBarOptionListProps<T>) {\n const idle = !isLoading && error === undefined;\n const menu = useFluidMenu<HTMLDivElement>();\n return (\n <>\n {isLoading && (\n <ComboboxPrimitive.Status className={comboboxStyles.empty}>\n <Spinner size=\"sm\" />\n <span>Loading…</span>\n </ComboboxPrimitive.Status>\n )}\n {!isLoading && error !== undefined && (\n <ComboboxPrimitive.Status className={comboboxStyles.empty}>Couldn't load values.</ComboboxPrimitive.Status>\n )}\n <ComboboxPrimitive.Empty className={comboboxStyles.empty}>{idle ? emptyText : null}</ComboboxPrimitive.Empty>\n <div\n className={cn(\n comboboxStyles.listScroller,\n 'max-h-[min(var(--spacing-dropdown),60dvh)]',\n menu.containerClassName,\n )}\n {...menu.getContainerProps({})}\n >\n <FluidMenuItems menu={menu}>\n <ComboboxPrimitive.List\n aria-label={ariaLabel}\n aria-multiselectable={multiselectable}\n className={comboboxStyles.list}\n >\n {(option: T) => {\n const selected = isSelected?.(option) ?? false;\n return (\n <FluidItem\n key={getKey(option)}\n value={option}\n data-selected={selected || undefined}\n className={cn(comboboxStyles.item, 'min-w-0')}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-1.5 truncate\">{renderOption(option)}</span>\n <span className={comboboxStyles.itemRightSlot}>\n <span className={comboboxStyles.checkContainer}>\n {isSelected ? (\n selected && <CheckIcon className={comboboxStyles.checkIcon} />\n ) : (\n <ComboboxPrimitive.ItemIndicator>\n <CheckIcon className={comboboxStyles.checkIcon} />\n </ComboboxPrimitive.ItemIndicator>\n )}\n </span>\n </span>\n </FluidItem>\n );\n }}\n </ComboboxPrimitive.List>\n </FluidMenuItems>\n </div>\n </>\n );\n}\n","/** Every whitespace-separated term of `query` must appear in `text` (case-insensitive). */\nexport function matchesQuery(text: string, query: string): boolean {\n const terms = query.toLowerCase().split(/\\s+/).filter(Boolean);\n if (terms.length === 0) return true;\n const haystack = text.toLowerCase();\n return terms.every(term => haystack.includes(term));\n}\n\n/** Base UI `filter` for `ComboboxPrimitive.Root`, matching on the item label. */\nexport function matchesQueryFilter<T>(item: T, query: string, itemToString?: (item: T) => string): boolean {\n return matchesQuery(itemToString ? itemToString(item) : String(item), query);\n}\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { matchesQuery } from './match-query';\nimport type { FilterBarField, FilterBarOption } from './types';\n\nconst DEBOUNCE_MS = 150;\n\nconst BOOLEAN_OPTIONS: FilterBarOption[] = [\n { value: 'true', label: 'True' },\n { value: 'false', label: 'False' },\n];\n\n/** The field's suggestions, defaulting to True/False for boolean fields. */\nexport const getFieldSuggestions = (field: FilterBarField | undefined) =>\n field?.suggestions ?? (field?.type === 'boolean' ? BOOLEAN_OPTIONS : undefined);\n\nexport type UseValueSuggestionsOptions = {\n field: FilterBarField | undefined;\n operatorId: string;\n query: string;\n /** Resolver only runs while true (the value editor is open). */\n enabled: boolean;\n};\n\nexport type UseValueSuggestionsResult = {\n options: FilterBarOption[];\n isLoading: boolean;\n error: unknown;\n /** True when the field has any suggestions (static or lazy). */\n hasSuggestions: boolean;\n};\n\n/**\n * Value suggestions for a field. Static lists are filtered locally. Lazy\n * resolvers run only while `enabled`, are debounced on `query`, receive an\n * AbortSignal, and only the latest response is applied.\n */\nexport function useValueSuggestions({\n field,\n operatorId,\n query,\n enabled,\n}: UseValueSuggestionsOptions): UseValueSuggestionsResult {\n const suggestions = getFieldSuggestions(field);\n const resolver = typeof suggestions === 'function' ? suggestions : undefined;\n const staticOptions = Array.isArray(suggestions) ? suggestions : undefined;\n\n const [remote, setRemote] = useState<FilterBarOption[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<unknown>(undefined);\n const requestId = useRef(0);\n // Consumers typically define the resolver inline; a new identity must not refire (and abort) the request.\n const resolverRef = useRef(resolver);\n resolverRef.current = resolver;\n const hasResolver = Boolean(resolver);\n\n useEffect(() => {\n if (!hasResolver || !enabled) {\n setRemote([]);\n setIsLoading(false);\n setError(undefined);\n return;\n }\n\n const id = ++requestId.current;\n const controller = new AbortController();\n setIsLoading(true);\n\n const timer = setTimeout(() => {\n Promise.resolve()\n .then(() => resolverRef.current?.({ query, operatorId, signal: controller.signal }) ?? [])\n .then(result => {\n if (id !== requestId.current) return;\n setRemote(result);\n setError(undefined);\n setIsLoading(false);\n })\n .catch(err => {\n if (id !== requestId.current || controller.signal.aborted) return;\n setError(err);\n setIsLoading(false);\n });\n }, DEBOUNCE_MS);\n\n return () => {\n clearTimeout(timer);\n controller.abort();\n };\n }, [hasResolver, enabled, query, operatorId]);\n\n const options = useMemo(() => {\n if (staticOptions) return staticOptions.filter(o => matchesQuery(o.label ?? o.value, query));\n return remote;\n }, [staticOptions, remote, query]);\n\n return {\n options,\n isLoading: Boolean(resolver) && isLoading,\n error,\n hasSuggestions: Boolean(suggestions),\n };\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { KeyboardEvent } from 'react';\nimport type { FilterBarField, FilterBarOperator, FilterBarOption, FilterBarValue } from './types';\nimport { parseFieldValue } from './types';\nimport { useValueSuggestions } from './use-value-suggestions';\n\nexport type UseValueStepOptions = {\n field: FilterBarField | undefined;\n operator: FilterBarOperator | undefined;\n query: string;\n enabled: boolean;\n initialValue?: FilterBarValue;\n onCommit: (value: FilterBarValue) => void;\n};\n\nconst toStrings = (value: FilterBarValue | undefined): string[] => (Array.isArray(value) ? value.map(String) : []);\n\n/**\n * Shared value-editing logic for the typeahead value step and the chip value\n * editor. Single arity: picking an option (or Enter on free text) commits.\n * Many arity: Enter/click toggles the highlighted option; Ctrl/Meta+Enter (or\n * `commitSelection`) commits the selection. List navigation itself is owned by\n * the surrounding `ComboboxPrimitive.Root`.\n */\nexport function useValueStep({ field, operator, query, enabled, initialValue, onCommit }: UseValueStepOptions) {\n const isMany = operator?.arity === 'many';\n // Selection is tracked as option strings; values are parsed to the field type on commit.\n const [selected, setSelected] = useState<string[]>(() => toStrings(initialValue));\n const initialValueRef = useRef(initialValue);\n initialValueRef.current = initialValue;\n\n // The editor stays mounted across opens: re-seed from the current value each time it opens.\n useEffect(() => {\n setSelected(enabled ? toStrings(initialValueRef.current) : []);\n }, [enabled]);\n\n const suggestions = useValueSuggestions({ field, operatorId: operator?.id ?? '', query, enabled });\n const type = field?.type;\n const allowFreeText = !field?.strict && type !== 'boolean';\n\n const toggle = useCallback((value: string) => {\n setSelected(current => (current.includes(value) ? current.filter(v => v !== value) : [...current, value]));\n }, []);\n\n const commit = useCallback(\n (values: string | string[]) =>\n onCommit(Array.isArray(values) ? values.map(v => parseFieldValue(type, v)) : parseFieldValue(type, values)),\n [onCommit, type],\n );\n\n const handleSelect = useCallback(\n (option: FilterBarOption) => {\n if (isMany) toggle(option.value);\n else commit(option.value);\n },\n [isMany, toggle, commit],\n );\n\n const commitSelection = useCallback(() => {\n if (selected.length === 0) return false;\n commit(selected);\n return true;\n }, [selected, commit]);\n\n const canCommitFreeText = useCallback(\n (text: string) => allowFreeText && text.length > 0 && (type !== 'number' || Number.isFinite(Number(text))),\n [allowFreeText, type],\n );\n\n const commitFreeText = useCallback(() => {\n const text = query.trim();\n if (!canCommitFreeText(text)) return false;\n commit(isMany ? (selected.includes(text) ? selected : [...selected, text]) : text);\n return true;\n }, [canCommitFreeText, query, isMany, selected, commit]);\n\n /**\n * Enter handling that Base UI does not cover: Ctrl/Meta+Enter commits a\n * multi-selection; plain Enter with nothing highlighted commits free text.\n * Returns `true` when the event was consumed.\n */\n const handleKeyDown = useCallback(\n (event: KeyboardEvent, highlighted: FilterBarOption | null): boolean => {\n if (event.key !== 'Enter') return false;\n if (isMany && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n return commitSelection() || commitFreeText();\n }\n if (highlighted === null) {\n event.preventDefault();\n return commitFreeText();\n }\n return false;\n },\n [isMany, commitSelection, commitFreeText],\n );\n\n return {\n isMany,\n selected,\n toggle,\n options: suggestions.options,\n isLoading: suggestions.isLoading,\n error: suggestions.error,\n hasSuggestions: suggestions.hasSuggestions,\n allowFreeText,\n /** True when the current query can be committed as free text (non-empty, numeric when the field is a number). */\n canCommitQuery: canCommitFreeText(query.trim()),\n handleSelect,\n handleKeyDown,\n commitSelection,\n commitFreeText,\n };\n}\n","/* eslint-disable react-refresh/only-export-components */\nimport type { BaseUIEvent } from '@base-ui/react/types';\nimport { LockIcon, PencilIcon, SearchIcon, XIcon } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport type { AnimationEvent, CSSProperties, ComponentProps, KeyboardEvent, MouseEvent, ReactNode } from 'react';\nimport { emptyValueFor, useFilterBarContext } from './filter-bar-context';\nimport { FilterBarOptionLabel, FilterBarOptionList } from './filter-bar-option-list';\nimport { matchesQueryFilter } from './match-query';\nimport type {\n DraftStage,\n FilterBarField,\n FilterBarFieldType,\n FilterBarItem,\n FilterBarOperator,\n FilterBarOption,\n FilterBarScalar,\n FilterBarSegment,\n FilterBarValue,\n} from './types';\nimport { useValueStep } from './use-value-step';\nimport { getFieldSuggestions } from './use-value-suggestions';\nimport { Button } from '@/ds/components/Button/Button';\nimport { ComboboxPrimitive, comboboxStyles } from '@/ds/components/Combobox';\nimport { Kbd } from '@/ds/components/Kbd/kbd';\nimport { controlHeight } from '@/ds/primitives/control-size';\nimport type { ControlSize } from '@/ds/primitives/control-size';\nimport { FLOATING_POSITION_METHOD } from '@/ds/primitives/floating';\nimport { inputSurfaceAndFocusWithinStyle } from '@/ds/primitives/form-element';\nimport './filter-bar-chip.css';\nimport { MENU_SIDE_OFFSET } from '@/ds/primitives/menu-item';\nimport { usePortalContainer } from '@/ds/primitives/portal-container';\nimport { useIsApplePlatform } from '@/hooks/use-keyboard-shortcut-label';\nimport { cn } from '@/lib/utils';\n\n// `filter-bar-segment` carries the left-to-right entrance (see filter-bar-chip.css).\n// No `first:`/`last:` rounding here: a segment is not reliably the first or last child.\n// Base UI interleaves a hidden input after every combobox and wraps an open trigger in\n// focus guards, so the rounded end would silently drop the moment a popup opened and the\n// segment's own state fill — the one state a chip has — would paint square corners\n// straight through the chip's pill edge. The chip clips instead (see `chipClass`).\nexport const segmentClass = cn(\n 'filter-bar-segment flex max-w-48 min-w-0 items-center gap-1 overflow-hidden px-2 text-label whitespace-nowrap outline-none',\n);\n\n// A filter bar is a dense row: it sits above a list, carries many chips at once, and never\n// competes with the page's own controls. Chip and typeahead pill read this one rung so they\n// stay the same height by construction rather than by two call sites agreeing.\nexport const FILTER_BAR_CONTROL_SIZE: ControlSize = 'sm';\n\n// A chip is a field whose value is edited in place, so it wears the field material rather than a\n// fill rung: on a light canvas a `bg-fill` chip read as a grey slab beside the white typeahead\n// pill it belongs to. The segments layer their own state over that card, which is why the chip\n// keeps `divide-border` for the internal seams and takes its outer edge from the material's rim.\n// `overflow-hidden` is what gives every segment its end cap: the chip is the only node that\n// knows where the pill ends, and it keeps knowing it while a framework injects children.\nexport const chipClass = cn(\n 'filter-bar-chip relative flex max-w-full items-stretch divide-x divide-border overflow-hidden rounded-full',\n inputSurfaceAndFocusWithinStyle,\n controlHeight[FILTER_BAR_CONTROL_SIZE],\n);\n\nexport const editableSegmentClass = cn(\n segmentClass,\n 'cursor-pointer hover:bg-fill-subtle hover:text-foreground',\n 'focus-visible:bg-fill-hover focus-visible:text-foreground data-[popup-open]:bg-fill-hover data-[popup-open]:text-foreground',\n);\n\n/** Field label with its optional leading icon — used by chips, the draft chip and field option lists. */\nexport function FilterBarFieldLabel({ field, label }: { field: FilterBarField | undefined; label?: string }) {\n const Icon = field?.icon;\n return (\n <>\n {Icon && <Icon className=\"size-[1.1em] shrink-0\" aria-hidden />}\n <span className=\"truncate\">{label ?? field?.label}</span>\n </>\n );\n}\n\n/** Inline style carrying a field's accent onto its field segment (text + icon). */\nexport const fieldSegmentAccentStyle = (field: FilterBarField | undefined) =>\n field?.color ? { color: field.color } : undefined;\n\n/** Segments a chip already showed before its latest step, given how far its draft had got. */\nconst settledSegments = (from: DraftStage, operatorImplied: boolean): number => {\n if (from === 'none') return 0;\n if (from === 'field' || operatorImplied) return 1;\n return 2;\n};\n\nexport const formatValue = (value: FilterBarValue, field: FilterBarField | undefined): string => {\n const suggestions = getFieldSuggestions(field);\n const options = Array.isArray(suggestions) ? suggestions : undefined;\n const label = (v: FilterBarScalar) => options?.find(o => o.value === String(v))?.label ?? String(v);\n return Array.isArray(value) ? value.map(label).join(', ') : label(value);\n};\n\ntype ChipContext = {\n item: FilterBarItem;\n index: number;\n field: FilterBarField | undefined;\n operator: FilterBarOperator | undefined;\n openSegment: FilterBarSegment | null;\n setOpenSegment: (segment: FilterBarSegment | null) => void;\n readOnly: boolean;\n /** Filter still being built in the input: segments are inert labels. */\n draft: boolean;\n /** Filter already removed from the value, playing its exit: segments are inert labels. */\n leaving: boolean;\n /** The field allows a single operator, so the operator segment is not shown. */\n operatorImplied: boolean;\n};\n\nconst ChipContext = createContext<ChipContext | null>(null);\nconst useChip = () => {\n const chip = useContext(ChipContext);\n if (!chip) throw new Error('FilterBarChip segments must be rendered inside <FilterBarChip>.');\n return chip;\n};\n\nexport type FilterBarChipProps = {\n item: FilterBarItem;\n /** Locked chip: plain labels, no editors, no remove button. */\n readOnly?: boolean;\n /** `false` keeps the chip editable but drops the remove button and ignores Backspace/Delete. */\n removable?: boolean;\n /**\n * Render the filter being built in the input (see `FilterBarContextValue.draft`): only\n * the picked segments show, as inert labels. Keyed by the draft id, the same element\n * carries on as the editable chip once the value is committed.\n */\n draft?: boolean;\n className?: string;\n /** Custom segment composition; defaults to Field · Operator · Value · Remove. */\n children?: ReactNode;\n};\n\nfunction isInsidePopup(target: EventTarget | null) {\n return target instanceof Element && Boolean(target.closest('[data-slot=\"filter-bar-editor\"]'));\n}\n\nexport function FilterBarChip({\n item,\n readOnly = false,\n removable = true,\n draft = false,\n className,\n children,\n}: FilterBarChipProps) {\n const ctx = useFilterBarContext();\n const [openSegment, setOpenSegment] = useState<FilterBarSegment | null>(null);\n const field = ctx.getField(item.fieldId);\n const operator = ctx.getOperator(item.operatorId);\n const index = ctx.items.findIndex(i => i.id === item.id);\n const rootRef = useRef<HTMLDivElement>(null);\n const leaving = ctx.leaving.has(item.id);\n\n const pinned = !draft && (readOnly || !removable);\n const { registerNonRemovable, settleRemove } = ctx;\n useEffect(() => {\n registerNonRemovable(item.id, pinned);\n return () => registerNonRemovable(item.id, false);\n }, [registerNonRemovable, item.id, pinned]);\n\n // A leaving chip is released once its exit animation has finished. With nothing to\n // animate (no `interpolate-size`, reduced motion, jsdom) it is released straight away.\n useEffect(() => {\n const root = rootRef.current;\n if (!leaving || !root) return;\n const animations = typeof root.getAnimations === 'function' ? root.getAnimations({ subtree: true }) : [];\n if (animations.length === 0) {\n settleRemove(item.id);\n return;\n }\n let cancelled = false;\n Promise.all(animations.map(animation => animation.finished))\n .then(() => {\n if (!cancelled) settleRemove(item.id);\n })\n // Animations cancelled by an unmount reject `finished`; nothing left to settle.\n .catch(() => {});\n return () => {\n cancelled = true;\n };\n }, [leaving, item.id, settleRemove]);\n\n const operatorImplied = field ? ctx.getFieldOperators(field).length === 1 : false;\n const label = [\n field?.label ?? item.fieldId,\n operatorImplied ? '' : (operator?.label ?? item.operatorId),\n draft ? '' : formatValue(item.value, field),\n ]\n .filter(Boolean)\n .join(' ');\n\n // The provider records where each draft step (and the final commit) started from, so\n // the entrance stagger resumes after the segments already on screen and the chip\n // glints once when it lands as a filter (see filter-bar-chip.css).\n const commit = !draft && ctx.lastCommit?.item.id === item.id ? ctx.lastCommit : null;\n const from = draft ? (ctx.draft?.from ?? 'none') : (commit?.from ?? 'none');\n const settled = settledSegments(from, operatorImplied);\n const shine = commit?.glint ?? false;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (readOnly || draft || leaving || isInsidePopup(event.target)) return;\n const segments = Array.from(rootRef.current?.querySelectorAll<HTMLElement>('[data-filter-bar-segment]') ?? []);\n const current = segments.findIndex(el => el === event.target);\n\n switch (event.key) {\n case 'ArrowRight': {\n event.preventDefault();\n const next = segments[current + 1];\n if (next) next.focus();\n else if (!ctx.focusChip(index + 1, 1, 'field')) ctx.focusInput();\n return;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n const prev = segments[current - 1];\n if (prev) prev.focus();\n else ctx.focusChip(index - 1, -1, 'remove');\n return;\n }\n case 'Delete':\n case 'Backspace':\n if (!removable) return;\n event.preventDefault();\n ctx.removeItem(item.id);\n ctx.focusAfterRemove(index);\n return;\n default:\n }\n },\n [readOnly, draft, leaving, removable, ctx, index, item.id],\n );\n\n const chipValue = useMemo<ChipContext>(\n () => ({ item, index, field, operator, openSegment, setOpenSegment, readOnly, draft, leaving, operatorImplied }),\n [item, index, field, operator, openSegment, readOnly, draft, leaving, operatorImplied],\n );\n const content = children ?? (\n <>\n <FilterBarChipField />\n <FilterBarChipOperator />\n <FilterBarChipValue />\n {removable && <FilterBarChipRemove />}\n </>\n );\n return (\n <ChipContext.Provider value={chipValue}>\n <div\n ref={rootRef}\n role=\"group\"\n aria-label={label}\n // The input already announces the draft's progress through its placeholder.\n aria-hidden={draft || leaving || undefined}\n data-slot=\"filter-bar-chip\"\n data-draft={draft || undefined}\n data-readonly={readOnly || undefined}\n data-leaving={leaving || undefined}\n data-shine={(shine && !leaving) || undefined}\n className={cn(chipClass, leaving && 'pointer-events-none', className)}\n style={\n {\n '--filter-bar-segments-settled': settled,\n '--filter-bar-chip-shine': field?.color ?? 'currentColor',\n } as CSSProperties\n }\n onKeyDown={handleKeyDown}\n onClick={(event: MouseEvent) => event.stopPropagation()}\n onAnimationEnd={(event: AnimationEvent) => {\n if (event.animationName === 'filter-bar-chip-shine') ctx.settleCommit();\n }}\n >\n {readOnly && (\n <span\n className={cn(segmentClass, 'pr-0 text-muted-foreground [--filter-bar-segment-padding:0.5rem_0]')}\n title=\"This filter is locked\"\n >\n <LockIcon className=\"size-[1.1em]\" />\n </span>\n )}\n {content}\n </div>\n </ChipContext.Provider>\n );\n}\n\ntype SegmentComboboxProps<T> = {\n segment: Exclude<FilterBarSegment, 'remove'>;\n label: string;\n ariaLabel: string;\n items: readonly T[];\n itemToString: (item: T) => string;\n /** `null` when `items` are already filtered. */\n filter: null | ((item: T, query: string, itemToString?: (item: T) => string) => boolean);\n /** Current selection, surfaced through Base UI's `ItemIndicator`. */\n value?: T | null;\n query: string;\n onQueryChange: (query: string) => void;\n onSelect: (item: T) => void;\n onOpen?: () => void;\n /** Popup content: typically a `SegmentSearchInput` followed by a `FilterBarOptionList`. */\n children: ReactNode;\n};\n\n// Highlighted item of the enclosing SegmentCombobox, for popup inputs that route Enter.\nconst SegmentPopupContext = createContext<{ highlighted: unknown }>({ highlighted: null });\n\ntype SegmentSearchInputProps<T> = {\n placeholder: string;\n /** Leading icon. Defaults to a search glass; free-text editing uses a pencil. */\n icon?: LucideIcon;\n inputMode?: ComponentProps<'input'>['inputMode'];\n onKeyDown?: (event: BaseUIEvent<KeyboardEvent<HTMLInputElement>>, highlighted: T | null) => void;\n};\n\n/** The search/free-text input at the top of a segment popup. */\nfunction SegmentSearchInput<T>({\n placeholder,\n icon: Icon = SearchIcon,\n inputMode,\n onKeyDown,\n}: SegmentSearchInputProps<T>) {\n const { highlighted } = useContext(SegmentPopupContext);\n return (\n <div className={comboboxStyles.searchContainer}>\n <Icon className={comboboxStyles.searchIcon} />\n <ComboboxPrimitive.Input\n className={comboboxStyles.searchInput}\n placeholder={placeholder}\n inputMode={inputMode}\n onKeyDown={event => onKeyDown?.(event, highlighted as T | null)}\n />\n </div>\n );\n}\n\n/**\n * A chip segment: a button trigger that opens an option popup. The editor\n * owning the segment supplies items, filtering, selection routing and the\n * popup content.\n */\nfunction SegmentCombobox<T>({\n segment,\n label,\n ariaLabel,\n items,\n itemToString,\n filter,\n value = null,\n query,\n onQueryChange,\n onSelect,\n onOpen,\n children,\n}: SegmentComboboxProps<T>) {\n const ctx = useFilterBarContext();\n const chip = useChip();\n const container = usePortalContainer();\n const open = chip.openSegment === segment;\n const [highlighted, setHighlighted] = useState<T | null>(null);\n\n const isField = segment === 'field';\n const content = isField ? (\n <FilterBarFieldLabel field={chip.field} label={label} />\n ) : (\n <span className=\"truncate\">{label}</span>\n );\n\n if (chip.readOnly || chip.draft || chip.leaving) {\n return (\n <span\n className={cn(segmentClass, isField && 'text-foreground')}\n style={isField ? fieldSegmentAccentStyle(chip.field) : undefined}\n title={label}\n >\n {content}\n </span>\n );\n }\n\n return (\n <ComboboxPrimitive.Root<T>\n items={items}\n itemToStringLabel={itemToString}\n filter={filter}\n value={value}\n onValueChange={(item, details) => {\n // The editor decides what a pick means (and when to close); Base UI must not keep it.\n details.cancel();\n if (item !== null) onSelect(item);\n }}\n inputValue={query}\n onInputValueChange={(next, details) => {\n if (details.reason === 'input-change') onQueryChange(next);\n }}\n onItemHighlighted={item => setHighlighted(item ?? null)}\n open={open}\n onOpenChange={next => {\n if (next) onOpen?.();\n else onQueryChange('');\n chip.setOpenSegment(next ? segment : null);\n }}\n // See FilterBarInput: the runtime supports 'always' although ComboboxRoot types it as boolean.\n autoHighlight={'always' as unknown as boolean}\n modal={false}\n >\n <ComboboxPrimitive.Trigger\n ref={el => ctx.registerSegment(chip.item.id, segment, el)}\n render={\n <button\n type=\"button\"\n data-filter-bar-segment=\"\"\n tabIndex={segment === 'value' ? 0 : -1}\n aria-label={`${ariaLabel}: ${label}`}\n title={label}\n className={cn(editableSegmentClass, isField && 'text-foreground')}\n style={isField ? fieldSegmentAccentStyle(chip.field) : undefined}\n />\n }\n >\n {content}\n </ComboboxPrimitive.Trigger>\n <ComboboxPrimitive.Portal container={container}>\n <ComboboxPrimitive.Positioner\n align=\"start\"\n sideOffset={MENU_SIDE_OFFSET}\n positionMethod={FLOATING_POSITION_METHOD}\n className={comboboxStyles.positioner}\n >\n <ComboboxPrimitive.Popup className={cn(comboboxStyles.popup, 'min-w-44')} data-slot=\"filter-bar-editor\">\n <SegmentPopupContext.Provider value={{ highlighted }}>{children}</SegmentPopupContext.Provider>\n </ComboboxPrimitive.Popup>\n </ComboboxPrimitive.Positioner>\n </ComboboxPrimitive.Portal>\n </ComboboxPrimitive.Root>\n );\n}\n\nconst fieldLabel = (field: FilterBarField) => field.label;\nconst operatorLabel = (operator: FilterBarOperator) => operator.label;\nconst optionLabel = (option: FilterBarOption) => option.label ?? option.value;\n\nfunction FieldEditor() {\n const ctx = useFilterBarContext();\n const chip = useChip();\n const [query, setQuery] = useState('');\n\n const onSelect = useCallback(\n (field: FilterBarField) => {\n const allowed = ctx.getFieldOperators(field);\n const nextOperator = allowed.find(o => o.id === chip.item.operatorId) ?? allowed[0];\n const arityChanged = nextOperator?.arity !== chip.operator?.arity;\n ctx.updateItem(chip.item.id, {\n fieldId: field.id,\n operatorId: nextOperator?.id ?? chip.item.operatorId,\n value: arityChanged || field.id !== chip.item.fieldId ? emptyValueFor(nextOperator) : chip.item.value,\n });\n chip.setOpenSegment(null);\n },\n [ctx, chip],\n );\n\n return (\n <SegmentCombobox<FilterBarField>\n segment=\"field\"\n ariaLabel=\"Field\"\n label={chip.field?.label ?? chip.item.fieldId}\n items={ctx.fields}\n itemToString={fieldLabel}\n filter={matchesQueryFilter}\n value={chip.field}\n query={query}\n onQueryChange={setQuery}\n onSelect={onSelect}\n >\n <SegmentSearchInput placeholder=\"Change field…\" />\n <FilterBarOptionList<FilterBarField>\n aria-label=\"Fields\"\n getKey={f => f.id}\n renderOption={f => <FilterBarFieldLabel field={f} />}\n emptyText=\"No matching field.\"\n />\n </SegmentCombobox>\n );\n}\n\nfunction OperatorEditor() {\n const ctx = useFilterBarContext();\n const chip = useChip();\n const [query, setQuery] = useState('');\n const options = useMemo(() => (chip.field ? ctx.getFieldOperators(chip.field) : ctx.operators), [ctx, chip.field]);\n\n const onSelect = useCallback(\n (operator: FilterBarOperator) => {\n const arityChanged = (operator.arity ?? 'one') !== (chip.operator?.arity ?? 'one');\n ctx.updateItem(chip.item.id, {\n operatorId: operator.id,\n value: arityChanged ? emptyValueFor(operator) : chip.item.value,\n });\n chip.setOpenSegment(null);\n },\n [ctx, chip],\n );\n\n return (\n <SegmentCombobox<FilterBarOperator>\n segment=\"operator\"\n ariaLabel=\"Operator\"\n label={chip.operator?.label ?? chip.item.operatorId}\n items={options}\n itemToString={operatorLabel}\n filter={matchesQueryFilter}\n value={chip.operator}\n query={query}\n onQueryChange={setQuery}\n onSelect={onSelect}\n >\n <SegmentSearchInput placeholder=\"Change operator…\" />\n <FilterBarOptionList<FilterBarOperator>\n aria-label=\"Operators\"\n getKey={o => o.id}\n renderOption={o => o.label}\n emptyText=\"No matching operator.\"\n />\n </SegmentCombobox>\n );\n}\n\nfunction ValueEditor() {\n const ctx = useFilterBarContext();\n const chip = useChip();\n const open = chip.openSegment === 'value';\n const [query, setQuery] = useState('');\n\n const close = useCallback(() => chip.setOpenSegment(null), [chip]);\n const onCommit = useCallback(\n (value: FilterBarValue) => {\n ctx.updateItem(chip.item.id, { value });\n close();\n },\n [ctx, chip.item.id, close],\n );\n\n const step = useValueStep({\n field: chip.field,\n operator: chip.operator,\n query,\n enabled: open,\n initialValue: chip.item.value,\n onCommit,\n });\n\n const ValueInput = VALUE_INPUTS[chip.field?.type ?? 'text'];\n\n return (\n <SegmentCombobox<FilterBarOption>\n segment=\"value\"\n ariaLabel=\"Value\"\n label={formatValue(chip.item.value, chip.field) || '…'}\n items={step.options}\n itemToString={optionLabel}\n filter={null}\n query={query}\n onQueryChange={setQuery}\n onSelect={step.handleSelect}\n // Prefill free-text values only; with suggestions, the current value is shown as checked instead.\n onOpen={() =>\n setQuery(!Array.isArray(chip.item.value) && !chip.field?.suggestions ? String(chip.item.value) : '')\n }\n >\n <ValueInput step={step} onCancel={close} />\n </SegmentCombobox>\n );\n}\n\ntype ValueInputProps = {\n step: ReturnType<typeof useValueStep>;\n onCancel: () => void;\n};\n\n/** Suggestion list + multi-select footer, shared by every value input. */\nfunction ValueOptions({ step, onCancel }: ValueInputProps) {\n const chip = useChip();\n const modEnterLabel = useIsApplePlatform() ? '⌘↵' : 'Ctrl ↵';\n return (\n <>\n {step.hasSuggestions && (\n <FilterBarOptionList<FilterBarOption>\n aria-label=\"Values\"\n aria-multiselectable={step.isMany || undefined}\n getKey={o => o.value}\n renderOption={option => <FilterBarOptionLabel option={option} />}\n isSelected={o => (step.isMany ? step.selected.includes(o.value) : String(chip.item.value) === o.value)}\n isLoading={step.isLoading}\n error={step.error}\n emptyText={step.allowFreeText ? 'No suggestions — press Enter to use your text.' : 'No matching value.'}\n />\n )}\n {step.isMany && (\n <div className=\"flex items-center justify-end gap-1 border-t border-border p-1\">\n <Button size=\"sm\" variant=\"ghost\" onClick={onCancel}>\n Cancel\n </Button>\n <Button size=\"sm\" variant=\"default\" onClick={() => step.commitSelection() || step.commitFreeText()}>\n Done\n <Kbd size=\"xs\">{modEnterLabel}</Kbd>\n </Button>\n </div>\n )}\n </>\n );\n}\n\n/** Free-text (optionally suggestion-backed) value input; text and number share it. */\nfunction FreeTextValueInput({\n step,\n onCancel,\n inputMode,\n noun,\n}: ValueInputProps & { inputMode?: ComponentProps<'input'>['inputMode']; noun: string }) {\n return (\n <>\n <SegmentSearchInput<FilterBarOption>\n icon={step.hasSuggestions ? SearchIcon : PencilIcon}\n inputMode={inputMode}\n placeholder={\n step.hasSuggestions\n ? step.allowFreeText\n ? `Search or type a ${noun}…`\n : `Search ${noun}s…`\n : `Type a ${noun}…`\n }\n onKeyDown={(event, highlighted) => {\n const highlightedOption = step.hasSuggestions ? highlighted : null;\n const handled = step.handleKeyDown(event, highlightedOption);\n // Base UI closes on Enter when nothing is highlighted; a rejected free-text value must keep the editor open.\n if (handled || (event.key === 'Enter' && highlightedOption === null)) event.preventBaseUIHandler();\n }}\n />\n <ValueOptions step={step} onCancel={onCancel} />\n </>\n );\n}\n\nfunction TextValueInput(props: ValueInputProps) {\n return <FreeTextValueInput {...props} noun=\"value\" />;\n}\n\nfunction NumberValueInput(props: ValueInputProps) {\n return <FreeTextValueInput {...props} inputMode=\"decimal\" noun=\"number\" />;\n}\n\n/** Select-like: no search input, just the True/False (or custom) options. */\nfunction BooleanValueInput(props: ValueInputProps) {\n return <ValueOptions {...props} />;\n}\n\nconst VALUE_INPUTS: Record<FilterBarFieldType, (props: ValueInputProps) => ReactNode> = {\n text: TextValueInput,\n number: NumberValueInput,\n boolean: BooleanValueInput,\n};\n\nexport function FilterBarChipField() {\n return <FieldEditor />;\n}\n\nexport function FilterBarChipOperator() {\n const chip = useChip();\n if (chip.operatorImplied) return null;\n if (chip.draft && !chip.operator) return null;\n return <OperatorEditor />;\n}\n\nexport function FilterBarChipValue() {\n const chip = useChip();\n if (chip.draft || (chip.operator?.arity ?? 'one') === 'none') return null;\n return <ValueEditor />;\n}\n\nexport function FilterBarChipRemove() {\n const ctx = useFilterBarContext();\n const chip = useChip();\n if (chip.readOnly || chip.draft) return null;\n const removeClass = cn(editableSegmentClass, 'px-1.5 text-muted-foreground [--filter-bar-segment-padding:0.375rem]');\n if (chip.leaving) {\n // Keep the × on screen so it folds away with the other segments.\n return (\n <span className={removeClass}>\n <XIcon className=\"size-[1.1em]\" />\n </span>\n );\n }\n const label = `Remove ${chip.field?.label ?? chip.item.fieldId} filter`;\n return (\n <button\n type=\"button\"\n data-filter-bar-segment=\"\"\n tabIndex={-1}\n aria-label={label}\n title={label}\n ref={el => ctx.registerSegment(chip.item.id, 'remove', el)}\n className={removeClass}\n onClick={() => {\n ctx.removeItem(chip.item.id);\n ctx.focusAfterRemove(chip.index);\n }}\n >\n <XIcon className=\"size-[1.1em]\" />\n </button>\n );\n}\n\nFilterBarChip.Field = FilterBarChipField;\nFilterBarChip.Operator = FilterBarChipOperator;\nFilterBarChip.Value = FilterBarChipValue;\nFilterBarChip.Remove = FilterBarChipRemove;\n"],"names":["rendered","leaving","rootGroupOf","value","updateItem","updateTreeItem","items","ComboboxPrimitive"],"mappings":"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"}
@@ -118,9 +118,41 @@
118
118
  animation: filter-bar-chip-shine 420ms cubic-bezier(0.4, 0, 0.2, 1) 60ms both;
119
119
  }
120
120
 
121
+ /* The advanced-filter chip is a `.filter-bar-chip` (same entrance and fold-shut exit).
122
+ * Inside its popover, a nested group block fades and collapses when removed; the
123
+ * connector toggles arrive like a segment. */
124
+ @keyframes filter-bar-nested-out {
125
+ from {
126
+ height: auto;
127
+ opacity: 1;
128
+ }
129
+
130
+ to {
131
+ height: 0;
132
+ opacity: 0;
133
+ margin-block: 0;
134
+ }
135
+ }
136
+
137
+ @supports (interpolate-size: allow-keywords) {
138
+ .filter-bar-editor-nested[data-leaving] {
139
+ interpolate-size: allow-keywords;
140
+ overflow: hidden;
141
+ animation: filter-bar-nested-out 200ms cubic-bezier(0.2, 0.8, 0.2, 1) forwards;
142
+ }
143
+
144
+ .filter-bar-logic {
145
+ --filter-bar-segment-padding: 0.25rem;
146
+ interpolate-size: allow-keywords;
147
+ animation: filter-bar-segment-in 160ms cubic-bezier(0.2, 0.8, 0.2, 1) backwards;
148
+ }
149
+ }
150
+
121
151
  @media (prefers-reduced-motion: reduce) {
122
152
  .filter-bar-segment,
123
- .filter-bar-chip[data-leaving] {
153
+ .filter-bar-chip[data-leaving],
154
+ .filter-bar-editor-nested[data-leaving],
155
+ .filter-bar-logic {
124
156
  animation: none;
125
157
  }
126
158
 
@@ -56,6 +56,9 @@ function pickNearest({
56
56
  }
57
57
  const ACTIVE_ATTR = "data-fluid-hover-active";
58
58
  const ACTIVE_INDEX_ATTR = "data-fluid-hover-active-index";
59
+ function isFromInside(e) {
60
+ return e.target instanceof Node && e.currentTarget.contains(e.target);
61
+ }
59
62
  const ACTIVATOR_SELECTOR = "a[href], button, [role='menuitem'], [role='menuitemradio'], [role='menuitemcheckbox'], [role='option'], [role='radio'], [role='checkbox'], [role='tab'], [role='link'], [role='button']";
60
63
  function resolveActivator(element) {
61
64
  if (element.matches(ACTIVATOR_SELECTOR) || element.hasAttribute("tabindex")) {
@@ -102,7 +105,7 @@ function useFluidHover(containerRef, options = {}) {
102
105
  let top = element.offsetTop;
103
106
  let left = element.offsetLeft;
104
107
  let ancestor = element.offsetParent;
105
- while (ancestor && ancestor !== container && container.contains(ancestor)) {
108
+ while (ancestor instanceof HTMLElement && ancestor !== container && container.contains(ancestor)) {
106
109
  top += ancestor.offsetTop + ancestor.clientTop;
107
110
  left += ancestor.offsetLeft + ancestor.clientLeft;
108
111
  ancestor = ancestor.offsetParent;
@@ -174,12 +177,14 @@ function useFluidHover(containerRef, options = {}) {
174
177
  setActiveIndex((current) => current === index && !itemsRef.current.has(index) ? null : current);
175
178
  }
176
179
  }
177
- remeasure();
180
+ if (activeIndexRef.current === null) remeasure();
181
+ else scheduleMeasurement(measurementAttempts);
178
182
  },
179
- [remeasure, getItemRo]
183
+ [remeasure, scheduleMeasurement, getItemRo]
180
184
  );
181
185
  const handleMouseMove = React.useCallback(
182
186
  (e) => {
187
+ if (!isFromInside(e)) return;
183
188
  const mouseX = e.clientX;
184
189
  const mouseY = e.clientY;
185
190
  if (rafIdRef.current !== null) {
@@ -208,10 +213,12 @@ function useFluidHover(containerRef, options = {}) {
208
213
  },
209
214
  [axis, containerRef, isItemDisabled]
210
215
  );
211
- const handleMouseEnter = React.useCallback(() => {
216
+ const handleMouseEnter = React.useCallback((e) => {
217
+ if (!isFromInside(e)) return;
212
218
  sessionRef.current += 1;
213
219
  }, []);
214
- const handleMouseLeave = React.useCallback(() => {
220
+ const handleMouseLeave = React.useCallback((e) => {
221
+ if (!isFromInside(e)) return;
215
222
  if (rafIdRef.current !== null) {
216
223
  cancelAnimationFrame(rafIdRef.current);
217
224
  rafIdRef.current = null;
@@ -220,13 +227,12 @@ function useFluidHover(containerRef, options = {}) {
220
227
  }, []);
221
228
  const handleClick = React.useCallback(
222
229
  (e) => {
223
- const target = e.target;
224
- if (!target) return;
230
+ const { target } = e;
231
+ if (!(target instanceof Element) || !isFromInside(e)) return;
225
232
  for (const element2 of itemsRef.current.values()) {
226
233
  if (element2.contains(target)) return;
227
234
  }
228
- if (!target.isConnected) return;
229
- const control = target.closest?.(
235
+ const control = target.closest(
230
236
  "input, textarea, select, button, a, summary, [contenteditable], [role='textbox'], [role='searchbox'], [role='button']"
231
237
  );
232
238
  if (control) return;
@@ -1 +1 @@
1
- {"version":3,"file":"use-fluid-hover.cjs.js","sources":["../../src/hooks/use-fluid-hover.ts"],"sourcesContent":["'use client';\n\nimport { useRef, useState, useCallback, useEffect, type Dispatch, type RefObject, type SetStateAction } from 'react';\n\nexport interface ItemRect {\n top: number;\n height: number;\n left: number;\n width: number;\n}\n\nexport interface UseFluidHoverOptions {\n /**\n * Which direction to resolve the nearest item along.\n * \"y\" — vertical lists (default): closest by top/height\n * \"x\" — horizontal strips: closest by left/width\n * \"xy\" — 2-D grids: closest card across both rows AND columns,\n * measured by Euclidean distance to each item's center\n */\n axis?: 'x' | 'y' | 'xy';\n /**\n * Makes an item invisible to hit-testing without unregistering it — for\n * rows that stay mounted while clipped away (a collapsed sub-tree).\n * Unregistering would invalidate every measurement; a skipped item keeps\n * the set stable. Consulted per mouse move, so keep it cheap.\n */\n isItemDisabled?: (element: HTMLElement) => boolean;\n /**\n * Whether a click that lands between items (a gap, the padding, past the\n * last row) is routed to the highlighted item, so what is lit is what a\n * click hits. On by default: in a menu or a list the highlight is a\n * promise about the click. Pass `false` where empty space should stay\n * inert (rows with destructive actions, generous whitespace), or\n * `{ maxDistance }` to route only clicks within that many pixels of the\n * highlighted item's edge.\n */\n gapClick?: boolean | { maxDistance?: number };\n}\n\nexport interface UseFluidHoverReturn {\n activeIndex: number | null;\n setActiveIndex: Dispatch<SetStateAction<number | null>>;\n itemRects: ItemRect[];\n /**\n * True once every registered item has been measured and no remeasure is\n * pending, i.e. `itemRects` describes the current item set. Gate absolutely\n * positioned overlays on it: an overlay that mounts against a rect a later\n * pass still corrects animates from the wrong place to the right one, which\n * reads as the highlight sliding in from another row.\n */\n isMeasured: boolean;\n sessionRef: RefObject<number>;\n handlers: {\n onMouseMove: (e: React.MouseEvent) => void;\n onMouseEnter: () => void;\n onMouseLeave: () => void;\n /**\n * Routes a click that lands between items (a gap, the padding, past the\n * last row) to the highlighted item, so the highlight and the click agree:\n * what is lit is what a click hits. A click inside an item is left to the\n * item. Disabled items (`isItemDisabled`) are never activated.\n */\n onClick: (e: React.MouseEvent) => void;\n };\n registerItem: (index: number, element: HTMLElement | null) => void;\n /**\n * Invalidates the published rects and runs the hook's coalesced measurement\n * pass again, holding `isMeasured` false until it settles. Reach for it when\n * the rects may be wrong and showing an overlay against them would misplace\n * it: a popup that stays mounted between opens keeps its items registered,\n * so nothing else would notice that its rects were taken while it was\n * hidden. Registration, item resize, and container resize already trigger\n * a pass; do not call this on `children` changes.\n */\n remeasure: () => void;\n /**\n * Re-reads the rects synchronously, keeping `isMeasured` as it is. Only for\n * layout that moves the rows under a visible overlay frame by frame (the\n * accordion re-measures inside its height animation). Everything else\n * wants `remeasure`, or nothing.\n */\n measureItems: () => void;\n}\n\nexport interface PickNearestInput {\n axis: 'x' | 'y' | 'xy';\n /** The pointer, in viewport coordinates. */\n point: { x: number; y: number };\n /** Item rects in the container's layout space (sparse: unregistered slots\n * are undefined). */\n rects: readonly (ItemRect | undefined)[];\n /** The container's bounding rect and live scroll / border offsets, which\n * map layout rects into the pointer's viewport space. */\n containerRect: { left: number; top: number; width: number; height: number };\n scroll: { x: number; y: number };\n border: { x: number; y: number };\n /** Layout size of the container, so a cumulative ancestor `transform:\n * scale` (a popup mid scale-in) can be factored out per axis. */\n layoutSize: { width: number; height: number };\n /** Skips an item without unregistering it. */\n isDisabled?: (index: number) => boolean;\n}\n\n/**\n * The rule, as one pure function: an item the pointer is inside wins;\n * otherwise the item whose center is nearest does, so a pointer in a gap, in\n * the padding, or past the last row still lands. `y` and `x` measure one\n * coordinate; `xy` measures the straight line to each center. Ties keep the\n * first item. The hook calls this once per animation frame; the docs page\n * times it.\n */\nexport function pickNearest({\n axis,\n point,\n rects,\n containerRect,\n scroll,\n border,\n layoutSize,\n isDisabled,\n}: PickNearestInput): number | null {\n const scaleX = layoutSize.width > 0 ? containerRect.width / layoutSize.width : 1;\n const scaleY = layoutSize.height > 0 ? containerRect.height / layoutSize.height : 1;\n let closestIndex: number | null = null;\n let closestDistance = Infinity;\n let containingIndex: number | null = null;\n\n for (let index = 0; index < rects.length; index++) {\n const r = rects[index];\n if (!r) continue;\n if (isDisabled?.(index)) continue;\n\n if (axis === 'xy') {\n const left = containerRect.left + (border.x + r.left - scroll.x) * scaleX;\n const top = containerRect.top + (border.y + r.top - scroll.y) * scaleY;\n const width = r.width * scaleX;\n const height = r.height * scaleY;\n if (point.x >= left && point.x <= left + width && point.y >= top && point.y <= top + height) {\n containingIndex = index;\n }\n const distance = Math.hypot(point.x - (left + width / 2), point.y - (top + height / 2));\n if (distance < closestDistance) {\n closestDistance = distance;\n closestIndex = index;\n }\n continue;\n }\n\n const horizontal = axis === 'x';\n const mousePos = horizontal ? point.x : point.y;\n const scale = horizontal ? scaleX : scaleY;\n const itemStart =\n (horizontal ? containerRect.left : containerRect.top) +\n ((horizontal ? border.x : border.y) + (horizontal ? r.left : r.top) - (horizontal ? scroll.x : scroll.y)) * scale;\n const itemSize = (horizontal ? r.width : r.height) * scale;\n if (mousePos >= itemStart && mousePos <= itemStart + itemSize) {\n containingIndex = index;\n }\n const distance = Math.abs(mousePos - (itemStart + itemSize / 2));\n if (distance < closestDistance) {\n closestDistance = distance;\n closestIndex = index;\n }\n }\n\n return containingIndex ?? closestIndex;\n}\n\n/** Set on the highlighted item (boolean attribute). */\nexport const ACTIVE_ATTR = 'data-fluid-hover-active';\n/** Set on the container: the highlighted index, or absent. */\nexport const ACTIVE_INDEX_ATTR = 'data-fluid-hover-active-index';\n\nconst ACTIVATOR_SELECTOR =\n \"a[href], button, [role='menuitem'], [role='menuitemradio'], [role='menuitemcheckbox'], [role='option'], [role='radio'], [role='checkbox'], [role='tab'], [role='link'], [role='button']\";\n\n/**\n * The element a routed click should land on. A registered item is usually\n * the interactive row itself; when it is only a box around one (a sidebar\n * row around its button, a card around its link), the first control inside\n * is what a real click on the row would have reached.\n */\nfunction resolveActivator(element: HTMLElement): HTMLElement {\n if (element.matches(ACTIVATOR_SELECTOR) || element.hasAttribute('tabindex')) {\n return element;\n }\n return element.querySelector<HTMLElement>(ACTIVATOR_SELECTOR) ?? element;\n}\n\n/**\n * How many frames the coalesced remeasure retries while the registered items\n * still have no layout box. A popup can be in the DOM one frame before it is\n * laid out; retrying beats publishing zeroed rects, and the cap keeps a list\n * that stays hidden for good from spinning frames forever.\n */\nconst measurementAttempts = 3;\n\nexport function useFluidHover<T extends HTMLElement>(\n containerRef: RefObject<T | null>,\n options: UseFluidHoverOptions = {},\n): UseFluidHoverReturn {\n const { axis = 'y', isItemDisabled, gapClick = true } = options;\n const gapClickMaxDistance = typeof gapClick === 'object' ? (gapClick.maxDistance ?? Infinity) : Infinity;\n const itemsRef = useRef(new Map<number, HTMLElement>());\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n // Mirrored for handlers that read it outside a render (the gap click).\n const activeIndexRef = useRef<number | null>(null);\n activeIndexRef.current = activeIndex;\n\n // The state, in the DOM: `data-fluid-hover-active` on the highlighted item\n // and `data-fluid-hover-active-index` on the container. Devtools shows it\n // and a test asserts on it without waiting for a frame. React does not\n // manage these attributes, so it never clobbers them.\n useEffect(() => {\n const container = containerRef.current;\n if (activeIndex === null) container?.removeAttribute(ACTIVE_INDEX_ATTR);\n else container?.setAttribute(ACTIVE_INDEX_ATTR, String(activeIndex));\n const active = activeIndex === null ? undefined : itemsRef.current.get(activeIndex);\n active?.setAttribute(ACTIVE_ATTR, '');\n return () => {\n active?.removeAttribute(ACTIVE_ATTR);\n // A row that re-registered under this index while it was highlighted\n // (a remount under a new key) was marked by registerItem, not by this\n // effect: drop the mark from whatever element holds the index now.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- itemsRef is a registry Map, reading it at cleanup is the point\n if (activeIndex !== null) itemsRef.current.get(activeIndex)?.removeAttribute(ACTIVE_ATTR);\n };\n }, [activeIndex, containerRef]);\n const [itemRects, setItemRects] = useState<ItemRect[]>([]);\n const [isMeasured, setIsMeasured] = useState(false);\n const itemRectsRef = useRef<ItemRect[]>([]);\n const sessionRef = useRef(0);\n const rafIdRef = useRef<number | null>(null);\n const remeasureRafIdRef = useRef<number | null>(null);\n\n /**\n * Publishes a rect for every registered item. Returns false when the\n * measurement could not be completed (no container, or an item without a\n * layout box) — nothing is published in that case, so the last complete\n * measurement stands instead of being overwritten with zeroes.\n */\n const runMeasurement = useCallback(() => {\n const container = containerRef.current;\n if (!container) return false;\n const rects: ItemRect[] = [];\n let everyItemHasLayout = true;\n itemsRef.current.forEach((element, index) => {\n // An element inside a display:none / not-yet-laid-out popup has no\n // offsetParent and reports every offset as 0. Publishing that would pin\n // overlays to the top of the list, so treat the whole pass as\n // incomplete. A boxless element is the only case: `position: fixed`\n // items also have no offsetParent but do have a size.\n const hasLayoutBox = element.offsetParent !== null || element.offsetWidth > 0 || element.offsetHeight > 0;\n if (!hasLayoutBox) {\n everyItemHasLayout = false;\n return;\n }\n // Use offset* instead of getBoundingClientRect so measurements are\n // unaffected by CSS transforms (e.g. scaleY animation on the parent\n // motion.div). offsetTop/offsetLeft are layout values relative to the\n // offsetParent (the scroll container), matching the coordinate space\n // used by `position: absolute` children. Items nested inside positioned\n // descendants of the container (a sidebar sub-menu's rows live inside a\n // positioned row) accumulate those ancestors' offsets, so every rect\n // lands in the container's own coordinate space; for a flat list the\n // loop never runs and this is exactly the plain offsetTop/offsetLeft.\n let top = element.offsetTop;\n let left = element.offsetLeft;\n let ancestor = element.offsetParent as HTMLElement | null;\n while (ancestor && ancestor !== container && container.contains(ancestor)) {\n top += ancestor.offsetTop + ancestor.clientTop;\n left += ancestor.offsetLeft + ancestor.clientLeft;\n ancestor = ancestor.offsetParent as HTMLElement | null;\n }\n rects[index] = {\n top,\n height: element.offsetHeight,\n left,\n width: element.offsetWidth,\n };\n });\n if (!everyItemHasLayout) return false;\n // Skip the state update when nothing moved (a cheap top/left/width/height\n // compare) so redundant remeasures don't churn re-renders.\n const prev = itemRectsRef.current;\n let changed = prev.length !== rects.length;\n for (let i = 0; !changed && i < rects.length; i++) {\n const p = prev[i];\n const r = rects[i];\n if (p === r) continue; // both undefined (sparse slot)\n changed = !p || !r || p.top !== r.top || p.left !== r.left || p.width !== r.width || p.height !== r.height;\n }\n if (changed) {\n itemRectsRef.current = rects;\n setItemRects(rects);\n }\n return true;\n }, [containerRef]);\n\n const measureItems = useCallback(() => {\n runMeasurement();\n }, [runMeasurement]);\n\n /**\n * The hook's single measurement pass: coalesces every trigger (item\n * registration, container resize) into one remeasure on the next frame and\n * is the only place readiness is reported, so `isMeasured` can never turn\n * true while another pass is still queued.\n */\n const scheduleMeasurement = useCallback(\n (attemptsLeft: number) => {\n if (remeasureRafIdRef.current !== null) {\n cancelAnimationFrame(remeasureRafIdRef.current);\n }\n remeasureRafIdRef.current = requestAnimationFrame(() => {\n remeasureRafIdRef.current = null;\n if (runMeasurement()) {\n setIsMeasured(true);\n } else if (attemptsLeft > 1) {\n scheduleMeasurement(attemptsLeft - 1);\n }\n });\n },\n [runMeasurement],\n );\n\n const remeasure = useCallback(() => {\n // Readiness drops first: until the pass below settles, the published rects\n // may not describe what is on screen, and an overlay positioned from them\n // would be corrected after mounting — which animates as a slide.\n setIsMeasured(false);\n scheduleMeasurement(measurementAttempts);\n }, [scheduleMeasurement]);\n\n // Observes the registered items themselves (not just the container): rows\n // that change size in place — e.g. the site-wide size step flipping while a\n // selection background is up — must invalidate the published rects even when\n // the container the effect below captured has since been remounted and the\n // ref points at a different element than the one being observed.\n const itemRoRef = useRef<ResizeObserver | null>(null);\n const getItemRo = useCallback(() => {\n if (itemRoRef.current === null && typeof ResizeObserver !== 'undefined') {\n itemRoRef.current = new ResizeObserver(() => scheduleMeasurement(measurementAttempts));\n }\n return itemRoRef.current;\n }, [scheduleMeasurement]);\n\n const registerItem = useCallback(\n (index: number, element: HTMLElement | null) => {\n if (element) {\n itemsRef.current.set(index, element);\n getItemRo()?.observe(element);\n if (index === activeIndexRef.current) element.setAttribute(ACTIVE_ATTR, '');\n } else {\n const previous = itemsRef.current.get(index);\n if (previous) itemRoRef.current?.unobserve(previous);\n // The mark leaves with the element: a row that only moved to another\n // index (a filtering list re-ordering) must not carry it there.\n previous?.removeAttribute(ACTIVE_ATTR);\n itemsRef.current.delete(index);\n // The highlighted row is gone: nothing should stay lit or receive a\n // routed click until the pointer picks again. Decided when the\n // update applies, after this commit's registrations, so a row that\n // only moved index hands the highlight to the row now under it.\n if (index === activeIndexRef.current) {\n setActiveIndex(current => (current === index && !itemsRef.current.has(index) ? null : current));\n }\n }\n // Coalesce rapid register/unregister calls (e.g. when an AnimatePresence\n // remounts a list of rows) into a single remeasure on the next frame,\n // so consumers don't have to manually call measureItems after the\n // container's children swap.\n remeasure();\n },\n [remeasure, getItemRo],\n );\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n const mouseX = e.clientX;\n const mouseY = e.clientY;\n\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n }\n\n rafIdRef.current = requestAnimationFrame(() => {\n rafIdRef.current = null;\n const container = containerRef.current;\n if (!container) return;\n setActiveIndex(\n pickNearest({\n axis,\n point: { x: mouseX, y: mouseY },\n rects: itemRectsRef.current,\n containerRect: container.getBoundingClientRect(),\n scroll: { x: container.scrollLeft, y: container.scrollTop },\n border: { x: container.clientLeft, y: container.clientTop },\n layoutSize: { width: container.offsetWidth, height: container.offsetHeight },\n isDisabled: isItemDisabled\n ? index => {\n const el = itemsRef.current.get(index);\n return !!el && isItemDisabled(el);\n }\n : undefined,\n }),\n );\n });\n },\n [axis, containerRef, isItemDisabled],\n );\n\n const handleMouseEnter = useCallback(() => {\n sessionRef.current += 1;\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = null;\n }\n setActiveIndex(null);\n }, []);\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n const target = e.target as Node | null;\n if (!target) return;\n // Inside an item: the item owns the click.\n for (const element of itemsRef.current.values()) {\n if (element.contains(target)) return;\n }\n // A row that unmounted while its own click was still bubbling (a pick\n // whose primitive re-renders the list synchronously, like a \"create\"\n // row that becomes a real item) already landed; it is not a gap.\n if (!target.isConnected) return;\n // A control that sits between the rows (a search field at the top of\n // a menu, a footer button) keeps its own click too.\n const control = (target as Element).closest?.(\n \"input, textarea, select, button, a, summary, [contenteditable], [role='textbox'], [role='searchbox'], [role='button']\",\n );\n if (control) return;\n if (gapClick === false) return;\n const index = activeIndexRef.current;\n if (index === null) return;\n const element = itemsRef.current.get(index);\n if (!element || isItemDisabled?.(element)) return;\n if (gapClickMaxDistance !== Infinity) {\n const r = element.getBoundingClientRect();\n const dx = Math.max(r.left - e.clientX, 0, e.clientX - r.right);\n const dy = Math.max(r.top - e.clientY, 0, e.clientY - r.bottom);\n if (Math.hypot(dx, dy) > gapClickMaxDistance) return;\n }\n // A real DOM click on the item, so its own handlers (and the primitive\n // wrapping it, if any) run exactly as if the pointer had been inside.\n resolveActivator(element).click();\n },\n [isItemDisabled, gapClick, gapClickMaxDistance],\n );\n\n // Remeasure when the container resizes — a reflow moves items even though\n // the registered set is unchanged, which would otherwise leave itemRects\n // stale. Coalesced through the same rAF as register/unregister. Readiness is\n // deliberately not dropped: the item set is unchanged, so the published rects\n // stay usable, and hiding overlays on every reflow would flicker them.\n useEffect(() => {\n const container = containerRef.current;\n if (!container || typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(() => scheduleMeasurement(measurementAttempts));\n ro.observe(container);\n return () => ro.disconnect();\n }, [containerRef, scheduleMeasurement]);\n\n // Clean up rAF and the item observer on unmount\n useEffect(() => {\n return () => {\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n }\n if (remeasureRafIdRef.current !== null) {\n cancelAnimationFrame(remeasureRafIdRef.current);\n }\n itemRoRef.current?.disconnect();\n itemRoRef.current = null;\n };\n }, []);\n\n return {\n activeIndex,\n setActiveIndex,\n itemRects,\n isMeasured,\n sessionRef,\n handlers: {\n onMouseMove: handleMouseMove,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onClick: handleClick,\n },\n registerItem,\n remeasure,\n measureItems,\n };\n}\n\n/**\n * Registers an item's element with its list for as long as it is mounted.\n * The one way rows join a list: pass the hook's `registerItem` (or the copy\n * a context hands down), the row's index, and its ref. Either may be\n * missing for a row rendered outside a list (a standalone card, an accordion\n * item that is not grouped); then nothing is registered.\n */\nexport function useRegisterFluidHoverItem(\n registerItem: ((index: number, element: HTMLElement | null) => void) | undefined,\n index: number | undefined,\n ref: RefObject<HTMLElement | null>,\n) {\n useEffect(() => {\n if (!registerItem || index === undefined) return;\n registerItem(index, ref.current);\n return () => registerItem(index, null);\n }, [index, registerItem, ref]);\n}\n"],"names":["distance","useRef","useState","useEffect","useCallback","element"],"mappings":"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"}
1
+ {"version":3,"file":"use-fluid-hover.cjs.js","sources":["../../src/hooks/use-fluid-hover.ts"],"sourcesContent":["'use client';\n\nimport { useRef, useState, useCallback, useEffect, type Dispatch, type RefObject, type SetStateAction } from 'react';\n\nexport interface ItemRect {\n top: number;\n height: number;\n left: number;\n width: number;\n}\n\nexport interface UseFluidHoverOptions {\n /**\n * Which direction to resolve the nearest item along.\n * \"y\" — vertical lists (default): closest by top/height\n * \"x\" — horizontal strips: closest by left/width\n * \"xy\" — 2-D grids: closest card across both rows AND columns,\n * measured by Euclidean distance to each item's center\n */\n axis?: 'x' | 'y' | 'xy';\n /**\n * Makes an item invisible to hit-testing without unregistering it — for\n * rows that stay mounted while clipped away (a collapsed sub-tree).\n * Unregistering would invalidate every measurement; a skipped item keeps\n * the set stable. Consulted per mouse move, so keep it cheap.\n */\n isItemDisabled?: (element: HTMLElement) => boolean;\n /**\n * Whether a click that lands between items (a gap, the padding, past the\n * last row) is routed to the highlighted item, so what is lit is what a\n * click hits. On by default: in a menu or a list the highlight is a\n * promise about the click. Pass `false` where empty space should stay\n * inert (rows with destructive actions, generous whitespace), or\n * `{ maxDistance }` to route only clicks within that many pixels of the\n * highlighted item's edge.\n */\n gapClick?: boolean | { maxDistance?: number };\n}\n\nexport interface UseFluidHoverReturn {\n activeIndex: number | null;\n setActiveIndex: Dispatch<SetStateAction<number | null>>;\n itemRects: ItemRect[];\n /**\n * True once every registered item has been measured and no remeasure is\n * pending, i.e. `itemRects` describes the current item set. Gate absolutely\n * positioned overlays on it: an overlay that mounts against a rect a later\n * pass still corrects animates from the wrong place to the right one, which\n * reads as the highlight sliding in from another row.\n */\n isMeasured: boolean;\n sessionRef: RefObject<number>;\n /**\n * Events whose target sits outside the container in the DOM are ignored:\n * React bubbles events from a portaled child (a submenu) through its React\n * parents, and those must not steer or click this list.\n */\n handlers: {\n onMouseMove: (e: React.MouseEvent) => void;\n onMouseEnter: (e: React.MouseEvent) => void;\n onMouseLeave: (e: React.MouseEvent) => void;\n /**\n * Routes a click that lands between items (a gap, the padding, past the\n * last row) to the highlighted item, so the highlight and the click agree:\n * what is lit is what a click hits. A click inside an item is left to the\n * item. Disabled items (`isItemDisabled`) are never activated.\n */\n onClick: (e: React.MouseEvent) => void;\n };\n registerItem: (index: number, element: HTMLElement | null) => void;\n /**\n * Invalidates the published rects and runs the hook's coalesced measurement\n * pass again, holding `isMeasured` false until it settles. Reach for it when\n * the rects may be wrong and showing an overlay against them would misplace\n * it: a popup that stays mounted between opens keeps its items registered,\n * so nothing else would notice that its rects were taken while it was\n * hidden. Registration, item resize, and container resize already trigger\n * a pass; do not call this on `children` changes.\n */\n remeasure: () => void;\n /**\n * Re-reads the rects synchronously, keeping `isMeasured` as it is. Only for\n * layout that moves the rows under a visible overlay frame by frame (the\n * accordion re-measures inside its height animation). Everything else\n * wants `remeasure`, or nothing.\n */\n measureItems: () => void;\n}\n\nexport interface PickNearestInput {\n axis: 'x' | 'y' | 'xy';\n /** The pointer, in viewport coordinates. */\n point: { x: number; y: number };\n /** Item rects in the container's layout space (sparse: unregistered slots\n * are undefined). */\n rects: readonly (ItemRect | undefined)[];\n /** The container's bounding rect and live scroll / border offsets, which\n * map layout rects into the pointer's viewport space. */\n containerRect: { left: number; top: number; width: number; height: number };\n scroll: { x: number; y: number };\n border: { x: number; y: number };\n /** Layout size of the container, so a cumulative ancestor `transform:\n * scale` (a popup mid scale-in) can be factored out per axis. */\n layoutSize: { width: number; height: number };\n /** Skips an item without unregistering it. */\n isDisabled?: (index: number) => boolean;\n}\n\n/**\n * The rule, as one pure function: an item the pointer is inside wins;\n * otherwise the item whose center is nearest does, so a pointer in a gap, in\n * the padding, or past the last row still lands. `y` and `x` measure one\n * coordinate; `xy` measures the straight line to each center. Ties keep the\n * first item. The hook calls this once per animation frame; the docs page\n * times it.\n */\nexport function pickNearest({\n axis,\n point,\n rects,\n containerRect,\n scroll,\n border,\n layoutSize,\n isDisabled,\n}: PickNearestInput): number | null {\n const scaleX = layoutSize.width > 0 ? containerRect.width / layoutSize.width : 1;\n const scaleY = layoutSize.height > 0 ? containerRect.height / layoutSize.height : 1;\n let closestIndex: number | null = null;\n let closestDistance = Infinity;\n let containingIndex: number | null = null;\n\n for (let index = 0; index < rects.length; index++) {\n const r = rects[index];\n if (!r) continue;\n if (isDisabled?.(index)) continue;\n\n if (axis === 'xy') {\n const left = containerRect.left + (border.x + r.left - scroll.x) * scaleX;\n const top = containerRect.top + (border.y + r.top - scroll.y) * scaleY;\n const width = r.width * scaleX;\n const height = r.height * scaleY;\n if (point.x >= left && point.x <= left + width && point.y >= top && point.y <= top + height) {\n containingIndex = index;\n }\n const distance = Math.hypot(point.x - (left + width / 2), point.y - (top + height / 2));\n if (distance < closestDistance) {\n closestDistance = distance;\n closestIndex = index;\n }\n continue;\n }\n\n const horizontal = axis === 'x';\n const mousePos = horizontal ? point.x : point.y;\n const scale = horizontal ? scaleX : scaleY;\n const itemStart =\n (horizontal ? containerRect.left : containerRect.top) +\n ((horizontal ? border.x : border.y) + (horizontal ? r.left : r.top) - (horizontal ? scroll.x : scroll.y)) * scale;\n const itemSize = (horizontal ? r.width : r.height) * scale;\n if (mousePos >= itemStart && mousePos <= itemStart + itemSize) {\n containingIndex = index;\n }\n const distance = Math.abs(mousePos - (itemStart + itemSize / 2));\n if (distance < closestDistance) {\n closestDistance = distance;\n closestIndex = index;\n }\n }\n\n return containingIndex ?? closestIndex;\n}\n\n/** Set on the highlighted item (boolean attribute). */\nexport const ACTIVE_ATTR = 'data-fluid-hover-active';\n/** Set on the container: the highlighted index, or absent. */\nexport const ACTIVE_INDEX_ATTR = 'data-fluid-hover-active-index';\n\n/** False for an event bubbled through React from a portal outside the container, and for a detached target. */\nfunction isFromInside(e: React.SyntheticEvent) {\n return e.target instanceof Node && e.currentTarget.contains(e.target);\n}\n\nconst ACTIVATOR_SELECTOR =\n \"a[href], button, [role='menuitem'], [role='menuitemradio'], [role='menuitemcheckbox'], [role='option'], [role='radio'], [role='checkbox'], [role='tab'], [role='link'], [role='button']\";\n\n/**\n * The element a routed click should land on. A registered item is usually\n * the interactive row itself; when it is only a box around one (a sidebar\n * row around its button, a card around its link), the first control inside\n * is what a real click on the row would have reached.\n */\nfunction resolveActivator(element: HTMLElement): HTMLElement {\n if (element.matches(ACTIVATOR_SELECTOR) || element.hasAttribute('tabindex')) {\n return element;\n }\n return element.querySelector<HTMLElement>(ACTIVATOR_SELECTOR) ?? element;\n}\n\n/**\n * How many frames the coalesced remeasure retries while the registered items\n * still have no layout box. A popup can be in the DOM one frame before it is\n * laid out; retrying beats publishing zeroed rects, and the cap keeps a list\n * that stays hidden for good from spinning frames forever.\n */\nconst measurementAttempts = 3;\n\nexport function useFluidHover<T extends HTMLElement>(\n containerRef: RefObject<T | null>,\n options: UseFluidHoverOptions = {},\n): UseFluidHoverReturn {\n const { axis = 'y', isItemDisabled, gapClick = true } = options;\n const gapClickMaxDistance = typeof gapClick === 'object' ? (gapClick.maxDistance ?? Infinity) : Infinity;\n const itemsRef = useRef(new Map<number, HTMLElement>());\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n // Mirrored for handlers that read it outside a render (the gap click).\n const activeIndexRef = useRef<number | null>(null);\n activeIndexRef.current = activeIndex;\n\n // The state, in the DOM: `data-fluid-hover-active` on the highlighted item\n // and `data-fluid-hover-active-index` on the container. Devtools shows it\n // and a test asserts on it without waiting for a frame. React does not\n // manage these attributes, so it never clobbers them.\n useEffect(() => {\n const container = containerRef.current;\n if (activeIndex === null) container?.removeAttribute(ACTIVE_INDEX_ATTR);\n else container?.setAttribute(ACTIVE_INDEX_ATTR, String(activeIndex));\n const active = activeIndex === null ? undefined : itemsRef.current.get(activeIndex);\n active?.setAttribute(ACTIVE_ATTR, '');\n return () => {\n active?.removeAttribute(ACTIVE_ATTR);\n // A row that re-registered under this index while it was highlighted\n // (a remount under a new key) was marked by registerItem, not by this\n // effect: drop the mark from whatever element holds the index now.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- itemsRef is a registry Map, reading it at cleanup is the point\n if (activeIndex !== null) itemsRef.current.get(activeIndex)?.removeAttribute(ACTIVE_ATTR);\n };\n }, [activeIndex, containerRef]);\n const [itemRects, setItemRects] = useState<ItemRect[]>([]);\n const [isMeasured, setIsMeasured] = useState(false);\n const itemRectsRef = useRef<ItemRect[]>([]);\n const sessionRef = useRef(0);\n const rafIdRef = useRef<number | null>(null);\n const remeasureRafIdRef = useRef<number | null>(null);\n\n /**\n * Publishes a rect for every registered item. Returns false when the\n * measurement could not be completed (no container, or an item without a\n * layout box) — nothing is published in that case, so the last complete\n * measurement stands instead of being overwritten with zeroes.\n */\n const runMeasurement = useCallback(() => {\n const container = containerRef.current;\n if (!container) return false;\n const rects: ItemRect[] = [];\n let everyItemHasLayout = true;\n itemsRef.current.forEach((element, index) => {\n // An element inside a display:none / not-yet-laid-out popup has no\n // offsetParent and reports every offset as 0. Publishing that would pin\n // overlays to the top of the list, so treat the whole pass as\n // incomplete. A boxless element is the only case: `position: fixed`\n // items also have no offsetParent but do have a size.\n const hasLayoutBox = element.offsetParent !== null || element.offsetWidth > 0 || element.offsetHeight > 0;\n if (!hasLayoutBox) {\n everyItemHasLayout = false;\n return;\n }\n // Use offset* instead of getBoundingClientRect so measurements are\n // unaffected by CSS transforms (e.g. scaleY animation on the parent\n // motion.div). offsetTop/offsetLeft are layout values relative to the\n // offsetParent (the scroll container), matching the coordinate space\n // used by `position: absolute` children. Items nested inside positioned\n // descendants of the container (a sidebar sub-menu's rows live inside a\n // positioned row) accumulate those ancestors' offsets, so every rect\n // lands in the container's own coordinate space; for a flat list the\n // loop never runs and this is exactly the plain offsetTop/offsetLeft.\n let top = element.offsetTop;\n let left = element.offsetLeft;\n let ancestor = element.offsetParent;\n while (ancestor instanceof HTMLElement && ancestor !== container && container.contains(ancestor)) {\n top += ancestor.offsetTop + ancestor.clientTop;\n left += ancestor.offsetLeft + ancestor.clientLeft;\n ancestor = ancestor.offsetParent;\n }\n rects[index] = {\n top,\n height: element.offsetHeight,\n left,\n width: element.offsetWidth,\n };\n });\n if (!everyItemHasLayout) return false;\n // Skip the state update when nothing moved (a cheap top/left/width/height\n // compare) so redundant remeasures don't churn re-renders.\n const prev = itemRectsRef.current;\n let changed = prev.length !== rects.length;\n for (let i = 0; !changed && i < rects.length; i++) {\n const p = prev[i];\n const r = rects[i];\n if (p === r) continue; // both undefined (sparse slot)\n changed = !p || !r || p.top !== r.top || p.left !== r.left || p.width !== r.width || p.height !== r.height;\n }\n if (changed) {\n itemRectsRef.current = rects;\n setItemRects(rects);\n }\n return true;\n }, [containerRef]);\n\n const measureItems = useCallback(() => {\n runMeasurement();\n }, [runMeasurement]);\n\n /**\n * The hook's single measurement pass: coalesces every trigger (item\n * registration, container resize) into one remeasure on the next frame and\n * is the only place readiness is reported, so `isMeasured` can never turn\n * true while another pass is still queued.\n */\n const scheduleMeasurement = useCallback(\n (attemptsLeft: number) => {\n if (remeasureRafIdRef.current !== null) {\n cancelAnimationFrame(remeasureRafIdRef.current);\n }\n remeasureRafIdRef.current = requestAnimationFrame(() => {\n remeasureRafIdRef.current = null;\n if (runMeasurement()) {\n setIsMeasured(true);\n } else if (attemptsLeft > 1) {\n scheduleMeasurement(attemptsLeft - 1);\n }\n });\n },\n [runMeasurement],\n );\n\n const remeasure = useCallback(() => {\n // Readiness drops first: until the pass below settles, the published rects\n // may not describe what is on screen, and an overlay positioned from them\n // would be corrected after mounting — which animates as a slide.\n setIsMeasured(false);\n scheduleMeasurement(measurementAttempts);\n }, [scheduleMeasurement]);\n\n // Observes the registered items themselves (not just the container): rows\n // that change size in place — e.g. the site-wide size step flipping while a\n // selection background is up — must invalidate the published rects even when\n // the container the effect below captured has since been remounted and the\n // ref points at a different element than the one being observed.\n const itemRoRef = useRef<ResizeObserver | null>(null);\n const getItemRo = useCallback(() => {\n if (itemRoRef.current === null && typeof ResizeObserver !== 'undefined') {\n itemRoRef.current = new ResizeObserver(() => scheduleMeasurement(measurementAttempts));\n }\n return itemRoRef.current;\n }, [scheduleMeasurement]);\n\n const registerItem = useCallback(\n (index: number, element: HTMLElement | null) => {\n if (element) {\n itemsRef.current.set(index, element);\n getItemRo()?.observe(element);\n if (index === activeIndexRef.current) element.setAttribute(ACTIVE_ATTR, '');\n } else {\n const previous = itemsRef.current.get(index);\n if (previous) itemRoRef.current?.unobserve(previous);\n // The mark leaves with the element: a row that only moved to another\n // index (a filtering list re-ordering) must not carry it there.\n previous?.removeAttribute(ACTIVE_ATTR);\n itemsRef.current.delete(index);\n // The highlighted row is gone: nothing should stay lit or receive a\n // routed click until the pointer picks again. Decided when the\n // update applies, after this commit's registrations, so a row that\n // only moved index hands the highlight to the row now under it.\n if (index === activeIndexRef.current) {\n setActiveIndex(current => (current === index && !itemsRef.current.has(index) ? null : current));\n }\n }\n // Coalesce rapid register/unregister calls (e.g. when an AnimatePresence\n // remounts a list of rows) into a single remeasure on the next frame,\n // so consumers don't have to manually call measureItems after the\n // container's children swap. A lit row keeps its element (unregistering\n // it clears the highlight), so its rect stays good while the pass runs:\n // dropping readiness then would blink the highlight every time a\n // virtualized list mounts a row while scrolling.\n if (activeIndexRef.current === null) remeasure();\n else scheduleMeasurement(measurementAttempts);\n },\n [remeasure, scheduleMeasurement, getItemRo],\n );\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n if (!isFromInside(e)) return;\n const mouseX = e.clientX;\n const mouseY = e.clientY;\n\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n }\n\n rafIdRef.current = requestAnimationFrame(() => {\n rafIdRef.current = null;\n const container = containerRef.current;\n if (!container) return;\n setActiveIndex(\n pickNearest({\n axis,\n point: { x: mouseX, y: mouseY },\n rects: itemRectsRef.current,\n containerRect: container.getBoundingClientRect(),\n scroll: { x: container.scrollLeft, y: container.scrollTop },\n border: { x: container.clientLeft, y: container.clientTop },\n layoutSize: { width: container.offsetWidth, height: container.offsetHeight },\n isDisabled: isItemDisabled\n ? index => {\n const el = itemsRef.current.get(index);\n return !!el && isItemDisabled(el);\n }\n : undefined,\n }),\n );\n });\n },\n [axis, containerRef, isItemDisabled],\n );\n\n const handleMouseEnter = useCallback((e: React.MouseEvent) => {\n if (!isFromInside(e)) return;\n sessionRef.current += 1;\n }, []);\n\n const handleMouseLeave = useCallback((e: React.MouseEvent) => {\n if (!isFromInside(e)) return;\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = null;\n }\n setActiveIndex(null);\n }, []);\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n // Outside the container in the DOM: a portaled child's click, or a row\n // that unmounted while its own click was still bubbling (a pick whose\n // primitive re-renders the list synchronously). Neither is a gap.\n const { target } = e;\n if (!(target instanceof Element) || !isFromInside(e)) return;\n // Inside an item: the item owns the click.\n for (const element of itemsRef.current.values()) {\n if (element.contains(target)) return;\n }\n // A control that sits between the rows (a search field at the top of\n // a menu, a footer button) keeps its own click too.\n const control = target.closest(\n \"input, textarea, select, button, a, summary, [contenteditable], [role='textbox'], [role='searchbox'], [role='button']\",\n );\n if (control) return;\n if (gapClick === false) return;\n const index = activeIndexRef.current;\n if (index === null) return;\n const element = itemsRef.current.get(index);\n if (!element || isItemDisabled?.(element)) return;\n if (gapClickMaxDistance !== Infinity) {\n const r = element.getBoundingClientRect();\n const dx = Math.max(r.left - e.clientX, 0, e.clientX - r.right);\n const dy = Math.max(r.top - e.clientY, 0, e.clientY - r.bottom);\n if (Math.hypot(dx, dy) > gapClickMaxDistance) return;\n }\n // A real DOM click on the item, so its own handlers (and the primitive\n // wrapping it, if any) run exactly as if the pointer had been inside.\n resolveActivator(element).click();\n },\n [isItemDisabled, gapClick, gapClickMaxDistance],\n );\n\n // Remeasure when the container resizes — a reflow moves items even though\n // the registered set is unchanged, which would otherwise leave itemRects\n // stale. Coalesced through the same rAF as register/unregister. Readiness is\n // deliberately not dropped: the item set is unchanged, so the published rects\n // stay usable, and hiding overlays on every reflow would flicker them.\n useEffect(() => {\n const container = containerRef.current;\n if (!container || typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(() => scheduleMeasurement(measurementAttempts));\n ro.observe(container);\n return () => ro.disconnect();\n }, [containerRef, scheduleMeasurement]);\n\n // Clean up rAF and the item observer on unmount\n useEffect(() => {\n return () => {\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n }\n if (remeasureRafIdRef.current !== null) {\n cancelAnimationFrame(remeasureRafIdRef.current);\n }\n itemRoRef.current?.disconnect();\n itemRoRef.current = null;\n };\n }, []);\n\n return {\n activeIndex,\n setActiveIndex,\n itemRects,\n isMeasured,\n sessionRef,\n handlers: {\n onMouseMove: handleMouseMove,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onClick: handleClick,\n },\n registerItem,\n remeasure,\n measureItems,\n };\n}\n\n/**\n * Registers an item's element with its list for as long as it is mounted.\n * The one way rows join a list: pass the hook's `registerItem` (or the copy\n * a context hands down), the row's index, and its ref. Either may be\n * missing for a row rendered outside a list (a standalone card, an accordion\n * item that is not grouped); then nothing is registered.\n */\nexport function useRegisterFluidHoverItem(\n registerItem: ((index: number, element: HTMLElement | null) => void) | undefined,\n index: number | undefined,\n ref: RefObject<HTMLElement | null>,\n) {\n useEffect(() => {\n if (!registerItem || index === undefined) return;\n registerItem(index, ref.current);\n return () => registerItem(index, null);\n }, [index, registerItem, ref]);\n}\n"],"names":["distance","useRef","useState","useEffect","useCallback","element"],"mappings":"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"}