@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
@@ -1,1134 +0,0 @@
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 { useState, useRef, useCallback, useEffect, useMemo, forwardRef, useId, useImperativeHandle } from 'react';
4
- import { S as Spinner } from './Spinner-xEFwsq8_.js';
5
- import { B as Button } from './Button-92_FKAyV.js';
6
- import { c as cx } from './index-tZvMCc77.js';
7
- import { F as Flex } from './Flex-CjPHUTeq.js';
8
- import { I as Icon } from './Icon-BSuTVNaa.js';
9
- import { S as SvgIndeterminateCheckBox, a as SvgCheckBox, b as SvgCheckBoxOutlineBlank } from './indeterminate_check_box-B4zobNlt.js';
10
- import { S as SvgCheck } from './check-Cf67OWrZ.js';
11
- import { T as Text } from './Text-kPA-VzsB.js';
12
- import { u as useIntersectionObserver } from './useIntersectionObserver-BEmMDO3P.js';
13
- import { S as SrOnly } from './SrOnly-CTsYSuby.js';
14
- import { s as styles$4 } from './SelectTriggerBase.module-Ce49lamD.js';
15
- import { S as SvgChevronRight } from './chevron_right-BdpsxX7x.js';
16
- import { S as SvgClose } from './close-DZj38AEh.js';
17
- import { F as FieldLabel } from './FieldLabel-jqlQ1Ldh.js';
18
- import { B as computePosition, A as autoUpdate, o as offset, L as autoPlacement, i as size, D as DialogContext } from './DrawerContext-Cs3k160L.js';
19
- import { u as useBreakpoint } from './useBreakpoint-BGCsBhQ7.js';
20
- import './anvil-fonts.css';import './SelectFieldSync.css';/* empty css */
21
- import { D as DialogCancelButton } from './DialogCancelButton-sTEfx5kf.js';
22
- import { u as useDialogScrollLock } from './useDialogScrollLock-BW-aVboo.js';
23
- import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-BlIWftBb.js';
24
- import { F as FieldMessage } from './FieldMessage-DdCUxZz-.js';
25
-
26
- const DEFAULT_PAGE_SIZE = 20;
27
- const DEFAULT_CACHE_MAX_SIZE = 15;
28
- function useSelectFieldLoading(config) {
29
- const { lazy, loadOptions: loadOptionsProp, cache: cacheConfig } = config;
30
- const cacheEnabled = cacheConfig?.enabled !== false;
31
- const cacheMaxSize = cacheConfig?.maxSize ?? DEFAULT_CACHE_MAX_SIZE;
32
- const [options, setOptions] = useState([]);
33
- const [hasMoreToLoad, setHasMoreToLoad] = useState(false);
34
- const [previousGroup, setPreviousGroup] = useState(
35
- null
36
- );
37
- const [previousPage, setPreviousPage] = useState(0);
38
- const [previousOffset, setPreviousOffset] = useState(0);
39
- const [loading, setLoading] = useState(false);
40
- const [loadingMore, setLoadingMore] = useState(false);
41
- const [stateCache, setStateCache] = useState(
42
- () => /* @__PURE__ */ new Map()
43
- );
44
- const currentSearchValueRef = useRef("");
45
- const appendOptions = useCallback((newOptions) => {
46
- setOptions((prevOptions) => prevOptions.concat(newOptions));
47
- }, []);
48
- const pageSize = lazy === "page" ? config.pageSize : DEFAULT_PAGE_SIZE;
49
- const limit = lazy === "offset" ? config.limit : DEFAULT_PAGE_SIZE;
50
- const restoreFromCache = useCallback((cached) => {
51
- setOptions(cached.options);
52
- setHasMoreToLoad(cached.hasMore);
53
- setPreviousPage(cached.previousPage);
54
- setPreviousOffset(cached.previousOffset);
55
- setPreviousGroup(cached.previousGroup);
56
- }, []);
57
- useEffect(() => {
58
- if (!cacheEnabled) return;
59
- const searchValue = currentSearchValueRef.current;
60
- if (options.length === 0) return;
61
- setStateCache((prev) => {
62
- if (prev.size >= cacheMaxSize) {
63
- prev.clear();
64
- }
65
- prev.set(searchValue, {
66
- options,
67
- hasMore: hasMoreToLoad,
68
- previousPage,
69
- previousOffset,
70
- previousGroup
71
- });
72
- return new Map(prev);
73
- });
74
- }, [
75
- cacheEnabled,
76
- cacheMaxSize,
77
- options,
78
- hasMoreToLoad,
79
- previousPage,
80
- previousOffset,
81
- previousGroup
82
- ]);
83
- const loadOptions = useCallback(
84
- async (searchValue, options2) => {
85
- const isInitial = !!options2?.initial;
86
- if (isInitial && cacheEnabled) {
87
- const cached = stateCache.get(searchValue);
88
- if (cached) {
89
- currentSearchValueRef.current = searchValue;
90
- restoreFromCache(cached);
91
- return;
92
- }
93
- }
94
- if (isInitial) {
95
- currentSearchValueRef.current = searchValue;
96
- }
97
- (isInitial ? setLoading : setLoadingMore)(true);
98
- try {
99
- if (!lazy) {
100
- const result = await loadOptionsProp(searchValue);
101
- const resolved = Array.isArray(result) ? result : await result;
102
- (isInitial ? setOptions : appendOptions)(resolved);
103
- } else {
104
- let result;
105
- if (lazy === "page") {
106
- const page = isInitial ? 0 : previousPage;
107
- result = await loadOptionsProp(searchValue, page, pageSize);
108
- setPreviousPage(isInitial ? 1 : page + 1);
109
- } else if (lazy === "offset") {
110
- const offset = isInitial ? 0 : previousOffset;
111
- result = await loadOptionsProp(searchValue, offset, limit);
112
- setPreviousOffset(isInitial ? limit : offset + limit);
113
- } else if (lazy === "group") {
114
- const group = isInitial ? null : previousGroup;
115
- result = await loadOptionsProp(searchValue, group);
116
- setPreviousGroup(
117
- result.options[result.options.length - 1]?.group ?? null
118
- );
119
- } else {
120
- throw new Error(
121
- `Invalid lazy mode: ${lazy}. Expected 'page', 'offset', or 'group'.`
122
- );
123
- }
124
- setHasMoreToLoad(result.hasMore ?? false);
125
- (isInitial ? setOptions : appendOptions)(result.options);
126
- }
127
- } finally {
128
- (isInitial ? setLoading : setLoadingMore)(false);
129
- }
130
- },
131
- [
132
- lazy,
133
- pageSize,
134
- limit,
135
- loadOptionsProp,
136
- appendOptions,
137
- previousPage,
138
- previousOffset,
139
- previousGroup,
140
- cacheEnabled,
141
- stateCache,
142
- restoreFromCache
143
- ]
144
- );
145
- const loadMore = useCallback(
146
- async (searchValue) => {
147
- await loadOptions(searchValue, { initial: false });
148
- },
149
- [loadOptions]
150
- );
151
- const reset = useCallback(() => {
152
- setOptions([]);
153
- setHasMoreToLoad(false);
154
- setPreviousGroup(null);
155
- setPreviousPage(0);
156
- setPreviousOffset(0);
157
- setLoading(false);
158
- setLoadingMore(false);
159
- }, []);
160
- const clearCache = useCallback(() => {
161
- setStateCache(/* @__PURE__ */ new Map());
162
- }, []);
163
- return {
164
- options,
165
- loading,
166
- loadingMore,
167
- hasMore: hasMoreToLoad,
168
- loadOptions,
169
- loadMore,
170
- reset,
171
- clearCache
172
- };
173
- }
174
-
175
- const empty = "_empty_4c4yl_6";
176
- const scroller = "_scroller_4c4yl_20";
177
- const styles$3 = {
178
- "select-field-list": "_select-field-list_4c4yl_2",
179
- empty: empty,
180
- "load-more": "_load-more_4c4yl_13",
181
- scroller: scroller};
182
-
183
- const highlighted = "_highlighted_15431_26";
184
- const disabled = "_disabled_15431_29";
185
- const single = "_single_15431_33";
186
- const selected = "_selected_15431_33";
187
- const checkbox = "_checkbox_15431_36";
188
- const checked = "_checked_15431_40";
189
- const unchecked = "_unchecked_15431_43";
190
- const indeterminate = "_indeterminate_15431_46";
191
- const styles$2 = {
192
- "select-field-list-item": "_select-field-list-item_15431_2",
193
- highlighted: highlighted,
194
- disabled: disabled,
195
- single: single,
196
- selected: selected,
197
- checkbox: checkbox,
198
- checked: checked,
199
- unchecked: unchecked,
200
- indeterminate: indeterminate
201
- };
202
-
203
- const SelectFieldListItem = ({
204
- item,
205
- index,
206
- highlighted,
207
- disabled,
208
- getItemProps,
209
- selectionType,
210
- checked
211
- }) => {
212
- const checkbox = useMemo(() => {
213
- if (checked === "indeterminate")
214
- return {
215
- icon: SvgIndeterminateCheckBox,
216
- class: styles$2["indeterminate"]
217
- };
218
- if (checked) return { icon: SvgCheckBox, class: styles$2["checked"] };
219
- return { icon: SvgCheckBoxOutlineBlank, class: styles$2["unchecked"] };
220
- }, [checked]);
221
- return /* @__PURE__ */ jsxs(
222
- "li",
223
- {
224
- ...getItemProps({
225
- item,
226
- index,
227
- className: cx(styles$2["select-field-list-item"], {
228
- [styles$2.highlighted]: highlighted,
229
- [styles$2.selected]: checked,
230
- [styles$2.disabled]: disabled,
231
- [styles$2.single]: selectionType === "single",
232
- [styles$2.multiple]: selectionType === "multiple"
233
- })
234
- }),
235
- children: [
236
- selectionType === "multiple" && /* @__PURE__ */ jsx("div", { "aria-hidden": true, children: /* @__PURE__ */ jsx(
237
- Icon,
238
- {
239
- size: "large",
240
- svg: checkbox.icon,
241
- className: cx(styles$2["checkbox"], checkbox.class)
242
- }
243
- ) }),
244
- /* @__PURE__ */ jsxs(Flex, { grow: 1, shrink: 1, direction: "column", gap: "1", children: [
245
- /* @__PURE__ */ jsx(Text, { size: "medium", children: item.original.content?.title ?? item.original.label }),
246
- item.original.content?.description && /* @__PURE__ */ jsx(Text, { size: "small", children: item.original.content?.description })
247
- ] }),
248
- selectionType === "single" && checked && /* @__PURE__ */ jsx(
249
- Icon,
250
- {
251
- size: "medium",
252
- svg: SvgCheck,
253
- className: cx(styles$2["checkbox"], styles$2["checked"])
254
- }
255
- )
256
- ]
257
- },
258
- item.id
259
- );
260
- };
261
-
262
- const InView = ({
263
- children,
264
- onVisibilityChange,
265
- rootMargin
266
- }) => {
267
- const { ref } = useIntersectionObserver({
268
- onChange: (isIntersecting) => {
269
- onVisibilityChange?.(isIntersecting);
270
- },
271
- rootMargin
272
- });
273
- return /* @__PURE__ */ jsx("div", { ref, children });
274
- };
275
-
276
- const SelectFieldList = ({
277
- isOpen,
278
- items,
279
- getMenuProps,
280
- getItemProps,
281
- highlightedIndex,
282
- selectedOption,
283
- hasMore,
284
- onLoadMore,
285
- loading,
286
- loadingMore,
287
- disableAutoLoadMore,
288
- disabled,
289
- className,
290
- style
291
- }) => {
292
- const handleLoaderVisibilityChange = (visible) => {
293
- if (visible && !disableAutoLoadMore) {
294
- onLoadMore();
295
- }
296
- };
297
- return /* @__PURE__ */ jsxs(
298
- "div",
299
- {
300
- ...getMenuProps({
301
- className: cx(styles$3["scroller"], className),
302
- style
303
- }),
304
- children: [
305
- /* @__PURE__ */ jsx("ul", { className: cx(styles$3["select-field-list"]), children: isOpen && /* @__PURE__ */ jsx(Fragment, { children: loading ? /* @__PURE__ */ jsx("div", { className: styles$3["empty"], children: /* @__PURE__ */ jsx(Spinner, { size: "medium" }) }) : items.length > 0 ? items.map((item, index) => /* @__PURE__ */ jsx(
306
- SelectFieldListItem,
307
- {
308
- item,
309
- index,
310
- getItemProps,
311
- selectionType: "single",
312
- checked: selectedOption?.id === item.original.id,
313
- highlighted: highlightedIndex === index,
314
- disabled: (disabled || item.disabled) ?? false
315
- },
316
- item.id
317
- )) : /* @__PURE__ */ jsx("div", { className: styles$3["empty"], children: /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "No match found" }) }) }) }),
318
- loadingMore ? /* @__PURE__ */ jsxs("div", { className: styles$3["load-more"], children: [
319
- /* @__PURE__ */ jsx(Spinner, { size: "small" }),
320
- /* @__PURE__ */ jsx(SrOnly, { children: "Loading more..." })
321
- ] }) : hasMore && !loading ? /* @__PURE__ */ jsx(
322
- InView,
323
- {
324
- onVisibilityChange: handleLoaderVisibilityChange,
325
- rootMargin: "0px 0px -100px 0px",
326
- children: /* @__PURE__ */ jsx("div", { className: styles$3["load-more"], children: /* @__PURE__ */ jsx(Button, { appearance: "secondary", size: "small", onClick: onLoadMore, children: "Load more" }) })
327
- }
328
- ) : null
329
- ]
330
- }
331
- );
332
- };
333
- SelectFieldList.displayName = "SelectFieldList";
334
-
335
- const SelectFieldInput = ({
336
- placeholder,
337
- size,
338
- disableClearButton,
339
- disableToggleButton,
340
- disabled,
341
- readOnly,
342
- error,
343
- onClear,
344
- id,
345
- inputWrapperRef,
346
- htmlInputWrapperProps,
347
- inputProps,
348
- toggleButtonProps,
349
- prefix,
350
- suffix
351
- }) => {
352
- const inputWrapperClassNames = cx(styles$4["input-wrapper"], {
353
- [styles$4["small"]]: size === "small",
354
- [styles$4["large"]]: size === "large",
355
- [styles$4["no-clear-button"]]: disableClearButton,
356
- [styles$4["disabled"]]: disabled || readOnly
357
- });
358
- return /* @__PURE__ */ jsxs(
359
- "div",
360
- {
361
- ref: inputWrapperRef,
362
- ...htmlInputWrapperProps,
363
- className: cx(inputWrapperClassNames, htmlInputWrapperProps?.className),
364
- children: [
365
- prefix ? /* @__PURE__ */ jsx("div", { className: styles$4["prefix"], children: prefix }) : null,
366
- /* @__PURE__ */ jsx(
367
- "input",
368
- {
369
- id,
370
- placeholder,
371
- disabled,
372
- readOnly,
373
- ...inputProps,
374
- className: cx(styles$4["input"], inputProps?.className, {
375
- [styles$4["error"]]: error
376
- })
377
- }
378
- ),
379
- suffix ? /* @__PURE__ */ jsx("div", { className: styles$4["suffix"], children: suffix }) : null,
380
- /* @__PURE__ */ jsxs("div", { className: styles$4["buttons-wrapper"], children: [
381
- disableClearButton ? null : /* @__PURE__ */ jsx("div", { className: styles$4["close-button-wrapper"], children: /* @__PURE__ */ jsx(
382
- Button,
383
- {
384
- icon: SvgClose,
385
- "aria-label": "clear selection",
386
- appearance: "ghost",
387
- size: "small",
388
- className: styles$4["close-button"],
389
- onClick: () => {
390
- onClear?.();
391
- }
392
- }
393
- ) }),
394
- disableToggleButton ? null : /* @__PURE__ */ jsx("div", { className: styles$4["toggle-button-wrapper"], children: /* @__PURE__ */ jsx(
395
- Button,
396
- {
397
- icon: SvgChevronRight,
398
- "aria-label": "toggle menu",
399
- appearance: "ghost",
400
- size: "small",
401
- disabled,
402
- ...toggleButtonProps,
403
- className: cx(
404
- styles$4["toggle-button"],
405
- toggleButtonProps?.className
406
- )
407
- }
408
- ) })
409
- ] })
410
- ]
411
- }
412
- );
413
- };
414
- SelectFieldInput.displayName = "SelectFieldInput";
415
-
416
- const SelectFieldLabel = ({
417
- label,
418
- getLabelProps,
419
- required,
420
- moreInfo,
421
- openMoreInfo
422
- }) => {
423
- return /* @__PURE__ */ jsx(
424
- FieldLabel,
425
- {
426
- ...getLabelProps(),
427
- required,
428
- moreInfo,
429
- openMoreInfo,
430
- children: label
431
- }
432
- );
433
- };
434
-
435
- function useDebouncedCallback(callback, delay = 300) {
436
- const timeoutRef = useRef(null);
437
- const callbackRef = useRef(callback);
438
- useEffect(() => {
439
- callbackRef.current = callback;
440
- }, [callback]);
441
- useEffect(() => {
442
- return () => {
443
- if (timeoutRef.current) {
444
- clearTimeout(timeoutRef.current);
445
- timeoutRef.current = null;
446
- }
447
- };
448
- }, [delay]);
449
- const debouncedCallback = useCallback(
450
- ((...args) => {
451
- if (timeoutRef.current) {
452
- clearTimeout(timeoutRef.current);
453
- }
454
- timeoutRef.current = setTimeout(() => {
455
- callbackRef.current(...args);
456
- timeoutRef.current = null;
457
- }, delay);
458
- }),
459
- [delay]
460
- );
461
- return debouncedCallback;
462
- }
463
-
464
- const useCombo = ({
465
- options,
466
- pinnedOptions,
467
- selectAll,
468
- selectedOption,
469
- onSelectedOptionChange,
470
- onInputValueChange,
471
- onIsOpenChange,
472
- displayAs = "popover",
473
- disableHighlightOnOpen = false,
474
- disabled
475
- }) => {
476
- const downshiftItems = useMemo(() => {
477
- const items = options.map(
478
- mapOptionToDownshiftItem
479
- );
480
- if (selectAll) {
481
- items.unshift({
482
- id: "select-all",
483
- type: "select-all",
484
- original: { id: "select-all", label: selectAll.label ?? "Select All" }
485
- });
486
- }
487
- return items;
488
- }, [options, pinnedOptions, selectAll]);
489
- const selectedDownshiftItem = useMemo(() => {
490
- return selectedOption ? mapOptionToDownshiftItem(selectedOption) : null;
491
- }, [selectedOption]);
492
- const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();
493
- const {
494
- isOpen,
495
- highlightedIndex,
496
- getToggleButtonProps,
497
- getLabelProps,
498
- getMenuProps,
499
- getInputProps,
500
- getItemProps,
501
- inputValue,
502
- closeMenu,
503
- openMenu,
504
- setHighlightedIndex
505
- } = useCombobox({
506
- isItemDisabled: (item, _index) => {
507
- if (!item) {
508
- return false;
509
- }
510
- return (disabled || item.disabled) ?? false;
511
- },
512
- environment,
513
- selectedItem: selectedDownshiftItem,
514
- onSelectedItemChange: ({
515
- selectedItem: si
516
- }) => {
517
- if (si && si.type === "option") {
518
- onSelectedOptionChange(si.original);
519
- } else {
520
- onSelectedOptionChange(null);
521
- }
522
- },
523
- onInputValueChange,
524
- onIsOpenChange: (changes) => {
525
- onIsOpenChange?.(changes);
526
- if (changes.isOpen && !disableHighlightOnOpen) {
527
- const selectedItemIndex = downshiftItems.findIndex(
528
- (item) => item.id === selectedDownshiftItem?.id
529
- );
530
- setHighlightedIndex(selectedItemIndex);
531
- }
532
- },
533
- items: downshiftItems,
534
- itemToString(item) {
535
- return item?.original.label ?? "";
536
- },
537
- stateReducer: (state, actionAndChanges) => stateReducer(state, actionAndChanges, displayAs)
538
- });
539
- return {
540
- inputValue,
541
- wrapperDivRef,
542
- getToggleButtonProps,
543
- getLabelProps,
544
- getMenuProps,
545
- getInputProps,
546
- getItemProps,
547
- highlightedIndex,
548
- isOpen,
549
- downshiftItems,
550
- closeMenu,
551
- openMenu
552
- };
553
- };
554
- function mapOptionToDownshiftItem(option) {
555
- return {
556
- id: option.id,
557
- type: "option",
558
- disabled: option.disabled ?? false,
559
- original: option
560
- };
561
- }
562
- function stateReducer(state, actionAndChanges, displayAs) {
563
- const { type, changes } = actionAndChanges;
564
- switch (type) {
565
- case useCombobox.stateChangeTypes.InputBlur:
566
- if (displayAs === "dialog" && state.isOpen) {
567
- return {
568
- ...changes,
569
- isOpen: state.isOpen
570
- };
571
- }
572
- return {
573
- ...changes,
574
- inputValue: state.selectedItem?.original.label ?? state.inputValue
575
- };
576
- case useCombobox.stateChangeTypes.InputKeyDownEscape:
577
- case useCombobox.stateChangeTypes.FunctionCloseMenu:
578
- return {
579
- ...changes,
580
- inputValue: state.selectedItem?.original.label ?? state.inputValue
581
- };
582
- case useCombobox.stateChangeTypes.InputClick:
583
- if (displayAs === "dialog" && state.isOpen) {
584
- return {
585
- ...changes,
586
- isOpen: state.isOpen
587
- };
588
- }
589
- return changes;
590
- case useCombobox.stateChangeTypes.InputKeyDownEnter:
591
- case useCombobox.stateChangeTypes.ItemClick:
592
- return changes;
593
- default:
594
- return changes;
595
- }
596
- }
597
-
598
- const styles$1 = {
599
- "field-popover": "_field-popover_aeggh_2"
600
- };
601
-
602
- const FieldPopover = (props) => {
603
- const ref = useRef(null);
604
- const { id, children, referenceElement, open } = props;
605
- useEffect(() => {
606
- if (open) {
607
- ref.current?.showPopover();
608
- } else {
609
- ref.current?.hidePopover();
610
- }
611
- }, [open]);
612
- const updatePosition = useCallback(async () => {
613
- if (!ref.current || !referenceElement.current) return;
614
- const position = await computePosition(
615
- referenceElement.current,
616
- ref.current,
617
- {
618
- placement: "bottom-start",
619
- middleware: [
620
- offset(8),
621
- autoPlacement({
622
- allowedPlacements: ["bottom-start", "top-start"],
623
- padding: 8
624
- }),
625
- size({
626
- padding: 8,
627
- apply({ rects, elements, availableHeight }) {
628
- Object.assign(elements.floating.style, {
629
- width: `${rects.reference.width}px`,
630
- maxHeight: `${Math.max(0, availableHeight)}px`
631
- });
632
- }
633
- })
634
- ]
635
- }
636
- );
637
- ref.current.style.left = `${position.x}px`;
638
- ref.current.style.top = `${position.y}px`;
639
- }, [ref, referenceElement]);
640
- useEffect(() => {
641
- if (!ref.current || !referenceElement.current || !open) return;
642
- const cleanup = autoUpdate(
643
- referenceElement.current,
644
- ref.current,
645
- updatePosition
646
- );
647
- return () => {
648
- cleanup();
649
- };
650
- }, [referenceElement, ref, updatePosition, open]);
651
- return /* @__PURE__ */ jsx("div", { ref, id, className: styles$1["field-popover"], popover: "manual", children });
652
- };
653
-
654
- function detectCoarsePointer() {
655
- if (typeof window === "undefined" || !window.matchMedia) {
656
- return false;
657
- }
658
- return window.matchMedia("(pointer: coarse)").matches;
659
- }
660
- function useAdaptiveView() {
661
- const breakpoint = useBreakpoint();
662
- const [hasCoarsePointer, setHasCoarsePointer] = useState(detectCoarsePointer);
663
- useEffect(() => {
664
- setHasCoarsePointer(detectCoarsePointer());
665
- const mediaQuery = window.matchMedia("(pointer: coarse)");
666
- const handleChange = (e) => {
667
- setHasCoarsePointer(e.matches);
668
- };
669
- mediaQuery.addEventListener("change", handleChange);
670
- return () => mediaQuery.removeEventListener("change", handleChange);
671
- }, []);
672
- const isSmallScreen = !breakpoint?.md;
673
- const isMobile = isSmallScreen && hasCoarsePointer;
674
- return {
675
- view: isMobile ? "mobile" : "desktop",
676
- isMobile,
677
- isDesktop: !isMobile
678
- };
679
- }
680
-
681
- const header = "_header_dcw9s_33";
682
- const field = "_field_dcw9s_2";
683
- const content = "_content_dcw9s_44";
684
- const styles = {
685
- "field-dialog": "_field-dialog_dcw9s_2",
686
- "field-dialog-visual-viewport-height": "_field-dialog-visual-viewport-height_dcw9s_16",
687
- header: header,
688
- field: field,
689
- content: content
690
- };
691
-
692
- const FieldDialog = ({
693
- id,
694
- isOpen,
695
- onClose,
696
- field,
697
- children,
698
- title
699
- }) => {
700
- const elRef = useRef(null);
701
- const visualViewportHeightRef = useRef(null);
702
- useDialogScrollLock({
703
- open: isOpen,
704
- id,
705
- enableScrollChaining: false,
706
- elementRef: elRef
707
- });
708
- useEffect(() => {
709
- if (isOpen) {
710
- elRef.current?.showModal();
711
- } else {
712
- elRef.current?.close();
713
- }
714
- }, [isOpen]);
715
- useEffect(() => {
716
- if (isOpen) {
717
- const handleResize = () => {
718
- if (!visualViewportHeightRef.current) return;
719
- visualViewportHeightRef.current.style.height = `${window.visualViewport?.height ?? 0}px`;
720
- visualViewportHeightRef.current.style.maxHeight = `${window.visualViewport?.height ?? 0}px`;
721
- };
722
- window.visualViewport?.addEventListener("resize", handleResize);
723
- return () => {
724
- window.visualViewport?.removeEventListener("resize", handleResize);
725
- };
726
- }
727
- }, [isOpen]);
728
- return /* @__PURE__ */ jsx(
729
- "dialog",
730
- {
731
- ref: elRef,
732
- id,
733
- "data-anv": "field-dialog",
734
- className: styles["field-dialog"],
735
- onKeyDown: (e) => {
736
- if (e.code === "Escape") {
737
- e.preventDefault();
738
- onClose();
739
- }
740
- },
741
- children: /* @__PURE__ */ jsxs(
742
- "div",
743
- {
744
- className: styles["field-dialog-visual-viewport-height"],
745
- ref: visualViewportHeightRef,
746
- children: [
747
- /* @__PURE__ */ jsxs(Flex, { direction: "row", className: styles["header"], children: [
748
- /* @__PURE__ */ jsx(Text, { variant: "headline", el: "h1", children: title }),
749
- /* @__PURE__ */ jsx("span", { className: styles["close-container"], children: /* @__PURE__ */ jsx(DialogContext.Provider, { value: { close: onClose }, children: /* @__PURE__ */ jsx(
750
- DialogCancelButton,
751
- {
752
- className: styles["close-button"],
753
- size: "small",
754
- appearance: "ghost",
755
- "aria-label": "Close dialog",
756
- icon: SvgClose
757
- }
758
- ) }) })
759
- ] }),
760
- /* @__PURE__ */ jsx(Flex, { direction: "column", className: styles["field"], children: field }),
761
- /* @__PURE__ */ jsx(Flex, { direction: "column", className: styles["content"], children })
762
- ]
763
- }
764
- )
765
- }
766
- );
767
- };
768
-
769
- const SelectField = forwardRef(
770
- (propsWithLayout, ref) => {
771
- const { layoutStyles, componentProps } = useLayoutPropsUtil(propsWithLayout);
772
- const [initialLoadPerformed, setInitialLoadPerformed] = useState(false);
773
- const inputWrapperRef = useRef(null);
774
- const {
775
- id: idProp,
776
- value: selectedOption,
777
- initialLoad: initialLoadProp = "auto",
778
- displayMenuAs: displayMenuAsProp = "auto",
779
- lazy,
780
- loadOptions: loadOptionsProp,
781
- label,
782
- placeholder,
783
- disableClearButton: disableClearButtonProp = false,
784
- debounceMs = 200,
785
- onSelectedOptionChange,
786
- cache,
787
- size,
788
- error,
789
- hint,
790
- description,
791
- errorAriaLive: errorAriaLiveProp = "assertive",
792
- required,
793
- disabled,
794
- readOnly,
795
- prefix,
796
- suffix
797
- } = componentProps;
798
- const autoId = useId();
799
- const id = idProp ?? autoId;
800
- const helperUid = useId();
801
- const [hasFocus, setHasFocus] = useState(false);
802
- const handleFocus = () => {
803
- setHasFocus(true);
804
- };
805
- const handleBlur = () => {
806
- setHasFocus(false);
807
- };
808
- const errorMessage = typeof error !== "boolean" ? error : void 0;
809
- const hasHelperText = hint || errorMessage || description;
810
- const isDisabledOrReadOnly = (disabled || readOnly) ?? false;
811
- const { isMobile } = useAdaptiveView();
812
- const displayAs = displayMenuAsProp === "auto" ? isMobile ? "dialog" : "popover" : displayMenuAsProp;
813
- const initialLoad = initialLoadProp === "auto" ? "immediate" : initialLoadProp;
814
- const pageSize = lazy === "page" && "lazyOptions" in componentProps ? componentProps.lazyOptions?.pageSize ?? DEFAULT_PAGE_SIZE : DEFAULT_PAGE_SIZE;
815
- const limit = lazy === "offset" && "lazyOptions" in componentProps ? componentProps.lazyOptions?.limit ?? DEFAULT_PAGE_SIZE : DEFAULT_PAGE_SIZE;
816
- const loadingHookConfig = useMemo(() => {
817
- const cacheConfig = {
818
- enabled: cache?.enabled,
819
- maxSize: cache?.maxSize
820
- };
821
- if (lazy === "page")
822
- return {
823
- lazy: "page",
824
- loadOptions: loadOptionsProp,
825
- pageSize,
826
- cache: cacheConfig
827
- };
828
- if (lazy === "offset")
829
- return {
830
- lazy: "offset",
831
- loadOptions: loadOptionsProp,
832
- limit,
833
- cache: cacheConfig
834
- };
835
- if (lazy === "group")
836
- return {
837
- lazy: "group",
838
- loadOptions: loadOptionsProp,
839
- cache: cacheConfig
840
- };
841
- return {
842
- lazy: false,
843
- loadOptions: loadOptionsProp,
844
- cache: cacheConfig
845
- };
846
- }, [
847
- lazy,
848
- loadOptionsProp,
849
- pageSize,
850
- limit,
851
- cache?.enabled,
852
- cache?.maxSize
853
- ]);
854
- const {
855
- options,
856
- loading,
857
- loadingMore,
858
- hasMore,
859
- loadOptions,
860
- loadMore,
861
- clearCache
862
- } = useSelectFieldLoading(loadingHookConfig);
863
- useImperativeHandle(ref, () => ({ clearCache }), [clearCache]);
864
- const debouncedOptionLoader = useDebouncedCallback((inputValue2) => {
865
- loadOptions(selectedOption?.label === inputValue2 ? "" : inputValue2, {
866
- initial: true
867
- });
868
- }, debounceMs);
869
- const adjustInputValueForSelectedOption = useCallback(
870
- (inputValue2) => {
871
- if (selectedOption?.label === inputValue2) {
872
- return "";
873
- } else {
874
- return inputValue2;
875
- }
876
- },
877
- [selectedOption?.label]
878
- );
879
- const {
880
- isOpen,
881
- getToggleButtonProps,
882
- getLabelProps,
883
- getMenuProps,
884
- getInputProps,
885
- wrapperDivRef,
886
- highlightedIndex,
887
- getItemProps,
888
- inputValue,
889
- downshiftItems,
890
- closeMenu
891
- } = useCombo({
892
- displayAs,
893
- disabled: isDisabledOrReadOnly,
894
- options,
895
- pinnedOptions: [],
896
- selectedOption,
897
- onSelectedOptionChange: (selectedOption2) => {
898
- onSelectedOptionChange(selectedOption2);
899
- },
900
- async onIsOpenChange(changes) {
901
- if (initialLoad === "open" && !initialLoadPerformed && changes.isOpen) {
902
- await loadOptions(adjustInputValueForSelectedOption(inputValue), {
903
- initial: true
904
- });
905
- setInitialLoadPerformed(true);
906
- }
907
- },
908
- onInputValueChange: ({ inputValue: iv }) => {
909
- debouncedOptionLoader(iv);
910
- }
911
- });
912
- useEffect(() => {
913
- const performInitialLoad = async () => {
914
- if (initialLoad === "immediate" && !initialLoadPerformed) {
915
- await loadOptions(adjustInputValueForSelectedOption(inputValue), {
916
- initial: true
917
- });
918
- setInitialLoadPerformed(true);
919
- }
920
- };
921
- performInitialLoad();
922
- }, [
923
- loadOptions,
924
- initialLoadPerformed,
925
- initialLoad,
926
- inputValue,
927
- adjustInputValueForSelectedOption
928
- ]);
929
- const handleLoadMore = async () => {
930
- await loadMore(adjustInputValueForSelectedOption(inputValue));
931
- };
932
- const disableClearButton = disableClearButtonProp || !selectedOption || isDisabledOrReadOnly;
933
- if (displayAs === "dialog") {
934
- return /* @__PURE__ */ jsxs(
935
- "div",
936
- {
937
- className: styles$4["search-field"],
938
- style: { ...layoutStyles },
939
- ref: wrapperDivRef,
940
- children: [
941
- /* @__PURE__ */ jsx(
942
- SelectFieldLabel,
943
- {
944
- label,
945
- getLabelProps,
946
- required
947
- }
948
- ),
949
- /* @__PURE__ */ jsx(
950
- SelectFieldInput,
951
- {
952
- disabled,
953
- readOnly,
954
- disableToggleButton: false,
955
- placeholder,
956
- disableClearButton,
957
- toggleButtonProps: getToggleButtonProps(),
958
- onClear: () => onSelectedOptionChange(null),
959
- id: `${id}-input`,
960
- inputProps: getInputProps({
961
- "aria-describedby": hasHelperText ? helperUid : void 0,
962
- "aria-invalid": error ? true : void 0,
963
- onFocus: handleFocus,
964
- onBlur: handleBlur
965
- }),
966
- size,
967
- error: !!error,
968
- prefix,
969
- suffix
970
- }
971
- ),
972
- hasHelperText ? /* @__PURE__ */ jsx(
973
- FieldMessage,
974
- {
975
- id: helperUid,
976
- hint,
977
- errorMessage,
978
- errorAriaLive: isOpen || hasFocus ? errorAriaLiveProp : "off",
979
- description
980
- }
981
- ) : null,
982
- /* @__PURE__ */ jsx(
983
- FieldDialog,
984
- {
985
- id: `${id}-dialog`,
986
- isOpen,
987
- onClose: closeMenu,
988
- title: label,
989
- field: /* @__PURE__ */ jsx(
990
- SelectFieldInput,
991
- {
992
- disabled,
993
- readOnly,
994
- inputProps: getInputProps(),
995
- disableToggleButton: true,
996
- placeholder,
997
- disableClearButton,
998
- onClear: () => onSelectedOptionChange(null),
999
- id: `${id}-dialog-input`,
1000
- inputWrapperRef,
1001
- size: "medium",
1002
- error: !!error,
1003
- prefix,
1004
- suffix
1005
- }
1006
- ),
1007
- children: /* @__PURE__ */ jsx(
1008
- SelectFieldList,
1009
- {
1010
- isOpen: true,
1011
- items: downshiftItems,
1012
- getMenuProps,
1013
- getItemProps,
1014
- highlightedIndex,
1015
- selectedOption,
1016
- hasMore,
1017
- onLoadMore: handleLoadMore,
1018
- loading,
1019
- loadingMore,
1020
- disabled: isDisabledOrReadOnly,
1021
- style: {
1022
- paddingInline: 24,
1023
- paddingBlockEnd: 24
1024
- }
1025
- }
1026
- )
1027
- }
1028
- )
1029
- ]
1030
- }
1031
- );
1032
- }
1033
- return /* @__PURE__ */ jsxs("div", { className: styles$4["search-field"], style: { ...layoutStyles }, children: [
1034
- /* @__PURE__ */ jsx(
1035
- SelectFieldLabel,
1036
- {
1037
- label,
1038
- getLabelProps,
1039
- required
1040
- }
1041
- ),
1042
- /* @__PURE__ */ jsx(
1043
- SelectFieldInput,
1044
- {
1045
- disabled,
1046
- readOnly,
1047
- inputProps: getInputProps({
1048
- popovertarget: `${id}-popover`,
1049
- "aria-describedby": hasHelperText ? helperUid : void 0,
1050
- "aria-invalid": error ? true : void 0,
1051
- onFocus: handleFocus,
1052
- onBlur: handleBlur
1053
- }),
1054
- toggleButtonProps: getToggleButtonProps(),
1055
- disableToggleButton: false,
1056
- placeholder,
1057
- disableClearButton,
1058
- onClear: () => onSelectedOptionChange(null),
1059
- id: `${id}-input`,
1060
- popoverTarget: `${id}-popover`,
1061
- inputWrapperRef,
1062
- size,
1063
- error: !!error,
1064
- prefix,
1065
- suffix
1066
- }
1067
- ),
1068
- hasHelperText ? /* @__PURE__ */ jsx(
1069
- FieldMessage,
1070
- {
1071
- id: helperUid,
1072
- hint,
1073
- errorMessage,
1074
- errorAriaLive: isOpen || hasFocus ? errorAriaLiveProp : "off",
1075
- description
1076
- }
1077
- ) : null,
1078
- /* @__PURE__ */ jsx(
1079
- FieldPopover,
1080
- {
1081
- id: `${id}-popover`,
1082
- referenceElement: inputWrapperRef,
1083
- open: isOpen && displayAs === "popover",
1084
- children: /* @__PURE__ */ jsx(
1085
- SelectFieldList,
1086
- {
1087
- isOpen,
1088
- items: downshiftItems,
1089
- getMenuProps,
1090
- getItemProps,
1091
- highlightedIndex,
1092
- selectedOption,
1093
- hasMore,
1094
- onLoadMore: handleLoadMore,
1095
- loading,
1096
- loadingMore,
1097
- disabled: isDisabledOrReadOnly,
1098
- style: {
1099
- padding: 8
1100
- }
1101
- }
1102
- )
1103
- }
1104
- )
1105
- ] });
1106
- }
1107
- );
1108
- SelectField.displayName = "SelectField";
1109
-
1110
- const defaultFilter = (options, searchValue) => {
1111
- return matchSorter(options, searchValue, {
1112
- keys: ["label", "searchText"]
1113
- });
1114
- };
1115
- const SelectFieldSync = (props) => {
1116
- const { options, filter: filterProp = defaultFilter, ...rest } = props;
1117
- const filter = typeof filterProp === "function" ? filterProp : (options2, searchValue) => matchSorter(
1118
- options2,
1119
- searchValue,
1120
- filterProp
1121
- );
1122
- return /* @__PURE__ */ jsx(
1123
- SelectField,
1124
- {
1125
- lazy: false,
1126
- loadOptions: (searchValue) => filter(options, searchValue),
1127
- debounceMs: 0,
1128
- ...rest
1129
- }
1130
- );
1131
- };
1132
-
1133
- export { SelectField as S, SelectFieldSync as a, useAdaptiveView as u };
1134
- //# sourceMappingURL=SelectFieldSync-D4VdOXoY.js.map