@servicetitan/anvil2 3.9.0 → 3.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -0
- package/dist/AiMark-2_O4tKv_.js.map +1 -1
- package/dist/Button-Dwh_Nd4l.js.map +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DataTable-CRzQKN_P.js → DataTable-D-SKKt5w.js} +53 -16
- package/dist/DataTable-D-SKKt5w.js.map +1 -0
- package/dist/{DateFieldRange-CHbrYgsD.js → DateFieldRange-DUFfyknZ.js} +51 -31
- package/dist/DateFieldRange-DUFfyknZ.js.map +1 -0
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-D-KZ3NL0.js → DateFieldSingle-BZjlO0hX.js} +49 -28
- package/dist/DateFieldSingle-BZjlO0hX.js.map +1 -0
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-DouEX24o.js → DateFieldYearless-TcKb9jE2.js} +4 -2
- package/dist/DateFieldYearless-TcKb9jE2.js.map +1 -0
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DateFieldYearlessRange-B_bImgyn.js → DateFieldYearlessRange-D9XtRNWi.js} +16 -4
- package/dist/DateFieldYearlessRange-D9XtRNWi.js.map +1 -0
- package/dist/DateFieldYearlessRange.js +1 -1
- package/dist/{Dialog-Clh3jaX8.js → Dialog-DjJ9wpeo.js} +2 -2
- package/dist/{Dialog-Clh3jaX8.js.map → Dialog-DjJ9wpeo.js.map} +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/DndSort.js.map +1 -1
- package/dist/{Drawer-h2Mut1lB.js → Drawer-CZITBE8M.js} +2 -2
- package/dist/{Drawer-h2Mut1lB.js.map → Drawer-CZITBE8M.js.map} +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/DrillDown.css +36 -34
- package/dist/DrillDown.js +1 -1
- package/dist/DrillDown.module-1VBKDZRA.js +27 -0
- package/dist/{DrillDown.module-D1Bf9_yP.js.map → DrillDown.module-1VBKDZRA.js.map} +1 -1
- package/dist/{FilterBar-CBTAkEri.js → FilterBar-B_ShYx2G.js} +28 -7
- package/dist/FilterBar-B_ShYx2G.js.map +1 -0
- package/dist/FilterBar.js +1 -1
- package/dist/{MenuFooter-BXcNxNnX.js → MenuFooter--lBF8OjJ.js} +5 -1
- package/dist/MenuFooter--lBF8OjJ.js.map +1 -0
- package/dist/MultiSelectField.js +1 -1
- package/dist/{MultiSelectFieldSync-CpfsWecG.js → MultiSelectFieldSync-B_vuR-ii.js} +220 -156
- package/dist/MultiSelectFieldSync-B_vuR-ii.js.map +1 -0
- package/dist/MultiSelectFieldSync.css +80 -69
- package/dist/MultiSelectMenu.js +1 -1
- package/dist/{MultiSelectMenuSync-CtyLYyDE.js → MultiSelectMenuSync-C3Y7jnJQ.js} +22 -8
- package/dist/MultiSelectMenuSync-C3Y7jnJQ.js.map +1 -0
- package/dist/{Page-B6E3Gbji.js → Page-BHBcuxcE.js} +14 -13
- package/dist/Page-BHBcuxcE.js.map +1 -0
- package/dist/Page.js +1 -1
- package/dist/{Pagination-DF7iMeJe.js → Pagination-Bx_u6Uea.js} +32 -6
- package/dist/Pagination-Bx_u6Uea.js.map +1 -0
- package/dist/Pagination.js +1 -1
- package/dist/{RichTextEditor-CLo8yoUP.js → RichTextEditor-CTIGe6xA.js} +3 -3
- package/dist/{RichTextEditor-CLo8yoUP.js.map → RichTextEditor-CTIGe6xA.js.map} +1 -1
- package/dist/RichTextEditor.js +1 -1
- package/dist/{SavedFiltersButton-FcYVncxU.js → SavedFiltersButton-DV0xxLat.js} +251 -165
- package/dist/SavedFiltersButton-DV0xxLat.js.map +1 -0
- package/dist/SavedFiltersButton.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldSync-Bi8HsMYP.js → SelectFieldSync-rwfeNwN2.js} +45 -11
- package/dist/SelectFieldSync-rwfeNwN2.js.map +1 -0
- package/dist/SelectMenu.js +1 -1
- package/dist/{SelectMenuSync-DKg4g5nN.js → SelectMenuSync-BkC0FD5P.js} +22 -8
- package/dist/SelectMenuSync-BkC0FD5P.js.map +1 -0
- package/dist/{SelectOptions-DszNAjxB.js → SelectOptions-B3Vmtb_k.js} +2 -2
- package/dist/{SelectOptions-DszNAjxB.js.map → SelectOptions-B3Vmtb_k.js.map} +1 -1
- package/dist/{SelectTrigger-DNIc5ttg.js → SelectTrigger-BAnVo4Ln.js} +2 -2
- package/dist/{SelectTrigger-DNIc5ttg.js.map → SelectTrigger-BAnVo4Ln.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-1Cc6EUBw.js → SelectTriggerBase-D7zAT0UR.js} +8 -3
- package/dist/SelectTriggerBase-D7zAT0UR.js.map +1 -0
- package/dist/SelectTriggerBase.css +49 -47
- package/dist/SelectTriggerBase.module-mYOfdBGA.js +40 -0
- package/dist/SelectTriggerBase.module-mYOfdBGA.js.map +1 -0
- package/dist/Tab-Bqfvg8Ce.js.map +1 -1
- package/dist/Table.js +1 -1
- package/dist/Textarea-B3C7AkPj.js.map +1 -1
- package/dist/{Toolbar-2VQIjU5b.js → Toolbar-BOgHhw7K.js} +12 -3
- package/dist/Toolbar-BOgHhw7K.js.map +1 -0
- package/dist/{Toolbar-BbImThIu.js → Toolbar-DDWUuQm_.js} +24 -2
- package/dist/Toolbar-DDWUuQm_.js.map +1 -0
- package/dist/Toolbar.js +2 -2
- package/dist/{ToolbarButtonToggle-Bc0XvCM9.js → ToolbarButtonToggle-BbtKfezH.js} +18 -2
- package/dist/ToolbarButtonToggle-BbtKfezH.js.map +1 -0
- package/dist/TreeSelectField.js +1 -1
- package/dist/{TreeSelectFieldSync-DUHVmOQa.js → TreeSelectFieldSync-BRQgLPxB.js} +118 -87
- package/dist/TreeSelectFieldSync-BRQgLPxB.js.map +1 -0
- package/dist/TreeSelectFieldSync.css +44 -36
- package/dist/TreeSelectMenu.js +1 -1
- package/dist/{TreeSelectMenuSync-DVoYUG7F.js → TreeSelectMenuSync-88q0ydo5.js} +18 -6
- package/dist/TreeSelectMenuSync-88q0ydo5.js.map +1 -0
- package/dist/{YearlessDateInputWithPicker-CM9mmz8s.js → YearlessDateInputWithPicker-BquY4bCd.js} +19 -5
- package/dist/YearlessDateInputWithPicker-BquY4bCd.js.map +1 -0
- package/dist/anvParts-BGg5dgfl.js +43 -0
- package/dist/anvParts-BGg5dgfl.js.map +1 -0
- package/dist/beta.js +13 -13
- package/dist/{bulkActionTypes-BnZNAru6.js → bulkActionTypes-CWcUhKFS.js} +2 -2
- package/dist/{bulkActionTypes-BnZNAru6.js.map → bulkActionTypes-CWcUhKFS.js.map} +1 -1
- package/dist/downshift.esm-xtSnQp44.js.map +1 -1
- package/dist/{filter-state-XmqhkURU.js → filter-state-zlL4luoE.js} +153 -81
- package/dist/filter-state-zlL4luoE.js.map +1 -0
- package/dist/floating-ui.react-dom-CyrxPiI-.js.map +1 -1
- package/dist/index-DXeGMe23.js.map +1 -1
- package/dist/{index-BwNeldDw.js → index-DjirBR0l.js} +2 -2
- package/dist/{index-BwNeldDw.js.map → index-DjirBR0l.js.map} +1 -1
- package/dist/index.esm-C2ZhC_8d.js.map +1 -1
- package/dist/index.js +16 -16
- package/dist/proxy-DEehATlA.js.map +1 -1
- package/dist/src/beta/components/FilterBar/FilterBar.d.ts +3 -3
- package/dist/src/beta/components/FilterBar/internal/utils/dateListLibraryOptions.d.ts +17 -3
- package/dist/src/beta/components/FilterBar/parts.d.ts +38 -0
- package/dist/src/beta/components/SavedFiltersButton/parts.d.ts +37 -0
- package/dist/src/beta/components/SavedFiltersButton/types.d.ts +2 -1
- package/dist/src/beta/components/Table/DataTable/DataTable.d.ts +3 -2
- package/dist/src/beta/components/Table/DataTable/parts.d.ts +30 -0
- package/dist/src/beta/components/Table/internal/ResizeHandle.d.ts +3 -2
- package/dist/src/beta/components/Toolbar/Toolbar.d.ts +4 -4
- package/dist/src/beta/components/Toolbar/parts.d.ts +19 -0
- package/dist/src/beta/components/TreeSelectField/TreeSelectField.d.ts +6 -5
- package/dist/src/beta/components/TreeSelectField/parts.d.ts +23 -0
- package/dist/src/beta/components/TreeSelectField/types.d.ts +11 -4
- package/dist/src/beta/components/TreeSelectMenu/TreeSelectMenu.d.ts +33 -2
- package/dist/src/beta/components/TreeSelectMenu/parts.d.ts +12 -0
- package/dist/src/beta/components/TreeSelectMenu/types.d.ts +3 -2
- package/dist/src/components/Combobox/ComboboxTypes.d.ts +2 -2
- package/dist/src/components/Combobox/parts.d.ts +19 -0
- package/dist/src/components/DateFieldRange/DateFieldRange.d.ts +2 -2
- package/dist/src/components/DateFieldRange/parts.d.ts +16 -0
- package/dist/src/components/DateFieldSingle/DateFieldSingle.d.ts +2 -2
- package/dist/src/components/DateFieldSingle/parts.d.ts +16 -0
- package/dist/src/components/DateFieldYearless/DateFieldYearless.d.ts +2 -2
- package/dist/src/components/DateFieldYearless/parts.d.ts +15 -0
- package/dist/src/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +2 -2
- package/dist/src/components/DateFieldYearlessRange/parts.d.ts +12 -0
- package/dist/src/components/DrillDown/DrillDown.d.ts +11 -0
- package/dist/src/components/MultiSelectField/internal/MultiSelectFieldComboboxMode.d.ts +1 -1
- package/dist/src/components/MultiSelectField/internal/MultiSelectFieldSelectMode.d.ts +1 -1
- package/dist/src/components/MultiSelectField/internal/types.d.ts +3 -1
- package/dist/src/components/MultiSelectField/parts.d.ts +20 -0
- package/dist/src/components/MultiSelectField/types.d.ts +2 -2
- package/dist/src/components/MultiSelectMenu/parts.d.ts +12 -0
- package/dist/src/components/MultiSelectMenu/types.d.ts +3 -2
- package/dist/src/components/Pagination/Pagination.d.ts +4 -3
- package/dist/src/components/Pagination/parts.d.ts +28 -0
- package/dist/src/components/SelectField/internal/SelectFieldComboboxMode.d.ts +1 -1
- package/dist/src/components/SelectField/internal/SelectFieldSelectMode.d.ts +1 -1
- package/dist/src/components/SelectField/parts.d.ts +18 -0
- package/dist/src/components/SelectField/types.d.ts +7 -2
- package/dist/src/components/SelectMenu/internal/useMenuInteraction.d.ts +8 -6
- package/dist/src/components/SelectMenu/parts.d.ts +12 -0
- package/dist/src/components/SelectMenu/types.d.ts +3 -2
- package/dist/src/components/SelectTrigger/internal/SelectTriggerBase.d.ts +6 -5
- package/dist/src/components/Toolbar/Toolbar.d.ts +3 -3
- package/dist/src/components/Toolbar/parts.d.ts +18 -0
- package/dist/src/internal/constants/anvParts.d.ts +81 -0
- package/dist/src/internal/testing/anvPartsContract.d.ts +24 -0
- package/dist/src/internal/types/selectFieldInternalTypes.d.ts +3 -1
- package/dist/{syncFilterUtils-UVNoFsDr.js → syncFilterUtils-YB6gRuuR.js} +11 -4
- package/dist/syncFilterUtils-YB6gRuuR.js.map +1 -0
- package/dist/{treeSync-CiU5d6rF.js → treeSync-DOen59wP.js} +24 -4
- package/dist/treeSync-DOen59wP.js.map +1 -0
- package/dist/use-reduced-motion-CqjZZ5QB.js.map +1 -1
- package/dist/{useAdaptiveView-C_WvM4-P.js → useAdaptiveView-DmhhcX-B.js} +3 -1
- package/dist/useAdaptiveView-DmhhcX-B.js.map +1 -0
- package/dist/useChipLayout-BBe6Tzyl.js +90 -0
- package/dist/useChipLayout-BBe6Tzyl.js.map +1 -0
- package/dist/{useDrillDownContext-iUvoTget.js → useDrillDownContext-D5_NjqY4.js} +2 -2
- package/dist/{useDrillDownContext-iUvoTget.js.map → useDrillDownContext-D5_NjqY4.js.map} +1 -1
- package/dist/{useDrilldown-D7DKSs7E.js → useDrilldown-glecoaI_.js} +45 -19
- package/dist/{useDrilldown-D7DKSs7E.js.map → useDrilldown-glecoaI_.js.map} +1 -1
- package/dist/{useInfiniteCombobox-COJTJxCZ.js → useInfiniteCombobox-CVAYoUvh.js} +70 -23
- package/dist/useInfiniteCombobox-CVAYoUvh.js.map +1 -0
- package/dist/{useMenuInteraction-AgrXU8kv.js → useMenuInteraction-nNF1dsrp.js} +7 -4
- package/dist/useMenuInteraction-nNF1dsrp.js.map +1 -0
- package/dist/useSize.js.map +1 -1
- package/package.json +9 -7
- package/dist/DataTable-CRzQKN_P.js.map +0 -1
- package/dist/DateFieldRange-CHbrYgsD.js.map +0 -1
- package/dist/DateFieldSingle-D-KZ3NL0.js.map +0 -1
- package/dist/DateFieldYearless-DouEX24o.js.map +0 -1
- package/dist/DateFieldYearlessRange-B_bImgyn.js.map +0 -1
- package/dist/DrillDown.module-D1Bf9_yP.js +0 -27
- package/dist/FilterBar-CBTAkEri.js.map +0 -1
- package/dist/MenuFooter-BXcNxNnX.js.map +0 -1
- package/dist/MultiSelectFieldSync-CpfsWecG.js.map +0 -1
- package/dist/MultiSelectMenuSync-CtyLYyDE.js.map +0 -1
- package/dist/Page-B6E3Gbji.js.map +0 -1
- package/dist/Pagination-DF7iMeJe.js.map +0 -1
- package/dist/SavedFiltersButton-FcYVncxU.js.map +0 -1
- package/dist/SelectFieldSync-Bi8HsMYP.js.map +0 -1
- package/dist/SelectMenuSync-DKg4g5nN.js.map +0 -1
- package/dist/SelectTriggerBase-1Cc6EUBw.js.map +0 -1
- package/dist/SelectTriggerBase.module-Brmw1nYG.js +0 -39
- package/dist/SelectTriggerBase.module-Brmw1nYG.js.map +0 -1
- package/dist/Toolbar-2VQIjU5b.js.map +0 -1
- package/dist/Toolbar-BbImThIu.js.map +0 -1
- package/dist/ToolbarButtonToggle-Bc0XvCM9.js.map +0 -1
- package/dist/TreeSelectFieldSync-DUHVmOQa.js.map +0 -1
- package/dist/TreeSelectMenuSync-DVoYUG7F.js.map +0 -1
- package/dist/YearlessDateInputWithPicker-CM9mmz8s.js.map +0 -1
- package/dist/filter-state-XmqhkURU.js.map +0 -1
- package/dist/syncFilterUtils-UVNoFsDr.js.map +0 -1
- package/dist/treeSync-CiU5d6rF.js.map +0 -1
- package/dist/useAdaptiveView-C_WvM4-P.js.map +0 -1
- package/dist/useChipLayout-BWZfKDgd.js +0 -51
- package/dist/useChipLayout-BWZfKDgd.js.map +0 -1
- package/dist/useInfiniteCombobox-COJTJxCZ.js.map +0 -1
- package/dist/useMenuInteraction-AgrXU8kv.js.map +0 -1
|
@@ -5,36 +5,37 @@ import { F as FieldMessage } from './FieldMessage-mTGdycSA.js';
|
|
|
5
5
|
import { w as warnDeprecatedErrorUsage } from './utils-CM48ODEJ.js';
|
|
6
6
|
import { F as FieldLabel } from './FieldLabel-SzH61hCb.js';
|
|
7
7
|
import { S as SrOnly } from './SrOnly-pnf8ajnh.js';
|
|
8
|
-
import { u as useAdaptiveView, O as OptionsDialog, a as OptionsPopover } from './useAdaptiveView-
|
|
8
|
+
import { u as useAdaptiveView, O as OptionsDialog, a as OptionsPopover } from './useAdaptiveView-DmhhcX-B.js';
|
|
9
9
|
import { B as Button } from './Button-Dwh_Nd4l.js';
|
|
10
10
|
import { C as Chip } from './Chip-D6Q0J0Xe.js';
|
|
11
11
|
import { F as Flex } from './Flex-CRF7gj0_.js';
|
|
12
12
|
import { S as SvgChevronRight } from './chevron_right-BdpsxX7x.js';
|
|
13
|
-
import {
|
|
14
|
-
import { u as useTreeLoader, a as useTree, b as useTreeLazyCascade, f as findNode, T as TreeContent, d as defaultTreeSyncFilter, t as toTreeSyncFilterFn, c as applyChildCounts } from './treeSync-
|
|
15
|
-
import {
|
|
13
|
+
import { A as ANV_PART_ATTR } from './anvParts-BGg5dgfl.js';
|
|
14
|
+
import { P as PARTS, u as useTreeLoader, a as useTree, b as useTreeLazyCascade, f as findNode, T as TreeContent, d as defaultTreeSyncFilter, t as toTreeSyncFilterFn, c as applyChildCounts } from './treeSync-DOen59wP.js';
|
|
15
|
+
import { u as useChipLayout } from './useChipLayout-BBe6Tzyl.js';
|
|
16
|
+
import { s as styles$1 } from './SelectTriggerBase.module-mYOfdBGA.js';
|
|
16
17
|
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-DjqeAJZ9.js';
|
|
17
18
|
|
|
18
|
-
import './TreeSelectFieldSync.css';const input = "
|
|
19
|
-
const error = "
|
|
20
|
-
const disabled = "
|
|
21
|
-
const chip = "
|
|
22
|
-
const prefix = "
|
|
23
|
-
const suffix = "
|
|
24
|
-
const small = "
|
|
25
|
-
const large = "
|
|
19
|
+
import './TreeSelectFieldSync.css';const input = "_input_5nu5i_2";
|
|
20
|
+
const error = "_error_5nu5i_31";
|
|
21
|
+
const disabled = "_disabled_5nu5i_38";
|
|
22
|
+
const chip = "_chip_5nu5i_116";
|
|
23
|
+
const prefix = "_prefix_5nu5i_183";
|
|
24
|
+
const suffix = "_suffix_5nu5i_184";
|
|
25
|
+
const small = "_small_5nu5i_212";
|
|
26
|
+
const large = "_large_5nu5i_218";
|
|
26
27
|
const styles = {
|
|
27
|
-
"input-wrapper": "_input-
|
|
28
|
+
"input-wrapper": "_input-wrapper_5nu5i_2",
|
|
28
29
|
input: input,
|
|
29
30
|
error: error,
|
|
30
31
|
disabled: disabled,
|
|
31
|
-
"input-flex": "_input-
|
|
32
|
-
"rows-wrapper": "_rows-
|
|
33
|
-
"chip-wrapper": "_chip-
|
|
32
|
+
"input-flex": "_input-flex_5nu5i_48",
|
|
33
|
+
"rows-wrapper": "_rows-wrapper_5nu5i_96",
|
|
34
|
+
"chip-wrapper": "_chip-wrapper_5nu5i_116",
|
|
34
35
|
chip: chip,
|
|
35
|
-
"buttons-wrapper": "_buttons-
|
|
36
|
-
"toggle-button-wrapper": "_toggle-button-
|
|
37
|
-
"toggle-button": "_toggle-
|
|
36
|
+
"buttons-wrapper": "_buttons-wrapper_5nu5i_128",
|
|
37
|
+
"toggle-button-wrapper": "_toggle-button-wrapper_5nu5i_145",
|
|
38
|
+
"toggle-button": "_toggle-button_5nu5i_145",
|
|
38
39
|
prefix: prefix,
|
|
39
40
|
suffix: suffix,
|
|
40
41
|
small: small,
|
|
@@ -95,72 +96,84 @@ const TreeSelectFieldInput = ({
|
|
|
95
96
|
onClick: handleWrapperClick,
|
|
96
97
|
children: [
|
|
97
98
|
prefix ? /* @__PURE__ */ jsx("div", { className: styles["prefix"], children: prefix }) : null,
|
|
98
|
-
/* @__PURE__ */ jsxs(
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
99
|
+
/* @__PURE__ */ jsxs(
|
|
100
|
+
"div",
|
|
101
|
+
{
|
|
102
|
+
className: styles["rows-wrapper"],
|
|
103
|
+
ref: rowsRef,
|
|
104
|
+
"data-single-row": singleRow || void 0,
|
|
105
|
+
children: [
|
|
106
|
+
!single && selectedOptions.length > 0 ? selectedOptions.slice(0, displayCount).map((option, index) => /* @__PURE__ */ jsx(
|
|
107
|
+
"div",
|
|
108
|
+
{
|
|
109
|
+
className: styles["chip-wrapper"],
|
|
110
|
+
children: /* @__PURE__ */ jsx(
|
|
111
|
+
Chip,
|
|
112
|
+
{
|
|
113
|
+
...getChipProps?.(option),
|
|
114
|
+
...{ [ANV_PART_ATTR]: PARTS.chip },
|
|
115
|
+
label: option.label,
|
|
116
|
+
onClose: disabled || readOnly || option.disabled ? void 0 : () => onRemoveOption(option),
|
|
117
|
+
className: styles["chip"],
|
|
118
|
+
title: option.label
|
|
119
|
+
}
|
|
120
|
+
)
|
|
121
|
+
},
|
|
122
|
+
`selected-item-${option.id}-${index}`
|
|
123
|
+
)) : null,
|
|
124
|
+
hiddenCount > 0 ? /* @__PURE__ */ jsx("div", { className: styles["chip-wrapper"], children: /* @__PURE__ */ jsx(
|
|
104
125
|
Chip,
|
|
105
126
|
{
|
|
106
|
-
|
|
107
|
-
label: option.label,
|
|
108
|
-
onClose: disabled || readOnly ? void 0 : () => onRemoveOption(option),
|
|
127
|
+
label: `+${hiddenCount}`,
|
|
109
128
|
className: styles["chip"],
|
|
110
|
-
title: option.label
|
|
129
|
+
title: selectedOptions.slice(displayCount).map((option) => option.label).join(", "),
|
|
130
|
+
...{ [ANV_PART_ATTR]: PARTS.overflowChip }
|
|
111
131
|
}
|
|
112
|
-
)
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
"
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
disabled,
|
|
158
|
-
placeholder: selectedOptions.length === 0 ? placeholder : void 0,
|
|
159
|
-
onKeyDown: (e) => onInputKeyDown?.(e),
|
|
160
|
-
...comboboxProps
|
|
161
|
-
}
|
|
162
|
-
) }) : null
|
|
163
|
-
] }),
|
|
132
|
+
) }) : null,
|
|
133
|
+
!disableSearch && !single ? /* @__PURE__ */ jsx(Flex, { className: styles["input-flex"], alignItems: "center", children: /* @__PURE__ */ jsx(
|
|
134
|
+
"input",
|
|
135
|
+
{
|
|
136
|
+
ref: inputRef,
|
|
137
|
+
id,
|
|
138
|
+
type: "text",
|
|
139
|
+
className: cx(styles["input"], { [styles["error"]]: error }),
|
|
140
|
+
role: "combobox",
|
|
141
|
+
"aria-controls": ariaControls,
|
|
142
|
+
"aria-expanded": isOpen,
|
|
143
|
+
"aria-haspopup": "tree",
|
|
144
|
+
value: searchValue,
|
|
145
|
+
onChange: onSearchChange,
|
|
146
|
+
onKeyDown: (e) => onInputKeyDown?.(e),
|
|
147
|
+
disabled,
|
|
148
|
+
readOnly,
|
|
149
|
+
placeholder: selectedOptions.length === 0 ? placeholder : void 0,
|
|
150
|
+
...comboboxProps,
|
|
151
|
+
...{ [ANV_PART_ATTR]: PARTS.input }
|
|
152
|
+
}
|
|
153
|
+
) }) : null,
|
|
154
|
+
single || disableSearch ? /* @__PURE__ */ jsx(Flex, { className: styles["input-flex"], alignItems: "center", children: /* @__PURE__ */ jsx(
|
|
155
|
+
"input",
|
|
156
|
+
{
|
|
157
|
+
ref: inputRef,
|
|
158
|
+
id,
|
|
159
|
+
type: "text",
|
|
160
|
+
className: cx(styles["input"], { [styles["error"]]: error }),
|
|
161
|
+
role: "combobox",
|
|
162
|
+
"aria-controls": ariaControls,
|
|
163
|
+
"aria-expanded": isOpen,
|
|
164
|
+
"aria-haspopup": "tree",
|
|
165
|
+
readOnly: true,
|
|
166
|
+
value: single && selectedOptions.length > 0 ? selectedOptions[0].label : "",
|
|
167
|
+
disabled,
|
|
168
|
+
placeholder: selectedOptions.length === 0 ? placeholder : void 0,
|
|
169
|
+
onKeyDown: (e) => onInputKeyDown?.(e),
|
|
170
|
+
...comboboxProps,
|
|
171
|
+
...{ [ANV_PART_ATTR]: PARTS.input }
|
|
172
|
+
}
|
|
173
|
+
) }) : null
|
|
174
|
+
]
|
|
175
|
+
}
|
|
176
|
+
),
|
|
164
177
|
suffix ? /* @__PURE__ */ jsx("div", { className: styles["suffix"], children: suffix }) : null,
|
|
165
178
|
/* @__PURE__ */ jsx("div", { className: styles["buttons-wrapper"], children: /* @__PURE__ */ jsx("div", { className: styles["toggle-button-wrapper"], children: /* @__PURE__ */ jsx(
|
|
166
179
|
Button,
|
|
@@ -173,6 +186,7 @@ const TreeSelectFieldInput = ({
|
|
|
173
186
|
"aria-expanded": isOpen,
|
|
174
187
|
className: styles["toggle-button"],
|
|
175
188
|
tabIndex: -1,
|
|
189
|
+
...{ [ANV_PART_ATTR]: PARTS.toggleButton },
|
|
176
190
|
onClick: () => {
|
|
177
191
|
onWrapperClick?.();
|
|
178
192
|
inputRef?.current?.focus();
|
|
@@ -188,6 +202,9 @@ TreeSelectFieldInput.displayName = "TreeSelectFieldInput";
|
|
|
188
202
|
|
|
189
203
|
const TreeSelectField = forwardRef((propsWithLayout, ref) => {
|
|
190
204
|
const { layoutStyles, componentProps } = useLayoutPropsUtil(propsWithLayout);
|
|
205
|
+
const dataAttributes = Object.fromEntries(
|
|
206
|
+
Object.entries(componentProps).filter(([key]) => key.startsWith("data-"))
|
|
207
|
+
);
|
|
191
208
|
const {
|
|
192
209
|
id: idProp,
|
|
193
210
|
label,
|
|
@@ -331,6 +348,16 @@ const TreeSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
331
348
|
closeMenu();
|
|
332
349
|
}
|
|
333
350
|
}, [disabled, isOpen, closeMenu]);
|
|
351
|
+
const handleRemoveOption = useCallback(
|
|
352
|
+
(option) => {
|
|
353
|
+
const target = value.find((v) => v.id === option.id);
|
|
354
|
+
if (target?.disabled) {
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
onSelectedOptionsChange(value.filter((v) => v.id !== option.id));
|
|
358
|
+
},
|
|
359
|
+
[value, onSelectedOptionsChange]
|
|
360
|
+
);
|
|
334
361
|
const getActiveNode = useCallback(() => {
|
|
335
362
|
const descId = tree.activeDescendantId;
|
|
336
363
|
if (!descId) return void 0;
|
|
@@ -362,8 +389,10 @@ const TreeSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
362
389
|
return;
|
|
363
390
|
}
|
|
364
391
|
if (e.key === "Backspace" && !isSingleSelect && !readOnly && searchValue === "" && value.length > 0) {
|
|
365
|
-
const
|
|
366
|
-
|
|
392
|
+
const lastRemovable = [...value].reverse().find((option) => !option.disabled);
|
|
393
|
+
if (lastRemovable) {
|
|
394
|
+
handleRemoveOption(lastRemovable);
|
|
395
|
+
}
|
|
367
396
|
return;
|
|
368
397
|
}
|
|
369
398
|
if (isOpen) {
|
|
@@ -395,7 +424,7 @@ const TreeSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
395
424
|
readOnly,
|
|
396
425
|
searchValue,
|
|
397
426
|
value,
|
|
398
|
-
|
|
427
|
+
handleRemoveOption,
|
|
399
428
|
tree,
|
|
400
429
|
getActiveNode,
|
|
401
430
|
handleToggleNode,
|
|
@@ -445,6 +474,8 @@ const TreeSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
445
474
|
return /* @__PURE__ */ jsxs(
|
|
446
475
|
"div",
|
|
447
476
|
{
|
|
477
|
+
...dataAttributes,
|
|
478
|
+
"data-anv": "tree-select-field",
|
|
448
479
|
className: cx(styles$1["search-field"], className),
|
|
449
480
|
style: { ...layoutStyles, ...style },
|
|
450
481
|
children: [
|
|
@@ -465,7 +496,7 @@ const TreeSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
465
496
|
prefix,
|
|
466
497
|
suffix,
|
|
467
498
|
selectedOptions: value,
|
|
468
|
-
onRemoveOption:
|
|
499
|
+
onRemoveOption: handleRemoveOption,
|
|
469
500
|
inputRef,
|
|
470
501
|
inputWrapperRef,
|
|
471
502
|
searchValue,
|
|
@@ -535,7 +566,7 @@ const TreeSelectField = forwardRef((propsWithLayout, ref) => {
|
|
|
535
566
|
prefix,
|
|
536
567
|
suffix,
|
|
537
568
|
selectedOptions: value,
|
|
538
|
-
onRemoveOption:
|
|
569
|
+
onRemoveOption: handleRemoveOption,
|
|
539
570
|
searchValue,
|
|
540
571
|
onSearchChange: (e) => {
|
|
541
572
|
handleSearchChange(e.target.value);
|
|
@@ -622,4 +653,4 @@ const TreeSelectFieldSync = (props) => {
|
|
|
622
653
|
TreeSelectFieldSync.displayName = "TreeSelectFieldSync";
|
|
623
654
|
|
|
624
655
|
export { TreeSelectField as T, TreeSelectFieldSync as a };
|
|
625
|
-
//# sourceMappingURL=TreeSelectFieldSync-
|
|
656
|
+
//# sourceMappingURL=TreeSelectFieldSync-BRQgLPxB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeSelectFieldSync-BRQgLPxB.js","sources":["../src/beta/components/TreeSelectField/internal/TreeSelectFieldInput.tsx","../src/beta/components/TreeSelectField/TreeSelectField.tsx","../src/beta/components/TreeSelectField/TreeSelectFieldSync.tsx"],"sourcesContent":["import styles from \"./TreeSelectFieldInput.module.scss\";\nimport cx from \"classnames\";\nimport { Button } from \"../../../../components/Button\";\nimport { Chip } from \"../../../../components/Chip\";\nimport { Flex } from \"../../../../components/Flex\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport type { ReactElement, RefObject, KeyboardEvent, MouseEvent } from \"react\";\nimport { ANV_PART_ATTR } from \"../../../../internal/constants/anvParts\";\nimport type { TreeSelectFieldValue } from \"../types\";\nimport { PARTS } from \"../parts\";\nimport type { MultiSelectFieldChipProps } from \"../../../../components/MultiSelectField/types\";\nimport { useChipLayout } from \"../../../../components/MultiSelectField/internal/useChipLayout\";\n\n/**\n * Props for the TreeSelectFieldInput component.\n * @property {string} [id] - HTML id attribute for the input element\n * @property {string} [placeholder] - Placeholder text displayed when no options are selected\n * @property {\"small\" | \"medium\" | \"large\"} [size] - Size variant of the input\n * @property {boolean} [disabled] - Disables the input entirely\n * @property {boolean} [readOnly] - Cannot be modified but remains interactive\n * @property {boolean} [error] - Shows error styling on the input when true\n * @property {boolean} [single] - When true, renders single-select text display instead of chips\n * @property {boolean} [singleRow] - When true, restricts chip display to a single row\n * @property {number} [maxChips] - Maximum number of chips to display before showing +N indicator\n * @property {string | ReactElement} [prefix] - Content to display before the input area\n * @property {string | ReactElement} [suffix] - Content to display after the input area\n * @property {TreeSelectFieldValue[]} selectedOptions - Array of currently selected options\n * @property {(option: TreeSelectFieldValue) => void} onRemoveOption - Callback fired when a chip is removed\n * @property {(value: TreeSelectFieldValue) => MultiSelectFieldChipProps} [getChipProps] - Callback to customize chip props per selected option\n * @property {RefObject<HTMLInputElement>} [inputRef] - Ref for the input element\n * @property {RefObject<HTMLDivElement>} [inputWrapperRef] - Ref for the input wrapper div element\n * @property {string} [searchValue] - Current search input value\n * @property {(e: React.ChangeEvent<HTMLInputElement>) => void} [onSearchChange] - Callback fired when search input changes\n * @property {(e: React.KeyboardEvent) => void} [onInputKeyDown] - Callback fired on key down in the search input\n * @property {() => void} [onWrapperClick] - Callback fired when the input wrapper is clicked\n * @property {boolean} [isOpen] - Whether the dropdown is currently open\n * @property {boolean} [disableSearch] - When true, hides the search input\n * @property {Record<string, unknown>} [comboboxProps] - Additional ARIA props for the combobox input role\n */\nexport type TreeSelectFieldInputProps = {\n id?: string;\n placeholder?: string;\n size?: \"small\" | \"medium\" | \"large\";\n disabled?: boolean;\n readOnly?: boolean;\n error?: boolean;\n single?: boolean;\n singleRow?: boolean;\n maxChips?: number;\n prefix?: string | ReactElement;\n suffix?: string | ReactElement;\n selectedOptions: TreeSelectFieldValue[];\n onRemoveOption: (option: TreeSelectFieldValue) => void;\n getChipProps?: (value: TreeSelectFieldValue) => MultiSelectFieldChipProps;\n inputRef?: RefObject<HTMLInputElement>;\n inputWrapperRef?: RefObject<HTMLDivElement>;\n searchValue?: string;\n onSearchChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onInputKeyDown?: (e: React.KeyboardEvent) => void;\n onWrapperClick?: () => void;\n isOpen?: boolean;\n ariaControls?: string;\n disableSearch?: boolean;\n comboboxProps?: Record<string, unknown>;\n};\n\n/**\n * Internal input component for the TreeSelectField that renders the trigger area\n * with chips, search input, single-select text, and the toggle button.\n *\n * Features:\n * - Chip display for selected options in multi-select mode with remove functionality\n * - Single-row chip overflow detection with +N hidden chip indicator\n * - Text input for filtering tree options when search is enabled\n * - Plain text display for single-select mode\n * - Chevron toggle button to open/close the dropdown\n * - Optional prefix and suffix content slots\n * - Supports small, medium, and large size variants\n * - Error state styling\n * - Disabled and read-only state styling\n * - Accessible combobox role with aria-expanded and aria-haspopup\n *\n * @example\n * <TreeSelectFieldInput\n * placeholder=\"Select categories...\"\n * size=\"medium\"\n * selectedOptions={[{ id: 1, label: \"Category A\" }]}\n * onRemoveOption={(option) => handleRemove(option)}\n * isOpen={isOpen}\n * onWrapperClick={() => setIsOpen(true)}\n * />\n */\nexport const TreeSelectFieldInput = ({\n id,\n placeholder,\n size,\n disabled,\n readOnly,\n error,\n single,\n singleRow,\n maxChips,\n prefix,\n suffix,\n selectedOptions,\n onRemoveOption,\n getChipProps,\n inputRef,\n inputWrapperRef,\n searchValue,\n onSearchChange,\n onInputKeyDown,\n onWrapperClick,\n isOpen,\n ariaControls,\n disableSearch,\n comboboxProps,\n}: TreeSelectFieldInputProps) => {\n const { rowsRef, displayCount, hiddenCount } = useChipLayout({\n selectedOptionsLength: selectedOptions.length,\n singleRow,\n maxChips,\n });\n\n const inputWrapperClassNames = cx(styles[\"input-wrapper\"], {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"disabled\"]]: disabled || readOnly,\n });\n\n const handleWrapperClick = (e: MouseEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n if (target.closest(\"button\") || target.tagName === \"INPUT\") {\n return;\n }\n onWrapperClick?.();\n inputRef?.current?.focus();\n };\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events -- Click-to-focus container; Despite the disabled rules, this remains accessible. Keyboard interaction is provided by the input and nested buttons are filtered out in the handler.\n <div\n ref={inputWrapperRef}\n className={inputWrapperClassNames}\n onClick={handleWrapperClick}\n >\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n\n <div\n className={styles[\"rows-wrapper\"]}\n ref={rowsRef}\n data-single-row={singleRow || undefined}\n >\n {!single && selectedOptions.length > 0\n ? selectedOptions.slice(0, displayCount).map((option, index) => (\n <div\n key={`selected-item-${option.id}-${index}`}\n className={styles[\"chip-wrapper\"]}\n >\n <Chip\n {...getChipProps?.(option)}\n {...{ [ANV_PART_ATTR]: PARTS.chip }}\n label={option.label}\n onClose={\n disabled || readOnly || option.disabled\n ? undefined\n : () => onRemoveOption(option)\n }\n className={styles[\"chip\"]}\n title={option.label}\n />\n </div>\n ))\n : null}\n\n {hiddenCount > 0 ? (\n <div className={styles[\"chip-wrapper\"]}>\n <Chip\n label={`+${hiddenCount}`}\n className={styles[\"chip\"]}\n title={selectedOptions\n .slice(displayCount)\n .map((option) => option.label)\n .join(\", \")}\n {...{ [ANV_PART_ATTR]: PARTS.overflowChip }}\n />\n </div>\n ) : null}\n\n {/* Editable search input — multi-select with search enabled */}\n {!disableSearch && !single ? (\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n className={cx(styles[\"input\"], { [styles[\"error\"]]: error })}\n role=\"combobox\"\n aria-controls={ariaControls}\n aria-expanded={isOpen}\n aria-haspopup=\"tree\"\n value={searchValue}\n onChange={onSearchChange}\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) =>\n onInputKeyDown?.(e)\n }\n disabled={disabled}\n readOnly={readOnly}\n placeholder={\n selectedOptions.length === 0 ? placeholder : undefined\n }\n {...comboboxProps}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n </Flex>\n ) : null}\n\n {/* Read-only trigger input — single mode or search disabled */}\n {single || disableSearch ? (\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n className={cx(styles[\"input\"], { [styles[\"error\"]]: error })}\n role=\"combobox\"\n aria-controls={ariaControls}\n aria-expanded={isOpen}\n aria-haspopup=\"tree\"\n readOnly\n value={\n single && selectedOptions.length > 0\n ? selectedOptions[0].label\n : \"\"\n }\n disabled={disabled}\n placeholder={\n selectedOptions.length === 0 ? placeholder : undefined\n }\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) =>\n onInputKeyDown?.(e)\n }\n {...comboboxProps}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n </Flex>\n ) : null}\n </div>\n\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\n\n <div className={styles[\"buttons-wrapper\"]}>\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Button\n icon={Chevron_Right}\n aria-label=\"toggle menu\"\n appearance=\"ghost\"\n size=\"small\"\n disabled={disabled}\n aria-expanded={isOpen}\n className={styles[\"toggle-button\"]}\n tabIndex={-1}\n {...{ [ANV_PART_ATTR]: PARTS.toggleButton }}\n onClick={() => {\n onWrapperClick?.();\n inputRef?.current?.focus();\n }}\n />\n </div>\n </div>\n </div>\n );\n};\n\nTreeSelectFieldInput.displayName = \"TreeSelectFieldInput\";\n","import {\n forwardRef,\n useId,\n useRef,\n useState,\n useEffect,\n useImperativeHandle,\n useCallback,\n} from \"react\";\nimport cx from \"classnames\";\nimport type {\n TreeSelectFieldHandle,\n TreeSelectFieldNode,\n TreeSelectFieldProps,\n TreeSelectFieldValue,\n} from \"./types\";\nimport type { DataAttributes } from \"../../../types\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks/useLayoutPropsUtil\";\nimport { warnDeprecatedErrorUsage } from \"../../../components/FieldMessage\";\nimport { FieldMessage } from \"../../../components/FieldMessage\";\nimport { FieldLabel } from \"../../../components/FieldLabel\";\nimport { SrOnly } from \"../../../components/SrOnly\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { useAdaptiveView } from \"../../hooks/useAdaptiveView\";\nimport { TreeSelectFieldInput } from \"./internal/TreeSelectFieldInput\";\nimport { useTreeLoader } from \"./internal/useTreeLoader\";\nimport { useTree } from \"./internal/useTree\";\nimport { TreeContent } from \"./internal/TreeContent\";\nimport { findNode } from \"./internal/treeUtils\";\nimport { useTreeLazyCascade } from \"./internal/useTreeLazyCascade\";\nimport triggerStyles from \"../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\n\n/**\n * TreeSelectField component for selecting one or more nodes from a hierarchical tree structure.\n *\n * Features:\n * - Async tree data loading via loadOptions callback with optional LRU caching\n * - Single-select and multi-select modes\n * - Multi-select chips display with optional singleRow and maxChips limits\n * - Search filtering that preserves tree structure\n * - Cascading parent/child selection (linked mode) or independent node selection\n * - Lazy branch expansion with on-demand children loading\n * - Virtualized rendering for large trees via the virtualize prop\n * - Full keyboard navigation (ArrowDown/Up, ArrowRight/Left, Enter, Home/End, Escape, Backspace)\n * - Imperative handle for clearCache, invalidate, expandAll, collapseAll\n * - Accessible label, error, hint, description, and warning helper text\n * - Prefix and suffix slot support\n * - Supports layout utilities for positioning and spacing\n *\n * @example\n * <TreeSelectField\n * label=\"Select Categories\"\n * value={selected}\n * onSelectedOptionsChange={setSelected}\n * loadOptions={async (search) => fetchCategories(search)}\n * />\n */\nexport const TreeSelectField = forwardRef<\n TreeSelectFieldHandle,\n TreeSelectFieldProps\n>((propsWithLayout, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(propsWithLayout);\n\n const dataAttributes = Object.fromEntries(\n Object.entries(componentProps).filter(([key]) => key.startsWith(\"data-\")),\n ) as DataAttributes;\n\n const {\n id: idProp,\n label,\n labelNode,\n hideLabel,\n placeholder,\n size,\n error,\n hint,\n moreInfo,\n labelAiMark,\n description,\n warning,\n required,\n disabled,\n readOnly,\n prefix,\n suffix,\n className,\n style,\n disableSearch,\n debounceMs = 200,\n searchValue: searchValueProp,\n onSearchChange,\n singleRow,\n maxChips,\n getChipProps,\n virtualize,\n value,\n onSelectedOptionsChange,\n selectionMode = \"linked\",\n valueConsistsOf = \"LEAF_PRIORITY\",\n defaultExpandLevel,\n expandedIds,\n onExpandedIdsChange,\n loadOptions,\n cache,\n initialLoad,\n displayMenuAs: displayMenuAsProp = \"auto\",\n } = componentProps;\n\n const autoId = useId();\n const id = idProp ?? autoId;\n const helperUid = useId();\n const moreInfoUid = useId();\n const inputRef = useRef<HTMLInputElement>(null);\n const inputWrapperRef = useRef<HTMLDivElement>(null);\n const treePanelRef = useRef<HTMLDivElement>(null);\n\n warnDeprecatedErrorUsage(\"TreeSelectField\", error);\n\n const errorMessages =\n typeof error === \"boolean\" || error === undefined ? undefined : error;\n const hasHelperText = !!(hint || errorMessages || warning || description);\n const isSingleSelect = selectionMode === \"single\";\n // In single mode, ALL/BRANCH_PRIORITY/LEAF_PRIORITY are equivalent — any\n // node is selectable. Only LEAF_ONLY restricts to leaves, and BRANCH_ONLY\n // restricts to branches. In multi-select modes, branches are always\n // selectable; valueConsistsOf only controls the value shape.\n const branchesSelectable = isSingleSelect\n ? valueConsistsOf !== \"LEAF_ONLY\"\n : true;\n const leavesSelectable = valueConsistsOf !== \"BRANCH_ONLY\";\n const emptyBranchesSelectable = valueConsistsOf !== \"LEAF_ONLY\";\n\n const { isMobile } = useAdaptiveView();\n const displayAs =\n displayMenuAsProp === \"auto\"\n ? isMobile\n ? \"dialog\"\n : \"popover\"\n : displayMenuAsProp;\n\n // ---------------------------------------------------------------------------\n // Search state (uncontrolled or controlled)\n // ---------------------------------------------------------------------------\n\n const isSearchControlled = searchValueProp !== undefined;\n const [internalSearchValue, setInternalSearchValue] = useState(\"\");\n const searchValue = isSearchControlled\n ? searchValueProp\n : internalSearchValue;\n\n const handleSearchChange = useCallback(\n (v: string) => {\n if (!isSearchControlled) {\n setInternalSearchValue(v);\n }\n onSearchChange?.(v);\n },\n [isSearchControlled, onSearchChange],\n );\n\n // ---------------------------------------------------------------------------\n // Tree loader\n // ---------------------------------------------------------------------------\n\n const loader = useTreeLoader({\n loadOptions,\n cache,\n initialLoad,\n debounceMs,\n });\n\n // ---------------------------------------------------------------------------\n // Menu open state\n // ---------------------------------------------------------------------------\n\n const [isOpen, setIsOpen] = useState(false);\n\n const openMenu = useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n loader.onOpen();\n }, [disabled, loader]);\n\n // Trigger search in loader when searchValue changes (including clearing to\n // empty string so root nodes reload). Skip the initial mount since the loader\n // handles initial loading via its own initialLoad/onOpen mechanism.\n const isFirstSearchEffect = useRef(true);\n useEffect(() => {\n if (isFirstSearchEffect.current) {\n isFirstSearchEffect.current = false;\n return;\n }\n loader.search(searchValue ?? \"\");\n // eslint-disable-next-line react-hooks/exhaustive-deps -- We only want to re-run when searchValue changes, not on loader reference changes\n }, [searchValue]);\n\n // ---------------------------------------------------------------------------\n // Tree state\n // ---------------------------------------------------------------------------\n\n const tree = useTree({\n nodes: loader.nodes,\n value,\n onSelectedOptionsChange,\n selectionMode,\n valueConsistsOf,\n defaultExpandLevel,\n expandedIds,\n onExpandedIdsChange,\n searchValue,\n ancestry: loader.ancestry,\n loadingChildrenIds: loader.isLoadingChildren,\n });\n\n // ---------------------------------------------------------------------------\n // Imperative handle\n // ---------------------------------------------------------------------------\n\n useImperativeHandle(\n ref,\n () => ({\n clearCache: loader.clearCache,\n invalidate: loader.invalidate,\n expandAll: tree.expandAll,\n collapseAll: tree.collapseAll,\n }),\n [loader.clearCache, loader.invalidate, tree.expandAll, tree.collapseAll],\n );\n\n // ---------------------------------------------------------------------------\n // Lazy-cascade: load unloaded descendants before toggling selection\n // ---------------------------------------------------------------------------\n\n // closeMenu is defined below; the cascade reads it via ref so its\n // single-select close callback can stay stable.\n const closeMenuRef = useRef<() => void>(() => undefined);\n\n const onCloseAfterSingleSelect = useCallback(() => {\n closeMenuRef.current();\n inputRef.current?.focus();\n }, []);\n\n const {\n handleToggleNode,\n pendingToggleNodeId,\n reset: resetLazyCascade,\n } = useTreeLazyCascade({\n tree,\n loader,\n isSingleSelect,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n readOnly,\n onCloseAfterSingleSelect,\n });\n\n const closeMenu = useCallback(() => {\n setIsOpen(false);\n handleSearchChange(\"\");\n resetLazyCascade();\n }, [handleSearchChange, resetLazyCascade]);\n\n useEffect(() => {\n closeMenuRef.current = closeMenu;\n }, [closeMenu]);\n\n useEffect(() => {\n if (disabled && isOpen) {\n closeMenu();\n }\n }, [disabled, isOpen, closeMenu]);\n\n const handleRemoveOption = useCallback(\n (option: TreeSelectFieldValue) => {\n const target = value.find((v) => v.id === option.id);\n // Disabled selected options are locked — chip close / keyboard removal\n // must not drop them from the value.\n if (target?.disabled) {\n return;\n }\n onSelectedOptionsChange(value.filter((v) => v.id !== option.id));\n },\n [value, onSelectedOptionsChange],\n );\n\n // ---------------------------------------------------------------------------\n // Keyboard handlers\n // ---------------------------------------------------------------------------\n\n // Resolve the currently keyboard-focused node from activeDescendantId.\n // Node IDs may be string or number; try the string form first so that\n // string IDs like \"003\" aren't mis-coerced to the number 3.\n const getActiveNode = useCallback((): TreeSelectFieldNode | undefined => {\n const descId = tree.activeDescendantId;\n if (!descId) return undefined;\n const nodeId = descId.replace(/^treeitem-/, \"\");\n const stringMatch = findNode(tree.nodes, nodeId);\n if (stringMatch) return stringMatch;\n const numId = Number(nodeId);\n return Number.isNaN(numId) ? undefined : findNode(tree.nodes, numId);\n }, [tree.activeDescendantId, tree.nodes]);\n\n const handleInputKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n if (isOpen) {\n e.stopPropagation();\n closeMenu();\n }\n return;\n }\n\n if (e.key === \"Tab\") {\n if (isOpen) closeMenu();\n return;\n }\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n if (!isOpen) {\n openMenu();\n }\n tree.onKeyDown(e);\n return;\n }\n\n if (\n e.key === \"Backspace\" &&\n !isSingleSelect &&\n !readOnly &&\n searchValue === \"\" &&\n value.length > 0\n ) {\n // Disabled selected options are locked and are skipped.\n const lastRemovable = [...value]\n .reverse()\n .find((option) => !option.disabled);\n if (lastRemovable) {\n handleRemoveOption(lastRemovable);\n }\n return;\n }\n\n if (isOpen) {\n // Intercept Enter to route through handleToggleNode (selectability,\n // lazy loading, single-select close) instead of useTree's toggleNode.\n // When search is disabled, Space also toggles the focused node — with\n // search enabled, Space types a character into the input.\n if (e.key === \"Enter\" || (e.key === \" \" && disableSearch)) {\n const activeNode = getActiveNode();\n if (activeNode) {\n e.preventDefault();\n handleToggleNode(activeNode.id);\n }\n return;\n }\n\n // Intercept ArrowRight to trigger lazy loading on unloaded branches.\n // Let tree.onKeyDown handle the expansion state, then load children.\n if (e.key === \"ArrowRight\") {\n const activeNode = getActiveNode();\n if (activeNode?.children === null) {\n e.preventDefault();\n tree.toggleExpand(activeNode.id);\n void loader.loadChildren(activeNode);\n return;\n }\n }\n\n // Delegate remaining keys (ArrowUp, ArrowLeft, Home, End)\n // to tree navigation.\n tree.onKeyDown(e);\n }\n },\n [\n isOpen,\n openMenu,\n closeMenu,\n isSingleSelect,\n readOnly,\n searchValue,\n value,\n handleRemoveOption,\n tree,\n getActiveNode,\n handleToggleNode,\n loader,\n disableSearch,\n ],\n );\n\n // ---------------------------------------------------------------------------\n // Lazy children loader callback for panels\n // ---------------------------------------------------------------------------\n\n const handleLoadChildren = useCallback(\n (node: Parameters<typeof loader.loadChildren>[0]) => {\n void loader.loadChildren(node);\n },\n [loader],\n );\n\n // ---------------------------------------------------------------------------\n // Render\n // ---------------------------------------------------------------------------\n\n // Match TreeSelectMenu / MultiSelectMenu's two-mode focus model:\n // - search on → tabIndex -1 (input owns Tab order) + onKeyDown\n // - search off → tabIndex 0 (tree can own focus) + onKeyDown\n // Always attach onKeyDown so keyboard navigation still works after a\n // scrollbar-thumb drag moves focus onto the panel. tabIndex=-1 keeps the\n // panel out of sequential Tab order while remaining a focusable click\n // target, so OptionsPopover sees focus stay inside and does not close.\n const panelProps = {\n visibleNodes: tree.visibleNodes,\n getCheckState: (id: string | number) =>\n id === pendingToggleNodeId ? \"loading\" : tree.getCheckState(id),\n toggleNode: handleToggleNode,\n toggleExpand: tree.toggleExpand,\n getTreeItemProps: tree.getTreeItemProps,\n treeProps: {\n ...tree.treeProps,\n id: `${id}-tree`,\n \"aria-label\": label,\n onKeyDown:\n handleInputKeyDown as React.KeyboardEventHandler<HTMLDivElement>,\n tabIndex: disableSearch ? 0 : -1,\n },\n activeDescendantId: tree.activeDescendantId,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n readOnly,\n onHover: tree.setActiveNodeId,\n onLoadChildren: handleLoadChildren,\n };\n\n const labelContent = (\n <FieldLabel\n el=\"label\"\n htmlFor={`${id}-input`}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfo ? moreInfoUid : undefined}\n aiMark={labelAiMark}\n >\n {labelNode ?? label}\n </FieldLabel>\n );\n\n return (\n <div\n {...dataAttributes}\n data-anv=\"tree-select-field\"\n className={cx(triggerStyles[\"search-field\"], className)}\n style={{ ...layoutStyles, ...style }}\n >\n {/* Label */}\n {hideLabel ? <SrOnly>{labelContent}</SrOnly> : labelContent}\n\n {/* Input area */}\n <TreeSelectFieldInput\n id={`${id}-input`}\n placeholder={placeholder}\n size={size}\n disabled={disabled}\n readOnly={readOnly}\n error={!!error}\n single={isSingleSelect}\n singleRow={singleRow}\n maxChips={maxChips}\n getChipProps={getChipProps}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={value}\n onRemoveOption={handleRemoveOption}\n inputRef={inputRef}\n inputWrapperRef={inputWrapperRef}\n searchValue={searchValue}\n onSearchChange={(e) => {\n handleSearchChange(e.target.value);\n if (!isOpen) openMenu();\n }}\n onInputKeyDown={handleInputKeyDown}\n onWrapperClick={() => {\n if (!disabled) {\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n inputRef.current?.focus();\n }\n }}\n isOpen={isOpen}\n ariaControls={`${id}-tree`}\n disableSearch={disableSearch}\n comboboxProps={{\n \"aria-describedby\":\n [hasHelperText && helperUid, moreInfo && moreInfoUid]\n .filter(Boolean)\n .join(\" \") || undefined,\n \"aria-invalid\": error ? (true as const) : undefined,\n \"aria-activedescendant\": isOpen ? tree.activeDescendantId : undefined,\n onClick: disabled\n ? undefined\n : () => {\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n },\n }}\n />\n\n {/* Helper text */}\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n\n {/* Dropdown */}\n {displayAs === \"dialog\" ? (\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen && !disabled}\n onClose={closeMenu}\n title={label}\n initialFocusResolver={(elements) =>\n elements.find((el) => el.tagName === \"INPUT\") || elements[0]\n }\n field={\n <TreeSelectFieldInput\n id={`${id}-dialog-input`}\n placeholder={placeholder}\n size=\"medium\"\n disabled={disabled}\n readOnly={readOnly}\n error={!!error}\n single={isSingleSelect}\n singleRow\n maxChips={20}\n getChipProps={getChipProps}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={value}\n onRemoveOption={handleRemoveOption}\n searchValue={searchValue}\n onSearchChange={(e) => {\n handleSearchChange(e.target.value);\n if (!isOpen) openMenu();\n }}\n onInputKeyDown={handleInputKeyDown}\n isOpen={isOpen}\n ariaControls={`${id}-tree`}\n disableSearch={false}\n comboboxProps={{\n \"aria-activedescendant\": isOpen\n ? tree.activeDescendantId\n : undefined,\n }}\n />\n }\n >\n {isOpen && !disabled ? (\n <TreeContent\n ref={treePanelRef}\n loading={loader.isLoading}\n hasNoVisibleNodes={tree.visibleNodes.length === 0}\n virtualize={virtualize}\n panelProps={panelProps}\n />\n ) : null}\n </OptionsDialog>\n ) : (\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={inputWrapperRef}\n open={isOpen && !disabled}\n onClose={closeMenu}\n width=\"reference\"\n >\n {isOpen && !disabled ? (\n <TreeContent\n ref={treePanelRef}\n loading={loader.isLoading}\n hasNoVisibleNodes={tree.visibleNodes.length === 0}\n virtualize={virtualize}\n panelProps={panelProps}\n />\n ) : null}\n </OptionsPopover>\n )}\n </div>\n );\n});\n\nTreeSelectField.displayName = \"TreeSelectField\";\n","import { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport type { MatchSorterOptions } from \"match-sorter\";\nimport { TreeSelectField } from \"./TreeSelectField\";\nimport type {\n TreeSelectFieldHandle,\n TreeSelectFieldNode,\n TreeSelectFieldProps,\n} from \"./types\";\nimport {\n type TreeSyncFilterFn,\n applyChildCounts,\n defaultTreeSyncFilter,\n toTreeSyncFilterFn,\n} from \"./internal/treeSync\";\n\nexport type { TreeSyncFilterFn };\n\n/**\n * Props for the TreeSelectFieldSync component.\n * @property options - The static tree options to display.\n * @property filter - Custom filter function or MatchSorterOptions to control how nodes are filtered during search.\n * By default, filters by label and searchText using match-sorter, preserving parent nodes of any match.\n * @extends TreeSelectFieldProps\n */\nexport type TreeSelectFieldSyncProps = Omit<\n TreeSelectFieldProps,\n \"loadOptions\" | \"debounceMs\" | \"cache\" | \"initialLoad\"\n> & {\n /**\n * The static tree options to display in the field.\n */\n options: TreeSelectFieldNode[];\n /**\n * Controls how options are filtered when the user types a search value.\n * Can be a function that returns nodes in the desired display order,\n * or a MatchSorterOptions object to customize the default match-sorter behavior.\n *\n * By default, nodes are filtered by `label` and `searchText` using match-sorter,\n * and parents of matching nodes are preserved in the tree structure.\n *\n * @example\n * <TreeSelectFieldSync\n * options={options}\n * filter={(nodes, searchValue) => {\n * return nodes.filter((node) =>\n * node.label.toLowerCase().includes(searchValue.toLowerCase())\n * );\n * }}\n * />\n *\n * @example\n * <TreeSelectFieldSync\n * options={options}\n * filter={{ keys: [\"label\"] }}\n * />\n */\n filter?: TreeSyncFilterFn | MatchSorterOptions<TreeSelectFieldNode>;\n};\n\n/**\n * TreeSelectFieldSync is a simplified wrapper around TreeSelectField for static (non-async) tree data.\n *\n * Features:\n * - Accepts static `options` instead of `loadOptions`.\n * - Performs client-side filtering with tree-structure awareness (parents of matches are preserved).\n * - Accepts a custom filter function or MatchSorterOptions to customize filtering behavior.\n * - Invalidates the field when the options reference changes.\n * - Supports all other props of TreeSelectField.\n *\n * @example\n * <TreeSelectFieldSync\n * label=\"Select location\"\n * options={locationTree}\n * value={selected}\n * onSelectedOptionsChange={setSelected}\n * />\n */\nexport const TreeSelectFieldSync = (props: TreeSelectFieldSyncProps) => {\n const {\n options,\n filter: filterProp = defaultTreeSyncFilter,\n ...rest\n } = props;\n\n const filter = useMemo(() => toTreeSyncFilterFn(filterProp), [filterProp]);\n\n // Populate childCount from the full static tree so branch check-state stays\n // accurate while search filters the visible subset.\n const processedOptions = useMemo(() => applyChildCounts(options), [options]);\n\n const loadOptions = useCallback(\n (searchValue: string) => {\n return filter(processedOptions, searchValue);\n },\n [filter, processedOptions],\n );\n\n const fieldRef = useRef<TreeSelectFieldHandle>(null);\n const prevOptionsRef = useRef(options);\n\n useEffect(() => {\n if (prevOptionsRef.current !== options) {\n prevOptionsRef.current = options;\n fieldRef.current?.invalidate();\n }\n }, [options]);\n\n return (\n <TreeSelectField\n ref={fieldRef}\n loadOptions={loadOptions}\n debounceMs={0}\n {...rest}\n />\n );\n};\n\nTreeSelectFieldSync.displayName = \"TreeSelectFieldSync\";\n"],"names":["Chevron_Right","id","triggerStyles"],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
.anvil2 {/* BASE */._input-
|
|
1
|
+
.anvil2 {/* BASE */._input-wrapper_5nu5i_2 {
|
|
2
2
|
--a2-mod-tree-select-field-input-height: calc(
|
|
3
3
|
var(--a2-size-10, 2.5rem) - (var(--a2-border-width-default, var(--a2-size-quarter, 0.0625rem)) * 2)
|
|
4
4
|
);
|
|
5
5
|
--a2-mod-tree-select-field-input-padding-inline-end: var(--a2-size-8, 2rem);
|
|
6
|
+
--a2-mod-tree-select-field-input-min-width: 100px;
|
|
6
7
|
font-family: var(--a2-font-family-base, "Nunito Sans", sans-serif);
|
|
7
8
|
font-size: 100%;
|
|
8
9
|
color: inherit;
|
|
@@ -22,27 +23,27 @@
|
|
|
22
23
|
padding-inline-end: var(--a2-mod-tree-select-field-input-padding-inline-end);
|
|
23
24
|
padding-inline-start: var(--a2-size-3, 0.75rem);
|
|
24
25
|
position: relative;
|
|
25
|
-
}._input-
|
|
26
|
+
}._input-wrapper_5nu5i_2:focus:not([disabled]), ._input-wrapper_5nu5i_2:focus-visible, ._input-wrapper_5nu5i_2:has(._input_5nu5i_2:focus-visible) {
|
|
26
27
|
outline-width: var(--a2-size-half, 0.125rem);
|
|
27
|
-
}._input-
|
|
28
|
+
}._input-wrapper_5nu5i_2:has(._input_5nu5i_2._error_5nu5i_31) {
|
|
28
29
|
border-color: var(--a2-border-color-danger, light-dark(var(--a2-color-red-600, #d62100), var(--a2-color-red-200, #ffac9e)));
|
|
29
|
-
}._input-
|
|
30
|
+
}._input-wrapper_5nu5i_2:focus:has(._input_5nu5i_2._error_5nu5i_31):not([disabled]), ._input-wrapper_5nu5i_2:focus-visible:has(._input_5nu5i_2._error_5nu5i_31), ._input-wrapper_5nu5i_2:has(._input_5nu5i_2._error_5nu5i_31:focus-visible) {
|
|
30
31
|
outline-color: var(--a2-focus-ring-color-danger, var(--a2-status-color-danger, light-dark(var(--a2-color-red-600, #d62100), var(--a2-color-red-400, #ff5b3d))));
|
|
31
32
|
outline-width: var(--a2-size-half, 0.125rem);
|
|
32
|
-
}._input-
|
|
33
|
+
}._input-wrapper_5nu5i_2._disabled_5nu5i_38, ._input-wrapper_5nu5i_2[disabled], ._input-wrapper_5nu5i_2:has(._input_5nu5i_2:disabled) {
|
|
33
34
|
opacity: 0.4;
|
|
34
|
-
}._input-
|
|
35
|
+
}._input-wrapper_5nu5i_2._disabled_5nu5i_38 *, ._input-wrapper_5nu5i_2[disabled] *, ._input-wrapper_5nu5i_2:has(._input_5nu5i_2:disabled) * {
|
|
35
36
|
cursor: not-allowed;
|
|
36
|
-
}._input-
|
|
37
|
+
}._input-wrapper_5nu5i_2[disabled], ._input-wrapper_5nu5i_2[readonly], ._input-wrapper_5nu5i_2._disabled_5nu5i_38 {
|
|
37
38
|
background-color: var(--a2-background-color-strong, light-dark(var(--a2-color-neutral-20, #f9f9f9), var(--a2-color-neutral-800, #292929)));
|
|
38
|
-
}._input-
|
|
39
|
-
flex: 1 1
|
|
40
|
-
min-width:
|
|
39
|
+
}._input-flex_5nu5i_48 {
|
|
40
|
+
flex: 1 1 var(--a2-mod-tree-select-field-input-min-width);
|
|
41
|
+
min-width: var(--a2-mod-tree-select-field-input-min-width);
|
|
41
42
|
overflow: hidden;
|
|
42
43
|
text-overflow: ellipsis;
|
|
43
44
|
white-space: nowrap;
|
|
44
45
|
width: 0;
|
|
45
|
-
}.
|
|
46
|
+
}._input_5nu5i_2[type=text] {
|
|
46
47
|
font-family: var(--a2-font-family-base, "Nunito Sans", sans-serif);
|
|
47
48
|
font-size: 100%;
|
|
48
49
|
color: inherit;
|
|
@@ -55,30 +56,30 @@
|
|
|
55
56
|
display: block;
|
|
56
57
|
align-items: center;
|
|
57
58
|
display: flex;
|
|
58
|
-
flex: 1 0
|
|
59
|
+
flex: 1 0 var(--a2-mod-tree-select-field-input-min-width);
|
|
59
60
|
height: var(--a2-mod-tree-select-field-input-height);
|
|
60
|
-
min-width:
|
|
61
|
+
min-width: var(--a2-mod-tree-select-field-input-min-width);
|
|
61
62
|
box-shadow: none;
|
|
62
63
|
padding-block: var(--a2-size-2, 0.5rem);
|
|
63
64
|
padding-inline: 0;
|
|
64
65
|
transition: outline var(--a2-duration-default, 200ms) var(--a2-transition-ease-out, cubic-bezier(0, 0, 0.4, 1));
|
|
65
|
-
width:
|
|
66
|
-
}.
|
|
66
|
+
width: var(--a2-mod-tree-select-field-input-min-width);
|
|
67
|
+
}._input_5nu5i_2[type=text]:focus {
|
|
67
68
|
box-shadow: none;
|
|
68
|
-
}.
|
|
69
|
+
}._input_5nu5i_2[type=text]::-moz-placeholder {
|
|
69
70
|
color: var(--a2-foreground-color-subdued, light-dark(var(--a2-color-neutral-500, #707070), var(--a2-color-neutral-200, #c4c4c4)));
|
|
70
|
-
}.
|
|
71
|
+
}._input_5nu5i_2[type=text]::placeholder {
|
|
71
72
|
color: var(--a2-foreground-color-subdued, light-dark(var(--a2-color-neutral-500, #707070), var(--a2-color-neutral-200, #c4c4c4)));
|
|
72
73
|
}@media (prefers-reduced-motion: reduce) {
|
|
73
|
-
.
|
|
74
|
+
._input_5nu5i_2[type=text] {
|
|
74
75
|
transition-duration: 0.01ms !important;
|
|
75
76
|
transition-property: outline;
|
|
76
77
|
}
|
|
77
|
-
}input.
|
|
78
|
+
}input._input_5nu5i_2:-moz-read-only {
|
|
78
79
|
background-color: inherit;
|
|
79
|
-
}input.
|
|
80
|
+
}input._input_5nu5i_2:read-only {
|
|
80
81
|
background-color: inherit;
|
|
81
|
-
}._rows-
|
|
82
|
+
}._rows-wrapper_5nu5i_96 {
|
|
82
83
|
align-items: stretch;
|
|
83
84
|
display: flex;
|
|
84
85
|
flex-direction: row;
|
|
@@ -87,15 +88,22 @@
|
|
|
87
88
|
gap: 0 var(--a2-size-1, 0.25rem);
|
|
88
89
|
max-width: 100%;
|
|
89
90
|
width: 100%;
|
|
90
|
-
}.
|
|
91
|
+
}._rows-wrapper_5nu5i_96[data-single-row=true] {
|
|
92
|
+
--a2-mod-tree-select-field-input-min-width: var(--a2-size-6, 1.5rem);
|
|
93
|
+
max-height: var(--a2-mod-tree-select-field-input-height);
|
|
94
|
+
overflow: hidden;
|
|
95
|
+
}._rows-wrapper_5nu5i_96[data-single-row=true] ._input_5nu5i_2[type=text] {
|
|
96
|
+
flex: 1 1 var(--a2-mod-tree-select-field-input-min-width);
|
|
97
|
+
width: 100%;
|
|
98
|
+
}._chip-wrapper_5nu5i_116 {
|
|
91
99
|
align-items: center;
|
|
92
100
|
display: flex;
|
|
93
101
|
height: var(--a2-mod-tree-select-field-input-height);
|
|
94
102
|
justify-content: center;
|
|
95
103
|
max-width: 100%;
|
|
96
|
-
}.
|
|
104
|
+
}._chip_5nu5i_116 {
|
|
97
105
|
--a2-mod-chip-max-width: 100%;
|
|
98
|
-
}._buttons-
|
|
106
|
+
}._buttons-wrapper_5nu5i_128 {
|
|
99
107
|
font-family: var(--a2-font-family-base, "Nunito Sans", sans-serif);
|
|
100
108
|
font-size: 100%;
|
|
101
109
|
color: inherit;
|
|
@@ -110,7 +118,7 @@
|
|
|
110
118
|
inset-block-start: 0;
|
|
111
119
|
inset-inline-end: 0;
|
|
112
120
|
position: absolute;
|
|
113
|
-
}._toggle-button-
|
|
121
|
+
}._toggle-button-wrapper_5nu5i_145 {
|
|
114
122
|
font-family: var(--a2-font-family-base, "Nunito Sans", sans-serif);
|
|
115
123
|
font-size: 100%;
|
|
116
124
|
color: inherit;
|
|
@@ -124,23 +132,23 @@
|
|
|
124
132
|
align-items: center;
|
|
125
133
|
cursor: pointer;
|
|
126
134
|
display: flex;
|
|
127
|
-
}._toggle-
|
|
135
|
+
}._toggle-button_5nu5i_145 {
|
|
128
136
|
--a2-mod-button-background-color: transparent;
|
|
129
137
|
--a2-mod-button-foreground-color: var(--a2-foreground-color-default, light-dark(var(--a2-color-neutral-950, #040404), var(--a2-color-neutral-0, #ffffff)));
|
|
130
138
|
transform: rotate(90deg);
|
|
131
139
|
transition: transform var(--a2-duration-default, 200ms) var(--a2-transition-ease-out, cubic-bezier(0, 0, 0.4, 1));
|
|
132
|
-
}._toggle-
|
|
140
|
+
}._toggle-button_5nu5i_145[aria-expanded=true] {
|
|
133
141
|
transform: rotate(270deg);
|
|
134
|
-
}._toggle-
|
|
142
|
+
}._toggle-button_5nu5i_145[data-interactive=hover]::before, ._toggle-button_5nu5i_145:hover::before, ._toggle-button_5nu5i_145:disabled:not(._loading-infinite_5nu5i_170, ._loading-progress_5nu5i_170), ._toggle-button_5nu5i_145._disabled_5nu5i_38:not(._loading-infinite_5nu5i_170, ._loading-progress_5nu5i_170), ._toggle-button_5nu5i_145[aria-disabled=true]:not(._loading-infinite_5nu5i_170, ._loading-progress_5nu5i_170) {
|
|
135
143
|
--a2-mod-button-background-color: transparent;
|
|
136
144
|
}@media (prefers-reduced-motion: reduce) {
|
|
137
|
-
._toggle-
|
|
145
|
+
._toggle-button_5nu5i_145 {
|
|
138
146
|
transition-duration: 0.01ms !important;
|
|
139
147
|
}
|
|
140
|
-
}[aria-expanded=true] ._toggle-button-
|
|
148
|
+
}[aria-expanded=true] ._toggle-button-wrapper_5nu5i_145 ._toggle-button_5nu5i_145 {
|
|
141
149
|
transform: rotate(270deg);
|
|
142
|
-
}.
|
|
143
|
-
.
|
|
150
|
+
}._prefix_5nu5i_183,
|
|
151
|
+
._suffix_5nu5i_184 {
|
|
144
152
|
font-family: var(--a2-font-family-base, "Nunito Sans", sans-serif);
|
|
145
153
|
font-size: 100%;
|
|
146
154
|
color: var(--a2-foreground-color-default, light-dark(var(--a2-color-neutral-950, #040404), var(--a2-color-neutral-0, #ffffff)));
|
|
@@ -156,16 +164,16 @@
|
|
|
156
164
|
font-weight: var(--a2-font-weight-semibold, 600);
|
|
157
165
|
justify-content: center;
|
|
158
166
|
min-width: var(--a2-size-8, 2rem);
|
|
159
|
-
}.
|
|
167
|
+
}._prefix_5nu5i_183 {
|
|
160
168
|
padding-inline-end: var(--a2-size-2, 0.5rem);
|
|
161
|
-
}.
|
|
169
|
+
}._suffix_5nu5i_184 {
|
|
162
170
|
padding-inline-end: var(--a2-size-2, 0.5rem);
|
|
163
171
|
padding-inline-start: var(--a2-size-2, 0.5rem);
|
|
164
|
-
}/* MODIFIERS */.
|
|
172
|
+
}/* MODIFIERS */._small_5nu5i_212 {
|
|
165
173
|
--a2-mod-tree-select-field-input-height: calc(
|
|
166
174
|
var(--a2-size-8, 2rem) - (var(--a2-border-width-default, var(--a2-size-quarter, 0.0625rem)) * 2)
|
|
167
175
|
);
|
|
168
|
-
}.
|
|
176
|
+
}._large_5nu5i_218 {
|
|
169
177
|
--a2-mod-tree-select-field-input-height: calc(
|
|
170
178
|
var(--a2-size-12, 3rem) - (var(--a2-border-width-default, var(--a2-size-quarter, 0.0625rem)) * 2)
|
|
171
179
|
);
|
package/dist/TreeSelectMenu.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { a as TreeSelectMenu, T as TreeSelectMenuSync } from './TreeSelectMenuSync-
|
|
1
|
+
export { a as TreeSelectMenu, T as TreeSelectMenuSync } from './TreeSelectMenuSync-88q0ydo5.js';
|
|
2
2
|
//# sourceMappingURL=TreeSelectMenu.js.map
|