@flanksource/clicky-ui 0.3.27 → 0.3.29

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 (1438) hide show
  1. package/NOTICE.md +14 -0
  2. package/dist/ai.cjs +52 -6
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +53 -7
  5. package/dist/ai.js.map +1 -1
  6. package/dist/comments/CommentAuthor.d.ts +1 -1
  7. package/dist/comments/CommentAuthor.d.ts.map +1 -1
  8. package/dist/comments/CommentCard.cjs +24 -39
  9. package/dist/comments/CommentCard.cjs.map +1 -1
  10. package/dist/comments/CommentCard.d.ts +11 -4
  11. package/dist/comments/CommentCard.d.ts.map +1 -1
  12. package/dist/comments/CommentCard.js +24 -39
  13. package/dist/comments/CommentCard.js.map +1 -1
  14. package/dist/comments/CommentComposer.d.ts +1 -1
  15. package/dist/comments/CommentComposer.d.ts.map +1 -1
  16. package/dist/comments/CommentFilterBar.d.ts +1 -1
  17. package/dist/comments/CommentFilterBar.d.ts.map +1 -1
  18. package/dist/comments/CommentMarkdown.d.ts +1 -1
  19. package/dist/comments/CommentMarkdown.d.ts.map +1 -1
  20. package/dist/comments/CommentProgress.d.ts +1 -1
  21. package/dist/comments/CommentProgress.d.ts.map +1 -1
  22. package/dist/comments/CommentProvider.cjs +4 -3
  23. package/dist/comments/CommentProvider.cjs.map +1 -1
  24. package/dist/comments/CommentProvider.d.ts +7 -2
  25. package/dist/comments/CommentProvider.d.ts.map +1 -1
  26. package/dist/comments/CommentProvider.js +4 -3
  27. package/dist/comments/CommentProvider.js.map +1 -1
  28. package/dist/comments/CommentSidePanel.cjs +65 -52
  29. package/dist/comments/CommentSidePanel.cjs.map +1 -1
  30. package/dist/comments/CommentSidePanel.d.ts +1 -1
  31. package/dist/comments/CommentSidePanel.d.ts.map +1 -1
  32. package/dist/comments/CommentSidePanel.js +67 -54
  33. package/dist/comments/CommentSidePanel.js.map +1 -1
  34. package/dist/comments/CommentThread.cjs +2 -2
  35. package/dist/comments/CommentThread.cjs.map +1 -1
  36. package/dist/comments/CommentThread.d.ts +4 -4
  37. package/dist/comments/CommentThread.d.ts.map +1 -1
  38. package/dist/comments/CommentThread.js +2 -2
  39. package/dist/comments/CommentThread.js.map +1 -1
  40. package/dist/comments/CommentThreadList.cjs +85 -37
  41. package/dist/comments/CommentThreadList.cjs.map +1 -1
  42. package/dist/comments/CommentThreadList.d.ts +4 -4
  43. package/dist/comments/CommentThreadList.d.ts.map +1 -1
  44. package/dist/comments/CommentThreadList.js +86 -38
  45. package/dist/comments/CommentThreadList.js.map +1 -1
  46. package/dist/comments/GroupedComments.d.ts +1 -1
  47. package/dist/comments/GroupedComments.d.ts.map +1 -1
  48. package/dist/comments/MentionTextarea.d.ts +1 -1
  49. package/dist/comments/comment-context.d.ts +4 -4
  50. package/dist/comments/comment-fixtures.d.ts +1 -1
  51. package/dist/comments/comment-types.d.ts +1 -1
  52. package/dist/comments/comment-utils.cjs +26 -0
  53. package/dist/comments/comment-utils.cjs.map +1 -1
  54. package/dist/comments/comment-utils.d.ts +11 -0
  55. package/dist/comments/comment-utils.d.ts.map +1 -1
  56. package/dist/comments/comment-utils.js +26 -0
  57. package/dist/comments/comment-utils.js.map +1 -1
  58. package/dist/comments.cjs +2 -0
  59. package/dist/comments.cjs.map +1 -1
  60. package/dist/comments.js +3 -1
  61. package/dist/components/AccordionList.cjs +3 -0
  62. package/dist/components/AccordionList.cjs.map +1 -1
  63. package/dist/components/AccordionList.d.ts +4 -2
  64. package/dist/components/AccordionList.d.ts.map +1 -1
  65. package/dist/components/AccordionList.js +3 -0
  66. package/dist/components/AccordionList.js.map +1 -1
  67. package/dist/components/Combobox.cjs +6 -6
  68. package/dist/components/Combobox.cjs.map +1 -1
  69. package/dist/components/Combobox.d.ts +1 -1
  70. package/dist/components/Combobox.d.ts.map +1 -1
  71. package/dist/components/Combobox.js +2 -2
  72. package/dist/components/Combobox.js.map +1 -1
  73. package/dist/components/ComboboxActions.d.ts +1 -1
  74. package/dist/components/ComboboxActions.d.ts.map +1 -1
  75. package/dist/components/ComboboxControl.cjs +3 -2
  76. package/dist/components/ComboboxControl.cjs.map +1 -1
  77. package/dist/components/ComboboxControl.d.ts +5 -5
  78. package/dist/components/ComboboxControl.d.ts.map +1 -1
  79. package/dist/components/ComboboxControl.js +2 -1
  80. package/dist/components/ComboboxControl.js.map +1 -1
  81. package/dist/components/ComboboxMenu.cjs +154 -134
  82. package/dist/components/ComboboxMenu.cjs.map +1 -1
  83. package/dist/components/ComboboxMenu.d.ts +4 -4
  84. package/dist/components/ComboboxMenu.d.ts.map +1 -1
  85. package/dist/components/ComboboxMenu.js +154 -134
  86. package/dist/components/ComboboxMenu.js.map +1 -1
  87. package/dist/components/ComboboxTags.d.ts +1 -1
  88. package/dist/components/ComboboxTags.d.ts.map +1 -1
  89. package/dist/components/ConnectionLoggingPolicy.d.ts +1 -1
  90. package/dist/components/ConnectionLoggingPolicy.d.ts.map +1 -1
  91. package/dist/components/CopyButton.cjs +35 -0
  92. package/dist/components/CopyButton.cjs.map +1 -0
  93. package/dist/components/CopyButton.d.ts +20 -0
  94. package/dist/components/CopyButton.d.ts.map +1 -0
  95. package/dist/components/CopyButton.js +35 -0
  96. package/dist/components/CopyButton.js.map +1 -0
  97. package/dist/components/CountryFlag.d.ts +1 -1
  98. package/dist/components/CountryFlag.d.ts.map +1 -1
  99. package/dist/components/CountryPicker.d.ts +1 -1
  100. package/dist/components/CountryPicker.d.ts.map +1 -1
  101. package/dist/components/DaemonSetIcon.d.ts +1 -1
  102. package/dist/components/DaemonSetIcon.d.ts.map +1 -1
  103. package/dist/components/DateField.d.ts +3 -3
  104. package/dist/components/DatePicker.d.ts +3 -3
  105. package/dist/components/DateTimePicker.d.ts +3 -3
  106. package/dist/components/DimensionField.d.ts +1 -1
  107. package/dist/components/DimensionField.d.ts.map +1 -1
  108. package/dist/components/EndpointSelector.d.ts +1 -1
  109. package/dist/components/EndpointSelector.d.ts.map +1 -1
  110. package/dist/components/ErrorWrapper.d.ts +2 -2
  111. package/dist/components/Field.d.ts +2 -2
  112. package/dist/components/Field.d.ts.map +1 -1
  113. package/dist/components/FilterBar.cjs +129 -91
  114. package/dist/components/FilterBar.cjs.map +1 -1
  115. package/dist/components/FilterBar.d.ts +13 -4
  116. package/dist/components/FilterBar.d.ts.map +1 -1
  117. package/dist/components/FilterBar.js +130 -92
  118. package/dist/components/FilterBar.js.map +1 -1
  119. package/dist/components/FormLookupProvider.d.ts +2 -2
  120. package/dist/components/FormLookupProvider.d.ts.map +1 -1
  121. package/dist/components/FormatOptionsDropdown.d.ts +2 -2
  122. package/dist/components/FormatOptionsDropdown.d.ts.map +1 -1
  123. package/dist/components/IconButton.d.ts +3 -3
  124. package/dist/components/InputField.d.ts +2 -2
  125. package/dist/components/ItemActions.d.ts +2 -2
  126. package/dist/components/ItemActions.d.ts.map +1 -1
  127. package/dist/components/JSONPathField.d.ts +1 -1
  128. package/dist/components/JSONPathField.d.ts.map +1 -1
  129. package/dist/components/JSONPathPlayground.d.ts +1 -1
  130. package/dist/components/JSONPathPlayground.d.ts.map +1 -1
  131. package/dist/components/JsonSchemaForm.d.ts +1 -1
  132. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  133. package/dist/components/ListMenu.cjs +4 -1
  134. package/dist/components/ListMenu.cjs.map +1 -1
  135. package/dist/components/ListMenu.d.ts +10 -6
  136. package/dist/components/ListMenu.d.ts.map +1 -1
  137. package/dist/components/ListMenu.js +4 -1
  138. package/dist/components/ListMenu.js.map +1 -1
  139. package/dist/components/MdxEditorCallout.d.ts +2 -2
  140. package/dist/components/MdxEditorCallout.d.ts.map +1 -1
  141. package/dist/components/MdxEditorField.d.ts +1 -1
  142. package/dist/components/MdxEditorField.d.ts.map +1 -1
  143. package/dist/components/MdxEditorToolbar.d.ts +1 -1
  144. package/dist/components/MdxEditorToolbar.d.ts.map +1 -1
  145. package/dist/components/MultiSelect.d.ts +2 -2
  146. package/dist/components/MultiSelect.d.ts.map +1 -1
  147. package/dist/components/NamespacePicker.d.ts +1 -1
  148. package/dist/components/NamespacePicker.d.ts.map +1 -1
  149. package/dist/components/OnePasswordSelector.d.ts +1 -1
  150. package/dist/components/OnePasswordSelector.d.ts.map +1 -1
  151. package/dist/components/RangeSlider.d.ts +1 -1
  152. package/dist/components/RangeSlider.d.ts.map +1 -1
  153. package/dist/components/SearchInput.d.ts +2 -2
  154. package/dist/components/SearchInput.d.ts.map +1 -1
  155. package/dist/components/SecretFormField.d.ts +1 -1
  156. package/dist/components/SecretFormField.d.ts.map +1 -1
  157. package/dist/components/SecretKeySelector.d.ts +1 -1
  158. package/dist/components/SecretKeySelector.d.ts.map +1 -1
  159. package/dist/components/SegmentedControl.cjs +4 -2
  160. package/dist/components/SegmentedControl.cjs.map +1 -1
  161. package/dist/components/SegmentedControl.d.ts +6 -2
  162. package/dist/components/SegmentedControl.d.ts.map +1 -1
  163. package/dist/components/SegmentedControl.js +4 -2
  164. package/dist/components/SegmentedControl.js.map +1 -1
  165. package/dist/components/SplitButton.d.ts +2 -2
  166. package/dist/components/SplitButton.d.ts.map +1 -1
  167. package/dist/components/Switch.d.ts +2 -2
  168. package/dist/components/Switch.d.ts.map +1 -1
  169. package/dist/components/TimeRange.d.ts +1 -1
  170. package/dist/components/TimeRange.d.ts.map +1 -1
  171. package/dist/components/TreePickerField.d.ts +2 -2
  172. package/dist/components/TreePickerField.d.ts.map +1 -1
  173. package/dist/components/TriStateToggle.d.ts +1 -1
  174. package/dist/components/TriStateToggle.d.ts.map +1 -1
  175. package/dist/components/UnitStepControls.d.ts +2 -2
  176. package/dist/components/UnitStepControls.d.ts.map +1 -1
  177. package/dist/components/WorkloadPicker.d.ts +1 -1
  178. package/dist/components/WorkloadPicker.d.ts.map +1 -1
  179. package/dist/components/button.d.ts +3 -3
  180. package/dist/components/clipboard.cjs +60 -0
  181. package/dist/components/clipboard.cjs.map +1 -0
  182. package/dist/components/clipboard.d.ts +13 -0
  183. package/dist/components/clipboard.d.ts.map +1 -0
  184. package/dist/components/clipboard.js +60 -0
  185. package/dist/components/clipboard.js.map +1 -0
  186. package/dist/components/combobox-types.d.ts +1 -1
  187. package/dist/components/density-switcher.d.ts +1 -1
  188. package/dist/components/filter-bar-context.d.ts +1 -1
  189. package/dist/components/filter-bar-field-utils.d.ts +2 -2
  190. package/dist/components/filter-bar-field-utils.js +1 -1
  191. package/dist/components/filter-bar-multi.d.ts +3 -3
  192. package/dist/components/filter-bar-multi.d.ts.map +1 -1
  193. package/dist/components/form-lookup-context.d.ts +1 -1
  194. package/dist/components/icon-menu-picker.cjs.map +1 -1
  195. package/dist/components/icon-menu-picker.d.ts +2 -2
  196. package/dist/components/icon-menu-picker.d.ts.map +1 -1
  197. package/dist/components/icon-menu-picker.js.map +1 -1
  198. package/dist/components/jotai-bindings.d.ts +2 -2
  199. package/dist/components/jotai-bindings.d.ts.map +1 -1
  200. package/dist/components/json-schema-form-accordion-array.d.ts +1 -1
  201. package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -1
  202. package/dist/components/json-schema-form-array.cjs +15 -1
  203. package/dist/components/json-schema-form-array.cjs.map +1 -1
  204. package/dist/components/json-schema-form-array.d.ts +1 -1
  205. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  206. package/dist/components/json-schema-form-array.js +15 -1
  207. package/dist/components/json-schema-form-array.js.map +1 -1
  208. package/dist/components/json-schema-form-cards-array.d.ts +1 -1
  209. package/dist/components/json-schema-form-cards-array.d.ts.map +1 -1
  210. package/dist/components/json-schema-form-discriminator.d.ts +1 -1
  211. package/dist/components/json-schema-form-error-display.d.ts +3 -3
  212. package/dist/components/json-schema-form-error-display.d.ts.map +1 -1
  213. package/dist/components/json-schema-form-extensions.d.ts +1 -1
  214. package/dist/components/json-schema-form-fields.d.ts +12 -12
  215. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  216. package/dist/components/json-schema-form-grid.d.ts +1 -1
  217. package/dist/components/json-schema-form-grid.d.ts.map +1 -1
  218. package/dist/components/json-schema-form-item-row.d.ts +4 -4
  219. package/dist/components/json-schema-form-item-row.d.ts.map +1 -1
  220. package/dist/components/json-schema-form-layout.d.ts +6 -6
  221. package/dist/components/json-schema-form-layout.d.ts.map +1 -1
  222. package/dist/components/json-schema-form-list-array.cjs +113 -0
  223. package/dist/components/json-schema-form-list-array.cjs.map +1 -0
  224. package/dist/components/json-schema-form-list-array.d.ts +7 -0
  225. package/dist/components/json-schema-form-list-array.d.ts.map +1 -0
  226. package/dist/components/json-schema-form-list-array.js +113 -0
  227. package/dist/components/json-schema-form-list-array.js.map +1 -0
  228. package/dist/components/json-schema-form-lookup-tree.d.ts +1 -1
  229. package/dist/components/json-schema-form-lookup-tree.d.ts.map +1 -1
  230. package/dist/components/json-schema-form-object.d.ts +2 -2
  231. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  232. package/dist/components/json-schema-form-render.d.ts +1 -1
  233. package/dist/components/json-schema-form-resolve.cjs +1 -1
  234. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  235. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  236. package/dist/components/json-schema-form-resolve.js +1 -1
  237. package/dist/components/json-schema-form-resolve.js.map +1 -1
  238. package/dist/components/json-schema-form-table-array.d.ts +1 -1
  239. package/dist/components/json-schema-form-table-array.d.ts.map +1 -1
  240. package/dist/components/json-schema-form-tags-combobox.cjs +2 -2
  241. package/dist/components/json-schema-form-tags-combobox.cjs.map +1 -1
  242. package/dist/components/json-schema-form-tags-combobox.d.ts +1 -1
  243. package/dist/components/json-schema-form-tags-combobox.d.ts.map +1 -1
  244. package/dist/components/json-schema-form-tags-combobox.js +1 -1
  245. package/dist/components/json-schema-form-tags-combobox.js.map +1 -1
  246. package/dist/components/json-schema-form-template-menu.d.ts +2 -2
  247. package/dist/components/json-schema-form-template-menu.d.ts.map +1 -1
  248. package/dist/components/json-schema-form-template.d.ts +1 -1
  249. package/dist/components/json-schema-form-types.d.ts +2 -2
  250. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  251. package/dist/components/loading.d.ts +4 -4
  252. package/dist/components/mdx-editor-callout.d.ts +1 -1
  253. package/dist/components/mdx-editor-options.d.ts +1 -1
  254. package/dist/components/select.d.ts +3 -3
  255. package/dist/components/theme-switcher.d.ts +1 -1
  256. package/dist/components/use-list-menu-selection.d.ts +1 -1
  257. package/dist/components/useComboboxLayout.cjs +37 -27
  258. package/dist/components/useComboboxLayout.cjs.map +1 -1
  259. package/dist/components/useComboboxLayout.d.ts +4 -4
  260. package/dist/components/useComboboxLayout.d.ts.map +1 -1
  261. package/dist/components/useComboboxLayout.js +38 -28
  262. package/dist/components/useComboboxLayout.js.map +1 -1
  263. package/dist/components/workload-picker-utils.d.ts +1 -1
  264. package/dist/components.cjs +5 -0
  265. package/dist/components.cjs.map +1 -1
  266. package/dist/components.d.ts +3 -0
  267. package/dist/components.d.ts.map +1 -1
  268. package/dist/components.js +5 -0
  269. package/dist/components.js.map +1 -1
  270. package/dist/data/AnsiHtml.d.ts +1 -1
  271. package/dist/data/AnsiHtml.d.ts.map +1 -1
  272. package/dist/data/Avatar.d.ts +2 -2
  273. package/dist/data/Avatar.d.ts.map +1 -1
  274. package/dist/data/AvatarBadge.d.ts +2 -2
  275. package/dist/data/AvatarBadge.d.ts.map +1 -1
  276. package/dist/data/Badge.d.ts +2 -2
  277. package/dist/data/Badge.d.ts.map +1 -1
  278. package/dist/data/Callout.d.ts +2 -2
  279. package/dist/data/Callout.d.ts.map +1 -1
  280. package/dist/data/Clicky.cjs +4 -1
  281. package/dist/data/Clicky.cjs.map +1 -1
  282. package/dist/data/Clicky.d.ts +3 -3
  283. package/dist/data/Clicky.d.ts.map +1 -1
  284. package/dist/data/Clicky.js +4 -1
  285. package/dist/data/Clicky.js.map +1 -1
  286. package/dist/data/CodeBlock.cjs +1 -1
  287. package/dist/data/CodeBlock.cjs.map +1 -1
  288. package/dist/data/CodeBlock.d.ts +1 -1
  289. package/dist/data/CodeBlock.d.ts.map +1 -1
  290. package/dist/data/CodeBlock.js +1 -1
  291. package/dist/data/CodeBlock.js.map +1 -1
  292. package/dist/data/CodeDiff.d.ts +1 -1
  293. package/dist/data/CodeDiff.d.ts.map +1 -1
  294. package/dist/data/DataTable.cjs +256 -58
  295. package/dist/data/DataTable.cjs.map +1 -1
  296. package/dist/data/DataTable.d.ts +174 -5
  297. package/dist/data/DataTable.d.ts.map +1 -1
  298. package/dist/data/DataTable.grouping.d.ts +1 -1
  299. package/dist/data/DataTable.js +256 -58
  300. package/dist/data/DataTable.js.map +1 -1
  301. package/dist/data/DataTableGroupingControls.d.ts +1 -1
  302. package/dist/data/DataTableGroupingControls.d.ts.map +1 -1
  303. package/dist/data/ExecutionTree.d.ts +2 -2
  304. package/dist/data/ExecutionTree.d.ts.map +1 -1
  305. package/dist/data/FilterPill.d.ts +4 -4
  306. package/dist/data/FilterPill.d.ts.map +1 -1
  307. package/dist/data/FixtureEditor/FenceForm.d.ts +1 -1
  308. package/dist/data/FixtureEditor/FenceForm.d.ts.map +1 -1
  309. package/dist/data/FixtureEditor/FixtureEditor.d.ts +1 -1
  310. package/dist/data/FixtureEditor/FixtureEditor.d.ts.map +1 -1
  311. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.d.ts +1 -1
  312. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.d.ts.map +1 -1
  313. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs +1 -1
  314. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs.map +1 -1
  315. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.d.ts +1 -1
  316. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.d.ts.map +1 -1
  317. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js +1 -1
  318. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js.map +1 -1
  319. package/dist/data/FixtureEditor/RawFenceEditor.d.ts +2 -2
  320. package/dist/data/FixtureEditor/RawFenceEditor.d.ts.map +1 -1
  321. package/dist/data/FixtureEditor/fixture-frontmatter.cjs +8 -10
  322. package/dist/data/FixtureEditor/fixture-frontmatter.cjs.map +1 -1
  323. package/dist/data/FixtureEditor/fixture-frontmatter.d.ts.map +1 -1
  324. package/dist/data/FixtureEditor/fixture-frontmatter.js +8 -10
  325. package/dist/data/FixtureEditor/fixture-frontmatter.js.map +1 -1
  326. package/dist/data/FixtureEditor/types.d.ts +1 -1
  327. package/dist/data/Gauge.d.ts +2 -2
  328. package/dist/data/Gauge.d.ts.map +1 -1
  329. package/dist/data/GaugeHoverCard.d.ts +2 -2
  330. package/dist/data/GaugeHoverCard.d.ts.map +1 -1
  331. package/dist/data/HighlightedTokens.d.ts +1 -1
  332. package/dist/data/HighlightedTokens.d.ts.map +1 -1
  333. package/dist/data/Icon.cjs.map +1 -1
  334. package/dist/data/Icon.d.ts +3 -3
  335. package/dist/data/Icon.d.ts.map +1 -1
  336. package/dist/data/Icon.js.map +1 -1
  337. package/dist/data/JsonView.d.ts +1 -1
  338. package/dist/data/JsonView.d.ts.map +1 -1
  339. package/dist/data/KeyValueList.d.ts +2 -2
  340. package/dist/data/KeyValueList.d.ts.map +1 -1
  341. package/dist/data/LogDetails.d.ts +1 -1
  342. package/dist/data/LogDetails.d.ts.map +1 -1
  343. package/dist/data/LogViewer.d.ts +1 -1
  344. package/dist/data/LogViewer.d.ts.map +1 -1
  345. package/dist/data/LogsTable.d.ts +1 -1
  346. package/dist/data/LogsTable.d.ts.map +1 -1
  347. package/dist/data/Markdown.d.ts +1 -1
  348. package/dist/data/Markdown.d.ts.map +1 -1
  349. package/dist/data/MarkdownEditor.d.ts +2 -2
  350. package/dist/data/MarkdownEditor.d.ts.map +1 -1
  351. package/dist/data/MatrixTable.d.ts +2 -2
  352. package/dist/data/MatrixTable.d.ts.map +1 -1
  353. package/dist/data/MethodBadge.d.ts +1 -1
  354. package/dist/data/MethodBadge.d.ts.map +1 -1
  355. package/dist/data/ObjectGraph.d.ts +2 -2
  356. package/dist/data/ObjectGraph.d.ts.map +1 -1
  357. package/dist/data/ProgressBar.d.ts +1 -1
  358. package/dist/data/ProgressBar.d.ts.map +1 -1
  359. package/dist/data/ProgressBars.d.ts +2 -2
  360. package/dist/data/ProgressBars.d.ts.map +1 -1
  361. package/dist/data/PromptBanner.d.ts +1 -1
  362. package/dist/data/PromptBanner.d.ts.map +1 -1
  363. package/dist/data/PromptDialog.d.ts +1 -1
  364. package/dist/data/PromptDialog.d.ts.map +1 -1
  365. package/dist/data/Properties.d.ts +2 -2
  366. package/dist/data/Properties.d.ts.map +1 -1
  367. package/dist/data/RadialGauge.d.ts +2 -2
  368. package/dist/data/RadialGauge.d.ts.map +1 -1
  369. package/dist/data/SchemaViewer.d.ts +4 -4
  370. package/dist/data/SchemaViewer.d.ts.map +1 -1
  371. package/dist/data/SelectionActionBar.cjs +242 -0
  372. package/dist/data/SelectionActionBar.cjs.map +1 -0
  373. package/dist/data/SelectionActionBar.d.ts +28 -0
  374. package/dist/data/SelectionActionBar.d.ts.map +1 -0
  375. package/dist/data/SelectionActionBar.js +242 -0
  376. package/dist/data/SelectionActionBar.js.map +1 -0
  377. package/dist/data/ServerTimingBadge.d.ts +1 -1
  378. package/dist/data/ServerTimingBadge.d.ts.map +1 -1
  379. package/dist/data/SignedDeltaBar.d.ts +1 -1
  380. package/dist/data/SignedDeltaBar.d.ts.map +1 -1
  381. package/dist/data/SortableHeader.d.ts +2 -2
  382. package/dist/data/SortableHeader.d.ts.map +1 -1
  383. package/dist/data/StatStrip.d.ts +2 -2
  384. package/dist/data/StatStrip.d.ts.map +1 -1
  385. package/dist/data/StatusBreakdown.d.ts +3 -3
  386. package/dist/data/StatusBreakdown.d.ts.map +1 -1
  387. package/dist/data/TabButton.d.ts +2 -2
  388. package/dist/data/TabButton.d.ts.map +1 -1
  389. package/dist/data/TaskExecDetails.d.ts +2 -2
  390. package/dist/data/TaskExecDetails.d.ts.map +1 -1
  391. package/dist/data/TaskManager.cjs +34 -12
  392. package/dist/data/TaskManager.cjs.map +1 -1
  393. package/dist/data/TaskManager.d.ts +1 -1
  394. package/dist/data/TaskManager.d.ts.map +1 -1
  395. package/dist/data/TaskManager.js +34 -12
  396. package/dist/data/TaskManager.js.map +1 -1
  397. package/dist/data/TaskManagerButton.cjs +11 -7
  398. package/dist/data/TaskManagerButton.cjs.map +1 -1
  399. package/dist/data/TaskManagerButton.d.ts +1 -1
  400. package/dist/data/TaskManagerButton.d.ts.map +1 -1
  401. package/dist/data/TaskManagerButton.js +11 -7
  402. package/dist/data/TaskManagerButton.js.map +1 -1
  403. package/dist/data/TaskProcessDetails.d.ts +1 -1
  404. package/dist/data/TaskProcessDetails.d.ts.map +1 -1
  405. package/dist/data/TaskProgress.cjs +55 -11
  406. package/dist/data/TaskProgress.cjs.map +1 -1
  407. package/dist/data/TaskProgress.d.ts +1 -1
  408. package/dist/data/TaskProgress.d.ts.map +1 -1
  409. package/dist/data/TaskProgress.js +53 -9
  410. package/dist/data/TaskProgress.js.map +1 -1
  411. package/dist/data/Timeline.d.ts +2 -2
  412. package/dist/data/Timeline.d.ts.map +1 -1
  413. package/dist/data/TimeseriesCoreBars.d.ts +1 -1
  414. package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
  415. package/dist/data/TimeseriesGauge.d.ts +1 -1
  416. package/dist/data/TimeseriesGauge.d.ts.map +1 -1
  417. package/dist/data/TimeseriesPanel.d.ts +1 -1
  418. package/dist/data/TimeseriesPanel.d.ts.map +1 -1
  419. package/dist/data/Tree.d.ts +2 -2
  420. package/dist/data/Tree.d.ts.map +1 -1
  421. package/dist/data/TreeGroupHeader.d.ts +2 -2
  422. package/dist/data/TreeGroupHeader.d.ts.map +1 -1
  423. package/dist/data/TreeNode.d.ts +2 -2
  424. package/dist/data/TreeNode.d.ts.map +1 -1
  425. package/dist/data/Version.d.ts +3 -3
  426. package/dist/data/WorkloadCard.d.ts +1 -1
  427. package/dist/data/WorkloadCard.d.ts.map +1 -1
  428. package/dist/data/ai/AdvancedChatConfig.d.ts +1 -1
  429. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
  430. package/dist/data/ai/AdvancedCostsPanel.d.ts +1 -1
  431. package/dist/data/ai/AdvancedCostsPanel.d.ts.map +1 -1
  432. package/dist/data/ai/ChatButton.d.ts +1 -1
  433. package/dist/data/ai/ChatButton.d.ts.map +1 -1
  434. package/dist/data/ai/ChatFab.d.ts +1 -1
  435. package/dist/data/ai/ChatFab.d.ts.map +1 -1
  436. package/dist/data/ai/ChatWindow.cjs +2 -4
  437. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  438. package/dist/data/ai/ChatWindow.d.ts +2 -2
  439. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  440. package/dist/data/ai/ChatWindow.js +2 -4
  441. package/dist/data/ai/ChatWindow.js.map +1 -1
  442. package/dist/data/ai/ChatWindow.runtime.cjs +1 -2
  443. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
  444. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
  445. package/dist/data/ai/ChatWindow.runtime.js +1 -2
  446. package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
  447. package/dist/data/ai/ChatWindow.test-utils.d.ts +1 -1
  448. package/dist/data/ai/ChatWindow.thread-status.d.ts +1 -1
  449. package/dist/data/ai/ChatWindow.thread-status.d.ts.map +1 -1
  450. package/dist/data/ai/ChatWindow.types.d.ts +1 -1
  451. package/dist/data/ai/ChatWindowManager.d.ts +2 -2
  452. package/dist/data/ai/ChatWindowManager.d.ts.map +1 -1
  453. package/dist/data/ai/ContextBadges.d.ts +2 -2
  454. package/dist/data/ai/ContextBadges.d.ts.map +1 -1
  455. package/dist/data/ai/PolicyTree.d.ts +2 -2
  456. package/dist/data/ai/PolicyTree.d.ts.map +1 -1
  457. package/dist/data/ai/PromptCatalog/PromptCatalogTable.cjs +262 -0
  458. package/dist/data/ai/PromptCatalog/PromptCatalogTable.cjs.map +1 -0
  459. package/dist/data/ai/PromptCatalog/PromptCatalogTable.d.ts +16 -0
  460. package/dist/data/ai/PromptCatalog/PromptCatalogTable.d.ts.map +1 -0
  461. package/dist/data/ai/PromptCatalog/PromptCatalogTable.js +262 -0
  462. package/dist/data/ai/PromptCatalog/PromptCatalogTable.js.map +1 -0
  463. package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs +77 -0
  464. package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs.map +1 -0
  465. package/dist/data/ai/PromptCatalog/PromptLayerStrip.d.ts +8 -0
  466. package/dist/data/ai/PromptCatalog/PromptLayerStrip.d.ts.map +1 -0
  467. package/dist/data/ai/PromptCatalog/PromptLayerStrip.js +77 -0
  468. package/dist/data/ai/PromptCatalog/PromptLayerStrip.js.map +1 -0
  469. package/dist/data/ai/PromptCatalog/PromptPage.cjs +332 -0
  470. package/dist/data/ai/PromptCatalog/PromptPage.cjs.map +1 -0
  471. package/dist/data/ai/PromptCatalog/PromptPage.d.ts +17 -0
  472. package/dist/data/ai/PromptCatalog/PromptPage.d.ts.map +1 -0
  473. package/dist/data/ai/PromptCatalog/PromptPage.js +332 -0
  474. package/dist/data/ai/PromptCatalog/PromptPage.js.map +1 -0
  475. package/dist/data/ai/PromptCatalog/PromptPageEditor.cjs +102 -0
  476. package/dist/data/ai/PromptCatalog/PromptPageEditor.cjs.map +1 -0
  477. package/dist/data/ai/PromptCatalog/PromptPageEditor.d.ts +16 -0
  478. package/dist/data/ai/PromptCatalog/PromptPageEditor.d.ts.map +1 -0
  479. package/dist/data/ai/PromptCatalog/PromptPageEditor.js +102 -0
  480. package/dist/data/ai/PromptCatalog/PromptPageEditor.js.map +1 -0
  481. package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs +102 -0
  482. package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs.map +1 -0
  483. package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts +10 -0
  484. package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts.map +1 -0
  485. package/dist/data/ai/PromptCatalog/PromptPageHeader.js +102 -0
  486. package/dist/data/ai/PromptCatalog/PromptPageHeader.js.map +1 -0
  487. package/dist/data/ai/PromptCatalog/PromptPagePreview.cjs +90 -0
  488. package/dist/data/ai/PromptCatalog/PromptPagePreview.cjs.map +1 -0
  489. package/dist/data/ai/PromptCatalog/PromptPagePreview.d.ts +8 -0
  490. package/dist/data/ai/PromptCatalog/PromptPagePreview.d.ts.map +1 -0
  491. package/dist/data/ai/PromptCatalog/PromptPagePreview.js +90 -0
  492. package/dist/data/ai/PromptCatalog/PromptPagePreview.js.map +1 -0
  493. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs +168 -0
  494. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs.map +1 -0
  495. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts +17 -0
  496. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts.map +1 -0
  497. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js +168 -0
  498. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js.map +1 -0
  499. package/dist/data/ai/PromptCatalog/PromptSourceBadge.cjs +36 -0
  500. package/dist/data/ai/PromptCatalog/PromptSourceBadge.cjs.map +1 -0
  501. package/dist/data/ai/PromptCatalog/PromptSourceBadge.d.ts +7 -0
  502. package/dist/data/ai/PromptCatalog/PromptSourceBadge.d.ts.map +1 -0
  503. package/dist/data/ai/PromptCatalog/PromptSourceBadge.js +36 -0
  504. package/dist/data/ai/PromptCatalog/PromptSourceBadge.js.map +1 -0
  505. package/dist/data/ai/PromptCatalog/index.d.ts +9 -0
  506. package/dist/data/ai/PromptCatalog/index.d.ts.map +1 -0
  507. package/dist/data/ai/PromptCatalog/prompt-catalog-model.cjs +137 -0
  508. package/dist/data/ai/PromptCatalog/prompt-catalog-model.cjs.map +1 -0
  509. package/dist/data/ai/PromptCatalog/prompt-catalog-model.d.ts +28 -0
  510. package/dist/data/ai/PromptCatalog/prompt-catalog-model.d.ts.map +1 -0
  511. package/dist/data/ai/PromptCatalog/prompt-catalog-model.js +137 -0
  512. package/dist/data/ai/PromptCatalog/prompt-catalog-model.js.map +1 -0
  513. package/dist/data/ai/PromptCatalog/prompt-page-model.cjs +114 -0
  514. package/dist/data/ai/PromptCatalog/prompt-page-model.cjs.map +1 -0
  515. package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts +45 -0
  516. package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts.map +1 -0
  517. package/dist/data/ai/PromptCatalog/prompt-page-model.js +114 -0
  518. package/dist/data/ai/PromptCatalog/prompt-page-model.js.map +1 -0
  519. package/dist/data/ai/PromptCatalog/types.d.ts +70 -0
  520. package/dist/data/ai/PromptCatalog/types.d.ts.map +1 -0
  521. package/dist/data/ai/PromptPicker/PromptPicker.cjs +9 -12
  522. package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
  523. package/dist/data/ai/PromptPicker/PromptPicker.d.ts +2 -2
  524. package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -1
  525. package/dist/data/ai/PromptPicker/PromptPicker.js +9 -12
  526. package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
  527. package/dist/data/ai/PromptPicker/PromptSourceRepair.d.ts +1 -1
  528. package/dist/data/ai/PromptPicker/PromptSourceRepair.d.ts.map +1 -1
  529. package/dist/data/ai/PromptPicker/index.d.ts +1 -1
  530. package/dist/data/ai/PromptPicker/index.d.ts.map +1 -1
  531. package/dist/data/ai/PromptPicker/types.cjs.map +1 -1
  532. package/dist/data/ai/PromptPicker/types.d.ts +9 -0
  533. package/dist/data/ai/PromptPicker/types.d.ts.map +1 -1
  534. package/dist/data/ai/PromptPicker/types.js.map +1 -1
  535. package/dist/data/ai/PromptRunEditor/index.cjs +2 -2
  536. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  537. package/dist/data/ai/PromptRunEditor/index.d.ts +2 -2
  538. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  539. package/dist/data/ai/PromptRunEditor/index.js +3 -3
  540. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  541. package/dist/data/ai/PromptRunEditor/model.cjs +0 -1
  542. package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -1
  543. package/dist/data/ai/PromptRunEditor/model.d.ts +1 -1
  544. package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -1
  545. package/dist/data/ai/PromptRunEditor/model.js +0 -1
  546. package/dist/data/ai/PromptRunEditor/model.js.map +1 -1
  547. package/dist/data/ai/RuntimeModePicker.cjs +15 -6
  548. package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
  549. package/dist/data/ai/RuntimeModePicker.d.ts +1 -1
  550. package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
  551. package/dist/data/ai/RuntimeModePicker.js +17 -8
  552. package/dist/data/ai/RuntimeModePicker.js.map +1 -1
  553. package/dist/data/ai/SandboxConnectionsSection.d.ts +1 -1
  554. package/dist/data/ai/SandboxConnectionsSection.d.ts.map +1 -1
  555. package/dist/data/ai/SandboxCreateWizard.d.ts +1 -1
  556. package/dist/data/ai/SandboxCreateWizard.d.ts.map +1 -1
  557. package/dist/data/ai/SessionChatComposer.d.ts +2 -2
  558. package/dist/data/ai/SessionChatComposer.d.ts.map +1 -1
  559. package/dist/data/ai/SessionInspector.collection-types.d.ts +1 -1
  560. package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -1
  561. package/dist/data/ai/SessionInspector.collection.cjs +3 -3
  562. package/dist/data/ai/SessionInspector.collection.cjs.map +1 -1
  563. package/dist/data/ai/SessionInspector.collection.js +3 -3
  564. package/dist/data/ai/SessionInspector.collection.js.map +1 -1
  565. package/dist/data/ai/SessionInspector.d.ts +2 -2
  566. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  567. package/dist/data/ai/SessionInspector.files.d.ts +1 -1
  568. package/dist/data/ai/SessionInspector.files.d.ts.map +1 -1
  569. package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
  570. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
  571. package/dist/data/ai/SessionInspector.hierarchy.d.ts +2 -2
  572. package/dist/data/ai/SessionInspector.hierarchy.d.ts.map +1 -1
  573. package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
  574. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
  575. package/dist/data/ai/SessionInspector.model.cjs +3 -3
  576. package/dist/data/ai/SessionInspector.model.cjs.map +1 -1
  577. package/dist/data/ai/SessionInspector.model.d.ts +1 -1
  578. package/dist/data/ai/SessionInspector.model.d.ts.map +1 -1
  579. package/dist/data/ai/SessionInspector.model.js +3 -3
  580. package/dist/data/ai/SessionInspector.model.js.map +1 -1
  581. package/dist/data/ai/SessionInspector.panels.cjs +1 -1
  582. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
  583. package/dist/data/ai/SessionInspector.panels.d.ts +1 -1
  584. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
  585. package/dist/data/ai/SessionInspector.panels.js +1 -1
  586. package/dist/data/ai/SessionInspector.panels.js.map +1 -1
  587. package/dist/data/ai/SessionInspector.plan.d.ts +1 -1
  588. package/dist/data/ai/SessionInspector.plan.d.ts.map +1 -1
  589. package/dist/data/ai/SessionInspector.summary.cjs +3 -3
  590. package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
  591. package/dist/data/ai/SessionInspector.summary.d.ts +2 -2
  592. package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -1
  593. package/dist/data/ai/SessionInspector.summary.js +3 -3
  594. package/dist/data/ai/SessionInspector.summary.js.map +1 -1
  595. package/dist/data/ai/SessionInspector.transcript.d.ts +1 -1
  596. package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -1
  597. package/dist/data/ai/SessionInspector.turns.d.ts +2 -2
  598. package/dist/data/ai/SessionInspector.turns.d.ts.map +1 -1
  599. package/dist/data/ai/SessionViewer.d.ts +2 -2
  600. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  601. package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -1
  602. package/dist/data/ai/SessionViewer.header.d.ts +2 -2
  603. package/dist/data/ai/SessionViewer.header.d.ts.map +1 -1
  604. package/dist/data/ai/SessionViewer.row-metadata.d.ts +3 -3
  605. package/dist/data/ai/SessionViewer.row-metadata.d.ts.map +1 -1
  606. package/dist/data/ai/SessionViewer.rows.d.ts +3 -3
  607. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  608. package/dist/data/ai/SessionViewer.tool-details.d.ts +5 -5
  609. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -1
  610. package/dist/data/ai/SessionViewer.tool-row.d.ts +1 -1
  611. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  612. package/dist/data/ai/SessionViewer.unified.d.ts +3 -2
  613. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  614. package/dist/data/ai/SessionViewerMenu.d.ts +1 -1
  615. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  616. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.d.ts +1 -1
  617. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.d.ts.map +1 -1
  618. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +18 -30
  619. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
  620. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts +1 -1
  621. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
  622. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +19 -31
  623. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
  624. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs +71 -86
  625. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs.map +1 -1
  626. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.d.ts +2 -2
  627. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.d.ts.map +1 -1
  628. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js +72 -87
  629. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js.map +1 -1
  630. package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts +2 -2
  631. package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts.map +1 -1
  632. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.cjs +99 -0
  633. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.cjs.map +1 -0
  634. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.d.ts +13 -0
  635. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.d.ts.map +1 -0
  636. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.js +99 -0
  637. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.js.map +1 -0
  638. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +34 -23
  639. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
  640. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +8 -4
  641. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
  642. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +35 -24
  643. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
  644. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.cjs +114 -0
  645. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.cjs.map +1 -0
  646. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.d.ts +10 -0
  647. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.d.ts.map +1 -0
  648. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.js +114 -0
  649. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.js.map +1 -0
  650. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.cjs +160 -0
  651. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.cjs.map +1 -0
  652. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.d.ts +9 -0
  653. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.d.ts.map +1 -0
  654. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.js +160 -0
  655. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.js.map +1 -0
  656. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs +27 -241
  657. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs.map +1 -1
  658. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts +6 -7
  659. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts.map +1 -1
  660. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js +25 -239
  661. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js.map +1 -1
  662. package/dist/data/ai/SpecRuntimeEditor/PresetCards.d.ts +1 -1
  663. package/dist/data/ai/SpecRuntimeEditor/PresetCards.d.ts.map +1 -1
  664. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +21 -8
  665. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
  666. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts +6 -3
  667. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts.map +1 -1
  668. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +22 -9
  669. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
  670. package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts +2 -2
  671. package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts.map +1 -1
  672. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.cjs +207 -164
  673. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.cjs.map +1 -1
  674. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.d.ts +5 -4
  675. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.d.ts.map +1 -1
  676. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.js +210 -167
  677. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.js.map +1 -1
  678. package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs +15 -15
  679. package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs.map +1 -1
  680. package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts +2 -2
  681. package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts.map +1 -1
  682. package/dist/data/ai/SpecRuntimeEditor/SectionCard.js +15 -15
  683. package/dist/data/ai/SpecRuntimeEditor/SectionCard.js.map +1 -1
  684. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +1 -1
  685. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
  686. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs +120 -42
  687. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs.map +1 -1
  688. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts +5 -2
  689. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts.map +1 -1
  690. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js +123 -45
  691. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js.map +1 -1
  692. package/dist/data/ai/SpecRuntimeEditor/env-model.cjs.map +1 -1
  693. package/dist/data/ai/SpecRuntimeEditor/env-model.d.ts.map +1 -1
  694. package/dist/data/ai/SpecRuntimeEditor/env-model.js.map +1 -1
  695. package/dist/data/ai/SpecRuntimeEditor/fields.d.ts +12 -12
  696. package/dist/data/ai/SpecRuntimeEditor/fields.d.ts.map +1 -1
  697. package/dist/data/ai/SpecRuntimeEditor/index.cjs +136 -48
  698. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  699. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +14 -4
  700. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  701. package/dist/data/ai/SpecRuntimeEditor/index.js +137 -49
  702. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  703. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs +93 -0
  704. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs.map +1 -0
  705. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.d.ts +6 -0
  706. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.d.ts.map +1 -0
  707. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js +93 -0
  708. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js.map +1 -0
  709. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.cjs +35 -0
  710. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.cjs.map +1 -0
  711. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.d.ts +5 -0
  712. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.d.ts.map +1 -0
  713. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.js +35 -0
  714. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.js.map +1 -0
  715. package/dist/data/ai/SpecRuntimeEditor/presets.cjs +2 -9
  716. package/dist/data/ai/SpecRuntimeEditor/presets.cjs.map +1 -1
  717. package/dist/data/ai/SpecRuntimeEditor/presets.d.ts +1 -2
  718. package/dist/data/ai/SpecRuntimeEditor/presets.d.ts.map +1 -1
  719. package/dist/data/ai/SpecRuntimeEditor/presets.js +2 -9
  720. package/dist/data/ai/SpecRuntimeEditor/presets.js.map +1 -1
  721. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
  722. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +1 -1
  723. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
  724. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
  725. package/dist/data/ai/SpecRuntimeEditor/types.cjs +2 -7
  726. package/dist/data/ai/SpecRuntimeEditor/types.cjs.map +1 -1
  727. package/dist/data/ai/SpecRuntimeEditor/types.d.ts +0 -1
  728. package/dist/data/ai/SpecRuntimeEditor/types.d.ts.map +1 -1
  729. package/dist/data/ai/SpecRuntimeEditor/types.js +3 -8
  730. package/dist/data/ai/SpecRuntimeEditor/types.js.map +1 -1
  731. package/dist/data/ai/SpecRuntimeEditor/update.cjs +43 -33
  732. package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
  733. package/dist/data/ai/SpecRuntimeEditor/update.d.ts +7 -13
  734. package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
  735. package/dist/data/ai/SpecRuntimeEditor/update.js +43 -33
  736. package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
  737. package/dist/data/ai/SpecRuntimeEditor.model.cjs +33 -49
  738. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
  739. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +52 -29
  740. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
  741. package/dist/data/ai/SpecRuntimeEditor.model.js +33 -48
  742. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
  743. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.cjs +276 -0
  744. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.cjs.map +1 -0
  745. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.d.ts +58 -0
  746. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.d.ts.map +1 -0
  747. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.js +276 -0
  748. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.js.map +1 -0
  749. package/dist/data/ai/ThreadPicker.cjs +55 -42
  750. package/dist/data/ai/ThreadPicker.cjs.map +1 -1
  751. package/dist/data/ai/ThreadPicker.d.ts +1 -1
  752. package/dist/data/ai/ThreadPicker.d.ts.map +1 -1
  753. package/dist/data/ai/ThreadPicker.js +56 -43
  754. package/dist/data/ai/ThreadPicker.js.map +1 -1
  755. package/dist/data/ai/ToolPreferences.cjs +9 -1
  756. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  757. package/dist/data/ai/ToolPreferences.d.ts +1 -1
  758. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  759. package/dist/data/ai/ToolPreferences.js +9 -1
  760. package/dist/data/ai/ToolPreferences.js.map +1 -1
  761. package/dist/data/ai/ToolPreferencesList.d.ts +2 -2
  762. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  763. package/dist/data/ai/ToolSchemaBrowser.cjs +41 -487
  764. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
  765. package/dist/data/ai/ToolSchemaBrowser.d.ts +7 -2
  766. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
  767. package/dist/data/ai/ToolSchemaBrowser.detail.cjs +238 -0
  768. package/dist/data/ai/ToolSchemaBrowser.detail.cjs.map +1 -0
  769. package/dist/data/ai/ToolSchemaBrowser.detail.d.ts +8 -0
  770. package/dist/data/ai/ToolSchemaBrowser.detail.d.ts.map +1 -0
  771. package/dist/data/ai/ToolSchemaBrowser.detail.js +238 -0
  772. package/dist/data/ai/ToolSchemaBrowser.detail.js.map +1 -0
  773. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +57 -0
  774. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -0
  775. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +9 -0
  776. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -0
  777. package/dist/data/ai/ToolSchemaBrowser.directory-header.js +57 -0
  778. package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -0
  779. package/dist/data/ai/ToolSchemaBrowser.js +42 -488
  780. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
  781. package/dist/data/ai/ToolSchemaBrowser.model.cjs +130 -0
  782. package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -0
  783. package/dist/data/ai/ToolSchemaBrowser.model.d.ts +35 -0
  784. package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -0
  785. package/dist/data/ai/ToolSchemaBrowser.model.js +130 -0
  786. package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -0
  787. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +57 -0
  788. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +1 -0
  789. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +7 -0
  790. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +1 -0
  791. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +57 -0
  792. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +1 -0
  793. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +389 -0
  794. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -0
  795. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +23 -0
  796. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -0
  797. package/dist/data/ai/ToolSchemaBrowser.sidebar.js +389 -0
  798. package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -0
  799. package/dist/data/ai/agent-action-icons.cjs +14 -6
  800. package/dist/data/ai/agent-action-icons.cjs.map +1 -1
  801. package/dist/data/ai/agent-action-icons.d.ts.map +1 -1
  802. package/dist/data/ai/agent-action-icons.js +14 -6
  803. package/dist/data/ai/agent-action-icons.js.map +1 -1
  804. package/dist/data/ai/chat-window-context.d.ts +1 -1
  805. package/dist/data/ai/examples/sessions/claude-complete.cjs +17 -9
  806. package/dist/data/ai/examples/sessions/claude-complete.cjs.map +1 -1
  807. package/dist/data/ai/examples/sessions/claude-complete.d.ts.map +1 -1
  808. package/dist/data/ai/examples/sessions/claude-complete.js +17 -9
  809. package/dist/data/ai/examples/sessions/claude-complete.js.map +1 -1
  810. package/dist/data/ai/examples/sessions/claude.cjs +7 -4
  811. package/dist/data/ai/examples/sessions/claude.cjs.map +1 -1
  812. package/dist/data/ai/examples/sessions/claude.d.ts.map +1 -1
  813. package/dist/data/ai/examples/sessions/claude.js +7 -4
  814. package/dist/data/ai/examples/sessions/claude.js.map +1 -1
  815. package/dist/data/ai/examples/sessions/codex-complete.cjs +17 -10
  816. package/dist/data/ai/examples/sessions/codex-complete.cjs.map +1 -1
  817. package/dist/data/ai/examples/sessions/codex-complete.d.ts.map +1 -1
  818. package/dist/data/ai/examples/sessions/codex-complete.js +17 -10
  819. package/dist/data/ai/examples/sessions/codex-complete.js.map +1 -1
  820. package/dist/data/ai/examples/sessions/codex.cjs +7 -4
  821. package/dist/data/ai/examples/sessions/codex.cjs.map +1 -1
  822. package/dist/data/ai/examples/sessions/codex.d.ts.map +1 -1
  823. package/dist/data/ai/examples/sessions/codex.js +7 -4
  824. package/dist/data/ai/examples/sessions/codex.js.map +1 -1
  825. package/dist/data/ai/index.d.ts +6 -3
  826. package/dist/data/ai/index.d.ts.map +1 -1
  827. package/dist/data/ai/runtime-profile.cjs +93 -0
  828. package/dist/data/ai/runtime-profile.cjs.map +1 -0
  829. package/dist/data/ai/runtime-profile.d.ts +73 -0
  830. package/dist/data/ai/runtime-profile.d.ts.map +1 -0
  831. package/dist/data/ai/runtime-profile.js +93 -0
  832. package/dist/data/ai/runtime-profile.js.map +1 -0
  833. package/dist/data/ai/sandbox-kind-meta.cjs +38 -4
  834. package/dist/data/ai/sandbox-kind-meta.cjs.map +1 -1
  835. package/dist/data/ai/sandbox-kind-meta.d.ts +3 -0
  836. package/dist/data/ai/sandbox-kind-meta.d.ts.map +1 -1
  837. package/dist/data/ai/sandbox-kind-meta.js +38 -4
  838. package/dist/data/ai/sandbox-kind-meta.js.map +1 -1
  839. package/dist/data/ai/use-session-scroll.d.ts +1 -1
  840. package/dist/data/cache-browser/CacheBrowser.d.ts +1 -1
  841. package/dist/data/cache-browser/CacheBrowser.d.ts.map +1 -1
  842. package/dist/data/cache-browser/CacheDetailPanel.d.ts +1 -1
  843. package/dist/data/cache-browser/CacheDetailPanel.d.ts.map +1 -1
  844. package/dist/data/cache-browser/CacheStatsOverview.d.ts +1 -1
  845. package/dist/data/cache-browser/CacheStatsOverview.d.ts.map +1 -1
  846. package/dist/data/cache-browser/CacheTree.d.ts +2 -2
  847. package/dist/data/cache-browser/CacheTree.d.ts.map +1 -1
  848. package/dist/data/cache-browser/CacheValue.d.ts +1 -1
  849. package/dist/data/cache-browser/CacheValue.d.ts.map +1 -1
  850. package/dist/data/cache-browser/adapter.d.ts +1 -1
  851. package/dist/data/cells/CellFilterActions.d.ts +2 -2
  852. package/dist/data/cells/CellFilterActions.d.ts.map +1 -1
  853. package/dist/data/cells/EntityCell.d.ts +2 -2
  854. package/dist/data/cells/EntityCell.d.ts.map +1 -1
  855. package/dist/data/cells/StatusDot.d.ts +1 -1
  856. package/dist/data/cells/StatusDot.d.ts.map +1 -1
  857. package/dist/data/cells/TagList.d.ts +3 -3
  858. package/dist/data/cells/TagList.d.ts.map +1 -1
  859. package/dist/data/cells/Timestamp.d.ts +1 -1
  860. package/dist/data/cells/Timestamp.d.ts.map +1 -1
  861. package/dist/data/cells/tag-utils.d.ts +1 -1
  862. package/dist/data/chat/Attachment.d.ts +2 -2
  863. package/dist/data/chat/Attachment.d.ts.map +1 -1
  864. package/dist/data/chat/Chat.cjs +13 -3
  865. package/dist/data/chat/Chat.cjs.map +1 -1
  866. package/dist/data/chat/Chat.d.ts +1 -1
  867. package/dist/data/chat/Chat.d.ts.map +1 -1
  868. package/dist/data/chat/Chat.fixtures.cjs +3 -3
  869. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  870. package/dist/data/chat/Chat.fixtures.js +3 -3
  871. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  872. package/dist/data/chat/Chat.js +14 -4
  873. package/dist/data/chat/Chat.js.map +1 -1
  874. package/dist/data/chat/Chat.runtime.cjs +4 -9
  875. package/dist/data/chat/Chat.runtime.cjs.map +1 -1
  876. package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
  877. package/dist/data/chat/Chat.runtime.js +4 -9
  878. package/dist/data/chat/Chat.runtime.js.map +1 -1
  879. package/dist/data/chat/ChatRuntimeToolbar.cjs +5 -5
  880. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  881. package/dist/data/chat/ChatRuntimeToolbar.d.ts +1 -1
  882. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  883. package/dist/data/chat/ChatRuntimeToolbar.js +5 -5
  884. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  885. package/dist/data/chat/ContextMeter.cjs +3 -3
  886. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  887. package/dist/data/chat/ContextMeter.d.ts +3 -3
  888. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  889. package/dist/data/chat/ContextMeter.js +3 -3
  890. package/dist/data/chat/ContextMeter.js.map +1 -1
  891. package/dist/data/chat/Conversation.d.ts +1 -1
  892. package/dist/data/chat/Conversation.d.ts.map +1 -1
  893. package/dist/data/chat/Message.d.ts +1 -1
  894. package/dist/data/chat/Message.d.ts.map +1 -1
  895. package/dist/data/chat/MessageActions.d.ts +1 -1
  896. package/dist/data/chat/MessageActions.d.ts.map +1 -1
  897. package/dist/data/chat/ModelSelector.d.ts +5 -5
  898. package/dist/data/chat/ModelSelector.d.ts.map +1 -1
  899. package/dist/data/chat/PromptInput.d.ts +2 -2
  900. package/dist/data/chat/PromptInput.d.ts.map +1 -1
  901. package/dist/data/chat/Reasoning.d.ts +1 -1
  902. package/dist/data/chat/Reasoning.d.ts.map +1 -1
  903. package/dist/data/chat/Suggestion.d.ts +1 -1
  904. package/dist/data/chat/Suggestion.d.ts.map +1 -1
  905. package/dist/data/chat/ToolCall.d.ts +1 -1
  906. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  907. package/dist/data/chat/approval.cjs.map +1 -1
  908. package/dist/data/chat/approval.d.ts +21 -1
  909. package/dist/data/chat/approval.d.ts.map +1 -1
  910. package/dist/data/chat/approval.js.map +1 -1
  911. package/dist/data/chat/clickyOperationsToTools.cjs +5 -0
  912. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
  913. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
  914. package/dist/data/chat/clickyOperationsToTools.js +5 -0
  915. package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
  916. package/dist/data/chat/tool-render/ToolArgs.d.ts +1 -1
  917. package/dist/data/chat/tool-render/ToolParams.d.ts +1 -1
  918. package/dist/data/chat/tool-render/ToolValue.d.ts +1 -1
  919. package/dist/data/chat/tool-render/adapter.d.ts +1 -1
  920. package/dist/data/chat/tool-render/context.d.ts +1 -1
  921. package/dist/data/chat/tool-render/defaults.d.ts +1 -1
  922. package/dist/data/chat/tool-render/known-tool-views.d.ts +1 -1
  923. package/dist/data/chat/tool-render/summary.d.ts +1 -1
  924. package/dist/data/chat/types.cjs.map +1 -1
  925. package/dist/data/chat/types.d.ts +8 -6
  926. package/dist/data/chat/types.d.ts.map +1 -1
  927. package/dist/data/chat/types.js.map +1 -1
  928. package/dist/data/chat/usage-snapshot.cjs +21 -1
  929. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  930. package/dist/data/chat/usage-snapshot.d.ts +2 -0
  931. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  932. package/dist/data/chat/usage-snapshot.js +22 -2
  933. package/dist/data/chat/usage-snapshot.js.map +1 -1
  934. package/dist/data/clicky-export/ClickyExportDialog.d.ts +1 -1
  935. package/dist/data/clicky-export/ClickyExportDialog.d.ts.map +1 -1
  936. package/dist/data/clicky-export/useClickyExport.d.ts +1 -1
  937. package/dist/data/code-block-actions.d.ts +1 -1
  938. package/dist/data/code-block-actions.d.ts.map +1 -1
  939. package/dist/data/data-table-server-filters.d.ts +1 -1
  940. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +2 -2
  941. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
  942. package/dist/data/diagnostics/DiagnosticsTree.d.ts +1 -1
  943. package/dist/data/diagnostics/DiagnosticsTree.d.ts.map +1 -1
  944. package/dist/data/diagnostics/ErrorDetails.d.ts +4 -4
  945. package/dist/data/diagnostics/ErrorDetails.d.ts.map +1 -1
  946. package/dist/data/diagnostics/FrameSourceWindow.d.ts +1 -1
  947. package/dist/data/diagnostics/FrameSourceWindow.d.ts.map +1 -1
  948. package/dist/data/diagnostics/GoroutineCard.d.ts +1 -1
  949. package/dist/data/diagnostics/GoroutineCard.d.ts.map +1 -1
  950. package/dist/data/diagnostics/JvmStackTrace.d.ts +1 -1
  951. package/dist/data/diagnostics/JvmStackTrace.d.ts.map +1 -1
  952. package/dist/data/diagnostics/RenderedStackTrace.d.ts +1 -1
  953. package/dist/data/diagnostics/RenderedStackTrace.d.ts.map +1 -1
  954. package/dist/data/diagnostics/StackFrameRow.d.ts +2 -2
  955. package/dist/data/diagnostics/StackFrameRow.d.ts.map +1 -1
  956. package/dist/data/diagnostics/ThreadCard.d.ts +1 -1
  957. package/dist/data/diagnostics/ThreadCard.d.ts.map +1 -1
  958. package/dist/data/git/GitChangeList.d.ts +5 -5
  959. package/dist/data/git/GitChangeList.d.ts.map +1 -1
  960. package/dist/data/har/HarPanel.d.ts +1 -1
  961. package/dist/data/har/HarPanel.d.ts.map +1 -1
  962. package/dist/data/icon-fallback.d.ts +1 -1
  963. package/dist/data/query-browser/QueryBrowser.d.ts +1 -1
  964. package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
  965. package/dist/data/query-browser/QueryBrowser.types.d.ts +1 -1
  966. package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.d.ts +1 -1
  967. package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.d.ts.map +1 -1
  968. package/dist/data/query-browser/QueryBrowserResults.d.ts +1 -1
  969. package/dist/data/query-browser/QueryBrowserResults.d.ts.map +1 -1
  970. package/dist/data/runtime/ProviderStatusPanel.d.ts +1 -1
  971. package/dist/data/runtime/ProviderStatusPanel.d.ts.map +1 -1
  972. package/dist/data/runtime/RuntimeBar.cjs +29 -16
  973. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  974. package/dist/data/runtime/RuntimeBar.d.ts +10 -2
  975. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  976. package/dist/data/runtime/RuntimeBar.js +31 -18
  977. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  978. package/dist/data/runtime/RuntimeBar.model.cjs +10 -20
  979. package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -1
  980. package/dist/data/runtime/RuntimeBar.model.d.ts +2 -2
  981. package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -1
  982. package/dist/data/runtime/RuntimeBar.model.js +11 -21
  983. package/dist/data/runtime/RuntimeBar.model.js.map +1 -1
  984. package/dist/data/runtime/RuntimeBarCombo.cjs +11 -6
  985. package/dist/data/runtime/RuntimeBarCombo.cjs.map +1 -1
  986. package/dist/data/runtime/RuntimeBarCombo.d.ts +3 -1
  987. package/dist/data/runtime/RuntimeBarCombo.d.ts.map +1 -1
  988. package/dist/data/runtime/RuntimeBarCombo.js +11 -6
  989. package/dist/data/runtime/RuntimeBarCombo.js.map +1 -1
  990. package/dist/data/runtime/RuntimeBarSegments.cjs +7 -5
  991. package/dist/data/runtime/RuntimeBarSegments.cjs.map +1 -1
  992. package/dist/data/runtime/RuntimeBarSegments.d.ts +4 -2
  993. package/dist/data/runtime/RuntimeBarSegments.d.ts.map +1 -1
  994. package/dist/data/runtime/RuntimeBarSegments.js +7 -5
  995. package/dist/data/runtime/RuntimeBarSegments.js.map +1 -1
  996. package/dist/data/runtime/model-capabilities.cjs +0 -3
  997. package/dist/data/runtime/model-capabilities.cjs.map +1 -1
  998. package/dist/data/runtime/model-capabilities.d.ts +0 -1
  999. package/dist/data/runtime/model-capabilities.d.ts.map +1 -1
  1000. package/dist/data/runtime/model-capabilities.js +0 -3
  1001. package/dist/data/runtime/model-capabilities.js.map +1 -1
  1002. package/dist/data/runtime/provider-status.cjs +1 -1
  1003. package/dist/data/runtime/provider-status.cjs.map +1 -1
  1004. package/dist/data/runtime/provider-status.js +1 -1
  1005. package/dist/data/runtime/provider-status.js.map +1 -1
  1006. package/dist/data/runtime/runtime-field-support.cjs +63 -0
  1007. package/dist/data/runtime/runtime-field-support.cjs.map +1 -0
  1008. package/dist/data/runtime/runtime-field-support.d.ts +13 -0
  1009. package/dist/data/runtime/runtime-field-support.d.ts.map +1 -0
  1010. package/dist/data/runtime/runtime-field-support.js +63 -0
  1011. package/dist/data/runtime/runtime-field-support.js.map +1 -0
  1012. package/dist/data/runtime/runtime-mode.cjs +158 -116
  1013. package/dist/data/runtime/runtime-mode.cjs.map +1 -1
  1014. package/dist/data/runtime/runtime-mode.d.ts +57 -19
  1015. package/dist/data/runtime/runtime-mode.d.ts.map +1 -1
  1016. package/dist/data/runtime/runtime-mode.js +158 -116
  1017. package/dist/data/runtime/runtime-mode.js.map +1 -1
  1018. package/dist/data/selectionActionSplit.cjs +33 -0
  1019. package/dist/data/selectionActionSplit.cjs.map +1 -0
  1020. package/dist/data/selectionActionSplit.d.ts +36 -0
  1021. package/dist/data/selectionActionSplit.d.ts.map +1 -0
  1022. package/dist/data/selectionActionSplit.js +33 -0
  1023. package/dist/data/selectionActionSplit.js.map +1 -0
  1024. package/dist/data/task-copy.cjs +76 -0
  1025. package/dist/data/task-copy.cjs.map +1 -0
  1026. package/dist/data/task-copy.d.ts +12 -0
  1027. package/dist/data/task-copy.d.ts.map +1 -0
  1028. package/dist/data/task-copy.js +76 -0
  1029. package/dist/data/task-copy.js.map +1 -0
  1030. package/dist/data/test-runner/TestDetailPanel.d.ts +1 -1
  1031. package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
  1032. package/dist/data/test-runner/TestFailureDetail.d.ts +3 -3
  1033. package/dist/data/test-runner/TestFailureDetail.d.ts.map +1 -1
  1034. package/dist/data/test-runner/TestFilterBar.d.ts +1 -1
  1035. package/dist/data/test-runner/TestFilterBar.d.ts.map +1 -1
  1036. package/dist/data/test-runner/TestRunSummary.d.ts +1 -1
  1037. package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
  1038. package/dist/data/test-runner/TestRunner.d.ts +2 -2
  1039. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  1040. package/dist/data/test-runner/TestTree.d.ts +1 -1
  1041. package/dist/data/test-runner/TestTree.d.ts.map +1 -1
  1042. package/dist/data/test-runner/TestTreeNode.cjs +16 -11
  1043. package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
  1044. package/dist/data/test-runner/TestTreeNode.d.ts +1 -1
  1045. package/dist/data/test-runner/TestTreeNode.d.ts.map +1 -1
  1046. package/dist/data/test-runner/TestTreeNode.js +16 -11
  1047. package/dist/data/test-runner/TestTreeNode.js.map +1 -1
  1048. package/dist/data/test-runner/adapter.d.ts +1 -1
  1049. package/dist/data/test-runner/context.d.ts +1 -1
  1050. package/dist/data/version-info.cjs +3 -3
  1051. package/dist/data/version-info.js +3 -3
  1052. package/dist/data.cjs +34 -0
  1053. package/dist/data.cjs.map +1 -1
  1054. package/dist/data.d.ts +4 -1
  1055. package/dist/data.d.ts.map +1 -1
  1056. package/dist/data.js +34 -0
  1057. package/dist/data.js.map +1 -1
  1058. package/dist/devtools/DebugConsole.d.ts +1 -1
  1059. package/dist/devtools/DebugConsole.d.ts.map +1 -1
  1060. package/dist/devtools/DebugConsoleButton.d.ts +1 -1
  1061. package/dist/devtools/DebugConsoleButton.d.ts.map +1 -1
  1062. package/dist/devtools/DebugConsoleDock.d.ts +1 -1
  1063. package/dist/devtools/DebugConsoleDock.d.ts.map +1 -1
  1064. package/dist/devtools/ExecutionDetail.d.ts +1 -1
  1065. package/dist/devtools/ExecutionDetail.d.ts.map +1 -1
  1066. package/dist/devtools/tabs/ConsoleTab.d.ts +1 -1
  1067. package/dist/devtools/tabs/ConsoleTab.d.ts.map +1 -1
  1068. package/dist/devtools/tabs/InspectionCaches.d.ts +1 -1
  1069. package/dist/devtools/tabs/InspectionCaches.d.ts.map +1 -1
  1070. package/dist/devtools/tabs/InspectionTab.d.ts +1 -1
  1071. package/dist/devtools/tabs/InspectionTab.d.ts.map +1 -1
  1072. package/dist/devtools/tabs/NetworkTab.d.ts +1 -1
  1073. package/dist/devtools/tabs/NetworkTab.d.ts.map +1 -1
  1074. package/dist/devtools/tabs/QueriesTab.d.ts +1 -1
  1075. package/dist/devtools/tabs/QueriesTab.d.ts.map +1 -1
  1076. package/dist/hooks/density-provider.d.ts +3 -3
  1077. package/dist/hooks/density-provider.d.ts.map +1 -1
  1078. package/dist/hooks/theme-provider.d.ts +2 -2
  1079. package/dist/hooks/theme-provider.d.ts.map +1 -1
  1080. package/dist/hooks/use-density.d.ts +1 -1
  1081. package/dist/hooks/use-task-run.cjs +24 -17
  1082. package/dist/hooks/use-task-run.cjs.map +1 -1
  1083. package/dist/hooks/use-task-run.d.ts +3 -1
  1084. package/dist/hooks/use-task-run.d.ts.map +1 -1
  1085. package/dist/hooks/use-task-run.js +25 -18
  1086. package/dist/hooks/use-task-run.js.map +1 -1
  1087. package/dist/hooks/use-theme.d.ts +1 -1
  1088. package/dist/icons/components/UiCalendarCheck.cjs +15 -0
  1089. package/dist/icons/components/UiCalendarCheck.cjs.map +1 -0
  1090. package/dist/icons/components/UiCalendarCheck.d.ts +15 -0
  1091. package/dist/icons/components/UiCalendarCheck.d.ts.map +1 -0
  1092. package/dist/icons/components/UiCalendarCheck.js +15 -0
  1093. package/dist/icons/components/UiCalendarCheck.js.map +1 -0
  1094. package/dist/icons/components/UiChartLineUp.cjs +15 -0
  1095. package/dist/icons/components/UiChartLineUp.cjs.map +1 -0
  1096. package/dist/icons/components/UiChartLineUp.d.ts +15 -0
  1097. package/dist/icons/components/UiChartLineUp.d.ts.map +1 -0
  1098. package/dist/icons/components/UiChartLineUp.js +15 -0
  1099. package/dist/icons/components/UiChartLineUp.js.map +1 -0
  1100. package/dist/icons/components/UiClockCountdown.cjs +15 -0
  1101. package/dist/icons/components/UiClockCountdown.cjs.map +1 -0
  1102. package/dist/icons/components/UiClockCountdown.d.ts +15 -0
  1103. package/dist/icons/components/UiClockCountdown.d.ts.map +1 -0
  1104. package/dist/icons/components/UiClockCountdown.js +15 -0
  1105. package/dist/icons/components/UiClockCountdown.js.map +1 -0
  1106. package/dist/icons/components/UiFactory.cjs +15 -0
  1107. package/dist/icons/components/UiFactory.cjs.map +1 -0
  1108. package/dist/icons/components/UiFactory.d.ts +15 -0
  1109. package/dist/icons/components/UiFactory.d.ts.map +1 -0
  1110. package/dist/icons/components/UiFactory.js +15 -0
  1111. package/dist/icons/components/UiFactory.js.map +1 -0
  1112. package/dist/icons/components/UiHandCoins.cjs +15 -0
  1113. package/dist/icons/components/UiHandCoins.cjs.map +1 -0
  1114. package/dist/icons/components/UiHandCoins.d.ts +15 -0
  1115. package/dist/icons/components/UiHandCoins.d.ts.map +1 -0
  1116. package/dist/icons/components/UiHandCoins.js +15 -0
  1117. package/dist/icons/components/UiHandCoins.js.map +1 -0
  1118. package/dist/icons/components/UiInvoice.cjs +15 -0
  1119. package/dist/icons/components/UiInvoice.cjs.map +1 -0
  1120. package/dist/icons/components/UiInvoice.d.ts +15 -0
  1121. package/dist/icons/components/UiInvoice.d.ts.map +1 -0
  1122. package/dist/icons/components/UiInvoice.js +15 -0
  1123. package/dist/icons/components/UiInvoice.js.map +1 -0
  1124. package/dist/icons/components/UiTax.cjs +15 -0
  1125. package/dist/icons/components/UiTax.cjs.map +1 -0
  1126. package/dist/icons/components/UiTax.d.ts +15 -0
  1127. package/dist/icons/components/UiTax.d.ts.map +1 -0
  1128. package/dist/icons/components/UiTax.js +15 -0
  1129. package/dist/icons/components/UiTax.js.map +1 -0
  1130. package/dist/icons/index.d.ts +14 -0
  1131. package/dist/icons/index.d.ts.map +1 -1
  1132. package/dist/icons/registry.cjs +14 -0
  1133. package/dist/icons/registry.cjs.map +1 -1
  1134. package/dist/icons/registry.d.ts +1 -1
  1135. package/dist/icons/registry.d.ts.map +1 -1
  1136. package/dist/icons/registry.js +14 -0
  1137. package/dist/icons/registry.js.map +1 -1
  1138. package/dist/icons/types.d.ts +1 -1
  1139. package/dist/icons.cjs +21 -0
  1140. package/dist/icons.cjs.map +1 -1
  1141. package/dist/icons.js +21 -0
  1142. package/dist/icons.js.map +1 -1
  1143. package/dist/index.cjs +43 -0
  1144. package/dist/index.cjs.map +1 -1
  1145. package/dist/index.js +44 -1
  1146. package/dist/index.js.map +1 -1
  1147. package/dist/layout/AppShell.cjs +17 -3
  1148. package/dist/layout/AppShell.cjs.map +1 -1
  1149. package/dist/layout/AppShell.d.ts +10 -2
  1150. package/dist/layout/AppShell.d.ts.map +1 -1
  1151. package/dist/layout/AppShell.debug.d.ts +1 -1
  1152. package/dist/layout/AppShell.debug.d.ts.map +1 -1
  1153. package/dist/layout/AppShell.js +17 -3
  1154. package/dist/layout/AppShell.js.map +1 -1
  1155. package/dist/layout/AppShell.nav.cjs +133 -76
  1156. package/dist/layout/AppShell.nav.cjs.map +1 -1
  1157. package/dist/layout/AppShell.nav.d.ts +1 -1
  1158. package/dist/layout/AppShell.nav.d.ts.map +1 -1
  1159. package/dist/layout/AppShell.nav.drag.cjs +86 -0
  1160. package/dist/layout/AppShell.nav.drag.cjs.map +1 -0
  1161. package/dist/layout/AppShell.nav.drag.d.ts +52 -0
  1162. package/dist/layout/AppShell.nav.drag.d.ts.map +1 -0
  1163. package/dist/layout/AppShell.nav.drag.js +86 -0
  1164. package/dist/layout/AppShell.nav.drag.js.map +1 -0
  1165. package/dist/layout/AppShell.nav.js +133 -76
  1166. package/dist/layout/AppShell.nav.js.map +1 -1
  1167. package/dist/layout/AppSidebar.d.ts +3 -3
  1168. package/dist/layout/AppSidebar.d.ts.map +1 -1
  1169. package/dist/layout/Panel.d.ts +2 -2
  1170. package/dist/layout/Panel.d.ts.map +1 -1
  1171. package/dist/layout/PanelFrame.d.ts +2 -2
  1172. package/dist/layout/PanelFrame.d.ts.map +1 -1
  1173. package/dist/layout/Section.d.ts +3 -3
  1174. package/dist/layout/Section.d.ts.map +1 -1
  1175. package/dist/layout/SplitPane.d.ts +2 -2
  1176. package/dist/layout/SplitPane.d.ts.map +1 -1
  1177. package/dist/layout/Tabs.d.ts +2 -2
  1178. package/dist/layout/Tabs.d.ts.map +1 -1
  1179. package/dist/layout/Workspace.d.ts +2 -2
  1180. package/dist/layout/Workspace.d.ts.map +1 -1
  1181. package/dist/layout/Workspace.model.d.ts +1 -1
  1182. package/dist/layout/Workspace.regions.d.ts +2 -2
  1183. package/dist/layout/Workspace.regions.d.ts.map +1 -1
  1184. package/dist/{components/combobox-utils.cjs → lib/combobox-values.cjs} +1 -5
  1185. package/dist/lib/combobox-values.cjs.map +1 -0
  1186. package/dist/{components/combobox-utils.d.ts → lib/combobox-values.d.ts} +3 -13
  1187. package/dist/lib/combobox-values.d.ts.map +1 -0
  1188. package/dist/{components/combobox-utils.js → lib/combobox-values.js} +1 -5
  1189. package/dist/lib/combobox-values.js.map +1 -0
  1190. package/dist/lib/combobox.cjs +93 -0
  1191. package/dist/lib/combobox.cjs.map +1 -0
  1192. package/dist/lib/combobox.d.ts +20 -0
  1193. package/dist/lib/combobox.d.ts.map +1 -0
  1194. package/dist/lib/combobox.js +93 -0
  1195. package/dist/lib/combobox.js.map +1 -0
  1196. package/dist/monaco/MonacoEditor.d.ts +1 -1
  1197. package/dist/monaco/MonacoEditor.d.ts.map +1 -1
  1198. package/dist/monaco/MonacoProvider.d.ts +1 -1
  1199. package/dist/monaco/MonacoProvider.d.ts.map +1 -1
  1200. package/dist/monaco/MonacoSchemaEditor.cjs +4 -4
  1201. package/dist/monaco/MonacoSchemaEditor.cjs.map +1 -1
  1202. package/dist/monaco/MonacoSchemaEditor.d.ts +1 -1
  1203. package/dist/monaco/MonacoSchemaEditor.d.ts.map +1 -1
  1204. package/dist/monaco/MonacoSchemaEditor.js +4 -4
  1205. package/dist/monaco/MonacoSchemaEditor.js.map +1 -1
  1206. package/dist/monaco/types.d.ts +1 -1
  1207. package/dist/monaco/use-monaco-worker.d.ts +1 -1
  1208. package/dist/overlay/CellActions.d.ts +3 -3
  1209. package/dist/overlay/CellActions.d.ts.map +1 -1
  1210. package/dist/overlay/CommandPalette.d.ts +2 -2
  1211. package/dist/overlay/CommandPalette.model.d.ts +1 -1
  1212. package/dist/overlay/CommandPaletteList.cjs.map +1 -1
  1213. package/dist/overlay/CommandPaletteList.d.ts +3 -3
  1214. package/dist/overlay/CommandPaletteList.d.ts.map +1 -1
  1215. package/dist/overlay/CommandPaletteList.js.map +1 -1
  1216. package/dist/overlay/CommandPaletteTrigger.d.ts +1 -1
  1217. package/dist/overlay/CommandPaletteTrigger.d.ts.map +1 -1
  1218. package/dist/overlay/ContextMenu.d.ts +1 -1
  1219. package/dist/overlay/ContextMenu.d.ts.map +1 -1
  1220. package/dist/overlay/DropdownMenu.cjs +46 -35
  1221. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  1222. package/dist/overlay/DropdownMenu.d.ts +2 -2
  1223. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  1224. package/dist/overlay/DropdownMenu.js +46 -35
  1225. package/dist/overlay/DropdownMenu.js.map +1 -1
  1226. package/dist/overlay/DropdownMenuSubmenu.d.ts +1 -1
  1227. package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -1
  1228. package/dist/overlay/HoverCard.d.ts +2 -2
  1229. package/dist/overlay/HoverCard.d.ts.map +1 -1
  1230. package/dist/overlay/Modal.cjs +105 -18
  1231. package/dist/overlay/Modal.cjs.map +1 -1
  1232. package/dist/overlay/Modal.d.ts +2 -2
  1233. package/dist/overlay/Modal.d.ts.map +1 -1
  1234. package/dist/overlay/Modal.js +105 -18
  1235. package/dist/overlay/Modal.js.map +1 -1
  1236. package/dist/overlay/Toast.d.ts +2 -2
  1237. package/dist/overlay/Toast.d.ts.map +1 -1
  1238. package/dist/overlay/Tour.d.ts +1 -1
  1239. package/dist/overlay/Tour.d.ts.map +1 -1
  1240. package/dist/overlay/TourCard.d.ts +2 -2
  1241. package/dist/overlay/TourCard.d.ts.map +1 -1
  1242. package/dist/overlay/TourProvider.d.ts +2 -2
  1243. package/dist/overlay/TourProvider.d.ts.map +1 -1
  1244. package/dist/overlay/TourSpotlight.d.ts +1 -1
  1245. package/dist/overlay/TourSpotlight.d.ts.map +1 -1
  1246. package/dist/overlay/dropdownMenuContext.d.ts +1 -1
  1247. package/dist/overlay/toast-context.d.ts +2 -2
  1248. package/dist/overlay/tour-context.d.ts +1 -1
  1249. package/dist/overlay/tour-types.d.ts +1 -1
  1250. package/dist/profiles/cel/celEditor.d.ts +4 -4
  1251. package/dist/profiles/cel/celEditor.d.ts.map +1 -1
  1252. package/dist/profiles/connections/catalogTree.d.ts +1 -1
  1253. package/dist/profiles/connections/catalogTree.d.ts.map +1 -1
  1254. package/dist/profiles/connections/connectionBrowserModel.d.ts +1 -1
  1255. package/dist/profiles/connections/connectionQueryWorkspace.d.ts +2 -2
  1256. package/dist/profiles/connections/connectionQueryWorkspace.d.ts.map +1 -1
  1257. package/dist/profiles/connections/inspectionStatus.d.ts +1 -1
  1258. package/dist/profiles/connections/inspectionStatus.d.ts.map +1 -1
  1259. package/dist/profiles/editor/profileBuilder.d.ts +3 -3
  1260. package/dist/profiles/editor/profileBuilder.d.ts.map +1 -1
  1261. package/dist/profiles/editor/profileBuilderWorkspace.d.ts +1 -1
  1262. package/dist/profiles/editor/profileBuilderWorkspace.d.ts.map +1 -1
  1263. package/dist/profiles/editor/profileEditor.d.ts +1 -1
  1264. package/dist/profiles/editor/profileEditor.d.ts.map +1 -1
  1265. package/dist/profiles/editor/profileEditorPreview.d.ts +1 -1
  1266. package/dist/profiles/editor/profileEditorPreview.d.ts.map +1 -1
  1267. package/dist/profiles/editor/profileEditorRail.d.ts +1 -1
  1268. package/dist/profiles/editor/profileEditorRail.d.ts.map +1 -1
  1269. package/dist/profiles/editor/profileEditorRaw.d.ts +1 -1
  1270. package/dist/profiles/editor/profileEditorRaw.d.ts.map +1 -1
  1271. package/dist/profiles/editor/profileEditorSections.d.ts +3 -3
  1272. package/dist/profiles/editor/profileEditorSections.d.ts.map +1 -1
  1273. package/dist/profiles/elasticsearch/esParamMappingPill.d.ts +1 -1
  1274. package/dist/profiles/elasticsearch/esParamMappingPill.d.ts.map +1 -1
  1275. package/dist/profiles/elasticsearch/esParamOperandExtension.d.ts +1 -1
  1276. package/dist/profiles/elasticsearch/esQueryBuilder.d.ts +2 -2
  1277. package/dist/profiles/elasticsearch/esQueryBuilder.d.ts.map +1 -1
  1278. package/dist/profiles/elasticsearch/esQueryClauseGroup.d.ts +1 -1
  1279. package/dist/profiles/elasticsearch/esQueryClauseGroup.d.ts.map +1 -1
  1280. package/dist/profiles/elasticsearch/esQueryConditionRow.d.ts +1 -1
  1281. package/dist/profiles/elasticsearch/esQueryConditionRow.d.ts.map +1 -1
  1282. package/dist/profiles/elasticsearch/esQueryOperandEditors.d.ts +2 -2
  1283. package/dist/profiles/elasticsearch/esQueryOperandEditors.d.ts.map +1 -1
  1284. package/dist/profiles/elasticsearch/esQueryOutputEditor.d.ts +1 -1
  1285. package/dist/profiles/elasticsearch/esQueryOutputEditor.d.ts.map +1 -1
  1286. package/dist/profiles/elasticsearch/esQueryPreview.d.ts +1 -1
  1287. package/dist/profiles/elasticsearch/esQueryPreview.d.ts.map +1 -1
  1288. package/dist/profiles/elasticsearch/esQuerySortEditor.d.ts +1 -1
  1289. package/dist/profiles/elasticsearch/esQuerySortEditor.d.ts.map +1 -1
  1290. package/dist/profiles/elasticsearch/esValueCombobox.d.ts +2 -2
  1291. package/dist/profiles/elasticsearch/esValueCombobox.d.ts.map +1 -1
  1292. package/dist/profiles/fields/profileColumnPicker.d.ts +1 -1
  1293. package/dist/profiles/fields/profileColumnPicker.d.ts.map +1 -1
  1294. package/dist/profiles/fields/profileFieldControls.d.ts +3 -3
  1295. package/dist/profiles/fields/profileFieldControls.d.ts.map +1 -1
  1296. package/dist/profiles/fields/profileFieldEditor.d.ts +3 -3
  1297. package/dist/profiles/fields/profileFieldEditor.d.ts.map +1 -1
  1298. package/dist/profiles/fields/profileFieldFilterEditor.d.ts +1 -1
  1299. package/dist/profiles/fields/profileFieldFilterEditor.d.ts.map +1 -1
  1300. package/dist/profiles/fields/profileFieldIcons.d.ts +1 -1
  1301. package/dist/profiles/fields/profileFieldList.d.ts +2 -2
  1302. package/dist/profiles/fields/profileFieldList.d.ts.map +1 -1
  1303. package/dist/profiles/fields/profileFieldManager.d.ts +1 -1
  1304. package/dist/profiles/fields/profileFieldManager.d.ts.map +1 -1
  1305. package/dist/profiles/fields/profileFieldState.d.ts +1 -1
  1306. package/dist/profiles/processor/processorPipeline.d.ts +1 -1
  1307. package/dist/profiles/processor/processorPipeline.d.ts.map +1 -1
  1308. package/dist/profiles/processor/processorPipelineEditor.d.ts +1 -1
  1309. package/dist/profiles/processor/processorPipelineEditor.d.ts.map +1 -1
  1310. package/dist/profiles/processor/processorPreviewTable.d.ts +1 -1
  1311. package/dist/profiles/processor/processorPreviewTable.d.ts.map +1 -1
  1312. package/dist/profiles/query/jsonPathSample.d.ts +1 -1
  1313. package/dist/profiles/query/jsonPathSampleRow.d.ts +2 -2
  1314. package/dist/profiles/query/jsonPathSampleRow.d.ts.map +1 -1
  1315. package/dist/profiles/query/kubernetesWorkloadTargetPicker.d.ts +1 -1
  1316. package/dist/profiles/query/kubernetesWorkloadTargetPicker.d.ts.map +1 -1
  1317. package/dist/profiles/query/prometheusResults.d.ts +2 -2
  1318. package/dist/profiles/query/prometheusResults.d.ts.map +1 -1
  1319. package/dist/profiles/query/queryRowLimits.d.ts +1 -1
  1320. package/dist/profiles/query/queryRowLimits.d.ts.map +1 -1
  1321. package/dist/profiles/query/queryTargetPicker.d.ts +1 -1
  1322. package/dist/profiles/query/queryTargetPicker.d.ts.map +1 -1
  1323. package/dist/profiles/wizard/profileWizard.d.ts +1 -1
  1324. package/dist/profiles/wizard/profileWizard.d.ts.map +1 -1
  1325. package/dist/profiles/wizard/profileWizardQueryStep.d.ts +1 -1
  1326. package/dist/profiles/wizard/profileWizardQueryStep.d.ts.map +1 -1
  1327. package/dist/profiles/wizard/profileWizardSteps.d.ts +4 -4
  1328. package/dist/profiles/wizard/profileWizardSteps.d.ts.map +1 -1
  1329. package/dist/rpc/ChatLayer.d.ts +1 -1
  1330. package/dist/rpc/ChatLayer.d.ts.map +1 -1
  1331. package/dist/rpc/CommandForm.d.ts +1 -1
  1332. package/dist/rpc/CommandForm.d.ts.map +1 -1
  1333. package/dist/rpc/CommandOutput.d.ts +1 -1
  1334. package/dist/rpc/CommandOutput.d.ts.map +1 -1
  1335. package/dist/rpc/EndpointList.d.ts +2 -2
  1336. package/dist/rpc/EndpointList.d.ts.map +1 -1
  1337. package/dist/rpc/EntityExplorerApp.d.ts +2 -2
  1338. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  1339. package/dist/rpc/ExecutionResult.d.ts +1 -1
  1340. package/dist/rpc/ExecutionResult.d.ts.map +1 -1
  1341. package/dist/rpc/FilterForm.cjs +26 -11
  1342. package/dist/rpc/FilterForm.cjs.map +1 -1
  1343. package/dist/rpc/FilterForm.d.ts +4 -1
  1344. package/dist/rpc/FilterForm.d.ts.map +1 -1
  1345. package/dist/rpc/FilterForm.js +26 -11
  1346. package/dist/rpc/FilterForm.js.map +1 -1
  1347. package/dist/rpc/FilterFormFields.cjs +3 -2
  1348. package/dist/rpc/FilterFormFields.cjs.map +1 -1
  1349. package/dist/rpc/FilterFormFields.d.ts +2 -1
  1350. package/dist/rpc/FilterFormFields.d.ts.map +1 -1
  1351. package/dist/rpc/FilterFormFields.js +3 -2
  1352. package/dist/rpc/FilterFormFields.js.map +1 -1
  1353. package/dist/rpc/InlineError.d.ts +1 -1
  1354. package/dist/rpc/InlineError.d.ts.map +1 -1
  1355. package/dist/rpc/OperationActionBar.cjs +81 -17
  1356. package/dist/rpc/OperationActionBar.cjs.map +1 -1
  1357. package/dist/rpc/OperationActionBar.d.ts +8 -3
  1358. package/dist/rpc/OperationActionBar.d.ts.map +1 -1
  1359. package/dist/rpc/OperationActionBar.js +82 -18
  1360. package/dist/rpc/OperationActionBar.js.map +1 -1
  1361. package/dist/rpc/OperationActionDialog.d.ts +1 -1
  1362. package/dist/rpc/OperationActionDialog.d.ts.map +1 -1
  1363. package/dist/rpc/OperationCatalog.cjs +129 -76
  1364. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  1365. package/dist/rpc/OperationCatalog.d.ts +6 -2
  1366. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  1367. package/dist/rpc/OperationCatalog.js +130 -77
  1368. package/dist/rpc/OperationCatalog.js.map +1 -1
  1369. package/dist/rpc/OperationCatalogActions.cjs +100 -0
  1370. package/dist/rpc/OperationCatalogActions.cjs.map +1 -0
  1371. package/dist/rpc/OperationCatalogActions.d.ts +22 -0
  1372. package/dist/rpc/OperationCatalogActions.d.ts.map +1 -0
  1373. package/dist/rpc/OperationCatalogActions.js +100 -0
  1374. package/dist/rpc/OperationCatalogActions.js.map +1 -0
  1375. package/dist/rpc/OperationCommandPage.d.ts +1 -1
  1376. package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
  1377. package/dist/rpc/OperationEntityContextPicker.cjs +129 -116
  1378. package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -1
  1379. package/dist/rpc/OperationEntityContextPicker.d.ts +18 -1
  1380. package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -1
  1381. package/dist/rpc/OperationEntityContextPicker.js +130 -117
  1382. package/dist/rpc/OperationEntityContextPicker.js.map +1 -1
  1383. package/dist/rpc/OperationEntityPage.d.ts +2 -2
  1384. package/dist/rpc/OperationEntityPage.d.ts.map +1 -1
  1385. package/dist/rpc/OperationResultView.cjs +7 -4
  1386. package/dist/rpc/OperationResultView.cjs.map +1 -1
  1387. package/dist/rpc/OperationResultView.d.ts +5 -3
  1388. package/dist/rpc/OperationResultView.d.ts.map +1 -1
  1389. package/dist/rpc/OperationResultView.js +7 -4
  1390. package/dist/rpc/OperationResultView.js.map +1 -1
  1391. package/dist/rpc/RouterProvider.d.ts +2 -2
  1392. package/dist/rpc/RouterProvider.d.ts.map +1 -1
  1393. package/dist/rpc/SchemaActionForm.d.ts +2 -2
  1394. package/dist/rpc/SchemaActionForm.d.ts.map +1 -1
  1395. package/dist/rpc/actionIconMap.cjs +11 -0
  1396. package/dist/rpc/actionIconMap.cjs.map +1 -0
  1397. package/dist/rpc/actionIconMap.d.ts +3 -0
  1398. package/dist/rpc/actionIconMap.d.ts.map +1 -0
  1399. package/dist/rpc/actionIconMap.js +11 -0
  1400. package/dist/rpc/actionIconMap.js.map +1 -0
  1401. package/dist/rpc/formMetadata.d.ts +1 -1
  1402. package/dist/rpc/operationCatalogUrl.cjs +28 -0
  1403. package/dist/rpc/operationCatalogUrl.cjs.map +1 -0
  1404. package/dist/rpc/operationCatalogUrl.d.ts +3 -0
  1405. package/dist/rpc/operationCatalogUrl.d.ts.map +1 -0
  1406. package/dist/rpc/operationCatalogUrl.js +28 -0
  1407. package/dist/rpc/operationCatalogUrl.js.map +1 -0
  1408. package/dist/rpc/operationErrorDiagnostics.d.ts +1 -1
  1409. package/dist/rpc/operationErrorDiagnostics.d.ts.map +1 -1
  1410. package/dist/rpc/router.d.ts +1 -1
  1411. package/dist/rpc/rowNavigation.cjs +4 -3
  1412. package/dist/rpc/rowNavigation.cjs.map +1 -1
  1413. package/dist/rpc/rowNavigation.d.ts +1 -1
  1414. package/dist/rpc/rowNavigation.d.ts.map +1 -1
  1415. package/dist/rpc/rowNavigation.js +4 -3
  1416. package/dist/rpc/rowNavigation.js.map +1 -1
  1417. package/dist/rpc/rpc-story.fixtures.d.ts +1 -1
  1418. package/dist/rpc/types.cjs.map +1 -1
  1419. package/dist/rpc/types.d.ts +2 -2
  1420. package/dist/rpc/types.d.ts.map +1 -1
  1421. package/dist/rpc/types.js.map +1 -1
  1422. package/dist/rpc.cjs +2 -0
  1423. package/dist/rpc.cjs.map +1 -1
  1424. package/dist/rpc.d.ts +2 -1
  1425. package/dist/rpc.d.ts.map +1 -1
  1426. package/dist/rpc.js +2 -0
  1427. package/dist/rpc.js.map +1 -1
  1428. package/dist/runtime-profile.cjs +7 -0
  1429. package/dist/runtime-profile.cjs.map +1 -0
  1430. package/dist/runtime-profile.d.ts +2 -0
  1431. package/dist/runtime-profile.d.ts.map +1 -0
  1432. package/dist/runtime-profile.js +7 -0
  1433. package/dist/runtime-profile.js.map +1 -0
  1434. package/dist/styles.css +1 -1
  1435. package/package.json +8 -3
  1436. package/dist/components/combobox-utils.cjs.map +0 -1
  1437. package/dist/components/combobox-utils.d.ts.map +0 -1
  1438. package/dist/components/combobox-utils.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBar.js","sources":["../../src/components/FilterBar.tsx"],"sourcesContent":["import {\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n type Ref,\n type RefObject,\n} from \"react\";\nimport {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingPortal,\n offset,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useInteractions,\n useMergeRefs,\n useRole,\n type Placement,\n} from \"@floating-ui/react\";\nimport { FilterPill } from \"../data/FilterPill\";\nimport { FILTER_INPUT_DEBOUNCE_MS, FilterBarContext } from \"./filter-bar-context\";\nimport {\n comboboxLabelProps,\n lookupFieldWidthClass,\n multiSelectOptionText,\n nextFilterMode,\n sizedIcon,\n summarizeMultiFilter,\n updateMultiFilterValue,\n useDebouncedMultiDraft,\n type FilterBarMultiFilterMode,\n} from \"./filter-bar-field-utils\";\nimport {\n MultiFilterField,\n MultiFilterPanel,\n type FilterBarMultiFilter,\n} from \"./filter-bar-multi\";\nimport {\n clearFilterBarFilter,\n dateRangeFilterProps,\n isFilterBarFilterActive,\n} from \"./filter-bar-utils\";\n\nexport { TriStateMultiSelect, type TriStateMultiSelectProps } from \"./filter-bar-multi\";\nexport type { FilterBarMultiFilter, FilterBarMultiFilterMode };\nimport { Icon, LabelIcon, type LabelIconSpec } from \"../data/Icon\";\nimport { formatDateTimeRelative } from \"../data/cells/timestamp-format\";\nimport { UiChevronDown, UiChevronRight, UiChevronUp, UiClose, UiFilter, UiSearch } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { useEscapeLayer, useFloatingZIndex } from \"../overlay/modalStack\";\nimport { Button } from \"./button\";\nimport { Combobox, type ComboboxOption } from \"./Combobox\";\nimport { DateTimePicker } from \"./DateTimePicker\";\nimport { MultiSelect, type MultiSelectOption } from \"./MultiSelect\";\nimport { RangeSlider } from \"./RangeSlider\";\nimport { TimeRange, type TimeRangePresetGroup } from \"./TimeRange\";\nimport { TriStateToggle, type TriState, type TriStateLabels } from \"./TriStateToggle\";\nimport { WorkloadPicker } from \"./WorkloadPicker\";\nimport type { WorkloadKind, WorkloadResource } from \"./workload-picker-utils\";\n\nconst FILTER_BAR_GAP_PX = 8;\nconst FILTER_BAR_OVERFLOW_TRIGGER_ESTIMATE_PX = 44;\n\nexport type FilterBarSearchProps = {\n /** Controlled search text. */\n value: string;\n /** Called with the next search text. Debounced when `autoSubmit` is true. */\n onChange: (value: string) => void;\n /** Placeholder shown in the search input. */\n placeholder?: string;\n /** Accessible label for the search input. */\n ariaLabel?: string;\n /** Classes applied to the search input. */\n className?: string;\n};\n\nexport type FilterBarTextFilter = {\n /** Stable filter key used for rendering and overflow measurement. */\n key: string;\n /** Renders a free-text input. */\n kind: \"text\";\n /** Filter label shown on the control. */\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n /** Optional helper text shown in filter popovers. */\n description?: string;\n /** Controlled input value. */\n value: string;\n /** Called with the next input value. */\n onChange: (value: string) => void;\n /** Placeholder shown in the input. */\n placeholder?: string;\n /** Disables this filter. */\n disabled?: boolean;\n /** Classes applied to this filter control. */\n className?: string;\n};\n\nexport type FilterBarLookupOption = {\n /** Option value written to filter state. */\n value: string;\n /** Optional display label; falls back to `value`. */\n label?: string;\n /** Prevents choosing the option. */\n disabled?: boolean;\n /** Optional browser tooltip. */\n title?: string;\n};\n\nexport type FilterBarLookupInputType = \"text\" | \"number\" | \"date\";\n\nexport type FilterBarLookupFilter = {\n key: string;\n /** Renders an input backed by a datalist-style option set. */\n kind: \"lookup\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n /** Controlled selected or typed value. */\n value: string;\n /** Suggestions for the lookup input. */\n options: FilterBarLookupOption[];\n onChange: (value: string) => void;\n placeholder?: string;\n /** Native input type for the lookup field. */\n inputType?: FilterBarLookupInputType;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarLookupMultiFilter = {\n key: string;\n /** Renders a multi-value lookup filter. */\n kind: \"lookup-multi\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n /** Controlled selected values. */\n value: string[];\n /** Suggestions for the lookup input. */\n options: FilterBarLookupOption[];\n onChange: (value: string[]) => void;\n placeholder?: string;\n /**\n * Optional async search invoked (debounced) as the user types; the consumer\n * fetches matching options and feeds them back via `options`. When set, the\n * typeahead is server-driven (results replace the list); when absent it\n * filters the static `options` client-side.\n */\n onSearch?: (query: string) => void;\n /** Shows a loading indicator while a search is in flight. */\n loading?: boolean;\n /** True when `options` is a capped head of a larger server-side result set. */\n truncated?: boolean;\n /** Total distinct option count behind a truncated result set. */\n total?: number;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarNestedMultiGroup = {\n /** Stable group id. */\n groupKey: string;\n /** Optional visible group label. */\n label?: string;\n /** Options in this group. */\n options: MultiSelectOption[];\n};\n\nexport type FilterBarNestedMultiFilter = {\n key: string;\n /** Renders grouped include/exclude chips. */\n kind: \"nested-multi\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n // Same wire shape as FilterBarMultiFilter so consumers can swap kinds\n // without changing their state slot.\n value: Record<string, FilterBarMultiFilterMode>;\n groups: FilterBarNestedMultiGroup[];\n onChange: (value: Record<string, FilterBarMultiFilterMode>) => void;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarWorkloadFilter = {\n key: string;\n /** Renders the shared Kubernetes workload picker. */\n kind: \"workload\";\n label: string;\n icon?: LabelIconSpec;\n description?: string;\n value: string;\n onChange: (value: string) => void;\n loadWorkloads: (\n kinds: WorkloadKind[],\n namespace?: string,\n ) => Promise<Partial<Record<WorkloadKind, WorkloadResource[]>>>;\n kinds?: WorkloadKind[];\n /**\n * Render the sole loaded workload as plain text rather than a picker. See\n * {@link WorkloadPickerProps.collapseSingleOption}.\n */\n collapseSingleOption?: boolean;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarSelectMultiFilter = {\n key: string;\n /** Renders a compact multi-select dropdown. */\n kind: \"select-multi\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n /** Controlled selected values. */\n value: string[];\n /** Available dropdown options. */\n options: MultiSelectOption[];\n onChange: (value: string[]) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarNumberValue = {\n /** Minimum bound as a string so callers can preserve draft input. */\n min?: string;\n /** Maximum bound as a string so callers can preserve draft input. */\n max?: string;\n};\n\nexport type FilterBarNumberFilter = {\n key: string;\n /** Renders paired min/max numeric controls. */\n kind: \"number\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n /** Controlled min/max value. */\n value: FilterBarNumberValue;\n onChange: (value: FilterBarNumberValue) => void;\n /** Lower bound used by the optional range slider. */\n domainMin?: number;\n /** Upper bound used by the optional range slider. */\n domainMax?: number;\n /** Step size for number inputs and slider movement. */\n step?: number;\n /** Formatter used for slider labels. */\n formatValue?: (value: number) => string;\n minPlaceholder?: string;\n maxPlaceholder?: string;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarEnumFilter = {\n key: string;\n /** Renders a single-select dropdown. */\n kind: \"enum\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n /** Controlled selected value. */\n value: string;\n /** Available enum options. */\n options: Array<{ value: string; label?: string }>;\n onChange: (value: string) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarBooleanFilter = {\n key: string;\n /** Renders a boolean toggle. */\n kind: \"boolean\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n /** Controlled checked state. */\n value: boolean;\n onChange: (value: boolean) => void;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarTriStateFilter = {\n key: string;\n /** Renders a yes/no/any toggle for a nullable boolean field. */\n kind: \"tristate\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n /** Controlled state; undefined means the filter is off. */\n value: TriState;\n onChange: (value: TriState) => void;\n /** Per-state wording, e.g. { on: \"Deductible\", off: \"Not deductible\" }. */\n labels?: TriStateLabels;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarFilter =\n | FilterBarTextFilter\n | FilterBarLookupFilter\n | FilterBarLookupMultiFilter\n | FilterBarMultiFilter\n | FilterBarNestedMultiFilter\n | FilterBarWorkloadFilter\n | FilterBarSelectMultiFilter\n | FilterBarNumberFilter\n | FilterBarEnumFilter\n | FilterBarBooleanFilter\n | FilterBarTriStateFilter\n | FilterBarDateRangeFilter;\n\nexport type FilterBarRangePreset = {\n /** Visible preset label. */\n label: string;\n /** Start value applied by the preset. */\n from: string;\n /** End value applied by the preset. */\n to: string;\n};\n\nexport type FilterBarRangeProps = {\n /** Current start value. */\n from?: string;\n /** Current end value. */\n to?: string;\n /** Called when the user applies the range. */\n onApply: (from: string, to: string) => void;\n /** Presets or preset groups shown in the range popup. */\n presets?: Array<FilterBarRangePreset | TimeRangePresetGroup>;\n /** Enables time inputs when using date-time values. */\n timeEnabled?: boolean;\n /** Selected timezone. */\n timeZone?: string;\n /** Available timezone options. */\n timeZones?: string[];\n fromPlaceholder?: string;\n toPlaceholder?: string;\n emptyLabel?: string;\n className?: string;\n disabled?: boolean;\n};\n\n/**\n * A date range that lives among the filters rather than in the bar's trailing\n * range slot.\n *\n * The trailing slot holds one range, which is right when a result has one\n * timestamp and the range is the primary way through it. A result with several\n * — `created_at` and `updated_at`, `@timestamp` and `event.ingested` — has no\n * such primary, and each of the others is a filter like any other.\n */\nexport type FilterBarDateRangeFilter = FilterBarRangeProps & {\n key: string;\n kind: \"date-range\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n};\n\nexport type FilterBarProps = {\n /** Optional global search control shown first. */\n search?: FilterBarSearchProps;\n /** Structured filters rendered after search. */\n filters?: FilterBarFilter[];\n /** Date-time range control. */\n timeRange?: FilterBarRangeProps;\n /** Date-only range control. */\n dateRange?: FilterBarRangeProps;\n /** Additional content rendered in the filter row. */\n children?: ReactNode;\n /** Content rendered before search and filters. */\n leading?: ReactNode;\n /** Content rendered at the end of the bar. */\n trailing?: ReactNode;\n /** Classes applied to the root bar. */\n className?: string;\n /**\n * When false, debounced fields forward edits immediately and an Apply button\n * is rendered in the trailing slot. Defaults to true.\n */\n autoSubmit?: boolean;\n /** Called by the Apply button when `autoSubmit` is false. */\n onApply?: () => void;\n /** Label for the Apply button. */\n applyLabel?: string;\n /** Shows a pending state on the Apply button. */\n isPending?: boolean;\n /** `responsive` moves hidden filters into an overflow popover; `wrap` lets them wrap. */\n overflowMode?: \"responsive\" | \"wrap\";\n};\n\nexport function FilterBar({\n search,\n filters,\n timeRange,\n dateRange,\n children,\n leading,\n trailing,\n className,\n autoSubmit = true,\n onApply,\n applyLabel = \"Apply\",\n isPending = false,\n overflowMode = \"responsive\",\n}: FilterBarProps) {\n const hasRangeControls = Boolean(timeRange || dateRange);\n const showApply = !autoSubmit && !!onApply;\n const contextValue = useMemo(() => ({ autoSubmit }), [autoSubmit]);\n const allFilters = filters ?? [];\n const responsiveOverflow = overflowMode === \"responsive\" && allFilters.length > 0;\n const mobileFilterOverflow = useMediaQuery(\"(max-width: 767px)\");\n const filterListRef = useRef<HTMLDivElement>(null);\n const overflowTriggerRef = useRef<HTMLButtonElement>(null);\n const filterNodeRefs = useRef(new Map<string, HTMLDivElement>());\n const filterWidthCache = useRef(new Map<string, number>());\n const filterKeys = useMemo(\n () => allFilters.map((filter) => filter.key).join(\"\\u0000\"),\n [allFilters],\n );\n const [visibleFilterCount, setVisibleFilterCount] = useState(allFilters.length);\n\n // Latest-value refs so measureOverflow can be a stable useCallback. Reading\n // the current values through refs sidesteps the closure-staleness problem\n // without putting array references in the dep list — which is what caused\n // the \"Maximum update depth exceeded\" cascade (allFilters in the deps made\n // measureOverflow change on every render → ResizeObserver effect re-ran →\n // setVisibleFilterCount fired → repeat).\n const allFiltersRef = useRef(allFilters);\n const responsiveOverflowRef = useRef(responsiveOverflow);\n const mobileFilterOverflowRef = useRef(mobileFilterOverflow);\n allFiltersRef.current = allFilters;\n responsiveOverflowRef.current = responsiveOverflow;\n mobileFilterOverflowRef.current = mobileFilterOverflow;\n\n useLayoutEffect(() => {\n setVisibleFilterCount(\n responsiveOverflowRef.current && mobileFilterOverflowRef.current\n ? 0\n : allFiltersRef.current.length,\n );\n }, [filterKeys, mobileFilterOverflow]);\n\n const measureOverflow = useCallback(() => {\n const current = allFiltersRef.current;\n if (!responsiveOverflowRef.current) {\n setVisibleFilterCount(current.length);\n return;\n }\n if (mobileFilterOverflowRef.current) {\n setVisibleFilterCount(0);\n return;\n }\n\n const filterList = filterListRef.current;\n if (!filterList) return;\n\n const availableWidth = Math.floor(filterList.getBoundingClientRect().width);\n if (availableWidth <= 0) return;\n\n const widths = current.map((filter) => {\n const node = filterNodeRefs.current.get(filter.key);\n const measured = node?.getBoundingClientRect().width ?? 0;\n if (measured > 0) {\n const width = Math.ceil(measured);\n filterWidthCache.current.set(filter.key, width);\n return width;\n }\n return filterWidthCache.current.get(filter.key) ?? estimateFilterWidth(filter);\n });\n\n const triggerWidth = Math.ceil(\n overflowTriggerRef.current?.getBoundingClientRect().width ??\n FILTER_BAR_OVERFLOW_TRIGGER_ESTIMATE_PX,\n );\n const triggerGap = triggerWidth > 0 ? FILTER_BAR_GAP_PX : 0;\n const allFiltersWidth = sumFilterWidths(widths);\n const nextVisible =\n allFiltersWidth <= availableWidth\n ? current.length\n : calculateVisibleFilterCount(\n widths,\n Math.max(0, availableWidth - triggerWidth - triggerGap),\n );\n setVisibleFilterCount((prev) => (prev === nextVisible ? prev : nextVisible));\n }, []);\n\n useLayoutEffect(() => {\n measureOverflow();\n }, [measureOverflow]);\n\n useEffect(() => {\n if (!responsiveOverflow) return;\n\n const filterList = filterListRef.current;\n const trigger = overflowTriggerRef.current;\n const ResizeObserverCtor = typeof ResizeObserver === \"undefined\" ? null : ResizeObserver;\n\n if (!ResizeObserverCtor) {\n window.addEventListener(\"resize\", measureOverflow);\n measureOverflow();\n return () => window.removeEventListener(\"resize\", measureOverflow);\n }\n\n const observer = new ResizeObserverCtor(() => measureOverflow());\n if (filterList) observer.observe(filterList);\n if (trigger) observer.observe(trigger);\n window.addEventListener(\"resize\", measureOverflow);\n measureOverflow();\n\n return () => {\n observer.disconnect();\n window.removeEventListener(\"resize\", measureOverflow);\n };\n }, [measureOverflow, responsiveOverflow, mobileFilterOverflow]);\n\n const inlineFilters = responsiveOverflow\n ? allFilters.slice(0, Math.min(visibleFilterCount, allFilters.length))\n : allFilters;\n const overflowFilters = responsiveOverflow\n ? allFilters.slice(Math.min(visibleFilterCount, allFilters.length))\n : [];\n const activeOverflowCount = overflowFilters.filter(isFilterBarFilterActive).length;\n\n const setFilterNode = useCallback((key: string, node: HTMLDivElement | null) => {\n if (!node) {\n filterNodeRefs.current.delete(key);\n return;\n }\n filterNodeRefs.current.set(key, node);\n }, []);\n\n return (\n <FilterBarContext.Provider value={contextValue}>\n <div\n data-slot=\"filter-bar\"\n className={cn(\n \"flex flex-nowrap items-center gap-2 overflow-visible bg-background py-1.5\",\n \"flex-wrap md:flex-nowrap\",\n overflowMode === \"wrap\" && \"flex-wrap\",\n className,\n )}\n >\n {leading && <div className=\"flex shrink-0 items-center gap-2\">{leading}</div>}\n\n {search && <SearchField search={search} />}\n\n {children}\n\n {allFilters.length > 0 && (\n <div\n ref={filterListRef}\n data-filter-bar-list\n className={cn(\n \"flex min-w-0 items-center gap-2\",\n overflowMode === \"wrap\" ? \"flex-wrap\" : \"flex-1\",\n )}\n >\n {inlineFilters.map((filter, index) => (\n <div\n key={filter.key}\n ref={(node) => setFilterNode(filter.key, node)}\n data-filter-bar-item={filter.key}\n className=\"min-w-0 shrink-0\"\n >\n {renderFilterField(filter, !search && index === 0)}\n </div>\n ))}\n </div>\n )}\n\n {responsiveOverflow && overflowFilters.length > 0 && (\n <OverflowFiltersMenu\n triggerRef={overflowTriggerRef}\n filters={overflowFilters}\n activeHidden={activeOverflowCount}\n {...(onApply ? { onApply } : {})}\n />\n )}\n\n {(hasRangeControls || trailing || showApply) && (\n <div className=\"ml-auto flex min-w-0 shrink-0 flex-wrap items-center justify-end gap-2\">\n {dateRange && <RangeControlButton kind=\"date\" label=\"Date range\" {...dateRange} />}\n {timeRange && (\n <RangeControlButton\n kind={timeRange.timeEnabled === false ? \"date\" : \"time\"}\n label={timeRange.timeEnabled === false ? \"Date range\" : \"Time range\"}\n {...timeRange}\n />\n )}\n {trailing}\n {showApply && (\n <Button\n type=\"button\"\n variant=\"default\"\n size=\"sm\"\n disabled={isPending}\n onClick={onApply}\n >\n {isPending ? \"Loading…\" : applyLabel}\n </Button>\n )}\n </div>\n )}\n </div>\n </FilterBarContext.Provider>\n );\n}\n\ntype FilterBarFilterPanelChrome = \"full\" | \"embedded\";\n\nexport function FilterBarFilterPanel({\n filter,\n chrome = \"full\",\n autoSubmit = true,\n}: {\n filter: FilterBarFilter;\n chrome?: FilterBarFilterPanelChrome;\n autoSubmit?: boolean;\n}) {\n const contextValue = useMemo(() => ({ autoSubmit }), [autoSubmit]);\n\n return (\n <FilterBarContext.Provider value={contextValue}>\n <FilterBarFilterPanelContent filter={filter} chrome={chrome} />\n </FilterBarContext.Provider>\n );\n}\n\nfunction FilterBarFilterPanelContent({\n filter,\n chrome = \"full\",\n}: {\n filter: FilterBarFilter;\n chrome?: FilterBarFilterPanelChrome;\n}) {\n return (\n <>\n {filter.kind === \"lookup\" && <LookupFilterField filter={filter} grow />}\n {filter.kind === \"lookup-multi\" && <LookupMultiFilterField filter={filter} grow />}\n {filter.kind === \"multi\" && <MultiFilterPanel filter={filter} chrome={chrome} />}\n {filter.kind === \"nested-multi\" && <NestedMultiFilterPanel filter={filter} chrome={chrome} />}\n {filter.kind === \"workload\" && <WorkloadFilterField filter={filter} grow />}\n {filter.kind === \"select-multi\" && <SelectMultiFilterField filter={filter} grow />}\n {filter.kind === \"number\" && <NumberFilterPanel filter={filter} chrome={chrome} />}\n {filter.kind === \"enum\" && <EnumFilterField filter={filter} grow />}\n {filter.kind === \"boolean\" && <BooleanFilterField filter={filter} />}\n {filter.kind === \"tristate\" && <TriStateFilterField filter={filter} />}\n {filter.kind === \"date-range\" && (\n <FilterBarRangePanel\n kind={filter.timeEnabled === false ? \"date\" : \"time\"}\n label={filter.label}\n {...dateRangeFilterProps(filter)}\n />\n )}\n {filter.kind === \"text\" && <TextFilterField filter={filter} grow />}\n </>\n );\n}\n\nfunction renderFilterField(filter: FilterBarFilter, grow: boolean) {\n if (filter.kind === \"lookup\") {\n return <LookupFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"lookup-multi\") {\n return <LookupMultiFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"multi\") {\n return <MultiFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"nested-multi\") {\n return <NestedMultiFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"workload\") {\n return <WorkloadFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"select-multi\") {\n return <SelectMultiFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"number\") {\n return <NumberFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"enum\") {\n return <EnumFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"boolean\") {\n return <BooleanFilterField filter={filter} />;\n }\n\n if (filter.kind === \"tristate\") {\n return <TriStateFilterField filter={filter} />;\n }\n\n if (filter.kind === \"date-range\") {\n return (\n <RangeControlButton\n kind={filter.timeEnabled === false ? \"date\" : \"time\"}\n label={filter.label}\n {...dateRangeFilterProps(filter)}\n />\n );\n }\n\n return <TextFilterField filter={filter} grow={grow} />;\n}\n\nfunction OverflowFiltersMenu({\n triggerRef,\n filters,\n activeHidden,\n onApply,\n}: {\n triggerRef: RefObject<HTMLButtonElement>;\n filters: FilterBarFilter[];\n activeHidden: number;\n onApply?: () => void;\n}) {\n const [open, setOpen] = useState(false);\n const [stagedValues, setStagedValues] = useState<Record<string, FilterBarValue>>({});\n const hasHidden = filters.length > 0;\n const hiddenFilterKeys = useMemo(\n () => filters.map((filter) => filter.key).join(\"\\u0000\"),\n [filters],\n );\n // Re-stage from the live filters on every open/close so an un-applied edit is\n // discarded, preserving the prior close behaviour.\n const { refs, floatingStyles, context, floatingZ, getReferenceProps, getFloatingProps } =\n useAnchoredPopup(\n open,\n (next) => {\n setStagedValues(createFilterValueMap(filters));\n setOpen(next);\n },\n \"bottom-end\",\n );\n const closeOverflowMenu = useCallback(() => {\n setStagedValues(createFilterValueMap(filters));\n setOpen(false);\n }, [filters]);\n // Merge floating-ui's reference ref with the caller's triggerRef (the parent\n // measures the trigger width through it for overflow layout).\n const setTriggerRef = useMergeRefs([refs.setReference, triggerRef]);\n\n useEffect(() => {\n if (!hasHidden) closeOverflowMenu();\n }, [closeOverflowMenu, hasHidden]);\n\n useEffect(() => {\n if (!open) return;\n setStagedValues(createFilterValueMap(filters));\n }, [hiddenFilterKeys, open]);\n\n const stagedFilters = filters.map((filter) =>\n filterWithStagedValue(\n filter,\n // Key presence, not `??`: a tri-state cycled to unset stages `undefined`,\n // which must render as unset instead of falling back to the live value.\n Object.hasOwn(stagedValues, filter.key)\n ? stagedValues[filter.key]\n : filterBarFilterValue(filter),\n (next) =>\n setStagedValues((current) => ({\n ...current,\n [filter.key]: next,\n })),\n ),\n );\n\n return (\n <div\n className={cn(\"inline-flex shrink-0\", !hasHidden && \"invisible pointer-events-none\")}\n aria-hidden={!hasHidden || undefined}\n >\n <Button\n ref={setTriggerRef}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label=\"More filters\"\n tabIndex={hasHidden ? 0 : -1}\n title={hasHidden ? \"More filters\" : undefined}\n className={cn(\n \"h-8 min-w-0 gap-1.5 px-2 text-xs font-normal\",\n activeHidden > 0 && \"border-primary/40 text-primary\",\n )}\n {...getReferenceProps()}\n >\n <Icon icon={UiFilter} className=\"text-[14px]\" />\n {activeHidden > 0 && (\n <span className=\"rounded-full bg-muted px-1.5 text-[10px] font-medium text-muted-foreground\">\n {activeHidden}\n </span>\n )}\n </Button>\n\n {hasHidden && open && (\n <FloatingPortal>\n <FloatingFocusManager context={context} modal={false}>\n <div\n ref={refs.setFloating}\n role=\"dialog\"\n aria-label=\"Overflow filters\"\n style={{ ...floatingStyles, zIndex: floatingZ }}\n className=\"flex max-h-[min(34rem,calc(100vh-2rem))] w-[min(34rem,calc(100vw-2rem))] flex-col overflow-hidden rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-lg shadow-black/10\"\n {...getFloatingProps()}\n >\n <div className=\"mb-2 flex items-center justify-between gap-2 px-1\">\n <div className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n Filters\n </div>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n className=\"rounded px-1.5 py-0.5 text-xs text-primary transition-colors hover:bg-accent focus:bg-accent focus:outline-none disabled:text-muted-foreground\"\n onClick={() => stagedFilters.forEach(clearFilterBarFilter)}\n disabled={stagedFilters.every((filter) => !isFilterBarFilterActive(filter))}\n >\n Clear all\n </button>\n <button\n type=\"button\"\n aria-label=\"Close overflow filters\"\n title=\"Close\"\n className=\"inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\"\n onClick={closeOverflowMenu}\n >\n <Icon icon={UiClose} className=\"text-sm\" />\n </button>\n </div>\n </div>\n <div className=\"min-h-0 flex-1 divide-y divide-border/70 overflow-y-auto rounded-md border border-border/70\">\n {stagedFilters.map((filter) => {\n const active = isFilterBarFilterActive(filter);\n return (\n <div\n key={filter.key}\n data-overflow-filter-row={filter.key}\n className=\"grid grid-cols-[minmax(0,1fr)_auto] items-start gap-2 overflow-visible p-3 md:h-12 md:grid-cols-[minmax(7rem,10rem)_auto_minmax(0,1fr)_auto] md:items-center md:p-2\"\n >\n <label\n htmlFor={filterInputId(filter)}\n className=\"flex min-w-0 items-center gap-1 truncate text-[10px] font-medium uppercase tracking-wide text-muted-foreground\"\n title={filter.description ?? filter.label}\n >\n <LabelIcon\n icon={sizedIcon(filter.icon, 12)}\n className=\"text-[12px] normal-case\"\n />\n <span className=\"truncate\">{filter.label}</span>\n </label>\n <span className=\"hidden text-sm text-muted-foreground md:block\">=</span>\n <div className=\"col-span-2 min-w-0 overflow-visible md:col-span-1\">\n <FilterBarContext.Provider value={{ autoSubmit: false }}>\n <FilterBarKeyValueControl filter={filter} />\n </FilterBarContext.Provider>\n </div>\n <button\n type=\"button\"\n aria-label={`Clear ${filter.label}`}\n title={`Clear ${filter.label}`}\n className=\"inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none disabled:text-muted-foreground/40\"\n onClick={() => clearFilterBarFilter(filter)}\n disabled={!active}\n >\n <Icon icon={UiClose} className=\"text-sm\" />\n </button>\n </div>\n );\n })}\n </div>\n <div className=\"mt-3 flex justify-end gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 px-3 text-xs\"\n onClick={closeOverflowMenu}\n >\n Close\n </Button>\n <Button\n type=\"button\"\n variant=\"default\"\n size=\"sm\"\n className=\"h-8 px-3 text-xs\"\n onClick={() => {\n applyStagedFilterValues(filters, stagedValues);\n onApply?.();\n setOpen(false);\n }}\n >\n Apply\n </Button>\n </div>\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </div>\n );\n}\n\nfunction FilterBarKeyValueControl({ filter }: { filter: FilterBarFilter }) {\n if (filter.kind === \"date-range\") {\n return (\n <RangeControlButton\n kind={filter.timeEnabled === false ? \"date\" : \"time\"}\n label={filter.label}\n {...dateRangeFilterProps(filter)}\n />\n );\n }\n if (filter.kind === \"text\") {\n return <TextFilterValueControl filter={filter} />;\n }\n if (filter.kind === \"lookup\") {\n return <LookupFilterValueControl filter={filter} />;\n }\n if (filter.kind === \"lookup-multi\") {\n return <LookupMultiFilterValueControl filter={filter} />;\n }\n if (filter.kind === \"enum\") {\n return <EnumFilterValueControl filter={filter} />;\n }\n if (filter.kind === \"boolean\") {\n return <BooleanFilterValueControl filter={filter} />;\n }\n if (filter.kind === \"select-multi\") {\n return <SelectMultiFilterValueControl filter={filter} />;\n }\n if (filter.kind === \"multi\") {\n return <MultiFilterField filter={filter} grow />;\n }\n if (filter.kind === \"nested-multi\") {\n return <NestedMultiFilterField filter={filter} grow />;\n }\n if (filter.kind === \"workload\") {\n return <WorkloadFilterField filter={filter} grow />;\n }\n if (filter.kind === \"tristate\") {\n return <TriStateFilterValueControl filter={filter} />;\n }\n return <NumberFilterField filter={filter} grow />;\n}\n\nfunction filterInputId(filter: FilterBarFilter) {\n return `filterbar-overflow-${filter.key}`;\n}\n\nfunction lookupOptionsToCombobox(options: FilterBarLookupOption[]): ComboboxOption[] {\n return options.map((option) => ({\n value: option.value,\n label: option.label ?? option.value,\n ...(option.disabled !== undefined ? { disabled: option.disabled } : {}),\n }));\n}\n\nfunction WorkloadFilterField({\n filter,\n grow,\n}: {\n filter: FilterBarWorkloadFilter;\n grow: boolean;\n}) {\n return (\n <div className={cn(\"min-w-[14rem]\", grow && \"flex-1\", filter.className)}>\n <WorkloadPicker\n value={filter.value}\n onChange={filter.onChange}\n loadWorkloads={filter.loadWorkloads}\n {...(filter.kinds ? { kinds: filter.kinds } : {})}\n {...(filter.collapseSingleOption ? { collapseSingleOption: true } : {})}\n allowCustomValue={false}\n strict\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n placeholder={`Select ${filter.label.toLowerCase()}…`}\n />\n </div>\n );\n}\n\nfunction valueInputClassName(disabled?: boolean) {\n return cn(\n \"h-8 w-full rounded-md border border-input bg-background px-2 text-sm text-foreground outline-none placeholder:text-placeholder focus-visible:ring-2 focus-visible:ring-ring\",\n disabled && \"cursor-not-allowed opacity-60\",\n );\n}\n\nfunction TextFilterValueControl({ filter }: { filter: FilterBarTextFilter }) {\n const [draft, setDraft] = useDebouncedTextDraft(filter.value, filter.onChange);\n\n return (\n <input\n id={filterInputId(filter)}\n type=\"text\"\n aria-label={filter.label}\n className={valueInputClassName(filter.disabled)}\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n value={draft}\n disabled={filter.disabled}\n onChange={(event) => setDraft(event.target.value)}\n />\n );\n}\n\nfunction LookupFilterValueControl({ filter }: { filter: FilterBarLookupFilter }) {\n const [draft, setDraft] = useDebouncedTextDraft(filter.value, filter.onChange);\n\n if (filter.inputType === \"date\") {\n return (\n <DateTimePicker\n id={filterInputId(filter)}\n aria-label={filter.label}\n className=\"w-full\"\n inputClassName={valueInputClassName(filter.disabled)}\n buttonClassName=\"right-1\"\n placeholder={filter.placeholder}\n value={draft}\n disabled={filter.disabled}\n onChange={setDraft}\n />\n );\n }\n\n if (filter.inputType === \"number\") {\n return (\n <input\n id={filterInputId(filter)}\n type=\"number\"\n aria-label={filter.label}\n className={valueInputClassName(filter.disabled)}\n placeholder={filter.placeholder}\n value={draft}\n disabled={filter.disabled}\n onChange={(event) => setDraft(event.target.value)}\n />\n );\n }\n\n // The overflow panel renders the filter label as a separate row header, so\n // the Combobox here omits its own inline label to avoid duplication.\n return (\n <Combobox\n id={filterInputId(filter)}\n options={lookupOptionsToCombobox(filter.options)}\n value={filter.value}\n onChange={filter.onChange}\n allowCustomValue={false}\n size=\"sm\"\n className=\"w-full\"\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n />\n );\n}\n\nfunction LookupMultiFilterValueControl({ filter }: { filter: FilterBarLookupMultiFilter }) {\n return (\n <Combobox\n multiple\n id={filterInputId(filter)}\n options={lookupOptionsToCombobox(filter.options)}\n value={filter.value}\n onChange={filter.onChange}\n allowCustomValue={false}\n footer={lookupMultiFilterFooter(filter)}\n size=\"sm\"\n className=\"w-full\"\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n />\n );\n}\n\nfunction enumOptionsToCombobox(\n options: FilterBarEnumFilter[\"options\"],\n): ComboboxOption[] {\n return options.map((option) => ({\n value: option.value,\n label: option.label ?? option.value,\n }));\n}\n\nfunction EnumFilterValueControl({ filter }: { filter: FilterBarEnumFilter }) {\n return (\n <Combobox\n id={filterInputId(filter)}\n options={enumOptionsToCombobox(filter.options)}\n value={filter.value}\n onChange={filter.onChange}\n allowCustomValue={false}\n size=\"sm\"\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n className=\"w-full\"\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n />\n );\n}\n\nfunction BooleanFilterValueControl({ filter }: { filter: FilterBarBooleanFilter }) {\n return (\n <div className=\"flex h-8 items-center\">\n <input\n id={filterInputId(filter)}\n type=\"checkbox\"\n aria-label={filter.label}\n className=\"h-4 w-4 accent-primary\"\n checked={filter.value}\n disabled={filter.disabled}\n onChange={(event) => filter.onChange(event.target.checked)}\n />\n </div>\n );\n}\n\nfunction TriStateFilterValueControl({ filter }: { filter: FilterBarTriStateFilter }) {\n return (\n <div className=\"flex h-8 items-center\">\n <TriStateToggle\n id={filterInputId(filter)}\n value={filter.value}\n onChange={filter.onChange}\n label={filter.label}\n size=\"md\"\n {...(filter.labels ? { labels: filter.labels } : {})}\n {...(filter.disabled ? { disabled: filter.disabled } : {})}\n />\n </div>\n );\n}\n\nfunction SelectMultiFilterValueControl({ filter }: { filter: FilterBarSelectMultiFilter }) {\n return (\n <MultiSelect\n options={filter.options}\n value={filter.value}\n onChange={filter.onChange}\n ariaLabel={`${filter.label} filter`}\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n triggerClassName=\"h-8 w-full rounded-md border border-input bg-background px-2 text-sm shadow-none\"\n menuClassName=\"left-auto right-0\"\n />\n );\n}\n\nexport function FilterBarRangePanel({\n kind,\n label,\n from = \"\",\n to = \"\",\n onApply,\n presets,\n timeEnabled,\n timeZone,\n timeZones,\n fromPlaceholder,\n toPlaceholder,\n emptyLabel,\n disabled,\n}: FilterBarRangeProps & { kind: \"date\" | \"time\"; label: string }) {\n return (\n <div className=\"w-72 p-3 text-popover-foreground\">\n <TimeRange\n kind={kind}\n label={label}\n align=\"left\"\n from={from}\n to={to}\n onApply={onApply}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(presets ? { presets } : {})}\n {...(timeEnabled !== undefined ? { timeEnabled } : {})}\n {...(timeZone ? { timeZone } : {})}\n {...(timeZones ? { timeZones } : {})}\n {...(fromPlaceholder ? { fromPlaceholder } : {})}\n {...(toPlaceholder ? { toPlaceholder } : {})}\n {...(emptyLabel ? { emptyLabel } : {})}\n panelClassName=\"left-0 right-auto\"\n />\n </div>\n );\n}\n\nfunction EnumFilterField({ filter, grow }: { filter: FilterBarEnumFilter; grow: boolean }) {\n return (\n <Combobox\n {...comboboxLabelProps(filter)}\n options={enumOptionsToCombobox(filter.options)}\n value={filter.value}\n onChange={filter.onChange}\n allowCustomValue={false}\n size=\"sm\"\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n className={cn(lookupFieldWidthClass(grow), filter.className)}\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n />\n );\n}\n\nfunction TriStateFilterField({ filter }: { filter: FilterBarTriStateFilter }) {\n return (\n <div\n title={filter.description}\n className={cn(\n \"flex h-8 shrink-0 items-center gap-2 rounded-md border border-input bg-muted/30 px-2 text-xs\",\n filter.disabled && \"opacity-60\",\n filter.className,\n )}\n >\n <TriStateToggle\n value={filter.value}\n onChange={filter.onChange}\n label={filter.label}\n {...(filter.labels ? { labels: filter.labels } : {})}\n {...(filter.disabled ? { disabled: filter.disabled } : {})}\n />\n <FilterFieldLabel icon={filter.icon} label={filter.label} />\n </div>\n );\n}\n\nfunction BooleanFilterField({ filter }: { filter: FilterBarBooleanFilter }) {\n return (\n <label\n title={filter.description}\n className={cn(\n \"flex h-8 shrink-0 items-center gap-2 rounded-md border border-input bg-muted/30 px-2 text-xs\",\n filter.disabled && \"opacity-60\",\n filter.className,\n )}\n >\n <input\n type=\"checkbox\"\n aria-label={filter.label}\n className=\"h-3.5 w-3.5 accent-primary\"\n checked={filter.value}\n disabled={filter.disabled}\n onChange={(event) => filter.onChange(event.target.checked)}\n />\n <FilterFieldLabel icon={filter.icon} label={filter.label} />\n </label>\n );\n}\n\nfunction SearchField({ search }: { search: FilterBarSearchProps }) {\n const [draft, setDraft] = useDebouncedTextDraft(search.value, search.onChange);\n\n return (\n <div className=\"flex min-w-0 flex-[1_1_14rem] items-center gap-2 md:min-w-[14rem] md:max-w-[24rem]\">\n <label\n className={cn(\n \"flex h-8 min-w-0 flex-1 items-center rounded-md border border-input bg-background px-3 text-sm\",\n search.className,\n )}\n >\n {draft.trim() ? (\n <span className=\"mr-2 whitespace-nowrap text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {search.ariaLabel ?? \"Search\"}\n </span>\n ) : (\n <Icon icon={UiSearch} className=\"mr-2 shrink-0 text-muted-foreground\" />\n )}\n <input\n type=\"search\"\n aria-label={search.ariaLabel ?? search.placeholder ?? \"Search\"}\n className=\"w-full bg-transparent outline-none placeholder:text-placeholder\"\n placeholder={search.placeholder ?? \"Search…\"}\n value={draft}\n onChange={(event) => setDraft(event.target.value)}\n />\n </label>\n </div>\n );\n}\n\nfunction TextFilterField({ filter, grow }: { filter: FilterBarTextFilter; grow: boolean }) {\n const [draft, setDraft] = useDebouncedTextDraft(filter.value, filter.onChange);\n\n return (\n <label\n title={filter.description}\n className={cn(\n \"flex h-8 items-center gap-2 rounded-md border border-input bg-muted/30 pl-2 pr-2 text-xs\",\n grow ? \"min-w-[12rem] max-w-[18rem] flex-1\" : \"min-w-[11rem] max-w-[15rem] shrink-0\",\n filter.disabled && \"opacity-60\",\n filter.className,\n )}\n >\n <FilterFieldLabel icon={filter.icon} label={filter.label} />\n <input\n type=\"text\"\n aria-label={filter.label}\n className=\"w-full min-w-0 bg-transparent text-sm text-foreground outline-none placeholder:text-placeholder disabled:cursor-not-allowed\"\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n value={draft}\n disabled={filter.disabled}\n onChange={(event) => setDraft(event.target.value)}\n />\n </label>\n );\n}\n\n// FilterFieldLabel is the uppercase label shown inside inline filter shells,\n// with an optional leading glyph from the filter's `icon`.\nfunction FilterFieldLabel({ icon, label }: { icon?: LabelIconSpec; label: string }) {\n return (\n <span className=\"flex items-center gap-1 whitespace-nowrap font-medium uppercase tracking-wide text-muted-foreground\">\n <LabelIcon icon={icon} className=\"text-[13px] normal-case\" />\n {label}\n </span>\n );\n}\n\nfunction LookupFilterField({ filter, grow }: { filter: FilterBarLookupFilter; grow: boolean }) {\n const [draft, setDraft] = useDebouncedTextDraft(filter.value, filter.onChange);\n\n // Date and number lookups keep their specialized inputs in the label shell;\n // text lookups use the Combobox with its own inline label.\n if (filter.inputType === \"date\" || filter.inputType === \"number\") {\n // For a date lookup with a value, surface the human-readable absolute +\n // relative form (e.g. \"Apr 15, 2026, 12:00 PM (2h ago)\") as the hover title.\n const dateTitle =\n filter.inputType === \"date\" && draft ? formatDateTimeRelative(draft) : undefined;\n return (\n <label\n title={dateTitle ?? filter.description}\n className={cn(\n \"flex h-8 items-center gap-2 rounded-md border border-input bg-muted/30 pl-2 pr-2 text-xs\",\n lookupFieldWidthClass(grow),\n filter.disabled && \"opacity-60\",\n filter.className,\n )}\n >\n <FilterFieldLabel icon={filter.icon} label={filter.label} />\n {filter.inputType === \"date\" ? (\n <DateTimePicker\n aria-label={filter.label}\n className=\"w-full\"\n inputClassName=\"w-full min-w-0 border-0 bg-transparent px-0 pr-6 text-sm text-foreground shadow-none focus-visible:ring-0\"\n buttonClassName=\"right-0\"\n placeholder={filter.placeholder}\n value={draft}\n disabled={filter.disabled}\n onChange={setDraft}\n />\n ) : (\n <input\n type=\"number\"\n aria-label={filter.label}\n className=\"w-full min-w-0 bg-transparent text-sm text-foreground outline-none placeholder:text-placeholder disabled:cursor-not-allowed\"\n placeholder={filter.placeholder}\n value={draft}\n disabled={filter.disabled}\n onChange={(event) => setDraft(event.target.value)}\n />\n )}\n </label>\n );\n }\n\n return (\n <Combobox\n {...comboboxLabelProps(filter)}\n options={lookupOptionsToCombobox(filter.options)}\n value={filter.value}\n onChange={filter.onChange}\n allowCustomValue={false}\n size=\"sm\"\n className={cn(lookupFieldWidthClass(grow), filter.className)}\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n />\n );\n}\n\nfunction LookupMultiFilterField({\n filter,\n grow,\n}: {\n filter: FilterBarLookupMultiFilter;\n grow: boolean;\n}) {\n return (\n <Combobox\n multiple\n {...comboboxLabelProps(filter)}\n options={lookupOptionsToCombobox(filter.options)}\n value={filter.value}\n onChange={filter.onChange}\n allowCustomValue={false}\n footer={lookupMultiFilterFooter(filter)}\n size=\"sm\"\n className={cn(lookupFieldWidthClass(grow), filter.className)}\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n {...(filter.onSearch !== undefined ? { onSearch: filter.onSearch } : {})}\n {...(filter.loading !== undefined ? { loading: filter.loading } : {})}\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n />\n );\n}\n\nfunction lookupMultiFilterFooter(filter: FilterBarLookupMultiFilter) {\n const moreCount =\n filter.truncated && filter.total ? Math.max(filter.total - filter.options.length, 0) : 0;\n if (moreCount === 0) return undefined;\n return (\n <>\n … and {moreCount.toLocaleString()} more\n {filter.onSearch ? \" — type to search all\" : \"\"}\n </>\n );\n}\n\nfunction NumberFilterField({ filter, grow }: { filter: FilterBarNumberFilter; grow: boolean }) {\n const [open, setOpen] = useState(false);\n const popup = useAnchoredPopup(open, setOpen);\n\n const bounds = resolveNumberFilterBounds(filter);\n const [draft, setDraft] = useDebouncedNumberDraft(filter.value, filter.onChange);\n const sliderMin = clampNumber(parseFilterNumber(draft.min) ?? bounds.min, bounds.min, bounds.max);\n const sliderMax = clampNumber(parseFilterNumber(draft.max) ?? bounds.max, bounds.min, bounds.max);\n const activeMin = Math.min(sliderMin, sliderMax);\n const activeMax = Math.max(sliderMin, sliderMax);\n const summary = summarizeNumberFilter(filter, bounds, draft);\n\n return (\n <div\n title={filter.description}\n className={cn(\n \"inline-flex min-w-0\",\n grow ? \"min-w-[8rem] max-w-[12rem] flex-1\" : \"shrink-0\",\n filter.disabled && \"opacity-60\",\n filter.className,\n )}\n >\n <Button\n ref={popup.refs.setReference as Ref<HTMLButtonElement>}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label={`${filter.label} filter`}\n disabled={filter.disabled}\n className={cn(\n \"min-w-0 gap-2 font-normal\",\n grow ? \"w-full max-w-[12rem] justify-between\" : \"w-auto max-w-[9.5rem] px-2.5\",\n summary === filter.label && \"text-muted-foreground\",\n )}\n {...popup.getReferenceProps()}\n >\n <LabelIcon icon={filter.icon} className=\"text-[14px] text-muted-foreground\" />\n <span className=\"truncate\">{summary}</span>\n <Icon icon={open ? UiChevronUp : UiChevronDown} className=\"text-muted-foreground\" />\n </Button>\n\n {open && (\n <FloatingPortal>\n <FloatingFocusManager context={popup.context} modal={false}>\n <div\n ref={popup.refs.setFloating}\n role=\"dialog\"\n aria-label={filter.label}\n style={{ ...popup.floatingStyles, zIndex: popup.floatingZ }}\n className=\"min-w-[18rem] max-w-[22rem] rounded-md border border-border bg-popover p-3 text-popover-foreground shadow-lg shadow-black/5\"\n {...popup.getFloatingProps()}\n >\n <div className=\"mb-3 flex items-center justify-between gap-2\">\n <div className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {filter.label}\n </div>\n <button\n type=\"button\"\n className=\"text-[10px] text-primary disabled:text-muted-foreground\"\n onClick={() => {\n setDraft({});\n filter.onChange({});\n }}\n disabled={!String(draft.min ?? \"\").trim() && !String(draft.max ?? \"\").trim()}\n >\n Clear all\n </button>\n </div>\n\n <div className=\"space-y-3\">\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between text-[11px] text-muted-foreground\">\n <span>{formatNumberValue(bounds.min, filter)}</span>\n <span>{formatNumberValue(bounds.max, filter)}</span>\n </div>\n <div className=\"relative h-6\">\n <RangeSlider\n min={bounds.min}\n max={bounds.max}\n step={bounds.step}\n value={[activeMin, activeMax]}\n ariaLabelMin={`${filter.label} minimum slider`}\n ariaLabelMax={`${filter.label} maximum slider`}\n onChange={([nextMin, nextMax]) =>\n setDraft(numberFilterValueFromSlider([nextMin, nextMax], bounds))\n }\n />\n </div>\n </div>\n\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"space-y-1\">\n <label className=\"text-[10px] text-muted-foreground\">Min</label>\n <input\n type=\"number\"\n inputMode=\"decimal\"\n step={bounds.step}\n aria-label={`${filter.label} minimum`}\n className=\"h-8 w-full rounded-md border border-input bg-background px-2 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n {...(filter.minPlaceholder !== undefined ? { placeholder: filter.minPlaceholder } : {})}\n value={draft.min ?? \"\"}\n onChange={(event) =>\n setDraft(\n normalizeNumberFilterValue(\n { min: event.target.value, max: draft.max ?? \"\" },\n \"min-input\",\n ),\n )\n }\n />\n </div>\n <div className=\"space-y-1\">\n <label className=\"text-[10px] text-muted-foreground\">Max</label>\n <input\n type=\"number\"\n inputMode=\"decimal\"\n step={bounds.step}\n aria-label={`${filter.label} maximum`}\n className=\"h-8 w-full rounded-md border border-input bg-background px-2 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n {...(filter.maxPlaceholder !== undefined ? { placeholder: filter.maxPlaceholder } : {})}\n value={draft.max ?? \"\"}\n onChange={(event) =>\n setDraft(\n normalizeNumberFilterValue(\n { min: draft.min ?? \"\", max: event.target.value },\n \"max-input\",\n ),\n )\n }\n />\n </div>\n </div>\n </div>\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </div>\n );\n}\n\nfunction NumberFilterPanel({\n filter,\n chrome = \"full\",\n}: {\n filter: FilterBarNumberFilter;\n chrome?: FilterBarFilterPanelChrome;\n}) {\n const bounds = resolveNumberFilterBounds(filter);\n const [draft, setDraft] = useDebouncedNumberDraft(filter.value, filter.onChange);\n const sliderMin = clampNumber(parseFilterNumber(draft.min) ?? bounds.min, bounds.min, bounds.max);\n const sliderMax = clampNumber(parseFilterNumber(draft.max) ?? bounds.max, bounds.min, bounds.max);\n const activeMin = Math.min(sliderMin, sliderMax);\n const activeMax = Math.max(sliderMin, sliderMax);\n const embedded = chrome === \"embedded\";\n\n return (\n <div\n data-filter-panel-chrome={chrome}\n className={cn(\n \"min-w-[18rem] max-w-[22rem] text-popover-foreground\",\n embedded\n ? \"p-0\"\n : \"rounded-md border border-border bg-popover p-3 shadow-sm shadow-black/5\",\n )}\n >\n {!embedded && (\n <div className=\"mb-3 flex items-center justify-between gap-2\">\n <div className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {filter.label}\n </div>\n <button\n type=\"button\"\n className=\"text-[10px] text-primary disabled:text-muted-foreground\"\n onClick={() => {\n setDraft({});\n filter.onChange({});\n }}\n disabled={!String(draft.min ?? \"\").trim() && !String(draft.max ?? \"\").trim()}\n >\n Clear all\n </button>\n </div>\n )}\n\n <div className=\"space-y-3\">\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between text-[11px] text-muted-foreground\">\n <span>{formatNumberValue(bounds.min, filter)}</span>\n <span>{formatNumberValue(bounds.max, filter)}</span>\n </div>\n <div className=\"relative h-6\">\n <RangeSlider\n min={bounds.min}\n max={bounds.max}\n step={bounds.step}\n value={[activeMin, activeMax]}\n ariaLabelMin={`${filter.label} minimum slider`}\n ariaLabelMax={`${filter.label} maximum slider`}\n onChange={([nextMin, nextMax]) =>\n setDraft(numberFilterValueFromSlider([nextMin, nextMax], bounds))\n }\n />\n </div>\n </div>\n\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"space-y-1\">\n <label className=\"text-[10px] text-muted-foreground\">Min</label>\n <input\n type=\"number\"\n inputMode=\"decimal\"\n step={bounds.step}\n aria-label={`${filter.label} minimum`}\n className=\"h-8 w-full rounded-md border border-input bg-background px-2 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n {...(filter.minPlaceholder !== undefined ? { placeholder: filter.minPlaceholder } : {})}\n value={draft.min ?? \"\"}\n onChange={(event) =>\n setDraft(\n normalizeNumberFilterValue(\n { min: event.target.value, max: draft.max ?? \"\" },\n \"min-input\",\n ),\n )\n }\n />\n </div>\n <div className=\"space-y-1\">\n <label className=\"text-[10px] text-muted-foreground\">Max</label>\n <input\n type=\"number\"\n inputMode=\"decimal\"\n step={bounds.step}\n aria-label={`${filter.label} maximum`}\n className=\"h-8 w-full rounded-md border border-input bg-background px-2 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n {...(filter.maxPlaceholder !== undefined ? { placeholder: filter.maxPlaceholder } : {})}\n value={draft.max ?? \"\"}\n onChange={(event) =>\n setDraft(\n normalizeNumberFilterValue(\n { min: draft.min ?? \"\", max: event.target.value },\n \"max-input\",\n ),\n )\n }\n />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction NestedMultiFilterPanel({\n filter,\n chrome = \"full\",\n}: {\n filter: FilterBarNestedMultiFilter;\n chrome?: FilterBarFilterPanelChrome;\n}) {\n const [activeGroup, setActiveGroup] = useState<string | null>(filter.groups[0]?.groupKey ?? null);\n const [draft, setDraft] = useDebouncedMultiDraft(filter.value, filter.onChange);\n const groups = filter.groups;\n const embedded = chrome === \"embedded\";\n const activeGroupData = useMemo(\n () => groups.find((group) => group.groupKey === activeGroup) ?? groups[0] ?? null,\n [groups, activeGroup],\n );\n\n const selectedByGroup = useMemo(() => {\n const counts: Record<string, number> = {};\n for (const group of groups) {\n let n = 0;\n for (const option of group.options) {\n if (draft[option.value]) n += 1;\n }\n counts[group.groupKey] = n;\n }\n return counts;\n }, [groups, draft]);\n\n const sortedGroups = useMemo(() => {\n const selected: typeof groups = [];\n const rest: typeof groups = [];\n for (const group of groups) {\n if ((selectedByGroup[group.groupKey] ?? 0) > 0) selected.push(group);\n else rest.push(group);\n }\n return [...selected, ...rest];\n }, [groups, selectedByGroup]);\n\n const clearGroup = (groupKey: string) => {\n const group = groups.find((g) => g.groupKey === groupKey);\n if (!group) return;\n const next = { ...draft };\n for (const option of group.options) {\n delete next[option.value];\n }\n setDraft(next);\n };\n\n return (\n <div role=\"dialog\" className=\"flex\">\n <div\n data-filter-panel-chrome={chrome}\n className={cn(\n \"min-w-[14rem] max-w-[16rem] text-popover-foreground\",\n embedded\n ? \"p-0\"\n : \"rounded-md border border-border bg-popover p-2 shadow-sm shadow-black/5\",\n )}\n >\n {!embedded && (\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <div className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {filter.label}\n </div>\n <button\n type=\"button\"\n className=\"text-[10px] text-primary disabled:text-muted-foreground\"\n onClick={() => setDraft({})}\n disabled={Object.keys(draft).length === 0}\n >\n Clear all\n </button>\n </div>\n )}\n\n <div className=\"max-h-72 space-y-0.5 overflow-auto\">\n {sortedGroups.map((group) => {\n const selected = selectedByGroup[group.groupKey] ?? 0;\n const isActive = group.groupKey === activeGroup;\n return (\n <div\n key={group.groupKey}\n role=\"button\"\n tabIndex={0}\n onMouseEnter={() => setActiveGroup(group.groupKey)}\n onFocus={() => setActiveGroup(group.groupKey)}\n onClick={() => setActiveGroup(group.groupKey)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \" || event.key === \"ArrowRight\") {\n event.preventDefault();\n setActiveGroup(group.groupKey);\n }\n }}\n className={cn(\n \"flex cursor-pointer items-center justify-between gap-2 rounded-md px-1.5 py-0.5 text-sm\",\n \"hover:bg-accent/50 focus-visible:bg-accent/50 focus-visible:outline-none\",\n isActive && \"bg-accent/60\",\n )}\n >\n <span className=\"min-w-0 flex-1 truncate\">{group.label ?? group.groupKey}</span>\n {selected > 0 && (\n <span className=\"rounded-full bg-primary/15 px-1.5 text-[10px] font-medium text-primary\">\n {selected}/{group.options.length}\n </span>\n )}\n <Icon icon={UiChevronRight} className=\"shrink-0 text-muted-foreground\" />\n </div>\n );\n })}\n {groups.length === 0 && (\n <div className=\"px-2 py-3 text-sm text-muted-foreground\">No groups</div>\n )}\n </div>\n </div>\n\n {activeGroupData && (\n <div\n onMouseEnter={() => setActiveGroup(activeGroupData.groupKey)}\n className=\"ml-1.5 min-w-[16rem] max-w-[20rem] rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-sm shadow-black/5\"\n >\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <div className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {activeGroupData.label ?? activeGroupData.groupKey}\n </div>\n <button\n type=\"button\"\n className=\"text-[10px] text-primary disabled:text-muted-foreground\"\n onClick={() => clearGroup(activeGroupData.groupKey)}\n disabled={(selectedByGroup[activeGroupData.groupKey] ?? 0) === 0}\n >\n Clear\n </button>\n </div>\n\n <div className=\"max-h-72 space-y-0.5 overflow-auto\">\n {activeGroupData.options.map((option) => {\n const mode = draft[option.value] ?? \"neutral\";\n const title = option.title ?? multiSelectOptionText(option);\n return (\n <div\n key={option.value}\n role=\"button\"\n tabIndex={0}\n data-filter-option={option.value}\n className=\"rounded-md px-1.5 py-0.5 hover:bg-accent/50 focus-visible:bg-accent/50 focus-visible:outline-none\"\n onClick={() =>\n setDraft(updateMultiFilterValue(draft, option.value, nextFilterMode(mode)))\n }\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n setDraft(updateMultiFilterValue(draft, option.value, nextFilterMode(mode)));\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n setActiveGroup(null);\n }\n }}\n >\n <FilterPill\n className=\"w-full justify-between\"\n label={renderNestedOptionLabel(option, activeGroupData.groupKey)}\n mode={mode}\n title={title}\n togglePosition=\"right\"\n onModeChange={(next) =>\n setDraft(updateMultiFilterValue(draft, option.value, next))\n }\n />\n </div>\n );\n })}\n {activeGroupData.options.length === 0 && (\n <div className=\"px-2 py-3 text-sm text-muted-foreground\">No values</div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction NestedMultiFilterField({\n filter,\n grow,\n}: {\n filter: FilterBarNestedMultiFilter;\n grow: boolean;\n}) {\n const [open, setOpen] = useState(false);\n const [activeGroup, setActiveGroup] = useState<string | null>(null);\n const [draft, setDraft] = useDebouncedMultiDraft(filter.value, filter.onChange);\n\n const popup = useAnchoredPopup(open, (next) => {\n setOpen(next);\n if (!next) setActiveGroup(null);\n });\n\n const summary = summarizeMultiFilter(filter.label, draft);\n const groups = filter.groups;\n const activeGroupData = useMemo(\n () => groups.find((group) => group.groupKey === activeGroup) ?? null,\n [groups, activeGroup],\n );\n\n // Selected count per group, used in the outer list.\n const selectedByGroup = useMemo(() => {\n const counts: Record<string, number> = {};\n for (const group of groups) {\n let n = 0;\n for (const option of group.options) {\n if (draft[option.value]) n += 1;\n }\n counts[group.groupKey] = n;\n }\n return counts;\n }, [groups, draft]);\n\n // Groups with active selections sort to the top so the user always sees\n // what's filtered without scrolling. Within each partition, the original\n // order from the consumer is preserved.\n const sortedGroups = useMemo(() => {\n const selected: typeof groups = [];\n const rest: typeof groups = [];\n for (const group of groups) {\n if ((selectedByGroup[group.groupKey] ?? 0) > 0) selected.push(group);\n else rest.push(group);\n }\n return [...selected, ...rest];\n }, [groups, selectedByGroup]);\n\n const clearGroup = (groupKey: string) => {\n const group = groups.find((g) => g.groupKey === groupKey);\n if (!group) return;\n const next = { ...draft };\n for (const option of group.options) {\n delete next[option.value];\n }\n setDraft(next);\n };\n\n return (\n <div\n title={filter.description}\n className={cn(\n \"inline-flex min-w-0\",\n grow ? \"min-w-[8rem] max-w-[12rem] flex-1\" : \"shrink-0\",\n filter.disabled && \"opacity-60\",\n filter.className,\n )}\n >\n <Button\n ref={popup.refs.setReference as Ref<HTMLButtonElement>}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label={`${filter.label} filter`}\n disabled={filter.disabled}\n className={cn(\n \"min-w-0 gap-2 font-normal\",\n grow ? \"w-full max-w-[12rem] justify-between\" : \"w-auto max-w-[8.5rem] px-2.5\",\n summary === filter.label && \"text-muted-foreground\",\n )}\n {...popup.getReferenceProps()}\n >\n <span className=\"truncate\">{summary}</span>\n <Icon icon={open ? UiChevronUp : UiChevronDown} className=\"text-muted-foreground\" />\n </Button>\n\n {open && (\n <FloatingPortal>\n <FloatingFocusManager context={popup.context} modal={false}>\n <div\n ref={popup.refs.setFloating}\n role=\"dialog\"\n aria-label={filter.label}\n style={{ ...popup.floatingStyles, zIndex: popup.floatingZ }}\n className=\"flex\"\n {...popup.getFloatingProps()}\n >\n <div className=\"min-w-[14rem] max-w-[16rem] rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-lg shadow-black/5\">\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <div className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {filter.label}\n </div>\n <button\n type=\"button\"\n className=\"text-[10px] text-primary disabled:text-muted-foreground\"\n onClick={() => setDraft({})}\n disabled={Object.keys(draft).length === 0}\n >\n Clear all\n </button>\n </div>\n\n <div className=\"max-h-72 space-y-0.5 overflow-auto\">\n {sortedGroups.map((group) => {\n const selected = selectedByGroup[group.groupKey] ?? 0;\n const isActive = group.groupKey === activeGroup;\n return (\n <div\n key={group.groupKey}\n role=\"button\"\n tabIndex={0}\n onMouseEnter={() => setActiveGroup(group.groupKey)}\n onFocus={() => setActiveGroup(group.groupKey)}\n onClick={() => setActiveGroup(group.groupKey)}\n onKeyDown={(event) => {\n if (\n event.key === \"Enter\" ||\n event.key === \" \" ||\n event.key === \"ArrowRight\"\n ) {\n event.preventDefault();\n setActiveGroup(group.groupKey);\n }\n }}\n className={cn(\n \"flex cursor-pointer items-center justify-between gap-2 rounded-md px-1.5 py-0.5 text-sm\",\n \"hover:bg-accent/50 focus-visible:bg-accent/50 focus-visible:outline-none\",\n isActive && \"bg-accent/60\",\n )}\n >\n <span className=\"min-w-0 flex-1 truncate\">{group.label ?? group.groupKey}</span>\n {selected > 0 && (\n <span className=\"rounded-full bg-primary/15 px-1.5 text-[10px] font-medium text-primary\">\n {selected}/{group.options.length}\n </span>\n )}\n <Icon icon={UiChevronRight} className=\"shrink-0 text-muted-foreground\" />\n </div>\n );\n })}\n {groups.length === 0 && (\n <div className=\"px-2 py-3 text-sm text-muted-foreground\">No groups</div>\n )}\n </div>\n </div>\n\n {activeGroupData && (\n <div\n onMouseEnter={() => setActiveGroup(activeGroupData.groupKey)}\n className=\"ml-1.5 min-w-[16rem] max-w-[20rem] rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-lg shadow-black/5\"\n >\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <div className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {activeGroupData.label ?? activeGroupData.groupKey}\n </div>\n <button\n type=\"button\"\n className=\"text-[10px] text-primary disabled:text-muted-foreground\"\n onClick={() => clearGroup(activeGroupData.groupKey)}\n disabled={(selectedByGroup[activeGroupData.groupKey] ?? 0) === 0}\n >\n Clear\n </button>\n </div>\n\n <div className=\"max-h-72 space-y-0.5 overflow-auto\">\n {activeGroupData.options.map((option) => {\n const mode = draft[option.value] ?? \"neutral\";\n const title = option.title ?? multiSelectOptionText(option);\n return (\n <div\n key={option.value}\n role=\"button\"\n tabIndex={0}\n data-filter-option={option.value}\n className=\"rounded-md px-1.5 py-0.5 hover:bg-accent/50 focus-visible:bg-accent/50 focus-visible:outline-none\"\n onClick={() =>\n setDraft(updateMultiFilterValue(draft, option.value, nextFilterMode(mode)))\n }\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n setDraft(\n updateMultiFilterValue(draft, option.value, nextFilterMode(mode)),\n );\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n setActiveGroup(null);\n }\n }}\n >\n <FilterPill\n className=\"w-full justify-between\"\n // Show only the value side here — the key is already\n // implied by the parent group panel.\n label={renderNestedOptionLabel(option, activeGroupData.groupKey)}\n mode={mode}\n title={title}\n togglePosition=\"right\"\n onModeChange={(next) =>\n setDraft(updateMultiFilterValue(draft, option.value, next))\n }\n />\n </div>\n );\n })}\n {activeGroupData.options.length === 0 && (\n <div className=\"px-2 py-3 text-sm text-muted-foreground\">No values</div>\n )}\n </div>\n </div>\n )}\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </div>\n );\n}\n\nfunction renderNestedOptionLabel(option: MultiSelectOption, groupKey: string): ReactNode {\n // If the option label already strips the key prefix, use it. Otherwise\n // strip it here so the inner panel doesn't repeat the key on every row.\n if (typeof option.label === \"string\") {\n const prefix = `${groupKey}=`;\n if (option.label.startsWith(prefix)) return option.label.slice(prefix.length);\n return option.label;\n }\n return option.label ?? option.value;\n}\n\nfunction SelectMultiFilterField({\n filter,\n grow,\n}: {\n filter: FilterBarSelectMultiFilter;\n grow: boolean;\n}) {\n return (\n <label\n title={filter.description}\n className={cn(\n \"flex h-8 items-center gap-2 rounded-md border border-input bg-muted/30 pl-2 pr-1 text-xs\",\n grow ? \"min-w-[12rem] max-w-[18rem] flex-1\" : \"min-w-[11rem] max-w-[15rem] shrink-0\",\n filter.disabled && \"opacity-60\",\n filter.className,\n )}\n >\n <span className=\"whitespace-nowrap font-medium uppercase tracking-wide text-muted-foreground\">\n {filter.label}\n </span>\n <MultiSelect\n options={filter.options}\n value={filter.value}\n onChange={filter.onChange}\n ariaLabel={`${filter.label} filter`}\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n triggerClassName=\"h-6 min-w-0 border-0 bg-transparent px-1 text-xs shadow-none focus-visible:ring-0\"\n menuClassName=\"left-auto right-0\"\n />\n </label>\n );\n}\n\nfunction RangeControlButton({\n kind,\n label,\n from = \"\",\n to = \"\",\n onApply,\n presets,\n timeEnabled,\n timeZone,\n timeZones,\n fromPlaceholder,\n toPlaceholder,\n emptyLabel,\n className,\n disabled,\n}: FilterBarRangeProps & { kind: \"date\" | \"time\"; label: string }) {\n return (\n <TimeRange\n kind={kind}\n label={label}\n from={from}\n to={to}\n onApply={onApply}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(presets ? { presets } : {})}\n {...(timeEnabled !== undefined ? { timeEnabled } : {})}\n {...(timeZone ? { timeZone } : {})}\n {...(timeZones ? { timeZones } : {})}\n {...(fromPlaceholder ? { fromPlaceholder } : {})}\n {...(toPlaceholder ? { toPlaceholder } : {})}\n {...(emptyLabel ? { emptyLabel } : {})}\n {...(className ? { className } : {})}\n />\n );\n}\n\n// Anchored popup wired through floating-ui's portal so it escapes `overflow`\n// clipping from scroll-container ancestors (e.g. AppLayout's `<main>`), matching\n// Combobox/DropdownMenu. `flip`/`shift` keep it on-screen at viewport edges.\nfunction useAnchoredPopup(\n open: boolean,\n onOpenChange: (open: boolean) => void,\n placement: Placement = \"bottom-start\",\n) {\n const floatingZ = useFloatingZIndex();\n const { refs, floatingStyles, context } = useFloating({\n open,\n onOpenChange,\n placement,\n whileElementsMounted: autoUpdate,\n middleware: [offset(6), flip({ padding: 8 }), shift({ padding: 8 })],\n });\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useClick(context),\n useDismiss(context, { escapeKey: false }),\n useRole(context, { role: \"dialog\" }),\n ]);\n useEscapeLayer(open, () => {\n onOpenChange(false);\n if (refs.domReference.current instanceof HTMLElement) refs.domReference.current.focus();\n });\n return { refs, floatingStyles, context, floatingZ, getReferenceProps, getFloatingProps };\n}\n\nfunction useMediaQuery(query: string) {\n const [matches, setMatches] = useState(() => {\n if (typeof window === \"undefined\" || !window.matchMedia) return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === \"undefined\" || !window.matchMedia) return;\n const media = window.matchMedia(query);\n const onChange = () => setMatches(media.matches);\n onChange();\n media.addEventListener?.(\"change\", onChange);\n return () => media.removeEventListener?.(\"change\", onChange);\n }, [query]);\n\n return matches;\n}\n\nfunction useDebouncedTextDraft(value: string, onChange: (value: string) => void) {\n const { autoSubmit } = useContext(FilterBarContext);\n const [draft, setDraft] = useState(value);\n const latestOnChange = useRef(onChange);\n\n useEffect(() => {\n latestOnChange.current = onChange;\n }, [onChange]);\n\n useEffect(() => {\n setDraft(value);\n }, [value]);\n\n useEffect(() => {\n if (draft === value) return;\n\n if (!autoSubmit) {\n latestOnChange.current(draft);\n return;\n }\n\n const timeoutId = window.setTimeout(() => {\n latestOnChange.current(draft);\n }, FILTER_INPUT_DEBOUNCE_MS);\n\n return () => window.clearTimeout(timeoutId);\n }, [autoSubmit, draft, value]);\n\n return [draft, setDraft] as const;\n}\n\nfunction useDebouncedNumberDraft(\n value: FilterBarNumberValue,\n onChange: (value: FilterBarNumberValue) => void,\n) {\n const { autoSubmit } = useContext(FilterBarContext);\n const [draft, setDraft] = useState(value);\n const latestOnChange = useRef(onChange);\n\n useEffect(() => {\n latestOnChange.current = onChange;\n }, [onChange]);\n\n useEffect(() => {\n setDraft(value);\n }, [value.max, value.min]);\n\n useEffect(() => {\n if (sameNumberFilterValue(draft, value)) return;\n\n if (!autoSubmit) {\n latestOnChange.current(draft);\n return;\n }\n\n const timeoutId = window.setTimeout(() => {\n latestOnChange.current(draft);\n }, FILTER_INPUT_DEBOUNCE_MS);\n\n return () => window.clearTimeout(timeoutId);\n }, [autoSubmit, draft, value]);\n\n return [draft, setDraft] as const;\n}\n\nfunction sameNumberFilterValue(left: FilterBarNumberValue, right: FilterBarNumberValue) {\n return (left.min ?? \"\") === (right.min ?? \"\") && (left.max ?? \"\") === (right.max ?? \"\");\n}\n\ntype NumberFilterBounds = {\n min: number;\n max: number;\n step: number;\n};\n\ntype NumberFilterSource = \"min-input\" | \"max-input\";\n\nfunction resolveNumberFilterBounds(filter: FilterBarNumberFilter): NumberFilterBounds {\n const parsedMin = parseFilterNumber(filter.value.min);\n const parsedMax = parseFilterNumber(filter.value.max);\n const fallbackMin = parsedMin ?? 0;\n const fallbackMax = parsedMax ?? Math.max(fallbackMin + 100, 100);\n const min = filter.domainMin ?? Math.min(fallbackMin, fallbackMax);\n const max = filter.domainMax ?? Math.max(fallbackMax, min + 100);\n const step = filter.step && filter.step > 0 ? filter.step : 1;\n\n return {\n min,\n max: max <= min ? min + step : max,\n step,\n };\n}\n\nfunction summarizeNumberFilter(\n filter: FilterBarNumberFilter,\n bounds: NumberFilterBounds,\n value: FilterBarNumberValue,\n) {\n const parsedMin = parseFilterNumber(value.min);\n const parsedMax = parseFilterNumber(value.max);\n const hasMin = String(value.min ?? \"\").trim() !== \"\";\n const hasMax = String(value.max ?? \"\").trim() !== \"\";\n\n if (!hasMin && !hasMax) {\n return filter.label;\n }\n\n const minLabel =\n parsedMin == null\n ? formatNumberValue(bounds.min, filter)\n : formatNumberValue(parsedMin, filter);\n const maxLabel =\n parsedMax == null\n ? formatNumberValue(bounds.max, filter)\n : formatNumberValue(parsedMax, filter);\n\n if (hasMin && hasMax) {\n if (minLabel === maxLabel) {\n return `${filter.label} ${minLabel}`;\n }\n return `${filter.label} ${minLabel}-${maxLabel}`;\n }\n\n if (hasMin) {\n return `${filter.label} >=${minLabel}`;\n }\n\n return `${filter.label} <=${maxLabel}`;\n}\n\nfunction normalizeNumberFilterValue(\n nextValue: FilterBarNumberValue,\n source: NumberFilterSource,\n): FilterBarNumberValue {\n let min = nextValue.min ?? \"\";\n let max = nextValue.max ?? \"\";\n\n const parsedMin = parseFilterNumber(min);\n const parsedMax = parseFilterNumber(max);\n\n if (parsedMin != null && parsedMax != null && parsedMin > parsedMax) {\n if (source.startsWith(\"min\")) {\n max = min;\n } else {\n min = max;\n }\n }\n\n return { min, max };\n}\n\nfunction numberFilterValueFromSlider(\n value: [number, number],\n bounds: NumberFilterBounds,\n): FilterBarNumberValue {\n const [min, max] = value;\n return {\n min: min <= bounds.min ? \"\" : formatRawNumber(clampNumber(min, bounds.min, bounds.max)),\n max: max >= bounds.max ? \"\" : formatRawNumber(clampNumber(max, bounds.min, bounds.max)),\n };\n}\n\nfunction parseFilterNumber(value: string | undefined) {\n if (!value?.trim()) return null;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction clampNumber(value: number, min: number, max: number) {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction formatNumberValue(value: number, filter: FilterBarNumberFilter) {\n if (filter.formatValue) {\n return filter.formatValue(value);\n }\n\n return formatRawNumber(value);\n}\n\nfunction formatRawNumber(value: number) {\n return Number.isInteger(value) ? String(value) : String(Number(value.toFixed(6)));\n}\n\ntype FilterBarValue =\n | string\n | string[]\n | boolean\n // A tri-state filter's \"off\" position is undefined, so it is a real staged\n // value rather than the absence of one.\n | undefined\n | FilterBarNumberValue\n | Record<string, FilterBarMultiFilterMode>;\n\nfunction createFilterValueMap(filters: FilterBarFilter[]) {\n return Object.fromEntries(filters.map((filter) => [filter.key, filterBarFilterValue(filter)]));\n}\n\n// A date range applies the moment it is applied in its own panel, exactly as\n// the bar's trailing range control does, so it has no value to stage and\n// nothing here ever writes one back to it.\nfunction isStageableFilter(\n filter: FilterBarFilter,\n): filter is Exclude<FilterBarFilter, FilterBarDateRangeFilter> {\n return filter.kind !== \"date-range\";\n}\n\nfunction filterBarFilterValue(filter: FilterBarFilter): FilterBarValue {\n if (!isStageableFilter(filter)) return undefined;\n return filter.value;\n}\n\nfunction filterWithStagedValue(\n filter: FilterBarFilter,\n value: FilterBarValue,\n onChange: (value: FilterBarValue) => void,\n): FilterBarFilter {\n if (!isStageableFilter(filter)) return filter;\n if (filter.kind === \"text\") {\n return {\n ...filter,\n value: String(value ?? \"\"),\n onChange: (next: string) => onChange(next),\n };\n }\n if (filter.kind === \"lookup\") {\n return {\n ...filter,\n value: String(value ?? \"\"),\n onChange: (next: string) => onChange(next),\n };\n }\n if (filter.kind === \"workload\") {\n return {\n ...filter,\n value: String(value ?? \"\"),\n onChange: (next: string) => onChange(next),\n };\n }\n if (filter.kind === \"lookup-multi\") {\n return {\n ...filter,\n value: Array.isArray(value) ? value.map(String) : [],\n onChange: (next: string[]) => onChange(next),\n };\n }\n if (filter.kind === \"multi\") {\n return {\n ...filter,\n value: isMultiFilterValue(value) ? value : {},\n onChange: (next: Record<string, FilterBarMultiFilterMode>) => onChange(next),\n };\n }\n if (filter.kind === \"nested-multi\") {\n return {\n ...filter,\n value: isMultiFilterValue(value) ? value : {},\n onChange: (next: Record<string, FilterBarMultiFilterMode>) => onChange(next),\n };\n }\n if (filter.kind === \"select-multi\") {\n return {\n ...filter,\n value: Array.isArray(value) ? value.map(String) : [],\n onChange: (next: string[]) => onChange(next),\n };\n }\n if (filter.kind === \"number\") {\n return {\n ...filter,\n value: isNumberFilterValue(value) ? value : {},\n onChange: (next: FilterBarNumberValue) => onChange(next),\n };\n }\n if (filter.kind === \"enum\") {\n return {\n ...filter,\n value: String(value ?? \"\"),\n onChange: (next: string) => onChange(next),\n };\n }\n if (filter.kind === \"tristate\") {\n return {\n ...filter,\n value: value === undefined ? undefined : Boolean(value),\n onChange: (next: TriState) => onChange(next),\n };\n }\n return {\n ...filter,\n value: Boolean(value),\n onChange: (next: boolean) => onChange(next),\n };\n}\n\nfunction applyStagedFilterValues(\n filters: FilterBarFilter[],\n stagedValues: Record<string, FilterBarValue>,\n) {\n for (const filter of filters) {\n if (!isStageableFilter(filter)) continue;\n // Key presence, not `??`: undefined is a tri-state filter's \"off\" value and\n // must still be applied over a live true/false.\n const next = Object.hasOwn(stagedValues, filter.key)\n ? stagedValues[filter.key]\n : filterBarFilterValue(filter);\n if (sameFilterBarValue(filterBarFilterValue(filter), next)) continue;\n applyFilterBarValue(filter, next);\n }\n}\n\nfunction applyFilterBarValue(filter: FilterBarFilter, value: FilterBarValue) {\n if (!isStageableFilter(filter)) return;\n if (\n filter.kind === \"text\" ||\n filter.kind === \"lookup\" ||\n filter.kind === \"workload\" ||\n filter.kind === \"enum\"\n ) {\n filter.onChange(String(value ?? \"\"));\n return;\n }\n if (filter.kind === \"lookup-multi\" || filter.kind === \"select-multi\") {\n filter.onChange(Array.isArray(value) ? value.map(String) : []);\n return;\n }\n if (filter.kind === \"number\") {\n filter.onChange(isNumberFilterValue(value) ? value : {});\n return;\n }\n if (filter.kind === \"boolean\") {\n filter.onChange(Boolean(value));\n return;\n }\n if (filter.kind === \"tristate\") {\n filter.onChange(value === undefined ? undefined : Boolean(value));\n return;\n }\n filter.onChange(isMultiFilterValue(value) ? value : {});\n}\n\nfunction sameFilterBarValue(left: FilterBarValue, right: FilterBarValue) {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction isNumberFilterValue(value: FilterBarValue): value is FilterBarNumberValue {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isMultiFilterValue(\n value: FilterBarValue,\n): value is Record<string, FilterBarMultiFilterMode> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction calculateVisibleFilterCount(widths: number[], availableWidth: number) {\n if (widths.length === 0) return 0;\n\n let used = 0;\n let count = 0;\n for (const width of widths) {\n const nextUsed = used + (count > 0 ? FILTER_BAR_GAP_PX : 0) + width;\n if (nextUsed > availableWidth) break;\n used = nextUsed;\n count += 1;\n }\n return count;\n}\n\nfunction sumFilterWidths(widths: number[]) {\n if (widths.length === 0) return 0;\n return (\n widths.reduce((total, width) => total + width, 0) + (widths.length - 1) * FILTER_BAR_GAP_PX\n );\n}\n\nfunction estimateFilterWidth(filter: FilterBarFilter) {\n if (filter.kind === \"boolean\") return Math.max(88, filter.label.length * 8 + 40);\n // Multi renders as a combobox field (min-w-[11rem] ≈ 176px); nested keeps\n // its compact trigger button.\n if (filter.kind === \"multi\") return 176;\n if (filter.kind === \"nested-multi\") return 136;\n if (filter.kind === \"workload\") return 224;\n if (filter.kind === \"number\") return 152;\n return Math.max(144, filter.label.length * 8 + 96);\n}\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"FilterBar.js","sources":["../../src/components/FilterBar.tsx"],"sourcesContent":["import {\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n type Ref,\n type RefObject,\n} from \"react\";\nimport {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingPortal,\n offset,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useInteractions,\n useMergeRefs,\n useRole,\n type Placement,\n} from \"@floating-ui/react\";\nimport { FilterPill } from \"../data/FilterPill\";\nimport { FILTER_INPUT_DEBOUNCE_MS, FilterBarContext } from \"./filter-bar-context\";\nimport {\n comboboxLabelProps,\n lookupFieldWidthClass,\n multiSelectOptionText,\n nextFilterMode,\n sizedIcon,\n summarizeMultiFilter,\n updateMultiFilterValue,\n useDebouncedMultiDraft,\n type FilterBarMultiFilterMode,\n} from \"./filter-bar-field-utils\";\nimport {\n MultiFilterField,\n MultiFilterPanel,\n type FilterBarMultiFilter,\n} from \"./filter-bar-multi\";\nimport {\n clearFilterBarFilter,\n dateRangeFilterProps,\n isFilterBarFilterActive,\n} from \"./filter-bar-utils\";\n\nexport { TriStateMultiSelect, type TriStateMultiSelectProps } from \"./filter-bar-multi\";\nexport type { FilterBarMultiFilter, FilterBarMultiFilterMode };\nimport { Icon, LabelIcon, type LabelIconSpec } from \"../data/Icon\";\nimport { formatDateTimeRelative } from \"../data/cells/timestamp-format\";\nimport { UiChevronDown, UiChevronRight, UiChevronUp, UiClose, UiFilter, UiSearch } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { Modal } from \"../overlay/Modal\";\nimport { useEscapeLayer, useFloatingZIndex } from \"../overlay/modalStack\";\nimport { Button } from \"./button\";\nimport { Combobox, type ComboboxOption } from \"./Combobox\";\nimport { DateTimePicker } from \"./DateTimePicker\";\nimport { MultiSelect, type MultiSelectOption } from \"./MultiSelect\";\nimport { RangeSlider } from \"./RangeSlider\";\nimport { TimeRange, type TimeRangePresetGroup } from \"./TimeRange\";\nimport { TriStateToggle, type TriState, type TriStateLabels } from \"./TriStateToggle\";\nimport { WorkloadPicker } from \"./WorkloadPicker\";\nimport type { WorkloadKind, WorkloadResource } from \"./workload-picker-utils\";\n\nconst FILTER_BAR_GAP_PX = 8;\nconst FILTER_BAR_OVERFLOW_TRIGGER_ESTIMATE_PX = 44;\n\nexport type FilterBarSearchProps = {\n /** Controlled search text. */\n value: string;\n /** Called with the next search text. Debounced when `autoSubmit` is true. */\n onChange: (value: string) => void;\n /** Placeholder shown in the search input. */\n placeholder?: string;\n /** Accessible label for the search input. */\n ariaLabel?: string;\n /** Classes applied to the search input. */\n className?: string;\n};\n\nexport type FilterBarTextFilter = {\n /** Stable filter key used for rendering and overflow measurement. */\n key: string;\n /** Renders a free-text input. */\n kind: \"text\";\n /** Filter label shown on the control. */\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n /** Optional helper text shown in filter popovers. */\n description?: string;\n /** Controlled input value. */\n value: string;\n /** Called with the next input value. */\n onChange: (value: string) => void;\n /** Placeholder shown in the input. */\n placeholder?: string;\n /** Disables this filter. */\n disabled?: boolean;\n /** Classes applied to this filter control. */\n className?: string;\n};\n\nexport type FilterBarLookupOption = {\n /** Option value written to filter state. */\n value: string;\n /** Optional display label; falls back to `value`. */\n label?: string;\n /** Prevents choosing the option. */\n disabled?: boolean;\n /** Optional browser tooltip. */\n title?: string;\n};\n\nexport type FilterBarLookupInputType = \"text\" | \"number\" | \"date\";\n\nexport type FilterBarLookupFilter = {\n key: string;\n /** Renders an input backed by a datalist-style option set. */\n kind: \"lookup\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n /** Controlled selected or typed value. */\n value: string;\n /** Suggestions for the lookup input. */\n options: FilterBarLookupOption[];\n onChange: (value: string) => void;\n placeholder?: string;\n /** Native input type for the lookup field. */\n inputType?: FilterBarLookupInputType;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarLookupMultiFilter = {\n key: string;\n /** Renders a multi-value lookup filter. */\n kind: \"lookup-multi\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n /** Controlled selected values. */\n value: string[];\n /** Suggestions for the lookup input. */\n options: FilterBarLookupOption[];\n onChange: (value: string[]) => void;\n placeholder?: string;\n /**\n * Optional async search invoked (debounced) as the user types; the consumer\n * fetches matching options and feeds them back via `options`. When set, the\n * typeahead is server-driven (results replace the list); when absent it\n * filters the static `options` client-side.\n */\n onSearch?: (query: string) => void;\n /** Shows a loading indicator while a search is in flight. */\n loading?: boolean;\n /** True when `options` is a capped head of a larger server-side result set. */\n truncated?: boolean;\n /** Total distinct option count behind a truncated result set. */\n total?: number;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarNestedMultiGroup = {\n /** Stable group id. */\n groupKey: string;\n /** Optional visible group label. */\n label?: string;\n /** Options in this group. */\n options: MultiSelectOption[];\n};\n\nexport type FilterBarNestedMultiFilter = {\n key: string;\n /** Renders grouped include/exclude chips. */\n kind: \"nested-multi\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n // Same wire shape as FilterBarMultiFilter so consumers can swap kinds\n // without changing their state slot.\n value: Record<string, FilterBarMultiFilterMode>;\n groups: FilterBarNestedMultiGroup[];\n onChange: (value: Record<string, FilterBarMultiFilterMode>) => void;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarWorkloadFilter = {\n key: string;\n /** Renders the shared Kubernetes workload picker. */\n kind: \"workload\";\n label: string;\n icon?: LabelIconSpec;\n description?: string;\n value: string;\n onChange: (value: string) => void;\n loadWorkloads: (\n kinds: WorkloadKind[],\n namespace?: string,\n ) => Promise<Partial<Record<WorkloadKind, WorkloadResource[]>>>;\n kinds?: WorkloadKind[];\n /**\n * Render the sole loaded workload as plain text rather than a picker. See\n * {@link WorkloadPickerProps.collapseSingleOption}.\n */\n collapseSingleOption?: boolean;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarSelectMultiFilter = {\n key: string;\n /** Renders a compact multi-select dropdown. */\n kind: \"select-multi\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n /** Controlled selected values. */\n value: string[];\n /** Available dropdown options. */\n options: MultiSelectOption[];\n onChange: (value: string[]) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarNumberValue = {\n /** Minimum bound as a string so callers can preserve draft input. */\n min?: string;\n /** Maximum bound as a string so callers can preserve draft input. */\n max?: string;\n};\n\nexport type FilterBarNumberFilter = {\n key: string;\n /** Renders paired min/max numeric controls. */\n kind: \"number\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n /** Controlled min/max value. */\n value: FilterBarNumberValue;\n onChange: (value: FilterBarNumberValue) => void;\n /** Lower bound used by the optional range slider. */\n domainMin?: number;\n /** Upper bound used by the optional range slider. */\n domainMax?: number;\n /** Step size for number inputs and slider movement. */\n step?: number;\n /** Formatter used for slider labels. */\n formatValue?: (value: number) => string;\n minPlaceholder?: string;\n maxPlaceholder?: string;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarEnumFilter = {\n key: string;\n /** Renders a single-select dropdown. */\n kind: \"enum\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n /** Controlled selected value. */\n value: string;\n /** Available enum options. */\n options: Array<{ value: string; label?: string }>;\n onChange: (value: string) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarBooleanFilter = {\n key: string;\n /** Renders a boolean toggle. */\n kind: \"boolean\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n /** Controlled checked state. */\n value: boolean;\n onChange: (value: boolean) => void;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarTriStateFilter = {\n key: string;\n /** Renders a yes/no/any toggle for a nullable boolean field. */\n kind: \"tristate\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n /** Controlled state; undefined means the filter is off. */\n value: TriState;\n onChange: (value: TriState) => void;\n /** Per-state wording, e.g. { on: \"Deductible\", off: \"Not deductible\" }. */\n labels?: TriStateLabels;\n disabled?: boolean;\n className?: string;\n};\n\nexport type FilterBarFilter =\n | FilterBarTextFilter\n | FilterBarLookupFilter\n | FilterBarLookupMultiFilter\n | FilterBarMultiFilter\n | FilterBarNestedMultiFilter\n | FilterBarWorkloadFilter\n | FilterBarSelectMultiFilter\n | FilterBarNumberFilter\n | FilterBarEnumFilter\n | FilterBarBooleanFilter\n | FilterBarTriStateFilter\n | FilterBarDateRangeFilter;\n\nexport type FilterBarRangePreset = {\n /** Visible preset label. */\n label: string;\n /** Start value applied by the preset. */\n from: string;\n /** End value applied by the preset. */\n to: string;\n};\n\nexport type FilterBarRangeProps = {\n /** Current start value. */\n from?: string;\n /** Current end value. */\n to?: string;\n /** Called when the user applies the range. */\n onApply: (from: string, to: string) => void;\n /** Presets or preset groups shown in the range popup. */\n presets?: Array<FilterBarRangePreset | TimeRangePresetGroup>;\n /** Enables time inputs when using date-time values. */\n timeEnabled?: boolean;\n /** Selected timezone. */\n timeZone?: string;\n /** Available timezone options. */\n timeZones?: string[];\n fromPlaceholder?: string;\n toPlaceholder?: string;\n emptyLabel?: string;\n className?: string;\n disabled?: boolean;\n};\n\n/**\n * A date range that lives among the filters rather than in the bar's trailing\n * range slot.\n *\n * The trailing slot holds one range, which is right when a result has one\n * timestamp and the range is the primary way through it. A result with several\n * — `created_at` and `updated_at`, `@timestamp` and `event.ingested` — has no\n * such primary, and each of the others is a filter like any other.\n */\nexport type FilterBarDateRangeFilter = FilterBarRangeProps & {\n key: string;\n kind: \"date-range\";\n label: string;\n /** Leading glyph shown before the label: a runtime icon name or a node. */\n icon?: LabelIconSpec;\n description?: string;\n};\n\n/** The bar's own row. Shared with the overlay so the two cannot drift apart. */\nconst FILTER_BAR_ROW_CLASS =\n \"flex items-center gap-2 overflow-visible bg-background py-1.5\";\n\nexport type FilterBarProps = {\n /** Optional global search control shown first. */\n search?: FilterBarSearchProps;\n /** Structured filters rendered after search. */\n filters?: FilterBarFilter[];\n /** Date-time range control. */\n timeRange?: FilterBarRangeProps;\n /** Date-only range control. */\n dateRange?: FilterBarRangeProps;\n /** Additional content rendered in the filter row. */\n children?: ReactNode;\n /** Content rendered before search and filters. */\n leading?: ReactNode;\n /** Content rendered at the end of the bar. */\n trailing?: ReactNode;\n /** Classes applied to the root bar. */\n className?: string;\n /**\n * When false, debounced fields forward edits immediately and an Apply button\n * is rendered in the trailing slot. Defaults to true.\n */\n autoSubmit?: boolean;\n /** Called by the Apply button when `autoSubmit` is false. */\n onApply?: () => void;\n /** Label for the Apply button. */\n applyLabel?: string;\n /** Shows a pending state on the Apply button. */\n isPending?: boolean;\n /** `responsive` moves hidden filters into an overflow popover; `wrap` lets them wrap. */\n overflowMode?: \"responsive\" | \"wrap\";\n /**\n * Content that takes the bar's place while it is present — a bulk-action bar\n * that owns the row while rows are selected, say.\n *\n * The bar's own controls stay mounted, hidden rather than unmounted, so a\n * half-typed search survives the takeover and the row keeps whichever of the\n * two is taller. Nothing below it moves.\n */\n overlay?: ReactNode;\n};\n\nexport function FilterBar({\n search,\n filters,\n timeRange,\n dateRange,\n children,\n leading,\n trailing,\n className,\n autoSubmit = true,\n onApply,\n applyLabel = \"Apply\",\n isPending = false,\n overflowMode = \"responsive\",\n overlay,\n}: FilterBarProps) {\n const hasRangeControls = Boolean(timeRange || dateRange);\n const showApply = !autoSubmit && !!onApply;\n const contextValue = useMemo(() => ({ autoSubmit }), [autoSubmit]);\n const allFilters = filters ?? [];\n const responsiveOverflow = overflowMode === \"responsive\" && allFilters.length > 0;\n const mobileFilterOverflow = useMediaQuery(\"(max-width: 767px)\");\n const mobilePageOverflow = useMediaQuery(\"(max-width: 639px)\");\n const filterListRef = useRef<HTMLDivElement>(null);\n const overflowTriggerRef = useRef<HTMLButtonElement>(null);\n const filterNodeRefs = useRef(new Map<string, HTMLDivElement>());\n const filterWidthCache = useRef(new Map<string, number>());\n const filterKeys = useMemo(\n () => allFilters.map((filter) => filter.key).join(\"\\u0000\"),\n [allFilters],\n );\n const [visibleFilterCount, setVisibleFilterCount] = useState(allFilters.length);\n\n // Latest-value refs so measureOverflow can be a stable useCallback. Reading\n // the current values through refs sidesteps the closure-staleness problem\n // without putting array references in the dep list — which is what caused\n // the \"Maximum update depth exceeded\" cascade (allFilters in the deps made\n // measureOverflow change on every render → ResizeObserver effect re-ran →\n // setVisibleFilterCount fired → repeat).\n const allFiltersRef = useRef(allFilters);\n const responsiveOverflowRef = useRef(responsiveOverflow);\n const mobileFilterOverflowRef = useRef(mobileFilterOverflow);\n allFiltersRef.current = allFilters;\n responsiveOverflowRef.current = responsiveOverflow;\n mobileFilterOverflowRef.current = mobileFilterOverflow;\n\n useLayoutEffect(() => {\n setVisibleFilterCount(\n responsiveOverflowRef.current && mobileFilterOverflowRef.current\n ? 0\n : allFiltersRef.current.length,\n );\n }, [filterKeys, mobileFilterOverflow]);\n\n const measureOverflow = useCallback(() => {\n const current = allFiltersRef.current;\n if (!responsiveOverflowRef.current) {\n setVisibleFilterCount(current.length);\n return;\n }\n if (mobileFilterOverflowRef.current) {\n setVisibleFilterCount(0);\n return;\n }\n\n const filterList = filterListRef.current;\n if (!filterList) return;\n\n const availableWidth = Math.floor(filterList.getBoundingClientRect().width);\n if (availableWidth <= 0) return;\n\n const widths = current.map((filter) => {\n const node = filterNodeRefs.current.get(filter.key);\n const measured = node?.getBoundingClientRect().width ?? 0;\n if (measured > 0) {\n const width = Math.ceil(measured);\n filterWidthCache.current.set(filter.key, width);\n return width;\n }\n return filterWidthCache.current.get(filter.key) ?? estimateFilterWidth(filter);\n });\n\n const triggerWidth = Math.ceil(\n overflowTriggerRef.current?.getBoundingClientRect().width ??\n FILTER_BAR_OVERFLOW_TRIGGER_ESTIMATE_PX,\n );\n const triggerGap = triggerWidth > 0 ? FILTER_BAR_GAP_PX : 0;\n const allFiltersWidth = sumFilterWidths(widths);\n const nextVisible =\n allFiltersWidth <= availableWidth\n ? current.length\n : calculateVisibleFilterCount(\n widths,\n Math.max(0, availableWidth - triggerWidth - triggerGap),\n );\n setVisibleFilterCount((prev) => (prev === nextVisible ? prev : nextVisible));\n }, []);\n\n useLayoutEffect(() => {\n measureOverflow();\n }, [measureOverflow]);\n\n useEffect(() => {\n if (!responsiveOverflow) return;\n\n const filterList = filterListRef.current;\n const trigger = overflowTriggerRef.current;\n const ResizeObserverCtor = typeof ResizeObserver === \"undefined\" ? null : ResizeObserver;\n\n if (!ResizeObserverCtor) {\n window.addEventListener(\"resize\", measureOverflow);\n measureOverflow();\n return () => window.removeEventListener(\"resize\", measureOverflow);\n }\n\n const observer = new ResizeObserverCtor(() => measureOverflow());\n if (filterList) observer.observe(filterList);\n if (trigger) observer.observe(trigger);\n window.addEventListener(\"resize\", measureOverflow);\n measureOverflow();\n\n return () => {\n observer.disconnect();\n window.removeEventListener(\"resize\", measureOverflow);\n };\n }, [measureOverflow, responsiveOverflow, mobileFilterOverflow]);\n\n const inlineFilters = responsiveOverflow\n ? allFilters.slice(0, Math.min(visibleFilterCount, allFilters.length))\n : allFilters;\n const overflowFilters = responsiveOverflow\n ? allFilters.slice(Math.min(visibleFilterCount, allFilters.length))\n : [];\n const activeOverflowCount = overflowFilters.filter(isFilterBarFilterActive).length;\n\n const setFilterNode = useCallback((key: string, node: HTMLDivElement | null) => {\n if (!node) {\n filterNodeRefs.current.delete(key);\n return;\n }\n filterNodeRefs.current.set(key, node);\n }, []);\n\n const row = (\n <FilterBarContext.Provider value={contextValue}>\n <div\n data-slot=\"filter-bar\"\n className={cn(\n FILTER_BAR_ROW_CLASS,\n // `wrap` has to drop the md:flex-nowrap entirely rather than add a\n // plain flex-wrap beside it: the two live in different variant groups,\n // so twMerge keeps both and the breakpoint variant still wins above\n // md — which made the documented escape hatch do nothing on exactly\n // the desktop widths where a crowded bar overflows the viewport.\n overflowMode === \"wrap\" ? \"flex-wrap\" : \"flex-wrap md:flex-nowrap\",\n className,\n // Hidden rather than unmounted, so a half-typed search survives the\n // takeover. `visibility: hidden` is not focusable per spec, so this\n // leaves the tab order without needing `inert`.\n overlay && \"invisible pointer-events-none\",\n )}\n {...(overlay ? { \"aria-hidden\": true } : {})}\n >\n {leading && <div className=\"flex shrink-0 items-center gap-2\">{leading}</div>}\n\n {search && <SearchField search={search} />}\n\n {children}\n\n {allFilters.length > 0 && (\n <div\n ref={filterListRef}\n data-filter-bar-list\n className={cn(\n \"flex min-w-0 items-center gap-2\",\n overflowMode === \"wrap\" ? \"flex-wrap\" : \"flex-1\",\n )}\n >\n {inlineFilters.map((filter, index) => (\n <div\n key={filter.key}\n ref={(node) => setFilterNode(filter.key, node)}\n data-filter-bar-item={filter.key}\n className=\"min-w-0 shrink-0\"\n >\n {renderFilterField(filter, !search && index === 0)}\n </div>\n ))}\n </div>\n )}\n\n {responsiveOverflow && overflowFilters.length > 0 && (\n <OverflowFiltersMenu\n triggerRef={overflowTriggerRef}\n filters={overflowFilters}\n activeHidden={activeOverflowCount}\n mobilePage={mobilePageOverflow}\n {...(onApply ? { onApply } : {})}\n />\n )}\n\n {(hasRangeControls || trailing || showApply) && (\n <div className=\"ml-auto flex min-w-0 shrink-0 flex-wrap items-center justify-end gap-2\">\n {dateRange && <RangeControlButton kind=\"date\" label=\"Date range\" {...dateRange} />}\n {timeRange && (\n <RangeControlButton\n kind={timeRange.timeEnabled === false ? \"date\" : \"time\"}\n label={timeRange.timeEnabled === false ? \"Date range\" : \"Time range\"}\n {...timeRange}\n />\n )}\n {trailing}\n {showApply && (\n <Button\n type=\"button\"\n variant=\"default\"\n size=\"sm\"\n disabled={isPending}\n onClick={onApply}\n >\n {isPending ? \"Loading…\" : applyLabel}\n </Button>\n )}\n </div>\n )}\n </div>\n </FilterBarContext.Provider>\n );\n\n if (!overlay) return row;\n\n // Both rows share one grid cell, so the cell is as tall as the taller of the\n // two and neither can move the table underneath it. A min-height guess would\n // not do: the bar's height depends on which controls a caller supplied, so\n // there is no constant to guess.\n return (\n <div className=\"grid\">\n <div className=\"col-start-1 row-start-1 min-w-0\">{row}</div>\n <div\n data-slot=\"filter-bar-overlay\"\n className={cn(FILTER_BAR_ROW_CLASS, \"col-start-1 row-start-1 min-w-0 flex-wrap\")}\n >\n {overlay}\n </div>\n </div>\n );\n}\n\ntype FilterBarFilterPanelChrome = \"full\" | \"embedded\";\n\nexport function FilterBarFilterPanel({\n filter,\n chrome = \"full\",\n autoSubmit = true,\n}: {\n filter: FilterBarFilter;\n chrome?: FilterBarFilterPanelChrome;\n autoSubmit?: boolean;\n}) {\n const contextValue = useMemo(() => ({ autoSubmit }), [autoSubmit]);\n\n return (\n <FilterBarContext.Provider value={contextValue}>\n <FilterBarFilterPanelContent filter={filter} chrome={chrome} />\n </FilterBarContext.Provider>\n );\n}\n\nfunction FilterBarFilterPanelContent({\n filter,\n chrome = \"full\",\n}: {\n filter: FilterBarFilter;\n chrome?: FilterBarFilterPanelChrome;\n}) {\n return (\n <>\n {filter.kind === \"lookup\" && <LookupFilterField filter={filter} grow />}\n {filter.kind === \"lookup-multi\" && <LookupMultiFilterField filter={filter} grow />}\n {filter.kind === \"multi\" && <MultiFilterPanel filter={filter} chrome={chrome} />}\n {filter.kind === \"nested-multi\" && <NestedMultiFilterPanel filter={filter} chrome={chrome} />}\n {filter.kind === \"workload\" && <WorkloadFilterField filter={filter} grow />}\n {filter.kind === \"select-multi\" && <SelectMultiFilterField filter={filter} grow />}\n {filter.kind === \"number\" && <NumberFilterPanel filter={filter} chrome={chrome} />}\n {filter.kind === \"enum\" && <EnumFilterField filter={filter} grow />}\n {filter.kind === \"boolean\" && <BooleanFilterField filter={filter} />}\n {filter.kind === \"tristate\" && <TriStateFilterField filter={filter} />}\n {filter.kind === \"date-range\" && (\n <FilterBarRangePanel\n kind={filter.timeEnabled === false ? \"date\" : \"time\"}\n label={filter.label}\n {...dateRangeFilterProps(filter)}\n />\n )}\n {filter.kind === \"text\" && <TextFilterField filter={filter} grow />}\n </>\n );\n}\n\nfunction renderFilterField(filter: FilterBarFilter, grow: boolean) {\n if (filter.kind === \"lookup\") {\n return <LookupFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"lookup-multi\") {\n return <LookupMultiFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"multi\") {\n return <MultiFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"nested-multi\") {\n return <NestedMultiFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"workload\") {\n return <WorkloadFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"select-multi\") {\n return <SelectMultiFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"number\") {\n return <NumberFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"enum\") {\n return <EnumFilterField filter={filter} grow={grow} />;\n }\n\n if (filter.kind === \"boolean\") {\n return <BooleanFilterField filter={filter} />;\n }\n\n if (filter.kind === \"tristate\") {\n return <TriStateFilterField filter={filter} />;\n }\n\n if (filter.kind === \"date-range\") {\n return (\n <RangeControlButton\n kind={filter.timeEnabled === false ? \"date\" : \"time\"}\n label={filter.label}\n {...dateRangeFilterProps(filter)}\n />\n );\n }\n\n return <TextFilterField filter={filter} grow={grow} />;\n}\n\nfunction OverflowFiltersMenu({\n triggerRef,\n filters,\n activeHidden,\n mobilePage,\n onApply,\n}: {\n triggerRef: RefObject<HTMLButtonElement | null>;\n filters: FilterBarFilter[];\n activeHidden: number;\n mobilePage: boolean;\n onApply?: () => void;\n}) {\n const [open, setOpen] = useState(false);\n const [stagedValues, setStagedValues] = useState<Record<string, FilterBarValue>>({});\n const hasHidden = filters.length > 0;\n const hiddenFilterKeys = useMemo(\n () => filters.map((filter) => filter.key).join(\"\\u0000\"),\n [filters],\n );\n // Re-stage from the live filters on every open/close so an un-applied edit is\n // discarded, preserving the prior close behaviour.\n const { refs, floatingStyles, context, floatingZ, getReferenceProps, getFloatingProps } =\n useAnchoredPopup(\n open && !mobilePage,\n (next) => {\n setStagedValues(createFilterValueMap(filters));\n setOpen(next);\n },\n \"bottom-end\",\n );\n const closeOverflowMenu = useCallback(() => {\n setStagedValues(createFilterValueMap(filters));\n setOpen(false);\n }, [filters]);\n // Merge floating-ui's reference ref with the caller's triggerRef (the parent\n // measures the trigger width through it for overflow layout).\n const setTriggerRef = useMergeRefs([refs.setReference, triggerRef]);\n\n useEffect(() => {\n if (!hasHidden) closeOverflowMenu();\n }, [closeOverflowMenu, hasHidden]);\n\n useEffect(() => {\n if (!open) return;\n setStagedValues(createFilterValueMap(filters));\n }, [hiddenFilterKeys, open]);\n\n const stagedFilters = filters.map((filter) =>\n filterWithStagedValue(\n filter,\n // Key presence, not `??`: a tri-state cycled to unset stages `undefined`,\n // which must render as unset instead of falling back to the live value.\n Object.hasOwn(stagedValues, filter.key)\n ? stagedValues[filter.key]\n : filterBarFilterValue(filter),\n (next) =>\n setStagedValues((current) => ({\n ...current,\n [filter.key]: next,\n })),\n ),\n );\n const applyOverflowFilters = () => {\n applyStagedFilterValues(filters, stagedValues);\n onApply?.();\n setOpen(false);\n };\n const clearAll = (\n <button\n type=\"button\"\n className=\"rounded px-1.5 py-0.5 text-xs text-primary transition-colors hover:bg-accent focus:bg-accent focus:outline-none disabled:text-muted-foreground\"\n onClick={() => stagedFilters.forEach(clearFilterBarFilter)}\n disabled={stagedFilters.every((filter) => !isFilterBarFilterActive(filter))}\n >\n Clear all\n </button>\n );\n const actions = (\n <OverflowFilterActions onClose={closeOverflowMenu} onApply={applyOverflowFilters} />\n );\n\n return (\n <div\n className={cn(\"inline-flex shrink-0\", !hasHidden && \"invisible pointer-events-none\")}\n aria-hidden={!hasHidden || undefined}\n >\n <Button\n ref={setTriggerRef}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label=\"More filters\"\n tabIndex={hasHidden ? 0 : -1}\n title={hasHidden ? \"More filters\" : undefined}\n className={cn(\n \"h-8 min-w-0 gap-1.5 px-2 text-xs font-normal\",\n activeHidden > 0 && \"border-primary/40 text-primary\",\n )}\n {...getReferenceProps()}\n aria-expanded={open}\n >\n <Icon icon={UiFilter} className=\"text-[14px]\" />\n {activeHidden > 0 && (\n <span className=\"rounded-full bg-muted px-1.5 text-[10px] font-medium text-muted-foreground\">\n {activeHidden}\n </span>\n )}\n </Button>\n\n {mobilePage && (\n <Modal\n open={hasHidden && open}\n onClose={closeOverflowMenu}\n title=\"Filters\"\n headerSlot={clearAll}\n footer={actions}\n scrollBody={false}\n >\n <OverflowFilterRows filters={stagedFilters} mobilePage />\n </Modal>\n )}\n\n {!mobilePage && hasHidden && open && (\n <FloatingPortal>\n <FloatingFocusManager context={context} modal={false}>\n <div\n ref={refs.setFloating}\n role=\"dialog\"\n aria-label=\"Overflow filters\"\n style={{ ...floatingStyles, zIndex: floatingZ }}\n className=\"flex max-h-[min(34rem,calc(100vh-2rem))] w-[min(34rem,calc(100vw-2rem))] flex-col overflow-hidden rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-lg shadow-black/10\"\n {...getFloatingProps()}\n >\n <div className=\"mb-2 flex items-center justify-between gap-2 px-1\">\n <div className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n Filters\n </div>\n <div className=\"flex items-center gap-1\">\n {clearAll}\n <button\n type=\"button\"\n aria-label=\"Close overflow filters\"\n title=\"Close\"\n className=\"inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\"\n onClick={closeOverflowMenu}\n >\n <Icon icon={UiClose} className=\"text-sm\" />\n </button>\n </div>\n </div>\n <OverflowFilterRows filters={stagedFilters} />\n <div className=\"mt-3\">{actions}</div>\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </div>\n );\n}\n\nfunction OverflowFilterRows({\n filters,\n mobilePage = false,\n}: {\n filters: FilterBarFilter[];\n mobilePage?: boolean;\n}) {\n return (\n <div\n className={cn(\n \"min-h-0 flex-1 divide-y divide-border/70 overflow-y-auto\",\n mobilePage ? \"bg-background\" : \"rounded-md border border-border/70\",\n )}\n >\n {filters.map((filter) => {\n const active = isFilterBarFilterActive(filter);\n return (\n <div\n key={filter.key}\n data-overflow-filter-row={filter.key}\n className=\"grid grid-cols-[minmax(0,1fr)_auto] items-start gap-2 overflow-visible p-4 md:h-12 md:grid-cols-[minmax(7rem,10rem)_auto_minmax(0,1fr)_auto] md:items-center md:p-2\"\n >\n <label\n htmlFor={filterInputId(filter)}\n className=\"col-span-2 flex min-w-0 items-center gap-1 truncate text-[10px] font-medium uppercase tracking-wide text-muted-foreground md:col-span-1\"\n title={filter.description ?? filter.label}\n >\n <LabelIcon icon={sizedIcon(filter.icon, 12)} className=\"text-[12px] normal-case\" />\n <span className=\"truncate\">{filter.label}</span>\n </label>\n <span className=\"hidden text-sm text-muted-foreground md:block\">=</span>\n <div className=\"min-w-0 overflow-visible\">\n <FilterBarContext.Provider value={{ autoSubmit: false }}>\n <FilterBarKeyValueControl filter={filter} />\n </FilterBarContext.Provider>\n </div>\n <button\n type=\"button\"\n aria-label={`Clear ${filter.label}`}\n title={`Clear ${filter.label}`}\n className=\"inline-flex h-6 w-6 self-center items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none disabled:text-muted-foreground/40\"\n onClick={() => clearFilterBarFilter(filter)}\n disabled={!active}\n >\n <Icon icon={UiClose} className=\"text-sm\" />\n </button>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction OverflowFilterActions({\n onClose,\n onApply,\n}: {\n onClose: () => void;\n onApply: () => void;\n}) {\n return (\n <div className=\"flex justify-end gap-2\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className=\"h-8 px-3 text-xs\" onClick={onClose}>\n Close\n </Button>\n <Button type=\"button\" variant=\"default\" size=\"sm\" className=\"h-8 px-3 text-xs\" onClick={onApply}>\n Apply\n </Button>\n </div>\n );\n}\n\nfunction FilterBarKeyValueControl({ filter }: { filter: FilterBarFilter }) {\n if (filter.kind === \"date-range\") {\n return (\n <RangeControlButton\n kind={filter.timeEnabled === false ? \"date\" : \"time\"}\n label={filter.label}\n {...dateRangeFilterProps(filter)}\n />\n );\n }\n if (filter.kind === \"text\") {\n return <TextFilterValueControl filter={filter} />;\n }\n if (filter.kind === \"lookup\") {\n return <LookupFilterValueControl filter={filter} />;\n }\n if (filter.kind === \"lookup-multi\") {\n return <LookupMultiFilterValueControl filter={filter} />;\n }\n if (filter.kind === \"enum\") {\n return <EnumFilterValueControl filter={filter} />;\n }\n if (filter.kind === \"boolean\") {\n return <BooleanFilterValueControl filter={filter} />;\n }\n if (filter.kind === \"select-multi\") {\n return <SelectMultiFilterValueControl filter={filter} />;\n }\n if (filter.kind === \"multi\") {\n return <MultiFilterField filter={filter} grow />;\n }\n if (filter.kind === \"nested-multi\") {\n return <NestedMultiFilterField filter={filter} grow />;\n }\n if (filter.kind === \"workload\") {\n return <WorkloadFilterField filter={filter} grow />;\n }\n if (filter.kind === \"tristate\") {\n return <TriStateFilterValueControl filter={filter} />;\n }\n return <NumberFilterField filter={filter} grow />;\n}\n\nfunction filterInputId(filter: FilterBarFilter) {\n return `filterbar-overflow-${filter.key}`;\n}\n\nfunction lookupOptionsToCombobox(options: FilterBarLookupOption[]): ComboboxOption[] {\n return options.map((option) => ({\n value: option.value,\n label: option.label ?? option.value,\n ...(option.disabled !== undefined ? { disabled: option.disabled } : {}),\n }));\n}\n\nfunction WorkloadFilterField({\n filter,\n grow,\n}: {\n filter: FilterBarWorkloadFilter;\n grow: boolean;\n}) {\n return (\n <div className={cn(\"min-w-[14rem]\", grow && \"flex-1\", filter.className)}>\n <WorkloadPicker\n value={filter.value}\n onChange={filter.onChange}\n loadWorkloads={filter.loadWorkloads}\n {...(filter.kinds ? { kinds: filter.kinds } : {})}\n {...(filter.collapseSingleOption ? { collapseSingleOption: true } : {})}\n allowCustomValue={false}\n strict\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n placeholder={`Select ${filter.label.toLowerCase()}…`}\n />\n </div>\n );\n}\n\nfunction valueInputClassName(disabled?: boolean) {\n return cn(\n \"h-8 w-full rounded-md border border-input bg-background px-2 text-sm text-foreground outline-none placeholder:text-placeholder focus-visible:ring-2 focus-visible:ring-ring\",\n disabled && \"cursor-not-allowed opacity-60\",\n );\n}\n\nfunction TextFilterValueControl({ filter }: { filter: FilterBarTextFilter }) {\n const [draft, setDraft] = useDebouncedTextDraft(filter.value, filter.onChange);\n\n return (\n <input\n id={filterInputId(filter)}\n type=\"text\"\n aria-label={filter.label}\n className={valueInputClassName(filter.disabled)}\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n value={draft}\n disabled={filter.disabled}\n onChange={(event) => setDraft(event.target.value)}\n />\n );\n}\n\nfunction LookupFilterValueControl({ filter }: { filter: FilterBarLookupFilter }) {\n const [draft, setDraft] = useDebouncedTextDraft(filter.value, filter.onChange);\n\n if (filter.inputType === \"date\") {\n return (\n <DateTimePicker\n id={filterInputId(filter)}\n aria-label={filter.label}\n className=\"w-full\"\n inputClassName={valueInputClassName(filter.disabled)}\n buttonClassName=\"right-1\"\n placeholder={filter.placeholder}\n value={draft}\n disabled={filter.disabled}\n onChange={setDraft}\n />\n );\n }\n\n if (filter.inputType === \"number\") {\n return (\n <input\n id={filterInputId(filter)}\n type=\"number\"\n aria-label={filter.label}\n className={valueInputClassName(filter.disabled)}\n placeholder={filter.placeholder}\n value={draft}\n disabled={filter.disabled}\n onChange={(event) => setDraft(event.target.value)}\n />\n );\n }\n\n // The overflow panel renders the filter label as a separate row header, so\n // the Combobox here omits its own inline label to avoid duplication.\n return (\n <Combobox\n id={filterInputId(filter)}\n options={lookupOptionsToCombobox(filter.options)}\n value={filter.value}\n onChange={filter.onChange}\n allowCustomValue={false}\n size=\"sm\"\n className=\"w-full\"\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n />\n );\n}\n\nfunction LookupMultiFilterValueControl({ filter }: { filter: FilterBarLookupMultiFilter }) {\n return (\n <Combobox\n multiple\n id={filterInputId(filter)}\n options={lookupOptionsToCombobox(filter.options)}\n value={filter.value}\n onChange={filter.onChange}\n allowCustomValue={false}\n footer={lookupMultiFilterFooter(filter)}\n size=\"sm\"\n className=\"w-full\"\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n />\n );\n}\n\nfunction enumOptionsToCombobox(\n options: FilterBarEnumFilter[\"options\"],\n): ComboboxOption[] {\n return options.map((option) => ({\n value: option.value,\n label: option.label ?? option.value,\n }));\n}\n\nfunction EnumFilterValueControl({ filter }: { filter: FilterBarEnumFilter }) {\n return (\n <Combobox\n id={filterInputId(filter)}\n options={enumOptionsToCombobox(filter.options)}\n value={filter.value}\n onChange={filter.onChange}\n allowCustomValue={false}\n size=\"sm\"\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n className=\"w-full\"\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n />\n );\n}\n\nfunction BooleanFilterValueControl({ filter }: { filter: FilterBarBooleanFilter }) {\n return (\n <div className=\"flex h-8 items-center\">\n <input\n id={filterInputId(filter)}\n type=\"checkbox\"\n aria-label={filter.label}\n className=\"h-4 w-4 accent-primary\"\n checked={filter.value}\n disabled={filter.disabled}\n onChange={(event) => filter.onChange(event.target.checked)}\n />\n </div>\n );\n}\n\nfunction TriStateFilterValueControl({ filter }: { filter: FilterBarTriStateFilter }) {\n return (\n <div className=\"flex h-8 items-center\">\n <TriStateToggle\n id={filterInputId(filter)}\n value={filter.value}\n onChange={filter.onChange}\n label={filter.label}\n size=\"md\"\n {...(filter.labels ? { labels: filter.labels } : {})}\n {...(filter.disabled ? { disabled: filter.disabled } : {})}\n />\n </div>\n );\n}\n\nfunction SelectMultiFilterValueControl({ filter }: { filter: FilterBarSelectMultiFilter }) {\n return (\n <MultiSelect\n options={filter.options}\n value={filter.value}\n onChange={filter.onChange}\n ariaLabel={`${filter.label} filter`}\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n triggerClassName=\"h-8 w-full rounded-md border border-input bg-background px-2 text-sm shadow-none\"\n menuClassName=\"left-auto right-0\"\n />\n );\n}\n\nexport function FilterBarRangePanel({\n kind,\n label,\n from = \"\",\n to = \"\",\n onApply,\n presets,\n timeEnabled,\n timeZone,\n timeZones,\n fromPlaceholder,\n toPlaceholder,\n emptyLabel,\n disabled,\n}: FilterBarRangeProps & { kind: \"date\" | \"time\"; label: string }) {\n return (\n <div className=\"w-72 p-3 text-popover-foreground\">\n <TimeRange\n kind={kind}\n label={label}\n align=\"left\"\n from={from}\n to={to}\n onApply={onApply}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(presets ? { presets } : {})}\n {...(timeEnabled !== undefined ? { timeEnabled } : {})}\n {...(timeZone ? { timeZone } : {})}\n {...(timeZones ? { timeZones } : {})}\n {...(fromPlaceholder ? { fromPlaceholder } : {})}\n {...(toPlaceholder ? { toPlaceholder } : {})}\n {...(emptyLabel ? { emptyLabel } : {})}\n panelClassName=\"left-0 right-auto\"\n />\n </div>\n );\n}\n\nfunction EnumFilterField({ filter, grow }: { filter: FilterBarEnumFilter; grow: boolean }) {\n return (\n <Combobox\n {...comboboxLabelProps(filter)}\n options={enumOptionsToCombobox(filter.options)}\n value={filter.value}\n onChange={filter.onChange}\n allowCustomValue={false}\n size=\"sm\"\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n className={cn(lookupFieldWidthClass(grow), filter.className)}\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n />\n );\n}\n\nfunction TriStateFilterField({ filter }: { filter: FilterBarTriStateFilter }) {\n return (\n <div\n title={filter.description}\n className={cn(\n \"flex h-8 shrink-0 items-center gap-2 rounded-md border border-input bg-muted/30 px-2 text-xs\",\n filter.disabled && \"opacity-60\",\n filter.className,\n )}\n >\n <TriStateToggle\n value={filter.value}\n onChange={filter.onChange}\n label={filter.label}\n {...(filter.labels ? { labels: filter.labels } : {})}\n {...(filter.disabled ? { disabled: filter.disabled } : {})}\n />\n <FilterFieldLabel icon={filter.icon} label={filter.label} />\n </div>\n );\n}\n\nfunction BooleanFilterField({ filter }: { filter: FilterBarBooleanFilter }) {\n return (\n <label\n title={filter.description}\n className={cn(\n \"flex h-8 shrink-0 items-center gap-2 rounded-md border border-input bg-muted/30 px-2 text-xs\",\n filter.disabled && \"opacity-60\",\n filter.className,\n )}\n >\n <input\n type=\"checkbox\"\n aria-label={filter.label}\n className=\"h-3.5 w-3.5 accent-primary\"\n checked={filter.value}\n disabled={filter.disabled}\n onChange={(event) => filter.onChange(event.target.checked)}\n />\n <FilterFieldLabel icon={filter.icon} label={filter.label} />\n </label>\n );\n}\n\nfunction SearchField({ search }: { search: FilterBarSearchProps }) {\n const [draft, setDraft] = useDebouncedTextDraft(search.value, search.onChange);\n\n return (\n <div className=\"flex min-w-0 flex-[1_1_14rem] items-center gap-2 md:min-w-[14rem] md:max-w-[24rem]\">\n <label\n className={cn(\n \"flex h-8 min-w-0 flex-1 items-center rounded-md border border-input bg-background px-3 text-sm\",\n search.className,\n )}\n >\n {draft.trim() ? (\n <span className=\"mr-2 whitespace-nowrap text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {search.ariaLabel ?? \"Search\"}\n </span>\n ) : (\n <Icon icon={UiSearch} className=\"mr-2 shrink-0 text-muted-foreground\" />\n )}\n <input\n type=\"search\"\n aria-label={search.ariaLabel ?? search.placeholder ?? \"Search\"}\n className=\"w-full bg-transparent outline-none placeholder:text-placeholder\"\n placeholder={search.placeholder ?? \"Search…\"}\n value={draft}\n onChange={(event) => setDraft(event.target.value)}\n />\n </label>\n </div>\n );\n}\n\nfunction TextFilterField({ filter, grow }: { filter: FilterBarTextFilter; grow: boolean }) {\n const [draft, setDraft] = useDebouncedTextDraft(filter.value, filter.onChange);\n\n return (\n <label\n title={filter.description}\n className={cn(\n \"flex h-8 items-center gap-2 rounded-md border border-input bg-muted/30 pl-2 pr-2 text-xs\",\n grow ? \"min-w-[12rem] max-w-[18rem] flex-1\" : \"min-w-[11rem] max-w-[15rem] shrink-0\",\n filter.disabled && \"opacity-60\",\n filter.className,\n )}\n >\n <FilterFieldLabel icon={filter.icon} label={filter.label} />\n <input\n type=\"text\"\n aria-label={filter.label}\n className=\"w-full min-w-0 bg-transparent text-sm text-foreground outline-none placeholder:text-placeholder disabled:cursor-not-allowed\"\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n value={draft}\n disabled={filter.disabled}\n onChange={(event) => setDraft(event.target.value)}\n />\n </label>\n );\n}\n\n// FilterFieldLabel is the uppercase label shown inside inline filter shells,\n// with an optional leading glyph from the filter's `icon`.\nfunction FilterFieldLabel({ icon, label }: { icon?: LabelIconSpec; label: string }) {\n return (\n <span className=\"flex items-center gap-1 whitespace-nowrap font-medium uppercase tracking-wide text-muted-foreground\">\n <LabelIcon icon={icon} className=\"text-[13px] normal-case\" />\n {label}\n </span>\n );\n}\n\nfunction LookupFilterField({ filter, grow }: { filter: FilterBarLookupFilter; grow: boolean }) {\n const [draft, setDraft] = useDebouncedTextDraft(filter.value, filter.onChange);\n\n // Date and number lookups keep their specialized inputs in the label shell;\n // text lookups use the Combobox with its own inline label.\n if (filter.inputType === \"date\" || filter.inputType === \"number\") {\n // For a date lookup with a value, surface the human-readable absolute +\n // relative form (e.g. \"Apr 15, 2026, 12:00 PM (2h ago)\") as the hover title.\n const dateTitle =\n filter.inputType === \"date\" && draft ? formatDateTimeRelative(draft) : undefined;\n return (\n <label\n title={dateTitle ?? filter.description}\n className={cn(\n \"flex h-8 items-center gap-2 rounded-md border border-input bg-muted/30 pl-2 pr-2 text-xs\",\n lookupFieldWidthClass(grow),\n filter.disabled && \"opacity-60\",\n filter.className,\n )}\n >\n <FilterFieldLabel icon={filter.icon} label={filter.label} />\n {filter.inputType === \"date\" ? (\n <DateTimePicker\n aria-label={filter.label}\n className=\"w-full\"\n inputClassName=\"w-full min-w-0 border-0 bg-transparent px-0 pr-6 text-sm text-foreground shadow-none focus-visible:ring-0\"\n buttonClassName=\"right-0\"\n placeholder={filter.placeholder}\n value={draft}\n disabled={filter.disabled}\n onChange={setDraft}\n />\n ) : (\n <input\n type=\"number\"\n aria-label={filter.label}\n className=\"w-full min-w-0 bg-transparent text-sm text-foreground outline-none placeholder:text-placeholder disabled:cursor-not-allowed\"\n placeholder={filter.placeholder}\n value={draft}\n disabled={filter.disabled}\n onChange={(event) => setDraft(event.target.value)}\n />\n )}\n </label>\n );\n }\n\n return (\n <Combobox\n {...comboboxLabelProps(filter)}\n options={lookupOptionsToCombobox(filter.options)}\n value={filter.value}\n onChange={filter.onChange}\n allowCustomValue={false}\n size=\"sm\"\n className={cn(lookupFieldWidthClass(grow), filter.className)}\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n />\n );\n}\n\nfunction LookupMultiFilterField({\n filter,\n grow,\n}: {\n filter: FilterBarLookupMultiFilter;\n grow: boolean;\n}) {\n return (\n <Combobox\n multiple\n {...comboboxLabelProps(filter)}\n options={lookupOptionsToCombobox(filter.options)}\n value={filter.value}\n onChange={filter.onChange}\n allowCustomValue={false}\n footer={lookupMultiFilterFooter(filter)}\n size=\"sm\"\n className={cn(lookupFieldWidthClass(grow), filter.className)}\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n {...(filter.onSearch !== undefined ? { onSearch: filter.onSearch } : {})}\n {...(filter.loading !== undefined ? { loading: filter.loading } : {})}\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n />\n );\n}\n\nfunction lookupMultiFilterFooter(filter: FilterBarLookupMultiFilter) {\n const moreCount =\n filter.truncated && filter.total ? Math.max(filter.total - filter.options.length, 0) : 0;\n if (moreCount === 0) return undefined;\n return (\n <>\n … and {moreCount.toLocaleString()} more\n {filter.onSearch ? \" — type to search all\" : \"\"}\n </>\n );\n}\n\nfunction NumberFilterField({ filter, grow }: { filter: FilterBarNumberFilter; grow: boolean }) {\n const [open, setOpen] = useState(false);\n const popup = useAnchoredPopup(open, setOpen);\n\n const bounds = resolveNumberFilterBounds(filter);\n const [draft, setDraft] = useDebouncedNumberDraft(filter.value, filter.onChange);\n const sliderMin = clampNumber(parseFilterNumber(draft.min) ?? bounds.min, bounds.min, bounds.max);\n const sliderMax = clampNumber(parseFilterNumber(draft.max) ?? bounds.max, bounds.min, bounds.max);\n const activeMin = Math.min(sliderMin, sliderMax);\n const activeMax = Math.max(sliderMin, sliderMax);\n const summary = summarizeNumberFilter(filter, bounds, draft);\n\n return (\n <div\n title={filter.description}\n className={cn(\n \"inline-flex min-w-0\",\n grow ? \"min-w-[8rem] max-w-[12rem] flex-1\" : \"shrink-0\",\n filter.disabled && \"opacity-60\",\n filter.className,\n )}\n >\n <Button\n ref={popup.refs.setReference as Ref<HTMLButtonElement>}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label={`${filter.label} filter`}\n disabled={filter.disabled}\n className={cn(\n \"min-w-0 gap-2 font-normal\",\n grow ? \"w-full max-w-[12rem] justify-between\" : \"w-auto max-w-[9.5rem] px-2.5\",\n summary === filter.label && \"text-muted-foreground\",\n )}\n {...popup.getReferenceProps()}\n >\n <LabelIcon icon={filter.icon} className=\"text-[14px] text-muted-foreground\" />\n <span className=\"truncate\">{summary}</span>\n <Icon icon={open ? UiChevronUp : UiChevronDown} className=\"text-muted-foreground\" />\n </Button>\n\n {open && (\n <FloatingPortal>\n <FloatingFocusManager context={popup.context} modal={false}>\n <div\n ref={popup.refs.setFloating}\n role=\"dialog\"\n aria-label={filter.label}\n style={{ ...popup.floatingStyles, zIndex: popup.floatingZ }}\n className=\"min-w-[18rem] max-w-[22rem] rounded-md border border-border bg-popover p-3 text-popover-foreground shadow-lg shadow-black/5\"\n {...popup.getFloatingProps()}\n >\n <div className=\"mb-3 flex items-center justify-between gap-2\">\n <div className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {filter.label}\n </div>\n <button\n type=\"button\"\n className=\"text-[10px] text-primary disabled:text-muted-foreground\"\n onClick={() => {\n setDraft({});\n filter.onChange({});\n }}\n disabled={!String(draft.min ?? \"\").trim() && !String(draft.max ?? \"\").trim()}\n >\n Clear all\n </button>\n </div>\n\n <div className=\"space-y-3\">\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between text-[11px] text-muted-foreground\">\n <span>{formatNumberValue(bounds.min, filter)}</span>\n <span>{formatNumberValue(bounds.max, filter)}</span>\n </div>\n <div className=\"relative h-6\">\n <RangeSlider\n min={bounds.min}\n max={bounds.max}\n step={bounds.step}\n value={[activeMin, activeMax]}\n ariaLabelMin={`${filter.label} minimum slider`}\n ariaLabelMax={`${filter.label} maximum slider`}\n onChange={([nextMin, nextMax]) =>\n setDraft(numberFilterValueFromSlider([nextMin, nextMax], bounds))\n }\n />\n </div>\n </div>\n\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"space-y-1\">\n <label className=\"text-[10px] text-muted-foreground\">Min</label>\n <input\n type=\"number\"\n inputMode=\"decimal\"\n step={bounds.step}\n aria-label={`${filter.label} minimum`}\n className=\"h-8 w-full rounded-md border border-input bg-background px-2 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n {...(filter.minPlaceholder !== undefined ? { placeholder: filter.minPlaceholder } : {})}\n value={draft.min ?? \"\"}\n onChange={(event) =>\n setDraft(\n normalizeNumberFilterValue(\n { min: event.target.value, max: draft.max ?? \"\" },\n \"min-input\",\n ),\n )\n }\n />\n </div>\n <div className=\"space-y-1\">\n <label className=\"text-[10px] text-muted-foreground\">Max</label>\n <input\n type=\"number\"\n inputMode=\"decimal\"\n step={bounds.step}\n aria-label={`${filter.label} maximum`}\n className=\"h-8 w-full rounded-md border border-input bg-background px-2 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n {...(filter.maxPlaceholder !== undefined ? { placeholder: filter.maxPlaceholder } : {})}\n value={draft.max ?? \"\"}\n onChange={(event) =>\n setDraft(\n normalizeNumberFilterValue(\n { min: draft.min ?? \"\", max: event.target.value },\n \"max-input\",\n ),\n )\n }\n />\n </div>\n </div>\n </div>\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </div>\n );\n}\n\nfunction NumberFilterPanel({\n filter,\n chrome = \"full\",\n}: {\n filter: FilterBarNumberFilter;\n chrome?: FilterBarFilterPanelChrome;\n}) {\n const bounds = resolveNumberFilterBounds(filter);\n const [draft, setDraft] = useDebouncedNumberDraft(filter.value, filter.onChange);\n const sliderMin = clampNumber(parseFilterNumber(draft.min) ?? bounds.min, bounds.min, bounds.max);\n const sliderMax = clampNumber(parseFilterNumber(draft.max) ?? bounds.max, bounds.min, bounds.max);\n const activeMin = Math.min(sliderMin, sliderMax);\n const activeMax = Math.max(sliderMin, sliderMax);\n const embedded = chrome === \"embedded\";\n\n return (\n <div\n data-filter-panel-chrome={chrome}\n className={cn(\n \"min-w-[18rem] max-w-[22rem] text-popover-foreground\",\n embedded\n ? \"p-0\"\n : \"rounded-md border border-border bg-popover p-3 shadow-sm shadow-black/5\",\n )}\n >\n {!embedded && (\n <div className=\"mb-3 flex items-center justify-between gap-2\">\n <div className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {filter.label}\n </div>\n <button\n type=\"button\"\n className=\"text-[10px] text-primary disabled:text-muted-foreground\"\n onClick={() => {\n setDraft({});\n filter.onChange({});\n }}\n disabled={!String(draft.min ?? \"\").trim() && !String(draft.max ?? \"\").trim()}\n >\n Clear all\n </button>\n </div>\n )}\n\n <div className=\"space-y-3\">\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between text-[11px] text-muted-foreground\">\n <span>{formatNumberValue(bounds.min, filter)}</span>\n <span>{formatNumberValue(bounds.max, filter)}</span>\n </div>\n <div className=\"relative h-6\">\n <RangeSlider\n min={bounds.min}\n max={bounds.max}\n step={bounds.step}\n value={[activeMin, activeMax]}\n ariaLabelMin={`${filter.label} minimum slider`}\n ariaLabelMax={`${filter.label} maximum slider`}\n onChange={([nextMin, nextMax]) =>\n setDraft(numberFilterValueFromSlider([nextMin, nextMax], bounds))\n }\n />\n </div>\n </div>\n\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"space-y-1\">\n <label className=\"text-[10px] text-muted-foreground\">Min</label>\n <input\n type=\"number\"\n inputMode=\"decimal\"\n step={bounds.step}\n aria-label={`${filter.label} minimum`}\n className=\"h-8 w-full rounded-md border border-input bg-background px-2 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n {...(filter.minPlaceholder !== undefined ? { placeholder: filter.minPlaceholder } : {})}\n value={draft.min ?? \"\"}\n onChange={(event) =>\n setDraft(\n normalizeNumberFilterValue(\n { min: event.target.value, max: draft.max ?? \"\" },\n \"min-input\",\n ),\n )\n }\n />\n </div>\n <div className=\"space-y-1\">\n <label className=\"text-[10px] text-muted-foreground\">Max</label>\n <input\n type=\"number\"\n inputMode=\"decimal\"\n step={bounds.step}\n aria-label={`${filter.label} maximum`}\n className=\"h-8 w-full rounded-md border border-input bg-background px-2 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n {...(filter.maxPlaceholder !== undefined ? { placeholder: filter.maxPlaceholder } : {})}\n value={draft.max ?? \"\"}\n onChange={(event) =>\n setDraft(\n normalizeNumberFilterValue(\n { min: draft.min ?? \"\", max: event.target.value },\n \"max-input\",\n ),\n )\n }\n />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction NestedMultiFilterPanel({\n filter,\n chrome = \"full\",\n}: {\n filter: FilterBarNestedMultiFilter;\n chrome?: FilterBarFilterPanelChrome;\n}) {\n const [activeGroup, setActiveGroup] = useState<string | null>(filter.groups[0]?.groupKey ?? null);\n const [draft, setDraft] = useDebouncedMultiDraft(filter.value, filter.onChange);\n const groups = filter.groups;\n const embedded = chrome === \"embedded\";\n const activeGroupData = useMemo(\n () => groups.find((group) => group.groupKey === activeGroup) ?? groups[0] ?? null,\n [groups, activeGroup],\n );\n\n const selectedByGroup = useMemo(() => {\n const counts: Record<string, number> = {};\n for (const group of groups) {\n let n = 0;\n for (const option of group.options) {\n if (draft[option.value]) n += 1;\n }\n counts[group.groupKey] = n;\n }\n return counts;\n }, [groups, draft]);\n\n const sortedGroups = useMemo(() => {\n const selected: typeof groups = [];\n const rest: typeof groups = [];\n for (const group of groups) {\n if ((selectedByGroup[group.groupKey] ?? 0) > 0) selected.push(group);\n else rest.push(group);\n }\n return [...selected, ...rest];\n }, [groups, selectedByGroup]);\n\n const clearGroup = (groupKey: string) => {\n const group = groups.find((g) => g.groupKey === groupKey);\n if (!group) return;\n const next = { ...draft };\n for (const option of group.options) {\n delete next[option.value];\n }\n setDraft(next);\n };\n\n return (\n <div role=\"dialog\" className=\"flex\">\n <div\n data-filter-panel-chrome={chrome}\n className={cn(\n \"min-w-[14rem] max-w-[16rem] text-popover-foreground\",\n embedded\n ? \"p-0\"\n : \"rounded-md border border-border bg-popover p-2 shadow-sm shadow-black/5\",\n )}\n >\n {!embedded && (\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <div className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {filter.label}\n </div>\n <button\n type=\"button\"\n className=\"text-[10px] text-primary disabled:text-muted-foreground\"\n onClick={() => setDraft({})}\n disabled={Object.keys(draft).length === 0}\n >\n Clear all\n </button>\n </div>\n )}\n\n <div className=\"max-h-72 space-y-0.5 overflow-auto\">\n {sortedGroups.map((group) => {\n const selected = selectedByGroup[group.groupKey] ?? 0;\n const isActive = group.groupKey === activeGroup;\n return (\n <div\n key={group.groupKey}\n role=\"button\"\n tabIndex={0}\n onMouseEnter={() => setActiveGroup(group.groupKey)}\n onFocus={() => setActiveGroup(group.groupKey)}\n onClick={() => setActiveGroup(group.groupKey)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \" || event.key === \"ArrowRight\") {\n event.preventDefault();\n setActiveGroup(group.groupKey);\n }\n }}\n className={cn(\n \"flex cursor-pointer items-center justify-between gap-2 rounded-md px-1.5 py-0.5 text-sm\",\n \"hover:bg-accent/50 focus-visible:bg-accent/50 focus-visible:outline-none\",\n isActive && \"bg-accent/60\",\n )}\n >\n <span className=\"min-w-0 flex-1 truncate\">{group.label ?? group.groupKey}</span>\n {selected > 0 && (\n <span className=\"rounded-full bg-primary/15 px-1.5 text-[10px] font-medium text-primary\">\n {selected}/{group.options.length}\n </span>\n )}\n <Icon icon={UiChevronRight} className=\"shrink-0 text-muted-foreground\" />\n </div>\n );\n })}\n {groups.length === 0 && (\n <div className=\"px-2 py-3 text-sm text-muted-foreground\">No groups</div>\n )}\n </div>\n </div>\n\n {activeGroupData && (\n <div\n onMouseEnter={() => setActiveGroup(activeGroupData.groupKey)}\n className=\"ml-1.5 min-w-[16rem] max-w-[20rem] rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-sm shadow-black/5\"\n >\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <div className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {activeGroupData.label ?? activeGroupData.groupKey}\n </div>\n <button\n type=\"button\"\n className=\"text-[10px] text-primary disabled:text-muted-foreground\"\n onClick={() => clearGroup(activeGroupData.groupKey)}\n disabled={(selectedByGroup[activeGroupData.groupKey] ?? 0) === 0}\n >\n Clear\n </button>\n </div>\n\n <div className=\"max-h-72 space-y-0.5 overflow-auto\">\n {activeGroupData.options.map((option) => {\n const mode = draft[option.value] ?? \"neutral\";\n const title = option.title ?? multiSelectOptionText(option);\n return (\n <div\n key={option.value}\n role=\"button\"\n tabIndex={0}\n data-filter-option={option.value}\n className=\"rounded-md px-1.5 py-0.5 hover:bg-accent/50 focus-visible:bg-accent/50 focus-visible:outline-none\"\n onClick={() =>\n setDraft(updateMultiFilterValue(draft, option.value, nextFilterMode(mode)))\n }\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n setDraft(updateMultiFilterValue(draft, option.value, nextFilterMode(mode)));\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n setActiveGroup(null);\n }\n }}\n >\n <FilterPill\n className=\"w-full justify-between\"\n label={renderNestedOptionLabel(option, activeGroupData.groupKey)}\n mode={mode}\n title={title}\n togglePosition=\"right\"\n onModeChange={(next) =>\n setDraft(updateMultiFilterValue(draft, option.value, next))\n }\n />\n </div>\n );\n })}\n {activeGroupData.options.length === 0 && (\n <div className=\"px-2 py-3 text-sm text-muted-foreground\">No values</div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction NestedMultiFilterField({\n filter,\n grow,\n}: {\n filter: FilterBarNestedMultiFilter;\n grow: boolean;\n}) {\n const [open, setOpen] = useState(false);\n const [activeGroup, setActiveGroup] = useState<string | null>(null);\n const [draft, setDraft] = useDebouncedMultiDraft(filter.value, filter.onChange);\n\n const popup = useAnchoredPopup(open, (next) => {\n setOpen(next);\n if (!next) setActiveGroup(null);\n });\n\n const summary = summarizeMultiFilter(filter.label, draft);\n const groups = filter.groups;\n const activeGroupData = useMemo(\n () => groups.find((group) => group.groupKey === activeGroup) ?? null,\n [groups, activeGroup],\n );\n\n // Selected count per group, used in the outer list.\n const selectedByGroup = useMemo(() => {\n const counts: Record<string, number> = {};\n for (const group of groups) {\n let n = 0;\n for (const option of group.options) {\n if (draft[option.value]) n += 1;\n }\n counts[group.groupKey] = n;\n }\n return counts;\n }, [groups, draft]);\n\n // Groups with active selections sort to the top so the user always sees\n // what's filtered without scrolling. Within each partition, the original\n // order from the consumer is preserved.\n const sortedGroups = useMemo(() => {\n const selected: typeof groups = [];\n const rest: typeof groups = [];\n for (const group of groups) {\n if ((selectedByGroup[group.groupKey] ?? 0) > 0) selected.push(group);\n else rest.push(group);\n }\n return [...selected, ...rest];\n }, [groups, selectedByGroup]);\n\n const clearGroup = (groupKey: string) => {\n const group = groups.find((g) => g.groupKey === groupKey);\n if (!group) return;\n const next = { ...draft };\n for (const option of group.options) {\n delete next[option.value];\n }\n setDraft(next);\n };\n\n return (\n <div\n title={filter.description}\n className={cn(\n \"inline-flex min-w-0\",\n grow ? \"min-w-[8rem] max-w-[12rem] flex-1\" : \"shrink-0\",\n filter.disabled && \"opacity-60\",\n filter.className,\n )}\n >\n <Button\n ref={popup.refs.setReference as Ref<HTMLButtonElement>}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label={`${filter.label} filter`}\n disabled={filter.disabled}\n className={cn(\n \"min-w-0 gap-2 font-normal\",\n grow ? \"w-full max-w-[12rem] justify-between\" : \"w-auto max-w-[8.5rem] px-2.5\",\n summary === filter.label && \"text-muted-foreground\",\n )}\n {...popup.getReferenceProps()}\n >\n <span className=\"truncate\">{summary}</span>\n <Icon icon={open ? UiChevronUp : UiChevronDown} className=\"text-muted-foreground\" />\n </Button>\n\n {open && (\n <FloatingPortal>\n <FloatingFocusManager context={popup.context} modal={false}>\n <div\n ref={popup.refs.setFloating}\n role=\"dialog\"\n aria-label={filter.label}\n style={{ ...popup.floatingStyles, zIndex: popup.floatingZ }}\n className=\"flex\"\n {...popup.getFloatingProps()}\n >\n <div className=\"min-w-[14rem] max-w-[16rem] rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-lg shadow-black/5\">\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <div className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {filter.label}\n </div>\n <button\n type=\"button\"\n className=\"text-[10px] text-primary disabled:text-muted-foreground\"\n onClick={() => setDraft({})}\n disabled={Object.keys(draft).length === 0}\n >\n Clear all\n </button>\n </div>\n\n <div className=\"max-h-72 space-y-0.5 overflow-auto\">\n {sortedGroups.map((group) => {\n const selected = selectedByGroup[group.groupKey] ?? 0;\n const isActive = group.groupKey === activeGroup;\n return (\n <div\n key={group.groupKey}\n role=\"button\"\n tabIndex={0}\n onMouseEnter={() => setActiveGroup(group.groupKey)}\n onFocus={() => setActiveGroup(group.groupKey)}\n onClick={() => setActiveGroup(group.groupKey)}\n onKeyDown={(event) => {\n if (\n event.key === \"Enter\" ||\n event.key === \" \" ||\n event.key === \"ArrowRight\"\n ) {\n event.preventDefault();\n setActiveGroup(group.groupKey);\n }\n }}\n className={cn(\n \"flex cursor-pointer items-center justify-between gap-2 rounded-md px-1.5 py-0.5 text-sm\",\n \"hover:bg-accent/50 focus-visible:bg-accent/50 focus-visible:outline-none\",\n isActive && \"bg-accent/60\",\n )}\n >\n <span className=\"min-w-0 flex-1 truncate\">{group.label ?? group.groupKey}</span>\n {selected > 0 && (\n <span className=\"rounded-full bg-primary/15 px-1.5 text-[10px] font-medium text-primary\">\n {selected}/{group.options.length}\n </span>\n )}\n <Icon icon={UiChevronRight} className=\"shrink-0 text-muted-foreground\" />\n </div>\n );\n })}\n {groups.length === 0 && (\n <div className=\"px-2 py-3 text-sm text-muted-foreground\">No groups</div>\n )}\n </div>\n </div>\n\n {activeGroupData && (\n <div\n onMouseEnter={() => setActiveGroup(activeGroupData.groupKey)}\n className=\"ml-1.5 min-w-[16rem] max-w-[20rem] rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-lg shadow-black/5\"\n >\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <div className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {activeGroupData.label ?? activeGroupData.groupKey}\n </div>\n <button\n type=\"button\"\n className=\"text-[10px] text-primary disabled:text-muted-foreground\"\n onClick={() => clearGroup(activeGroupData.groupKey)}\n disabled={(selectedByGroup[activeGroupData.groupKey] ?? 0) === 0}\n >\n Clear\n </button>\n </div>\n\n <div className=\"max-h-72 space-y-0.5 overflow-auto\">\n {activeGroupData.options.map((option) => {\n const mode = draft[option.value] ?? \"neutral\";\n const title = option.title ?? multiSelectOptionText(option);\n return (\n <div\n key={option.value}\n role=\"button\"\n tabIndex={0}\n data-filter-option={option.value}\n className=\"rounded-md px-1.5 py-0.5 hover:bg-accent/50 focus-visible:bg-accent/50 focus-visible:outline-none\"\n onClick={() =>\n setDraft(updateMultiFilterValue(draft, option.value, nextFilterMode(mode)))\n }\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n setDraft(\n updateMultiFilterValue(draft, option.value, nextFilterMode(mode)),\n );\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n setActiveGroup(null);\n }\n }}\n >\n <FilterPill\n className=\"w-full justify-between\"\n // Show only the value side here — the key is already\n // implied by the parent group panel.\n label={renderNestedOptionLabel(option, activeGroupData.groupKey)}\n mode={mode}\n title={title}\n togglePosition=\"right\"\n onModeChange={(next) =>\n setDraft(updateMultiFilterValue(draft, option.value, next))\n }\n />\n </div>\n );\n })}\n {activeGroupData.options.length === 0 && (\n <div className=\"px-2 py-3 text-sm text-muted-foreground\">No values</div>\n )}\n </div>\n </div>\n )}\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </div>\n );\n}\n\nfunction renderNestedOptionLabel(option: MultiSelectOption, groupKey: string): ReactNode {\n // If the option label already strips the key prefix, use it. Otherwise\n // strip it here so the inner panel doesn't repeat the key on every row.\n if (typeof option.label === \"string\") {\n const prefix = `${groupKey}=`;\n if (option.label.startsWith(prefix)) return option.label.slice(prefix.length);\n return option.label;\n }\n return option.label ?? option.value;\n}\n\nfunction SelectMultiFilterField({\n filter,\n grow,\n}: {\n filter: FilterBarSelectMultiFilter;\n grow: boolean;\n}) {\n return (\n <label\n title={filter.description}\n className={cn(\n \"flex h-8 items-center gap-2 rounded-md border border-input bg-muted/30 pl-2 pr-1 text-xs\",\n grow ? \"min-w-[12rem] max-w-[18rem] flex-1\" : \"min-w-[11rem] max-w-[15rem] shrink-0\",\n filter.disabled && \"opacity-60\",\n filter.className,\n )}\n >\n <span className=\"whitespace-nowrap font-medium uppercase tracking-wide text-muted-foreground\">\n {filter.label}\n </span>\n <MultiSelect\n options={filter.options}\n value={filter.value}\n onChange={filter.onChange}\n ariaLabel={`${filter.label} filter`}\n {...(filter.placeholder !== undefined ? { placeholder: filter.placeholder } : {})}\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n triggerClassName=\"h-6 min-w-0 border-0 bg-transparent px-1 text-xs shadow-none focus-visible:ring-0\"\n menuClassName=\"left-auto right-0\"\n />\n </label>\n );\n}\n\nfunction RangeControlButton({\n kind,\n label,\n from = \"\",\n to = \"\",\n onApply,\n presets,\n timeEnabled,\n timeZone,\n timeZones,\n fromPlaceholder,\n toPlaceholder,\n emptyLabel,\n className,\n disabled,\n}: FilterBarRangeProps & { kind: \"date\" | \"time\"; label: string }) {\n return (\n <TimeRange\n kind={kind}\n label={label}\n from={from}\n to={to}\n onApply={onApply}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(presets ? { presets } : {})}\n {...(timeEnabled !== undefined ? { timeEnabled } : {})}\n {...(timeZone ? { timeZone } : {})}\n {...(timeZones ? { timeZones } : {})}\n {...(fromPlaceholder ? { fromPlaceholder } : {})}\n {...(toPlaceholder ? { toPlaceholder } : {})}\n {...(emptyLabel ? { emptyLabel } : {})}\n {...(className ? { className } : {})}\n />\n );\n}\n\n// Anchored popup wired through floating-ui's portal so it escapes `overflow`\n// clipping from scroll-container ancestors (e.g. AppLayout's `<main>`), matching\n// Combobox/DropdownMenu. `flip`/`shift` keep it on-screen at viewport edges.\nfunction useAnchoredPopup(\n open: boolean,\n onOpenChange: (open: boolean) => void,\n placement: Placement = \"bottom-start\",\n) {\n const floatingZ = useFloatingZIndex();\n const { refs, floatingStyles, context } = useFloating({\n open,\n onOpenChange,\n placement,\n whileElementsMounted: autoUpdate,\n middleware: [offset(6), flip({ padding: 8 }), shift({ padding: 8 })],\n });\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useClick(context),\n useDismiss(context, { escapeKey: false }),\n useRole(context, { role: \"dialog\" }),\n ]);\n useEscapeLayer(open, () => {\n onOpenChange(false);\n if (refs.domReference.current instanceof HTMLElement) refs.domReference.current.focus();\n });\n return { refs, floatingStyles, context, floatingZ, getReferenceProps, getFloatingProps };\n}\n\nfunction useMediaQuery(query: string) {\n const [matches, setMatches] = useState(() => {\n if (typeof window === \"undefined\" || !window.matchMedia) return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === \"undefined\" || !window.matchMedia) return;\n const media = window.matchMedia(query);\n const onChange = () => setMatches(media.matches);\n onChange();\n media.addEventListener?.(\"change\", onChange);\n return () => media.removeEventListener?.(\"change\", onChange);\n }, [query]);\n\n return matches;\n}\n\nfunction useDebouncedTextDraft(value: string, onChange: (value: string) => void) {\n const { autoSubmit } = useContext(FilterBarContext);\n const [draft, setDraft] = useState(value);\n const latestOnChange = useRef(onChange);\n\n useEffect(() => {\n latestOnChange.current = onChange;\n }, [onChange]);\n\n useEffect(() => {\n setDraft(value);\n }, [value]);\n\n useEffect(() => {\n if (draft === value) return;\n\n if (!autoSubmit) {\n latestOnChange.current(draft);\n return;\n }\n\n const timeoutId = window.setTimeout(() => {\n latestOnChange.current(draft);\n }, FILTER_INPUT_DEBOUNCE_MS);\n\n return () => window.clearTimeout(timeoutId);\n }, [autoSubmit, draft, value]);\n\n return [draft, setDraft] as const;\n}\n\nfunction useDebouncedNumberDraft(\n value: FilterBarNumberValue,\n onChange: (value: FilterBarNumberValue) => void,\n) {\n const { autoSubmit } = useContext(FilterBarContext);\n const [draft, setDraft] = useState(value);\n const latestOnChange = useRef(onChange);\n\n useEffect(() => {\n latestOnChange.current = onChange;\n }, [onChange]);\n\n useEffect(() => {\n setDraft(value);\n }, [value.max, value.min]);\n\n useEffect(() => {\n if (sameNumberFilterValue(draft, value)) return;\n\n if (!autoSubmit) {\n latestOnChange.current(draft);\n return;\n }\n\n const timeoutId = window.setTimeout(() => {\n latestOnChange.current(draft);\n }, FILTER_INPUT_DEBOUNCE_MS);\n\n return () => window.clearTimeout(timeoutId);\n }, [autoSubmit, draft, value]);\n\n return [draft, setDraft] as const;\n}\n\nfunction sameNumberFilterValue(left: FilterBarNumberValue, right: FilterBarNumberValue) {\n return (left.min ?? \"\") === (right.min ?? \"\") && (left.max ?? \"\") === (right.max ?? \"\");\n}\n\ntype NumberFilterBounds = {\n min: number;\n max: number;\n step: number;\n};\n\ntype NumberFilterSource = \"min-input\" | \"max-input\";\n\nfunction resolveNumberFilterBounds(filter: FilterBarNumberFilter): NumberFilterBounds {\n const parsedMin = parseFilterNumber(filter.value.min);\n const parsedMax = parseFilterNumber(filter.value.max);\n const fallbackMin = parsedMin ?? 0;\n const fallbackMax = parsedMax ?? Math.max(fallbackMin + 100, 100);\n const min = filter.domainMin ?? Math.min(fallbackMin, fallbackMax);\n const max = filter.domainMax ?? Math.max(fallbackMax, min + 100);\n const step = filter.step && filter.step > 0 ? filter.step : 1;\n\n return {\n min,\n max: max <= min ? min + step : max,\n step,\n };\n}\n\nfunction summarizeNumberFilter(\n filter: FilterBarNumberFilter,\n bounds: NumberFilterBounds,\n value: FilterBarNumberValue,\n) {\n const parsedMin = parseFilterNumber(value.min);\n const parsedMax = parseFilterNumber(value.max);\n const hasMin = String(value.min ?? \"\").trim() !== \"\";\n const hasMax = String(value.max ?? \"\").trim() !== \"\";\n\n if (!hasMin && !hasMax) {\n return filter.label;\n }\n\n const minLabel =\n parsedMin == null\n ? formatNumberValue(bounds.min, filter)\n : formatNumberValue(parsedMin, filter);\n const maxLabel =\n parsedMax == null\n ? formatNumberValue(bounds.max, filter)\n : formatNumberValue(parsedMax, filter);\n\n if (hasMin && hasMax) {\n if (minLabel === maxLabel) {\n return `${filter.label} ${minLabel}`;\n }\n return `${filter.label} ${minLabel}-${maxLabel}`;\n }\n\n if (hasMin) {\n return `${filter.label} >=${minLabel}`;\n }\n\n return `${filter.label} <=${maxLabel}`;\n}\n\nfunction normalizeNumberFilterValue(\n nextValue: FilterBarNumberValue,\n source: NumberFilterSource,\n): FilterBarNumberValue {\n let min = nextValue.min ?? \"\";\n let max = nextValue.max ?? \"\";\n\n const parsedMin = parseFilterNumber(min);\n const parsedMax = parseFilterNumber(max);\n\n if (parsedMin != null && parsedMax != null && parsedMin > parsedMax) {\n if (source.startsWith(\"min\")) {\n max = min;\n } else {\n min = max;\n }\n }\n\n return { min, max };\n}\n\nfunction numberFilterValueFromSlider(\n value: [number, number],\n bounds: NumberFilterBounds,\n): FilterBarNumberValue {\n const [min, max] = value;\n return {\n min: min <= bounds.min ? \"\" : formatRawNumber(clampNumber(min, bounds.min, bounds.max)),\n max: max >= bounds.max ? \"\" : formatRawNumber(clampNumber(max, bounds.min, bounds.max)),\n };\n}\n\nfunction parseFilterNumber(value: string | undefined) {\n if (!value?.trim()) return null;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction clampNumber(value: number, min: number, max: number) {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction formatNumberValue(value: number, filter: FilterBarNumberFilter) {\n if (filter.formatValue) {\n return filter.formatValue(value);\n }\n\n return formatRawNumber(value);\n}\n\nfunction formatRawNumber(value: number) {\n return Number.isInteger(value) ? String(value) : String(Number(value.toFixed(6)));\n}\n\ntype FilterBarValue =\n | string\n | string[]\n | boolean\n // A tri-state filter's \"off\" position is undefined, so it is a real staged\n // value rather than the absence of one.\n | undefined\n | FilterBarNumberValue\n | Record<string, FilterBarMultiFilterMode>;\n\nfunction createFilterValueMap(filters: FilterBarFilter[]) {\n return Object.fromEntries(filters.map((filter) => [filter.key, filterBarFilterValue(filter)]));\n}\n\n// A date range applies the moment it is applied in its own panel, exactly as\n// the bar's trailing range control does, so it has no value to stage and\n// nothing here ever writes one back to it.\nfunction isStageableFilter(\n filter: FilterBarFilter,\n): filter is Exclude<FilterBarFilter, FilterBarDateRangeFilter> {\n return filter.kind !== \"date-range\";\n}\n\nfunction filterBarFilterValue(filter: FilterBarFilter): FilterBarValue {\n if (!isStageableFilter(filter)) return undefined;\n return filter.value;\n}\n\nfunction filterWithStagedValue(\n filter: FilterBarFilter,\n value: FilterBarValue,\n onChange: (value: FilterBarValue) => void,\n): FilterBarFilter {\n if (!isStageableFilter(filter)) return filter;\n if (filter.kind === \"text\") {\n return {\n ...filter,\n value: String(value ?? \"\"),\n onChange: (next: string) => onChange(next),\n };\n }\n if (filter.kind === \"lookup\") {\n return {\n ...filter,\n value: String(value ?? \"\"),\n onChange: (next: string) => onChange(next),\n };\n }\n if (filter.kind === \"workload\") {\n return {\n ...filter,\n value: String(value ?? \"\"),\n onChange: (next: string) => onChange(next),\n };\n }\n if (filter.kind === \"lookup-multi\") {\n return {\n ...filter,\n value: Array.isArray(value) ? value.map(String) : [],\n onChange: (next: string[]) => onChange(next),\n };\n }\n if (filter.kind === \"multi\") {\n return {\n ...filter,\n value: isMultiFilterValue(value) ? value : {},\n onChange: (next: Record<string, FilterBarMultiFilterMode>) => onChange(next),\n };\n }\n if (filter.kind === \"nested-multi\") {\n return {\n ...filter,\n value: isMultiFilterValue(value) ? value : {},\n onChange: (next: Record<string, FilterBarMultiFilterMode>) => onChange(next),\n };\n }\n if (filter.kind === \"select-multi\") {\n return {\n ...filter,\n value: Array.isArray(value) ? value.map(String) : [],\n onChange: (next: string[]) => onChange(next),\n };\n }\n if (filter.kind === \"number\") {\n return {\n ...filter,\n value: isNumberFilterValue(value) ? value : {},\n onChange: (next: FilterBarNumberValue) => onChange(next),\n };\n }\n if (filter.kind === \"enum\") {\n return {\n ...filter,\n value: String(value ?? \"\"),\n onChange: (next: string) => onChange(next),\n };\n }\n if (filter.kind === \"tristate\") {\n return {\n ...filter,\n value: value === undefined ? undefined : Boolean(value),\n onChange: (next: TriState) => onChange(next),\n };\n }\n return {\n ...filter,\n value: Boolean(value),\n onChange: (next: boolean) => onChange(next),\n };\n}\n\nfunction applyStagedFilterValues(\n filters: FilterBarFilter[],\n stagedValues: Record<string, FilterBarValue>,\n) {\n for (const filter of filters) {\n if (!isStageableFilter(filter)) continue;\n // Key presence, not `??`: undefined is a tri-state filter's \"off\" value and\n // must still be applied over a live true/false.\n const next = Object.hasOwn(stagedValues, filter.key)\n ? stagedValues[filter.key]\n : filterBarFilterValue(filter);\n if (sameFilterBarValue(filterBarFilterValue(filter), next)) continue;\n applyFilterBarValue(filter, next);\n }\n}\n\nfunction applyFilterBarValue(filter: FilterBarFilter, value: FilterBarValue) {\n if (!isStageableFilter(filter)) return;\n if (\n filter.kind === \"text\" ||\n filter.kind === \"lookup\" ||\n filter.kind === \"workload\" ||\n filter.kind === \"enum\"\n ) {\n filter.onChange(String(value ?? \"\"));\n return;\n }\n if (filter.kind === \"lookup-multi\" || filter.kind === \"select-multi\") {\n filter.onChange(Array.isArray(value) ? value.map(String) : []);\n return;\n }\n if (filter.kind === \"number\") {\n filter.onChange(isNumberFilterValue(value) ? value : {});\n return;\n }\n if (filter.kind === \"boolean\") {\n filter.onChange(Boolean(value));\n return;\n }\n if (filter.kind === \"tristate\") {\n filter.onChange(value === undefined ? undefined : Boolean(value));\n return;\n }\n filter.onChange(isMultiFilterValue(value) ? value : {});\n}\n\nfunction sameFilterBarValue(left: FilterBarValue, right: FilterBarValue) {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction isNumberFilterValue(value: FilterBarValue): value is FilterBarNumberValue {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isMultiFilterValue(\n value: FilterBarValue,\n): value is Record<string, FilterBarMultiFilterMode> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction calculateVisibleFilterCount(widths: number[], availableWidth: number) {\n if (widths.length === 0) return 0;\n\n let used = 0;\n let count = 0;\n for (const width of widths) {\n const nextUsed = used + (count > 0 ? FILTER_BAR_GAP_PX : 0) + width;\n if (nextUsed > availableWidth) break;\n used = nextUsed;\n count += 1;\n }\n return count;\n}\n\nfunction sumFilterWidths(widths: number[]) {\n if (widths.length === 0) return 0;\n return (\n widths.reduce((total, width) => total + width, 0) + (widths.length - 1) * FILTER_BAR_GAP_PX\n );\n}\n\nfunction estimateFilterWidth(filter: FilterBarFilter) {\n if (filter.kind === \"boolean\") return Math.max(88, filter.label.length * 8 + 40);\n // Multi renders as a combobox field (min-w-[11rem] ≈ 176px); nested keeps\n // its compact trigger button.\n if (filter.kind === \"multi\") return 176;\n if (filter.kind === \"nested-multi\") return 136;\n if (filter.kind === \"workload\") return 224;\n if (filter.kind === \"number\") return 152;\n return Math.max(144, filter.label.length * 8 + 96);\n}\n"],"names":["_a"],"mappings":"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"}