@servicetitan/anvil2 1.49.3 → 1.49.5

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 (179) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/{Calendar-BkJs1qTF.js → Calendar-BP6r1sP9.js} +2 -2
  3. package/dist/{Calendar-BkJs1qTF.js.map → Calendar-BP6r1sP9.js.map} +1 -1
  4. package/dist/{Calendar-WHERvu2Y.js → Calendar-CLSm88D2.js} +2 -2
  5. package/dist/{Calendar-WHERvu2Y.js.map → Calendar-CLSm88D2.js.map} +1 -1
  6. package/dist/Calendar.js +2 -2
  7. package/dist/{Checkbox-Bhjj-jM4.js → Checkbox-DwuDx-t4.js} +4 -3
  8. package/dist/{Checkbox-Bhjj-jM4.js.map → Checkbox-DwuDx-t4.js.map} +1 -1
  9. package/dist/{Checkbox-C5Qjq_tU.js → Checkbox-PkAk1Saq.js} +2 -2
  10. package/dist/{Checkbox-C5Qjq_tU.js.map → Checkbox-PkAk1Saq.js.map} +1 -1
  11. package/dist/Checkbox.js +2 -2
  12. package/dist/Checkbox.module-D4EgXL0i.js +27 -0
  13. package/dist/Checkbox.module-D4EgXL0i.js.map +1 -0
  14. package/dist/Combobox-DNCq-jkq.js +4281 -0
  15. package/dist/Combobox-DNCq-jkq.js.map +1 -0
  16. package/dist/Combobox.js +1 -1
  17. package/dist/{DataTable-BkNCMaVu.js → DataTable-BIhmpU0v.js} +7 -7
  18. package/dist/{DataTable-BkNCMaVu.js.map → DataTable-BIhmpU0v.js.map} +1 -1
  19. package/dist/{DateField-BNleIuS8.js → DateField-DsGHTMZ1.js} +6 -6
  20. package/dist/{DateField-BNleIuS8.js.map → DateField-DsGHTMZ1.js.map} +1 -1
  21. package/dist/DateField.js +1 -1
  22. package/dist/{DateFieldRange-BBgvno-_.js → DateFieldRange-Ct979nxF.js} +7 -7
  23. package/dist/{DateFieldRange-BBgvno-_.js.map → DateFieldRange-Ct979nxF.js.map} +1 -1
  24. package/dist/DateFieldRange.js +1 -1
  25. package/dist/{DateFieldSingle-Bcwkxogy.js → DateFieldSingle-frMHnRSg.js} +7 -7
  26. package/dist/{DateFieldSingle-Bcwkxogy.js.map → DateFieldSingle-frMHnRSg.js.map} +1 -1
  27. package/dist/DateFieldSingle.js +1 -1
  28. package/dist/{DateFieldYearless-DnVJaBBq.js → DateFieldYearless-po9ieLod.js} +3 -3
  29. package/dist/{DateFieldYearless-DnVJaBBq.js.map → DateFieldYearless-po9ieLod.js.map} +1 -1
  30. package/dist/DateFieldYearless.js +1 -1
  31. package/dist/{DateFieldYearlessRange-BivGidsU.js → DateFieldYearlessRange-Dy8a8O1n.js} +3 -3
  32. package/dist/{DateFieldYearlessRange-BivGidsU.js.map → DateFieldYearlessRange-Dy8a8O1n.js.map} +1 -1
  33. package/dist/DateFieldYearlessRange.js +1 -1
  34. package/dist/{DaysOfTheWeek-Dn6zHxpt.js → DaysOfTheWeek-2_k3T4n4.js} +3 -3
  35. package/dist/{DaysOfTheWeek-Dn6zHxpt.js.map → DaysOfTheWeek-2_k3T4n4.js.map} +1 -1
  36. package/dist/DaysOfTheWeek.js +1 -1
  37. package/dist/{Dialog-CxH4Vnbb.js → Dialog-BT7a5KNT.js} +46 -67
  38. package/dist/Dialog-BT7a5KNT.js.map +1 -0
  39. package/dist/Dialog.css +33 -27
  40. package/dist/Dialog.js +2 -1
  41. package/dist/Dialog.js.map +1 -1
  42. package/dist/DialogCancelButton-sTEfx5kf.js +50 -0
  43. package/dist/DialogCancelButton-sTEfx5kf.js.map +1 -0
  44. package/dist/{Drawer-BLfDJU-e.js → Drawer-scQFylHI.js} +41 -21
  45. package/dist/Drawer-scQFylHI.js.map +1 -0
  46. package/dist/Drawer.css +35 -25
  47. package/dist/Drawer.js +1 -1
  48. package/dist/{DrawerContext-D4tWTLVf.js → DrawerContext-Cs3k160L.js} +127 -2
  49. package/dist/{DrawerContext-D4tWTLVf.js.map → DrawerContext-Cs3k160L.js.map} +1 -1
  50. package/dist/{FieldLabel-CHMCV9wX.js → FieldLabel-BIStrC2x.js} +2 -2
  51. package/dist/{FieldLabel-CHMCV9wX.js.map → FieldLabel-BIStrC2x.js.map} +1 -1
  52. package/dist/FieldLabel.js +1 -1
  53. package/dist/{InputMask-Cd01c3Tj.js → InputMask-A5LDdyxL.js} +3 -3
  54. package/dist/{InputMask-Cd01c3Tj.js.map → InputMask-A5LDdyxL.js.map} +1 -1
  55. package/dist/InputMask.js +1 -1
  56. package/dist/{ListView-CZ5T8bR1.js → ListView-5cRssdYI.js} +2 -2
  57. package/dist/{ListView-CZ5T8bR1.js.map → ListView-5cRssdYI.js.map} +1 -1
  58. package/dist/ListView.js +1 -1
  59. package/dist/{Menu-DUAfSImY.js → Menu-Cn2JJe1Y.js} +2 -2
  60. package/dist/{Menu-DUAfSImY.js.map → Menu-Cn2JJe1Y.js.map} +1 -1
  61. package/dist/Menu.js +1 -1
  62. package/dist/{NumberField-C62E56_v.js → NumberField-BUFymKV3.js} +2 -2
  63. package/dist/{NumberField-C62E56_v.js.map → NumberField-BUFymKV3.js.map} +1 -1
  64. package/dist/NumberField.js +1 -1
  65. package/dist/{Page-CGZQ-nsg.js → Page-Dgpz2WD7.js} +5 -5
  66. package/dist/{Page-CGZQ-nsg.js.map → Page-Dgpz2WD7.js.map} +1 -1
  67. package/dist/Page.js +1 -1
  68. package/dist/{Pagination-BHEEnNas.js → Pagination-CnF6yBr5.js} +2 -2
  69. package/dist/{Pagination-BHEEnNas.js.map → Pagination-CnF6yBr5.js.map} +1 -1
  70. package/dist/Pagination.js +1 -1
  71. package/dist/{Popover-CIPg_ZgX.js → Popover-CcMDyKTj.js} +2 -2
  72. package/dist/{Popover-CIPg_ZgX.js.map → Popover-CcMDyKTj.js.map} +1 -1
  73. package/dist/Popover.js +1 -1
  74. package/dist/{ProgressBar-CUpF9fFW.js → ProgressBar-R_UjSR4o.js} +2 -2
  75. package/dist/{ProgressBar-CUpF9fFW.js.map → ProgressBar-R_UjSR4o.js.map} +1 -1
  76. package/dist/ProgressBar.js +1 -1
  77. package/dist/{Radio-CyCFna1X.js → Radio-CLR1m8N9.js} +2 -2
  78. package/dist/{Radio-CyCFna1X.js.map → Radio-CLR1m8N9.js.map} +1 -1
  79. package/dist/Radio.js +2 -2
  80. package/dist/{RadioGroup-DRS2EjVH.js → RadioGroup-m46C69uO.js} +2 -2
  81. package/dist/{RadioGroup-DRS2EjVH.js.map → RadioGroup-m46C69uO.js.map} +1 -1
  82. package/dist/{SelectCard-lBcnP5j5.js → SelectCard-DViLgRGh.js} +3 -3
  83. package/dist/{SelectCard-lBcnP5j5.js.map → SelectCard-DViLgRGh.js.map} +1 -1
  84. package/dist/SelectCard.js +1 -1
  85. package/dist/SelectField.d.ts +2 -0
  86. package/dist/SelectField.js +2 -0
  87. package/dist/SelectField.js.map +1 -0
  88. package/dist/SelectFieldSync-DF05HvD4.js +1009 -0
  89. package/dist/SelectFieldSync-DF05HvD4.js.map +1 -0
  90. package/dist/SelectFieldSync.css +168 -0
  91. package/dist/{SelectTrigger-qvoGCkb1.js → SelectTrigger-BSzOoRsu.js} +2 -2
  92. package/dist/{SelectTrigger-qvoGCkb1.js.map → SelectTrigger-BSzOoRsu.js.map} +1 -1
  93. package/dist/SelectTrigger.js +1 -1
  94. package/dist/{SelectTriggerBase-C4gebtca.js → SelectTriggerBase-CfmRIFRs.js} +17 -39
  95. package/dist/SelectTriggerBase-CfmRIFRs.js.map +1 -0
  96. package/dist/SelectTriggerBase.module-DUhQNr6j.js +33 -0
  97. package/dist/SelectTriggerBase.module-DUhQNr6j.js.map +1 -0
  98. package/dist/Table.js +1 -1
  99. package/dist/{TextField-CygbgVVt.js → TextField-B08U4_rt.js} +2 -2
  100. package/dist/{TextField-CygbgVVt.js.map → TextField-B08U4_rt.js.map} +1 -1
  101. package/dist/{TextField-CpVkZxMT.js → TextField-D29fTRGR.js} +2 -2
  102. package/dist/{TextField-CpVkZxMT.js.map → TextField-D29fTRGR.js.map} +1 -1
  103. package/dist/TextField.js +1 -1
  104. package/dist/{Textarea-DacevzmW.js → Textarea-Dl4w2-t0.js} +2 -2
  105. package/dist/{Textarea-DacevzmW.js.map → Textarea-Dl4w2-t0.js.map} +1 -1
  106. package/dist/Textarea.js +1 -1
  107. package/dist/{TimeField-BkOB5ESa.js → TimeField-Dpi3fMsn.js} +4 -4
  108. package/dist/{TimeField-BkOB5ESa.js.map → TimeField-Dpi3fMsn.js.map} +1 -1
  109. package/dist/TimeField.js +1 -1
  110. package/dist/Toast.js +2 -2
  111. package/dist/{Toaster-Dg7M4W4U.js → Toaster-B0ogInIl.js} +23 -23
  112. package/dist/{Toaster-Dg7M4W4U.js.map → Toaster-B0ogInIl.js.map} +1 -1
  113. package/dist/{Toaster-BxbR-XcR.js → Toaster-CRNOANCk.js} +2 -2
  114. package/dist/{Toaster-BxbR-XcR.js.map → Toaster-CRNOANCk.js.map} +1 -1
  115. package/dist/Toaster.css +56 -53
  116. package/dist/{Toolbar-is5509wJ.js → Toolbar-CPldWSNJ.js} +11 -11
  117. package/dist/{Toolbar-is5509wJ.js.map → Toolbar-CPldWSNJ.js.map} +1 -1
  118. package/dist/Toolbar.js +1 -1
  119. package/dist/{Tooltip-CZsoFe6C.js → Tooltip-BbfLb3pI.js} +2 -2
  120. package/dist/{Tooltip-CZsoFe6C.js.map → Tooltip-BbfLb3pI.js.map} +1 -1
  121. package/dist/Tooltip.js +1 -1
  122. package/dist/{YearlessDateInputWithPicker-MHLlAdrH.js → YearlessDateInputWithPicker-LiMI-Oer.js} +4 -4
  123. package/dist/{YearlessDateInputWithPicker-MHLlAdrH.js.map → YearlessDateInputWithPicker-LiMI-Oer.js.map} +1 -1
  124. package/dist/assets/icons/st/titan_intelligence.svg +1 -1
  125. package/dist/assets/icons/st/transactional.svg +1 -0
  126. package/dist/assets/icons/st.ts +1 -0
  127. package/dist/beta/components/SelectField/SelectField.d.ts +2 -0
  128. package/dist/beta/components/SelectField/SelectFieldSync.d.ts +39 -0
  129. package/dist/beta/components/SelectField/index.d.ts +3 -0
  130. package/dist/beta/components/SelectField/internal/FieldDialog/FieldDialog.d.ts +8 -0
  131. package/dist/beta/components/SelectField/internal/FieldPopover/FieldPopover.d.ts +8 -0
  132. package/dist/beta/components/SelectField/internal/InView.d.ts +34 -0
  133. package/dist/beta/components/SelectField/internal/SelectFieldInput.d.ts +53 -0
  134. package/dist/beta/components/SelectField/internal/SelectFieldLabel.d.ts +28 -0
  135. package/dist/beta/components/SelectField/internal/SelectFieldList.d.ts +26 -0
  136. package/dist/beta/components/SelectField/internal/SelectFieldListItem.d.ts +14 -0
  137. package/dist/beta/components/SelectField/internal/useCombo.d.ts +30 -0
  138. package/dist/beta/components/SelectField/stories/SelectField.stories.data.d.ts +32 -0
  139. package/dist/beta/components/SelectField/types.d.ts +232 -0
  140. package/dist/beta/components/Table/types.d.ts +1 -1
  141. package/dist/beta/components/index.d.ts +1 -0
  142. package/dist/beta/hooks/index.d.ts +1 -0
  143. package/dist/beta/hooks/useAdaptiveView.d.ts +50 -0
  144. package/dist/beta/index.d.ts +1 -0
  145. package/dist/beta.js +5 -4
  146. package/dist/beta.js.map +1 -1
  147. package/dist/components/ButtonToggle/ButtonToggle.d.ts +1 -1
  148. package/dist/components/Dialog/Dialog.d.ts +3 -1
  149. package/dist/components/Dialog/DialogContent.d.ts +22 -2
  150. package/dist/components/Dialog/internal/DialogContext.d.ts +1 -0
  151. package/dist/components/Drawer/Drawer.d.ts +3 -1
  152. package/dist/components/Drawer/DrawerContent.d.ts +22 -3
  153. package/dist/components/Drawer/internal/DrawerContext.d.ts +4 -0
  154. package/dist/{indeterminate_check_box-RY9zr3xS.js → indeterminate_check_box-B4zobNlt.js} +2 -27
  155. package/dist/{indeterminate_check_box-RY9zr3xS.js.map → indeterminate_check_box-B4zobNlt.js.map} +1 -1
  156. package/dist/index.js +34 -33
  157. package/dist/index.js.map +1 -1
  158. package/dist/internal/hooks/index.d.ts +1 -0
  159. package/dist/internal/hooks/useDebouncedCallback/index.d.ts +1 -0
  160. package/dist/internal/hooks/useDebouncedCallback/useDebouncedCallback.d.ts +28 -0
  161. package/dist/internal/hooks/useSelectFieldLoading/index.d.ts +1 -0
  162. package/dist/internal/hooks/useSelectFieldLoading/useSelectFieldLoading.d.ts +102 -0
  163. package/dist/{Combobox-RjBDpgFV.js → match-sorter.esm-CtBw0MrM.js} +4 -4278
  164. package/dist/match-sorter.esm-CtBw0MrM.js.map +1 -0
  165. package/dist/useDialogScrollLock-BW-aVboo.js +41 -0
  166. package/dist/useDialogScrollLock-BW-aVboo.js.map +1 -0
  167. package/dist/{useInitialFocus-Cl_Txu7W.js → useInitialFocus-BpmW7pDB.js} +4 -41
  168. package/dist/useInitialFocus-BpmW7pDB.js.map +1 -0
  169. package/dist/{usePopoverSupport-CWTCDfN2.js → usePopoverSupport-CCSCHnit.js} +2 -2
  170. package/dist/{usePopoverSupport-CWTCDfN2.js.map → usePopoverSupport-CCSCHnit.js.map} +1 -1
  171. package/dist/{utils-aSAOVHjX.js → utils-CeT0omsG.js} +2 -2
  172. package/dist/{utils-aSAOVHjX.js.map → utils-CeT0omsG.js.map} +1 -1
  173. package/package.json +2 -2
  174. package/dist/Combobox-RjBDpgFV.js.map +0 -1
  175. package/dist/Dialog-CxH4Vnbb.js.map +0 -1
  176. package/dist/Drawer-BLfDJU-e.js.map +0 -1
  177. package/dist/SelectTriggerBase-C4gebtca.js.map +0 -1
  178. package/dist/useInitialFocus-Cl_Txu7W.js.map +0 -1
  179. /package/dist/{indeterminate_check_box.css → Checkbox.css} +0 -0
@@ -1,101 +1,6 @@
1
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
- import React__default, { forwardRef, useState, useEffect, createContext, useContext, useRef, useMemo, useCallback, useLayoutEffect, useReducer, cloneElement, Component, useId } from 'react';
3
- import { s as supportsPopover } from './DrawerContext-D4tWTLVf.js';
4
- import { P as Popover, u as usePopoverLegacyContext, f as usePopoverContext } from './Popover-CIPg_ZgX.js';
5
- import { c as cx, g as getDefaultExportFromCjs } from './index-tZvMCc77.js';
6
1
  import { a as _extends, _ as _objectWithoutPropertiesLoose } from './extends-Bg2s_OKl.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-C4gebtca.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, S as SvgIndeterminateCheckBox, a as SvgCheckBox, b as SvgCheckBoxOutlineBlank } from './indeterminate_check_box-RY9zr3xS.js';
17
- import { B as Button } from './Button-92_FKAyV.js';
18
- import { C as Chip } from './Chip-X2EwdZ97.js';
19
- import { S as SvgClose } from './close-DZj38AEh.js';
20
- import { S as SvgChevronRight } from './chevron_right-BdpsxX7x.js';
21
- import { S as SvgInfo } from './info-CYpG6tcI.js';
22
- import { S as SrOnly } from './SrOnly-CTsYSuby.js';
23
- import { T as Tooltip } from './Tooltip-CZsoFe6C.js';
24
- import { H as Helper } from './Helper-DjWotFtO.js';
25
- import { A as Avatar } from './Avatar-DeEV-v-b.js';
26
- import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
27
- import { useTrackingId } from './useTrackingId.js';
28
- import { S as SvgCheck } from './check-Cf67OWrZ.js';
29
-
30
- import './Combobox.css';const label = "_label_jfzvd_2";
31
- const required = "_required_jfzvd_46";
32
- const styles$2 = {
33
- label: label,
34
- "top-container": "_top-container_jfzvd_37",
35
- "label-text": "_label-text_jfzvd_42",
36
- required: required,
37
- "info-trigger": "_info-trigger_jfzvd_51",
38
- "info-content": "_info-content_jfzvd_56"
39
- };
40
-
41
- const LabelMoreInfoIcon = ({
42
- moreInfo,
43
- openMoreInfo
44
- }) => {
45
- const [open, setOpen] = useState(openMoreInfo);
46
- useEffect(() => {
47
- if (openMoreInfo) {
48
- setOpen(true);
49
- } else {
50
- setOpen(false);
51
- setTimeout(() => {
52
- setOpen(void 0);
53
- });
54
- }
55
- }, [openMoreInfo]);
56
- return /* @__PURE__ */ jsxs(
57
- Tooltip,
58
- {
59
- open,
60
- placement: "top",
61
- offset: 5,
62
- fallbackPlacements: ["right", "bottom", "left"],
63
- children: [
64
- /* @__PURE__ */ jsx(Tooltip.Trigger, { className: styles$2["info-trigger"], children: /* @__PURE__ */ jsx(Icon$2, { svg: SvgInfo }) }),
65
- /* @__PURE__ */ jsx(Tooltip.Content, { className: styles$2["info-content"], children: moreInfo })
66
- ]
67
- }
68
- );
69
- };
70
- const Label = forwardRef((props, ref) => {
71
- const { children, className, moreInfo, required, openMoreInfo, ...rest } = props;
72
- const LabelClassNames = cx([styles$2["label"]], className);
73
- return /* @__PURE__ */ jsxs("label", { className: LabelClassNames, "data-anv": "label", ref, ...rest, children: [
74
- /* @__PURE__ */ jsxs("div", { className: styles$2["top-container"], "aria-atomic": "true", children: [
75
- /* @__PURE__ */ jsxs("span", { className: styles$2["label-text"], children: [
76
- children,
77
- required ? /* @__PURE__ */ jsxs(Fragment, { children: [
78
- /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: styles$2["required"], children: "*" }),
79
- /* @__PURE__ */ jsx(SrOnly, { children: "Required" })
80
- ] }) : null
81
- ] }),
82
- moreInfo ? /* @__PURE__ */ jsx(LabelMoreInfoIcon, { moreInfo, openMoreInfo }) : null
83
- ] }),
84
- moreInfo ? /* @__PURE__ */ jsx(SrOnly, { children: moreInfo }) : null
85
- ] });
86
- });
87
- Label.displayName = "Label";
88
-
89
- const ComboboxContext = createContext(null);
90
- const useCombobox$1 = function() {
91
- const context = useContext(
92
- ComboboxContext
93
- );
94
- if (context == null) {
95
- throw new Error("useCombobox must be wrapped in <Combobox />");
96
- }
97
- return context;
98
- };
2
+ import { g as getDefaultExportFromCjs } from './index-tZvMCc77.js';
3
+ import React__default, { useRef, useEffect, useMemo, useCallback, useLayoutEffect, useReducer, cloneElement, Component } from 'react';
99
4
 
100
5
  function _setPrototypeOf(t, e) {
101
6
  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
@@ -6354,4184 +6259,5 @@ function getKeyAttributes(key) {
6354
6259
  };
6355
6260
  }
6356
6261
 
6357
- const ADD_NEW = Symbol.for("add-new");
6358
- const defaultItemToString = function(item) {
6359
- return item != null ? String(item) : "";
6360
- };
6361
- const defaultItemToKey = function(item) {
6362
- return item;
6363
- };
6364
- const ComboboxLegacyContext = createContext(null);
6365
- const useDownshiftEnvironment = () => {
6366
- const wrapperDivRef = useRef(null);
6367
- const shadowRoot = wrapperDivRef.current ? wrapperDivRef.current.getRootNode() : null;
6368
- const shadowDocument = wrapperDivRef.current && shadowRoot ? shadowRoot.ownerDocument : null;
6369
- const environment = shadowDocument ? {
6370
- document: shadowDocument,
6371
- addEventListener: shadowDocument.addEventListener.bind(shadowRoot),
6372
- removeEventListener: shadowDocument.removeEventListener.bind(shadowRoot),
6373
- Node
6374
- } : void 0;
6375
- return { ref: wrapperDivRef, environment };
6376
- };
6377
- const useComboboxLegacy = function() {
6378
- const context = useContext(
6379
- ComboboxLegacyContext
6380
- );
6381
- if (context == null) {
6382
- throw new Error("useComboboxLegacy must be wrapped in <ComboboxLegacy />");
6383
- }
6384
- return context;
6385
- };
6386
-
6387
- const item$1 = "_item_rxmcz_5";
6388
- const input = "_input_rxmcz_18";
6389
- const prefix = "_prefix_rxmcz_46";
6390
- const suffix = "_suffix_rxmcz_47";
6391
- const combobox$1 = "_combobox_rxmcz_62";
6392
- const select = "_select_rxmcz_71";
6393
- const chip = "_chip_rxmcz_167";
6394
- const listview$1 = "_listview_rxmcz_208";
6395
- const empty$1 = "_empty_rxmcz_216";
6396
- const Icon$1 = "_Icon_rxmcz_247";
6397
- const small = "_small_rxmcz_252";
6398
- const large = "_large_rxmcz_255";
6399
- const error = "_error_rxmcz_273";
6400
- const styles$1 = {
6401
- "buttons-wrapper": "_buttons-wrapper_rxmcz_3",
6402
- "search-field": "_search-field_rxmcz_4",
6403
- item: item$1,
6404
- input: input,
6405
- "input-wrapper": "_input-wrapper_rxmcz_19",
6406
- "toggle-button-wrapper": "_toggle-button-wrapper_rxmcz_32",
6407
- "close-button-wrapper": "_close-button-wrapper_rxmcz_33",
6408
- prefix: prefix,
6409
- suffix: suffix,
6410
- combobox: combobox$1,
6411
- select: select,
6412
- "popover-content": "_popover-content_rxmcz_74",
6413
- "no-clear-button": "_no-clear-button_rxmcz_93",
6414
- "input-flex": "_input-flex_rxmcz_96",
6415
- "fake-placeholder": "_fake-placeholder_rxmcz_124",
6416
- "close-button": "_close-button_rxmcz_33",
6417
- "toggle-button": "_toggle-button_rxmcz_32",
6418
- "rows-wrapper": "_rows-wrapper_rxmcz_157",
6419
- "chip-wrapper": "_chip-wrapper_rxmcz_167",
6420
- chip: chip,
6421
- listview: listview$1,
6422
- empty: empty$1,
6423
- Icon: Icon$1,
6424
- small: small,
6425
- large: large,
6426
- error: error,
6427
- "listview-option": "_listview-option_rxmcz_304"
6428
- };
6429
-
6430
- const ComboboxLegacySingle = function(props) {
6431
- const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
6432
- const {
6433
- className,
6434
- style,
6435
- children,
6436
- open,
6437
- disabled,
6438
- readOnly,
6439
- items: itemsProp,
6440
- itemToString: itemToStringProp,
6441
- itemToKey: itemToKeyProp,
6442
- onChange,
6443
- disableCloseOnClickOutside = false,
6444
- disableMatchReferenceWidth = false,
6445
- disableCloseOnSelectItem = false,
6446
- filterOptions,
6447
- loading = false,
6448
- root,
6449
- onInputValueChange,
6450
- environment: environmentProp,
6451
- ...rest
6452
- } = componentProps;
6453
- const ComboboxLegacyClassNames = cx(styles$1["combobox"], className);
6454
- const [items, setItems] = useState(itemsProp);
6455
- const [hasAddNew, setHasAddNew] = useState(false);
6456
- const [onSelectItemAddNew, setOnSelectItemAddNew] = useState(void 0);
6457
- const [hasExactMatch, setHasExactMatch] = useState(false);
6458
- const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
6459
- const [hasEmpty, setHasEmpty] = useState(false);
6460
- const [disabledItems, setDisabledItems] = useState([]);
6461
- const [isReadOnly, setIsReadOnly] = useState(readOnly);
6462
- const [isDisabled, setIsDisabled] = useState(disabled);
6463
- const referenceRef = useRef(null);
6464
- const contentRef = useRef(null);
6465
- const handleOutsidePress = (e) => {
6466
- const clickedInsideReference = referenceRef.current && e.target != null && referenceRef.current.contains(e.target);
6467
- if (!clickedInsideReference) {
6468
- closeMenu();
6469
- return true;
6470
- } else {
6471
- return false;
6472
- }
6473
- };
6474
- const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();
6475
- const showAddNew = hasAddNew && !hasExactMatch;
6476
- const combinedItems = useMemo(
6477
- () => showAddNew ? [...items, ADD_NEW] : items,
6478
- [items, showAddNew]
6479
- );
6480
- const itemToString = itemToStringProp ?? defaultItemToString;
6481
- const itemToKey = itemToKeyProp ?? defaultItemToKey;
6482
- const {
6483
- isOpen,
6484
- getLabelProps,
6485
- getInputProps,
6486
- getToggleButtonProps,
6487
- getMenuProps,
6488
- getItemProps,
6489
- highlightedIndex,
6490
- selectedItem,
6491
- selectItem,
6492
- setInputValue,
6493
- inputValue,
6494
- closeMenu
6495
- } = useCombobox({
6496
- ...rest,
6497
- items: combinedItems,
6498
- itemToString,
6499
- itemToKey,
6500
- isOpen: open,
6501
- initialIsOpen: open,
6502
- environment: environmentProp ?? environment,
6503
- // NOTE: Reducer needs to be pure, side-effects should be in event handlers
6504
- stateReducer(state, { type, changes }) {
6505
- switch (type) {
6506
- // keep ComboboxLegacy open onBlur, will call close using Popover's onOutsidePress
6507
- case useCombobox.stateChangeTypes.InputBlur:
6508
- return {
6509
- ...changes,
6510
- isOpen: open != null ? open : true,
6511
- highlightedIndex: state.highlightedIndex
6512
- };
6513
- case useCombobox.stateChangeTypes.InputKeyDownEnter:
6514
- case useCombobox.stateChangeTypes.ItemClick:
6515
- if (changes.selectedItem === ADD_NEW) {
6516
- const stateInputValue = state.inputValue;
6517
- setTimeout(() => {
6518
- onSelectItemAddNew?.(stateInputValue);
6519
- }, 0);
6520
- return {
6521
- ...changes,
6522
- selectedItem: state.selectedItem,
6523
- inputValue: ""
6524
- };
6525
- } else {
6526
- return {
6527
- ...changes,
6528
- isOpen: open != null ? open : disableCloseOnSelectItem ? true : changes.isOpen,
6529
- highlightedIndex: disableCloseOnSelectItem ? 0 : changes.highlightedIndex
6530
- };
6531
- }
6532
- // prevent this from closing the popover by default
6533
- case useCombobox.stateChangeTypes.InputClick:
6534
- return { ...changes, isOpen: open != null ? open : true };
6535
- default:
6536
- return changes;
6537
- }
6538
- },
6539
- onInputValueChange: onInputValueChange ?? (({ inputValue: inputValue2, type, selectedItem: selectedItem2 }) => {
6540
- const inputValueMatchesSelectedItem = selectedItem2 != null && inputValue2 === itemToString(selectedItem2);
6541
- const inputValueIsEmpty = inputValue2 == null || inputValue2 === "";
6542
- if (type === useCombobox.stateChangeTypes.InputKeyDownEnter || type === useCombobox.stateChangeTypes.ItemClick) {
6543
- setItems(itemsProp);
6544
- setHasExactMatch(true);
6545
- } else if (!inputValueMatchesSelectedItem && !inputValueIsEmpty) {
6546
- setItems(matchSorter(itemsProp, inputValue2, filterOptions));
6547
- setHasExactMatch(
6548
- matchSorter(itemsProp, inputValue2, {
6549
- ...filterOptions,
6550
- threshold: matchSorter.rankings.EQUAL
6551
- }).length > 0
6552
- );
6553
- } else {
6554
- setItems(itemsProp);
6555
- setHasExactMatch(true);
6556
- }
6557
- }),
6558
- onSelectedItemChange(changes) {
6559
- const { selectedItem: selectedItem2 } = changes;
6560
- if (onChange != null)
6561
- onChange(selectedItem2 != null ? selectedItem2 : null);
6562
- },
6563
- onIsOpenChange({ isOpen: isOpen2, inputValue: inputValue2, selectedItem: selectedItem2 }) {
6564
- if (isOpen2 === false) {
6565
- setItems(itemsProp);
6566
- if (inputValue2 === "") {
6567
- selectItem(null);
6568
- } else {
6569
- setInputValue(selectedItem2 != null ? itemToString(selectedItem2) : "");
6570
- }
6571
- }
6572
- },
6573
- isItemDisabled(item) {
6574
- if (isDisabled || isReadOnly) {
6575
- return !!isDisabled || !!isReadOnly;
6576
- }
6577
- if (item && item instanceof Object && "disabled" in item && item.disabled) {
6578
- return true;
6579
- }
6580
- if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
6581
- return true;
6582
- }
6583
- if (disabledItems.includes(item)) {
6584
- return true;
6585
- }
6586
- return false;
6587
- }
6588
- });
6589
- const firstRenderRef = useRef(true);
6590
- useEffect(() => {
6591
- if (firstRenderRef.current === true) {
6592
- firstRenderRef.current = false;
6593
- }
6594
- }, []);
6595
- useEffect(() => {
6596
- setIsDisabled(disabled);
6597
- }, [disabled]);
6598
- useEffect(() => {
6599
- setIsReadOnly(readOnly);
6600
- }, [readOnly]);
6601
- useEffect(() => {
6602
- if (firstRenderRef.current) return;
6603
- const inputValueMatchesSelectedItem = selectedItem != null && inputValue === itemToString(selectedItem);
6604
- const inputValueIsEmpty = inputValue == null || inputValue === "";
6605
- if (!inputValueMatchesSelectedItem && !inputValueIsEmpty) {
6606
- setItems(matchSorter(itemsProp, inputValue, filterOptions));
6607
- setHasExactMatch(
6608
- matchSorter(itemsProp, inputValue, {
6609
- ...filterOptions,
6610
- threshold: matchSorter.rankings.EQUAL
6611
- }).length > 0
6612
- );
6613
- } else {
6614
- setItems(itemsProp);
6615
- setHasExactMatch(true);
6616
- }
6617
- }, [itemsProp]);
6618
- return /* @__PURE__ */ jsx(
6619
- ComboboxLegacyContext.Provider,
6620
- {
6621
- value: {
6622
- multiple: false,
6623
- select: false,
6624
- items,
6625
- itemToString,
6626
- itemToKey,
6627
- isOpen,
6628
- getLabelProps,
6629
- getInputProps,
6630
- getToggleButtonProps,
6631
- getMenuProps,
6632
- getItemProps,
6633
- highlightedIndex,
6634
- selectedItem,
6635
- selectedItems: [],
6636
- disabledItems,
6637
- setDisabledItems,
6638
- getSelectedItemProps: void 0,
6639
- getDropdownProps: void 0,
6640
- selectItem,
6641
- inputValue,
6642
- isDisabled,
6643
- isReadOnly,
6644
- setIsReadOnly,
6645
- setIsDisabled,
6646
- hasDisabledPopover,
6647
- setHasDisabledPopover,
6648
- hasEmpty,
6649
- setHasEmpty,
6650
- hasAddNew,
6651
- setHasAddNew,
6652
- onSelectItemAddNew,
6653
- setOnSelectItemAddNew,
6654
- hasExactMatch,
6655
- setHasExactMatch,
6656
- loading,
6657
- referenceRef,
6658
- contentRef,
6659
- closeMenu
6660
- },
6661
- children: /* @__PURE__ */ jsx(
6662
- "div",
6663
- {
6664
- className: ComboboxLegacyClassNames,
6665
- "data-anv": "combobox",
6666
- style: { ...style, ...layoutStyles },
6667
- ref: wrapperDivRef,
6668
- children: /* @__PURE__ */ jsx(
6669
- Popover,
6670
- {
6671
- root,
6672
- open: isOpen,
6673
- noPadding: true,
6674
- disableCaret: true,
6675
- fitScreen: true,
6676
- disableFlipFallback: true,
6677
- placement: "bottom-start",
6678
- matchReferenceWidth: !disableMatchReferenceWidth,
6679
- disableCloseOnClickOutside,
6680
- onOutsidePress: handleOutsidePress,
6681
- children
6682
- }
6683
- )
6684
- }
6685
- )
6686
- }
6687
- );
6688
- };
6689
- const ComboboxLegacyMultiple = function(props) {
6690
- const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
6691
- const {
6692
- className,
6693
- style,
6694
- children,
6695
- open,
6696
- items: itemsProp,
6697
- itemToString: itemToStringProp,
6698
- itemToKey: itemToKeyProp,
6699
- onChange,
6700
- onSelectedItemsChange,
6701
- disableCloseOnClickOutside = false,
6702
- disableMatchReferenceWidth = false,
6703
- disableCloseOnSelectItem = false,
6704
- disableClearInputValueOnSelectItem = false,
6705
- filterOptions,
6706
- loading = false,
6707
- root,
6708
- disabled,
6709
- readOnly,
6710
- stateReducer: _,
6711
- onInputValueChange,
6712
- initialSelectedItems,
6713
- initialActiveIndex,
6714
- defaultSelectedItems,
6715
- defaultActiveIndex,
6716
- activeIndex: activeIndexProp,
6717
- selectedItems: selectedItemsProp,
6718
- environment: environmentProp,
6719
- ...rest
6720
- } = componentProps;
6721
- const ComboboxLegacyClassNames = cx(styles$1["combobox"], className);
6722
- const [items, setItems] = useState(itemsProp);
6723
- const [hasAddNew, setHasAddNew] = useState(false);
6724
- const [onSelectItemAddNew, setOnSelectItemAddNew] = useState(void 0);
6725
- const [hasExactMatch, setHasExactMatch] = useState(false);
6726
- const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
6727
- const [hasEmpty, setHasEmpty] = useState(false);
6728
- const [disabledItems, setDisabledItems] = useState([]);
6729
- const [isReadOnly, setIsReadOnly] = useState(readOnly);
6730
- const [isDisabled, setIsDisabled] = useState(disabled);
6731
- let storedSetInputValue = void 0;
6732
- const referenceRef = useRef(null);
6733
- const contentRef = useRef(null);
6734
- const handleOutsidePress = (e) => {
6735
- const clickedInsideReference = referenceRef.current && e.target != null && referenceRef.current.contains(e.target);
6736
- if (!clickedInsideReference) {
6737
- closeMenu();
6738
- return true;
6739
- } else {
6740
- return false;
6741
- }
6742
- };
6743
- const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();
6744
- const showAddNew = hasAddNew && !hasExactMatch;
6745
- const combinedItems = useMemo(
6746
- () => showAddNew ? [...items, ADD_NEW] : items,
6747
- [items, showAddNew]
6748
- );
6749
- const itemToString = itemToStringProp ?? defaultItemToString;
6750
- const itemToKey = itemToKeyProp ?? defaultItemToKey;
6751
- const {
6752
- getSelectedItemProps,
6753
- getDropdownProps,
6754
- reset,
6755
- selectedItems,
6756
- addSelectedItem,
6757
- removeSelectedItem,
6758
- setSelectedItems
6759
- } = useMultipleSelection({
6760
- itemToKey,
6761
- initialSelectedItems,
6762
- initialActiveIndex,
6763
- defaultSelectedItems,
6764
- defaultActiveIndex,
6765
- activeIndex: activeIndexProp,
6766
- selectedItems: selectedItemsProp,
6767
- environment: environmentProp ?? environment,
6768
- stateReducer(state, { type, changes }) {
6769
- switch (type) {
6770
- // the Chip itself will handle "Backspace" and "Delete"
6771
- // just return previous state
6772
- case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace:
6773
- case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownDelete:
6774
- return state;
6775
- case useMultipleSelection.stateChangeTypes.FunctionRemoveSelectedItem:
6776
- return { ...changes, activeIndex: -1 };
6777
- case useMultipleSelection.stateChangeTypes.FunctionReset:
6778
- return { ...changes, selectedItems: [] };
6779
- default:
6780
- return changes;
6781
- }
6782
- },
6783
- onStateChange({ type }) {
6784
- switch (type) {
6785
- case useMultipleSelection.stateChangeTypes.FunctionReset:
6786
- storedSetInputValue?.("");
6787
- break;
6788
- }
6789
- },
6790
- onSelectedItemsChange(changes) {
6791
- const { selectedItems: selectedItems2 } = changes;
6792
- if (onChange != null) onChange(selectedItems2);
6793
- if (onSelectedItemsChange != null) onSelectedItemsChange(changes);
6794
- }
6795
- });
6796
- const {
6797
- isOpen,
6798
- getLabelProps,
6799
- getInputProps,
6800
- getToggleButtonProps,
6801
- getMenuProps,
6802
- getItemProps,
6803
- highlightedIndex,
6804
- selectedItem,
6805
- selectItem,
6806
- setInputValue,
6807
- inputValue,
6808
- closeMenu
6809
- } = useCombobox({
6810
- ...rest,
6811
- items: combinedItems,
6812
- itemToString,
6813
- itemToKey,
6814
- selectedItem: null,
6815
- isOpen: open,
6816
- initialIsOpen: open,
6817
- environment: environmentProp ?? environment,
6818
- // NOTE: Reducer needs to be pure, side-effects should be in event handlers
6819
- stateReducer(state, { type, changes }) {
6820
- switch (type) {
6821
- // keep ComboboxLegacy open onBlur, will call close using Popover's onOutsidePress
6822
- case useCombobox.stateChangeTypes.InputBlur:
6823
- return {
6824
- ...changes,
6825
- inputValue: state.inputValue,
6826
- selectedItem: null,
6827
- isOpen: open != null ? open : true,
6828
- highlightedIndex: state.highlightedIndex
6829
- };
6830
- case useCombobox.stateChangeTypes.InputKeyDownEnter:
6831
- case useCombobox.stateChangeTypes.ItemClick:
6832
- if (changes.selectedItem === ADD_NEW) {
6833
- const stateInputValue = state.inputValue;
6834
- setTimeout(() => {
6835
- onSelectItemAddNew?.(stateInputValue);
6836
- }, 0);
6837
- return {
6838
- ...changes,
6839
- selectedItem: state.selectedItem,
6840
- inputValue: ""
6841
- };
6842
- } else {
6843
- return {
6844
- ...changes,
6845
- isOpen: open != null ? open : disableCloseOnSelectItem ? true : changes.isOpen,
6846
- highlightedIndex: disableCloseOnSelectItem ? disableClearInputValueOnSelectItem || !state.inputValue ? state.highlightedIndex : 0 : changes.highlightedIndex,
6847
- inputValue: disableClearInputValueOnSelectItem ? state.inputValue : ""
6848
- };
6849
- }
6850
- // prevent this from closing the popover by default
6851
- case useCombobox.stateChangeTypes.InputClick:
6852
- return { ...changes, isOpen: open != null ? open : true };
6853
- // prevent this from clearing the input value by default
6854
- case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
6855
- return { ...changes, inputValue: state.inputValue };
6856
- default:
6857
- return changes;
6858
- }
6859
- },
6860
- onStateChange({ type, selectedItem: newSelectedItem }) {
6861
- switch (type) {
6862
- case useCombobox.stateChangeTypes.InputKeyDownEnter:
6863
- case useCombobox.stateChangeTypes.ItemClick:
6864
- case useCombobox.stateChangeTypes.InputBlur:
6865
- if (newSelectedItem != null) {
6866
- const itemAlreadySelected = selectedItems.some(
6867
- (item) => itemToKey(item) === itemToKey(newSelectedItem)
6868
- );
6869
- if (itemAlreadySelected) {
6870
- removeSelectedItem(newSelectedItem);
6871
- } else {
6872
- addSelectedItem(newSelectedItem);
6873
- }
6874
- }
6875
- break;
6876
- }
6877
- },
6878
- onInputValueChange: onInputValueChange ?? (({ inputValue: inputValue2, ...changes }) => {
6879
- const { type, selectedItem: selectedItem2 } = changes;
6880
- const inputValueMatchesSelectedItem = selectedItem2 != null && inputValue2 === itemToString(selectedItem2);
6881
- const inputValueIsEmpty = inputValue2 == null || inputValue2 === "";
6882
- if (type === useCombobox.stateChangeTypes.InputKeyDownEnter || type === useCombobox.stateChangeTypes.ItemClick) {
6883
- setItems(itemsProp);
6884
- setHasExactMatch(true);
6885
- } else if (!inputValueMatchesSelectedItem && !inputValueIsEmpty) {
6886
- setItems(matchSorter(itemsProp, inputValue2, filterOptions));
6887
- setHasExactMatch(
6888
- matchSorter(itemsProp, inputValue2, {
6889
- ...filterOptions,
6890
- threshold: matchSorter.rankings.EQUAL
6891
- }).length > 0
6892
- );
6893
- } else {
6894
- setItems(itemsProp);
6895
- setHasExactMatch(true);
6896
- }
6897
- }),
6898
- onIsOpenChange({ isOpen: isOpen2 }) {
6899
- if (isOpen2 === false) {
6900
- setInputValue("");
6901
- setItems(itemsProp);
6902
- }
6903
- },
6904
- isItemDisabled(item) {
6905
- if (isDisabled || isReadOnly) {
6906
- return !!isDisabled || !!isReadOnly;
6907
- }
6908
- if (item && item instanceof Object && "disabled" in item && item.disabled) {
6909
- return true;
6910
- }
6911
- if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
6912
- return true;
6913
- }
6914
- if (disabledItems.includes(item)) {
6915
- return true;
6916
- }
6917
- return false;
6918
- }
6919
- });
6920
- storedSetInputValue = setInputValue;
6921
- const firstRenderRef = useRef(true);
6922
- useEffect(() => {
6923
- if (firstRenderRef.current === true) {
6924
- firstRenderRef.current = false;
6925
- }
6926
- }, []);
6927
- useEffect(() => {
6928
- setIsDisabled(disabled);
6929
- }, [disabled]);
6930
- useEffect(() => {
6931
- setIsReadOnly(readOnly);
6932
- }, [readOnly]);
6933
- useEffect(() => {
6934
- if (firstRenderRef.current) return;
6935
- const inputValueIsEmpty = inputValue == null || inputValue === "";
6936
- if (!inputValueIsEmpty) {
6937
- setItems(matchSorter(itemsProp, inputValue, filterOptions));
6938
- setHasExactMatch(
6939
- matchSorter(itemsProp, inputValue, {
6940
- ...filterOptions,
6941
- threshold: matchSorter.rankings.EQUAL
6942
- }).length > 0
6943
- );
6944
- } else {
6945
- setItems(itemsProp);
6946
- setHasExactMatch(true);
6947
- }
6948
- }, [itemsProp]);
6949
- return /* @__PURE__ */ jsx(
6950
- ComboboxLegacyContext.Provider,
6951
- {
6952
- value: {
6953
- multiple: true,
6954
- select: false,
6955
- items,
6956
- itemToString,
6957
- itemToKey,
6958
- isOpen,
6959
- getLabelProps,
6960
- getInputProps,
6961
- getToggleButtonProps,
6962
- getMenuProps,
6963
- getItemProps,
6964
- highlightedIndex,
6965
- selectedItem,
6966
- selectedItems,
6967
- disabledItems,
6968
- setDisabledItems,
6969
- getSelectedItemProps,
6970
- getDropdownProps,
6971
- reset,
6972
- addSelectedItem,
6973
- removeSelectedItem,
6974
- setSelectedItems,
6975
- selectItem,
6976
- inputValue,
6977
- isDisabled,
6978
- isReadOnly,
6979
- setIsReadOnly,
6980
- setIsDisabled,
6981
- hasDisabledPopover,
6982
- setHasDisabledPopover,
6983
- hasEmpty,
6984
- setHasEmpty,
6985
- hasAddNew,
6986
- setHasAddNew,
6987
- onSelectItemAddNew,
6988
- setOnSelectItemAddNew,
6989
- hasExactMatch,
6990
- setHasExactMatch,
6991
- loading,
6992
- referenceRef,
6993
- contentRef,
6994
- closeMenu
6995
- },
6996
- children: /* @__PURE__ */ jsx(
6997
- "div",
6998
- {
6999
- className: ComboboxLegacyClassNames,
7000
- "data-anv": "combobox",
7001
- style: { ...style, ...layoutStyles },
7002
- ref: wrapperDivRef,
7003
- children: /* @__PURE__ */ jsx(
7004
- Popover,
7005
- {
7006
- root,
7007
- open: !isDisabled && isOpen,
7008
- noPadding: true,
7009
- disableCaret: true,
7010
- fitScreen: true,
7011
- disableFlipFallback: true,
7012
- placement: "bottom-start",
7013
- matchReferenceWidth: !disableMatchReferenceWidth,
7014
- disableCloseOnClickOutside,
7015
- onOutsidePress: handleOutsidePress,
7016
- children
7017
- }
7018
- )
7019
- }
7020
- )
7021
- }
7022
- );
7023
- };
7024
- const SelectLegacySingle = function(props) {
7025
- const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
7026
- const {
7027
- className,
7028
- style,
7029
- children,
7030
- open,
7031
- disabled,
7032
- readOnly,
7033
- items,
7034
- itemToString: itemToStringProp,
7035
- itemToKey: itemToKeyProp,
7036
- onChange,
7037
- disableClearSelection = false,
7038
- disableCloseOnClickOutside = false,
7039
- disableMatchReferenceWidth = false,
7040
- disableCloseOnSelectItem = false,
7041
- loading = false,
7042
- root,
7043
- environment: environmentProp,
7044
- ...rest
7045
- } = componentProps;
7046
- const ComboboxLegacyClassNames = cx(styles$1["combobox"], className);
7047
- const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
7048
- const [hasEmpty, setHasEmpty] = useState(false);
7049
- const [disabledItems, setDisabledItems] = useState([]);
7050
- const [isReadOnly, setIsReadOnly] = useState(readOnly);
7051
- const [isDisabled, setIsDisabled] = useState(disabled);
7052
- const referenceRef = useRef(null);
7053
- const contentRef = useRef(null);
7054
- const handleOutsidePress = (e) => {
7055
- const clickedInsideReference = referenceRef.current && e.target != null && referenceRef.current.contains(e.target);
7056
- if (!clickedInsideReference) {
7057
- closeMenu();
7058
- return true;
7059
- } else {
7060
- return false;
7061
- }
7062
- };
7063
- const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();
7064
- const itemToString = itemToStringProp ?? defaultItemToString;
7065
- const itemToKey = itemToKeyProp ?? defaultItemToKey;
7066
- const {
7067
- isOpen,
7068
- getLabelProps,
7069
- getToggleButtonProps,
7070
- getMenuProps,
7071
- getItemProps,
7072
- highlightedIndex,
7073
- selectedItem,
7074
- selectItem,
7075
- inputValue,
7076
- closeMenu
7077
- } = useSelect({
7078
- ...rest,
7079
- items,
7080
- itemToString,
7081
- itemToKey,
7082
- isOpen: open,
7083
- initialIsOpen: open,
7084
- environment: environmentProp ?? environment,
7085
- // NOTE: Reducer needs to be pure, side-effects should be in event handlers
7086
- stateReducer(state, { type, changes }) {
7087
- switch (type) {
7088
- // keep ComboboxLegacy open onBlur, will call close using Popover's onOutsidePress
7089
- case useSelect.stateChangeTypes.ToggleButtonBlur:
7090
- return {
7091
- ...changes,
7092
- isOpen: open != null ? open : true,
7093
- highlightedIndex: state.highlightedIndex
7094
- };
7095
- case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
7096
- case useSelect.stateChangeTypes.ItemClick:
7097
- return {
7098
- ...changes,
7099
- isOpen: open != null ? open : disableCloseOnSelectItem ? true : changes.isOpen,
7100
- highlightedIndex: disableCloseOnSelectItem ? 0 : changes.highlightedIndex
7101
- };
7102
- // prevent this from closing the popover by default
7103
- case useSelect.stateChangeTypes.ToggleButtonClick:
7104
- return { ...changes, isOpen: open != null ? open : true };
7105
- default:
7106
- return changes;
7107
- }
7108
- },
7109
- onSelectedItemChange(changes) {
7110
- const { selectedItem: selectedItem2 } = changes;
7111
- if (onChange != null)
7112
- onChange(selectedItem2 != null ? selectedItem2 : null);
7113
- },
7114
- isItemDisabled(item) {
7115
- if (isDisabled || isReadOnly) {
7116
- return !!isDisabled || !!isReadOnly;
7117
- }
7118
- if (item && item instanceof Object && "disabled" in item && item.disabled) {
7119
- return true;
7120
- }
7121
- if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
7122
- return true;
7123
- }
7124
- if (disabledItems.includes(item)) {
7125
- return true;
7126
- }
7127
- return false;
7128
- }
7129
- });
7130
- useEffect(() => {
7131
- setIsDisabled(disabled);
7132
- }, [disabled]);
7133
- useEffect(() => {
7134
- setIsReadOnly(readOnly);
7135
- }, [readOnly]);
7136
- return /* @__PURE__ */ jsx(
7137
- ComboboxLegacyContext.Provider,
7138
- {
7139
- value: {
7140
- multiple: false,
7141
- select: true,
7142
- disableClearSelection,
7143
- items,
7144
- itemToString,
7145
- itemToKey,
7146
- isOpen,
7147
- getLabelProps,
7148
- getToggleButtonProps,
7149
- getMenuProps,
7150
- getItemProps,
7151
- highlightedIndex,
7152
- selectedItem,
7153
- selectedItems: [],
7154
- disabledItems,
7155
- setDisabledItems,
7156
- selectItem,
7157
- inputValue,
7158
- isDisabled,
7159
- isReadOnly,
7160
- setIsReadOnly,
7161
- setIsDisabled,
7162
- hasDisabledPopover,
7163
- setHasDisabledPopover,
7164
- hasEmpty,
7165
- setHasEmpty,
7166
- loading,
7167
- referenceRef,
7168
- contentRef,
7169
- closeMenu
7170
- },
7171
- children: /* @__PURE__ */ jsx(
7172
- "div",
7173
- {
7174
- className: ComboboxLegacyClassNames,
7175
- "data-anv": "combobox",
7176
- style: { ...style, ...layoutStyles },
7177
- ref: wrapperDivRef,
7178
- children: /* @__PURE__ */ jsx(
7179
- Popover,
7180
- {
7181
- root,
7182
- open: isOpen,
7183
- noPadding: true,
7184
- disableCaret: true,
7185
- fitScreen: true,
7186
- disableFlipFallback: true,
7187
- placement: "bottom-start",
7188
- matchReferenceWidth: !disableMatchReferenceWidth,
7189
- disableCloseOnClickOutside,
7190
- onOutsidePress: handleOutsidePress,
7191
- children
7192
- }
7193
- )
7194
- }
7195
- )
7196
- }
7197
- );
7198
- };
7199
- const SelectLegacyMultiple = function(props) {
7200
- const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
7201
- const {
7202
- className,
7203
- style,
7204
- children,
7205
- open,
7206
- items,
7207
- itemToString: itemToStringProp,
7208
- itemToKey: itemToKeyProp,
7209
- onChange,
7210
- onSelectedItemsChange,
7211
- disableCloseOnClickOutside = false,
7212
- disableMatchReferenceWidth = false,
7213
- disableCloseOnSelectItem = false,
7214
- loading = false,
7215
- root,
7216
- disabled,
7217
- readOnly,
7218
- stateReducer: _,
7219
- initialSelectedItems,
7220
- initialActiveIndex,
7221
- defaultSelectedItems,
7222
- defaultActiveIndex,
7223
- activeIndex: activeIndexProp,
7224
- selectedItems: selectedItemsProp,
7225
- environment: environmentProp,
7226
- ...rest
7227
- } = componentProps;
7228
- const ComboboxLegacyClassNames = cx(styles$1["combobox"], className);
7229
- const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
7230
- const [hasEmpty, setHasEmpty] = useState(false);
7231
- const [disabledItems, setDisabledItems] = useState([]);
7232
- const [isReadOnly, setIsReadOnly] = useState(readOnly);
7233
- const [isDisabled, setIsDisabled] = useState(disabled);
7234
- const referenceRef = useRef(null);
7235
- const contentRef = useRef(null);
7236
- const handleOutsidePress = (e) => {
7237
- const clickedInsideReference = referenceRef.current && e.target != null && referenceRef.current.contains(e.target);
7238
- if (!clickedInsideReference) {
7239
- closeMenu();
7240
- return true;
7241
- } else {
7242
- return false;
7243
- }
7244
- };
7245
- const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();
7246
- const itemToString = itemToStringProp ?? defaultItemToString;
7247
- const itemToKey = itemToKeyProp ?? defaultItemToKey;
7248
- const {
7249
- getSelectedItemProps,
7250
- getDropdownProps,
7251
- reset,
7252
- selectedItems,
7253
- addSelectedItem,
7254
- removeSelectedItem,
7255
- setSelectedItems
7256
- } = useMultipleSelection({
7257
- itemToKey,
7258
- initialSelectedItems,
7259
- initialActiveIndex,
7260
- defaultSelectedItems,
7261
- defaultActiveIndex,
7262
- activeIndex: activeIndexProp,
7263
- selectedItems: selectedItemsProp,
7264
- environment: environmentProp ?? environment,
7265
- stateReducer(state, { type, changes }) {
7266
- switch (type) {
7267
- // the Chip itself will handle "Backspace" and "Delete"
7268
- // just return previous state
7269
- case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace:
7270
- case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownDelete:
7271
- return state;
7272
- case useMultipleSelection.stateChangeTypes.FunctionRemoveSelectedItem:
7273
- return { ...changes, activeIndex: -1 };
7274
- case useMultipleSelection.stateChangeTypes.FunctionReset:
7275
- return { ...changes, selectedItems: [] };
7276
- default:
7277
- return changes;
7278
- }
7279
- },
7280
- onSelectedItemsChange(changes) {
7281
- const { selectedItems: selectedItems2 } = changes;
7282
- if (onChange != null) onChange(selectedItems2);
7283
- if (onSelectedItemsChange != null) onSelectedItemsChange(changes);
7284
- }
7285
- });
7286
- const {
7287
- isOpen,
7288
- getLabelProps,
7289
- getToggleButtonProps,
7290
- getMenuProps,
7291
- getItemProps,
7292
- highlightedIndex,
7293
- selectedItem,
7294
- selectItem,
7295
- inputValue,
7296
- closeMenu
7297
- } = useSelect({
7298
- ...rest,
7299
- items,
7300
- itemToString,
7301
- itemToKey,
7302
- selectedItem: null,
7303
- isOpen: open,
7304
- initialIsOpen: open,
7305
- environment: environmentProp ?? environment,
7306
- // NOTE: Reducer needs to be pure, side-effects should be in event handlers
7307
- stateReducer(state, { type, changes }) {
7308
- switch (type) {
7309
- // keep ComboboxLegacy open onBlur, will call close using Popover's onOutsidePress
7310
- case useSelect.stateChangeTypes.ToggleButtonBlur:
7311
- return {
7312
- ...changes,
7313
- selectedItem: null,
7314
- isOpen: open != null ? open : true,
7315
- highlightedIndex: state.highlightedIndex
7316
- };
7317
- case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
7318
- case useSelect.stateChangeTypes.ItemClick:
7319
- return {
7320
- ...changes,
7321
- isOpen: open != null ? open : disableCloseOnSelectItem ? true : changes.isOpen,
7322
- highlightedIndex: disableCloseOnSelectItem ? 0 : changes.highlightedIndex
7323
- };
7324
- // prevent this from closing the popover by default
7325
- case useSelect.stateChangeTypes.ToggleButtonClick:
7326
- return { ...changes, isOpen: open != null ? open : true };
7327
- default:
7328
- return changes;
7329
- }
7330
- },
7331
- onStateChange({ type, selectedItem: newSelectedItem }) {
7332
- switch (type) {
7333
- case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
7334
- case useSelect.stateChangeTypes.ItemClick:
7335
- case useSelect.stateChangeTypes.ToggleButtonBlur:
7336
- if (newSelectedItem != null) {
7337
- const itemAlreadySelected = selectedItems.some(
7338
- (item) => itemToKey(item) === itemToKey(newSelectedItem)
7339
- );
7340
- if (itemAlreadySelected) {
7341
- removeSelectedItem(newSelectedItem);
7342
- } else {
7343
- addSelectedItem(newSelectedItem);
7344
- }
7345
- }
7346
- break;
7347
- }
7348
- },
7349
- isItemDisabled(item) {
7350
- if (isDisabled || isReadOnly) {
7351
- return !!isDisabled || !!isReadOnly;
7352
- }
7353
- if (item && item instanceof Object && "disabled" in item && item.disabled) {
7354
- return true;
7355
- }
7356
- if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
7357
- return true;
7358
- }
7359
- if (disabledItems.includes(item)) {
7360
- return true;
7361
- }
7362
- return false;
7363
- }
7364
- });
7365
- useEffect(() => {
7366
- setIsDisabled(disabled);
7367
- }, [disabled]);
7368
- useEffect(() => {
7369
- setIsReadOnly(readOnly);
7370
- }, [readOnly]);
7371
- return /* @__PURE__ */ jsx(
7372
- ComboboxLegacyContext.Provider,
7373
- {
7374
- value: {
7375
- multiple: true,
7376
- select: true,
7377
- items,
7378
- itemToString,
7379
- itemToKey,
7380
- isOpen,
7381
- getLabelProps,
7382
- getToggleButtonProps,
7383
- getMenuProps,
7384
- getItemProps,
7385
- highlightedIndex,
7386
- selectedItem,
7387
- selectedItems,
7388
- disabledItems,
7389
- setDisabledItems,
7390
- getSelectedItemProps,
7391
- getDropdownProps,
7392
- reset,
7393
- addSelectedItem,
7394
- removeSelectedItem,
7395
- setSelectedItems,
7396
- selectItem,
7397
- inputValue,
7398
- isDisabled,
7399
- isReadOnly,
7400
- setIsReadOnly,
7401
- setIsDisabled,
7402
- hasDisabledPopover,
7403
- setHasDisabledPopover,
7404
- hasEmpty,
7405
- setHasEmpty,
7406
- loading,
7407
- referenceRef,
7408
- contentRef,
7409
- closeMenu
7410
- },
7411
- children: /* @__PURE__ */ jsx(
7412
- "div",
7413
- {
7414
- className: ComboboxLegacyClassNames,
7415
- "data-anv": "combobox",
7416
- style: { ...style, ...layoutStyles },
7417
- ref: wrapperDivRef,
7418
- children: /* @__PURE__ */ jsx(
7419
- Popover,
7420
- {
7421
- root,
7422
- open: !isDisabled && isOpen,
7423
- noPadding: true,
7424
- disableCaret: true,
7425
- fitScreen: true,
7426
- disableFlipFallback: true,
7427
- placement: "bottom-start",
7428
- matchReferenceWidth: !disableMatchReferenceWidth,
7429
- disableCloseOnClickOutside,
7430
- onOutsidePress: handleOutsidePress,
7431
- children
7432
- }
7433
- )
7434
- }
7435
- )
7436
- }
7437
- );
7438
- };
7439
-
7440
- const ComboboxLegacyTrigger = ({
7441
- // variant: variantProp = "combobox",
7442
- className,
7443
- label,
7444
- size,
7445
- error,
7446
- hint,
7447
- description,
7448
- required,
7449
- moreInfo,
7450
- openMoreInfo,
7451
- prefix,
7452
- suffix,
7453
- maxRows,
7454
- id,
7455
- disabled,
7456
- readOnly,
7457
- ...rest
7458
- }) => {
7459
- const {
7460
- select,
7461
- disableClearSelection,
7462
- itemToString,
7463
- getLabelProps,
7464
- getInputProps,
7465
- getToggleButtonProps,
7466
- selectedItem,
7467
- selectedItems,
7468
- getSelectedItemProps,
7469
- getDropdownProps,
7470
- reset,
7471
- removeSelectedItem,
7472
- selectItem,
7473
- inputValue,
7474
- isDisabled,
7475
- isReadOnly,
7476
- referenceRef,
7477
- contentRef,
7478
- closeMenu,
7479
- setIsDisabled,
7480
- setIsReadOnly
7481
- } = useComboboxLegacy();
7482
- const variant = select ? "select" : "combobox";
7483
- const context = usePopoverLegacyContext();
7484
- const inputRef = useRef(null);
7485
- const ComboboxLegacyTriggerClassNames = cx(styles$1["search-field"], {
7486
- [styles$1["select"]]: variant === "select"
7487
- });
7488
- const noClearButton = isDisabled || isReadOnly || disableClearSelection;
7489
- const ComboboxLegacyInputWrapperClassNames = cx(
7490
- styles$1["input-wrapper"],
7491
- className ? {
7492
- [className]: variant === "select"
7493
- } : {},
7494
- {
7495
- [styles$1["small"]]: size === "small",
7496
- [styles$1["large"]]: size === "large",
7497
- [styles$1["no-clear-button"]]: noClearButton
7498
- }
7499
- );
7500
- const ComboboxLegacyInputClassNames = cx(
7501
- styles$1["input"],
7502
- className ? {
7503
- [className]: variant === "combobox"
7504
- } : {},
7505
- {
7506
- [styles$1["error"]]: error
7507
- }
7508
- );
7509
- useLayoutEffect(() => {
7510
- if (typeof disabled === "undefined") return;
7511
- setIsDisabled(disabled);
7512
- }, [disabled, setIsDisabled]);
7513
- useLayoutEffect(() => {
7514
- if (typeof readOnly === "undefined") return;
7515
- setIsReadOnly(readOnly);
7516
- }, [readOnly, setIsReadOnly]);
7517
- const labelUid = "label" + useId();
7518
- const helperUid = "helper" + useId();
7519
- const placeholderUid = "placeholder" + useId();
7520
- const ariaDescribedBy = `${helperUid} ${placeholderUid}`;
7521
- const errorMessage = typeof error !== "boolean" ? error : void 0;
7522
- const handleBlur = (e) => {
7523
- const target = e.relatedTarget ?? e.target;
7524
- const focusedOnReference = referenceRef.current && referenceRef.current.contains(target);
7525
- const focusedOnContent = contentRef.current && contentRef.current.contains(target);
7526
- if (!focusedOnReference && !focusedOnContent) {
7527
- closeMenu();
7528
- }
7529
- };
7530
- const rowsRef = useRef(null);
7531
- const [stillCalculating, setStillCalculating] = useState(false);
7532
- const [collapsedChips, setCollapsedChips] = useState(false);
7533
- const [visibleChipsCount, setVisibleChipsCount] = useState(
7534
- null
7535
- );
7536
- const [forceRenderCount, setForceRenderCount] = useState(0);
7537
- useLayoutEffect(() => {
7538
- if (maxRows === void 0) return;
7539
- if (stillCalculating === false) {
7540
- setStillCalculating(true);
7541
- setCollapsedChips(false);
7542
- setVisibleChipsCount(null);
7543
- setForceRenderCount((x) => x + 1);
7544
- } else if (rowsRef?.current?.children) {
7545
- const children = rowsRef?.current?.children;
7546
- const rowData = Array.from(children).reduce(
7547
- (acc, child) => {
7548
- const top = child.getBoundingClientRect().top;
7549
- if (!acc.length) {
7550
- return [{ count: 1, top }];
7551
- } else if (acc[acc.length - 1].top === top) {
7552
- return [
7553
- ...acc.slice(0, -1),
7554
- { count: acc[acc.length - 1].count + 1, top }
7555
- ];
7556
- } else if (acc[acc.length - 1].top !== top) {
7557
- return [...acc, { count: 1, top }];
7558
- } else {
7559
- return acc;
7560
- }
7561
- },
7562
- []
7563
- );
7564
- if (!rowData[maxRows] || visibleChipsCount === 0) {
7565
- setStillCalculating(false);
7566
- } else {
7567
- setCollapsedChips(true);
7568
- if (visibleChipsCount == null) {
7569
- const firstGuess = Math.max(
7570
- rowData.reduce((sum, row) => sum + row.count, -2),
7571
- 0
7572
- );
7573
- setVisibleChipsCount(firstGuess);
7574
- } else {
7575
- setVisibleChipsCount(visibleChipsCount - 1);
7576
- }
7577
- setForceRenderCount((x) => x + 1);
7578
- }
7579
- }
7580
- }, [selectedItems.length, maxRows, forceRenderCount]);
7581
- const selectedItemsDisplayCount = collapsedChips && maxRows != null && visibleChipsCount !== null ? visibleChipsCount : selectedItems.length;
7582
- return /* @__PURE__ */ jsxs(
7583
- "div",
7584
- {
7585
- className: ComboboxLegacyTriggerClassNames,
7586
- "data-anv": "combobox-searchfield",
7587
- ref: referenceRef,
7588
- onBlur: handleBlur,
7589
- children: [
7590
- label ? /* @__PURE__ */ jsx(
7591
- Label,
7592
- {
7593
- ...getLabelProps({
7594
- className: styles$1["label"],
7595
- required,
7596
- moreInfo,
7597
- openMoreInfo,
7598
- id: labelUid
7599
- }),
7600
- children: label
7601
- }
7602
- ) : null,
7603
- /* @__PURE__ */ jsxs(
7604
- "div",
7605
- {
7606
- className: ComboboxLegacyInputWrapperClassNames,
7607
- role: "presentation",
7608
- ...variant === "select" ? {
7609
- ...getToggleButtonProps({
7610
- disabled: isDisabled,
7611
- readOnly: isReadOnly,
7612
- ref: context.refs.setReference,
7613
- id,
7614
- "aria-describedby": ariaDescribedBy,
7615
- "aria-labelledby": labelUid
7616
- })
7617
- } : {
7618
- ref: context.refs.setReference,
7619
- onClick: () => inputRef.current?.focus()
7620
- },
7621
- children: [
7622
- /* @__PURE__ */ jsxs("div", { className: styles$1["buttons-wrapper"], children: [
7623
- (inputValue || selectedItem || selectedItems.length) && !noClearButton ? /* @__PURE__ */ jsx("div", { className: styles$1["close-button-wrapper"], children: /* @__PURE__ */ jsx(
7624
- Button,
7625
- {
7626
- "aria-label": "clear selection",
7627
- appearance: "ghost",
7628
- size: "small",
7629
- icon: SvgClose,
7630
- className: styles$1["close-button"],
7631
- onClick: (e) => {
7632
- e.stopPropagation();
7633
- if (reset != null) {
7634
- reset();
7635
- } else {
7636
- selectItem(null);
7637
- }
7638
- },
7639
- tabIndex: -1
7640
- }
7641
- ) }) : null,
7642
- /* @__PURE__ */ jsx("div", { className: styles$1["toggle-button-wrapper"], children: /* @__PURE__ */ jsx(
7643
- Button,
7644
- {
7645
- ...variant === "select" ? { tabIndex: -1 } : getToggleButtonProps(),
7646
- className: styles$1["toggle-button"],
7647
- "aria-label": "toggle menu",
7648
- icon: SvgChevronRight,
7649
- appearance: "ghost",
7650
- size: "small",
7651
- disabled: isDisabled
7652
- }
7653
- ) })
7654
- ] }),
7655
- /* @__PURE__ */ jsxs("div", { className: styles$1["rows-wrapper"], ref: rowsRef, children: [
7656
- selectedItems.length && removeSelectedItem != null && getSelectedItemProps != null ? selectedItems.slice(0, selectedItemsDisplayCount).map((item, index) => {
7657
- const { onClick, ...selectedItemProps } = getSelectedItemProps({
7658
- selectedItem: item,
7659
- index
7660
- });
7661
- return /* @__PURE__ */ jsx(
7662
- "div",
7663
- {
7664
- className: styles$1["chip-wrapper"],
7665
- children: /* @__PURE__ */ jsx(
7666
- Chip,
7667
- {
7668
- ...selectedItemProps,
7669
- label: itemToString(item),
7670
- onClose: isDisabled || isReadOnly ? void 0 : (_e) => {
7671
- removeSelectedItem(item);
7672
- },
7673
- className: styles$1["chip"],
7674
- title: itemToString(item)
7675
- }
7676
- )
7677
- },
7678
- `selected-item-${index}`
7679
- );
7680
- }) : null,
7681
- collapsedChips && maxRows != null ? /* @__PURE__ */ jsx("div", { className: styles$1["chip-wrapper"], children: /* @__PURE__ */ jsx(
7682
- Chip,
7683
- {
7684
- label: `+${selectedItems.length - selectedItemsDisplayCount}`,
7685
- className: styles$1["chip"],
7686
- title: selectedItems.slice(selectedItemsDisplayCount).map((item) => itemToString(item)).join(", ")
7687
- }
7688
- ) }) : null,
7689
- /* @__PURE__ */ jsxs(Flex, { className: styles$1["input-flex"], alignItems: "center", children: [
7690
- prefix ? /* @__PURE__ */ jsx("div", { className: styles$1["prefix"], children: prefix }) : null,
7691
- variant === "select" ? /* @__PURE__ */ jsx(
7692
- "div",
7693
- {
7694
- ...getDropdownProps != null ? getDropdownProps({
7695
- className: ComboboxLegacyInputClassNames,
7696
- required,
7697
- preventKeyAction: false
7698
- }) : {
7699
- className: ComboboxLegacyInputClassNames,
7700
- required
7701
- },
7702
- children: selectedItems.length ? null : selectedItem ? itemToString(selectedItem) : /* @__PURE__ */ jsx(
7703
- "span",
7704
- {
7705
- className: styles$1["fake-placeholder"],
7706
- id: placeholderUid,
7707
- children: rest.placeholder
7708
- }
7709
- )
7710
- }
7711
- ) : /* @__PURE__ */ jsx(
7712
- "input",
7713
- {
7714
- ...getDropdownProps != null && getInputProps != null ? getInputProps(
7715
- getDropdownProps({
7716
- ...rest,
7717
- className: ComboboxLegacyInputClassNames,
7718
- disabled: isDisabled,
7719
- readOnly: isReadOnly,
7720
- required,
7721
- autoComplete: "off",
7722
- id,
7723
- "aria-describedby": ariaDescribedBy,
7724
- "aria-labelledby": labelUid,
7725
- preventKeyAction: false,
7726
- ref: inputRef
7727
- })
7728
- ) : getInputProps != null ? getInputProps({
7729
- ...rest,
7730
- className: ComboboxLegacyInputClassNames,
7731
- disabled: isDisabled,
7732
- readOnly: isReadOnly,
7733
- required,
7734
- autoComplete: "off",
7735
- id,
7736
- "aria-describedby": ariaDescribedBy,
7737
- "aria-labelledby": labelUid,
7738
- ref: inputRef
7739
- }) : {}
7740
- }
7741
- ),
7742
- suffix ? /* @__PURE__ */ jsx("div", { className: styles$1["suffix"], children: suffix }) : null
7743
- ] })
7744
- ] })
7745
- ]
7746
- }
7747
- ),
7748
- hint || errorMessage || description ? /* @__PURE__ */ jsx(
7749
- Helper,
7750
- {
7751
- id: helperUid,
7752
- errorMessage,
7753
- hint,
7754
- description
7755
- }
7756
- ) : null
7757
- ]
7758
- }
7759
- );
7760
- };
7761
-
7762
- const ComboboxLegacyContent = function({
7763
- children,
7764
- className,
7765
- disablePopover = false,
7766
- ...rest
7767
- }) {
7768
- const {
7769
- items,
7770
- itemToKey,
7771
- inputValue,
7772
- selectedItem,
7773
- selectedItems,
7774
- setHasDisabledPopover,
7775
- getMenuProps,
7776
- getItemProps,
7777
- isDisabled,
7778
- isReadOnly,
7779
- referenceRef,
7780
- contentRef,
7781
- closeMenu
7782
- } = useComboboxLegacy();
7783
- const ComboboxLegacyPopoverContentClassNames = cx(
7784
- styles$1["popover-content"],
7785
- className
7786
- );
7787
- useEffect(() => {
7788
- setHasDisabledPopover(disablePopover);
7789
- return () => {
7790
- setHasDisabledPopover(false);
7791
- };
7792
- }, [disablePopover, setHasDisabledPopover]);
7793
- const handleBlur = (e) => {
7794
- const target = e.relatedTarget ?? e.target;
7795
- const focusedOnReference = referenceRef.current && referenceRef.current.contains(target);
7796
- const focusedOnContent = contentRef.current && contentRef.current.contains(target);
7797
- if (!focusedOnReference && !focusedOnContent) {
7798
- closeMenu();
7799
- }
7800
- };
7801
- return disablePopover ? /* @__PURE__ */ jsx(
7802
- "div",
7803
- {
7804
- ...rest,
7805
- className: ComboboxLegacyPopoverContentClassNames,
7806
- ref: contentRef,
7807
- onBlur: handleBlur,
7808
- children: children ? children({
7809
- items,
7810
- inputValue,
7811
- selectedItem,
7812
- getMenuProps,
7813
- getItemProps,
7814
- listProps: {
7815
- ...getMenuProps({}, { suppressRefError: true }),
7816
- style: {
7817
- display: items.length ? "" : "none",
7818
- overflow: "auto"
7819
- }
7820
- },
7821
- options: items.map((item, index) => ({
7822
- optionProps: {
7823
- ...getItemProps({
7824
- item,
7825
- index
7826
- }),
7827
- selected: itemToKey(selectedItem) === itemToKey(item) || selectedItems.some(
7828
- (selectedItem2) => itemToKey(selectedItem2) === itemToKey(item)
7829
- ),
7830
- disabled: !!isDisabled || !!isReadOnly
7831
- // also see "isItemDisabled" function
7832
- },
7833
- item,
7834
- index
7835
- }))
7836
- }) : null
7837
- }
7838
- ) : /* @__PURE__ */ jsx(
7839
- Popover.Content,
7840
- {
7841
- "data-anv": "combobox-content",
7842
- ...rest,
7843
- className: ComboboxLegacyPopoverContentClassNames,
7844
- ref: getMenuProps({ ref: contentRef }, { suppressRefError: true }).ref,
7845
- onBlur: handleBlur,
7846
- children: children ? children({
7847
- items,
7848
- inputValue,
7849
- selectedItem,
7850
- getMenuProps,
7851
- getItemProps,
7852
- listProps: {
7853
- ...getMenuProps({}, { suppressRefError: true }),
7854
- style: {
7855
- display: items.length ? void 0 : "none",
7856
- overflow: "auto"
7857
- }
7858
- },
7859
- options: items.map((item, index) => ({
7860
- optionProps: {
7861
- ...getItemProps({
7862
- item,
7863
- index
7864
- }),
7865
- selected: itemToKey(selectedItem) === itemToKey(item) || selectedItems.some(
7866
- (selectedItem2) => itemToKey(selectedItem2) === itemToKey(item)
7867
- ),
7868
- disabled: !!isDisabled || !!isReadOnly
7869
- // also see "isItemDisabled" function
7870
- },
7871
- item,
7872
- index
7873
- }))
7874
- }) : null
7875
- }
7876
- );
7877
- };
7878
-
7879
- const ComboboxLegacyList = function({
7880
- children,
7881
- ...rest
7882
- }) {
7883
- const {
7884
- getMenuProps,
7885
- multiple,
7886
- items,
7887
- hasAddNew = false,
7888
- hasEmpty,
7889
- loading
7890
- } = useComboboxLegacy();
7891
- if (multiple) {
7892
- return /* @__PURE__ */ jsxs(Fragment, { children: [
7893
- /* @__PURE__ */ jsxs(
7894
- "div",
7895
- {
7896
- ...getMenuProps(rest),
7897
- "data-anv": "combobox-list",
7898
- className: cx(styles$1["listview"], listViewStyles["listview"]),
7899
- style: {
7900
- display: items.length || hasAddNew ? void 0 : "none",
7901
- overflow: "auto"
7902
- },
7903
- children: [
7904
- children,
7905
- loading ? /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Spinner, { size: "small" }) }) : null
7906
- ]
7907
- }
7908
- ),
7909
- !items.length && !hasEmpty ? /* @__PURE__ */ jsx("div", { className: styles$1["empty"], children: /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "No match found" }) }) : null
7910
- ] });
7911
- } else {
7912
- return /* @__PURE__ */ jsxs(Fragment, { children: [
7913
- /* @__PURE__ */ jsxs(
7914
- "ul",
7915
- {
7916
- ...getMenuProps(rest),
7917
- "data-anv": "combobox-list",
7918
- className: listboxStyles["listbox"],
7919
- style: {
7920
- display: items.length || hasAddNew ? void 0 : "none",
7921
- overflow: "auto"
7922
- },
7923
- children: [
7924
- children,
7925
- loading ? /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Spinner, { size: "small" }) }) }) : null
7926
- ]
7927
- }
7928
- ),
7929
- !items.length && !hasEmpty ? /* @__PURE__ */ jsx("div", { className: styles$1["empty"], children: /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "No match found" }) }) : null
7930
- ] });
7931
- }
7932
- };
7933
-
7934
- const ComboboxLegacyItem = function({
7935
- children,
7936
- disabled: disabledProp,
7937
- item,
7938
- index,
7939
- alignItems,
7940
- justifyItems,
7941
- alignContent,
7942
- justifyContent,
7943
- placeItems,
7944
- placeContent,
7945
- gap,
7946
- rowGap,
7947
- columnGap,
7948
- ...rest
7949
- }) {
7950
- const {
7951
- itemToKey,
7952
- getItemProps,
7953
- multiple,
7954
- selectedItem,
7955
- selectedItems,
7956
- disabledItems,
7957
- setDisabledItems,
7958
- highlightedIndex
7959
- } = useComboboxLegacy();
7960
- const disabled = disabledProp || item && item instanceof Object && "disabled" in item && item.disabled;
7961
- useEffect(() => {
7962
- if (disabledProp && !disabledItems.includes(item)) {
7963
- setDisabledItems([...disabledItems, item]);
7964
- } else if (disabledItems.includes(item)) {
7965
- setDisabledItems(disabledItems.filter((prevItem) => prevItem === item));
7966
- }
7967
- return () => {
7968
- if (disabledItems.includes(item)) {
7969
- setDisabledItems(disabledItems.filter((prevItem) => prevItem === item));
7970
- }
7971
- };
7972
- }, [item, disabledProp, setDisabledItems]);
7973
- if (multiple) {
7974
- const checked = selectedItems.some(
7975
- (selectedItem2) => itemToKey(selectedItem2) === itemToKey(item)
7976
- );
7977
- return /* @__PURE__ */ jsxs(
7978
- "div",
7979
- {
7980
- "data-anv": "combobox-item",
7981
- ...getItemProps({
7982
- item,
7983
- index,
7984
- "aria-selected": highlightedIndex === index,
7985
- ...rest
7986
- }),
7987
- className: cx(
7988
- styles$1["listview-option"],
7989
- listViewStyles["listview-option"]
7990
- ),
7991
- children: [
7992
- /* @__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: [
7993
- /* @__PURE__ */ jsx(
7994
- "input",
7995
- {
7996
- type: "checkbox",
7997
- checked,
7998
- "aria-checked": checked,
7999
- "aria-label": "Select",
8000
- readOnly: true,
8001
- ...disabled ? { disabled: true } : {}
8002
- }
8003
- ),
8004
- /* @__PURE__ */ jsxs("span", { className: checkboxStyles["icon-wrapper"], "aria-hidden": true, children: [
8005
- /* @__PURE__ */ jsx(
8006
- Icon$2,
8007
- {
8008
- size: "large",
8009
- svg: SvgIndeterminateCheckBox,
8010
- className: checkboxStyles["icon-indeterminate"]
8011
- }
8012
- ),
8013
- /* @__PURE__ */ jsx(
8014
- Icon$2,
8015
- {
8016
- size: "large",
8017
- svg: SvgCheckBox,
8018
- className: checkboxStyles["icon-checked"]
8019
- }
8020
- ),
8021
- /* @__PURE__ */ jsx(
8022
- Icon$2,
8023
- {
8024
- size: "large",
8025
- svg: SvgCheckBoxOutlineBlank,
8026
- className: checkboxStyles["icon-unchecked"]
8027
- }
8028
- )
8029
- ] }),
8030
- /* @__PURE__ */ jsx("span", { "aria-hidden": true })
8031
- ] }) }) }),
8032
- /* @__PURE__ */ jsx(
8033
- Flex,
8034
- {
8035
- grow: 1,
8036
- shrink: 1,
8037
- alignItems,
8038
- justifyItems,
8039
- alignContent,
8040
- justifyContent,
8041
- placeItems,
8042
- placeContent,
8043
- gap,
8044
- rowGap,
8045
- columnGap,
8046
- children
8047
- }
8048
- )
8049
- ]
8050
- }
8051
- );
8052
- } else {
8053
- return /* @__PURE__ */ jsxs(
8054
- "li",
8055
- {
8056
- ...getItemProps({
8057
- item,
8058
- index,
8059
- "aria-selected": highlightedIndex === index,
8060
- ...rest
8061
- }),
8062
- "data-anv": "combobox-item",
8063
- "data-checked": itemToKey(selectedItem) === itemToKey(item),
8064
- className: styles$1["item"],
8065
- ...disabled ? { "aria-disabled": true } : {},
8066
- children: [
8067
- /* @__PURE__ */ jsx(
8068
- Flex,
8069
- {
8070
- className: listboxStyles["children"],
8071
- grow: 1,
8072
- shrink: 1,
8073
- alignItems,
8074
- justifyItems,
8075
- alignContent,
8076
- justifyContent,
8077
- placeItems,
8078
- placeContent,
8079
- gap,
8080
- rowGap,
8081
- columnGap,
8082
- children
8083
- }
8084
- ),
8085
- /* @__PURE__ */ jsx(
8086
- Icon$2,
8087
- {
8088
- "aria-hidden": true,
8089
- svg: SvgCheck,
8090
- inherit: true,
8091
- className: styles$1["Icon"],
8092
- style: {
8093
- opacity: itemToKey(selectedItem) === itemToKey(item) ? 1 : 0
8094
- }
8095
- }
8096
- )
8097
- ]
8098
- }
8099
- );
8100
- }
8101
- };
8102
- const ComboboxLegacyItemAddNew = function({
8103
- onSelection,
8104
- ...props
8105
- }) {
8106
- const { items, setHasAddNew, hasExactMatch, setOnSelectItemAddNew } = useComboboxLegacy();
8107
- useEffect(() => {
8108
- setHasAddNew?.(true);
8109
- return () => {
8110
- setHasAddNew?.(false);
8111
- };
8112
- }, []);
8113
- useEffect(() => {
8114
- setOnSelectItemAddNew?.(() => onSelection);
8115
- return () => {
8116
- setOnSelectItemAddNew?.(void 0);
8117
- };
8118
- }, [setOnSelectItemAddNew, onSelection]);
8119
- const firstRenderRef = useRef(true);
8120
- useEffect(() => {
8121
- if (firstRenderRef.current === true) {
8122
- firstRenderRef.current = false;
8123
- }
8124
- }, []);
8125
- return !hasExactMatch && !firstRenderRef.current ? /* @__PURE__ */ jsx(
8126
- ComboboxLegacyItem,
8127
- {
8128
- ...props,
8129
- item: ADD_NEW,
8130
- index: items.length
8131
- }
8132
- ) : null;
8133
- };
8134
-
8135
- const ComboboxLegacyEmpty = function({
8136
- children
8137
- }) {
8138
- const { items, setHasEmpty } = useComboboxLegacy();
8139
- useEffect(() => {
8140
- setHasEmpty?.(true);
8141
- return () => {
8142
- setHasEmpty?.(false);
8143
- };
8144
- });
8145
- return !items.length ? children : null;
8146
- };
8147
-
8148
- const ComboboxEmptyElement = function({
8149
- children
8150
- }) {
8151
- const { items, setHasEmpty } = useCombobox$1();
8152
- useEffect(() => {
8153
- setHasEmpty?.(true);
8154
- return () => {
8155
- setHasEmpty?.(false);
8156
- };
8157
- });
8158
- if (!supportsPopover()) return;
8159
- return !items.length ? children : null;
8160
- };
8161
- const ComboboxEmpty = function({
8162
- children
8163
- }) {
8164
- if (!supportsPopover())
8165
- return /* @__PURE__ */ jsx(ComboboxLegacyEmpty, { children });
8166
- return /* @__PURE__ */ jsx(ComboboxEmptyElement, { children });
8167
- };
8168
-
8169
- const item = "_item_11q9l_22";
8170
- const group = "_group_11q9l_35";
8171
- const combobox = "_combobox_11q9l_50";
8172
- const listview = "_listview_11q9l_59";
8173
- const empty = "_empty_11q9l_63";
8174
- const Icon = "_Icon_11q9l_117";
8175
- const scrolled = "_scrolled_11q9l_165";
8176
- const styles = {
8177
- item: item,
8178
- group: group,
8179
- combobox: combobox,
8180
- "popover-content": "_popover-content_11q9l_54",
8181
- listview: listview,
8182
- empty: empty,
8183
- "group-title": "_group-title_11q9l_75",
8184
- "group-list": "_group-list_11q9l_81",
8185
- Icon: Icon,
8186
- "scroll-sentinel": "_scroll-sentinel_11q9l_120",
8187
- "listview-option": "_listview-option_11q9l_129",
8188
- "select-all": "_select-all_11q9l_159",
8189
- scrolled: scrolled
8190
- };
8191
-
8192
- function useGroups({
8193
- items,
8194
- groupBy,
8195
- groupToString,
8196
- groupSorter = (a, b) => `${a}`.localeCompare(`${b}`)
8197
- }) {
8198
- const { groups, orderedItems } = useMemo(() => {
8199
- if (!groupBy) return { groups: [], orderedItems: items };
8200
- const groupsSansItems = [];
8201
- const groupedItems = {};
8202
- items.forEach((item) => {
8203
- const groupKey = item[groupBy];
8204
- if (!groupedItems[groupKey]) {
8205
- groupedItems[groupKey] = [];
8206
- }
8207
- groupedItems[groupKey].push(item);
8208
- });
8209
- Object.keys(groupedItems).forEach((key) => {
8210
- groupsSansItems.push({
8211
- key,
8212
- label: groupToString ? groupToString?.(key) : key
8213
- });
8214
- });
8215
- groupsSansItems.sort((a, b) => groupSorter(a.key, b.key));
8216
- const orderedItems2 = [];
8217
- const groups2 = groupsSansItems.map((group) => ({
8218
- ...group,
8219
- items: groupedItems[group.key].map((item) => {
8220
- orderedItems2.push(item);
8221
- return item;
8222
- })
8223
- }));
8224
- return { groups: groups2, orderedItems: orderedItems2 };
8225
- }, [groupBy, groupSorter, groupToString, items]);
8226
- return { groups, orderedItems };
8227
- }
8228
-
8229
- const SelectSingle = function(props) {
8230
- const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
8231
- const {
8232
- className,
8233
- style,
8234
- children,
8235
- open,
8236
- disabled,
8237
- readOnly,
8238
- items,
8239
- itemToString: itemToStringProp,
8240
- itemToKey: itemToKeyProp,
8241
- onChange,
8242
- disableClearSelection = false,
8243
- disableCloseOnClickOutside = false,
8244
- disableMatchReferenceWidth = false,
8245
- disableCloseOnSelectItem = false,
8246
- loading = false,
8247
- minPopoverHeight,
8248
- root,
8249
- environment: environmentProp,
8250
- groupBy,
8251
- groupToString,
8252
- ...rest
8253
- } = componentProps;
8254
- const ComboboxClassNames = cx(styles["combobox"], className);
8255
- const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
8256
- const [hasEmpty, setHasEmpty] = useState(false);
8257
- const [disabledItems, setDisabledItems] = useState([]);
8258
- const [forceCloseOnSelectItems, setForceCloseOnSelectItems] = useState([]);
8259
- const [, setForceClearInputValueOnSelectItems] = useState([]);
8260
- const [isReadOnly, setIsReadOnly] = useState(readOnly);
8261
- const [isDisabled, setIsDisabled] = useState(disabled);
8262
- const referenceRef = useRef(null);
8263
- const contentRef = useRef(null);
8264
- const listRef = useRef(null);
8265
- const handleOutsidePress = (_e) => {
8266
- if (disableCloseOnClickOutside) return;
8267
- closeMenu();
8268
- };
8269
- const { ref: wrapperDivRef, environment } = useDownshiftEnvironment$1();
8270
- const itemToString = itemToStringProp ?? defaultItemToString$1;
8271
- const itemToKey = itemToKeyProp ?? defaultItemToKey$1;
8272
- const { groups, orderedItems } = useGroups({
8273
- items,
8274
- groupBy,
8275
- groupToString
8276
- });
8277
- const {
8278
- isOpen,
8279
- getLabelProps,
8280
- getToggleButtonProps,
8281
- getMenuProps,
8282
- getItemProps,
8283
- highlightedIndex,
8284
- selectedItem,
8285
- selectItem,
8286
- inputValue,
8287
- closeMenu
8288
- } = useSelect({
8289
- ...rest,
8290
- items: orderedItems,
8291
- itemToString,
8292
- itemToKey,
8293
- isOpen: open,
8294
- initialIsOpen: open,
8295
- environment: environmentProp ?? environment,
8296
- // NOTE: Reducer needs to be pure, side-effects should be in event handlers
8297
- stateReducer(state, { type, changes }) {
8298
- switch (type) {
8299
- case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
8300
- case useSelect.stateChangeTypes.ItemClick:
8301
- return {
8302
- ...changes,
8303
- isOpen: open != null ? open : forceCloseOnSelectItems.includes(changes.selectedItem) ? false : disableCloseOnSelectItem ? true : changes.isOpen,
8304
- highlightedIndex: disableCloseOnSelectItem ? state.highlightedIndex : changes.highlightedIndex
8305
- };
8306
- default:
8307
- return changes;
8308
- }
8309
- },
8310
- onSelectedItemChange(changes) {
8311
- const { selectedItem: selectedItem2 } = changes;
8312
- if (onChange != null)
8313
- onChange(selectedItem2 != null ? selectedItem2 : null);
8314
- },
8315
- isItemDisabled(item) {
8316
- if (isDisabled || isReadOnly) {
8317
- return !!isDisabled || !!isReadOnly;
8318
- }
8319
- if (item && item instanceof Object && "disabled" in item && item.disabled) {
8320
- return true;
8321
- }
8322
- if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
8323
- return true;
8324
- }
8325
- if (disabledItems.includes(item)) {
8326
- return true;
8327
- }
8328
- return false;
8329
- }
8330
- });
8331
- useEffect(() => {
8332
- setIsDisabled(disabled);
8333
- }, [disabled]);
8334
- useEffect(() => {
8335
- setIsReadOnly(readOnly);
8336
- }, [readOnly]);
8337
- return /* @__PURE__ */ jsx(
8338
- ComboboxContext.Provider,
8339
- {
8340
- value: {
8341
- multiple: false,
8342
- select: true,
8343
- disableClearSelection,
8344
- items: orderedItems,
8345
- itemToString,
8346
- itemToKey,
8347
- isOpen,
8348
- getLabelProps,
8349
- getToggleButtonProps,
8350
- getMenuProps,
8351
- getItemProps,
8352
- highlightedIndex,
8353
- selectedItem,
8354
- selectedItems: [],
8355
- disabledItems,
8356
- setDisabledItems,
8357
- setForceCloseOnSelectItems,
8358
- setForceClearInputValueOnSelectItems,
8359
- selectItem,
8360
- inputValue,
8361
- isDisabled,
8362
- isReadOnly,
8363
- setIsReadOnly,
8364
- setIsDisabled,
8365
- hasDisabledPopover,
8366
- setHasDisabledPopover,
8367
- hasEmpty,
8368
- setHasEmpty,
8369
- loading,
8370
- referenceRef,
8371
- contentRef,
8372
- closeMenu,
8373
- groups,
8374
- groupBy,
8375
- groupToString,
8376
- listRef
8377
- },
8378
- children: /* @__PURE__ */ jsx(
8379
- "div",
8380
- {
8381
- className: ComboboxClassNames,
8382
- "data-anv": "combobox",
8383
- style: { ...style, ...layoutStyles },
8384
- ref: wrapperDivRef,
8385
- children: /* @__PURE__ */ jsx(
8386
- Popover,
8387
- {
8388
- open: isOpen,
8389
- noPadding: true,
8390
- disableCaret: true,
8391
- fitScreen: true,
8392
- disableFlipFallback: true,
8393
- placement: "bottom-start",
8394
- matchReferenceWidth: !disableMatchReferenceWidth,
8395
- disableCloseOnClickOutside,
8396
- onOutsidePress: handleOutsidePress,
8397
- minHeight: minPopoverHeight,
8398
- children
8399
- }
8400
- )
8401
- }
8402
- )
8403
- }
8404
- );
8405
- };
8406
- const SelectMultiple = function(props) {
8407
- const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
8408
- const {
8409
- className,
8410
- style,
8411
- children,
8412
- open,
8413
- items,
8414
- itemToString: itemToStringProp,
8415
- itemToKey: itemToKeyProp,
8416
- onChange,
8417
- onSelectedItemsChange,
8418
- onStateChange,
8419
- disableCloseOnClickOutside = false,
8420
- disableMatchReferenceWidth = false,
8421
- disableCloseOnSelectItem = false,
8422
- loading = false,
8423
- minPopoverHeight,
8424
- root,
8425
- disabled,
8426
- readOnly,
8427
- stateReducer: _,
8428
- initialSelectedItems,
8429
- initialActiveIndex,
8430
- defaultSelectedItems,
8431
- defaultActiveIndex,
8432
- activeIndex: activeIndexProp,
8433
- selectedItems: selectedItemsProp,
8434
- environment: environmentProp,
8435
- groupBy,
8436
- groupToString,
8437
- selectAll,
8438
- ...rest
8439
- } = componentProps;
8440
- const ComboboxClassNames = cx(styles["combobox"], className);
8441
- const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
8442
- const [hasEmpty, setHasEmpty] = useState(false);
8443
- const [disabledItems, setDisabledItems] = useState([]);
8444
- const [forceCloseOnSelectItems, setForceCloseOnSelectItems] = useState([]);
8445
- const [, setForceClearInputValueOnSelectItems] = useState([]);
8446
- const [isReadOnly, setIsReadOnly] = useState(readOnly);
8447
- const [isDisabled, setIsDisabled] = useState(disabled);
8448
- const referenceRef = useRef(null);
8449
- const contentRef = useRef(null);
8450
- const listRef = useRef(null);
8451
- const handleOutsidePress = (_e) => {
8452
- if (disableCloseOnClickOutside) return;
8453
- closeMenu();
8454
- };
8455
- const { ref: wrapperDivRef, environment } = useDownshiftEnvironment$1();
8456
- const itemToString = itemToStringProp ?? defaultItemToString$1;
8457
- const itemToKey = itemToKeyProp ?? defaultItemToKey$1;
8458
- const { groups, orderedItems: orderedItemsBase } = useGroups({
8459
- items,
8460
- groupBy,
8461
- groupToString
8462
- });
8463
- const orderedItems = selectAll ? [SELECT_ALL, ...orderedItemsBase] : orderedItemsBase;
8464
- const {
8465
- getSelectedItemProps,
8466
- getDropdownProps,
8467
- reset,
8468
- selectedItems,
8469
- addSelectedItem,
8470
- removeSelectedItem,
8471
- setSelectedItems
8472
- } = useMultipleSelection({
8473
- itemToKey,
8474
- initialSelectedItems,
8475
- initialActiveIndex,
8476
- defaultSelectedItems,
8477
- defaultActiveIndex,
8478
- activeIndex: activeIndexProp,
8479
- selectedItems: selectedItemsProp,
8480
- environment: environmentProp ?? environment,
8481
- stateReducer(state, { type, changes }) {
8482
- switch (type) {
8483
- // the Chip itself will handle "Backspace" and "Delete"
8484
- // just return previous state
8485
- case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace:
8486
- case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownDelete:
8487
- return state;
8488
- case useMultipleSelection.stateChangeTypes.FunctionRemoveSelectedItem:
8489
- return { ...changes, activeIndex: -1 };
8490
- case useMultipleSelection.stateChangeTypes.FunctionReset:
8491
- return { ...changes, selectedItems: [] };
8492
- default:
8493
- return changes;
8494
- }
8495
- },
8496
- onStateChange,
8497
- onSelectedItemsChange(changes) {
8498
- const { selectedItems: selectedItems2 } = changes;
8499
- if (onChange != null) onChange(selectedItems2);
8500
- if (onSelectedItemsChange != null) onSelectedItemsChange(changes);
8501
- }
8502
- });
8503
- const {
8504
- isOpen,
8505
- getLabelProps,
8506
- getToggleButtonProps,
8507
- getMenuProps,
8508
- getItemProps,
8509
- highlightedIndex,
8510
- selectedItem,
8511
- selectItem,
8512
- inputValue,
8513
- closeMenu
8514
- } = useSelect({
8515
- ...rest,
8516
- items: orderedItems,
8517
- itemToString,
8518
- itemToKey,
8519
- selectedItem: null,
8520
- isOpen: open,
8521
- initialIsOpen: open,
8522
- environment: environmentProp ?? environment,
8523
- // NOTE: Reducer needs to be pure, side-effects should be in event handlers
8524
- stateReducer(state, { type, changes }) {
8525
- switch (type) {
8526
- case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
8527
- case useSelect.stateChangeTypes.ItemClick:
8528
- return {
8529
- ...changes,
8530
- isOpen: open != null ? open : forceCloseOnSelectItems.includes(changes.selectedItem) ? false : disableCloseOnSelectItem ? true : changes.isOpen,
8531
- highlightedIndex: disableCloseOnSelectItem ? state.highlightedIndex : changes.highlightedIndex
8532
- };
8533
- default:
8534
- return changes;
8535
- }
8536
- },
8537
- onStateChange(changes) {
8538
- const { type, selectedItem: newSelectedItem } = changes;
8539
- switch (type) {
8540
- case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
8541
- case useSelect.stateChangeTypes.ItemClick:
8542
- case useSelect.stateChangeTypes.ToggleButtonBlur:
8543
- if (changes.selectedItem === SELECT_ALL) {
8544
- selectAll?.onSelection();
8545
- return {
8546
- ...changes,
8547
- selectedItem: null
8548
- };
8549
- }
8550
- if (newSelectedItem != null) {
8551
- const itemAlreadySelected = selectedItems.some(
8552
- (item) => itemToKey(item) === itemToKey(newSelectedItem)
8553
- );
8554
- if (itemAlreadySelected) {
8555
- removeSelectedItem(newSelectedItem);
8556
- } else {
8557
- addSelectedItem(newSelectedItem);
8558
- }
8559
- }
8560
- break;
8561
- }
8562
- onStateChange?.(changes);
8563
- },
8564
- isItemDisabled(item) {
8565
- if (isDisabled || isReadOnly) {
8566
- return !!isDisabled || !!isReadOnly;
8567
- }
8568
- if (item && item instanceof Object && "disabled" in item && item.disabled) {
8569
- return true;
8570
- }
8571
- if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
8572
- return true;
8573
- }
8574
- if (disabledItems.includes(item)) {
8575
- return true;
8576
- }
8577
- return false;
8578
- },
8579
- onHighlightedIndexChange(changes) {
8580
- if (selectAll && changes.highlightedIndex === 0 && [
8581
- useSelect.stateChangeTypes.ToggleButtonKeyDownArrowDown,
8582
- useSelect.stateChangeTypes.ToggleButtonKeyDownArrowUp,
8583
- useSelect.stateChangeTypes.ToggleButtonKeyDownPageDown,
8584
- useSelect.stateChangeTypes.ToggleButtonKeyDownPageUp,
8585
- useSelect.stateChangeTypes.ToggleButtonKeyDownHome,
8586
- useSelect.stateChangeTypes.ToggleButtonKeyDownEnd
8587
- ].includes(changes.type) && listRef.current) {
8588
- const scrollParent = getScrollParent(listRef.current);
8589
- if (scrollParent) {
8590
- scrollParent.scrollTop = 0;
8591
- }
8592
- }
8593
- }
8594
- });
8595
- useEffect(() => {
8596
- setIsDisabled(disabled);
8597
- }, [disabled]);
8598
- useEffect(() => {
8599
- setIsReadOnly(readOnly);
8600
- }, [readOnly]);
8601
- return /* @__PURE__ */ jsx(
8602
- ComboboxContext.Provider,
8603
- {
8604
- value: {
8605
- multiple: true,
8606
- select: true,
8607
- items: orderedItems,
8608
- itemToString,
8609
- itemToKey,
8610
- isOpen,
8611
- getLabelProps,
8612
- getToggleButtonProps,
8613
- getMenuProps,
8614
- getItemProps,
8615
- highlightedIndex,
8616
- selectedItem,
8617
- selectedItems,
8618
- disabledItems,
8619
- setDisabledItems,
8620
- setForceCloseOnSelectItems,
8621
- setForceClearInputValueOnSelectItems,
8622
- getSelectedItemProps,
8623
- getDropdownProps,
8624
- reset,
8625
- addSelectedItem,
8626
- removeSelectedItem,
8627
- setSelectedItems,
8628
- selectItem,
8629
- inputValue,
8630
- isDisabled,
8631
- isReadOnly,
8632
- setIsReadOnly,
8633
- setIsDisabled,
8634
- hasDisabledPopover,
8635
- setHasDisabledPopover,
8636
- hasEmpty,
8637
- setHasEmpty,
8638
- loading,
8639
- referenceRef,
8640
- contentRef,
8641
- closeMenu,
8642
- groupBy,
8643
- groupToString,
8644
- groups,
8645
- listRef,
8646
- selectAll
8647
- },
8648
- children: /* @__PURE__ */ jsx(
8649
- "div",
8650
- {
8651
- className: ComboboxClassNames,
8652
- "data-anv": "combobox",
8653
- style: { ...style, ...layoutStyles },
8654
- ref: wrapperDivRef,
8655
- children: /* @__PURE__ */ jsx(
8656
- Popover,
8657
- {
8658
- open: !isDisabled && isOpen,
8659
- noPadding: true,
8660
- disableCaret: true,
8661
- fitScreen: true,
8662
- disableFlipFallback: true,
8663
- placement: "bottom-start",
8664
- matchReferenceWidth: !disableMatchReferenceWidth,
8665
- disableCloseOnClickOutside,
8666
- onOutsidePress: handleOutsidePress,
8667
- minHeight: minPopoverHeight,
8668
- children
8669
- }
8670
- )
8671
- }
8672
- )
8673
- }
8674
- );
8675
- };
8676
- const ComboboxSelect = function(props) {
8677
- if (!supportsPopover()) {
8678
- if (isMultiple(props)) {
8679
- return /* @__PURE__ */ jsx(SelectLegacyMultiple, { ...props });
8680
- } else {
8681
- return /* @__PURE__ */ jsx(SelectLegacySingle, { ...props });
8682
- }
8683
- }
8684
- if (isMultiple(props)) {
8685
- return /* @__PURE__ */ jsx(SelectMultiple, { ...props });
8686
- } else {
8687
- return /* @__PURE__ */ jsx(SelectSingle, { ...props });
8688
- }
8689
- };
8690
-
8691
- const ComboboxItemVisual = forwardRef(
8692
- ({
8693
- children,
8694
- disabled,
8695
- checked,
8696
- hideCheckbox,
8697
- rootDivProps,
8698
- flexProps
8699
- }, ref) => {
8700
- return /* @__PURE__ */ jsxs(
8701
- "div",
8702
- {
8703
- ref,
8704
- "data-anv": "combobox-item",
8705
- ...rootDivProps,
8706
- className: cx(
8707
- styles["listview-option"],
8708
- listViewStyles["listview-option"],
8709
- rootDivProps.className
8710
- ),
8711
- children: [
8712
- !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: [
8713
- /* @__PURE__ */ jsx(
8714
- "input",
8715
- {
8716
- type: "checkbox",
8717
- checked,
8718
- "aria-checked": checked,
8719
- "aria-label": "Select",
8720
- readOnly: true,
8721
- tabIndex: -1,
8722
- ...disabled ? { disabled: true } : {}
8723
- }
8724
- ),
8725
- /* @__PURE__ */ jsxs("span", { className: checkboxStyles["icon-wrapper"], "aria-hidden": true, children: [
8726
- /* @__PURE__ */ jsx(
8727
- Icon$2,
8728
- {
8729
- size: "large",
8730
- svg: SvgIndeterminateCheckBox,
8731
- className: checkboxStyles["icon-indeterminate"]
8732
- }
8733
- ),
8734
- /* @__PURE__ */ jsx(
8735
- Icon$2,
8736
- {
8737
- size: "large",
8738
- svg: SvgCheckBox,
8739
- className: checkboxStyles["icon-checked"]
8740
- }
8741
- ),
8742
- /* @__PURE__ */ jsx(
8743
- Icon$2,
8744
- {
8745
- size: "large",
8746
- svg: SvgCheckBoxOutlineBlank,
8747
- className: checkboxStyles["icon-unchecked"]
8748
- }
8749
- )
8750
- ] }),
8751
- /* @__PURE__ */ jsx("span", { "aria-hidden": true })
8752
- ] }) }) }) : null,
8753
- /* @__PURE__ */ jsx(Flex, { grow: 1, shrink: 1, ...flexProps, children })
8754
- ]
8755
- }
8756
- );
8757
- }
8758
- );
8759
- ComboboxItemVisual.displayName = "ComboboxItemVisual";
8760
-
8761
- const ComboboxSelectAll = function({ className }) {
8762
- const {
8763
- getItemProps,
8764
- setForceCloseOnSelectItems,
8765
- highlightedIndex,
8766
- items,
8767
- selectAll
8768
- } = useCombobox$1();
8769
- const item = SELECT_ALL;
8770
- const index = items.indexOf(item);
8771
- const ref = useRef(null);
8772
- useEffect(() => {
8773
- return () => {
8774
- setForceCloseOnSelectItems((forceCloseOnSelectItems) => {
8775
- if (forceCloseOnSelectItems.includes(item)) {
8776
- return forceCloseOnSelectItems.filter(
8777
- (prevItem) => prevItem !== item
8778
- );
8779
- } else {
8780
- return forceCloseOnSelectItems;
8781
- }
8782
- });
8783
- };
8784
- }, [item, setForceCloseOnSelectItems]);
8785
- return /* @__PURE__ */ jsx(
8786
- ComboboxItemVisual,
8787
- {
8788
- ref,
8789
- rootDivProps: getItemProps({
8790
- item: SELECT_ALL,
8791
- index,
8792
- "aria-selected": highlightedIndex === index,
8793
- className: cx(styles["select-all"], className)
8794
- }),
8795
- hideCheckbox: false,
8796
- disabled: false,
8797
- checked: !!selectAll?.isChecked,
8798
- children: selectAll?.label
8799
- },
8800
- "select-all"
8801
- );
8802
- };
8803
-
8804
- const ComboboxGroupContext = createContext(null);
8805
- const useComboboxGroupContext = () => useContext(ComboboxGroupContext);
8806
-
8807
- const ComboboxGroupList = function({
8808
- children,
8809
- ...rest
8810
- }) {
8811
- const {
8812
- getMenuProps,
8813
- multiple,
8814
- items,
8815
- hasAddNew = false,
8816
- hasEmpty,
8817
- loading,
8818
- selectAll,
8819
- listRef
8820
- } = useCombobox$1();
8821
- const scrollSentinelRef = useRef(null);
8822
- const [isScrolled, setIsScrolled] = useState(false);
8823
- const { key: groupKey } = useComboboxGroupContext() ?? {};
8824
- const isAGroup = !!groupKey;
8825
- useEffect(() => {
8826
- if (!scrollSentinelRef.current) return;
8827
- const intersectionObserver = new IntersectionObserver(
8828
- (entries) => {
8829
- entries.forEach((entry) => {
8830
- if (!entry.isIntersecting) {
8831
- setIsScrolled(true);
8832
- } else {
8833
- setIsScrolled(false);
8834
- }
8835
- });
8836
- },
8837
- { threshold: 0 }
8838
- );
8839
- intersectionObserver.observe(scrollSentinelRef.current);
8840
- return () => {
8841
- intersectionObserver.disconnect();
8842
- };
8843
- }, [scrollSentinelRef, setIsScrolled]);
8844
- if (!supportsPopover())
8845
- return /* @__PURE__ */ jsx(ComboboxLegacyList, { ...rest, children });
8846
- if (isAGroup) {
8847
- return /* @__PURE__ */ jsx(Fragment, { children });
8848
- }
8849
- if (multiple) {
8850
- return /* @__PURE__ */ jsxs(Fragment, { children: [
8851
- /* @__PURE__ */ jsxs(
8852
- "ul",
8853
- {
8854
- ...getMenuProps(rest),
8855
- ref: listRef,
8856
- "data-anv": "combobox-list",
8857
- className: cx(styles["listview"], listViewStyles["listview"], {
8858
- [styles.scrolled]: isScrolled
8859
- }),
8860
- style: {
8861
- display: items.length || hasAddNew ? void 0 : "none"
8862
- },
8863
- children: [
8864
- /* @__PURE__ */ jsx("div", { ref: scrollSentinelRef, className: styles["scroll-sentinel"] }),
8865
- !loading && selectAll && /* @__PURE__ */ jsxs(Fragment, { children: [
8866
- /* @__PURE__ */ jsx(ComboboxSelectAll, {}),
8867
- /* @__PURE__ */ jsx(Divider, {})
8868
- ] }),
8869
- children
8870
- ]
8871
- }
8872
- ),
8873
- 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
8874
- ] });
8875
- } else {
8876
- return /* @__PURE__ */ jsxs(Fragment, { children: [
8877
- /* @__PURE__ */ jsx(
8878
- "ul",
8879
- {
8880
- ...getMenuProps(rest),
8881
- ref: listRef,
8882
- "data-anv": "combobox-list",
8883
- className: listboxStyles["listbox"],
8884
- style: {
8885
- display: items.length || hasAddNew ? void 0 : "none"
8886
- },
8887
- children
8888
- }
8889
- ),
8890
- 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
8891
- ] });
8892
- }
8893
- };
8894
-
8895
- const ComboboxGroupProvider = ComboboxGroupContext.Provider;
8896
-
8897
- const ComboboxContentElement = function({
8898
- children,
8899
- className,
8900
- disablePopover = false,
8901
- ...rest
8902
- }) {
8903
- const {
8904
- items,
8905
- itemToKey,
8906
- inputValue,
8907
- selectedItem,
8908
- selectedItems,
8909
- setHasDisabledPopover,
8910
- getMenuProps,
8911
- getItemProps,
8912
- isDisabled,
8913
- isReadOnly,
8914
- contentRef,
8915
- closeMenu,
8916
- groups
8917
- } = useCombobox$1();
8918
- const ComboboxPopoverContentClassNames = cx(
8919
- styles["popover-content"],
8920
- className
8921
- );
8922
- useEffect(() => {
8923
- setHasDisabledPopover(disablePopover);
8924
- return () => {
8925
- setHasDisabledPopover(false);
8926
- };
8927
- }, [disablePopover, setHasDisabledPopover]);
8928
- const context = usePopoverContext();
8929
- const handleBlur = (_e) => {
8930
- if (context?.controlled) return;
8931
- context?.popover.close?.(closeMenu);
8932
- };
8933
- const resolveChildren = (groupItems) => children?.({
8934
- items: groupItems,
8935
- inputValue,
8936
- selectedItem,
8937
- getMenuProps,
8938
- getItemProps,
8939
- listProps: {
8940
- ...getMenuProps({}, { suppressRefError: true }),
8941
- style: {
8942
- display: groupItems.length ? void 0 : "none",
8943
- overflow: "auto"
8944
- }
8945
- },
8946
- options: groupItems.map((item, index) => ({
8947
- optionProps: {
8948
- ...getItemProps({
8949
- item,
8950
- index
8951
- }),
8952
- tabIndex: disablePopover ? -1 : void 0,
8953
- selected: itemToKey(selectedItem) === itemToKey(item) || selectedItems.some(
8954
- (selectedItem2) => itemToKey(selectedItem2) === itemToKey(item)
8955
- ),
8956
- disabled: !!isDisabled || !!isReadOnly
8957
- // also see "isItemDisabled" function
8958
- },
8959
- item,
8960
- index
8961
- }))
8962
- });
8963
- const id = useId();
8964
- const filterAlreadyRenderedItems = (items2) => {
8965
- return items2.filter((item) => item !== ADD_NEW$1 && item !== SELECT_ALL);
8966
- };
8967
- return disablePopover ? /* @__PURE__ */ jsx(
8968
- "div",
8969
- {
8970
- ...rest,
8971
- className: ComboboxPopoverContentClassNames,
8972
- ref: contentRef,
8973
- onBlur: handleBlur,
8974
- children: groups?.length ? /* @__PURE__ */ jsx(ComboboxGroupList, { children: groups.map((group, i) => /* @__PURE__ */ jsxs(ComboboxGroupProvider, { value: group, children: [
8975
- i !== 0 && /* @__PURE__ */ jsx(Divider, {}),
8976
- /* @__PURE__ */ jsxs(
8977
- "li",
8978
- {
8979
- "aria-labelledby": `${id}-group-${group.key}`,
8980
- className: cx(styles["group"], listboxStyles["listbox"]),
8981
- "data-anv": "combobox-group",
8982
- role: "group",
8983
- children: [
8984
- group.label != null ? /* @__PURE__ */ jsx(
8985
- Text,
8986
- {
8987
- className: styles["group-title"],
8988
- id: `${id}-group-${group.key}`,
8989
- variant: "eyebrow",
8990
- children: group.label
8991
- }
8992
- ) : null,
8993
- /* @__PURE__ */ jsx("ul", { className: styles["group-list"], children: resolveChildren(filterAlreadyRenderedItems(group.items)) })
8994
- ]
8995
- }
8996
- )
8997
- ] }, group.key)) }) : resolveChildren(filterAlreadyRenderedItems(items))
8998
- }
8999
- ) : /* @__PURE__ */ jsx(
9000
- Popover.Content,
9001
- {
9002
- "data-anv": "combobox-content",
9003
- ...rest,
9004
- className: ComboboxPopoverContentClassNames,
9005
- ref: getMenuProps({ ref: contentRef }, { suppressRefError: true }).ref,
9006
- tabIndex: -1,
9007
- onBlur: handleBlur,
9008
- children: groups?.length ? /* @__PURE__ */ jsx(ComboboxGroupList, { children: groups.map((group, i) => /* @__PURE__ */ jsxs(ComboboxGroupProvider, { value: group, children: [
9009
- i !== 0 && /* @__PURE__ */ jsx(Divider, {}),
9010
- /* @__PURE__ */ jsxs(
9011
- "li",
9012
- {
9013
- "aria-labelledby": `${id}-group-${group.key}`,
9014
- className: cx(styles["group"], listboxStyles["listbox"]),
9015
- "data-anv": "combobox-group",
9016
- role: "group",
9017
- children: [
9018
- group.label != null ? /* @__PURE__ */ jsx(
9019
- Text,
9020
- {
9021
- className: styles["group-title"],
9022
- id: `${id}-group-${group.key}`,
9023
- variant: "eyebrow",
9024
- children: group.label
9025
- }
9026
- ) : null,
9027
- /* @__PURE__ */ jsx("ul", { className: styles["group-list"], children: resolveChildren(filterAlreadyRenderedItems(group.items)) })
9028
- ]
9029
- }
9030
- )
9031
- ] }, group.key)) }) : resolveChildren(filterAlreadyRenderedItems(items))
9032
- }
9033
- );
9034
- };
9035
- const ComboboxContent = function({
9036
- children,
9037
- className,
9038
- disablePopover = false,
9039
- ...rest
9040
- }) {
9041
- if (!supportsPopover())
9042
- return /* @__PURE__ */ jsx(
9043
- ComboboxLegacyContent,
9044
- {
9045
- disablePopover,
9046
- className,
9047
- ...rest,
9048
- children
9049
- }
9050
- );
9051
- return /* @__PURE__ */ jsx(
9052
- ComboboxContentElement,
9053
- {
9054
- className,
9055
- disablePopover,
9056
- ...rest,
9057
- children
9058
- }
9059
- );
9060
- };
9061
-
9062
- const ComboboxTrigger = function(props) {
9063
- const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
9064
- const {
9065
- // variant: variantProp = "combobox",
9066
- className,
9067
- style,
9068
- label,
9069
- size,
9070
- error,
9071
- hint,
9072
- description,
9073
- required,
9074
- moreInfo,
9075
- openMoreInfo,
9076
- prefix,
9077
- suffix,
9078
- maxRows,
9079
- selectedItemProps = () => ({}),
9080
- id,
9081
- placeholder,
9082
- disabled,
9083
- readOnly,
9084
- onClear,
9085
- ...rest
9086
- } = componentProps;
9087
- const {
9088
- select,
9089
- disableClearSelection,
9090
- itemToString,
9091
- getLabelProps,
9092
- getInputProps,
9093
- getToggleButtonProps,
9094
- getMenuProps,
9095
- selectedItem,
9096
- selectedItems,
9097
- getSelectedItemProps,
9098
- getDropdownProps,
9099
- reset,
9100
- removeSelectedItem,
9101
- selectItem,
9102
- inputValue,
9103
- isDisabled,
9104
- isReadOnly,
9105
- referenceRef,
9106
- closeMenu,
9107
- setIsDisabled,
9108
- setIsReadOnly
9109
- } = useCombobox$1();
9110
- const context = usePopoverContext();
9111
- useLayoutEffect(() => {
9112
- if (typeof disabled === "undefined") return;
9113
- setIsDisabled(disabled);
9114
- }, [disabled, setIsDisabled]);
9115
- useLayoutEffect(() => {
9116
- if (typeof readOnly === "undefined") return;
9117
- setIsReadOnly(readOnly);
9118
- }, [readOnly, setIsReadOnly]);
9119
- const handleBlur = (e) => {
9120
- const target = e.relatedTarget ?? e.target;
9121
- const focusedOnReference = context?.invoker.ref.current && context?.invoker.ref.current.contains(target);
9122
- const focusedOnContent = context?.popover.ref.current && context?.popover.ref.current.contains(target) || context?.popover.element?.contains(target);
9123
- if (!focusedOnReference && !focusedOnContent || !e.relatedTarget) {
9124
- closeMenu();
9125
- }
9126
- };
9127
- const labelProps = getLabelProps({
9128
- required,
9129
- moreInfo,
9130
- openMoreInfo
9131
- });
9132
- const inputRef = useRef(null);
9133
- const inputWrapperProps = {
9134
- ...select ? {
9135
- ...getToggleButtonProps({
9136
- disabled: isDisabled,
9137
- readOnly: isReadOnly,
9138
- id,
9139
- ref: context?.invoker.ref
9140
- })
9141
- } : {
9142
- onClick: () => inputRef.current?.focus(),
9143
- ref: context?.invoker.ref
9144
- }
9145
- };
9146
- const toggleButtonProps = select ? {} : getToggleButtonProps();
9147
- const handleClearButtonClick = (_e) => {
9148
- if (onClear) {
9149
- onClear();
9150
- } else {
9151
- if (reset != null) {
9152
- reset();
9153
- } else {
9154
- selectItem(null);
9155
- }
9156
- }
9157
- };
9158
- const styleCombined = {
9159
- ...style,
9160
- ...layoutStyles
9161
- };
9162
- return /* @__PURE__ */ jsx(
9163
- SelectTriggerBase,
9164
- {
9165
- "data-anv": select ? "combobox-select-trigger" : "combobox-search-field",
9166
- className,
9167
- style: styleCombined,
9168
- label,
9169
- size,
9170
- error,
9171
- hint,
9172
- description,
9173
- prefix,
9174
- suffix,
9175
- maxRows,
9176
- selectedItemProps,
9177
- placeholder,
9178
- labelProps,
9179
- inputWrapperProps,
9180
- toggleButtonProps,
9181
- itemToString,
9182
- removeSelectedItem,
9183
- variant: select ? "select" : "combobox",
9184
- disableClearSelection,
9185
- selectedItem,
9186
- selectedItems,
9187
- inputValue,
9188
- disabled: isDisabled,
9189
- readOnly: isReadOnly,
9190
- referenceRef,
9191
- onBlur: handleBlur,
9192
- onClearButtonClick: handleClearButtonClick,
9193
- chipProps: (item, index) => {
9194
- if (getSelectedItemProps != null) {
9195
- const { onClick: _, ...chipProps } = getSelectedItemProps({
9196
- selectedItem: item,
9197
- index
9198
- });
9199
- return chipProps;
9200
- }
9201
- return {};
9202
- },
9203
- inputProps: select ? {
9204
- ...getDropdownProps != null ? getDropdownProps({
9205
- required,
9206
- preventKeyAction: false
9207
- }) : {
9208
- required
9209
- },
9210
- ["aria-expanded"]: context?.invoker["aria-expanded"],
9211
- ["aria-details"]: getMenuProps().id,
9212
- ["aria-haspopup"]: context?.invoker["aria-haspopup"]
9213
- } : {
9214
- ["aria-expanded"]: context?.invoker["aria-expanded"],
9215
- ["aria-details"]: getMenuProps().id,
9216
- ["aria-haspopup"]: context?.invoker["aria-haspopup"],
9217
- ["aria-controls"]: getMenuProps().id,
9218
- ...getDropdownProps != null && getInputProps != null ? getInputProps(
9219
- getDropdownProps({
9220
- ...rest,
9221
- disabled: isDisabled,
9222
- readOnly: isReadOnly,
9223
- required,
9224
- autoComplete: "off",
9225
- id,
9226
- preventKeyAction: false,
9227
- ref: inputRef
9228
- })
9229
- ) : getInputProps != null ? getInputProps({
9230
- ...rest,
9231
- disabled: isDisabled,
9232
- readOnly: isReadOnly,
9233
- required,
9234
- autoComplete: "off",
9235
- id,
9236
- ref: inputRef
9237
- }) : {}
9238
- }
9239
- }
9240
- );
9241
- };
9242
- const ComboboxSearchFieldElement = function({
9243
- onClear,
9244
- ...props
9245
- }) {
9246
- if (!supportsPopover())
9247
- return /* @__PURE__ */ jsx(ComboboxLegacyTrigger, { ...props, variant: "combobox" });
9248
- return /* @__PURE__ */ jsx(ComboboxTrigger, { onClear, ...props, variant: "combobox" });
9249
- };
9250
- const ComboboxSearchField = function({
9251
- prefix: prefixProp,
9252
- ...props
9253
- }) {
9254
- const data = {
9255
- label: childrenToString(props.label),
9256
- size: props.size,
9257
- required: props.required,
9258
- moreInfo: props.moreInfo,
9259
- openMoreInfo: props.openMoreInfo,
9260
- description: childrenToString(props.description),
9261
- hint: props.hint,
9262
- labelProps: props.labelProps
9263
- };
9264
- const trackingId = useTrackingId({
9265
- name: "ComboboxSearchField",
9266
- data,
9267
- hasOverride: !!props["data-tracking-id"]
9268
- });
9269
- const prefix = prefixProp == null || typeof prefixProp === "string" ? prefixProp : "icon" in prefixProp ? /* @__PURE__ */ jsx(Icon$2, { ...prefixProp.icon }) : "avatar" in prefixProp ? /* @__PURE__ */ jsx(
9270
- Avatar,
9271
- {
9272
- ...prefixProp.avatar,
9273
- size: props.size === "small" ? "small" : "medium"
9274
- }
9275
- ) : prefixProp;
9276
- return /* @__PURE__ */ jsx(
9277
- ComboboxSearchFieldElement,
9278
- {
9279
- "data-tracking-id": trackingId,
9280
- ...props,
9281
- prefix
9282
- }
9283
- );
9284
- };
9285
- const ComboboxSelectTriggerElement = function(props) {
9286
- if (!supportsPopover())
9287
- return /* @__PURE__ */ jsx(ComboboxLegacyTrigger, { ...props, variant: "select" });
9288
- return /* @__PURE__ */ jsx(ComboboxTrigger, { ...props, variant: "select" });
9289
- };
9290
- const ComboboxSelectTrigger = function({
9291
- prefix: prefixProp,
9292
- ...props
9293
- }) {
9294
- const data = {
9295
- label: childrenToString(props.label),
9296
- size: props.size,
9297
- required: props.required,
9298
- moreInfo: props.moreInfo,
9299
- openMoreInfo: props.openMoreInfo,
9300
- description: childrenToString(props.description),
9301
- hint: props.hint,
9302
- labelProps: props.labelProps
9303
- };
9304
- const trackingId = useTrackingId({
9305
- name: "ComboboxSearchField",
9306
- data,
9307
- hasOverride: !!props["data-tracking-id"]
9308
- });
9309
- const prefix = prefixProp == null || typeof prefixProp === "string" ? prefixProp : "icon" in prefixProp ? /* @__PURE__ */ jsx(Icon$2, { ...prefixProp.icon }) : "avatar" in prefixProp ? /* @__PURE__ */ jsx(
9310
- Avatar,
9311
- {
9312
- ...prefixProp.avatar,
9313
- size: props.size === "small" ? "small" : "medium"
9314
- }
9315
- ) : prefixProp;
9316
- return /* @__PURE__ */ jsx(
9317
- ComboboxSelectTriggerElement,
9318
- {
9319
- "data-tracking-id": trackingId,
9320
- ...props,
9321
- prefix
9322
- }
9323
- );
9324
- };
9325
-
9326
- const CoreComboboxItemElement = function({
9327
- children,
9328
- disabled: disabledProp,
9329
- item,
9330
- index: indexProp,
9331
- hideCheckbox,
9332
- forceCloseOnSelect,
9333
- forceClearInputValueOnSelect,
9334
- alignItems,
9335
- justifyItems,
9336
- alignContent,
9337
- justifyContent,
9338
- placeItems,
9339
- placeContent,
9340
- gap,
9341
- rowGap,
9342
- columnGap,
9343
- ...rest
9344
- }) {
9345
- const {
9346
- itemToKey,
9347
- getItemProps,
9348
- multiple,
9349
- selectedItem,
9350
- selectedItems,
9351
- disabledItems,
9352
- setDisabledItems,
9353
- setForceCloseOnSelectItems,
9354
- setForceClearInputValueOnSelectItems,
9355
- highlightedIndex,
9356
- items
9357
- } = useCombobox$1();
9358
- const index = item === ADD_NEW$1 && !multiple ? indexProp : items.indexOf(item);
9359
- const disabled = disabledProp || item && item instanceof Object && "disabled" in item && item.disabled;
9360
- useEffect(() => {
9361
- if (disabledProp && !disabledItems.includes(item)) {
9362
- setDisabledItems([...disabledItems, item]);
9363
- } else if (disabledItems.includes(item)) {
9364
- setDisabledItems(disabledItems.filter((prevItem) => prevItem !== item));
9365
- }
9366
- return () => {
9367
- if (disabledItems.includes(item)) {
9368
- setDisabledItems(disabledItems.filter((prevItem) => prevItem !== item));
9369
- }
9370
- };
9371
- }, [item, disabledProp, setDisabledItems]);
9372
- useEffect(() => {
9373
- if (forceCloseOnSelect) {
9374
- setForceCloseOnSelectItems((forceCloseOnSelectItems) => {
9375
- if (forceCloseOnSelectItems.includes(item)) {
9376
- return forceCloseOnSelectItems;
9377
- } else {
9378
- return [...forceCloseOnSelectItems, item];
9379
- }
9380
- });
9381
- }
9382
- return () => {
9383
- setForceCloseOnSelectItems((forceCloseOnSelectItems) => {
9384
- if (forceCloseOnSelectItems.includes(item)) {
9385
- return forceCloseOnSelectItems.filter(
9386
- (prevItem) => prevItem !== item
9387
- );
9388
- } else {
9389
- return forceCloseOnSelectItems;
9390
- }
9391
- });
9392
- };
9393
- }, [item, forceCloseOnSelect, setForceCloseOnSelectItems]);
9394
- useEffect(() => {
9395
- if (forceClearInputValueOnSelect) {
9396
- setForceClearInputValueOnSelectItems(
9397
- (forceClearInputValueOnSelectItems) => {
9398
- if (forceClearInputValueOnSelectItems.includes(item)) {
9399
- return forceClearInputValueOnSelectItems;
9400
- } else {
9401
- return [...forceClearInputValueOnSelectItems, item];
9402
- }
9403
- }
9404
- );
9405
- }
9406
- return () => {
9407
- setForceClearInputValueOnSelectItems(
9408
- (forceClearInputValueOnSelectItems) => {
9409
- if (forceClearInputValueOnSelectItems.includes(item)) {
9410
- return forceClearInputValueOnSelectItems.filter(
9411
- (prevItem) => prevItem !== item
9412
- );
9413
- } else {
9414
- return forceClearInputValueOnSelectItems;
9415
- }
9416
- }
9417
- );
9418
- };
9419
- }, [
9420
- item,
9421
- forceClearInputValueOnSelect,
9422
- setForceClearInputValueOnSelectItems
9423
- ]);
9424
- const flexProps = {
9425
- alignItems,
9426
- justifyItems,
9427
- alignContent,
9428
- justifyContent,
9429
- placeItems,
9430
- placeContent,
9431
- gap,
9432
- rowGap,
9433
- columnGap
9434
- };
9435
- if (multiple) {
9436
- const checked = selectedItems.some(
9437
- (selectedItem2) => itemToKey(selectedItem2) === itemToKey(item)
9438
- );
9439
- return /* @__PURE__ */ jsx(
9440
- ComboboxItemVisual,
9441
- {
9442
- rootDivProps: getItemProps({
9443
- item,
9444
- index,
9445
- "aria-selected": highlightedIndex === index,
9446
- ...rest
9447
- }),
9448
- disabled,
9449
- checked,
9450
- hideCheckbox: hideCheckbox || item === ADD_NEW$1,
9451
- flexProps,
9452
- children
9453
- }
9454
- );
9455
- } else {
9456
- return /* @__PURE__ */ jsxs(
9457
- "li",
9458
- {
9459
- ...getItemProps({
9460
- item,
9461
- index,
9462
- "aria-selected": highlightedIndex === index,
9463
- ...rest
9464
- }),
9465
- "data-anv": "combobox-item",
9466
- "data-checked": itemToKey(selectedItem) === itemToKey(item),
9467
- className: styles["item"],
9468
- ...disabled ? { "aria-disabled": true } : {},
9469
- children: [
9470
- /* @__PURE__ */ jsx(
9471
- Flex,
9472
- {
9473
- className: listboxStyles["children"],
9474
- grow: 1,
9475
- shrink: 1,
9476
- ...flexProps,
9477
- children
9478
- }
9479
- ),
9480
- /* @__PURE__ */ jsx(
9481
- Icon$2,
9482
- {
9483
- "aria-hidden": true,
9484
- svg: SvgCheck,
9485
- inherit: true,
9486
- className: styles["Icon"],
9487
- style: {
9488
- opacity: itemToKey(selectedItem) === itemToKey(item) ? 1 : 0
9489
- }
9490
- }
9491
- )
9492
- ]
9493
- }
9494
- );
9495
- }
9496
- };
9497
- const ComboboxItemElement = function(props) {
9498
- if (!supportsPopover()) return /* @__PURE__ */ jsx(ComboboxLegacyItem, { ...props });
9499
- return /* @__PURE__ */ jsx(CoreComboboxItemElement, { ...props });
9500
- };
9501
- const ComboboxItem = function(props) {
9502
- const data = {
9503
- item: props.item
9504
- };
9505
- const trackingId = useTrackingId({
9506
- name: "ComboboxItem",
9507
- data,
9508
- hasOverride: !!props["data-tracking-id"]
9509
- });
9510
- return /* @__PURE__ */ jsx(ComboboxItemElement, { "data-tracking-id": trackingId, ...props });
9511
- };
9512
- const CoreComboboxItemAddNewElement = function({
9513
- onSelection,
9514
- ...props
9515
- }) {
9516
- const { items, setHasAddNew, hasExactMatch, setOnSelectItemAddNew } = useCombobox$1();
9517
- useEffect(() => {
9518
- setHasAddNew?.(true);
9519
- return () => {
9520
- setHasAddNew?.(false);
9521
- };
9522
- }, []);
9523
- useEffect(() => {
9524
- setOnSelectItemAddNew?.(() => onSelection);
9525
- return () => {
9526
- setOnSelectItemAddNew?.(void 0);
9527
- };
9528
- }, [setOnSelectItemAddNew, onSelection]);
9529
- const firstRenderRef = useRef(true);
9530
- useEffect(() => {
9531
- if (firstRenderRef.current === true) {
9532
- firstRenderRef.current = false;
9533
- }
9534
- }, []);
9535
- return !hasExactMatch && !firstRenderRef.current ? /* @__PURE__ */ jsx(
9536
- ComboboxItem,
9537
- {
9538
- ...props,
9539
- item: ADD_NEW$1,
9540
- index: items.length
9541
- }
9542
- ) : null;
9543
- };
9544
- const ComboboxItemAddNewElement = function(props) {
9545
- if (!supportsPopover()) return /* @__PURE__ */ jsx(ComboboxLegacyItemAddNew, { ...props });
9546
- return /* @__PURE__ */ jsx(CoreComboboxItemAddNewElement, { ...props });
9547
- };
9548
- const ComboboxItemAddNew = function(props) {
9549
- const data = {
9550
- item: "add-new"
9551
- };
9552
- const trackingId = useTrackingId({
9553
- name: "ComboboxItemAddNew",
9554
- data,
9555
- hasOverride: !!props["data-tracking-id"]
9556
- });
9557
- return /* @__PURE__ */ jsx(ComboboxItemAddNewElement, { "data-tracking-id": trackingId, ...props });
9558
- };
9559
-
9560
- const ComboboxListElement = function({
9561
- children,
9562
- ...rest
9563
- }) {
9564
- const {
9565
- getMenuProps,
9566
- multiple,
9567
- items,
9568
- hasAddNew = false,
9569
- hasEmpty,
9570
- loading,
9571
- selectAll,
9572
- listRef
9573
- } = useCombobox$1();
9574
- const scrollSentinelRef = useRef(null);
9575
- const [isScrolled, setIsScrolled] = useState(false);
9576
- const { key: groupKey } = useComboboxGroupContext() ?? {};
9577
- const isAGroup = !!groupKey;
9578
- useEffect(() => {
9579
- if (!scrollSentinelRef.current) return;
9580
- const intersectionObserver = new IntersectionObserver(
9581
- (entries) => {
9582
- entries.forEach((entry) => {
9583
- if (!entry.isIntersecting) {
9584
- setIsScrolled(true);
9585
- } else {
9586
- setIsScrolled(false);
9587
- }
9588
- });
9589
- },
9590
- { threshold: 0 }
9591
- );
9592
- intersectionObserver.observe(scrollSentinelRef.current);
9593
- return () => {
9594
- intersectionObserver.disconnect();
9595
- };
9596
- }, [scrollSentinelRef, setIsScrolled]);
9597
- if (!supportsPopover())
9598
- return /* @__PURE__ */ jsx(ComboboxLegacyList, { ...rest, children });
9599
- if (isAGroup) {
9600
- return /* @__PURE__ */ jsx(Fragment, { children });
9601
- }
9602
- if (multiple) {
9603
- return /* @__PURE__ */ jsxs(Fragment, { children: [
9604
- /* @__PURE__ */ jsxs(
9605
- "ul",
9606
- {
9607
- ...getMenuProps(rest),
9608
- ref: listRef,
9609
- "data-anv": "combobox-list",
9610
- className: cx(styles["listview"], listViewStyles["listview"], {
9611
- [styles.scrolled]: isScrolled
9612
- }),
9613
- style: {
9614
- display: items.length || hasAddNew ? void 0 : "none"
9615
- },
9616
- children: [
9617
- /* @__PURE__ */ jsx("div", { ref: scrollSentinelRef, className: styles["scroll-sentinel"] }),
9618
- !loading && selectAll && /* @__PURE__ */ jsx(ComboboxSelectAll, {}),
9619
- children
9620
- ]
9621
- }
9622
- ),
9623
- 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
9624
- ] });
9625
- } else {
9626
- return /* @__PURE__ */ jsxs(Fragment, { children: [
9627
- /* @__PURE__ */ jsx(
9628
- "ul",
9629
- {
9630
- ...getMenuProps(rest),
9631
- ref: listRef,
9632
- "data-anv": "combobox-list",
9633
- className: listboxStyles["listbox"],
9634
- style: {
9635
- display: items.length || hasAddNew ? void 0 : "none"
9636
- },
9637
- children
9638
- }
9639
- ),
9640
- 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
9641
- ] });
9642
- }
9643
- };
9644
- const ComboboxList = function({
9645
- children,
9646
- className,
9647
- ...rest
9648
- }) {
9649
- if (!supportsPopover())
9650
- return /* @__PURE__ */ jsx(ComboboxLegacyList, { className, ...rest, children });
9651
- return /* @__PURE__ */ jsx(ComboboxListElement, { className, ...rest, children });
9652
- };
9653
-
9654
- const ComboboxSingle = function(props) {
9655
- const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
9656
- const {
9657
- className,
9658
- style,
9659
- children,
9660
- open,
9661
- disabled,
9662
- readOnly,
9663
- items: itemsProp,
9664
- itemToString: itemToStringProp,
9665
- itemToKey: itemToKeyProp,
9666
- onChange,
9667
- disableCloseOnClickOutside = false,
9668
- disableMatchReferenceWidth = false,
9669
- disableCloseOnSelectItem = false,
9670
- filterOptions,
9671
- disableFilter = false,
9672
- loading = false,
9673
- minPopoverHeight,
9674
- root,
9675
- onInputValueChange,
9676
- environment: environmentProp,
9677
- groupBy,
9678
- groupToString,
9679
- groupSorter,
9680
- ...rest
9681
- } = componentProps;
9682
- const ComboboxClassNames = cx(styles["combobox"], className);
9683
- const [items, setItems] = useState(itemsProp);
9684
- const [hasAddNew, setHasAddNew] = useState(false);
9685
- const [onSelectItemAddNew, setOnSelectItemAddNew] = useState(void 0);
9686
- const [hasExactMatch, setHasExactMatch] = useState(false);
9687
- const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
9688
- const [hasEmpty, setHasEmpty] = useState(false);
9689
- const [disabledItems, setDisabledItems] = useState([]);
9690
- const [forceCloseOnSelectItems, setForceCloseOnSelectItems] = useState([]);
9691
- const [, setForceClearInputValueOnSelectItems] = useState([]);
9692
- const [isReadOnly, setIsReadOnly] = useState(readOnly);
9693
- const [isDisabled, setIsDisabled] = useState(disabled);
9694
- const referenceRef = useRef(null);
9695
- const contentRef = useRef(null);
9696
- const listRef = useRef(null);
9697
- const handleOutsidePress = (_e) => {
9698
- if (disableCloseOnClickOutside) return;
9699
- closeMenu();
9700
- };
9701
- const { ref: wrapperDivRef, environment } = useDownshiftEnvironment$1();
9702
- const { orderedItems: allItemsOrderedByGroup } = useGroups({
9703
- items: itemsProp,
9704
- groupBy,
9705
- groupToString,
9706
- groupSorter
9707
- });
9708
- const { groups: searchedGroups, orderedItems: searchedItemsOrderedByGroup } = useGroups({
9709
- items,
9710
- groupBy,
9711
- groupToString,
9712
- groupSorter
9713
- });
9714
- const showAddNew = hasAddNew && !hasExactMatch;
9715
- const combinedItems = useMemo(
9716
- () => showAddNew ? [...searchedItemsOrderedByGroup, ADD_NEW$1] : searchedItemsOrderedByGroup,
9717
- [searchedItemsOrderedByGroup, showAddNew]
9718
- );
9719
- const itemToString = itemToStringProp ?? defaultItemToString$1;
9720
- const itemToKey = itemToKeyProp ?? defaultItemToKey$1;
9721
- const {
9722
- isOpen,
9723
- getLabelProps,
9724
- getInputProps,
9725
- getToggleButtonProps,
9726
- getMenuProps,
9727
- getItemProps,
9728
- highlightedIndex,
9729
- selectedItem,
9730
- selectItem,
9731
- setInputValue,
9732
- inputValue,
9733
- closeMenu
9734
- } = useCombobox({
9735
- ...rest,
9736
- items: combinedItems,
9737
- itemToString,
9738
- itemToKey,
9739
- isOpen: open,
9740
- initialIsOpen: open,
9741
- environment: environmentProp ?? environment,
9742
- // NOTE: Reducer needs to be pure, side-effects should be in event handlers
9743
- stateReducer(state, { type, changes }) {
9744
- switch (type) {
9745
- // keep Combobox open onBlur, will call close using Popover's onOutsidePress
9746
- case useCombobox.stateChangeTypes.InputBlur:
9747
- return {
9748
- ...changes,
9749
- isOpen: open != null ? open : true,
9750
- highlightedIndex: state.highlightedIndex
9751
- };
9752
- case useCombobox.stateChangeTypes.InputKeyDownEnter:
9753
- case useCombobox.stateChangeTypes.ItemClick:
9754
- if (changes.selectedItem === ADD_NEW$1) {
9755
- const stateInputValue = state.inputValue;
9756
- setTimeout(() => {
9757
- onSelectItemAddNew?.(stateInputValue);
9758
- }, 250);
9759
- return {
9760
- ...changes,
9761
- selectedItem: state.selectedItem,
9762
- inputValue: ""
9763
- };
9764
- } else {
9765
- const forceClose = forceCloseOnSelectItems.includes(
9766
- changes.selectedItem
9767
- );
9768
- return {
9769
- ...changes,
9770
- isOpen: open != null ? open : forceClose ? false : disableCloseOnSelectItem ? true : changes.isOpen,
9771
- highlightedIndex: disableCloseOnSelectItem ? itemToString(state.selectedItem) === state.inputValue || !state.inputValue ? state.highlightedIndex : 0 : changes.highlightedIndex
9772
- };
9773
- }
9774
- // prevent this from closing the popover by default
9775
- case useCombobox.stateChangeTypes.InputClick:
9776
- return { ...changes, isOpen: open != null ? open : true };
9777
- default:
9778
- return changes;
9779
- }
9780
- },
9781
- onInputValueChange: onInputValueChange ?? (({ inputValue: inputValue2, type, selectedItem: selectedItem2 }) => {
9782
- const inputValueMatchesSelectedItem = selectedItem2 != null && inputValue2 === itemToString(selectedItem2);
9783
- const inputValueIsEmpty = inputValue2 == null || inputValue2 === "";
9784
- if (type === useCombobox.stateChangeTypes.InputKeyDownEnter || type === useCombobox.stateChangeTypes.ItemClick) {
9785
- setItems(allItemsOrderedByGroup);
9786
- setHasExactMatch(true);
9787
- } else if (!inputValueMatchesSelectedItem && !inputValueIsEmpty && !disableFilter) {
9788
- setItems(
9789
- matchSorter(allItemsOrderedByGroup, inputValue2, filterOptions)
9790
- );
9791
- setHasExactMatch(
9792
- matchSorter(allItemsOrderedByGroup, inputValue2, {
9793
- ...filterOptions,
9794
- threshold: matchSorter.rankings.EQUAL
9795
- }).length > 0
9796
- );
9797
- } else {
9798
- setItems(allItemsOrderedByGroup);
9799
- setHasExactMatch(true);
9800
- }
9801
- }),
9802
- onSelectedItemChange(changes) {
9803
- const { selectedItem: selectedItem2 } = changes;
9804
- if (onChange != null)
9805
- onChange(selectedItem2 != null ? selectedItem2 : null);
9806
- },
9807
- onIsOpenChange({ isOpen: isOpen2, inputValue: inputValue2, selectedItem: selectedItem2 }) {
9808
- if (isOpen2 === false) {
9809
- setTimeout(() => {
9810
- setItems(allItemsOrderedByGroup);
9811
- if (inputValue2 === "") {
9812
- selectItem(null);
9813
- } else {
9814
- setInputValue(
9815
- selectedItem2 != null ? itemToString(selectedItem2) : ""
9816
- );
9817
- }
9818
- }, 200);
9819
- }
9820
- },
9821
- isItemDisabled(item) {
9822
- if (isDisabled || isReadOnly) {
9823
- return !!isDisabled || !!isReadOnly;
9824
- }
9825
- if (item && item instanceof Object && "disabled" in item && item.disabled) {
9826
- return true;
9827
- }
9828
- if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
9829
- return true;
9830
- }
9831
- if (disabledItems.includes(item)) {
9832
- return true;
9833
- }
9834
- return false;
9835
- }
9836
- });
9837
- const firstRenderRef = useRef(true);
9838
- useEffect(() => {
9839
- if (firstRenderRef.current === true) {
9840
- firstRenderRef.current = false;
9841
- }
9842
- }, []);
9843
- useEffect(() => {
9844
- setIsDisabled(disabled);
9845
- }, [disabled]);
9846
- useEffect(() => {
9847
- setIsReadOnly(readOnly);
9848
- }, [readOnly]);
9849
- useEffect(() => {
9850
- if (firstRenderRef.current) return;
9851
- setTimeout(() => {
9852
- const inputValueMatchesSelectedItem = selectedItem != null && inputValue === itemToString(selectedItem);
9853
- const inputValueIsEmpty = inputValue == null || inputValue === "";
9854
- if (!inputValueMatchesSelectedItem && !inputValueIsEmpty && !disableFilter) {
9855
- setItems(
9856
- matchSorter(allItemsOrderedByGroup, inputValue, filterOptions)
9857
- );
9858
- setHasExactMatch(
9859
- matchSorter(allItemsOrderedByGroup, inputValue, {
9860
- ...filterOptions,
9861
- threshold: matchSorter.rankings.EQUAL
9862
- }).length > 0
9863
- );
9864
- } else {
9865
- setItems(allItemsOrderedByGroup);
9866
- setHasExactMatch(true);
9867
- }
9868
- }, 200);
9869
- }, [allItemsOrderedByGroup]);
9870
- return /* @__PURE__ */ jsx(
9871
- ComboboxContext.Provider,
9872
- {
9873
- value: {
9874
- multiple: false,
9875
- select: false,
9876
- items: searchedItemsOrderedByGroup,
9877
- itemToString,
9878
- itemToKey,
9879
- isOpen,
9880
- getLabelProps,
9881
- getInputProps,
9882
- getToggleButtonProps,
9883
- getMenuProps,
9884
- getItemProps,
9885
- highlightedIndex,
9886
- selectedItem,
9887
- selectedItems: [],
9888
- disabledItems,
9889
- setDisabledItems,
9890
- setForceCloseOnSelectItems,
9891
- setForceClearInputValueOnSelectItems,
9892
- getSelectedItemProps: void 0,
9893
- getDropdownProps: void 0,
9894
- selectItem,
9895
- inputValue,
9896
- isDisabled,
9897
- isReadOnly,
9898
- setIsReadOnly,
9899
- setIsDisabled,
9900
- hasDisabledPopover,
9901
- setHasDisabledPopover,
9902
- hasEmpty,
9903
- setHasEmpty,
9904
- hasAddNew,
9905
- setHasAddNew,
9906
- onSelectItemAddNew,
9907
- setOnSelectItemAddNew,
9908
- hasExactMatch,
9909
- setHasExactMatch,
9910
- loading,
9911
- referenceRef,
9912
- contentRef,
9913
- listRef,
9914
- closeMenu,
9915
- groupBy,
9916
- groupToString,
9917
- groups: searchedGroups
9918
- },
9919
- children: /* @__PURE__ */ jsx(
9920
- "div",
9921
- {
9922
- className: ComboboxClassNames,
9923
- "data-anv": "combobox",
9924
- style: { ...style, ...layoutStyles },
9925
- ref: wrapperDivRef,
9926
- children: /* @__PURE__ */ jsx(
9927
- Popover,
9928
- {
9929
- open: isOpen,
9930
- noPadding: true,
9931
- disableCaret: true,
9932
- fitScreen: true,
9933
- disableFlipFallback: true,
9934
- placement: "bottom-start",
9935
- matchReferenceWidth: !disableMatchReferenceWidth,
9936
- disableCloseOnClickOutside,
9937
- onOutsidePress: handleOutsidePress,
9938
- minHeight: minPopoverHeight,
9939
- children
9940
- }
9941
- )
9942
- }
9943
- )
9944
- }
9945
- );
9946
- };
9947
- const ComboboxMultiple = function(props) {
9948
- const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
9949
- const {
9950
- className,
9951
- style,
9952
- children,
9953
- open,
9954
- items: itemsProp,
9955
- itemToString: itemToStringProp,
9956
- itemToKey: itemToKeyProp,
9957
- onChange,
9958
- onSelectedItemsChange,
9959
- onStateChange,
9960
- disableCloseOnClickOutside = false,
9961
- disableMatchReferenceWidth = false,
9962
- disableCloseOnSelectItem = false,
9963
- disableClearInputValueOnSelectItem = false,
9964
- filterOptions,
9965
- disableFilter = false,
9966
- loading = false,
9967
- minPopoverHeight,
9968
- root,
9969
- disabled,
9970
- readOnly,
9971
- stateReducer: _,
9972
- onInputValueChange,
9973
- initialSelectedItems,
9974
- initialActiveIndex,
9975
- defaultSelectedItems,
9976
- defaultActiveIndex,
9977
- activeIndex: activeIndexProp,
9978
- selectedItems: selectedItemsProp,
9979
- environment: environmentProp,
9980
- selectAll,
9981
- groupBy,
9982
- groupToString,
9983
- ...rest
9984
- } = componentProps;
9985
- const ComboboxClassNames = cx(styles["combobox"], className);
9986
- const [items, setItems] = useState(itemsProp);
9987
- const [hasAddNew, setHasAddNew] = useState(false);
9988
- const [onSelectItemAddNew, setOnSelectItemAddNew] = useState(void 0);
9989
- const [hasExactMatch, setHasExactMatch] = useState(false);
9990
- const [hasDisabledPopover, setHasDisabledPopover] = useState(false);
9991
- const [hasEmpty, setHasEmpty] = useState(false);
9992
- const [disabledItems, setDisabledItems] = useState([]);
9993
- const [forceCloseOnSelectItems, setForceCloseOnSelectItems] = useState([]);
9994
- const [
9995
- forceClearInputValueOnSelectItems,
9996
- setForceClearInputValueOnSelectItems
9997
- ] = useState([]);
9998
- const [isReadOnly, setIsReadOnly] = useState(readOnly);
9999
- const [isDisabled, setIsDisabled] = useState(disabled);
10000
- let storedSetInputValue = void 0;
10001
- const referenceRef = useRef(null);
10002
- const contentRef = useRef(null);
10003
- const listRef = useRef(null);
10004
- const handleOutsidePress = (_e) => {
10005
- if (disableCloseOnClickOutside) return;
10006
- closeMenu();
10007
- };
10008
- const { ref: wrapperDivRef, environment } = useDownshiftEnvironment$1();
10009
- const { orderedItems: allItemsOrderedByGroup } = useGroups({
10010
- items: itemsProp,
10011
- groupBy,
10012
- groupToString
10013
- });
10014
- const { groups: searchedGroups, orderedItems: searchedItemsOrderedByGroup } = useGroups({
10015
- items,
10016
- groupBy,
10017
- groupToString
10018
- });
10019
- const showAddNew = hasAddNew && !hasExactMatch;
10020
- const combinedItems = useMemo(() => {
10021
- let items2 = searchedItemsOrderedByGroup;
10022
- if (showAddNew) {
10023
- items2 = [...items2, ADD_NEW$1];
10024
- }
10025
- if (selectAll) {
10026
- items2 = [SELECT_ALL, ...items2];
10027
- }
10028
- return items2;
10029
- }, [searchedItemsOrderedByGroup, showAddNew, selectAll]);
10030
- const itemToString = itemToStringProp ?? defaultItemToString$1;
10031
- const itemToKey = itemToKeyProp ?? defaultItemToKey$1;
10032
- const {
10033
- getSelectedItemProps,
10034
- getDropdownProps,
10035
- reset,
10036
- selectedItems,
10037
- addSelectedItem,
10038
- removeSelectedItem,
10039
- setSelectedItems
10040
- } = useMultipleSelection({
10041
- itemToKey,
10042
- initialSelectedItems,
10043
- initialActiveIndex,
10044
- defaultSelectedItems,
10045
- defaultActiveIndex,
10046
- activeIndex: activeIndexProp,
10047
- selectedItems: selectedItemsProp,
10048
- environment: environmentProp ?? environment,
10049
- stateReducer(state, { type, changes }) {
10050
- switch (type) {
10051
- // the Chip itself will handle "Backspace" and "Delete"
10052
- // just return previous state
10053
- case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace:
10054
- case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownDelete:
10055
- return state;
10056
- case useMultipleSelection.stateChangeTypes.FunctionRemoveSelectedItem:
10057
- return { ...changes, activeIndex: -1 };
10058
- case useMultipleSelection.stateChangeTypes.FunctionReset:
10059
- return { ...changes, selectedItems: [] };
10060
- default:
10061
- return changes;
10062
- }
10063
- },
10064
- onStateChange(changes) {
10065
- const { type } = changes;
10066
- switch (type) {
10067
- case useMultipleSelection.stateChangeTypes.FunctionReset:
10068
- storedSetInputValue?.("");
10069
- break;
10070
- }
10071
- onStateChange?.(changes);
10072
- },
10073
- onSelectedItemsChange(changes) {
10074
- const { selectedItems: selectedItems2 } = changes;
10075
- if (onChange != null) onChange(selectedItems2);
10076
- if (onSelectedItemsChange != null) onSelectedItemsChange(changes);
10077
- }
10078
- });
10079
- const {
10080
- isOpen,
10081
- getLabelProps,
10082
- getInputProps,
10083
- getToggleButtonProps,
10084
- getMenuProps,
10085
- getItemProps,
10086
- highlightedIndex,
10087
- selectedItem,
10088
- selectItem,
10089
- setInputValue,
10090
- inputValue,
10091
- closeMenu
10092
- } = useCombobox({
10093
- ...rest,
10094
- items: combinedItems,
10095
- itemToString,
10096
- itemToKey,
10097
- selectedItem: null,
10098
- isOpen: open,
10099
- initialIsOpen: open,
10100
- environment: environmentProp ?? environment,
10101
- // NOTE: Reducer needs to be pure, side-effects should be in event handlers
10102
- stateReducer(state, { type, changes }) {
10103
- switch (type) {
10104
- // keep Combobox open onBlur, will call close using Popover's onOutsidePress
10105
- case useCombobox.stateChangeTypes.InputBlur:
10106
- return {
10107
- ...changes,
10108
- inputValue: state.inputValue,
10109
- selectedItem: null,
10110
- isOpen: open != null ? open : true,
10111
- highlightedIndex: state.highlightedIndex
10112
- };
10113
- case useCombobox.stateChangeTypes.InputKeyDownEnter:
10114
- case useCombobox.stateChangeTypes.ItemClick:
10115
- if (changes.selectedItem === ADD_NEW$1) {
10116
- const stateInputValue = state.inputValue;
10117
- setTimeout(() => {
10118
- onSelectItemAddNew?.(stateInputValue);
10119
- }, 250);
10120
- return {
10121
- ...changes,
10122
- selectedItem: state.selectedItem,
10123
- inputValue: ""
10124
- };
10125
- } else if (changes.selectedItem === SELECT_ALL) {
10126
- selectAll?.onSelection();
10127
- return {
10128
- ...changes,
10129
- selectedItem: null
10130
- };
10131
- } else {
10132
- const forceClose = forceCloseOnSelectItems.includes(
10133
- changes.selectedItem
10134
- );
10135
- const forceClearInputValue = forceClearInputValueOnSelectItems.includes(
10136
- changes.selectedItem
10137
- );
10138
- return {
10139
- ...changes,
10140
- isOpen: open != null ? open : forceClose ? false : disableCloseOnSelectItem ? true : changes.isOpen,
10141
- highlightedIndex: forceClearInputValue ? 0 : disableCloseOnSelectItem ? disableClearInputValueOnSelectItem || !state.inputValue ? state.highlightedIndex : 0 : changes.highlightedIndex,
10142
- inputValue: forceClearInputValue ? "" : disableClearInputValueOnSelectItem ? state.inputValue : ""
10143
- };
10144
- }
10145
- // prevent this from closing the popover by default
10146
- case useCombobox.stateChangeTypes.InputClick:
10147
- return { ...changes, isOpen: open != null ? open : true };
10148
- // prevent this from clearing the input value by default
10149
- case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
10150
- return { ...changes, inputValue: state.inputValue };
10151
- default:
10152
- return changes;
10153
- }
10154
- },
10155
- onStateChange(changes) {
10156
- const { type, selectedItem: newSelectedItem } = changes;
10157
- switch (type) {
10158
- case useCombobox.stateChangeTypes.InputKeyDownEnter:
10159
- case useCombobox.stateChangeTypes.ItemClick:
10160
- case useCombobox.stateChangeTypes.InputBlur:
10161
- if (newSelectedItem != null) {
10162
- const itemAlreadySelected = selectedItems.some(
10163
- (item) => itemToKey(item) === itemToKey(newSelectedItem)
10164
- );
10165
- if (itemAlreadySelected) {
10166
- removeSelectedItem(newSelectedItem);
10167
- } else {
10168
- addSelectedItem(newSelectedItem);
10169
- }
10170
- }
10171
- break;
10172
- }
10173
- onStateChange?.(changes);
10174
- },
10175
- onInputValueChange: onInputValueChange ?? (({ inputValue: inputValue2, ...changes }) => {
10176
- const { type, selectedItem: selectedItem2 } = changes;
10177
- const inputValueMatchesSelectedItem = selectedItem2 != null && inputValue2 === itemToString(selectedItem2);
10178
- const inputValueIsEmpty = inputValue2 == null || inputValue2 === "";
10179
- if (type === useCombobox.stateChangeTypes.InputKeyDownEnter || type === useCombobox.stateChangeTypes.ItemClick) {
10180
- setItems(allItemsOrderedByGroup);
10181
- setHasExactMatch(true);
10182
- } else if (!inputValueMatchesSelectedItem && !inputValueIsEmpty && !disableFilter) {
10183
- setItems(
10184
- matchSorter(allItemsOrderedByGroup, inputValue2, filterOptions)
10185
- );
10186
- setHasExactMatch(
10187
- matchSorter(allItemsOrderedByGroup, inputValue2, {
10188
- ...filterOptions,
10189
- threshold: matchSorter.rankings.EQUAL
10190
- }).length > 0
10191
- );
10192
- } else {
10193
- setItems(allItemsOrderedByGroup);
10194
- setHasExactMatch(true);
10195
- }
10196
- }),
10197
- onIsOpenChange({ isOpen: isOpen2 }) {
10198
- if (isOpen2 === false) {
10199
- setTimeout(() => {
10200
- setInputValue("");
10201
- setItems(allItemsOrderedByGroup);
10202
- }, 200);
10203
- }
10204
- },
10205
- isItemDisabled(item) {
10206
- if (isDisabled || isReadOnly) {
10207
- return !!isDisabled || !!isReadOnly;
10208
- }
10209
- if (item && item instanceof Object && "disabled" in item && item.disabled) {
10210
- return true;
10211
- }
10212
- if (item && item instanceof Object && "readOnly" in item && item.readOnly) {
10213
- return true;
10214
- }
10215
- if (disabledItems.includes(item)) {
10216
- return true;
10217
- }
10218
- return false;
10219
- },
10220
- onHighlightedIndexChange(changes) {
10221
- if (selectAll && changes.highlightedIndex === 0 && [
10222
- useCombobox.stateChangeTypes.InputKeyDownHome,
10223
- useCombobox.stateChangeTypes.InputKeyDownEnd,
10224
- useCombobox.stateChangeTypes.InputKeyDownArrowDown,
10225
- useCombobox.stateChangeTypes.InputKeyDownArrowUp,
10226
- useCombobox.stateChangeTypes.InputKeyDownPageDown,
10227
- useCombobox.stateChangeTypes.InputKeyDownPageUp
10228
- ].includes(changes.type) && listRef.current) {
10229
- const scrollParent = getScrollParent(listRef.current);
10230
- if (scrollParent) {
10231
- scrollParent.scrollTop = 0;
10232
- }
10233
- }
10234
- }
10235
- });
10236
- storedSetInputValue = setInputValue;
10237
- const firstRenderRef = useRef(true);
10238
- useEffect(() => {
10239
- if (firstRenderRef.current === true) {
10240
- firstRenderRef.current = false;
10241
- }
10242
- }, []);
10243
- useEffect(() => {
10244
- setIsDisabled(disabled);
10245
- }, [disabled]);
10246
- useEffect(() => {
10247
- setIsReadOnly(readOnly);
10248
- }, [readOnly]);
10249
- useEffect(() => {
10250
- if (firstRenderRef.current) return;
10251
- setTimeout(() => {
10252
- const inputValueIsEmpty = inputValue == null || inputValue === "";
10253
- if (!inputValueIsEmpty && !disableFilter) {
10254
- setItems(matchSorter(itemsProp, inputValue, filterOptions));
10255
- setHasExactMatch(
10256
- matchSorter(itemsProp, inputValue, {
10257
- ...filterOptions,
10258
- threshold: matchSorter.rankings.EQUAL
10259
- }).length > 0
10260
- );
10261
- } else {
10262
- setItems(itemsProp);
10263
- setHasExactMatch(true);
10264
- }
10265
- }, 200);
10266
- }, [itemsProp]);
10267
- return /* @__PURE__ */ jsx(
10268
- ComboboxContext.Provider,
10269
- {
10270
- value: {
10271
- multiple: true,
10272
- select: false,
10273
- items: combinedItems,
10274
- itemToString,
10275
- itemToKey,
10276
- isOpen,
10277
- getLabelProps,
10278
- getInputProps,
10279
- getToggleButtonProps,
10280
- getMenuProps,
10281
- getItemProps,
10282
- highlightedIndex,
10283
- selectedItem,
10284
- selectedItems,
10285
- disabledItems,
10286
- setDisabledItems,
10287
- setForceCloseOnSelectItems,
10288
- setForceClearInputValueOnSelectItems,
10289
- getSelectedItemProps,
10290
- getDropdownProps,
10291
- reset,
10292
- addSelectedItem,
10293
- removeSelectedItem,
10294
- setSelectedItems,
10295
- selectItem,
10296
- inputValue,
10297
- isDisabled,
10298
- isReadOnly,
10299
- setIsReadOnly,
10300
- setIsDisabled,
10301
- hasDisabledPopover,
10302
- setHasDisabledPopover,
10303
- hasEmpty,
10304
- setHasEmpty,
10305
- hasAddNew,
10306
- setHasAddNew,
10307
- onSelectItemAddNew,
10308
- setOnSelectItemAddNew,
10309
- hasExactMatch,
10310
- setHasExactMatch,
10311
- loading,
10312
- referenceRef,
10313
- contentRef,
10314
- listRef,
10315
- closeMenu,
10316
- groupBy,
10317
- groupToString,
10318
- groups: searchedGroups,
10319
- selectAll
10320
- },
10321
- children: /* @__PURE__ */ jsx(
10322
- "div",
10323
- {
10324
- className: ComboboxClassNames,
10325
- "data-anv": "combobox",
10326
- style: { ...style, ...layoutStyles },
10327
- ref: wrapperDivRef,
10328
- children: /* @__PURE__ */ jsx(
10329
- Popover,
10330
- {
10331
- open: !isDisabled && isOpen,
10332
- noPadding: true,
10333
- disableCaret: true,
10334
- fitScreen: true,
10335
- disableFlipFallback: true,
10336
- placement: "bottom-start",
10337
- matchReferenceWidth: !disableMatchReferenceWidth,
10338
- disableCloseOnClickOutside,
10339
- onOutsidePress: handleOutsidePress,
10340
- minHeight: minPopoverHeight,
10341
- children
10342
- }
10343
- )
10344
- }
10345
- )
10346
- }
10347
- );
10348
- };
10349
- const ComboboxElement = function(props) {
10350
- if (!supportsPopover()) {
10351
- if (isMultiple(props)) {
10352
- return /* @__PURE__ */ jsx(ComboboxLegacyMultiple, { ...props });
10353
- } else {
10354
- return /* @__PURE__ */ jsx(ComboboxLegacySingle, { ...props });
10355
- }
10356
- }
10357
- if (isMultiple(props)) {
10358
- return /* @__PURE__ */ jsx(ComboboxMultiple, { ...props });
10359
- } else {
10360
- return /* @__PURE__ */ jsx(ComboboxSingle, { ...props });
10361
- }
10362
- };
10363
- const Combobox = Object.assign(ComboboxElement, {
10364
- /**
10365
- * ComboboxSelect component for selecting items from a predefined list.
10366
- *
10367
- * Features:
10368
- * - Single and multiple item selection from predefined options
10369
- * - Dropdown-style selection interface
10370
- * - Grouping support with custom group labels and sorting
10371
- * - Loading states with spinner indicators
10372
- * - Disabled and read-only states
10373
- * - Customizable popover behavior and positioning
10374
- * - Full accessibility support with ARIA attributes
10375
- * - Keyboard navigation support
10376
- * - Layout utility props for positioning and spacing
10377
- * - Automatic tracking ID generation for analytics
10378
- *
10379
- * @example
10380
- * <Combobox.Select
10381
- * items={items}
10382
- * itemToString={(item) => item.name}
10383
- * onChange={setSelectedItem}
10384
- * >
10385
- * <Combobox.SelectTrigger label="Select an item" />
10386
- * <Combobox.Content>
10387
- * {({ items }) => (
10388
- * <Combobox.List>
10389
- * {items.map((item, i) => (
10390
- * <Combobox.Item key={item.id} item={item} index={i}>
10391
- * {item.name}
10392
- * </Combobox.Item>
10393
- * ))}
10394
- * </Combobox.List>
10395
- * )}
10396
- * </Combobox.Content>
10397
- * </Combobox.Select>
10398
- */
10399
- Select: ComboboxSelect,
10400
- /**
10401
- * ComboboxSearchField component for the search input field.
10402
- *
10403
- * Features:
10404
- * - Search input with clear button functionality
10405
- * - Supports multiple selection with chip display
10406
- * - Handles keyboard navigation and accessibility
10407
- * - Integrates with combobox state management
10408
- * - Supports custom styling and layout
10409
- * - Manages focus and blur events
10410
- * - Enhanced prefix support for icons and avatars
10411
- * - Automatic tracking ID generation for analytics
10412
- *
10413
- * @example
10414
- * <Combobox.SearchField
10415
- * label="Search users"
10416
- * placeholder="Type to search..."
10417
- * prefix={{ icon: { svg: SearchIcon } }}
10418
- * />
10419
- */
10420
- SearchField: ComboboxSearchField,
10421
- /**
10422
- * ComboboxSelectTrigger component for the select trigger field.
10423
- *
10424
- * Features:
10425
- * - Select input with dropdown trigger
10426
- * - Supports single selection display
10427
- * - Handles keyboard navigation and accessibility
10428
- * - Integrates with combobox state management
10429
- * - Supports custom styling and layout
10430
- * - Manages focus and blur events
10431
- * - Enhanced prefix support for icons and avatars
10432
- * - Automatic tracking ID generation for analytics
10433
- *
10434
- * @example
10435
- * <Combobox.SelectTrigger
10436
- * label="Select user"
10437
- * placeholder="Choose a user..."
10438
- * prefix={{ avatar: { name: "User" } }}
10439
- * />
10440
- */
10441
- SelectTrigger: ComboboxSelectTrigger,
10442
- /**
10443
- * ComboboxContent component for rendering the content area of a combobox.
10444
- *
10445
- * Features:
10446
- * - Supports both popover and inline rendering modes
10447
- * - Provides render props pattern for flexible content rendering
10448
- * - Handles grouped items with proper ARIA labels
10449
- * - Integrates with combobox state management
10450
- * - Supports custom styling and layout
10451
- * - Manages focus and blur events for popover behavior
10452
- *
10453
- * @example
10454
- * <Combobox.Content>
10455
- * {({ items }) => (
10456
- * <Combobox.List>
10457
- * {items.map((item, index) => (
10458
- * <Combobox.Item key={item.id} item={item} index={index}>
10459
- * {item.name}
10460
- * </Combobox.Item>
10461
- * ))}
10462
- * </Combobox.List>
10463
- * )}
10464
- * </Combobox.Content>
10465
- */
10466
- Content: ComboboxContent,
10467
- /**
10468
- * ComboboxList component for rendering the list of items.
10469
- *
10470
- * Features:
10471
- * - Renders list of items with proper accessibility
10472
- * - Supports both single and multiple selection modes
10473
- * - Loading state with spinner
10474
- * - Empty state handling
10475
- * - Automatic tracking ID generation for analytics
10476
- *
10477
- * @example
10478
- * <Combobox.List>
10479
- * {items.map((item, i) => (
10480
- * <Combobox.Item key={item.id} item={item} index={i}>
10481
- * {item.name}
10482
- * </Combobox.Item>
10483
- * ))}
10484
- * </Combobox.List>
10485
- */
10486
- List: ComboboxList,
10487
- /**
10488
- * ComboboxItem component for rendering individual items in the list.
10489
- *
10490
- * Features:
10491
- * - Individual item rendering with proper accessibility
10492
- * - Support for disabled state
10493
- * - Custom content rendering
10494
- * - Automatic tracking ID generation for analytics
10495
- *
10496
- * @example
10497
- * <Combobox.Item item={item} index={index}>
10498
- * <Flex direction="column">
10499
- * <Text>{item.name}</Text>
10500
- * <Text size="small" subdued>{item.description}</Text>
10501
- * </Flex>
10502
- * </Combobox.Item>
10503
- */
10504
- Item: ComboboxItem,
10505
- /**
10506
- * ComboboxItemAddNew component for rendering an "Add New" option.
10507
- *
10508
- * Features:
10509
- * - "Add New" option that appears when no exact match is found
10510
- * - Customizable content rendering
10511
- * - Callback when selected
10512
- * - Automatic tracking ID generation for analytics
10513
- *
10514
- * @example
10515
- * <Combobox.ItemAddNew onSelection={(inputValue) => addNewItem(inputValue)}>
10516
- * Add "{inputValue}" as new item
10517
- * </Combobox.ItemAddNew>
10518
- */
10519
- ItemAddNew: ComboboxItemAddNew,
10520
- /**
10521
- * ComboboxEmpty component for rendering content when no items are available.
10522
- *
10523
- * Features:
10524
- * - Renders content when list is empty
10525
- * - Customizable empty state message
10526
- * - Automatic tracking ID generation for analytics
10527
- *
10528
- * @example
10529
- * <Combobox.Empty>
10530
- * <Text>No items found. Try adjusting your search.</Text>
10531
- * </Combobox.Empty>
10532
- */
10533
- Empty: ComboboxEmpty
10534
- });
10535
-
10536
- 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 };
10537
- //# sourceMappingURL=Combobox-RjBDpgFV.js.map
6262
+ export { useMultipleSelection as a, useSelect as b, matchSorter as m, useCombobox as u };
6263
+ //# sourceMappingURL=match-sorter.esm-CtBw0MrM.js.map