@elliemae/ds-controlled-form 3.0.0-next.14 → 3.0.0-next.18

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 (203) hide show
  1. package/dist/cjs/autocomplete/Autocomplete.js +5 -6
  2. package/dist/cjs/autocomplete/Autocomplete.js.map +2 -2
  3. package/dist/cjs/autocomplete/AutocompleteCTX.js +3 -14
  4. package/dist/cjs/autocomplete/AutocompleteCTX.js.map +2 -2
  5. package/dist/cjs/autocomplete/AutocompleteDataTestids.js +1 -7
  6. package/dist/cjs/autocomplete/AutocompleteDataTestids.js.map +2 -2
  7. package/dist/cjs/autocomplete/config/useAutocomplete.js +23 -11
  8. package/dist/cjs/autocomplete/config/useAutocomplete.js.map +3 -3
  9. package/dist/cjs/autocomplete/parts/container/Container.js +27 -17
  10. package/dist/cjs/autocomplete/parts/container/Container.js.map +2 -2
  11. package/dist/cjs/autocomplete/parts/container/styled.js +0 -5
  12. package/dist/cjs/autocomplete/parts/container/styled.js.map +2 -2
  13. package/dist/cjs/autocomplete/parts/{controls → container}/useKeyboardNavigation.js +18 -24
  14. package/dist/cjs/autocomplete/parts/container/useKeyboardNavigation.js.map +7 -0
  15. package/dist/cjs/autocomplete/parts/menu-list/MenuList.js +5 -25
  16. package/dist/cjs/autocomplete/parts/menu-list/MenuList.js.map +2 -2
  17. package/dist/cjs/autocomplete/parts/menu-list/styled.js +2 -4
  18. package/dist/cjs/autocomplete/parts/menu-list/styled.js.map +2 -2
  19. package/dist/cjs/autocomplete/parts/menu-list/useItemRenderer.js +33 -35
  20. package/dist/cjs/autocomplete/parts/menu-list/useItemRenderer.js.map +2 -2
  21. package/dist/cjs/autocomplete/react-desc-prop-types.js +4 -9
  22. package/dist/cjs/autocomplete/react-desc-prop-types.js.map +2 -2
  23. package/dist/cjs/autocomplete/sharedTypes.js.map +1 -1
  24. package/dist/cjs/autocomplete/{config/constants.js → tests/utils.js} +27 -13
  25. package/dist/cjs/autocomplete/tests/utils.js.map +7 -0
  26. package/dist/cjs/autocomplete/utils/listHelper.js +8 -12
  27. package/dist/cjs/autocomplete/utils/listHelper.js.map +2 -2
  28. package/dist/cjs/combobox/config/useComboBox.js +7 -1
  29. package/dist/cjs/combobox/config/useComboBox.js.map +2 -2
  30. package/dist/cjs/combobox/config/useCorrectOptions.js +10 -29
  31. package/dist/cjs/combobox/config/useCorrectOptions.js.map +2 -2
  32. package/dist/cjs/combobox/parts/A11yFocusedOption.js +3 -3
  33. package/dist/cjs/combobox/parts/A11yFocusedOption.js.map +2 -2
  34. package/dist/cjs/combobox/parts/controls/Controls.js +3 -1
  35. package/dist/cjs/combobox/parts/controls/Controls.js.map +2 -2
  36. package/dist/cjs/combobox/parts/controls-input/ControlsInput.js +2 -1
  37. package/dist/cjs/combobox/parts/controls-input/ControlsInput.js.map +2 -2
  38. package/dist/cjs/combobox/parts/controls-input/styled.js +3 -0
  39. package/dist/cjs/combobox/parts/controls-input/styled.js.map +2 -2
  40. package/dist/cjs/combobox/parts/controls-input/useControlsInput.js +4 -5
  41. package/dist/cjs/combobox/parts/controls-input/useControlsInput.js.map +2 -2
  42. package/dist/cjs/combobox/parts/controls-input/useKeyboardNavigation.js +32 -29
  43. package/dist/cjs/combobox/parts/controls-input/useKeyboardNavigation.js.map +2 -2
  44. package/dist/cjs/combobox/parts/controls-input/useMaskedOnChange.js +8 -5
  45. package/dist/cjs/combobox/parts/controls-input/useMaskedOnChange.js.map +2 -2
  46. package/dist/cjs/combobox/parts/header-list/useHeaderListHandlers.js +4 -4
  47. package/dist/cjs/combobox/parts/header-list/useHeaderListHandlers.js.map +2 -2
  48. package/dist/cjs/combobox/parts/menu-list/MenuList.js +13 -10
  49. package/dist/cjs/combobox/parts/menu-list/MenuList.js.map +2 -2
  50. package/dist/cjs/combobox/parts/menu-list/styled.js +2 -1
  51. package/dist/cjs/combobox/parts/menu-list/styled.js.map +2 -2
  52. package/dist/cjs/combobox/parts/menu-list/useItemRenderer.js +7 -7
  53. package/dist/cjs/combobox/parts/menu-list/useItemRenderer.js.map +2 -2
  54. package/dist/cjs/combobox/parts/menu-list/useMenuListSetFocusOption.js +7 -7
  55. package/dist/cjs/combobox/parts/menu-list/useMenuListSetFocusOption.js.map +2 -2
  56. package/dist/cjs/combobox/react-desc-prop-types.js +2 -1
  57. package/dist/cjs/combobox/react-desc-prop-types.js.map +2 -2
  58. package/dist/cjs/combobox/utils/listHelper.js +34 -11
  59. package/dist/cjs/combobox/utils/listHelper.js.map +2 -2
  60. package/dist/cjs/mask-hook/hooks/index.js +1 -1
  61. package/dist/cjs/mask-hook/hooks/index.js.map +1 -1
  62. package/dist/cjs/mask-hook/hooks/useNumberMask.js +5 -0
  63. package/dist/cjs/mask-hook/hooks/useNumberMask.js.map +2 -2
  64. package/dist/cjs/mask-hook/hooks/usePhoneMask.js +5 -0
  65. package/dist/cjs/mask-hook/hooks/usePhoneMask.js.map +2 -2
  66. package/dist/cjs/mask-hook/hooks/useSSNMask.js +5 -0
  67. package/dist/cjs/mask-hook/hooks/useSSNMask.js.map +2 -2
  68. package/dist/cjs/mask-hook/hooks/{useZipCode.js → useZipCodeMask.js} +13 -8
  69. package/dist/cjs/mask-hook/hooks/{useZipCode.js.map → useZipCodeMask.js.map} +3 -3
  70. package/dist/esm/autocomplete/Autocomplete.js +2 -3
  71. package/dist/esm/autocomplete/Autocomplete.js.map +2 -2
  72. package/dist/esm/autocomplete/AutocompleteCTX.js +3 -14
  73. package/dist/esm/autocomplete/AutocompleteCTX.js.map +2 -2
  74. package/dist/esm/autocomplete/AutocompleteDataTestids.js +1 -7
  75. package/dist/esm/autocomplete/AutocompleteDataTestids.js.map +2 -2
  76. package/dist/esm/autocomplete/config/useAutocomplete.js +24 -12
  77. package/dist/esm/autocomplete/config/useAutocomplete.js.map +3 -3
  78. package/dist/esm/autocomplete/parts/container/Container.js +28 -18
  79. package/dist/esm/autocomplete/parts/container/Container.js.map +2 -2
  80. package/dist/esm/autocomplete/parts/container/styled.js +0 -5
  81. package/dist/esm/autocomplete/parts/container/styled.js.map +2 -2
  82. package/dist/esm/autocomplete/parts/{controls → container}/useKeyboardNavigation.js +18 -24
  83. package/dist/esm/autocomplete/parts/container/useKeyboardNavigation.js.map +7 -0
  84. package/dist/esm/autocomplete/parts/menu-list/MenuList.js +6 -26
  85. package/dist/esm/autocomplete/parts/menu-list/MenuList.js.map +2 -2
  86. package/dist/esm/autocomplete/parts/menu-list/styled.js +2 -4
  87. package/dist/esm/autocomplete/parts/menu-list/styled.js.map +2 -2
  88. package/dist/esm/autocomplete/parts/menu-list/useItemRenderer.js +33 -35
  89. package/dist/esm/autocomplete/parts/menu-list/useItemRenderer.js.map +2 -2
  90. package/dist/esm/autocomplete/react-desc-prop-types.js +4 -9
  91. package/dist/esm/autocomplete/react-desc-prop-types.js.map +2 -2
  92. package/dist/esm/autocomplete/tests/utils.js +27 -0
  93. package/dist/esm/autocomplete/tests/utils.js.map +7 -0
  94. package/dist/esm/autocomplete/utils/listHelper.js +8 -12
  95. package/dist/esm/autocomplete/utils/listHelper.js.map +2 -2
  96. package/dist/esm/combobox/config/useComboBox.js +7 -1
  97. package/dist/esm/combobox/config/useComboBox.js.map +2 -2
  98. package/dist/esm/combobox/config/useCorrectOptions.js +11 -30
  99. package/dist/esm/combobox/config/useCorrectOptions.js.map +2 -2
  100. package/dist/esm/combobox/parts/A11yFocusedOption.js +3 -3
  101. package/dist/esm/combobox/parts/A11yFocusedOption.js.map +2 -2
  102. package/dist/esm/combobox/parts/controls/Controls.js +3 -1
  103. package/dist/esm/combobox/parts/controls/Controls.js.map +2 -2
  104. package/dist/esm/combobox/parts/controls-input/ControlsInput.js +2 -1
  105. package/dist/esm/combobox/parts/controls-input/ControlsInput.js.map +2 -2
  106. package/dist/esm/combobox/parts/controls-input/styled.js +3 -0
  107. package/dist/esm/combobox/parts/controls-input/styled.js.map +2 -2
  108. package/dist/esm/combobox/parts/controls-input/useControlsInput.js +4 -5
  109. package/dist/esm/combobox/parts/controls-input/useControlsInput.js.map +2 -2
  110. package/dist/esm/combobox/parts/controls-input/useKeyboardNavigation.js +32 -29
  111. package/dist/esm/combobox/parts/controls-input/useKeyboardNavigation.js.map +2 -2
  112. package/dist/esm/combobox/parts/controls-input/useMaskedOnChange.js +8 -5
  113. package/dist/esm/combobox/parts/controls-input/useMaskedOnChange.js.map +2 -2
  114. package/dist/esm/combobox/parts/header-list/useHeaderListHandlers.js +4 -4
  115. package/dist/esm/combobox/parts/header-list/useHeaderListHandlers.js.map +2 -2
  116. package/dist/esm/combobox/parts/menu-list/MenuList.js +13 -10
  117. package/dist/esm/combobox/parts/menu-list/MenuList.js.map +2 -2
  118. package/dist/esm/combobox/parts/menu-list/styled.js +2 -1
  119. package/dist/esm/combobox/parts/menu-list/styled.js.map +2 -2
  120. package/dist/esm/combobox/parts/menu-list/useItemRenderer.js +7 -7
  121. package/dist/esm/combobox/parts/menu-list/useItemRenderer.js.map +2 -2
  122. package/dist/esm/combobox/parts/menu-list/useMenuListSetFocusOption.js +7 -7
  123. package/dist/esm/combobox/parts/menu-list/useMenuListSetFocusOption.js.map +2 -2
  124. package/dist/esm/combobox/react-desc-prop-types.js +2 -1
  125. package/dist/esm/combobox/react-desc-prop-types.js.map +2 -2
  126. package/dist/esm/combobox/utils/listHelper.js +34 -11
  127. package/dist/esm/combobox/utils/listHelper.js.map +2 -2
  128. package/dist/esm/mask-hook/hooks/index.js +1 -1
  129. package/dist/esm/mask-hook/hooks/index.js.map +1 -1
  130. package/dist/esm/mask-hook/hooks/useNumberMask.js +5 -0
  131. package/dist/esm/mask-hook/hooks/useNumberMask.js.map +2 -2
  132. package/dist/esm/mask-hook/hooks/usePhoneMask.js +5 -0
  133. package/dist/esm/mask-hook/hooks/usePhoneMask.js.map +2 -2
  134. package/dist/esm/mask-hook/hooks/useSSNMask.js +5 -0
  135. package/dist/esm/mask-hook/hooks/useSSNMask.js.map +2 -2
  136. package/dist/esm/mask-hook/hooks/{useZipCode.js → useZipCodeMask.js} +10 -5
  137. package/dist/esm/mask-hook/hooks/{useZipCode.js.map → useZipCodeMask.js.map} +3 -3
  138. package/package.json +15 -15
  139. package/dist/cjs/autocomplete/config/constants.js.map +0 -7
  140. package/dist/cjs/autocomplete/config/useGetPropsWithDefault.js +0 -37
  141. package/dist/cjs/autocomplete/config/useGetPropsWithDefault.js.map +0 -7
  142. package/dist/cjs/autocomplete/index.d.js +0 -27
  143. package/dist/cjs/autocomplete/index.d.js.map +0 -7
  144. package/dist/cjs/autocomplete/parts/a11y-messages/MultiAllyMessages.js +0 -50
  145. package/dist/cjs/autocomplete/parts/a11y-messages/MultiAllyMessages.js.map +0 -7
  146. package/dist/cjs/autocomplete/parts/a11y-messages/SingleAllyMessages.js +0 -48
  147. package/dist/cjs/autocomplete/parts/a11y-messages/SingleAllyMessages.js.map +0 -7
  148. package/dist/cjs/autocomplete/parts/a11y-messages/index.js +0 -37
  149. package/dist/cjs/autocomplete/parts/a11y-messages/index.js.map +0 -7
  150. package/dist/cjs/autocomplete/parts/a11y-messages/styled.js +0 -41
  151. package/dist/cjs/autocomplete/parts/a11y-messages/styled.js.map +0 -7
  152. package/dist/cjs/autocomplete/parts/controls/Controls.js +0 -72
  153. package/dist/cjs/autocomplete/parts/controls/Controls.js.map +0 -7
  154. package/dist/cjs/autocomplete/parts/controls/index.js +0 -35
  155. package/dist/cjs/autocomplete/parts/controls/index.js.map +0 -7
  156. package/dist/cjs/autocomplete/parts/controls/styled.js +0 -108
  157. package/dist/cjs/autocomplete/parts/controls/styled.js.map +0 -7
  158. package/dist/cjs/autocomplete/parts/controls/useControlsInput.js +0 -62
  159. package/dist/cjs/autocomplete/parts/controls/useControlsInput.js.map +0 -7
  160. package/dist/cjs/autocomplete/parts/controls/useKeyboardNavigation.js.map +0 -7
  161. package/dist/cjs/autocomplete/parts/controls/useMaskedOnChange.js +0 -48
  162. package/dist/cjs/autocomplete/parts/controls/useMaskedOnChange.js.map +0 -7
  163. package/dist/cjs/autocomplete/parts/menu-list/useMenuList.js +0 -82
  164. package/dist/cjs/autocomplete/parts/menu-list/useMenuList.js.map +0 -7
  165. package/dist/cjs/autocomplete/propTypes.js +0 -56
  166. package/dist/cjs/autocomplete/propTypes.js.map +0 -7
  167. package/dist/cjs/autocomplete/utils/hooks/useKeyboardNavigation.js +0 -108
  168. package/dist/cjs/autocomplete/utils/hooks/useKeyboardNavigation.js.map +0 -7
  169. package/dist/cjs/autocomplete/utils/hooks/useOnElementResize.js +0 -56
  170. package/dist/cjs/autocomplete/utils/hooks/useOnElementResize.js.map +0 -7
  171. package/dist/esm/autocomplete/config/constants.js +0 -13
  172. package/dist/esm/autocomplete/config/constants.js.map +0 -7
  173. package/dist/esm/autocomplete/config/useGetPropsWithDefault.js +0 -8
  174. package/dist/esm/autocomplete/config/useGetPropsWithDefault.js.map +0 -7
  175. package/dist/esm/autocomplete/index.d.js +0 -2
  176. package/dist/esm/autocomplete/index.d.js.map +0 -7
  177. package/dist/esm/autocomplete/parts/a11y-messages/MultiAllyMessages.js +0 -21
  178. package/dist/esm/autocomplete/parts/a11y-messages/MultiAllyMessages.js.map +0 -7
  179. package/dist/esm/autocomplete/parts/a11y-messages/SingleAllyMessages.js +0 -19
  180. package/dist/esm/autocomplete/parts/a11y-messages/SingleAllyMessages.js.map +0 -7
  181. package/dist/esm/autocomplete/parts/a11y-messages/index.js +0 -8
  182. package/dist/esm/autocomplete/parts/a11y-messages/index.js.map +0 -7
  183. package/dist/esm/autocomplete/parts/a11y-messages/styled.js +0 -12
  184. package/dist/esm/autocomplete/parts/a11y-messages/styled.js.map +0 -7
  185. package/dist/esm/autocomplete/parts/controls/Controls.js +0 -43
  186. package/dist/esm/autocomplete/parts/controls/Controls.js.map +0 -7
  187. package/dist/esm/autocomplete/parts/controls/index.js +0 -6
  188. package/dist/esm/autocomplete/parts/controls/index.js.map +0 -7
  189. package/dist/esm/autocomplete/parts/controls/styled.js +0 -79
  190. package/dist/esm/autocomplete/parts/controls/styled.js.map +0 -7
  191. package/dist/esm/autocomplete/parts/controls/useControlsInput.js +0 -33
  192. package/dist/esm/autocomplete/parts/controls/useControlsInput.js.map +0 -7
  193. package/dist/esm/autocomplete/parts/controls/useKeyboardNavigation.js.map +0 -7
  194. package/dist/esm/autocomplete/parts/controls/useMaskedOnChange.js +0 -19
  195. package/dist/esm/autocomplete/parts/controls/useMaskedOnChange.js.map +0 -7
  196. package/dist/esm/autocomplete/parts/menu-list/useMenuList.js +0 -53
  197. package/dist/esm/autocomplete/parts/menu-list/useMenuList.js.map +0 -7
  198. package/dist/esm/autocomplete/propTypes.js +0 -27
  199. package/dist/esm/autocomplete/propTypes.js.map +0 -7
  200. package/dist/esm/autocomplete/utils/hooks/useKeyboardNavigation.js +0 -79
  201. package/dist/esm/autocomplete/utils/hooks/useKeyboardNavigation.js.map +0 -7
  202. package/dist/esm/autocomplete/utils/hooks/useOnElementResize.js +0 -27
  203. package/dist/esm/autocomplete/utils/hooks/useOnElementResize.js.map +0 -7
@@ -49,53 +49,51 @@ __export(useItemRenderer_exports, {
49
49
  var React = __toESM(require("react"));
50
50
  var import_react = __toESM(require("react"));
51
51
  var import_MenuItem = require("@elliemae/ds-common/MenuItem");
52
- var import_AutocompleteCTX = require("../../AutocompleteCTX");
53
- var import_listHelper = require("../../utils/listHelper");
52
+ var import_AutocompleteCTX = __toESM(require("../../AutocompleteCTX"));
54
53
  var import_AutocompleteDataTestids = require("../../AutocompleteDataTestids");
55
54
  const useItemRenderer = () => {
56
55
  const {
57
- props: { options, onChange, selectedValues, onFilter },
56
+ props: { options, onSelect },
58
57
  inputRef,
59
58
  setShowPopover,
60
59
  focusOptionIdx,
61
60
  virtualListHelpers
62
- } = (0, import_react.useContext)(import_AutocompleteCTX.AutocompleteContext);
63
- const { virtualItems } = virtualListHelpers;
61
+ } = (0, import_react.useContext)(import_AutocompleteCTX.default);
64
62
  const handleClick = (0, import_react.useCallback)((option, e) => {
65
- if (inputRef.current)
66
- inputRef.current.value = option.label;
67
- onFilter(option.label);
68
- onChange(option.label);
63
+ onSelect(option.label, e);
69
64
  setShowPopover(false);
70
- inputRef.current?.focus();
71
65
  e.stopPropagation();
72
66
  e.preventDefault();
73
- }, [onFilter, onChange, setShowPopover, inputRef]);
74
- const handleOnMouseDown = (0, import_react.useCallback)((e) => {
75
- e.preventDefault();
76
- }, []);
77
- const ItemRenderer = (0, import_react.useMemo)(() => virtualItems.map((vItem) => {
78
- const option = options[vItem.index];
79
- const generalProps = {
80
- wrapperStyles: { position: "absolute", top: vItem.start, left: 0, width: "100%" },
81
- key: `${option.dsId}`,
82
- innerRef: vItem.measureRef
83
- };
84
- if (option.type === "option") {
85
- return /* @__PURE__ */ import_react.default.createElement(import_MenuItem.SingleMenuItem, __spreadProps(__spreadValues({}, generalProps), {
86
- value: option.value,
87
- label: option.label,
88
- dataTestid: import_AutocompleteDataTestids.AutocompleteDataTestid.OPTION,
89
- disabled: option.disabled,
90
- onClick: (e) => handleClick(option, e),
91
- onMouseDown: handleOnMouseDown,
92
- isActive: option.dsId === focusOptionIdx,
93
- isSelected: (0, import_listHelper.isSelected)(selectedValues, option)
94
- }));
67
+ }, [onSelect, setShowPopover]);
68
+ return (0, import_react.useMemo)(() => {
69
+ if (virtualListHelpers) {
70
+ return virtualListHelpers.virtualItems.map((vItem) => {
71
+ const option = options[vItem.index];
72
+ const generalProps = {
73
+ wrapperStyles: { position: "absolute", top: vItem.start, left: 0, width: "100%" },
74
+ key: `${option.dsId}`,
75
+ innerRef: vItem.measureRef
76
+ };
77
+ if (option.type === "section") {
78
+ return /* @__PURE__ */ import_react.default.createElement(import_MenuItem.Section, __spreadValues({
79
+ label: option.label
80
+ }, generalProps));
81
+ }
82
+ if (option.type === "option") {
83
+ return /* @__PURE__ */ import_react.default.createElement(import_MenuItem.SingleMenuItem, __spreadProps(__spreadValues({}, generalProps), {
84
+ value: option.value,
85
+ label: option.label,
86
+ dataTestid: import_AutocompleteDataTestids.AutocompleteDataTestid.OPTION,
87
+ disabled: option.disabled,
88
+ onClick: (e) => handleClick(option, e),
89
+ isActive: option.dsId === focusOptionIdx
90
+ }));
91
+ }
92
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null);
93
+ });
95
94
  }
96
- return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null);
97
- }), [options, focusOptionIdx, selectedValues, inputRef, virtualItems]);
98
- return ItemRenderer;
95
+ return null;
96
+ }, [options, focusOptionIdx, inputRef, virtualListHelpers]);
99
97
  };
100
98
  module.exports = __toCommonJS(useItemRenderer_exports);
101
99
  //# sourceMappingURL=useItemRenderer.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/autocomplete/parts/menu-list/useItemRenderer.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useMemo, useContext, useCallback } from 'react';\nimport { VirtualItem } from 'react-virtual';\n\nimport { SingleMenuItem } from '@elliemae/ds-common/MenuItem';\nimport { AutocompleteContext } from '../../AutocompleteCTX';\nimport { isSelected } from '../../utils/listHelper';\nimport { AutocompleteDataTestid } from '../../AutocompleteDataTestids';\nimport { CBOptionT } from '../../index.d';\n\nconst useItemRenderer = (): React.ReactNode[] => {\n const {\n props: { options, onChange, selectedValues, onFilter },\n inputRef,\n setShowPopover,\n focusOptionIdx,\n virtualListHelpers,\n } = useContext(AutocompleteContext);\n\n const { virtualItems }: { virtualItems: VirtualItem[] } = virtualListHelpers;\n\n const handleClick = useCallback(\n (option: CBOptionT, e: Event) => {\n if (inputRef.current) inputRef.current.value = option.label;\n onFilter(option.label);\n onChange(option.label);\n setShowPopover(false);\n inputRef.current?.focus();\n e.stopPropagation();\n e.preventDefault();\n },\n [onFilter, onChange, setShowPopover, inputRef],\n );\n\n const handleOnMouseDown = useCallback((e: React.MouseEvent<HTMLLIElement>) => {\n e.preventDefault();\n }, []);\n\n const ItemRenderer = useMemo(\n (): React.ReactNode[] =>\n virtualItems.map((vItem) => {\n const option = options[vItem.index];\n const generalProps = {\n wrapperStyles: { position: 'absolute', top: vItem.start, left: 0, width: '100%' },\n key: `${option.dsId}`,\n innerRef: vItem.measureRef,\n };\n\n if (option.type === 'option') {\n return (\n <SingleMenuItem\n {...generalProps}\n value={option.value}\n label={option.label}\n dataTestid={AutocompleteDataTestid.OPTION}\n disabled={option.disabled}\n onClick={(e: Event) => handleClick(option, e)}\n onMouseDown={handleOnMouseDown}\n isActive={option.dsId === focusOptionIdx}\n isSelected={isSelected(selectedValues, option)}\n />\n );\n }\n return <></>;\n }),\n [options, focusOptionIdx, selectedValues, inputRef, virtualItems],\n );\n\n return ItemRenderer;\n};\n\nexport { useItemRenderer };\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADCvB,mBAAwD;AAGxD,sBAA+B;AAC/B,6BAAoC;AACpC,wBAA2B;AAC3B,qCAAuC;AAGvC,MAAM,kBAAkB,MAAyB;AAC/C,QAAM;AAAA,IACJ,OAAO,EAAE,SAAS,UAAU,gBAAgB;AAAA,IAC5C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,6BAAW;AAEf,QAAM,EAAE,iBAAkD;AAE1D,QAAM,cAAc,8BAClB,CAAC,QAAmB,MAAa;AAC/B,QAAI,SAAS;AAAS,eAAS,QAAQ,QAAQ,OAAO;AACtD,aAAS,OAAO;AAChB,aAAS,OAAO;AAChB,mBAAe;AACf,aAAS,SAAS;AAClB,MAAE;AACF,MAAE;AAAA,KAEJ,CAAC,UAAU,UAAU,gBAAgB;AAGvC,QAAM,oBAAoB,8BAAY,CAAC,MAAuC;AAC5E,MAAE;AAAA,KACD;AAEH,QAAM,eAAe,0BACnB,MACE,aAAa,IAAI,CAAC,UAAU;AAC1B,UAAM,SAAS,QAAQ,MAAM;AAC7B,UAAM,eAAe;AAAA,MACnB,eAAe,EAAE,UAAU,YAAY,KAAK,MAAM,OAAO,MAAM,GAAG,OAAO;AAAA,MACzE,KAAK,GAAG,OAAO;AAAA,MACf,UAAU,MAAM;AAAA;AAGlB,QAAI,OAAO,SAAS,UAAU;AAC5B,aACE,mDAAC,gCAAD,iCACM,eADN;AAAA,QAEE,OAAO,OAAO;AAAA,QACd,OAAO,OAAO;AAAA,QACd,YAAY,sDAAuB;AAAA,QACnC,UAAU,OAAO;AAAA,QACjB,SAAS,CAAC,MAAa,YAAY,QAAQ;AAAA,QAC3C,aAAa;AAAA,QACb,UAAU,OAAO,SAAS;AAAA,QAC1B,YAAY,kCAAW,gBAAgB;AAAA;AAAA;AAI7C,WAAO;AAAA,MAEX,CAAC,SAAS,gBAAgB,gBAAgB,UAAU;AAGtD,SAAO;AAAA;",
4
+ "sourcesContent": ["/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useMemo, useContext, useCallback } from 'react';\nimport { SingleMenuItem, Section } from '@elliemae/ds-common/MenuItem';\nimport AutocompleteContext from '../../AutocompleteCTX';\nimport { AutocompleteDataTestid } from '../../AutocompleteDataTestids';\nimport { DSAutocompleteT } from '../../react-desc-prop-types';\n\nexport const useItemRenderer = (): Array<JSX.Element> | null => {\n const {\n props: { options, onSelect },\n inputRef,\n setShowPopover,\n focusOptionIdx,\n virtualListHelpers,\n } = useContext(AutocompleteContext);\n\n const handleClick = useCallback(\n (option: DSAutocompleteT.ItemOption, e: React.ChangeEvent<HTMLInputElement>) => {\n onSelect(option.label, e);\n setShowPopover(false);\n e.stopPropagation();\n e.preventDefault();\n },\n [onSelect, setShowPopover],\n );\n\n return useMemo(() => {\n if (virtualListHelpers) {\n return virtualListHelpers.virtualItems.map((vItem) => {\n const option = options[vItem.index];\n const generalProps = {\n wrapperStyles: { position: 'absolute', top: vItem.start, left: 0, width: '100%' },\n key: `${option.dsId}`,\n innerRef: vItem.measureRef,\n };\n if (option.type === 'section') {\n return <Section label={option.label} {...generalProps} />;\n }\n if (option.type === 'option') {\n return (\n <SingleMenuItem\n {...generalProps}\n value={option.value}\n label={option.label}\n dataTestid={AutocompleteDataTestid.OPTION}\n disabled={option.disabled}\n onClick={(e: React.ChangeEvent<HTMLInputElement>) => handleClick(option, e)}\n isActive={option.dsId === focusOptionIdx}\n />\n );\n }\n return <></>;\n });\n }\n return null;\n }, [options, focusOptionIdx, inputRef, virtualListHelpers]);\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADCvB,mBAAwD;AACxD,sBAAwC;AACxC,6BAAgC;AAChC,qCAAuC;AAGhC,MAAM,kBAAkB,MAAiC;AAC9D,QAAM;AAAA,IACJ,OAAO,EAAE,SAAS;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,6BAAW;AAEf,QAAM,cAAc,8BAClB,CAAC,QAAoC,MAA2C;AAC9E,aAAS,OAAO,OAAO;AACvB,mBAAe;AACf,MAAE;AACF,MAAE;AAAA,KAEJ,CAAC,UAAU;AAGb,SAAO,0BAAQ,MAAM;AACnB,QAAI,oBAAoB;AACtB,aAAO,mBAAmB,aAAa,IAAI,CAAC,UAAU;AACpD,cAAM,SAAS,QAAQ,MAAM;AAC7B,cAAM,eAAe;AAAA,UACnB,eAAe,EAAE,UAAU,YAAY,KAAK,MAAM,OAAO,MAAM,GAAG,OAAO;AAAA,UACzE,KAAK,GAAG,OAAO;AAAA,UACf,UAAU,MAAM;AAAA;AAElB,YAAI,OAAO,SAAS,WAAW;AAC7B,iBAAO,mDAAC,yBAAD;AAAA,YAAS,OAAO,OAAO;AAAA,aAAW;AAAA;AAE3C,YAAI,OAAO,SAAS,UAAU;AAC5B,iBACE,mDAAC,gCAAD,iCACM,eADN;AAAA,YAEE,OAAO,OAAO;AAAA,YACd,OAAO,OAAO;AAAA,YACd,YAAY,sDAAuB;AAAA,YACnC,UAAU,OAAO;AAAA,YACjB,SAAS,CAAC,MAA2C,YAAY,QAAQ;AAAA,YACzE,UAAU,OAAO,SAAS;AAAA;AAAA;AAIhC,eAAO;AAAA;AAAA;AAGX,WAAO;AAAA,KACN,CAAC,SAAS,gBAAgB,UAAU;AAAA;",
6
6
  "names": []
7
7
  }
@@ -27,20 +27,15 @@ var __toCommonJS = /* @__PURE__ */ ((cache) => {
27
27
  })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
28
28
  var react_desc_prop_types_exports = {};
29
29
  __export(react_desc_prop_types_exports, {
30
- noop: () => noop,
31
30
  propTypes: () => propTypes
32
31
  });
33
32
  var React = __toESM(require("react"));
34
33
  var import_ds_props_helpers = require("@elliemae/ds-props-helpers");
35
- function noop(..._args) {
36
- }
37
34
  const propTypes = {
38
- placeholder: import_ds_props_helpers.PropTypes.string.description("input s placeholder value").defaultValue(""),
39
- options: import_ds_props_helpers.PropTypes.oneOfType([import_ds_props_helpers.PropTypes.array, import_ds_props_helpers.PropTypes.object]).description("List of options").defaultValue([]),
40
- value: import_ds_props_helpers.PropTypes.oneOfType([import_ds_props_helpers.PropTypes.string]).description("Array of option or single option selected"),
41
- autoFocus: import_ds_props_helpers.PropTypes.bool.description("Whether the combo box uses auto focus or not").defaultValue("false"),
42
- hasError: import_ds_props_helpers.PropTypes.bool.description("Whether the combo box has error or not").defaultValue("false"),
43
- onChange: import_ds_props_helpers.PropTypes.func.description("function triggered when an option is selected it will send the options selected").defaultValue("")
35
+ options: import_ds_props_helpers.PropTypes.oneOfType([import_ds_props_helpers.PropTypes.array, import_ds_props_helpers.PropTypes.object]).isRequired.description("List of options").defaultValue([]),
36
+ filter: import_ds_props_helpers.PropTypes.string.isRequired.description("String value to filter the options").defaultValue(""),
37
+ onSelect: import_ds_props_helpers.PropTypes.func.isRequired.description("function triggered when an option is selected it will send the options selected").defaultValue(""),
38
+ children: import_ds_props_helpers.PropTypes.node.isRequired.description("React component to apply autocomplete functionality").defaultValue("")
44
39
  };
45
40
  module.exports = __toCommonJS(react_desc_prop_types_exports);
46
41
  //# sourceMappingURL=react-desc-prop-types.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/autocomplete/react-desc-prop-types.ts", "../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-unused-vars */\nimport React from 'react';\nimport { PropTypes } from '@elliemae/ds-props-helpers';\nimport { DSMaskT } from '../mask-hook';\nexport function noop<T extends unknown[]>(..._args: T): void {}\n\nexport declare namespace DSAutocompleteT {\n export interface CommonItemOptions {\n dsId: string;\n disabled?: boolean;\n render?: React.ComponentType<unknown>;\n }\n export interface ItemSeparatorOptions extends CommonItemOptions {\n type: 'separator';\n }\n\n export interface ItemSectionOptions extends CommonItemOptions {\n type: 'section';\n label: string;\n }\n\n export interface ItemOption extends CommonItemOptions {\n value: string;\n label: string;\n type: 'option';\n }\n\n export type OptionTypes = ItemOption | ItemSectionOptions | ItemSeparatorOptions;\n\n export type SelectedOptionsT = ItemOption[] | ItemOption | null;\n export interface PropsOptional {\n placeholder?: string;\n autoFocus?: boolean;\n onFilter?: (value: string) => void;\n }\n\n export interface RequiredProps {\n options: OptionTypes[];\n value: string;\n }\n export interface DefaultProps {\n startPlacementPreference: string;\n placementOrderPreference: string[];\n hasError: boolean;\n withoutPortal: boolean;\n zIndex: number;\n disabled: boolean;\n innerRef: React.RefObject<HTMLInputElement>;\n inputProps: object;\n }\n\n export interface Props extends Partial<DefaultProps>, RequiredProps, PropsOptional {}\n\n export interface InternalProps extends DefaultProps, RequiredProps, PropsOptional {}\n}\n\nexport const propTypes = {\n placeholder: PropTypes.string.description('input s placeholder value').defaultValue(''),\n options: PropTypes.oneOfType([PropTypes.array, PropTypes.object]).description('List of options').defaultValue([]),\n value: PropTypes.oneOfType([PropTypes.string]).description('Array of option or single option selected'),\n autoFocus: PropTypes.bool.description('Whether the combo box uses auto focus or not').defaultValue('false'),\n hasError: PropTypes.bool.description('Whether the combo box has error or not').defaultValue('false'),\n onChange: PropTypes.func\n .description('function triggered when an option is selected it will send the options selected')\n .defaultValue(''),\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADGvB,8BAA0B;AAEnB,iBAAsC,OAAgB;AAAA;AAoDtD,MAAM,YAAY;AAAA,EACvB,aAAa,kCAAU,OAAO,YAAY,6BAA6B,aAAa;AAAA,EACpF,SAAS,kCAAU,UAAU,CAAC,kCAAU,OAAO,kCAAU,SAAS,YAAY,mBAAmB,aAAa;AAAA,EAC9G,OAAO,kCAAU,UAAU,CAAC,kCAAU,SAAS,YAAY;AAAA,EAC3D,WAAW,kCAAU,KAAK,YAAY,gDAAgD,aAAa;AAAA,EACnG,UAAU,kCAAU,KAAK,YAAY,0CAA0C,aAAa;AAAA,EAC5F,UAAU,kCAAU,KACjB,YAAY,mFACZ,aAAa;AAAA;",
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-unused-vars */\nimport React from 'react';\nimport { PropTypes } from '@elliemae/ds-props-helpers';\n\nexport declare namespace DSAutocompleteT {\n export interface CommonItemOptions {\n dsId: string;\n disabled?: boolean;\n render?: React.ComponentType<unknown>;\n }\n export interface ItemSeparatorOptions extends CommonItemOptions {\n type: 'separator';\n }\n\n export interface ItemSectionOptions extends CommonItemOptions {\n type: 'section';\n label: string;\n }\n\n export interface ItemOption extends CommonItemOptions {\n value: string;\n label: string;\n type: 'option';\n }\n\n export type OptionTypes = ItemOption | ItemSectionOptions | ItemSeparatorOptions;\n\n export type SelectedOptionsT = ItemOption[] | ItemOption | null;\n\n export interface RequiredProps {\n options: OptionTypes[];\n children: React.ReactChild;\n filter: string;\n onSelect: (suggestedValue: string | number, e: React.KeyboardEvent<HTMLInputElement>) => void;\n }\n export interface DefaultProps {\n startPlacementPreference: string;\n placementOrderPreference: string[];\n withoutPortal: boolean;\n zIndex: number;\n }\n\n export interface Props extends Partial<DefaultProps>, RequiredProps {}\n\n export interface InternalProps extends DefaultProps, RequiredProps {}\n}\n\nexport const propTypes = {\n options: PropTypes.oneOfType([PropTypes.array, PropTypes.object])\n .isRequired.description('List of options')\n .defaultValue([]),\n filter: PropTypes.string.isRequired.description('String value to filter the options').defaultValue(''),\n onSelect: PropTypes.func.isRequired\n .description('function triggered when an option is selected it will send the options selected')\n .defaultValue(''),\n children: PropTypes.node.isRequired\n .description('React component to apply autocomplete functionality')\n .defaultValue(''),\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADGvB,8BAA0B;AA6CnB,MAAM,YAAY;AAAA,EACvB,SAAS,kCAAU,UAAU,CAAC,kCAAU,OAAO,kCAAU,SACtD,WAAW,YAAY,mBACvB,aAAa;AAAA,EAChB,QAAQ,kCAAU,OAAO,WAAW,YAAY,sCAAsC,aAAa;AAAA,EACnG,UAAU,kCAAU,KAAK,WACtB,YAAY,mFACZ,aAAa;AAAA,EAChB,UAAU,kCAAU,KAAK,WACtB,YAAY,uDACZ,aAAa;AAAA;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/autocomplete/sharedTypes.ts", "../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import { useVirtual } from 'react-virtual';\nimport { DSAutocompleteT } from './react-desc-prop-types';\n\nexport declare namespace DSAutoCompleteInternalsT {\n export interface AutocompleteContext {\n props: DSAutocompleteT.InternalProps;\n virtualListHelpers?: ReturnType<typeof useVirtual>;\n showPopover: boolean;\n setShowPopover: React.Dispatch<React.SetStateAction<boolean>>;\n referenceElement: HTMLElement | null;\n setReferenceElement: React.Dispatch<React.SetStateAction<HTMLElement | null>>;\n scrollOptionIntoView: (dsId: string, opts?: any) => void;\n inputRef: React.RefObject<HTMLInputElement>;\n listRef: React.RefObject<HTMLDivElement>;\n wrapperListRef: React.RefObject<HTMLDivElement>;\n controlsWrapperRef: React.RefObject<HTMLDivElement>;\n focusOptionIdx: string;\n setCurrentOption: React.Dispatch<React.SetStateAction<string>>;\n }\n}\n", "import * as React from 'react';\nexport { React };\n"],
4
+ "sourcesContent": ["import React from 'react';\nimport { useVirtual } from 'react-virtual';\nimport { DSAutocompleteT } from './react-desc-prop-types';\n\nexport declare namespace DSAutoCompleteInternalsT {\n export interface AutocompleteContext {\n props: DSAutocompleteT.InternalProps;\n virtualListHelpers?: ReturnType<typeof useVirtual>;\n showPopover: boolean;\n setShowPopover: React.Dispatch<React.SetStateAction<boolean>>;\n referenceElement: HTMLElement | null;\n setReferenceElement: React.Dispatch<React.SetStateAction<HTMLElement | null>>;\n scrollOptionIntoView: (dsId: string, opts?: any) => void;\n inputRef: React.RefObject<HTMLInputElement>;\n listRef: React.RefObject<HTMLDivElement>;\n focusOptionIdx: string;\n setCurrentOption: React.Dispatch<React.SetStateAction<string>>;\n }\n}\n", "import * as React from 'react';\nexport { React };\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;ACAA,YAAuB;",
6
6
  "names": []
7
7
  }
@@ -25,18 +25,32 @@ var __toCommonJS = /* @__PURE__ */ ((cache) => {
25
25
  return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
26
26
  };
27
27
  })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
28
- var constants_exports = {};
29
- __export(constants_exports, {
30
- DATA_TESTID: () => DATA_TESTID
28
+ var utils_exports = {};
29
+ __export(utils_exports, {
30
+ basicOptions: () => basicOptions
31
31
  });
32
32
  var React = __toESM(require("react"));
33
- const DATA_TESTID = {
34
- COMBOBOX_MENU_LIST: "autocomplete-menu-list",
35
- COMBOBOX_CLEAR_BTN: "autocomplete-clear-btn",
36
- COMBOBOX_ALL_BTN: "autocomplete-all-btn",
37
- COMBOBOX_DROPDOWN_BTN: "autocomplete-dropdown-btn",
38
- COMBOBOX_OPTION: "autocomplete-option",
39
- COMBOBOX: "autocomplete"
40
- };
41
- module.exports = __toCommonJS(constants_exports);
42
- //# sourceMappingURL=constants.js.map
33
+ const basicOptions = [
34
+ {
35
+ dsId: "12",
36
+ type: "section",
37
+ label: "Please Select the appropriate city"
38
+ },
39
+ {
40
+ dsId: "1",
41
+ type: "option",
42
+ label: "44444-4444"
43
+ },
44
+ {
45
+ dsId: "2",
46
+ type: "option",
47
+ label: "44444-5555"
48
+ },
49
+ {
50
+ dsId: "3",
51
+ type: "option",
52
+ label: "44444-6666"
53
+ }
54
+ ];
55
+ module.exports = __toCommonJS(utils_exports);
56
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/autocomplete/tests/utils.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["export const basicOptions = [\n {\n dsId: '12',\n type: 'section',\n label: 'Please Select the appropriate city',\n },\n {\n dsId: '1',\n type: 'option',\n label: '44444-4444',\n },\n {\n dsId: '2',\n type: 'option',\n label: '44444-5555',\n },\n {\n dsId: '3',\n type: 'option',\n label: '44444-6666',\n },\n];\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAhB,MAAM,eAAe;AAAA,EAC1B;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA;AAAA,EAET;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA;AAAA,EAET;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA;AAAA,EAET;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -28,9 +28,9 @@ var __toCommonJS = /* @__PURE__ */ ((cache) => {
28
28
  var listHelper_exports = {};
29
29
  __export(listHelper_exports, {
30
30
  findInCircularList: () => findInCircularList,
31
+ getFirstOption: () => getFirstOption,
31
32
  getOptions: () => getOptions,
32
33
  getSelectableOptions: () => getSelectableOptions,
33
- isSelected: () => isSelected,
34
34
  isSelectedValueEmpty: () => isSelectedValueEmpty,
35
35
  isSelectedValueMultiple: () => isSelectedValueMultiple
36
36
  });
@@ -39,17 +39,6 @@ const getSelectableOptions = (options) => options ? options.filter((option) => o
39
39
  const getOptions = (options) => options ? options.filter((option) => option.type === "option") : [];
40
40
  const isSelectedValueEmpty = (value) => Array.isArray(value) ? value.length === 0 : !value;
41
41
  const isSelectedValueMultiple = (value) => Array.isArray(value);
42
- const isSelected = (value, activeOption) => {
43
- if (isSelectedValueMultiple(value)) {
44
- const multiValue = value;
45
- return multiValue.some((item) => item?.value === activeOption?.value);
46
- }
47
- if (typeof value === "string") {
48
- return false;
49
- }
50
- const singleValue = value;
51
- return singleValue?.value === activeOption.value;
52
- };
53
42
  const findInCircularList = (list, from, criteria, step = 1) => {
54
43
  for (let i = (from + step + list.length) % list.length; i !== from; i = (i + step + list.length) % list.length) {
55
44
  if (criteria(list[i]))
@@ -57,5 +46,12 @@ const findInCircularList = (list, from, criteria, step = 1) => {
57
46
  }
58
47
  return from;
59
48
  };
49
+ const getFirstOption = (options) => {
50
+ for (let i = 0; i < options.length; i += 1)
51
+ if (!["section", "separator"].includes(options[i].type)) {
52
+ return options[i].dsId;
53
+ }
54
+ return "";
55
+ };
60
56
  module.exports = __toCommonJS(listHelper_exports);
61
57
  //# sourceMappingURL=listHelper.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/autocomplete/utils/listHelper.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import { CBOptionsT, CBOptionT } from '../index.d';\n\nexport const getSelectableOptions = (options: Array<CBOptionT>): Array<CBOptionT> =>\n options ? options.filter((option) => option.type === 'option' && !option.disabled) : [];\n\nexport const getOptions = (options: Array<CBOptionT>): Array<CBOptionT> =>\n options ? options.filter((option) => option.type === 'option') : [];\n\nexport const isSelectedValueEmpty = (value: CBOptionT | Array<CBOptionT>): boolean =>\n Array.isArray(value) ? value.length === 0 : !value;\n\nexport const isSelectedValueMultiple = (value: CBOptionT | Array<CBOptionT>): boolean => Array.isArray(value);\n\nexport const isSelected = (value: CBOptionsT, activeOption: CBOptionT): boolean => {\n if (isSelectedValueMultiple(value)) {\n const multiValue = value as CBOptionT[];\n return multiValue.some((item) => item?.value === activeOption?.value);\n }\n if (typeof value === 'string') {\n return false;\n }\n const singleValue = value as CBOptionT;\n return singleValue?.value === activeOption.value;\n};\n\nexport const findInCircularList = <T extends unknown>(\n list: T[],\n from: number,\n criteria: (item: T) => boolean,\n step = 1,\n // eslint-disable-next-line max-params\n): number => {\n for (let i = (from + step + list.length) % list.length; i !== from; i = (i + step + list.length) % list.length) {\n if (criteria(list[i])) return i;\n }\n return from; // return same item\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADEhB,MAAM,uBAAuB,CAAC,YACnC,UAAU,QAAQ,OAAO,CAAC,WAAW,OAAO,SAAS,YAAY,CAAC,OAAO,YAAY;AAEhF,MAAM,aAAa,CAAC,YACzB,UAAU,QAAQ,OAAO,CAAC,WAAW,OAAO,SAAS,YAAY;AAE5D,MAAM,uBAAuB,CAAC,UACnC,MAAM,QAAQ,SAAS,MAAM,WAAW,IAAI,CAAC;AAExC,MAAM,0BAA0B,CAAC,UAAiD,MAAM,QAAQ;AAEhG,MAAM,aAAa,CAAC,OAAmB,iBAAqC;AACjF,MAAI,wBAAwB,QAAQ;AAClC,UAAM,aAAa;AACnB,WAAO,WAAW,KAAK,CAAC,SAAS,MAAM,UAAU,cAAc;AAAA;AAEjE,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA;AAET,QAAM,cAAc;AACpB,SAAO,aAAa,UAAU,aAAa;AAAA;AAGtC,MAAM,qBAAqB,CAChC,MACA,MACA,UACA,OAAO,MAEI;AACX,WAAS,IAAK,QAAO,OAAO,KAAK,UAAU,KAAK,QAAQ,MAAM,MAAM,IAAK,KAAI,OAAO,KAAK,UAAU,KAAK,QAAQ;AAC9G,QAAI,SAAS,KAAK;AAAK,aAAO;AAAA;AAEhC,SAAO;AAAA;",
4
+ "sourcesContent": ["import { DSAutocompleteT } from '../react-desc-prop-types';\n\nexport const getSelectableOptions = (options: Array<CBOptionT>): Array<CBOptionT> =>\n options ? options.filter((option) => option.type === 'option' && !option.disabled) : [];\n\nexport const getOptions = (options: Array<CBOptionT>): Array<CBOptionT> =>\n options ? options.filter((option) => option.type === 'option') : [];\n\nexport const isSelectedValueEmpty = (value: CBOptionT | Array<CBOptionT>): boolean =>\n Array.isArray(value) ? value.length === 0 : !value;\n\nexport const isSelectedValueMultiple = (value: CBOptionT | Array<CBOptionT>): boolean => Array.isArray(value);\n\nexport const findInCircularList = <T extends unknown>(\n list: T[],\n from: number,\n criteria: (item: T) => boolean,\n step = 1,\n // eslint-disable-next-line max-params\n): number => {\n for (let i = (from + step + list.length) % list.length; i !== from; i = (i + step + list.length) % list.length) {\n if (criteria(list[i])) return i;\n }\n return from; // return same item\n};\n\nexport const getFirstOption = (options: DSAutocompleteT.OptionTypes[]) => {\n for (let i = 0; i < options.length; i += 1)\n if (!['section', 'separator'].includes(options[i].type)) {\n return options[i].dsId;\n }\n return '';\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADEhB,MAAM,uBAAuB,CAAC,YACnC,UAAU,QAAQ,OAAO,CAAC,WAAW,OAAO,SAAS,YAAY,CAAC,OAAO,YAAY;AAEhF,MAAM,aAAa,CAAC,YACzB,UAAU,QAAQ,OAAO,CAAC,WAAW,OAAO,SAAS,YAAY;AAE5D,MAAM,uBAAuB,CAAC,UACnC,MAAM,QAAQ,SAAS,MAAM,WAAW,IAAI,CAAC;AAExC,MAAM,0BAA0B,CAAC,UAAiD,MAAM,QAAQ;AAEhG,MAAM,qBAAqB,CAChC,MACA,MACA,UACA,OAAO,MAEI;AACX,WAAS,IAAK,QAAO,OAAO,KAAK,UAAU,KAAK,QAAQ,MAAM,MAAM,IAAK,KAAI,OAAO,KAAK,UAAU,KAAK,QAAQ;AAC9G,QAAI,SAAS,KAAK;AAAK,aAAO;AAAA;AAEhC,SAAO;AAAA;AAGF,MAAM,iBAAiB,CAAC,YAA2C;AACxE,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,QAAI,CAAC,CAAC,WAAW,aAAa,SAAS,QAAQ,GAAG,OAAO;AACvD,aAAO,QAAQ,GAAG;AAAA;AAEtB,SAAO;AAAA;",
6
6
  "names": []
7
7
  }
@@ -93,8 +93,14 @@ const useComboBox = (props) => {
93
93
  if (!hasFocus)
94
94
  setFocusOptionIdx("");
95
95
  }, [showPopover, hasFocus, correctOptions, selectedValues, inputValue]);
96
+ (0, import_react.useEffect)(() => {
97
+ if (!showPopover) {
98
+ setFocusOptionIdx("");
99
+ setShowSelectedOptions(false);
100
+ }
101
+ }, [showPopover]);
96
102
  const ctx = (0, import_react.useMemo)(() => ({
97
- props: __spreadProps(__spreadValues({}, propsWithDefaults), { options: correctOptions }),
103
+ props: __spreadProps(__spreadValues({}, propsWithDefaults), { filteredOptions: correctOptions }),
98
104
  virtualListHelpers,
99
105
  showPopover,
100
106
  referenceElement,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/combobox/config/useComboBox.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["/* eslint-disable max-lines */\n/* eslint-disable import/prefer-default-export */\n/* eslint-disable complexity */\n/* eslint-disable max-statements */\nimport { useMemo, useState, useRef, useCallback, useEffect } from 'react';\nimport { useVirtual } from 'react-virtual';\nimport { useMemoMergePropsWithDefault, useValidateTypescriptPropTypes } from '@elliemae/ds-props-helpers';\nimport { defaultProps } from '../ComboBoxCTX';\nimport { DSComboboxT, ComboboxPropTypes } from '../react-desc-prop-types';\nimport { DSComboboxInternalsT } from '../sharedTypes';\nimport { useCorrectOptions } from './useCorrectOptions';\nimport { getFirstOption } from '../utils/listHelper';\nexport const useComboBox = (props: DSComboboxT.Props): DSComboboxInternalsT.ComboBoxContextT => {\n const defaultPropsWithInnerRef = {\n ...defaultProps,\n innerRef: useRef(null),\n };\n\n const propsWithDefaults = useMemoMergePropsWithDefault(props, defaultPropsWithInnerRef);\n useValidateTypescriptPropTypes(propsWithDefaults, ComboboxPropTypes);\n const [showPopover, setShowPopover] = useState<boolean>(false);\n const [referenceElement, setReferenceElement] = useState<HTMLElement | null>(null);\n const [showSelectedOptions, setShowSelectedOptions] = useState<boolean>(false);\n\n const [inputValue, setInputValue] = useState<string>('');\n const [hasFocus, setHasFocus] = useState<boolean>(false);\n\n const listRef = useRef<HTMLDivElement>(null);\n const wrapperListRef = useRef<HTMLDivElement>(null);\n\n const selectedOptionsRef = useRef<HTMLDivElement>(null);\n const controlsWrapperRef = useRef<HTMLDivElement>(null);\n const selectAllCheckboxRef = useRef<HTMLInputElement>(null);\n const toggleSelectionButtonRef = useRef<HTMLButtonElement>(null);\n const pillGroupRef = useRef<HTMLDivElement>(null);\n\n const { selectedValues } = propsWithDefaults;\n // ---------------------------------------------------------------------------\n // Menu Options with/out selected filter and creatable functionality\n // ---------------------------------------------------------------------------\n\n const correctOptions = useCorrectOptions(propsWithDefaults, inputValue, showSelectedOptions);\n\n // ===========================================================================\n // Virtualization setup\n // ===========================================================================\n\n const virtualListHelpers: ReturnType<typeof useVirtual> = useVirtual({\n size: correctOptions.length,\n parentRef: listRef,\n overscan: 15,\n paddingStart: 0,\n });\n\n // ===========================================================================\n // Scroll into view function\n // ===========================================================================\n const scrollOptionIntoView = useCallback(\n (dsId: string, opts = { align: 'center' }) => {\n virtualListHelpers.scrollToIndex(\n correctOptions.findIndex((opt) => opt.dsId === dsId),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n opts,\n );\n },\n [correctOptions, virtualListHelpers],\n );\n\n // ===========================================================================\n // Init focused option when opening the menu list\n // ===========================================================================\n\n const [focusOptionIdx, setFocusOptionIdx] = useState<string>('');\n\n useEffect(() => {\n // we are updating the focus option only when we have focus on the input and\n // we are in the selected option view or we are typing to force first option always\n if (hasFocus && (focusOptionIdx === '' || inputValue !== '' || showSelectedOptions)) {\n const focusedValue = getFirstOption(correctOptions, selectedValues, inputValue);\n setFocusOptionIdx(focusedValue);\n scrollOptionIntoView(focusedValue, { align: 'center' });\n }\n if (!hasFocus) setFocusOptionIdx('');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [showPopover, hasFocus, correctOptions, selectedValues, inputValue]);\n\n const ctx = useMemo(\n () => ({\n props: { ...propsWithDefaults, options: correctOptions },\n virtualListHelpers,\n showPopover,\n referenceElement,\n listRef,\n focusOptionIdx,\n selectedOptionsRef,\n controlsWrapperRef,\n selectAllCheckboxRef,\n inputValue,\n setInputValue,\n hasFocus,\n toggleSelectionButtonRef,\n pillGroupRef,\n showSelectedOptions,\n wrapperListRef,\n setShowSelectedOptions,\n setHasFocus,\n setFocusOptionIdx,\n scrollOptionIntoView,\n setReferenceElement,\n setShowPopover,\n }),\n [\n scrollOptionIntoView,\n correctOptions,\n hasFocus,\n propsWithDefaults,\n virtualListHelpers,\n inputValue,\n focusOptionIdx,\n wrapperListRef,\n showSelectedOptions,\n showPopover,\n pillGroupRef,\n referenceElement,\n selectedOptionsRef,\n controlsWrapperRef,\n selectAllCheckboxRef,\n toggleSelectionButtonRef,\n listRef,\n ],\n );\n\n return ctx;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADIvB,mBAAkE;AAClE,2BAA2B;AAC3B,8BAA6E;AAC7E,yBAA6B;AAC7B,mCAA+C;AAE/C,+BAAkC;AAClC,wBAA+B;AACxB,MAAM,cAAc,CAAC,UAAoE;AAC9F,QAAM,2BAA2B,iCAC5B,kCAD4B;AAAA,IAE/B,UAAU,yBAAO;AAAA;AAGnB,QAAM,oBAAoB,0DAA6B,OAAO;AAC9D,8DAA+B,mBAAmB;AAClD,QAAM,CAAC,aAAa,kBAAkB,2BAAkB;AACxD,QAAM,CAAC,kBAAkB,uBAAuB,2BAA6B;AAC7E,QAAM,CAAC,qBAAqB,0BAA0B,2BAAkB;AAExE,QAAM,CAAC,YAAY,iBAAiB,2BAAiB;AACrD,QAAM,CAAC,UAAU,eAAe,2BAAkB;AAElD,QAAM,UAAU,yBAAuB;AACvC,QAAM,iBAAiB,yBAAuB;AAE9C,QAAM,qBAAqB,yBAAuB;AAClD,QAAM,qBAAqB,yBAAuB;AAClD,QAAM,uBAAuB,yBAAyB;AACtD,QAAM,2BAA2B,yBAA0B;AAC3D,QAAM,eAAe,yBAAuB;AAE5C,QAAM,EAAE,mBAAmB;AAK3B,QAAM,iBAAiB,gDAAkB,mBAAmB,YAAY;AAMxE,QAAM,qBAAoD,qCAAW;AAAA,IACnE,MAAM,eAAe;AAAA,IACrB,WAAW;AAAA,IACX,UAAU;AAAA,IACV,cAAc;AAAA;AAMhB,QAAM,uBAAuB,8BAC3B,CAAC,MAAc,OAAO,EAAE,OAAO,eAAe;AAC5C,uBAAmB,cACjB,eAAe,UAAU,CAAC,QAAQ,IAAI,SAAS,OAE/C;AAAA,KAGJ,CAAC,gBAAgB;AAOnB,QAAM,CAAC,gBAAgB,qBAAqB,2BAAiB;AAE7D,8BAAU,MAAM;AAGd,QAAI,YAAa,oBAAmB,MAAM,eAAe,MAAM,sBAAsB;AACnF,YAAM,eAAe,sCAAe,gBAAgB,gBAAgB;AACpE,wBAAkB;AAClB,2BAAqB,cAAc,EAAE,OAAO;AAAA;AAE9C,QAAI,CAAC;AAAU,wBAAkB;AAAA,KAEhC,CAAC,aAAa,UAAU,gBAAgB,gBAAgB;AAE3D,QAAM,MAAM,0BACV,MAAO;AAAA,IACL,OAAO,iCAAK,oBAAL,EAAwB,SAAS;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MAEF;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAIJ,SAAO;AAAA;",
4
+ "sourcesContent": ["/* eslint-disable max-lines */\n/* eslint-disable import/prefer-default-export */\n/* eslint-disable complexity */\n/* eslint-disable max-statements */\nimport { useMemo, useState, useRef, useCallback, useEffect } from 'react';\nimport { useVirtual } from 'react-virtual';\nimport { useMemoMergePropsWithDefault, useValidateTypescriptPropTypes } from '@elliemae/ds-props-helpers';\nimport { defaultProps } from '../ComboBoxCTX';\nimport { DSComboboxT, ComboboxPropTypes } from '../react-desc-prop-types';\nimport { DSComboboxInternalsT } from '../sharedTypes';\nimport { useCorrectOptions } from './useCorrectOptions';\nimport { getFirstOption } from '../utils/listHelper';\nexport const useComboBox = (props: DSComboboxT.Props): DSComboboxInternalsT.ComboBoxContextT => {\n const defaultPropsWithInnerRef = {\n ...defaultProps,\n innerRef: useRef(null),\n };\n\n const propsWithDefaults = useMemoMergePropsWithDefault(props, defaultPropsWithInnerRef);\n useValidateTypescriptPropTypes(propsWithDefaults, ComboboxPropTypes);\n const [showPopover, setShowPopover] = useState<boolean>(false);\n const [referenceElement, setReferenceElement] = useState<HTMLElement | null>(null);\n const [showSelectedOptions, setShowSelectedOptions] = useState<boolean>(false);\n\n const [inputValue, setInputValue] = useState<string>('');\n const [hasFocus, setHasFocus] = useState<boolean>(false);\n\n const listRef = useRef<HTMLDivElement>(null);\n const wrapperListRef = useRef<HTMLDivElement>(null);\n\n const selectedOptionsRef = useRef<HTMLDivElement>(null);\n const controlsWrapperRef = useRef<HTMLDivElement>(null);\n const selectAllCheckboxRef = useRef<HTMLInputElement>(null);\n const toggleSelectionButtonRef = useRef<HTMLButtonElement>(null);\n const pillGroupRef = useRef<HTMLDivElement>(null);\n\n const { selectedValues } = propsWithDefaults;\n\n // ---------------------------------------------------------------------------\n // Options with creatable option + filtered by selected\n // ---------------------------------------------------------------------------\n\n const correctOptions = useCorrectOptions(propsWithDefaults, inputValue, showSelectedOptions);\n\n // ===========================================================================\n // Virtualization setup\n // ===========================================================================\n\n const virtualListHelpers: ReturnType<typeof useVirtual> = useVirtual({\n size: correctOptions.length,\n parentRef: listRef,\n overscan: 15,\n paddingStart: 0,\n });\n\n // ===========================================================================\n // Scroll into view function\n // ===========================================================================\n const scrollOptionIntoView = useCallback(\n (dsId: string, opts = { align: 'center' }) => {\n virtualListHelpers.scrollToIndex(\n correctOptions.findIndex((opt) => opt.dsId === dsId),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n opts,\n );\n },\n [correctOptions, virtualListHelpers],\n );\n\n // ===========================================================================\n // Init focused option when opening the menu list\n // ===========================================================================\n\n const [focusOptionIdx, setFocusOptionIdx] = useState<string>('');\n\n useEffect(() => {\n // we are updating the focus option only when we have focus on the input and\n // we are in the selected option view or we are typing to force first option always\n if (hasFocus && (focusOptionIdx === '' || inputValue !== '' || showSelectedOptions)) {\n const focusedValue = getFirstOption(correctOptions, selectedValues, inputValue);\n setFocusOptionIdx(focusedValue);\n scrollOptionIntoView(focusedValue, { align: 'center' });\n }\n if (!hasFocus) setFocusOptionIdx('');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [showPopover, hasFocus, correctOptions, selectedValues, inputValue]);\n\n useEffect(() => {\n if (!showPopover) {\n setFocusOptionIdx('');\n setShowSelectedOptions(false);\n }\n }, [showPopover]);\n\n const ctx = useMemo(\n () => ({\n props: { ...propsWithDefaults, filteredOptions: correctOptions },\n virtualListHelpers,\n showPopover,\n referenceElement,\n listRef,\n focusOptionIdx,\n selectedOptionsRef,\n controlsWrapperRef,\n selectAllCheckboxRef,\n inputValue,\n setInputValue,\n hasFocus,\n toggleSelectionButtonRef,\n pillGroupRef,\n showSelectedOptions,\n wrapperListRef,\n setShowSelectedOptions,\n setHasFocus,\n setFocusOptionIdx,\n scrollOptionIntoView,\n setReferenceElement,\n setShowPopover,\n }),\n [\n scrollOptionIntoView,\n correctOptions,\n hasFocus,\n propsWithDefaults,\n virtualListHelpers,\n inputValue,\n focusOptionIdx,\n wrapperListRef,\n showSelectedOptions,\n showPopover,\n pillGroupRef,\n referenceElement,\n selectedOptionsRef,\n controlsWrapperRef,\n selectAllCheckboxRef,\n toggleSelectionButtonRef,\n listRef,\n ],\n );\n\n return ctx;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADIvB,mBAAkE;AAClE,2BAA2B;AAC3B,8BAA6E;AAC7E,yBAA6B;AAC7B,mCAA+C;AAE/C,+BAAkC;AAClC,wBAA+B;AACxB,MAAM,cAAc,CAAC,UAAoE;AAC9F,QAAM,2BAA2B,iCAC5B,kCAD4B;AAAA,IAE/B,UAAU,yBAAO;AAAA;AAGnB,QAAM,oBAAoB,0DAA6B,OAAO;AAC9D,8DAA+B,mBAAmB;AAClD,QAAM,CAAC,aAAa,kBAAkB,2BAAkB;AACxD,QAAM,CAAC,kBAAkB,uBAAuB,2BAA6B;AAC7E,QAAM,CAAC,qBAAqB,0BAA0B,2BAAkB;AAExE,QAAM,CAAC,YAAY,iBAAiB,2BAAiB;AACrD,QAAM,CAAC,UAAU,eAAe,2BAAkB;AAElD,QAAM,UAAU,yBAAuB;AACvC,QAAM,iBAAiB,yBAAuB;AAE9C,QAAM,qBAAqB,yBAAuB;AAClD,QAAM,qBAAqB,yBAAuB;AAClD,QAAM,uBAAuB,yBAAyB;AACtD,QAAM,2BAA2B,yBAA0B;AAC3D,QAAM,eAAe,yBAAuB;AAE5C,QAAM,EAAE,mBAAmB;AAM3B,QAAM,iBAAiB,gDAAkB,mBAAmB,YAAY;AAMxE,QAAM,qBAAoD,qCAAW;AAAA,IACnE,MAAM,eAAe;AAAA,IACrB,WAAW;AAAA,IACX,UAAU;AAAA,IACV,cAAc;AAAA;AAMhB,QAAM,uBAAuB,8BAC3B,CAAC,MAAc,OAAO,EAAE,OAAO,eAAe;AAC5C,uBAAmB,cACjB,eAAe,UAAU,CAAC,QAAQ,IAAI,SAAS,OAE/C;AAAA,KAGJ,CAAC,gBAAgB;AAOnB,QAAM,CAAC,gBAAgB,qBAAqB,2BAAiB;AAE7D,8BAAU,MAAM;AAGd,QAAI,YAAa,oBAAmB,MAAM,eAAe,MAAM,sBAAsB;AACnF,YAAM,eAAe,sCAAe,gBAAgB,gBAAgB;AACpE,wBAAkB;AAClB,2BAAqB,cAAc,EAAE,OAAO;AAAA;AAE9C,QAAI,CAAC;AAAU,wBAAkB;AAAA,KAEhC,CAAC,aAAa,UAAU,gBAAgB,gBAAgB;AAE3D,8BAAU,MAAM;AACd,QAAI,CAAC,aAAa;AAChB,wBAAkB;AAClB,6BAAuB;AAAA;AAAA,KAExB,CAAC;AAEJ,QAAM,MAAM,0BACV,MAAO;AAAA,IACL,OAAO,iCAAK,oBAAL,EAAwB,iBAAiB;AAAA,IAChD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MAEF;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAIJ,SAAO;AAAA;",
6
6
  "names": []
7
7
  }
@@ -33,45 +33,26 @@ var React = __toESM(require("react"));
33
33
  var import_react = require("react");
34
34
  var import_uid = require("uid");
35
35
  var import_constants = require("../constants");
36
+ var import_listHelper = require("../utils/listHelper");
36
37
  const useCorrectOptions = (propsWithDefaults, inputValue, showSelectedOptions) => {
37
- const { options, selectedValues, onCreate } = propsWithDefaults;
38
- const selectedValuesWithSections = (0, import_react.useCallback)(() => {
39
- const multiSelectedValue = selectedValues;
40
- const items = [];
41
- options.forEach((option) => {
42
- const isSelectedValue = multiSelectedValue.find((item) => item.dsId === option.dsId);
43
- if (isSelectedValue) {
44
- items.push(option);
45
- }
46
- if (option.type === import_constants.MENU_OPTION_TYPES.SECTION) {
47
- if (items[items.length - 1]?.type === import_constants.MENU_OPTION_TYPES.SECTION) {
48
- items[items.length - 1] = option;
49
- } else {
50
- items.push(option);
51
- }
52
- }
53
- });
54
- if (items[items.length - 1]?.type === import_constants.MENU_OPTION_TYPES.SECTION) {
55
- items.pop();
56
- }
57
- return items;
58
- }, [options, selectedValues]);
59
- const correctOptions = (0, import_react.useMemo)(() => {
38
+ const { filteredOptions, allOptions, selectedValues, onCreate } = propsWithDefaults;
39
+ return (0, import_react.useMemo)(() => {
40
+ if (!filteredOptions)
41
+ return [...allOptions];
60
42
  if (showSelectedOptions && Array.isArray(selectedValues) && selectedValues.length > 0) {
61
- return selectedValuesWithSections();
43
+ return (0, import_listHelper.selectedValuesWithSections)(filteredOptions, selectedValues);
62
44
  }
63
- if (onCreate && inputValue && options.findIndex((option) => option.type === import_constants.MENU_OPTION_TYPES.OPTION && option.label === inputValue) === -1) {
45
+ if (onCreate && inputValue && filteredOptions.findIndex((option) => option.type === import_constants.MENU_OPTION_TYPES.OPTION && option.label === inputValue) === -1) {
64
46
  const creatableUuid = (0, import_uid.uid)();
65
47
  const creatableItem = {
66
48
  dsId: `creatable-${creatableUuid}`,
67
49
  label: inputValue,
68
50
  type: "creatable"
69
51
  };
70
- return [creatableItem, ...options];
52
+ return [creatableItem, ...filteredOptions];
71
53
  }
72
- return options;
73
- }, [options, onCreate, inputValue, selectedValuesWithSections, selectedValues, showSelectedOptions]);
74
- return correctOptions;
54
+ return filteredOptions;
55
+ }, [filteredOptions, allOptions, showSelectedOptions, selectedValues, onCreate, inputValue]);
75
56
  };
76
57
  module.exports = __toCommonJS(useCorrectOptions_exports);
77
58
  //# sourceMappingURL=useCorrectOptions.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/combobox/config/useCorrectOptions.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import { useMemo, useCallback } from 'react';\nimport { uid } from 'uid';\nimport { DSComboboxT } from '../react-desc-prop-types';\nimport { MENU_OPTION_TYPES } from '../constants';\nconst useCorrectOptions = (propsWithDefaults: DSComboboxT.Props, inputValue: string, showSelectedOptions: boolean) => {\n const { options, selectedValues, onCreate } = propsWithDefaults;\n const selectedValuesWithSections = useCallback(() => {\n const multiSelectedValue = selectedValues as DSComboboxT.OptionTypes[];\n const items = [] as DSComboboxT.OptionTypes[];\n\n options.forEach((option) => {\n const isSelectedValue = multiSelectedValue.find((item) => item.dsId === option.dsId);\n if (isSelectedValue) {\n items.push(option);\n }\n\n if (option.type === MENU_OPTION_TYPES.SECTION) {\n if (items[items.length - 1]?.type === MENU_OPTION_TYPES.SECTION) {\n items[items.length - 1] = option;\n } else {\n items.push(option);\n }\n }\n });\n if (items[items.length - 1]?.type === MENU_OPTION_TYPES.SECTION) {\n items.pop();\n }\n\n return items;\n }, [options, selectedValues]);\n\n const correctOptions = useMemo(() => {\n if (showSelectedOptions && Array.isArray(selectedValues) && selectedValues.length > 0) {\n return selectedValuesWithSections();\n }\n if (\n onCreate &&\n inputValue &&\n options.findIndex((option) => option.type === MENU_OPTION_TYPES.OPTION && option.label === inputValue) === -1\n ) {\n const creatableUuid = uid();\n const creatableItem: DSComboboxT.ItemCreatableOption = {\n dsId: `creatable-${creatableUuid}`,\n label: inputValue,\n type: 'creatable',\n };\n return [creatableItem, ...options];\n }\n return options;\n }, [options, onCreate, inputValue, selectedValuesWithSections, selectedValues, showSelectedOptions]);\n\n return correctOptions;\n};\n\nexport { useCorrectOptions };\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,mBAAqC;AACrC,iBAAoB;AAEpB,uBAAkC;AAClC,MAAM,oBAAoB,CAAC,mBAAsC,YAAoB,wBAAiC;AACpH,QAAM,EAAE,SAAS,gBAAgB,aAAa;AAC9C,QAAM,6BAA6B,8BAAY,MAAM;AACnD,UAAM,qBAAqB;AAC3B,UAAM,QAAQ;AAEd,YAAQ,QAAQ,CAAC,WAAW;AAC1B,YAAM,kBAAkB,mBAAmB,KAAK,CAAC,SAAS,KAAK,SAAS,OAAO;AAC/E,UAAI,iBAAiB;AACnB,cAAM,KAAK;AAAA;AAGb,UAAI,OAAO,SAAS,mCAAkB,SAAS;AAC7C,YAAI,MAAM,MAAM,SAAS,IAAI,SAAS,mCAAkB,SAAS;AAC/D,gBAAM,MAAM,SAAS,KAAK;AAAA,eACrB;AACL,gBAAM,KAAK;AAAA;AAAA;AAAA;AAIjB,QAAI,MAAM,MAAM,SAAS,IAAI,SAAS,mCAAkB,SAAS;AAC/D,YAAM;AAAA;AAGR,WAAO;AAAA,KACN,CAAC,SAAS;AAEb,QAAM,iBAAiB,0BAAQ,MAAM;AACnC,QAAI,uBAAuB,MAAM,QAAQ,mBAAmB,eAAe,SAAS,GAAG;AACrF,aAAO;AAAA;AAET,QACE,YACA,cACA,QAAQ,UAAU,CAAC,WAAW,OAAO,SAAS,mCAAkB,UAAU,OAAO,UAAU,gBAAgB,IAC3G;AACA,YAAM,gBAAgB;AACtB,YAAM,gBAAiD;AAAA,QACrD,MAAM,aAAa;AAAA,QACnB,OAAO;AAAA,QACP,MAAM;AAAA;AAER,aAAO,CAAC,eAAe,GAAG;AAAA;AAE5B,WAAO;AAAA,KACN,CAAC,SAAS,UAAU,YAAY,4BAA4B,gBAAgB;AAE/E,SAAO;AAAA;",
4
+ "sourcesContent": ["import { useMemo } from 'react';\nimport { uid } from 'uid';\nimport { DSComboboxT } from '../react-desc-prop-types';\nimport { MENU_OPTION_TYPES } from '../constants';\nimport { selectedValuesWithSections } from '../utils/listHelper';\nconst useCorrectOptions = (propsWithDefaults: DSComboboxT.Props, inputValue: string, showSelectedOptions: boolean) => {\n const { filteredOptions, allOptions, selectedValues, onCreate } = propsWithDefaults;\n\n return useMemo(() => {\n // if filteredOptions is not passed we copy allOptions into the prop as default\n // this is useful when the user wants a combo with out filtering and only pass allOptions as its required\n if (!filteredOptions) return [...allOptions];\n // when show selected toggle is on we return the selected value only as filteredOptions prop\n if (showSelectedOptions && Array.isArray(selectedValues) && selectedValues.length > 0) {\n return selectedValuesWithSections(filteredOptions, selectedValues);\n }\n // whether oncreate is passed we add as first option the creatable action based on input value string\n if (\n onCreate &&\n inputValue &&\n filteredOptions.findIndex((option) => option.type === MENU_OPTION_TYPES.OPTION && option.label === inputValue) ===\n -1\n ) {\n const creatableUuid = uid();\n const creatableItem: DSComboboxT.ItemCreatableOption = {\n dsId: `creatable-${creatableUuid}`,\n label: inputValue,\n type: 'creatable',\n };\n return [creatableItem, ...filteredOptions];\n }\n return filteredOptions;\n }, [filteredOptions, allOptions, showSelectedOptions, selectedValues, onCreate, inputValue]);\n};\n\nexport { useCorrectOptions };\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,mBAAwB;AACxB,iBAAoB;AAEpB,uBAAkC;AAClC,wBAA2C;AAC3C,MAAM,oBAAoB,CAAC,mBAAsC,YAAoB,wBAAiC;AACpH,QAAM,EAAE,iBAAiB,YAAY,gBAAgB,aAAa;AAElE,SAAO,0BAAQ,MAAM;AAGnB,QAAI,CAAC;AAAiB,aAAO,CAAC,GAAG;AAEjC,QAAI,uBAAuB,MAAM,QAAQ,mBAAmB,eAAe,SAAS,GAAG;AACrF,aAAO,kDAA2B,iBAAiB;AAAA;AAGrD,QACE,YACA,cACA,gBAAgB,UAAU,CAAC,WAAW,OAAO,SAAS,mCAAkB,UAAU,OAAO,UAAU,gBACjG,IACF;AACA,YAAM,gBAAgB;AACtB,YAAM,gBAAiD;AAAA,QACrD,MAAM,aAAa;AAAA,QACnB,OAAO;AAAA,QACP,MAAM;AAAA;AAER,aAAO,CAAC,eAAe,GAAG;AAAA;AAE5B,WAAO;AAAA,KACN,CAAC,iBAAiB,YAAY,qBAAqB,gBAAgB,UAAU;AAAA;",
6
6
  "names": []
7
7
  }
@@ -37,12 +37,12 @@ var import_listHelper = require("../utils/listHelper");
37
37
  var import_sharedTypes = require("../sharedTypes");
38
38
  const A11yFocusedOption = () => {
39
39
  const {
40
- props: { options },
40
+ props: { filteredOptions },
41
41
  focusOptionIdx,
42
42
  showPopover
43
43
  } = (0, import_react.useContext)(import_ComboBoxCTX.default);
44
- const selectabledOptions = (0, import_listHelper.getSelectableOptions)(options);
45
- const focusOption = options.find((option) => !(0, import_sharedTypes.isSeparator)(option) && option.dsId === focusOptionIdx);
44
+ const selectabledOptions = (0, import_listHelper.getSelectableOptions)(filteredOptions);
45
+ const focusOption = filteredOptions.find((option) => !(0, import_sharedTypes.isSeparator)(option) && option.dsId === focusOptionIdx);
46
46
  const focusSelectableOptionIdx = selectabledOptions.findIndex((option) => option.dsId === focusOptionIdx);
47
47
  return (0, import_react.useMemo)(() => {
48
48
  if (!(0, import_sharedTypes.isSeparator)(focusOption) && showPopover && focusOption)
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/combobox/parts/A11yFocusedOption.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import React, { useContext, useMemo } from 'react';\nimport ComboBoxContext from '../ComboBoxCTX';\nimport { StyledA11ySelectedValues } from './styled';\nimport { getSelectableOptions } from '../utils/listHelper';\nimport { isSeparator } from '../sharedTypes';\n\nexport const A11yFocusedOption: React.ComponentType = () => {\n const {\n props: { options },\n focusOptionIdx,\n showPopover,\n } = useContext(ComboBoxContext);\n const selectabledOptions = getSelectableOptions(options);\n const focusOption = options.find((option) => !isSeparator(option) && option.dsId === focusOptionIdx);\n\n const focusSelectableOptionIdx = selectabledOptions.findIndex((option) => option.dsId === focusOptionIdx);\n\n return useMemo(() => {\n if (!isSeparator(focusOption) && showPopover && focusOption)\n return (\n <StyledA11ySelectedValues aria-live=\"polite\" aria-atomic=\"false\" aria-relevant=\"additions text\">\n {`option ${focusOption?.label} focused.${focusSelectableOptionIdx + 1} of ${selectabledOptions.length} `}\n </StyledA11ySelectedValues>\n );\n\n return null;\n }, [showPopover, focusOption, focusSelectableOptionIdx, selectabledOptions]);\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,mBAA2C;AAC3C,yBAA4B;AAC5B,oBAAyC;AACzC,wBAAqC;AACrC,yBAA4B;AAErB,MAAM,oBAAyC,MAAM;AAC1D,QAAM;AAAA,IACJ,OAAO,EAAE;AAAA,IACT;AAAA,IACA;AAAA,MACE,6BAAW;AACf,QAAM,qBAAqB,4CAAqB;AAChD,QAAM,cAAc,QAAQ,KAAK,CAAC,WAAW,CAAC,oCAAY,WAAW,OAAO,SAAS;AAErF,QAAM,2BAA2B,mBAAmB,UAAU,CAAC,WAAW,OAAO,SAAS;AAE1F,SAAO,0BAAQ,MAAM;AACnB,QAAI,CAAC,oCAAY,gBAAgB,eAAe;AAC9C,aACE,mDAAC,wCAAD;AAAA,QAA0B,aAAU;AAAA,QAAS,eAAY;AAAA,QAAQ,iBAAc;AAAA,SAC5E,UAAU,aAAa,iBAAiB,2BAA2B,QAAQ,mBAAmB;AAIrG,WAAO;AAAA,KACN,CAAC,aAAa,aAAa,0BAA0B;AAAA;",
4
+ "sourcesContent": ["import React, { useContext, useMemo } from 'react';\nimport ComboBoxContext from '../ComboBoxCTX';\nimport { StyledA11ySelectedValues } from './styled';\nimport { getSelectableOptions } from '../utils/listHelper';\nimport { isSeparator } from '../sharedTypes';\n\nexport const A11yFocusedOption: React.ComponentType = () => {\n const {\n props: { filteredOptions },\n focusOptionIdx,\n showPopover,\n } = useContext(ComboBoxContext);\n const selectabledOptions = getSelectableOptions(filteredOptions);\n const focusOption = filteredOptions.find((option) => !isSeparator(option) && option.dsId === focusOptionIdx);\n\n const focusSelectableOptionIdx = selectabledOptions.findIndex((option) => option.dsId === focusOptionIdx);\n\n return useMemo(() => {\n if (!isSeparator(focusOption) && showPopover && focusOption)\n return (\n <StyledA11ySelectedValues aria-live=\"polite\" aria-atomic=\"false\" aria-relevant=\"additions text\">\n {`option ${focusOption?.label} focused.${focusSelectableOptionIdx + 1} of ${selectabledOptions.length} `}\n </StyledA11ySelectedValues>\n );\n\n return null;\n }, [showPopover, focusOption, focusSelectableOptionIdx, selectabledOptions]);\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,mBAA2C;AAC3C,yBAA4B;AAC5B,oBAAyC;AACzC,wBAAqC;AACrC,yBAA4B;AAErB,MAAM,oBAAyC,MAAM;AAC1D,QAAM;AAAA,IACJ,OAAO,EAAE;AAAA,IACT;AAAA,IACA;AAAA,MACE,6BAAW;AACf,QAAM,qBAAqB,4CAAqB;AAChD,QAAM,cAAc,gBAAgB,KAAK,CAAC,WAAW,CAAC,oCAAY,WAAW,OAAO,SAAS;AAE7F,QAAM,2BAA2B,mBAAmB,UAAU,CAAC,WAAW,OAAO,SAAS;AAE1F,SAAO,0BAAQ,MAAM;AACnB,QAAI,CAAC,oCAAY,gBAAgB,eAAe;AAC9C,aACE,mDAAC,wCAAD;AAAA,QAA0B,aAAU;AAAA,QAAS,eAAY;AAAA,QAAQ,iBAAc;AAAA,SAC5E,UAAU,aAAa,iBAAiB,2BAA2B,QAAQ,mBAAmB;AAIrG,WAAO;AAAA,KACN,CAAC,aAAa,aAAa,0BAA0B;AAAA;",
6
6
  "names": []
7
7
  }
@@ -47,6 +47,8 @@ const Controls = () => {
47
47
  selectedOptionsRef,
48
48
  setShowPopover,
49
49
  hasFocus,
50
+ focusOptionIdx,
51
+ scrollOptionIntoView,
50
52
  showPopover,
51
53
  controlsWrapperRef
52
54
  } = (0, import_react.useContext)(import_ComboBoxCTX.default);
@@ -60,7 +62,7 @@ const Controls = () => {
60
62
  }
61
63
  innerRef.current?.focus();
62
64
  setShowPopover(true);
63
- }, [disabled, hasFocus, setShowPopover, showPopover, innerRef, inline]);
65
+ }, [disabled, hasFocus, showPopover, inline, innerRef, setShowPopover, focusOptionIdx]);
64
66
  const handleOnPillsClick = (0, import_react.useCallback)((e) => {
65
67
  if (showPopover || disabled) {
66
68
  e.stopPropagation();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/combobox/parts/controls/Controls.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport React, { useContext, useMemo, useCallback } from 'react';\nimport { DropdownIndicator } from '../DropdownIndicator';\nimport { ComboboxDataTestid } from '../../ComboboxDataTestids';\nimport ComboBoxContext from '../../ComboBoxCTX';\nimport {\n StyledControlsWrapper,\n StyleHeaderActionsSeparator,\n StyledHeaderActionsWrapper,\n StyledSelection,\n} from './styled';\nimport { MultiSelectedValuesContainer } from '../multi-selected-values-container';\nimport { ControlsInput } from '../controls-input/ControlsInput';\nimport { useOnPillsNavigation } from './useOnPillsNavigation';\nimport { A11yFocusedOption } from '../A11yFocusedOption';\nimport { A11ySelectedValues } from '../A11ySelectedValues';\nimport { RemovableSelectedValuePill } from '../multi-selected-values-container/RemovableSelectedValuePill';\nexport const Controls = (): JSX.Element => {\n const {\n props: { inline, disabled, inputMinWidth, hasError, selectedValues, innerRef },\n selectedOptionsRef,\n setShowPopover,\n hasFocus,\n showPopover,\n controlsWrapperRef,\n } = useContext(ComboBoxContext);\n\n const handleOnClick = useCallback(() => {\n if (disabled) return;\n if (hasFocus && showPopover && !inline) {\n setShowPopover(false);\n innerRef.current?.blur();\n return;\n }\n innerRef.current?.focus();\n setShowPopover(true);\n }, [disabled, hasFocus, setShowPopover, showPopover, innerRef, inline]);\n\n // this callback prevent to toggle the menu when clicking or removing pills\n const handleOnPillsClick: React.MouseEventHandler = useCallback(\n (e) => {\n if (showPopover || disabled) {\n e.stopPropagation();\n } else {\n innerRef.current?.focus();\n setShowPopover(true);\n }\n },\n [showPopover, innerRef, disabled, setShowPopover],\n );\n\n // callback to prevent onBlur on the input when clicking in all the wrapper\n const handleOnMouseDown: React.MouseEventHandler = useCallback(\n (e) => {\n if (document.activeElement === innerRef.current || inline) {\n e.preventDefault();\n }\n },\n [innerRef, inline],\n );\n\n const { onKeyDownPills } = useOnPillsNavigation();\n\n const cols = useMemo(\n () => (!inline ? ['minmax(0px,max-content)', 'minmax(20px, auto)', '29px'] : ['minmax(0px, auto)']),\n [inline],\n );\n return (\n <StyledControlsWrapper\n ref={controlsWrapperRef}\n cols={cols}\n disabled={disabled}\n minWidth={inputMinWidth}\n hasError={hasError}\n inline={inline}\n onClick={handleOnClick}\n onMouseDown={handleOnMouseDown}\n onKeyDown={onKeyDownPills}\n data-testid={ComboboxDataTestid.CONTROLS_WRAPPER}\n >\n {!inline && (\n <StyledSelection ref={selectedOptionsRef} onClick={handleOnPillsClick}>\n <A11ySelectedValues />\n <A11yFocusedOption />\n {Array.isArray(selectedValues) ? (\n <MultiSelectedValuesContainer />\n ) : (\n <div data-testid={ComboboxDataTestid.SELECTED_VALUES}>\n {selectedValues && <RemovableSelectedValuePill pill={selectedValues} />}\n </div>\n )}\n </StyledSelection>\n )}\n\n <ControlsInput />\n {!inline && (\n <StyledHeaderActionsWrapper justifyContent=\"center\" cols={['auto', 'auto']}>\n <StyleHeaderActionsSeparator disabled={disabled} />\n <DropdownIndicator />\n </StyledHeaderActionsWrapper>\n )}\n </StyledControlsWrapper>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADEvB,mBAAwD;AACxD,+BAAkC;AAClC,iCAAmC;AACnC,yBAA4B;AAC5B,oBAKO;AACP,6CAA6C;AAC7C,2BAA8B;AAC9B,kCAAqC;AACrC,+BAAkC;AAClC,gCAAmC;AACnC,wCAA2C;AACpC,MAAM,WAAW,MAAmB;AACzC,QAAM;AAAA,IACJ,OAAO,EAAE,QAAQ,UAAU,eAAe,UAAU,gBAAgB;AAAA,IACpE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,6BAAW;AAEf,QAAM,gBAAgB,8BAAY,MAAM;AACtC,QAAI;AAAU;AACd,QAAI,YAAY,eAAe,CAAC,QAAQ;AACtC,qBAAe;AACf,eAAS,SAAS;AAClB;AAAA;AAEF,aAAS,SAAS;AAClB,mBAAe;AAAA,KACd,CAAC,UAAU,UAAU,gBAAgB,aAAa,UAAU;AAG/D,QAAM,qBAA8C,8BAClD,CAAC,MAAM;AACL,QAAI,eAAe,UAAU;AAC3B,QAAE;AAAA,WACG;AACL,eAAS,SAAS;AAClB,qBAAe;AAAA;AAAA,KAGnB,CAAC,aAAa,UAAU,UAAU;AAIpC,QAAM,oBAA6C,8BACjD,CAAC,MAAM;AACL,QAAI,SAAS,kBAAkB,SAAS,WAAW,QAAQ;AACzD,QAAE;AAAA;AAAA,KAGN,CAAC,UAAU;AAGb,QAAM,EAAE,mBAAmB;AAE3B,QAAM,OAAO,0BACX,MAAO,CAAC,SAAS,CAAC,2BAA2B,sBAAsB,UAAU,CAAC,sBAC9E,CAAC;AAEH,SACE,mDAAC,qCAAD;AAAA,IACE,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,IACX,eAAa,8CAAmB;AAAA,KAE/B,CAAC,UACA,mDAAC,+BAAD;AAAA,IAAiB,KAAK;AAAA,IAAoB,SAAS;AAAA,KACjD,mDAAC,8CAAD,OACA,mDAAC,4CAAD,OACC,MAAM,QAAQ,kBACb,mDAAC,qEAAD,QAEA,mDAAC,OAAD;AAAA,IAAK,eAAa,8CAAmB;AAAA,KAClC,kBAAkB,mDAAC,8DAAD;AAAA,IAA4B,MAAM;AAAA,QAM7D,mDAAC,oCAAD,OACC,CAAC,UACA,mDAAC,0CAAD;AAAA,IAA4B,gBAAe;AAAA,IAAS,MAAM,CAAC,QAAQ;AAAA,KACjE,mDAAC,2CAAD;AAAA,IAA6B;AAAA,MAC7B,mDAAC,4CAAD;AAAA;",
4
+ "sourcesContent": ["/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport React, { useContext, useMemo, useCallback } from 'react';\nimport { DropdownIndicator } from '../DropdownIndicator';\nimport { ComboboxDataTestid } from '../../ComboboxDataTestids';\nimport ComboBoxContext from '../../ComboBoxCTX';\nimport {\n StyledControlsWrapper,\n StyleHeaderActionsSeparator,\n StyledHeaderActionsWrapper,\n StyledSelection,\n} from './styled';\nimport { MultiSelectedValuesContainer } from '../multi-selected-values-container';\nimport { ControlsInput } from '../controls-input/ControlsInput';\nimport { useOnPillsNavigation } from './useOnPillsNavigation';\nimport { A11yFocusedOption } from '../A11yFocusedOption';\nimport { A11ySelectedValues } from '../A11ySelectedValues';\nimport { RemovableSelectedValuePill } from '../multi-selected-values-container/RemovableSelectedValuePill';\nexport const Controls = (): JSX.Element => {\n const {\n props: { inline, disabled, inputMinWidth, hasError, selectedValues, innerRef },\n selectedOptionsRef,\n setShowPopover,\n hasFocus,\n focusOptionIdx,\n scrollOptionIntoView,\n showPopover,\n controlsWrapperRef,\n } = useContext(ComboBoxContext);\n\n const handleOnClick = useCallback(() => {\n if (disabled) return;\n if (hasFocus && showPopover && !inline) {\n setShowPopover(false);\n innerRef.current?.blur();\n return;\n }\n innerRef.current?.focus();\n setShowPopover(true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [disabled, hasFocus, showPopover, inline, innerRef, setShowPopover, focusOptionIdx]);\n\n // this callback prevent to toggle the menu when clicking or removing pills\n const handleOnPillsClick: React.MouseEventHandler = useCallback(\n (e) => {\n if (showPopover || disabled) {\n e.stopPropagation();\n } else {\n innerRef.current?.focus();\n setShowPopover(true);\n }\n },\n [showPopover, innerRef, disabled, setShowPopover],\n );\n\n // callback to prevent onBlur on the input when clicking in all the wrapper\n const handleOnMouseDown: React.MouseEventHandler = useCallback(\n (e) => {\n if (document.activeElement === innerRef.current || inline) {\n e.preventDefault();\n }\n },\n [innerRef, inline],\n );\n\n const { onKeyDownPills } = useOnPillsNavigation();\n\n const cols = useMemo(\n () => (!inline ? ['minmax(0px,max-content)', 'minmax(20px, auto)', '29px'] : ['minmax(0px, auto)']),\n [inline],\n );\n return (\n <StyledControlsWrapper\n ref={controlsWrapperRef}\n cols={cols}\n disabled={disabled}\n minWidth={inputMinWidth}\n hasError={hasError}\n inline={inline}\n onClick={handleOnClick}\n onMouseDown={handleOnMouseDown}\n onKeyDown={onKeyDownPills}\n data-testid={ComboboxDataTestid.CONTROLS_WRAPPER}\n >\n {!inline && (\n <StyledSelection ref={selectedOptionsRef} onClick={handleOnPillsClick}>\n <A11ySelectedValues />\n <A11yFocusedOption />\n {Array.isArray(selectedValues) ? (\n <MultiSelectedValuesContainer />\n ) : (\n <div data-testid={ComboboxDataTestid.SELECTED_VALUES}>\n {selectedValues && <RemovableSelectedValuePill pill={selectedValues} />}\n </div>\n )}\n </StyledSelection>\n )}\n\n <ControlsInput />\n {!inline && (\n <StyledHeaderActionsWrapper justifyContent=\"center\" cols={['auto', 'auto']}>\n <StyleHeaderActionsSeparator disabled={disabled} />\n <DropdownIndicator />\n </StyledHeaderActionsWrapper>\n )}\n </StyledControlsWrapper>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADEvB,mBAAwD;AACxD,+BAAkC;AAClC,iCAAmC;AACnC,yBAA4B;AAC5B,oBAKO;AACP,6CAA6C;AAC7C,2BAA8B;AAC9B,kCAAqC;AACrC,+BAAkC;AAClC,gCAAmC;AACnC,wCAA2C;AACpC,MAAM,WAAW,MAAmB;AACzC,QAAM;AAAA,IACJ,OAAO,EAAE,QAAQ,UAAU,eAAe,UAAU,gBAAgB;AAAA,IACpE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,6BAAW;AAEf,QAAM,gBAAgB,8BAAY,MAAM;AACtC,QAAI;AAAU;AACd,QAAI,YAAY,eAAe,CAAC,QAAQ;AACtC,qBAAe;AACf,eAAS,SAAS;AAClB;AAAA;AAEF,aAAS,SAAS;AAClB,mBAAe;AAAA,KAEd,CAAC,UAAU,UAAU,aAAa,QAAQ,UAAU,gBAAgB;AAGvE,QAAM,qBAA8C,8BAClD,CAAC,MAAM;AACL,QAAI,eAAe,UAAU;AAC3B,QAAE;AAAA,WACG;AACL,eAAS,SAAS;AAClB,qBAAe;AAAA;AAAA,KAGnB,CAAC,aAAa,UAAU,UAAU;AAIpC,QAAM,oBAA6C,8BACjD,CAAC,MAAM;AACL,QAAI,SAAS,kBAAkB,SAAS,WAAW,QAAQ;AACzD,QAAE;AAAA;AAAA,KAGN,CAAC,UAAU;AAGb,QAAM,EAAE,mBAAmB;AAE3B,QAAM,OAAO,0BACX,MAAO,CAAC,SAAS,CAAC,2BAA2B,sBAAsB,UAAU,CAAC,sBAC9E,CAAC;AAEH,SACE,mDAAC,qCAAD;AAAA,IACE,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,IACX,eAAa,8CAAmB;AAAA,KAE/B,CAAC,UACA,mDAAC,+BAAD;AAAA,IAAiB,KAAK;AAAA,IAAoB,SAAS;AAAA,KACjD,mDAAC,8CAAD,OACA,mDAAC,4CAAD,OACC,MAAM,QAAQ,kBACb,mDAAC,qEAAD,QAEA,mDAAC,OAAD;AAAA,IAAK,eAAa,8CAAmB;AAAA,KAClC,kBAAkB,mDAAC,8DAAD;AAAA,IAA4B,MAAM;AAAA,QAM7D,mDAAC,oCAAD,OACC,CAAC,UACA,mDAAC,0CAAD;AAAA,IAA4B,gBAAe;AAAA,IAAS,MAAM,CAAC,QAAQ;AAAA,KACjE,mDAAC,2CAAD;AAAA,IAA6B;AAAA,MAC7B,mDAAC,4CAAD;AAAA;",
6
6
  "names": []
7
7
  }
@@ -39,7 +39,7 @@ var import_useControlsInput = require("./useControlsInput");
39
39
  var import_ComboBoxCTX = require("../../ComboBoxCTX");
40
40
  const ControlsInput = () => {
41
41
  const {
42
- props: { autoFocus, disabled, innerRef, onFilter },
42
+ props: { autoFocus, placeholder, disabled, innerRef, onFilter },
43
43
  focusOptionIdx,
44
44
  inputValue,
45
45
  showPopover
@@ -53,6 +53,7 @@ const ControlsInput = () => {
53
53
  })), /* @__PURE__ */ import_react.default.createElement(import_styled.StyledInput, {
54
54
  "data-testid": import_ComboboxDataTestids.ComboboxDataTestid.INPUT,
55
55
  autoFocus,
56
+ placeholder,
56
57
  "aria-controls": "combo-listbox",
57
58
  "aria-activedescendant": focusOptionIdx,
58
59
  "aria-expanded": showPopover,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/combobox/parts/controls-input/ControlsInput.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import React, { useContext } from 'react';\nimport { SimpleTruncatedTooltipText } from '@elliemae/ds-truncated-tooltip-text';\n\nimport { ComboboxDataTestid } from '../../ComboboxDataTestids';\nimport { StyledInput, StyledInputWrapper, StyledInputPlaceHolder, StyledInputWidthReference } from './styled';\nimport { useKeyboardNavigation } from './useKeyboardNavigation';\nimport { useControlsInput } from './useControlsInput';\nimport { ComboBoxContext } from '../../ComboBoxCTX';\n\nexport const ControlsInput = (): JSX.Element => {\n const {\n props: { autoFocus, disabled, innerRef, onFilter },\n focusOptionIdx,\n inputValue,\n showPopover,\n } = useContext(ComboBoxContext);\n const { onInputKeyDown } = useKeyboardNavigation();\n const { spanReference, width, spanReferenceText, showPlaceholder, handleOnBlur, handleOnChange, handleOnFocus } =\n useControlsInput();\n return (\n <StyledInputWrapper>\n <StyledInputWidthReference ref={spanReference}>{spanReferenceText}</StyledInputWidthReference>\n <StyledInputPlaceHolder>\n <SimpleTruncatedTooltipText value={showPlaceholder}></SimpleTruncatedTooltipText>\n </StyledInputPlaceHolder>\n\n <StyledInput\n data-testid={ComboboxDataTestid.INPUT}\n autoFocus={autoFocus}\n aria-controls=\"combo-listbox\"\n aria-activedescendant={focusOptionIdx}\n aria-expanded={showPopover}\n aria-haspopup=\"true\"\n aria-describedby=\"combobox-selected-items\"\n role=\"combobox\"\n disabled={disabled}\n style={{ width }}\n ref={innerRef}\n value={inputValue}\n type=\"text\"\n onKeyDown={onInputKeyDown}\n onChange={handleOnChange}\n onBlur={handleOnBlur}\n onFocus={handleOnFocus}\n withoutCaret={!onFilter}\n />\n </StyledInputWrapper>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,mBAAkC;AAClC,uCAA2C;AAE3C,iCAAmC;AACnC,oBAAmG;AACnG,mCAAsC;AACtC,8BAAiC;AACjC,yBAAgC;AAEzB,MAAM,gBAAgB,MAAmB;AAC9C,QAAM;AAAA,IACJ,OAAO,EAAE,WAAW,UAAU,UAAU;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,MACE,6BAAW;AACf,QAAM,EAAE,mBAAmB;AAC3B,QAAM,EAAE,eAAe,OAAO,mBAAmB,iBAAiB,cAAc,gBAAgB,kBAC9F;AACF,SACE,mDAAC,kCAAD,MACE,mDAAC,yCAAD;AAAA,IAA2B,KAAK;AAAA,KAAgB,oBAChD,mDAAC,sCAAD,MACE,mDAAC,6DAAD;AAAA,IAA4B,OAAO;AAAA,OAGrC,mDAAC,2BAAD;AAAA,IACE,eAAa,8CAAmB;AAAA,IAChC;AAAA,IACA,iBAAc;AAAA,IACd,yBAAuB;AAAA,IACvB,iBAAe;AAAA,IACf,iBAAc;AAAA,IACd,oBAAiB;AAAA,IACjB,MAAK;AAAA,IACL;AAAA,IACA,OAAO,EAAE;AAAA,IACT,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAK;AAAA,IACL,WAAW;AAAA,IACX,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,cAAc,CAAC;AAAA;AAAA;",
4
+ "sourcesContent": ["import React, { useContext } from 'react';\nimport { SimpleTruncatedTooltipText } from '@elliemae/ds-truncated-tooltip-text';\n\nimport { ComboboxDataTestid } from '../../ComboboxDataTestids';\nimport { StyledInput, StyledInputWrapper, StyledInputPlaceHolder, StyledInputWidthReference } from './styled';\nimport { useKeyboardNavigation } from './useKeyboardNavigation';\nimport { useControlsInput } from './useControlsInput';\nimport { ComboBoxContext } from '../../ComboBoxCTX';\n\nexport const ControlsInput = (): JSX.Element => {\n const {\n props: { autoFocus, placeholder, disabled, innerRef, onFilter },\n focusOptionIdx,\n inputValue,\n showPopover,\n } = useContext(ComboBoxContext);\n const { onInputKeyDown } = useKeyboardNavigation();\n const { spanReference, width, spanReferenceText, showPlaceholder, handleOnBlur, handleOnChange, handleOnFocus } =\n useControlsInput();\n return (\n <StyledInputWrapper>\n <StyledInputWidthReference ref={spanReference}>{spanReferenceText}</StyledInputWidthReference>\n <StyledInputPlaceHolder>\n <SimpleTruncatedTooltipText value={showPlaceholder}></SimpleTruncatedTooltipText>\n </StyledInputPlaceHolder>\n\n <StyledInput\n data-testid={ComboboxDataTestid.INPUT}\n autoFocus={autoFocus}\n placeholder={placeholder}\n aria-controls=\"combo-listbox\"\n aria-activedescendant={focusOptionIdx}\n aria-expanded={showPopover}\n aria-haspopup=\"true\"\n aria-describedby=\"combobox-selected-items\"\n role=\"combobox\"\n disabled={disabled}\n style={{ width }}\n ref={innerRef}\n value={inputValue}\n type=\"text\"\n onKeyDown={onInputKeyDown}\n onChange={handleOnChange}\n onBlur={handleOnBlur}\n onFocus={handleOnFocus}\n withoutCaret={!onFilter}\n />\n </StyledInputWrapper>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,mBAAkC;AAClC,uCAA2C;AAE3C,iCAAmC;AACnC,oBAAmG;AACnG,mCAAsC;AACtC,8BAAiC;AACjC,yBAAgC;AAEzB,MAAM,gBAAgB,MAAmB;AAC9C,QAAM;AAAA,IACJ,OAAO,EAAE,WAAW,aAAa,UAAU,UAAU;AAAA,IACrD;AAAA,IACA;AAAA,IACA;AAAA,MACE,6BAAW;AACf,QAAM,EAAE,mBAAmB;AAC3B,QAAM,EAAE,eAAe,OAAO,mBAAmB,iBAAiB,cAAc,gBAAgB,kBAC9F;AACF,SACE,mDAAC,kCAAD,MACE,mDAAC,yCAAD;AAAA,IAA2B,KAAK;AAAA,KAAgB,oBAChD,mDAAC,sCAAD,MACE,mDAAC,6DAAD;AAAA,IAA4B,OAAO;AAAA,OAGrC,mDAAC,2BAAD;AAAA,IACE,eAAa,8CAAmB;AAAA,IAChC;AAAA,IACA;AAAA,IACA,iBAAc;AAAA,IACd,yBAAuB;AAAA,IACvB,iBAAe;AAAA,IACf,iBAAc;AAAA,IACd,oBAAiB;AAAA,IACjB,MAAK;AAAA,IACL;AAAA,IACA,OAAO,EAAE;AAAA,IACT,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAK;AAAA,IACL,WAAW;AAAA,IACX,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,cAAc,CAAC;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -45,6 +45,9 @@ const StyledInput = import_ds_system.styled.input`
45
45
  outline: none;
46
46
  }
47
47
  ${({ withoutCaret }) => withoutCaret && "caret-color: transparent;"}
48
+ &::placeholder {
49
+ color: transparent;
50
+ }
48
51
  `;
49
52
  const StyledInputPlaceHolder = import_ds_system.styled.div`
50
53
  font-style: italic;