@servicetitan/anvil2 1.50.1 → 1.50.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/{Calendar-CAYitkfM.js → Calendar-BeFARXwq.js} +2 -2
  3. package/dist/{Calendar-CAYitkfM.js.map → Calendar-BeFARXwq.js.map} +1 -1
  4. package/dist/{Calendar-C9oxHTGG.js → Calendar-M9v994mm.js} +2 -2
  5. package/dist/{Calendar-C9oxHTGG.js.map → Calendar-M9v994mm.js.map} +1 -1
  6. package/dist/Calendar.js +2 -2
  7. package/dist/{Checkbox-DbBeuNdW.js → Checkbox-BwFY38z1.js} +3 -2
  8. package/dist/Checkbox-BwFY38z1.js.map +1 -0
  9. package/dist/{Checkbox-zAKOGEBl.js → Checkbox-Chck2V5C.js} +2 -2
  10. package/dist/{Checkbox-zAKOGEBl.js.map → Checkbox-Chck2V5C.js.map} +1 -1
  11. package/dist/Checkbox.js +2 -2
  12. package/dist/{Combobox-DGAa9vgU.js → Combobox-BTTWNSW1.js} +285 -175
  13. package/dist/Combobox-BTTWNSW1.js.map +1 -0
  14. package/dist/Combobox.js +1 -1
  15. package/dist/{DataTable-DQ9FFuV8.js → DataTable-hXWouflx.js} +6 -6
  16. package/dist/{DataTable-DQ9FFuV8.js.map → DataTable-hXWouflx.js.map} +1 -1
  17. package/dist/{DateField-BT9jJRp5.js → DateField-B8JdMu94.js} +6 -6
  18. package/dist/{DateField-BT9jJRp5.js.map → DateField-B8JdMu94.js.map} +1 -1
  19. package/dist/DateField.js +1 -1
  20. package/dist/{DateFieldRange-ZAic_9mt.js → DateFieldRange-DWAgi_T9.js} +7 -7
  21. package/dist/{DateFieldRange-ZAic_9mt.js.map → DateFieldRange-DWAgi_T9.js.map} +1 -1
  22. package/dist/DateFieldRange.js +1 -1
  23. package/dist/{DateFieldSingle-DAtR8ImE.js → DateFieldSingle-CQ6X-bVX.js} +7 -7
  24. package/dist/{DateFieldSingle-DAtR8ImE.js.map → DateFieldSingle-CQ6X-bVX.js.map} +1 -1
  25. package/dist/DateFieldSingle.js +1 -1
  26. package/dist/{DateFieldYearless-DXO_MPwA.js → DateFieldYearless-D6-NfIHu.js} +4 -4
  27. package/dist/{DateFieldYearless-DXO_MPwA.js.map → DateFieldYearless-D6-NfIHu.js.map} +1 -1
  28. package/dist/DateFieldYearless.js +1 -1
  29. package/dist/{DateFieldYearlessRange-Cg6bbPIi.js → DateFieldYearlessRange-CQM0vibm.js} +4 -4
  30. package/dist/{DateFieldYearlessRange-Cg6bbPIi.js.map → DateFieldYearlessRange-CQM0vibm.js.map} +1 -1
  31. package/dist/DateFieldYearlessRange.js +1 -1
  32. package/dist/{DaysOfTheWeek-9B9d7-hF.js → DaysOfTheWeek-BR-mg77X.js} +3 -3
  33. package/dist/{DaysOfTheWeek-9B9d7-hF.js.map → DaysOfTheWeek-BR-mg77X.js.map} +1 -1
  34. package/dist/DaysOfTheWeek.js +1 -1
  35. package/dist/{Dialog-BwabBKoZ.js → Dialog-Ba2oIATn.js} +8 -8
  36. package/dist/Dialog-Ba2oIATn.js.map +1 -0
  37. package/dist/Dialog.js +2 -2
  38. package/dist/{DialogCancelButton-sTEfx5kf.js → DialogCancelButton-CBHyI0CI.js} +2 -2
  39. package/dist/{DialogCancelButton-sTEfx5kf.js.map → DialogCancelButton-CBHyI0CI.js.map} +1 -1
  40. package/dist/{Drawer-GXeoK-r9.js → Drawer-CWogbC68.js} +7 -7
  41. package/dist/{Drawer-GXeoK-r9.js.map → Drawer-CWogbC68.js.map} +1 -1
  42. package/dist/Drawer.js +1 -1
  43. package/dist/{DrawerContext-Cs3k160L.js → DrawerContext-rJvgnn3O.js} +2 -2
  44. package/dist/{DrawerContext-Cs3k160L.js.map → DrawerContext-rJvgnn3O.js.map} +1 -1
  45. package/dist/FieldDialog-BHgkQOhh.js +519 -0
  46. package/dist/FieldDialog-BHgkQOhh.js.map +1 -0
  47. package/dist/{FieldLabel-jqlQ1Ldh.js → FieldLabel-BWOIFXgt.js} +7 -4
  48. package/dist/FieldLabel-BWOIFXgt.js.map +1 -0
  49. package/dist/FieldLabel.js +1 -1
  50. package/dist/{InputMask-CJC9xZHG.js → InputMask-BzY1DJoV.js} +3 -3
  51. package/dist/{InputMask-CJC9xZHG.js.map → InputMask-BzY1DJoV.js.map} +1 -1
  52. package/dist/InputMask.js +1 -1
  53. package/dist/{ListView-D8mfK8Lu.js → ListView-C5OBwbHe.js} +6 -4
  54. package/dist/ListView-C5OBwbHe.js.map +1 -0
  55. package/dist/ListView.js +1 -1
  56. package/dist/{Menu-Cn2JJe1Y.js → Menu-69JwGxYh.js} +2 -2
  57. package/dist/{Menu-Cn2JJe1Y.js.map → Menu-69JwGxYh.js.map} +1 -1
  58. package/dist/Menu.js +1 -1
  59. package/dist/MultiSelectField.d.ts +2 -0
  60. package/dist/MultiSelectField.js +2 -0
  61. package/dist/MultiSelectField.js.map +1 -0
  62. package/dist/MultiSelectFieldSync-B3HNQf7R.js +873 -0
  63. package/dist/MultiSelectFieldSync-B3HNQf7R.js.map +1 -0
  64. package/dist/MultiSelectFieldSync.css +259 -0
  65. package/dist/{NumberField-CjWLnD9X.js → NumberField-CcH25bnO.js} +3 -3
  66. package/dist/{NumberField-CjWLnD9X.js.map → NumberField-CcH25bnO.js.map} +1 -1
  67. package/dist/NumberField.js +1 -1
  68. package/dist/{Page-DEbpjQw0.js → Page-B5HZSjSl.js} +5 -5
  69. package/dist/{Page-DEbpjQw0.js.map → Page-B5HZSjSl.js.map} +1 -1
  70. package/dist/Page.js +1 -1
  71. package/dist/{Pagination-BR8MiRaA.js → Pagination-CkdBaQx6.js} +2 -2
  72. package/dist/{Pagination-BR8MiRaA.js.map → Pagination-CkdBaQx6.js.map} +1 -1
  73. package/dist/Pagination.js +1 -1
  74. package/dist/{Popover-CCXrzBul.js → Popover-D9SmGQTh.js} +6 -5
  75. package/dist/{Popover-CCXrzBul.js.map → Popover-D9SmGQTh.js.map} +1 -1
  76. package/dist/Popover.js +1 -1
  77. package/dist/{ProgressBar-BpKEr6cO.js → ProgressBar-BABkqVmW.js} +2 -2
  78. package/dist/{ProgressBar-BpKEr6cO.js.map → ProgressBar-BABkqVmW.js.map} +1 -1
  79. package/dist/ProgressBar.js +1 -1
  80. package/dist/{Radio-jj0-1dOg.js → Radio-Cds2laHA.js} +2 -2
  81. package/dist/{Radio-jj0-1dOg.js.map → Radio-Cds2laHA.js.map} +1 -1
  82. package/dist/Radio.js +2 -2
  83. package/dist/{RadioGroup-Bxy415eu.js → RadioGroup-COVlUmwy.js} +3 -3
  84. package/dist/{RadioGroup-Bxy415eu.js.map → RadioGroup-COVlUmwy.js.map} +1 -1
  85. package/dist/{SelectCard-CjbsPKZ4.js → SelectCard-C-Kjk5eS.js} +3 -3
  86. package/dist/{SelectCard-CjbsPKZ4.js.map → SelectCard-C-Kjk5eS.js.map} +1 -1
  87. package/dist/SelectCard.js +1 -1
  88. package/dist/SelectField.js +1 -1
  89. package/dist/SelectFieldSync-0CL0RTpg.js +679 -0
  90. package/dist/SelectFieldSync-0CL0RTpg.js.map +1 -0
  91. package/dist/{SelectTrigger-D4AjiMKp.js → SelectTrigger-C1U-PlLz.js} +6 -3
  92. package/dist/SelectTrigger-C1U-PlLz.js.map +1 -0
  93. package/dist/SelectTrigger.js +1 -1
  94. package/dist/{SelectTriggerBase-D9GuxPxR.js → SelectTriggerBase-RHD4FTQE.js} +3 -3
  95. package/dist/{SelectTriggerBase-D9GuxPxR.js.map → SelectTriggerBase-RHD4FTQE.js.map} +1 -1
  96. package/dist/SelectTriggerBase.css +65 -59
  97. package/dist/SelectTriggerBase.module-B0NFRlQP.js +36 -0
  98. package/dist/SelectTriggerBase.module-B0NFRlQP.js.map +1 -0
  99. package/dist/Table.js +1 -1
  100. package/dist/{TextField-Qv6OqiKQ.js → TextField-BYGSTwkL.js} +2 -2
  101. package/dist/{TextField-Qv6OqiKQ.js.map → TextField-BYGSTwkL.js.map} +1 -1
  102. package/dist/{TextField-DNuEXKyN.js → TextField-BZ3h2mqU.js} +3 -3
  103. package/dist/{TextField-DNuEXKyN.js.map → TextField-BZ3h2mqU.js.map} +1 -1
  104. package/dist/TextField.js +1 -1
  105. package/dist/{Textarea-DdLD4imO.js → Textarea-Cb0Qs2FH.js} +8 -3
  106. package/dist/Textarea-Cb0Qs2FH.js.map +1 -0
  107. package/dist/Textarea.js +1 -1
  108. package/dist/{TimeField-C39hYluo.js → TimeField-DBtJYC7t.js} +4 -4
  109. package/dist/{TimeField-C39hYluo.js.map → TimeField-DBtJYC7t.js.map} +1 -1
  110. package/dist/TimeField.js +1 -1
  111. package/dist/Toast.js +2 -2
  112. package/dist/{Toaster-DJ4tNy-0.js → Toaster-Cerf91qp.js} +2 -2
  113. package/dist/{Toaster-DJ4tNy-0.js.map → Toaster-Cerf91qp.js.map} +1 -1
  114. package/dist/{Toaster-DyDVYq4x.js → Toaster-DDrGllhh.js} +3 -3
  115. package/dist/{Toaster-DyDVYq4x.js.map → Toaster-DDrGllhh.js.map} +1 -1
  116. package/dist/{Toolbar-Vw9V1RHr.js → Toolbar-K9UFfyvX.js} +127 -41
  117. package/dist/Toolbar-K9UFfyvX.js.map +1 -0
  118. package/dist/Toolbar.js +1 -1
  119. package/dist/{Tooltip-CBy7srE2.js → Tooltip-CkfkiQPz.js} +2 -2
  120. package/dist/{Tooltip-CBy7srE2.js.map → Tooltip-CkfkiQPz.js.map} +1 -1
  121. package/dist/Tooltip.js +1 -1
  122. package/dist/{YearlessDateInputWithPicker-DMGx3gE2.js → YearlessDateInputWithPicker-BIkxKxPi.js} +4 -4
  123. package/dist/{YearlessDateInputWithPicker-DMGx3gE2.js.map → YearlessDateInputWithPicker-BIkxKxPi.js.map} +1 -1
  124. package/dist/beta/components/MultiSelectField/MultiSelectField.d.ts +27 -0
  125. package/dist/beta/components/MultiSelectField/MultiSelectFieldSync.d.ts +63 -0
  126. package/dist/beta/components/MultiSelectField/index.d.ts +3 -0
  127. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldInput.d.ts +79 -0
  128. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldList.d.ts +26 -0
  129. package/dist/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +44 -0
  130. package/dist/beta/components/MultiSelectField/stories/MultiSelectField.stories.data.d.ts +19 -0
  131. package/dist/beta/components/MultiSelectField/types.d.ts +311 -0
  132. package/dist/beta/components/SelectField/internal/FieldDialog/FieldDialog.d.ts +3 -1
  133. package/dist/beta/components/SelectField/internal/FieldPopover/FieldPopover.d.ts +1 -0
  134. package/dist/beta/components/SelectField/internal/SelectFieldInput.d.ts +3 -1
  135. package/dist/beta/components/SelectField/internal/SelectFieldLabel.d.ts +11 -3
  136. package/dist/beta/components/SelectField/internal/SelectFieldListItem.d.ts +2 -1
  137. package/dist/beta/components/SelectField/types.d.ts +19 -1
  138. package/dist/beta/components/index.d.ts +1 -0
  139. package/dist/beta.js +7 -5
  140. package/dist/beta.js.map +1 -1
  141. package/dist/components/Button/Button.figma.d.ts +1 -0
  142. package/dist/components/Combobox/ComboboxTypes.d.ts +1 -1
  143. package/dist/components/Combobox/internal/ComboboxLegacy/ComboboxLegacyTrigger.d.ts +2 -2
  144. package/dist/components/FieldLabel/FieldLabel.d.ts +5 -1
  145. package/dist/components/FieldLabel/internal/FieldLabelMoreInfoIcon.d.ts +3 -1
  146. package/dist/components/Icon/Icons.figma.d.ts +11 -0
  147. package/dist/components/ListView/ListView.d.ts +2 -9
  148. package/dist/components/ListView/internal/types.d.ts +12 -0
  149. package/dist/components/SelectTrigger/SelectTrigger.d.ts +1 -1
  150. package/dist/components/Switch/Switch.figma.d.ts +1 -0
  151. package/dist/components/Textarea/Textarea.d.ts +1 -1
  152. package/dist/index.js +34 -34
  153. package/dist/internal/components/Label/Label.d.ts +13 -3
  154. package/dist/internal/hooks/useOnClickOutside/useOnClickOutside.d.ts +8 -7
  155. package/dist/types/props.d.ts +5 -0
  156. package/dist/{useInitialFocus-BpmW7pDB.js → useInitialFocus-D_ESGka7.js} +3 -3
  157. package/dist/{useInitialFocus-BpmW7pDB.js.map → useInitialFocus-D_ESGka7.js.map} +1 -1
  158. package/dist/useOnClickOutside-Zw5vzxSq.js +71 -0
  159. package/dist/useOnClickOutside-Zw5vzxSq.js.map +1 -0
  160. package/dist/useOpenCloseTransitionStates-CiTYrLGi.js +68 -0
  161. package/dist/useOpenCloseTransitionStates-CiTYrLGi.js.map +1 -0
  162. package/dist/{usePopoverSupport-CCSCHnit.js → usePopoverSupport-CldZmxFl.js} +2 -2
  163. package/dist/{usePopoverSupport-CCSCHnit.js.map → usePopoverSupport-CldZmxFl.js.map} +1 -1
  164. package/dist/{utils-Bkbn9cyk.js → utils-u8cyv323.js} +2 -2
  165. package/dist/{utils-Bkbn9cyk.js.map → utils-u8cyv323.js.map} +1 -1
  166. package/package.json +4 -3
  167. package/dist/Checkbox-DbBeuNdW.js.map +0 -1
  168. package/dist/Combobox-DGAa9vgU.js.map +0 -1
  169. package/dist/Dialog-BwabBKoZ.js.map +0 -1
  170. package/dist/FieldLabel-jqlQ1Ldh.js.map +0 -1
  171. package/dist/ListView-D8mfK8Lu.js.map +0 -1
  172. package/dist/SelectFieldSync-D4VdOXoY.js +0 -1134
  173. package/dist/SelectFieldSync-D4VdOXoY.js.map +0 -1
  174. package/dist/SelectTrigger-D4AjiMKp.js.map +0 -1
  175. package/dist/SelectTriggerBase.module-Ce49lamD.js +0 -35
  176. package/dist/SelectTriggerBase.module-Ce49lamD.js.map +0 -1
  177. package/dist/Textarea-DdLD4imO.js.map +0 -1
  178. package/dist/Toolbar-Vw9V1RHr.js.map +0 -1
  179. package/dist/useOnClickOutside-BDzuUjmY.js +0 -147
  180. package/dist/useOnClickOutside-BDzuUjmY.js.map +0 -1
  181. /package/dist/{SelectFieldSync.css → FieldDialog.css} +0 -0
@@ -0,0 +1,679 @@
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import { u as useDownshiftEnvironment, a as useCombobox, m as matchSorter } from './match-sorter.esm-NrKOPPde.js';
3
+ import { useMemo, forwardRef, useState, useRef, useId, useImperativeHandle, useCallback, useEffect } from 'react';
4
+ import { S as Spinner } from './Spinner-xEFwsq8_.js';
5
+ import { B as Button } from './Button-92_FKAyV.js';
6
+ import { s as styles, S as SelectFieldListItem, I as InView, u as useAdaptiveView, D as DEFAULT_PAGE_SIZE, a as useSelectFieldLoading, b as useDebouncedCallback, c as SelectFieldLabel, F as FieldDialog, d as FieldPopover } from './FieldDialog-BHgkQOhh.js';
7
+ import { c as cx } from './index-tZvMCc77.js';
8
+ import { T as Text } from './Text-kPA-VzsB.js';
9
+ import { S as SrOnly } from './SrOnly-CTsYSuby.js';
10
+ import { s as styles$1 } from './SelectTriggerBase.module-B0NFRlQP.js';
11
+ import { S as SvgChevronRight } from './chevron_right-BdpsxX7x.js';
12
+ import { S as SvgClose } from './close-DZj38AEh.js';
13
+ import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-BlIWftBb.js';
14
+ import { F as FieldMessage } from './FieldMessage-DdCUxZz-.js';
15
+
16
+ const SelectFieldList = ({
17
+ isOpen,
18
+ items,
19
+ getMenuProps,
20
+ getItemProps,
21
+ highlightedIndex,
22
+ selectedOption,
23
+ hasMore,
24
+ onLoadMore,
25
+ loading,
26
+ loadingMore,
27
+ disableAutoLoadMore,
28
+ disabled,
29
+ className,
30
+ style
31
+ }) => {
32
+ const handleLoaderVisibilityChange = (visible) => {
33
+ if (visible && !disableAutoLoadMore) {
34
+ onLoadMore();
35
+ }
36
+ };
37
+ return /* @__PURE__ */ jsxs(
38
+ "div",
39
+ {
40
+ ...getMenuProps({
41
+ className: cx(styles["scroller"], className),
42
+ style
43
+ }),
44
+ children: [
45
+ /* @__PURE__ */ jsx("ul", { className: cx(styles["select-field-list"]), children: isOpen && /* @__PURE__ */ jsx(Fragment, { children: loading ? /* @__PURE__ */ jsx("div", { className: styles["empty"], children: /* @__PURE__ */ jsx(Spinner, { size: "medium" }) }) : items.length > 0 ? items.map((item, index) => /* @__PURE__ */ jsx(
46
+ SelectFieldListItem,
47
+ {
48
+ item,
49
+ index,
50
+ getItemProps,
51
+ selectionType: "single",
52
+ checked: selectedOption?.id === item.original.id ? "checked" : "unchecked",
53
+ highlighted: highlightedIndex === index,
54
+ disabled: (disabled || item.disabled) ?? false
55
+ },
56
+ item.id
57
+ )) : /* @__PURE__ */ jsx("div", { className: styles["empty"], children: /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "No match found" }) }) }) }),
58
+ loadingMore ? /* @__PURE__ */ jsxs("div", { className: styles["load-more"], children: [
59
+ /* @__PURE__ */ jsx(Spinner, { size: "small" }),
60
+ /* @__PURE__ */ jsx(SrOnly, { children: "Loading more..." })
61
+ ] }) : hasMore && !loading ? /* @__PURE__ */ jsx(
62
+ InView,
63
+ {
64
+ onVisibilityChange: handleLoaderVisibilityChange,
65
+ rootMargin: "0px 0px -100px 0px",
66
+ children: /* @__PURE__ */ jsx("div", { className: styles["load-more"], children: /* @__PURE__ */ jsx(Button, { appearance: "secondary", size: "small", onClick: onLoadMore, children: "Load more" }) })
67
+ }
68
+ ) : null
69
+ ]
70
+ }
71
+ );
72
+ };
73
+ SelectFieldList.displayName = "SelectFieldList";
74
+
75
+ const SelectFieldInput = ({
76
+ placeholder,
77
+ size,
78
+ disableClearButton,
79
+ disableToggleButton,
80
+ disabled,
81
+ readOnly,
82
+ required,
83
+ error,
84
+ onClear,
85
+ id,
86
+ inputWrapperRef,
87
+ htmlInputWrapperProps,
88
+ inputProps,
89
+ toggleButtonProps,
90
+ prefix,
91
+ suffix
92
+ }) => {
93
+ const inputWrapperClassNames = cx(styles$1["input-wrapper"], {
94
+ [styles$1["small"]]: size === "small",
95
+ [styles$1["large"]]: size === "large",
96
+ [styles$1["no-clear-button"]]: disableClearButton,
97
+ [styles$1["no-toggle-button"]]: disableToggleButton,
98
+ [styles$1["disabled"]]: disabled || readOnly
99
+ });
100
+ return /* @__PURE__ */ jsxs(
101
+ "div",
102
+ {
103
+ ref: inputWrapperRef,
104
+ ...htmlInputWrapperProps,
105
+ className: cx(inputWrapperClassNames, htmlInputWrapperProps?.className),
106
+ children: [
107
+ prefix ? /* @__PURE__ */ jsx("div", { className: styles$1["prefix"], children: prefix }) : null,
108
+ /* @__PURE__ */ jsx(
109
+ "input",
110
+ {
111
+ id,
112
+ placeholder,
113
+ disabled,
114
+ readOnly,
115
+ required,
116
+ ...inputProps,
117
+ className: cx(styles$1["input"], inputProps?.className, {
118
+ [styles$1["error"]]: error
119
+ })
120
+ }
121
+ ),
122
+ suffix ? /* @__PURE__ */ jsx("div", { className: styles$1["suffix"], children: suffix }) : null,
123
+ /* @__PURE__ */ jsxs("div", { className: styles$1["buttons-wrapper"], children: [
124
+ disableClearButton ? null : /* @__PURE__ */ jsx("div", { className: styles$1["close-button-wrapper"], children: /* @__PURE__ */ jsx(
125
+ Button,
126
+ {
127
+ icon: SvgClose,
128
+ "aria-label": "clear selection",
129
+ appearance: "ghost",
130
+ size: "small",
131
+ className: styles$1["close-button"],
132
+ onClick: () => {
133
+ onClear?.();
134
+ }
135
+ }
136
+ ) }),
137
+ disableToggleButton ? null : /* @__PURE__ */ jsx("div", { className: styles$1["toggle-button-wrapper"], children: /* @__PURE__ */ jsx(
138
+ Button,
139
+ {
140
+ icon: SvgChevronRight,
141
+ "aria-label": "toggle menu",
142
+ appearance: "ghost",
143
+ size: "small",
144
+ disabled,
145
+ ...toggleButtonProps,
146
+ className: cx(
147
+ styles$1["toggle-button"],
148
+ toggleButtonProps?.className
149
+ )
150
+ }
151
+ ) })
152
+ ] })
153
+ ]
154
+ }
155
+ );
156
+ };
157
+ SelectFieldInput.displayName = "SelectFieldInput";
158
+
159
+ const useCombo = ({
160
+ options,
161
+ pinnedOptions,
162
+ selectAll,
163
+ selectedOption,
164
+ onSelectedOptionChange,
165
+ onInputValueChange,
166
+ onIsOpenChange,
167
+ displayAs = "popover",
168
+ disableHighlightOnOpen = false,
169
+ disabled
170
+ }) => {
171
+ const downshiftItems = useMemo(() => {
172
+ const items = options.map(
173
+ mapOptionToDownshiftItem
174
+ );
175
+ if (selectAll) {
176
+ items.unshift({
177
+ id: "select-all",
178
+ type: "select-all",
179
+ original: { id: "select-all", label: selectAll.label ?? "Select All" }
180
+ });
181
+ }
182
+ return items;
183
+ }, [options, pinnedOptions, selectAll]);
184
+ const selectedDownshiftItem = useMemo(() => {
185
+ return selectedOption ? mapOptionToDownshiftItem(selectedOption) : null;
186
+ }, [selectedOption]);
187
+ const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();
188
+ const {
189
+ isOpen,
190
+ highlightedIndex,
191
+ getToggleButtonProps,
192
+ getLabelProps,
193
+ getMenuProps,
194
+ getInputProps,
195
+ getItemProps,
196
+ inputValue,
197
+ closeMenu,
198
+ openMenu,
199
+ setHighlightedIndex
200
+ } = useCombobox({
201
+ isItemDisabled: (item, _index) => {
202
+ if (!item) {
203
+ return false;
204
+ }
205
+ return (disabled || item.disabled) ?? false;
206
+ },
207
+ environment,
208
+ selectedItem: selectedDownshiftItem,
209
+ onSelectedItemChange: ({
210
+ selectedItem: si
211
+ }) => {
212
+ if (si && si.type === "option") {
213
+ onSelectedOptionChange(si.original);
214
+ } else {
215
+ onSelectedOptionChange(null);
216
+ }
217
+ },
218
+ onInputValueChange,
219
+ onIsOpenChange: (changes) => {
220
+ onIsOpenChange?.(changes);
221
+ if (changes.isOpen && !disableHighlightOnOpen) {
222
+ const selectedItemIndex = downshiftItems.findIndex(
223
+ (item) => item.id === selectedDownshiftItem?.id
224
+ );
225
+ setHighlightedIndex(selectedItemIndex);
226
+ }
227
+ },
228
+ items: downshiftItems,
229
+ itemToString(item) {
230
+ return item?.original.label ?? "";
231
+ },
232
+ stateReducer: (state, actionAndChanges) => stateReducer(state, actionAndChanges, displayAs)
233
+ });
234
+ return {
235
+ inputValue,
236
+ wrapperDivRef,
237
+ getToggleButtonProps,
238
+ getLabelProps,
239
+ getMenuProps,
240
+ getInputProps,
241
+ getItemProps,
242
+ highlightedIndex,
243
+ isOpen,
244
+ downshiftItems,
245
+ closeMenu,
246
+ openMenu
247
+ };
248
+ };
249
+ function mapOptionToDownshiftItem(option) {
250
+ return {
251
+ id: option.id,
252
+ type: "option",
253
+ disabled: option.disabled ?? false,
254
+ original: option
255
+ };
256
+ }
257
+ function stateReducer(state, actionAndChanges, displayAs) {
258
+ const { type, changes } = actionAndChanges;
259
+ switch (type) {
260
+ case useCombobox.stateChangeTypes.InputBlur:
261
+ if (displayAs === "dialog" && state.isOpen) {
262
+ return {
263
+ ...changes,
264
+ isOpen: state.isOpen
265
+ };
266
+ }
267
+ return {
268
+ ...changes,
269
+ inputValue: state.selectedItem?.original.label ?? state.inputValue
270
+ };
271
+ case useCombobox.stateChangeTypes.InputKeyDownEscape:
272
+ case useCombobox.stateChangeTypes.FunctionCloseMenu:
273
+ return {
274
+ ...changes,
275
+ inputValue: state.selectedItem?.original.label ?? state.inputValue
276
+ };
277
+ case useCombobox.stateChangeTypes.InputClick:
278
+ if (displayAs === "dialog" && state.isOpen) {
279
+ return {
280
+ ...changes,
281
+ isOpen: state.isOpen
282
+ };
283
+ }
284
+ return changes;
285
+ case useCombobox.stateChangeTypes.InputKeyDownEnter:
286
+ case useCombobox.stateChangeTypes.ItemClick:
287
+ return changes;
288
+ default:
289
+ return changes;
290
+ }
291
+ }
292
+
293
+ const SelectField = forwardRef(
294
+ (propsWithLayout, ref) => {
295
+ const { layoutStyles, componentProps } = useLayoutPropsUtil(propsWithLayout);
296
+ const [initialLoadPerformed, setInitialLoadPerformed] = useState(false);
297
+ const inputWrapperRef = useRef(null);
298
+ const {
299
+ id: idProp,
300
+ value: selectedOption,
301
+ initialLoad: initialLoadProp = "auto",
302
+ displayMenuAs: displayMenuAsProp = "auto",
303
+ lazy,
304
+ loadOptions: loadOptionsProp,
305
+ label,
306
+ labelNode,
307
+ hideLabel,
308
+ placeholder,
309
+ disableClearButton: disableClearButtonProp = false,
310
+ debounceMs = 200,
311
+ onSelectedOptionChange,
312
+ cache,
313
+ size,
314
+ error,
315
+ hint,
316
+ description,
317
+ errorAriaLive: errorAriaLiveProp = "assertive",
318
+ required,
319
+ disabled,
320
+ readOnly,
321
+ prefix,
322
+ suffix,
323
+ className,
324
+ style
325
+ } = componentProps;
326
+ const autoId = useId();
327
+ const id = idProp ?? autoId;
328
+ const helperUid = useId();
329
+ const [shouldAriaLive, setShouldAriaLive] = useState(false);
330
+ const handleFocus = () => {
331
+ setShouldAriaLive(true);
332
+ };
333
+ const handleBlur = () => {
334
+ setShouldAriaLive(false);
335
+ };
336
+ const errorMessage = typeof error !== "boolean" ? error : void 0;
337
+ const hasHelperText = hint || errorMessage || description;
338
+ const isDisabledOrReadOnly = (disabled || readOnly) ?? false;
339
+ const { isMobile } = useAdaptiveView();
340
+ const displayAs = displayMenuAsProp === "auto" ? isMobile ? "dialog" : "popover" : displayMenuAsProp;
341
+ const initialLoad = initialLoadProp === "auto" ? "immediate" : initialLoadProp;
342
+ const pageSize = lazy === "page" && "lazyOptions" in componentProps ? componentProps.lazyOptions?.pageSize ?? DEFAULT_PAGE_SIZE : DEFAULT_PAGE_SIZE;
343
+ const limit = lazy === "offset" && "lazyOptions" in componentProps ? componentProps.lazyOptions?.limit ?? DEFAULT_PAGE_SIZE : DEFAULT_PAGE_SIZE;
344
+ const loadingHookConfig = useMemo(() => {
345
+ const cacheConfig = {
346
+ enabled: cache?.enabled,
347
+ maxSize: cache?.maxSize
348
+ };
349
+ if (lazy === "page")
350
+ return {
351
+ lazy: "page",
352
+ loadOptions: loadOptionsProp,
353
+ pageSize,
354
+ cache: cacheConfig
355
+ };
356
+ if (lazy === "offset")
357
+ return {
358
+ lazy: "offset",
359
+ loadOptions: loadOptionsProp,
360
+ limit,
361
+ cache: cacheConfig
362
+ };
363
+ if (lazy === "group")
364
+ return {
365
+ lazy: "group",
366
+ loadOptions: loadOptionsProp,
367
+ cache: cacheConfig
368
+ };
369
+ return {
370
+ lazy: false,
371
+ loadOptions: loadOptionsProp,
372
+ cache: cacheConfig
373
+ };
374
+ }, [
375
+ lazy,
376
+ loadOptionsProp,
377
+ pageSize,
378
+ limit,
379
+ cache?.enabled,
380
+ cache?.maxSize
381
+ ]);
382
+ const {
383
+ options,
384
+ loading,
385
+ loadingMore,
386
+ hasMore,
387
+ loadOptions,
388
+ loadMore,
389
+ clearCache
390
+ } = useSelectFieldLoading(loadingHookConfig);
391
+ useImperativeHandle(ref, () => ({ clearCache }), [clearCache]);
392
+ const debouncedOptionLoader = useDebouncedCallback((inputValue2) => {
393
+ loadOptions(selectedOption?.label === inputValue2 ? "" : inputValue2, {
394
+ initial: true
395
+ });
396
+ }, debounceMs);
397
+ const adjustInputValueForSelectedOption = useCallback(
398
+ (inputValue2) => {
399
+ if (selectedOption?.label === inputValue2) {
400
+ return "";
401
+ } else {
402
+ return inputValue2;
403
+ }
404
+ },
405
+ [selectedOption?.label]
406
+ );
407
+ const {
408
+ isOpen,
409
+ getToggleButtonProps,
410
+ getLabelProps,
411
+ getMenuProps,
412
+ getInputProps,
413
+ wrapperDivRef,
414
+ highlightedIndex,
415
+ getItemProps,
416
+ inputValue,
417
+ downshiftItems,
418
+ closeMenu
419
+ } = useCombo({
420
+ displayAs,
421
+ disabled: isDisabledOrReadOnly,
422
+ options,
423
+ pinnedOptions: [],
424
+ selectedOption,
425
+ onSelectedOptionChange: (selectedOption2) => {
426
+ onSelectedOptionChange(selectedOption2);
427
+ },
428
+ async onIsOpenChange(changes) {
429
+ if (initialLoad === "open" && !initialLoadPerformed && changes.isOpen) {
430
+ await loadOptions(adjustInputValueForSelectedOption(inputValue), {
431
+ initial: true
432
+ });
433
+ setInitialLoadPerformed(true);
434
+ }
435
+ },
436
+ onInputValueChange: ({ inputValue: iv }) => {
437
+ debouncedOptionLoader(iv);
438
+ }
439
+ });
440
+ useEffect(() => {
441
+ const performInitialLoad = async () => {
442
+ if (initialLoad === "immediate" && !initialLoadPerformed) {
443
+ await loadOptions(adjustInputValueForSelectedOption(inputValue), {
444
+ initial: true
445
+ });
446
+ setInitialLoadPerformed(true);
447
+ }
448
+ };
449
+ performInitialLoad();
450
+ }, [
451
+ loadOptions,
452
+ initialLoadPerformed,
453
+ initialLoad,
454
+ inputValue,
455
+ adjustInputValueForSelectedOption
456
+ ]);
457
+ const handleLoadMore = async () => {
458
+ await loadMore(adjustInputValueForSelectedOption(inputValue));
459
+ };
460
+ const disableClearButton = disableClearButtonProp || !selectedOption || isDisabledOrReadOnly;
461
+ if (displayAs === "dialog") {
462
+ return /* @__PURE__ */ jsxs(
463
+ "div",
464
+ {
465
+ className: className ? `${styles$1["search-field"]} ${className}` : styles$1["search-field"],
466
+ style: { ...layoutStyles, ...style },
467
+ ref: wrapperDivRef,
468
+ children: [
469
+ /* @__PURE__ */ jsx(
470
+ SelectFieldLabel,
471
+ {
472
+ label,
473
+ labelNode,
474
+ hideLabel,
475
+ getLabelProps,
476
+ required
477
+ }
478
+ ),
479
+ /* @__PURE__ */ jsx(
480
+ SelectFieldInput,
481
+ {
482
+ disabled,
483
+ readOnly,
484
+ required,
485
+ disableToggleButton: false,
486
+ placeholder,
487
+ disableClearButton,
488
+ toggleButtonProps: getToggleButtonProps(),
489
+ onClear: () => onSelectedOptionChange(null),
490
+ id: `${id}-input`,
491
+ inputProps: getInputProps({
492
+ "aria-describedby": hasHelperText ? helperUid : void 0,
493
+ "aria-invalid": error ? true : void 0,
494
+ onFocus: handleFocus,
495
+ onBlur: handleBlur
496
+ }),
497
+ size,
498
+ error: !!error,
499
+ prefix,
500
+ suffix
501
+ }
502
+ ),
503
+ hasHelperText ? /* @__PURE__ */ jsx(
504
+ FieldMessage,
505
+ {
506
+ id: helperUid,
507
+ hint,
508
+ errorMessage,
509
+ errorAriaLive: isOpen || shouldAriaLive ? errorAriaLiveProp : "off",
510
+ description
511
+ }
512
+ ) : null,
513
+ /* @__PURE__ */ jsx(
514
+ FieldDialog,
515
+ {
516
+ id: `${id}-dialog`,
517
+ isOpen,
518
+ onClose: closeMenu,
519
+ title: label,
520
+ field: /* @__PURE__ */ jsx(
521
+ SelectFieldInput,
522
+ {
523
+ disabled,
524
+ readOnly,
525
+ inputProps: getInputProps(),
526
+ disableToggleButton: true,
527
+ placeholder,
528
+ disableClearButton,
529
+ onClear: () => onSelectedOptionChange(null),
530
+ id: `${id}-dialog-input`,
531
+ inputWrapperRef,
532
+ size: "medium",
533
+ error: !!error,
534
+ prefix,
535
+ suffix
536
+ }
537
+ ),
538
+ initialFocusResolver: (elements) => {
539
+ return elements.find((element) => element.tagName === "INPUT") || elements[0];
540
+ },
541
+ children: /* @__PURE__ */ jsx(
542
+ SelectFieldList,
543
+ {
544
+ isOpen: true,
545
+ items: downshiftItems,
546
+ getMenuProps,
547
+ getItemProps,
548
+ highlightedIndex,
549
+ selectedOption,
550
+ hasMore,
551
+ onLoadMore: handleLoadMore,
552
+ loading,
553
+ loadingMore,
554
+ disabled: isDisabledOrReadOnly,
555
+ style: {
556
+ paddingInline: 24,
557
+ paddingBlockEnd: 24
558
+ }
559
+ }
560
+ )
561
+ }
562
+ )
563
+ ]
564
+ }
565
+ );
566
+ }
567
+ return /* @__PURE__ */ jsxs(
568
+ "div",
569
+ {
570
+ className: className ? `${styles$1["search-field"]} ${className}` : styles$1["search-field"],
571
+ style: { ...layoutStyles, ...style },
572
+ children: [
573
+ /* @__PURE__ */ jsx(
574
+ SelectFieldLabel,
575
+ {
576
+ label,
577
+ labelNode,
578
+ hideLabel,
579
+ getLabelProps,
580
+ required
581
+ }
582
+ ),
583
+ /* @__PURE__ */ jsx(
584
+ SelectFieldInput,
585
+ {
586
+ disabled,
587
+ readOnly,
588
+ required,
589
+ inputProps: getInputProps({
590
+ popovertarget: `${id}-popover`,
591
+ "aria-describedby": hasHelperText ? helperUid : void 0,
592
+ "aria-invalid": error ? true : void 0,
593
+ onFocus: handleFocus,
594
+ onBlur: handleBlur
595
+ }),
596
+ toggleButtonProps: getToggleButtonProps(),
597
+ disableToggleButton: false,
598
+ placeholder,
599
+ disableClearButton,
600
+ onClear: () => onSelectedOptionChange(null),
601
+ id: `${id}-input`,
602
+ popoverTarget: `${id}-popover`,
603
+ inputWrapperRef,
604
+ size,
605
+ error: !!error,
606
+ prefix,
607
+ suffix
608
+ }
609
+ ),
610
+ hasHelperText ? /* @__PURE__ */ jsx(
611
+ FieldMessage,
612
+ {
613
+ id: helperUid,
614
+ hint,
615
+ errorMessage,
616
+ errorAriaLive: isOpen || shouldAriaLive ? errorAriaLiveProp : "off",
617
+ description
618
+ }
619
+ ) : null,
620
+ /* @__PURE__ */ jsx(
621
+ FieldPopover,
622
+ {
623
+ id: `${id}-popover`,
624
+ referenceElement: inputWrapperRef,
625
+ open: isOpen && displayAs === "popover",
626
+ onClickOutside: closeMenu,
627
+ children: /* @__PURE__ */ jsx(
628
+ SelectFieldList,
629
+ {
630
+ isOpen,
631
+ items: downshiftItems,
632
+ getMenuProps,
633
+ getItemProps,
634
+ highlightedIndex,
635
+ selectedOption,
636
+ hasMore,
637
+ onLoadMore: handleLoadMore,
638
+ loading,
639
+ loadingMore,
640
+ disabled: isDisabledOrReadOnly,
641
+ style: {
642
+ padding: 8
643
+ }
644
+ }
645
+ )
646
+ }
647
+ )
648
+ ]
649
+ }
650
+ );
651
+ }
652
+ );
653
+ SelectField.displayName = "SelectField";
654
+
655
+ const defaultFilter = (options, searchValue) => {
656
+ return matchSorter(options, searchValue, {
657
+ keys: ["label", "searchText"]
658
+ });
659
+ };
660
+ const SelectFieldSync = (props) => {
661
+ const { options, filter: filterProp = defaultFilter, ...rest } = props;
662
+ const filter = typeof filterProp === "function" ? filterProp : (options2, searchValue) => matchSorter(
663
+ options2,
664
+ searchValue,
665
+ filterProp
666
+ );
667
+ return /* @__PURE__ */ jsx(
668
+ SelectField,
669
+ {
670
+ lazy: false,
671
+ loadOptions: (searchValue) => filter(options, searchValue),
672
+ debounceMs: 0,
673
+ ...rest
674
+ }
675
+ );
676
+ };
677
+
678
+ export { SelectField as S, SelectFieldSync as a };
679
+ //# sourceMappingURL=SelectFieldSync-0CL0RTpg.js.map