@servicetitan/anvil2 1.50.0 → 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 (199) hide show
  1. package/CHANGELOG.md +32 -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-hxGMMb8x.js → Combobox-BTTWNSW1.js} +290 -192
  13. package/dist/Combobox-BTTWNSW1.js.map +1 -0
  14. package/dist/Combobox.js +1 -1
  15. package/dist/{DataTable-DSySFGWC.js → DataTable-hXWouflx.js} +114 -60
  16. package/dist/DataTable-hXWouflx.js.map +1 -0
  17. package/dist/DataTable.css +68 -26
  18. package/dist/{DateField-BT9jJRp5.js → DateField-B8JdMu94.js} +6 -6
  19. package/dist/{DateField-BT9jJRp5.js.map → DateField-B8JdMu94.js.map} +1 -1
  20. package/dist/DateField.js +1 -1
  21. package/dist/{DateFieldRange-ZAic_9mt.js → DateFieldRange-DWAgi_T9.js} +7 -7
  22. package/dist/{DateFieldRange-ZAic_9mt.js.map → DateFieldRange-DWAgi_T9.js.map} +1 -1
  23. package/dist/DateFieldRange.js +1 -1
  24. package/dist/{DateFieldSingle-DAtR8ImE.js → DateFieldSingle-CQ6X-bVX.js} +7 -7
  25. package/dist/{DateFieldSingle-DAtR8ImE.js.map → DateFieldSingle-CQ6X-bVX.js.map} +1 -1
  26. package/dist/DateFieldSingle.js +1 -1
  27. package/dist/{DateFieldYearless-DXO_MPwA.js → DateFieldYearless-D6-NfIHu.js} +4 -4
  28. package/dist/{DateFieldYearless-DXO_MPwA.js.map → DateFieldYearless-D6-NfIHu.js.map} +1 -1
  29. package/dist/DateFieldYearless.js +1 -1
  30. package/dist/{DateFieldYearlessRange-Cg6bbPIi.js → DateFieldYearlessRange-CQM0vibm.js} +4 -4
  31. package/dist/{DateFieldYearlessRange-Cg6bbPIi.js.map → DateFieldYearlessRange-CQM0vibm.js.map} +1 -1
  32. package/dist/DateFieldYearlessRange.js +1 -1
  33. package/dist/{DaysOfTheWeek-9B9d7-hF.js → DaysOfTheWeek-BR-mg77X.js} +3 -3
  34. package/dist/{DaysOfTheWeek-9B9d7-hF.js.map → DaysOfTheWeek-BR-mg77X.js.map} +1 -1
  35. package/dist/DaysOfTheWeek.js +1 -1
  36. package/dist/{Dialog-BwabBKoZ.js → Dialog-Ba2oIATn.js} +8 -8
  37. package/dist/Dialog-Ba2oIATn.js.map +1 -0
  38. package/dist/Dialog.js +2 -2
  39. package/dist/{DialogCancelButton-sTEfx5kf.js → DialogCancelButton-CBHyI0CI.js} +2 -2
  40. package/dist/{DialogCancelButton-sTEfx5kf.js.map → DialogCancelButton-CBHyI0CI.js.map} +1 -1
  41. package/dist/{Drawer-GXeoK-r9.js → Drawer-CWogbC68.js} +7 -7
  42. package/dist/{Drawer-GXeoK-r9.js.map → Drawer-CWogbC68.js.map} +1 -1
  43. package/dist/Drawer.js +1 -1
  44. package/dist/{DrawerContext-Cs3k160L.js → DrawerContext-rJvgnn3O.js} +2 -2
  45. package/dist/{DrawerContext-Cs3k160L.js.map → DrawerContext-rJvgnn3O.js.map} +1 -1
  46. package/dist/FieldDialog-BHgkQOhh.js +519 -0
  47. package/dist/FieldDialog-BHgkQOhh.js.map +1 -0
  48. package/dist/{SelectFieldSync.css → FieldDialog.css} +6 -5
  49. package/dist/{FieldLabel-jqlQ1Ldh.js → FieldLabel-BWOIFXgt.js} +7 -4
  50. package/dist/FieldLabel-BWOIFXgt.js.map +1 -0
  51. package/dist/FieldLabel.js +1 -1
  52. package/dist/{InputMask-CJC9xZHG.js → InputMask-BzY1DJoV.js} +3 -3
  53. package/dist/{InputMask-CJC9xZHG.js.map → InputMask-BzY1DJoV.js.map} +1 -1
  54. package/dist/InputMask.js +1 -1
  55. package/dist/{ListView-D8mfK8Lu.js → ListView-C5OBwbHe.js} +6 -4
  56. package/dist/ListView-C5OBwbHe.js.map +1 -0
  57. package/dist/ListView.js +1 -1
  58. package/dist/{Menu-Cn2JJe1Y.js → Menu-69JwGxYh.js} +2 -2
  59. package/dist/{Menu-Cn2JJe1Y.js.map → Menu-69JwGxYh.js.map} +1 -1
  60. package/dist/Menu.js +1 -1
  61. package/dist/MultiSelectField.d.ts +2 -0
  62. package/dist/MultiSelectField.js +2 -0
  63. package/dist/MultiSelectField.js.map +1 -0
  64. package/dist/MultiSelectFieldSync-B3HNQf7R.js +873 -0
  65. package/dist/MultiSelectFieldSync-B3HNQf7R.js.map +1 -0
  66. package/dist/MultiSelectFieldSync.css +259 -0
  67. package/dist/{NumberField-CjWLnD9X.js → NumberField-CcH25bnO.js} +3 -3
  68. package/dist/{NumberField-CjWLnD9X.js.map → NumberField-CcH25bnO.js.map} +1 -1
  69. package/dist/NumberField.js +1 -1
  70. package/dist/{Page-DEbpjQw0.js → Page-B5HZSjSl.js} +5 -5
  71. package/dist/{Page-DEbpjQw0.js.map → Page-B5HZSjSl.js.map} +1 -1
  72. package/dist/Page.js +1 -1
  73. package/dist/{Pagination-BR8MiRaA.js → Pagination-CkdBaQx6.js} +2 -2
  74. package/dist/{Pagination-BR8MiRaA.js.map → Pagination-CkdBaQx6.js.map} +1 -1
  75. package/dist/Pagination.js +1 -1
  76. package/dist/{Popover-CCXrzBul.js → Popover-D9SmGQTh.js} +6 -5
  77. package/dist/{Popover-CCXrzBul.js.map → Popover-D9SmGQTh.js.map} +1 -1
  78. package/dist/Popover.js +1 -1
  79. package/dist/{ProgressBar-BpKEr6cO.js → ProgressBar-BABkqVmW.js} +2 -2
  80. package/dist/{ProgressBar-BpKEr6cO.js.map → ProgressBar-BABkqVmW.js.map} +1 -1
  81. package/dist/ProgressBar.js +1 -1
  82. package/dist/{Radio-jj0-1dOg.js → Radio-Cds2laHA.js} +2 -2
  83. package/dist/{Radio-jj0-1dOg.js.map → Radio-Cds2laHA.js.map} +1 -1
  84. package/dist/Radio.js +2 -2
  85. package/dist/{RadioGroup-Bxy415eu.js → RadioGroup-COVlUmwy.js} +3 -3
  86. package/dist/{RadioGroup-Bxy415eu.js.map → RadioGroup-COVlUmwy.js.map} +1 -1
  87. package/dist/{SelectCard-CjbsPKZ4.js → SelectCard-C-Kjk5eS.js} +3 -3
  88. package/dist/{SelectCard-CjbsPKZ4.js.map → SelectCard-C-Kjk5eS.js.map} +1 -1
  89. package/dist/SelectCard.js +1 -1
  90. package/dist/SelectField.js +1 -1
  91. package/dist/SelectFieldSync-0CL0RTpg.js +679 -0
  92. package/dist/SelectFieldSync-0CL0RTpg.js.map +1 -0
  93. package/dist/{SelectTrigger-DfVnPiNf.js → SelectTrigger-C1U-PlLz.js} +6 -3
  94. package/dist/SelectTrigger-C1U-PlLz.js.map +1 -0
  95. package/dist/SelectTrigger.js +1 -1
  96. package/dist/{SelectTriggerBase-D8scKtBr.js → SelectTriggerBase-RHD4FTQE.js} +5 -17
  97. package/dist/SelectTriggerBase-RHD4FTQE.js.map +1 -0
  98. package/dist/SelectTriggerBase.css +65 -59
  99. package/dist/SelectTriggerBase.module-B0NFRlQP.js +36 -0
  100. package/dist/SelectTriggerBase.module-B0NFRlQP.js.map +1 -0
  101. package/dist/Table.js +1 -1
  102. package/dist/{TextField-Qv6OqiKQ.js → TextField-BYGSTwkL.js} +2 -2
  103. package/dist/{TextField-Qv6OqiKQ.js.map → TextField-BYGSTwkL.js.map} +1 -1
  104. package/dist/{TextField-DNuEXKyN.js → TextField-BZ3h2mqU.js} +3 -3
  105. package/dist/{TextField-DNuEXKyN.js.map → TextField-BZ3h2mqU.js.map} +1 -1
  106. package/dist/TextField.js +1 -1
  107. package/dist/{Textarea-DdLD4imO.js → Textarea-Cb0Qs2FH.js} +8 -3
  108. package/dist/Textarea-Cb0Qs2FH.js.map +1 -0
  109. package/dist/Textarea.js +1 -1
  110. package/dist/{TimeField-C39hYluo.js → TimeField-DBtJYC7t.js} +4 -4
  111. package/dist/{TimeField-C39hYluo.js.map → TimeField-DBtJYC7t.js.map} +1 -1
  112. package/dist/TimeField.js +1 -1
  113. package/dist/Toast.js +2 -2
  114. package/dist/{Toaster-DJ4tNy-0.js → Toaster-Cerf91qp.js} +2 -2
  115. package/dist/{Toaster-DJ4tNy-0.js.map → Toaster-Cerf91qp.js.map} +1 -1
  116. package/dist/{Toaster-DyDVYq4x.js → Toaster-DDrGllhh.js} +3 -3
  117. package/dist/{Toaster-DyDVYq4x.js.map → Toaster-DDrGllhh.js.map} +1 -1
  118. package/dist/{Toolbar-DEwvVf35.js → Toolbar-K9UFfyvX.js} +326 -171
  119. package/dist/Toolbar-K9UFfyvX.js.map +1 -0
  120. package/dist/Toolbar.css +62 -30
  121. package/dist/Toolbar.js +1 -1
  122. package/dist/{Tooltip-CBy7srE2.js → Tooltip-CkfkiQPz.js} +2 -2
  123. package/dist/{Tooltip-CBy7srE2.js.map → Tooltip-CkfkiQPz.js.map} +1 -1
  124. package/dist/Tooltip.js +1 -1
  125. package/dist/{YearlessDateInputWithPicker-DMGx3gE2.js → YearlessDateInputWithPicker-BIkxKxPi.js} +4 -4
  126. package/dist/{YearlessDateInputWithPicker-DMGx3gE2.js.map → YearlessDateInputWithPicker-BIkxKxPi.js.map} +1 -1
  127. package/dist/beta/components/MultiSelectField/MultiSelectField.d.ts +27 -0
  128. package/dist/beta/components/MultiSelectField/MultiSelectFieldSync.d.ts +63 -0
  129. package/dist/beta/components/MultiSelectField/index.d.ts +3 -0
  130. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldInput.d.ts +79 -0
  131. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldList.d.ts +26 -0
  132. package/dist/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +44 -0
  133. package/dist/beta/components/MultiSelectField/stories/MultiSelectField.stories.data.d.ts +19 -0
  134. package/dist/beta/components/MultiSelectField/types.d.ts +311 -0
  135. package/dist/beta/components/SelectField/internal/FieldDialog/FieldDialog.d.ts +3 -1
  136. package/dist/beta/components/SelectField/internal/FieldPopover/FieldPopover.d.ts +1 -0
  137. package/dist/beta/components/SelectField/internal/SelectFieldInput.d.ts +3 -1
  138. package/dist/beta/components/SelectField/internal/SelectFieldLabel.d.ts +11 -3
  139. package/dist/beta/components/SelectField/internal/SelectFieldListItem.d.ts +2 -1
  140. package/dist/beta/components/SelectField/internal/useCombo.d.ts +1 -0
  141. package/dist/beta/components/SelectField/types.d.ts +19 -1
  142. package/dist/beta/components/Table/DataTable/internal/cells/DataTableHeaderCell.d.ts +9 -1
  143. package/dist/beta/components/Table/DataTable/stories/DataTable.story-data.d.ts +1 -0
  144. package/dist/beta/components/Table/internal/ResizeHandle.d.ts +5 -2
  145. package/dist/beta/components/Table/internal/getCommonPinningStyles.d.ts +2 -1
  146. package/dist/beta/components/Toolbar/Filters/internal/utils/filter-state.d.ts +28 -0
  147. package/dist/beta/components/index.d.ts +1 -0
  148. package/dist/beta.js +7 -5
  149. package/dist/beta.js.map +1 -1
  150. package/dist/components/Button/Button.figma.d.ts +1 -0
  151. package/dist/components/Combobox/ComboboxTypes.d.ts +1 -1
  152. package/dist/components/Combobox/internal/ComboboxLegacy/ComboboxLegacyTrigger.d.ts +2 -2
  153. package/dist/components/Combobox/internal/ComboboxLegacy/ComboboxLegacyUtils.d.ts +0 -36
  154. package/dist/components/Combobox/internal/ComboboxUtils.d.ts +0 -57
  155. package/dist/components/FieldLabel/FieldLabel.d.ts +5 -1
  156. package/dist/components/FieldLabel/internal/FieldLabelMoreInfoIcon.d.ts +3 -1
  157. package/dist/components/Icon/Icons.figma.d.ts +11 -0
  158. package/dist/components/ListView/ListView.d.ts +2 -9
  159. package/dist/components/ListView/internal/types.d.ts +12 -0
  160. package/dist/components/SelectTrigger/SelectTrigger.d.ts +1 -1
  161. package/dist/components/Switch/Switch.figma.d.ts +1 -0
  162. package/dist/components/Textarea/Textarea.d.ts +1 -1
  163. package/dist/index.js +34 -34
  164. package/dist/internal/components/Label/Label.d.ts +13 -3
  165. package/dist/internal/hooks/index.d.ts +1 -0
  166. package/dist/internal/hooks/useDownshiftEnvironment/index.d.ts +1 -0
  167. package/dist/internal/hooks/useDownshiftEnvironment/useDownshiftEnvironment.d.ts +36 -0
  168. package/dist/internal/hooks/useOnClickOutside/useOnClickOutside.d.ts +8 -7
  169. package/dist/{match-sorter.esm-CtBw0MrM.js → match-sorter.esm-NrKOPPde.js} +16 -3
  170. package/dist/match-sorter.esm-NrKOPPde.js.map +1 -0
  171. package/dist/types/props.d.ts +5 -0
  172. package/dist/{useInitialFocus-BpmW7pDB.js → useInitialFocus-D_ESGka7.js} +3 -3
  173. package/dist/{useInitialFocus-BpmW7pDB.js.map → useInitialFocus-D_ESGka7.js.map} +1 -1
  174. package/dist/useOnClickOutside-Zw5vzxSq.js +71 -0
  175. package/dist/useOnClickOutside-Zw5vzxSq.js.map +1 -0
  176. package/dist/useOpenCloseTransitionStates-CiTYrLGi.js +68 -0
  177. package/dist/useOpenCloseTransitionStates-CiTYrLGi.js.map +1 -0
  178. package/dist/{usePopoverSupport-CCSCHnit.js → usePopoverSupport-CldZmxFl.js} +2 -2
  179. package/dist/{usePopoverSupport-CCSCHnit.js.map → usePopoverSupport-CldZmxFl.js.map} +1 -1
  180. package/dist/{utils-Bkbn9cyk.js → utils-u8cyv323.js} +2 -2
  181. package/dist/{utils-Bkbn9cyk.js.map → utils-u8cyv323.js.map} +1 -1
  182. package/package.json +4 -3
  183. package/dist/Checkbox-DbBeuNdW.js.map +0 -1
  184. package/dist/Combobox-hxGMMb8x.js.map +0 -1
  185. package/dist/DataTable-DSySFGWC.js.map +0 -1
  186. package/dist/Dialog-BwabBKoZ.js.map +0 -1
  187. package/dist/FieldLabel-jqlQ1Ldh.js.map +0 -1
  188. package/dist/ListView-D8mfK8Lu.js.map +0 -1
  189. package/dist/SelectFieldSync-BOzavAtv.js +0 -1122
  190. package/dist/SelectFieldSync-BOzavAtv.js.map +0 -1
  191. package/dist/SelectTrigger-DfVnPiNf.js.map +0 -1
  192. package/dist/SelectTriggerBase-D8scKtBr.js.map +0 -1
  193. package/dist/SelectTriggerBase.module-Ce49lamD.js +0 -35
  194. package/dist/SelectTriggerBase.module-Ce49lamD.js.map +0 -1
  195. package/dist/Textarea-DdLD4imO.js.map +0 -1
  196. package/dist/Toolbar-DEwvVf35.js.map +0 -1
  197. package/dist/match-sorter.esm-CtBw0MrM.js.map +0 -1
  198. package/dist/useOnClickOutside-BDzuUjmY.js +0 -147
  199. package/dist/useOnClickOutside-BDzuUjmY.js.map +0 -1
@@ -0,0 +1,519 @@
1
+ import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import { F as Flex } from './Flex-CjPHUTeq.js';
4
+ import { I as Icon } from './Icon-BSuTVNaa.js';
5
+ import { a as SvgCheckBox, b as SvgCheckBoxOutlineBlank, S as SvgIndeterminateCheckBox } from './indeterminate_check_box-B4zobNlt.js';
6
+ import { S as SvgCheck } from './check-Cf67OWrZ.js';
7
+ import { c as cx } from './index-tZvMCc77.js';
8
+ import { T as Text } from './Text-kPA-VzsB.js';
9
+ import { S as Spinner } from './Spinner-xEFwsq8_.js';
10
+ import { u as useIntersectionObserver } from './useIntersectionObserver-BEmMDO3P.js';
11
+ import { F as FieldLabel } from './FieldLabel-BWOIFXgt.js';
12
+ import { S as SrOnly } from './SrOnly-CTsYSuby.js';
13
+ import { a as useOnClickOutside } from './useOnClickOutside-Zw5vzxSq.js';
14
+ import { B as computePosition, A as autoUpdate, o as offset, G as autoPlacement, i as size, t as tabbable, D as DialogContext } from './DrawerContext-rJvgnn3O.js';
15
+ import { u as useBreakpoint } from './useBreakpoint-BGCsBhQ7.js';
16
+ import './anvil-fonts.css';import './FieldDialog.css';/* empty css */
17
+ import { S as SvgClose } from './close-DZj38AEh.js';
18
+ import { D as DialogCancelButton } from './DialogCancelButton-CBHyI0CI.js';
19
+ import { u as useDialogScrollLock } from './useDialogScrollLock-BW-aVboo.js';
20
+
21
+ const DEFAULT_PAGE_SIZE = 20;
22
+ const DEFAULT_CACHE_MAX_SIZE = 15;
23
+ function useSelectFieldLoading(config) {
24
+ const { lazy, loadOptions: loadOptionsProp, cache: cacheConfig } = config;
25
+ const cacheEnabled = cacheConfig?.enabled !== false;
26
+ const cacheMaxSize = cacheConfig?.maxSize ?? DEFAULT_CACHE_MAX_SIZE;
27
+ const [options, setOptions] = useState([]);
28
+ const [hasMoreToLoad, setHasMoreToLoad] = useState(false);
29
+ const [previousGroup, setPreviousGroup] = useState(
30
+ null
31
+ );
32
+ const [previousPage, setPreviousPage] = useState(0);
33
+ const [previousOffset, setPreviousOffset] = useState(0);
34
+ const [loading, setLoading] = useState(false);
35
+ const [loadingMore, setLoadingMore] = useState(false);
36
+ const [stateCache, setStateCache] = useState(
37
+ () => /* @__PURE__ */ new Map()
38
+ );
39
+ const currentSearchValueRef = useRef("");
40
+ const appendOptions = useCallback((newOptions) => {
41
+ setOptions((prevOptions) => prevOptions.concat(newOptions));
42
+ }, []);
43
+ const pageSize = lazy === "page" ? config.pageSize : DEFAULT_PAGE_SIZE;
44
+ const limit = lazy === "offset" ? config.limit : DEFAULT_PAGE_SIZE;
45
+ const restoreFromCache = useCallback((cached) => {
46
+ setOptions(cached.options);
47
+ setHasMoreToLoad(cached.hasMore);
48
+ setPreviousPage(cached.previousPage);
49
+ setPreviousOffset(cached.previousOffset);
50
+ setPreviousGroup(cached.previousGroup);
51
+ }, []);
52
+ useEffect(() => {
53
+ if (!cacheEnabled) return;
54
+ const searchValue = currentSearchValueRef.current;
55
+ if (options.length === 0) return;
56
+ setStateCache((prev) => {
57
+ if (prev.size >= cacheMaxSize) {
58
+ prev.clear();
59
+ }
60
+ prev.set(searchValue, {
61
+ options,
62
+ hasMore: hasMoreToLoad,
63
+ previousPage,
64
+ previousOffset,
65
+ previousGroup
66
+ });
67
+ return new Map(prev);
68
+ });
69
+ }, [
70
+ cacheEnabled,
71
+ cacheMaxSize,
72
+ options,
73
+ hasMoreToLoad,
74
+ previousPage,
75
+ previousOffset,
76
+ previousGroup
77
+ ]);
78
+ const loadOptions = useCallback(
79
+ async (searchValue, options2) => {
80
+ const isInitial = !!options2?.initial;
81
+ if (isInitial && cacheEnabled) {
82
+ const cached = stateCache.get(searchValue);
83
+ if (cached) {
84
+ currentSearchValueRef.current = searchValue;
85
+ restoreFromCache(cached);
86
+ return;
87
+ }
88
+ }
89
+ if (isInitial) {
90
+ currentSearchValueRef.current = searchValue;
91
+ }
92
+ (isInitial ? setLoading : setLoadingMore)(true);
93
+ try {
94
+ if (!lazy) {
95
+ const result = await loadOptionsProp(searchValue);
96
+ const resolved = Array.isArray(result) ? result : await result;
97
+ (isInitial ? setOptions : appendOptions)(resolved);
98
+ } else {
99
+ let result;
100
+ if (lazy === "page") {
101
+ const page = isInitial ? 0 : previousPage;
102
+ result = await loadOptionsProp(searchValue, page, pageSize);
103
+ setPreviousPage(isInitial ? 1 : page + 1);
104
+ } else if (lazy === "offset") {
105
+ const offset = isInitial ? 0 : previousOffset;
106
+ result = await loadOptionsProp(searchValue, offset, limit);
107
+ setPreviousOffset(isInitial ? limit : offset + limit);
108
+ } else if (lazy === "group") {
109
+ const group = isInitial ? null : previousGroup;
110
+ result = await loadOptionsProp(searchValue, group);
111
+ setPreviousGroup(
112
+ result.options[result.options.length - 1]?.group ?? null
113
+ );
114
+ } else {
115
+ throw new Error(
116
+ `Invalid lazy mode: ${lazy}. Expected 'page', 'offset', or 'group'.`
117
+ );
118
+ }
119
+ setHasMoreToLoad(result.hasMore ?? false);
120
+ (isInitial ? setOptions : appendOptions)(result.options);
121
+ }
122
+ } finally {
123
+ (isInitial ? setLoading : setLoadingMore)(false);
124
+ }
125
+ },
126
+ [
127
+ lazy,
128
+ pageSize,
129
+ limit,
130
+ loadOptionsProp,
131
+ appendOptions,
132
+ previousPage,
133
+ previousOffset,
134
+ previousGroup,
135
+ cacheEnabled,
136
+ stateCache,
137
+ restoreFromCache
138
+ ]
139
+ );
140
+ const loadMore = useCallback(
141
+ async (searchValue) => {
142
+ await loadOptions(searchValue, { initial: false });
143
+ },
144
+ [loadOptions]
145
+ );
146
+ const reset = useCallback(() => {
147
+ setOptions([]);
148
+ setHasMoreToLoad(false);
149
+ setPreviousGroup(null);
150
+ setPreviousPage(0);
151
+ setPreviousOffset(0);
152
+ setLoading(false);
153
+ setLoadingMore(false);
154
+ }, []);
155
+ const clearCache = useCallback(() => {
156
+ setStateCache(/* @__PURE__ */ new Map());
157
+ }, []);
158
+ return {
159
+ options,
160
+ loading,
161
+ loadingMore,
162
+ hasMore: hasMoreToLoad,
163
+ loadOptions,
164
+ loadMore,
165
+ reset,
166
+ clearCache
167
+ };
168
+ }
169
+
170
+ const empty = "_empty_4c4yl_6";
171
+ const scroller = "_scroller_4c4yl_20";
172
+ const styles$3 = {
173
+ "select-field-list": "_select-field-list_4c4yl_2",
174
+ empty: empty,
175
+ "load-more": "_load-more_4c4yl_13",
176
+ scroller: scroller};
177
+
178
+ const highlighted = "_highlighted_15431_26";
179
+ const disabled = "_disabled_15431_29";
180
+ const single = "_single_15431_33";
181
+ const selected = "_selected_15431_33";
182
+ const checkbox = "_checkbox_15431_36";
183
+ const checked = "_checked_15431_40";
184
+ const unchecked = "_unchecked_15431_43";
185
+ const indeterminate = "_indeterminate_15431_46";
186
+ const styles$2 = {
187
+ "select-field-list-item": "_select-field-list-item_15431_2",
188
+ highlighted: highlighted,
189
+ disabled: disabled,
190
+ single: single,
191
+ selected: selected,
192
+ checkbox: checkbox,
193
+ checked: checked,
194
+ unchecked: unchecked,
195
+ indeterminate: indeterminate
196
+ };
197
+
198
+ const SelectFieldListItem = ({
199
+ item,
200
+ index,
201
+ highlighted,
202
+ disabled,
203
+ getItemProps,
204
+ selectionType,
205
+ checked
206
+ }) => {
207
+ const checkbox = useMemo(() => {
208
+ if (checked === "checked")
209
+ return { icon: SvgCheckBox, class: styles$2["checked"] };
210
+ if (checked === "unchecked")
211
+ return { icon: SvgCheckBoxOutlineBlank, class: styles$2["unchecked"] };
212
+ if (checked === "indeterminate")
213
+ return { icon: SvgIndeterminateCheckBox, class: styles$2["indeterminate"] };
214
+ return { icon: SvgCheckBoxOutlineBlank, class: styles$2["unchecked"] };
215
+ }, [checked]);
216
+ return /* @__PURE__ */ jsxs(
217
+ "li",
218
+ {
219
+ ...getItemProps({
220
+ item,
221
+ index,
222
+ className: cx(styles$2["select-field-list-item"], {
223
+ [styles$2.highlighted]: highlighted,
224
+ [styles$2.selected]: checked === "checked",
225
+ [styles$2.disabled]: disabled,
226
+ [styles$2.single]: selectionType === "single",
227
+ [styles$2.multiple]: selectionType === "multiple"
228
+ })
229
+ }),
230
+ children: [
231
+ selectionType === "multiple" && /* @__PURE__ */ jsx("div", { children: checked === "loading" ? /* @__PURE__ */ jsx(Spinner, { size: "medium" }) : /* @__PURE__ */ jsx(
232
+ Icon,
233
+ {
234
+ size: "large",
235
+ svg: checkbox.icon,
236
+ className: cx(styles$2["checkbox"], checkbox.class)
237
+ }
238
+ ) }),
239
+ /* @__PURE__ */ jsxs(Flex, { grow: 1, shrink: 1, direction: "column", gap: "1", children: [
240
+ /* @__PURE__ */ jsx(Text, { size: "medium", children: item.original.content?.title ?? item.original.label }),
241
+ item.original.content?.description && /* @__PURE__ */ jsx(Text, { size: "small", children: item.original.content?.description })
242
+ ] }),
243
+ selectionType === "single" && checked === "checked" && /* @__PURE__ */ jsx(
244
+ Icon,
245
+ {
246
+ size: "medium",
247
+ svg: SvgCheck,
248
+ className: cx(styles$2["checkbox"], styles$2["checked"])
249
+ }
250
+ )
251
+ ]
252
+ },
253
+ item.id
254
+ );
255
+ };
256
+
257
+ const InView = ({
258
+ children,
259
+ onVisibilityChange,
260
+ rootMargin
261
+ }) => {
262
+ const { ref } = useIntersectionObserver({
263
+ onChange: (isIntersecting) => {
264
+ onVisibilityChange?.(isIntersecting);
265
+ },
266
+ rootMargin
267
+ });
268
+ return /* @__PURE__ */ jsx("div", { ref, children });
269
+ };
270
+
271
+ const SelectFieldLabel = ({
272
+ label,
273
+ getLabelProps,
274
+ hideLabel = false,
275
+ labelNode,
276
+ moreInfo,
277
+ openMoreInfo,
278
+ moreInfoOpen,
279
+ required
280
+ }) => {
281
+ const labelContent = /* @__PURE__ */ jsx(
282
+ FieldLabel,
283
+ {
284
+ ...getLabelProps(),
285
+ required,
286
+ moreInfo,
287
+ openMoreInfo,
288
+ moreInfoOpen,
289
+ children: labelNode ?? label
290
+ }
291
+ );
292
+ if (hideLabel) {
293
+ return /* @__PURE__ */ jsx(SrOnly, { children: labelContent });
294
+ }
295
+ return labelContent;
296
+ };
297
+
298
+ function useDebouncedCallback(callback, delay = 300) {
299
+ const timeoutRef = useRef(null);
300
+ const callbackRef = useRef(callback);
301
+ useEffect(() => {
302
+ callbackRef.current = callback;
303
+ }, [callback]);
304
+ useEffect(() => {
305
+ return () => {
306
+ if (timeoutRef.current) {
307
+ clearTimeout(timeoutRef.current);
308
+ timeoutRef.current = null;
309
+ }
310
+ };
311
+ }, [delay]);
312
+ const debouncedCallback = useCallback(
313
+ ((...args) => {
314
+ if (timeoutRef.current) {
315
+ clearTimeout(timeoutRef.current);
316
+ }
317
+ timeoutRef.current = setTimeout(() => {
318
+ callbackRef.current(...args);
319
+ timeoutRef.current = null;
320
+ }, delay);
321
+ }),
322
+ [delay]
323
+ );
324
+ return debouncedCallback;
325
+ }
326
+
327
+ const styles$1 = {
328
+ "field-popover": "_field-popover_aeggh_2"
329
+ };
330
+
331
+ const FieldPopover = (props) => {
332
+ const ref = useRef(null);
333
+ const { id, children, referenceElement, open, onClickOutside } = props;
334
+ useOnClickOutside({
335
+ targets: [ref.current ?? void 0, referenceElement.current ?? void 0],
336
+ onClickOutside,
337
+ disable: !open
338
+ });
339
+ useEffect(() => {
340
+ if (open) {
341
+ ref.current?.showPopover();
342
+ } else {
343
+ ref.current?.hidePopover();
344
+ }
345
+ }, [open]);
346
+ const updatePosition = useCallback(async () => {
347
+ if (!ref.current || !referenceElement.current) return;
348
+ const position = await computePosition(
349
+ referenceElement.current,
350
+ ref.current,
351
+ {
352
+ placement: "bottom-start",
353
+ middleware: [
354
+ offset(8),
355
+ autoPlacement({
356
+ allowedPlacements: ["bottom-start", "top-start"],
357
+ padding: 8
358
+ }),
359
+ size({
360
+ padding: 8,
361
+ apply({ rects, elements, availableHeight }) {
362
+ Object.assign(elements.floating.style, {
363
+ width: `${rects.reference.width}px`,
364
+ maxHeight: `${Math.max(0, availableHeight)}px`
365
+ });
366
+ }
367
+ })
368
+ ]
369
+ }
370
+ );
371
+ ref.current.style.left = `${position.x}px`;
372
+ ref.current.style.top = `${position.y}px`;
373
+ }, [ref, referenceElement]);
374
+ useEffect(() => {
375
+ if (!ref.current || !referenceElement.current || !open) return;
376
+ const cleanup = autoUpdate(
377
+ referenceElement.current,
378
+ ref.current,
379
+ updatePosition
380
+ );
381
+ return () => {
382
+ cleanup();
383
+ };
384
+ }, [referenceElement, ref, updatePosition, open]);
385
+ return /* @__PURE__ */ jsx("div", { ref, id, className: styles$1["field-popover"], popover: "manual", children });
386
+ };
387
+
388
+ function detectCoarsePointer() {
389
+ if (typeof window === "undefined" || !window.matchMedia) {
390
+ return false;
391
+ }
392
+ return window.matchMedia("(pointer: coarse)").matches;
393
+ }
394
+ function useAdaptiveView() {
395
+ const breakpoint = useBreakpoint();
396
+ const [hasCoarsePointer, setHasCoarsePointer] = useState(detectCoarsePointer);
397
+ useEffect(() => {
398
+ setHasCoarsePointer(detectCoarsePointer());
399
+ const mediaQuery = window.matchMedia("(pointer: coarse)");
400
+ const handleChange = (e) => {
401
+ setHasCoarsePointer(e.matches);
402
+ };
403
+ mediaQuery.addEventListener("change", handleChange);
404
+ return () => mediaQuery.removeEventListener("change", handleChange);
405
+ }, []);
406
+ const isSmallScreen = !breakpoint?.md;
407
+ const isMobile = isSmallScreen && hasCoarsePointer;
408
+ return {
409
+ view: isMobile ? "mobile" : "desktop",
410
+ isMobile,
411
+ isDesktop: !isMobile
412
+ };
413
+ }
414
+
415
+ const header = "_header_dcw9s_33";
416
+ const field = "_field_dcw9s_2";
417
+ const content = "_content_dcw9s_44";
418
+ const styles = {
419
+ "field-dialog": "_field-dialog_dcw9s_2",
420
+ "field-dialog-visual-viewport-height": "_field-dialog-visual-viewport-height_dcw9s_16",
421
+ header: header,
422
+ field: field,
423
+ content: content
424
+ };
425
+
426
+ const FieldDialog = ({
427
+ id,
428
+ isOpen,
429
+ onClose,
430
+ field,
431
+ children,
432
+ title,
433
+ initialFocusResolver
434
+ }) => {
435
+ const elRef = useRef(null);
436
+ const visualViewportHeightRef = useRef(null);
437
+ useDialogScrollLock({
438
+ open: isOpen,
439
+ id,
440
+ enableScrollChaining: false,
441
+ elementRef: elRef
442
+ });
443
+ const computeFocus = useCallback(
444
+ (focusables) => {
445
+ if (initialFocusResolver) {
446
+ return initialFocusResolver(focusables);
447
+ }
448
+ return focusables.find(
449
+ (focusable) => focusable.dataset.anv !== "dialog-cancel-button"
450
+ ) || focusables[0];
451
+ },
452
+ [initialFocusResolver]
453
+ );
454
+ useEffect(() => {
455
+ if (isOpen) {
456
+ elRef.current?.showModal();
457
+ if (elRef.current) {
458
+ computeFocus(tabbable(elRef.current)).focus();
459
+ }
460
+ } else {
461
+ elRef.current?.close();
462
+ }
463
+ }, [isOpen]);
464
+ useEffect(() => {
465
+ if (isOpen) {
466
+ const handleResize = () => {
467
+ if (!visualViewportHeightRef.current) return;
468
+ visualViewportHeightRef.current.style.height = `${window.visualViewport?.height ?? 0}px`;
469
+ visualViewportHeightRef.current.style.maxHeight = `${window.visualViewport?.height ?? 0}px`;
470
+ };
471
+ window.visualViewport?.addEventListener("resize", handleResize);
472
+ return () => {
473
+ window.visualViewport?.removeEventListener("resize", handleResize);
474
+ };
475
+ }
476
+ }, [isOpen]);
477
+ return /* @__PURE__ */ jsx(
478
+ "dialog",
479
+ {
480
+ ref: elRef,
481
+ id,
482
+ "data-anv": "field-dialog",
483
+ className: styles["field-dialog"],
484
+ onKeyDown: (e) => {
485
+ if (e.code === "Escape") {
486
+ e.preventDefault();
487
+ onClose();
488
+ }
489
+ },
490
+ children: /* @__PURE__ */ jsxs(
491
+ "div",
492
+ {
493
+ className: styles["field-dialog-visual-viewport-height"],
494
+ ref: visualViewportHeightRef,
495
+ children: [
496
+ /* @__PURE__ */ jsxs(Flex, { direction: "row", className: styles["header"], children: [
497
+ /* @__PURE__ */ jsx(Text, { variant: "headline", el: "h1", children: title }),
498
+ /* @__PURE__ */ jsx("span", { className: styles["close-container"], children: /* @__PURE__ */ jsx(DialogContext.Provider, { value: { close: onClose }, children: /* @__PURE__ */ jsx(
499
+ DialogCancelButton,
500
+ {
501
+ className: styles["close-button"],
502
+ size: "small",
503
+ appearance: "ghost",
504
+ "aria-label": "Close dialog",
505
+ icon: SvgClose
506
+ }
507
+ ) }) })
508
+ ] }),
509
+ /* @__PURE__ */ jsx(Flex, { direction: "column", className: styles["field"], children: field }),
510
+ /* @__PURE__ */ jsx(Flex, { direction: "column", className: styles["content"], children })
511
+ ]
512
+ }
513
+ )
514
+ }
515
+ );
516
+ };
517
+
518
+ export { DEFAULT_PAGE_SIZE as D, FieldDialog as F, InView as I, SelectFieldListItem as S, useSelectFieldLoading as a, useDebouncedCallback as b, SelectFieldLabel as c, FieldPopover as d, styles$3 as s, useAdaptiveView as u };
519
+ //# sourceMappingURL=FieldDialog-BHgkQOhh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldDialog-BHgkQOhh.js","sources":["../src/internal/hooks/useSelectFieldLoading/useSelectFieldLoading.ts","../src/beta/components/SelectField/internal/SelectFieldListItem.tsx","../src/beta/components/SelectField/internal/InView.tsx","../src/beta/components/SelectField/internal/SelectFieldLabel.tsx","../src/internal/hooks/useDebouncedCallback/useDebouncedCallback.ts","../src/beta/components/SelectField/internal/FieldPopover/FieldPopover.tsx","../src/beta/hooks/useAdaptiveView.tsx","../src/beta/components/SelectField/internal/FieldDialog/FieldDialog.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n SelectFieldOption,\n SelectFieldPageLazyResult,\n SelectFieldOffsetLazyResult,\n SelectFieldGroupLazyResult,\n SelectFieldPropsLazyPage,\n SelectFieldPropsLazyOffset,\n SelectFieldPropsLazyGroup,\n SelectFieldPropsEager,\n} from \"../../../beta/components/SelectField/types\";\n\nexport const DEFAULT_PAGE_SIZE = 20;\nconst DEFAULT_CACHE_MAX_SIZE = 15;\n\n/**\n * Configuration for caching search results in useSelectFieldLoading.\n * When enabled, the full accumulated state (options, pagination cursor, hasMore)\n * is cached per search value, allowing instant restoration when returning to\n * a previous search.\n */\nexport type CacheConfig = {\n /**\n * Whether caching is enabled. Defaults to true.\n */\n enabled?: boolean;\n /**\n * Maximum number of search values to cache before clearing.\n * Defaults to 15.\n */\n maxSize?: number;\n};\n\n/**\n * The full state cached per search value, including accumulated options,\n * pagination cursor, and hasMore flag.\n */\ntype CachedSearchState = {\n options: SelectFieldOption[];\n hasMore: boolean;\n previousPage: number;\n previousOffset: number;\n previousGroup: string | number | null;\n};\n\ntype UseSelectFieldLoadingConfigLazyPage = Pick<\n SelectFieldPropsLazyPage,\n \"lazy\" | \"loadOptions\"\n> & {\n pageSize: number;\n cache?: CacheConfig;\n};\n\ntype UseSelectFieldLoadingConfigLazyOffset = Pick<\n SelectFieldPropsLazyOffset,\n \"lazy\" | \"loadOptions\"\n> & {\n limit: number;\n cache?: CacheConfig;\n};\n\ntype UseSelectFieldLoadingConfigLazyGroup = Pick<\n SelectFieldPropsLazyGroup,\n \"lazy\" | \"loadOptions\"\n> & {\n cache?: CacheConfig;\n};\n\ntype UseSelectFieldLoadingConfigEager = Pick<\n SelectFieldPropsEager,\n \"lazy\" | \"loadOptions\"\n> & {\n cache?: CacheConfig;\n};\n\nexport type UseSelectFieldLoadingConfig =\n | UseSelectFieldLoadingConfigLazyPage\n | UseSelectFieldLoadingConfigLazyOffset\n | UseSelectFieldLoadingConfigLazyGroup\n | UseSelectFieldLoadingConfigEager;\n\nexport type UseSelectFieldLoadingReturn = {\n /**\n * Current loaded options array\n */\n options: SelectFieldOption[];\n /**\n * Boolean indicating initial load in progress\n */\n loading: boolean;\n /**\n * Boolean indicating load more in progress\n */\n loadingMore: boolean;\n /**\n * Boolean indicating if more options are available\n */\n hasMore: boolean;\n /**\n * Function to load options. When initial is true, replaces options and sets loading state.\n * When initial is false or undefined, appends options and sets loadingMore state.\n * @param searchValue - The search value to load options for\n * @param options - Optional configuration\n * @param options.initial - Whether this is an initial load (replaces options) or continuation (appends options)\n */\n loadOptions: (\n searchValue: string,\n options?: { initial?: boolean },\n ) => Promise<void>;\n /**\n * Function to load more options (for pagination). Appends to existing options.\n * @param searchValue - The search value to load more options for\n */\n loadMore: (searchValue: string) => Promise<void>;\n /**\n * Function to reset all state to initial values\n */\n reset: () => void;\n /**\n * Function to clear the search results cache\n */\n clearCache: () => void;\n};\n\n/**\n * Custom hook for managing SelectField option loading state and logic.\n *\n * Features:\n * - Manages option loading state (loading, loadingMore, hasMore)\n * - Supports eager loading and three lazy loading modes (page, offset, group)\n * - Handles pagination state tracking for lazy loading\n * - Provides methods to load options (initial or continuation) and load more\n * - Automatically manages option replacement vs appending based on load type\n * - Tracks pagination state (page, offset, group) for lazy loading modes\n * - Provides reset functionality to clear all state\n *\n * @param config - Configuration object containing lazy mode, loadOptions function, and pagination settings\n * @returns Object containing options, loading states, and load functions\n *\n * @example\n * const { options, loading, loadingMore, hasMore, loadOptions, loadMore } = useSelectFieldLoading({\n * lazy: \"page\",\n * loadOptions: async (searchValue, page, pageSize) => {\n * const result = await fetchOptions(searchValue, page, pageSize);\n * return { options: result.items, hasMore: result.hasMore };\n * },\n * pageSize: 10\n * });\n */\nexport function useSelectFieldLoading(\n config: UseSelectFieldLoadingConfig,\n): UseSelectFieldLoadingReturn {\n const { lazy, loadOptions: loadOptionsProp, cache: cacheConfig } = config;\n\n // Cache configuration\n const cacheEnabled = cacheConfig?.enabled !== false;\n const cacheMaxSize = cacheConfig?.maxSize ?? DEFAULT_CACHE_MAX_SIZE;\n\n const [options, setOptions] = useState<SelectFieldOption[]>([]);\n const [hasMoreToLoad, setHasMoreToLoad] = useState(false);\n const [previousGroup, setPreviousGroup] = useState<string | number | null>(\n null,\n );\n const [previousPage, setPreviousPage] = useState<number>(0);\n const [previousOffset, setPreviousOffset] = useState<number>(0);\n const [loading, setLoading] = useState(false);\n const [loadingMore, setLoadingMore] = useState(false);\n\n // Cache state: stores full accumulated state per search value\n const [stateCache, setStateCache] = useState<Map<string, CachedSearchState>>(\n () => new Map(),\n );\n // Track the current search value to know which cache entry to update on loadMore\n const currentSearchValueRef = useRef<string>(\"\");\n\n const appendOptions = useCallback((newOptions: SelectFieldOption[]) => {\n setOptions((prevOptions) => prevOptions.concat(newOptions));\n }, []);\n\n const pageSize =\n lazy === \"page\"\n ? (config as UseSelectFieldLoadingConfigLazyPage).pageSize\n : DEFAULT_PAGE_SIZE;\n const limit =\n lazy === \"offset\"\n ? (config as UseSelectFieldLoadingConfigLazyOffset).limit\n : DEFAULT_PAGE_SIZE;\n\n // Helper to restore state from cache\n const restoreFromCache = useCallback((cached: CachedSearchState) => {\n setOptions(cached.options);\n setHasMoreToLoad(cached.hasMore);\n setPreviousPage(cached.previousPage);\n setPreviousOffset(cached.previousOffset);\n setPreviousGroup(cached.previousGroup);\n }, []);\n\n // Sync current state to cache whenever options or pagination state changes.\n // This effect runs after React has batched all state updates from loadOptions/loadMore,\n // ensuring we cache the complete, up-to-date state.\n useEffect(() => {\n if (!cacheEnabled) return;\n const searchValue = currentSearchValueRef.current;\n // Only cache if we have options (empty string \"\" is a valid search value)\n if (options.length === 0) return;\n\n setStateCache((prev) => {\n // Clear cache if we've reached max size\n if (prev.size >= cacheMaxSize) {\n prev.clear();\n }\n\n prev.set(searchValue, {\n options,\n hasMore: hasMoreToLoad,\n previousPage,\n previousOffset,\n previousGroup,\n });\n return new Map(prev);\n });\n }, [\n cacheEnabled,\n cacheMaxSize,\n options,\n hasMoreToLoad,\n previousPage,\n previousOffset,\n previousGroup,\n ]);\n\n const loadOptions = useCallback(\n async (\n searchValue: string,\n options?: { initial?: boolean },\n ): Promise<void> => {\n const isInitial = !!options?.initial;\n\n // On initial load, check cache first\n if (isInitial && cacheEnabled) {\n const cached = stateCache.get(searchValue);\n if (cached) {\n // Restore full state from cache - no API call needed\n currentSearchValueRef.current = searchValue;\n restoreFromCache(cached);\n return;\n }\n }\n\n // Track current search value for cache updates on loadMore\n if (isInitial) {\n currentSearchValueRef.current = searchValue;\n }\n\n (isInitial ? setLoading : setLoadingMore)(true);\n\n try {\n if (!lazy) {\n const result = await loadOptionsProp(searchValue);\n const resolved = Array.isArray(result) ? result : await result;\n (isInitial ? setOptions : appendOptions)(resolved);\n } else {\n let result:\n | SelectFieldPageLazyResult\n | SelectFieldOffsetLazyResult\n | SelectFieldGroupLazyResult;\n\n if (lazy === \"page\") {\n const page = isInitial ? 0 : previousPage;\n result = await loadOptionsProp(searchValue, page, pageSize);\n setPreviousPage(isInitial ? 1 : page + 1);\n } else if (lazy === \"offset\") {\n const offset = isInitial ? 0 : previousOffset;\n result = await loadOptionsProp(searchValue, offset, limit);\n setPreviousOffset(isInitial ? limit : offset + limit);\n } else if (lazy === \"group\") {\n const group = isInitial ? null : previousGroup;\n result = await loadOptionsProp(searchValue, group);\n setPreviousGroup(\n result.options[result.options.length - 1]?.group ?? null,\n );\n } else {\n throw new Error(\n `Invalid lazy mode: ${lazy}. Expected 'page', 'offset', or 'group'.`,\n );\n }\n\n setHasMoreToLoad(result.hasMore ?? false);\n (isInitial ? setOptions : appendOptions)(result.options);\n }\n } finally {\n (isInitial ? setLoading : setLoadingMore)(false);\n }\n },\n [\n lazy,\n pageSize,\n limit,\n loadOptionsProp,\n appendOptions,\n previousPage,\n previousOffset,\n previousGroup,\n cacheEnabled,\n stateCache,\n restoreFromCache,\n ],\n );\n\n const loadMore = useCallback(\n async (searchValue: string): Promise<void> => {\n await loadOptions(searchValue, { initial: false });\n },\n [loadOptions],\n );\n\n const reset = useCallback(() => {\n setOptions([]);\n setHasMoreToLoad(false);\n setPreviousGroup(null);\n setPreviousPage(0);\n setPreviousOffset(0);\n setLoading(false);\n setLoadingMore(false);\n }, []);\n\n const clearCache = useCallback(() => {\n setStateCache(new Map());\n }, []);\n\n return {\n options,\n loading,\n loadingMore,\n hasMore: hasMoreToLoad,\n loadOptions,\n loadMore,\n reset,\n clearCache,\n };\n}\n","import { UseComboboxPropGetters } from \"downshift\";\nimport { Flex } from \"../../../../components/Flex\";\nimport { SelectFieldDownshiftItem } from \"../types\";\nimport Icon from \"../../../../components/Icon\";\nimport styles from \"./SelectFieldListItem.module.scss\";\nimport CheckboxOutline from \"@servicetitan/hammer-icon/mdi/round/check_box_outline_blank.svg\";\nimport CheckboxChecked from \"@servicetitan/hammer-icon/mdi/round/check_box.svg\";\nimport CheckboxIndeterminate from \"@servicetitan/hammer-icon/mdi/round/indeterminate_check_box.svg\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check.svg\";\nimport cx from \"classnames\";\nimport { useMemo } from \"react\";\nimport Text from \"../../../../components/Text\";\nimport { CheckState } from \"../../../../types\";\nimport Spinner from \"../../../../components/Spinner\";\n\ntype GetItemProps =\n UseComboboxPropGetters<SelectFieldDownshiftItem>[\"getItemProps\"];\n\nexport type SelectFieldListItemProps = {\n item: SelectFieldDownshiftItem;\n index: number;\n highlighted: boolean;\n disabled: boolean;\n getItemProps: GetItemProps;\n selectionType: \"single\" | \"multiple\";\n checked: CheckState;\n};\n\nexport const SelectFieldListItem = ({\n item,\n index,\n highlighted,\n disabled,\n getItemProps,\n selectionType,\n checked,\n}: SelectFieldListItemProps) => {\n const checkbox = useMemo(() => {\n if (checked === \"checked\")\n return { icon: CheckboxChecked, class: styles[\"checked\"] };\n if (checked === \"unchecked\")\n return { icon: CheckboxOutline, class: styles[\"unchecked\"] };\n if (checked === \"indeterminate\")\n return { icon: CheckboxIndeterminate, class: styles[\"indeterminate\"] };\n return { icon: CheckboxOutline, class: styles[\"unchecked\"] };\n }, [checked]);\n\n return (\n <li\n key={item.id}\n {...getItemProps({\n item,\n index,\n className: cx(styles[\"select-field-list-item\"], {\n [styles.highlighted]: highlighted,\n [styles.selected]: checked === \"checked\",\n [styles.disabled]: disabled,\n [styles.single]: selectionType === \"single\",\n [styles.multiple]: selectionType === \"multiple\",\n }),\n })}\n >\n {selectionType === \"multiple\" && (\n <div>\n {checked === \"loading\" ? (\n <Spinner size=\"medium\" />\n ) : (\n <Icon\n size=\"large\"\n svg={checkbox.icon}\n className={cx(styles[\"checkbox\"], checkbox.class)}\n />\n )}\n </div>\n )}\n <Flex grow={1} shrink={1} direction=\"column\" gap=\"1\">\n <Text size=\"medium\">\n {item.original.content?.title ?? item.original.label}\n </Text>\n {item.original.content?.description && (\n <Text size=\"small\">{item.original.content?.description}</Text>\n )}\n </Flex>\n {selectionType === \"single\" && checked === \"checked\" && (\n <Icon\n size=\"medium\"\n svg={Check}\n className={cx(styles[\"checkbox\"], styles[\"checked\"])}\n />\n )}\n </li>\n );\n};\n","import { ReactNode } from \"react\";\nimport { useIntersectionObserver } from \"../../../../internal/hooks\";\n\n/**\n * Props for the InView component\n * @property {ReactNode} children - The content to render inside the visibility-tracked container\n * @property {(isVisible: boolean) => void} [onVisibilityChange] - Callback fired when visibility changes\n */\ntype InViewProps = {\n /**\n * The content to render inside the visibility-tracked container\n */\n children?: ReactNode;\n /**\n * Callback fired when the element's visibility in the viewport changes\n */\n onVisibilityChange?: (isVisible: boolean) => void;\n /**\n * The root margin for the intersection observer\n */\n rootMargin?: string;\n};\n\n/**\n * Internal component that detects when its content is visible in the viewport.\n *\n * Features:\n * - Uses Intersection Observer API for efficient visibility detection\n * - Fires callback when visibility state changes\n * - Handles browser compatibility gracefully\n * - Automatically cleans up observer on unmount\n *\n * @param props - Component props\n * @returns Wrapped children with visibility detection\n */\nexport const InView = ({\n children,\n onVisibilityChange,\n rootMargin,\n}: InViewProps) => {\n const { ref } = useIntersectionObserver({\n onChange: (isIntersecting) => {\n onVisibilityChange?.(isIntersecting);\n },\n rootMargin,\n });\n\n return <div ref={ref}>{children}</div>;\n};\n","import { ReactNode } from \"react\";\nimport { UseComboboxPropGetters } from \"downshift\";\nimport { SelectFieldDownshiftItem } from \"../types\";\nimport { FieldLabel } from \"../../../../components/FieldLabel\";\nimport { SrOnly } from \"../../../../components/SrOnly\";\n\ntype GetLabelProps =\n UseComboboxPropGetters<SelectFieldDownshiftItem>[\"getLabelProps\"];\n\n/**\n * Props for the SelectFieldLabel component\n * @property {string} label - The text content to display as the label\n * @property {GetLabelProps} getLabelProps - Downshift getter function that returns accessibility props for the label\n * @property {boolean} [required] - Whether the field is required. Shows a red asterisk (*) when true.\n * @property {ReactNode} [moreInfo] - Additional information to display in a tooltip\n * @property {boolean} [openMoreInfo] - @deprecated: Use `moreInfoOpen` instead.\n * @property {boolean} [moreInfoOpen] - Controls the open state of the more info tooltip\n * @property {boolean} [hideLabel] - Visually hides the label while keeping it accessible to screen readers\n * @property {ReactNode} [labelNode] - Custom ReactNode to render as the label, overriding the default label text\n */\nexport type SelectFieldLabelProps = {\n label: string;\n getLabelProps: GetLabelProps;\n hideLabel?: boolean;\n labelNode?: ReactNode;\n moreInfo?: ReactNode;\n openMoreInfo?: boolean;\n moreInfoOpen?: boolean;\n required?: boolean;\n};\n\n/**\n * Internal label component for the SelectField that renders an accessible label element.\n *\n * Features:\n * - Renders a FieldLabel with proper accessibility attributes from Downshift\n * - Automatically associates the label with the combobox input\n * - Supports screen readers with proper labeling\n * - Optional required field indicator with red asterisk\n * - Help tooltip with info icon for additional context\n * - Can visually hide the label while maintaining accessibility\n * - Supports custom label content via labelNode\n *\n * @example\n * <SelectFieldLabel\n * label=\"Select an option\"\n * getLabelProps={getLabelProps}\n * required\n * moreInfo=\"Choose from available options\"\n * />\n */\nexport const SelectFieldLabel = ({\n label,\n getLabelProps,\n hideLabel = false,\n labelNode,\n moreInfo,\n openMoreInfo,\n moreInfoOpen,\n required,\n}: SelectFieldLabelProps) => {\n const labelContent = (\n <FieldLabel\n {...getLabelProps()}\n required={required}\n moreInfo={moreInfo}\n openMoreInfo={openMoreInfo}\n moreInfoOpen={moreInfoOpen}\n >\n {labelNode ?? label}\n </FieldLabel>\n );\n\n if (hideLabel) {\n return <SrOnly>{labelContent}</SrOnly>;\n }\n\n return labelContent;\n};\n","import { useRef, useEffect, useCallback } from \"react\";\n\n/**\n * Custom hook for creating a debounced version of a callback function.\n *\n * Features:\n * - Delays callback execution until after a specified delay period\n * - Cancels previous pending calls when a new one is made\n * - Maintains stable function reference (only changes when delay changes)\n * - Always uses the latest callback via ref (avoids stale closures)\n * - Properly cleans up timeouts on unmount and delay changes\n * - Supports async callbacks\n * - Type-safe with generics\n *\n * @param callback - The function to debounce\n * @param delay - Delay in milliseconds before executing the callback\n * @returns Debounced version of the callback with the same signature\n *\n * @example\n * const debouncedSearch = useDebouncedCallback(\n * (searchTerm: string) => {\n * performSearch(searchTerm);\n * },\n * 300\n * );\n *\n * // Later in event handler:\n * debouncedSearch(inputValue);\n */\n//eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebouncedCallback<T extends (...args: any[]) => any>(\n callback: T,\n delay: number = 300,\n): T {\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n const callbackRef = useRef(callback);\n\n // Update callback ref when it changes to always use the latest version\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n // Cleanup timeout on unmount and when delay changes\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n }, [delay]);\n\n const debouncedCallback = useCallback(\n ((...args: Parameters<T>) => {\n // Cancel any pending call\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Schedule new call\n timeoutRef.current = setTimeout(() => {\n callbackRef.current(...args);\n timeoutRef.current = null;\n }, delay);\n }) as T,\n [delay],\n );\n\n return debouncedCallback;\n}\n","import { ReactNode, RefObject, useCallback, useEffect, useRef } from \"react\";\n\nimport {\n autoPlacement,\n autoUpdate,\n computePosition,\n offset,\n size,\n} from \"@floating-ui/react\";\n\nimport { useOnClickOutside } from \"../../../../../internal/hooks/useOnClickOutside/useOnClickOutside\";\n\nimport styles from \"./FieldPopover.module.scss\";\n\nexport type FieldPopoverProps = {\n id: string;\n children: ReactNode;\n referenceElement: RefObject<HTMLElement>;\n open: boolean;\n onClickOutside: () => void;\n};\n\nexport const FieldPopover = (props: FieldPopoverProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { id, children, referenceElement, open, onClickOutside } = props;\n\n useOnClickOutside({\n targets: [ref.current ?? undefined, referenceElement.current ?? undefined],\n onClickOutside: onClickOutside,\n disable: !open,\n });\n\n useEffect(() => {\n if (open) {\n ref.current?.showPopover();\n } else {\n ref.current?.hidePopover();\n }\n }, [open]);\n\n const updatePosition = useCallback(async () => {\n if (!ref.current || !referenceElement.current) return;\n const position = await computePosition(\n referenceElement.current,\n ref.current,\n {\n placement: \"bottom-start\",\n middleware: [\n offset(8),\n autoPlacement({\n allowedPlacements: [\"bottom-start\", \"top-start\"],\n padding: 8,\n }),\n size({\n padding: 8,\n apply({ rects, elements, availableHeight }) {\n Object.assign(elements.floating.style, {\n width: `${rects.reference.width}px`,\n maxHeight: `${Math.max(0, availableHeight)}px`,\n });\n },\n }),\n ],\n },\n );\n ref.current.style.left = `${position.x}px`;\n ref.current.style.top = `${position.y}px`;\n }, [ref, referenceElement]);\n\n useEffect(() => {\n if (!ref.current || !referenceElement.current || !open) return;\n const cleanup = autoUpdate(\n referenceElement.current,\n ref.current,\n updatePosition,\n );\n return () => {\n cleanup();\n };\n }, [referenceElement, ref, updatePosition, open]);\n\n return (\n <div ref={ref} id={id} className={styles[\"field-popover\"]} popover=\"manual\">\n {children}\n </div>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { useBreakpoint } from \"../../hooks\";\n\n/**\n * The type of view to render based on device characteristics.\n */\nexport type AdaptiveView = \"mobile\" | \"desktop\";\n\n/**\n * Return type for the useAdaptiveView hook.\n */\nexport interface UseAdaptiveViewReturn {\n /**\n * The current adaptive view type.\n */\n view: AdaptiveView;\n /**\n * True when the device should use mobile-optimized UI (Dialog).\n */\n isMobile: boolean;\n /**\n * True when the device should use desktop-optimized UI (Popover).\n */\n isDesktop: boolean;\n}\n\n/**\n * Detects whether the primary pointer is coarse (touch) using CSS media query.\n * Returns false during SSR or when matchMedia is unavailable.\n */\nfunction detectCoarsePointer(): boolean {\n if (typeof window === \"undefined\" || !window.matchMedia) {\n return false;\n }\n return window.matchMedia(\"(pointer: coarse)\").matches;\n}\n\n/**\n * Custom hook for detecting whether to use mobile or desktop UI patterns.\n *\n * This hook determines the optimal UI pattern (e.g., Dialog vs Popover) by combining:\n * - Screen size via useBreakpoint (viewport width)\n * - Pointer precision via CSS media query (pointer: coarse)\n *\n * A device is considered \"mobile\" when it has both:\n * - A small screen (below md breakpoint, < 768px)\n * - A coarse pointer (touch-primary input)\n *\n * This approach correctly identifies:\n * - Mobile phones → mobile view (Dialog)\n * - iPads/tablets → desktop view (Popover) due to larger screens\n * - Touch laptops → desktop view (Popover) due to fine pointer primary\n * - Desktop → desktop view (Popover)\n *\n * @returns Object containing view type and boolean flags for mobile/desktop\n *\n * @example\n * const { isMobile } = useAdaptiveView();\n *\n * return isMobile ? (\n * <Dialog>{children}</Dialog>\n * ) : (\n * <Popover>{children}</Popover>\n * );\n */\nexport function useAdaptiveView(): UseAdaptiveViewReturn {\n const breakpoint = useBreakpoint();\n const [hasCoarsePointer, setHasCoarsePointer] = useState(detectCoarsePointer);\n\n useEffect(() => {\n setHasCoarsePointer(detectCoarsePointer());\n\n // Listen for pointer capability changes (e.g., connecting/disconnecting a mouse)\n const mediaQuery = window.matchMedia(\"(pointer: coarse)\");\n const handleChange = (e: MediaQueryListEvent) => {\n setHasCoarsePointer(e.matches);\n };\n\n mediaQuery.addEventListener(\"change\", handleChange);\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\n }, []);\n\n const isSmallScreen = !breakpoint?.md;\n const isMobile = isSmallScreen && hasCoarsePointer;\n\n return {\n view: isMobile ? \"mobile\" : \"desktop\",\n isMobile,\n isDesktop: !isMobile,\n };\n}\n","import { useCallback, useEffect, useRef } from \"react\";\nimport {\n DialogCancelButton,\n Flex,\n FocusableElement,\n Text,\n} from \"../../../../..\";\nimport styles from \"./FieldDialog.module.scss\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport { DialogContext } from \"../../../../../components/Dialog/internal/DialogContext\";\nimport { useDialogScrollLock } from \"../../../../../internal\";\nimport { tabbable } from \"tabbable\";\n\nexport const FieldDialog = ({\n id,\n isOpen,\n onClose,\n field,\n children,\n title,\n initialFocusResolver,\n}: {\n id: string;\n isOpen: boolean;\n onClose: () => void;\n title: string;\n field: React.ReactNode;\n children: React.ReactNode;\n initialFocusResolver?: (focusables: FocusableElement[]) => FocusableElement;\n}) => {\n const elRef = useRef<HTMLDialogElement>(null);\n const visualViewportHeightRef = useRef<HTMLDivElement>(null);\n\n useDialogScrollLock({\n open: isOpen,\n id,\n enableScrollChaining: false,\n elementRef: elRef,\n });\n\n const computeFocus = useCallback(\n (focusables: FocusableElement[]) => {\n if (initialFocusResolver) {\n return initialFocusResolver(focusables);\n }\n return (\n focusables.find(\n (focusable) => focusable.dataset.anv !== \"dialog-cancel-button\",\n ) || focusables[0]\n );\n },\n [initialFocusResolver],\n );\n\n useEffect(() => {\n if (isOpen) {\n elRef.current?.showModal();\n if (elRef.current) {\n computeFocus(tabbable(elRef.current)).focus();\n }\n } else {\n elRef.current?.close();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- Omitting computeFocus because we don't want to show/close the dialog on computeFocus change\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen) {\n const handleResize = () => {\n if (!visualViewportHeightRef.current) return;\n visualViewportHeightRef.current.style.height = `${window.visualViewport?.height ?? 0}px`;\n visualViewportHeightRef.current.style.maxHeight = `${window.visualViewport?.height ?? 0}px`;\n };\n window.visualViewport?.addEventListener(\"resize\", handleResize);\n return () => {\n window.visualViewport?.removeEventListener(\"resize\", handleResize);\n };\n }\n }, [isOpen]);\n\n return (\n <dialog\n ref={elRef}\n id={id}\n data-anv=\"field-dialog\"\n className={styles[\"field-dialog\"]}\n onKeyDown={(e) => {\n if (e.code === \"Escape\") {\n e.preventDefault();\n onClose();\n }\n }}\n >\n <div\n className={styles[\"field-dialog-visual-viewport-height\"]}\n ref={visualViewportHeightRef}\n >\n <Flex direction=\"row\" className={styles[\"header\"]}>\n <Text variant=\"headline\" el=\"h1\">\n {title}\n </Text>\n <span className={styles[\"close-container\"]}>\n <DialogContext.Provider value={{ close: onClose }}>\n <DialogCancelButton\n className={styles[\"close-button\"]}\n size=\"small\"\n appearance=\"ghost\"\n aria-label=\"Close dialog\"\n icon={Close}\n />\n </DialogContext.Provider>\n </span>\n </Flex>\n <Flex direction=\"column\" className={styles[\"field\"]}>\n {field}\n </Flex>\n <Flex direction=\"column\" className={styles[\"content\"]}>\n {children}\n </Flex>\n </div>\n </dialog>\n );\n};\n"],"names":["options","CheckboxChecked","styles","CheckboxOutline","CheckboxIndeterminate","Check","Close"],"mappings":"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"}
@@ -1,30 +1,31 @@
1
1
  @layer starter, reset, base, state, application;
2
2
  @layer base {
3
- ._select-field-list_dbxri_2 {
3
+ ._select-field-list_4c4yl_2 {
4
4
  margin: 0 !important;
5
+ padding: 0;
5
6
  }
6
- ._empty_dbxri_5 {
7
+ ._empty_4c4yl_6 {
7
8
  display: flex;
8
9
  justify-content: center;
9
10
  align-items: center;
10
11
  padding: 1rem;
11
12
  text-align: center;
12
13
  }
13
- ._load-more_dbxri_12 {
14
+ ._load-more_4c4yl_13 {
14
15
  display: flex;
15
16
  justify-content: center;
16
17
  align-items: center;
17
18
  text-align: center;
18
19
  min-height: 2.5rem;
19
20
  }
20
- ._scroller_dbxri_19 {
21
+ ._scroller_4c4yl_20 {
21
22
  overscroll-behavior: contain;
22
23
  overflow: auto;
23
24
  height: 100%;
24
25
  max-height: inherit;
25
26
  box-sizing: border-box;
26
27
  }
27
- ._scroll-sentinel_dbxri_26 {
28
+ ._scroll-sentinel_4c4yl_27 {
28
29
  position: relative;
29
30
  top: 0;
30
31
  width: 100%;