@servicetitan/anvil2 1.49.4 → 1.49.6

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 (208) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/{Breadcrumbs-DjR-2OEH.js → Breadcrumbs-Y6IaMoi5.js} +2 -2
  3. package/dist/{Breadcrumbs-DjR-2OEH.js.map → Breadcrumbs-Y6IaMoi5.js.map} +1 -1
  4. package/dist/Breadcrumbs.js +1 -1
  5. package/dist/{Calendar-BkJs1qTF.js → Calendar-B5Ednjem.js} +2 -2
  6. package/dist/{Calendar-BkJs1qTF.js.map → Calendar-B5Ednjem.js.map} +1 -1
  7. package/dist/{Calendar-WHERvu2Y.js → Calendar-Ce08LvdP.js} +2 -2
  8. package/dist/{Calendar-WHERvu2Y.js.map → Calendar-Ce08LvdP.js.map} +1 -1
  9. package/dist/Calendar.js +2 -2
  10. package/dist/{Checkbox-C5Qjq_tU.js → Checkbox-ByaZv8wu.js} +2 -2
  11. package/dist/{Checkbox-C5Qjq_tU.js.map → Checkbox-ByaZv8wu.js.map} +1 -1
  12. package/dist/{Checkbox-Bhjj-jM4.js → Checkbox-nE-_tWmc.js} +4 -3
  13. package/dist/{Checkbox-Bhjj-jM4.js.map → Checkbox-nE-_tWmc.js.map} +1 -1
  14. package/dist/Checkbox.js +2 -2
  15. package/dist/Checkbox.module-D4EgXL0i.js +27 -0
  16. package/dist/Checkbox.module-D4EgXL0i.js.map +1 -0
  17. package/dist/{Chip-X2EwdZ97.js → Chip-UqdorCE2.js} +23 -17
  18. package/dist/Chip-UqdorCE2.js.map +1 -0
  19. package/dist/Chip.js +1 -1
  20. package/dist/Combobox-Dy4IZDg1.js +4281 -0
  21. package/dist/Combobox-Dy4IZDg1.js.map +1 -0
  22. package/dist/Combobox.js +1 -1
  23. package/dist/{DataTable--vA-HttA.js → DataTable-D6MmOQF2.js} +8 -8
  24. package/dist/{DataTable--vA-HttA.js.map → DataTable-D6MmOQF2.js.map} +1 -1
  25. package/dist/{DateField-BNleIuS8.js → DateField-BxS9LZG7.js} +6 -6
  26. package/dist/{DateField-BNleIuS8.js.map → DateField-BxS9LZG7.js.map} +1 -1
  27. package/dist/DateField.js +1 -1
  28. package/dist/{DateFieldRange-BBgvno-_.js → DateFieldRange-BdDiHUfv.js} +7 -7
  29. package/dist/{DateFieldRange-BBgvno-_.js.map → DateFieldRange-BdDiHUfv.js.map} +1 -1
  30. package/dist/DateFieldRange.js +1 -1
  31. package/dist/{DateFieldSingle-Bcwkxogy.js → DateFieldSingle-CuQO3LH9.js} +7 -7
  32. package/dist/{DateFieldSingle-Bcwkxogy.js.map → DateFieldSingle-CuQO3LH9.js.map} +1 -1
  33. package/dist/DateFieldSingle.js +1 -1
  34. package/dist/{DateFieldYearless-DnVJaBBq.js → DateFieldYearless-2YhZmNYg.js} +3 -3
  35. package/dist/{DateFieldYearless-DnVJaBBq.js.map → DateFieldYearless-2YhZmNYg.js.map} +1 -1
  36. package/dist/DateFieldYearless.js +1 -1
  37. package/dist/{DateFieldYearlessRange-BivGidsU.js → DateFieldYearlessRange-CgCmvHLs.js} +3 -3
  38. package/dist/{DateFieldYearlessRange-BivGidsU.js.map → DateFieldYearlessRange-CgCmvHLs.js.map} +1 -1
  39. package/dist/DateFieldYearlessRange.js +1 -1
  40. package/dist/{DaysOfTheWeek-Dn6zHxpt.js → DaysOfTheWeek-DlIka9b_.js} +3 -3
  41. package/dist/{DaysOfTheWeek-Dn6zHxpt.js.map → DaysOfTheWeek-DlIka9b_.js.map} +1 -1
  42. package/dist/DaysOfTheWeek.js +1 -1
  43. package/dist/{Dialog-3ptbLquZ.js → Dialog-DSwvbfdW.js} +21 -62
  44. package/dist/Dialog-DSwvbfdW.js.map +1 -0
  45. package/dist/Dialog.css +29 -29
  46. package/dist/Dialog.js +2 -1
  47. package/dist/Dialog.js.map +1 -1
  48. package/dist/DialogCancelButton-sTEfx5kf.js +50 -0
  49. package/dist/DialogCancelButton-sTEfx5kf.js.map +1 -0
  50. package/dist/{Drawer-plkbENfI.js → Drawer-CGYcEj6d.js} +5 -4
  51. package/dist/{Drawer-plkbENfI.js.map → Drawer-CGYcEj6d.js.map} +1 -1
  52. package/dist/Drawer.js +1 -1
  53. package/dist/{DrawerContext-D4tWTLVf.js → DrawerContext-Cs3k160L.js} +127 -2
  54. package/dist/{DrawerContext-D4tWTLVf.js.map → DrawerContext-Cs3k160L.js.map} +1 -1
  55. package/dist/{FieldLabel-CHMCV9wX.js → FieldLabel-jqlQ1Ldh.js} +2 -2
  56. package/dist/{FieldLabel-CHMCV9wX.js.map → FieldLabel-jqlQ1Ldh.js.map} +1 -1
  57. package/dist/FieldLabel.js +1 -1
  58. package/dist/{InputMask-Cd01c3Tj.js → InputMask-DaN_Adz6.js} +3 -3
  59. package/dist/{InputMask-Cd01c3Tj.js.map → InputMask-DaN_Adz6.js.map} +1 -1
  60. package/dist/InputMask.js +1 -1
  61. package/dist/{Link-DuYh7Xl2.js → Link-DqZxs0kQ.js} +13 -4
  62. package/dist/Link-DqZxs0kQ.js.map +1 -0
  63. package/dist/Link.css +27 -19
  64. package/dist/Link.js +1 -1
  65. package/dist/Link.module-CjeOl2NH.js +14 -0
  66. package/dist/Link.module-CjeOl2NH.js.map +1 -0
  67. package/dist/{LinkButton-pIUNATNE.js → LinkButton-jb2Gc3hC.js} +5 -2
  68. package/dist/LinkButton-jb2Gc3hC.js.map +1 -0
  69. package/dist/LinkButton.js +1 -1
  70. package/dist/{ListView-CZ5T8bR1.js → ListView-B1I7Ii3g.js} +2 -2
  71. package/dist/{ListView-CZ5T8bR1.js.map → ListView-B1I7Ii3g.js.map} +1 -1
  72. package/dist/ListView.js +1 -1
  73. package/dist/{Menu-DUAfSImY.js → Menu-Cn2JJe1Y.js} +2 -2
  74. package/dist/{Menu-DUAfSImY.js.map → Menu-Cn2JJe1Y.js.map} +1 -1
  75. package/dist/Menu.js +1 -1
  76. package/dist/{NumberField-C62E56_v.js → NumberField-BdK4U9mW.js} +2 -2
  77. package/dist/{NumberField-C62E56_v.js.map → NumberField-BdK4U9mW.js.map} +1 -1
  78. package/dist/NumberField.js +1 -1
  79. package/dist/{Page-Bc8ko-eM.js → Page-C-yMjgoO.js} +7 -7
  80. package/dist/{Page-Bc8ko-eM.js.map → Page-C-yMjgoO.js.map} +1 -1
  81. package/dist/Page.js +1 -1
  82. package/dist/{Pagination-BHEEnNas.js → Pagination-CnF6yBr5.js} +2 -2
  83. package/dist/{Pagination-BHEEnNas.js.map → Pagination-CnF6yBr5.js.map} +1 -1
  84. package/dist/Pagination.js +1 -1
  85. package/dist/{Popover-CIPg_ZgX.js → Popover-CcMDyKTj.js} +2 -2
  86. package/dist/{Popover-CIPg_ZgX.js.map → Popover-CcMDyKTj.js.map} +1 -1
  87. package/dist/Popover.js +1 -1
  88. package/dist/{ProgressBar-CUpF9fFW.js → ProgressBar-CufkbVu5.js} +2 -2
  89. package/dist/{ProgressBar-CUpF9fFW.js.map → ProgressBar-CufkbVu5.js.map} +1 -1
  90. package/dist/ProgressBar.js +1 -1
  91. package/dist/{Radio-CyCFna1X.js → Radio-BeBG7Ksw.js} +2 -2
  92. package/dist/{Radio-CyCFna1X.js.map → Radio-BeBG7Ksw.js.map} +1 -1
  93. package/dist/Radio.js +2 -2
  94. package/dist/{RadioGroup-DRS2EjVH.js → RadioGroup-BAjpkCjp.js} +2 -2
  95. package/dist/{RadioGroup-DRS2EjVH.js.map → RadioGroup-BAjpkCjp.js.map} +1 -1
  96. package/dist/{SearchField-DrgNbG3I.js → SearchField-D6bICv4b.js} +36 -7
  97. package/dist/SearchField-D6bICv4b.js.map +1 -0
  98. package/dist/SearchField.css +13 -8
  99. package/dist/SearchField.js +1 -1
  100. package/dist/{SelectCard-lBcnP5j5.js → SelectCard-DDN7qqHv.js} +3 -3
  101. package/dist/{SelectCard-lBcnP5j5.js.map → SelectCard-DDN7qqHv.js.map} +1 -1
  102. package/dist/SelectCard.js +1 -1
  103. package/dist/SelectField.d.ts +2 -0
  104. package/dist/SelectField.js +2 -0
  105. package/dist/SelectField.js.map +1 -0
  106. package/dist/SelectFieldSync-DQm3_D0v.js +1122 -0
  107. package/dist/SelectFieldSync-DQm3_D0v.js.map +1 -0
  108. package/dist/SelectFieldSync.css +168 -0
  109. package/dist/{SelectTrigger-DdsBqEtU.js → SelectTrigger-CNEhRluU.js} +2 -2
  110. package/dist/{SelectTrigger-DdsBqEtU.js.map → SelectTrigger-CNEhRluU.js.map} +1 -1
  111. package/dist/SelectTrigger.js +1 -1
  112. package/dist/{SelectTriggerBase-BkVt3IP4.js → SelectTriggerBase-Cv6hGsrC.js} +5 -35
  113. package/dist/{SelectTriggerBase-BkVt3IP4.js.map → SelectTriggerBase-Cv6hGsrC.js.map} +1 -1
  114. package/dist/SelectTriggerBase.css +59 -59
  115. package/dist/SelectTriggerBase.module-Ce49lamD.js +35 -0
  116. package/dist/SelectTriggerBase.module-Ce49lamD.js.map +1 -0
  117. package/dist/Table.js +1 -1
  118. package/dist/{TextField-CpVkZxMT.js → TextField--y8q4R2H.js} +2 -2
  119. package/dist/{TextField-CpVkZxMT.js.map → TextField--y8q4R2H.js.map} +1 -1
  120. package/dist/{TextField-CygbgVVt.js → TextField-aMwSN1iP.js} +2 -2
  121. package/dist/{TextField-CygbgVVt.js.map → TextField-aMwSN1iP.js.map} +1 -1
  122. package/dist/TextField.js +1 -1
  123. package/dist/{Textarea-DacevzmW.js → Textarea-D1zwX2h6.js} +2 -2
  124. package/dist/{Textarea-DacevzmW.js.map → Textarea-D1zwX2h6.js.map} +1 -1
  125. package/dist/Textarea.js +1 -1
  126. package/dist/{TimeField-BkOB5ESa.js → TimeField-BHxXbOfe.js} +4 -4
  127. package/dist/{TimeField-BkOB5ESa.js.map → TimeField-BHxXbOfe.js.map} +1 -1
  128. package/dist/TimeField.js +1 -1
  129. package/dist/Toast.js +2 -2
  130. package/dist/{Toaster-nFhRAJc8.js → Toaster-CRp3nf4U.js} +2 -2
  131. package/dist/{Toaster-nFhRAJc8.js.map → Toaster-CRp3nf4U.js.map} +1 -1
  132. package/dist/{Toaster-Dx0cFQwb.js → Toaster-qPt6zb6F.js} +3 -3
  133. package/dist/{Toaster-Dx0cFQwb.js.map → Toaster-qPt6zb6F.js.map} +1 -1
  134. package/dist/{Toolbar-DuuaM0Cz.js → Toolbar-XJrmS4v4.js} +13 -13
  135. package/dist/{Toolbar-DuuaM0Cz.js.map → Toolbar-XJrmS4v4.js.map} +1 -1
  136. package/dist/Toolbar.js +1 -1
  137. package/dist/{Tooltip-CZsoFe6C.js → Tooltip-CBy7srE2.js} +3 -3
  138. package/dist/Tooltip-CBy7srE2.js.map +1 -0
  139. package/dist/Tooltip.js +1 -1
  140. package/dist/{YearlessDateInputWithPicker-MHLlAdrH.js → YearlessDateInputWithPicker-LiMI-Oer.js} +4 -4
  141. package/dist/{YearlessDateInputWithPicker-MHLlAdrH.js.map → YearlessDateInputWithPicker-LiMI-Oer.js.map} +1 -1
  142. package/dist/assets/icons/st/titan_intelligence.svg +1 -1
  143. package/dist/assets/icons/st/transactional.svg +1 -0
  144. package/dist/assets/icons/st.ts +1 -0
  145. package/dist/beta/components/SelectField/SelectField.d.ts +2 -0
  146. package/dist/beta/components/SelectField/SelectFieldSync.d.ts +39 -0
  147. package/dist/beta/components/SelectField/index.d.ts +3 -0
  148. package/dist/beta/components/SelectField/internal/FieldDialog/FieldDialog.d.ts +8 -0
  149. package/dist/beta/components/SelectField/internal/FieldPopover/FieldPopover.d.ts +8 -0
  150. package/dist/beta/components/SelectField/internal/InView.d.ts +34 -0
  151. package/dist/beta/components/SelectField/internal/SelectFieldInput.d.ts +64 -0
  152. package/dist/beta/components/SelectField/internal/SelectFieldLabel.d.ts +39 -0
  153. package/dist/beta/components/SelectField/internal/SelectFieldList.d.ts +26 -0
  154. package/dist/beta/components/SelectField/internal/SelectFieldListItem.d.ts +14 -0
  155. package/dist/beta/components/SelectField/internal/useCombo.d.ts +31 -0
  156. package/dist/beta/components/SelectField/stories/SelectField.stories.data.d.ts +32 -0
  157. package/dist/beta/components/SelectField/types.d.ts +275 -0
  158. package/dist/beta/components/Table/types.d.ts +1 -1
  159. package/dist/beta/components/index.d.ts +1 -0
  160. package/dist/beta/hooks/index.d.ts +1 -0
  161. package/dist/beta/hooks/useAdaptiveView.d.ts +50 -0
  162. package/dist/beta/index.d.ts +1 -0
  163. package/dist/beta.js +5 -4
  164. package/dist/beta.js.map +1 -1
  165. package/dist/components/ButtonToggle/ButtonToggle.d.ts +1 -1
  166. package/dist/components/Chip/Chip.d.ts +2 -1
  167. package/dist/components/Chip/internal/Chip.d.ts +2 -1
  168. package/dist/components/DateFieldRange/internal/MaskedDateRangeInput.d.ts +1 -1
  169. package/dist/components/DateFieldSingle/internal/MaskedDateInput.d.ts +1 -1
  170. package/dist/components/Link/internal/Link.d.ts +21 -2
  171. package/dist/components/Link/useLinkStyles.d.ts +1 -1
  172. package/dist/components/LinkButton/LinkButton.d.ts +13 -1
  173. package/dist/components/SearchField/SearchField.d.ts +6 -3
  174. package/dist/components/Stepper/Stepper.d.ts +1 -1
  175. package/dist/components/Stepper/StepperStep.d.ts +1 -1
  176. package/dist/components/Tab/Tab.d.ts +1 -1
  177. package/dist/components/Tab/TabButton.d.ts +1 -1
  178. package/dist/{indeterminate_check_box-RY9zr3xS.js → indeterminate_check_box-B4zobNlt.js} +2 -27
  179. package/dist/{indeterminate_check_box-RY9zr3xS.js.map → indeterminate_check_box-B4zobNlt.js.map} +1 -1
  180. package/dist/index.js +39 -38
  181. package/dist/index.js.map +1 -1
  182. package/dist/internal/hooks/index.d.ts +1 -0
  183. package/dist/internal/hooks/useDebouncedCallback/index.d.ts +1 -0
  184. package/dist/internal/hooks/useDebouncedCallback/useDebouncedCallback.d.ts +28 -0
  185. package/dist/internal/hooks/useSelectFieldLoading/index.d.ts +1 -0
  186. package/dist/internal/hooks/useSelectFieldLoading/useSelectFieldLoading.d.ts +102 -0
  187. package/dist/{Combobox-BO-k4QZE.js → match-sorter.esm-CtBw0MrM.js} +4 -4278
  188. package/dist/match-sorter.esm-CtBw0MrM.js.map +1 -0
  189. package/dist/useDialogScrollLock-BW-aVboo.js +41 -0
  190. package/dist/useDialogScrollLock-BW-aVboo.js.map +1 -0
  191. package/dist/{useInitialFocus-Cl_Txu7W.js → useInitialFocus-BpmW7pDB.js} +4 -41
  192. package/dist/useInitialFocus-BpmW7pDB.js.map +1 -0
  193. package/dist/{usePopoverSupport-CWTCDfN2.js → usePopoverSupport-CCSCHnit.js} +2 -2
  194. package/dist/{usePopoverSupport-CWTCDfN2.js.map → usePopoverSupport-CCSCHnit.js.map} +1 -1
  195. package/dist/{utils-aSAOVHjX.js → utils-C-hkPwMi.js} +2 -2
  196. package/dist/{utils-aSAOVHjX.js.map → utils-C-hkPwMi.js.map} +1 -1
  197. package/package.json +1 -1
  198. package/dist/Chip-X2EwdZ97.js.map +0 -1
  199. package/dist/Combobox-BO-k4QZE.js.map +0 -1
  200. package/dist/Dialog-3ptbLquZ.js.map +0 -1
  201. package/dist/Link-DuYh7Xl2.js.map +0 -1
  202. package/dist/Link.module-Cf17JWod.js +0 -12
  203. package/dist/Link.module-Cf17JWod.js.map +0 -1
  204. package/dist/LinkButton-pIUNATNE.js.map +0 -1
  205. package/dist/SearchField-DrgNbG3I.js.map +0 -1
  206. package/dist/Tooltip-CZsoFe6C.js.map +0 -1
  207. package/dist/useInitialFocus-Cl_Txu7W.js.map +0 -1
  208. /package/dist/{indeterminate_check_box.css → Checkbox.css} +0 -0
@@ -0,0 +1,4281 @@
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import { forwardRef, useState, useEffect, createContext, useContext, useRef, useMemo, useLayoutEffect, useId } from 'react';
3
+ import { s as supportsPopover } from './DrawerContext-Cs3k160L.js';
4
+ import { P as Popover, u as usePopoverLegacyContext, f as usePopoverContext } from './Popover-CcMDyKTj.js';
5
+ import { c as cx } from './index-tZvMCc77.js';
6
+ import { a as useMultipleSelection, u as useCombobox$1, m as matchSorter, b as useSelect } from './match-sorter.esm-CtBw0MrM.js';
7
+ import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-BlIWftBb.js';
8
+ import { i as isMultiple, u as useDownshiftEnvironment$1, b as SELECT_ALL, a as defaultItemToKey$1, d as defaultItemToString$1, g as getScrollParent, A as ADD_NEW$1, S as SelectTriggerBase } from './SelectTriggerBase-Cv6hGsrC.js';
9
+ import { l as listboxStyles } from './Listbox.module-XuKszT3X.js';
10
+ import { T as Text } from './Text-kPA-VzsB.js';
11
+ import { D as Divider } from './Divider-Olv8yWXD.js';
12
+ import { F as Flex } from './Flex-CjPHUTeq.js';
13
+ import { S as Spinner } from './Spinner-xEFwsq8_.js';
14
+ import { l as listViewStyles } from './ListView.module-BilDg12y.js';
15
+ import { I as Icon$2 } from './Icon-BSuTVNaa.js';
16
+ import { c as checkboxStyles } from './Checkbox.module-D4EgXL0i.js';
17
+ import { S as SvgIndeterminateCheckBox, a as SvgCheckBox, b as SvgCheckBoxOutlineBlank } from './indeterminate_check_box-B4zobNlt.js';
18
+ import { B as Button } from './Button-92_FKAyV.js';
19
+ import { C as Chip } from './Chip-UqdorCE2.js';
20
+ import { S as SvgClose } from './close-DZj38AEh.js';
21
+ import { S as SvgChevronRight } from './chevron_right-BdpsxX7x.js';
22
+ import { S as SvgInfo } from './info-CYpG6tcI.js';
23
+ import { S as SrOnly } from './SrOnly-CTsYSuby.js';
24
+ import { T as Tooltip } from './Tooltip-CBy7srE2.js';
25
+ import { H as Helper } from './Helper-DjWotFtO.js';
26
+ import { A as Avatar } from './Avatar-DeEV-v-b.js';
27
+ import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
28
+ import { useTrackingId } from './useTrackingId.js';
29
+ import { S as SvgCheck } from './check-Cf67OWrZ.js';
30
+
31
+ import './Combobox.css';const label = "_label_jfzvd_2";
32
+ const required = "_required_jfzvd_46";
33
+ const styles$2 = {
34
+ label: label,
35
+ "top-container": "_top-container_jfzvd_37",
36
+ "label-text": "_label-text_jfzvd_42",
37
+ required: required,
38
+ "info-trigger": "_info-trigger_jfzvd_51",
39
+ "info-content": "_info-content_jfzvd_56"
40
+ };
41
+
42
+ const LabelMoreInfoIcon = ({
43
+ moreInfo,
44
+ openMoreInfo
45
+ }) => {
46
+ const [open, setOpen] = useState(openMoreInfo);
47
+ useEffect(() => {
48
+ if (openMoreInfo) {
49
+ setOpen(true);
50
+ } else {
51
+ setOpen(false);
52
+ setTimeout(() => {
53
+ setOpen(void 0);
54
+ });
55
+ }
56
+ }, [openMoreInfo]);
57
+ return /* @__PURE__ */ jsxs(
58
+ Tooltip,
59
+ {
60
+ open,
61
+ placement: "top",
62
+ offset: 5,
63
+ fallbackPlacements: ["right", "bottom", "left"],
64
+ children: [
65
+ /* @__PURE__ */ jsx(Tooltip.Trigger, { className: styles$2["info-trigger"], children: /* @__PURE__ */ jsx(Icon$2, { svg: SvgInfo }) }),
66
+ /* @__PURE__ */ jsx(Tooltip.Content, { className: styles$2["info-content"], children: moreInfo })
67
+ ]
68
+ }
69
+ );
70
+ };
71
+ const Label = forwardRef((props, ref) => {
72
+ const { children, className, moreInfo, required, openMoreInfo, ...rest } = props;
73
+ const LabelClassNames = cx([styles$2["label"]], className);
74
+ return /* @__PURE__ */ jsxs("label", { className: LabelClassNames, "data-anv": "label", ref, ...rest, children: [
75
+ /* @__PURE__ */ jsxs("div", { className: styles$2["top-container"], "aria-atomic": "true", children: [
76
+ /* @__PURE__ */ jsxs("span", { className: styles$2["label-text"], children: [
77
+ children,
78
+ required ? /* @__PURE__ */ jsxs(Fragment, { children: [
79
+ /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: styles$2["required"], children: "*" }),
80
+ /* @__PURE__ */ jsx(SrOnly, { children: "Required" })
81
+ ] }) : null
82
+ ] }),
83
+ moreInfo ? /* @__PURE__ */ jsx(LabelMoreInfoIcon, { moreInfo, openMoreInfo }) : null
84
+ ] }),
85
+ moreInfo ? /* @__PURE__ */ jsx(SrOnly, { children: moreInfo }) : null
86
+ ] });
87
+ });
88
+ Label.displayName = "Label";
89
+
90
+ const ComboboxContext = createContext(null);
91
+ const useCombobox = function() {
92
+ const context = useContext(
93
+ ComboboxContext
94
+ );
95
+ if (context == null) {
96
+ throw new Error("useCombobox must be wrapped in <Combobox />");
97
+ }
98
+ return context;
99
+ };
100
+
101
+ const ADD_NEW = Symbol.for("add-new");
102
+ const defaultItemToString = function(item) {
103
+ return item != null ? String(item) : "";
104
+ };
105
+ const defaultItemToKey = function(item) {
106
+ return item;
107
+ };
108
+ const ComboboxLegacyContext = createContext(null);
109
+ const useDownshiftEnvironment = () => {
110
+ const wrapperDivRef = useRef(null);
111
+ const shadowRoot = wrapperDivRef.current ? wrapperDivRef.current.getRootNode() : null;
112
+ const shadowDocument = wrapperDivRef.current && shadowRoot ? shadowRoot.ownerDocument : null;
113
+ const environment = shadowDocument ? {
114
+ document: shadowDocument,
115
+ addEventListener: shadowDocument.addEventListener.bind(shadowRoot),
116
+ removeEventListener: shadowDocument.removeEventListener.bind(shadowRoot),
117
+ Node
118
+ } : void 0;
119
+ return { ref: wrapperDivRef, environment };
120
+ };
121
+ const useComboboxLegacy = function() {
122
+ const context = useContext(
123
+ ComboboxLegacyContext
124
+ );
125
+ if (context == null) {
126
+ throw new Error("useComboboxLegacy must be wrapped in <ComboboxLegacy />");
127
+ }
128
+ return context;
129
+ };
130
+
131
+ const item$1 = "_item_rxmcz_5";
132
+ const input = "_input_rxmcz_18";
133
+ const prefix = "_prefix_rxmcz_46";
134
+ const suffix = "_suffix_rxmcz_47";
135
+ const combobox$1 = "_combobox_rxmcz_62";
136
+ const select = "_select_rxmcz_71";
137
+ const chip = "_chip_rxmcz_167";
138
+ const listview$1 = "_listview_rxmcz_208";
139
+ const empty$1 = "_empty_rxmcz_216";
140
+ const Icon$1 = "_Icon_rxmcz_247";
141
+ const small = "_small_rxmcz_252";
142
+ const large = "_large_rxmcz_255";
143
+ const error = "_error_rxmcz_273";
144
+ const styles$1 = {
145
+ "buttons-wrapper": "_buttons-wrapper_rxmcz_3",
146
+ "search-field": "_search-field_rxmcz_4",
147
+ item: item$1,
148
+ input: input,
149
+ "input-wrapper": "_input-wrapper_rxmcz_19",
150
+ "toggle-button-wrapper": "_toggle-button-wrapper_rxmcz_32",
151
+ "close-button-wrapper": "_close-button-wrapper_rxmcz_33",
152
+ prefix: prefix,
153
+ suffix: suffix,
154
+ combobox: combobox$1,
155
+ select: select,
156
+ "popover-content": "_popover-content_rxmcz_74",
157
+ "no-clear-button": "_no-clear-button_rxmcz_93",
158
+ "input-flex": "_input-flex_rxmcz_96",
159
+ "fake-placeholder": "_fake-placeholder_rxmcz_124",
160
+ "close-button": "_close-button_rxmcz_33",
161
+ "toggle-button": "_toggle-button_rxmcz_32",
162
+ "rows-wrapper": "_rows-wrapper_rxmcz_157",
163
+ "chip-wrapper": "_chip-wrapper_rxmcz_167",
164
+ chip: chip,
165
+ listview: listview$1,
166
+ empty: empty$1,
167
+ Icon: Icon$1,
168
+ small: small,
169
+ large: large,
170
+ error: error,
171
+ "listview-option": "_listview-option_rxmcz_304"
172
+ };
173
+
174
+ const ComboboxLegacySingle = function(props) {
175
+ const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
176
+ const {
177
+ className,
178
+ style,
179
+ children,
180
+ open,
181
+ disabled,
182
+ readOnly,
183
+ items: itemsProp,
184
+ itemToString: itemToStringProp,
185
+ itemToKey: itemToKeyProp,
186
+ onChange,
187
+ disableCloseOnClickOutside = false,
188
+ disableMatchReferenceWidth = false,
189
+ disableCloseOnSelectItem = false,
190
+ filterOptions,
191
+ loading = false,
192
+ root,
193
+ onInputValueChange,
194
+ environment: environmentProp,
195
+ ...rest
196
+ } = componentProps;
197
+ const ComboboxLegacyClassNames = cx(styles$1["combobox"], className);
198
+ const [items, setItems] = useState(itemsProp);
199
+ const [hasAddNew, setHasAddNew] = useState(false);
200
+ const [onSelectItemAddNew, setOnSelectItemAddNew] = useState(void 0);
201
+ const [hasExactMatch, setHasExactMatch] = useState(false);
202
+ const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
203
+ const [hasEmpty, setHasEmpty] = useState(false);
204
+ const [disabledItems, setDisabledItems] = useState([]);
205
+ const [isReadOnly, setIsReadOnly] = useState(readOnly);
206
+ const [isDisabled, setIsDisabled] = useState(disabled);
207
+ const referenceRef = useRef(null);
208
+ const contentRef = useRef(null);
209
+ const handleOutsidePress = (e) => {
210
+ const clickedInsideReference = referenceRef.current && e.target != null && referenceRef.current.contains(e.target);
211
+ if (!clickedInsideReference) {
212
+ closeMenu();
213
+ return true;
214
+ } else {
215
+ return false;
216
+ }
217
+ };
218
+ const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();
219
+ const showAddNew = hasAddNew && !hasExactMatch;
220
+ const combinedItems = useMemo(
221
+ () => showAddNew ? [...items, ADD_NEW] : items,
222
+ [items, showAddNew]
223
+ );
224
+ const itemToString = itemToStringProp ?? defaultItemToString;
225
+ const itemToKey = itemToKeyProp ?? defaultItemToKey;
226
+ const {
227
+ isOpen,
228
+ getLabelProps,
229
+ getInputProps,
230
+ getToggleButtonProps,
231
+ getMenuProps,
232
+ getItemProps,
233
+ highlightedIndex,
234
+ selectedItem,
235
+ selectItem,
236
+ setInputValue,
237
+ inputValue,
238
+ closeMenu
239
+ } = useCombobox$1({
240
+ ...rest,
241
+ items: combinedItems,
242
+ itemToString,
243
+ itemToKey,
244
+ isOpen: open,
245
+ initialIsOpen: open,
246
+ environment: environmentProp ?? environment,
247
+ // NOTE: Reducer needs to be pure, side-effects should be in event handlers
248
+ stateReducer(state, { type, changes }) {
249
+ switch (type) {
250
+ // keep ComboboxLegacy open onBlur, will call close using Popover's onOutsidePress
251
+ case useCombobox$1.stateChangeTypes.InputBlur:
252
+ return {
253
+ ...changes,
254
+ isOpen: open != null ? open : true,
255
+ highlightedIndex: state.highlightedIndex
256
+ };
257
+ case useCombobox$1.stateChangeTypes.InputKeyDownEnter:
258
+ case useCombobox$1.stateChangeTypes.ItemClick:
259
+ if (changes.selectedItem === ADD_NEW) {
260
+ const stateInputValue = state.inputValue;
261
+ setTimeout(() => {
262
+ onSelectItemAddNew?.(stateInputValue);
263
+ }, 0);
264
+ return {
265
+ ...changes,
266
+ selectedItem: state.selectedItem,
267
+ inputValue: ""
268
+ };
269
+ } else {
270
+ return {
271
+ ...changes,
272
+ isOpen: open != null ? open : disableCloseOnSelectItem ? true : changes.isOpen,
273
+ highlightedIndex: disableCloseOnSelectItem ? 0 : changes.highlightedIndex
274
+ };
275
+ }
276
+ // prevent this from closing the popover by default
277
+ case useCombobox$1.stateChangeTypes.InputClick:
278
+ return { ...changes, isOpen: open != null ? open : true };
279
+ default:
280
+ return changes;
281
+ }
282
+ },
283
+ onInputValueChange: onInputValueChange ?? (({ inputValue: inputValue2, type, selectedItem: selectedItem2 }) => {
284
+ const inputValueMatchesSelectedItem = selectedItem2 != null && inputValue2 === itemToString(selectedItem2);
285
+ const inputValueIsEmpty = inputValue2 == null || inputValue2 === "";
286
+ if (type === useCombobox$1.stateChangeTypes.InputKeyDownEnter || type === useCombobox$1.stateChangeTypes.ItemClick) {
287
+ setItems(itemsProp);
288
+ setHasExactMatch(true);
289
+ } else if (!inputValueMatchesSelectedItem && !inputValueIsEmpty) {
290
+ setItems(matchSorter(itemsProp, inputValue2, filterOptions));
291
+ setHasExactMatch(
292
+ matchSorter(itemsProp, inputValue2, {
293
+ ...filterOptions,
294
+ threshold: matchSorter.rankings.EQUAL
295
+ }).length > 0
296
+ );
297
+ } else {
298
+ setItems(itemsProp);
299
+ setHasExactMatch(true);
300
+ }
301
+ }),
302
+ onSelectedItemChange(changes) {
303
+ const { selectedItem: selectedItem2 } = changes;
304
+ if (onChange != null)
305
+ onChange(selectedItem2 != null ? selectedItem2 : null);
306
+ },
307
+ onIsOpenChange({ isOpen: isOpen2, inputValue: inputValue2, selectedItem: selectedItem2 }) {
308
+ if (isOpen2 === false) {
309
+ setItems(itemsProp);
310
+ if (inputValue2 === "") {
311
+ selectItem(null);
312
+ } else {
313
+ setInputValue(selectedItem2 != null ? itemToString(selectedItem2) : "");
314
+ }
315
+ }
316
+ },
317
+ isItemDisabled(item) {
318
+ if (isDisabled || isReadOnly) {
319
+ return !!isDisabled || !!isReadOnly;
320
+ }
321
+ if (item && item instanceof Object && "disabled" in item && item.disabled) {
322
+ return true;
323
+ }
324
+ if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
325
+ return true;
326
+ }
327
+ if (disabledItems.includes(item)) {
328
+ return true;
329
+ }
330
+ return false;
331
+ }
332
+ });
333
+ const firstRenderRef = useRef(true);
334
+ useEffect(() => {
335
+ if (firstRenderRef.current === true) {
336
+ firstRenderRef.current = false;
337
+ }
338
+ }, []);
339
+ useEffect(() => {
340
+ setIsDisabled(disabled);
341
+ }, [disabled]);
342
+ useEffect(() => {
343
+ setIsReadOnly(readOnly);
344
+ }, [readOnly]);
345
+ useEffect(() => {
346
+ if (firstRenderRef.current) return;
347
+ const inputValueMatchesSelectedItem = selectedItem != null && inputValue === itemToString(selectedItem);
348
+ const inputValueIsEmpty = inputValue == null || inputValue === "";
349
+ if (!inputValueMatchesSelectedItem && !inputValueIsEmpty) {
350
+ setItems(matchSorter(itemsProp, inputValue, filterOptions));
351
+ setHasExactMatch(
352
+ matchSorter(itemsProp, inputValue, {
353
+ ...filterOptions,
354
+ threshold: matchSorter.rankings.EQUAL
355
+ }).length > 0
356
+ );
357
+ } else {
358
+ setItems(itemsProp);
359
+ setHasExactMatch(true);
360
+ }
361
+ }, [itemsProp]);
362
+ return /* @__PURE__ */ jsx(
363
+ ComboboxLegacyContext.Provider,
364
+ {
365
+ value: {
366
+ multiple: false,
367
+ select: false,
368
+ items,
369
+ itemToString,
370
+ itemToKey,
371
+ isOpen,
372
+ getLabelProps,
373
+ getInputProps,
374
+ getToggleButtonProps,
375
+ getMenuProps,
376
+ getItemProps,
377
+ highlightedIndex,
378
+ selectedItem,
379
+ selectedItems: [],
380
+ disabledItems,
381
+ setDisabledItems,
382
+ getSelectedItemProps: void 0,
383
+ getDropdownProps: void 0,
384
+ selectItem,
385
+ inputValue,
386
+ isDisabled,
387
+ isReadOnly,
388
+ setIsReadOnly,
389
+ setIsDisabled,
390
+ hasDisabledPopover,
391
+ setHasDisabledPopover,
392
+ hasEmpty,
393
+ setHasEmpty,
394
+ hasAddNew,
395
+ setHasAddNew,
396
+ onSelectItemAddNew,
397
+ setOnSelectItemAddNew,
398
+ hasExactMatch,
399
+ setHasExactMatch,
400
+ loading,
401
+ referenceRef,
402
+ contentRef,
403
+ closeMenu
404
+ },
405
+ children: /* @__PURE__ */ jsx(
406
+ "div",
407
+ {
408
+ className: ComboboxLegacyClassNames,
409
+ "data-anv": "combobox",
410
+ style: { ...style, ...layoutStyles },
411
+ ref: wrapperDivRef,
412
+ children: /* @__PURE__ */ jsx(
413
+ Popover,
414
+ {
415
+ root,
416
+ open: isOpen,
417
+ noPadding: true,
418
+ disableCaret: true,
419
+ fitScreen: true,
420
+ disableFlipFallback: true,
421
+ placement: "bottom-start",
422
+ matchReferenceWidth: !disableMatchReferenceWidth,
423
+ disableCloseOnClickOutside,
424
+ onOutsidePress: handleOutsidePress,
425
+ children
426
+ }
427
+ )
428
+ }
429
+ )
430
+ }
431
+ );
432
+ };
433
+ const ComboboxLegacyMultiple = function(props) {
434
+ const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
435
+ const {
436
+ className,
437
+ style,
438
+ children,
439
+ open,
440
+ items: itemsProp,
441
+ itemToString: itemToStringProp,
442
+ itemToKey: itemToKeyProp,
443
+ onChange,
444
+ onSelectedItemsChange,
445
+ disableCloseOnClickOutside = false,
446
+ disableMatchReferenceWidth = false,
447
+ disableCloseOnSelectItem = false,
448
+ disableClearInputValueOnSelectItem = false,
449
+ filterOptions,
450
+ loading = false,
451
+ root,
452
+ disabled,
453
+ readOnly,
454
+ stateReducer: _,
455
+ onInputValueChange,
456
+ initialSelectedItems,
457
+ initialActiveIndex,
458
+ defaultSelectedItems,
459
+ defaultActiveIndex,
460
+ activeIndex: activeIndexProp,
461
+ selectedItems: selectedItemsProp,
462
+ environment: environmentProp,
463
+ ...rest
464
+ } = componentProps;
465
+ const ComboboxLegacyClassNames = cx(styles$1["combobox"], className);
466
+ const [items, setItems] = useState(itemsProp);
467
+ const [hasAddNew, setHasAddNew] = useState(false);
468
+ const [onSelectItemAddNew, setOnSelectItemAddNew] = useState(void 0);
469
+ const [hasExactMatch, setHasExactMatch] = useState(false);
470
+ const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
471
+ const [hasEmpty, setHasEmpty] = useState(false);
472
+ const [disabledItems, setDisabledItems] = useState([]);
473
+ const [isReadOnly, setIsReadOnly] = useState(readOnly);
474
+ const [isDisabled, setIsDisabled] = useState(disabled);
475
+ let storedSetInputValue = void 0;
476
+ const referenceRef = useRef(null);
477
+ const contentRef = useRef(null);
478
+ const handleOutsidePress = (e) => {
479
+ const clickedInsideReference = referenceRef.current && e.target != null && referenceRef.current.contains(e.target);
480
+ if (!clickedInsideReference) {
481
+ closeMenu();
482
+ return true;
483
+ } else {
484
+ return false;
485
+ }
486
+ };
487
+ const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();
488
+ const showAddNew = hasAddNew && !hasExactMatch;
489
+ const combinedItems = useMemo(
490
+ () => showAddNew ? [...items, ADD_NEW] : items,
491
+ [items, showAddNew]
492
+ );
493
+ const itemToString = itemToStringProp ?? defaultItemToString;
494
+ const itemToKey = itemToKeyProp ?? defaultItemToKey;
495
+ const {
496
+ getSelectedItemProps,
497
+ getDropdownProps,
498
+ reset,
499
+ selectedItems,
500
+ addSelectedItem,
501
+ removeSelectedItem,
502
+ setSelectedItems
503
+ } = useMultipleSelection({
504
+ itemToKey,
505
+ initialSelectedItems,
506
+ initialActiveIndex,
507
+ defaultSelectedItems,
508
+ defaultActiveIndex,
509
+ activeIndex: activeIndexProp,
510
+ selectedItems: selectedItemsProp,
511
+ environment: environmentProp ?? environment,
512
+ stateReducer(state, { type, changes }) {
513
+ switch (type) {
514
+ // the Chip itself will handle "Backspace" and "Delete"
515
+ // just return previous state
516
+ case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace:
517
+ case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownDelete:
518
+ return state;
519
+ case useMultipleSelection.stateChangeTypes.FunctionRemoveSelectedItem:
520
+ return { ...changes, activeIndex: -1 };
521
+ case useMultipleSelection.stateChangeTypes.FunctionReset:
522
+ return { ...changes, selectedItems: [] };
523
+ default:
524
+ return changes;
525
+ }
526
+ },
527
+ onStateChange({ type }) {
528
+ switch (type) {
529
+ case useMultipleSelection.stateChangeTypes.FunctionReset:
530
+ storedSetInputValue?.("");
531
+ break;
532
+ }
533
+ },
534
+ onSelectedItemsChange(changes) {
535
+ const { selectedItems: selectedItems2 } = changes;
536
+ if (onChange != null) onChange(selectedItems2);
537
+ if (onSelectedItemsChange != null) onSelectedItemsChange(changes);
538
+ }
539
+ });
540
+ const {
541
+ isOpen,
542
+ getLabelProps,
543
+ getInputProps,
544
+ getToggleButtonProps,
545
+ getMenuProps,
546
+ getItemProps,
547
+ highlightedIndex,
548
+ selectedItem,
549
+ selectItem,
550
+ setInputValue,
551
+ inputValue,
552
+ closeMenu
553
+ } = useCombobox$1({
554
+ ...rest,
555
+ items: combinedItems,
556
+ itemToString,
557
+ itemToKey,
558
+ selectedItem: null,
559
+ isOpen: open,
560
+ initialIsOpen: open,
561
+ environment: environmentProp ?? environment,
562
+ // NOTE: Reducer needs to be pure, side-effects should be in event handlers
563
+ stateReducer(state, { type, changes }) {
564
+ switch (type) {
565
+ // keep ComboboxLegacy open onBlur, will call close using Popover's onOutsidePress
566
+ case useCombobox$1.stateChangeTypes.InputBlur:
567
+ return {
568
+ ...changes,
569
+ inputValue: state.inputValue,
570
+ selectedItem: null,
571
+ isOpen: open != null ? open : true,
572
+ highlightedIndex: state.highlightedIndex
573
+ };
574
+ case useCombobox$1.stateChangeTypes.InputKeyDownEnter:
575
+ case useCombobox$1.stateChangeTypes.ItemClick:
576
+ if (changes.selectedItem === ADD_NEW) {
577
+ const stateInputValue = state.inputValue;
578
+ setTimeout(() => {
579
+ onSelectItemAddNew?.(stateInputValue);
580
+ }, 0);
581
+ return {
582
+ ...changes,
583
+ selectedItem: state.selectedItem,
584
+ inputValue: ""
585
+ };
586
+ } else {
587
+ return {
588
+ ...changes,
589
+ isOpen: open != null ? open : disableCloseOnSelectItem ? true : changes.isOpen,
590
+ highlightedIndex: disableCloseOnSelectItem ? disableClearInputValueOnSelectItem || !state.inputValue ? state.highlightedIndex : 0 : changes.highlightedIndex,
591
+ inputValue: disableClearInputValueOnSelectItem ? state.inputValue : ""
592
+ };
593
+ }
594
+ // prevent this from closing the popover by default
595
+ case useCombobox$1.stateChangeTypes.InputClick:
596
+ return { ...changes, isOpen: open != null ? open : true };
597
+ // prevent this from clearing the input value by default
598
+ case useCombobox$1.stateChangeTypes.ControlledPropUpdatedSelectedItem:
599
+ return { ...changes, inputValue: state.inputValue };
600
+ default:
601
+ return changes;
602
+ }
603
+ },
604
+ onStateChange({ type, selectedItem: newSelectedItem }) {
605
+ switch (type) {
606
+ case useCombobox$1.stateChangeTypes.InputKeyDownEnter:
607
+ case useCombobox$1.stateChangeTypes.ItemClick:
608
+ case useCombobox$1.stateChangeTypes.InputBlur:
609
+ if (newSelectedItem != null) {
610
+ const itemAlreadySelected = selectedItems.some(
611
+ (item) => itemToKey(item) === itemToKey(newSelectedItem)
612
+ );
613
+ if (itemAlreadySelected) {
614
+ removeSelectedItem(newSelectedItem);
615
+ } else {
616
+ addSelectedItem(newSelectedItem);
617
+ }
618
+ }
619
+ break;
620
+ }
621
+ },
622
+ onInputValueChange: onInputValueChange ?? (({ inputValue: inputValue2, ...changes }) => {
623
+ const { type, selectedItem: selectedItem2 } = changes;
624
+ const inputValueMatchesSelectedItem = selectedItem2 != null && inputValue2 === itemToString(selectedItem2);
625
+ const inputValueIsEmpty = inputValue2 == null || inputValue2 === "";
626
+ if (type === useCombobox$1.stateChangeTypes.InputKeyDownEnter || type === useCombobox$1.stateChangeTypes.ItemClick) {
627
+ setItems(itemsProp);
628
+ setHasExactMatch(true);
629
+ } else if (!inputValueMatchesSelectedItem && !inputValueIsEmpty) {
630
+ setItems(matchSorter(itemsProp, inputValue2, filterOptions));
631
+ setHasExactMatch(
632
+ matchSorter(itemsProp, inputValue2, {
633
+ ...filterOptions,
634
+ threshold: matchSorter.rankings.EQUAL
635
+ }).length > 0
636
+ );
637
+ } else {
638
+ setItems(itemsProp);
639
+ setHasExactMatch(true);
640
+ }
641
+ }),
642
+ onIsOpenChange({ isOpen: isOpen2 }) {
643
+ if (isOpen2 === false) {
644
+ setInputValue("");
645
+ setItems(itemsProp);
646
+ }
647
+ },
648
+ isItemDisabled(item) {
649
+ if (isDisabled || isReadOnly) {
650
+ return !!isDisabled || !!isReadOnly;
651
+ }
652
+ if (item && item instanceof Object && "disabled" in item && item.disabled) {
653
+ return true;
654
+ }
655
+ if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
656
+ return true;
657
+ }
658
+ if (disabledItems.includes(item)) {
659
+ return true;
660
+ }
661
+ return false;
662
+ }
663
+ });
664
+ storedSetInputValue = setInputValue;
665
+ const firstRenderRef = useRef(true);
666
+ useEffect(() => {
667
+ if (firstRenderRef.current === true) {
668
+ firstRenderRef.current = false;
669
+ }
670
+ }, []);
671
+ useEffect(() => {
672
+ setIsDisabled(disabled);
673
+ }, [disabled]);
674
+ useEffect(() => {
675
+ setIsReadOnly(readOnly);
676
+ }, [readOnly]);
677
+ useEffect(() => {
678
+ if (firstRenderRef.current) return;
679
+ const inputValueIsEmpty = inputValue == null || inputValue === "";
680
+ if (!inputValueIsEmpty) {
681
+ setItems(matchSorter(itemsProp, inputValue, filterOptions));
682
+ setHasExactMatch(
683
+ matchSorter(itemsProp, inputValue, {
684
+ ...filterOptions,
685
+ threshold: matchSorter.rankings.EQUAL
686
+ }).length > 0
687
+ );
688
+ } else {
689
+ setItems(itemsProp);
690
+ setHasExactMatch(true);
691
+ }
692
+ }, [itemsProp]);
693
+ return /* @__PURE__ */ jsx(
694
+ ComboboxLegacyContext.Provider,
695
+ {
696
+ value: {
697
+ multiple: true,
698
+ select: false,
699
+ items,
700
+ itemToString,
701
+ itemToKey,
702
+ isOpen,
703
+ getLabelProps,
704
+ getInputProps,
705
+ getToggleButtonProps,
706
+ getMenuProps,
707
+ getItemProps,
708
+ highlightedIndex,
709
+ selectedItem,
710
+ selectedItems,
711
+ disabledItems,
712
+ setDisabledItems,
713
+ getSelectedItemProps,
714
+ getDropdownProps,
715
+ reset,
716
+ addSelectedItem,
717
+ removeSelectedItem,
718
+ setSelectedItems,
719
+ selectItem,
720
+ inputValue,
721
+ isDisabled,
722
+ isReadOnly,
723
+ setIsReadOnly,
724
+ setIsDisabled,
725
+ hasDisabledPopover,
726
+ setHasDisabledPopover,
727
+ hasEmpty,
728
+ setHasEmpty,
729
+ hasAddNew,
730
+ setHasAddNew,
731
+ onSelectItemAddNew,
732
+ setOnSelectItemAddNew,
733
+ hasExactMatch,
734
+ setHasExactMatch,
735
+ loading,
736
+ referenceRef,
737
+ contentRef,
738
+ closeMenu
739
+ },
740
+ children: /* @__PURE__ */ jsx(
741
+ "div",
742
+ {
743
+ className: ComboboxLegacyClassNames,
744
+ "data-anv": "combobox",
745
+ style: { ...style, ...layoutStyles },
746
+ ref: wrapperDivRef,
747
+ children: /* @__PURE__ */ jsx(
748
+ Popover,
749
+ {
750
+ root,
751
+ open: !isDisabled && isOpen,
752
+ noPadding: true,
753
+ disableCaret: true,
754
+ fitScreen: true,
755
+ disableFlipFallback: true,
756
+ placement: "bottom-start",
757
+ matchReferenceWidth: !disableMatchReferenceWidth,
758
+ disableCloseOnClickOutside,
759
+ onOutsidePress: handleOutsidePress,
760
+ children
761
+ }
762
+ )
763
+ }
764
+ )
765
+ }
766
+ );
767
+ };
768
+ const SelectLegacySingle = function(props) {
769
+ const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
770
+ const {
771
+ className,
772
+ style,
773
+ children,
774
+ open,
775
+ disabled,
776
+ readOnly,
777
+ items,
778
+ itemToString: itemToStringProp,
779
+ itemToKey: itemToKeyProp,
780
+ onChange,
781
+ disableClearSelection = false,
782
+ disableCloseOnClickOutside = false,
783
+ disableMatchReferenceWidth = false,
784
+ disableCloseOnSelectItem = false,
785
+ loading = false,
786
+ root,
787
+ environment: environmentProp,
788
+ ...rest
789
+ } = componentProps;
790
+ const ComboboxLegacyClassNames = cx(styles$1["combobox"], className);
791
+ const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
792
+ const [hasEmpty, setHasEmpty] = useState(false);
793
+ const [disabledItems, setDisabledItems] = useState([]);
794
+ const [isReadOnly, setIsReadOnly] = useState(readOnly);
795
+ const [isDisabled, setIsDisabled] = useState(disabled);
796
+ const referenceRef = useRef(null);
797
+ const contentRef = useRef(null);
798
+ const handleOutsidePress = (e) => {
799
+ const clickedInsideReference = referenceRef.current && e.target != null && referenceRef.current.contains(e.target);
800
+ if (!clickedInsideReference) {
801
+ closeMenu();
802
+ return true;
803
+ } else {
804
+ return false;
805
+ }
806
+ };
807
+ const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();
808
+ const itemToString = itemToStringProp ?? defaultItemToString;
809
+ const itemToKey = itemToKeyProp ?? defaultItemToKey;
810
+ const {
811
+ isOpen,
812
+ getLabelProps,
813
+ getToggleButtonProps,
814
+ getMenuProps,
815
+ getItemProps,
816
+ highlightedIndex,
817
+ selectedItem,
818
+ selectItem,
819
+ inputValue,
820
+ closeMenu
821
+ } = useSelect({
822
+ ...rest,
823
+ items,
824
+ itemToString,
825
+ itemToKey,
826
+ isOpen: open,
827
+ initialIsOpen: open,
828
+ environment: environmentProp ?? environment,
829
+ // NOTE: Reducer needs to be pure, side-effects should be in event handlers
830
+ stateReducer(state, { type, changes }) {
831
+ switch (type) {
832
+ // keep ComboboxLegacy open onBlur, will call close using Popover's onOutsidePress
833
+ case useSelect.stateChangeTypes.ToggleButtonBlur:
834
+ return {
835
+ ...changes,
836
+ isOpen: open != null ? open : true,
837
+ highlightedIndex: state.highlightedIndex
838
+ };
839
+ case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
840
+ case useSelect.stateChangeTypes.ItemClick:
841
+ return {
842
+ ...changes,
843
+ isOpen: open != null ? open : disableCloseOnSelectItem ? true : changes.isOpen,
844
+ highlightedIndex: disableCloseOnSelectItem ? 0 : changes.highlightedIndex
845
+ };
846
+ // prevent this from closing the popover by default
847
+ case useSelect.stateChangeTypes.ToggleButtonClick:
848
+ return { ...changes, isOpen: open != null ? open : true };
849
+ default:
850
+ return changes;
851
+ }
852
+ },
853
+ onSelectedItemChange(changes) {
854
+ const { selectedItem: selectedItem2 } = changes;
855
+ if (onChange != null)
856
+ onChange(selectedItem2 != null ? selectedItem2 : null);
857
+ },
858
+ isItemDisabled(item) {
859
+ if (isDisabled || isReadOnly) {
860
+ return !!isDisabled || !!isReadOnly;
861
+ }
862
+ if (item && item instanceof Object && "disabled" in item && item.disabled) {
863
+ return true;
864
+ }
865
+ if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
866
+ return true;
867
+ }
868
+ if (disabledItems.includes(item)) {
869
+ return true;
870
+ }
871
+ return false;
872
+ }
873
+ });
874
+ useEffect(() => {
875
+ setIsDisabled(disabled);
876
+ }, [disabled]);
877
+ useEffect(() => {
878
+ setIsReadOnly(readOnly);
879
+ }, [readOnly]);
880
+ return /* @__PURE__ */ jsx(
881
+ ComboboxLegacyContext.Provider,
882
+ {
883
+ value: {
884
+ multiple: false,
885
+ select: true,
886
+ disableClearSelection,
887
+ items,
888
+ itemToString,
889
+ itemToKey,
890
+ isOpen,
891
+ getLabelProps,
892
+ getToggleButtonProps,
893
+ getMenuProps,
894
+ getItemProps,
895
+ highlightedIndex,
896
+ selectedItem,
897
+ selectedItems: [],
898
+ disabledItems,
899
+ setDisabledItems,
900
+ selectItem,
901
+ inputValue,
902
+ isDisabled,
903
+ isReadOnly,
904
+ setIsReadOnly,
905
+ setIsDisabled,
906
+ hasDisabledPopover,
907
+ setHasDisabledPopover,
908
+ hasEmpty,
909
+ setHasEmpty,
910
+ loading,
911
+ referenceRef,
912
+ contentRef,
913
+ closeMenu
914
+ },
915
+ children: /* @__PURE__ */ jsx(
916
+ "div",
917
+ {
918
+ className: ComboboxLegacyClassNames,
919
+ "data-anv": "combobox",
920
+ style: { ...style, ...layoutStyles },
921
+ ref: wrapperDivRef,
922
+ children: /* @__PURE__ */ jsx(
923
+ Popover,
924
+ {
925
+ root,
926
+ open: isOpen,
927
+ noPadding: true,
928
+ disableCaret: true,
929
+ fitScreen: true,
930
+ disableFlipFallback: true,
931
+ placement: "bottom-start",
932
+ matchReferenceWidth: !disableMatchReferenceWidth,
933
+ disableCloseOnClickOutside,
934
+ onOutsidePress: handleOutsidePress,
935
+ children
936
+ }
937
+ )
938
+ }
939
+ )
940
+ }
941
+ );
942
+ };
943
+ const SelectLegacyMultiple = function(props) {
944
+ const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
945
+ const {
946
+ className,
947
+ style,
948
+ children,
949
+ open,
950
+ items,
951
+ itemToString: itemToStringProp,
952
+ itemToKey: itemToKeyProp,
953
+ onChange,
954
+ onSelectedItemsChange,
955
+ disableCloseOnClickOutside = false,
956
+ disableMatchReferenceWidth = false,
957
+ disableCloseOnSelectItem = false,
958
+ loading = false,
959
+ root,
960
+ disabled,
961
+ readOnly,
962
+ stateReducer: _,
963
+ initialSelectedItems,
964
+ initialActiveIndex,
965
+ defaultSelectedItems,
966
+ defaultActiveIndex,
967
+ activeIndex: activeIndexProp,
968
+ selectedItems: selectedItemsProp,
969
+ environment: environmentProp,
970
+ ...rest
971
+ } = componentProps;
972
+ const ComboboxLegacyClassNames = cx(styles$1["combobox"], className);
973
+ const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
974
+ const [hasEmpty, setHasEmpty] = useState(false);
975
+ const [disabledItems, setDisabledItems] = useState([]);
976
+ const [isReadOnly, setIsReadOnly] = useState(readOnly);
977
+ const [isDisabled, setIsDisabled] = useState(disabled);
978
+ const referenceRef = useRef(null);
979
+ const contentRef = useRef(null);
980
+ const handleOutsidePress = (e) => {
981
+ const clickedInsideReference = referenceRef.current && e.target != null && referenceRef.current.contains(e.target);
982
+ if (!clickedInsideReference) {
983
+ closeMenu();
984
+ return true;
985
+ } else {
986
+ return false;
987
+ }
988
+ };
989
+ const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();
990
+ const itemToString = itemToStringProp ?? defaultItemToString;
991
+ const itemToKey = itemToKeyProp ?? defaultItemToKey;
992
+ const {
993
+ getSelectedItemProps,
994
+ getDropdownProps,
995
+ reset,
996
+ selectedItems,
997
+ addSelectedItem,
998
+ removeSelectedItem,
999
+ setSelectedItems
1000
+ } = useMultipleSelection({
1001
+ itemToKey,
1002
+ initialSelectedItems,
1003
+ initialActiveIndex,
1004
+ defaultSelectedItems,
1005
+ defaultActiveIndex,
1006
+ activeIndex: activeIndexProp,
1007
+ selectedItems: selectedItemsProp,
1008
+ environment: environmentProp ?? environment,
1009
+ stateReducer(state, { type, changes }) {
1010
+ switch (type) {
1011
+ // the Chip itself will handle "Backspace" and "Delete"
1012
+ // just return previous state
1013
+ case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace:
1014
+ case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownDelete:
1015
+ return state;
1016
+ case useMultipleSelection.stateChangeTypes.FunctionRemoveSelectedItem:
1017
+ return { ...changes, activeIndex: -1 };
1018
+ case useMultipleSelection.stateChangeTypes.FunctionReset:
1019
+ return { ...changes, selectedItems: [] };
1020
+ default:
1021
+ return changes;
1022
+ }
1023
+ },
1024
+ onSelectedItemsChange(changes) {
1025
+ const { selectedItems: selectedItems2 } = changes;
1026
+ if (onChange != null) onChange(selectedItems2);
1027
+ if (onSelectedItemsChange != null) onSelectedItemsChange(changes);
1028
+ }
1029
+ });
1030
+ const {
1031
+ isOpen,
1032
+ getLabelProps,
1033
+ getToggleButtonProps,
1034
+ getMenuProps,
1035
+ getItemProps,
1036
+ highlightedIndex,
1037
+ selectedItem,
1038
+ selectItem,
1039
+ inputValue,
1040
+ closeMenu
1041
+ } = useSelect({
1042
+ ...rest,
1043
+ items,
1044
+ itemToString,
1045
+ itemToKey,
1046
+ selectedItem: null,
1047
+ isOpen: open,
1048
+ initialIsOpen: open,
1049
+ environment: environmentProp ?? environment,
1050
+ // NOTE: Reducer needs to be pure, side-effects should be in event handlers
1051
+ stateReducer(state, { type, changes }) {
1052
+ switch (type) {
1053
+ // keep ComboboxLegacy open onBlur, will call close using Popover's onOutsidePress
1054
+ case useSelect.stateChangeTypes.ToggleButtonBlur:
1055
+ return {
1056
+ ...changes,
1057
+ selectedItem: null,
1058
+ isOpen: open != null ? open : true,
1059
+ highlightedIndex: state.highlightedIndex
1060
+ };
1061
+ case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
1062
+ case useSelect.stateChangeTypes.ItemClick:
1063
+ return {
1064
+ ...changes,
1065
+ isOpen: open != null ? open : disableCloseOnSelectItem ? true : changes.isOpen,
1066
+ highlightedIndex: disableCloseOnSelectItem ? 0 : changes.highlightedIndex
1067
+ };
1068
+ // prevent this from closing the popover by default
1069
+ case useSelect.stateChangeTypes.ToggleButtonClick:
1070
+ return { ...changes, isOpen: open != null ? open : true };
1071
+ default:
1072
+ return changes;
1073
+ }
1074
+ },
1075
+ onStateChange({ type, selectedItem: newSelectedItem }) {
1076
+ switch (type) {
1077
+ case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
1078
+ case useSelect.stateChangeTypes.ItemClick:
1079
+ case useSelect.stateChangeTypes.ToggleButtonBlur:
1080
+ if (newSelectedItem != null) {
1081
+ const itemAlreadySelected = selectedItems.some(
1082
+ (item) => itemToKey(item) === itemToKey(newSelectedItem)
1083
+ );
1084
+ if (itemAlreadySelected) {
1085
+ removeSelectedItem(newSelectedItem);
1086
+ } else {
1087
+ addSelectedItem(newSelectedItem);
1088
+ }
1089
+ }
1090
+ break;
1091
+ }
1092
+ },
1093
+ isItemDisabled(item) {
1094
+ if (isDisabled || isReadOnly) {
1095
+ return !!isDisabled || !!isReadOnly;
1096
+ }
1097
+ if (item && item instanceof Object && "disabled" in item && item.disabled) {
1098
+ return true;
1099
+ }
1100
+ if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
1101
+ return true;
1102
+ }
1103
+ if (disabledItems.includes(item)) {
1104
+ return true;
1105
+ }
1106
+ return false;
1107
+ }
1108
+ });
1109
+ useEffect(() => {
1110
+ setIsDisabled(disabled);
1111
+ }, [disabled]);
1112
+ useEffect(() => {
1113
+ setIsReadOnly(readOnly);
1114
+ }, [readOnly]);
1115
+ return /* @__PURE__ */ jsx(
1116
+ ComboboxLegacyContext.Provider,
1117
+ {
1118
+ value: {
1119
+ multiple: true,
1120
+ select: true,
1121
+ items,
1122
+ itemToString,
1123
+ itemToKey,
1124
+ isOpen,
1125
+ getLabelProps,
1126
+ getToggleButtonProps,
1127
+ getMenuProps,
1128
+ getItemProps,
1129
+ highlightedIndex,
1130
+ selectedItem,
1131
+ selectedItems,
1132
+ disabledItems,
1133
+ setDisabledItems,
1134
+ getSelectedItemProps,
1135
+ getDropdownProps,
1136
+ reset,
1137
+ addSelectedItem,
1138
+ removeSelectedItem,
1139
+ setSelectedItems,
1140
+ selectItem,
1141
+ inputValue,
1142
+ isDisabled,
1143
+ isReadOnly,
1144
+ setIsReadOnly,
1145
+ setIsDisabled,
1146
+ hasDisabledPopover,
1147
+ setHasDisabledPopover,
1148
+ hasEmpty,
1149
+ setHasEmpty,
1150
+ loading,
1151
+ referenceRef,
1152
+ contentRef,
1153
+ closeMenu
1154
+ },
1155
+ children: /* @__PURE__ */ jsx(
1156
+ "div",
1157
+ {
1158
+ className: ComboboxLegacyClassNames,
1159
+ "data-anv": "combobox",
1160
+ style: { ...style, ...layoutStyles },
1161
+ ref: wrapperDivRef,
1162
+ children: /* @__PURE__ */ jsx(
1163
+ Popover,
1164
+ {
1165
+ root,
1166
+ open: !isDisabled && isOpen,
1167
+ noPadding: true,
1168
+ disableCaret: true,
1169
+ fitScreen: true,
1170
+ disableFlipFallback: true,
1171
+ placement: "bottom-start",
1172
+ matchReferenceWidth: !disableMatchReferenceWidth,
1173
+ disableCloseOnClickOutside,
1174
+ onOutsidePress: handleOutsidePress,
1175
+ children
1176
+ }
1177
+ )
1178
+ }
1179
+ )
1180
+ }
1181
+ );
1182
+ };
1183
+
1184
+ const ComboboxLegacyTrigger = ({
1185
+ // variant: variantProp = "combobox",
1186
+ className,
1187
+ label,
1188
+ size,
1189
+ error,
1190
+ hint,
1191
+ description,
1192
+ required,
1193
+ moreInfo,
1194
+ openMoreInfo,
1195
+ prefix,
1196
+ suffix,
1197
+ maxRows,
1198
+ id,
1199
+ disabled,
1200
+ readOnly,
1201
+ ...rest
1202
+ }) => {
1203
+ const {
1204
+ select,
1205
+ disableClearSelection,
1206
+ itemToString,
1207
+ getLabelProps,
1208
+ getInputProps,
1209
+ getToggleButtonProps,
1210
+ selectedItem,
1211
+ selectedItems,
1212
+ getSelectedItemProps,
1213
+ getDropdownProps,
1214
+ reset,
1215
+ removeSelectedItem,
1216
+ selectItem,
1217
+ inputValue,
1218
+ isDisabled,
1219
+ isReadOnly,
1220
+ referenceRef,
1221
+ contentRef,
1222
+ closeMenu,
1223
+ setIsDisabled,
1224
+ setIsReadOnly
1225
+ } = useComboboxLegacy();
1226
+ const variant = select ? "select" : "combobox";
1227
+ const context = usePopoverLegacyContext();
1228
+ const inputRef = useRef(null);
1229
+ const ComboboxLegacyTriggerClassNames = cx(styles$1["search-field"], {
1230
+ [styles$1["select"]]: variant === "select"
1231
+ });
1232
+ const noClearButton = isDisabled || isReadOnly || disableClearSelection;
1233
+ const ComboboxLegacyInputWrapperClassNames = cx(
1234
+ styles$1["input-wrapper"],
1235
+ className ? {
1236
+ [className]: variant === "select"
1237
+ } : {},
1238
+ {
1239
+ [styles$1["small"]]: size === "small",
1240
+ [styles$1["large"]]: size === "large",
1241
+ [styles$1["no-clear-button"]]: noClearButton
1242
+ }
1243
+ );
1244
+ const ComboboxLegacyInputClassNames = cx(
1245
+ styles$1["input"],
1246
+ className ? {
1247
+ [className]: variant === "combobox"
1248
+ } : {},
1249
+ {
1250
+ [styles$1["error"]]: error
1251
+ }
1252
+ );
1253
+ useLayoutEffect(() => {
1254
+ if (typeof disabled === "undefined") return;
1255
+ setIsDisabled(disabled);
1256
+ }, [disabled, setIsDisabled]);
1257
+ useLayoutEffect(() => {
1258
+ if (typeof readOnly === "undefined") return;
1259
+ setIsReadOnly(readOnly);
1260
+ }, [readOnly, setIsReadOnly]);
1261
+ const labelUid = "label" + useId();
1262
+ const helperUid = "helper" + useId();
1263
+ const placeholderUid = "placeholder" + useId();
1264
+ const ariaDescribedBy = `${helperUid} ${placeholderUid}`;
1265
+ const errorMessage = typeof error !== "boolean" ? error : void 0;
1266
+ const handleBlur = (e) => {
1267
+ const target = e.relatedTarget ?? e.target;
1268
+ const focusedOnReference = referenceRef.current && referenceRef.current.contains(target);
1269
+ const focusedOnContent = contentRef.current && contentRef.current.contains(target);
1270
+ if (!focusedOnReference && !focusedOnContent) {
1271
+ closeMenu();
1272
+ }
1273
+ };
1274
+ const rowsRef = useRef(null);
1275
+ const [stillCalculating, setStillCalculating] = useState(false);
1276
+ const [collapsedChips, setCollapsedChips] = useState(false);
1277
+ const [visibleChipsCount, setVisibleChipsCount] = useState(
1278
+ null
1279
+ );
1280
+ const [forceRenderCount, setForceRenderCount] = useState(0);
1281
+ useLayoutEffect(() => {
1282
+ if (maxRows === void 0) return;
1283
+ if (stillCalculating === false) {
1284
+ setStillCalculating(true);
1285
+ setCollapsedChips(false);
1286
+ setVisibleChipsCount(null);
1287
+ setForceRenderCount((x) => x + 1);
1288
+ } else if (rowsRef?.current?.children) {
1289
+ const children = rowsRef?.current?.children;
1290
+ const rowData = Array.from(children).reduce(
1291
+ (acc, child) => {
1292
+ const top = child.getBoundingClientRect().top;
1293
+ if (!acc.length) {
1294
+ return [{ count: 1, top }];
1295
+ } else if (acc[acc.length - 1].top === top) {
1296
+ return [
1297
+ ...acc.slice(0, -1),
1298
+ { count: acc[acc.length - 1].count + 1, top }
1299
+ ];
1300
+ } else if (acc[acc.length - 1].top !== top) {
1301
+ return [...acc, { count: 1, top }];
1302
+ } else {
1303
+ return acc;
1304
+ }
1305
+ },
1306
+ []
1307
+ );
1308
+ if (!rowData[maxRows] || visibleChipsCount === 0) {
1309
+ setStillCalculating(false);
1310
+ } else {
1311
+ setCollapsedChips(true);
1312
+ if (visibleChipsCount == null) {
1313
+ const firstGuess = Math.max(
1314
+ rowData.reduce((sum, row) => sum + row.count, -2),
1315
+ 0
1316
+ );
1317
+ setVisibleChipsCount(firstGuess);
1318
+ } else {
1319
+ setVisibleChipsCount(visibleChipsCount - 1);
1320
+ }
1321
+ setForceRenderCount((x) => x + 1);
1322
+ }
1323
+ }
1324
+ }, [selectedItems.length, maxRows, forceRenderCount]);
1325
+ const selectedItemsDisplayCount = collapsedChips && maxRows != null && visibleChipsCount !== null ? visibleChipsCount : selectedItems.length;
1326
+ return /* @__PURE__ */ jsxs(
1327
+ "div",
1328
+ {
1329
+ className: ComboboxLegacyTriggerClassNames,
1330
+ "data-anv": "combobox-searchfield",
1331
+ ref: referenceRef,
1332
+ onBlur: handleBlur,
1333
+ children: [
1334
+ label ? /* @__PURE__ */ jsx(
1335
+ Label,
1336
+ {
1337
+ ...getLabelProps({
1338
+ className: styles$1["label"],
1339
+ required,
1340
+ moreInfo,
1341
+ openMoreInfo,
1342
+ id: labelUid
1343
+ }),
1344
+ children: label
1345
+ }
1346
+ ) : null,
1347
+ /* @__PURE__ */ jsxs(
1348
+ "div",
1349
+ {
1350
+ className: ComboboxLegacyInputWrapperClassNames,
1351
+ role: "presentation",
1352
+ ...variant === "select" ? {
1353
+ ...getToggleButtonProps({
1354
+ disabled: isDisabled,
1355
+ readOnly: isReadOnly,
1356
+ ref: context.refs.setReference,
1357
+ id,
1358
+ "aria-describedby": ariaDescribedBy,
1359
+ "aria-labelledby": labelUid
1360
+ })
1361
+ } : {
1362
+ ref: context.refs.setReference,
1363
+ onClick: () => inputRef.current?.focus()
1364
+ },
1365
+ children: [
1366
+ /* @__PURE__ */ jsxs("div", { className: styles$1["buttons-wrapper"], children: [
1367
+ (inputValue || selectedItem || selectedItems.length) && !noClearButton ? /* @__PURE__ */ jsx("div", { className: styles$1["close-button-wrapper"], children: /* @__PURE__ */ jsx(
1368
+ Button,
1369
+ {
1370
+ "aria-label": "clear selection",
1371
+ appearance: "ghost",
1372
+ size: "small",
1373
+ icon: SvgClose,
1374
+ className: styles$1["close-button"],
1375
+ onClick: (e) => {
1376
+ e.stopPropagation();
1377
+ if (reset != null) {
1378
+ reset();
1379
+ } else {
1380
+ selectItem(null);
1381
+ }
1382
+ },
1383
+ tabIndex: -1
1384
+ }
1385
+ ) }) : null,
1386
+ /* @__PURE__ */ jsx("div", { className: styles$1["toggle-button-wrapper"], children: /* @__PURE__ */ jsx(
1387
+ Button,
1388
+ {
1389
+ ...variant === "select" ? { tabIndex: -1 } : getToggleButtonProps(),
1390
+ className: styles$1["toggle-button"],
1391
+ "aria-label": "toggle menu",
1392
+ icon: SvgChevronRight,
1393
+ appearance: "ghost",
1394
+ size: "small",
1395
+ disabled: isDisabled
1396
+ }
1397
+ ) })
1398
+ ] }),
1399
+ /* @__PURE__ */ jsxs("div", { className: styles$1["rows-wrapper"], ref: rowsRef, children: [
1400
+ selectedItems.length && removeSelectedItem != null && getSelectedItemProps != null ? selectedItems.slice(0, selectedItemsDisplayCount).map((item, index) => {
1401
+ const { onClick, ...selectedItemProps } = getSelectedItemProps({
1402
+ selectedItem: item,
1403
+ index
1404
+ });
1405
+ return /* @__PURE__ */ jsx(
1406
+ "div",
1407
+ {
1408
+ className: styles$1["chip-wrapper"],
1409
+ children: /* @__PURE__ */ jsx(
1410
+ Chip,
1411
+ {
1412
+ ...selectedItemProps,
1413
+ label: itemToString(item),
1414
+ onClose: isDisabled || isReadOnly ? void 0 : (_e) => {
1415
+ removeSelectedItem(item);
1416
+ },
1417
+ className: styles$1["chip"],
1418
+ title: itemToString(item)
1419
+ }
1420
+ )
1421
+ },
1422
+ `selected-item-${index}`
1423
+ );
1424
+ }) : null,
1425
+ collapsedChips && maxRows != null ? /* @__PURE__ */ jsx("div", { className: styles$1["chip-wrapper"], children: /* @__PURE__ */ jsx(
1426
+ Chip,
1427
+ {
1428
+ label: `+${selectedItems.length - selectedItemsDisplayCount}`,
1429
+ className: styles$1["chip"],
1430
+ title: selectedItems.slice(selectedItemsDisplayCount).map((item) => itemToString(item)).join(", ")
1431
+ }
1432
+ ) }) : null,
1433
+ /* @__PURE__ */ jsxs(Flex, { className: styles$1["input-flex"], alignItems: "center", children: [
1434
+ prefix ? /* @__PURE__ */ jsx("div", { className: styles$1["prefix"], children: prefix }) : null,
1435
+ variant === "select" ? /* @__PURE__ */ jsx(
1436
+ "div",
1437
+ {
1438
+ ...getDropdownProps != null ? getDropdownProps({
1439
+ className: ComboboxLegacyInputClassNames,
1440
+ required,
1441
+ preventKeyAction: false
1442
+ }) : {
1443
+ className: ComboboxLegacyInputClassNames,
1444
+ required
1445
+ },
1446
+ children: selectedItems.length ? null : selectedItem ? itemToString(selectedItem) : /* @__PURE__ */ jsx(
1447
+ "span",
1448
+ {
1449
+ className: styles$1["fake-placeholder"],
1450
+ id: placeholderUid,
1451
+ children: rest.placeholder
1452
+ }
1453
+ )
1454
+ }
1455
+ ) : /* @__PURE__ */ jsx(
1456
+ "input",
1457
+ {
1458
+ ...getDropdownProps != null && getInputProps != null ? getInputProps(
1459
+ getDropdownProps({
1460
+ ...rest,
1461
+ className: ComboboxLegacyInputClassNames,
1462
+ disabled: isDisabled,
1463
+ readOnly: isReadOnly,
1464
+ required,
1465
+ autoComplete: "off",
1466
+ id,
1467
+ "aria-describedby": ariaDescribedBy,
1468
+ "aria-labelledby": labelUid,
1469
+ preventKeyAction: false,
1470
+ ref: inputRef
1471
+ })
1472
+ ) : getInputProps != null ? getInputProps({
1473
+ ...rest,
1474
+ className: ComboboxLegacyInputClassNames,
1475
+ disabled: isDisabled,
1476
+ readOnly: isReadOnly,
1477
+ required,
1478
+ autoComplete: "off",
1479
+ id,
1480
+ "aria-describedby": ariaDescribedBy,
1481
+ "aria-labelledby": labelUid,
1482
+ ref: inputRef
1483
+ }) : {}
1484
+ }
1485
+ ),
1486
+ suffix ? /* @__PURE__ */ jsx("div", { className: styles$1["suffix"], children: suffix }) : null
1487
+ ] })
1488
+ ] })
1489
+ ]
1490
+ }
1491
+ ),
1492
+ hint || errorMessage || description ? /* @__PURE__ */ jsx(
1493
+ Helper,
1494
+ {
1495
+ id: helperUid,
1496
+ errorMessage,
1497
+ hint,
1498
+ description
1499
+ }
1500
+ ) : null
1501
+ ]
1502
+ }
1503
+ );
1504
+ };
1505
+
1506
+ const ComboboxLegacyContent = function({
1507
+ children,
1508
+ className,
1509
+ disablePopover = false,
1510
+ ...rest
1511
+ }) {
1512
+ const {
1513
+ items,
1514
+ itemToKey,
1515
+ inputValue,
1516
+ selectedItem,
1517
+ selectedItems,
1518
+ setHasDisabledPopover,
1519
+ getMenuProps,
1520
+ getItemProps,
1521
+ isDisabled,
1522
+ isReadOnly,
1523
+ referenceRef,
1524
+ contentRef,
1525
+ closeMenu
1526
+ } = useComboboxLegacy();
1527
+ const ComboboxLegacyPopoverContentClassNames = cx(
1528
+ styles$1["popover-content"],
1529
+ className
1530
+ );
1531
+ useEffect(() => {
1532
+ setHasDisabledPopover(disablePopover);
1533
+ return () => {
1534
+ setHasDisabledPopover(false);
1535
+ };
1536
+ }, [disablePopover, setHasDisabledPopover]);
1537
+ const handleBlur = (e) => {
1538
+ const target = e.relatedTarget ?? e.target;
1539
+ const focusedOnReference = referenceRef.current && referenceRef.current.contains(target);
1540
+ const focusedOnContent = contentRef.current && contentRef.current.contains(target);
1541
+ if (!focusedOnReference && !focusedOnContent) {
1542
+ closeMenu();
1543
+ }
1544
+ };
1545
+ return disablePopover ? /* @__PURE__ */ jsx(
1546
+ "div",
1547
+ {
1548
+ ...rest,
1549
+ className: ComboboxLegacyPopoverContentClassNames,
1550
+ ref: contentRef,
1551
+ onBlur: handleBlur,
1552
+ children: children ? children({
1553
+ items,
1554
+ inputValue,
1555
+ selectedItem,
1556
+ getMenuProps,
1557
+ getItemProps,
1558
+ listProps: {
1559
+ ...getMenuProps({}, { suppressRefError: true }),
1560
+ style: {
1561
+ display: items.length ? "" : "none",
1562
+ overflow: "auto"
1563
+ }
1564
+ },
1565
+ options: items.map((item, index) => ({
1566
+ optionProps: {
1567
+ ...getItemProps({
1568
+ item,
1569
+ index
1570
+ }),
1571
+ selected: itemToKey(selectedItem) === itemToKey(item) || selectedItems.some(
1572
+ (selectedItem2) => itemToKey(selectedItem2) === itemToKey(item)
1573
+ ),
1574
+ disabled: !!isDisabled || !!isReadOnly
1575
+ // also see "isItemDisabled" function
1576
+ },
1577
+ item,
1578
+ index
1579
+ }))
1580
+ }) : null
1581
+ }
1582
+ ) : /* @__PURE__ */ jsx(
1583
+ Popover.Content,
1584
+ {
1585
+ "data-anv": "combobox-content",
1586
+ ...rest,
1587
+ className: ComboboxLegacyPopoverContentClassNames,
1588
+ ref: getMenuProps({ ref: contentRef }, { suppressRefError: true }).ref,
1589
+ onBlur: handleBlur,
1590
+ children: children ? children({
1591
+ items,
1592
+ inputValue,
1593
+ selectedItem,
1594
+ getMenuProps,
1595
+ getItemProps,
1596
+ listProps: {
1597
+ ...getMenuProps({}, { suppressRefError: true }),
1598
+ style: {
1599
+ display: items.length ? void 0 : "none",
1600
+ overflow: "auto"
1601
+ }
1602
+ },
1603
+ options: items.map((item, index) => ({
1604
+ optionProps: {
1605
+ ...getItemProps({
1606
+ item,
1607
+ index
1608
+ }),
1609
+ selected: itemToKey(selectedItem) === itemToKey(item) || selectedItems.some(
1610
+ (selectedItem2) => itemToKey(selectedItem2) === itemToKey(item)
1611
+ ),
1612
+ disabled: !!isDisabled || !!isReadOnly
1613
+ // also see "isItemDisabled" function
1614
+ },
1615
+ item,
1616
+ index
1617
+ }))
1618
+ }) : null
1619
+ }
1620
+ );
1621
+ };
1622
+
1623
+ const ComboboxLegacyList = function({
1624
+ children,
1625
+ ...rest
1626
+ }) {
1627
+ const {
1628
+ getMenuProps,
1629
+ multiple,
1630
+ items,
1631
+ hasAddNew = false,
1632
+ hasEmpty,
1633
+ loading
1634
+ } = useComboboxLegacy();
1635
+ if (multiple) {
1636
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1637
+ /* @__PURE__ */ jsxs(
1638
+ "div",
1639
+ {
1640
+ ...getMenuProps(rest),
1641
+ "data-anv": "combobox-list",
1642
+ className: cx(styles$1["listview"], listViewStyles["listview"]),
1643
+ style: {
1644
+ display: items.length || hasAddNew ? void 0 : "none",
1645
+ overflow: "auto"
1646
+ },
1647
+ children: [
1648
+ children,
1649
+ loading ? /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Spinner, { size: "small" }) }) : null
1650
+ ]
1651
+ }
1652
+ ),
1653
+ !items.length && !hasEmpty ? /* @__PURE__ */ jsx("div", { className: styles$1["empty"], children: /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "No match found" }) }) : null
1654
+ ] });
1655
+ } else {
1656
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1657
+ /* @__PURE__ */ jsxs(
1658
+ "ul",
1659
+ {
1660
+ ...getMenuProps(rest),
1661
+ "data-anv": "combobox-list",
1662
+ className: listboxStyles["listbox"],
1663
+ style: {
1664
+ display: items.length || hasAddNew ? void 0 : "none",
1665
+ overflow: "auto"
1666
+ },
1667
+ children: [
1668
+ children,
1669
+ loading ? /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Spinner, { size: "small" }) }) }) : null
1670
+ ]
1671
+ }
1672
+ ),
1673
+ !items.length && !hasEmpty ? /* @__PURE__ */ jsx("div", { className: styles$1["empty"], children: /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "No match found" }) }) : null
1674
+ ] });
1675
+ }
1676
+ };
1677
+
1678
+ const ComboboxLegacyItem = function({
1679
+ children,
1680
+ disabled: disabledProp,
1681
+ item,
1682
+ index,
1683
+ alignItems,
1684
+ justifyItems,
1685
+ alignContent,
1686
+ justifyContent,
1687
+ placeItems,
1688
+ placeContent,
1689
+ gap,
1690
+ rowGap,
1691
+ columnGap,
1692
+ ...rest
1693
+ }) {
1694
+ const {
1695
+ itemToKey,
1696
+ getItemProps,
1697
+ multiple,
1698
+ selectedItem,
1699
+ selectedItems,
1700
+ disabledItems,
1701
+ setDisabledItems,
1702
+ highlightedIndex
1703
+ } = useComboboxLegacy();
1704
+ const disabled = disabledProp || item && item instanceof Object && "disabled" in item && item.disabled;
1705
+ useEffect(() => {
1706
+ if (disabledProp && !disabledItems.includes(item)) {
1707
+ setDisabledItems([...disabledItems, item]);
1708
+ } else if (disabledItems.includes(item)) {
1709
+ setDisabledItems(disabledItems.filter((prevItem) => prevItem === item));
1710
+ }
1711
+ return () => {
1712
+ if (disabledItems.includes(item)) {
1713
+ setDisabledItems(disabledItems.filter((prevItem) => prevItem === item));
1714
+ }
1715
+ };
1716
+ }, [item, disabledProp, setDisabledItems]);
1717
+ if (multiple) {
1718
+ const checked = selectedItems.some(
1719
+ (selectedItem2) => itemToKey(selectedItem2) === itemToKey(item)
1720
+ );
1721
+ return /* @__PURE__ */ jsxs(
1722
+ "div",
1723
+ {
1724
+ "data-anv": "combobox-item",
1725
+ ...getItemProps({
1726
+ item,
1727
+ index,
1728
+ "aria-selected": highlightedIndex === index,
1729
+ ...rest
1730
+ }),
1731
+ className: cx(
1732
+ styles$1["listview-option"],
1733
+ listViewStyles["listview-option"]
1734
+ ),
1735
+ children: [
1736
+ /* @__PURE__ */ jsx("div", { className: cx(styles$1["cell"], listViewStyles["cell"]), children: /* @__PURE__ */ jsx("div", { className: checkboxStyles["wrapper"], children: /* @__PURE__ */ jsxs("div", { className: checkboxStyles["checkbox"], children: [
1737
+ /* @__PURE__ */ jsx(
1738
+ "input",
1739
+ {
1740
+ type: "checkbox",
1741
+ checked,
1742
+ "aria-checked": checked,
1743
+ "aria-label": "Select",
1744
+ readOnly: true,
1745
+ ...disabled ? { disabled: true } : {}
1746
+ }
1747
+ ),
1748
+ /* @__PURE__ */ jsxs("span", { className: checkboxStyles["icon-wrapper"], "aria-hidden": true, children: [
1749
+ /* @__PURE__ */ jsx(
1750
+ Icon$2,
1751
+ {
1752
+ size: "large",
1753
+ svg: SvgIndeterminateCheckBox,
1754
+ className: checkboxStyles["icon-indeterminate"]
1755
+ }
1756
+ ),
1757
+ /* @__PURE__ */ jsx(
1758
+ Icon$2,
1759
+ {
1760
+ size: "large",
1761
+ svg: SvgCheckBox,
1762
+ className: checkboxStyles["icon-checked"]
1763
+ }
1764
+ ),
1765
+ /* @__PURE__ */ jsx(
1766
+ Icon$2,
1767
+ {
1768
+ size: "large",
1769
+ svg: SvgCheckBoxOutlineBlank,
1770
+ className: checkboxStyles["icon-unchecked"]
1771
+ }
1772
+ )
1773
+ ] }),
1774
+ /* @__PURE__ */ jsx("span", { "aria-hidden": true })
1775
+ ] }) }) }),
1776
+ /* @__PURE__ */ jsx(
1777
+ Flex,
1778
+ {
1779
+ grow: 1,
1780
+ shrink: 1,
1781
+ alignItems,
1782
+ justifyItems,
1783
+ alignContent,
1784
+ justifyContent,
1785
+ placeItems,
1786
+ placeContent,
1787
+ gap,
1788
+ rowGap,
1789
+ columnGap,
1790
+ children
1791
+ }
1792
+ )
1793
+ ]
1794
+ }
1795
+ );
1796
+ } else {
1797
+ return /* @__PURE__ */ jsxs(
1798
+ "li",
1799
+ {
1800
+ ...getItemProps({
1801
+ item,
1802
+ index,
1803
+ "aria-selected": highlightedIndex === index,
1804
+ ...rest
1805
+ }),
1806
+ "data-anv": "combobox-item",
1807
+ "data-checked": itemToKey(selectedItem) === itemToKey(item),
1808
+ className: styles$1["item"],
1809
+ ...disabled ? { "aria-disabled": true } : {},
1810
+ children: [
1811
+ /* @__PURE__ */ jsx(
1812
+ Flex,
1813
+ {
1814
+ className: listboxStyles["children"],
1815
+ grow: 1,
1816
+ shrink: 1,
1817
+ alignItems,
1818
+ justifyItems,
1819
+ alignContent,
1820
+ justifyContent,
1821
+ placeItems,
1822
+ placeContent,
1823
+ gap,
1824
+ rowGap,
1825
+ columnGap,
1826
+ children
1827
+ }
1828
+ ),
1829
+ /* @__PURE__ */ jsx(
1830
+ Icon$2,
1831
+ {
1832
+ "aria-hidden": true,
1833
+ svg: SvgCheck,
1834
+ inherit: true,
1835
+ className: styles$1["Icon"],
1836
+ style: {
1837
+ opacity: itemToKey(selectedItem) === itemToKey(item) ? 1 : 0
1838
+ }
1839
+ }
1840
+ )
1841
+ ]
1842
+ }
1843
+ );
1844
+ }
1845
+ };
1846
+ const ComboboxLegacyItemAddNew = function({
1847
+ onSelection,
1848
+ ...props
1849
+ }) {
1850
+ const { items, setHasAddNew, hasExactMatch, setOnSelectItemAddNew } = useComboboxLegacy();
1851
+ useEffect(() => {
1852
+ setHasAddNew?.(true);
1853
+ return () => {
1854
+ setHasAddNew?.(false);
1855
+ };
1856
+ }, []);
1857
+ useEffect(() => {
1858
+ setOnSelectItemAddNew?.(() => onSelection);
1859
+ return () => {
1860
+ setOnSelectItemAddNew?.(void 0);
1861
+ };
1862
+ }, [setOnSelectItemAddNew, onSelection]);
1863
+ const firstRenderRef = useRef(true);
1864
+ useEffect(() => {
1865
+ if (firstRenderRef.current === true) {
1866
+ firstRenderRef.current = false;
1867
+ }
1868
+ }, []);
1869
+ return !hasExactMatch && !firstRenderRef.current ? /* @__PURE__ */ jsx(
1870
+ ComboboxLegacyItem,
1871
+ {
1872
+ ...props,
1873
+ item: ADD_NEW,
1874
+ index: items.length
1875
+ }
1876
+ ) : null;
1877
+ };
1878
+
1879
+ const ComboboxLegacyEmpty = function({
1880
+ children
1881
+ }) {
1882
+ const { items, setHasEmpty } = useComboboxLegacy();
1883
+ useEffect(() => {
1884
+ setHasEmpty?.(true);
1885
+ return () => {
1886
+ setHasEmpty?.(false);
1887
+ };
1888
+ });
1889
+ return !items.length ? children : null;
1890
+ };
1891
+
1892
+ const ComboboxEmptyElement = function({
1893
+ children
1894
+ }) {
1895
+ const { items, setHasEmpty } = useCombobox();
1896
+ useEffect(() => {
1897
+ setHasEmpty?.(true);
1898
+ return () => {
1899
+ setHasEmpty?.(false);
1900
+ };
1901
+ });
1902
+ if (!supportsPopover()) return;
1903
+ return !items.length ? children : null;
1904
+ };
1905
+ const ComboboxEmpty = function({
1906
+ children
1907
+ }) {
1908
+ if (!supportsPopover())
1909
+ return /* @__PURE__ */ jsx(ComboboxLegacyEmpty, { children });
1910
+ return /* @__PURE__ */ jsx(ComboboxEmptyElement, { children });
1911
+ };
1912
+
1913
+ const item = "_item_11q9l_22";
1914
+ const group = "_group_11q9l_35";
1915
+ const combobox = "_combobox_11q9l_50";
1916
+ const listview = "_listview_11q9l_59";
1917
+ const empty = "_empty_11q9l_63";
1918
+ const Icon = "_Icon_11q9l_117";
1919
+ const scrolled = "_scrolled_11q9l_165";
1920
+ const styles = {
1921
+ item: item,
1922
+ group: group,
1923
+ combobox: combobox,
1924
+ "popover-content": "_popover-content_11q9l_54",
1925
+ listview: listview,
1926
+ empty: empty,
1927
+ "group-title": "_group-title_11q9l_75",
1928
+ "group-list": "_group-list_11q9l_81",
1929
+ Icon: Icon,
1930
+ "scroll-sentinel": "_scroll-sentinel_11q9l_120",
1931
+ "listview-option": "_listview-option_11q9l_129",
1932
+ "select-all": "_select-all_11q9l_159",
1933
+ scrolled: scrolled
1934
+ };
1935
+
1936
+ function useGroups({
1937
+ items,
1938
+ groupBy,
1939
+ groupToString,
1940
+ groupSorter = (a, b) => `${a}`.localeCompare(`${b}`)
1941
+ }) {
1942
+ const { groups, orderedItems } = useMemo(() => {
1943
+ if (!groupBy) return { groups: [], orderedItems: items };
1944
+ const groupsSansItems = [];
1945
+ const groupedItems = {};
1946
+ items.forEach((item) => {
1947
+ const groupKey = item[groupBy];
1948
+ if (!groupedItems[groupKey]) {
1949
+ groupedItems[groupKey] = [];
1950
+ }
1951
+ groupedItems[groupKey].push(item);
1952
+ });
1953
+ Object.keys(groupedItems).forEach((key) => {
1954
+ groupsSansItems.push({
1955
+ key,
1956
+ label: groupToString ? groupToString?.(key) : key
1957
+ });
1958
+ });
1959
+ groupsSansItems.sort((a, b) => groupSorter(a.key, b.key));
1960
+ const orderedItems2 = [];
1961
+ const groups2 = groupsSansItems.map((group) => ({
1962
+ ...group,
1963
+ items: groupedItems[group.key].map((item) => {
1964
+ orderedItems2.push(item);
1965
+ return item;
1966
+ })
1967
+ }));
1968
+ return { groups: groups2, orderedItems: orderedItems2 };
1969
+ }, [groupBy, groupSorter, groupToString, items]);
1970
+ return { groups, orderedItems };
1971
+ }
1972
+
1973
+ const SelectSingle = function(props) {
1974
+ const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
1975
+ const {
1976
+ className,
1977
+ style,
1978
+ children,
1979
+ open,
1980
+ disabled,
1981
+ readOnly,
1982
+ items,
1983
+ itemToString: itemToStringProp,
1984
+ itemToKey: itemToKeyProp,
1985
+ onChange,
1986
+ disableClearSelection = false,
1987
+ disableCloseOnClickOutside = false,
1988
+ disableMatchReferenceWidth = false,
1989
+ disableCloseOnSelectItem = false,
1990
+ loading = false,
1991
+ minPopoverHeight,
1992
+ root,
1993
+ environment: environmentProp,
1994
+ groupBy,
1995
+ groupToString,
1996
+ ...rest
1997
+ } = componentProps;
1998
+ const ComboboxClassNames = cx(styles["combobox"], className);
1999
+ const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
2000
+ const [hasEmpty, setHasEmpty] = useState(false);
2001
+ const [disabledItems, setDisabledItems] = useState([]);
2002
+ const [forceCloseOnSelectItems, setForceCloseOnSelectItems] = useState([]);
2003
+ const [, setForceClearInputValueOnSelectItems] = useState([]);
2004
+ const [isReadOnly, setIsReadOnly] = useState(readOnly);
2005
+ const [isDisabled, setIsDisabled] = useState(disabled);
2006
+ const referenceRef = useRef(null);
2007
+ const contentRef = useRef(null);
2008
+ const listRef = useRef(null);
2009
+ const handleOutsidePress = (_e) => {
2010
+ if (disableCloseOnClickOutside) return;
2011
+ closeMenu();
2012
+ };
2013
+ const { ref: wrapperDivRef, environment } = useDownshiftEnvironment$1();
2014
+ const itemToString = itemToStringProp ?? defaultItemToString$1;
2015
+ const itemToKey = itemToKeyProp ?? defaultItemToKey$1;
2016
+ const { groups, orderedItems } = useGroups({
2017
+ items,
2018
+ groupBy,
2019
+ groupToString
2020
+ });
2021
+ const {
2022
+ isOpen,
2023
+ getLabelProps,
2024
+ getToggleButtonProps,
2025
+ getMenuProps,
2026
+ getItemProps,
2027
+ highlightedIndex,
2028
+ selectedItem,
2029
+ selectItem,
2030
+ inputValue,
2031
+ closeMenu
2032
+ } = useSelect({
2033
+ ...rest,
2034
+ items: orderedItems,
2035
+ itemToString,
2036
+ itemToKey,
2037
+ isOpen: open,
2038
+ initialIsOpen: open,
2039
+ environment: environmentProp ?? environment,
2040
+ // NOTE: Reducer needs to be pure, side-effects should be in event handlers
2041
+ stateReducer(state, { type, changes }) {
2042
+ switch (type) {
2043
+ case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
2044
+ case useSelect.stateChangeTypes.ItemClick:
2045
+ return {
2046
+ ...changes,
2047
+ isOpen: open != null ? open : forceCloseOnSelectItems.includes(changes.selectedItem) ? false : disableCloseOnSelectItem ? true : changes.isOpen,
2048
+ highlightedIndex: disableCloseOnSelectItem ? state.highlightedIndex : changes.highlightedIndex
2049
+ };
2050
+ default:
2051
+ return changes;
2052
+ }
2053
+ },
2054
+ onSelectedItemChange(changes) {
2055
+ const { selectedItem: selectedItem2 } = changes;
2056
+ if (onChange != null)
2057
+ onChange(selectedItem2 != null ? selectedItem2 : null);
2058
+ },
2059
+ isItemDisabled(item) {
2060
+ if (isDisabled || isReadOnly) {
2061
+ return !!isDisabled || !!isReadOnly;
2062
+ }
2063
+ if (item && item instanceof Object && "disabled" in item && item.disabled) {
2064
+ return true;
2065
+ }
2066
+ if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
2067
+ return true;
2068
+ }
2069
+ if (disabledItems.includes(item)) {
2070
+ return true;
2071
+ }
2072
+ return false;
2073
+ }
2074
+ });
2075
+ useEffect(() => {
2076
+ setIsDisabled(disabled);
2077
+ }, [disabled]);
2078
+ useEffect(() => {
2079
+ setIsReadOnly(readOnly);
2080
+ }, [readOnly]);
2081
+ return /* @__PURE__ */ jsx(
2082
+ ComboboxContext.Provider,
2083
+ {
2084
+ value: {
2085
+ multiple: false,
2086
+ select: true,
2087
+ disableClearSelection,
2088
+ items: orderedItems,
2089
+ itemToString,
2090
+ itemToKey,
2091
+ isOpen,
2092
+ getLabelProps,
2093
+ getToggleButtonProps,
2094
+ getMenuProps,
2095
+ getItemProps,
2096
+ highlightedIndex,
2097
+ selectedItem,
2098
+ selectedItems: [],
2099
+ disabledItems,
2100
+ setDisabledItems,
2101
+ setForceCloseOnSelectItems,
2102
+ setForceClearInputValueOnSelectItems,
2103
+ selectItem,
2104
+ inputValue,
2105
+ isDisabled,
2106
+ isReadOnly,
2107
+ setIsReadOnly,
2108
+ setIsDisabled,
2109
+ hasDisabledPopover,
2110
+ setHasDisabledPopover,
2111
+ hasEmpty,
2112
+ setHasEmpty,
2113
+ loading,
2114
+ referenceRef,
2115
+ contentRef,
2116
+ closeMenu,
2117
+ groups,
2118
+ groupBy,
2119
+ groupToString,
2120
+ listRef
2121
+ },
2122
+ children: /* @__PURE__ */ jsx(
2123
+ "div",
2124
+ {
2125
+ className: ComboboxClassNames,
2126
+ "data-anv": "combobox",
2127
+ style: { ...style, ...layoutStyles },
2128
+ ref: wrapperDivRef,
2129
+ children: /* @__PURE__ */ jsx(
2130
+ Popover,
2131
+ {
2132
+ open: isOpen,
2133
+ noPadding: true,
2134
+ disableCaret: true,
2135
+ fitScreen: true,
2136
+ disableFlipFallback: true,
2137
+ placement: "bottom-start",
2138
+ matchReferenceWidth: !disableMatchReferenceWidth,
2139
+ disableCloseOnClickOutside,
2140
+ onOutsidePress: handleOutsidePress,
2141
+ minHeight: minPopoverHeight,
2142
+ children
2143
+ }
2144
+ )
2145
+ }
2146
+ )
2147
+ }
2148
+ );
2149
+ };
2150
+ const SelectMultiple = function(props) {
2151
+ const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
2152
+ const {
2153
+ className,
2154
+ style,
2155
+ children,
2156
+ open,
2157
+ items,
2158
+ itemToString: itemToStringProp,
2159
+ itemToKey: itemToKeyProp,
2160
+ onChange,
2161
+ onSelectedItemsChange,
2162
+ onStateChange,
2163
+ disableCloseOnClickOutside = false,
2164
+ disableMatchReferenceWidth = false,
2165
+ disableCloseOnSelectItem = false,
2166
+ loading = false,
2167
+ minPopoverHeight,
2168
+ root,
2169
+ disabled,
2170
+ readOnly,
2171
+ stateReducer: _,
2172
+ initialSelectedItems,
2173
+ initialActiveIndex,
2174
+ defaultSelectedItems,
2175
+ defaultActiveIndex,
2176
+ activeIndex: activeIndexProp,
2177
+ selectedItems: selectedItemsProp,
2178
+ environment: environmentProp,
2179
+ groupBy,
2180
+ groupToString,
2181
+ selectAll,
2182
+ ...rest
2183
+ } = componentProps;
2184
+ const ComboboxClassNames = cx(styles["combobox"], className);
2185
+ const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
2186
+ const [hasEmpty, setHasEmpty] = useState(false);
2187
+ const [disabledItems, setDisabledItems] = useState([]);
2188
+ const [forceCloseOnSelectItems, setForceCloseOnSelectItems] = useState([]);
2189
+ const [, setForceClearInputValueOnSelectItems] = useState([]);
2190
+ const [isReadOnly, setIsReadOnly] = useState(readOnly);
2191
+ const [isDisabled, setIsDisabled] = useState(disabled);
2192
+ const referenceRef = useRef(null);
2193
+ const contentRef = useRef(null);
2194
+ const listRef = useRef(null);
2195
+ const handleOutsidePress = (_e) => {
2196
+ if (disableCloseOnClickOutside) return;
2197
+ closeMenu();
2198
+ };
2199
+ const { ref: wrapperDivRef, environment } = useDownshiftEnvironment$1();
2200
+ const itemToString = itemToStringProp ?? defaultItemToString$1;
2201
+ const itemToKey = itemToKeyProp ?? defaultItemToKey$1;
2202
+ const { groups, orderedItems: orderedItemsBase } = useGroups({
2203
+ items,
2204
+ groupBy,
2205
+ groupToString
2206
+ });
2207
+ const orderedItems = selectAll ? [SELECT_ALL, ...orderedItemsBase] : orderedItemsBase;
2208
+ const {
2209
+ getSelectedItemProps,
2210
+ getDropdownProps,
2211
+ reset,
2212
+ selectedItems,
2213
+ addSelectedItem,
2214
+ removeSelectedItem,
2215
+ setSelectedItems
2216
+ } = useMultipleSelection({
2217
+ itemToKey,
2218
+ initialSelectedItems,
2219
+ initialActiveIndex,
2220
+ defaultSelectedItems,
2221
+ defaultActiveIndex,
2222
+ activeIndex: activeIndexProp,
2223
+ selectedItems: selectedItemsProp,
2224
+ environment: environmentProp ?? environment,
2225
+ stateReducer(state, { type, changes }) {
2226
+ switch (type) {
2227
+ // the Chip itself will handle "Backspace" and "Delete"
2228
+ // just return previous state
2229
+ case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace:
2230
+ case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownDelete:
2231
+ return state;
2232
+ case useMultipleSelection.stateChangeTypes.FunctionRemoveSelectedItem:
2233
+ return { ...changes, activeIndex: -1 };
2234
+ case useMultipleSelection.stateChangeTypes.FunctionReset:
2235
+ return { ...changes, selectedItems: [] };
2236
+ default:
2237
+ return changes;
2238
+ }
2239
+ },
2240
+ onStateChange,
2241
+ onSelectedItemsChange(changes) {
2242
+ const { selectedItems: selectedItems2 } = changes;
2243
+ if (onChange != null) onChange(selectedItems2);
2244
+ if (onSelectedItemsChange != null) onSelectedItemsChange(changes);
2245
+ }
2246
+ });
2247
+ const {
2248
+ isOpen,
2249
+ getLabelProps,
2250
+ getToggleButtonProps,
2251
+ getMenuProps,
2252
+ getItemProps,
2253
+ highlightedIndex,
2254
+ selectedItem,
2255
+ selectItem,
2256
+ inputValue,
2257
+ closeMenu
2258
+ } = useSelect({
2259
+ ...rest,
2260
+ items: orderedItems,
2261
+ itemToString,
2262
+ itemToKey,
2263
+ selectedItem: null,
2264
+ isOpen: open,
2265
+ initialIsOpen: open,
2266
+ environment: environmentProp ?? environment,
2267
+ // NOTE: Reducer needs to be pure, side-effects should be in event handlers
2268
+ stateReducer(state, { type, changes }) {
2269
+ switch (type) {
2270
+ case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
2271
+ case useSelect.stateChangeTypes.ItemClick:
2272
+ return {
2273
+ ...changes,
2274
+ isOpen: open != null ? open : forceCloseOnSelectItems.includes(changes.selectedItem) ? false : disableCloseOnSelectItem ? true : changes.isOpen,
2275
+ highlightedIndex: disableCloseOnSelectItem ? state.highlightedIndex : changes.highlightedIndex
2276
+ };
2277
+ default:
2278
+ return changes;
2279
+ }
2280
+ },
2281
+ onStateChange(changes) {
2282
+ const { type, selectedItem: newSelectedItem } = changes;
2283
+ switch (type) {
2284
+ case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
2285
+ case useSelect.stateChangeTypes.ItemClick:
2286
+ case useSelect.stateChangeTypes.ToggleButtonBlur:
2287
+ if (changes.selectedItem === SELECT_ALL) {
2288
+ selectAll?.onSelection();
2289
+ return {
2290
+ ...changes,
2291
+ selectedItem: null
2292
+ };
2293
+ }
2294
+ if (newSelectedItem != null) {
2295
+ const itemAlreadySelected = selectedItems.some(
2296
+ (item) => itemToKey(item) === itemToKey(newSelectedItem)
2297
+ );
2298
+ if (itemAlreadySelected) {
2299
+ removeSelectedItem(newSelectedItem);
2300
+ } else {
2301
+ addSelectedItem(newSelectedItem);
2302
+ }
2303
+ }
2304
+ break;
2305
+ }
2306
+ onStateChange?.(changes);
2307
+ },
2308
+ isItemDisabled(item) {
2309
+ if (isDisabled || isReadOnly) {
2310
+ return !!isDisabled || !!isReadOnly;
2311
+ }
2312
+ if (item && item instanceof Object && "disabled" in item && item.disabled) {
2313
+ return true;
2314
+ }
2315
+ if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
2316
+ return true;
2317
+ }
2318
+ if (disabledItems.includes(item)) {
2319
+ return true;
2320
+ }
2321
+ return false;
2322
+ },
2323
+ onHighlightedIndexChange(changes) {
2324
+ if (selectAll && changes.highlightedIndex === 0 && [
2325
+ useSelect.stateChangeTypes.ToggleButtonKeyDownArrowDown,
2326
+ useSelect.stateChangeTypes.ToggleButtonKeyDownArrowUp,
2327
+ useSelect.stateChangeTypes.ToggleButtonKeyDownPageDown,
2328
+ useSelect.stateChangeTypes.ToggleButtonKeyDownPageUp,
2329
+ useSelect.stateChangeTypes.ToggleButtonKeyDownHome,
2330
+ useSelect.stateChangeTypes.ToggleButtonKeyDownEnd
2331
+ ].includes(changes.type) && listRef.current) {
2332
+ const scrollParent = getScrollParent(listRef.current);
2333
+ if (scrollParent) {
2334
+ scrollParent.scrollTop = 0;
2335
+ }
2336
+ }
2337
+ }
2338
+ });
2339
+ useEffect(() => {
2340
+ setIsDisabled(disabled);
2341
+ }, [disabled]);
2342
+ useEffect(() => {
2343
+ setIsReadOnly(readOnly);
2344
+ }, [readOnly]);
2345
+ return /* @__PURE__ */ jsx(
2346
+ ComboboxContext.Provider,
2347
+ {
2348
+ value: {
2349
+ multiple: true,
2350
+ select: true,
2351
+ items: orderedItems,
2352
+ itemToString,
2353
+ itemToKey,
2354
+ isOpen,
2355
+ getLabelProps,
2356
+ getToggleButtonProps,
2357
+ getMenuProps,
2358
+ getItemProps,
2359
+ highlightedIndex,
2360
+ selectedItem,
2361
+ selectedItems,
2362
+ disabledItems,
2363
+ setDisabledItems,
2364
+ setForceCloseOnSelectItems,
2365
+ setForceClearInputValueOnSelectItems,
2366
+ getSelectedItemProps,
2367
+ getDropdownProps,
2368
+ reset,
2369
+ addSelectedItem,
2370
+ removeSelectedItem,
2371
+ setSelectedItems,
2372
+ selectItem,
2373
+ inputValue,
2374
+ isDisabled,
2375
+ isReadOnly,
2376
+ setIsReadOnly,
2377
+ setIsDisabled,
2378
+ hasDisabledPopover,
2379
+ setHasDisabledPopover,
2380
+ hasEmpty,
2381
+ setHasEmpty,
2382
+ loading,
2383
+ referenceRef,
2384
+ contentRef,
2385
+ closeMenu,
2386
+ groupBy,
2387
+ groupToString,
2388
+ groups,
2389
+ listRef,
2390
+ selectAll
2391
+ },
2392
+ children: /* @__PURE__ */ jsx(
2393
+ "div",
2394
+ {
2395
+ className: ComboboxClassNames,
2396
+ "data-anv": "combobox",
2397
+ style: { ...style, ...layoutStyles },
2398
+ ref: wrapperDivRef,
2399
+ children: /* @__PURE__ */ jsx(
2400
+ Popover,
2401
+ {
2402
+ open: !isDisabled && isOpen,
2403
+ noPadding: true,
2404
+ disableCaret: true,
2405
+ fitScreen: true,
2406
+ disableFlipFallback: true,
2407
+ placement: "bottom-start",
2408
+ matchReferenceWidth: !disableMatchReferenceWidth,
2409
+ disableCloseOnClickOutside,
2410
+ onOutsidePress: handleOutsidePress,
2411
+ minHeight: minPopoverHeight,
2412
+ children
2413
+ }
2414
+ )
2415
+ }
2416
+ )
2417
+ }
2418
+ );
2419
+ };
2420
+ const ComboboxSelect = function(props) {
2421
+ if (!supportsPopover()) {
2422
+ if (isMultiple(props)) {
2423
+ return /* @__PURE__ */ jsx(SelectLegacyMultiple, { ...props });
2424
+ } else {
2425
+ return /* @__PURE__ */ jsx(SelectLegacySingle, { ...props });
2426
+ }
2427
+ }
2428
+ if (isMultiple(props)) {
2429
+ return /* @__PURE__ */ jsx(SelectMultiple, { ...props });
2430
+ } else {
2431
+ return /* @__PURE__ */ jsx(SelectSingle, { ...props });
2432
+ }
2433
+ };
2434
+
2435
+ const ComboboxItemVisual = forwardRef(
2436
+ ({
2437
+ children,
2438
+ disabled,
2439
+ checked,
2440
+ hideCheckbox,
2441
+ rootDivProps,
2442
+ flexProps
2443
+ }, ref) => {
2444
+ return /* @__PURE__ */ jsxs(
2445
+ "div",
2446
+ {
2447
+ ref,
2448
+ "data-anv": "combobox-item",
2449
+ ...rootDivProps,
2450
+ className: cx(
2451
+ styles["listview-option"],
2452
+ listViewStyles["listview-option"],
2453
+ rootDivProps.className
2454
+ ),
2455
+ children: [
2456
+ !hideCheckbox ? /* @__PURE__ */ jsx("div", { className: cx(styles["cell"], listViewStyles["cell"]), children: /* @__PURE__ */ jsx("div", { className: checkboxStyles["wrapper"], children: /* @__PURE__ */ jsxs("div", { className: checkboxStyles["checkbox"], children: [
2457
+ /* @__PURE__ */ jsx(
2458
+ "input",
2459
+ {
2460
+ type: "checkbox",
2461
+ checked,
2462
+ "aria-checked": checked,
2463
+ "aria-label": "Select",
2464
+ readOnly: true,
2465
+ tabIndex: -1,
2466
+ ...disabled ? { disabled: true } : {}
2467
+ }
2468
+ ),
2469
+ /* @__PURE__ */ jsxs("span", { className: checkboxStyles["icon-wrapper"], "aria-hidden": true, children: [
2470
+ /* @__PURE__ */ jsx(
2471
+ Icon$2,
2472
+ {
2473
+ size: "large",
2474
+ svg: SvgIndeterminateCheckBox,
2475
+ className: checkboxStyles["icon-indeterminate"]
2476
+ }
2477
+ ),
2478
+ /* @__PURE__ */ jsx(
2479
+ Icon$2,
2480
+ {
2481
+ size: "large",
2482
+ svg: SvgCheckBox,
2483
+ className: checkboxStyles["icon-checked"]
2484
+ }
2485
+ ),
2486
+ /* @__PURE__ */ jsx(
2487
+ Icon$2,
2488
+ {
2489
+ size: "large",
2490
+ svg: SvgCheckBoxOutlineBlank,
2491
+ className: checkboxStyles["icon-unchecked"]
2492
+ }
2493
+ )
2494
+ ] }),
2495
+ /* @__PURE__ */ jsx("span", { "aria-hidden": true })
2496
+ ] }) }) }) : null,
2497
+ /* @__PURE__ */ jsx(Flex, { grow: 1, shrink: 1, ...flexProps, children })
2498
+ ]
2499
+ }
2500
+ );
2501
+ }
2502
+ );
2503
+ ComboboxItemVisual.displayName = "ComboboxItemVisual";
2504
+
2505
+ const ComboboxSelectAll = function({ className }) {
2506
+ const {
2507
+ getItemProps,
2508
+ setForceCloseOnSelectItems,
2509
+ highlightedIndex,
2510
+ items,
2511
+ selectAll
2512
+ } = useCombobox();
2513
+ const item = SELECT_ALL;
2514
+ const index = items.indexOf(item);
2515
+ const ref = useRef(null);
2516
+ useEffect(() => {
2517
+ return () => {
2518
+ setForceCloseOnSelectItems((forceCloseOnSelectItems) => {
2519
+ if (forceCloseOnSelectItems.includes(item)) {
2520
+ return forceCloseOnSelectItems.filter(
2521
+ (prevItem) => prevItem !== item
2522
+ );
2523
+ } else {
2524
+ return forceCloseOnSelectItems;
2525
+ }
2526
+ });
2527
+ };
2528
+ }, [item, setForceCloseOnSelectItems]);
2529
+ return /* @__PURE__ */ jsx(
2530
+ ComboboxItemVisual,
2531
+ {
2532
+ ref,
2533
+ rootDivProps: getItemProps({
2534
+ item: SELECT_ALL,
2535
+ index,
2536
+ "aria-selected": highlightedIndex === index,
2537
+ className: cx(styles["select-all"], className)
2538
+ }),
2539
+ hideCheckbox: false,
2540
+ disabled: false,
2541
+ checked: !!selectAll?.isChecked,
2542
+ children: selectAll?.label
2543
+ },
2544
+ "select-all"
2545
+ );
2546
+ };
2547
+
2548
+ const ComboboxGroupContext = createContext(null);
2549
+ const useComboboxGroupContext = () => useContext(ComboboxGroupContext);
2550
+
2551
+ const ComboboxGroupList = function({
2552
+ children,
2553
+ ...rest
2554
+ }) {
2555
+ const {
2556
+ getMenuProps,
2557
+ multiple,
2558
+ items,
2559
+ hasAddNew = false,
2560
+ hasEmpty,
2561
+ loading,
2562
+ selectAll,
2563
+ listRef
2564
+ } = useCombobox();
2565
+ const scrollSentinelRef = useRef(null);
2566
+ const [isScrolled, setIsScrolled] = useState(false);
2567
+ const { key: groupKey } = useComboboxGroupContext() ?? {};
2568
+ const isAGroup = !!groupKey;
2569
+ useEffect(() => {
2570
+ if (!scrollSentinelRef.current) return;
2571
+ const intersectionObserver = new IntersectionObserver(
2572
+ (entries) => {
2573
+ entries.forEach((entry) => {
2574
+ if (!entry.isIntersecting) {
2575
+ setIsScrolled(true);
2576
+ } else {
2577
+ setIsScrolled(false);
2578
+ }
2579
+ });
2580
+ },
2581
+ { threshold: 0 }
2582
+ );
2583
+ intersectionObserver.observe(scrollSentinelRef.current);
2584
+ return () => {
2585
+ intersectionObserver.disconnect();
2586
+ };
2587
+ }, [scrollSentinelRef, setIsScrolled]);
2588
+ if (!supportsPopover())
2589
+ return /* @__PURE__ */ jsx(ComboboxLegacyList, { ...rest, children });
2590
+ if (isAGroup) {
2591
+ return /* @__PURE__ */ jsx(Fragment, { children });
2592
+ }
2593
+ if (multiple) {
2594
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
2595
+ /* @__PURE__ */ jsxs(
2596
+ "ul",
2597
+ {
2598
+ ...getMenuProps(rest),
2599
+ ref: listRef,
2600
+ "data-anv": "combobox-list",
2601
+ className: cx(styles["listview"], listViewStyles["listview"], {
2602
+ [styles.scrolled]: isScrolled
2603
+ }),
2604
+ style: {
2605
+ display: items.length || hasAddNew ? void 0 : "none"
2606
+ },
2607
+ children: [
2608
+ /* @__PURE__ */ jsx("div", { ref: scrollSentinelRef, className: styles["scroll-sentinel"] }),
2609
+ !loading && selectAll && /* @__PURE__ */ jsxs(Fragment, { children: [
2610
+ /* @__PURE__ */ jsx(ComboboxSelectAll, {}),
2611
+ /* @__PURE__ */ jsx(Divider, {})
2612
+ ] }),
2613
+ children
2614
+ ]
2615
+ }
2616
+ ),
2617
+ loading ? /* @__PURE__ */ jsx("div", { className: styles["empty"], children: /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Spinner, { size: "small" }) }) }) : !items.length && !hasEmpty ? /* @__PURE__ */ jsx("div", { className: styles["empty"], children: /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "No match found" }) }) : null
2618
+ ] });
2619
+ } else {
2620
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
2621
+ /* @__PURE__ */ jsx(
2622
+ "ul",
2623
+ {
2624
+ ...getMenuProps(rest),
2625
+ ref: listRef,
2626
+ "data-anv": "combobox-list",
2627
+ className: listboxStyles["listbox"],
2628
+ style: {
2629
+ display: items.length || hasAddNew ? void 0 : "none"
2630
+ },
2631
+ children
2632
+ }
2633
+ ),
2634
+ loading ? /* @__PURE__ */ jsx("div", { className: styles["empty"], children: /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Spinner, { size: "small" }) }) }) : !items.length && !hasEmpty ? /* @__PURE__ */ jsx("div", { className: styles["empty"], children: /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "No match found" }) }) : null
2635
+ ] });
2636
+ }
2637
+ };
2638
+
2639
+ const ComboboxGroupProvider = ComboboxGroupContext.Provider;
2640
+
2641
+ const ComboboxContentElement = function({
2642
+ children,
2643
+ className,
2644
+ disablePopover = false,
2645
+ ...rest
2646
+ }) {
2647
+ const {
2648
+ items,
2649
+ itemToKey,
2650
+ inputValue,
2651
+ selectedItem,
2652
+ selectedItems,
2653
+ setHasDisabledPopover,
2654
+ getMenuProps,
2655
+ getItemProps,
2656
+ isDisabled,
2657
+ isReadOnly,
2658
+ contentRef,
2659
+ closeMenu,
2660
+ groups
2661
+ } = useCombobox();
2662
+ const ComboboxPopoverContentClassNames = cx(
2663
+ styles["popover-content"],
2664
+ className
2665
+ );
2666
+ useEffect(() => {
2667
+ setHasDisabledPopover(disablePopover);
2668
+ return () => {
2669
+ setHasDisabledPopover(false);
2670
+ };
2671
+ }, [disablePopover, setHasDisabledPopover]);
2672
+ const context = usePopoverContext();
2673
+ const handleBlur = (_e) => {
2674
+ if (context?.controlled) return;
2675
+ context?.popover.close?.(closeMenu);
2676
+ };
2677
+ const resolveChildren = (groupItems) => children?.({
2678
+ items: groupItems,
2679
+ inputValue,
2680
+ selectedItem,
2681
+ getMenuProps,
2682
+ getItemProps,
2683
+ listProps: {
2684
+ ...getMenuProps({}, { suppressRefError: true }),
2685
+ style: {
2686
+ display: groupItems.length ? void 0 : "none",
2687
+ overflow: "auto"
2688
+ }
2689
+ },
2690
+ options: groupItems.map((item, index) => ({
2691
+ optionProps: {
2692
+ ...getItemProps({
2693
+ item,
2694
+ index
2695
+ }),
2696
+ tabIndex: disablePopover ? -1 : void 0,
2697
+ selected: itemToKey(selectedItem) === itemToKey(item) || selectedItems.some(
2698
+ (selectedItem2) => itemToKey(selectedItem2) === itemToKey(item)
2699
+ ),
2700
+ disabled: !!isDisabled || !!isReadOnly
2701
+ // also see "isItemDisabled" function
2702
+ },
2703
+ item,
2704
+ index
2705
+ }))
2706
+ });
2707
+ const id = useId();
2708
+ const filterAlreadyRenderedItems = (items2) => {
2709
+ return items2.filter((item) => item !== ADD_NEW$1 && item !== SELECT_ALL);
2710
+ };
2711
+ return disablePopover ? /* @__PURE__ */ jsx(
2712
+ "div",
2713
+ {
2714
+ ...rest,
2715
+ className: ComboboxPopoverContentClassNames,
2716
+ ref: contentRef,
2717
+ onBlur: handleBlur,
2718
+ children: groups?.length ? /* @__PURE__ */ jsx(ComboboxGroupList, { children: groups.map((group, i) => /* @__PURE__ */ jsxs(ComboboxGroupProvider, { value: group, children: [
2719
+ i !== 0 && /* @__PURE__ */ jsx(Divider, {}),
2720
+ /* @__PURE__ */ jsxs(
2721
+ "li",
2722
+ {
2723
+ "aria-labelledby": `${id}-group-${group.key}`,
2724
+ className: cx(styles["group"], listboxStyles["listbox"]),
2725
+ "data-anv": "combobox-group",
2726
+ role: "group",
2727
+ children: [
2728
+ group.label != null ? /* @__PURE__ */ jsx(
2729
+ Text,
2730
+ {
2731
+ className: styles["group-title"],
2732
+ id: `${id}-group-${group.key}`,
2733
+ variant: "eyebrow",
2734
+ children: group.label
2735
+ }
2736
+ ) : null,
2737
+ /* @__PURE__ */ jsx("ul", { className: styles["group-list"], children: resolveChildren(filterAlreadyRenderedItems(group.items)) })
2738
+ ]
2739
+ }
2740
+ )
2741
+ ] }, group.key)) }) : resolveChildren(filterAlreadyRenderedItems(items))
2742
+ }
2743
+ ) : /* @__PURE__ */ jsx(
2744
+ Popover.Content,
2745
+ {
2746
+ "data-anv": "combobox-content",
2747
+ ...rest,
2748
+ className: ComboboxPopoverContentClassNames,
2749
+ ref: getMenuProps({ ref: contentRef }, { suppressRefError: true }).ref,
2750
+ tabIndex: -1,
2751
+ onBlur: handleBlur,
2752
+ children: groups?.length ? /* @__PURE__ */ jsx(ComboboxGroupList, { children: groups.map((group, i) => /* @__PURE__ */ jsxs(ComboboxGroupProvider, { value: group, children: [
2753
+ i !== 0 && /* @__PURE__ */ jsx(Divider, {}),
2754
+ /* @__PURE__ */ jsxs(
2755
+ "li",
2756
+ {
2757
+ "aria-labelledby": `${id}-group-${group.key}`,
2758
+ className: cx(styles["group"], listboxStyles["listbox"]),
2759
+ "data-anv": "combobox-group",
2760
+ role: "group",
2761
+ children: [
2762
+ group.label != null ? /* @__PURE__ */ jsx(
2763
+ Text,
2764
+ {
2765
+ className: styles["group-title"],
2766
+ id: `${id}-group-${group.key}`,
2767
+ variant: "eyebrow",
2768
+ children: group.label
2769
+ }
2770
+ ) : null,
2771
+ /* @__PURE__ */ jsx("ul", { className: styles["group-list"], children: resolveChildren(filterAlreadyRenderedItems(group.items)) })
2772
+ ]
2773
+ }
2774
+ )
2775
+ ] }, group.key)) }) : resolveChildren(filterAlreadyRenderedItems(items))
2776
+ }
2777
+ );
2778
+ };
2779
+ const ComboboxContent = function({
2780
+ children,
2781
+ className,
2782
+ disablePopover = false,
2783
+ ...rest
2784
+ }) {
2785
+ if (!supportsPopover())
2786
+ return /* @__PURE__ */ jsx(
2787
+ ComboboxLegacyContent,
2788
+ {
2789
+ disablePopover,
2790
+ className,
2791
+ ...rest,
2792
+ children
2793
+ }
2794
+ );
2795
+ return /* @__PURE__ */ jsx(
2796
+ ComboboxContentElement,
2797
+ {
2798
+ className,
2799
+ disablePopover,
2800
+ ...rest,
2801
+ children
2802
+ }
2803
+ );
2804
+ };
2805
+
2806
+ const ComboboxTrigger = function(props) {
2807
+ const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
2808
+ const {
2809
+ // variant: variantProp = "combobox",
2810
+ className,
2811
+ style,
2812
+ label,
2813
+ size,
2814
+ error,
2815
+ hint,
2816
+ description,
2817
+ required,
2818
+ moreInfo,
2819
+ openMoreInfo,
2820
+ prefix,
2821
+ suffix,
2822
+ maxRows,
2823
+ selectedItemProps = () => ({}),
2824
+ id,
2825
+ placeholder,
2826
+ disabled,
2827
+ readOnly,
2828
+ onClear,
2829
+ ...rest
2830
+ } = componentProps;
2831
+ const {
2832
+ select,
2833
+ disableClearSelection,
2834
+ itemToString,
2835
+ getLabelProps,
2836
+ getInputProps,
2837
+ getToggleButtonProps,
2838
+ getMenuProps,
2839
+ selectedItem,
2840
+ selectedItems,
2841
+ getSelectedItemProps,
2842
+ getDropdownProps,
2843
+ reset,
2844
+ removeSelectedItem,
2845
+ selectItem,
2846
+ inputValue,
2847
+ isDisabled,
2848
+ isReadOnly,
2849
+ referenceRef,
2850
+ closeMenu,
2851
+ setIsDisabled,
2852
+ setIsReadOnly
2853
+ } = useCombobox();
2854
+ const context = usePopoverContext();
2855
+ useLayoutEffect(() => {
2856
+ if (typeof disabled === "undefined") return;
2857
+ setIsDisabled(disabled);
2858
+ }, [disabled, setIsDisabled]);
2859
+ useLayoutEffect(() => {
2860
+ if (typeof readOnly === "undefined") return;
2861
+ setIsReadOnly(readOnly);
2862
+ }, [readOnly, setIsReadOnly]);
2863
+ const handleBlur = (e) => {
2864
+ const target = e.relatedTarget ?? e.target;
2865
+ const focusedOnReference = context?.invoker.ref.current && context?.invoker.ref.current.contains(target);
2866
+ const focusedOnContent = context?.popover.ref.current && context?.popover.ref.current.contains(target) || context?.popover.element?.contains(target);
2867
+ if (!focusedOnReference && !focusedOnContent || !e.relatedTarget) {
2868
+ closeMenu();
2869
+ }
2870
+ };
2871
+ const labelProps = getLabelProps({
2872
+ required,
2873
+ moreInfo,
2874
+ openMoreInfo
2875
+ });
2876
+ const inputRef = useRef(null);
2877
+ const inputWrapperProps = {
2878
+ ...select ? {
2879
+ ...getToggleButtonProps({
2880
+ disabled: isDisabled,
2881
+ readOnly: isReadOnly,
2882
+ id,
2883
+ ref: context?.invoker.ref
2884
+ })
2885
+ } : {
2886
+ onClick: () => inputRef.current?.focus(),
2887
+ ref: context?.invoker.ref
2888
+ }
2889
+ };
2890
+ const toggleButtonProps = select ? {} : getToggleButtonProps();
2891
+ const handleClearButtonClick = (_e) => {
2892
+ if (onClear) {
2893
+ onClear();
2894
+ } else {
2895
+ if (reset != null) {
2896
+ reset();
2897
+ } else {
2898
+ selectItem(null);
2899
+ }
2900
+ }
2901
+ };
2902
+ const styleCombined = {
2903
+ ...style,
2904
+ ...layoutStyles
2905
+ };
2906
+ return /* @__PURE__ */ jsx(
2907
+ SelectTriggerBase,
2908
+ {
2909
+ "data-anv": select ? "combobox-select-trigger" : "combobox-search-field",
2910
+ className,
2911
+ style: styleCombined,
2912
+ label,
2913
+ size,
2914
+ error,
2915
+ hint,
2916
+ description,
2917
+ prefix,
2918
+ suffix,
2919
+ maxRows,
2920
+ selectedItemProps,
2921
+ placeholder,
2922
+ labelProps,
2923
+ inputWrapperProps,
2924
+ toggleButtonProps,
2925
+ itemToString,
2926
+ removeSelectedItem,
2927
+ variant: select ? "select" : "combobox",
2928
+ disableClearSelection,
2929
+ selectedItem,
2930
+ selectedItems,
2931
+ inputValue,
2932
+ disabled: isDisabled,
2933
+ readOnly: isReadOnly,
2934
+ referenceRef,
2935
+ onBlur: handleBlur,
2936
+ onClearButtonClick: handleClearButtonClick,
2937
+ chipProps: (item, index) => {
2938
+ if (getSelectedItemProps != null) {
2939
+ const { onClick: _, ...chipProps } = getSelectedItemProps({
2940
+ selectedItem: item,
2941
+ index
2942
+ });
2943
+ return chipProps;
2944
+ }
2945
+ return {};
2946
+ },
2947
+ inputProps: select ? {
2948
+ ...getDropdownProps != null ? getDropdownProps({
2949
+ required,
2950
+ preventKeyAction: false
2951
+ }) : {
2952
+ required
2953
+ },
2954
+ ["aria-expanded"]: context?.invoker["aria-expanded"],
2955
+ ["aria-details"]: getMenuProps().id,
2956
+ ["aria-haspopup"]: context?.invoker["aria-haspopup"]
2957
+ } : {
2958
+ ["aria-expanded"]: context?.invoker["aria-expanded"],
2959
+ ["aria-details"]: getMenuProps().id,
2960
+ ["aria-haspopup"]: context?.invoker["aria-haspopup"],
2961
+ ["aria-controls"]: getMenuProps().id,
2962
+ ...getDropdownProps != null && getInputProps != null ? getInputProps(
2963
+ getDropdownProps({
2964
+ ...rest,
2965
+ disabled: isDisabled,
2966
+ readOnly: isReadOnly,
2967
+ required,
2968
+ autoComplete: "off",
2969
+ id,
2970
+ preventKeyAction: false,
2971
+ ref: inputRef
2972
+ })
2973
+ ) : getInputProps != null ? getInputProps({
2974
+ ...rest,
2975
+ disabled: isDisabled,
2976
+ readOnly: isReadOnly,
2977
+ required,
2978
+ autoComplete: "off",
2979
+ id,
2980
+ ref: inputRef
2981
+ }) : {}
2982
+ }
2983
+ }
2984
+ );
2985
+ };
2986
+ const ComboboxSearchFieldElement = function({
2987
+ onClear,
2988
+ ...props
2989
+ }) {
2990
+ if (!supportsPopover())
2991
+ return /* @__PURE__ */ jsx(ComboboxLegacyTrigger, { ...props, variant: "combobox" });
2992
+ return /* @__PURE__ */ jsx(ComboboxTrigger, { onClear, ...props, variant: "combobox" });
2993
+ };
2994
+ const ComboboxSearchField = function({
2995
+ prefix: prefixProp,
2996
+ ...props
2997
+ }) {
2998
+ const data = {
2999
+ label: childrenToString(props.label),
3000
+ size: props.size,
3001
+ required: props.required,
3002
+ moreInfo: props.moreInfo,
3003
+ openMoreInfo: props.openMoreInfo,
3004
+ description: childrenToString(props.description),
3005
+ hint: props.hint,
3006
+ labelProps: props.labelProps
3007
+ };
3008
+ const trackingId = useTrackingId({
3009
+ name: "ComboboxSearchField",
3010
+ data,
3011
+ hasOverride: !!props["data-tracking-id"]
3012
+ });
3013
+ const prefix = prefixProp == null || typeof prefixProp === "string" ? prefixProp : "icon" in prefixProp ? /* @__PURE__ */ jsx(Icon$2, { ...prefixProp.icon }) : "avatar" in prefixProp ? /* @__PURE__ */ jsx(
3014
+ Avatar,
3015
+ {
3016
+ ...prefixProp.avatar,
3017
+ size: props.size === "small" ? "small" : "medium"
3018
+ }
3019
+ ) : prefixProp;
3020
+ return /* @__PURE__ */ jsx(
3021
+ ComboboxSearchFieldElement,
3022
+ {
3023
+ "data-tracking-id": trackingId,
3024
+ ...props,
3025
+ prefix
3026
+ }
3027
+ );
3028
+ };
3029
+ const ComboboxSelectTriggerElement = function(props) {
3030
+ if (!supportsPopover())
3031
+ return /* @__PURE__ */ jsx(ComboboxLegacyTrigger, { ...props, variant: "select" });
3032
+ return /* @__PURE__ */ jsx(ComboboxTrigger, { ...props, variant: "select" });
3033
+ };
3034
+ const ComboboxSelectTrigger = function({
3035
+ prefix: prefixProp,
3036
+ ...props
3037
+ }) {
3038
+ const data = {
3039
+ label: childrenToString(props.label),
3040
+ size: props.size,
3041
+ required: props.required,
3042
+ moreInfo: props.moreInfo,
3043
+ openMoreInfo: props.openMoreInfo,
3044
+ description: childrenToString(props.description),
3045
+ hint: props.hint,
3046
+ labelProps: props.labelProps
3047
+ };
3048
+ const trackingId = useTrackingId({
3049
+ name: "ComboboxSearchField",
3050
+ data,
3051
+ hasOverride: !!props["data-tracking-id"]
3052
+ });
3053
+ const prefix = prefixProp == null || typeof prefixProp === "string" ? prefixProp : "icon" in prefixProp ? /* @__PURE__ */ jsx(Icon$2, { ...prefixProp.icon }) : "avatar" in prefixProp ? /* @__PURE__ */ jsx(
3054
+ Avatar,
3055
+ {
3056
+ ...prefixProp.avatar,
3057
+ size: props.size === "small" ? "small" : "medium"
3058
+ }
3059
+ ) : prefixProp;
3060
+ return /* @__PURE__ */ jsx(
3061
+ ComboboxSelectTriggerElement,
3062
+ {
3063
+ "data-tracking-id": trackingId,
3064
+ ...props,
3065
+ prefix
3066
+ }
3067
+ );
3068
+ };
3069
+
3070
+ const CoreComboboxItemElement = function({
3071
+ children,
3072
+ disabled: disabledProp,
3073
+ item,
3074
+ index: indexProp,
3075
+ hideCheckbox,
3076
+ forceCloseOnSelect,
3077
+ forceClearInputValueOnSelect,
3078
+ alignItems,
3079
+ justifyItems,
3080
+ alignContent,
3081
+ justifyContent,
3082
+ placeItems,
3083
+ placeContent,
3084
+ gap,
3085
+ rowGap,
3086
+ columnGap,
3087
+ ...rest
3088
+ }) {
3089
+ const {
3090
+ itemToKey,
3091
+ getItemProps,
3092
+ multiple,
3093
+ selectedItem,
3094
+ selectedItems,
3095
+ disabledItems,
3096
+ setDisabledItems,
3097
+ setForceCloseOnSelectItems,
3098
+ setForceClearInputValueOnSelectItems,
3099
+ highlightedIndex,
3100
+ items
3101
+ } = useCombobox();
3102
+ const index = item === ADD_NEW$1 && !multiple ? indexProp : items.indexOf(item);
3103
+ const disabled = disabledProp || item && item instanceof Object && "disabled" in item && item.disabled;
3104
+ useEffect(() => {
3105
+ if (disabledProp && !disabledItems.includes(item)) {
3106
+ setDisabledItems([...disabledItems, item]);
3107
+ } else if (disabledItems.includes(item)) {
3108
+ setDisabledItems(disabledItems.filter((prevItem) => prevItem !== item));
3109
+ }
3110
+ return () => {
3111
+ if (disabledItems.includes(item)) {
3112
+ setDisabledItems(disabledItems.filter((prevItem) => prevItem !== item));
3113
+ }
3114
+ };
3115
+ }, [item, disabledProp, setDisabledItems]);
3116
+ useEffect(() => {
3117
+ if (forceCloseOnSelect) {
3118
+ setForceCloseOnSelectItems((forceCloseOnSelectItems) => {
3119
+ if (forceCloseOnSelectItems.includes(item)) {
3120
+ return forceCloseOnSelectItems;
3121
+ } else {
3122
+ return [...forceCloseOnSelectItems, item];
3123
+ }
3124
+ });
3125
+ }
3126
+ return () => {
3127
+ setForceCloseOnSelectItems((forceCloseOnSelectItems) => {
3128
+ if (forceCloseOnSelectItems.includes(item)) {
3129
+ return forceCloseOnSelectItems.filter(
3130
+ (prevItem) => prevItem !== item
3131
+ );
3132
+ } else {
3133
+ return forceCloseOnSelectItems;
3134
+ }
3135
+ });
3136
+ };
3137
+ }, [item, forceCloseOnSelect, setForceCloseOnSelectItems]);
3138
+ useEffect(() => {
3139
+ if (forceClearInputValueOnSelect) {
3140
+ setForceClearInputValueOnSelectItems(
3141
+ (forceClearInputValueOnSelectItems) => {
3142
+ if (forceClearInputValueOnSelectItems.includes(item)) {
3143
+ return forceClearInputValueOnSelectItems;
3144
+ } else {
3145
+ return [...forceClearInputValueOnSelectItems, item];
3146
+ }
3147
+ }
3148
+ );
3149
+ }
3150
+ return () => {
3151
+ setForceClearInputValueOnSelectItems(
3152
+ (forceClearInputValueOnSelectItems) => {
3153
+ if (forceClearInputValueOnSelectItems.includes(item)) {
3154
+ return forceClearInputValueOnSelectItems.filter(
3155
+ (prevItem) => prevItem !== item
3156
+ );
3157
+ } else {
3158
+ return forceClearInputValueOnSelectItems;
3159
+ }
3160
+ }
3161
+ );
3162
+ };
3163
+ }, [
3164
+ item,
3165
+ forceClearInputValueOnSelect,
3166
+ setForceClearInputValueOnSelectItems
3167
+ ]);
3168
+ const flexProps = {
3169
+ alignItems,
3170
+ justifyItems,
3171
+ alignContent,
3172
+ justifyContent,
3173
+ placeItems,
3174
+ placeContent,
3175
+ gap,
3176
+ rowGap,
3177
+ columnGap
3178
+ };
3179
+ if (multiple) {
3180
+ const checked = selectedItems.some(
3181
+ (selectedItem2) => itemToKey(selectedItem2) === itemToKey(item)
3182
+ );
3183
+ return /* @__PURE__ */ jsx(
3184
+ ComboboxItemVisual,
3185
+ {
3186
+ rootDivProps: getItemProps({
3187
+ item,
3188
+ index,
3189
+ "aria-selected": highlightedIndex === index,
3190
+ ...rest
3191
+ }),
3192
+ disabled,
3193
+ checked,
3194
+ hideCheckbox: hideCheckbox || item === ADD_NEW$1,
3195
+ flexProps,
3196
+ children
3197
+ }
3198
+ );
3199
+ } else {
3200
+ return /* @__PURE__ */ jsxs(
3201
+ "li",
3202
+ {
3203
+ ...getItemProps({
3204
+ item,
3205
+ index,
3206
+ "aria-selected": highlightedIndex === index,
3207
+ ...rest
3208
+ }),
3209
+ "data-anv": "combobox-item",
3210
+ "data-checked": itemToKey(selectedItem) === itemToKey(item),
3211
+ className: styles["item"],
3212
+ ...disabled ? { "aria-disabled": true } : {},
3213
+ children: [
3214
+ /* @__PURE__ */ jsx(
3215
+ Flex,
3216
+ {
3217
+ className: listboxStyles["children"],
3218
+ grow: 1,
3219
+ shrink: 1,
3220
+ ...flexProps,
3221
+ children
3222
+ }
3223
+ ),
3224
+ /* @__PURE__ */ jsx(
3225
+ Icon$2,
3226
+ {
3227
+ "aria-hidden": true,
3228
+ svg: SvgCheck,
3229
+ inherit: true,
3230
+ className: styles["Icon"],
3231
+ style: {
3232
+ opacity: itemToKey(selectedItem) === itemToKey(item) ? 1 : 0
3233
+ }
3234
+ }
3235
+ )
3236
+ ]
3237
+ }
3238
+ );
3239
+ }
3240
+ };
3241
+ const ComboboxItemElement = function(props) {
3242
+ if (!supportsPopover()) return /* @__PURE__ */ jsx(ComboboxLegacyItem, { ...props });
3243
+ return /* @__PURE__ */ jsx(CoreComboboxItemElement, { ...props });
3244
+ };
3245
+ const ComboboxItem = function(props) {
3246
+ const data = {
3247
+ item: props.item
3248
+ };
3249
+ const trackingId = useTrackingId({
3250
+ name: "ComboboxItem",
3251
+ data,
3252
+ hasOverride: !!props["data-tracking-id"]
3253
+ });
3254
+ return /* @__PURE__ */ jsx(ComboboxItemElement, { "data-tracking-id": trackingId, ...props });
3255
+ };
3256
+ const CoreComboboxItemAddNewElement = function({
3257
+ onSelection,
3258
+ ...props
3259
+ }) {
3260
+ const { items, setHasAddNew, hasExactMatch, setOnSelectItemAddNew } = useCombobox();
3261
+ useEffect(() => {
3262
+ setHasAddNew?.(true);
3263
+ return () => {
3264
+ setHasAddNew?.(false);
3265
+ };
3266
+ }, []);
3267
+ useEffect(() => {
3268
+ setOnSelectItemAddNew?.(() => onSelection);
3269
+ return () => {
3270
+ setOnSelectItemAddNew?.(void 0);
3271
+ };
3272
+ }, [setOnSelectItemAddNew, onSelection]);
3273
+ const firstRenderRef = useRef(true);
3274
+ useEffect(() => {
3275
+ if (firstRenderRef.current === true) {
3276
+ firstRenderRef.current = false;
3277
+ }
3278
+ }, []);
3279
+ return !hasExactMatch && !firstRenderRef.current ? /* @__PURE__ */ jsx(
3280
+ ComboboxItem,
3281
+ {
3282
+ ...props,
3283
+ item: ADD_NEW$1,
3284
+ index: items.length
3285
+ }
3286
+ ) : null;
3287
+ };
3288
+ const ComboboxItemAddNewElement = function(props) {
3289
+ if (!supportsPopover()) return /* @__PURE__ */ jsx(ComboboxLegacyItemAddNew, { ...props });
3290
+ return /* @__PURE__ */ jsx(CoreComboboxItemAddNewElement, { ...props });
3291
+ };
3292
+ const ComboboxItemAddNew = function(props) {
3293
+ const data = {
3294
+ item: "add-new"
3295
+ };
3296
+ const trackingId = useTrackingId({
3297
+ name: "ComboboxItemAddNew",
3298
+ data,
3299
+ hasOverride: !!props["data-tracking-id"]
3300
+ });
3301
+ return /* @__PURE__ */ jsx(ComboboxItemAddNewElement, { "data-tracking-id": trackingId, ...props });
3302
+ };
3303
+
3304
+ const ComboboxListElement = function({
3305
+ children,
3306
+ ...rest
3307
+ }) {
3308
+ const {
3309
+ getMenuProps,
3310
+ multiple,
3311
+ items,
3312
+ hasAddNew = false,
3313
+ hasEmpty,
3314
+ loading,
3315
+ selectAll,
3316
+ listRef
3317
+ } = useCombobox();
3318
+ const scrollSentinelRef = useRef(null);
3319
+ const [isScrolled, setIsScrolled] = useState(false);
3320
+ const { key: groupKey } = useComboboxGroupContext() ?? {};
3321
+ const isAGroup = !!groupKey;
3322
+ useEffect(() => {
3323
+ if (!scrollSentinelRef.current) return;
3324
+ const intersectionObserver = new IntersectionObserver(
3325
+ (entries) => {
3326
+ entries.forEach((entry) => {
3327
+ if (!entry.isIntersecting) {
3328
+ setIsScrolled(true);
3329
+ } else {
3330
+ setIsScrolled(false);
3331
+ }
3332
+ });
3333
+ },
3334
+ { threshold: 0 }
3335
+ );
3336
+ intersectionObserver.observe(scrollSentinelRef.current);
3337
+ return () => {
3338
+ intersectionObserver.disconnect();
3339
+ };
3340
+ }, [scrollSentinelRef, setIsScrolled]);
3341
+ if (!supportsPopover())
3342
+ return /* @__PURE__ */ jsx(ComboboxLegacyList, { ...rest, children });
3343
+ if (isAGroup) {
3344
+ return /* @__PURE__ */ jsx(Fragment, { children });
3345
+ }
3346
+ if (multiple) {
3347
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
3348
+ /* @__PURE__ */ jsxs(
3349
+ "ul",
3350
+ {
3351
+ ...getMenuProps(rest),
3352
+ ref: listRef,
3353
+ "data-anv": "combobox-list",
3354
+ className: cx(styles["listview"], listViewStyles["listview"], {
3355
+ [styles.scrolled]: isScrolled
3356
+ }),
3357
+ style: {
3358
+ display: items.length || hasAddNew ? void 0 : "none"
3359
+ },
3360
+ children: [
3361
+ /* @__PURE__ */ jsx("div", { ref: scrollSentinelRef, className: styles["scroll-sentinel"] }),
3362
+ !loading && selectAll && /* @__PURE__ */ jsx(ComboboxSelectAll, {}),
3363
+ children
3364
+ ]
3365
+ }
3366
+ ),
3367
+ loading ? /* @__PURE__ */ jsx("div", { className: styles["empty"], children: /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Spinner, { size: "small" }) }) }) : !items.length && !hasEmpty ? /* @__PURE__ */ jsx("div", { className: styles["empty"], children: /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "No match found" }) }) : null
3368
+ ] });
3369
+ } else {
3370
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
3371
+ /* @__PURE__ */ jsx(
3372
+ "ul",
3373
+ {
3374
+ ...getMenuProps(rest),
3375
+ ref: listRef,
3376
+ "data-anv": "combobox-list",
3377
+ className: listboxStyles["listbox"],
3378
+ style: {
3379
+ display: items.length || hasAddNew ? void 0 : "none"
3380
+ },
3381
+ children
3382
+ }
3383
+ ),
3384
+ loading ? /* @__PURE__ */ jsx("div", { className: styles["empty"], children: /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Spinner, { size: "small" }) }) }) : !items.length && !hasEmpty ? /* @__PURE__ */ jsx("div", { className: styles["empty"], children: /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "No match found" }) }) : null
3385
+ ] });
3386
+ }
3387
+ };
3388
+ const ComboboxList = function({
3389
+ children,
3390
+ className,
3391
+ ...rest
3392
+ }) {
3393
+ if (!supportsPopover())
3394
+ return /* @__PURE__ */ jsx(ComboboxLegacyList, { className, ...rest, children });
3395
+ return /* @__PURE__ */ jsx(ComboboxListElement, { className, ...rest, children });
3396
+ };
3397
+
3398
+ const ComboboxSingle = function(props) {
3399
+ const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
3400
+ const {
3401
+ className,
3402
+ style,
3403
+ children,
3404
+ open,
3405
+ disabled,
3406
+ readOnly,
3407
+ items: itemsProp,
3408
+ itemToString: itemToStringProp,
3409
+ itemToKey: itemToKeyProp,
3410
+ onChange,
3411
+ disableCloseOnClickOutside = false,
3412
+ disableMatchReferenceWidth = false,
3413
+ disableCloseOnSelectItem = false,
3414
+ filterOptions,
3415
+ disableFilter = false,
3416
+ loading = false,
3417
+ minPopoverHeight,
3418
+ root,
3419
+ onInputValueChange,
3420
+ environment: environmentProp,
3421
+ groupBy,
3422
+ groupToString,
3423
+ groupSorter,
3424
+ ...rest
3425
+ } = componentProps;
3426
+ const ComboboxClassNames = cx(styles["combobox"], className);
3427
+ const [items, setItems] = useState(itemsProp);
3428
+ const [hasAddNew, setHasAddNew] = useState(false);
3429
+ const [onSelectItemAddNew, setOnSelectItemAddNew] = useState(void 0);
3430
+ const [hasExactMatch, setHasExactMatch] = useState(false);
3431
+ const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
3432
+ const [hasEmpty, setHasEmpty] = useState(false);
3433
+ const [disabledItems, setDisabledItems] = useState([]);
3434
+ const [forceCloseOnSelectItems, setForceCloseOnSelectItems] = useState([]);
3435
+ const [, setForceClearInputValueOnSelectItems] = useState([]);
3436
+ const [isReadOnly, setIsReadOnly] = useState(readOnly);
3437
+ const [isDisabled, setIsDisabled] = useState(disabled);
3438
+ const referenceRef = useRef(null);
3439
+ const contentRef = useRef(null);
3440
+ const listRef = useRef(null);
3441
+ const handleOutsidePress = (_e) => {
3442
+ if (disableCloseOnClickOutside) return;
3443
+ closeMenu();
3444
+ };
3445
+ const { ref: wrapperDivRef, environment } = useDownshiftEnvironment$1();
3446
+ const { orderedItems: allItemsOrderedByGroup } = useGroups({
3447
+ items: itemsProp,
3448
+ groupBy,
3449
+ groupToString,
3450
+ groupSorter
3451
+ });
3452
+ const { groups: searchedGroups, orderedItems: searchedItemsOrderedByGroup } = useGroups({
3453
+ items,
3454
+ groupBy,
3455
+ groupToString,
3456
+ groupSorter
3457
+ });
3458
+ const showAddNew = hasAddNew && !hasExactMatch;
3459
+ const combinedItems = useMemo(
3460
+ () => showAddNew ? [...searchedItemsOrderedByGroup, ADD_NEW$1] : searchedItemsOrderedByGroup,
3461
+ [searchedItemsOrderedByGroup, showAddNew]
3462
+ );
3463
+ const itemToString = itemToStringProp ?? defaultItemToString$1;
3464
+ const itemToKey = itemToKeyProp ?? defaultItemToKey$1;
3465
+ const {
3466
+ isOpen,
3467
+ getLabelProps,
3468
+ getInputProps,
3469
+ getToggleButtonProps,
3470
+ getMenuProps,
3471
+ getItemProps,
3472
+ highlightedIndex,
3473
+ selectedItem,
3474
+ selectItem,
3475
+ setInputValue,
3476
+ inputValue,
3477
+ closeMenu
3478
+ } = useCombobox$1({
3479
+ ...rest,
3480
+ items: combinedItems,
3481
+ itemToString,
3482
+ itemToKey,
3483
+ isOpen: open,
3484
+ initialIsOpen: open,
3485
+ environment: environmentProp ?? environment,
3486
+ // NOTE: Reducer needs to be pure, side-effects should be in event handlers
3487
+ stateReducer(state, { type, changes }) {
3488
+ switch (type) {
3489
+ // keep Combobox open onBlur, will call close using Popover's onOutsidePress
3490
+ case useCombobox$1.stateChangeTypes.InputBlur:
3491
+ return {
3492
+ ...changes,
3493
+ isOpen: open != null ? open : true,
3494
+ highlightedIndex: state.highlightedIndex
3495
+ };
3496
+ case useCombobox$1.stateChangeTypes.InputKeyDownEnter:
3497
+ case useCombobox$1.stateChangeTypes.ItemClick:
3498
+ if (changes.selectedItem === ADD_NEW$1) {
3499
+ const stateInputValue = state.inputValue;
3500
+ setTimeout(() => {
3501
+ onSelectItemAddNew?.(stateInputValue);
3502
+ }, 250);
3503
+ return {
3504
+ ...changes,
3505
+ selectedItem: state.selectedItem,
3506
+ inputValue: ""
3507
+ };
3508
+ } else {
3509
+ const forceClose = forceCloseOnSelectItems.includes(
3510
+ changes.selectedItem
3511
+ );
3512
+ return {
3513
+ ...changes,
3514
+ isOpen: open != null ? open : forceClose ? false : disableCloseOnSelectItem ? true : changes.isOpen,
3515
+ highlightedIndex: disableCloseOnSelectItem ? itemToString(state.selectedItem) === state.inputValue || !state.inputValue ? state.highlightedIndex : 0 : changes.highlightedIndex
3516
+ };
3517
+ }
3518
+ // prevent this from closing the popover by default
3519
+ case useCombobox$1.stateChangeTypes.InputClick:
3520
+ return { ...changes, isOpen: open != null ? open : true };
3521
+ default:
3522
+ return changes;
3523
+ }
3524
+ },
3525
+ onInputValueChange: onInputValueChange ?? (({ inputValue: inputValue2, type, selectedItem: selectedItem2 }) => {
3526
+ const inputValueMatchesSelectedItem = selectedItem2 != null && inputValue2 === itemToString(selectedItem2);
3527
+ const inputValueIsEmpty = inputValue2 == null || inputValue2 === "";
3528
+ if (type === useCombobox$1.stateChangeTypes.InputKeyDownEnter || type === useCombobox$1.stateChangeTypes.ItemClick) {
3529
+ setItems(allItemsOrderedByGroup);
3530
+ setHasExactMatch(true);
3531
+ } else if (!inputValueMatchesSelectedItem && !inputValueIsEmpty && !disableFilter) {
3532
+ setItems(
3533
+ matchSorter(allItemsOrderedByGroup, inputValue2, filterOptions)
3534
+ );
3535
+ setHasExactMatch(
3536
+ matchSorter(allItemsOrderedByGroup, inputValue2, {
3537
+ ...filterOptions,
3538
+ threshold: matchSorter.rankings.EQUAL
3539
+ }).length > 0
3540
+ );
3541
+ } else {
3542
+ setItems(allItemsOrderedByGroup);
3543
+ setHasExactMatch(true);
3544
+ }
3545
+ }),
3546
+ onSelectedItemChange(changes) {
3547
+ const { selectedItem: selectedItem2 } = changes;
3548
+ if (onChange != null)
3549
+ onChange(selectedItem2 != null ? selectedItem2 : null);
3550
+ },
3551
+ onIsOpenChange({ isOpen: isOpen2, inputValue: inputValue2, selectedItem: selectedItem2 }) {
3552
+ if (isOpen2 === false) {
3553
+ setTimeout(() => {
3554
+ setItems(allItemsOrderedByGroup);
3555
+ if (inputValue2 === "") {
3556
+ selectItem(null);
3557
+ } else {
3558
+ setInputValue(
3559
+ selectedItem2 != null ? itemToString(selectedItem2) : ""
3560
+ );
3561
+ }
3562
+ }, 200);
3563
+ }
3564
+ },
3565
+ isItemDisabled(item) {
3566
+ if (isDisabled || isReadOnly) {
3567
+ return !!isDisabled || !!isReadOnly;
3568
+ }
3569
+ if (item && item instanceof Object && "disabled" in item && item.disabled) {
3570
+ return true;
3571
+ }
3572
+ if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
3573
+ return true;
3574
+ }
3575
+ if (disabledItems.includes(item)) {
3576
+ return true;
3577
+ }
3578
+ return false;
3579
+ }
3580
+ });
3581
+ const firstRenderRef = useRef(true);
3582
+ useEffect(() => {
3583
+ if (firstRenderRef.current === true) {
3584
+ firstRenderRef.current = false;
3585
+ }
3586
+ }, []);
3587
+ useEffect(() => {
3588
+ setIsDisabled(disabled);
3589
+ }, [disabled]);
3590
+ useEffect(() => {
3591
+ setIsReadOnly(readOnly);
3592
+ }, [readOnly]);
3593
+ useEffect(() => {
3594
+ if (firstRenderRef.current) return;
3595
+ setTimeout(() => {
3596
+ const inputValueMatchesSelectedItem = selectedItem != null && inputValue === itemToString(selectedItem);
3597
+ const inputValueIsEmpty = inputValue == null || inputValue === "";
3598
+ if (!inputValueMatchesSelectedItem && !inputValueIsEmpty && !disableFilter) {
3599
+ setItems(
3600
+ matchSorter(allItemsOrderedByGroup, inputValue, filterOptions)
3601
+ );
3602
+ setHasExactMatch(
3603
+ matchSorter(allItemsOrderedByGroup, inputValue, {
3604
+ ...filterOptions,
3605
+ threshold: matchSorter.rankings.EQUAL
3606
+ }).length > 0
3607
+ );
3608
+ } else {
3609
+ setItems(allItemsOrderedByGroup);
3610
+ setHasExactMatch(true);
3611
+ }
3612
+ }, 200);
3613
+ }, [allItemsOrderedByGroup]);
3614
+ return /* @__PURE__ */ jsx(
3615
+ ComboboxContext.Provider,
3616
+ {
3617
+ value: {
3618
+ multiple: false,
3619
+ select: false,
3620
+ items: searchedItemsOrderedByGroup,
3621
+ itemToString,
3622
+ itemToKey,
3623
+ isOpen,
3624
+ getLabelProps,
3625
+ getInputProps,
3626
+ getToggleButtonProps,
3627
+ getMenuProps,
3628
+ getItemProps,
3629
+ highlightedIndex,
3630
+ selectedItem,
3631
+ selectedItems: [],
3632
+ disabledItems,
3633
+ setDisabledItems,
3634
+ setForceCloseOnSelectItems,
3635
+ setForceClearInputValueOnSelectItems,
3636
+ getSelectedItemProps: void 0,
3637
+ getDropdownProps: void 0,
3638
+ selectItem,
3639
+ inputValue,
3640
+ isDisabled,
3641
+ isReadOnly,
3642
+ setIsReadOnly,
3643
+ setIsDisabled,
3644
+ hasDisabledPopover,
3645
+ setHasDisabledPopover,
3646
+ hasEmpty,
3647
+ setHasEmpty,
3648
+ hasAddNew,
3649
+ setHasAddNew,
3650
+ onSelectItemAddNew,
3651
+ setOnSelectItemAddNew,
3652
+ hasExactMatch,
3653
+ setHasExactMatch,
3654
+ loading,
3655
+ referenceRef,
3656
+ contentRef,
3657
+ listRef,
3658
+ closeMenu,
3659
+ groupBy,
3660
+ groupToString,
3661
+ groups: searchedGroups
3662
+ },
3663
+ children: /* @__PURE__ */ jsx(
3664
+ "div",
3665
+ {
3666
+ className: ComboboxClassNames,
3667
+ "data-anv": "combobox",
3668
+ style: { ...style, ...layoutStyles },
3669
+ ref: wrapperDivRef,
3670
+ children: /* @__PURE__ */ jsx(
3671
+ Popover,
3672
+ {
3673
+ open: isOpen,
3674
+ noPadding: true,
3675
+ disableCaret: true,
3676
+ fitScreen: true,
3677
+ disableFlipFallback: true,
3678
+ placement: "bottom-start",
3679
+ matchReferenceWidth: !disableMatchReferenceWidth,
3680
+ disableCloseOnClickOutside,
3681
+ onOutsidePress: handleOutsidePress,
3682
+ minHeight: minPopoverHeight,
3683
+ children
3684
+ }
3685
+ )
3686
+ }
3687
+ )
3688
+ }
3689
+ );
3690
+ };
3691
+ const ComboboxMultiple = function(props) {
3692
+ const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
3693
+ const {
3694
+ className,
3695
+ style,
3696
+ children,
3697
+ open,
3698
+ items: itemsProp,
3699
+ itemToString: itemToStringProp,
3700
+ itemToKey: itemToKeyProp,
3701
+ onChange,
3702
+ onSelectedItemsChange,
3703
+ onStateChange,
3704
+ disableCloseOnClickOutside = false,
3705
+ disableMatchReferenceWidth = false,
3706
+ disableCloseOnSelectItem = false,
3707
+ disableClearInputValueOnSelectItem = false,
3708
+ filterOptions,
3709
+ disableFilter = false,
3710
+ loading = false,
3711
+ minPopoverHeight,
3712
+ root,
3713
+ disabled,
3714
+ readOnly,
3715
+ stateReducer: _,
3716
+ onInputValueChange,
3717
+ initialSelectedItems,
3718
+ initialActiveIndex,
3719
+ defaultSelectedItems,
3720
+ defaultActiveIndex,
3721
+ activeIndex: activeIndexProp,
3722
+ selectedItems: selectedItemsProp,
3723
+ environment: environmentProp,
3724
+ selectAll,
3725
+ groupBy,
3726
+ groupToString,
3727
+ ...rest
3728
+ } = componentProps;
3729
+ const ComboboxClassNames = cx(styles["combobox"], className);
3730
+ const [items, setItems] = useState(itemsProp);
3731
+ const [hasAddNew, setHasAddNew] = useState(false);
3732
+ const [onSelectItemAddNew, setOnSelectItemAddNew] = useState(void 0);
3733
+ const [hasExactMatch, setHasExactMatch] = useState(false);
3734
+ const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
3735
+ const [hasEmpty, setHasEmpty] = useState(false);
3736
+ const [disabledItems, setDisabledItems] = useState([]);
3737
+ const [forceCloseOnSelectItems, setForceCloseOnSelectItems] = useState([]);
3738
+ const [
3739
+ forceClearInputValueOnSelectItems,
3740
+ setForceClearInputValueOnSelectItems
3741
+ ] = useState([]);
3742
+ const [isReadOnly, setIsReadOnly] = useState(readOnly);
3743
+ const [isDisabled, setIsDisabled] = useState(disabled);
3744
+ let storedSetInputValue = void 0;
3745
+ const referenceRef = useRef(null);
3746
+ const contentRef = useRef(null);
3747
+ const listRef = useRef(null);
3748
+ const handleOutsidePress = (_e) => {
3749
+ if (disableCloseOnClickOutside) return;
3750
+ closeMenu();
3751
+ };
3752
+ const { ref: wrapperDivRef, environment } = useDownshiftEnvironment$1();
3753
+ const { orderedItems: allItemsOrderedByGroup } = useGroups({
3754
+ items: itemsProp,
3755
+ groupBy,
3756
+ groupToString
3757
+ });
3758
+ const { groups: searchedGroups, orderedItems: searchedItemsOrderedByGroup } = useGroups({
3759
+ items,
3760
+ groupBy,
3761
+ groupToString
3762
+ });
3763
+ const showAddNew = hasAddNew && !hasExactMatch;
3764
+ const combinedItems = useMemo(() => {
3765
+ let items2 = searchedItemsOrderedByGroup;
3766
+ if (showAddNew) {
3767
+ items2 = [...items2, ADD_NEW$1];
3768
+ }
3769
+ if (selectAll) {
3770
+ items2 = [SELECT_ALL, ...items2];
3771
+ }
3772
+ return items2;
3773
+ }, [searchedItemsOrderedByGroup, showAddNew, selectAll]);
3774
+ const itemToString = itemToStringProp ?? defaultItemToString$1;
3775
+ const itemToKey = itemToKeyProp ?? defaultItemToKey$1;
3776
+ const {
3777
+ getSelectedItemProps,
3778
+ getDropdownProps,
3779
+ reset,
3780
+ selectedItems,
3781
+ addSelectedItem,
3782
+ removeSelectedItem,
3783
+ setSelectedItems
3784
+ } = useMultipleSelection({
3785
+ itemToKey,
3786
+ initialSelectedItems,
3787
+ initialActiveIndex,
3788
+ defaultSelectedItems,
3789
+ defaultActiveIndex,
3790
+ activeIndex: activeIndexProp,
3791
+ selectedItems: selectedItemsProp,
3792
+ environment: environmentProp ?? environment,
3793
+ stateReducer(state, { type, changes }) {
3794
+ switch (type) {
3795
+ // the Chip itself will handle "Backspace" and "Delete"
3796
+ // just return previous state
3797
+ case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace:
3798
+ case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownDelete:
3799
+ return state;
3800
+ case useMultipleSelection.stateChangeTypes.FunctionRemoveSelectedItem:
3801
+ return { ...changes, activeIndex: -1 };
3802
+ case useMultipleSelection.stateChangeTypes.FunctionReset:
3803
+ return { ...changes, selectedItems: [] };
3804
+ default:
3805
+ return changes;
3806
+ }
3807
+ },
3808
+ onStateChange(changes) {
3809
+ const { type } = changes;
3810
+ switch (type) {
3811
+ case useMultipleSelection.stateChangeTypes.FunctionReset:
3812
+ storedSetInputValue?.("");
3813
+ break;
3814
+ }
3815
+ onStateChange?.(changes);
3816
+ },
3817
+ onSelectedItemsChange(changes) {
3818
+ const { selectedItems: selectedItems2 } = changes;
3819
+ if (onChange != null) onChange(selectedItems2);
3820
+ if (onSelectedItemsChange != null) onSelectedItemsChange(changes);
3821
+ }
3822
+ });
3823
+ const {
3824
+ isOpen,
3825
+ getLabelProps,
3826
+ getInputProps,
3827
+ getToggleButtonProps,
3828
+ getMenuProps,
3829
+ getItemProps,
3830
+ highlightedIndex,
3831
+ selectedItem,
3832
+ selectItem,
3833
+ setInputValue,
3834
+ inputValue,
3835
+ closeMenu
3836
+ } = useCombobox$1({
3837
+ ...rest,
3838
+ items: combinedItems,
3839
+ itemToString,
3840
+ itemToKey,
3841
+ selectedItem: null,
3842
+ isOpen: open,
3843
+ initialIsOpen: open,
3844
+ environment: environmentProp ?? environment,
3845
+ // NOTE: Reducer needs to be pure, side-effects should be in event handlers
3846
+ stateReducer(state, { type, changes }) {
3847
+ switch (type) {
3848
+ // keep Combobox open onBlur, will call close using Popover's onOutsidePress
3849
+ case useCombobox$1.stateChangeTypes.InputBlur:
3850
+ return {
3851
+ ...changes,
3852
+ inputValue: state.inputValue,
3853
+ selectedItem: null,
3854
+ isOpen: open != null ? open : true,
3855
+ highlightedIndex: state.highlightedIndex
3856
+ };
3857
+ case useCombobox$1.stateChangeTypes.InputKeyDownEnter:
3858
+ case useCombobox$1.stateChangeTypes.ItemClick:
3859
+ if (changes.selectedItem === ADD_NEW$1) {
3860
+ const stateInputValue = state.inputValue;
3861
+ setTimeout(() => {
3862
+ onSelectItemAddNew?.(stateInputValue);
3863
+ }, 250);
3864
+ return {
3865
+ ...changes,
3866
+ selectedItem: state.selectedItem,
3867
+ inputValue: ""
3868
+ };
3869
+ } else if (changes.selectedItem === SELECT_ALL) {
3870
+ selectAll?.onSelection();
3871
+ return {
3872
+ ...changes,
3873
+ selectedItem: null
3874
+ };
3875
+ } else {
3876
+ const forceClose = forceCloseOnSelectItems.includes(
3877
+ changes.selectedItem
3878
+ );
3879
+ const forceClearInputValue = forceClearInputValueOnSelectItems.includes(
3880
+ changes.selectedItem
3881
+ );
3882
+ return {
3883
+ ...changes,
3884
+ isOpen: open != null ? open : forceClose ? false : disableCloseOnSelectItem ? true : changes.isOpen,
3885
+ highlightedIndex: forceClearInputValue ? 0 : disableCloseOnSelectItem ? disableClearInputValueOnSelectItem || !state.inputValue ? state.highlightedIndex : 0 : changes.highlightedIndex,
3886
+ inputValue: forceClearInputValue ? "" : disableClearInputValueOnSelectItem ? state.inputValue : ""
3887
+ };
3888
+ }
3889
+ // prevent this from closing the popover by default
3890
+ case useCombobox$1.stateChangeTypes.InputClick:
3891
+ return { ...changes, isOpen: open != null ? open : true };
3892
+ // prevent this from clearing the input value by default
3893
+ case useCombobox$1.stateChangeTypes.ControlledPropUpdatedSelectedItem:
3894
+ return { ...changes, inputValue: state.inputValue };
3895
+ default:
3896
+ return changes;
3897
+ }
3898
+ },
3899
+ onStateChange(changes) {
3900
+ const { type, selectedItem: newSelectedItem } = changes;
3901
+ switch (type) {
3902
+ case useCombobox$1.stateChangeTypes.InputKeyDownEnter:
3903
+ case useCombobox$1.stateChangeTypes.ItemClick:
3904
+ case useCombobox$1.stateChangeTypes.InputBlur:
3905
+ if (newSelectedItem != null) {
3906
+ const itemAlreadySelected = selectedItems.some(
3907
+ (item) => itemToKey(item) === itemToKey(newSelectedItem)
3908
+ );
3909
+ if (itemAlreadySelected) {
3910
+ removeSelectedItem(newSelectedItem);
3911
+ } else {
3912
+ addSelectedItem(newSelectedItem);
3913
+ }
3914
+ }
3915
+ break;
3916
+ }
3917
+ onStateChange?.(changes);
3918
+ },
3919
+ onInputValueChange: onInputValueChange ?? (({ inputValue: inputValue2, ...changes }) => {
3920
+ const { type, selectedItem: selectedItem2 } = changes;
3921
+ const inputValueMatchesSelectedItem = selectedItem2 != null && inputValue2 === itemToString(selectedItem2);
3922
+ const inputValueIsEmpty = inputValue2 == null || inputValue2 === "";
3923
+ if (type === useCombobox$1.stateChangeTypes.InputKeyDownEnter || type === useCombobox$1.stateChangeTypes.ItemClick) {
3924
+ setItems(allItemsOrderedByGroup);
3925
+ setHasExactMatch(true);
3926
+ } else if (!inputValueMatchesSelectedItem && !inputValueIsEmpty && !disableFilter) {
3927
+ setItems(
3928
+ matchSorter(allItemsOrderedByGroup, inputValue2, filterOptions)
3929
+ );
3930
+ setHasExactMatch(
3931
+ matchSorter(allItemsOrderedByGroup, inputValue2, {
3932
+ ...filterOptions,
3933
+ threshold: matchSorter.rankings.EQUAL
3934
+ }).length > 0
3935
+ );
3936
+ } else {
3937
+ setItems(allItemsOrderedByGroup);
3938
+ setHasExactMatch(true);
3939
+ }
3940
+ }),
3941
+ onIsOpenChange({ isOpen: isOpen2 }) {
3942
+ if (isOpen2 === false) {
3943
+ setTimeout(() => {
3944
+ setInputValue("");
3945
+ setItems(allItemsOrderedByGroup);
3946
+ }, 200);
3947
+ }
3948
+ },
3949
+ isItemDisabled(item) {
3950
+ if (isDisabled || isReadOnly) {
3951
+ return !!isDisabled || !!isReadOnly;
3952
+ }
3953
+ if (item && item instanceof Object && "disabled" in item && item.disabled) {
3954
+ return true;
3955
+ }
3956
+ if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
3957
+ return true;
3958
+ }
3959
+ if (disabledItems.includes(item)) {
3960
+ return true;
3961
+ }
3962
+ return false;
3963
+ },
3964
+ onHighlightedIndexChange(changes) {
3965
+ if (selectAll && changes.highlightedIndex === 0 && [
3966
+ useCombobox$1.stateChangeTypes.InputKeyDownHome,
3967
+ useCombobox$1.stateChangeTypes.InputKeyDownEnd,
3968
+ useCombobox$1.stateChangeTypes.InputKeyDownArrowDown,
3969
+ useCombobox$1.stateChangeTypes.InputKeyDownArrowUp,
3970
+ useCombobox$1.stateChangeTypes.InputKeyDownPageDown,
3971
+ useCombobox$1.stateChangeTypes.InputKeyDownPageUp
3972
+ ].includes(changes.type) && listRef.current) {
3973
+ const scrollParent = getScrollParent(listRef.current);
3974
+ if (scrollParent) {
3975
+ scrollParent.scrollTop = 0;
3976
+ }
3977
+ }
3978
+ }
3979
+ });
3980
+ storedSetInputValue = setInputValue;
3981
+ const firstRenderRef = useRef(true);
3982
+ useEffect(() => {
3983
+ if (firstRenderRef.current === true) {
3984
+ firstRenderRef.current = false;
3985
+ }
3986
+ }, []);
3987
+ useEffect(() => {
3988
+ setIsDisabled(disabled);
3989
+ }, [disabled]);
3990
+ useEffect(() => {
3991
+ setIsReadOnly(readOnly);
3992
+ }, [readOnly]);
3993
+ useEffect(() => {
3994
+ if (firstRenderRef.current) return;
3995
+ setTimeout(() => {
3996
+ const inputValueIsEmpty = inputValue == null || inputValue === "";
3997
+ if (!inputValueIsEmpty && !disableFilter) {
3998
+ setItems(matchSorter(itemsProp, inputValue, filterOptions));
3999
+ setHasExactMatch(
4000
+ matchSorter(itemsProp, inputValue, {
4001
+ ...filterOptions,
4002
+ threshold: matchSorter.rankings.EQUAL
4003
+ }).length > 0
4004
+ );
4005
+ } else {
4006
+ setItems(itemsProp);
4007
+ setHasExactMatch(true);
4008
+ }
4009
+ }, 200);
4010
+ }, [itemsProp]);
4011
+ return /* @__PURE__ */ jsx(
4012
+ ComboboxContext.Provider,
4013
+ {
4014
+ value: {
4015
+ multiple: true,
4016
+ select: false,
4017
+ items: combinedItems,
4018
+ itemToString,
4019
+ itemToKey,
4020
+ isOpen,
4021
+ getLabelProps,
4022
+ getInputProps,
4023
+ getToggleButtonProps,
4024
+ getMenuProps,
4025
+ getItemProps,
4026
+ highlightedIndex,
4027
+ selectedItem,
4028
+ selectedItems,
4029
+ disabledItems,
4030
+ setDisabledItems,
4031
+ setForceCloseOnSelectItems,
4032
+ setForceClearInputValueOnSelectItems,
4033
+ getSelectedItemProps,
4034
+ getDropdownProps,
4035
+ reset,
4036
+ addSelectedItem,
4037
+ removeSelectedItem,
4038
+ setSelectedItems,
4039
+ selectItem,
4040
+ inputValue,
4041
+ isDisabled,
4042
+ isReadOnly,
4043
+ setIsReadOnly,
4044
+ setIsDisabled,
4045
+ hasDisabledPopover,
4046
+ setHasDisabledPopover,
4047
+ hasEmpty,
4048
+ setHasEmpty,
4049
+ hasAddNew,
4050
+ setHasAddNew,
4051
+ onSelectItemAddNew,
4052
+ setOnSelectItemAddNew,
4053
+ hasExactMatch,
4054
+ setHasExactMatch,
4055
+ loading,
4056
+ referenceRef,
4057
+ contentRef,
4058
+ listRef,
4059
+ closeMenu,
4060
+ groupBy,
4061
+ groupToString,
4062
+ groups: searchedGroups,
4063
+ selectAll
4064
+ },
4065
+ children: /* @__PURE__ */ jsx(
4066
+ "div",
4067
+ {
4068
+ className: ComboboxClassNames,
4069
+ "data-anv": "combobox",
4070
+ style: { ...style, ...layoutStyles },
4071
+ ref: wrapperDivRef,
4072
+ children: /* @__PURE__ */ jsx(
4073
+ Popover,
4074
+ {
4075
+ open: !isDisabled && isOpen,
4076
+ noPadding: true,
4077
+ disableCaret: true,
4078
+ fitScreen: true,
4079
+ disableFlipFallback: true,
4080
+ placement: "bottom-start",
4081
+ matchReferenceWidth: !disableMatchReferenceWidth,
4082
+ disableCloseOnClickOutside,
4083
+ onOutsidePress: handleOutsidePress,
4084
+ minHeight: minPopoverHeight,
4085
+ children
4086
+ }
4087
+ )
4088
+ }
4089
+ )
4090
+ }
4091
+ );
4092
+ };
4093
+ const ComboboxElement = function(props) {
4094
+ if (!supportsPopover()) {
4095
+ if (isMultiple(props)) {
4096
+ return /* @__PURE__ */ jsx(ComboboxLegacyMultiple, { ...props });
4097
+ } else {
4098
+ return /* @__PURE__ */ jsx(ComboboxLegacySingle, { ...props });
4099
+ }
4100
+ }
4101
+ if (isMultiple(props)) {
4102
+ return /* @__PURE__ */ jsx(ComboboxMultiple, { ...props });
4103
+ } else {
4104
+ return /* @__PURE__ */ jsx(ComboboxSingle, { ...props });
4105
+ }
4106
+ };
4107
+ const Combobox = Object.assign(ComboboxElement, {
4108
+ /**
4109
+ * ComboboxSelect component for selecting items from a predefined list.
4110
+ *
4111
+ * Features:
4112
+ * - Single and multiple item selection from predefined options
4113
+ * - Dropdown-style selection interface
4114
+ * - Grouping support with custom group labels and sorting
4115
+ * - Loading states with spinner indicators
4116
+ * - Disabled and read-only states
4117
+ * - Customizable popover behavior and positioning
4118
+ * - Full accessibility support with ARIA attributes
4119
+ * - Keyboard navigation support
4120
+ * - Layout utility props for positioning and spacing
4121
+ * - Automatic tracking ID generation for analytics
4122
+ *
4123
+ * @example
4124
+ * <Combobox.Select
4125
+ * items={items}
4126
+ * itemToString={(item) => item.name}
4127
+ * onChange={setSelectedItem}
4128
+ * >
4129
+ * <Combobox.SelectTrigger label="Select an item" />
4130
+ * <Combobox.Content>
4131
+ * {({ items }) => (
4132
+ * <Combobox.List>
4133
+ * {items.map((item, i) => (
4134
+ * <Combobox.Item key={item.id} item={item} index={i}>
4135
+ * {item.name}
4136
+ * </Combobox.Item>
4137
+ * ))}
4138
+ * </Combobox.List>
4139
+ * )}
4140
+ * </Combobox.Content>
4141
+ * </Combobox.Select>
4142
+ */
4143
+ Select: ComboboxSelect,
4144
+ /**
4145
+ * ComboboxSearchField component for the search input field.
4146
+ *
4147
+ * Features:
4148
+ * - Search input with clear button functionality
4149
+ * - Supports multiple selection with chip display
4150
+ * - Handles keyboard navigation and accessibility
4151
+ * - Integrates with combobox state management
4152
+ * - Supports custom styling and layout
4153
+ * - Manages focus and blur events
4154
+ * - Enhanced prefix support for icons and avatars
4155
+ * - Automatic tracking ID generation for analytics
4156
+ *
4157
+ * @example
4158
+ * <Combobox.SearchField
4159
+ * label="Search users"
4160
+ * placeholder="Type to search..."
4161
+ * prefix={{ icon: { svg: SearchIcon } }}
4162
+ * />
4163
+ */
4164
+ SearchField: ComboboxSearchField,
4165
+ /**
4166
+ * ComboboxSelectTrigger component for the select trigger field.
4167
+ *
4168
+ * Features:
4169
+ * - Select input with dropdown trigger
4170
+ * - Supports single selection display
4171
+ * - Handles keyboard navigation and accessibility
4172
+ * - Integrates with combobox state management
4173
+ * - Supports custom styling and layout
4174
+ * - Manages focus and blur events
4175
+ * - Enhanced prefix support for icons and avatars
4176
+ * - Automatic tracking ID generation for analytics
4177
+ *
4178
+ * @example
4179
+ * <Combobox.SelectTrigger
4180
+ * label="Select user"
4181
+ * placeholder="Choose a user..."
4182
+ * prefix={{ avatar: { name: "User" } }}
4183
+ * />
4184
+ */
4185
+ SelectTrigger: ComboboxSelectTrigger,
4186
+ /**
4187
+ * ComboboxContent component for rendering the content area of a combobox.
4188
+ *
4189
+ * Features:
4190
+ * - Supports both popover and inline rendering modes
4191
+ * - Provides render props pattern for flexible content rendering
4192
+ * - Handles grouped items with proper ARIA labels
4193
+ * - Integrates with combobox state management
4194
+ * - Supports custom styling and layout
4195
+ * - Manages focus and blur events for popover behavior
4196
+ *
4197
+ * @example
4198
+ * <Combobox.Content>
4199
+ * {({ items }) => (
4200
+ * <Combobox.List>
4201
+ * {items.map((item, index) => (
4202
+ * <Combobox.Item key={item.id} item={item} index={index}>
4203
+ * {item.name}
4204
+ * </Combobox.Item>
4205
+ * ))}
4206
+ * </Combobox.List>
4207
+ * )}
4208
+ * </Combobox.Content>
4209
+ */
4210
+ Content: ComboboxContent,
4211
+ /**
4212
+ * ComboboxList component for rendering the list of items.
4213
+ *
4214
+ * Features:
4215
+ * - Renders list of items with proper accessibility
4216
+ * - Supports both single and multiple selection modes
4217
+ * - Loading state with spinner
4218
+ * - Empty state handling
4219
+ * - Automatic tracking ID generation for analytics
4220
+ *
4221
+ * @example
4222
+ * <Combobox.List>
4223
+ * {items.map((item, i) => (
4224
+ * <Combobox.Item key={item.id} item={item} index={i}>
4225
+ * {item.name}
4226
+ * </Combobox.Item>
4227
+ * ))}
4228
+ * </Combobox.List>
4229
+ */
4230
+ List: ComboboxList,
4231
+ /**
4232
+ * ComboboxItem component for rendering individual items in the list.
4233
+ *
4234
+ * Features:
4235
+ * - Individual item rendering with proper accessibility
4236
+ * - Support for disabled state
4237
+ * - Custom content rendering
4238
+ * - Automatic tracking ID generation for analytics
4239
+ *
4240
+ * @example
4241
+ * <Combobox.Item item={item} index={index}>
4242
+ * <Flex direction="column">
4243
+ * <Text>{item.name}</Text>
4244
+ * <Text size="small" subdued>{item.description}</Text>
4245
+ * </Flex>
4246
+ * </Combobox.Item>
4247
+ */
4248
+ Item: ComboboxItem,
4249
+ /**
4250
+ * ComboboxItemAddNew component for rendering an "Add New" option.
4251
+ *
4252
+ * Features:
4253
+ * - "Add New" option that appears when no exact match is found
4254
+ * - Customizable content rendering
4255
+ * - Callback when selected
4256
+ * - Automatic tracking ID generation for analytics
4257
+ *
4258
+ * @example
4259
+ * <Combobox.ItemAddNew onSelection={(inputValue) => addNewItem(inputValue)}>
4260
+ * Add "{inputValue}" as new item
4261
+ * </Combobox.ItemAddNew>
4262
+ */
4263
+ ItemAddNew: ComboboxItemAddNew,
4264
+ /**
4265
+ * ComboboxEmpty component for rendering content when no items are available.
4266
+ *
4267
+ * Features:
4268
+ * - Renders content when list is empty
4269
+ * - Customizable empty state message
4270
+ * - Automatic tracking ID generation for analytics
4271
+ *
4272
+ * @example
4273
+ * <Combobox.Empty>
4274
+ * <Text>No items found. Try adjusting your search.</Text>
4275
+ * </Combobox.Empty>
4276
+ */
4277
+ Empty: ComboboxEmpty
4278
+ });
4279
+
4280
+ export { Combobox as C, ComboboxElement as a, ComboboxSelect as b, ComboboxContent as c, ComboboxList as d, ComboboxItem as e, ComboboxItemAddNew as f, ComboboxSearchField as g, ComboboxSelectTrigger as h, ComboboxEmpty as i };
4281
+ //# sourceMappingURL=Combobox-Dy4IZDg1.js.map