@servicetitan/anvil2 2.0.4 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/dist/{Calendar-jO-0jbbt.js → Calendar-D0CczOpQ.js} +3 -835
  3. package/dist/Calendar-D0CczOpQ.js.map +1 -0
  4. package/dist/{Calendar-DxLrWESu.js → Calendar-oNlBgZKB.js} +2 -2
  5. package/dist/{Calendar-DxLrWESu.js.map → Calendar-oNlBgZKB.js.map} +1 -1
  6. package/dist/Calendar.js +2 -2
  7. package/dist/{Checkbox-9VbydUcM.js → Checkbox-DIY-6agd.js} +12 -12
  8. package/dist/Checkbox-DIY-6agd.js.map +1 -0
  9. package/dist/{Checkbox-ZXftLNwB.js → Checkbox-DuzAqrE7.js} +2 -2
  10. package/dist/{Checkbox-ZXftLNwB.js.map → Checkbox-DuzAqrE7.js.map} +1 -1
  11. package/dist/Checkbox.js +1 -1
  12. package/dist/{Combobox-CNObHLjp.js → Combobox-CSGn20KQ.js} +14 -7
  13. package/dist/Combobox-CSGn20KQ.js.map +1 -0
  14. package/dist/Combobox.js +1 -1
  15. package/dist/{DataTable-CQpySyDq.js → DataTable-D30sE1Xt.js} +223 -19
  16. package/dist/DataTable-D30sE1Xt.js.map +1 -0
  17. package/dist/{DateFieldRange-BG86w0pX.js → DateFieldRange-DBOiqaML.js} +46 -36
  18. package/dist/DateFieldRange-DBOiqaML.js.map +1 -0
  19. package/dist/DateFieldRange.js +1 -1
  20. package/dist/{DateFieldSingle-Byu_jyye.js → DateFieldSingle-C4hU55MP.js} +38 -29
  21. package/dist/DateFieldSingle-C4hU55MP.js.map +1 -0
  22. package/dist/DateFieldSingle.js +1 -1
  23. package/dist/{DateFieldYearless-Dw1k3_PY.js → DateFieldYearless-BXkUiHIR.js} +14 -13
  24. package/dist/DateFieldYearless-BXkUiHIR.js.map +1 -0
  25. package/dist/DateFieldYearless.js +1 -1
  26. package/dist/{DateFieldYearlessRange--plyld10.js → DateFieldYearlessRange-CGffFnVT.js} +14 -13
  27. package/dist/DateFieldYearlessRange-CGffFnVT.js.map +1 -0
  28. package/dist/DateFieldYearlessRange.js +1 -1
  29. package/dist/{DaysOfTheWeek-vE310Rjp.js → DaysOfTheWeek-DJEDopC9.js} +9 -5
  30. package/dist/DaysOfTheWeek-DJEDopC9.js.map +1 -0
  31. package/dist/DaysOfTheWeek.js +1 -1
  32. package/dist/{Dialog-DZPaz84r.js → Dialog-BbsZMnCA.js} +4 -4
  33. package/dist/{Dialog-DZPaz84r.js.map → Dialog-BbsZMnCA.js.map} +1 -1
  34. package/dist/Dialog.js +1 -1
  35. package/dist/{Drawer-pMQOa2jH.js → Drawer-Dhq76ot3.js} +4 -4
  36. package/dist/{Drawer-pMQOa2jH.js.map → Drawer-Dhq76ot3.js.map} +1 -1
  37. package/dist/Drawer.js +1 -1
  38. package/dist/DrillDown.js +1 -1
  39. package/dist/{FieldDialog-Be54L3E-.js → FieldDialog-CAuhkCZY.js} +541 -142
  40. package/dist/FieldDialog-CAuhkCZY.js.map +1 -0
  41. package/dist/FieldDialog.css +58 -28
  42. package/dist/{FieldLabel-DSrHbw9U.js → FieldLabel-DL0D6fvc.js} +2 -2
  43. package/dist/{FieldLabel-DSrHbw9U.js.map → FieldLabel-DL0D6fvc.js.map} +1 -1
  44. package/dist/FieldLabel.js +1 -1
  45. package/dist/FieldMessage-DS0COrjp.js +132 -0
  46. package/dist/FieldMessage-DS0COrjp.js.map +1 -0
  47. package/dist/FieldMessage.css +18 -4
  48. package/dist/FieldMessage.js +2 -1
  49. package/dist/FieldMessage.js.map +1 -1
  50. package/dist/{Helper-CK-XjpR3.js → Helper-PNGm_U2X.js} +7 -4
  51. package/dist/Helper-PNGm_U2X.js.map +1 -0
  52. package/dist/{InputMask-DoqWRi3t.js → InputMask-Ds0W2fKy.js} +2 -2
  53. package/dist/{InputMask-DoqWRi3t.js.map → InputMask-Ds0W2fKy.js.map} +1 -1
  54. package/dist/InputMask.js +1 -1
  55. package/dist/{ListView-CtRhYAls.js → ListView-MMmJDM--.js} +2 -2
  56. package/dist/{ListView-CtRhYAls.js.map → ListView-MMmJDM--.js.map} +1 -1
  57. package/dist/ListView.js +1 -1
  58. package/dist/MultiSelectField.js +1 -1
  59. package/dist/{MultiSelectFieldSync-xj7jXas-.js → MultiSelectFieldSync-Bey99LzJ.js} +178 -58
  60. package/dist/MultiSelectFieldSync-Bey99LzJ.js.map +1 -0
  61. package/dist/NumberField-CDkEUfXW.js +237 -0
  62. package/dist/NumberField-CDkEUfXW.js.map +1 -0
  63. package/dist/NumberField.js +1 -1
  64. package/dist/{Page-vc7zs4tn.js → Page-BVxybI-j.js} +6 -6
  65. package/dist/{Page-vc7zs4tn.js.map → Page-BVxybI-j.js.map} +1 -1
  66. package/dist/Page.js +1 -1
  67. package/dist/{Popover-OOLK0hUz.js → Popover-4C5IVk8T.js} +7 -6
  68. package/dist/{Popover-OOLK0hUz.js.map → Popover-4C5IVk8T.js.map} +1 -1
  69. package/dist/Popover.css +15 -14
  70. package/dist/Popover.js +1 -1
  71. package/dist/{ProgressBar-HA9RPZfC.js → ProgressBar-BGwp-qnf.js} +16 -11
  72. package/dist/ProgressBar-BGwp-qnf.js.map +1 -0
  73. package/dist/ProgressBar.js +1 -1
  74. package/dist/{Radio-31wKzlZ4.js → Radio-BRcpSu-d.js} +12 -12
  75. package/dist/Radio-BRcpSu-d.js.map +1 -0
  76. package/dist/{Radio-BwWDJuLF.js → Radio-D7hNws2b.js} +2 -2
  77. package/dist/{Radio-BwWDJuLF.js.map → Radio-D7hNws2b.js.map} +1 -1
  78. package/dist/Radio.js +1 -1
  79. package/dist/{SelectCard-C91twG1S.js → SelectCard-Bag44PmE.js} +3 -3
  80. package/dist/{SelectCard-C91twG1S.js.map → SelectCard-Bag44PmE.js.map} +1 -1
  81. package/dist/SelectCard.js +1 -1
  82. package/dist/SelectField.js +1 -1
  83. package/dist/{SelectFieldSync-BFsJssdD.js → SelectFieldSync-CigqXq3T.js} +67 -50
  84. package/dist/SelectFieldSync-CigqXq3T.js.map +1 -0
  85. package/dist/{SelectTrigger-Cxhx9IVo.js → SelectTrigger-DgsvUfyl.js} +2 -2
  86. package/dist/{SelectTrigger-Cxhx9IVo.js.map → SelectTrigger-DgsvUfyl.js.map} +1 -1
  87. package/dist/SelectTrigger.js +1 -1
  88. package/dist/{SelectTriggerBase-aaOWep-V.js → SelectTriggerBase-OxfNqdIq.js} +12 -7
  89. package/dist/SelectTriggerBase-OxfNqdIq.js.map +1 -0
  90. package/dist/{Stepper-Jv9A3Ned.js → Stepper-D8lkCP8Y.js} +11 -2
  91. package/dist/Stepper-D8lkCP8Y.js.map +1 -0
  92. package/dist/Stepper.js +1 -1
  93. package/dist/{Switch-DQICcdAv.js → Switch-D0zwZCg4.js} +2 -2
  94. package/dist/{Switch-DQICcdAv.js.map → Switch-D0zwZCg4.js.map} +1 -1
  95. package/dist/Switch.js +1 -1
  96. package/dist/Table.js +1 -1
  97. package/dist/{TextField-CDiiYSlT.js → TextField-BycenT6H.js} +13 -12
  98. package/dist/TextField-BycenT6H.js.map +1 -0
  99. package/dist/{TextField-CnYxS52Y.js → TextField-Dfzn2HeL.js} +2 -2
  100. package/dist/{TextField-CnYxS52Y.js.map → TextField-Dfzn2HeL.js.map} +1 -1
  101. package/dist/TextField.js +1 -1
  102. package/dist/{Textarea-BnHIDj2P.js → Textarea-BwbwJP6z.js} +13 -12
  103. package/dist/Textarea-BwbwJP6z.js.map +1 -0
  104. package/dist/Textarea.js +1 -1
  105. package/dist/{TimeField-ChqK40k_.js → TimeField-B0WSzSfJ.js} +4 -4
  106. package/dist/{TimeField-ChqK40k_.js.map → TimeField-B0WSzSfJ.js.map} +1 -1
  107. package/dist/TimeField.js +1 -1
  108. package/dist/TimezoneMessage-Cnsl4cHT.js +84 -0
  109. package/dist/TimezoneMessage-Cnsl4cHT.js.map +1 -0
  110. package/dist/TimezoneMessage.css +7 -0
  111. package/dist/Toast.js +2 -2
  112. package/dist/{Toaster-BlycAc63.js → Toaster-9Q_yaKGu.js} +18 -18
  113. package/dist/Toaster-9Q_yaKGu.js.map +1 -0
  114. package/dist/{Toaster-DW_bi2L9.js → Toaster-DHo8dnWH.js} +2 -2
  115. package/dist/{Toaster-DW_bi2L9.js.map → Toaster-DHo8dnWH.js.map} +1 -1
  116. package/dist/{Toolbar-vBomnRKG.js → Toolbar-CVOenuCF.js} +70 -23
  117. package/dist/Toolbar-CVOenuCF.js.map +1 -0
  118. package/dist/Toolbar.js +1 -1
  119. package/dist/{Tooltip-CUiAJXak.js → Tooltip-Bt62hC5J.js} +5 -5
  120. package/dist/{Tooltip-CUiAJXak.js.map → Tooltip-Bt62hC5J.js.map} +1 -1
  121. package/dist/Tooltip.css +9 -8
  122. package/dist/Tooltip.js +1 -1
  123. package/dist/{YearlessDateInputWithPicker-DZSb8sPf.js → YearlessDateInputWithPicker-ztozRk-X.js} +3 -3
  124. package/dist/{YearlessDateInputWithPicker-DZSb8sPf.js.map → YearlessDateInputWithPicker-ztozRk-X.js.map} +1 -1
  125. package/dist/beta/components/MultiSelectField/MultiSelectField.d.ts +2 -0
  126. package/dist/beta/components/MultiSelectField/MultiSelectFieldSync.d.ts +43 -4
  127. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldList.d.ts +5 -5
  128. package/dist/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +13 -2
  129. package/dist/beta/components/MultiSelectField/stories/MultiSelectField.stories.data.d.ts +1 -0
  130. package/dist/beta/components/MultiSelectField/types.d.ts +52 -8
  131. package/dist/beta/components/SelectField/SelectFieldSync.d.ts +10 -3
  132. package/dist/beta/components/SelectField/internal/FieldListBase.d.ts +6 -5
  133. package/dist/beta/components/SelectField/internal/SelectFieldList.d.ts +4 -2
  134. package/dist/beta/components/SelectField/internal/SelectFieldListItem.d.ts +2 -1
  135. package/dist/beta/components/SelectField/internal/VirtualizedFieldListBase.d.ts +2 -0
  136. package/dist/beta/components/SelectField/internal/useCombo.d.ts +3 -1
  137. package/dist/beta/components/SelectField/internal/useFieldListSections.d.ts +55 -0
  138. package/dist/beta/components/SelectField/stories/SelectField.stories.data.d.ts +1 -0
  139. package/dist/beta/components/SelectField/types.d.ts +24 -6
  140. package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableNumberCell.d.ts +7 -0
  141. package/dist/beta/components/Table/DataTable/internal/util/getTanStackColumnDef.d.ts +1 -0
  142. package/dist/beta/components/Table/DataTable/stories/DataTable.story-data.d.ts +1 -0
  143. package/dist/beta/components/Table/createColumnHelper.d.ts +36 -9
  144. package/dist/beta/components/Table/types.d.ts +54 -4
  145. package/dist/beta/components/Toolbar/Filters/internal/utils/filter-state.d.ts +1 -0
  146. package/dist/beta.js +7 -7
  147. package/dist/components/ButtonToggle/ButtonToggle.d.ts +1 -1
  148. package/dist/components/Checkbox/Checkbox.d.ts +2 -1
  149. package/dist/components/Checkbox/CheckboxGroup.d.ts +16 -8
  150. package/dist/components/Checkbox/internal/Checkbox.d.ts +1 -1
  151. package/dist/components/DateFieldRange/DateFieldRange.d.ts +8 -1
  152. package/dist/components/DateFieldRange/internal/DateFieldRangeCalendar.d.ts +3 -1
  153. package/dist/components/DateFieldSingle/DateFieldSingle.d.ts +8 -1
  154. package/dist/components/DateFieldSingle/internal/DateFieldSingleCalendar.d.ts +3 -1
  155. package/dist/components/DateFieldSingle/internal/TimezoneMessage.d.ts +6 -0
  156. package/dist/components/DateFieldSingle/internal/utils.d.ts +11 -0
  157. package/dist/components/DateFieldYearless/DateFieldYearless.d.ts +8 -3
  158. package/dist/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +12 -1
  159. package/dist/components/DaysOfTheWeek/DaysOfTheWeek.d.ts +20 -6
  160. package/dist/components/Dialog/internal/useInitialFocus.d.ts +5 -1
  161. package/dist/components/FieldMessage/FieldMessage.d.ts +39 -20
  162. package/dist/components/FieldMessage/index.d.ts +1 -0
  163. package/dist/components/FieldMessage/utils.d.ts +7 -0
  164. package/dist/components/NumberField/NumberField.d.ts +24 -2
  165. package/dist/components/Page/Page.d.ts +2 -2
  166. package/dist/components/ProgressBar/ProgressBar.d.ts +8 -3
  167. package/dist/components/Radio/Radio.d.ts +2 -1
  168. package/dist/components/Radio/RadioGroup.d.ts +16 -8
  169. package/dist/components/SelectTrigger/internal/SelectTriggerBase.d.ts +1 -1
  170. package/dist/components/Stepper/Stepper.d.ts +6 -2
  171. package/dist/components/TextField/internal/TextField.d.ts +12 -1
  172. package/dist/components/Textarea/Textarea.d.ts +8 -5
  173. package/dist/index-DXeGMe23.js +836 -0
  174. package/dist/index-DXeGMe23.js.map +1 -0
  175. package/dist/{index.esm-BMOZFPwN.js → index.esm-C2ZhC_8d.js} +2 -2
  176. package/dist/{index.esm-BMOZFPwN.js.map → index.esm-C2ZhC_8d.js.map} +1 -1
  177. package/dist/{useOnClickOutside-Cyqbe1n3.js → index.esm-K9kxJhLx.js} +88 -94
  178. package/dist/index.esm-K9kxJhLx.js.map +1 -0
  179. package/dist/index.js +31 -30
  180. package/dist/index.js.map +1 -1
  181. package/dist/internal/components/Helper/Helper.d.ts +12 -3
  182. package/dist/internal/components/StatusIcon/StatusIcon.d.ts +45 -0
  183. package/dist/internal/components/StatusIcon/index.d.ts +1 -0
  184. package/dist/internal/functions/index.d.ts +1 -0
  185. package/dist/internal/functions/warnOnce.d.ts +5 -0
  186. package/dist/internal/hooks/useNumberField/useNumberField.d.ts +1 -1
  187. package/dist/{useDrilldown-lAdB3FFW.js → useDrilldown-jbU4Cs5l.js} +2 -598
  188. package/dist/useDrilldown-jbU4Cs5l.js.map +1 -0
  189. package/dist/{useInitialFocus-nOW12jQ5.js → useInitialFocus-BRRbylek.js} +2 -2
  190. package/dist/{useInitialFocus-nOW12jQ5.js.map → useInitialFocus-BRRbylek.js.map} +1 -1
  191. package/dist/{NumberField-W1k8V5Qq.js → useNumberField-eMyk7MB8.js} +5 -235
  192. package/dist/useNumberField-eMyk7MB8.js.map +1 -0
  193. package/dist/useOnClickOutside-Zw5vzxSq.js +71 -0
  194. package/dist/useOnClickOutside-Zw5vzxSq.js.map +1 -0
  195. package/dist/utils-pudAMGnO.js +25 -0
  196. package/dist/utils-pudAMGnO.js.map +1 -0
  197. package/package.json +9 -8
  198. package/dist/Calendar-jO-0jbbt.js.map +0 -1
  199. package/dist/Checkbox-9VbydUcM.js.map +0 -1
  200. package/dist/Combobox-CNObHLjp.js.map +0 -1
  201. package/dist/DataTable-CQpySyDq.js.map +0 -1
  202. package/dist/DateFieldRange-BG86w0pX.js.map +0 -1
  203. package/dist/DateFieldSingle-Byu_jyye.js.map +0 -1
  204. package/dist/DateFieldYearless-Dw1k3_PY.js.map +0 -1
  205. package/dist/DateFieldYearlessRange--plyld10.js.map +0 -1
  206. package/dist/DaysOfTheWeek-vE310Rjp.js.map +0 -1
  207. package/dist/FieldDialog-Be54L3E-.js.map +0 -1
  208. package/dist/FieldMessage-tEr6rWXS.js +0 -54
  209. package/dist/FieldMessage-tEr6rWXS.js.map +0 -1
  210. package/dist/Helper-CK-XjpR3.js.map +0 -1
  211. package/dist/MultiSelectFieldSync-xj7jXas-.js.map +0 -1
  212. package/dist/NumberField-W1k8V5Qq.js.map +0 -1
  213. package/dist/ProgressBar-HA9RPZfC.js.map +0 -1
  214. package/dist/Radio-31wKzlZ4.js.map +0 -1
  215. package/dist/SelectFieldSync-BFsJssdD.js.map +0 -1
  216. package/dist/SelectTriggerBase-aaOWep-V.js.map +0 -1
  217. package/dist/Stepper-Jv9A3Ned.js.map +0 -1
  218. package/dist/TextField-CDiiYSlT.js.map +0 -1
  219. package/dist/Textarea-BnHIDj2P.js.map +0 -1
  220. package/dist/Toaster-BlycAc63.js.map +0 -1
  221. package/dist/Toolbar-vBomnRKG.js.map +0 -1
  222. package/dist/useDrilldown-lAdB3FFW.js.map +0 -1
  223. package/dist/useOnClickOutside-Cyqbe1n3.js.map +0 -1
  224. package/dist/utils-BHKRoLps.js +0 -60
  225. package/dist/utils-BHKRoLps.js.map +0 -1
@@ -1,24 +1,30 @@
1
- import { useState, useRef, useCallback, useEffect, useMemo, useId } from 'react';
1
+ import { useState, useRef, useCallback, useEffect, useMemo, forwardRef, useId, useImperativeHandle } from 'react';
2
2
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
3
3
  import { S as Spinner } from './Spinner-CpEm3Lud.js';
4
4
  import { B as Button } from './Button-l7pTJdPc.js';
5
5
  import { c as cx } from './index-SvGbrGuT.js';
6
+ import { u as useIntersectionObserver } from './useIntersectionObserver-BEmMDO3P.js';
7
+ import { T as Text } from './Text-DhheKsns.js';
8
+ import { D as Divider } from './Divider-De04mOU6.js';
9
+ import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
10
+ import { S as SrOnly } from './SrOnly-CrdBTl6E.js';
6
11
  import { F as Flex } from './Flex-CUtXN-C0.js';
7
12
  import { I as Icon } from './Icon-Bcil6aBo.js';
13
+ import { A as Avatar } from './Avatar-DShevhcs.js';
14
+ import { C as Chip } from './Chip-Bc7jiIJ1.js';
8
15
  import { a as SvgCheckBox, b as SvgCheckBoxOutlineBlank, S as SvgIndeterminateCheckBox } from './indeterminate_check_box-B4zobNlt.js';
9
16
  import { S as SvgCheck } from './check-Cf67OWrZ.js';
10
- import { T as Text } from './Text-DhheKsns.js';
11
- import { u as useIntersectionObserver } from './useIntersectionObserver-BEmMDO3P.js';
12
- import { D as Divider } from './Divider-De04mOU6.js';
13
- import { S as SrOnly } from './SrOnly-CrdBTl6E.js';
14
- import { F as FieldLabel } from './FieldLabel-DSrHbw9U.js';
15
- import { a as useOnClickOutside, t as tabbable } from './useOnClickOutside-Cyqbe1n3.js';
17
+ import { d as defaultRangeExtractor, u as useVirtualizer } from './index-DXeGMe23.js';
18
+ import { a as useCombobox } from './match-sorter.esm-B3vwg1-X.js';
19
+ import { F as FieldLabel } from './FieldLabel-DL0D6fvc.js';
20
+ import { a as useOnClickOutside } from './useOnClickOutside-Zw5vzxSq.js';
16
21
  import { c as computePosition, a as autoUpdate, o as offset, h as autoPlacement, g as size } from './floating-ui.react-dom-BZbDMh89.js';
17
22
  import { u as useBreakpoint } from './useBreakpoint-BP3HZXmh.js';
18
23
  import './anvil-fonts.css';import './FieldDialog.css';/* empty css */
19
24
  import { D as DialogCancelButton } from './DialogCancelButton-GuN5lgR-.js';
20
25
  import { S as SvgClose } from './close-DZj38AEh.js';
21
26
  import { D as DialogContext } from './DialogContext-DBgtApl9.js';
27
+ import { t as tabbable } from './index.esm-K9kxJhLx.js';
22
28
  import { u as useDialogScrollLock } from './useDialogScrollLock-BW-aVboo.js';
23
29
 
24
30
  const DEFAULT_PAGE_SIZE = 20;
@@ -172,34 +178,42 @@ function useSelectFieldLoading(config) {
172
178
  };
173
179
  }
174
180
 
175
- const empty = "_empty_1h0fh_6";
176
- const scroller = "_scroller_1h0fh_20";
177
- const divider = "_divider_1h0fh_47";
181
+ const empty = "_empty_kcs6v_6";
182
+ const scroller = "_scroller_kcs6v_20";
183
+ const divider = "_divider_kcs6v_48";
178
184
  const styles$3 = {
179
- "select-field-list": "_select-field-list_1h0fh_2",
185
+ "select-field-list": "_select-field-list_kcs6v_2",
180
186
  empty: empty,
181
- "load-more": "_load-more_1h0fh_13",
187
+ "load-more": "_load-more_kcs6v_13",
182
188
  scroller: scroller,
183
- "pinned-section": "_pinned-section_1h0fh_33",
184
- "pinned-section-header": "_pinned-section-header_1h0fh_36",
185
- "pinned-section-list": "_pinned-section-list_1h0fh_42",
189
+ "scroll-sentinel": "_scroll-sentinel_kcs6v_27",
190
+ "pinned-section": "_pinned-section_kcs6v_34",
191
+ "pinned-section-header": "_pinned-section-header_kcs6v_37",
192
+ "pinned-section-list": "_pinned-section-list_kcs6v_43",
186
193
  divider: divider
187
194
  };
188
195
 
189
- const highlighted = "_highlighted_15431_26";
190
- const disabled = "_disabled_15431_29";
191
- const single = "_single_15431_33";
192
- const selected = "_selected_15431_33";
193
- const checkbox = "_checkbox_15431_36";
194
- const checked = "_checked_15431_40";
195
- const unchecked = "_unchecked_15431_43";
196
- const indeterminate = "_indeterminate_15431_46";
196
+ const floating = "_floating_1nisb_32";
197
+ const highlighted = "_highlighted_1nisb_38";
198
+ const disabled = "_disabled_1nisb_41";
199
+ const description = "_description_1nisb_45";
200
+ const single = "_single_1nisb_51";
201
+ const selected = "_selected_1nisb_51";
202
+ const checkbox = "_checkbox_1nisb_60";
203
+ const checked = "_checked_1nisb_64";
204
+ const unchecked = "_unchecked_1nisb_67";
205
+ const indeterminate = "_indeterminate_1nisb_70";
197
206
  const styles$2 = {
198
- "select-field-list-item": "_select-field-list-item_15431_2",
207
+ "select-field-list-item": "_select-field-list-item_1nisb_2",
208
+ "bulk-action": "_bulk-action_1nisb_27",
209
+ floating: floating,
199
210
  highlighted: highlighted,
200
211
  disabled: disabled,
212
+ description: description,
213
+ "chips-row": "_chips-row_1nisb_48",
201
214
  single: single,
202
215
  selected: selected,
216
+ "side-content": "_side-content_1nisb_54",
203
217
  checkbox: checkbox,
204
218
  checked: checked,
205
219
  unchecked: unchecked,
@@ -213,8 +227,10 @@ const SelectFieldListItem = ({
213
227
  disabled,
214
228
  getItemProps,
215
229
  selectionType,
216
- checked
230
+ checked,
231
+ isListScrolled = false
217
232
  }) => {
233
+ const isBulkAction = item.type === "select-all" || item.type === "select-filtered";
218
234
  const checkbox = useMemo(() => {
219
235
  if (checked === "checked")
220
236
  return { icon: SvgCheckBox, class: styles$2["checked"] };
@@ -224,41 +240,84 @@ const SelectFieldListItem = ({
224
240
  return { icon: SvgIndeterminateCheckBox, class: styles$2["indeterminate"] };
225
241
  return { icon: SvgCheckBoxOutlineBlank, class: styles$2["unchecked"] };
226
242
  }, [checked]);
243
+ const content = item.original.content;
244
+ const hasAvatar = !!content?.avatar;
245
+ const hasChips = !!content?.chips?.length;
246
+ const hasIcon = !!content?.icon;
227
247
  return /* @__PURE__ */ jsxs(
228
248
  "li",
229
249
  {
230
250
  ...getItemProps({
231
251
  item,
232
252
  index,
253
+ "data-type": item.type,
233
254
  className: cx(styles$2["select-field-list-item"], {
234
255
  [styles$2.highlighted]: highlighted,
235
256
  [styles$2.selected]: checked === "checked",
236
257
  [styles$2.disabled]: disabled,
237
258
  [styles$2.single]: selectionType === "single",
238
- [styles$2.multiple]: selectionType === "multiple"
259
+ [styles$2["bulk-action"]]: isBulkAction,
260
+ [styles$2.floating]: isBulkAction && isListScrolled
239
261
  })
240
262
  }),
241
263
  children: [
242
- selectionType === "multiple" && /* @__PURE__ */ jsx("div", { children: checked === "loading" ? /* @__PURE__ */ jsx(Spinner, { size: "medium" }) : /* @__PURE__ */ jsx(
264
+ selectionType === "multiple" && /* @__PURE__ */ jsx("div", { className: styles$2["side-content"], children: checked === "loading" ? /* @__PURE__ */ jsx(
265
+ Flex,
266
+ {
267
+ alignItems: "center",
268
+ justifyContent: "center",
269
+ style: { height: "1.5rem", width: "1.5rem" },
270
+ children: /* @__PURE__ */ jsx(Spinner, { size: "small" })
271
+ }
272
+ ) : (
273
+ // Decorative: selection state is conveyed by aria-selected on the <li>
274
+ /* @__PURE__ */ jsx(
275
+ Icon,
276
+ {
277
+ "aria-hidden": "true",
278
+ size: "large",
279
+ svg: checkbox.icon,
280
+ className: cx(styles$2["checkbox"], checkbox.class)
281
+ }
282
+ )
283
+ ) }),
284
+ hasAvatar && // aria-hidden: Avatar has internal <SrOnly> text that would duplicate the option label
285
+ /* @__PURE__ */ jsx("div", { className: styles$2["side-content"], "aria-hidden": "true", children: /* @__PURE__ */ jsx(Avatar, { size: "medium", ...content.avatar }) }),
286
+ /* @__PURE__ */ jsxs(Flex, { grow: 1, shrink: 1, direction: "column", children: [
287
+ /* @__PURE__ */ jsx(Text, { size: "medium", children: content?.title ?? item.original.label }),
288
+ content?.description && /* @__PURE__ */ jsx(Text, { size: "small", className: styles$2["description"], children: content.description }),
289
+ hasChips && // Group label gives screen readers context that these are tags
290
+ /* @__PURE__ */ jsx(
291
+ Flex,
292
+ {
293
+ wrap: "wrap",
294
+ gap: "1",
295
+ className: styles$2["chips-row"],
296
+ role: "group",
297
+ "aria-label": "Tags",
298
+ children: content.chips.map((chip, i) => /* @__PURE__ */ jsx(Chip, { size: "small", ...chip }, `${chip.label}-${i}`))
299
+ }
300
+ )
301
+ ] }),
302
+ hasIcon && /* @__PURE__ */ jsx("div", { className: styles$2["side-content"], children: /* @__PURE__ */ jsx(
243
303
  Icon,
244
304
  {
245
305
  size: "large",
246
- svg: checkbox.icon,
247
- className: cx(styles$2["checkbox"], checkbox.class)
306
+ svg: content.icon.svg,
307
+ color: content.icon.color,
308
+ "aria-hidden": content.icon.label ? void 0 : "true",
309
+ "aria-label": content.icon.label
248
310
  }
249
311
  ) }),
250
- /* @__PURE__ */ jsxs(Flex, { grow: 1, shrink: 1, direction: "column", gap: "1", children: [
251
- /* @__PURE__ */ jsx(Text, { size: "medium", children: item.original.content?.title ?? item.original.label }),
252
- item.original.content?.description && /* @__PURE__ */ jsx(Text, { size: "small", children: item.original.content?.description })
253
- ] }),
254
- selectionType === "single" && checked === "checked" && /* @__PURE__ */ jsx(
312
+ selectionType === "single" && checked === "checked" && /* @__PURE__ */ jsx("div", { className: styles$2["side-content"], children: /* @__PURE__ */ jsx(
255
313
  Icon,
256
314
  {
315
+ "aria-hidden": "true",
257
316
  size: "medium",
258
317
  svg: SvgCheck,
259
318
  className: cx(styles$2["checkbox"], styles$2["checked"])
260
319
  }
261
- )
320
+ ) })
262
321
  ]
263
322
  },
264
323
  item.id
@@ -279,34 +338,8 @@ const InView = ({
279
338
  return /* @__PURE__ */ jsx("div", { ref, children });
280
339
  };
281
340
 
282
- const FieldListBase = ({
283
- isOpen,
284
- items,
285
- getMenuProps,
286
- getItemProps,
287
- highlightedIndex,
288
- getCheckedState,
289
- selectionType,
290
- hasMore,
291
- onLoadMore,
292
- loading,
293
- loadingMore,
294
- disableAutoLoadMore,
295
- disabled,
296
- className,
297
- style,
298
- sectionsMeta = []
299
- }) => {
300
- const baseId = useId();
301
- const anyPinnedLoading = sectionsMeta.some(
302
- (s) => s.type === "pinned" && s.loading
303
- );
304
- const handleLoaderVisibilityChange = (visible) => {
305
- if (visible && !disableAutoLoadMore) {
306
- onLoadMore();
307
- }
308
- };
309
- const sections = useMemo(() => {
341
+ const useFieldListSections = (items, sectionsMeta) => {
342
+ return useMemo(() => {
310
343
  if (sectionsMeta.length === 0) {
311
344
  return [
312
345
  {
@@ -366,86 +399,450 @@ const FieldListBase = ({
366
399
  }
367
400
  return result;
368
401
  }, [items, sectionsMeta]);
369
- const renderItem = (item, index) => /* @__PURE__ */ jsx(
370
- SelectFieldListItem,
371
- {
372
- item,
373
- index,
374
- getItemProps,
375
- selectionType,
376
- checked: getCheckedState(item),
377
- highlighted: highlightedIndex === index,
378
- disabled: (disabled || item.disabled) ?? false
379
- },
380
- item.id
381
- );
382
- const renderSections = () => {
383
- const result = [];
384
- sections.forEach((section, sectionIndex) => {
385
- const isLastSection = sectionIndex === sections.length - 1;
386
- if (section.type === "pinned" || section.type === "group") {
387
- const labelId = `${baseId}-section-${sectionIndex}`;
388
- result.push(
389
- /* @__PURE__ */ jsxs(
390
- "li",
391
- {
392
- role: "group",
393
- "aria-labelledby": labelId,
394
- className: styles$3["pinned-section"],
395
- children: [
396
- /* @__PURE__ */ jsx("span", { id: labelId, className: styles$3["pinned-section-header"], children: /* @__PURE__ */ jsx(Text, { variant: "eyebrow", children: section.label }) }),
397
- /* @__PURE__ */ jsx("ul", { className: styles$3["pinned-section-list"], children: section.items.map(({ item, index }) => renderItem(item, index)) })
398
- ]
399
- },
400
- `section-${sectionIndex}`
401
- )
402
- );
403
- if (!isLastSection) {
402
+ };
403
+ function flattenSectionsToVirtualRows(sections, hasMore) {
404
+ const virtualRows = [];
405
+ const downshiftIndexToVirtualRowIndex = {};
406
+ const stickyIndices = [];
407
+ sections.forEach((section, sectionIndex) => {
408
+ const isLastSection = sectionIndex === sections.length - 1;
409
+ if (section.type === "pinned" || section.type === "group") {
410
+ virtualRows.push({
411
+ type: "header",
412
+ label: section.label,
413
+ sectionIndex
414
+ });
415
+ section.items.forEach(({ item, index: downshiftIndex }) => {
416
+ downshiftIndexToVirtualRowIndex[downshiftIndex] = virtualRows.length;
417
+ virtualRows.push({ type: "item", item, downshiftIndex });
418
+ });
419
+ if (!isLastSection) {
420
+ virtualRows.push({ type: "divider", sectionIndex });
421
+ }
422
+ } else {
423
+ section.items.forEach(({ item, index: downshiftIndex }) => {
424
+ const isBulkAction = item.type === "select-all" || item.type === "select-filtered";
425
+ if (isBulkAction) {
426
+ stickyIndices.push(virtualRows.length);
427
+ }
428
+ downshiftIndexToVirtualRowIndex[downshiftIndex] = virtualRows.length;
429
+ virtualRows.push({ type: "item", item, downshiftIndex });
430
+ });
431
+ }
432
+ });
433
+ if (hasMore) {
434
+ virtualRows.push({ type: "load-more" });
435
+ }
436
+ return { virtualRows, downshiftIndexToVirtualRowIndex, stickyIndices };
437
+ }
438
+
439
+ const FieldListBase = forwardRef(
440
+ ({
441
+ isOpen,
442
+ items,
443
+ getMenuProps,
444
+ getItemProps,
445
+ highlightedIndex,
446
+ getCheckedState,
447
+ selectionType,
448
+ hasMore,
449
+ onLoadMore,
450
+ loading,
451
+ loadingMore,
452
+ disableAutoLoadMore,
453
+ disabled,
454
+ className,
455
+ style,
456
+ sectionsMeta = []
457
+ }, ref) => {
458
+ const baseId = useId();
459
+ const scrollSentinelRef = useRef(null);
460
+ const scrollerRef = useRef(null);
461
+ const [isScrolled, setIsScrolled] = useState(false);
462
+ useImperativeHandle(ref, () => ({
463
+ scrollToTop: () => {
464
+ if (scrollerRef.current) {
465
+ scrollerRef.current.scrollTop = 0;
466
+ }
467
+ }
468
+ }));
469
+ useEffect(() => {
470
+ if (!isOpen) {
471
+ setIsScrolled(false);
472
+ return;
473
+ }
474
+ if (!scrollSentinelRef.current) return;
475
+ const observer = new IntersectionObserver(
476
+ (entries) => {
477
+ entries.forEach((entry) => {
478
+ setIsScrolled(!entry.isIntersecting);
479
+ });
480
+ },
481
+ { threshold: 0, root: scrollerRef.current }
482
+ );
483
+ observer.observe(scrollSentinelRef.current);
484
+ return () => observer.disconnect();
485
+ }, [isOpen]);
486
+ const anyPinnedLoading = sectionsMeta.some(
487
+ (s) => s.type === "pinned" && s.loading
488
+ );
489
+ const handleLoaderVisibilityChange = (visible) => {
490
+ if (visible && !disableAutoLoadMore) {
491
+ onLoadMore();
492
+ }
493
+ };
494
+ const sections = useFieldListSections(items, sectionsMeta);
495
+ const renderItem = (item, index) => /* @__PURE__ */ jsx(
496
+ SelectFieldListItem,
497
+ {
498
+ item,
499
+ index,
500
+ getItemProps,
501
+ selectionType,
502
+ checked: getCheckedState(item),
503
+ highlighted: highlightedIndex === index,
504
+ disabled: (disabled || item.disabled) ?? false,
505
+ isListScrolled: isScrolled
506
+ },
507
+ item.id
508
+ );
509
+ const renderSections = () => {
510
+ const result = [];
511
+ sections.forEach((section, sectionIndex) => {
512
+ const isLastSection = sectionIndex === sections.length - 1;
513
+ if (section.type === "pinned" || section.type === "group") {
514
+ const labelId = `${baseId}-section-${sectionIndex}`;
404
515
  result.push(
405
- /* @__PURE__ */ jsx(
516
+ /* @__PURE__ */ jsxs(
406
517
  "li",
407
518
  {
408
- role: "separator",
409
- className: styles$3["divider"],
410
- children: /* @__PURE__ */ jsx(Divider, {})
519
+ role: "group",
520
+ "aria-labelledby": labelId,
521
+ className: styles$3["pinned-section"],
522
+ children: [
523
+ /* @__PURE__ */ jsx("span", { id: labelId, className: styles$3["pinned-section-header"], children: /* @__PURE__ */ jsx(Text, { variant: "eyebrow", children: section.label }) }),
524
+ /* @__PURE__ */ jsx("ul", { className: styles$3["pinned-section-list"], children: section.items.map(
525
+ ({ item, index }) => renderItem(item, index)
526
+ ) })
527
+ ]
411
528
  },
412
- `divider-${sectionIndex}`
529
+ `section-${sectionIndex}`
413
530
  )
414
531
  );
532
+ if (!isLastSection) {
533
+ result.push(
534
+ /* @__PURE__ */ jsx(
535
+ "li",
536
+ {
537
+ role: "separator",
538
+ className: styles$3["divider"],
539
+ children: /* @__PURE__ */ jsx(Divider, {})
540
+ },
541
+ `divider-${sectionIndex}`
542
+ )
543
+ );
544
+ }
545
+ } else {
546
+ section.items.forEach(({ item, index }) => {
547
+ result.push(renderItem(item, index));
548
+ });
415
549
  }
416
- } else {
417
- section.items.forEach(({ item, index }) => {
418
- result.push(renderItem(item, index));
419
- });
550
+ });
551
+ return result;
552
+ };
553
+ const menuProps = getMenuProps({
554
+ className: cx(styles$3["scroller"], className),
555
+ style
556
+ });
557
+ const menuRef = useMergeRefs([menuProps.ref, scrollerRef]);
558
+ return /* @__PURE__ */ jsx("div", { ...menuProps, ref: menuRef, children: /* @__PURE__ */ jsxs("ul", { className: styles$3["select-field-list"], children: [
559
+ isOpen && /* @__PURE__ */ jsx(
560
+ "li",
561
+ {
562
+ ref: scrollSentinelRef,
563
+ className: styles$3["scroll-sentinel"],
564
+ role: "presentation",
565
+ "aria-hidden": "true"
566
+ }
567
+ ),
568
+ isOpen && /* @__PURE__ */ jsx(Fragment, { children: loading || anyPinnedLoading ? /* @__PURE__ */ jsx("li", { role: "presentation", className: styles$3["empty"], children: /* @__PURE__ */ jsx(Spinner, { size: "medium" }) }) : items.length > 0 ? renderSections() : /* @__PURE__ */ jsx("li", { role: "presentation", className: styles$3["empty"], children: /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "No match found" }) }) }),
569
+ loadingMore ? /* @__PURE__ */ jsxs("li", { role: "presentation", className: styles$3["load-more"], children: [
570
+ /* @__PURE__ */ jsx(Spinner, { size: "small" }),
571
+ /* @__PURE__ */ jsx(SrOnly, { children: "Loading more..." })
572
+ ] }) : hasMore && !loading ? /* @__PURE__ */ jsx("li", { role: "presentation", children: /* @__PURE__ */ jsx(
573
+ InView,
574
+ {
575
+ onVisibilityChange: handleLoaderVisibilityChange,
576
+ rootMargin: "0px 0px -100px 0px",
577
+ children: /* @__PURE__ */ jsx("div", { className: styles$3["load-more"], children: /* @__PURE__ */ jsx(
578
+ Button,
579
+ {
580
+ appearance: "secondary",
581
+ size: "small",
582
+ onClick: onLoadMore,
583
+ children: "Load more"
584
+ }
585
+ ) })
586
+ }
587
+ ) }) : null
588
+ ] }) });
589
+ }
590
+ );
591
+ FieldListBase.displayName = "FieldListBase";
592
+
593
+ const EST_PADDING_BLOCK = 16;
594
+ const EST_LINE_HEIGHT = 18;
595
+ const EST_CHIP_ROW_HEIGHT = 28;
596
+ const EST_SIDE_CONTENT_HEIGHT = 40;
597
+ const EST_HEADER_HEIGHT = 32;
598
+ const EST_DIVIDER_HEIGHT = 17;
599
+ const EST_LOAD_MORE_HEIGHT = 40;
600
+ const EST_BASE_ITEM_HEIGHT = EST_PADDING_BLOCK + EST_LINE_HEIGHT;
601
+ function estimateRowHeight(row) {
602
+ if (row.type === "header") return EST_HEADER_HEIGHT;
603
+ if (row.type === "divider") return EST_DIVIDER_HEIGHT;
604
+ if (row.type === "load-more") return EST_LOAD_MORE_HEIGHT;
605
+ const content = row.item.original.content;
606
+ if (!content) return EST_BASE_ITEM_HEIGHT;
607
+ let contentHeight = EST_LINE_HEIGHT;
608
+ if (content.description) contentHeight += EST_LINE_HEIGHT;
609
+ if (content.chips?.length) contentHeight += EST_CHIP_ROW_HEIGHT;
610
+ if (content.avatar || content.icon)
611
+ contentHeight = Math.max(contentHeight, EST_SIDE_CONTENT_HEIGHT);
612
+ return EST_PADDING_BLOCK + contentHeight;
613
+ }
614
+ const VirtualizedFieldListBase = forwardRef(
615
+ ({
616
+ isOpen,
617
+ items,
618
+ getMenuProps,
619
+ getItemProps,
620
+ highlightedIndex,
621
+ highlightChangeTypeRef,
622
+ getCheckedState,
623
+ selectionType,
624
+ hasMore,
625
+ onLoadMore,
626
+ loading,
627
+ loadingMore,
628
+ disableAutoLoadMore,
629
+ disabled,
630
+ className,
631
+ style,
632
+ sectionsMeta = []
633
+ }, ref) => {
634
+ const baseId = useId();
635
+ const scrollSentinelRef = useRef(null);
636
+ const scrollerRef = useRef(null);
637
+ const [isScrolled, setIsScrolled] = useState(false);
638
+ useImperativeHandle(ref, () => ({
639
+ scrollToTop: () => {
640
+ if (scrollerRef.current) {
641
+ scrollerRef.current.scrollTop = 0;
642
+ }
643
+ }
644
+ }));
645
+ useEffect(() => {
646
+ if (!isOpen) {
647
+ setIsScrolled(false);
648
+ return;
649
+ }
650
+ if (!scrollSentinelRef.current) return;
651
+ const observer = new IntersectionObserver(
652
+ (entries) => {
653
+ entries.forEach((entry) => {
654
+ setIsScrolled(!entry.isIntersecting);
655
+ });
656
+ },
657
+ { threshold: 0, root: scrollerRef.current }
658
+ );
659
+ observer.observe(scrollSentinelRef.current);
660
+ return () => observer.disconnect();
661
+ }, [isOpen]);
662
+ const anyPinnedLoading = sectionsMeta.some(
663
+ (s) => s.type === "pinned" && s.loading
664
+ );
665
+ const sections = useFieldListSections(items, sectionsMeta);
666
+ const { virtualRows, downshiftIndexToVirtualRowIndex, stickyIndices } = useMemo(
667
+ () => flattenSectionsToVirtualRows(sections, hasMore),
668
+ [sections, hasMore]
669
+ );
670
+ const stickyHeightRef = useRef(EST_BASE_ITEM_HEIGHT);
671
+ const rangeExtractor = useCallback(
672
+ (range) => {
673
+ if (stickyIndices.length === 0) {
674
+ return defaultRangeExtractor(range);
675
+ }
676
+ const activeStickyIndex = [...stickyIndices].reverse().find((index) => range.startIndex >= index) ?? 0;
677
+ const next = /* @__PURE__ */ new Set([
678
+ activeStickyIndex,
679
+ ...defaultRangeExtractor(range)
680
+ ]);
681
+ return [...next].sort((a, b) => a - b);
682
+ },
683
+ [stickyIndices]
684
+ );
685
+ const virtualizer = useVirtualizer({
686
+ count: virtualRows.length,
687
+ getScrollElement: () => scrollerRef.current,
688
+ estimateSize: (index) => estimateRowHeight(virtualRows[index]),
689
+ overscan: 5,
690
+ rangeExtractor,
691
+ scrollPaddingStart: stickyIndices.length > 0 ? stickyHeightRef.current : 0,
692
+ enabled: isOpen,
693
+ getItemKey: (index) => {
694
+ const row = virtualRows[index];
695
+ if (row.type === "item") return row.item.id;
696
+ if (row.type === "header") return `header-${row.sectionIndex}`;
697
+ if (row.type === "divider") return `divider-${row.sectionIndex}`;
698
+ return "load-more";
420
699
  }
421
700
  });
422
- return result;
423
- };
424
- return /* @__PURE__ */ jsxs(
425
- "div",
426
- {
427
- ...getMenuProps({
428
- className: cx(styles$3["scroller"], className),
429
- style
430
- }),
431
- children: [
432
- /* @__PURE__ */ jsx("ul", { className: cx(styles$3["select-field-list"]), children: isOpen && /* @__PURE__ */ jsx(Fragment, { children: loading || anyPinnedLoading ? /* @__PURE__ */ jsx("li", { role: "presentation", className: styles$3["empty"], children: /* @__PURE__ */ jsx(Spinner, { size: "medium" }) }) : items.length > 0 ? renderSections() : /* @__PURE__ */ jsx("li", { role: "presentation", className: styles$3["empty"], children: /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "No match found" }) }) }) }),
433
- loadingMore ? /* @__PURE__ */ jsxs("div", { className: styles$3["load-more"], children: [
434
- /* @__PURE__ */ jsx(Spinner, { size: "small" }),
435
- /* @__PURE__ */ jsx(SrOnly, { children: "Loading more..." })
436
- ] }) : hasMore && !loading ? /* @__PURE__ */ jsx(
437
- InView,
701
+ const virtualItems = virtualizer.getVirtualItems();
702
+ if (stickyIndices.length > 0) {
703
+ const stickyItem = virtualItems.find(
704
+ (vi) => stickyIndices.includes(vi.index)
705
+ );
706
+ if (stickyItem) {
707
+ stickyHeightRef.current = stickyItem.size;
708
+ }
709
+ }
710
+ const downshiftMapRef = useRef(downshiftIndexToVirtualRowIndex);
711
+ downshiftMapRef.current = downshiftIndexToVirtualRowIndex;
712
+ const onLoadMoreRef = useRef(onLoadMore);
713
+ onLoadMoreRef.current = onLoadMore;
714
+ useEffect(() => {
715
+ if (highlightedIndex < 0) return;
716
+ if (highlightChangeTypeRef?.current === useCombobox.stateChangeTypes.ItemMouseMove)
717
+ return;
718
+ const virtualRowIndex = downshiftMapRef.current[highlightedIndex];
719
+ if (virtualRowIndex != null) {
720
+ virtualizer.scrollToIndex(virtualRowIndex, { align: "auto" });
721
+ }
722
+ }, [highlightedIndex, virtualizer, highlightChangeTypeRef]);
723
+ useEffect(() => {
724
+ if (!hasMore || loadingMore || disableAutoLoadMore) return;
725
+ const lastItem = virtualItems[virtualItems.length - 1];
726
+ if (!lastItem) return;
727
+ if (lastItem.index >= virtualRows.length - 1) {
728
+ onLoadMoreRef.current();
729
+ }
730
+ }, [
731
+ hasMore,
732
+ loadingMore,
733
+ disableAutoLoadMore,
734
+ virtualItems,
735
+ virtualRows.length
736
+ ]);
737
+ const isSticky = useCallback(
738
+ (index) => stickyIndices.includes(index),
739
+ [stickyIndices]
740
+ );
741
+ const renderVirtualRow = (row) => {
742
+ if (row.type === "item") {
743
+ return /* @__PURE__ */ jsx(
744
+ SelectFieldListItem,
438
745
  {
439
- onVisibilityChange: handleLoaderVisibilityChange,
440
- rootMargin: "0px 0px -100px 0px",
441
- children: /* @__PURE__ */ jsx("div", { className: styles$3["load-more"], children: /* @__PURE__ */ jsx(Button, { appearance: "secondary", size: "small", onClick: onLoadMore, children: "Load more" }) })
746
+ item: row.item,
747
+ index: row.downshiftIndex,
748
+ getItemProps,
749
+ selectionType,
750
+ checked: getCheckedState(row.item),
751
+ highlighted: highlightedIndex === row.downshiftIndex,
752
+ disabled: (disabled || row.item.disabled) ?? false,
753
+ isListScrolled: isScrolled
442
754
  }
443
- ) : null
444
- ]
445
- }
446
- );
447
- };
448
- FieldListBase.displayName = "FieldListBase";
755
+ );
756
+ }
757
+ if (row.type === "header") {
758
+ const labelId = `${baseId}-section-${row.sectionIndex}`;
759
+ return /* @__PURE__ */ jsx(
760
+ "li",
761
+ {
762
+ role: "presentation",
763
+ "aria-hidden": "true",
764
+ className: styles$3["pinned-section-header"],
765
+ children: /* @__PURE__ */ jsx("span", { id: labelId, children: /* @__PURE__ */ jsx(Text, { variant: "eyebrow", children: row.label }) })
766
+ }
767
+ );
768
+ }
769
+ if (row.type === "divider") {
770
+ return /* @__PURE__ */ jsx("li", { role: "separator", className: styles$3["divider"], children: /* @__PURE__ */ jsx(Divider, {}) });
771
+ }
772
+ if (row.type === "load-more") {
773
+ if (loadingMore) {
774
+ return /* @__PURE__ */ jsxs("li", { role: "presentation", className: styles$3["load-more"], children: [
775
+ /* @__PURE__ */ jsx(Spinner, { size: "small" }),
776
+ /* @__PURE__ */ jsx(SrOnly, { children: "Loading more..." })
777
+ ] });
778
+ }
779
+ return /* @__PURE__ */ jsx("li", { role: "presentation", children: /* @__PURE__ */ jsx("div", { className: styles$3["load-more"], children: /* @__PURE__ */ jsx(
780
+ Button,
781
+ {
782
+ appearance: "secondary",
783
+ size: "small",
784
+ onClick: () => onLoadMoreRef.current(),
785
+ children: "Load more"
786
+ }
787
+ ) }) });
788
+ }
789
+ return null;
790
+ };
791
+ const menuProps = getMenuProps({
792
+ className: cx(styles$3["scroller"], className),
793
+ style
794
+ });
795
+ const menuRef = useMergeRefs([menuProps.ref, scrollerRef]);
796
+ return /* @__PURE__ */ jsx("div", { ...menuProps, ref: menuRef, children: /* @__PURE__ */ jsxs("ul", { className: styles$3["select-field-list"], children: [
797
+ isOpen && /* @__PURE__ */ jsx(
798
+ "li",
799
+ {
800
+ ref: scrollSentinelRef,
801
+ className: styles$3["scroll-sentinel"],
802
+ role: "presentation",
803
+ "aria-hidden": "true"
804
+ }
805
+ ),
806
+ isOpen && /* @__PURE__ */ jsx(Fragment, { children: loading || anyPinnedLoading ? /* @__PURE__ */ jsx("li", { role: "presentation", className: styles$3["empty"], children: /* @__PURE__ */ jsx(Spinner, { size: "medium" }) }) : items.length > 0 ? /* @__PURE__ */ jsx(
807
+ "li",
808
+ {
809
+ role: "presentation",
810
+ "aria-hidden": "true",
811
+ style: {
812
+ height: virtualizer.getTotalSize(),
813
+ width: "100%",
814
+ position: "relative"
815
+ },
816
+ children: virtualItems.map((virtualItem) => {
817
+ const row = virtualRows[virtualItem.index];
818
+ const sticky = isSticky(virtualItem.index);
819
+ return /* @__PURE__ */ jsx(
820
+ "div",
821
+ {
822
+ "data-index": virtualItem.index,
823
+ ref: virtualizer.measureElement,
824
+ style: sticky ? {
825
+ position: "sticky",
826
+ top: 0,
827
+ zIndex: 1
828
+ } : {
829
+ position: "absolute",
830
+ top: 0,
831
+ left: 0,
832
+ width: "100%",
833
+ transform: `translateY(${virtualItem.start}px)`
834
+ },
835
+ children: renderVirtualRow(row)
836
+ },
837
+ virtualItem.key
838
+ );
839
+ })
840
+ }
841
+ ) : /* @__PURE__ */ jsx("li", { role: "presentation", className: styles$3["empty"], children: /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "No match found" }) }) })
842
+ ] }) });
843
+ }
844
+ );
845
+ VirtualizedFieldListBase.displayName = "VirtualizedFieldListBase";
449
846
 
450
847
  const SelectFieldLabel = ({
451
848
  label,
@@ -661,13 +1058,15 @@ function useGroupedOptions(options, groupToString) {
661
1058
  groupedItems.push({
662
1059
  id: option.id,
663
1060
  type: "grouped-option",
664
- original: option
1061
+ original: option,
1062
+ disabled: option.disabled ?? false
665
1063
  });
666
1064
  } else {
667
1065
  ungroupedItems.push({
668
1066
  id: option.id,
669
1067
  type: "option",
670
- original: option
1068
+ original: option,
1069
+ disabled: option.disabled ?? false
671
1070
  });
672
1071
  }
673
1072
  });
@@ -687,7 +1086,7 @@ function sortGroupSections(sections, groupSorter) {
687
1086
  }
688
1087
 
689
1088
  const styles$1 = {
690
- "field-popover": "_field-popover_aeggh_2"
1089
+ "field-popover": "_field-popover_f54ku_2"
691
1090
  };
692
1091
 
693
1092
  const FieldPopover = (props) => {
@@ -774,12 +1173,12 @@ function useAdaptiveView() {
774
1173
  };
775
1174
  }
776
1175
 
777
- const header = "_header_dcw9s_33";
778
- const field = "_field_dcw9s_2";
779
- const content = "_content_dcw9s_44";
1176
+ const header = "_header_1lctb_34";
1177
+ const field = "_field_1lctb_2";
1178
+ const content = "_content_1lctb_45";
780
1179
  const styles = {
781
- "field-dialog": "_field-dialog_dcw9s_2",
782
- "field-dialog-visual-viewport-height": "_field-dialog-visual-viewport-height_dcw9s_16",
1180
+ "field-dialog": "_field-dialog_1lctb_2",
1181
+ "field-dialog-visual-viewport-height": "_field-dialog-visual-viewport-height_1lctb_17",
783
1182
  header: header,
784
1183
  field: field,
785
1184
  content: content
@@ -877,5 +1276,5 @@ const FieldDialog = ({
877
1276
  );
878
1277
  };
879
1278
 
880
- export { DEFAULT_PAGE_SIZE as D, FieldListBase as F, SelectFieldLabel as S, usePinnedOptions as a, useGroupedOptions as b, useSelectFieldLoading as c, useDebouncedCallback as d, FieldDialog as e, FieldPopover as f, sortGroupSections as s, useAdaptiveView as u };
881
- //# sourceMappingURL=FieldDialog-Be54L3E-.js.map
1279
+ export { DEFAULT_PAGE_SIZE as D, FieldListBase as F, SelectFieldLabel as S, VirtualizedFieldListBase as V, usePinnedOptions as a, useGroupedOptions as b, useSelectFieldLoading as c, useDebouncedCallback as d, FieldDialog as e, FieldPopover as f, sortGroupSections as s, useAdaptiveView as u };
1280
+ //# sourceMappingURL=FieldDialog-CAuhkCZY.js.map