@servicetitan/anvil2 3.13.2 → 3.13.4
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.
- package/CHANGELOG.md +15 -0
- package/dist/{AiMark-DvxF40mc.js → AiMark-talsbc04.js} +4 -4
- package/dist/{AiMark-DvxF40mc.js.map → AiMark-talsbc04.js.map} +1 -1
- package/dist/AiMark.js +1 -1
- package/dist/{Alert-jMcoYnn3.js → Alert-CtuPPBZL.js} +2 -2
- package/dist/{Alert-jMcoYnn3.js.map → Alert-CtuPPBZL.js.map} +1 -1
- package/dist/Alert.js +1 -1
- package/dist/{AnvilProvider-CgYBk3YP.js → AnvilProvider-DMiXqhL4.js} +3 -3
- package/dist/{AnvilProvider-CgYBk3YP.js.map → AnvilProvider-DMiXqhL4.js.map} +1 -1
- package/dist/AnvilProvider.js +1 -1
- package/dist/{Breadcrumbs-lrFI8Kq5.js → Breadcrumbs-C82Ym_8r.js} +2 -2
- package/dist/{Breadcrumbs-lrFI8Kq5.js.map → Breadcrumbs-C82Ym_8r.js.map} +1 -1
- package/dist/Breadcrumbs.js +1 -1
- package/dist/{Calendar-BDIucj98.js → Calendar-C_-L4ENr.js} +2 -2
- package/dist/{Calendar-BDIucj98.js.map → Calendar-C_-L4ENr.js.map} +1 -1
- package/dist/{Calendar-PMw2HhYu.js → Calendar-CxpLJq9L.js} +2 -2
- package/dist/{Calendar-PMw2HhYu.js.map → Calendar-CxpLJq9L.js.map} +1 -1
- package/dist/Calendar.js +2 -2
- package/dist/{Checkbox-laf_32U2.js → Checkbox-BK2XcOeq.js} +3 -3
- package/dist/{Checkbox-laf_32U2.js.map → Checkbox-BK2XcOeq.js.map} +1 -1
- package/dist/{Checkbox-D6F6szD5.js → Checkbox-CYSxaNUB.js} +2 -2
- package/dist/{Checkbox-D6F6szD5.js.map → Checkbox-CYSxaNUB.js.map} +1 -1
- package/dist/Checkbox.js +1 -1
- package/dist/{Chip-DbmQFaSy.js → Chip-CeIDdhET.js} +2 -2
- package/dist/{Chip-DbmQFaSy.js.map → Chip-CeIDdhET.js.map} +1 -1
- package/dist/Chip.js +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DataTable-B3Nctek_.js → DataTable-Eine5Rt0.js} +23 -11
- package/dist/{DataTable-B3Nctek_.js.map → DataTable-Eine5Rt0.js.map} +1 -1
- package/dist/{DateFieldRange-Babt-rTV.js → DateFieldRange-CYK5G9Os.js} +4 -4
- package/dist/{DateFieldRange-Babt-rTV.js.map → DateFieldRange-CYK5G9Os.js.map} +1 -1
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-DMcfJwxk.js → DateFieldSingle-DgTyuk2m.js} +4 -4
- package/dist/{DateFieldSingle-DMcfJwxk.js.map → DateFieldSingle-DgTyuk2m.js.map} +1 -1
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-cX9tklg3.js → DateFieldYearless-BzRlKLzY.js} +4 -4
- package/dist/{DateFieldYearless-cX9tklg3.js.map → DateFieldYearless-BzRlKLzY.js.map} +1 -1
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DateFieldYearlessRange-B5q1JJ4o.js → DateFieldYearlessRange-CkB2o4y_.js} +3 -3
- package/dist/{DateFieldYearlessRange-B5q1JJ4o.js.map → DateFieldYearlessRange-CkB2o4y_.js.map} +1 -1
- package/dist/DateFieldYearlessRange.js +1 -1
- package/dist/{DaysOfTheWeek-BGeOcpvH.js → DaysOfTheWeek-DqOuWmv0.js} +3 -3
- package/dist/{DaysOfTheWeek-BGeOcpvH.js.map → DaysOfTheWeek-DqOuWmv0.js.map} +1 -1
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Dialog-DHheusQG.js → Dialog-CF62cVJv.js} +4 -4
- package/dist/{Dialog-DHheusQG.js.map → Dialog-CF62cVJv.js.map} +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/{Drawer-ZpS1rSAo.js → Drawer-DLC4fLFj.js} +4 -4
- package/dist/{Drawer-ZpS1rSAo.js.map → Drawer-DLC4fLFj.js.map} +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/DrillDown.js +1 -1
- package/dist/{EditCard-Cfi2Vz2n.js → EditCard-CyTgiIL8.js} +2 -2
- package/dist/{EditCard-Cfi2Vz2n.js.map → EditCard-CyTgiIL8.js.map} +1 -1
- package/dist/EditCard.js +1 -1
- package/dist/{FieldLabel-8AZcbhoO.js → FieldLabel-CRWuY8JG.js} +3 -3
- package/dist/{FieldLabel-8AZcbhoO.js.map → FieldLabel-CRWuY8JG.js.map} +1 -1
- package/dist/FieldLabel.js +1 -1
- package/dist/{FilterBar-BBG7xChV.js → FilterBar-wMr7A60u.js} +6 -5
- package/dist/FilterBar-wMr7A60u.js.map +1 -0
- package/dist/FilterBar.js +1 -1
- package/dist/{InputMask-l91oggrN.js → InputMask-C95GivuE.js} +3 -3
- package/dist/{InputMask-l91oggrN.js.map → InputMask-C95GivuE.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{ListView-CZhtsHeq.js → ListView-BcmAN0es.js} +2 -2
- package/dist/{ListView-CZhtsHeq.js.map → ListView-BcmAN0es.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/{Listbox-XzguYMmw.js → Listbox-DqDmunVm.js} +2 -2
- package/dist/{Listbox-XzguYMmw.js.map → Listbox-DqDmunVm.js.map} +1 -1
- package/dist/Listbox.js +1 -1
- package/dist/MultiSelectField.js +1 -1
- package/dist/{MultiSelectFieldSync-LbZxIXJ1.js → MultiSelectFieldSync-Cow-JcZM.js} +6 -6
- package/dist/{MultiSelectFieldSync-LbZxIXJ1.js.map → MultiSelectFieldSync-Cow-JcZM.js.map} +1 -1
- package/dist/MultiSelectMenu.js +1 -1
- package/dist/{MultiSelectMenuSync-jlTj0prP.js → MultiSelectMenuSync-BDRoHyAC.js} +4 -4
- package/dist/{MultiSelectMenuSync-jlTj0prP.js.map → MultiSelectMenuSync-BDRoHyAC.js.map} +1 -1
- package/dist/{NumberField-KO51fZ_O.js → NumberField-_INCSZA4.js} +3 -3
- package/dist/{NumberField-KO51fZ_O.js.map → NumberField-_INCSZA4.js.map} +1 -1
- package/dist/NumberField.js +1 -1
- package/dist/{Page-Z_ttFQJZ.js → Page-Qs9jLCuF.js} +9 -9
- package/dist/{Page-Z_ttFQJZ.js.map → Page-Qs9jLCuF.js.map} +1 -1
- package/dist/Page.js +1 -1
- package/dist/{Pagination-C0x5v_yk.js → Pagination-BIWkl_xB.js} +2 -2
- package/dist/{Pagination-C0x5v_yk.js.map → Pagination-BIWkl_xB.js.map} +1 -1
- package/dist/Pagination.js +1 -1
- package/dist/{Popover-BPg2nwm3.js → Popover-Cuj7VgFq.js} +3 -3
- package/dist/{Popover-BPg2nwm3.js.map → Popover-Cuj7VgFq.js.map} +1 -1
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-Dc8PTakM.js → ProgressBar-DpQWWpp2.js} +2 -2
- package/dist/{ProgressBar-Dc8PTakM.js.map → ProgressBar-DpQWWpp2.js.map} +1 -1
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-BDBjGCJR.js → Radio-CQyMQ2Fa.js} +3 -3
- package/dist/{Radio-BDBjGCJR.js.map → Radio-CQyMQ2Fa.js.map} +1 -1
- package/dist/{Radio-kONDu2uD.js → Radio-CqWsiUNE.js} +2 -2
- package/dist/{Radio-kONDu2uD.js.map → Radio-CqWsiUNE.js.map} +1 -1
- package/dist/Radio.js +1 -1
- package/dist/{RichTextEditor-U5xv9w8O.js → RichTextEditor-djeS51hB.js} +8 -8
- package/dist/{RichTextEditor-U5xv9w8O.js.map → RichTextEditor-djeS51hB.js.map} +1 -1
- package/dist/RichTextEditor.js +1 -1
- package/dist/{SavedFiltersButton-LViLmMde.js → SavedFiltersButton-CzF2Ze4z.js} +10 -9
- package/dist/SavedFiltersButton-CzF2Ze4z.js.map +1 -0
- package/dist/SavedFiltersButton.js +1 -1
- package/dist/{SelectCard-BhVmrXxS.js → SelectCard-DtnbggjT.js} +3 -3
- package/dist/{SelectCard-BhVmrXxS.js.map → SelectCard-DtnbggjT.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldLabel-hJwER0Gc.js → SelectFieldLabel-D_DIvizK.js} +2 -2
- package/dist/{SelectFieldLabel-hJwER0Gc.js.map → SelectFieldLabel-D_DIvizK.js.map} +1 -1
- package/dist/{SelectFieldSync-DDL_XnSP.js → SelectFieldSync-DRX67uNV.js} +5 -5
- package/dist/{SelectFieldSync-DDL_XnSP.js.map → SelectFieldSync-DRX67uNV.js.map} +1 -1
- package/dist/SelectMenu.js +1 -1
- package/dist/{SelectMenuSync-BdrLS1Jg.js → SelectMenuSync-eDwHHbJK.js} +4 -4
- package/dist/{SelectMenuSync-BdrLS1Jg.js.map → SelectMenuSync-eDwHHbJK.js.map} +1 -1
- package/dist/{SelectOptions-BbQaDz-p.js → SelectOptions-Bbin1xRA.js} +2 -2
- package/dist/{SelectOptions-BbQaDz-p.js.map → SelectOptions-Bbin1xRA.js.map} +1 -1
- package/dist/{SelectTrigger-CKiKG_Z_.js → SelectTrigger-D9HceciW.js} +2 -2
- package/dist/{SelectTrigger-CKiKG_Z_.js.map → SelectTrigger-D9HceciW.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-C53mpZ6G.js → SelectTriggerBase-DB87vylk.js} +3 -3
- package/dist/{SelectTriggerBase-C53mpZ6G.js.map → SelectTriggerBase-DB87vylk.js.map} +1 -1
- package/dist/{Switch-BuIZ8Peh.js → Switch-D0G3uYh2.js} +2 -2
- package/dist/{Switch-BuIZ8Peh.js.map → Switch-D0G3uYh2.js.map} +1 -1
- package/dist/Switch.js +1 -1
- package/dist/Table.js +1 -1
- package/dist/{Text-Ci-L0y2z.js → Text-DSPGfLRe.js} +2 -2
- package/dist/{Text-Ci-L0y2z.js.map → Text-DSPGfLRe.js.map} +1 -1
- package/dist/Text.js +1 -1
- package/dist/{TextField-CIF-Ibkg.js → TextField-BeHKSFGT.js} +2 -2
- package/dist/{TextField-CIF-Ibkg.js.map → TextField-BeHKSFGT.js.map} +1 -1
- package/dist/{TextField-C5db78Nb.js → TextField-DQQm9ghi.js} +3 -3
- package/dist/{TextField-C5db78Nb.js.map → TextField-DQQm9ghi.js.map} +1 -1
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-90BDBw_L.js → Textarea-CsjFkUe-.js} +3 -3
- package/dist/{Textarea-90BDBw_L.js.map → Textarea-CsjFkUe-.js.map} +1 -1
- package/dist/Textarea.js +1 -1
- package/dist/{ThemeProvider-D4dbBfHd.js → ThemeProvider-Cx7wqUQh.js} +2 -2
- package/dist/{ThemeProvider-D4dbBfHd.js.map → ThemeProvider-Cx7wqUQh.js.map} +1 -1
- package/dist/ThemeProvider.css +20 -4
- package/dist/ThemeProvider.js +1 -1
- package/dist/ThemeProvider.module-ByAsjx7c.js +8 -0
- package/dist/ThemeProvider.module-ByAsjx7c.js.map +1 -0
- package/dist/{TimeField-C_K-uPrE.js → TimeField-Bni8NTdT.js} +4 -4
- package/dist/{TimeField-C_K-uPrE.js.map → TimeField-Bni8NTdT.js.map} +1 -1
- package/dist/TimeField.js +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-CRoqsuBq.js → Toaster-BYR_CIYy.js} +2 -2
- package/dist/{Toaster-CRoqsuBq.js.map → Toaster-BYR_CIYy.js.map} +1 -1
- package/dist/{Toaster-CC34KRD9.js → Toaster-Co41QHNB.js} +4 -4
- package/dist/{Toaster-CC34KRD9.js.map → Toaster-Co41QHNB.js.map} +1 -1
- package/dist/{Toolbar-C1fBdJiE.js → Toolbar-CoF8msAf.js} +5 -5
- package/dist/{Toolbar-C1fBdJiE.js.map → Toolbar-CoF8msAf.js.map} +1 -1
- package/dist/{Toolbar-CKgEX5iE.js → Toolbar-DPTjs06D.js} +4 -4
- package/dist/{Toolbar-CKgEX5iE.js.map → Toolbar-DPTjs06D.js.map} +1 -1
- package/dist/Toolbar.js +2 -2
- package/dist/{ToolbarButtonToggle-DEPfji6E.js → ToolbarButtonToggle-L-9HgAbf.js} +2 -2
- package/dist/{ToolbarButtonToggle-DEPfji6E.js.map → ToolbarButtonToggle-L-9HgAbf.js.map} +1 -1
- package/dist/{Tooltip-DM63W1Np.js → Tooltip-D4sgiNLd.js} +3 -3
- package/dist/{Tooltip-DM63W1Np.js.map → Tooltip-D4sgiNLd.js.map} +1 -1
- package/dist/Tooltip.js +1 -1
- package/dist/TreeSelectField.js +1 -1
- package/dist/{TreeSelectFieldSync-D7ou3LDX.js → TreeSelectFieldSync-tIv1teyf.js} +5 -5
- package/dist/{TreeSelectFieldSync-D7ou3LDX.js.map → TreeSelectFieldSync-tIv1teyf.js.map} +1 -1
- package/dist/TreeSelectMenu.js +1 -1
- package/dist/{TreeSelectMenuSync-DVbQ-6UN.js → TreeSelectMenuSync-g6va7mcZ.js} +3 -3
- package/dist/{TreeSelectMenuSync-DVbQ-6UN.js.map → TreeSelectMenuSync-g6va7mcZ.js.map} +1 -1
- package/dist/{TypeaheadTextField-C1uO5wgs.js → TypeaheadTextField-LPcU3AYa.js} +3 -3
- package/dist/{TypeaheadTextField-C1uO5wgs.js.map → TypeaheadTextField-LPcU3AYa.js.map} +1 -1
- package/dist/TypeaheadTextField.js +1 -1
- package/dist/{YearlessDateInputWithPicker-Cav1QK7J.js → YearlessDateInputWithPicker-B9mpSbk0.js} +2 -2
- package/dist/{YearlessDateInputWithPicker-Cav1QK7J.js.map → YearlessDateInputWithPicker-B9mpSbk0.js.map} +1 -1
- package/dist/beta.js +17 -17
- package/dist/{bulkActionTypes-DHvrhDC5.js → bulkActionTypes-BsF_-nso.js} +2 -2
- package/dist/{bulkActionTypes-DHvrhDC5.js.map → bulkActionTypes-BsF_-nso.js.map} +1 -1
- package/dist/{filter-state-CaOTUqh1.js → filter-state-72Xi3wkJ.js} +25 -20
- package/dist/filter-state-72Xi3wkJ.js.map +1 -0
- package/dist/{index-BObnJSIh.js → index-BYBwRASP.js} +2 -2
- package/dist/{index-BObnJSIh.js.map → index-BYBwRASP.js.map} +1 -1
- package/dist/index.js +44 -44
- package/dist/{portalScopeClassNames--sU7fdKW.js → portalScopeClassNames-DR6qlli0.js} +2 -2
- package/dist/{portalScopeClassNames--sU7fdKW.js.map → portalScopeClassNames-DR6qlli0.js.map} +1 -1
- package/dist/src/beta/components/FilterBar/FilterDateList.d.ts +4 -2
- package/dist/src/beta/components/FilterBar/index.d.ts +1 -1
- package/dist/src/beta/components/FilterBar/internal/types.d.ts +15 -0
- package/dist/{stripInlineMarkdown-aIDVZDGr.js → stripInlineMarkdown-CJ6B_1zc.js} +2 -2
- package/dist/{stripInlineMarkdown-aIDVZDGr.js.map → stripInlineMarkdown-CJ6B_1zc.js.map} +1 -1
- package/dist/{syncFilterUtils-BPuSOFJn.js → syncFilterUtils-Br-jhNbQ.js} +3 -3
- package/dist/{syncFilterUtils-BPuSOFJn.js.map → syncFilterUtils-Br-jhNbQ.js.map} +1 -1
- package/dist/token/core/semantic-variables.scss +16 -0
- package/dist/token/core/semantic.d.ts +8 -0
- package/dist/token/core/semantic.js +104 -0
- package/dist/token/core/semantic.scss +8 -0
- package/dist/token.js +112 -0
- package/dist/token.js.map +1 -1
- package/dist/{treeSync-IYtVu8Jq.js → treeSync-5wYj5qDY.js} +3 -3
- package/dist/{treeSync-IYtVu8Jq.js.map → treeSync-5wYj5qDY.js.map} +1 -1
- package/dist/{useDrilldown-CHukLz7z.js → useDrilldown-C01bOoDR.js} +3 -3
- package/dist/{useDrilldown-CHukLz7z.js.map → useDrilldown-C01bOoDR.js.map} +1 -1
- package/dist/{useInfiniteCombobox-DNXkXJN5.js → useInfiniteCombobox-D7HSG1h5.js} +4 -4
- package/dist/{useInfiniteCombobox-DNXkXJN5.js.map → useInfiniteCombobox-D7HSG1h5.js.map} +1 -1
- package/dist/{useInitialFocus-BUxEDMEG.js → useInitialFocus-BIvXK1Rp.js} +2 -2
- package/dist/{useInitialFocus-BUxEDMEG.js.map → useInitialFocus-BIvXK1Rp.js.map} +1 -1
- package/dist/{useInvalidateOnOptionsChange-C92u1JZc.js → useInvalidateOnOptionsChange-DNEgV-1O.js} +5 -5
- package/dist/{useInvalidateOnOptionsChange-C92u1JZc.js.map → useInvalidateOnOptionsChange-DNEgV-1O.js.map} +1 -1
- package/dist/{usePopoverTransitionStates-CDXCdyKa.js → usePopoverTransitionStates-B1opfxxn.js} +1 -2
- package/dist/{usePopoverTransitionStates-CDXCdyKa.js.map → usePopoverTransitionStates-B1opfxxn.js.map} +1 -1
- package/package.json +3 -3
- package/dist/FilterBar-BBG7xChV.js.map +0 -1
- package/dist/SavedFiltersButton-LViLmMde.js.map +0 -1
- package/dist/ThemeProvider.module-_7m6Tav-.js +0 -8
- package/dist/ThemeProvider.module-_7m6Tav-.js.map +0 -1
- package/dist/filter-state-CaOTUqh1.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@servicetitan/anvil2",
|
|
3
|
-
"version": "3.13.
|
|
3
|
+
"version": "3.13.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./dist/src/index.d.ts",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"tinycolor2": "^1.6.0",
|
|
80
80
|
"uuid": "^14.0.0",
|
|
81
81
|
"@servicetitan/hammer-icon": "1.3.0",
|
|
82
|
-
"@servicetitan/hammer-token": "3.
|
|
82
|
+
"@servicetitan/hammer-token": "3.4.0"
|
|
83
83
|
},
|
|
84
84
|
"peerDependencies": {
|
|
85
85
|
"@types/react": "^18 || ^19",
|
|
@@ -127,7 +127,7 @@
|
|
|
127
127
|
"vite": "6.4.2",
|
|
128
128
|
"vitest": "^3.2.4",
|
|
129
129
|
"vitest-axe": "^0.1.0",
|
|
130
|
-
"@servicetitan/anvil2-illustrations": "1.
|
|
130
|
+
"@servicetitan/anvil2-illustrations": "1.3.1"
|
|
131
131
|
},
|
|
132
132
|
"scripts": {
|
|
133
133
|
"dev": "vite build --watch",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FilterBar-BBG7xChV.js","sources":["../src/internal/hooks/useContainerQuery/useContainerQuery.ts","../../hammer-icon/mdi/round/tune.svg","../src/beta/components/FilterBar/FilterDrawer.tsx","../src/beta/components/FilterBar/FilterBar.tsx"],"sourcesContent":["import { useEffect, useState, type RefObject } from \"react\";\nimport { core } from \"@servicetitan/hammer-token\";\n\n/**\n * Return type for the useContainerQuery hook\n */\nexport type ContainerQueryReturnProps = {\n /**\n * The breakpoint name\n */\n name: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\";\n /**\n * Minimum width for this breakpoint\n */\n min: number | undefined;\n /**\n * Maximum width for this breakpoint\n */\n max: number | undefined;\n /**\n * Current container width\n */\n containerWidth: number;\n /**\n * Current container height\n */\n containerHeight: number;\n};\n\n/**\n * Determines if the current container width matches a specific breakpoint\n * @param containerWidth - The container width\n * @param name - The breakpoint name\n * @param min - Minimum width for this breakpoint\n * @param max - Maximum width for this breakpoint\n * @returns Breakpoint information if matched, undefined otherwise\n */\nfunction containerBreakpoint(\n containerWidth: number,\n name: ContainerQueryReturnProps[\"name\"],\n min?: number,\n max?: number,\n): ContainerQueryReturnProps | undefined {\n if (\n (min == null || containerWidth >= min) &&\n (max == null || containerWidth < max)\n ) {\n return {\n name,\n min,\n max,\n containerWidth,\n containerHeight: 0, // Will be updated with actual height\n } as const;\n }\n return undefined;\n}\n\n/**\n * Determines the current breakpoint based on container width and hammer-token breakpoint values.\n *\n * Features:\n * - Validates that all required hammer-token breakpoint values are available\n * - Uses cascade logic to determine the appropriate breakpoint\n * - Returns the first matching breakpoint in order of preference\n * - Handles edge cases where breakpoint values are missing\n * - Uses container dimensions for accurate measurements\n * - Supports all standard breakpoints (xs, sm, md, lg, xl, xxl)\n *\n * @param containerWidth - The width of the container element\n * @param containerHeight - The height of the container element\n * @returns Current breakpoint information or undefined if breakpoint values are unavailable\n */\nconst getContainerBreakpoint = (\n containerWidth: number,\n containerHeight: number,\n) => {\n if (!core.primitive?.BreakpointSm) return;\n if (!core.primitive?.BreakpointMd) return;\n if (!core.primitive?.BreakpointLg) return;\n if (!core.primitive?.BreakpointXl) return;\n if (!core.primitive?.BreakpointXxl) return;\n\n const sm = parseInt(core.primitive?.BreakpointSm.value);\n const md = parseInt(core.primitive?.BreakpointMd.value);\n const lg = parseInt(core.primitive?.BreakpointLg.value);\n const xl = parseInt(core.primitive?.BreakpointXl.value);\n const xxl = parseInt(core.primitive?.BreakpointXxl.value);\n\n const result =\n containerBreakpoint(containerWidth, \"xs\", undefined, sm) ??\n containerBreakpoint(containerWidth, \"sm\", sm, md) ??\n containerBreakpoint(containerWidth, \"md\", md, lg) ??\n containerBreakpoint(containerWidth, \"lg\", lg, xl) ??\n containerBreakpoint(containerWidth, \"xl\", xl, xxl) ??\n containerBreakpoint(containerWidth, \"xxl\", xxl, undefined);\n\n return result ? { ...result, containerHeight } : undefined;\n};\n\n/**\n * Custom hook for detecting current breakpoint based on container dimensions.\n *\n * Features:\n * - Detects current breakpoint based on container width instead of viewport width\n * - Supports all standard breakpoints (xs, sm, md, lg, xl, xxl)\n * - Provides container dimensions information\n * - Uses hammer-token breakpoint values for consistency\n * - Listens for container resize events using ResizeObserver\n * - Supports optional disable functionality\n * - Uses container element dimensions for accurate measurements\n *\n * @param containerRef - React ref to the container element to observe\n * @param props - Optional configuration object\n * @param props.disable - Whether to disable the hook\n * @returns Current breakpoint information or undefined if disabled\n */\nexport const useContainerQuery = (\n containerRef: RefObject<HTMLElement>,\n props?: { disable?: boolean },\n) => {\n const [size, setSize] = useState<ContainerQueryReturnProps | undefined>(\n undefined,\n );\n\n useEffect(() => {\n if (props?.disable || !containerRef.current) return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n const breakpoint = getContainerBreakpoint(width, height);\n setSize(breakpoint);\n }\n });\n\n resizeObserver.observe(containerRef.current);\n\n // Set initial size\n const rect = containerRef.current.getBoundingClientRect();\n setSize(getContainerBreakpoint(rect.width, rect.height));\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [containerRef, props?.disable]);\n\n if (props?.disable) return undefined;\n return size;\n};\n","import * as React from \"react\";\nconst SvgTune = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M3 18c0 .55.45 1 1 1h5v-2H4c-.55 0-1 .45-1 1zM3 6c0 .55.45 1 1 1h9V5H4c-.55 0-1 .45-1 1zm10 14v-1h7c.55 0 1-.45 1-1s-.45-1-1-1h-7v-1c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1s1-.45 1-1zM7 10v1H4c-.55 0-1 .45-1 1s.45 1 1 1h3v1c0 .55.45 1 1 1s1-.45 1-1v-4c0-.55-.45-1-1-1s-1 .45-1 1zm14 2c0-.55-.45-1-1-1h-9v2h9c.55 0 1-.45 1-1zm-5-3c.55 0 1-.45 1-1V7h3c.55 0 1-.45 1-1s-.45-1-1-1h-3V4c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1z\" }));\nexport default SvgTune;\n","import {\n useContext,\n useEffect,\n useState,\n useMemo,\n useCallback,\n useRef,\n} from \"react\";\nimport IconTune from \"@servicetitan/hammer-icon/mdi/round/tune.svg\";\nimport IconClose from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport type {\n DateListFilter,\n DateListLibraryOptionId,\n Filter,\n} from \"./internal/types\";\nimport { FilterGroupContext } from \"./internal/FilterGroupContext\";\nimport { Flex } from \"../../../components/Flex\";\nimport {\n checkActiveFilters,\n getActiveFilters,\n resetFilters,\n updateSingleFilter,\n cloneFiltersWithItemRefs,\n hasFilterSelectionChanged,\n} from \"./internal/utils/filter-state\";\nimport { getAdapter } from \"./internal/adapters\";\nimport { DateListDialog } from \"./FilterDateList\";\nimport ButtonToggle from \"../../../components/ButtonToggle\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\nimport Chip from \"../../../components/Chip\";\nimport Drawer from \"../../../components/Drawer\";\nimport Button from \"../../../components/Button\";\n\nimport { useToolbarSize } from \"../Toolbar/internal/ToolbarContext\";\n\nimport cx from \"classnames\";\nimport styles from \"./FilterBar.module.scss\";\n\n/**\n * FilterDrawer component provides a drawer interface for filter selection.\n * Always operates in controlled mode with batch updates.\n * Built into FilterGroup for batch editing of drawer-only and below-breakpoint filters.\n *\n * Features:\n * - Shows all available filters in a side panel\n * - Maintains separate draft state for all filters\n * - Updates filters only when Apply is clicked\n * - Provides Clear All functionality\n * - Supports boolean, custom, single-select, multi-select, date, and date range filter types\n * - Integrates with FilterGroup context for state management\n * - Handles date and date range filters with appropriate input components\n */\nexport const FilterDrawer = () => {\n const [open, setOpen] = useState(false);\n\n // Get filter context from parent\n const {\n filters,\n updateFilter,\n onFilterChange,\n drawerOnlyFilters,\n showInlineFilters,\n } = useContext(FilterGroupContext);\n const toolbarSize = useToolbarSize();\n\n // Local draft state for filters within the drawer\n const [draftFilters, setDraftFilters] = useState<Filter[]>(filters);\n\n // Open dialog for a dateList library option (On…/Before…/After…/Custom Range…).\n const [dateListDialogState, setDateListDialogState] = useState<{\n filterId: string;\n libraryId: DateListLibraryOptionId;\n } | null>(null);\n\n // Filters not reachable from the toolbar: when inline filters are shown,\n // only drawer-only filters qualify; otherwise every filter qualifies.\n const filtersNotInToolbar = showInlineFilters ? drawerOnlyFilters : filters;\n\n const activeFiltersCount = getActiveFilters(filtersNotInToolbar).length;\n\n // Track previous state to detect when to sync draft\n const prevOpenRef = useRef(open);\n const prevFiltersRef = useRef<Filter[]>(filters);\n\n /**\n * Reset draft filters when drawer opens and sync when filter selections change while open\n * Ensures drawer always shows current filter state\n */\n useEffect(() => {\n const justOpened = open && !prevOpenRef.current;\n prevOpenRef.current = open;\n\n if (open) {\n // Sync draft state if:\n // 1. Drawer just opened, OR\n // 2. Any filter selection value changed while already open (race condition fix)\n // Don't sync when only items arrays change (preserves selections during search)\n const anySelectionChanged = prevFiltersRef.current.some(\n (prevFilter, index) => {\n const newFilter = filters[index];\n return newFilter && hasFilterSelectionChanged(prevFilter, newFilter);\n },\n );\n\n const shouldSync = justOpened || anySelectionChanged;\n\n if (shouldSync) {\n setDraftFilters(cloneFiltersWithItemRefs(filters));\n }\n\n prevFiltersRef.current = filters;\n }\n }, [open, filters]);\n\n /**\n * Handles changing a draft filter value\n * Updates only the draft state, not the actual filters\n *\n * @param filterId - ID of the filter to update\n * @param value - New value for the filter\n */\n const handleDraftChange = useCallback((filterId: string, value: unknown) => {\n setDraftFilters((draft) => updateSingleFilter(draft, filterId, value));\n }, []);\n\n /**\n * Clears all draft filters in the drawer\n * Does not affect the actual filters until Apply is clicked\n */\n const clearDraftFilters = () => {\n setDraftFilters(resetFilters(draftFilters));\n };\n\n const hasActiveDraftFilters = checkActiveFilters(draftFilters);\n\n const requestDateListDialog = useCallback(\n (filterId: string, libraryId: DateListLibraryOptionId) => {\n setDateListDialogState({ filterId, libraryId });\n },\n [],\n );\n\n const filterForm = useMemo(\n () =>\n draftFilters.map((draftFilter) => {\n const originalFilter = filters.find((f) => f.id === draftFilter.id);\n if (!originalFilter) return null;\n\n return getAdapter(draftFilter).renderDrawer({\n originalFilter,\n draftFilter,\n onDraftChange: handleDraftChange,\n requestDateListDialog,\n });\n }),\n [draftFilters, filters, handleDraftChange, requestDateListDialog],\n );\n\n const applyFiltering = () => {\n draftFilters.forEach((draftFilter) => {\n const value = getAdapter(draftFilter).getValue(draftFilter);\n updateFilter(draftFilter.id, value, false);\n });\n\n onFilterChange?.(draftFilters);\n setOpen(false);\n };\n\n const handleCancel = () => {\n setOpen(false);\n };\n\n const hasHiddenActiveFilters = activeFiltersCount > 0;\n\n const triggerClasses = cx(\n styles[\"filter-button-trigger\"],\n styles[\"filter-drawer-trigger\"],\n {\n [styles[\"filter-drawer-trigger--chipped\"]]: hasHiddenActiveFilters,\n },\n );\n\n const dateListDialogTarget = dateListDialogState\n ? draftFilters.find(\n (f): f is DateListFilter =>\n f.id === dateListDialogState.filterId && f.type === \"dateList\",\n )\n : undefined;\n const dateListDialogSelected = dateListDialogTarget?.selectedOption;\n const dateListDialogInitialValue =\n dateListDialogSelected &&\n dateListDialogSelected.id === dateListDialogState?.libraryId &&\n dateListDialogSelected.value !== null\n ? dateListDialogSelected.value\n : undefined;\n\n return (\n <>\n <ButtonToggle\n data-anv=\"filter-group-drawer-trigger\"\n icon={{ before: IconTune }}\n onClick={() => setOpen(true)}\n className={triggerClasses}\n checked={open}\n size={toolbarSize}\n {...{ [ANV_PART_ATTR]: PARTS.drawerTrigger }}\n >\n Filters\n {hasHiddenActiveFilters && (\n <Chip\n size=\"small\"\n label={activeFiltersCount.toString()}\n {...{ [ANV_PART_ATTR]: PARTS.countBadge }}\n />\n )}\n </ButtonToggle>\n\n <Drawer\n data-anv=\"filter-group-drawer\"\n data-testid=\"filter-group-drawer\"\n open={open}\n onClose={() => setOpen(false)}\n {...{ [ANV_PART_ATTR]: PARTS.drawer }}\n >\n <Drawer.Content>\n <Flex direction=\"column\" gap={6} grow={1}>\n {filterForm}\n </Flex>\n </Drawer.Content>\n\n <Drawer.Footer>\n <Flex\n justifyContent={\n hasActiveDraftFilters ? \"space-between\" : \"flex-end\"\n }\n grow={1}\n >\n {hasActiveDraftFilters && (\n <Button\n appearance=\"ghost\"\n icon={{ before: IconClose }}\n onClick={clearDraftFilters}\n {...{ [ANV_PART_ATTR]: PARTS.clearFiltersButton }}\n >\n Clear All Filters\n </Button>\n )}\n\n <Flex gap=\"3\">\n <Button\n onClick={handleCancel}\n {...{ [ANV_PART_ATTR]: PARTS.cancelButton }}\n >\n Cancel\n </Button>\n <Button\n appearance=\"primary\"\n onClick={applyFiltering}\n {...{ [ANV_PART_ATTR]: PARTS.applyButton }}\n >\n Apply\n </Button>\n </Flex>\n </Flex>\n </Drawer.Footer>\n </Drawer>\n <DateListDialog\n libraryId={dateListDialogState?.libraryId ?? null}\n parentFilterId={dateListDialogState?.filterId ?? \"\"}\n initialValue={dateListDialogInitialValue}\n mode={dateListDialogTarget?.mode}\n dialogCtaLabel=\"Save\"\n onCommit={(option) => {\n if (dateListDialogState) {\n handleDraftChange(dateListDialogState.filterId, option);\n }\n setDateListDialogState(null);\n }}\n onCancel={() => setDateListDialogState(null)}\n />\n </>\n );\n};\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n useCallback,\n} from \"react\";\nimport { useMergeRefs } from \"../../../hooks\";\nimport CloseIcon from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport type { Filter } from \"./internal/types\";\nimport { FilterItemWrapper } from \"./FilterItemWrapper\";\nimport Button from \"../../../components/Button\";\nimport type { DataAttributes, LayoutUtilProps } from \"../../../types\";\nimport { useContainerQuery, useLayoutPropsUtil } from \"../../../internal/hooks\";\nimport {\n checkActiveFilters,\n resetFilters,\n updateSingleFilter,\n hasFilterSelectionChanged,\n preserveFilterState,\n} from \"./internal/utils/filter-state\";\nimport { getAdapter } from \"./internal/adapters\";\nimport { FilterGroupContext } from \"./internal/FilterGroupContext\";\nimport { FilterDrawer } from \"./FilterDrawer\";\nimport { ToolbarContext } from \"../Toolbar/internal/ToolbarContext\";\nimport type { ToolbarSize } from \"../Toolbar/types\";\nimport {\n getToolbarElements,\n handleToolbarKeyDown,\n updateToolbarItemsTabIndex,\n} from \"../Toolbar/internal/utils/accessibility\";\nimport { Flex } from \"../../../components/Flex\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\n\nimport styles from \"./FilterBar.module.scss\";\n\n/**\n * Props for the FilterBar component\n *\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type FilterBarProps = ComponentPropsWithoutRef<\"div\"> &\n LayoutUtilProps &\n DataAttributes & {\n /** Array of filter objects */\n filters: Filter[];\n /** Description of the content this filter bar is associated with, used for accessibility */\n associatedContent: string;\n /** Callback function when filters change */\n onFilterChange: (filters: Filter[]) => void;\n /** Whether the filters submission is controlled via an apply button */\n controlledFiltering?: boolean;\n /**\n * Size of filter controls\n * @default xsmall\n */\n size?: ToolbarSize;\n /**\n * When true, filters stay inline at every container width instead of\n * collapsing to drawer-only mode at narrow widths.\n * @default false\n */\n disableCollapse?: boolean;\n };\n\n/**\n * FilterBar component for displaying a standalone group of filters with toggles and a clear button.\n *\n * Features:\n * - Standalone component with `role=\"toolbar\"` and keyboard navigation\n * - Renders filter toggles and popovers for all filter types\n * - Supports controlled and uncontrolled filtering\n * - Integrates with FilterDrawer for batch filter editing of drawer-only filters\n * - Provides a clear all filters button\n * - Shares filter state via context for child components\n * - Supports boolean, custom, single-select, multi-select, date, and date range filter types\n * - Preserves filter state when filter configuration changes\n * - Responsive: collapses to drawer-only mode below 640px; opt out via `disableCollapse`\n * - Always wraps; never collapses items into an overflow menu\n * - Can be composed alongside Toolbar as a sibling using Flex layout\n *\n * @example\n * <FilterBar\n * associatedContent=\"invoices\"\n * filters={filters}\n * onFilterChange={handleFilter}\n * controlledFiltering={true}\n * />\n *\n * @example\n * // With Toolbar as sibling\n * <Flex alignItems=\"center\" justifyContent=\"space-between\">\n * <Toolbar associatedContent=\"invoice actions\">\n * <Toolbar.Button icon={SaveIcon} aria-label=\"Save\" />\n * </Toolbar>\n * <FilterBar\n * associatedContent=\"invoices\"\n * filters={filters}\n * onFilterChange={handleFilter}\n * />\n * </Flex>\n */\nexport const FilterBar = forwardRef<HTMLDivElement, FilterBarProps>(\n function FilterBarInner(props, ref) {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n filters: initialFilters,\n onFilterChange,\n controlledFiltering = false,\n associatedContent,\n size = \"xsmall\",\n disableCollapse = false,\n className,\n style,\n onKeyDown,\n ...rest\n } = componentProps;\n\n const [filters, setFilters] = useState<Filter[]>(initialFilters);\n const filterBarRef = useRef<HTMLDivElement>(null);\n const containerQuery = useContainerQuery(filterBarRef);\n\n const showInlineFilters =\n disableCollapse || !!(containerQuery && containerQuery.name !== \"xs\");\n\n // Update filters when props change\n useEffect(() => {\n setFilters((prevFilters) => {\n const existingFiltersMap = new Map(prevFilters.map((f) => [f.id, f]));\n\n return initialFilters.map((newFilter: Filter) => {\n const existingFilter = existingFiltersMap.get(newFilter.id);\n\n if (!existingFilter) {\n return newFilter;\n }\n\n if (!hasFilterSelectionChanged(existingFilter, newFilter)) {\n return preserveFilterState(newFilter, existingFilter);\n }\n\n return newFilter;\n });\n });\n }, [initialFilters]);\n\n /**\n * Updates filter state when a filter is changed\n *\n * @param filterId - ID of the filter to update\n * @param value - New value for the filter\n * @param submit - Whether to submit the filter change\n */\n const updateFilter = useCallback(\n (filterId: string, value: unknown, submit: boolean) => {\n setFilters((prevFilters) => {\n const updatedFilters = updateSingleFilter(\n prevFilters,\n filterId,\n value,\n );\n\n if (submit) {\n onFilterChange?.(updatedFilters);\n }\n\n return updatedFilters;\n });\n },\n [onFilterChange],\n );\n\n /**\n * Clears all active filters\n */\n const clearAllFilters = () => {\n const resetAllFilters = resetFilters(filters);\n setFilters(resetAllFilters);\n onFilterChange?.(resetAllFilters);\n\n requestAnimationFrame(() => {\n if (filterBarRef.current) {\n const firstFocusable = filterBarRef.current.querySelector(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ) as HTMLElement;\n\n if (firstFocusable) {\n firstFocusable.focus();\n }\n }\n });\n };\n\n const hasActiveFilters = checkActiveFilters(filters);\n\n const { inlineFilters, drawerOnlyFilters } = useMemo(() => {\n const inline: Filter[] = [];\n const drawer: Filter[] = [];\n for (const f of filters) {\n (f.drawerOnly ? drawer : inline).push(f);\n }\n // The search filter is a pinned, always-visible field — keyboard\n // navigation treats it as a fixed edge of the roving-focus sequence\n // (see the ArrowLeft/ArrowRight boundary handoff below), so it always\n // renders first regardless of where it sits in `filters`.\n const searchFilter = inline.find((f) => f.type === \"search\");\n const orderedInline = searchFilter\n ? [searchFilter, ...inline.filter((f) => f !== searchFilter)]\n : inline;\n return { inlineFilters: orderedInline, drawerOnlyFilters: drawer };\n }, [filters]);\n\n // The drawer (and its trigger) only exists when at least one filter is\n // unreachable from the toolbar — either because the container is too\n // narrow to show inline filters or the filter is configured as drawer-only.\n const shouldShowDrawer = !showInlineFilters || drawerOnlyFilters.length > 0;\n\n const filterGroupControls = inlineFilters.map((filter) =>\n getAdapter(filter).renderBarControl({\n filter,\n updateFilter,\n controlledFiltering,\n }),\n );\n\n // Provide ToolbarContext so filter sub-components read size from FilterBar.\n // overflow is omitted — it's optional and defaults to wrap behavior.\n const toolbarContextValue = useMemo(\n () => ({\n overflowItems: [],\n addItem: () => {},\n removeItem: () => {},\n toolbarRef: filterBarRef,\n size,\n }),\n [size],\n );\n\n const filterGroupContextValue = useMemo(\n () => ({\n filterGroupRef: filterBarRef,\n filters,\n updateFilter,\n onFilterChange,\n controlledFiltering,\n associatedContent,\n showInlineFilters,\n drawerOnlyFilters,\n }),\n [\n filterBarRef,\n filters,\n updateFilter,\n onFilterChange,\n controlledFiltering,\n associatedContent,\n showInlineFilters,\n drawerOnlyFilters,\n ],\n );\n\n // Initialize tabindex values for keyboard navigation\n useEffect(() => {\n if (filterBarRef.current) {\n updateToolbarItemsTabIndex(filterBarRef.current);\n }\n }, [filters]);\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (filterBarRef.current) {\n // The search field's input keeps a fixed tabindex and is excluded\n // from the roving-tabindex pool (see FilterSearchField), so the\n // generic handler below only knows about the filter chips and\n // wraps within just that pool. When a search field is present,\n // treat it as the boundary neighbor instead: ArrowLeft from the\n // first chip and ArrowRight from the last chip go to the search\n // input rather than wrapping among the chips.\n const searchInput = filterBarRef.current.querySelector<HTMLElement>(\n '[data-anv=\"filter-search-field\"] input',\n );\n\n if (searchInput) {\n const items = getToolbarElements(filterBarRef.current);\n const activeElement = event.target as HTMLElement;\n const activeItem = items.find(\n (item) =>\n item === activeElement ||\n Array.from(item.children).some(\n (child) => child === activeElement,\n ),\n );\n const activeIndex = activeItem ? items.indexOf(activeItem) : -1;\n\n if (\n (event.code === \"ArrowLeft\" && activeIndex === 0) ||\n (event.code === \"ArrowRight\" && activeIndex === items.length - 1)\n ) {\n event.preventDefault();\n searchInput.focus();\n onKeyDown?.(event);\n return;\n }\n }\n\n handleToolbarKeyDown(event, filterBarRef.current);\n }\n onKeyDown?.(event);\n },\n [onKeyDown],\n );\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n return (\n <ToolbarContext.Provider value={toolbarContextValue}>\n <FilterGroupContext.Provider value={filterGroupContextValue}>\n <Flex\n ref={useMergeRefs([filterBarRef, ref])}\n role=\"toolbar\"\n aria-label={`Filters for ${associatedContent}. Use arrow keys to navigate through filter controls.`}\n aria-orientation=\"horizontal\"\n tabIndex={-1}\n onKeyDown={handleKeyDown}\n alignItems=\"center\"\n gap={1}\n wrap=\"wrap\"\n className={className}\n style={styleCombined}\n data-anv=\"filter-bar\"\n {...rest}\n >\n <Flex\n alignItems=\"center\"\n gap={1}\n wrap=\"wrap\"\n grow={1}\n data-anv=\"toolbar-content\"\n >\n {showInlineFilters && filterGroupControls}\n {shouldShowDrawer && <FilterDrawer />}\n\n {showInlineFilters && hasActiveFilters && (\n <FilterItemWrapper>\n <Button\n appearance=\"ghost\"\n size={size}\n className={styles[\"filter-button-trigger\"]}\n icon={{\n before: CloseIcon,\n }}\n onClick={clearAllFilters}\n {...{ [ANV_PART_ATTR]: PARTS.clearFiltersButton }}\n >\n Clear Filters\n </Button>\n </FilterItemWrapper>\n )}\n </Flex>\n </Flex>\n </FilterGroupContext.Provider>\n </ToolbarContext.Provider>\n );\n },\n);\n\nFilterBar.displayName = \"FilterBar\";\n"],"names":["core.primitive?.BreakpointSm","core.primitive?.BreakpointMd","core.primitive?.BreakpointLg","core.primitive?.BreakpointXl","core.primitive?.BreakpointXxl","IconTune","IconClose","CloseIcon"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SavedFiltersButton-LViLmMde.js","sources":["../src/beta/components/SavedFiltersButton/parts.ts","../src/beta/components/SavedFiltersButton/internal/AddSavedFilterDrawer.tsx","../src/beta/components/SavedFiltersButton/internal/EditSavedFiltersDrawer.tsx","../src/beta/components/SavedFiltersButton/SavedFiltersButton.tsx"],"sourcesContent":["import { COMMON_PART } from \"../../../internal/constants/anvParts\";\n\n/**\n * `data-anv-part` names for SavedFiltersButton's interactive sub-elements.\n *\n * The trigger is stamped by FilterTriggerButton (`FilterBar` PARTS.trigger) —\n * do not redeclare `trigger` here. Popover / menu / option parts come from\n * shared OptionsPopover / OptionsPanel internals.\n *\n * Scope in-wrapper queries by the consumer's `data-cy` on the trigger.\n * Drawers and their contents render in the top layer — target those parts\n * by attribute directly. Edit-row buttons also carry `data-id={preset.id}`.\n */\nexport const PARTS = {\n // Common roles (shared values)\n input: COMMON_PART.input,\n cancelButton: COMMON_PART.cancelButton,\n applyButton: COMMON_PART.applyButton,\n\n // SavedFiltersButton-specific roles\n /** Popover footer CTA that opens the Save Current Filter drawer. */\n saveCurrentButton: \"save-current-button\",\n /** Popover footer CTA that opens the Edit Saved Filters drawer. */\n manageButton: \"manage-button\",\n /** Save Current Filter drawer shell. */\n addDrawer: \"add-drawer\",\n /** Edit Saved Filters drawer shell. */\n editDrawer: \"edit-drawer\",\n /**\n * Per-preset edit drilldown screen inside the Edit drawer (visible after\n * clicking an edit-row-button).\n */\n drilldown: \"drilldown\",\n /** Per-preset Edit affordance in the Edit drawer list (use with `data-id`). */\n editRowButton: \"edit-row-button\",\n /** Drilldown Delete Filter action. */\n deleteButton: \"delete-button\",\n /** Drilldown Update Filter action. */\n updateButton: \"update-button\",\n /** Edit drawer list-view Close action. */\n closeButton: \"close-button\",\n} as const;\n","import { useEffect, useState } from \"react\";\nimport Button from \"../../../../components/Button\";\nimport Drawer from \"../../../../components/Drawer\";\nimport Flex from \"../../../../components/Flex\";\nimport { TextField } from \"../../../../components/TextField\";\nimport { ANV_PART_ATTR } from \"../../../../internal/constants/anvParts\";\nimport type { Filter } from \"../../FilterBar/internal/types\";\nimport { PARTS } from \"../parts\";\n\ntype AddSavedFilterDrawerProps = {\n open: boolean;\n onClose: () => void;\n /** Snapshot of filters captured when the drawer opened. */\n filtersSnapshot: Filter[];\n onSave: (payload: {\n name: string;\n filters: Filter[];\n }) => void | Promise<void>;\n /**\n * Consumer-supplied name validator. Returning a string blocks Add and is\n * surfaced as the field's error message; `undefined` allows submit.\n */\n validateName?: (name: string) => string | undefined;\n};\n\n/**\n * Drawer rendered when the user clicks \"Save Current Filter\" in the\n * SavedFiltersButton popover. Captures a name and emits `onSave` with the\n * filters snapshot. Supports async `onSave`; while pending the Add button\n * shows a loading spinner and the form is disabled.\n *\n * If `onSave` rejects, the drawer stays open with the current input so the\n * user can retry or cancel. On success the drawer closes.\n */\nexport const AddSavedFilterDrawer = ({\n open,\n onClose,\n filtersSnapshot,\n onSave,\n validateName,\n}: AddSavedFilterDrawerProps) => {\n const [name, setName] = useState(\"\");\n const [submitting, setSubmitting] = useState(false);\n const [submitError, setSubmitError] = useState<string | undefined>(undefined);\n // After a successful save, the consumer will likely add the just-saved\n // name into their `savedFilters` list synchronously. If we keep running\n // `validateName` against the current input we'll flash a \"name already\n // exists\" error (the validator now sees our own freshly-created preset)\n // before the parent unmounts us. This flag suspends validation between\n // `onSave` resolving and the drawer actually closing.\n const [justSubmitted, setJustSubmitted] = useState(false);\n\n // Reset state every time the drawer opens. We don't reset on close so the\n // closing animation can flush without snapping the visible state mid-tween.\n useEffect(() => {\n if (open) {\n setName(\"\");\n setSubmitting(false);\n setSubmitError(undefined);\n setJustSubmitted(false);\n }\n }, [open]);\n\n const trimmed = name.trim();\n const validationError =\n !justSubmitted && validateName ? validateName(trimmed) : undefined;\n const canSubmit = trimmed.length > 0 && !validationError && !submitting;\n\n const handleAdd = async () => {\n if (!canSubmit) return;\n setSubmitting(true);\n setSubmitError(undefined);\n try {\n await onSave({ name: trimmed, filters: filtersSnapshot });\n // Suspend validation; the parent will close us synchronously, but the\n // closing transition keeps us mounted for a beat — long enough to\n // re-render with the consumer's updated savedFilters list, which\n // otherwise would now collide with our input value.\n setJustSubmitted(true);\n onClose();\n } catch (err) {\n setSubmitError(\n err instanceof Error && err.message\n ? err.message\n : \"Failed to save filter.\",\n );\n setSubmitting(false);\n }\n };\n\n const handleCancel = () => {\n if (submitting) return;\n onClose();\n };\n\n return (\n <Drawer\n open={open}\n onClose={handleCancel}\n {...{ [ANV_PART_ATTR]: PARTS.addDrawer }}\n >\n <Drawer.Header>Save Current Filter</Drawer.Header>\n <Drawer.Content>\n <Flex direction=\"column\" gap=\"4\" grow={1}>\n <TextField\n label=\"Filter Name\"\n placeholder=\"Name this filter\"\n value={name}\n onChange={(e) => setName(e?.target.value ?? \"\")}\n disabled={submitting}\n required\n error={submitError ?? validationError}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && canSubmit) {\n e.preventDefault();\n handleAdd();\n }\n }}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n </Flex>\n </Drawer.Content>\n <Drawer.Footer>\n <Flex justifyContent=\"flex-end\" gap=\"3\" grow={1}>\n <Button\n onClick={handleCancel}\n disabled={submitting}\n {...{ [ANV_PART_ATTR]: PARTS.cancelButton }}\n >\n Cancel\n </Button>\n <Button\n appearance=\"primary\"\n onClick={handleAdd}\n disabled={!canSubmit}\n loading={submitting}\n {...{ [ANV_PART_ATTR]: PARTS.applyButton }}\n >\n Add Saved Filter\n </Button>\n </Flex>\n </Drawer.Footer>\n </Drawer>\n );\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport IconEdit from \"@servicetitan/hammer-icon/mdi/round/edit.svg\";\nimport Alert from \"../../../../components/Alert\";\nimport Button from \"../../../../components/Button\";\nimport Divider from \"../../../../components/Divider\";\nimport {\n DndSort,\n type DndSortChangeEvent,\n} from \"../../../../components/DndSort\";\nimport Drawer from \"../../../../components/Drawer\";\nimport { DrillDown, useDrillDown } from \"../../../../components/DrillDown\";\nimport Flex from \"../../../../components/Flex\";\nimport Text from \"../../../../components/Text\";\nimport { TextField } from \"../../../../components/TextField\";\nimport { ANV_PART_ATTR } from \"../../../../internal/constants/anvParts\";\nimport { DateListDialog } from \"../../FilterBar/FilterDateList\";\nimport { getAdapter } from \"../../FilterBar/internal/adapters\";\nimport {\n cloneFiltersWithItemRefs,\n updateSingleFilter,\n} from \"../../FilterBar/internal/utils/filter-state\";\nimport type {\n DateListFilter,\n DateListLibraryOptionId,\n Filter,\n} from \"../../FilterBar/internal/types\";\nimport { PARTS } from \"../parts\";\nimport type { SavedFilter, SavedFiltersAlertText } from \"../types\";\n\n/**\n * Settled outcome of a delete or update operation. Surfaced as an Alert on\n * the list view of the drawer; persists until the drawer closes or another\n * outcome replaces it.\n */\ntype DrawerAlert = {\n status: \"success\" | \"danger\";\n title: string;\n};\n\ntype EditSavedFiltersDrawerProps = {\n open: boolean;\n onClose: () => void;\n savedFilters: SavedFilter[];\n /** Drilldown's \"Update Filter\" action. May return a promise. */\n onUpdate?: (\n id: string,\n update: { name: string; filters: SavedFilter[\"filters\"] },\n ) => void | Promise<void>;\n /** Drilldown's \"Delete Filter\" action. May return a promise. */\n onDelete?: (id: string) => void | Promise<void>;\n /**\n * Optional drag-to-reorder callback. When provided, the list view renders\n * each row as a `DndSort.Card` with a drag handle and emits the new\n * `orderedIds` after a drop. When omitted, the list renders as a static\n * stack with no handles.\n */\n onReorder?: (orderedIds: string[]) => void | Promise<void>;\n /**\n * Optional validator for the name field in the drilldown. The `currentId`\n * is set to the preset being edited so the consumer can permit the row's\n * own name in uniqueness checks.\n */\n validateName?: (name: string, currentId?: string) => string | undefined;\n /** Optional override for the auto-managed alert text. */\n alertText?: SavedFiltersAlertText;\n};\n\nconst DEFAULT_ALERT_TEXT: Required<SavedFiltersAlertText> = {\n saveSuccess: \"Filter saved.\",\n saveError: \"Failed to save filter.\",\n updateSuccess: \"Filter updated.\",\n updateError: \"Failed to update filter.\",\n deleteSuccess: \"Filter deleted.\",\n deleteError: \"Failed to delete filter.\",\n reorderError: \"Failed to reorder filters.\",\n};\n\n/** The per-preset edit screen lives at drilldown index 0. */\nconst EDIT_INDEX = 0;\n\n/**\n * Drawer that lets the user manage existing saved filters. Composed of two\n * views — a list of presets (the Drawer host) and a per-preset edit screen\n * (a `DrillDown` child) that reuses the FilterBar adapter `renderDrawer`\n * machinery to render edit fields. Navigation between the two is driven by\n * `useDrillDown`, which also wires the back-button affordance built into\n * `DrillDown.Header`.\n */\nexport const EditSavedFiltersDrawer = ({\n open,\n onClose,\n savedFilters,\n onUpdate,\n onDelete,\n onReorder,\n validateName,\n alertText,\n}: EditSavedFiltersDrawerProps) => {\n const { setIndex, back, drillDownProps } = useDrillDown();\n\n // Which preset the user clicked Edit on. `null` while on the list view.\n // We track this ourselves because DrillDown only tracks \"which screen is\n // active,\" not \"which preset is being edited.\"\n const [editingId, setEditingId] = useState<string | null>(null);\n\n // Drilldown-local form state. Re-seeded whenever a new preset is opened\n // (i.e. editingId changes); not re-seeded on each parent re-render so the\n // consumer can hot-swap `savedFilters` mid-edit without clobbering edits.\n const [drilldownName, setDrilldownName] = useState(\"\");\n const [drilldownDraft, setDrilldownDraft] = useState<Filter[]>([]);\n const [dateListDialogState, setDateListDialogState] = useState<{\n filterId: string;\n libraryId: DateListLibraryOptionId;\n } | null>(null);\n const [submitting, setSubmitting] = useState<\"update\" | \"delete\" | null>(\n null,\n );\n const [submitError, setSubmitError] = useState<string | null>(null);\n\n const seededForRef = useRef<string | null>(null);\n\n // Alerts surface settled outcomes from update / delete / reorder.\n // listAlert appears at the top of the list view (most outcomes return\n // there); drilldownAlert appears at the top of the drilldown content when\n // an Update failed and we need to keep the user's in-progress edits\n // available for retry.\n const [listAlert, setListAlert] = useState<DrawerAlert | null>(null);\n const [drilldownAlert, setDrilldownAlert] = useState<DrawerAlert | null>(\n null,\n );\n\n // Reset everything on drawer close so the next open starts at the list\n // with no stale state.\n useEffect(() => {\n if (!open) {\n setEditingId(null);\n seededForRef.current = null;\n setSubmitError(null);\n setSubmitting(null);\n setListAlert(null);\n setDrilldownAlert(null);\n setIndex(undefined);\n }\n }, [open, setIndex]);\n\n const drilldownTarget = editingId\n ? savedFilters.find((s) => s.id === editingId)\n : undefined;\n\n // Seed the drilldown form when entering edit on a new preset. Not\n // re-seeded when the consumer's savedFilters array updates mid-edit —\n // once a drilldown is open, the user's edits are authoritative until\n // they Update, Delete, or Cancel.\n useEffect(() => {\n if (!editingId || !drilldownTarget) return;\n if (seededForRef.current === editingId) return;\n seededForRef.current = editingId;\n setDrilldownName(drilldownTarget.name);\n setDrilldownDraft(cloneFiltersWithItemRefs(drilldownTarget.filters));\n setSubmitError(null);\n }, [editingId, drilldownTarget]);\n\n const resolvedAlertText = useMemo(\n () => ({ ...DEFAULT_ALERT_TEXT, ...alertText }),\n [alertText],\n );\n\n const handleEdit = useCallback(\n (id: string) => {\n setListAlert(null);\n setEditingId(id);\n setIndex(EDIT_INDEX);\n },\n [setIndex],\n );\n\n // DndSort's drop event carries the new id ordering for the zone; we hand\n // that straight to the consumer so they can re-sort `savedFilters`. The\n // callback may return a promise — a rejection surfaces as a danger alert\n // on the list view (matching the delete-failure pattern) so failures\n // aren't invisible. A thrown `Error` with a message takes precedence over\n // the configured `reorderError` text, mirroring update / delete.\n const handleDrop = useCallback(\n (event: DndSortChangeEvent) => {\n if (!onReorder || !event.valid || !event.zoneSort) return;\n Promise.resolve(onReorder(event.zoneSort.map((id) => String(id)))).catch(\n (err) => {\n console.error(\n \"SavedFiltersButton onReorderSavedFilters failed:\",\n err,\n );\n setListAlert({\n status: \"danger\",\n title:\n err instanceof Error && err.message\n ? err.message\n : resolvedAlertText.reorderError,\n });\n },\n );\n },\n [onReorder, resolvedAlertText],\n );\n\n const sortedIds = useMemo(\n () => savedFilters.map((s) => s.id),\n [savedFilters],\n );\n\n // Pop back to the list. Clears form scratch state so the next drilldown\n // entry seeds fresh, and clears the drilldown's error alert.\n const handleBackToList = useCallback(() => {\n seededForRef.current = null;\n setEditingId(null);\n setSubmitError(null);\n setDrilldownAlert(null);\n back();\n }, [back]);\n\n const handleDraftChange = useCallback((filterId: string, value: unknown) => {\n setDrilldownDraft((prev) => updateSingleFilter(prev, filterId, value));\n }, []);\n\n const requestDateListDialog = useCallback(\n (filterId: string, libraryId: DateListLibraryOptionId) => {\n setDateListDialogState({ filterId, libraryId });\n },\n [],\n );\n\n // Render the per-filter form fields by delegating to each adapter's\n // renderDrawer — the exact same machinery FilterDrawer uses, so any\n // adapter that works there works here too.\n const drilldownForm = useMemo(() => {\n if (!drilldownTarget) return null;\n return drilldownDraft.map((draftFilter) => {\n const originalFilter =\n drilldownTarget.filters.find((f) => f.id === draftFilter.id) ??\n draftFilter;\n return getAdapter(draftFilter).renderDrawer({\n originalFilter,\n draftFilter,\n onDraftChange: handleDraftChange,\n requestDateListDialog,\n });\n });\n }, [\n drilldownDraft,\n drilldownTarget,\n handleDraftChange,\n requestDateListDialog,\n ]);\n\n const trimmedName = drilldownName.trim();\n const validationError =\n validateName && editingId\n ? validateName(trimmedName, editingId)\n : undefined;\n const canSubmit =\n editingId !== null &&\n trimmedName.length > 0 &&\n !validationError &&\n submitting === null;\n\n const handleUpdate = useCallback(async () => {\n if (!editingId || !onUpdate || !canSubmit) return;\n setSubmitting(\"update\");\n setSubmitError(null);\n setDrilldownAlert(null);\n try {\n await onUpdate(editingId, {\n name: trimmedName,\n filters: drilldownDraft,\n });\n // Success: pop back to the list with a success alert.\n seededForRef.current = null;\n setEditingId(null);\n back();\n setSubmitting(null);\n setListAlert({\n status: \"success\",\n title: resolvedAlertText.updateSuccess,\n });\n } catch (err) {\n // Failure: stay in drilldown so the user can adjust and retry. The\n // server error surfaces as a drilldown-level alert above the form.\n setDrilldownAlert({\n status: \"danger\",\n title:\n err instanceof Error && err.message\n ? err.message\n : resolvedAlertText.updateError,\n });\n setSubmitting(null);\n }\n }, [\n editingId,\n onUpdate,\n canSubmit,\n trimmedName,\n drilldownDraft,\n resolvedAlertText,\n back,\n ]);\n\n const handleDelete = useCallback(async () => {\n if (!editingId || !onDelete || submitting !== null) return;\n if (drilldownTarget?.disableDelete) return;\n setSubmitting(\"delete\");\n setSubmitError(null);\n setDrilldownAlert(null);\n try {\n await onDelete(editingId);\n // Success: pop back to the list with a success alert.\n seededForRef.current = null;\n setEditingId(null);\n back();\n setSubmitting(null);\n setListAlert({\n status: \"success\",\n title: resolvedAlertText.deleteSuccess,\n });\n } catch (err) {\n // Failure: pop back to the list with an error alert — the drilldown\n // had nothing to preserve since the user was trying to remove the\n // row entirely.\n seededForRef.current = null;\n setEditingId(null);\n back();\n setSubmitting(null);\n setListAlert({\n status: \"danger\",\n title:\n err instanceof Error && err.message\n ? err.message\n : resolvedAlertText.deleteError,\n });\n }\n }, [\n editingId,\n onDelete,\n submitting,\n drilldownTarget,\n resolvedAlertText,\n back,\n ]);\n\n // dateList dialog target derives from drilldownDraft (so the dialog can\n // pre-seed from whatever's currently in the draft).\n const dateListDialogTarget = dateListDialogState\n ? drilldownDraft.find(\n (f): f is DateListFilter =>\n f.id === dateListDialogState.filterId && f.type === \"dateList\",\n )\n : undefined;\n const dateListDialogSelected = dateListDialogTarget?.selectedOption;\n const dateListDialogInitialValue =\n dateListDialogSelected &&\n dateListDialogSelected.id === dateListDialogState?.libraryId &&\n dateListDialogSelected.value !== null\n ? dateListDialogSelected.value\n : undefined;\n\n const drilldownTitle = drilldownTarget?.name ?? \"Edit Saved Filter\";\n\n return (\n <>\n <Drawer\n open={open}\n onClose={onClose}\n {...drillDownProps}\n {...{ [ANV_PART_ATTR]: PARTS.editDrawer }}\n >\n {/* Host view — the saved-filters list. Visible whenever no\n DrillDown screen is active. */}\n <Drawer.Header>Edit Saved Filters</Drawer.Header>\n <Drawer.Content>\n <Flex direction=\"column\" gap=\"4\" grow={1}>\n {listAlert && (\n <Alert title={listAlert.title} status={listAlert.status} />\n )}\n {savedFilters.length === 0 ? (\n <Text subdued size=\"small\">\n No saved filters to edit.\n </Text>\n ) : onReorder ? (\n <DndSort onDrop={handleDrop}>\n <DndSort.Zone\n sortable\n id=\"saved-filters-zone\"\n label=\"Saved filters\"\n orientation=\"vertical\"\n sortedIds={sortedIds}\n gap=\"2\"\n >\n {savedFilters.map((saved) => (\n <DndSort.Card\n key={saved.id}\n id={saved.id}\n label={saved.name}\n dragOnlyWithHandle\n >\n <Flex\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap=\"2\"\n grow={1}\n >\n <Text>{saved.name}</Text>\n {!saved.disableEdit && (\n <Button\n appearance=\"secondary\"\n size=\"small\"\n icon={IconEdit}\n aria-label={`Edit ${saved.name}`}\n data-id={saved.id}\n onClick={() => handleEdit(saved.id)}\n {...{ [ANV_PART_ATTR]: PARTS.editRowButton }}\n />\n )}\n </Flex>\n </DndSort.Card>\n ))}\n </DndSort.Zone>\n </DndSort>\n ) : (\n <Flex direction=\"column\" gap=\"2\">\n {savedFilters.map((saved) => (\n <Flex\n key={saved.id}\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap=\"2\"\n >\n <Text>{saved.name}</Text>\n {!saved.disableEdit && (\n <Button\n appearance=\"secondary\"\n size=\"small\"\n icon={IconEdit}\n aria-label={`Edit ${saved.name}`}\n data-id={saved.id}\n onClick={() => handleEdit(saved.id)}\n {...{ [ANV_PART_ATTR]: PARTS.editRowButton }}\n />\n )}\n </Flex>\n ))}\n </Flex>\n )}\n </Flex>\n </Drawer.Content>\n <Drawer.Footer>\n <Flex justifyContent=\"flex-end\" grow={1}>\n <Button\n onClick={onClose}\n {...{ [ANV_PART_ATTR]: PARTS.closeButton }}\n >\n Close\n </Button>\n </Flex>\n </Drawer.Footer>\n\n {/* Per-preset edit screen. `DrillDown.Header` brings its own back\n button (aria-label \"Previous\"); we hook into `back()` via our\n handleBackToList to clear local form scratch state when popping\n back to the list. */}\n <DrillDown\n index={EDIT_INDEX}\n interactive={dateListDialogState === null}\n {...{ [ANV_PART_ATTR]: PARTS.drilldown }}\n >\n <DrillDown.Header>{drilldownTitle}</DrillDown.Header>\n <DrillDown.Content>\n <Flex direction=\"column\" gap=\"4\" grow={1}>\n {drilldownAlert && (\n <Alert\n title={drilldownAlert.title}\n status={drilldownAlert.status}\n />\n )}\n <TextField\n label=\"Filter Name\"\n placeholder=\"Name this filter\"\n value={drilldownName}\n onChange={(e) => setDrilldownName(e?.target.value ?? \"\")}\n disabled={submitting !== null}\n required\n error={submitError ?? validationError}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n <Divider />\n {drilldownForm}\n </Flex>\n </DrillDown.Content>\n <DrillDown.Footer>\n <Flex\n justifyContent={\n drilldownTarget?.disableDelete ? \"flex-end\" : \"space-between\"\n }\n gap=\"3\"\n grow={1}\n >\n {!drilldownTarget?.disableDelete && (\n <Button\n appearance=\"danger-secondary\"\n onClick={handleDelete}\n loading={submitting === \"delete\"}\n disabled={submitting !== null}\n {...{ [ANV_PART_ATTR]: PARTS.deleteButton }}\n >\n Delete Filter\n </Button>\n )}\n <Flex gap=\"3\">\n <Button\n onClick={handleBackToList}\n disabled={submitting !== null}\n {...{ [ANV_PART_ATTR]: PARTS.cancelButton }}\n >\n Cancel\n </Button>\n <Button\n appearance=\"primary\"\n onClick={handleUpdate}\n disabled={!canSubmit}\n loading={submitting === \"update\"}\n {...{ [ANV_PART_ATTR]: PARTS.updateButton }}\n >\n Update Filter\n </Button>\n </Flex>\n </Flex>\n </DrillDown.Footer>\n </DrillDown>\n </Drawer>\n <DateListDialog\n libraryId={dateListDialogState?.libraryId ?? null}\n parentFilterId={dateListDialogState?.filterId ?? \"\"}\n initialValue={dateListDialogInitialValue}\n mode={dateListDialogTarget?.mode}\n dialogCtaLabel=\"Save\"\n onCommit={(option) => {\n if (dateListDialogState) {\n handleDraftChange(dateListDialogState.filterId, option);\n }\n setDateListDialogState(null);\n }}\n onCancel={() => setDateListDialogState(null)}\n />\n </>\n );\n};\n","import {\n type KeyboardEvent,\n type ReactElement,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport IconAdd from \"@servicetitan/hammer-icon/mdi/round/add.svg\";\nimport IconEdit from \"@servicetitan/hammer-icon/mdi/round/edit.svg\";\n\nimport Button from \"../../../components/Button\";\nimport { Text } from \"../../../components/Text\";\nimport { Flex } from \"../../../components/Flex\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsPanel } from \"../../../internal/components/OptionsPanel\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport type { SelectItem } from \"../../../internal/types/selectFieldInternalTypes\";\nimport type { CheckState, DataAttributes } from \"../../../types\";\nimport { useMenuInteraction } from \"../../../components/SelectMenu/internal/useMenuInteraction\";\nimport { FilterTriggerButton } from \"../FilterBar/FilterTriggerButton\";\nimport styles from \"./SavedFiltersButton.module.scss\";\nimport { PARTS } from \"./parts\";\nimport type { SavedFiltersButtonProps } from \"./types\";\nimport { AddSavedFilterDrawer } from \"./internal/AddSavedFilterDrawer\";\nimport { EditSavedFiltersDrawer } from \"./internal/EditSavedFiltersDrawer\";\n\n/**\n * `SavedFiltersButton` is an opt-in companion to FilterBar that lets users\n * apply, save, edit, and delete preset filter selections. It is fully\n * stateless: the consumer owns the `savedFilters` array and writes its own\n * persistence (server, localStorage, etc.) by reacting to the callbacks the\n * component fires.\n *\n * Visually it's a single Button trigger that opens a popover listing the\n * presets, with two footer actions:\n *\n * - **Save Current Filter** opens a drawer that snapshots `currentFilters`\n * into a new preset.\n * - **Edit Saved Filters** opens a drawer listing every preset with edit\n * affordances; clicking edit on a row drills into a per-preset form\n * reusing the FilterBar adapter `renderDrawer` machinery.\n *\n * Apply, save, update, and delete are all delivered as consumer callbacks\n * (`onApplySavedFilter`, `onSaveCurrentFilter`, `onUpdateSavedFilter`,\n * `onDeleteSavedFilter`). Promise-returning callbacks are supported with\n * loading state on the relevant submit button and success/error alerts on\n * the parent drawer.\n *\n * @example\n * <SavedFiltersButton\n * savedFilters={presets}\n * currentFilters={filters}\n * onApplySavedFilter={(preset) => setFilters(preset.filters)}\n * onSaveCurrentFilter={async ({ name, filters }) => {\n * await api.savePreset({ name, filters });\n * refetchPresets();\n * }}\n * onUpdateSavedFilter={async (id, update) => api.updatePreset(id, update)}\n * onDeleteSavedFilter={async (id) => api.deletePreset(id)}\n * />\n */\nexport const SavedFiltersButton = (props: SavedFiltersButtonProps) => {\n // Root is a fragment — forward consumer `data-*` onto the trigger (Path B).\n const dataAttributes = Object.fromEntries(\n Object.entries(props).filter(([key]) => key.startsWith(\"data-\")),\n ) as DataAttributes;\n\n const {\n savedFilters,\n currentFilters,\n onApplySavedFilter,\n onSaveCurrentFilter,\n onUpdateSavedFilter,\n onDeleteSavedFilter,\n onReorderSavedFilters,\n validateName,\n alertText,\n activeSavedFilterId,\n label: labelProp,\n emptyState,\n } = props;\n\n const DEFAULT_LABEL = \"Saved Filters\";\n const label = labelProp\n ? labelProp\n : activeSavedFilterId\n ? savedFilters.find((sf) => sf.id === activeSavedFilterId)?.name ||\n DEFAULT_LABEL\n : DEFAULT_LABEL;\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n // Synthesize SelectItems so we can reuse the SelectMenu list machinery\n // (OptionsPanel, useMenuInteraction). Each row is one saved filter; the\n // row's id mirrors the preset id.\n const items = useMemo<SelectItem[]>(\n () =>\n savedFilters.map((saved) => ({\n id: saved.id,\n type: \"option\" as const,\n original: { id: saved.id, label: saved.name },\n })),\n [savedFilters],\n );\n\n // Active-preset state is consumer-owned via `activeSavedFilterId`. When\n // the prop names a preset we mark just that row checked; when it's\n // undefined the list reads as a clean unchecked menu (no row has the\n // single-select check affordance).\n const selectedItemIds = useMemo<Set<string | number>>(\n () => (activeSavedFilterId ? new Set([activeSavedFilterId]) : new Set()),\n [activeSavedFilterId],\n );\n const getCheckedState = useCallback(\n (item: SelectItem): CheckState =>\n item.id === activeSavedFilterId ? \"checked\" : \"unchecked\",\n [activeSavedFilterId],\n );\n\n const handleItemActivate = useCallback(\n (item: SelectItem) => {\n const saved = savedFilters.find((s) => s.id === item.id);\n if (saved) onApplySavedFilter(saved);\n },\n [savedFilters, onApplySavedFilter],\n );\n\n // We use the SelectMenu menu-interaction hook as-is so keyboard and focus\n // behavior matches the platform's other menu surfaces. Popover-vs-dialog\n // adaptation is fixed to \"popover\" here — saved filters always render\n // inline in a popover even on mobile, since the heavy editing UX lives in\n // the drawer flows.\n const [isOpen, setIsOpen] = useState(false);\n const {\n closeMenu,\n highlightedIndex,\n getTriggerProps,\n getMenuProps,\n getItemProps,\n } = useMenuInteraction({\n items,\n sectionsMeta: [],\n onItemActivate: handleItemActivate,\n selectedItemIds,\n displayAs: \"popover\",\n closeOnActivate: true,\n id: \"saved-filters\",\n triggerRef,\n label,\n isOpen,\n setIsOpen,\n });\n\n const handleClickOutside = useCallback(() => {\n closeMenu({ restoreFocus: false });\n }, [closeMenu]);\n\n const triggerProps = getTriggerProps();\n\n const [addOpen, setAddOpen] = useState(false);\n const [editOpen, setEditOpen] = useState(false);\n // Snapshot of `currentFilters` captured at the moment the Save drawer\n // opens, so subsequent edits to the bar don't change what gets saved.\n const [filtersSnapshot, setFiltersSnapshot] = useState<typeof currentFilters>(\n [],\n );\n\n const handleSaveCurrentClick = useCallback(() => {\n setFiltersSnapshot(currentFilters);\n closeMenu({ restoreFocus: false });\n setAddOpen(true);\n }, [closeMenu, currentFilters]);\n\n const handleEditClick = useCallback(() => {\n closeMenu({ restoreFocus: false });\n setEditOpen(true);\n }, [closeMenu]);\n\n // Pressing Enter on a row activates via useMenuInteraction; the popover\n // closes on activation, so footer button focus does not contend with it.\n const handleFooterKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n closeMenu();\n }\n };\n\n const footer: ReactElement = (\n <Flex\n direction=\"column\"\n gap=\"2\"\n className={styles[\"footer\"]}\n onKeyDown={handleFooterKeyDown}\n >\n <Button\n appearance=\"secondary\"\n size=\"small\"\n icon={{ before: IconAdd }}\n style={{ width: \"100%\" }}\n onClick={handleSaveCurrentClick}\n {...{ [ANV_PART_ATTR]: PARTS.saveCurrentButton }}\n >\n Save Current Filter\n </Button>\n <Button\n appearance=\"secondary\"\n size=\"small\"\n icon={{ before: IconEdit }}\n style={{ width: \"100%\" }}\n onClick={handleEditClick}\n disabled={savedFilters.length === 0}\n {...{ [ANV_PART_ATTR]: PARTS.manageButton }}\n >\n Edit Saved Filters\n </Button>\n </Flex>\n );\n\n return (\n <>\n {/*\n FilterTriggerButton renders the same ghost/toolbar-sized chrome the\n FilterBar uses for every filter trigger, so the saved-filters entry\n point reads as just another control in the bar. `isSelected` mirrors\n whether the consumer has named an active preset via\n `activeSavedFilterId`.\n */}\n <FilterTriggerButton\n {...triggerProps}\n {...dataAttributes}\n filterId=\"saved-filters\"\n label={label}\n isSelected={!!(activeSavedFilterId ?? false)}\n />\n <OptionsPopover\n id=\"saved-filters-popover\"\n referenceElement={triggerRef}\n open={isOpen}\n onClose={handleClickOutside}\n width={280}\n footer={footer}\n >\n {items.length === 0 ? (\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n className={styles[\"empty-state\"]}\n >\n {typeof emptyState === \"string\" || emptyState == null ? (\n <Text subdued size=\"small\">\n {emptyState ?? \"No saved filters yet.\"}\n </Text>\n ) : (\n emptyState\n )}\n </Flex>\n ) : (\n <OptionsPanel\n isOpen={isOpen}\n items={items}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n getCheckedState={getCheckedState}\n selectionType=\"single\"\n hasMore={false}\n onLoadMore={() => {}}\n loading={false}\n loadingMore={false}\n />\n )}\n </OptionsPopover>\n <AddSavedFilterDrawer\n open={addOpen}\n onClose={() => setAddOpen(false)}\n filtersSnapshot={filtersSnapshot}\n onSave={onSaveCurrentFilter}\n validateName={validateName ? (name) => validateName(name) : undefined}\n />\n <EditSavedFiltersDrawer\n open={editOpen}\n onClose={() => setEditOpen(false)}\n savedFilters={savedFilters}\n onUpdate={onUpdateSavedFilter}\n onDelete={onDeleteSavedFilter}\n onReorder={onReorderSavedFilters}\n validateName={validateName}\n alertText={alertText}\n />\n </>\n );\n};\n\nSavedFiltersButton.displayName = \"SavedFiltersButton\";\n"],"names":["IconEdit","IconAdd"],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import './ThemeProvider.css';const themeStyles = {
|
|
2
|
-
"theme-core": "_theme-core_bn2f2_1",
|
|
3
|
-
"mode-light": "_mode-light_bn2f2_595",
|
|
4
|
-
"mode-dark": "_mode-dark_bn2f2_599"
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
export { themeStyles as t };
|
|
8
|
-
//# sourceMappingURL=ThemeProvider.module-_7m6Tav-.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeProvider.module-_7m6Tav-.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|