@servicetitan/anvil2 3.15.1 → 3.16.0

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 (79) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/{Announcement-Cnz80WGx.js → Announcement-PfnsVVz1.js} +5 -2
  3. package/dist/Announcement-PfnsVVz1.js.map +1 -0
  4. package/dist/Announcement.js +1 -1
  5. package/dist/{DataTable-DkEpJ_Op.js → DataTable-DIXP9-Bx.js} +4 -4
  6. package/dist/{DataTable-DkEpJ_Op.js.map → DataTable-DIXP9-Bx.js.map} +1 -1
  7. package/dist/{Dialog-B9llUKJz.js → Dialog-_tHqOsbr.js} +2 -2
  8. package/dist/{Dialog-B9llUKJz.js.map → Dialog-_tHqOsbr.js.map} +1 -1
  9. package/dist/Dialog.js +1 -1
  10. package/dist/{Drawer-Bjd2XLUX.js → Drawer-D-ThWNp0.js} +2 -2
  11. package/dist/{Drawer-Bjd2XLUX.js.map → Drawer-D-ThWNp0.js.map} +1 -1
  12. package/dist/Drawer.js +1 -1
  13. package/dist/{FilterBar-ecqJDraA.js → FilterBar-jFn8O7v7.js} +17 -15
  14. package/dist/FilterBar-jFn8O7v7.js.map +1 -0
  15. package/dist/FilterBar.js +1 -1
  16. package/dist/MultiSelectField.js +1 -1
  17. package/dist/{MultiSelectFieldSync-DpPO0cya.js → MultiSelectFieldSync-DuImKXuj.js} +3 -3
  18. package/dist/{MultiSelectFieldSync-DpPO0cya.js.map → MultiSelectFieldSync-DuImKXuj.js.map} +1 -1
  19. package/dist/MultiSelectMenu.js +1 -1
  20. package/dist/{MultiSelectMenuSync-BN_3moW_.js → MultiSelectMenuSync-BhNXsgAN.js} +3 -3
  21. package/dist/{MultiSelectMenuSync-BN_3moW_.js.map → MultiSelectMenuSync-BhNXsgAN.js.map} +1 -1
  22. package/dist/{Page-IZ4p51iJ.js → Page-ZSHNJs7z.js} +2 -2
  23. package/dist/{Page-IZ4p51iJ.js.map → Page-ZSHNJs7z.js.map} +1 -1
  24. package/dist/Page.js +1 -1
  25. package/dist/{Pagination-Su4VBAhT.js → Pagination-Bsl99RRI.js} +4 -2
  26. package/dist/{Pagination-Su4VBAhT.js.map → Pagination-Bsl99RRI.js.map} +1 -1
  27. package/dist/Pagination.js +1 -1
  28. package/dist/{ProgressBar-TQ0fPmn9.js → ProgressBar-zPKYv4Il.js} +10 -13
  29. package/dist/ProgressBar-zPKYv4Il.js.map +1 -0
  30. package/dist/ProgressBar.css +10 -14
  31. package/dist/ProgressBar.js +1 -1
  32. package/dist/{RichTextEditor-BpzUo8dB.js → RichTextEditor-DcAVqd2d.js} +18821 -20223
  33. package/dist/RichTextEditor-DcAVqd2d.js.map +1 -0
  34. package/dist/RichTextEditor.js +1 -1
  35. package/dist/{SavedFiltersButton-D9GJbJQu.js → SavedFiltersButton-Bl8mr-LB.js} +4 -4
  36. package/dist/{SavedFiltersButton-D9GJbJQu.js.map → SavedFiltersButton-Bl8mr-LB.js.map} +1 -1
  37. package/dist/SavedFiltersButton.js +1 -1
  38. package/dist/SelectField.js +1 -1
  39. package/dist/{SelectFieldSync-BN2ebLWT.js → SelectFieldSync-SS7FELT3.js} +3 -3
  40. package/dist/{SelectFieldSync-BN2ebLWT.js.map → SelectFieldSync-SS7FELT3.js.map} +1 -1
  41. package/dist/SelectMenu.js +1 -1
  42. package/dist/{SelectMenuSync-DuPf8KCc.js → SelectMenuSync-CPpE6vUG.js} +3 -3
  43. package/dist/{SelectMenuSync-DuPf8KCc.js.map → SelectMenuSync-CPpE6vUG.js.map} +1 -1
  44. package/dist/{SelectOptions-BK7kNjYM.js → SelectOptions-BDAu_9dv.js} +2 -2
  45. package/dist/{SelectOptions-BK7kNjYM.js.map → SelectOptions-BDAu_9dv.js.map} +1 -1
  46. package/dist/Table.js +1 -1
  47. package/dist/Toast.js +2 -2
  48. package/dist/{Toaster-BryQmKe1.js → Toaster-SqkX0Kes.js} +2 -2
  49. package/dist/{Toaster-BryQmKe1.js.map → Toaster-SqkX0Kes.js.map} +1 -1
  50. package/dist/{Toaster-BtP_HezK.js → Toaster-dVGVVcat.js} +2 -2
  51. package/dist/{Toaster-BtP_HezK.js.map → Toaster-dVGVVcat.js.map} +1 -1
  52. package/dist/assets/icons/material.ts +184 -184
  53. package/dist/assets/icons/st.ts +9 -9
  54. package/dist/beta.js +9 -9
  55. package/dist/{bulkActionTypes-D5y3Acn1.js → bulkActionTypes-SukoplGV.js} +2 -2
  56. package/dist/{bulkActionTypes-D5y3Acn1.js.map → bulkActionTypes-SukoplGV.js.map} +1 -1
  57. package/dist/downshift.esm-U4VMqrF-.js.map +1 -1
  58. package/dist/extends-Bg2s_OKl.js.map +1 -1
  59. package/dist/{filter-state-Do862BNr.js → filter-state-hDtCUggM.js} +6 -6
  60. package/dist/{filter-state-Do862BNr.js.map → filter-state-hDtCUggM.js.map} +1 -1
  61. package/dist/{index-Dt0zG4YB.js → index-C2dOrf4N.js} +1549 -1582
  62. package/dist/index-C2dOrf4N.js.map +1 -0
  63. package/dist/index.js +11 -11
  64. package/dist/src/components/Pagination/Pagination.d.ts +28 -0
  65. package/dist/src/internal/components/LoadMoreSlot.d.ts +13 -0
  66. package/dist/src/internal/hooks/useAutoLoadMore.d.ts +40 -0
  67. package/dist/src/internal/hooks/useFocusReturnOnUnmount.d.ts +10 -0
  68. package/dist/{syncFilterUtils-ClEj4Oeg.js → syncFilterUtils-SMop8ckR.js} +177 -62
  69. package/dist/syncFilterUtils-SMop8ckR.js.map +1 -0
  70. package/package.json +21 -21
  71. package/dist/Announcement-Cnz80WGx.js.map +0 -1
  72. package/dist/FilterBar-ecqJDraA.js.map +0 -1
  73. package/dist/ProgressBar-TQ0fPmn9.js.map +0 -1
  74. package/dist/RichTextEditor-BpzUo8dB.js.map +0 -1
  75. package/dist/check_circle-C3DDoVXp.js +0 -8
  76. package/dist/check_circle-C3DDoVXp.js.map +0 -1
  77. package/dist/index-Dt0zG4YB.js.map +0 -1
  78. package/dist/src/internal/components/InView.d.ts +0 -14
  79. package/dist/syncFilterUtils-ClEj4Oeg.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"filter-state-Do862BNr.js","sources":["../src/beta/components/FilterBar/FilterItemWrapper.tsx","../src/beta/components/FilterBar/parts.ts","../src/beta/components/FilterBar/FilterTriggerButton.tsx","../src/beta/components/FilterBar/internal/adapters/asyncMultiSelect.tsx","../src/beta/components/FilterBar/internal/adapters/asyncSelect.tsx","../src/beta/components/FilterBar/internal/adapters/asyncTree.tsx","../src/beta/components/FilterBar/FilterToggleButton.tsx","../src/beta/components/FilterBar/internal/adapters/boolean.tsx","../src/beta/components/FilterBar/internal/FilterGroupContext.tsx","../src/beta/components/FilterBar/internal/utils/value-compare.ts","../src/beta/components/FilterBar/FilterPopoverButton.tsx","../src/beta/components/FilterBar/internal/adapters/custom.tsx","../src/beta/components/FilterBar/internal/utils/dateConstraints.ts","../src/beta/components/FilterBar/FilterDateSingle.tsx","../src/beta/components/FilterBar/internal/adapters/date.tsx","../src/beta/components/FilterBar/FilterDateRange.tsx","../src/beta/components/FilterBar/internal/utils/dateListLibraryOptions.ts","../src/beta/components/FilterBar/FilterDateList.tsx","../src/beta/components/FilterBar/internal/adapters/dateList.tsx","../src/beta/components/FilterBar/internal/adapters/dateRange.tsx","../src/beta/components/FilterBar/internal/adapters/multiSelect.tsx","../src/beta/components/FilterBar/FilterNumericRange.tsx","../src/beta/components/FilterBar/internal/adapters/numericRange.tsx","../src/beta/components/FilterBar/FilterSearchField.tsx","../src/beta/components/FilterBar/internal/adapters/search.tsx","../src/beta/components/FilterBar/internal/adapters/singleSelect.tsx","../src/beta/components/FilterBar/FilterTextInput.tsx","../src/beta/components/FilterBar/internal/adapters/textInput.tsx","../src/beta/components/FilterBar/internal/adapters/tree.tsx","../src/beta/components/FilterBar/internal/adapters/index.ts","../src/beta/components/FilterBar/internal/utils/filter-state.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport {\n ToolbarItemWrapper,\n type ToolbarItemWrapperProps,\n} from \"../Toolbar/internal/ToolbarItemWrapper\";\nimport type { ToolbarButtonProps } from \"../Toolbar/ToolbarButton\";\n\ntype FilterItemWrapperProps = {\n children: React.ReactNode;\n};\n\n/**\n * FilterItemWrapper wraps a filter control in ToolbarItemWrapper so it\n * registers with the surrounding toolbar context for keyboard navigation.\n */\nexport const FilterItemWrapper = ({ children }: FilterItemWrapperProps) => {\n const props: ToolbarItemWrapperProps = useMemo(\n () => ({\n item: {\n itemType: \"button\",\n itemProps: {\n children: null,\n \"aria-hidden\": true,\n } as ToolbarButtonProps,\n },\n children,\n }),\n [children],\n );\n\n return <ToolbarItemWrapper {...props} />;\n};\n","import { COMMON_PART } from \"../../../internal/constants/anvParts\";\n\n/**\n * `data-anv-part` names for FilterBar's interactive sub-elements.\n *\n * Scope a query by the consumer's `data-cy` on the FilterBar root, or by a\n * filter's `data-id` for a specific filter:\n * `[data-cy=\"x\"] [data-id=\"amount\"] [data-anv-part=\"trigger\"]`.\n *\n * Common roles are re-exported from `COMMON_PART` so their string values stay\n * identical across the suite; FilterBar-specific roles are defined here.\n */\nexport const PARTS = {\n // Common roles (shared values)\n trigger: COMMON_PART.trigger,\n input: COMMON_PART.input,\n dialog: COMMON_PART.dialog,\n applyButton: COMMON_PART.applyButton,\n cancelButton: COMMON_PART.cancelButton,\n /** Clears text in a search/text field — not the whole bar. */\n clearButton: COMMON_PART.clearButton,\n drawer: COMMON_PART.drawer,\n dateInput: COMMON_PART.dateInput,\n dateCalendar: COMMON_PART.dateCalendar,\n\n // FilterBar-specific roles\n /** Trigger that opens the filter drawer (collapsed mode). */\n drawerTrigger: \"drawer-trigger\",\n /** Lower-bound input of a numeric range filter. */\n minInput: \"min-input\",\n /** Upper-bound input of a numeric range filter. */\n maxInput: \"max-input\",\n /**\n * Clears all active filters (inline \"Clear Filters\" and drawer\n * \"Clear All Filters\"). Distinct from `clear-button` on search fields.\n */\n clearFiltersButton: \"clear-filters-button\",\n /**\n * Numeric count badge on a filter trigger / drawer trigger (not a\n * selected-value chip).\n */\n countBadge: \"count-badge\",\n} as const;\n","import { forwardRef, type ReactNode } from \"react\";\nimport ArrowDropDown from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport Event from \"@servicetitan/hammer-icon/mdi/round/event.svg\";\nimport cx from \"classnames\";\nimport { Button, type ButtonProps } from \"../../../components/Button\";\nimport { useToolbarSize } from \"../Toolbar/internal/ToolbarContext\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\n\nimport styles from \"./FilterBar.module.scss\";\n\n/**\n * Props that drive the visual identity of a filter's bar trigger — shared by\n * any popover/menu primitive that wants the standard filter-trigger styling.\n *\n * All other Button props (ref, onClick, onKeyDown, aria-*, data-state, …) are\n * accepted via spread, which lets this component slot underneath any menu\n * primitive's trigger render-prop (`SelectMenu`, `MultiSelectMenu`,\n * `FilterDateSingle` / `FilterDateRange`'s popover shell) or, for `custom`,\n * `FilterPopoverButton`.\n */\nexport type FilterTriggerButtonProps = Omit<\n ButtonProps,\n \"children\" | \"icon\"\n> & {\n /** Filter id — emitted as `data-id` for test selectors and analytics. */\n filterId: string;\n /** Visible trigger text; adapters typically pass `formatLabel(filter)`. */\n label: ReactNode;\n /** Whether the filter has a committed selection (drives the selected-state class). */\n isSelected: boolean;\n /**\n * Trigger icon.\n * - `calendar` → leading Event icon (used by date-shaped filters)\n * - `dropdown` → trailing chevron (default)\n * @default \"dropdown\"\n */\n icon?: \"calendar\" | \"dropdown\";\n};\n\n/**\n * FilterTriggerButton is the styled trigger primitive used by every popover-\n * or menu-based filter type. It owns the visual identity (ghost appearance,\n * toolbar-sized, selected-state, dropdown/calendar icon, data-id) and nothing\n * else — open state and popover wiring belong to whatever component composes\n * it (a menu's trigger render-prop, the date popover shells, or\n * `FilterPopoverButton` for `custom`).\n */\nexport const FilterTriggerButton = forwardRef<\n HTMLButtonElement,\n FilterTriggerButtonProps\n>(function FilterTriggerButton(\n { filterId, label, isSelected, icon = \"dropdown\", className, ...rest },\n ref,\n) {\n const toolbarSize = useToolbarSize();\n\n const iconOptions =\n icon === \"calendar\" ? { before: Event } : { after: ArrowDropDown };\n\n const buttonClass = cx(\n styles[\"filter-button-trigger\"],\n {\n [styles[\"filter-button-trigger--selected\"]]: isSelected,\n },\n className,\n );\n\n return (\n <Button\n ref={ref}\n appearance=\"ghost\"\n size={toolbarSize}\n icon={iconOptions}\n data-id={filterId}\n data-anv=\"toolbar-button\"\n className={buttonClass}\n {...rest}\n {...{ [ANV_PART_ATTR]: PARTS.trigger }}\n >\n {label}\n </Button>\n );\n});\n","import Chip from \"../../../../../components/Chip\";\nimport { ANV_PART_ATTR } from \"../../../../../internal/constants/anvParts\";\nimport { FilterItemWrapper } from \"../../FilterItemWrapper\";\nimport { FilterTriggerButton } from \"../../FilterTriggerButton\";\nimport { PARTS } from \"../../parts\";\nimport { MultiSelectField } from \"../../../../../components/MultiSelectField\";\nimport {\n MultiSelectMenu,\n type MultiSelectMenuOption,\n type MultiSelectMenuProps,\n} from \"../../../../../components/MultiSelectMenu\";\nimport type { AsyncMultiSelectFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\ntype Value = MultiSelectMenuOption[];\n\nconst isSelected = (filter: AsyncMultiSelectFilter) =>\n !!filter.selectedOptions && filter.selectedOptions.length > 0;\n\nconst formatLabel = (filter: AsyncMultiSelectFilter) => {\n const count = filter.selectedOptions?.length ?? 0;\n if (count === 0) return filter.label;\n const countLabel = count.toString();\n return (\n <>\n {filter.label}\n <Chip\n label={countLabel}\n size=\"small\"\n aria-label={`${countLabel} selected items`}\n {...{ [ANV_PART_ATTR]: PARTS.countBadge }}\n />\n </>\n );\n};\n\nconst passThroughMenuProps = (\n filter: AsyncMultiSelectFilter,\n): MultiSelectMenuProps => {\n const {\n id: _id,\n label: _label,\n type: _type,\n selectedOptions: _selectedOptions,\n drawerOnly: _drawerOnly,\n ...rest\n } = filter;\n return rest as unknown as MultiSelectMenuProps;\n};\n\nexport const asyncMultiSelectAdapter: FilterTypeAdapter<\n AsyncMultiSelectFilter,\n Value\n> = {\n getValue: (filter) => filter.selectedOptions ?? [],\n setValue: (filter, value) => ({ ...filter, selectedOptions: value }),\n reset: (filter) => ({ ...filter, selectedOptions: [] }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n selectedOptions: existingFilter.selectedOptions,\n }),\n // No items array to rebind; MultiSelectMenu matches committed options by id.\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n renderBarControl: ({ filter, updateFilter, controlledFiltering }) => (\n <FilterItemWrapper key={filter.id}>\n <MultiSelectMenu\n {...passThroughMenuProps(filter)}\n id={filter.id}\n label={filter.label}\n value={filter.selectedOptions ?? []}\n onSelectedOptionsChange={(options) =>\n updateFilter(filter.id, options, true)\n }\n confirmation={controlledFiltering}\n // Clear commits immediately even while confirmation is buffering picks.\n clear={{\n onClick: () => updateFilter(filter.id, [], true),\n }}\n trigger={(triggerProps) => (\n <FilterTriggerButton\n {...triggerProps}\n filterId={filter.id}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n />\n )}\n />\n </FilterItemWrapper>\n ),\n\n renderDrawer: ({ originalFilter, draftFilter, onDraftChange }) => (\n <MultiSelectField\n {...passThroughMenuProps(originalFilter)}\n key={draftFilter.id}\n label={originalFilter.label}\n value={draftFilter.selectedOptions ?? []}\n onSelectedOptionsChange={(options) =>\n onDraftChange(draftFilter.id, options)\n }\n />\n ),\n\n formatLabel,\n isSelected,\n};\n","import { FilterItemWrapper } from \"../../FilterItemWrapper\";\nimport { FilterTriggerButton } from \"../../FilterTriggerButton\";\nimport { SelectField } from \"../../../../../components/SelectField\";\nimport {\n SelectMenu,\n type SelectMenuOption,\n type SelectMenuProps,\n} from \"../../../../../components/SelectMenu\";\nimport type { AsyncSelectFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\ntype Value = SelectMenuOption | undefined;\n\nconst formatLabel = (filter: AsyncSelectFilter) => {\n if (filter.selectedOption) {\n return `${filter.label}: ${filter.selectedOption.label}`;\n }\n return filter.label;\n};\n\nconst isSelected = (filter: AsyncSelectFilter) =>\n filter.selectedOption !== undefined;\n\nconst passThroughMenuProps = (filter: AsyncSelectFilter): SelectMenuProps => {\n const {\n id: _id,\n label: _label,\n type: _type,\n selectedOption: _selectedOption,\n drawerOnly: _drawerOnly,\n ...rest\n } = filter;\n return rest as unknown as SelectMenuProps;\n};\n\nexport const asyncSelectAdapter: FilterTypeAdapter<AsyncSelectFilter, Value> = {\n getValue: (filter) => filter.selectedOption,\n setValue: (filter, value) => ({ ...filter, selectedOption: value }),\n reset: (filter) => ({ ...filter, selectedOption: undefined }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n selectedOption: existingFilter.selectedOption,\n }),\n // No items array to rebind; SelectMenu matches the committed option by id.\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n // SelectMenu has no confirmation/Apply path; selection and Clear always\n // submit, including when FilterBar `controlledFiltering` is on.\n renderBarControl: ({ filter, updateFilter }) => (\n <FilterItemWrapper key={filter.id}>\n <SelectMenu\n {...passThroughMenuProps(filter)}\n id={filter.id}\n label={filter.label}\n value={filter.selectedOption ?? null}\n onSelectedOptionChange={(option) =>\n updateFilter(filter.id, option ?? undefined, true)\n }\n clear={{\n onClick: () => updateFilter(filter.id, undefined, true),\n }}\n trigger={(triggerProps) => (\n <FilterTriggerButton\n {...triggerProps}\n filterId={filter.id}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n />\n )}\n />\n </FilterItemWrapper>\n ),\n\n renderDrawer: ({ originalFilter, draftFilter, onDraftChange }) => (\n <SelectField\n {...passThroughMenuProps(originalFilter)}\n key={draftFilter.id}\n label={originalFilter.label}\n value={draftFilter.selectedOption ?? null}\n onSelectedOptionChange={(option) =>\n onDraftChange(draftFilter.id, option ?? undefined)\n }\n />\n ),\n\n formatLabel,\n isSelected,\n};\n","import Chip from \"../../../../../components/Chip\";\nimport { ANV_PART_ATTR } from \"../../../../../internal/constants/anvParts\";\nimport { FilterItemWrapper } from \"../../FilterItemWrapper\";\nimport { FilterTriggerButton } from \"../../FilterTriggerButton\";\nimport { PARTS } from \"../../parts\";\nimport { TreeSelectField } from \"../../../TreeSelectField\";\nimport {\n TreeSelectMenu,\n type TreeSelectMenuProps,\n type TreeSelectMenuValue,\n} from \"../../../TreeSelectMenu\";\nimport type { AsyncTreeFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\ntype Value = TreeSelectMenuValue[];\n\nconst isSelected = (filter: AsyncTreeFilter) =>\n !!filter.selectedNodes && filter.selectedNodes.length > 0;\n\nconst formatLabel = (filter: AsyncTreeFilter) => {\n const count = filter.selectedNodes?.length ?? 0;\n if (count === 0) return filter.label;\n const countLabel = count.toString();\n return (\n <>\n {filter.label}\n <Chip\n label={countLabel}\n size=\"small\"\n aria-label={`${countLabel} selected items`}\n {...{ [ANV_PART_ATTR]: PARTS.countBadge }}\n />\n </>\n );\n};\n\nconst passThroughMenuProps = (filter: AsyncTreeFilter): TreeSelectMenuProps => {\n const {\n id: _id,\n label: _label,\n type: _type,\n selectedNodes: _selectedNodes,\n drawerOnly: _drawerOnly,\n ...rest\n } = filter;\n return rest as unknown as TreeSelectMenuProps;\n};\n\nexport const asyncTreeAdapter: FilterTypeAdapter<AsyncTreeFilter, Value> = {\n getValue: (filter) => filter.selectedNodes ?? [],\n setValue: (filter, value) => ({ ...filter, selectedNodes: value }),\n reset: (filter) => ({ ...filter, selectedNodes: [] }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n selectedNodes: existingFilter.selectedNodes,\n }),\n // No static options tree to rebind; selected nodes already carry id/label.\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n renderBarControl: ({ filter, updateFilter, controlledFiltering }) => (\n <FilterItemWrapper key={filter.id}>\n <TreeSelectMenu\n {...passThroughMenuProps(filter)}\n id={filter.id}\n label={filter.label}\n value={filter.selectedNodes ?? []}\n onSelectedOptionsChange={(nodes) =>\n updateFilter(filter.id, nodes, true)\n }\n confirmation={controlledFiltering}\n // Clear commits immediately even while confirmation is buffering picks.\n clear={{\n onClick: () => updateFilter(filter.id, [], true),\n disabled: !isSelected(filter),\n }}\n trigger={(triggerProps) => (\n <FilterTriggerButton\n {...triggerProps}\n filterId={filter.id}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n />\n )}\n />\n </FilterItemWrapper>\n ),\n\n renderDrawer: ({ originalFilter, draftFilter, onDraftChange }) => (\n <TreeSelectField\n {...passThroughMenuProps(originalFilter)}\n key={draftFilter.id}\n label={originalFilter.label}\n value={draftFilter.selectedNodes ?? []}\n onSelectedOptionsChange={(nodes) => onDraftChange(draftFilter.id, nodes)}\n />\n ),\n\n formatLabel,\n isSelected,\n};\n","import {\n ToolbarButtonToggle,\n type ToolbarButtonToggleProps,\n} from \"../Toolbar/ToolbarButtonToggle\";\nimport { FilterItemWrapper } from \"./FilterItemWrapper\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\n\nimport styles from \"./FilterBar.module.scss\";\n\n/**\n * @extends Omit<ToolbarButtonToggleProps, \"checked\">\n */\nexport type FilterToggleButtonProps = Omit<\n ToolbarButtonToggleProps,\n \"checked\"\n> & {\n /** Filter id forwarded to the toolbar toggle. */\n id: string;\n /** On-state for a boolean filter. */\n checked: boolean;\n children: React.ReactNode;\n};\n\n/** Boolean-filter trigger wrapped for FilterBar keyboard navigation. */\nexport const FilterToggleButton = ({\n id,\n checked,\n children,\n ...props\n}: FilterToggleButtonProps) => {\n return (\n <FilterItemWrapper>\n <ToolbarButtonToggle\n id={id}\n checked={checked}\n isFilter\n {...props}\n className={styles[\"filter-button-trigger\"]}\n data-anv=\"toolbar-boolean-filter\"\n {...{ [ANV_PART_ATTR]: PARTS.trigger }}\n >\n {children}\n </ToolbarButtonToggle>\n </FilterItemWrapper>\n );\n};\n","import { Checkbox } from \"../../../../../components/Checkbox\";\nimport { ANV_PART_ATTR } from \"../../../../../internal/constants/anvParts\";\nimport { FilterToggleButton } from \"../../FilterToggleButton\";\nimport { PARTS } from \"../../parts\";\nimport type { BooleanFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\nexport const booleanAdapter: FilterTypeAdapter<BooleanFilter, boolean> = {\n getValue: (filter) => filter.checked,\n setValue: (filter, value) => ({ ...filter, checked: value }),\n reset: (filter) => ({ ...filter, checked: false }),\n isActive: (filter) => filter.checked,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n checked: existingFilter.checked,\n }),\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n // No popover or Apply step; boolean changes always submit immediately.\n renderBarControl: ({ filter, updateFilter }) => (\n <FilterToggleButton\n key={filter.id}\n id={filter.id}\n checked={filter.checked}\n onClick={() => updateFilter(filter.id, !filter.checked, true)}\n >\n {filter.label}\n </FilterToggleButton>\n ),\n renderDrawer: ({ draftFilter, onDraftChange }) => (\n <Checkbox\n key={draftFilter.id}\n data-id={draftFilter.id}\n label={draftFilter.label}\n checked={draftFilter.checked}\n onChange={(e) =>\n onDraftChange(draftFilter.id, e?.target.checked ?? false)\n }\n {...{ [ANV_PART_ATTR]: PARTS.trigger }}\n />\n ),\n formatLabel: (filter) => filter.label,\n isSelected: (filter) => filter.checked,\n};\n","import { createContext, type RefObject } from \"react\";\nimport type { FilterBarProps } from \"../FilterBar\";\nimport type { Filter, FilterValue } from \"./types\";\n\n/**\n * FilterBar props plus state shared with the drawer and adapters.\n *\n * @extends FilterBarProps\n */\ntype FilterGroupContextProps = FilterBarProps & {\n /** FilterBar root used for toolbar keyboard navigation. */\n filterGroupRef: RefObject<HTMLDivElement>;\n filters: Filter[];\n /** Updates one filter and optionally submits the full list. */\n updateFilter: (filterId: string, value: FilterValue, submit: boolean) => void;\n /** Filters configured as drawer-only and never rendered inline. */\n drawerOnlyFilters: Filter[];\n /** Whether the container is wide enough to render filters inline. */\n showInlineFilters: boolean;\n};\n\n/** Shared FilterBar state for the drawer and adapters. */\nexport const FilterGroupContext = createContext<FilterGroupContextProps>({\n filterGroupRef: { current: null },\n filters: [],\n updateFilter: () => {},\n onFilterChange: () => {},\n controlledFiltering: false,\n associatedContent: \"\",\n showInlineFilters: false,\n drawerOnlyFilters: [],\n});\n","/**\n * Determines if two filter values are different.\n * For arrays (multiSelect), compares by id set (order-insensitive, avoids JSON serialization).\n * For singleSelect, compares by id if both are objects with id.\n * For dateList selections (objects with both id and value), compares id AND value\n * so re-picking the same library option with a different date still counts as a change.\n *\n * Intentionally adapter-free — kept here (rather than in filter-state.ts) so that\n * FilterPopoverButton can import it without pulling the adapter registry into\n * the import graph. filter-state.ts depends on the adapter registry; the registry\n * depends on FilterPopoverButton; FilterPopoverButton would otherwise depend on\n * filter-state — closing a runtime-evaluated cycle.\n */\nexport const hasChangedFilter = <T>(a: T, b: T): boolean => {\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return true;\n if (a.length === 0) return false;\n const aItems = a as Array<{ id?: unknown }>;\n const bItems = b as Array<{ id?: unknown }>;\n if (aItems[0] && \"id\" in aItems[0]) {\n const aIds = new Set(aItems.map((item) => item.id));\n return (bItems as Array<{ id: unknown }>).some(\n (item) => !aIds.has(item.id),\n );\n }\n return JSON.stringify(a) !== JSON.stringify(b);\n }\n if (\n a &&\n b &&\n typeof a === \"object\" &&\n typeof b === \"object\" &&\n \"id\" in a &&\n \"id\" in b\n ) {\n if (a.id !== b.id) return true;\n if (\"value\" in a && \"value\" in b) {\n return JSON.stringify(a.value) !== JSON.stringify(b.value);\n }\n return false;\n }\n return a !== b;\n};\n","import {\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport type { Filter } from \"./internal/types\";\nimport { FilterGroupContext } from \"./internal/FilterGroupContext\";\nimport { hasChangedFilter } from \"./internal/utils/value-compare\";\nimport { FilterItemWrapper } from \"./FilterItemWrapper\";\nimport { FilterTriggerButton } from \"./FilterTriggerButton\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport {\n MenuFooter,\n type MenuFooterClearConfig,\n} from \"../../../internal/components/MenuFooter/MenuFooter\";\nimport {\n ANV_PART_ATTR,\n COMMON_PART,\n} from \"../../../internal/constants/anvParts\";\n\n/**\n * Render-prop ctx passed to FilterPopoverButton's children. The `custom`\n * adapter (and any consumer using a `custom` filter) uses this to receive the\n * draft (or committed) value and an `onChange` for its rendered body.\n *\n * When commitOnSelect is false (the default), `value` is the in-progress draft\n * and `onChange` updates it; the user must click Apply for it to commit.\n *\n * When commitOnSelect is true, `value` is the filter's currently-committed\n * value and `onChange` commits immediately (and closes the popover).\n */\nexport type FilterPopoverButtonRenderCtx<V = unknown> = {\n value: V;\n onChange: (value: V) => void;\n};\n\n/**\n * Base props shared by both commit modes. `commitOnSelect` is left out so each\n * variant can refine it as a literal; that's what lets `initialValue` be required\n * for the draft branch and absent for the commit-on-select branch.\n */\ntype FilterPopoverButtonBaseProps<V> = {\n /** The filter being edited. Used for id and dispatching commits. */\n filter: Filter;\n /** Trigger button label. Adapters typically pass adapter.formatLabel(filter). */\n label: ReactNode;\n /** Whether the filter currently has a non-default value (drives selected styling). */\n isSelected: boolean;\n /**\n * The filter's currently-committed value. Used to seed the draft on open and\n * to detect parent-provided changes mid-open. Adapters typically pass\n * adapter.getValue(filter).\n */\n committedValue: V;\n /** Body content as a render-prop. Receives draft (or live) value + onChange. */\n children: (ctx: FilterPopoverButtonRenderCtx<V>) => ReactNode;\n};\n\n/**\n * Draft-mode props: requires `initialValue` so each consumer declares what\n * \"empty draft\" means for its V (e.g. an array-shaped custom filter passes\n * `[]`, a nullable scalar passes `null`). Eliminates the `[] as unknown as V`\n * cast and forces non-nullable V consumers to opt in explicitly.\n */\ntype DraftModeProps<V> = FilterPopoverButtonBaseProps<V> & {\n commitOnSelect?: false;\n /**\n * Initial draft value used until the popover opens and the draft is seeded\n * from `committedValue`. Each adapter owns the empty-state for its V.\n */\n initialValue: V;\n /**\n * If true, in uncontrolled mode the popover stays open after a body change\n * instead of closing — for multi-selection workflows.\n * @default false\n */\n keepOpenOnUncontrolledChange?: boolean;\n /**\n * Configures a \"Clear\" button in the popover footer. Presence enables it.\n * Clear commits immediately regardless of `controlledFiltering`.\n */\n clear?: MenuFooterClearConfig;\n};\n\n/**\n * Commit-on-select props: no draft state exists, so `initialValue` and\n * `keepOpenOnUncontrolledChange` don't apply.\n */\ntype CommitOnSelectProps<V> = FilterPopoverButtonBaseProps<V> & {\n commitOnSelect: true;\n};\n\ntype FilterPopoverButtonProps<V> = DraftModeProps<V> | CommitOnSelectProps<V>;\n\n/**\n * FilterPopoverButton is the popover-based trigger primitive used by the\n * `custom` filter adapter (and anything else that needs to render an\n * adapter-agnostic popover body with draft / Apply-Cancel semantics).\n *\n * Other filter types (`singleSelect`, `multiSelect`, `asyncSelect`,\n * `asyncMultiSelect`, `date`, `dateRange`, `dateList`) compose menu primitives\n * (`SelectMenu`, `MultiSelectMenu`) or their own popover shells directly and\n * do not go through this component.\n */\nexport const FilterPopoverButton = <V,>(props: FilterPopoverButtonProps<V>) => {\n const { filter, label, isSelected, committedValue, children } = props;\n const commitOnSelect = props.commitOnSelect === true;\n const initialValue = commitOnSelect ? undefined : props.initialValue;\n const keepOpenOnUncontrolledChange =\n !commitOnSelect && (props.keepOpenOnUncontrolledChange ?? false);\n const clear = commitOnSelect ? undefined : props.clear;\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n const popoverId = useId();\n const [isOpen, setIsOpen] = useState(false);\n const { updateFilter, controlledFiltering } = useContext(FilterGroupContext);\n\n const [draftValue, setDraftValue] = useState<V | undefined>(initialValue);\n\n // Ref to track draftValue without causing handleDraftChange to recreate.\n const draftValueRef = useRef<V | undefined>(draftValue);\n\n useEffect(() => {\n draftValueRef.current = draftValue;\n }, [draftValue]);\n\n const prevIsOpenRef = useRef(isOpen);\n const prevCommittedValueRef = useRef<V>(committedValue);\n\n // Seed/re-sync draft when the popover opens or committedValue changes\n // mid-open. Skipped entirely in commit-on-select mode.\n useEffect(() => {\n if (commitOnSelect) return;\n\n const justOpened = isOpen && !prevIsOpenRef.current;\n prevIsOpenRef.current = isOpen;\n\n if (isOpen) {\n const shouldSync =\n justOpened || prevCommittedValueRef.current !== committedValue;\n\n if (shouldSync) {\n setDraftValue(committedValue);\n }\n\n prevCommittedValueRef.current = committedValue;\n }\n }, [isOpen, committedValue, commitOnSelect]);\n\n const closeAndRestoreFocus = useCallback(() => {\n setIsOpen(false);\n triggerRef.current?.focus();\n }, []);\n\n const handleDraftChange = useCallback(\n (value: V) => {\n if (commitOnSelect) {\n if (hasChangedFilter(value, committedValue)) {\n updateFilter(filter.id, value, true);\n }\n closeAndRestoreFocus();\n return;\n }\n\n if (!hasChangedFilter(value, draftValueRef.current)) return;\n\n // Sync ref immediately to guard against duplicate calls (e.g. from\n // ListView re-renders).\n draftValueRef.current = value;\n setDraftValue(value);\n\n if (!controlledFiltering) {\n updateFilter(filter.id, value, true);\n if (!keepOpenOnUncontrolledChange) {\n closeAndRestoreFocus();\n }\n }\n },\n [\n commitOnSelect,\n committedValue,\n controlledFiltering,\n filter.id,\n keepOpenOnUncontrolledChange,\n updateFilter,\n closeAndRestoreFocus,\n ],\n );\n\n const handleApply = useCallback(() => {\n if (hasChangedFilter(draftValue, committedValue)) {\n updateFilter(filter.id, draftValue, true);\n }\n closeAndRestoreFocus();\n }, [\n draftValue,\n committedValue,\n filter.id,\n updateFilter,\n closeAndRestoreFocus,\n ]);\n\n const handleCancel = useCallback(() => {\n // Uncontrolled edits already committed on change; Cancel only closes.\n if (!controlledFiltering) {\n closeAndRestoreFocus();\n return;\n }\n setDraftValue(committedValue);\n closeAndRestoreFocus();\n }, [controlledFiltering, committedValue, closeAndRestoreFocus]);\n\n // OptionsPopover invokes this on outside-press, focus-out, and Escape.\n const handlePopoverClose = useCallback(() => {\n if (commitOnSelect) {\n setIsOpen(false);\n return;\n }\n if (controlledFiltering) {\n setDraftValue(committedValue);\n setIsOpen(false);\n } else if (keepOpenOnUncontrolledChange) {\n // Uncontrolled + already-committed-on-change; just close.\n setIsOpen(false);\n } else {\n if (hasChangedFilter(draftValueRef.current, committedValue)) {\n updateFilter(filter.id, draftValueRef.current as V, true);\n }\n setIsOpen(false);\n }\n }, [\n commitOnSelect,\n controlledFiltering,\n keepOpenOnUncontrolledChange,\n committedValue,\n filter.id,\n updateFilter,\n ]);\n\n // In draft mode `draftValue` is always defined (seeded from `initialValue`,\n // then `committedValue` on open). The `as V` is only to widen the\n // `V | undefined` state type used by the commit-on-select branch.\n const bodyValue: V = commitOnSelect ? committedValue : (draftValue as V);\n\n const showConfirmationFooter = controlledFiltering && !commitOnSelect;\n const showFooter = Boolean(clear) || showConfirmationFooter;\n\n // Enter submits in controlled mode (form-style apply). In uncontrolled mode\n // the body change already commits immediately, so Enter is a no-op there.\n // Bind the listener to the popover element instead of a wrapper div so we\n // don't introduce a non-interactive element with key handlers.\n useEffect(() => {\n if (!isOpen || !showConfirmationFooter) return;\n const popoverEl = document.getElementById(popoverId);\n if (!popoverEl) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key !== \"Enter\" || e.defaultPrevented) return;\n // Clear and Cancel activate themselves on Enter. Applying here would\n // commit the draft first, and moving focus to the trigger can drop\n // the button's own click.\n const part = (e.target as Element | null)\n ?.closest(\"button\")\n ?.getAttribute(ANV_PART_ATTR);\n if (\n part === COMMON_PART.clearButton ||\n part === COMMON_PART.cancelButton\n ) {\n return;\n }\n handleApply();\n };\n popoverEl.addEventListener(\"keydown\", handler);\n return () => popoverEl.removeEventListener(\"keydown\", handler);\n }, [isOpen, showConfirmationFooter, popoverId, handleApply]);\n\n return (\n <FilterItemWrapper>\n <FilterTriggerButton\n ref={triggerRef}\n filterId={filter.id}\n label={label}\n isSelected={isSelected}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={popoverId}\n onClick={() => setIsOpen((prev) => !prev)}\n onKeyDown={(e) => {\n // When focus is still on the trigger after opening the popover (no\n // body element auto-focuses), Escape needs to close from here —\n // OptionsPopover only listens on its own subtree.\n if (e.key === \"Escape\" && isOpen) {\n e.preventDefault();\n handlePopoverClose();\n }\n }}\n />\n <OptionsPopover\n id={popoverId}\n referenceElement={triggerRef}\n open={isOpen}\n onClose={handlePopoverClose}\n footer={\n showFooter ? (\n <MenuFooter\n clear={\n clear\n ? {\n ...clear,\n onClick: () => {\n clear.onClick();\n // Close directly. handlePopoverClose does not restore\n // focus, and in controlled mode it writes the previous\n // committed value back into the draft.\n closeAndRestoreFocus();\n },\n }\n : undefined\n }\n confirmation={\n showConfirmationFooter\n ? {\n onApply: handleApply,\n onCancel: handleCancel,\n }\n : undefined\n }\n />\n ) : undefined\n }\n >\n {children({ value: bodyValue, onChange: handleDraftChange })}\n </OptionsPopover>\n </FilterItemWrapper>\n );\n};\n","import Chip from \"../../../../../components/Chip\";\nimport { ANV_PART_ATTR } from \"../../../../../internal/constants/anvParts\";\nimport { FilterPopoverButton } from \"../../FilterPopoverButton\";\nimport { PARTS } from \"../../parts\";\nimport type { CustomFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\nconst formatLabel = (filter: CustomFilter<unknown>) => {\n if (filter.labelChipCount) {\n return (\n <>\n {filter.label}\n <Chip\n label={filter.labelChipCount.toString()}\n size=\"small\"\n aria-label={`${filter.labelChipCount} selected items`}\n {...{ [ANV_PART_ATTR]: PARTS.countBadge }}\n />\n </>\n );\n }\n return filter.label;\n};\n\nexport const customAdapter: FilterTypeAdapter<\n CustomFilter<unknown>,\n unknown\n> = {\n getValue: (filter) => filter.value,\n setValue: (filter, value) => ({ ...filter, value }),\n reset: (filter) => ({ ...filter, value: undefined }),\n isActive: (filter) => filter.value !== undefined,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n value: existingFilter.value,\n }),\n cloneWithItemRefs: (filter) => {\n const { value } = filter;\n // A shared object/array value would mutate the bar's committed custom\n // value as the user edits the drawer draft.\n if (value === undefined) return { ...filter, value: undefined };\n if (Array.isArray(value)) return { ...filter, value: [...value] };\n if (typeof value === \"object\" && value !== null) {\n return { ...filter, value: { ...value } };\n }\n return { ...filter, value };\n },\n\n renderBarControl: ({ filter }) => (\n <FilterPopoverButton\n key={filter.id}\n filter={filter}\n label={formatLabel(filter)}\n isSelected={filter.value !== undefined}\n committedValue={filter.value}\n initialValue={undefined}\n >\n {({ value, onChange }) =>\n // Narrows the CustomFilter union (`buttonRender` is `never` when\n // drawerOnly).\n filter.drawerOnly ? null : filter.buttonRender({ value, onChange })\n }\n </FilterPopoverButton>\n ),\n renderDrawer: ({ originalFilter, draftFilter, onDraftChange }) => (\n <div key={draftFilter.id}>\n {originalFilter.drawerRender?.({\n value: draftFilter.value,\n onChange: (value) => onDraftChange(draftFilter.id, value),\n })}\n </div>\n ),\n formatLabel,\n isSelected: (filter) => filter.value !== undefined,\n};\n","import { DateTime, type WeekdayNumbers } from \"luxon\";\nimport type { DateMode } from \"../../../../../components/DateFieldSingle/types\";\nimport { DateModeToFormatMap } from \"../../../../../components/DateFieldSingle/internal/constants\";\nimport type {\n DateFilter,\n DateFilterErrorReason,\n DateRangeFilter,\n DateRangeFilterErrorContext,\n} from \"../types\";\n\ntype DateConstraints = Pick<DateFilter, \"minDate\" | \"maxDate\" | \"unavailable\">;\n\ntype RangeValue = { startDate: string | null; endDate: string | null } | null;\n\nconst toDate = (value?: string | null): DateTime | null => {\n if (!value) return null;\n const date = DateTime.fromISO(value, { zone: \"utc\" }).startOf(\"day\");\n return date.isValid ? date : null;\n};\n\n/**\n * First constraint a single ISO date violates, or `null` when the value is\n * empty, unparseable, or within all constraints. Checks unavailable, min,\n * then max.\n */\nexport const getDateConstraintReason = (\n value: string | null | undefined,\n { minDate, maxDate, unavailable }: DateConstraints,\n): DateFilterErrorReason | null => {\n const date = toDate(value);\n if (!date) return null;\n\n const unavailableDates = unavailable?.dates\n ?.map(toDate)\n .filter((d): d is DateTime => d !== null);\n if (unavailableDates?.some((d) => d.equals(date))) return \"unavailable\";\n if (unavailable?.daysOfWeek?.includes(date.weekday as WeekdayNumbers)) {\n return \"unavailable\";\n }\n\n const min = toDate(minDate);\n const max = toDate(maxDate);\n if (min && date < min) return \"minDate\";\n if (max && date > max) return \"maxDate\";\n return null;\n};\n\nconst formatDate = (\n value: string | undefined,\n mode: DateMode = \"mm/dd/yyyy\",\n) => {\n const date = toDate(value);\n return date ? date.toFormat(DateModeToFormatMap[mode]) : \"\";\n};\n\nconst defaultReasonMessage = (\n reason: DateFilterErrorReason,\n { minDate, maxDate }: { minDate?: string; maxDate?: string },\n mode?: DateMode,\n): string => {\n switch (reason) {\n case \"minDate\":\n return `Date must be on or after ${formatDate(minDate, mode)}.`;\n case \"maxDate\":\n return `Date must be on or before ${formatDate(maxDate, mode)}.`;\n case \"unavailable\":\n return \"This date is unavailable.\";\n }\n};\n\n/**\n * Resolves the error message (if any) for a single-date filter's current\n * value. Returns the consumer's `getErrorMessage` result when provided,\n * otherwise a default message. `undefined` means the value is valid.\n */\nexport const resolveDateFilterError = (\n filter: DateFilter,\n value: string | null | undefined,\n): string | undefined => {\n const reason = getDateConstraintReason(value, filter);\n if (!reason || !value) return undefined;\n return (\n filter.getErrorMessage?.({ reason, value }) ??\n defaultReasonMessage(\n reason,\n { minDate: filter.minDate, maxDate: filter.maxDate },\n filter.mode,\n )\n );\n};\n\ntype DateRangeViolation =\n | { reason: DateFilterErrorReason; field: \"start\" | \"end\"; value: string }\n | { reason: \"startAfterEnd\" };\n\n/**\n * Returns the first constraint a range violates, or `null` when both endpoints\n * are within all constraints (or empty/unparseable). Checks the start endpoint,\n * then the end endpoint, then start-after-end ordering.\n */\nexport const getDateRangeConstraintViolation = (\n value: RangeValue,\n constraints: DateConstraints,\n): DateRangeViolation | null => {\n const start = value?.startDate ?? null;\n const end = value?.endDate ?? null;\n\n const startReason = getDateConstraintReason(start, constraints);\n if (startReason && start) {\n return { reason: startReason, field: \"start\", value: start };\n }\n const endReason = getDateConstraintReason(end, constraints);\n if (endReason && end) {\n return { reason: endReason, field: \"end\", value: end };\n }\n\n const startDate = toDate(start);\n const endDate = toDate(end);\n if (startDate && endDate && startDate > endDate) {\n return { reason: \"startAfterEnd\" };\n }\n return null;\n};\n\n/**\n * Resolves the error message (if any) for a date-range filter's current value.\n * Returns the consumer's `getErrorMessage` result when provided, otherwise a\n * default message. `undefined` means the range is valid.\n */\nexport const resolveDateRangeFilterError = (\n filter: DateRangeFilter,\n value: RangeValue,\n): string | undefined => {\n const violation = getDateRangeConstraintViolation(value, filter);\n if (!violation) return undefined;\n\n const context: DateRangeFilterErrorContext =\n violation.reason === \"startAfterEnd\"\n ? { reason: \"startAfterEnd\" }\n : {\n reason: violation.reason,\n field: violation.field,\n value: violation.value,\n };\n\n const custom = filter.getErrorMessage?.(context);\n if (custom) return custom;\n\n if (violation.reason === \"startAfterEnd\") {\n return \"Start date must be on or before the end date.\";\n }\n return defaultReasonMessage(\n violation.reason,\n { minDate: filter.minDate, maxDate: filter.maxDate },\n filter.mode,\n );\n};\n","import { useCallback, useId, useRef, useState } from \"react\";\nimport type { DateFilter } from \"./internal/types\";\nimport Flex from \"../../../components/Flex\";\nimport {\n MaskedDateInput,\n type MaskedDateInputRef,\n} from \"../../../components/DateFieldSingle/internal/MaskedDateInput\";\nimport type { DateFieldSingleChange } from \"../../../components/DateFieldSingle\";\nimport { useDateFieldSingleConversion } from \"../../../components/DateFieldSingle/internal/useDateFieldSingleConversion\";\nimport { useDateFieldSingleState } from \"../../../components/DateFieldSingle/internal/useDateFieldSingleState\";\nimport { DateFieldSingleCalendar } from \"../../../components/DateFieldSingle/internal/DateFieldSingleCalendar\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { MenuFooter } from \"../../../internal/components/MenuFooter/MenuFooter\";\nimport { useConfirmationDraft } from \"../../../internal/hooks/useConfirmationDraft\";\nimport { FilterItemWrapper } from \"./FilterItemWrapper\";\nimport { FilterTriggerButton } from \"./FilterTriggerButton\";\nimport { hasChangedFilter } from \"./internal/utils/value-compare\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\nimport { resolveDateFilterError } from \"./internal/utils/dateConstraints\";\n\ntype Value = string | null;\n\ntype InlineProps = {\n /** Renders only the picker body with parent-owned draft state. */\n variant: \"inline\";\n /** Date filter configuration, including format and constraints. */\n filter: DateFilter;\n /** In-progress value shown by the picker. */\n draftValue: Value;\n /** Updates the parent-owned draft. */\n onDraftChange: (value: Value) => void;\n};\n\ntype PopoverProps = {\n /** Renders the toolbar trigger and popover. Defaults to `popover`. */\n variant?: \"popover\";\n /** Date filter configuration, including format and constraints. */\n filter: DateFilter;\n /** Value used to seed or resync the popover draft. */\n committedValue: Value;\n /** Receives the value when the popover commits. */\n onCommit: (value: Value) => void;\n /** Adds Apply/Cancel when true; otherwise picker changes commit immediately. */\n controlledFiltering: boolean;\n /** Content shown in the filter trigger. */\n label: React.ReactNode;\n /** Applies selected styling to the trigger. */\n isSelected: boolean;\n /**\n * Configures a \"Clear\" button in the popover footer. Presence enables it.\n * Clear commits immediately regardless of `controlledFiltering`.\n */\n clear?: {\n onClick: () => void;\n label?: string;\n disabled?: boolean;\n };\n};\n\n/**\n * `popover` owns the trigger and commit flow; `inline` renders the picker body\n * with parent-owned draft state.\n */\nexport type FilterDateSingleProps = InlineProps | PopoverProps;\n\n/** Single-date FilterBar picker with popover and inline variants. */\nexport const FilterDateSingle = (props: FilterDateSingleProps) => {\n if (props.variant === \"inline\") {\n return (\n <Body\n filter={props.filter}\n value={props.draftValue}\n onChange={props.onDraftChange}\n />\n );\n }\n return <PopoverShell {...props} />;\n};\n\ntype BodyProps = {\n filter: DateFilter;\n value: Value;\n onChange: (value: Value) => void;\n};\n\nconst Body = ({\n filter,\n value: draftValue,\n onChange: onDraftChange,\n}: BodyProps) => {\n const maskedDateInputRef = useRef<MaskedDateInputRef>(null);\n\n const handleChange = (change: DateFieldSingleChange) => {\n onDraftChange(change.date);\n };\n\n const { value, minDate, maxDate, unavailable, onChange } =\n useDateFieldSingleConversion({\n value: draftValue,\n onChange: handleChange,\n minDate: filter.minDate,\n maxDate: filter.maxDate,\n unavailable: filter.unavailable,\n });\n\n const { handleInputChange, handleCalendarSelection } =\n useDateFieldSingleState({\n valueProp: value,\n onChange: (change) => onChange({ ...change, isDateValid: true }),\n });\n\n const error = resolveDateFilterError(filter, draftValue);\n\n return (\n <Flex gap={4} direction=\"column\">\n <MaskedDateInput\n mode={filter.mode}\n ref={maskedDateInputRef}\n onChange={handleInputChange}\n lastValidDate={value ?? null}\n autoComplete=\"off\"\n error={error}\n {...{ [ANV_PART_ATTR]: PARTS.dateInput }}\n />\n\n <DateFieldSingleCalendar\n value={value ?? null}\n onSelection={handleCalendarSelection}\n minDate={minDate}\n maxDate={maxDate}\n unavailable={unavailable}\n {...{ [ANV_PART_ATTR]: PARTS.dateCalendar }}\n />\n </Flex>\n );\n};\n\nconst PopoverShell = ({\n filter,\n committedValue,\n onCommit,\n controlledFiltering,\n label,\n isSelected,\n clear,\n}: PopoverProps) => {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const popoverId = useId();\n const [isOpen, setIsOpen] = useState(false);\n\n const isEqual = useCallback(\n (a: Value, b: Value) => !hasChangedFilter(a, b),\n [],\n );\n\n const { displayValue, setDraft, apply, cancel } = useConfirmationDraft<Value>(\n {\n value: committedValue,\n onCommit,\n isOpen,\n enabled: controlledFiltering,\n isEqual,\n },\n );\n\n const handleClose = useCallback(() => {\n if (controlledFiltering) {\n cancel();\n }\n setIsOpen(false);\n }, [controlledFiltering, cancel]);\n\n const handleApply = useCallback(() => {\n apply();\n setIsOpen(false);\n }, [apply]);\n\n return (\n <FilterItemWrapper>\n <FilterTriggerButton\n ref={triggerRef}\n filterId={filter.id}\n label={label}\n isSelected={isSelected}\n icon=\"calendar\"\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n onClick={() => setIsOpen((prev) => !prev)}\n />\n <OptionsPopover\n id={popoverId}\n referenceElement={triggerRef}\n open={isOpen}\n onClose={handleClose}\n footer={\n clear || controlledFiltering ? (\n <MenuFooter\n clear={\n clear\n ? {\n ...clear,\n onClick: () => {\n clear.onClick();\n // Close directly; the commit already happened, so we\n // skip handleClose's cancel-on-controlled path. Restore\n // focus to the trigger, matching Apply / Cancel.\n setIsOpen(false);\n triggerRef.current?.focus();\n },\n }\n : undefined\n }\n confirmation={\n controlledFiltering\n ? {\n onApply: handleApply,\n onCancel: handleClose,\n }\n : undefined\n }\n />\n ) : undefined\n }\n >\n {isOpen ? (\n <Body filter={filter} value={displayValue} onChange={setDraft} />\n ) : null}\n </OptionsPopover>\n </FilterItemWrapper>\n );\n};\n","import { DateTime } from \"luxon\";\nimport { DateFieldSingle } from \"../../../../../components/DateFieldSingle\";\nimport { FilterDateSingle } from \"../../FilterDateSingle\";\nimport type { DateFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\nimport { resolveDateFilterError } from \"../utils/dateConstraints\";\n\ntype Value = string | null;\n\nconst formatLabel = (filter: DateFilter) => {\n if (filter.value) {\n const date = DateTime.fromISO(filter.value, { zone: \"local\" });\n return `${filter.label}: ${date.monthShort} ${date.day}, ${date.year}`;\n }\n return filter.label;\n};\n\nexport const dateAdapter: FilterTypeAdapter<DateFilter, Value> = {\n getValue: (filter) => filter.value ?? null,\n setValue: (filter, value) => ({ ...filter, value }),\n reset: (filter) => ({ ...filter, value: null }),\n isActive: (filter) => filter.value !== null && filter.value !== undefined,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n value: existingFilter.value,\n }),\n cloneWithItemRefs: (filter) => ({ ...filter, value: filter.value ?? null }),\n\n renderBarControl: ({ filter, updateFilter, controlledFiltering }) => (\n <FilterDateSingle\n key={filter.id}\n filter={filter}\n committedValue={filter.value ?? null}\n onCommit={(value) => updateFilter(filter.id, value, true)}\n controlledFiltering={controlledFiltering}\n label={formatLabel(filter)}\n isSelected={!!filter.value}\n clear={{\n onClick: () => updateFilter(filter.id, null, true),\n }}\n />\n ),\n renderDrawer: ({ draftFilter, onDraftChange }) => (\n <DateFieldSingle\n key={draftFilter.id}\n label={draftFilter.label}\n value={(draftFilter.value as string | null) ?? null}\n onChange={(change) => onDraftChange(draftFilter.id, change.date)}\n mode={draftFilter.mode}\n minDate={draftFilter.minDate}\n maxDate={draftFilter.maxDate}\n unavailable={draftFilter.unavailable}\n error={resolveDateFilterError(draftFilter, draftFilter.value ?? null)}\n />\n ),\n formatLabel,\n isSelected: (filter) => !!filter.value,\n};\n","import { useCallback, useId, useRef, useState } from \"react\";\nimport type { DateRangeFilter } from \"./internal/types\";\nimport {\n MaskedDateRangeInput,\n type MaskedDateRangeInputRef,\n} from \"../../../components/DateFieldRange/internal/MaskedDateRangeInput\";\nimport type { DateFieldRangeChange } from \"../../../components/DateFieldRange\";\nimport { useDateFieldRangeConversion } from \"../../../components/DateFieldRange/internal/useDateFieldRangeConversion\";\nimport { useDateFieldRangeState } from \"../../../components/DateFieldRange/internal/useDateFieldRangeState\";\nimport Flex from \"../../../components/Flex\";\nimport { DateFieldRangeCalendar } from \"../../../components/DateFieldRange/internal/DateFieldRangeCalendar\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { MenuFooter } from \"../../../internal/components/MenuFooter/MenuFooter\";\nimport { useConfirmationDraft } from \"../../../internal/hooks/useConfirmationDraft\";\nimport { FilterItemWrapper } from \"./FilterItemWrapper\";\nimport { FilterTriggerButton } from \"./FilterTriggerButton\";\nimport { hasChangedFilter } from \"./internal/utils/value-compare\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\nimport { resolveDateRangeFilterError } from \"./internal/utils/dateConstraints\";\n\ntype Value = { startDate: string | null; endDate: string | null } | null;\n\ntype InlineProps = {\n /** Renders only the picker body with parent-owned draft state. */\n variant: \"inline\";\n /** Date-range filter configuration, including format and constraints. */\n filter: DateRangeFilter;\n /** In-progress range shown by the picker. */\n draftValue: Value;\n /** Updates the parent-owned draft. */\n onDraftChange: (value: Value) => void;\n};\n\ntype PopoverProps = {\n /** Renders the toolbar trigger and popover. Defaults to `popover`. */\n variant?: \"popover\";\n /** Date-range filter configuration, including format and constraints. */\n filter: DateRangeFilter;\n /** Value used to seed or resync the popover draft. */\n committedValue: Value;\n /** Receives the range when the popover commits. */\n onCommit: (value: Value) => void;\n /** Adds Apply/Cancel when true; otherwise picker changes commit immediately. */\n controlledFiltering: boolean;\n /** Content shown in the filter trigger. */\n label: React.ReactNode;\n /** Applies selected styling to the trigger. */\n isSelected: boolean;\n /**\n * Configures a \"Clear\" button in the popover footer. Presence enables it.\n * Clear commits immediately regardless of `controlledFiltering`.\n */\n clear?: {\n onClick: () => void;\n label?: string;\n disabled?: boolean;\n };\n};\n\n/**\n * `popover` owns the trigger and commit flow; `inline` renders the picker body\n * with parent-owned draft state.\n */\nexport type FilterDateRangeProps = InlineProps | PopoverProps;\n\n/** Date-range FilterBar picker with popover and inline variants. */\nexport const FilterDateRange = (props: FilterDateRangeProps) => {\n if (props.variant === \"inline\") {\n return (\n <Body\n filter={props.filter}\n value={props.draftValue}\n onChange={props.onDraftChange}\n />\n );\n }\n return <PopoverShell {...props} />;\n};\n\ntype BodyProps = {\n filter: DateRangeFilter;\n value: Value;\n onChange: (value: Value) => void;\n};\n\nconst Body = ({\n filter,\n value: draftValue,\n onChange: onDraftChange,\n}: BodyProps) => {\n const maskedDateRangeInputRef = useRef<MaskedDateRangeInputRef>(null);\n\n const handleChange = (change: DateFieldRangeChange) => {\n const hasCompleteRange = change.startDate && change.endDate;\n const isClearingRange = !change.startDate && !change.endDate;\n\n if (hasCompleteRange || isClearingRange) {\n onDraftChange({\n startDate: change.startDate,\n endDate: change.endDate,\n });\n }\n };\n\n const { value, minDate, maxDate, unavailable, onChange } =\n useDateFieldRangeConversion({\n value: draftValue,\n onChange: handleChange,\n minDate: filter.minDate,\n maxDate: filter.maxDate,\n unavailable: filter.unavailable,\n });\n\n const { handleInputChange, handleCalendarSelection } = useDateFieldRangeState(\n {\n valueProp: value,\n onChange: (change) => {\n const hasCompleteRange = change.startDate && change.endDate;\n const isClearingRange = change.isInputEmpty;\n\n if ((change.isInputValid && hasCompleteRange) || isClearingRange) {\n onChange({ ...change, isDateRangeValid: true });\n }\n },\n },\n );\n\n const error = resolveDateRangeFilterError(filter, draftValue);\n\n return (\n <Flex gap={4} direction=\"column\">\n <MaskedDateRangeInput\n mode={filter.mode}\n ref={maskedDateRangeInputRef}\n onChange={handleInputChange}\n startDate={value?.startDate ?? null}\n endDate={value?.endDate ?? null}\n autoComplete=\"off\"\n error={error}\n {...{ [ANV_PART_ATTR]: PARTS.dateInput }}\n />\n\n {/* DateFieldRangeCalendar does not forward arbitrary props, so the part\n attribute goes on a wrapping element. */}\n <div {...{ [ANV_PART_ATTR]: PARTS.dateCalendar }}>\n <DateFieldRangeCalendar\n startDate={value?.startDate ?? null}\n endDate={value?.endDate ?? null}\n onSelection={handleCalendarSelection}\n minDate={minDate}\n maxDate={maxDate}\n unavailable={unavailable}\n />\n </div>\n </Flex>\n );\n};\n\nconst PopoverShell = ({\n filter,\n committedValue,\n onCommit,\n controlledFiltering,\n label,\n isSelected,\n clear,\n}: PopoverProps) => {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const popoverId = useId();\n const [isOpen, setIsOpen] = useState(false);\n\n const isEqual = useCallback(\n (a: Value, b: Value) => !hasChangedFilter(a, b),\n [],\n );\n\n const { displayValue, setDraft, apply, cancel } = useConfirmationDraft<Value>(\n {\n value: committedValue,\n onCommit,\n isOpen,\n enabled: controlledFiltering,\n isEqual,\n },\n );\n\n const handleClose = useCallback(() => {\n if (controlledFiltering) {\n cancel();\n }\n setIsOpen(false);\n }, [controlledFiltering, cancel]);\n\n const handleApply = useCallback(() => {\n apply();\n setIsOpen(false);\n }, [apply]);\n\n return (\n <FilterItemWrapper>\n <FilterTriggerButton\n ref={triggerRef}\n filterId={filter.id}\n label={label}\n isSelected={isSelected}\n icon=\"calendar\"\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n onClick={() => setIsOpen((prev) => !prev)}\n />\n <OptionsPopover\n id={popoverId}\n referenceElement={triggerRef}\n open={isOpen}\n onClose={handleClose}\n footer={\n clear || controlledFiltering ? (\n <MenuFooter\n clear={\n clear\n ? {\n ...clear,\n onClick: () => {\n clear.onClick();\n // Close directly; the commit already happened, so we\n // skip handleClose's cancel-on-controlled path. Restore\n // focus to the trigger, matching Apply / Cancel.\n setIsOpen(false);\n triggerRef.current?.focus();\n },\n }\n : undefined\n }\n confirmation={\n controlledFiltering\n ? {\n onApply: handleApply,\n onCancel: handleClose,\n }\n : undefined\n }\n />\n ) : undefined\n }\n >\n {isOpen ? (\n <Body filter={filter} value={displayValue} onChange={setDraft} />\n ) : null}\n </OptionsPopover>\n </FilterItemWrapper>\n );\n};\n","import { DateTime } from \"luxon\";\nimport type {\n DateListFilter,\n DateListLibraryOptionId,\n DateListOption,\n} from \"../types\";\n\nconst LIBRARY_OPTION_LABELS = {\n on: \"On\",\n before: \"Before\",\n after: \"After\",\n customRange: \"Custom Range\",\n} as const satisfies Record<DateListLibraryOptionId, string>;\n\nconst LIBRARY_OPTION_IDS_ORDERED: ReadonlyArray<DateListLibraryOptionId> = [\n \"on\",\n \"before\",\n \"after\",\n \"customRange\",\n];\n\nconst LIBRARY_OPTION_ID_SET = new Set<string>(LIBRARY_OPTION_IDS_ORDERED);\n\n/** Type guard for the four reserved library option ids. */\nexport const isDateListLibraryOptionId = (\n id: string,\n): id is DateListLibraryOptionId => LIBRARY_OPTION_ID_SET.has(id);\n\n/** Ellipsis-free dialog title and committed label for a library option. */\nexport const getDateListLibraryOptionLabel = (\n id: DateListLibraryOptionId,\n): string => LIBRARY_OPTION_LABELS[id];\n\n/**\n * Built-in date-list rows in display order. The \"…\" suffix signals that\n * selection opens a dialog; committed options use the ellipsis-free label\n * from {@link getDateListLibraryOptionLabel}.\n */\nexport const dateListLibraryOptions: ReadonlyArray<{\n id: DateListLibraryOptionId;\n label: string;\n}> = LIBRARY_OPTION_IDS_ORDERED.map((id) => ({\n id,\n label: `${LIBRARY_OPTION_LABELS[id]}…`,\n}));\n\n/** Default options visible for a given dateList filter configuration. */\nexport const getVisibleDateListDefaultOptions = (\n filter: Pick<DateListFilter, \"excludeDefaultOptions\">,\n): ReadonlyArray<{ id: DateListLibraryOptionId; label: string }> => {\n const excluded = new Set(filter.excludeDefaultOptions ?? []);\n if (excluded.size === 0) return dateListLibraryOptions;\n return dateListLibraryOptions.filter((opt) => !excluded.has(opt.id));\n};\n\n/** True when the library option opens a date-range dialog. */\nexport const isDateListRangeLibraryId = (\n id: DateListLibraryOptionId,\n): boolean => id === \"customRange\";\n\nconst formatDateForLabel = (iso: string): string => {\n const d = DateTime.fromISO(iso, { zone: \"local\" });\n return `${d.monthShort} ${d.day}, ${d.year}`;\n};\n\nconst formatRangeForLabel = (range: {\n startDate: string;\n endDate: string;\n}): string => {\n const start = DateTime.fromISO(range.startDate, { zone: \"local\" });\n const end = DateTime.fromISO(range.endDate, { zone: \"local\" });\n const sameYear = start.year === end.year;\n const formattedStart = sameYear\n ? `${start.monthShort} ${start.day}`\n : `${start.monthShort} ${start.day}, ${start.year}`;\n return `${formattedStart} – ${end.monthShort} ${end.day}, ${end.year}`;\n};\n\nconst formatDateListValue = (\n value: NonNullable<DateListOption[\"value\"]>,\n): string =>\n typeof value === \"string\"\n ? formatDateForLabel(value)\n : formatRangeForLabel(value);\n\n/**\n * Build the display label for a committed dateList selection, without the\n * filter's own label. Used by the FilterDrawer `SelectField`, which renders\n * the filter label separately as the field label.\n *\n * - Selection with `value: null` (e.g. \"Any day\") → option label only.\n * - Custom Range library option → just the formatted range (label omitted\n * since the range is self-explanatory).\n * - Other library or consumer options → `\"<label>: <formatted>\"`.\n */\nexport const formatDateListSelectionLabel = (\n selection: DateListOption,\n): string => {\n if (selection.value === null) return selection.label;\n const formatted = formatDateListValue(selection.value);\n if (selection.id === \"customRange\") return formatted;\n return `${selection.label}: ${formatted}`;\n};\n\n/**\n * Build the toolbar `FilterTriggerButton` label for a committed dateList\n * selection. Unlike the drawer, the trigger has no separate label slot, so the\n * filter's label is retained and the selection appended — matching every other\n * filter adapter (e.g. \"Owner: Alice\").\n *\n * - Selection with `value: null` (e.g. \"Any day\") → filter label, or the option label when the filter label is empty.\n * - Custom Range → `\"<filter>: <formatted>\"`; the option name adds nothing\n * over the range itself.\n * - Other options → `\"<filter>: <option> (<formatted>)\"`, e.g.\n * \"Start Date: Last 7 Days (Aug 6 – Aug 11, 2026)\". Parentheses avoid the\n * double colon that `\"<filter>: <option>: <formatted>\"` would produce.\n */\nexport const formatDateListTriggerLabel = (\n filterLabel: string,\n selection: DateListOption,\n): string => {\n if (selection.value === null) return filterLabel || selection.label;\n if (!filterLabel) return formatDateListSelectionLabel(selection);\n const formatted = formatDateListValue(selection.value);\n if (selection.id === \"customRange\") return `${filterLabel}: ${formatted}`;\n return `${filterLabel}: ${selection.label} (${formatted})`;\n};\n","import { type ReactNode, useEffect, useMemo, useState } from \"react\";\nimport Dialog from \"../../../components/Dialog\";\nimport Button from \"../../../components/Button\";\nimport Flex from \"../../../components/Flex\";\nimport type { DateFieldSingleProps } from \"../../../components/DateFieldSingle\";\nimport {\n type SelectMenuOption,\n SelectMenuSync,\n} from \"../../../components/SelectMenu\";\nimport type {\n DateFilter,\n DateRangeFilter,\n DateListFilter,\n DateListLibraryOptionId,\n DateListOption,\n DateListCustomRangeConfig,\n} from \"./internal/types\";\nimport { FilterDateSingle } from \"./FilterDateSingle\";\nimport { FilterDateRange } from \"./FilterDateRange\";\nimport { FilterItemWrapper } from \"./FilterItemWrapper\";\nimport { FilterTriggerButton } from \"./FilterTriggerButton\";\nimport {\n getDateListLibraryOptionLabel,\n getVisibleDateListDefaultOptions,\n isDateListLibraryOptionId,\n isDateListRangeLibraryId,\n} from \"./internal/utils/dateListLibraryOptions\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\nimport { warnOnce } from \"../../../internal/functions\";\n\ninterface DateListDialogProps {\n /** Library option whose dialog is open; null when closed. */\n libraryId: DateListLibraryOptionId | null;\n /** Parent filter id; used to derive unique DOM ids for the synthetic date pickers inside the dialog. */\n parentFilterId: string;\n /** Pre-seed value when re-opening an already-selected library option. */\n initialValue?: string | { startDate: string; endDate: string };\n /** Date format forwarded to the inline picker. */\n mode?: DateFieldSingleProps[\"mode\"];\n /** Constraints applied only when the Custom Range picker is open. */\n customRange?: DateListCustomRangeConfig;\n /** Primary CTA label. \"Apply\" in popover, \"Save\" in drawer. */\n dialogCtaLabel: \"Apply\" | \"Save\";\n /** Receives the completed library option. */\n onCommit: (option: DateListOption) => void;\n /** Dismisses the dialog without committing its draft. */\n onCancel: () => void;\n}\n\n/**\n * Dialog shared by FilterDateList (popover) and FilterDrawer's dateList case.\n * Renders a date or range picker for the chosen library option and commits\n * up on Apply/Save.\n */\nexport const DateListDialog = ({\n libraryId,\n parentFilterId,\n initialValue,\n mode,\n customRange,\n dialogCtaLabel,\n onCommit,\n onCancel,\n}: DateListDialogProps) => {\n const [dateDraft, setDateDraft] = useState<string | null>(null);\n const [rangeDraft, setRangeDraft] = useState<{\n startDate: string | null;\n endDate: string | null;\n } | null>(null);\n\n useEffect(() => {\n if (!libraryId) return;\n if (isDateListRangeLibraryId(libraryId)) {\n setRangeDraft(\n initialValue && typeof initialValue === \"object\"\n ? {\n startDate: initialValue.startDate,\n endDate: initialValue.endDate,\n }\n : null,\n );\n setDateDraft(null);\n } else {\n setDateDraft(typeof initialValue === \"string\" ? initialValue : null);\n setRangeDraft(null);\n }\n }, [libraryId, initialValue]);\n\n const dialogOpen = libraryId !== null;\n const dialogLabel = libraryId ? getDateListLibraryOptionLabel(libraryId) : \"\";\n const isRange = libraryId ? isDateListRangeLibraryId(libraryId) : false;\n\n const canCommit = isRange\n ? Boolean(rangeDraft?.startDate && rangeDraft?.endDate)\n : Boolean(dateDraft);\n\n const handleCommit = () => {\n if (!libraryId) return;\n if (isRange) {\n if (!rangeDraft?.startDate || !rangeDraft?.endDate) return;\n onCommit({\n id: libraryId,\n label: dialogLabel,\n value: {\n startDate: rangeDraft.startDate,\n endDate: rangeDraft.endDate,\n },\n });\n } else {\n if (!dateDraft) return;\n onCommit({ id: libraryId, label: dialogLabel, value: dateDraft });\n }\n };\n\n return (\n <Dialog\n open={dialogOpen}\n onClose={onCancel}\n {...{ [ANV_PART_ATTR]: PARTS.dialog }}\n >\n {libraryId && (\n <>\n <Dialog.Header>{dialogLabel}</Dialog.Header>\n <Dialog.Content>\n {isRange ? (\n <FilterDateRange\n variant=\"inline\"\n filter={\n {\n id: `${parentFilterId}--date-list-dialog-range`,\n label: dialogLabel,\n type: \"dateRange\",\n value: rangeDraft,\n mode,\n minDate: customRange?.minDate,\n maxDate: customRange?.maxDate,\n unavailable: customRange?.unavailable,\n } satisfies DateRangeFilter\n }\n draftValue={rangeDraft}\n onDraftChange={setRangeDraft}\n />\n ) : (\n <FilterDateSingle\n variant=\"inline\"\n filter={\n {\n id: `${parentFilterId}--date-list-dialog-date`,\n label: dialogLabel,\n type: \"date\",\n value: dateDraft,\n mode,\n } satisfies DateFilter\n }\n draftValue={dateDraft}\n onDraftChange={setDateDraft}\n />\n )}\n </Dialog.Content>\n <Dialog.Footer>\n <Flex gap={2} justifyContent=\"flex-end\">\n <Dialog.CancelButton\n appearance=\"ghost\"\n aria-label=\"Cancel\"\n {...{ [ANV_PART_ATTR]: PARTS.cancelButton }}\n >\n Cancel\n </Dialog.CancelButton>\n <Button\n appearance=\"primary\"\n disabled={!canCommit}\n onClick={handleCommit}\n {...{ [ANV_PART_ATTR]: PARTS.applyButton }}\n >\n {dialogCtaLabel}\n </Button>\n </Flex>\n </Dialog.Footer>\n </>\n )}\n </Dialog>\n );\n};\n\ninterface FilterDateListProps {\n /** Date-list options and picker configuration. */\n filter: DateListFilter;\n /** Selection used to derive the menu value and dialog seed. */\n committedValue: DateListOption | undefined;\n /** Receives consumer options immediately or a completed library selection. */\n onCommit: (value: DateListOption | undefined) => void;\n /** Content shown in the filter trigger. */\n label: ReactNode;\n /** Applies selected styling to the trigger. */\n isSelected: boolean;\n /** Primary CTA label for the library-option dialog. */\n dialogCtaLabel: \"Apply\" | \"Save\";\n /** Configures a \"Clear\" button in the SelectMenu footer. Presence enables it. */\n clear?: {\n onClick: () => void;\n label?: string;\n disabled?: boolean;\n };\n}\n\n/**\n * FilterDateList renders the dateList filter's option list via SelectMenuSync.\n * Consumer options commit immediately; library options open a Dialog whose\n * Apply commits the final picked date or range.\n */\nexport const FilterDateList = ({\n filter,\n committedValue,\n onCommit,\n label,\n isSelected,\n dialogCtaLabel,\n clear,\n}: FilterDateListProps) => {\n const [openLibraryId, setOpenLibraryId] =\n useState<DateListLibraryOptionId | null>(null);\n\n const excludeDefaultOptions = filter.excludeDefaultOptions;\n const visibleLibraryOptions = useMemo(\n () => getVisibleDateListDefaultOptions({ excludeDefaultOptions }),\n [excludeDefaultOptions],\n );\n\n useEffect(() => {\n const libraryLabels = new Set(visibleLibraryOptions.map((o) => o.label));\n filter.options.forEach((opt) => {\n if (isDateListLibraryOptionId(opt.id)) {\n warnOnce(\n `[FilterDateList] Consumer option id \"${opt.id}\" is reserved for a library option (\"on\", \"before\", \"after\", \"customRange\"). Use a different id.`,\n );\n }\n if (libraryLabels.has(opt.label)) {\n warnOnce(\n `[FilterDateList] Consumer option label \"${opt.label}\" collides with a library option label (\"On…\", \"Before…\", \"After…\", \"Custom Range…\"). Use a different label.`,\n );\n }\n });\n }, [filter.options, visibleLibraryOptions]);\n\n const options = useMemo<SelectMenuOption[]>(\n () => [\n ...filter.options.map(\n (opt): SelectMenuOption => ({\n id: opt.id,\n label: opt.label,\n }),\n ),\n ...visibleLibraryOptions.map(\n (opt): SelectMenuOption => ({\n id: opt.id,\n label: opt.label,\n }),\n ),\n ],\n [filter.options, visibleLibraryOptions],\n );\n\n // SelectMenu wants the *original* option reference back through value, so\n // pick the matching options entry by id.\n const selectedOption = useMemo<SelectMenuOption | null>(\n () =>\n committedValue\n ? (options.find((opt) => opt.id === committedValue.id) ?? null)\n : null,\n [options, committedValue],\n );\n\n const handleSelectedOptionChange = (option: SelectMenuOption | null) => {\n if (!option) {\n onCommit(undefined);\n return;\n }\n const id = String(option.id);\n if (isDateListLibraryOptionId(id)) {\n setOpenLibraryId(id);\n return;\n }\n const consumerOption = filter.options.find((opt) => opt.id === id);\n if (!consumerOption) return;\n onCommit({\n id: consumerOption.id,\n label: consumerOption.label,\n value: consumerOption.value,\n });\n };\n\n const dialogInitialValue =\n openLibraryId &&\n committedValue?.id === openLibraryId &&\n committedValue.value !== null\n ? committedValue.value\n : undefined;\n\n return (\n <>\n <FilterItemWrapper>\n <SelectMenuSync\n id={filter.id}\n label={filter.label}\n options={options}\n value={selectedOption}\n onSelectedOptionChange={handleSelectedOptionChange}\n disableSearch\n clear={clear}\n trigger={(triggerProps) => (\n <FilterTriggerButton\n {...triggerProps}\n filterId={filter.id}\n label={label}\n isSelected={isSelected}\n icon=\"calendar\"\n />\n )}\n />\n </FilterItemWrapper>\n <DateListDialog\n libraryId={openLibraryId}\n parentFilterId={filter.id}\n initialValue={dialogInitialValue}\n mode={filter.mode}\n customRange={filter.customRange}\n dialogCtaLabel={dialogCtaLabel}\n onCommit={(option) => {\n onCommit(option);\n setOpenLibraryId(null);\n }}\n onCancel={() => setOpenLibraryId(null)}\n />\n </>\n );\n};\n","import { FilterDateList } from \"../../FilterDateList\";\nimport {\n SelectFieldSync,\n type SelectFieldOption,\n} from \"../../../../../components/SelectField\";\nimport {\n formatDateListSelectionLabel,\n formatDateListTriggerLabel,\n getVisibleDateListDefaultOptions,\n isDateListLibraryOptionId,\n} from \"../utils/dateListLibraryOptions\";\nimport type { DateListFilter, DateListOption } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\ntype Value = DateListOption | undefined;\n\n// \"Any day\" (value === null) is treated as inactive — selecting it\n// is functionally equivalent to clearing the filter.\nconst isSelected = (filter: DateListFilter) =>\n filter.selectedOption !== undefined && filter.selectedOption.value !== null;\n\nconst formatLabel = (filter: DateListFilter) =>\n filter.selectedOption\n ? formatDateListTriggerLabel(filter.label, filter.selectedOption)\n : filter.label;\n\nexport const dateListAdapter: FilterTypeAdapter<DateListFilter, Value> = {\n getValue: (filter) => filter.selectedOption,\n setValue: (filter, value) => ({ ...filter, selectedOption: value }),\n reset: (filter) => ({ ...filter, selectedOption: undefined }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n selectedOption: existingFilter.selectedOption,\n }),\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n renderBarControl: ({ filter, updateFilter }) => (\n <FilterDateList\n key={filter.id}\n filter={filter}\n committedValue={filter.selectedOption}\n onCommit={(value) => updateFilter(filter.id, value, true)}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n dialogCtaLabel=\"Apply\"\n clear={{\n onClick: () => updateFilter(filter.id, undefined, true),\n }}\n />\n ),\n renderDrawer: ({\n originalFilter,\n draftFilter,\n onDraftChange,\n requestDateListDialog,\n }) => {\n const consumerSelectOptions: SelectFieldOption[] =\n originalFilter.options.map((opt) => ({\n id: opt.id,\n label: opt.label,\n extra: { value: opt.value },\n }));\n const librarySelectOptions: SelectFieldOption[] =\n getVisibleDateListDefaultOptions(originalFilter).map((opt) => ({\n id: opt.id,\n label: opt.label,\n extra: { value: null },\n }));\n const allSelectOptions = [\n ...consumerSelectOptions,\n ...librarySelectOptions,\n ];\n\n // SelectField renders the filter label separately, so its value omits that prefix.\n const selectedSelectOption: SelectFieldOption | null =\n draftFilter.selectedOption\n ? {\n id: draftFilter.selectedOption.id,\n label: formatDateListSelectionLabel(draftFilter.selectedOption),\n extra: {\n value: draftFilter.selectedOption.value,\n },\n }\n : null;\n\n return (\n <SelectFieldSync\n key={draftFilter.id}\n label={originalFilter.label}\n placeholder=\"Select an option...\"\n disableSearch\n options={allSelectOptions}\n value={selectedSelectOption}\n onSelectedOptionChange={(option) => {\n if (!option) {\n onDraftChange(draftFilter.id, undefined);\n return;\n }\n const id = String(option.id);\n if (isDateListLibraryOptionId(id)) {\n requestDateListDialog(draftFilter.id, id);\n return;\n }\n onDraftChange(draftFilter.id, {\n id,\n label: option.label,\n value: (option.extra?.value ?? null) as DateListOption[\"value\"],\n });\n }}\n />\n );\n },\n formatLabel,\n isSelected,\n};\n","import { DateTime } from \"luxon\";\nimport { DateFieldRange } from \"../../../../../components/DateFieldRange\";\nimport { FilterDateRange } from \"../../FilterDateRange\";\nimport type { DateRangeFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\nimport { resolveDateRangeFilterError } from \"../utils/dateConstraints\";\n\ntype Value = { startDate: string | null; endDate: string | null } | null;\n\nconst formatLabel = (filter: DateRangeFilter) => {\n if (filter.value?.startDate && filter.value?.endDate) {\n const start = DateTime.fromISO(filter.value.startDate as string, {\n zone: \"local\",\n });\n const end = DateTime.fromISO(filter.value.endDate as string, {\n zone: \"local\",\n });\n\n const isSameYear = start.year === end.year;\n const formattedStart = isSameYear\n ? `${start.monthShort} ${start.day}`\n : `${start.monthShort} ${start.day}, ${start.year}`;\n\n return `${filter.label}: ${formattedStart} – ${end.monthShort} ${end.day}, ${end.year}`;\n }\n return filter.label;\n};\n\nconst isSelected = (filter: DateRangeFilter) =>\n !!(filter.value?.startDate && filter.value?.endDate);\n\nexport const dateRangeAdapter: FilterTypeAdapter<DateRangeFilter, Value> = {\n getValue: (filter) => filter.value ?? null,\n setValue: (filter, value) => ({ ...filter, value }),\n reset: (filter) => ({ ...filter, value: null }),\n isActive: (filter) =>\n filter.value !== null &&\n filter.value !== undefined &&\n filter.value.startDate !== null &&\n filter.value.endDate !== null,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n value: existingFilter.value,\n }),\n cloneWithItemRefs: (filter) => ({\n ...filter,\n value: (filter.value as Value) ?? null,\n }),\n\n renderBarControl: ({ filter, updateFilter, controlledFiltering }) => (\n <FilterDateRange\n key={filter.id}\n filter={filter}\n committedValue={filter.value ?? null}\n onCommit={(value) => updateFilter(filter.id, value, true)}\n controlledFiltering={controlledFiltering}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n clear={{\n onClick: () => updateFilter(filter.id, null, true),\n }}\n />\n ),\n renderDrawer: ({ draftFilter, onDraftChange }) => (\n <DateFieldRange\n key={draftFilter.id}\n label={draftFilter.label}\n value={(draftFilter.value as Value) ?? null}\n onChange={(change) =>\n onDraftChange(draftFilter.id, {\n startDate: change.startDate,\n endDate: change.endDate,\n })\n }\n mode={draftFilter.mode}\n minDate={draftFilter.minDate}\n maxDate={draftFilter.maxDate}\n unavailable={draftFilter.unavailable}\n error={resolveDateRangeFilterError(\n draftFilter,\n (draftFilter.value as Value) ?? null,\n )}\n />\n ),\n formatLabel,\n isSelected,\n};\n","import { Checkbox } from \"../../../../../components/Checkbox\";\nimport Chip from \"../../../../../components/Chip\";\nimport {\n ANV_PART_ATTR,\n COMMON_PART,\n} from \"../../../../../internal/constants/anvParts\";\nimport { FilterItemWrapper } from \"../../FilterItemWrapper\";\nimport { FilterTriggerButton } from \"../../FilterTriggerButton\";\nimport { PARTS } from \"../../parts\";\nimport { MultiSelectFieldSync } from \"../../../../../components/MultiSelectField\";\nimport {\n type MultiSelectMenuOption,\n MultiSelectMenuSync,\n type MultiSelectMenuSyncProps,\n} from \"../../../../../components/MultiSelectMenu\";\nimport type { MultiSelectFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\ntype Value = MultiSelectMenuOption[];\n\nconst isSelected = (filter: MultiSelectFilter) =>\n !!filter.selectedOptions && filter.selectedOptions.length > 0;\n\nconst formatLabel = (filter: MultiSelectFilter) => {\n const count = filter.selectedOptions?.length ?? 0;\n if (count === 0) return filter.label;\n const countLabel = count.toString();\n return (\n <>\n {filter.label}\n <Chip\n label={countLabel}\n size=\"small\"\n aria-label={`${countLabel} selected items`}\n {...{ [ANV_PART_ATTR]: PARTS.countBadge }}\n />\n </>\n );\n};\n\nconst passThroughMenuProps = (\n filter: MultiSelectFilter,\n): MultiSelectMenuSyncProps => {\n const {\n id: _id,\n label: _label,\n type: _type,\n selectedOptions: _selectedOptions,\n simpleDrawerVariant: _simpleDrawerVariant,\n drawerOnly: _drawerOnly,\n ...rest\n } = filter;\n return rest as unknown as MultiSelectMenuSyncProps;\n};\n\nexport const multiSelectAdapter: FilterTypeAdapter<MultiSelectFilter, Value> = {\n getValue: (filter) => filter.selectedOptions ?? [],\n setValue: (filter, value) => ({ ...filter, selectedOptions: value }),\n reset: (filter) => ({ ...filter, selectedOptions: [] }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n selectedOptions: existingFilter.selectedOptions,\n }),\n // Options stay consumer-owned; MultiSelectMenuSync matches selection by id.\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n renderBarControl: ({ filter, updateFilter, controlledFiltering }) => (\n <FilterItemWrapper key={filter.id}>\n <MultiSelectMenuSync\n {...passThroughMenuProps(filter)}\n id={filter.id}\n label={filter.label}\n value={filter.selectedOptions ?? []}\n onSelectedOptionsChange={(options) =>\n updateFilter(filter.id, options, true)\n }\n confirmation={controlledFiltering}\n // Clear commits immediately even while confirmation is buffering picks.\n clear={{\n onClick: () => updateFilter(filter.id, [], true),\n }}\n trigger={(triggerProps) => (\n <FilterTriggerButton\n {...triggerProps}\n filterId={filter.id}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n />\n )}\n />\n </FilterItemWrapper>\n ),\n\n renderDrawer: ({ originalFilter, draftFilter, onDraftChange }) => {\n if (originalFilter.simpleDrawerVariant) {\n return (\n <Checkbox.Group key={draftFilter.id} legend={originalFilter.label}>\n {originalFilter.options.map((option) => (\n <Checkbox\n key={option.id}\n label={option.label}\n checked={\n draftFilter.selectedOptions?.some(\n (selected) => selected.id === option.id,\n ) ?? false\n }\n {...{ [ANV_PART_ATTR]: COMMON_PART.option }}\n onChange={(e) => {\n const currentSelected = draftFilter.selectedOptions ?? [];\n if (e?.target.checked) {\n onDraftChange(draftFilter.id, [...currentSelected, option]);\n } else {\n onDraftChange(\n draftFilter.id,\n currentSelected.filter(\n (selected) => selected.id !== option.id,\n ),\n );\n }\n }}\n />\n ))}\n </Checkbox.Group>\n );\n }\n\n return (\n <MultiSelectFieldSync\n {...passThroughMenuProps(originalFilter)}\n key={draftFilter.id}\n label={originalFilter.label}\n value={draftFilter.selectedOptions ?? []}\n onSelectedOptionsChange={(options) =>\n onDraftChange(draftFilter.id, options)\n }\n />\n );\n },\n\n formatLabel,\n isSelected,\n};\n","import { FieldLabel } from \"../../../components/FieldLabel\";\nimport Flex from \"../../../components/Flex\";\nimport Grid from \"../../../components/Grid\";\nimport { NumberField } from \"../../../components/NumberField\";\nimport Text from \"../../../components/Text\";\nimport styles from \"./FilterBar.module.scss\";\nimport type { NumericRangeFilter, NumericRangeValue } from \"./internal/types\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\n\nconst clampToBounds = (\n n: number | undefined,\n minValue: number | undefined,\n maxValue: number | undefined,\n): number | undefined => {\n if (n === undefined) return undefined;\n let result = n;\n if (minValue !== undefined) result = Math.max(result, minValue);\n if (maxValue !== undefined) result = Math.min(result, maxValue);\n return result;\n};\n\ninterface FilterNumericRangeProps {\n /** The numeric range filter — drives field labels, decorator props, and clamp bounds. */\n filter: NumericRangeFilter;\n /** `null` when empty; one-sided bounds are valid committed ranges. */\n value: NumericRangeValue;\n /** Emits `null` when empty; otherwise emits clamped one- or two-sided bounds. */\n onChange: (value: NumericRangeValue) => void;\n /**\n * `compact` stacks the inputs vertically (toolbar popover); `grid` places\n * Min / \"to\" / Max side-by-side under a single FieldLabel (drawer cell).\n */\n layout: \"compact\" | \"grid\";\n}\n\n/**\n * Min/max number fields that preserve half-ranges and clamp both bounds to the\n * filter's configured limits before emitting.\n */\nexport const FilterNumericRange = ({\n filter,\n value,\n onChange,\n layout,\n}: FilterNumericRangeProps) => {\n const inclusive = filter.inclusiveBounds === true;\n const minFieldLabel = inclusive ? \"Min\" : \"Above\";\n const maxFieldLabel = inclusive ? \"Max\" : \"Below\";\n const minimumFractionDigits =\n filter.minimumFractionDigits ??\n (filter.mode === \"currency\"\n ? 2\n : filter.mode === \"percentage\"\n ? 0\n : undefined);\n const maximumFractionDigits =\n filter.maximumFractionDigits ??\n (filter.mode === \"currency\"\n ? 2\n : filter.mode === \"percentage\"\n ? 3\n : undefined);\n const decoratorProps = {\n ...(filter.mode === \"currency\" && { prefix: \"$\" }),\n ...(filter.mode === \"percentage\" && { suffix: \"%\" }),\n ...(minimumFractionDigits !== undefined && { minimumFractionDigits }),\n ...(maximumFractionDigits !== undefined && { maximumFractionDigits }),\n };\n\n const update = (next: { min?: number; max?: number }) => {\n const min = clampToBounds(next.min, filter.minValue, filter.maxValue);\n const max = clampToBounds(next.max, filter.minValue, filter.maxValue);\n onChange(min === undefined && max === undefined ? null : { min, max });\n };\n\n // minValue/maxValue are passed through so the NumberField exposes correct\n // aria-valuemin/aria-valuemax and clamps keyboard increments — `update`\n // still clamps the emitted value as a defence-in-depth fallback.\n const sharedNumberFieldProps = {\n hideControls: filter.hideControls ?? true,\n step: filter.step,\n minValue: filter.minValue,\n maxValue: filter.maxValue,\n ...decoratorProps,\n };\n\n const minField = (\n <NumberField\n label={minFieldLabel}\n value={value?.min ?? null}\n onChange={(n) => update({ min: n ?? undefined, max: value?.max })}\n {...sharedNumberFieldProps}\n {...{ [ANV_PART_ATTR]: PARTS.minInput }}\n />\n );\n const maxField = (\n <NumberField\n label={maxFieldLabel}\n value={value?.max ?? null}\n onChange={(n) => update({ min: value?.min, max: n ?? undefined })}\n {...sharedNumberFieldProps}\n {...{ [ANV_PART_ATTR]: PARTS.maxInput }}\n />\n );\n\n if (layout === \"compact\") {\n return (\n <Flex direction=\"column\" gap=\"2\" grow={1}>\n {minField}\n {maxField}\n </Flex>\n );\n }\n return (\n <Flex direction=\"column\" gap=\"2\" grow={1}>\n <FieldLabel>{filter.label}</FieldLabel>\n <Grid templateColumns=\"1fr auto 1fr\" gap=\"2\">\n {minField}\n <Flex\n alignItems=\"center\"\n justifyContent=\"center\"\n className={styles[\"filter-numeric-range-separator\"]}\n >\n <Text>to</Text>\n </Flex>\n {maxField}\n </Grid>\n </Flex>\n );\n};\n","import { FilterNumericRange } from \"../../FilterNumericRange\";\nimport { FilterPopoverButton } from \"../../FilterPopoverButton\";\nimport type { NumericRangeFilter, NumericRangeValue } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\n/*\n * Mirrors NumberField formatting so the closed-button summary matches the\n * entered bounds.\n */\nconst formatBound = (n: number, filter: NumericRangeFilter): string => {\n const minimumFractionDigits =\n filter.minimumFractionDigits ??\n (filter.mode === \"currency\"\n ? 2\n : filter.mode === \"percentage\"\n ? 0\n : undefined);\n const maximumFractionDigits =\n filter.maximumFractionDigits ??\n (filter.mode === \"currency\"\n ? 2\n : filter.mode === \"percentage\"\n ? 3\n : undefined);\n const formatOptions: Intl.NumberFormatOptions = {};\n if (minimumFractionDigits !== undefined) {\n formatOptions.minimumFractionDigits = minimumFractionDigits;\n }\n if (maximumFractionDigits !== undefined) {\n formatOptions.maximumFractionDigits = maximumFractionDigits;\n }\n const formatted = n.toLocaleString(\"en-US\", formatOptions);\n if (filter.mode === \"currency\") return `$${formatted}`;\n if (filter.mode === \"percentage\") return `${formatted}%`;\n return formatted;\n};\n\nconst formatLabel = (filter: NumericRangeFilter) => {\n const hasMin = filter.value?.min !== undefined;\n const hasMax = filter.value?.max !== undefined;\n if (!hasMin && !hasMax) return filter.label;\n\n const inclusive = filter.inclusiveBounds === true;\n const minSymbol = inclusive ? \"≥\" : \">\";\n const maxSymbol = inclusive ? \"≤\" : \"<\";\n\n if (hasMin && hasMax) {\n return `${filter.label}: ${formatBound(filter.value!.min!, filter)} to ${formatBound(filter.value!.max!, filter)}`;\n }\n if (hasMin) {\n return `${filter.label}: ${minSymbol} ${formatBound(filter.value!.min!, filter)}`;\n }\n return `${filter.label}: ${maxSymbol} ${formatBound(filter.value!.max!, filter)}`;\n};\n\nconst isSelected = (filter: NumericRangeFilter) =>\n filter.value !== null &&\n filter.value !== undefined &&\n (filter.value.min !== undefined || filter.value.max !== undefined);\n\nexport const numericRangeAdapter: FilterTypeAdapter<\n NumericRangeFilter,\n NumericRangeValue\n> = {\n getValue: (filter) => filter.value ?? null,\n setValue: (filter, value) => ({ ...filter, value }),\n reset: (filter) => ({ ...filter, value: null }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n value: existingFilter.value,\n }),\n cloneWithItemRefs: (filter) => ({\n ...filter,\n value: filter.value ? { ...filter.value } : null,\n }),\n\n renderBarControl: ({ filter, updateFilter }) => (\n <FilterPopoverButton<NumericRangeValue>\n key={filter.id}\n filter={filter}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n committedValue={filter.value ?? null}\n initialValue={null}\n clear={{\n onClick: () => updateFilter(filter.id, null, true),\n }}\n // In uncontrolled mode FilterPopoverButton closes the popover after\n // every change by default — but each digit typed into a NumberField\n // emits a change, so the popover would slam shut mid-input and the\n // user could never enter a multi-digit bound. Keep it open while\n // typing; the value commits live as it goes.\n keepOpenOnUncontrolledChange\n >\n {({ value, onChange }) => (\n <FilterNumericRange\n filter={filter}\n value={value}\n onChange={onChange}\n layout=\"compact\"\n />\n )}\n </FilterPopoverButton>\n ),\n renderDrawer: ({ draftFilter, onDraftChange }) => (\n <FilterNumericRange\n key={draftFilter.id}\n filter={draftFilter}\n value={draftFilter.value ?? null}\n onChange={(value) => onDraftChange(draftFilter.id, value)}\n layout=\"grid\"\n />\n ),\n formatLabel,\n isSelected,\n};\n","import {\n type ChangeEvent,\n type KeyboardEvent,\n useContext,\n useRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport Search from \"@servicetitan/hammer-icon/mdi/round/search.svg\";\nimport textfieldStyles from \"../../../components/TextField/TextField.module.scss\";\nimport searchFieldStyles from \"../../../components/SearchField/SearchField.module.scss\";\nimport { Icon } from \"../../../components/Icon\";\nimport { useTrackingId } from \"../../../hooks\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport {\n ToolbarContext,\n useToolbarSize,\n} from \"../Toolbar/internal/ToolbarContext\";\nimport {\n getToolbarElements,\n updateToolbarItemsTabIndex,\n} from \"../Toolbar/internal/utils/accessibility\";\nimport type { SearchFilter } from \"./internal/types\";\nimport { PARTS } from \"./parts\";\n\nexport type FilterSearchFieldProps = {\n /** Supplies the placeholder and the input's accessible name. */\n filter: SearchFilter;\n /** Committed query string; empty when cleared. */\n value: string;\n /** Forwards every native change; clearing emits `\"\"`. */\n onChange: (value: string) => void;\n};\n\n/**\n * Pinned search field for FilterBar. Unlike other filter controls it's\n * always visible inline (no trigger button/popover) and stays natively\n * tabbable at all times instead of joining the roving-tabindex pool that\n * moves focus between the other filter chips — it's excluded from that pool\n * via the `data-anv=\"filter-search-field\"` marker below (see the matching\n * exclusion in Toolbar's `getToolbarElements`).\n *\n * Arrow keys at the input's text-cursor boundaries move focus to the clear\n * button or to the first/last filter chip; everywhere else they perform\n * native cursor movement.\n */\nexport const FilterSearchField = ({\n filter,\n value,\n onChange,\n}: FilterSearchFieldProps) => {\n const { toolbarRef } = useContext(ToolbarContext);\n const size = useToolbarSize();\n const hasValue = !!value;\n const inputRef = useRef<HTMLInputElement>(null);\n const clearButtonRef = useRef<HTMLSpanElement>(null);\n const placeholder = filter.placeholder ?? \"Search...\";\n\n const focusRovingItem = (edge: \"first\" | \"last\") => {\n if (!toolbarRef.current) return;\n const items = getToolbarElements(toolbarRef.current);\n const target = (edge === \"first\" ? items[0] : items[items.length - 1]) as\n | HTMLElement\n | undefined;\n if (!target) return;\n updateToolbarItemsTabIndex(toolbarRef.current, target);\n target.focus();\n };\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.value);\n };\n\n const handleClear = () => {\n onChange(\"\");\n inputRef.current?.focus();\n };\n\n const handleInputKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n const input = e.currentTarget;\n\n if (e.code === \"ArrowRight\") {\n if (!hasValue) {\n e.preventDefault();\n focusRovingItem(\"first\");\n } else if (input.selectionStart === input.value.length) {\n e.preventDefault();\n clearButtonRef.current?.focus();\n }\n } else if (e.code === \"ArrowLeft\") {\n if (input.selectionStart === 0) {\n e.preventDefault();\n focusRovingItem(\"last\");\n }\n }\n // Home/End: native cursor movement. No handling needed — this element\n // is excluded from the roving-tabindex pool, so the toolbar's generic\n // keydown handler is already a no-op for events targeting it.\n };\n\n const handleClearKeyDown = (e: KeyboardEvent<HTMLSpanElement>) => {\n if (e.code === \"Enter\" || e.code === \"Space\") {\n e.preventDefault();\n handleClear();\n } else if (e.code === \"ArrowLeft\") {\n e.preventDefault();\n inputRef.current?.focus();\n } else if (e.code === \"ArrowRight\") {\n e.preventDefault();\n focusRovingItem(\"first\");\n }\n };\n\n const trackingId = useTrackingId({\n name: \"FilterSearchField\",\n data: { value },\n });\n\n // The clear button is reached with ArrowRight, not through the tab order.\n return (\n <div\n className={cx(\n textfieldStyles[\"textfield\"],\n searchFieldStyles[\"searchfield\"],\n )}\n data-anv=\"filter-search-field\"\n >\n <div\n className={cx(\n textfieldStyles[\"input-wrapper\"],\n searchFieldStyles[\"input-wrapper\"],\n {\n [textfieldStyles[\"xsmall\"]]: size === \"xsmall\",\n [textfieldStyles[\"small\"]]: size === \"small\",\n [textfieldStyles[\"large\"]]: size === \"large\",\n },\n )}\n role=\"presentation\"\n onClick={() => inputRef.current?.focus()}\n >\n <div aria-hidden className={textfieldStyles[\"prefix\"]}>\n <Icon svg={Search} />\n </div>\n <input\n className={cx(textfieldStyles[\"input\"], searchFieldStyles[\"input\"], {\n [searchFieldStyles[\"input--has-value\"]]: hasValue,\n })}\n ref={inputRef}\n onChange={handleChange}\n onKeyDown={handleInputKeyDown}\n placeholder={placeholder}\n value={value}\n type=\"search\"\n autoComplete=\"off\"\n aria-label={filter.label}\n data-tracking-id={trackingId}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n <Icon\n ref={clearButtonRef}\n aria-label=\"Clear search\"\n svg={Close}\n role=\"button\"\n onClick={handleClear}\n onKeyDown={handleClearKeyDown}\n tabIndex={-1}\n className={searchFieldStyles[\"clear\"]}\n style={{\n visibility: hasValue ? \"visible\" : \"hidden\",\n }}\n {...{ [ANV_PART_ATTR]: PARTS.clearButton }}\n />\n </div>\n </div>\n );\n};\n\nFilterSearchField.displayName = \"FilterSearchField\";\n","import { TextField } from \"../../../../../components/TextField\";\nimport { ANV_PART_ATTR } from \"../../../../../internal/constants/anvParts\";\nimport { FilterSearchField } from \"../../FilterSearchField\";\nimport { PARTS } from \"../../parts\";\nimport type { SearchFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\nconst isSelected = (filter: SearchFilter) =>\n filter.value !== undefined && filter.value !== \"\";\n\nexport const searchAdapter: FilterTypeAdapter<SearchFilter, string> = {\n getValue: (filter) => filter.value ?? \"\",\n // Normalize empty values so active-filter counts treat a cleared field as inactive.\n setValue: (filter, value) => ({ ...filter, value: value || undefined }),\n reset: (filter) => ({ ...filter, value: undefined }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n value: existingFilter.value,\n }),\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n // Always visible inline — no popover/Apply affordance to gate behind, so\n // (like the boolean adapter) this commits on every keystroke regardless\n // of controlledFiltering.\n renderBarControl: ({ filter, updateFilter }) => (\n <FilterSearchField\n key={filter.id}\n filter={filter}\n value={filter.value ?? \"\"}\n onChange={(value) => updateFilter(filter.id, value, true)}\n />\n ),\n renderDrawer: ({ draftFilter, onDraftChange }) => (\n <TextField\n key={draftFilter.id}\n label={draftFilter.label}\n placeholder={draftFilter.placeholder}\n value={draftFilter.value ?? \"\"}\n onChange={(e) =>\n onDraftChange(draftFilter.id, e.target.value || undefined)\n }\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n ),\n formatLabel: (filter) => filter.label,\n isSelected,\n};\n","import { Radio } from \"../../../../../components/Radio\";\nimport { FilterItemWrapper } from \"../../FilterItemWrapper\";\nimport { FilterTriggerButton } from \"../../FilterTriggerButton\";\nimport { SelectFieldSync } from \"../../../../../components/SelectField\";\nimport {\n type SelectMenuOption,\n SelectMenuSync,\n type SelectMenuSyncProps,\n} from \"../../../../../components/SelectMenu\";\nimport type { SingleSelectFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\ntype Value = SelectMenuOption | undefined;\n\nconst formatLabel = (filter: SingleSelectFilter) => {\n if (filter.selectedOption) {\n return `${filter.label}: ${filter.selectedOption.label}`;\n }\n return filter.label;\n};\n\nconst isSelected = (filter: SingleSelectFilter) =>\n filter.selectedOption !== undefined;\n\nconst passThroughMenuProps = (\n filter: SingleSelectFilter,\n): SelectMenuSyncProps => {\n const {\n id: _id,\n label: _label,\n type: _type,\n selectedOption: _selectedOption,\n simpleDrawerVariant: _simpleDrawerVariant,\n drawerOnly: _drawerOnly,\n ...rest\n } = filter;\n return rest as unknown as SelectMenuSyncProps;\n};\n\nexport const singleSelectAdapter: FilterTypeAdapter<SingleSelectFilter, Value> =\n {\n getValue: (filter) => filter.selectedOption,\n setValue: (filter, value) => ({ ...filter, selectedOption: value }),\n reset: (filter) => ({ ...filter, selectedOption: undefined }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n selectedOption: existingFilter.selectedOption,\n }),\n // Options stay consumer-owned; SelectMenuSync matches selection by id.\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n // SelectMenuSync has no confirmation/Apply path; selection and Clear always\n // submit, including when FilterBar `controlledFiltering` is on.\n renderBarControl: ({ filter, updateFilter }) => (\n <FilterItemWrapper key={filter.id}>\n <SelectMenuSync\n {...passThroughMenuProps(filter)}\n id={filter.id}\n label={filter.label}\n value={filter.selectedOption ?? null}\n onSelectedOptionChange={(option) =>\n updateFilter(filter.id, option ?? undefined, true)\n }\n clear={{\n onClick: () => updateFilter(filter.id, undefined, true),\n }}\n trigger={(triggerProps) => (\n <FilterTriggerButton\n {...triggerProps}\n filterId={filter.id}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n />\n )}\n />\n </FilterItemWrapper>\n ),\n\n renderDrawer: ({ originalFilter, draftFilter, onDraftChange }) => {\n if (originalFilter.simpleDrawerVariant) {\n return (\n <div key={draftFilter.id}>\n <Radio.Group legend={originalFilter.label}>\n {originalFilter.options.map((option) => (\n <Radio\n key={option.id}\n name={`${originalFilter.id}-radio`}\n value={String(option.id)}\n label={option.label}\n checked={draftFilter.selectedOption?.id === option.id}\n onChange={(e) => {\n if (e?.target.checked) {\n const selected = originalFilter.options.find(\n (opt) => String(opt.id) === e.target.value,\n );\n onDraftChange(draftFilter.id, selected);\n }\n }}\n />\n ))}\n </Radio.Group>\n </div>\n );\n }\n\n return (\n <SelectFieldSync\n {...passThroughMenuProps(originalFilter)}\n key={draftFilter.id}\n label={originalFilter.label}\n value={draftFilter.selectedOption ?? null}\n onSelectedOptionChange={(option) =>\n onDraftChange(draftFilter.id, option ?? undefined)\n }\n />\n );\n },\n\n formatLabel,\n isSelected,\n };\n","import { TextField } from \"../../../components/TextField\";\nimport type { TextInputFilter } from \"./internal/types\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\n\ninterface FilterTextInputProps {\n /** The text input filter — drives label, placeholder, and max length. */\n filter: TextInputFilter;\n /** Always a string; adapters map a missing filter value to `\"\"`. */\n value: string;\n /** Fires after `maxLength` truncation when that bound is set. */\n onChange: (value: string) => void;\n /**\n * `compact` hides the field's own label (toolbar popover — the filter\n * button doubles as the label); `grid` shows it (drawer cell).\n */\n layout: \"compact\" | \"grid\";\n}\n\n/**\n * Single-line text filter that truncates to `maxLength` before emitting.\n * `showCounter` adds the current/max character count.\n */\nexport const FilterTextInput = ({\n filter,\n value,\n onChange,\n layout,\n}: FilterTextInputProps) => {\n const truncate = (s: string): string =>\n filter.maxLength !== undefined ? s.slice(0, filter.maxLength) : s;\n\n // Discriminated spread: when showCounter is true, the filter's `maxLength`\n // is a concrete `number` (enforced by TextInputFilter), so the prop pair\n // satisfies TextField's MaxLengthCounterProps without leaving an undefined\n // denominator in the rendered counter.\n const counterProps = filter.showCounter\n ? ({ showCounter: true, maxLength: filter.maxLength } as const)\n : ({ maxLength: filter.maxLength } as const);\n\n return (\n <TextField\n label={filter.label}\n hideLabel={layout === \"compact\"}\n placeholder={filter.placeholder}\n value={value}\n onChange={(e) => onChange(truncate(e.target.value))}\n {...counterProps}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n );\n};\n","import { FilterTextInput } from \"../../FilterTextInput\";\nimport { FilterPopoverButton } from \"../../FilterPopoverButton\";\nimport type { TextInputFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\n/*\n * Visual cap on the value rendered inside the trigger button. The trigger\n * forces `white-space: nowrap`, so an un-truncated long value would expand\n * the toolbar and break the layout. The full value still lives in the input\n * (and in `filter.value`); only the closed-button summary is clamped.\n */\nconst TRIGGER_VALUE_MAX_CHARS = 24;\n\nconst formatLabel = (filter: TextInputFilter) => {\n if (!filter.value) return filter.label;\n const display =\n filter.value.length > TRIGGER_VALUE_MAX_CHARS\n ? `${filter.value.slice(0, TRIGGER_VALUE_MAX_CHARS)}…`\n : filter.value;\n return `${filter.label}: ${display}`;\n};\n\nconst isSelected = (filter: TextInputFilter) =>\n filter.value !== undefined && filter.value !== \"\";\n\nexport const textInputAdapter: FilterTypeAdapter<TextInputFilter, string> = {\n getValue: (filter) => filter.value ?? \"\",\n // Normalise empty → undefined on write so `isSelected` / activeFilters lists\n // treat a cleared field as inactive without needing extra guards.\n setValue: (filter, value) => ({ ...filter, value: value || undefined }),\n reset: (filter) => ({ ...filter, value: undefined }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n value: existingFilter.value,\n }),\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n renderBarControl: ({ filter }) => (\n <FilterPopoverButton<string>\n key={filter.id}\n filter={filter}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n committedValue={filter.value ?? \"\"}\n initialValue=\"\"\n // In uncontrolled mode FilterPopoverButton closes the popover after\n // every change by default — for a free-text input that means the\n // popover slams shut after the first keystroke. Keep it open while\n // the user types; the value commits live as it goes.\n keepOpenOnUncontrolledChange\n >\n {({ value, onChange }) => (\n <FilterTextInput\n filter={filter}\n value={value}\n onChange={onChange}\n layout=\"compact\"\n />\n )}\n </FilterPopoverButton>\n ),\n renderDrawer: ({ draftFilter, onDraftChange }) => (\n <FilterTextInput\n key={draftFilter.id}\n filter={draftFilter}\n value={draftFilter.value ?? \"\"}\n onChange={(value) => onDraftChange(draftFilter.id, value || undefined)}\n layout=\"grid\"\n />\n ),\n formatLabel,\n isSelected,\n};\n","import Chip from \"../../../../../components/Chip\";\nimport { ANV_PART_ATTR } from \"../../../../../internal/constants/anvParts\";\nimport { FilterItemWrapper } from \"../../FilterItemWrapper\";\nimport { FilterTriggerButton } from \"../../FilterTriggerButton\";\nimport { PARTS } from \"../../parts\";\nimport { TreeSelectFieldSync } from \"../../../TreeSelectField\";\nimport {\n TreeSelectMenuSync,\n type TreeSelectMenuSyncProps,\n type TreeSelectMenuValue,\n} from \"../../../TreeSelectMenu\";\nimport type { TreeFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\ntype Value = TreeSelectMenuValue[];\n\nconst isSelected = (filter: TreeFilter) =>\n !!filter.selectedNodes && filter.selectedNodes.length > 0;\n\nconst formatLabel = (filter: TreeFilter) => {\n const count = filter.selectedNodes?.length ?? 0;\n if (count === 0) return filter.label;\n const countLabel = count.toString();\n return (\n <>\n {filter.label}\n <Chip\n label={countLabel}\n size=\"small\"\n aria-label={`${countLabel} selected items`}\n {...{ [ANV_PART_ATTR]: PARTS.countBadge }}\n />\n </>\n );\n};\n\nconst passThroughMenuProps = (filter: TreeFilter): TreeSelectMenuSyncProps => {\n const {\n id: _id,\n label: _label,\n type: _type,\n selectedNodes: _selectedNodes,\n drawerOnly: _drawerOnly,\n ...rest\n } = filter;\n return rest as unknown as TreeSelectMenuSyncProps;\n};\n\nexport const treeAdapter: FilterTypeAdapter<TreeFilter, Value> = {\n getValue: (filter) => filter.selectedNodes ?? [],\n setValue: (filter, value) => ({ ...filter, selectedNodes: value }),\n reset: (filter) => ({ ...filter, selectedNodes: [] }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n selectedNodes: existingFilter.selectedNodes,\n }),\n // Options stay consumer-owned; selected nodes already carry id/label.\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n renderBarControl: ({ filter, updateFilter, controlledFiltering }) => (\n <FilterItemWrapper key={filter.id}>\n <TreeSelectMenuSync\n {...passThroughMenuProps(filter)}\n id={filter.id}\n label={filter.label}\n value={filter.selectedNodes ?? []}\n onSelectedOptionsChange={(nodes) =>\n updateFilter(filter.id, nodes, true)\n }\n confirmation={controlledFiltering}\n // Clear commits immediately even while confirmation is buffering picks.\n clear={{\n onClick: () => updateFilter(filter.id, [], true),\n disabled: !isSelected(filter),\n }}\n trigger={(triggerProps) => (\n <FilterTriggerButton\n {...triggerProps}\n filterId={filter.id}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n />\n )}\n />\n </FilterItemWrapper>\n ),\n\n renderDrawer: ({ originalFilter, draftFilter, onDraftChange }) => (\n <TreeSelectFieldSync\n {...passThroughMenuProps(originalFilter)}\n key={draftFilter.id}\n label={originalFilter.label}\n value={draftFilter.selectedNodes ?? []}\n onSelectedOptionsChange={(nodes) => onDraftChange(draftFilter.id, nodes)}\n />\n ),\n\n formatLabel,\n isSelected,\n};\n","import type { Filter } from \"../types\";\nimport { asyncMultiSelectAdapter } from \"./asyncMultiSelect\";\nimport { asyncSelectAdapter } from \"./asyncSelect\";\nimport { asyncTreeAdapter } from \"./asyncTree\";\nimport { booleanAdapter } from \"./boolean\";\nimport { customAdapter } from \"./custom\";\nimport { dateAdapter } from \"./date\";\nimport { dateListAdapter } from \"./dateList\";\nimport { dateRangeAdapter } from \"./dateRange\";\nimport { multiSelectAdapter } from \"./multiSelect\";\nimport { numericRangeAdapter } from \"./numericRange\";\nimport { searchAdapter } from \"./search\";\nimport { singleSelectAdapter } from \"./singleSelect\";\nimport { textInputAdapter } from \"./textInput\";\nimport { treeAdapter } from \"./tree\";\nimport type { FilterAdapters, FilterTypeAdapter } from \"./types\";\n\n/** Runtime registry keyed by Filter[\"type\"]. */\nexport const filterAdapters: FilterAdapters = {\n boolean: booleanAdapter,\n custom: customAdapter,\n singleSelect: singleSelectAdapter,\n multiSelect: multiSelectAdapter,\n date: dateAdapter,\n dateRange: dateRangeAdapter,\n dateList: dateListAdapter,\n asyncSelect: asyncSelectAdapter,\n asyncMultiSelect: asyncMultiSelectAdapter,\n tree: treeAdapter,\n asyncTree: asyncTreeAdapter,\n numericRange: numericRangeAdapter,\n textInput: textInputAdapter,\n search: searchAdapter,\n};\n\n/**\n * Fallback when `filter.type` is missing from {@link filterAdapters}.\n * Reachable only if a caller bypasses TypeScript.\n */\nconst unknownAdapter: FilterTypeAdapter<Filter, unknown> = {\n getValue: () => undefined,\n setValue: (filter) => filter,\n reset: (filter) => filter,\n isActive: () => false,\n preserveState: (newFilter) => newFilter,\n cloneWithItemRefs: (filter) => filter,\n renderBarControl: () => null,\n renderDrawer: () => null,\n formatLabel: (filter) => filter.label,\n isSelected: () => false,\n};\n\n/**\n * Adapter for `filter.type`, widened to Filter / unknown so callers holding\n * the Filter union can invoke adapter methods.\n */\nexport const getAdapter = (\n filter: Filter,\n): FilterTypeAdapter<Filter, unknown> =>\n (filterAdapters[filter.type] as unknown as\n | FilterTypeAdapter<Filter, unknown>\n | undefined) ?? unknownAdapter;\n\nexport type { FilterTypeAdapter } from \"./types\";\n","import { getAdapter } from \"../adapters\";\nimport type { Filter, FilterValue } from \"../types\";\n\nexport { hasChangedFilter } from \"./value-compare\";\n\nexport const getActiveFilters = (filters: Filter[]): Filter[] =>\n filters.filter((filter) => getAdapter(filter).isActive(filter));\n\nexport const checkActiveFilters = (filters: Filter[]): boolean =>\n getActiveFilters(filters).length > 0;\n\nexport const resetFilters = (filters: Filter[]): Filter[] =>\n filters.map((filter) => getAdapter(filter).reset(filter) as Filter);\n\nexport const updateSingleFilter = (\n filters: Filter[],\n filterId: string,\n value: FilterValue,\n): Filter[] =>\n filters.map((filter) => {\n if (filter.id !== filterId) return filter;\n return getAdapter(filter).setValue(filter, value) as Filter;\n });\n\n/** Uses reference equality to detect a parent-provided selection change. */\nexport const hasFilterSelectionChanged = (\n existingFilter: Filter,\n newFilter: Filter,\n): boolean => {\n const existingValue = getAdapter(existingFilter).getValue(existingFilter);\n const newValue = getAdapter(newFilter).getValue(newFilter);\n return existingValue !== newValue;\n};\n\n/** Keeps selection state when configuration changes without a new selection reference. */\nexport const preserveFilterState = (\n newFilter: Filter,\n existingFilter: Filter,\n): Filter =>\n getAdapter(newFilter).preserveState(newFilter, existingFilter) as Filter;\n\n/** Rebinds selected items to the current items array for equality checks. */\nexport const cloneFiltersWithItemRefs = (filters: Filter[]): Filter[] =>\n filters.map(\n (filter) => getAdapter(filter).cloneWithItemRefs(filter) as Filter,\n );\n"],"names":["FilterTriggerButton","Event","ArrowDropDown","isSelected","formatLabel","passThroughMenuProps","Body","PopoverShell","textfieldStyles","searchFieldStyles","Search","Close"],"mappings":"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"}
1
+ {"version":3,"file":"filter-state-hDtCUggM.js","sources":["../src/beta/components/FilterBar/FilterItemWrapper.tsx","../src/beta/components/FilterBar/parts.ts","../src/beta/components/FilterBar/FilterTriggerButton.tsx","../src/beta/components/FilterBar/internal/adapters/asyncMultiSelect.tsx","../src/beta/components/FilterBar/internal/adapters/asyncSelect.tsx","../src/beta/components/FilterBar/internal/adapters/asyncTree.tsx","../src/beta/components/FilterBar/FilterToggleButton.tsx","../src/beta/components/FilterBar/internal/adapters/boolean.tsx","../src/beta/components/FilterBar/internal/FilterGroupContext.tsx","../src/beta/components/FilterBar/internal/utils/value-compare.ts","../src/beta/components/FilterBar/FilterPopoverButton.tsx","../src/beta/components/FilterBar/internal/adapters/custom.tsx","../src/beta/components/FilterBar/internal/utils/dateConstraints.ts","../src/beta/components/FilterBar/FilterDateSingle.tsx","../src/beta/components/FilterBar/internal/adapters/date.tsx","../src/beta/components/FilterBar/FilterDateRange.tsx","../src/beta/components/FilterBar/internal/utils/dateListLibraryOptions.ts","../src/beta/components/FilterBar/FilterDateList.tsx","../src/beta/components/FilterBar/internal/adapters/dateList.tsx","../src/beta/components/FilterBar/internal/adapters/dateRange.tsx","../src/beta/components/FilterBar/internal/adapters/multiSelect.tsx","../src/beta/components/FilterBar/FilterNumericRange.tsx","../src/beta/components/FilterBar/internal/adapters/numericRange.tsx","../src/beta/components/FilterBar/FilterSearchField.tsx","../src/beta/components/FilterBar/internal/adapters/search.tsx","../src/beta/components/FilterBar/internal/adapters/singleSelect.tsx","../src/beta/components/FilterBar/FilterTextInput.tsx","../src/beta/components/FilterBar/internal/adapters/textInput.tsx","../src/beta/components/FilterBar/internal/adapters/tree.tsx","../src/beta/components/FilterBar/internal/adapters/index.ts","../src/beta/components/FilterBar/internal/utils/filter-state.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport {\n ToolbarItemWrapper,\n type ToolbarItemWrapperProps,\n} from \"../Toolbar/internal/ToolbarItemWrapper\";\nimport type { ToolbarButtonProps } from \"../Toolbar/ToolbarButton\";\n\ntype FilterItemWrapperProps = {\n children: React.ReactNode;\n};\n\n/**\n * FilterItemWrapper wraps a filter control in ToolbarItemWrapper so it\n * registers with the surrounding toolbar context for keyboard navigation.\n */\nexport const FilterItemWrapper = ({ children }: FilterItemWrapperProps) => {\n const props: ToolbarItemWrapperProps = useMemo(\n () => ({\n item: {\n itemType: \"button\",\n itemProps: {\n children: null,\n \"aria-hidden\": true,\n } as ToolbarButtonProps,\n },\n children,\n }),\n [children],\n );\n\n return <ToolbarItemWrapper {...props} />;\n};\n","import { COMMON_PART } from \"../../../internal/constants/anvParts\";\n\n/**\n * `data-anv-part` names for FilterBar's interactive sub-elements.\n *\n * Scope a query by the consumer's `data-cy` on the FilterBar root, or by a\n * filter's `data-id` for a specific filter:\n * `[data-cy=\"x\"] [data-id=\"amount\"] [data-anv-part=\"trigger\"]`.\n *\n * Common roles are re-exported from `COMMON_PART` so their string values stay\n * identical across the suite; FilterBar-specific roles are defined here.\n */\nexport const PARTS = {\n // Common roles (shared values)\n trigger: COMMON_PART.trigger,\n input: COMMON_PART.input,\n dialog: COMMON_PART.dialog,\n applyButton: COMMON_PART.applyButton,\n cancelButton: COMMON_PART.cancelButton,\n /** Clears text in a search/text field — not the whole bar. */\n clearButton: COMMON_PART.clearButton,\n drawer: COMMON_PART.drawer,\n dateInput: COMMON_PART.dateInput,\n dateCalendar: COMMON_PART.dateCalendar,\n\n // FilterBar-specific roles\n /** Trigger that opens the filter drawer (collapsed mode). */\n drawerTrigger: \"drawer-trigger\",\n /** Lower-bound input of a numeric range filter. */\n minInput: \"min-input\",\n /** Upper-bound input of a numeric range filter. */\n maxInput: \"max-input\",\n /**\n * Clears all active filters (inline \"Clear Filters\" and drawer\n * \"Clear All Filters\"). Distinct from `clear-button` on search fields.\n */\n clearFiltersButton: \"clear-filters-button\",\n /**\n * Numeric count badge on a filter trigger / drawer trigger (not a\n * selected-value chip).\n */\n countBadge: \"count-badge\",\n} as const;\n","import { forwardRef, type ReactNode } from \"react\";\nimport ArrowDropDown from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport Event from \"@servicetitan/hammer-icon/mdi/round/event.svg\";\nimport cx from \"classnames\";\nimport { Button, type ButtonProps } from \"../../../components/Button\";\nimport { useToolbarSize } from \"../Toolbar/internal/ToolbarContext\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\n\nimport styles from \"./FilterBar.module.scss\";\n\n/**\n * Props that drive the visual identity of a filter's bar trigger — shared by\n * any popover/menu primitive that wants the standard filter-trigger styling.\n *\n * All other Button props (ref, onClick, onKeyDown, aria-*, data-state, …) are\n * accepted via spread, which lets this component slot underneath any menu\n * primitive's trigger render-prop (`SelectMenu`, `MultiSelectMenu`,\n * `FilterDateSingle` / `FilterDateRange`'s popover shell) or, for `custom`,\n * `FilterPopoverButton`.\n */\nexport type FilterTriggerButtonProps = Omit<\n ButtonProps,\n \"children\" | \"icon\"\n> & {\n /** Filter id — emitted as `data-id` for test selectors and analytics. */\n filterId: string;\n /** Visible trigger text; adapters typically pass `formatLabel(filter)`. */\n label: ReactNode;\n /** Whether the filter has a committed selection (drives the selected-state class). */\n isSelected: boolean;\n /**\n * Trigger icon.\n * - `calendar` → leading Event icon (used by date-shaped filters)\n * - `dropdown` → trailing chevron (default)\n * @default \"dropdown\"\n */\n icon?: \"calendar\" | \"dropdown\";\n};\n\n/**\n * FilterTriggerButton is the styled trigger primitive used by every popover-\n * or menu-based filter type. It owns the visual identity (ghost appearance,\n * toolbar-sized, selected-state, dropdown/calendar icon, data-id) and nothing\n * else — open state and popover wiring belong to whatever component composes\n * it (a menu's trigger render-prop, the date popover shells, or\n * `FilterPopoverButton` for `custom`).\n */\nexport const FilterTriggerButton = forwardRef<\n HTMLButtonElement,\n FilterTriggerButtonProps\n>(function FilterTriggerButton(\n { filterId, label, isSelected, icon = \"dropdown\", className, ...rest },\n ref,\n) {\n const toolbarSize = useToolbarSize();\n\n const iconOptions =\n icon === \"calendar\" ? { before: Event } : { after: ArrowDropDown };\n\n const buttonClass = cx(\n styles[\"filter-button-trigger\"],\n {\n [styles[\"filter-button-trigger--selected\"]]: isSelected,\n },\n className,\n );\n\n return (\n <Button\n ref={ref}\n appearance=\"ghost\"\n size={toolbarSize}\n icon={iconOptions}\n data-id={filterId}\n data-anv=\"toolbar-button\"\n className={buttonClass}\n {...rest}\n {...{ [ANV_PART_ATTR]: PARTS.trigger }}\n >\n {label}\n </Button>\n );\n});\n","import Chip from \"../../../../../components/Chip\";\nimport { ANV_PART_ATTR } from \"../../../../../internal/constants/anvParts\";\nimport { FilterItemWrapper } from \"../../FilterItemWrapper\";\nimport { FilterTriggerButton } from \"../../FilterTriggerButton\";\nimport { PARTS } from \"../../parts\";\nimport { MultiSelectField } from \"../../../../../components/MultiSelectField\";\nimport {\n MultiSelectMenu,\n type MultiSelectMenuOption,\n type MultiSelectMenuProps,\n} from \"../../../../../components/MultiSelectMenu\";\nimport type { AsyncMultiSelectFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\ntype Value = MultiSelectMenuOption[];\n\nconst isSelected = (filter: AsyncMultiSelectFilter) =>\n !!filter.selectedOptions && filter.selectedOptions.length > 0;\n\nconst formatLabel = (filter: AsyncMultiSelectFilter) => {\n const count = filter.selectedOptions?.length ?? 0;\n if (count === 0) return filter.label;\n const countLabel = count.toString();\n return (\n <>\n {filter.label}\n <Chip\n label={countLabel}\n size=\"small\"\n aria-label={`${countLabel} selected items`}\n {...{ [ANV_PART_ATTR]: PARTS.countBadge }}\n />\n </>\n );\n};\n\nconst passThroughMenuProps = (\n filter: AsyncMultiSelectFilter,\n): MultiSelectMenuProps => {\n const {\n id: _id,\n label: _label,\n type: _type,\n selectedOptions: _selectedOptions,\n drawerOnly: _drawerOnly,\n ...rest\n } = filter;\n return rest as unknown as MultiSelectMenuProps;\n};\n\nexport const asyncMultiSelectAdapter: FilterTypeAdapter<\n AsyncMultiSelectFilter,\n Value\n> = {\n getValue: (filter) => filter.selectedOptions ?? [],\n setValue: (filter, value) => ({ ...filter, selectedOptions: value }),\n reset: (filter) => ({ ...filter, selectedOptions: [] }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n selectedOptions: existingFilter.selectedOptions,\n }),\n // No items array to rebind; MultiSelectMenu matches committed options by id.\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n renderBarControl: ({ filter, updateFilter, controlledFiltering }) => (\n <FilterItemWrapper key={filter.id}>\n <MultiSelectMenu\n {...passThroughMenuProps(filter)}\n id={filter.id}\n label={filter.label}\n value={filter.selectedOptions ?? []}\n onSelectedOptionsChange={(options) =>\n updateFilter(filter.id, options, true)\n }\n confirmation={controlledFiltering}\n // Clear commits immediately even while confirmation is buffering picks.\n clear={{\n onClick: () => updateFilter(filter.id, [], true),\n }}\n trigger={(triggerProps) => (\n <FilterTriggerButton\n {...triggerProps}\n filterId={filter.id}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n />\n )}\n />\n </FilterItemWrapper>\n ),\n\n renderDrawer: ({ originalFilter, draftFilter, onDraftChange }) => (\n <MultiSelectField\n {...passThroughMenuProps(originalFilter)}\n key={draftFilter.id}\n label={originalFilter.label}\n value={draftFilter.selectedOptions ?? []}\n onSelectedOptionsChange={(options) =>\n onDraftChange(draftFilter.id, options)\n }\n />\n ),\n\n formatLabel,\n isSelected,\n};\n","import { FilterItemWrapper } from \"../../FilterItemWrapper\";\nimport { FilterTriggerButton } from \"../../FilterTriggerButton\";\nimport { SelectField } from \"../../../../../components/SelectField\";\nimport {\n SelectMenu,\n type SelectMenuOption,\n type SelectMenuProps,\n} from \"../../../../../components/SelectMenu\";\nimport type { AsyncSelectFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\ntype Value = SelectMenuOption | undefined;\n\nconst formatLabel = (filter: AsyncSelectFilter) => {\n if (filter.selectedOption) {\n return `${filter.label}: ${filter.selectedOption.label}`;\n }\n return filter.label;\n};\n\nconst isSelected = (filter: AsyncSelectFilter) =>\n filter.selectedOption !== undefined;\n\nconst passThroughMenuProps = (filter: AsyncSelectFilter): SelectMenuProps => {\n const {\n id: _id,\n label: _label,\n type: _type,\n selectedOption: _selectedOption,\n drawerOnly: _drawerOnly,\n ...rest\n } = filter;\n return rest as unknown as SelectMenuProps;\n};\n\nexport const asyncSelectAdapter: FilterTypeAdapter<AsyncSelectFilter, Value> = {\n getValue: (filter) => filter.selectedOption,\n setValue: (filter, value) => ({ ...filter, selectedOption: value }),\n reset: (filter) => ({ ...filter, selectedOption: undefined }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n selectedOption: existingFilter.selectedOption,\n }),\n // No items array to rebind; SelectMenu matches the committed option by id.\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n // SelectMenu has no confirmation/Apply path; selection and Clear always\n // submit, including when FilterBar `controlledFiltering` is on.\n renderBarControl: ({ filter, updateFilter }) => (\n <FilterItemWrapper key={filter.id}>\n <SelectMenu\n {...passThroughMenuProps(filter)}\n id={filter.id}\n label={filter.label}\n value={filter.selectedOption ?? null}\n onSelectedOptionChange={(option) =>\n updateFilter(filter.id, option ?? undefined, true)\n }\n clear={{\n onClick: () => updateFilter(filter.id, undefined, true),\n }}\n trigger={(triggerProps) => (\n <FilterTriggerButton\n {...triggerProps}\n filterId={filter.id}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n />\n )}\n />\n </FilterItemWrapper>\n ),\n\n renderDrawer: ({ originalFilter, draftFilter, onDraftChange }) => (\n <SelectField\n {...passThroughMenuProps(originalFilter)}\n key={draftFilter.id}\n label={originalFilter.label}\n value={draftFilter.selectedOption ?? null}\n onSelectedOptionChange={(option) =>\n onDraftChange(draftFilter.id, option ?? undefined)\n }\n />\n ),\n\n formatLabel,\n isSelected,\n};\n","import Chip from \"../../../../../components/Chip\";\nimport { ANV_PART_ATTR } from \"../../../../../internal/constants/anvParts\";\nimport { FilterItemWrapper } from \"../../FilterItemWrapper\";\nimport { FilterTriggerButton } from \"../../FilterTriggerButton\";\nimport { PARTS } from \"../../parts\";\nimport { TreeSelectField } from \"../../../TreeSelectField\";\nimport {\n TreeSelectMenu,\n type TreeSelectMenuProps,\n type TreeSelectMenuValue,\n} from \"../../../TreeSelectMenu\";\nimport type { AsyncTreeFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\ntype Value = TreeSelectMenuValue[];\n\nconst isSelected = (filter: AsyncTreeFilter) =>\n !!filter.selectedNodes && filter.selectedNodes.length > 0;\n\nconst formatLabel = (filter: AsyncTreeFilter) => {\n const count = filter.selectedNodes?.length ?? 0;\n if (count === 0) return filter.label;\n const countLabel = count.toString();\n return (\n <>\n {filter.label}\n <Chip\n label={countLabel}\n size=\"small\"\n aria-label={`${countLabel} selected items`}\n {...{ [ANV_PART_ATTR]: PARTS.countBadge }}\n />\n </>\n );\n};\n\nconst passThroughMenuProps = (filter: AsyncTreeFilter): TreeSelectMenuProps => {\n const {\n id: _id,\n label: _label,\n type: _type,\n selectedNodes: _selectedNodes,\n drawerOnly: _drawerOnly,\n ...rest\n } = filter;\n return rest as unknown as TreeSelectMenuProps;\n};\n\nexport const asyncTreeAdapter: FilterTypeAdapter<AsyncTreeFilter, Value> = {\n getValue: (filter) => filter.selectedNodes ?? [],\n setValue: (filter, value) => ({ ...filter, selectedNodes: value }),\n reset: (filter) => ({ ...filter, selectedNodes: [] }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n selectedNodes: existingFilter.selectedNodes,\n }),\n // No static options tree to rebind; selected nodes already carry id/label.\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n renderBarControl: ({ filter, updateFilter, controlledFiltering }) => (\n <FilterItemWrapper key={filter.id}>\n <TreeSelectMenu\n {...passThroughMenuProps(filter)}\n id={filter.id}\n label={filter.label}\n value={filter.selectedNodes ?? []}\n onSelectedOptionsChange={(nodes) =>\n updateFilter(filter.id, nodes, true)\n }\n confirmation={controlledFiltering}\n // Clear commits immediately even while confirmation is buffering picks.\n clear={{\n onClick: () => updateFilter(filter.id, [], true),\n disabled: !isSelected(filter),\n }}\n trigger={(triggerProps) => (\n <FilterTriggerButton\n {...triggerProps}\n filterId={filter.id}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n />\n )}\n />\n </FilterItemWrapper>\n ),\n\n renderDrawer: ({ originalFilter, draftFilter, onDraftChange }) => (\n <TreeSelectField\n {...passThroughMenuProps(originalFilter)}\n key={draftFilter.id}\n label={originalFilter.label}\n value={draftFilter.selectedNodes ?? []}\n onSelectedOptionsChange={(nodes) => onDraftChange(draftFilter.id, nodes)}\n />\n ),\n\n formatLabel,\n isSelected,\n};\n","import {\n ToolbarButtonToggle,\n type ToolbarButtonToggleProps,\n} from \"../Toolbar/ToolbarButtonToggle\";\nimport { FilterItemWrapper } from \"./FilterItemWrapper\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\n\nimport styles from \"./FilterBar.module.scss\";\n\n/**\n * @extends Omit<ToolbarButtonToggleProps, \"checked\">\n */\nexport type FilterToggleButtonProps = Omit<\n ToolbarButtonToggleProps,\n \"checked\"\n> & {\n /** Filter id forwarded to the toolbar toggle. */\n id: string;\n /** On-state for a boolean filter. */\n checked: boolean;\n children: React.ReactNode;\n};\n\n/** Boolean-filter trigger wrapped for FilterBar keyboard navigation. */\nexport const FilterToggleButton = ({\n id,\n checked,\n children,\n ...props\n}: FilterToggleButtonProps) => {\n return (\n <FilterItemWrapper>\n <ToolbarButtonToggle\n id={id}\n checked={checked}\n isFilter\n {...props}\n className={styles[\"filter-button-trigger\"]}\n data-anv=\"toolbar-boolean-filter\"\n {...{ [ANV_PART_ATTR]: PARTS.trigger }}\n >\n {children}\n </ToolbarButtonToggle>\n </FilterItemWrapper>\n );\n};\n","import { Checkbox } from \"../../../../../components/Checkbox\";\nimport { ANV_PART_ATTR } from \"../../../../../internal/constants/anvParts\";\nimport { FilterToggleButton } from \"../../FilterToggleButton\";\nimport { PARTS } from \"../../parts\";\nimport type { BooleanFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\nexport const booleanAdapter: FilterTypeAdapter<BooleanFilter, boolean> = {\n getValue: (filter) => filter.checked,\n setValue: (filter, value) => ({ ...filter, checked: value }),\n reset: (filter) => ({ ...filter, checked: false }),\n isActive: (filter) => filter.checked,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n checked: existingFilter.checked,\n }),\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n // No popover or Apply step; boolean changes always submit immediately.\n renderBarControl: ({ filter, updateFilter }) => (\n <FilterToggleButton\n key={filter.id}\n id={filter.id}\n checked={filter.checked}\n onClick={() => updateFilter(filter.id, !filter.checked, true)}\n >\n {filter.label}\n </FilterToggleButton>\n ),\n renderDrawer: ({ draftFilter, onDraftChange }) => (\n <Checkbox\n key={draftFilter.id}\n data-id={draftFilter.id}\n label={draftFilter.label}\n checked={draftFilter.checked}\n onChange={(e) =>\n onDraftChange(draftFilter.id, e?.target.checked ?? false)\n }\n {...{ [ANV_PART_ATTR]: PARTS.trigger }}\n />\n ),\n formatLabel: (filter) => filter.label,\n isSelected: (filter) => filter.checked,\n};\n","import { createContext, type RefObject } from \"react\";\nimport type { FilterBarProps } from \"../FilterBar\";\nimport type { Filter, FilterValue } from \"./types\";\n\n/**\n * FilterBar props plus state shared with the drawer and adapters.\n *\n * @extends FilterBarProps\n */\ntype FilterGroupContextProps = FilterBarProps & {\n /** FilterBar root used for toolbar keyboard navigation. */\n filterGroupRef: RefObject<HTMLDivElement>;\n filters: Filter[];\n /** Updates one filter and optionally submits the full list. */\n updateFilter: (filterId: string, value: FilterValue, submit: boolean) => void;\n /** Filters configured as drawer-only and never rendered inline. */\n drawerOnlyFilters: Filter[];\n /** Whether the container is wide enough to render filters inline. */\n showInlineFilters: boolean;\n};\n\n/** Shared FilterBar state for the drawer and adapters. */\nexport const FilterGroupContext = createContext<FilterGroupContextProps>({\n filterGroupRef: { current: null },\n filters: [],\n updateFilter: () => {},\n onFilterChange: () => {},\n controlledFiltering: false,\n associatedContent: \"\",\n showInlineFilters: false,\n drawerOnlyFilters: [],\n});\n","/**\n * Determines if two filter values are different.\n * For arrays (multiSelect), compares by id set (order-insensitive, avoids JSON serialization).\n * For singleSelect, compares by id if both are objects with id.\n * For dateList selections (objects with both id and value), compares id AND value\n * so re-picking the same library option with a different date still counts as a change.\n *\n * Intentionally adapter-free — kept here (rather than in filter-state.ts) so that\n * FilterPopoverButton can import it without pulling the adapter registry into\n * the import graph. filter-state.ts depends on the adapter registry; the registry\n * depends on FilterPopoverButton; FilterPopoverButton would otherwise depend on\n * filter-state — closing a runtime-evaluated cycle.\n */\nexport const hasChangedFilter = <T>(a: T, b: T): boolean => {\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return true;\n if (a.length === 0) return false;\n const aItems = a as Array<{ id?: unknown }>;\n const bItems = b as Array<{ id?: unknown }>;\n if (aItems[0] && \"id\" in aItems[0]) {\n const aIds = new Set(aItems.map((item) => item.id));\n return (bItems as Array<{ id: unknown }>).some(\n (item) => !aIds.has(item.id),\n );\n }\n return JSON.stringify(a) !== JSON.stringify(b);\n }\n if (\n a &&\n b &&\n typeof a === \"object\" &&\n typeof b === \"object\" &&\n \"id\" in a &&\n \"id\" in b\n ) {\n if (a.id !== b.id) return true;\n if (\"value\" in a && \"value\" in b) {\n return JSON.stringify(a.value) !== JSON.stringify(b.value);\n }\n return false;\n }\n return a !== b;\n};\n","import {\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport type { Filter } from \"./internal/types\";\nimport { FilterGroupContext } from \"./internal/FilterGroupContext\";\nimport { hasChangedFilter } from \"./internal/utils/value-compare\";\nimport { FilterItemWrapper } from \"./FilterItemWrapper\";\nimport { FilterTriggerButton } from \"./FilterTriggerButton\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport {\n MenuFooter,\n type MenuFooterClearConfig,\n} from \"../../../internal/components/MenuFooter/MenuFooter\";\nimport {\n ANV_PART_ATTR,\n COMMON_PART,\n} from \"../../../internal/constants/anvParts\";\n\n/**\n * Render-prop ctx passed to FilterPopoverButton's children. The `custom`\n * adapter (and any consumer using a `custom` filter) uses this to receive the\n * draft (or committed) value and an `onChange` for its rendered body.\n *\n * When commitOnSelect is false (the default), `value` is the in-progress draft\n * and `onChange` updates it; the user must click Apply for it to commit.\n *\n * When commitOnSelect is true, `value` is the filter's currently-committed\n * value and `onChange` commits immediately (and closes the popover).\n */\nexport type FilterPopoverButtonRenderCtx<V = unknown> = {\n value: V;\n onChange: (value: V) => void;\n};\n\n/**\n * Base props shared by both commit modes. `commitOnSelect` is left out so each\n * variant can refine it as a literal; that's what lets `initialValue` be required\n * for the draft branch and absent for the commit-on-select branch.\n */\ntype FilterPopoverButtonBaseProps<V> = {\n /** The filter being edited. Used for id and dispatching commits. */\n filter: Filter;\n /** Trigger button label. Adapters typically pass adapter.formatLabel(filter). */\n label: ReactNode;\n /** Whether the filter currently has a non-default value (drives selected styling). */\n isSelected: boolean;\n /**\n * The filter's currently-committed value. Used to seed the draft on open and\n * to detect parent-provided changes mid-open. Adapters typically pass\n * adapter.getValue(filter).\n */\n committedValue: V;\n /** Body content as a render-prop. Receives draft (or live) value + onChange. */\n children: (ctx: FilterPopoverButtonRenderCtx<V>) => ReactNode;\n};\n\n/**\n * Draft-mode props: requires `initialValue` so each consumer declares what\n * \"empty draft\" means for its V (e.g. an array-shaped custom filter passes\n * `[]`, a nullable scalar passes `null`). Eliminates the `[] as unknown as V`\n * cast and forces non-nullable V consumers to opt in explicitly.\n */\ntype DraftModeProps<V> = FilterPopoverButtonBaseProps<V> & {\n commitOnSelect?: false;\n /**\n * Initial draft value used until the popover opens and the draft is seeded\n * from `committedValue`. Each adapter owns the empty-state for its V.\n */\n initialValue: V;\n /**\n * If true, in uncontrolled mode the popover stays open after a body change\n * instead of closing — for multi-selection workflows.\n * @default false\n */\n keepOpenOnUncontrolledChange?: boolean;\n /**\n * Configures a \"Clear\" button in the popover footer. Presence enables it.\n * Clear commits immediately regardless of `controlledFiltering`.\n */\n clear?: MenuFooterClearConfig;\n};\n\n/**\n * Commit-on-select props: no draft state exists, so `initialValue` and\n * `keepOpenOnUncontrolledChange` don't apply.\n */\ntype CommitOnSelectProps<V> = FilterPopoverButtonBaseProps<V> & {\n commitOnSelect: true;\n};\n\ntype FilterPopoverButtonProps<V> = DraftModeProps<V> | CommitOnSelectProps<V>;\n\n/**\n * FilterPopoverButton is the popover-based trigger primitive used by the\n * `custom` filter adapter (and anything else that needs to render an\n * adapter-agnostic popover body with draft / Apply-Cancel semantics).\n *\n * Other filter types (`singleSelect`, `multiSelect`, `asyncSelect`,\n * `asyncMultiSelect`, `date`, `dateRange`, `dateList`) compose menu primitives\n * (`SelectMenu`, `MultiSelectMenu`) or their own popover shells directly and\n * do not go through this component.\n */\nexport const FilterPopoverButton = <V,>(props: FilterPopoverButtonProps<V>) => {\n const { filter, label, isSelected, committedValue, children } = props;\n const commitOnSelect = props.commitOnSelect === true;\n const initialValue = commitOnSelect ? undefined : props.initialValue;\n const keepOpenOnUncontrolledChange =\n !commitOnSelect && (props.keepOpenOnUncontrolledChange ?? false);\n const clear = commitOnSelect ? undefined : props.clear;\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n const popoverId = useId();\n const [isOpen, setIsOpen] = useState(false);\n const { updateFilter, controlledFiltering } = useContext(FilterGroupContext);\n\n const [draftValue, setDraftValue] = useState<V | undefined>(initialValue);\n\n // Ref to track draftValue without causing handleDraftChange to recreate.\n const draftValueRef = useRef<V | undefined>(draftValue);\n\n useEffect(() => {\n draftValueRef.current = draftValue;\n }, [draftValue]);\n\n const prevIsOpenRef = useRef(isOpen);\n const prevCommittedValueRef = useRef<V>(committedValue);\n\n // Seed/re-sync draft when the popover opens or committedValue changes\n // mid-open. Skipped entirely in commit-on-select mode.\n useEffect(() => {\n if (commitOnSelect) return;\n\n const justOpened = isOpen && !prevIsOpenRef.current;\n prevIsOpenRef.current = isOpen;\n\n if (isOpen) {\n const shouldSync =\n justOpened || prevCommittedValueRef.current !== committedValue;\n\n if (shouldSync) {\n setDraftValue(committedValue);\n }\n\n prevCommittedValueRef.current = committedValue;\n }\n }, [isOpen, committedValue, commitOnSelect]);\n\n const closeAndRestoreFocus = useCallback(() => {\n setIsOpen(false);\n triggerRef.current?.focus();\n }, []);\n\n const handleDraftChange = useCallback(\n (value: V) => {\n if (commitOnSelect) {\n if (hasChangedFilter(value, committedValue)) {\n updateFilter(filter.id, value, true);\n }\n closeAndRestoreFocus();\n return;\n }\n\n if (!hasChangedFilter(value, draftValueRef.current)) return;\n\n // Sync ref immediately to guard against duplicate calls (e.g. from\n // ListView re-renders).\n draftValueRef.current = value;\n setDraftValue(value);\n\n if (!controlledFiltering) {\n updateFilter(filter.id, value, true);\n if (!keepOpenOnUncontrolledChange) {\n closeAndRestoreFocus();\n }\n }\n },\n [\n commitOnSelect,\n committedValue,\n controlledFiltering,\n filter.id,\n keepOpenOnUncontrolledChange,\n updateFilter,\n closeAndRestoreFocus,\n ],\n );\n\n const handleApply = useCallback(() => {\n if (hasChangedFilter(draftValue, committedValue)) {\n updateFilter(filter.id, draftValue, true);\n }\n closeAndRestoreFocus();\n }, [\n draftValue,\n committedValue,\n filter.id,\n updateFilter,\n closeAndRestoreFocus,\n ]);\n\n const handleCancel = useCallback(() => {\n // Uncontrolled edits already committed on change; Cancel only closes.\n if (!controlledFiltering) {\n closeAndRestoreFocus();\n return;\n }\n setDraftValue(committedValue);\n closeAndRestoreFocus();\n }, [controlledFiltering, committedValue, closeAndRestoreFocus]);\n\n // OptionsPopover invokes this on outside-press, focus-out, and Escape.\n const handlePopoverClose = useCallback(() => {\n if (commitOnSelect) {\n setIsOpen(false);\n return;\n }\n if (controlledFiltering) {\n setDraftValue(committedValue);\n setIsOpen(false);\n } else if (keepOpenOnUncontrolledChange) {\n // Uncontrolled + already-committed-on-change; just close.\n setIsOpen(false);\n } else {\n if (hasChangedFilter(draftValueRef.current, committedValue)) {\n updateFilter(filter.id, draftValueRef.current as V, true);\n }\n setIsOpen(false);\n }\n }, [\n commitOnSelect,\n controlledFiltering,\n keepOpenOnUncontrolledChange,\n committedValue,\n filter.id,\n updateFilter,\n ]);\n\n // In draft mode `draftValue` is always defined (seeded from `initialValue`,\n // then `committedValue` on open). The `as V` is only to widen the\n // `V | undefined` state type used by the commit-on-select branch.\n const bodyValue: V = commitOnSelect ? committedValue : (draftValue as V);\n\n const showConfirmationFooter = controlledFiltering && !commitOnSelect;\n const showFooter = Boolean(clear) || showConfirmationFooter;\n\n // Enter submits in controlled mode (form-style apply). In uncontrolled mode\n // the body change already commits immediately, so Enter is a no-op there.\n // Bind the listener to the popover element instead of a wrapper div so we\n // don't introduce a non-interactive element with key handlers.\n useEffect(() => {\n if (!isOpen || !showConfirmationFooter) return;\n const popoverEl = document.getElementById(popoverId);\n if (!popoverEl) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key !== \"Enter\" || e.defaultPrevented) return;\n // Clear and Cancel activate themselves on Enter. Applying here would\n // commit the draft first, and moving focus to the trigger can drop\n // the button's own click.\n const part = (e.target as Element | null)\n ?.closest(\"button\")\n ?.getAttribute(ANV_PART_ATTR);\n if (\n part === COMMON_PART.clearButton ||\n part === COMMON_PART.cancelButton\n ) {\n return;\n }\n handleApply();\n };\n popoverEl.addEventListener(\"keydown\", handler);\n return () => popoverEl.removeEventListener(\"keydown\", handler);\n }, [isOpen, showConfirmationFooter, popoverId, handleApply]);\n\n return (\n <FilterItemWrapper>\n <FilterTriggerButton\n ref={triggerRef}\n filterId={filter.id}\n label={label}\n isSelected={isSelected}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={popoverId}\n onClick={() => setIsOpen((prev) => !prev)}\n onKeyDown={(e) => {\n // When focus is still on the trigger after opening the popover (no\n // body element auto-focuses), Escape needs to close from here —\n // OptionsPopover only listens on its own subtree.\n if (e.key === \"Escape\" && isOpen) {\n e.preventDefault();\n handlePopoverClose();\n }\n }}\n />\n <OptionsPopover\n id={popoverId}\n referenceElement={triggerRef}\n open={isOpen}\n onClose={handlePopoverClose}\n footer={\n showFooter ? (\n <MenuFooter\n clear={\n clear\n ? {\n ...clear,\n onClick: () => {\n clear.onClick();\n // Close directly. handlePopoverClose does not restore\n // focus, and in controlled mode it writes the previous\n // committed value back into the draft.\n closeAndRestoreFocus();\n },\n }\n : undefined\n }\n confirmation={\n showConfirmationFooter\n ? {\n onApply: handleApply,\n onCancel: handleCancel,\n }\n : undefined\n }\n />\n ) : undefined\n }\n >\n {children({ value: bodyValue, onChange: handleDraftChange })}\n </OptionsPopover>\n </FilterItemWrapper>\n );\n};\n","import Chip from \"../../../../../components/Chip\";\nimport { ANV_PART_ATTR } from \"../../../../../internal/constants/anvParts\";\nimport { FilterPopoverButton } from \"../../FilterPopoverButton\";\nimport { PARTS } from \"../../parts\";\nimport type { CustomFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\nconst formatLabel = (filter: CustomFilter<unknown>) => {\n if (filter.labelChipCount) {\n return (\n <>\n {filter.label}\n <Chip\n label={filter.labelChipCount.toString()}\n size=\"small\"\n aria-label={`${filter.labelChipCount} selected items`}\n {...{ [ANV_PART_ATTR]: PARTS.countBadge }}\n />\n </>\n );\n }\n return filter.label;\n};\n\nexport const customAdapter: FilterTypeAdapter<\n CustomFilter<unknown>,\n unknown\n> = {\n getValue: (filter) => filter.value,\n setValue: (filter, value) => ({ ...filter, value }),\n reset: (filter) => ({ ...filter, value: undefined }),\n isActive: (filter) => filter.value !== undefined,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n value: existingFilter.value,\n }),\n cloneWithItemRefs: (filter) => {\n const { value } = filter;\n // A shared object/array value would mutate the bar's committed custom\n // value as the user edits the drawer draft.\n if (value === undefined) return { ...filter, value: undefined };\n if (Array.isArray(value)) return { ...filter, value: [...value] };\n if (typeof value === \"object\" && value !== null) {\n return { ...filter, value: { ...value } };\n }\n return { ...filter, value };\n },\n\n renderBarControl: ({ filter }) => (\n <FilterPopoverButton\n key={filter.id}\n filter={filter}\n label={formatLabel(filter)}\n isSelected={filter.value !== undefined}\n committedValue={filter.value}\n initialValue={undefined}\n >\n {({ value, onChange }) =>\n // Narrows the CustomFilter union (`buttonRender` is `never` when\n // drawerOnly).\n filter.drawerOnly ? null : filter.buttonRender({ value, onChange })\n }\n </FilterPopoverButton>\n ),\n renderDrawer: ({ originalFilter, draftFilter, onDraftChange }) => (\n <div key={draftFilter.id}>\n {originalFilter.drawerRender?.({\n value: draftFilter.value,\n onChange: (value) => onDraftChange(draftFilter.id, value),\n })}\n </div>\n ),\n formatLabel,\n isSelected: (filter) => filter.value !== undefined,\n};\n","import { DateTime, type WeekdayNumbers } from \"luxon\";\nimport type { DateMode } from \"../../../../../components/DateFieldSingle/types\";\nimport { DateModeToFormatMap } from \"../../../../../components/DateFieldSingle/internal/constants\";\nimport type {\n DateFilter,\n DateFilterErrorReason,\n DateRangeFilter,\n DateRangeFilterErrorContext,\n} from \"../types\";\n\ntype DateConstraints = Pick<DateFilter, \"minDate\" | \"maxDate\" | \"unavailable\">;\n\ntype RangeValue = { startDate: string | null; endDate: string | null } | null;\n\nconst toDate = (value?: string | null): DateTime | null => {\n if (!value) return null;\n const date = DateTime.fromISO(value, { zone: \"utc\" }).startOf(\"day\");\n return date.isValid ? date : null;\n};\n\n/**\n * First constraint a single ISO date violates, or `null` when the value is\n * empty, unparseable, or within all constraints. Checks unavailable, min,\n * then max.\n */\nexport const getDateConstraintReason = (\n value: string | null | undefined,\n { minDate, maxDate, unavailable }: DateConstraints,\n): DateFilterErrorReason | null => {\n const date = toDate(value);\n if (!date) return null;\n\n const unavailableDates = unavailable?.dates\n ?.map(toDate)\n .filter((d): d is DateTime => d !== null);\n if (unavailableDates?.some((d) => d.equals(date))) return \"unavailable\";\n if (unavailable?.daysOfWeek?.includes(date.weekday as WeekdayNumbers)) {\n return \"unavailable\";\n }\n\n const min = toDate(minDate);\n const max = toDate(maxDate);\n if (min && date < min) return \"minDate\";\n if (max && date > max) return \"maxDate\";\n return null;\n};\n\nconst formatDate = (\n value: string | undefined,\n mode: DateMode = \"mm/dd/yyyy\",\n) => {\n const date = toDate(value);\n return date ? date.toFormat(DateModeToFormatMap[mode]) : \"\";\n};\n\nconst defaultReasonMessage = (\n reason: DateFilterErrorReason,\n { minDate, maxDate }: { minDate?: string; maxDate?: string },\n mode?: DateMode,\n): string => {\n switch (reason) {\n case \"minDate\":\n return `Date must be on or after ${formatDate(minDate, mode)}.`;\n case \"maxDate\":\n return `Date must be on or before ${formatDate(maxDate, mode)}.`;\n case \"unavailable\":\n return \"This date is unavailable.\";\n }\n};\n\n/**\n * Resolves the error message (if any) for a single-date filter's current\n * value. Returns the consumer's `getErrorMessage` result when provided,\n * otherwise a default message. `undefined` means the value is valid.\n */\nexport const resolveDateFilterError = (\n filter: DateFilter,\n value: string | null | undefined,\n): string | undefined => {\n const reason = getDateConstraintReason(value, filter);\n if (!reason || !value) return undefined;\n return (\n filter.getErrorMessage?.({ reason, value }) ??\n defaultReasonMessage(\n reason,\n { minDate: filter.minDate, maxDate: filter.maxDate },\n filter.mode,\n )\n );\n};\n\ntype DateRangeViolation =\n | { reason: DateFilterErrorReason; field: \"start\" | \"end\"; value: string }\n | { reason: \"startAfterEnd\" };\n\n/**\n * Returns the first constraint a range violates, or `null` when both endpoints\n * are within all constraints (or empty/unparseable). Checks the start endpoint,\n * then the end endpoint, then start-after-end ordering.\n */\nexport const getDateRangeConstraintViolation = (\n value: RangeValue,\n constraints: DateConstraints,\n): DateRangeViolation | null => {\n const start = value?.startDate ?? null;\n const end = value?.endDate ?? null;\n\n const startReason = getDateConstraintReason(start, constraints);\n if (startReason && start) {\n return { reason: startReason, field: \"start\", value: start };\n }\n const endReason = getDateConstraintReason(end, constraints);\n if (endReason && end) {\n return { reason: endReason, field: \"end\", value: end };\n }\n\n const startDate = toDate(start);\n const endDate = toDate(end);\n if (startDate && endDate && startDate > endDate) {\n return { reason: \"startAfterEnd\" };\n }\n return null;\n};\n\n/**\n * Resolves the error message (if any) for a date-range filter's current value.\n * Returns the consumer's `getErrorMessage` result when provided, otherwise a\n * default message. `undefined` means the range is valid.\n */\nexport const resolveDateRangeFilterError = (\n filter: DateRangeFilter,\n value: RangeValue,\n): string | undefined => {\n const violation = getDateRangeConstraintViolation(value, filter);\n if (!violation) return undefined;\n\n const context: DateRangeFilterErrorContext =\n violation.reason === \"startAfterEnd\"\n ? { reason: \"startAfterEnd\" }\n : {\n reason: violation.reason,\n field: violation.field,\n value: violation.value,\n };\n\n const custom = filter.getErrorMessage?.(context);\n if (custom) return custom;\n\n if (violation.reason === \"startAfterEnd\") {\n return \"Start date must be on or before the end date.\";\n }\n return defaultReasonMessage(\n violation.reason,\n { minDate: filter.minDate, maxDate: filter.maxDate },\n filter.mode,\n );\n};\n","import { useCallback, useId, useRef, useState } from \"react\";\nimport type { DateFilter } from \"./internal/types\";\nimport Flex from \"../../../components/Flex\";\nimport {\n MaskedDateInput,\n type MaskedDateInputRef,\n} from \"../../../components/DateFieldSingle/internal/MaskedDateInput\";\nimport type { DateFieldSingleChange } from \"../../../components/DateFieldSingle\";\nimport { useDateFieldSingleConversion } from \"../../../components/DateFieldSingle/internal/useDateFieldSingleConversion\";\nimport { useDateFieldSingleState } from \"../../../components/DateFieldSingle/internal/useDateFieldSingleState\";\nimport { DateFieldSingleCalendar } from \"../../../components/DateFieldSingle/internal/DateFieldSingleCalendar\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { MenuFooter } from \"../../../internal/components/MenuFooter/MenuFooter\";\nimport { useConfirmationDraft } from \"../../../internal/hooks/useConfirmationDraft\";\nimport { FilterItemWrapper } from \"./FilterItemWrapper\";\nimport { FilterTriggerButton } from \"./FilterTriggerButton\";\nimport { hasChangedFilter } from \"./internal/utils/value-compare\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\nimport { resolveDateFilterError } from \"./internal/utils/dateConstraints\";\n\ntype Value = string | null;\n\ntype InlineProps = {\n /** Renders only the picker body with parent-owned draft state. */\n variant: \"inline\";\n /** Date filter configuration, including format and constraints. */\n filter: DateFilter;\n /** In-progress value shown by the picker. */\n draftValue: Value;\n /** Updates the parent-owned draft. */\n onDraftChange: (value: Value) => void;\n};\n\ntype PopoverProps = {\n /** Renders the toolbar trigger and popover. Defaults to `popover`. */\n variant?: \"popover\";\n /** Date filter configuration, including format and constraints. */\n filter: DateFilter;\n /** Value used to seed or resync the popover draft. */\n committedValue: Value;\n /** Receives the value when the popover commits. */\n onCommit: (value: Value) => void;\n /** Adds Apply/Cancel when true; otherwise picker changes commit immediately. */\n controlledFiltering: boolean;\n /** Content shown in the filter trigger. */\n label: React.ReactNode;\n /** Applies selected styling to the trigger. */\n isSelected: boolean;\n /**\n * Configures a \"Clear\" button in the popover footer. Presence enables it.\n * Clear commits immediately regardless of `controlledFiltering`.\n */\n clear?: {\n onClick: () => void;\n label?: string;\n disabled?: boolean;\n };\n};\n\n/**\n * `popover` owns the trigger and commit flow; `inline` renders the picker body\n * with parent-owned draft state.\n */\nexport type FilterDateSingleProps = InlineProps | PopoverProps;\n\n/** Single-date FilterBar picker with popover and inline variants. */\nexport const FilterDateSingle = (props: FilterDateSingleProps) => {\n if (props.variant === \"inline\") {\n return (\n <Body\n filter={props.filter}\n value={props.draftValue}\n onChange={props.onDraftChange}\n />\n );\n }\n return <PopoverShell {...props} />;\n};\n\ntype BodyProps = {\n filter: DateFilter;\n value: Value;\n onChange: (value: Value) => void;\n};\n\nconst Body = ({\n filter,\n value: draftValue,\n onChange: onDraftChange,\n}: BodyProps) => {\n const maskedDateInputRef = useRef<MaskedDateInputRef>(null);\n\n const handleChange = (change: DateFieldSingleChange) => {\n onDraftChange(change.date);\n };\n\n const { value, minDate, maxDate, unavailable, onChange } =\n useDateFieldSingleConversion({\n value: draftValue,\n onChange: handleChange,\n minDate: filter.minDate,\n maxDate: filter.maxDate,\n unavailable: filter.unavailable,\n });\n\n const { handleInputChange, handleCalendarSelection } =\n useDateFieldSingleState({\n valueProp: value,\n onChange: (change) => onChange({ ...change, isDateValid: true }),\n });\n\n const error = resolveDateFilterError(filter, draftValue);\n\n return (\n <Flex gap={4} direction=\"column\">\n <MaskedDateInput\n mode={filter.mode}\n ref={maskedDateInputRef}\n onChange={handleInputChange}\n lastValidDate={value ?? null}\n autoComplete=\"off\"\n error={error}\n {...{ [ANV_PART_ATTR]: PARTS.dateInput }}\n />\n\n <DateFieldSingleCalendar\n value={value ?? null}\n onSelection={handleCalendarSelection}\n minDate={minDate}\n maxDate={maxDate}\n unavailable={unavailable}\n {...{ [ANV_PART_ATTR]: PARTS.dateCalendar }}\n />\n </Flex>\n );\n};\n\nconst PopoverShell = ({\n filter,\n committedValue,\n onCommit,\n controlledFiltering,\n label,\n isSelected,\n clear,\n}: PopoverProps) => {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const popoverId = useId();\n const [isOpen, setIsOpen] = useState(false);\n\n const isEqual = useCallback(\n (a: Value, b: Value) => !hasChangedFilter(a, b),\n [],\n );\n\n const { displayValue, setDraft, apply, cancel } = useConfirmationDraft<Value>(\n {\n value: committedValue,\n onCommit,\n isOpen,\n enabled: controlledFiltering,\n isEqual,\n },\n );\n\n const handleClose = useCallback(() => {\n if (controlledFiltering) {\n cancel();\n }\n setIsOpen(false);\n }, [controlledFiltering, cancel]);\n\n const handleApply = useCallback(() => {\n apply();\n setIsOpen(false);\n }, [apply]);\n\n return (\n <FilterItemWrapper>\n <FilterTriggerButton\n ref={triggerRef}\n filterId={filter.id}\n label={label}\n isSelected={isSelected}\n icon=\"calendar\"\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n onClick={() => setIsOpen((prev) => !prev)}\n />\n <OptionsPopover\n id={popoverId}\n referenceElement={triggerRef}\n open={isOpen}\n onClose={handleClose}\n footer={\n clear || controlledFiltering ? (\n <MenuFooter\n clear={\n clear\n ? {\n ...clear,\n onClick: () => {\n clear.onClick();\n // Close directly; the commit already happened, so we\n // skip handleClose's cancel-on-controlled path. Restore\n // focus to the trigger, matching Apply / Cancel.\n setIsOpen(false);\n triggerRef.current?.focus();\n },\n }\n : undefined\n }\n confirmation={\n controlledFiltering\n ? {\n onApply: handleApply,\n onCancel: handleClose,\n }\n : undefined\n }\n />\n ) : undefined\n }\n >\n {isOpen ? (\n <Body filter={filter} value={displayValue} onChange={setDraft} />\n ) : null}\n </OptionsPopover>\n </FilterItemWrapper>\n );\n};\n","import { DateTime } from \"luxon\";\nimport { DateFieldSingle } from \"../../../../../components/DateFieldSingle\";\nimport { FilterDateSingle } from \"../../FilterDateSingle\";\nimport type { DateFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\nimport { resolveDateFilterError } from \"../utils/dateConstraints\";\n\ntype Value = string | null;\n\nconst formatLabel = (filter: DateFilter) => {\n if (filter.value) {\n const date = DateTime.fromISO(filter.value, { zone: \"local\" });\n return `${filter.label}: ${date.monthShort} ${date.day}, ${date.year}`;\n }\n return filter.label;\n};\n\nexport const dateAdapter: FilterTypeAdapter<DateFilter, Value> = {\n getValue: (filter) => filter.value ?? null,\n setValue: (filter, value) => ({ ...filter, value }),\n reset: (filter) => ({ ...filter, value: null }),\n isActive: (filter) => filter.value !== null && filter.value !== undefined,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n value: existingFilter.value,\n }),\n cloneWithItemRefs: (filter) => ({ ...filter, value: filter.value ?? null }),\n\n renderBarControl: ({ filter, updateFilter, controlledFiltering }) => (\n <FilterDateSingle\n key={filter.id}\n filter={filter}\n committedValue={filter.value ?? null}\n onCommit={(value) => updateFilter(filter.id, value, true)}\n controlledFiltering={controlledFiltering}\n label={formatLabel(filter)}\n isSelected={!!filter.value}\n clear={{\n onClick: () => updateFilter(filter.id, null, true),\n }}\n />\n ),\n renderDrawer: ({ draftFilter, onDraftChange }) => (\n <DateFieldSingle\n key={draftFilter.id}\n label={draftFilter.label}\n value={(draftFilter.value as string | null) ?? null}\n onChange={(change) => onDraftChange(draftFilter.id, change.date)}\n mode={draftFilter.mode}\n minDate={draftFilter.minDate}\n maxDate={draftFilter.maxDate}\n unavailable={draftFilter.unavailable}\n error={resolveDateFilterError(draftFilter, draftFilter.value ?? null)}\n />\n ),\n formatLabel,\n isSelected: (filter) => !!filter.value,\n};\n","import { useCallback, useId, useRef, useState } from \"react\";\nimport type { DateRangeFilter } from \"./internal/types\";\nimport {\n MaskedDateRangeInput,\n type MaskedDateRangeInputRef,\n} from \"../../../components/DateFieldRange/internal/MaskedDateRangeInput\";\nimport type { DateFieldRangeChange } from \"../../../components/DateFieldRange\";\nimport { useDateFieldRangeConversion } from \"../../../components/DateFieldRange/internal/useDateFieldRangeConversion\";\nimport { useDateFieldRangeState } from \"../../../components/DateFieldRange/internal/useDateFieldRangeState\";\nimport Flex from \"../../../components/Flex\";\nimport { DateFieldRangeCalendar } from \"../../../components/DateFieldRange/internal/DateFieldRangeCalendar\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { MenuFooter } from \"../../../internal/components/MenuFooter/MenuFooter\";\nimport { useConfirmationDraft } from \"../../../internal/hooks/useConfirmationDraft\";\nimport { FilterItemWrapper } from \"./FilterItemWrapper\";\nimport { FilterTriggerButton } from \"./FilterTriggerButton\";\nimport { hasChangedFilter } from \"./internal/utils/value-compare\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\nimport { resolveDateRangeFilterError } from \"./internal/utils/dateConstraints\";\n\ntype Value = { startDate: string | null; endDate: string | null } | null;\n\ntype InlineProps = {\n /** Renders only the picker body with parent-owned draft state. */\n variant: \"inline\";\n /** Date-range filter configuration, including format and constraints. */\n filter: DateRangeFilter;\n /** In-progress range shown by the picker. */\n draftValue: Value;\n /** Updates the parent-owned draft. */\n onDraftChange: (value: Value) => void;\n};\n\ntype PopoverProps = {\n /** Renders the toolbar trigger and popover. Defaults to `popover`. */\n variant?: \"popover\";\n /** Date-range filter configuration, including format and constraints. */\n filter: DateRangeFilter;\n /** Value used to seed or resync the popover draft. */\n committedValue: Value;\n /** Receives the range when the popover commits. */\n onCommit: (value: Value) => void;\n /** Adds Apply/Cancel when true; otherwise picker changes commit immediately. */\n controlledFiltering: boolean;\n /** Content shown in the filter trigger. */\n label: React.ReactNode;\n /** Applies selected styling to the trigger. */\n isSelected: boolean;\n /**\n * Configures a \"Clear\" button in the popover footer. Presence enables it.\n * Clear commits immediately regardless of `controlledFiltering`.\n */\n clear?: {\n onClick: () => void;\n label?: string;\n disabled?: boolean;\n };\n};\n\n/**\n * `popover` owns the trigger and commit flow; `inline` renders the picker body\n * with parent-owned draft state.\n */\nexport type FilterDateRangeProps = InlineProps | PopoverProps;\n\n/** Date-range FilterBar picker with popover and inline variants. */\nexport const FilterDateRange = (props: FilterDateRangeProps) => {\n if (props.variant === \"inline\") {\n return (\n <Body\n filter={props.filter}\n value={props.draftValue}\n onChange={props.onDraftChange}\n />\n );\n }\n return <PopoverShell {...props} />;\n};\n\ntype BodyProps = {\n filter: DateRangeFilter;\n value: Value;\n onChange: (value: Value) => void;\n};\n\nconst Body = ({\n filter,\n value: draftValue,\n onChange: onDraftChange,\n}: BodyProps) => {\n const maskedDateRangeInputRef = useRef<MaskedDateRangeInputRef>(null);\n\n const handleChange = (change: DateFieldRangeChange) => {\n const hasCompleteRange = change.startDate && change.endDate;\n const isClearingRange = !change.startDate && !change.endDate;\n\n if (hasCompleteRange || isClearingRange) {\n onDraftChange({\n startDate: change.startDate,\n endDate: change.endDate,\n });\n }\n };\n\n const { value, minDate, maxDate, unavailable, onChange } =\n useDateFieldRangeConversion({\n value: draftValue,\n onChange: handleChange,\n minDate: filter.minDate,\n maxDate: filter.maxDate,\n unavailable: filter.unavailable,\n });\n\n const { handleInputChange, handleCalendarSelection } = useDateFieldRangeState(\n {\n valueProp: value,\n onChange: (change) => {\n const hasCompleteRange = change.startDate && change.endDate;\n const isClearingRange = change.isInputEmpty;\n\n if ((change.isInputValid && hasCompleteRange) || isClearingRange) {\n onChange({ ...change, isDateRangeValid: true });\n }\n },\n },\n );\n\n const error = resolveDateRangeFilterError(filter, draftValue);\n\n return (\n <Flex gap={4} direction=\"column\">\n <MaskedDateRangeInput\n mode={filter.mode}\n ref={maskedDateRangeInputRef}\n onChange={handleInputChange}\n startDate={value?.startDate ?? null}\n endDate={value?.endDate ?? null}\n autoComplete=\"off\"\n error={error}\n {...{ [ANV_PART_ATTR]: PARTS.dateInput }}\n />\n\n {/* DateFieldRangeCalendar does not forward arbitrary props, so the part\n attribute goes on a wrapping element. */}\n <div {...{ [ANV_PART_ATTR]: PARTS.dateCalendar }}>\n <DateFieldRangeCalendar\n startDate={value?.startDate ?? null}\n endDate={value?.endDate ?? null}\n onSelection={handleCalendarSelection}\n minDate={minDate}\n maxDate={maxDate}\n unavailable={unavailable}\n />\n </div>\n </Flex>\n );\n};\n\nconst PopoverShell = ({\n filter,\n committedValue,\n onCommit,\n controlledFiltering,\n label,\n isSelected,\n clear,\n}: PopoverProps) => {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const popoverId = useId();\n const [isOpen, setIsOpen] = useState(false);\n\n const isEqual = useCallback(\n (a: Value, b: Value) => !hasChangedFilter(a, b),\n [],\n );\n\n const { displayValue, setDraft, apply, cancel } = useConfirmationDraft<Value>(\n {\n value: committedValue,\n onCommit,\n isOpen,\n enabled: controlledFiltering,\n isEqual,\n },\n );\n\n const handleClose = useCallback(() => {\n if (controlledFiltering) {\n cancel();\n }\n setIsOpen(false);\n }, [controlledFiltering, cancel]);\n\n const handleApply = useCallback(() => {\n apply();\n setIsOpen(false);\n }, [apply]);\n\n return (\n <FilterItemWrapper>\n <FilterTriggerButton\n ref={triggerRef}\n filterId={filter.id}\n label={label}\n isSelected={isSelected}\n icon=\"calendar\"\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n onClick={() => setIsOpen((prev) => !prev)}\n />\n <OptionsPopover\n id={popoverId}\n referenceElement={triggerRef}\n open={isOpen}\n onClose={handleClose}\n footer={\n clear || controlledFiltering ? (\n <MenuFooter\n clear={\n clear\n ? {\n ...clear,\n onClick: () => {\n clear.onClick();\n // Close directly; the commit already happened, so we\n // skip handleClose's cancel-on-controlled path. Restore\n // focus to the trigger, matching Apply / Cancel.\n setIsOpen(false);\n triggerRef.current?.focus();\n },\n }\n : undefined\n }\n confirmation={\n controlledFiltering\n ? {\n onApply: handleApply,\n onCancel: handleClose,\n }\n : undefined\n }\n />\n ) : undefined\n }\n >\n {isOpen ? (\n <Body filter={filter} value={displayValue} onChange={setDraft} />\n ) : null}\n </OptionsPopover>\n </FilterItemWrapper>\n );\n};\n","import { DateTime } from \"luxon\";\nimport type {\n DateListFilter,\n DateListLibraryOptionId,\n DateListOption,\n} from \"../types\";\n\nconst LIBRARY_OPTION_LABELS = {\n on: \"On\",\n before: \"Before\",\n after: \"After\",\n customRange: \"Custom Range\",\n} as const satisfies Record<DateListLibraryOptionId, string>;\n\nconst LIBRARY_OPTION_IDS_ORDERED: ReadonlyArray<DateListLibraryOptionId> = [\n \"on\",\n \"before\",\n \"after\",\n \"customRange\",\n];\n\nconst LIBRARY_OPTION_ID_SET = new Set<string>(LIBRARY_OPTION_IDS_ORDERED);\n\n/** Type guard for the four reserved library option ids. */\nexport const isDateListLibraryOptionId = (\n id: string,\n): id is DateListLibraryOptionId => LIBRARY_OPTION_ID_SET.has(id);\n\n/** Ellipsis-free dialog title and committed label for a library option. */\nexport const getDateListLibraryOptionLabel = (\n id: DateListLibraryOptionId,\n): string => LIBRARY_OPTION_LABELS[id];\n\n/**\n * Built-in date-list rows in display order. The \"…\" suffix signals that\n * selection opens a dialog; committed options use the ellipsis-free label\n * from {@link getDateListLibraryOptionLabel}.\n */\nexport const dateListLibraryOptions: ReadonlyArray<{\n id: DateListLibraryOptionId;\n label: string;\n}> = LIBRARY_OPTION_IDS_ORDERED.map((id) => ({\n id,\n label: `${LIBRARY_OPTION_LABELS[id]}…`,\n}));\n\n/** Default options visible for a given dateList filter configuration. */\nexport const getVisibleDateListDefaultOptions = (\n filter: Pick<DateListFilter, \"excludeDefaultOptions\">,\n): ReadonlyArray<{ id: DateListLibraryOptionId; label: string }> => {\n const excluded = new Set(filter.excludeDefaultOptions ?? []);\n if (excluded.size === 0) return dateListLibraryOptions;\n return dateListLibraryOptions.filter((opt) => !excluded.has(opt.id));\n};\n\n/** True when the library option opens a date-range dialog. */\nexport const isDateListRangeLibraryId = (\n id: DateListLibraryOptionId,\n): boolean => id === \"customRange\";\n\nconst formatDateForLabel = (iso: string): string => {\n const d = DateTime.fromISO(iso, { zone: \"local\" });\n return `${d.monthShort} ${d.day}, ${d.year}`;\n};\n\nconst formatRangeForLabel = (range: {\n startDate: string;\n endDate: string;\n}): string => {\n const start = DateTime.fromISO(range.startDate, { zone: \"local\" });\n const end = DateTime.fromISO(range.endDate, { zone: \"local\" });\n const sameYear = start.year === end.year;\n const formattedStart = sameYear\n ? `${start.monthShort} ${start.day}`\n : `${start.monthShort} ${start.day}, ${start.year}`;\n return `${formattedStart} – ${end.monthShort} ${end.day}, ${end.year}`;\n};\n\nconst formatDateListValue = (\n value: NonNullable<DateListOption[\"value\"]>,\n): string =>\n typeof value === \"string\"\n ? formatDateForLabel(value)\n : formatRangeForLabel(value);\n\n/**\n * Build the display label for a committed dateList selection, without the\n * filter's own label. Used by the FilterDrawer `SelectField`, which renders\n * the filter label separately as the field label.\n *\n * - Selection with `value: null` (e.g. \"Any day\") → option label only.\n * - Custom Range library option → just the formatted range (label omitted\n * since the range is self-explanatory).\n * - Other library or consumer options → `\"<label>: <formatted>\"`.\n */\nexport const formatDateListSelectionLabel = (\n selection: DateListOption,\n): string => {\n if (selection.value === null) return selection.label;\n const formatted = formatDateListValue(selection.value);\n if (selection.id === \"customRange\") return formatted;\n return `${selection.label}: ${formatted}`;\n};\n\n/**\n * Build the toolbar `FilterTriggerButton` label for a committed dateList\n * selection. Unlike the drawer, the trigger has no separate label slot, so the\n * filter's label is retained and the selection appended — matching every other\n * filter adapter (e.g. \"Owner: Alice\").\n *\n * - Selection with `value: null` (e.g. \"Any day\") → filter label, or the option label when the filter label is empty.\n * - Custom Range → `\"<filter>: <formatted>\"`; the option name adds nothing\n * over the range itself.\n * - Other options → `\"<filter>: <option> (<formatted>)\"`, e.g.\n * \"Start Date: Last 7 Days (Aug 6 – Aug 11, 2026)\". Parentheses avoid the\n * double colon that `\"<filter>: <option>: <formatted>\"` would produce.\n */\nexport const formatDateListTriggerLabel = (\n filterLabel: string,\n selection: DateListOption,\n): string => {\n if (selection.value === null) return filterLabel || selection.label;\n if (!filterLabel) return formatDateListSelectionLabel(selection);\n const formatted = formatDateListValue(selection.value);\n if (selection.id === \"customRange\") return `${filterLabel}: ${formatted}`;\n return `${filterLabel}: ${selection.label} (${formatted})`;\n};\n","import { type ReactNode, useEffect, useMemo, useState } from \"react\";\nimport Dialog from \"../../../components/Dialog\";\nimport Button from \"../../../components/Button\";\nimport Flex from \"../../../components/Flex\";\nimport type { DateFieldSingleProps } from \"../../../components/DateFieldSingle\";\nimport {\n type SelectMenuOption,\n SelectMenuSync,\n} from \"../../../components/SelectMenu\";\nimport type {\n DateFilter,\n DateRangeFilter,\n DateListFilter,\n DateListLibraryOptionId,\n DateListOption,\n DateListCustomRangeConfig,\n} from \"./internal/types\";\nimport { FilterDateSingle } from \"./FilterDateSingle\";\nimport { FilterDateRange } from \"./FilterDateRange\";\nimport { FilterItemWrapper } from \"./FilterItemWrapper\";\nimport { FilterTriggerButton } from \"./FilterTriggerButton\";\nimport {\n getDateListLibraryOptionLabel,\n getVisibleDateListDefaultOptions,\n isDateListLibraryOptionId,\n isDateListRangeLibraryId,\n} from \"./internal/utils/dateListLibraryOptions\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\nimport { warnOnce } from \"../../../internal/functions\";\n\ninterface DateListDialogProps {\n /** Library option whose dialog is open; null when closed. */\n libraryId: DateListLibraryOptionId | null;\n /** Parent filter id; used to derive unique DOM ids for the synthetic date pickers inside the dialog. */\n parentFilterId: string;\n /** Pre-seed value when re-opening an already-selected library option. */\n initialValue?: string | { startDate: string; endDate: string };\n /** Date format forwarded to the inline picker. */\n mode?: DateFieldSingleProps[\"mode\"];\n /** Constraints applied only when the Custom Range picker is open. */\n customRange?: DateListCustomRangeConfig;\n /** Primary CTA label. \"Apply\" in popover, \"Save\" in drawer. */\n dialogCtaLabel: \"Apply\" | \"Save\";\n /** Receives the completed library option. */\n onCommit: (option: DateListOption) => void;\n /** Dismisses the dialog without committing its draft. */\n onCancel: () => void;\n}\n\n/**\n * Dialog shared by FilterDateList (popover) and FilterDrawer's dateList case.\n * Renders a date or range picker for the chosen library option and commits\n * up on Apply/Save.\n */\nexport const DateListDialog = ({\n libraryId,\n parentFilterId,\n initialValue,\n mode,\n customRange,\n dialogCtaLabel,\n onCommit,\n onCancel,\n}: DateListDialogProps) => {\n const [dateDraft, setDateDraft] = useState<string | null>(null);\n const [rangeDraft, setRangeDraft] = useState<{\n startDate: string | null;\n endDate: string | null;\n } | null>(null);\n\n useEffect(() => {\n if (!libraryId) return;\n if (isDateListRangeLibraryId(libraryId)) {\n setRangeDraft(\n initialValue && typeof initialValue === \"object\"\n ? {\n startDate: initialValue.startDate,\n endDate: initialValue.endDate,\n }\n : null,\n );\n setDateDraft(null);\n } else {\n setDateDraft(typeof initialValue === \"string\" ? initialValue : null);\n setRangeDraft(null);\n }\n }, [libraryId, initialValue]);\n\n const dialogOpen = libraryId !== null;\n const dialogLabel = libraryId ? getDateListLibraryOptionLabel(libraryId) : \"\";\n const isRange = libraryId ? isDateListRangeLibraryId(libraryId) : false;\n\n const canCommit = isRange\n ? Boolean(rangeDraft?.startDate && rangeDraft?.endDate)\n : Boolean(dateDraft);\n\n const handleCommit = () => {\n if (!libraryId) return;\n if (isRange) {\n if (!rangeDraft?.startDate || !rangeDraft?.endDate) return;\n onCommit({\n id: libraryId,\n label: dialogLabel,\n value: {\n startDate: rangeDraft.startDate,\n endDate: rangeDraft.endDate,\n },\n });\n } else {\n if (!dateDraft) return;\n onCommit({ id: libraryId, label: dialogLabel, value: dateDraft });\n }\n };\n\n return (\n <Dialog\n open={dialogOpen}\n onClose={onCancel}\n {...{ [ANV_PART_ATTR]: PARTS.dialog }}\n >\n {libraryId && (\n <>\n <Dialog.Header>{dialogLabel}</Dialog.Header>\n <Dialog.Content>\n {isRange ? (\n <FilterDateRange\n variant=\"inline\"\n filter={\n {\n id: `${parentFilterId}--date-list-dialog-range`,\n label: dialogLabel,\n type: \"dateRange\",\n value: rangeDraft,\n mode,\n minDate: customRange?.minDate,\n maxDate: customRange?.maxDate,\n unavailable: customRange?.unavailable,\n } satisfies DateRangeFilter\n }\n draftValue={rangeDraft}\n onDraftChange={setRangeDraft}\n />\n ) : (\n <FilterDateSingle\n variant=\"inline\"\n filter={\n {\n id: `${parentFilterId}--date-list-dialog-date`,\n label: dialogLabel,\n type: \"date\",\n value: dateDraft,\n mode,\n } satisfies DateFilter\n }\n draftValue={dateDraft}\n onDraftChange={setDateDraft}\n />\n )}\n </Dialog.Content>\n <Dialog.Footer>\n <Flex gap={2} justifyContent=\"flex-end\">\n <Dialog.CancelButton\n appearance=\"ghost\"\n aria-label=\"Cancel\"\n {...{ [ANV_PART_ATTR]: PARTS.cancelButton }}\n >\n Cancel\n </Dialog.CancelButton>\n <Button\n appearance=\"primary\"\n disabled={!canCommit}\n onClick={handleCommit}\n {...{ [ANV_PART_ATTR]: PARTS.applyButton }}\n >\n {dialogCtaLabel}\n </Button>\n </Flex>\n </Dialog.Footer>\n </>\n )}\n </Dialog>\n );\n};\n\ninterface FilterDateListProps {\n /** Date-list options and picker configuration. */\n filter: DateListFilter;\n /** Selection used to derive the menu value and dialog seed. */\n committedValue: DateListOption | undefined;\n /** Receives consumer options immediately or a completed library selection. */\n onCommit: (value: DateListOption | undefined) => void;\n /** Content shown in the filter trigger. */\n label: ReactNode;\n /** Applies selected styling to the trigger. */\n isSelected: boolean;\n /** Primary CTA label for the library-option dialog. */\n dialogCtaLabel: \"Apply\" | \"Save\";\n /** Configures a \"Clear\" button in the SelectMenu footer. Presence enables it. */\n clear?: {\n onClick: () => void;\n label?: string;\n disabled?: boolean;\n };\n}\n\n/**\n * FilterDateList renders the dateList filter's option list via SelectMenuSync.\n * Consumer options commit immediately; library options open a Dialog whose\n * Apply commits the final picked date or range.\n */\nexport const FilterDateList = ({\n filter,\n committedValue,\n onCommit,\n label,\n isSelected,\n dialogCtaLabel,\n clear,\n}: FilterDateListProps) => {\n const [openLibraryId, setOpenLibraryId] =\n useState<DateListLibraryOptionId | null>(null);\n\n const excludeDefaultOptions = filter.excludeDefaultOptions;\n const visibleLibraryOptions = useMemo(\n () => getVisibleDateListDefaultOptions({ excludeDefaultOptions }),\n [excludeDefaultOptions],\n );\n\n useEffect(() => {\n const libraryLabels = new Set(visibleLibraryOptions.map((o) => o.label));\n filter.options.forEach((opt) => {\n if (isDateListLibraryOptionId(opt.id)) {\n warnOnce(\n `[FilterDateList] Consumer option id \"${opt.id}\" is reserved for a library option (\"on\", \"before\", \"after\", \"customRange\"). Use a different id.`,\n );\n }\n if (libraryLabels.has(opt.label)) {\n warnOnce(\n `[FilterDateList] Consumer option label \"${opt.label}\" collides with a library option label (\"On…\", \"Before…\", \"After…\", \"Custom Range…\"). Use a different label.`,\n );\n }\n });\n }, [filter.options, visibleLibraryOptions]);\n\n const options = useMemo<SelectMenuOption[]>(\n () => [\n ...filter.options.map(\n (opt): SelectMenuOption => ({\n id: opt.id,\n label: opt.label,\n }),\n ),\n ...visibleLibraryOptions.map(\n (opt): SelectMenuOption => ({\n id: opt.id,\n label: opt.label,\n }),\n ),\n ],\n [filter.options, visibleLibraryOptions],\n );\n\n // SelectMenu wants the *original* option reference back through value, so\n // pick the matching options entry by id.\n const selectedOption = useMemo<SelectMenuOption | null>(\n () =>\n committedValue\n ? (options.find((opt) => opt.id === committedValue.id) ?? null)\n : null,\n [options, committedValue],\n );\n\n const handleSelectedOptionChange = (option: SelectMenuOption | null) => {\n if (!option) {\n onCommit(undefined);\n return;\n }\n const id = String(option.id);\n if (isDateListLibraryOptionId(id)) {\n setOpenLibraryId(id);\n return;\n }\n const consumerOption = filter.options.find((opt) => opt.id === id);\n if (!consumerOption) return;\n onCommit({\n id: consumerOption.id,\n label: consumerOption.label,\n value: consumerOption.value,\n });\n };\n\n const dialogInitialValue =\n openLibraryId &&\n committedValue?.id === openLibraryId &&\n committedValue.value !== null\n ? committedValue.value\n : undefined;\n\n return (\n <>\n <FilterItemWrapper>\n <SelectMenuSync\n id={filter.id}\n label={filter.label}\n options={options}\n value={selectedOption}\n onSelectedOptionChange={handleSelectedOptionChange}\n disableSearch\n clear={clear}\n trigger={(triggerProps) => (\n <FilterTriggerButton\n {...triggerProps}\n filterId={filter.id}\n label={label}\n isSelected={isSelected}\n icon=\"calendar\"\n />\n )}\n />\n </FilterItemWrapper>\n <DateListDialog\n libraryId={openLibraryId}\n parentFilterId={filter.id}\n initialValue={dialogInitialValue}\n mode={filter.mode}\n customRange={filter.customRange}\n dialogCtaLabel={dialogCtaLabel}\n onCommit={(option) => {\n onCommit(option);\n setOpenLibraryId(null);\n }}\n onCancel={() => setOpenLibraryId(null)}\n />\n </>\n );\n};\n","import { FilterDateList } from \"../../FilterDateList\";\nimport {\n SelectFieldSync,\n type SelectFieldOption,\n} from \"../../../../../components/SelectField\";\nimport {\n formatDateListSelectionLabel,\n formatDateListTriggerLabel,\n getVisibleDateListDefaultOptions,\n isDateListLibraryOptionId,\n} from \"../utils/dateListLibraryOptions\";\nimport type { DateListFilter, DateListOption } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\ntype Value = DateListOption | undefined;\n\n// \"Any day\" (value === null) is treated as inactive — selecting it\n// is functionally equivalent to clearing the filter.\nconst isSelected = (filter: DateListFilter) =>\n filter.selectedOption !== undefined && filter.selectedOption.value !== null;\n\nconst formatLabel = (filter: DateListFilter) =>\n filter.selectedOption\n ? formatDateListTriggerLabel(filter.label, filter.selectedOption)\n : filter.label;\n\nexport const dateListAdapter: FilterTypeAdapter<DateListFilter, Value> = {\n getValue: (filter) => filter.selectedOption,\n setValue: (filter, value) => ({ ...filter, selectedOption: value }),\n reset: (filter) => ({ ...filter, selectedOption: undefined }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n selectedOption: existingFilter.selectedOption,\n }),\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n renderBarControl: ({ filter, updateFilter }) => (\n <FilterDateList\n key={filter.id}\n filter={filter}\n committedValue={filter.selectedOption}\n onCommit={(value) => updateFilter(filter.id, value, true)}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n dialogCtaLabel=\"Apply\"\n clear={{\n onClick: () => updateFilter(filter.id, undefined, true),\n }}\n />\n ),\n renderDrawer: ({\n originalFilter,\n draftFilter,\n onDraftChange,\n requestDateListDialog,\n }) => {\n const consumerSelectOptions: SelectFieldOption[] =\n originalFilter.options.map((opt) => ({\n id: opt.id,\n label: opt.label,\n extra: { value: opt.value },\n }));\n const librarySelectOptions: SelectFieldOption[] =\n getVisibleDateListDefaultOptions(originalFilter).map((opt) => ({\n id: opt.id,\n label: opt.label,\n extra: { value: null },\n }));\n const allSelectOptions = [\n ...consumerSelectOptions,\n ...librarySelectOptions,\n ];\n\n // SelectField renders the filter label separately, so its value omits that prefix.\n const selectedSelectOption: SelectFieldOption | null =\n draftFilter.selectedOption\n ? {\n id: draftFilter.selectedOption.id,\n label: formatDateListSelectionLabel(draftFilter.selectedOption),\n extra: {\n value: draftFilter.selectedOption.value,\n },\n }\n : null;\n\n return (\n <SelectFieldSync\n key={draftFilter.id}\n label={originalFilter.label}\n placeholder=\"Select an option...\"\n disableSearch\n options={allSelectOptions}\n value={selectedSelectOption}\n onSelectedOptionChange={(option) => {\n if (!option) {\n onDraftChange(draftFilter.id, undefined);\n return;\n }\n const id = String(option.id);\n if (isDateListLibraryOptionId(id)) {\n requestDateListDialog(draftFilter.id, id);\n return;\n }\n onDraftChange(draftFilter.id, {\n id,\n label: option.label,\n value: (option.extra?.value ?? null) as DateListOption[\"value\"],\n });\n }}\n />\n );\n },\n formatLabel,\n isSelected,\n};\n","import { DateTime } from \"luxon\";\nimport { DateFieldRange } from \"../../../../../components/DateFieldRange\";\nimport { FilterDateRange } from \"../../FilterDateRange\";\nimport type { DateRangeFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\nimport { resolveDateRangeFilterError } from \"../utils/dateConstraints\";\n\ntype Value = { startDate: string | null; endDate: string | null } | null;\n\nconst formatLabel = (filter: DateRangeFilter) => {\n if (filter.value?.startDate && filter.value?.endDate) {\n const start = DateTime.fromISO(filter.value.startDate as string, {\n zone: \"local\",\n });\n const end = DateTime.fromISO(filter.value.endDate as string, {\n zone: \"local\",\n });\n\n const isSameYear = start.year === end.year;\n const formattedStart = isSameYear\n ? `${start.monthShort} ${start.day}`\n : `${start.monthShort} ${start.day}, ${start.year}`;\n\n return `${filter.label}: ${formattedStart} – ${end.monthShort} ${end.day}, ${end.year}`;\n }\n return filter.label;\n};\n\nconst isSelected = (filter: DateRangeFilter) =>\n !!(filter.value?.startDate && filter.value?.endDate);\n\nexport const dateRangeAdapter: FilterTypeAdapter<DateRangeFilter, Value> = {\n getValue: (filter) => filter.value ?? null,\n setValue: (filter, value) => ({ ...filter, value }),\n reset: (filter) => ({ ...filter, value: null }),\n isActive: (filter) =>\n filter.value !== null &&\n filter.value !== undefined &&\n filter.value.startDate !== null &&\n filter.value.endDate !== null,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n value: existingFilter.value,\n }),\n cloneWithItemRefs: (filter) => ({\n ...filter,\n value: (filter.value as Value) ?? null,\n }),\n\n renderBarControl: ({ filter, updateFilter, controlledFiltering }) => (\n <FilterDateRange\n key={filter.id}\n filter={filter}\n committedValue={filter.value ?? null}\n onCommit={(value) => updateFilter(filter.id, value, true)}\n controlledFiltering={controlledFiltering}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n clear={{\n onClick: () => updateFilter(filter.id, null, true),\n }}\n />\n ),\n renderDrawer: ({ draftFilter, onDraftChange }) => (\n <DateFieldRange\n key={draftFilter.id}\n label={draftFilter.label}\n value={(draftFilter.value as Value) ?? null}\n onChange={(change) =>\n onDraftChange(draftFilter.id, {\n startDate: change.startDate,\n endDate: change.endDate,\n })\n }\n mode={draftFilter.mode}\n minDate={draftFilter.minDate}\n maxDate={draftFilter.maxDate}\n unavailable={draftFilter.unavailable}\n error={resolveDateRangeFilterError(\n draftFilter,\n (draftFilter.value as Value) ?? null,\n )}\n />\n ),\n formatLabel,\n isSelected,\n};\n","import { Checkbox } from \"../../../../../components/Checkbox\";\nimport Chip from \"../../../../../components/Chip\";\nimport {\n ANV_PART_ATTR,\n COMMON_PART,\n} from \"../../../../../internal/constants/anvParts\";\nimport { FilterItemWrapper } from \"../../FilterItemWrapper\";\nimport { FilterTriggerButton } from \"../../FilterTriggerButton\";\nimport { PARTS } from \"../../parts\";\nimport { MultiSelectFieldSync } from \"../../../../../components/MultiSelectField\";\nimport {\n type MultiSelectMenuOption,\n MultiSelectMenuSync,\n type MultiSelectMenuSyncProps,\n} from \"../../../../../components/MultiSelectMenu\";\nimport type { MultiSelectFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\ntype Value = MultiSelectMenuOption[];\n\nconst isSelected = (filter: MultiSelectFilter) =>\n !!filter.selectedOptions && filter.selectedOptions.length > 0;\n\nconst formatLabel = (filter: MultiSelectFilter) => {\n const count = filter.selectedOptions?.length ?? 0;\n if (count === 0) return filter.label;\n const countLabel = count.toString();\n return (\n <>\n {filter.label}\n <Chip\n label={countLabel}\n size=\"small\"\n aria-label={`${countLabel} selected items`}\n {...{ [ANV_PART_ATTR]: PARTS.countBadge }}\n />\n </>\n );\n};\n\nconst passThroughMenuProps = (\n filter: MultiSelectFilter,\n): MultiSelectMenuSyncProps => {\n const {\n id: _id,\n label: _label,\n type: _type,\n selectedOptions: _selectedOptions,\n simpleDrawerVariant: _simpleDrawerVariant,\n drawerOnly: _drawerOnly,\n ...rest\n } = filter;\n return rest as unknown as MultiSelectMenuSyncProps;\n};\n\nexport const multiSelectAdapter: FilterTypeAdapter<MultiSelectFilter, Value> = {\n getValue: (filter) => filter.selectedOptions ?? [],\n setValue: (filter, value) => ({ ...filter, selectedOptions: value }),\n reset: (filter) => ({ ...filter, selectedOptions: [] }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n selectedOptions: existingFilter.selectedOptions,\n }),\n // Options stay consumer-owned; MultiSelectMenuSync matches selection by id.\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n renderBarControl: ({ filter, updateFilter, controlledFiltering }) => (\n <FilterItemWrapper key={filter.id}>\n <MultiSelectMenuSync\n {...passThroughMenuProps(filter)}\n id={filter.id}\n label={filter.label}\n value={filter.selectedOptions ?? []}\n onSelectedOptionsChange={(options) =>\n updateFilter(filter.id, options, true)\n }\n confirmation={controlledFiltering}\n // Clear commits immediately even while confirmation is buffering picks.\n clear={{\n onClick: () => updateFilter(filter.id, [], true),\n }}\n trigger={(triggerProps) => (\n <FilterTriggerButton\n {...triggerProps}\n filterId={filter.id}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n />\n )}\n />\n </FilterItemWrapper>\n ),\n\n renderDrawer: ({ originalFilter, draftFilter, onDraftChange }) => {\n if (originalFilter.simpleDrawerVariant) {\n return (\n <Checkbox.Group key={draftFilter.id} legend={originalFilter.label}>\n {originalFilter.options.map((option) => (\n <Checkbox\n key={option.id}\n label={option.label}\n checked={\n draftFilter.selectedOptions?.some(\n (selected) => selected.id === option.id,\n ) ?? false\n }\n {...{ [ANV_PART_ATTR]: COMMON_PART.option }}\n onChange={(e) => {\n const currentSelected = draftFilter.selectedOptions ?? [];\n if (e?.target.checked) {\n onDraftChange(draftFilter.id, [...currentSelected, option]);\n } else {\n onDraftChange(\n draftFilter.id,\n currentSelected.filter(\n (selected) => selected.id !== option.id,\n ),\n );\n }\n }}\n />\n ))}\n </Checkbox.Group>\n );\n }\n\n return (\n <MultiSelectFieldSync\n {...passThroughMenuProps(originalFilter)}\n key={draftFilter.id}\n label={originalFilter.label}\n value={draftFilter.selectedOptions ?? []}\n onSelectedOptionsChange={(options) =>\n onDraftChange(draftFilter.id, options)\n }\n />\n );\n },\n\n formatLabel,\n isSelected,\n};\n","import { FieldLabel } from \"../../../components/FieldLabel\";\nimport Flex from \"../../../components/Flex\";\nimport Grid from \"../../../components/Grid\";\nimport { NumberField } from \"../../../components/NumberField\";\nimport Text from \"../../../components/Text\";\nimport styles from \"./FilterBar.module.scss\";\nimport type { NumericRangeFilter, NumericRangeValue } from \"./internal/types\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\n\nconst clampToBounds = (\n n: number | undefined,\n minValue: number | undefined,\n maxValue: number | undefined,\n): number | undefined => {\n if (n === undefined) return undefined;\n let result = n;\n if (minValue !== undefined) result = Math.max(result, minValue);\n if (maxValue !== undefined) result = Math.min(result, maxValue);\n return result;\n};\n\ninterface FilterNumericRangeProps {\n /** The numeric range filter — drives field labels, decorator props, and clamp bounds. */\n filter: NumericRangeFilter;\n /** `null` when empty; one-sided bounds are valid committed ranges. */\n value: NumericRangeValue;\n /** Emits `null` when empty; otherwise emits clamped one- or two-sided bounds. */\n onChange: (value: NumericRangeValue) => void;\n /**\n * `compact` stacks the inputs vertically (toolbar popover); `grid` places\n * Min / \"to\" / Max side-by-side under a single FieldLabel (drawer cell).\n */\n layout: \"compact\" | \"grid\";\n}\n\n/**\n * Min/max number fields that preserve half-ranges and clamp both bounds to the\n * filter's configured limits before emitting.\n */\nexport const FilterNumericRange = ({\n filter,\n value,\n onChange,\n layout,\n}: FilterNumericRangeProps) => {\n const inclusive = filter.inclusiveBounds === true;\n const minFieldLabel = inclusive ? \"Min\" : \"Above\";\n const maxFieldLabel = inclusive ? \"Max\" : \"Below\";\n const minimumFractionDigits =\n filter.minimumFractionDigits ??\n (filter.mode === \"currency\"\n ? 2\n : filter.mode === \"percentage\"\n ? 0\n : undefined);\n const maximumFractionDigits =\n filter.maximumFractionDigits ??\n (filter.mode === \"currency\"\n ? 2\n : filter.mode === \"percentage\"\n ? 3\n : undefined);\n const decoratorProps = {\n ...(filter.mode === \"currency\" && { prefix: \"$\" }),\n ...(filter.mode === \"percentage\" && { suffix: \"%\" }),\n ...(minimumFractionDigits !== undefined && { minimumFractionDigits }),\n ...(maximumFractionDigits !== undefined && { maximumFractionDigits }),\n };\n\n const update = (next: { min?: number; max?: number }) => {\n const min = clampToBounds(next.min, filter.minValue, filter.maxValue);\n const max = clampToBounds(next.max, filter.minValue, filter.maxValue);\n onChange(min === undefined && max === undefined ? null : { min, max });\n };\n\n // minValue/maxValue are passed through so the NumberField exposes correct\n // aria-valuemin/aria-valuemax and clamps keyboard increments — `update`\n // still clamps the emitted value as a defence-in-depth fallback.\n const sharedNumberFieldProps = {\n hideControls: filter.hideControls ?? true,\n step: filter.step,\n minValue: filter.minValue,\n maxValue: filter.maxValue,\n ...decoratorProps,\n };\n\n const minField = (\n <NumberField\n label={minFieldLabel}\n value={value?.min ?? null}\n onChange={(n) => update({ min: n ?? undefined, max: value?.max })}\n {...sharedNumberFieldProps}\n {...{ [ANV_PART_ATTR]: PARTS.minInput }}\n />\n );\n const maxField = (\n <NumberField\n label={maxFieldLabel}\n value={value?.max ?? null}\n onChange={(n) => update({ min: value?.min, max: n ?? undefined })}\n {...sharedNumberFieldProps}\n {...{ [ANV_PART_ATTR]: PARTS.maxInput }}\n />\n );\n\n if (layout === \"compact\") {\n return (\n <Flex direction=\"column\" gap=\"2\" grow={1}>\n {minField}\n {maxField}\n </Flex>\n );\n }\n return (\n <Flex direction=\"column\" gap=\"2\" grow={1}>\n <FieldLabel>{filter.label}</FieldLabel>\n <Grid templateColumns=\"1fr auto 1fr\" gap=\"2\">\n {minField}\n <Flex\n alignItems=\"center\"\n justifyContent=\"center\"\n className={styles[\"filter-numeric-range-separator\"]}\n >\n <Text>to</Text>\n </Flex>\n {maxField}\n </Grid>\n </Flex>\n );\n};\n","import { FilterNumericRange } from \"../../FilterNumericRange\";\nimport { FilterPopoverButton } from \"../../FilterPopoverButton\";\nimport type { NumericRangeFilter, NumericRangeValue } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\n/*\n * Mirrors NumberField formatting so the closed-button summary matches the\n * entered bounds.\n */\nconst formatBound = (n: number, filter: NumericRangeFilter): string => {\n const minimumFractionDigits =\n filter.minimumFractionDigits ??\n (filter.mode === \"currency\"\n ? 2\n : filter.mode === \"percentage\"\n ? 0\n : undefined);\n const maximumFractionDigits =\n filter.maximumFractionDigits ??\n (filter.mode === \"currency\"\n ? 2\n : filter.mode === \"percentage\"\n ? 3\n : undefined);\n const formatOptions: Intl.NumberFormatOptions = {};\n if (minimumFractionDigits !== undefined) {\n formatOptions.minimumFractionDigits = minimumFractionDigits;\n }\n if (maximumFractionDigits !== undefined) {\n formatOptions.maximumFractionDigits = maximumFractionDigits;\n }\n const formatted = n.toLocaleString(\"en-US\", formatOptions);\n if (filter.mode === \"currency\") return `$${formatted}`;\n if (filter.mode === \"percentage\") return `${formatted}%`;\n return formatted;\n};\n\nconst formatLabel = (filter: NumericRangeFilter) => {\n const hasMin = filter.value?.min !== undefined;\n const hasMax = filter.value?.max !== undefined;\n if (!hasMin && !hasMax) return filter.label;\n\n const inclusive = filter.inclusiveBounds === true;\n const minSymbol = inclusive ? \"≥\" : \">\";\n const maxSymbol = inclusive ? \"≤\" : \"<\";\n\n if (hasMin && hasMax) {\n return `${filter.label}: ${formatBound(filter.value!.min!, filter)} to ${formatBound(filter.value!.max!, filter)}`;\n }\n if (hasMin) {\n return `${filter.label}: ${minSymbol} ${formatBound(filter.value!.min!, filter)}`;\n }\n return `${filter.label}: ${maxSymbol} ${formatBound(filter.value!.max!, filter)}`;\n};\n\nconst isSelected = (filter: NumericRangeFilter) =>\n filter.value !== null &&\n filter.value !== undefined &&\n (filter.value.min !== undefined || filter.value.max !== undefined);\n\nexport const numericRangeAdapter: FilterTypeAdapter<\n NumericRangeFilter,\n NumericRangeValue\n> = {\n getValue: (filter) => filter.value ?? null,\n setValue: (filter, value) => ({ ...filter, value }),\n reset: (filter) => ({ ...filter, value: null }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n value: existingFilter.value,\n }),\n cloneWithItemRefs: (filter) => ({\n ...filter,\n value: filter.value ? { ...filter.value } : null,\n }),\n\n renderBarControl: ({ filter, updateFilter }) => (\n <FilterPopoverButton<NumericRangeValue>\n key={filter.id}\n filter={filter}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n committedValue={filter.value ?? null}\n initialValue={null}\n clear={{\n onClick: () => updateFilter(filter.id, null, true),\n }}\n // In uncontrolled mode FilterPopoverButton closes the popover after\n // every change by default — but each digit typed into a NumberField\n // emits a change, so the popover would slam shut mid-input and the\n // user could never enter a multi-digit bound. Keep it open while\n // typing; the value commits live as it goes.\n keepOpenOnUncontrolledChange\n >\n {({ value, onChange }) => (\n <FilterNumericRange\n filter={filter}\n value={value}\n onChange={onChange}\n layout=\"compact\"\n />\n )}\n </FilterPopoverButton>\n ),\n renderDrawer: ({ draftFilter, onDraftChange }) => (\n <FilterNumericRange\n key={draftFilter.id}\n filter={draftFilter}\n value={draftFilter.value ?? null}\n onChange={(value) => onDraftChange(draftFilter.id, value)}\n layout=\"grid\"\n />\n ),\n formatLabel,\n isSelected,\n};\n","import {\n type ChangeEvent,\n type KeyboardEvent,\n useContext,\n useRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport Search from \"@servicetitan/hammer-icon/mdi/round/search.svg\";\nimport textfieldStyles from \"../../../components/TextField/TextField.module.scss\";\nimport searchFieldStyles from \"../../../components/SearchField/SearchField.module.scss\";\nimport { Icon } from \"../../../components/Icon\";\nimport { useTrackingId } from \"../../../hooks\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport {\n ToolbarContext,\n useToolbarSize,\n} from \"../Toolbar/internal/ToolbarContext\";\nimport {\n getToolbarElements,\n updateToolbarItemsTabIndex,\n} from \"../Toolbar/internal/utils/accessibility\";\nimport type { SearchFilter } from \"./internal/types\";\nimport { PARTS } from \"./parts\";\n\nexport type FilterSearchFieldProps = {\n /** Supplies the placeholder and the input's accessible name. */\n filter: SearchFilter;\n /** Committed query string; empty when cleared. */\n value: string;\n /** Forwards every native change; clearing emits `\"\"`. */\n onChange: (value: string) => void;\n};\n\n/**\n * Pinned search field for FilterBar. Unlike other filter controls it's\n * always visible inline (no trigger button/popover) and stays natively\n * tabbable at all times instead of joining the roving-tabindex pool that\n * moves focus between the other filter chips — it's excluded from that pool\n * via the `data-anv=\"filter-search-field\"` marker below (see the matching\n * exclusion in Toolbar's `getToolbarElements`).\n *\n * Arrow keys at the input's text-cursor boundaries move focus to the clear\n * button or to the first/last filter chip; everywhere else they perform\n * native cursor movement.\n */\nexport const FilterSearchField = ({\n filter,\n value,\n onChange,\n}: FilterSearchFieldProps) => {\n const { toolbarRef } = useContext(ToolbarContext);\n const size = useToolbarSize();\n const hasValue = !!value;\n const inputRef = useRef<HTMLInputElement>(null);\n const clearButtonRef = useRef<HTMLSpanElement>(null);\n const placeholder = filter.placeholder ?? \"Search...\";\n\n const focusRovingItem = (edge: \"first\" | \"last\") => {\n if (!toolbarRef.current) return;\n const items = getToolbarElements(toolbarRef.current);\n const target = (edge === \"first\" ? items[0] : items[items.length - 1]) as\n | HTMLElement\n | undefined;\n if (!target) return;\n updateToolbarItemsTabIndex(toolbarRef.current, target);\n target.focus();\n };\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.value);\n };\n\n const handleClear = () => {\n onChange(\"\");\n inputRef.current?.focus();\n };\n\n const handleInputKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n const input = e.currentTarget;\n\n if (e.code === \"ArrowRight\") {\n if (!hasValue) {\n e.preventDefault();\n focusRovingItem(\"first\");\n } else if (input.selectionStart === input.value.length) {\n e.preventDefault();\n clearButtonRef.current?.focus();\n }\n } else if (e.code === \"ArrowLeft\") {\n if (input.selectionStart === 0) {\n e.preventDefault();\n focusRovingItem(\"last\");\n }\n }\n // Home/End: native cursor movement. No handling needed — this element\n // is excluded from the roving-tabindex pool, so the toolbar's generic\n // keydown handler is already a no-op for events targeting it.\n };\n\n const handleClearKeyDown = (e: KeyboardEvent<HTMLSpanElement>) => {\n if (e.code === \"Enter\" || e.code === \"Space\") {\n e.preventDefault();\n handleClear();\n } else if (e.code === \"ArrowLeft\") {\n e.preventDefault();\n inputRef.current?.focus();\n } else if (e.code === \"ArrowRight\") {\n e.preventDefault();\n focusRovingItem(\"first\");\n }\n };\n\n const trackingId = useTrackingId({\n name: \"FilterSearchField\",\n data: { value },\n });\n\n // The clear button is reached with ArrowRight, not through the tab order.\n return (\n <div\n className={cx(\n textfieldStyles[\"textfield\"],\n searchFieldStyles[\"searchfield\"],\n )}\n data-anv=\"filter-search-field\"\n >\n <div\n className={cx(\n textfieldStyles[\"input-wrapper\"],\n searchFieldStyles[\"input-wrapper\"],\n {\n [textfieldStyles[\"xsmall\"]]: size === \"xsmall\",\n [textfieldStyles[\"small\"]]: size === \"small\",\n [textfieldStyles[\"large\"]]: size === \"large\",\n },\n )}\n role=\"presentation\"\n onClick={() => inputRef.current?.focus()}\n >\n <div aria-hidden className={textfieldStyles[\"prefix\"]}>\n <Icon svg={Search} />\n </div>\n <input\n className={cx(textfieldStyles[\"input\"], searchFieldStyles[\"input\"], {\n [searchFieldStyles[\"input--has-value\"]]: hasValue,\n })}\n ref={inputRef}\n onChange={handleChange}\n onKeyDown={handleInputKeyDown}\n placeholder={placeholder}\n value={value}\n type=\"search\"\n autoComplete=\"off\"\n aria-label={filter.label}\n data-tracking-id={trackingId}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n <Icon\n ref={clearButtonRef}\n aria-label=\"Clear search\"\n svg={Close}\n role=\"button\"\n onClick={handleClear}\n onKeyDown={handleClearKeyDown}\n tabIndex={-1}\n className={searchFieldStyles[\"clear\"]}\n style={{\n visibility: hasValue ? \"visible\" : \"hidden\",\n }}\n {...{ [ANV_PART_ATTR]: PARTS.clearButton }}\n />\n </div>\n </div>\n );\n};\n\nFilterSearchField.displayName = \"FilterSearchField\";\n","import { TextField } from \"../../../../../components/TextField\";\nimport { ANV_PART_ATTR } from \"../../../../../internal/constants/anvParts\";\nimport { FilterSearchField } from \"../../FilterSearchField\";\nimport { PARTS } from \"../../parts\";\nimport type { SearchFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\nconst isSelected = (filter: SearchFilter) =>\n filter.value !== undefined && filter.value !== \"\";\n\nexport const searchAdapter: FilterTypeAdapter<SearchFilter, string> = {\n getValue: (filter) => filter.value ?? \"\",\n // Normalize empty values so active-filter counts treat a cleared field as inactive.\n setValue: (filter, value) => ({ ...filter, value: value || undefined }),\n reset: (filter) => ({ ...filter, value: undefined }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n value: existingFilter.value,\n }),\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n // Always visible inline — no popover/Apply affordance to gate behind, so\n // (like the boolean adapter) this commits on every keystroke regardless\n // of controlledFiltering.\n renderBarControl: ({ filter, updateFilter }) => (\n <FilterSearchField\n key={filter.id}\n filter={filter}\n value={filter.value ?? \"\"}\n onChange={(value) => updateFilter(filter.id, value, true)}\n />\n ),\n renderDrawer: ({ draftFilter, onDraftChange }) => (\n <TextField\n key={draftFilter.id}\n label={draftFilter.label}\n placeholder={draftFilter.placeholder}\n value={draftFilter.value ?? \"\"}\n onChange={(e) =>\n onDraftChange(draftFilter.id, e.target.value || undefined)\n }\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n ),\n formatLabel: (filter) => filter.label,\n isSelected,\n};\n","import { Radio } from \"../../../../../components/Radio\";\nimport { FilterItemWrapper } from \"../../FilterItemWrapper\";\nimport { FilterTriggerButton } from \"../../FilterTriggerButton\";\nimport { SelectFieldSync } from \"../../../../../components/SelectField\";\nimport {\n type SelectMenuOption,\n SelectMenuSync,\n type SelectMenuSyncProps,\n} from \"../../../../../components/SelectMenu\";\nimport type { SingleSelectFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\ntype Value = SelectMenuOption | undefined;\n\nconst formatLabel = (filter: SingleSelectFilter) => {\n if (filter.selectedOption) {\n return `${filter.label}: ${filter.selectedOption.label}`;\n }\n return filter.label;\n};\n\nconst isSelected = (filter: SingleSelectFilter) =>\n filter.selectedOption !== undefined;\n\nconst passThroughMenuProps = (\n filter: SingleSelectFilter,\n): SelectMenuSyncProps => {\n const {\n id: _id,\n label: _label,\n type: _type,\n selectedOption: _selectedOption,\n simpleDrawerVariant: _simpleDrawerVariant,\n drawerOnly: _drawerOnly,\n ...rest\n } = filter;\n return rest as unknown as SelectMenuSyncProps;\n};\n\nexport const singleSelectAdapter: FilterTypeAdapter<SingleSelectFilter, Value> =\n {\n getValue: (filter) => filter.selectedOption,\n setValue: (filter, value) => ({ ...filter, selectedOption: value }),\n reset: (filter) => ({ ...filter, selectedOption: undefined }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n selectedOption: existingFilter.selectedOption,\n }),\n // Options stay consumer-owned; SelectMenuSync matches selection by id.\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n // SelectMenuSync has no confirmation/Apply path; selection and Clear always\n // submit, including when FilterBar `controlledFiltering` is on.\n renderBarControl: ({ filter, updateFilter }) => (\n <FilterItemWrapper key={filter.id}>\n <SelectMenuSync\n {...passThroughMenuProps(filter)}\n id={filter.id}\n label={filter.label}\n value={filter.selectedOption ?? null}\n onSelectedOptionChange={(option) =>\n updateFilter(filter.id, option ?? undefined, true)\n }\n clear={{\n onClick: () => updateFilter(filter.id, undefined, true),\n }}\n trigger={(triggerProps) => (\n <FilterTriggerButton\n {...triggerProps}\n filterId={filter.id}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n />\n )}\n />\n </FilterItemWrapper>\n ),\n\n renderDrawer: ({ originalFilter, draftFilter, onDraftChange }) => {\n if (originalFilter.simpleDrawerVariant) {\n return (\n <div key={draftFilter.id}>\n <Radio.Group legend={originalFilter.label}>\n {originalFilter.options.map((option) => (\n <Radio\n key={option.id}\n name={`${originalFilter.id}-radio`}\n value={String(option.id)}\n label={option.label}\n checked={draftFilter.selectedOption?.id === option.id}\n onChange={(e) => {\n if (e?.target.checked) {\n const selected = originalFilter.options.find(\n (opt) => String(opt.id) === e.target.value,\n );\n onDraftChange(draftFilter.id, selected);\n }\n }}\n />\n ))}\n </Radio.Group>\n </div>\n );\n }\n\n return (\n <SelectFieldSync\n {...passThroughMenuProps(originalFilter)}\n key={draftFilter.id}\n label={originalFilter.label}\n value={draftFilter.selectedOption ?? null}\n onSelectedOptionChange={(option) =>\n onDraftChange(draftFilter.id, option ?? undefined)\n }\n />\n );\n },\n\n formatLabel,\n isSelected,\n };\n","import { TextField } from \"../../../components/TextField\";\nimport type { TextInputFilter } from \"./internal/types\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\n\ninterface FilterTextInputProps {\n /** The text input filter — drives label, placeholder, and max length. */\n filter: TextInputFilter;\n /** Always a string; adapters map a missing filter value to `\"\"`. */\n value: string;\n /** Fires after `maxLength` truncation when that bound is set. */\n onChange: (value: string) => void;\n /**\n * `compact` hides the field's own label (toolbar popover — the filter\n * button doubles as the label); `grid` shows it (drawer cell).\n */\n layout: \"compact\" | \"grid\";\n}\n\n/**\n * Single-line text filter that truncates to `maxLength` before emitting.\n * `showCounter` adds the current/max character count.\n */\nexport const FilterTextInput = ({\n filter,\n value,\n onChange,\n layout,\n}: FilterTextInputProps) => {\n const truncate = (s: string): string =>\n filter.maxLength !== undefined ? s.slice(0, filter.maxLength) : s;\n\n // Discriminated spread: when showCounter is true, the filter's `maxLength`\n // is a concrete `number` (enforced by TextInputFilter), so the prop pair\n // satisfies TextField's MaxLengthCounterProps without leaving an undefined\n // denominator in the rendered counter.\n const counterProps = filter.showCounter\n ? ({ showCounter: true, maxLength: filter.maxLength } as const)\n : ({ maxLength: filter.maxLength } as const);\n\n return (\n <TextField\n label={filter.label}\n hideLabel={layout === \"compact\"}\n placeholder={filter.placeholder}\n value={value}\n onChange={(e) => onChange(truncate(e.target.value))}\n {...counterProps}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n );\n};\n","import { FilterTextInput } from \"../../FilterTextInput\";\nimport { FilterPopoverButton } from \"../../FilterPopoverButton\";\nimport type { TextInputFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\n/*\n * Visual cap on the value rendered inside the trigger button. The trigger\n * forces `white-space: nowrap`, so an un-truncated long value would expand\n * the toolbar and break the layout. The full value still lives in the input\n * (and in `filter.value`); only the closed-button summary is clamped.\n */\nconst TRIGGER_VALUE_MAX_CHARS = 24;\n\nconst formatLabel = (filter: TextInputFilter) => {\n if (!filter.value) return filter.label;\n const display =\n filter.value.length > TRIGGER_VALUE_MAX_CHARS\n ? `${filter.value.slice(0, TRIGGER_VALUE_MAX_CHARS)}…`\n : filter.value;\n return `${filter.label}: ${display}`;\n};\n\nconst isSelected = (filter: TextInputFilter) =>\n filter.value !== undefined && filter.value !== \"\";\n\nexport const textInputAdapter: FilterTypeAdapter<TextInputFilter, string> = {\n getValue: (filter) => filter.value ?? \"\",\n // Normalise empty → undefined on write so `isSelected` / activeFilters lists\n // treat a cleared field as inactive without needing extra guards.\n setValue: (filter, value) => ({ ...filter, value: value || undefined }),\n reset: (filter) => ({ ...filter, value: undefined }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n value: existingFilter.value,\n }),\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n renderBarControl: ({ filter }) => (\n <FilterPopoverButton<string>\n key={filter.id}\n filter={filter}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n committedValue={filter.value ?? \"\"}\n initialValue=\"\"\n // In uncontrolled mode FilterPopoverButton closes the popover after\n // every change by default — for a free-text input that means the\n // popover slams shut after the first keystroke. Keep it open while\n // the user types; the value commits live as it goes.\n keepOpenOnUncontrolledChange\n >\n {({ value, onChange }) => (\n <FilterTextInput\n filter={filter}\n value={value}\n onChange={onChange}\n layout=\"compact\"\n />\n )}\n </FilterPopoverButton>\n ),\n renderDrawer: ({ draftFilter, onDraftChange }) => (\n <FilterTextInput\n key={draftFilter.id}\n filter={draftFilter}\n value={draftFilter.value ?? \"\"}\n onChange={(value) => onDraftChange(draftFilter.id, value || undefined)}\n layout=\"grid\"\n />\n ),\n formatLabel,\n isSelected,\n};\n","import Chip from \"../../../../../components/Chip\";\nimport { ANV_PART_ATTR } from \"../../../../../internal/constants/anvParts\";\nimport { FilterItemWrapper } from \"../../FilterItemWrapper\";\nimport { FilterTriggerButton } from \"../../FilterTriggerButton\";\nimport { PARTS } from \"../../parts\";\nimport { TreeSelectFieldSync } from \"../../../TreeSelectField\";\nimport {\n TreeSelectMenuSync,\n type TreeSelectMenuSyncProps,\n type TreeSelectMenuValue,\n} from \"../../../TreeSelectMenu\";\nimport type { TreeFilter } from \"../types\";\nimport type { FilterTypeAdapter } from \"./types\";\n\ntype Value = TreeSelectMenuValue[];\n\nconst isSelected = (filter: TreeFilter) =>\n !!filter.selectedNodes && filter.selectedNodes.length > 0;\n\nconst formatLabel = (filter: TreeFilter) => {\n const count = filter.selectedNodes?.length ?? 0;\n if (count === 0) return filter.label;\n const countLabel = count.toString();\n return (\n <>\n {filter.label}\n <Chip\n label={countLabel}\n size=\"small\"\n aria-label={`${countLabel} selected items`}\n {...{ [ANV_PART_ATTR]: PARTS.countBadge }}\n />\n </>\n );\n};\n\nconst passThroughMenuProps = (filter: TreeFilter): TreeSelectMenuSyncProps => {\n const {\n id: _id,\n label: _label,\n type: _type,\n selectedNodes: _selectedNodes,\n drawerOnly: _drawerOnly,\n ...rest\n } = filter;\n return rest as unknown as TreeSelectMenuSyncProps;\n};\n\nexport const treeAdapter: FilterTypeAdapter<TreeFilter, Value> = {\n getValue: (filter) => filter.selectedNodes ?? [],\n setValue: (filter, value) => ({ ...filter, selectedNodes: value }),\n reset: (filter) => ({ ...filter, selectedNodes: [] }),\n isActive: isSelected,\n preserveState: (newFilter, existingFilter) => ({\n ...newFilter,\n selectedNodes: existingFilter.selectedNodes,\n }),\n // Options stay consumer-owned; selected nodes already carry id/label.\n cloneWithItemRefs: (filter) => ({ ...filter }),\n\n renderBarControl: ({ filter, updateFilter, controlledFiltering }) => (\n <FilterItemWrapper key={filter.id}>\n <TreeSelectMenuSync\n {...passThroughMenuProps(filter)}\n id={filter.id}\n label={filter.label}\n value={filter.selectedNodes ?? []}\n onSelectedOptionsChange={(nodes) =>\n updateFilter(filter.id, nodes, true)\n }\n confirmation={controlledFiltering}\n // Clear commits immediately even while confirmation is buffering picks.\n clear={{\n onClick: () => updateFilter(filter.id, [], true),\n disabled: !isSelected(filter),\n }}\n trigger={(triggerProps) => (\n <FilterTriggerButton\n {...triggerProps}\n filterId={filter.id}\n label={formatLabel(filter)}\n isSelected={isSelected(filter)}\n />\n )}\n />\n </FilterItemWrapper>\n ),\n\n renderDrawer: ({ originalFilter, draftFilter, onDraftChange }) => (\n <TreeSelectFieldSync\n {...passThroughMenuProps(originalFilter)}\n key={draftFilter.id}\n label={originalFilter.label}\n value={draftFilter.selectedNodes ?? []}\n onSelectedOptionsChange={(nodes) => onDraftChange(draftFilter.id, nodes)}\n />\n ),\n\n formatLabel,\n isSelected,\n};\n","import type { Filter } from \"../types\";\nimport { asyncMultiSelectAdapter } from \"./asyncMultiSelect\";\nimport { asyncSelectAdapter } from \"./asyncSelect\";\nimport { asyncTreeAdapter } from \"./asyncTree\";\nimport { booleanAdapter } from \"./boolean\";\nimport { customAdapter } from \"./custom\";\nimport { dateAdapter } from \"./date\";\nimport { dateListAdapter } from \"./dateList\";\nimport { dateRangeAdapter } from \"./dateRange\";\nimport { multiSelectAdapter } from \"./multiSelect\";\nimport { numericRangeAdapter } from \"./numericRange\";\nimport { searchAdapter } from \"./search\";\nimport { singleSelectAdapter } from \"./singleSelect\";\nimport { textInputAdapter } from \"./textInput\";\nimport { treeAdapter } from \"./tree\";\nimport type { FilterAdapters, FilterTypeAdapter } from \"./types\";\n\n/** Runtime registry keyed by Filter[\"type\"]. */\nexport const filterAdapters: FilterAdapters = {\n boolean: booleanAdapter,\n custom: customAdapter,\n singleSelect: singleSelectAdapter,\n multiSelect: multiSelectAdapter,\n date: dateAdapter,\n dateRange: dateRangeAdapter,\n dateList: dateListAdapter,\n asyncSelect: asyncSelectAdapter,\n asyncMultiSelect: asyncMultiSelectAdapter,\n tree: treeAdapter,\n asyncTree: asyncTreeAdapter,\n numericRange: numericRangeAdapter,\n textInput: textInputAdapter,\n search: searchAdapter,\n};\n\n/**\n * Fallback when `filter.type` is missing from {@link filterAdapters}.\n * Reachable only if a caller bypasses TypeScript.\n */\nconst unknownAdapter: FilterTypeAdapter<Filter, unknown> = {\n getValue: () => undefined,\n setValue: (filter) => filter,\n reset: (filter) => filter,\n isActive: () => false,\n preserveState: (newFilter) => newFilter,\n cloneWithItemRefs: (filter) => filter,\n renderBarControl: () => null,\n renderDrawer: () => null,\n formatLabel: (filter) => filter.label,\n isSelected: () => false,\n};\n\n/**\n * Adapter for `filter.type`, widened to Filter / unknown so callers holding\n * the Filter union can invoke adapter methods.\n */\nexport const getAdapter = (\n filter: Filter,\n): FilterTypeAdapter<Filter, unknown> =>\n (filterAdapters[filter.type] as unknown as\n | FilterTypeAdapter<Filter, unknown>\n | undefined) ?? unknownAdapter;\n\nexport type { FilterTypeAdapter } from \"./types\";\n","import { getAdapter } from \"../adapters\";\nimport type { Filter, FilterValue } from \"../types\";\n\nexport { hasChangedFilter } from \"./value-compare\";\n\nexport const getActiveFilters = (filters: Filter[]): Filter[] =>\n filters.filter((filter) => getAdapter(filter).isActive(filter));\n\nexport const checkActiveFilters = (filters: Filter[]): boolean =>\n getActiveFilters(filters).length > 0;\n\nexport const resetFilters = (filters: Filter[]): Filter[] =>\n filters.map((filter) => getAdapter(filter).reset(filter) as Filter);\n\nexport const updateSingleFilter = (\n filters: Filter[],\n filterId: string,\n value: FilterValue,\n): Filter[] =>\n filters.map((filter) => {\n if (filter.id !== filterId) return filter;\n return getAdapter(filter).setValue(filter, value) as Filter;\n });\n\n/** Uses reference equality to detect a parent-provided selection change. */\nexport const hasFilterSelectionChanged = (\n existingFilter: Filter,\n newFilter: Filter,\n): boolean => {\n const existingValue = getAdapter(existingFilter).getValue(existingFilter);\n const newValue = getAdapter(newFilter).getValue(newFilter);\n return existingValue !== newValue;\n};\n\n/** Keeps selection state when configuration changes without a new selection reference. */\nexport const preserveFilterState = (\n newFilter: Filter,\n existingFilter: Filter,\n): Filter =>\n getAdapter(newFilter).preserveState(newFilter, existingFilter) as Filter;\n\n/** Rebinds selected items to the current items array for equality checks. */\nexport const cloneFiltersWithItemRefs = (filters: Filter[]): Filter[] =>\n filters.map(\n (filter) => getAdapter(filter).cloneWithItemRefs(filter) as Filter,\n );\n"],"names":["FilterTriggerButton","Event","ArrowDropDown","isSelected","formatLabel","passThroughMenuProps","Body","PopoverShell","textfieldStyles","searchFieldStyles","Search","Close"],"mappings":"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"}