@servicetitan/anvil2 2.0.4 → 2.2.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.
- package/CHANGELOG.md +56 -0
- package/dist/{Calendar-jO-0jbbt.js → Calendar-D0CczOpQ.js} +3 -835
- package/dist/Calendar-D0CczOpQ.js.map +1 -0
- package/dist/{Calendar-DxLrWESu.js → Calendar-oNlBgZKB.js} +2 -2
- package/dist/{Calendar-DxLrWESu.js.map → Calendar-oNlBgZKB.js.map} +1 -1
- package/dist/Calendar.js +2 -2
- package/dist/{Checkbox-9VbydUcM.js → Checkbox-DIY-6agd.js} +12 -12
- package/dist/Checkbox-DIY-6agd.js.map +1 -0
- package/dist/{Checkbox-ZXftLNwB.js → Checkbox-DuzAqrE7.js} +2 -2
- package/dist/{Checkbox-ZXftLNwB.js.map → Checkbox-DuzAqrE7.js.map} +1 -1
- package/dist/Checkbox.js +1 -1
- package/dist/{Combobox-CNObHLjp.js → Combobox-CSGn20KQ.js} +14 -7
- package/dist/Combobox-CSGn20KQ.js.map +1 -0
- package/dist/Combobox.js +1 -1
- package/dist/{DataTable-CQpySyDq.js → DataTable-D30sE1Xt.js} +223 -19
- package/dist/DataTable-D30sE1Xt.js.map +1 -0
- package/dist/{DateFieldRange-BG86w0pX.js → DateFieldRange-DBOiqaML.js} +46 -36
- package/dist/DateFieldRange-DBOiqaML.js.map +1 -0
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-Byu_jyye.js → DateFieldSingle-C4hU55MP.js} +38 -29
- package/dist/DateFieldSingle-C4hU55MP.js.map +1 -0
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-Dw1k3_PY.js → DateFieldYearless-BXkUiHIR.js} +14 -13
- package/dist/DateFieldYearless-BXkUiHIR.js.map +1 -0
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DateFieldYearlessRange--plyld10.js → DateFieldYearlessRange-CGffFnVT.js} +14 -13
- package/dist/DateFieldYearlessRange-CGffFnVT.js.map +1 -0
- package/dist/DateFieldYearlessRange.js +1 -1
- package/dist/{DaysOfTheWeek-vE310Rjp.js → DaysOfTheWeek-DJEDopC9.js} +9 -5
- package/dist/DaysOfTheWeek-DJEDopC9.js.map +1 -0
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Dialog-DZPaz84r.js → Dialog-BbsZMnCA.js} +4 -4
- package/dist/{Dialog-DZPaz84r.js.map → Dialog-BbsZMnCA.js.map} +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/{Drawer-pMQOa2jH.js → Drawer-Dhq76ot3.js} +4 -4
- package/dist/{Drawer-pMQOa2jH.js.map → Drawer-Dhq76ot3.js.map} +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/DrillDown.js +1 -1
- package/dist/{FieldDialog-Be54L3E-.js → FieldDialog-CAuhkCZY.js} +541 -142
- package/dist/FieldDialog-CAuhkCZY.js.map +1 -0
- package/dist/FieldDialog.css +58 -28
- package/dist/{FieldLabel-DSrHbw9U.js → FieldLabel-DL0D6fvc.js} +2 -2
- package/dist/{FieldLabel-DSrHbw9U.js.map → FieldLabel-DL0D6fvc.js.map} +1 -1
- package/dist/FieldLabel.js +1 -1
- package/dist/FieldMessage-DS0COrjp.js +132 -0
- package/dist/FieldMessage-DS0COrjp.js.map +1 -0
- package/dist/FieldMessage.css +18 -4
- package/dist/FieldMessage.js +2 -1
- package/dist/FieldMessage.js.map +1 -1
- package/dist/{Helper-CK-XjpR3.js → Helper-PNGm_U2X.js} +7 -4
- package/dist/Helper-PNGm_U2X.js.map +1 -0
- package/dist/{InputMask-DoqWRi3t.js → InputMask-Ds0W2fKy.js} +2 -2
- package/dist/{InputMask-DoqWRi3t.js.map → InputMask-Ds0W2fKy.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{ListView-CtRhYAls.js → ListView-MMmJDM--.js} +2 -2
- package/dist/{ListView-CtRhYAls.js.map → ListView-MMmJDM--.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/MultiSelectField.js +1 -1
- package/dist/{MultiSelectFieldSync-xj7jXas-.js → MultiSelectFieldSync-Bey99LzJ.js} +178 -58
- package/dist/MultiSelectFieldSync-Bey99LzJ.js.map +1 -0
- package/dist/NumberField-CDkEUfXW.js +237 -0
- package/dist/NumberField-CDkEUfXW.js.map +1 -0
- package/dist/NumberField.js +1 -1
- package/dist/{Page-vc7zs4tn.js → Page-BVxybI-j.js} +6 -6
- package/dist/{Page-vc7zs4tn.js.map → Page-BVxybI-j.js.map} +1 -1
- package/dist/Page.js +1 -1
- package/dist/{Popover-OOLK0hUz.js → Popover-4C5IVk8T.js} +7 -6
- package/dist/{Popover-OOLK0hUz.js.map → Popover-4C5IVk8T.js.map} +1 -1
- package/dist/Popover.css +15 -14
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-HA9RPZfC.js → ProgressBar-BGwp-qnf.js} +16 -11
- package/dist/ProgressBar-BGwp-qnf.js.map +1 -0
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-31wKzlZ4.js → Radio-BRcpSu-d.js} +12 -12
- package/dist/Radio-BRcpSu-d.js.map +1 -0
- package/dist/{Radio-BwWDJuLF.js → Radio-D7hNws2b.js} +2 -2
- package/dist/{Radio-BwWDJuLF.js.map → Radio-D7hNws2b.js.map} +1 -1
- package/dist/Radio.js +1 -1
- package/dist/{SelectCard-C91twG1S.js → SelectCard-Bag44PmE.js} +3 -3
- package/dist/{SelectCard-C91twG1S.js.map → SelectCard-Bag44PmE.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldSync-BFsJssdD.js → SelectFieldSync-CigqXq3T.js} +67 -50
- package/dist/SelectFieldSync-CigqXq3T.js.map +1 -0
- package/dist/{SelectTrigger-Cxhx9IVo.js → SelectTrigger-DgsvUfyl.js} +2 -2
- package/dist/{SelectTrigger-Cxhx9IVo.js.map → SelectTrigger-DgsvUfyl.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-aaOWep-V.js → SelectTriggerBase-OxfNqdIq.js} +12 -7
- package/dist/SelectTriggerBase-OxfNqdIq.js.map +1 -0
- package/dist/{Stepper-Jv9A3Ned.js → Stepper-D8lkCP8Y.js} +11 -2
- package/dist/Stepper-D8lkCP8Y.js.map +1 -0
- package/dist/Stepper.js +1 -1
- package/dist/{Switch-DQICcdAv.js → Switch-D0zwZCg4.js} +2 -2
- package/dist/{Switch-DQICcdAv.js.map → Switch-D0zwZCg4.js.map} +1 -1
- package/dist/Switch.js +1 -1
- package/dist/Table.js +1 -1
- package/dist/{TextField-CDiiYSlT.js → TextField-BycenT6H.js} +13 -12
- package/dist/TextField-BycenT6H.js.map +1 -0
- package/dist/{TextField-CnYxS52Y.js → TextField-Dfzn2HeL.js} +2 -2
- package/dist/{TextField-CnYxS52Y.js.map → TextField-Dfzn2HeL.js.map} +1 -1
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-BnHIDj2P.js → Textarea-BwbwJP6z.js} +13 -12
- package/dist/Textarea-BwbwJP6z.js.map +1 -0
- package/dist/Textarea.js +1 -1
- package/dist/{TimeField-ChqK40k_.js → TimeField-B0WSzSfJ.js} +4 -4
- package/dist/{TimeField-ChqK40k_.js.map → TimeField-B0WSzSfJ.js.map} +1 -1
- package/dist/TimeField.js +1 -1
- package/dist/TimezoneMessage-Cnsl4cHT.js +84 -0
- package/dist/TimezoneMessage-Cnsl4cHT.js.map +1 -0
- package/dist/TimezoneMessage.css +7 -0
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-BlycAc63.js → Toaster-9Q_yaKGu.js} +18 -18
- package/dist/Toaster-9Q_yaKGu.js.map +1 -0
- package/dist/{Toaster-DW_bi2L9.js → Toaster-DHo8dnWH.js} +2 -2
- package/dist/{Toaster-DW_bi2L9.js.map → Toaster-DHo8dnWH.js.map} +1 -1
- package/dist/{Toolbar-vBomnRKG.js → Toolbar-CVOenuCF.js} +70 -23
- package/dist/Toolbar-CVOenuCF.js.map +1 -0
- package/dist/Toolbar.js +1 -1
- package/dist/{Tooltip-CUiAJXak.js → Tooltip-Bt62hC5J.js} +5 -5
- package/dist/{Tooltip-CUiAJXak.js.map → Tooltip-Bt62hC5J.js.map} +1 -1
- package/dist/Tooltip.css +9 -8
- package/dist/Tooltip.js +1 -1
- package/dist/{YearlessDateInputWithPicker-DZSb8sPf.js → YearlessDateInputWithPicker-ztozRk-X.js} +3 -3
- package/dist/{YearlessDateInputWithPicker-DZSb8sPf.js.map → YearlessDateInputWithPicker-ztozRk-X.js.map} +1 -1
- package/dist/beta/components/MultiSelectField/MultiSelectField.d.ts +2 -0
- package/dist/beta/components/MultiSelectField/MultiSelectFieldSync.d.ts +43 -4
- package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldList.d.ts +5 -5
- package/dist/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +13 -2
- package/dist/beta/components/MultiSelectField/stories/MultiSelectField.stories.data.d.ts +1 -0
- package/dist/beta/components/MultiSelectField/types.d.ts +52 -8
- package/dist/beta/components/SelectField/SelectFieldSync.d.ts +10 -3
- package/dist/beta/components/SelectField/internal/FieldListBase.d.ts +6 -5
- package/dist/beta/components/SelectField/internal/SelectFieldList.d.ts +4 -2
- package/dist/beta/components/SelectField/internal/SelectFieldListItem.d.ts +2 -1
- package/dist/beta/components/SelectField/internal/VirtualizedFieldListBase.d.ts +2 -0
- package/dist/beta/components/SelectField/internal/useCombo.d.ts +3 -1
- package/dist/beta/components/SelectField/internal/useFieldListSections.d.ts +55 -0
- package/dist/beta/components/SelectField/stories/SelectField.stories.data.d.ts +1 -0
- package/dist/beta/components/SelectField/types.d.ts +24 -6
- package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableNumberCell.d.ts +7 -0
- package/dist/beta/components/Table/DataTable/internal/util/getTanStackColumnDef.d.ts +1 -0
- package/dist/beta/components/Table/DataTable/stories/DataTable.story-data.d.ts +1 -0
- package/dist/beta/components/Table/createColumnHelper.d.ts +36 -9
- package/dist/beta/components/Table/types.d.ts +54 -4
- package/dist/beta/components/Toolbar/Filters/internal/utils/filter-state.d.ts +1 -0
- package/dist/beta.js +7 -7
- package/dist/components/ButtonToggle/ButtonToggle.d.ts +1 -1
- package/dist/components/Checkbox/Checkbox.d.ts +2 -1
- package/dist/components/Checkbox/CheckboxGroup.d.ts +16 -8
- package/dist/components/Checkbox/internal/Checkbox.d.ts +1 -1
- package/dist/components/DateFieldRange/DateFieldRange.d.ts +8 -1
- package/dist/components/DateFieldRange/internal/DateFieldRangeCalendar.d.ts +3 -1
- package/dist/components/DateFieldSingle/DateFieldSingle.d.ts +8 -1
- package/dist/components/DateFieldSingle/internal/DateFieldSingleCalendar.d.ts +3 -1
- package/dist/components/DateFieldSingle/internal/TimezoneMessage.d.ts +6 -0
- package/dist/components/DateFieldSingle/internal/utils.d.ts +11 -0
- package/dist/components/DateFieldYearless/DateFieldYearless.d.ts +8 -3
- package/dist/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +12 -1
- package/dist/components/DaysOfTheWeek/DaysOfTheWeek.d.ts +20 -6
- package/dist/components/Dialog/internal/useInitialFocus.d.ts +5 -1
- package/dist/components/FieldMessage/FieldMessage.d.ts +39 -20
- package/dist/components/FieldMessage/index.d.ts +1 -0
- package/dist/components/FieldMessage/utils.d.ts +7 -0
- package/dist/components/NumberField/NumberField.d.ts +24 -2
- package/dist/components/Page/Page.d.ts +2 -2
- package/dist/components/ProgressBar/ProgressBar.d.ts +8 -3
- package/dist/components/Radio/Radio.d.ts +2 -1
- package/dist/components/Radio/RadioGroup.d.ts +16 -8
- package/dist/components/SelectTrigger/internal/SelectTriggerBase.d.ts +1 -1
- package/dist/components/Stepper/Stepper.d.ts +6 -2
- package/dist/components/TextField/internal/TextField.d.ts +12 -1
- package/dist/components/Textarea/Textarea.d.ts +8 -5
- package/dist/index-DXeGMe23.js +836 -0
- package/dist/index-DXeGMe23.js.map +1 -0
- package/dist/{index.esm-BMOZFPwN.js → index.esm-C2ZhC_8d.js} +2 -2
- package/dist/{index.esm-BMOZFPwN.js.map → index.esm-C2ZhC_8d.js.map} +1 -1
- package/dist/{useOnClickOutside-Cyqbe1n3.js → index.esm-K9kxJhLx.js} +88 -94
- package/dist/index.esm-K9kxJhLx.js.map +1 -0
- package/dist/index.js +31 -30
- package/dist/index.js.map +1 -1
- package/dist/internal/components/Helper/Helper.d.ts +12 -3
- package/dist/internal/components/StatusIcon/StatusIcon.d.ts +45 -0
- package/dist/internal/components/StatusIcon/index.d.ts +1 -0
- package/dist/internal/functions/index.d.ts +1 -0
- package/dist/internal/functions/warnOnce.d.ts +5 -0
- package/dist/internal/hooks/useNumberField/useNumberField.d.ts +1 -1
- package/dist/{useDrilldown-lAdB3FFW.js → useDrilldown-jbU4Cs5l.js} +2 -598
- package/dist/useDrilldown-jbU4Cs5l.js.map +1 -0
- package/dist/{useInitialFocus-nOW12jQ5.js → useInitialFocus-BRRbylek.js} +2 -2
- package/dist/{useInitialFocus-nOW12jQ5.js.map → useInitialFocus-BRRbylek.js.map} +1 -1
- package/dist/{NumberField-W1k8V5Qq.js → useNumberField-eMyk7MB8.js} +5 -235
- package/dist/useNumberField-eMyk7MB8.js.map +1 -0
- package/dist/useOnClickOutside-Zw5vzxSq.js +71 -0
- package/dist/useOnClickOutside-Zw5vzxSq.js.map +1 -0
- package/dist/utils-pudAMGnO.js +25 -0
- package/dist/utils-pudAMGnO.js.map +1 -0
- package/package.json +9 -8
- package/dist/Calendar-jO-0jbbt.js.map +0 -1
- package/dist/Checkbox-9VbydUcM.js.map +0 -1
- package/dist/Combobox-CNObHLjp.js.map +0 -1
- package/dist/DataTable-CQpySyDq.js.map +0 -1
- package/dist/DateFieldRange-BG86w0pX.js.map +0 -1
- package/dist/DateFieldSingle-Byu_jyye.js.map +0 -1
- package/dist/DateFieldYearless-Dw1k3_PY.js.map +0 -1
- package/dist/DateFieldYearlessRange--plyld10.js.map +0 -1
- package/dist/DaysOfTheWeek-vE310Rjp.js.map +0 -1
- package/dist/FieldDialog-Be54L3E-.js.map +0 -1
- package/dist/FieldMessage-tEr6rWXS.js +0 -54
- package/dist/FieldMessage-tEr6rWXS.js.map +0 -1
- package/dist/Helper-CK-XjpR3.js.map +0 -1
- package/dist/MultiSelectFieldSync-xj7jXas-.js.map +0 -1
- package/dist/NumberField-W1k8V5Qq.js.map +0 -1
- package/dist/ProgressBar-HA9RPZfC.js.map +0 -1
- package/dist/Radio-31wKzlZ4.js.map +0 -1
- package/dist/SelectFieldSync-BFsJssdD.js.map +0 -1
- package/dist/SelectTriggerBase-aaOWep-V.js.map +0 -1
- package/dist/Stepper-Jv9A3Ned.js.map +0 -1
- package/dist/TextField-CDiiYSlT.js.map +0 -1
- package/dist/Textarea-BnHIDj2P.js.map +0 -1
- package/dist/Toaster-BlycAc63.js.map +0 -1
- package/dist/Toolbar-vBomnRKG.js.map +0 -1
- package/dist/useDrilldown-lAdB3FFW.js.map +0 -1
- package/dist/useOnClickOutside-Cyqbe1n3.js.map +0 -1
- package/dist/utils-BHKRoLps.js +0 -60
- package/dist/utils-BHKRoLps.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { useMemo, useCallback, useRef, useState, useLayoutEffect,
|
|
2
|
+
import { forwardRef, useMemo, useCallback, useRef, useState, useLayoutEffect, useId, useImperativeHandle, useEffect } from 'react';
|
|
3
3
|
import { u as useDownshiftEnvironment, a as useCombobox, m as matchSorter } from './match-sorter.esm-B3vwg1-X.js';
|
|
4
|
-
import { F as FieldListBase, a as usePinnedOptions, b as useGroupedOptions, s as sortGroupSections, u as useAdaptiveView, D as DEFAULT_PAGE_SIZE, c as useSelectFieldLoading, d as useDebouncedCallback, S as SelectFieldLabel, e as FieldDialog, f as FieldPopover } from './FieldDialog-
|
|
4
|
+
import { V as VirtualizedFieldListBase, F as FieldListBase, a as usePinnedOptions, b as useGroupedOptions, s as sortGroupSections, u as useAdaptiveView, D as DEFAULT_PAGE_SIZE, c as useSelectFieldLoading, d as useDebouncedCallback, S as SelectFieldLabel, e as FieldDialog, f as FieldPopover } from './FieldDialog-CAuhkCZY.js';
|
|
5
5
|
import { c as cx } from './index-SvGbrGuT.js';
|
|
6
6
|
import { B as Button } from './Button-l7pTJdPc.js';
|
|
7
7
|
import { C as Chip } from './Chip-Bc7jiIJ1.js';
|
|
@@ -10,20 +10,18 @@ import { m as mergeRefs } from './useMergeRefs-Dfmtq9cI.js';
|
|
|
10
10
|
import { S as SvgChevronRight } from './chevron_right-BdpsxX7x.js';
|
|
11
11
|
import { S as SvgClose } from './close-DZj38AEh.js';
|
|
12
12
|
import { s as styles$1 } from './SelectTriggerBase.module-B0NFRlQP.js';
|
|
13
|
+
import { F as FieldMessage } from './FieldMessage-DS0COrjp.js';
|
|
14
|
+
import { w as warnDeprecatedErrorUsage } from './utils-pudAMGnO.js';
|
|
13
15
|
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-loxbyklF.js';
|
|
14
|
-
import { F as FieldMessage } from './FieldMessage-tEr6rWXS.js';
|
|
15
16
|
|
|
16
|
-
import './MultiSelectFieldSync.css';const MultiSelectFieldList = ({
|
|
17
|
-
selectedOptions,
|
|
18
|
-
...rest
|
|
19
|
-
}) => {
|
|
17
|
+
import './MultiSelectFieldSync.css';const MultiSelectFieldList = forwardRef(({ selectedOptions, items, virtualize, ...rest }, ref) => {
|
|
20
18
|
const selectedIds = useMemo(
|
|
21
19
|
() => new Set(selectedOptions.map((opt) => opt.id)),
|
|
22
20
|
[selectedOptions]
|
|
23
21
|
);
|
|
24
22
|
const getCheckedState = useCallback(
|
|
25
23
|
(item) => {
|
|
26
|
-
if (item.type === "select-all") {
|
|
24
|
+
if (item.type === "select-all" || item.type === "select-filtered") {
|
|
27
25
|
return item.checkState ?? "indeterminate";
|
|
28
26
|
}
|
|
29
27
|
const checkId = item.type === "pinned-option" ? item.original.id : item.id;
|
|
@@ -31,15 +29,18 @@ import './MultiSelectFieldSync.css';const MultiSelectFieldList = ({
|
|
|
31
29
|
},
|
|
32
30
|
[selectedIds]
|
|
33
31
|
);
|
|
32
|
+
const ListComponent = virtualize ? VirtualizedFieldListBase : FieldListBase;
|
|
34
33
|
return /* @__PURE__ */ jsx(
|
|
35
|
-
|
|
34
|
+
ListComponent,
|
|
36
35
|
{
|
|
37
36
|
...rest,
|
|
37
|
+
ref,
|
|
38
|
+
items,
|
|
38
39
|
selectionType: "multiple",
|
|
39
40
|
getCheckedState
|
|
40
41
|
}
|
|
41
42
|
);
|
|
42
|
-
};
|
|
43
|
+
});
|
|
43
44
|
MultiSelectFieldList.displayName = "MultiSelectFieldList";
|
|
44
45
|
|
|
45
46
|
const input = "_input_1t7vf_2";
|
|
@@ -256,12 +257,15 @@ const useComboMultiple = ({
|
|
|
256
257
|
groupToString,
|
|
257
258
|
groupSorter,
|
|
258
259
|
selectAll,
|
|
260
|
+
selectFiltered,
|
|
259
261
|
selectedOptions,
|
|
260
262
|
onSelectedOptionsChange,
|
|
261
263
|
onInputValueChange,
|
|
262
264
|
onIsOpenChange,
|
|
263
265
|
displayAs = "popover",
|
|
264
|
-
disabled
|
|
266
|
+
disabled,
|
|
267
|
+
loading = false,
|
|
268
|
+
virtualize = false
|
|
265
269
|
}) => {
|
|
266
270
|
const [inputValue, setInputValue] = useState("");
|
|
267
271
|
const { pinnedSections } = usePinnedOptions(pinned, inputValue);
|
|
@@ -278,7 +282,20 @@ const useComboMultiple = ({
|
|
|
278
282
|
const { downshiftItems, sectionsMeta } = useMemo(() => {
|
|
279
283
|
const items = [];
|
|
280
284
|
const meta = [];
|
|
281
|
-
|
|
285
|
+
const hasSearchTerm = inputValue.trim().length > 0;
|
|
286
|
+
const hasResults = ungroupedItems.length > 0 || groupSections.some((s) => s.options.length > 0) || pinnedSections.some((s) => s.options.length > 0);
|
|
287
|
+
if (hasSearchTerm && selectFiltered && hasResults && !loading) {
|
|
288
|
+
const config = selectFiltered(inputValue);
|
|
289
|
+
items.push({
|
|
290
|
+
id: "select-filtered",
|
|
291
|
+
type: "select-filtered",
|
|
292
|
+
original: {
|
|
293
|
+
id: "select-filtered",
|
|
294
|
+
label: config.label ?? `Select items matching "${inputValue}"`
|
|
295
|
+
},
|
|
296
|
+
checkState: config.checkState
|
|
297
|
+
});
|
|
298
|
+
} else if (!hasSearchTerm && selectAll) {
|
|
282
299
|
items.push({
|
|
283
300
|
id: "select-all",
|
|
284
301
|
type: "select-all",
|
|
@@ -339,8 +356,17 @@ const useComboMultiple = ({
|
|
|
339
356
|
});
|
|
340
357
|
});
|
|
341
358
|
return { downshiftItems: items, sectionsMeta: meta };
|
|
342
|
-
}, [
|
|
359
|
+
}, [
|
|
360
|
+
groupSections,
|
|
361
|
+
ungroupedItems,
|
|
362
|
+
pinnedSections,
|
|
363
|
+
selectAll,
|
|
364
|
+
selectFiltered,
|
|
365
|
+
inputValue,
|
|
366
|
+
loading
|
|
367
|
+
]);
|
|
343
368
|
const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();
|
|
369
|
+
const highlightChangeTypeRef = useRef("");
|
|
344
370
|
const allPinnedOptions = useMemo(() => {
|
|
345
371
|
return pinnedSections.flatMap((section) => section.options);
|
|
346
372
|
}, [pinnedSections]);
|
|
@@ -385,19 +411,53 @@ const useComboMultiple = ({
|
|
|
385
411
|
onSelectedItemChange: ({
|
|
386
412
|
selectedItem: si
|
|
387
413
|
}) => {
|
|
388
|
-
console.log("selectedItem", si);
|
|
389
414
|
if (si) {
|
|
390
415
|
if (si.type === "select-all") {
|
|
391
416
|
selectAll?.onClick();
|
|
417
|
+
} else if (si.type === "select-filtered") {
|
|
418
|
+
selectFiltered?.(inputValue).onClick();
|
|
392
419
|
} else if (si.type === "option" || si.type === "pinned-option" || si.type === "grouped-option") {
|
|
393
420
|
handleItemClick(si.original);
|
|
394
421
|
}
|
|
395
422
|
}
|
|
396
423
|
},
|
|
424
|
+
onHighlightedIndexChange: ({ type }) => {
|
|
425
|
+
highlightChangeTypeRef.current = type;
|
|
426
|
+
},
|
|
397
427
|
onInputValueChange: (changes) => {
|
|
398
428
|
setInputValue(changes.inputValue ?? "");
|
|
399
429
|
onInputValueChange?.(changes);
|
|
400
430
|
},
|
|
431
|
+
scrollIntoView: virtualize ? () => {
|
|
432
|
+
} : (node, menuNode) => {
|
|
433
|
+
if (!node || !menuNode) return;
|
|
434
|
+
const firstItem = downshiftItems[0];
|
|
435
|
+
const hasBulkAction = firstItem?.type === "select-all" || firstItem?.type === "select-filtered";
|
|
436
|
+
if (!hasBulkAction) {
|
|
437
|
+
const nodeRect2 = node.getBoundingClientRect();
|
|
438
|
+
const menuRect2 = menuNode.getBoundingClientRect();
|
|
439
|
+
if (nodeRect2.bottom > menuRect2.bottom || nodeRect2.top < menuRect2.top) {
|
|
440
|
+
node.scrollIntoView({ block: "nearest" });
|
|
441
|
+
}
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
const bulkActionEl = menuNode.querySelector(
|
|
445
|
+
'[data-type="select-all"], [data-type="select-filtered"]'
|
|
446
|
+
);
|
|
447
|
+
if (node === bulkActionEl) {
|
|
448
|
+
menuNode.scrollTop = 0;
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
const stickyHeight = bulkActionEl?.getBoundingClientRect().height ?? 0;
|
|
452
|
+
const nodeRect = node.getBoundingClientRect();
|
|
453
|
+
const menuRect = menuNode.getBoundingClientRect();
|
|
454
|
+
const visibleTop = menuRect.top + stickyHeight;
|
|
455
|
+
if (nodeRect.top < visibleTop) {
|
|
456
|
+
menuNode.scrollTop -= visibleTop - nodeRect.top;
|
|
457
|
+
} else if (nodeRect.bottom > menuRect.bottom) {
|
|
458
|
+
menuNode.scrollTop += nodeRect.bottom - menuRect.bottom;
|
|
459
|
+
}
|
|
460
|
+
},
|
|
401
461
|
onIsOpenChange,
|
|
402
462
|
items: downshiftItems,
|
|
403
463
|
itemToString(item) {
|
|
@@ -414,6 +474,7 @@ const useComboMultiple = ({
|
|
|
414
474
|
getInputProps,
|
|
415
475
|
getItemProps,
|
|
416
476
|
highlightedIndex,
|
|
477
|
+
highlightChangeTypeRef,
|
|
417
478
|
isOpen,
|
|
418
479
|
downshiftItems,
|
|
419
480
|
sectionsMeta,
|
|
@@ -427,7 +488,6 @@ function stateReducer(state, actionAndChanges, displayAs) {
|
|
|
427
488
|
const { type, changes } = actionAndChanges;
|
|
428
489
|
switch (type) {
|
|
429
490
|
case useCombobox.stateChangeTypes.InputBlur:
|
|
430
|
-
console.log("inputBlur", changes, state);
|
|
431
491
|
if (displayAs === "dialog" && state.isOpen) {
|
|
432
492
|
return {
|
|
433
493
|
...changes,
|
|
@@ -467,6 +527,11 @@ function stateReducer(state, actionAndChanges, displayAs) {
|
|
|
467
527
|
inputValue: state.inputValue
|
|
468
528
|
// Preserve input value for continued filtering
|
|
469
529
|
};
|
|
530
|
+
case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
|
|
531
|
+
return {
|
|
532
|
+
...changes,
|
|
533
|
+
inputValue: state.inputValue
|
|
534
|
+
};
|
|
470
535
|
default:
|
|
471
536
|
return changes;
|
|
472
537
|
}
|
|
@@ -494,33 +559,30 @@ const MultiSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
494
559
|
error,
|
|
495
560
|
hint,
|
|
496
561
|
description,
|
|
497
|
-
errorAriaLive: errorAriaLiveProp = "assertive",
|
|
498
562
|
required,
|
|
499
563
|
disabled,
|
|
500
564
|
readOnly,
|
|
501
565
|
prefix,
|
|
502
566
|
suffix,
|
|
503
567
|
selectAll,
|
|
568
|
+
selectFiltered,
|
|
504
569
|
singleRow,
|
|
505
570
|
maxChips,
|
|
571
|
+
warning,
|
|
506
572
|
pinned,
|
|
573
|
+
onSearchChange,
|
|
507
574
|
className,
|
|
508
|
-
style
|
|
575
|
+
style,
|
|
576
|
+
virtualize
|
|
509
577
|
} = componentProps;
|
|
510
578
|
const groupToString = "groupToString" in componentProps ? componentProps.groupToString : void 0;
|
|
511
579
|
const groupSorter = "groupSorter" in componentProps ? componentProps.groupSorter : void 0;
|
|
512
580
|
const autoId = useId();
|
|
513
581
|
const id = idProp ?? autoId;
|
|
514
582
|
const helperUid = useId();
|
|
515
|
-
|
|
516
|
-
const
|
|
517
|
-
|
|
518
|
-
};
|
|
519
|
-
const handleBlur = () => {
|
|
520
|
-
setShouldAriaLive(false);
|
|
521
|
-
};
|
|
522
|
-
const errorMessage = typeof error !== "boolean" ? error : void 0;
|
|
523
|
-
const hasHelperText = hint || errorMessage || description;
|
|
583
|
+
warnDeprecatedErrorUsage("MultiSelectField", error);
|
|
584
|
+
const errorMessages = typeof error === "boolean" || error === void 0 ? void 0 : error;
|
|
585
|
+
const hasHelperText = hint || errorMessages || warning || description;
|
|
524
586
|
const isDisabledOrReadOnly = (disabled || readOnly) ?? false;
|
|
525
587
|
const { isMobile } = useAdaptiveView();
|
|
526
588
|
const displayAs = displayMenuAsProp === "auto" ? isMobile ? "dialog" : "popover" : displayMenuAsProp;
|
|
@@ -567,7 +629,17 @@ const MultiSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
567
629
|
loadMore,
|
|
568
630
|
clearCache
|
|
569
631
|
} = useSelectFieldLoading(loadingHookConfig);
|
|
570
|
-
useImperativeHandle(
|
|
632
|
+
useImperativeHandle(
|
|
633
|
+
ref,
|
|
634
|
+
() => ({
|
|
635
|
+
clearCache,
|
|
636
|
+
invalidate: () => {
|
|
637
|
+
clearCache();
|
|
638
|
+
setInitialLoadPerformed(false);
|
|
639
|
+
}
|
|
640
|
+
}),
|
|
641
|
+
[clearCache]
|
|
642
|
+
);
|
|
571
643
|
const debouncedOptionLoader = useDebouncedCallback((inputValue2) => {
|
|
572
644
|
loadOptions(inputValue2, { initial: true });
|
|
573
645
|
}, debounceMs);
|
|
@@ -590,6 +662,7 @@ const MultiSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
590
662
|
getInputProps,
|
|
591
663
|
wrapperDivRef,
|
|
592
664
|
highlightedIndex,
|
|
665
|
+
highlightChangeTypeRef,
|
|
593
666
|
getItemProps,
|
|
594
667
|
inputValue,
|
|
595
668
|
downshiftItems,
|
|
@@ -601,14 +674,24 @@ const MultiSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
601
674
|
onSelectedOptionsChange,
|
|
602
675
|
disabled: isDisabledOrReadOnly,
|
|
603
676
|
options,
|
|
677
|
+
loading,
|
|
604
678
|
pinned,
|
|
679
|
+
virtualize,
|
|
605
680
|
groupToString,
|
|
606
681
|
groupSorter,
|
|
607
682
|
selectedOptions,
|
|
608
683
|
selectAll: selectAll ? {
|
|
609
684
|
label: selectAll.label ?? "Select All",
|
|
610
685
|
onClick: selectAll.onClick,
|
|
611
|
-
checkState: selectAll.
|
|
686
|
+
checkState: selectAll.checkState === true ? "checked" : selectAll.checkState === false ? "unchecked" : selectAll.checkState ?? "indeterminate"
|
|
687
|
+
} : void 0,
|
|
688
|
+
selectFiltered: selectFiltered ? (searchValue) => {
|
|
689
|
+
const config = selectFiltered(searchValue);
|
|
690
|
+
return {
|
|
691
|
+
label: config.label,
|
|
692
|
+
onClick: config.onClick,
|
|
693
|
+
checkState: config.checkState === true ? "checked" : config.checkState === false ? "unchecked" : config.checkState ?? "indeterminate"
|
|
694
|
+
};
|
|
612
695
|
} : void 0,
|
|
613
696
|
async onIsOpenChange(changes) {
|
|
614
697
|
if (initialLoad === "open" && !initialLoadPerformed && changes.isOpen) {
|
|
@@ -618,6 +701,7 @@ const MultiSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
618
701
|
},
|
|
619
702
|
onInputValueChange: ({ inputValue: iv }) => {
|
|
620
703
|
debouncedOptionLoader(iv ?? "");
|
|
704
|
+
onSearchChange?.(iv ?? "");
|
|
621
705
|
}
|
|
622
706
|
});
|
|
623
707
|
useEffect(() => {
|
|
@@ -664,9 +748,7 @@ const MultiSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
664
748
|
id: `${id}-input`,
|
|
665
749
|
inputProps: getInputProps({
|
|
666
750
|
"aria-describedby": hasHelperText ? helperUid : void 0,
|
|
667
|
-
"aria-invalid": error ? true : void 0
|
|
668
|
-
onFocus: handleFocus,
|
|
669
|
-
onBlur: handleBlur
|
|
751
|
+
"aria-invalid": error ? true : void 0
|
|
670
752
|
}),
|
|
671
753
|
size,
|
|
672
754
|
error: !!error,
|
|
@@ -684,8 +766,8 @@ const MultiSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
684
766
|
{
|
|
685
767
|
id: helperUid,
|
|
686
768
|
hint,
|
|
687
|
-
|
|
688
|
-
|
|
769
|
+
error: errorMessages,
|
|
770
|
+
warning,
|
|
689
771
|
description
|
|
690
772
|
}
|
|
691
773
|
) : null,
|
|
@@ -729,6 +811,7 @@ const MultiSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
729
811
|
getMenuProps,
|
|
730
812
|
getItemProps,
|
|
731
813
|
highlightedIndex,
|
|
814
|
+
highlightChangeTypeRef,
|
|
732
815
|
selectedOptions,
|
|
733
816
|
hasMore,
|
|
734
817
|
onLoadMore: handleLoadMore,
|
|
@@ -736,10 +819,7 @@ const MultiSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
736
819
|
loadingMore,
|
|
737
820
|
disabled: isDisabledOrReadOnly,
|
|
738
821
|
sectionsMeta,
|
|
739
|
-
|
|
740
|
-
paddingInline: 24,
|
|
741
|
-
paddingBlockEnd: 24
|
|
742
|
-
}
|
|
822
|
+
virtualize
|
|
743
823
|
}
|
|
744
824
|
)
|
|
745
825
|
}
|
|
@@ -772,9 +852,7 @@ const MultiSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
772
852
|
inputProps: getInputProps({
|
|
773
853
|
popovertarget: `${id}-popover`,
|
|
774
854
|
"aria-describedby": hasHelperText ? helperUid : void 0,
|
|
775
|
-
"aria-invalid": error ? true : void 0
|
|
776
|
-
onFocus: handleFocus,
|
|
777
|
-
onBlur: handleBlur
|
|
855
|
+
"aria-invalid": error ? true : void 0
|
|
778
856
|
}),
|
|
779
857
|
toggleButtonProps: getToggleButtonProps(),
|
|
780
858
|
disableToggleButton: false,
|
|
@@ -800,8 +878,8 @@ const MultiSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
800
878
|
{
|
|
801
879
|
id: helperUid,
|
|
802
880
|
hint,
|
|
803
|
-
|
|
804
|
-
|
|
881
|
+
error: errorMessages,
|
|
882
|
+
warning,
|
|
805
883
|
description
|
|
806
884
|
}
|
|
807
885
|
) : null,
|
|
@@ -820,6 +898,7 @@ const MultiSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
820
898
|
getMenuProps,
|
|
821
899
|
getItemProps,
|
|
822
900
|
highlightedIndex,
|
|
901
|
+
highlightChangeTypeRef,
|
|
823
902
|
selectedOptions,
|
|
824
903
|
hasMore,
|
|
825
904
|
onLoadMore: handleLoadMore,
|
|
@@ -827,9 +906,7 @@ const MultiSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
827
906
|
loadingMore,
|
|
828
907
|
disabled: isDisabledOrReadOnly,
|
|
829
908
|
sectionsMeta,
|
|
830
|
-
|
|
831
|
-
padding: 8
|
|
832
|
-
}
|
|
909
|
+
virtualize
|
|
833
910
|
}
|
|
834
911
|
)
|
|
835
912
|
}
|
|
@@ -840,25 +917,25 @@ const MultiSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
840
917
|
});
|
|
841
918
|
MultiSelectField.displayName = "MultiSelectField";
|
|
842
919
|
|
|
843
|
-
const defaultFilter = (options, searchValue) => {
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
920
|
+
const defaultFilter = (options, searchValue) => matchSorter(options, searchValue, {
|
|
921
|
+
keys: ["label", "searchText"],
|
|
922
|
+
baseSort: (a, b) => a.index - b.index
|
|
923
|
+
});
|
|
924
|
+
const toFilterFn = (filter) => typeof filter === "function" ? filter : (options, searchValue) => matchSorter(options, searchValue, {
|
|
925
|
+
baseSort: (a, b) => a.index - b.index,
|
|
926
|
+
...filter
|
|
927
|
+
});
|
|
848
928
|
const MultiSelectFieldSync = (props) => {
|
|
849
929
|
const {
|
|
850
930
|
options,
|
|
851
931
|
filter: filterProp = defaultFilter,
|
|
852
932
|
selectAll: selectAllProp,
|
|
933
|
+
selectFiltered: selectFilteredProp,
|
|
853
934
|
value,
|
|
854
935
|
onSelectedOptionsChange,
|
|
855
936
|
...rest
|
|
856
937
|
} = props;
|
|
857
|
-
const filter =
|
|
858
|
-
options2,
|
|
859
|
-
searchValue,
|
|
860
|
-
filterProp
|
|
861
|
-
);
|
|
938
|
+
const filter = useMemo(() => toFilterFn(filterProp), [filterProp]);
|
|
862
939
|
const selectAllConfig = useMemo(() => {
|
|
863
940
|
if (!selectAllProp) return void 0;
|
|
864
941
|
const enabledOptions = options.filter((opt) => !opt.disabled);
|
|
@@ -867,7 +944,7 @@ const MultiSelectFieldSync = (props) => {
|
|
|
867
944
|
const allSelected = selectedCount === totalCount;
|
|
868
945
|
const labelProp = typeof selectAllProp === "object" ? selectAllProp.label : void 0;
|
|
869
946
|
const label = typeof labelProp === "function" ? labelProp(allSelected) : labelProp;
|
|
870
|
-
const
|
|
947
|
+
const checkState = allSelected ? "checked" : selectedCount > 0 ? "indeterminate" : "unchecked";
|
|
871
948
|
const handleClick = () => {
|
|
872
949
|
if (allSelected) {
|
|
873
950
|
onSelectedOptionsChange([]);
|
|
@@ -878,22 +955,65 @@ const MultiSelectFieldSync = (props) => {
|
|
|
878
955
|
return {
|
|
879
956
|
label,
|
|
880
957
|
onClick: handleClick,
|
|
881
|
-
|
|
958
|
+
checkState
|
|
882
959
|
};
|
|
883
960
|
}, [selectAllProp, options, value, onSelectedOptionsChange]);
|
|
961
|
+
const selectFilteredConfig = useMemo(() => {
|
|
962
|
+
if (!selectFilteredProp) return void 0;
|
|
963
|
+
return (searchValue) => {
|
|
964
|
+
const filteredOptions = filter(options, searchValue);
|
|
965
|
+
const enabledFilteredOptions = filteredOptions.filter(
|
|
966
|
+
(opt) => !opt.disabled
|
|
967
|
+
);
|
|
968
|
+
const selectedIds = new Set(value.map((v) => v.id));
|
|
969
|
+
const allFilteredSelected = enabledFilteredOptions.length > 0 && enabledFilteredOptions.every((opt) => selectedIds.has(opt.id));
|
|
970
|
+
const someFilteredSelected = enabledFilteredOptions.some(
|
|
971
|
+
(opt) => selectedIds.has(opt.id)
|
|
972
|
+
);
|
|
973
|
+
const label = typeof selectFilteredProp === "function" ? selectFilteredProp(searchValue).label : void 0;
|
|
974
|
+
const checkState = allFilteredSelected ? "checked" : someFilteredSelected ? "indeterminate" : "unchecked";
|
|
975
|
+
const handleClick = () => {
|
|
976
|
+
if (allFilteredSelected) {
|
|
977
|
+
const filteredIds = new Set(enabledFilteredOptions.map((o) => o.id));
|
|
978
|
+
onSelectedOptionsChange(value.filter((v) => !filteredIds.has(v.id)));
|
|
979
|
+
} else {
|
|
980
|
+
const currentIds = new Set(value.map((v) => v.id));
|
|
981
|
+
const newSelections = enabledFilteredOptions.filter(
|
|
982
|
+
(opt) => !currentIds.has(opt.id)
|
|
983
|
+
);
|
|
984
|
+
onSelectedOptionsChange([...value, ...newSelections]);
|
|
985
|
+
}
|
|
986
|
+
};
|
|
987
|
+
return {
|
|
988
|
+
label,
|
|
989
|
+
onClick: handleClick,
|
|
990
|
+
checkState
|
|
991
|
+
};
|
|
992
|
+
};
|
|
993
|
+
}, [selectFilteredProp, options, value, onSelectedOptionsChange, filter]);
|
|
994
|
+
const fieldRef = useRef(null);
|
|
995
|
+
const prevOptionsRef = useRef(options);
|
|
996
|
+
useEffect(() => {
|
|
997
|
+
if (prevOptionsRef.current !== options) {
|
|
998
|
+
prevOptionsRef.current = options;
|
|
999
|
+
fieldRef.current?.invalidate();
|
|
1000
|
+
}
|
|
1001
|
+
}, [options]);
|
|
884
1002
|
return /* @__PURE__ */ jsx(
|
|
885
1003
|
MultiSelectField,
|
|
886
1004
|
{
|
|
1005
|
+
ref: fieldRef,
|
|
887
1006
|
lazy: false,
|
|
888
1007
|
loadOptions: (searchValue) => filter(options, searchValue),
|
|
889
1008
|
debounceMs: 0,
|
|
890
1009
|
value,
|
|
891
1010
|
onSelectedOptionsChange,
|
|
892
1011
|
selectAll: selectAllConfig,
|
|
1012
|
+
selectFiltered: selectFilteredConfig,
|
|
893
1013
|
...rest
|
|
894
1014
|
}
|
|
895
1015
|
);
|
|
896
1016
|
};
|
|
897
1017
|
|
|
898
1018
|
export { MultiSelectField as M, MultiSelectFieldSync as a };
|
|
899
|
-
//# sourceMappingURL=MultiSelectFieldSync-
|
|
1019
|
+
//# sourceMappingURL=MultiSelectFieldSync-Bey99LzJ.js.map
|