@elliemae/ds-controlled-form 3.0.0-next.12 → 3.0.0-next.16

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 +7 -2
  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 +7 -2
  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
@@ -1,14 +1,8 @@
1
1
  import * as React from "react";
2
2
  const AutocompleteDataTestid = {
3
- INPUT: "autocomplete-input",
4
3
  LIST: "autocomplete-menu-list",
5
- SELECTED_VALUES: "autocomplete-selected-values",
6
- SELECT_ALL_BUTTON: "autocomplete-all-btn",
7
- CLEAR_ALL_BUTTON: "autocomplete-clear-btn",
8
- DROPDOWN: "autocomplete-dropdown-btn",
9
4
  OPTION: "autocomplete-option",
10
- SHOW_ALL_BUTTON: "autocomplete-show-all-btn",
11
- SHOW_SELECTED_OPTIONS_BUTTON: "autocomplete-selected-options-btn"
5
+ CONTAINER: "autocomplete-container"
12
6
  };
13
7
  export {
14
8
  AutocompleteDataTestid
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/autocomplete/AutocompleteDataTestids.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export const AutocompleteDataTestid = {\n INPUT: 'autocomplete-input',\n LIST: 'autocomplete-menu-list',\n SELECTED_VALUES: 'autocomplete-selected-values',\n SELECT_ALL_BUTTON: 'autocomplete-all-btn',\n CLEAR_ALL_BUTTON: 'autocomplete-clear-btn',\n DROPDOWN: 'autocomplete-dropdown-btn',\n OPTION: 'autocomplete-option',\n SHOW_ALL_BUTTON: 'autocomplete-show-all-btn',\n SHOW_SELECTED_OPTIONS_BUTTON: 'autocomplete-selected-options-btn',\n};\n"],
5
- "mappings": "AAAA;ACAO,MAAM,yBAAyB;AAAA,EACpC,OAAO;AAAA,EACP,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,8BAA8B;AAAA;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export const AutocompleteDataTestid = {\n LIST: 'autocomplete-menu-list',\n OPTION: 'autocomplete-option',\n CONTAINER: 'autocomplete-container',\n};\n"],
5
+ "mappings": "AAAA;ACAO,MAAM,yBAAyB;AAAA,EACpC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,WAAW;AAAA;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,6 @@
1
1
  var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
2
4
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
4
6
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
@@ -14,21 +16,27 @@ var __spreadValues = (a, b) => {
14
16
  }
15
17
  return a;
16
18
  };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
17
20
  import * as React from "react";
18
- import { useMemo, useState, useRef, useCallback } from "react";
21
+ import { useMemo, useState, useEffect, useRef, useCallback } from "react";
22
+ import { useMemoMergePropsWithDefault, useValidateTypescriptPropTypes } from "@elliemae/ds-props-helpers";
19
23
  import { useVirtual } from "react-virtual";
20
- import { useGetAutocompleteWithDefaultsProps } from "./useGetPropsWithDefault";
24
+ import { propTypes } from "../react-desc-prop-types";
25
+ import { defaultProps } from "../AutocompleteCTX";
26
+ import { getFirstOption } from "../utils/listHelper";
21
27
  const useAutocomplete = (props) => {
28
+ const defaultPropsWithInnerRef = __spreadProps(__spreadValues({}, defaultProps), {
29
+ innerRef: useRef(null)
30
+ });
31
+ const propsWithDefault = useMemoMergePropsWithDefault(props, defaultPropsWithInnerRef);
32
+ useValidateTypescriptPropTypes(propsWithDefault, propTypes);
22
33
  const [showPopover, setShowPopover] = useState(false);
23
34
  const [referenceElement, setReferenceElement] = useState(null);
24
35
  const [focusOptionIdx, setCurrentOption] = useState("");
25
36
  const inputRef = useRef(null);
26
37
  const listRef = useRef(null);
27
- const wrapperListRef = useRef(null);
28
38
  const selectedOptionsRef = useRef(null);
29
- const controlsWrapperRef = useRef(null);
30
- const propsWithDefaults = useGetAutocompleteWithDefaultsProps(props);
31
- const { options } = propsWithDefaults;
39
+ const { options, filter } = propsWithDefault;
32
40
  const virtualListHelpers = useVirtual({
33
41
  size: options.length,
34
42
  parentRef: listRef,
@@ -38,8 +46,16 @@ const useAutocomplete = (props) => {
38
46
  const scrollOptionIntoView = useCallback((dsId, opts = { align: "center" }) => {
39
47
  virtualListHelpers.scrollToIndex(options.findIndex((opt) => opt.dsId === dsId), opts);
40
48
  }, [options, virtualListHelpers]);
49
+ useEffect(() => {
50
+ if (filter.length === 0 || options.length === 0) {
51
+ setShowPopover(false);
52
+ }
53
+ }, [filter, options.length, setShowPopover]);
54
+ useEffect(() => {
55
+ setCurrentOption(getFirstOption(options));
56
+ }, [options, showPopover]);
41
57
  const ctx = useMemo(() => ({
42
- props: __spreadValues({}, propsWithDefaults),
58
+ props: __spreadValues({}, propsWithDefault),
43
59
  virtualListHelpers,
44
60
  showPopover,
45
61
  referenceElement,
@@ -47,23 +63,19 @@ const useAutocomplete = (props) => {
47
63
  listRef,
48
64
  focusOptionIdx,
49
65
  selectedOptionsRef,
50
- controlsWrapperRef,
51
- wrapperListRef,
52
66
  setCurrentOption,
53
67
  scrollOptionIntoView,
54
68
  setReferenceElement,
55
69
  setShowPopover
56
70
  }), [
57
71
  scrollOptionIntoView,
58
- propsWithDefaults,
72
+ propsWithDefault,
59
73
  virtualListHelpers,
60
74
  focusOptionIdx,
61
- wrapperListRef,
62
75
  showPopover,
63
76
  referenceElement,
64
77
  inputRef,
65
78
  selectedOptionsRef,
66
- controlsWrapperRef,
67
79
  listRef
68
80
  ]);
69
81
  return ctx;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/autocomplete/config/useAutocomplete.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* 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 } from 'react';\nimport { useVirtual } from 'react-virtual';\nimport { useGetAutocompleteWithDefaultsProps } from './useGetPropsWithDefault';\nimport type { AutocompletePropsT, AutocompleteContextT } from '../index.d';\n\nexport const useAutocomplete = (props: Partial<AutocompletePropsT>): AutocompleteContextT => {\n const [showPopover, setShowPopover] = useState<boolean>(false);\n const [referenceElement, setReferenceElement] = useState<HTMLElement | null>(null);\n\n const [focusOptionIdx, setCurrentOption] = useState<string>('');\n const inputRef = useRef<HTMLInputElement>(null);\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\n const propsWithDefaults = useGetAutocompleteWithDefaultsProps(props);\n const { options } = propsWithDefaults;\n\n // ===========================================================================\n // Virtualization setup\n // ===========================================================================\n\n const virtualListHelpers: ReturnType<typeof useVirtual> = useVirtual({\n size: options.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 options.findIndex((opt) => opt.dsId === dsId),\n opts,\n );\n },\n [options, virtualListHelpers],\n );\n\n const ctx = useMemo(\n () => ({\n props: { ...propsWithDefaults },\n virtualListHelpers,\n showPopover,\n referenceElement,\n inputRef,\n listRef,\n focusOptionIdx,\n selectedOptionsRef,\n controlsWrapperRef,\n wrapperListRef,\n setCurrentOption,\n scrollOptionIntoView,\n setReferenceElement,\n setShowPopover,\n }),\n [\n scrollOptionIntoView,\n propsWithDefaults,\n virtualListHelpers,\n focusOptionIdx,\n wrapperListRef,\n showPopover,\n referenceElement,\n inputRef,\n selectedOptionsRef,\n controlsWrapperRef,\n listRef,\n ],\n );\n\n return ctx;\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;AAAA;ACIA;AACA;AACA;AAGO,MAAM,kBAAkB,CAAC,UAA6D;AAC3F,QAAM,CAAC,aAAa,kBAAkB,SAAkB;AACxD,QAAM,CAAC,kBAAkB,uBAAuB,SAA6B;AAE7E,QAAM,CAAC,gBAAgB,oBAAoB,SAAiB;AAC5D,QAAM,WAAW,OAAyB;AAC1C,QAAM,UAAU,OAAuB;AACvC,QAAM,iBAAiB,OAAuB;AAE9C,QAAM,qBAAqB,OAAuB;AAClD,QAAM,qBAAqB,OAAuB;AAElD,QAAM,oBAAoB,oCAAoC;AAC9D,QAAM,EAAE,YAAY;AAMpB,QAAM,qBAAoD,WAAW;AAAA,IACnE,MAAM,QAAQ;AAAA,IACd,WAAW;AAAA,IACX,UAAU;AAAA,IACV,cAAc;AAAA;AAMhB,QAAM,uBAAuB,YAC3B,CAAC,MAAc,OAAO,EAAE,OAAO,eAAe;AAC5C,uBAAmB,cACjB,QAAQ,UAAU,CAAC,QAAQ,IAAI,SAAS,OACxC;AAAA,KAGJ,CAAC,SAAS;AAGZ,QAAM,MAAM,QACV,MAAO;AAAA,IACL,OAAO,mBAAK;AAAA,IACZ;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;AAIJ,SAAO;AAAA;",
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/autocomplete/config/useAutocomplete.ts"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\n/* eslint-disable import/prefer-default-export */\n/* eslint-disable complexity */\n/* eslint-disable max-statements */\nimport { useMemo, useState, useEffect, useRef, useCallback } from 'react';\nimport { useMemoMergePropsWithDefault, useValidateTypescriptPropTypes } from '@elliemae/ds-props-helpers';\n\nimport { useVirtual } from 'react-virtual';\nimport { DSAutocompleteT, propTypes } from '../react-desc-prop-types';\nimport { DSAutoCompleteInternalsT } from '../sharedTypes';\nimport { defaultProps } from '../AutocompleteCTX';\nimport { getFirstOption } from '../utils/listHelper';\n\nexport const useAutocomplete = (props: DSAutocompleteT.Props): DSAutoCompleteInternalsT.AutocompleteContext => {\n const defaultPropsWithInnerRef = {\n ...defaultProps,\n innerRef: useRef(null),\n };\n const propsWithDefault = useMemoMergePropsWithDefault(props, defaultPropsWithInnerRef);\n useValidateTypescriptPropTypes(propsWithDefault, propTypes);\n const [showPopover, setShowPopover] = useState<boolean>(false);\n const [referenceElement, setReferenceElement] = useState<HTMLElement | null>(null);\n\n const [focusOptionIdx, setCurrentOption] = useState<string>('');\n\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n\n const selectedOptionsRef = useRef<HTMLDivElement>(null);\n\n const { options, filter } = propsWithDefault;\n\n // ===========================================================================\n // Virtualization setup\n // ===========================================================================\n\n const virtualListHelpers: ReturnType<typeof useVirtual> = useVirtual({\n size: options.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 options.findIndex((opt) => opt.dsId === dsId),\n opts,\n );\n },\n [options, virtualListHelpers],\n );\n\n useEffect(() => {\n if (filter.length === 0 || options.length === 0) {\n setShowPopover(false);\n }\n }, [filter, options.length, setShowPopover]);\n\n useEffect(() => {\n setCurrentOption(getFirstOption(options));\n }, [options, showPopover]);\n\n const ctx = useMemo(\n () => ({\n props: { ...propsWithDefault },\n virtualListHelpers,\n showPopover,\n referenceElement,\n inputRef,\n listRef,\n focusOptionIdx,\n selectedOptionsRef,\n setCurrentOption,\n scrollOptionIntoView,\n setReferenceElement,\n setShowPopover,\n }),\n [\n scrollOptionIntoView,\n propsWithDefault,\n virtualListHelpers,\n focusOptionIdx,\n showPopover,\n referenceElement,\n inputRef,\n selectedOptionsRef,\n listRef,\n ],\n );\n\n return ctx;\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;ACIA;AACA;AAEA;AACA;AAEA;AACA;AAEO,MAAM,kBAAkB,CAAC,UAA+E;AAC7G,QAAM,2BAA2B,iCAC5B,eAD4B;AAAA,IAE/B,UAAU,OAAO;AAAA;AAEnB,QAAM,mBAAmB,6BAA6B,OAAO;AAC7D,iCAA+B,kBAAkB;AACjD,QAAM,CAAC,aAAa,kBAAkB,SAAkB;AACxD,QAAM,CAAC,kBAAkB,uBAAuB,SAA6B;AAE7E,QAAM,CAAC,gBAAgB,oBAAoB,SAAiB;AAE5D,QAAM,WAAW,OAAyB;AAC1C,QAAM,UAAU,OAAuB;AAEvC,QAAM,qBAAqB,OAAuB;AAElD,QAAM,EAAE,SAAS,WAAW;AAM5B,QAAM,qBAAoD,WAAW;AAAA,IACnE,MAAM,QAAQ;AAAA,IACd,WAAW;AAAA,IACX,UAAU;AAAA,IACV,cAAc;AAAA;AAMhB,QAAM,uBAAuB,YAC3B,CAAC,MAAc,OAAO,EAAE,OAAO,eAAe;AAC5C,uBAAmB,cACjB,QAAQ,UAAU,CAAC,QAAQ,IAAI,SAAS,OACxC;AAAA,KAGJ,CAAC,SAAS;AAGZ,YAAU,MAAM;AACd,QAAI,OAAO,WAAW,KAAK,QAAQ,WAAW,GAAG;AAC/C,qBAAe;AAAA;AAAA,KAEhB,CAAC,QAAQ,QAAQ,QAAQ;AAE5B,YAAU,MAAM;AACd,qBAAiB,eAAe;AAAA,KAC/B,CAAC,SAAS;AAEb,QAAM,MAAM,QACV,MAAO;AAAA,IACL,OAAO,mBAAK;AAAA,IACZ;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;AAIJ,SAAO;AAAA;",
6
6
  "names": []
7
7
  }
@@ -1,31 +1,42 @@
1
1
  import * as React from "react";
2
- import React2, { useCallback, useContext } from "react";
2
+ import React2, { useCallback, useEffect, useContext } from "react";
3
3
  import { DSPopperJS } from "@elliemae/ds-popperjs";
4
- import { AutocompleteContext } from "../../AutocompleteCTX";
5
- import { StyledContainerWithPopper, StyledContainerInline, StyledPopperWrapper } from "./styled";
6
- import { Controls } from "../controls";
4
+ import AutocompleteContext from "../../AutocompleteCTX";
5
+ import { StyledContainerWithPopper, StyledPopperWrapper } from "./styled";
7
6
  import { MenuList } from "../menu-list";
7
+ import { useKeyboardNavigation } from "./useKeyboardNavigation";
8
+ import { AutocompleteDataTestid } from "../../AutocompleteDataTestids";
8
9
  const Container = () => {
9
10
  const {
10
- props: { inline, startPlacementPreference, placementOrderPreference },
11
+ props: { startPlacementPreference, children, filter, placementOrderPreference },
11
12
  showPopover,
12
- inputRef,
13
13
  setReferenceElement,
14
14
  setShowPopover,
15
15
  referenceElement
16
16
  } = useContext(AutocompleteContext);
17
+ useEffect(() => {
18
+ const closePopper = () => {
19
+ setShowPopover(false);
20
+ };
21
+ window.addEventListener("blur", closePopper);
22
+ return () => {
23
+ window.removeEventListener("blur", closePopper);
24
+ };
25
+ }, [setShowPopover]);
17
26
  const handleCloseMenu = useCallback(() => {
18
27
  setShowPopover(false);
19
- if (inputRef.current)
20
- inputRef.current.blur();
21
- }, [inputRef, setShowPopover]);
22
- const handleMouseDown = useCallback((e) => {
23
- e.preventDefault();
24
- }, []);
25
- const StyledContainer = inline ? StyledContainerInline : StyledContainerWithPopper;
26
- return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(StyledContainer, {
27
- ref: setReferenceElement
28
- }, /* @__PURE__ */ React2.createElement(Controls, null), inline ? /* @__PURE__ */ React2.createElement(MenuList, null) : null), /* @__PURE__ */ React2.createElement(DSPopperJS, {
28
+ }, [setShowPopover]);
29
+ const input = React2.Children.only(children);
30
+ const { onInputKeyDown } = useKeyboardNavigation();
31
+ return /* @__PURE__ */ React2.createElement(StyledContainerWithPopper, {
32
+ ref: setReferenceElement,
33
+ role: "combobox",
34
+ "aria-autocomplete": "list",
35
+ "aria-controls": "autocomplete-listbox",
36
+ "aria-expanded": showPopover,
37
+ onKeyDown: onInputKeyDown,
38
+ "data-testid": AutocompleteDataTestid.CONTAINER
39
+ }, input, filter && /* @__PURE__ */ React2.createElement(DSPopperJS, {
29
40
  customOffset: [0, 5],
30
41
  closeContextMenu: handleCloseMenu,
31
42
  referenceElement,
@@ -37,8 +48,7 @@ const Container = () => {
37
48
  withoutAnimation: true,
38
49
  zIndex: 10
39
50
  }, /* @__PURE__ */ React2.createElement(StyledPopperWrapper, {
40
- tabIndex: -1,
41
- onMouseDown: handleMouseDown
51
+ tabIndex: -1
42
52
  }, /* @__PURE__ */ React2.createElement(MenuList, null))));
43
53
  };
44
54
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/autocomplete/parts/container/Container.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable complexity */\nimport React, { useCallback, useContext } from 'react';\nimport { DSPopperJS } from '@elliemae/ds-popperjs';\nimport { AutocompleteContext } from '../../AutocompleteCTX';\nimport { StyledContainerWithPopper, StyledContainerInline, StyledPopperWrapper } from './styled';\nimport { Controls } from '../controls';\nimport { MenuList } from '../menu-list';\nconst Container = (): JSX.Element => {\n const {\n props: { inline, startPlacementPreference, placementOrderPreference },\n showPopover,\n inputRef,\n setReferenceElement,\n setShowPopover,\n referenceElement,\n } = useContext(AutocompleteContext);\n\n const handleCloseMenu = useCallback(() => {\n setShowPopover(false);\n if (inputRef.current) inputRef.current.blur();\n }, [inputRef, setShowPopover]);\n\n const handleMouseDown = useCallback((e: React.KeyboardEvent) => {\n e.preventDefault();\n }, []);\n\n const StyledContainer = inline ? StyledContainerInline : StyledContainerWithPopper;\n return (\n <>\n <StyledContainer ref={setReferenceElement}>\n <Controls />\n {inline ? <MenuList /> : null}\n </StyledContainer>\n <DSPopperJS\n customOffset={[0, 5]}\n closeContextMenu={handleCloseMenu}\n referenceElement={referenceElement}\n showPopover={showPopover}\n startPlacementPreference={startPlacementPreference}\n placementOrderPreference={placementOrderPreference}\n withoutPortal\n withoutArrow\n withoutAnimation\n zIndex={10}\n >\n <StyledPopperWrapper tabIndex={-1} onMouseDown={handleMouseDown}>\n <MenuList />\n </StyledPopperWrapper>\n </DSPopperJS>\n </>\n );\n};\n\nexport { Container };\n"],
5
- "mappings": "AAAA;ACCA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY,MAAmB;AACnC,QAAM;AAAA,IACJ,OAAO,EAAE,QAAQ,0BAA0B;AAAA,IAC3C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,WAAW;AAEf,QAAM,kBAAkB,YAAY,MAAM;AACxC,mBAAe;AACf,QAAI,SAAS;AAAS,eAAS,QAAQ;AAAA,KACtC,CAAC,UAAU;AAEd,QAAM,kBAAkB,YAAY,CAAC,MAA2B;AAC9D,MAAE;AAAA,KACD;AAEH,QAAM,kBAAkB,SAAS,wBAAwB;AACzD,SACE,4DACE,qCAAC,iBAAD;AAAA,IAAiB,KAAK;AAAA,KACpB,qCAAC,UAAD,OACC,SAAS,qCAAC,UAAD,QAAe,OAE3B,qCAAC,YAAD;AAAA,IACE,cAAc,CAAC,GAAG;AAAA,IAClB,kBAAkB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAa;AAAA,IACb,cAAY;AAAA,IACZ,kBAAgB;AAAA,IAChB,QAAQ;AAAA,KAER,qCAAC,qBAAD;AAAA,IAAqB,UAAU;AAAA,IAAI,aAAa;AAAA,KAC9C,qCAAC,UAAD;AAAA;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable complexity */\nimport React, { useCallback, useEffect, useContext } from 'react';\nimport { DSPopperJS } from '@elliemae/ds-popperjs';\nimport AutocompleteContext from '../../AutocompleteCTX';\nimport { StyledContainerWithPopper, StyledPopperWrapper } from './styled';\nimport { MenuList } from '../menu-list';\nimport { useKeyboardNavigation } from './useKeyboardNavigation';\nimport { AutocompleteDataTestid } from '../../AutocompleteDataTestids';\n\nexport const Container = (): JSX.Element => {\n const {\n props: { startPlacementPreference, children, filter, placementOrderPreference },\n showPopover,\n setReferenceElement,\n setShowPopover,\n referenceElement,\n } = useContext(AutocompleteContext);\n\n useEffect(() => {\n const closePopper = () => {\n setShowPopover(false);\n };\n window.addEventListener('blur', closePopper);\n\n return () => {\n window.removeEventListener('blur', closePopper);\n };\n }, [setShowPopover]);\n\n const handleCloseMenu = useCallback(() => {\n setShowPopover(false);\n }, [setShowPopover]);\n\n const input = React.Children.only(children);\n const { onInputKeyDown } = useKeyboardNavigation();\n\n return (\n <StyledContainerWithPopper\n ref={setReferenceElement}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-controls=\"autocomplete-listbox\"\n aria-expanded={showPopover}\n onKeyDown={onInputKeyDown}\n data-testid={AutocompleteDataTestid.CONTAINER}\n >\n {input}\n {filter && (\n <DSPopperJS\n customOffset={[0, 5]}\n closeContextMenu={handleCloseMenu}\n referenceElement={referenceElement}\n showPopover={showPopover}\n startPlacementPreference={startPlacementPreference}\n placementOrderPreference={placementOrderPreference}\n withoutPortal\n withoutArrow\n withoutAnimation\n zIndex={10}\n >\n <StyledPopperWrapper tabIndex={-1}>\n <MenuList />\n </StyledPopperWrapper>\n </DSPopperJS>\n )}\n </StyledContainerWithPopper>\n );\n};\n"],
5
+ "mappings": "AAAA;ACCA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,MAAM,YAAY,MAAmB;AAC1C,QAAM;AAAA,IACJ,OAAO,EAAE,0BAA0B,UAAU,QAAQ;AAAA,IACrD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,WAAW;AAEf,YAAU,MAAM;AACd,UAAM,cAAc,MAAM;AACxB,qBAAe;AAAA;AAEjB,WAAO,iBAAiB,QAAQ;AAEhC,WAAO,MAAM;AACX,aAAO,oBAAoB,QAAQ;AAAA;AAAA,KAEpC,CAAC;AAEJ,QAAM,kBAAkB,YAAY,MAAM;AACxC,mBAAe;AAAA,KACd,CAAC;AAEJ,QAAM,QAAQ,OAAM,SAAS,KAAK;AAClC,QAAM,EAAE,mBAAmB;AAE3B,SACE,qCAAC,2BAAD;AAAA,IACE,KAAK;AAAA,IACL,MAAK;AAAA,IACL,qBAAkB;AAAA,IAClB,iBAAc;AAAA,IACd,iBAAe;AAAA,IACf,WAAW;AAAA,IACX,eAAa,uBAAuB;AAAA,KAEnC,OACA,UACC,qCAAC,YAAD;AAAA,IACE,cAAc,CAAC,GAAG;AAAA,IAClB,kBAAkB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAa;AAAA,IACb,cAAY;AAAA,IACZ,kBAAgB;AAAA,IAChB,QAAQ;AAAA,KAER,qCAAC,qBAAD;AAAA,IAAqB,UAAU;AAAA,KAC7B,qCAAC,UAAD;AAAA;",
6
6
  "names": []
7
7
  }
@@ -5,17 +5,12 @@ const StyledContainerWithPopper = styled.div`
5
5
  height: 28px;
6
6
  position: relative;
7
7
  `;
8
- const StyledContainerInline = styled.div`
9
- width: 100%;
10
- position: relative;
11
- `;
12
8
  const StyledPopperWrapper = styled.div`
13
9
  background: #fff;
14
10
  overflow: auto;
15
11
  position: relative;
16
12
  `;
17
13
  export {
18
- StyledContainerInline,
19
14
  StyledContainerWithPopper,
20
15
  StyledPopperWrapper
21
16
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/autocomplete/parts/container/styled.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import styled from 'styled-components';\n\nexport const StyledContainerWithPopper = styled.div`\n width: 100%;\n height: 28px;\n position: relative;\n`;\n\nexport const StyledContainerInline = styled.div`\n width: 100%;\n position: relative;\n`;\n\nexport const StyledPopperWrapper = styled.div`\n background: #fff;\n overflow: auto;\n position: relative;\n`;\n"],
5
- "mappings": "AAAA;ACAA;AAEO,MAAM,4BAA4B,OAAO;AAAA;AAAA;AAAA;AAAA;AAMzC,MAAM,wBAAwB,OAAO;AAAA;AAAA;AAAA;AAKrC,MAAM,sBAAsB,OAAO;AAAA;AAAA;AAAA;AAAA;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import styled from 'styled-components';\n\nexport const StyledContainerWithPopper = styled.div`\n width: 100%;\n height: 28px;\n position: relative;\n`;\n\nexport const StyledPopperWrapper = styled.div`\n background: #fff;\n overflow: auto;\n position: relative;\n`;\n"],
5
+ "mappings": "AAAA;ACAA;AAEO,MAAM,4BAA4B,OAAO;AAAA;AAAA;AAAA;AAAA;AAMzC,MAAM,sBAAsB,OAAO;AAAA;AAAA;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -5,7 +5,7 @@ import { findInCircularList } from "../../utils/listHelper";
5
5
  const isOptionFocuseable = (opt) => !["section", "separator"].includes(opt.type);
6
6
  const useKeyboardNavigation = () => {
7
7
  const {
8
- props: { onValueChange, options },
8
+ props: { onSelect, options },
9
9
  setShowPopover,
10
10
  showPopover,
11
11
  focusOptionIdx,
@@ -14,21 +14,15 @@ const useKeyboardNavigation = () => {
14
14
  } = useContext(AutocompleteContext);
15
15
  const currentItemIndex = options.findIndex((opt) => opt.dsId === focusOptionIdx);
16
16
  const currentItem = options.find((item) => item.type === "option" && item.dsId === focusOptionIdx);
17
- const selectOption = useCallback((e) => {
18
- if (onValueChange)
19
- onValueChange(currentItem.label, e);
20
- setShowPopover(false);
21
- }, [currentItem, setShowPopover, onValueChange]);
22
17
  const onInputKeyDown = useCallback((e) => {
23
- const targetElement = e.target;
24
- if (["ArrowDown", "ArrowUp", "Enter"].includes(e.key) || e.keyCode >= 48 && e.keyCode <= 90) {
18
+ if ((e.keyCode >= 48 && e.keyCode <= 90 || e.key === "Backspace") && !showPopover) {
25
19
  setShowPopover(true);
26
- }
27
- if (e.keyCode === 32 && targetElement.value === "" || e.key === "Enter") {
28
- if (showPopover) {
29
- e.preventDefault();
30
- selectOption(e);
31
- }
20
+ } else if (e.key === "Tab")
21
+ setShowPopover(false);
22
+ if (e.key === "Enter" && showPopover) {
23
+ e.preventDefault();
24
+ onSelect(currentItem?.label, e);
25
+ setShowPopover(false);
32
26
  }
33
27
  if (e.key === "ArrowDown") {
34
28
  e.preventDefault();
@@ -36,8 +30,6 @@ const useKeyboardNavigation = () => {
36
30
  const nextItemIndex = findInCircularList(options, currentItemIndex, isOptionFocuseable);
37
31
  setCurrentOption(options[nextItemIndex].dsId);
38
32
  scrollOptionIntoView(options[nextItemIndex].dsId);
39
- } else {
40
- setShowPopover(true);
41
33
  }
42
34
  }
43
35
  if (e.key === "ArrowUp") {
@@ -46,19 +38,21 @@ const useKeyboardNavigation = () => {
46
38
  const nextItemIndex = findInCircularList(options, currentItemIndex, isOptionFocuseable, -1);
47
39
  setCurrentOption(options[nextItemIndex].dsId);
48
40
  scrollOptionIntoView(options[nextItemIndex].dsId);
49
- } else {
50
- setShowPopover(true);
51
- setTimeout(() => {
52
- const nextItemIndex = findInCircularList(options, 0, isOptionFocuseable, -1);
53
- setCurrentOption(options[nextItemIndex].dsId);
54
- scrollOptionIntoView(options[nextItemIndex].dsId);
55
- });
56
41
  }
57
42
  }
58
43
  if (e.key === "Escape") {
59
44
  setShowPopover(false);
60
45
  }
61
- }, [scrollOptionIntoView, currentItemIndex, options, showPopover, setCurrentOption, setShowPopover, selectOption]);
46
+ }, [
47
+ currentItem?.label,
48
+ currentItemIndex,
49
+ onSelect,
50
+ options,
51
+ scrollOptionIntoView,
52
+ setCurrentOption,
53
+ setShowPopover,
54
+ showPopover
55
+ ]);
62
56
  return { onInputKeyDown };
63
57
  };
64
58
  export {
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/autocomplete/parts/container/useKeyboardNavigation.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\n/* eslint-disable max-depth */\n/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport React, { useCallback, useContext } from 'react';\nimport { DSAutocompleteT } from '../../react-desc-prop-types';\nimport AutocompleteContext from '../../AutocompleteCTX';\nimport { findInCircularList } from '../../utils/listHelper';\n\nconst isOptionFocuseable = (opt: DSAutocompleteT.OptionTypes): boolean => !['section', 'separator'].includes(opt.type);\n\nexport const useKeyboardNavigation = () => {\n const {\n props: { onSelect, options },\n setShowPopover,\n showPopover,\n focusOptionIdx,\n setCurrentOption,\n scrollOptionIntoView,\n } = useContext(AutocompleteContext);\n\n const currentItemIndex = options.findIndex((opt) => opt.dsId === focusOptionIdx);\n const currentItem = options.find(\n (item) => item.type === 'option' && item.dsId === focusOptionIdx,\n ) as DSAutocompleteT.ItemOption;\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n if (((e.keyCode >= 48 && e.keyCode <= 90) || e.key === 'Backspace') && !showPopover) {\n setShowPopover(true);\n } else if (e.key === 'Tab') setShowPopover(false);\n\n // =============================================================================\n // ENTER AND SPACE KEY SELECT OPTIONS AND OPEN CLOSE THE POPOVER\n // =============================================================================\n if (e.key === 'Enter' && showPopover) {\n e.preventDefault();\n onSelect(currentItem?.label, e);\n setShowPopover(false);\n }\n\n // =============================================================================\n // ARROWS UP AND DOWN\n // =============================================================================\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (showPopover) {\n const nextItemIndex = findInCircularList(options, currentItemIndex, isOptionFocuseable);\n setCurrentOption(options[nextItemIndex].dsId);\n scrollOptionIntoView(options[nextItemIndex].dsId);\n }\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n if (showPopover) {\n const nextItemIndex = findInCircularList(options, currentItemIndex, isOptionFocuseable, -1);\n setCurrentOption(options[nextItemIndex].dsId);\n scrollOptionIntoView(options[nextItemIndex].dsId);\n }\n }\n // =============================================================================\n // ESCAPE\n // =============================================================================\n if (e.key === 'Escape') {\n setShowPopover(false);\n }\n },\n [\n currentItem?.label,\n currentItemIndex,\n onSelect,\n options,\n scrollOptionIntoView,\n setCurrentOption,\n setShowPopover,\n showPopover,\n ],\n );\n\n return { onInputKeyDown };\n};\n"],
5
+ "mappings": "AAAA;ACIA;AAEA;AACA;AAEA,MAAM,qBAAqB,CAAC,QAA8C,CAAC,CAAC,WAAW,aAAa,SAAS,IAAI;AAE1G,MAAM,wBAAwB,MAAM;AACzC,QAAM;AAAA,IACJ,OAAO,EAAE,UAAU;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,WAAW;AAEf,QAAM,mBAAmB,QAAQ,UAAU,CAAC,QAAQ,IAAI,SAAS;AACjE,QAAM,cAAc,QAAQ,KAC1B,CAAC,SAAS,KAAK,SAAS,YAAY,KAAK,SAAS;AAGpD,QAAM,iBAA+D,YACnE,CAAC,MAAM;AACL,QAAM,GAAE,WAAW,MAAM,EAAE,WAAW,MAAO,EAAE,QAAQ,gBAAgB,CAAC,aAAa;AACnF,qBAAe;AAAA,eACN,EAAE,QAAQ;AAAO,qBAAe;AAK3C,QAAI,EAAE,QAAQ,WAAW,aAAa;AACpC,QAAE;AACF,eAAS,aAAa,OAAO;AAC7B,qBAAe;AAAA;AAMjB,QAAI,EAAE,QAAQ,aAAa;AACzB,QAAE;AACF,UAAI,aAAa;AACf,cAAM,gBAAgB,mBAAmB,SAAS,kBAAkB;AACpE,yBAAiB,QAAQ,eAAe;AACxC,6BAAqB,QAAQ,eAAe;AAAA;AAAA;AAGhD,QAAI,EAAE,QAAQ,WAAW;AACvB,QAAE;AACF,UAAI,aAAa;AACf,cAAM,gBAAgB,mBAAmB,SAAS,kBAAkB,oBAAoB;AACxF,yBAAiB,QAAQ,eAAe;AACxC,6BAAqB,QAAQ,eAAe;AAAA;AAAA;AAMhD,QAAI,EAAE,QAAQ,UAAU;AACtB,qBAAe;AAAA;AAAA,KAGnB;AAAA,IACE,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAIJ,SAAO,EAAE;AAAA;",
6
+ "names": []
7
+ }
@@ -1,50 +1,30 @@
1
1
  import * as React from "react";
2
- import React2, { useContext, useMemo, useCallback } from "react";
3
- import { DSCircularProgressIndicator } from "@elliemae/ds-circular-progress-indicator";
4
- import { Grid } from "@elliemae/ds-grid";
2
+ import React2, { useContext, useCallback } from "react";
5
3
  import { StyledListWrapper, StyledList, StyledVirtualListWrapper } from "./styled";
6
4
  import { AutocompleteDataTestid } from "../../AutocompleteDataTestids";
7
5
  import AutocompleteContext from "../../AutocompleteCTX";
8
- import { useOnElementResize } from "../../utils/hooks/useOnElementResize";
9
6
  import { useItemRenderer } from "./useItemRenderer";
10
- import { useMenuList } from "./useMenuList";
11
7
  const MenuList = () => {
12
8
  const {
13
- props: { menuMinWidth, menuMaxHeight, options, isLoading },
9
+ props: { options },
14
10
  referenceElement,
15
11
  inputRef,
16
12
  listRef,
17
13
  showPopover,
18
- wrapperListRef,
19
- controlsWrapperRef,
20
14
  virtualListHelpers: { totalSize }
21
15
  } = useContext(AutocompleteContext);
22
16
  const ItemRenderer = useItemRenderer();
23
- useMenuList();
24
- const { width } = useOnElementResize(controlsWrapperRef);
25
- const listWidth = useMemo(() => menuMinWidth || `${referenceElement?.offsetWidth}`, [menuMinWidth, referenceElement, width]);
26
17
  const handleOnFocus = useCallback(() => {
27
18
  inputRef.current?.focus();
28
19
  }, [inputRef]);
29
20
  return /* @__PURE__ */ React2.createElement(StyledListWrapper, {
30
21
  tabIndex: -1,
31
- ref: wrapperListRef,
32
22
  onMouseDown: (e) => e.preventDefault(),
33
- minWidth: listWidth,
34
- id: "combo-listbox",
23
+ minWidth: referenceElement?.offsetWidth,
24
+ id: "autocomplete-listbox",
35
25
  role: "listbox"
36
- }, isLoading && inputRef.current?.value !== "" ? /* @__PURE__ */ React2.createElement(Grid, {
37
- justifyContent: "center",
38
- alignItems: "center",
39
- style: { padding: 20 }
40
- }, /* @__PURE__ */ React2.createElement(DSCircularProgressIndicator, {
41
- size: "l",
42
- loading: isLoading,
43
- waiting: false,
44
- showTooltip: false
45
- })) : /* @__PURE__ */ React2.createElement(React2.Fragment, null, options.length > 0 && /* @__PURE__ */ React2.createElement(StyledVirtualListWrapper, {
26
+ }, options.length > 0 && /* @__PURE__ */ React2.createElement(StyledVirtualListWrapper, {
46
27
  tabIndex: -1,
47
- maxHeight: menuMaxHeight,
48
28
  ref: listRef
49
29
  }, /* @__PURE__ */ React2.createElement(StyledList, {
50
30
  tabIndex: -1,
@@ -52,7 +32,7 @@ const MenuList = () => {
52
32
  onFocus: handleOnFocus,
53
33
  "data-testid": AutocompleteDataTestid.LIST,
54
34
  style: { height: totalSize, margin: "8px 0px" }
55
- }, ItemRenderer))));
35
+ }, ItemRenderer)));
56
36
  };
57
37
  export {
58
38
  MenuList
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/autocomplete/parts/menu-list/MenuList.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useMemo, useCallback } from 'react';\nimport { DSCircularProgressIndicator } from '@elliemae/ds-circular-progress-indicator';\nimport { Grid } from '@elliemae/ds-grid';\n\nimport { StyledListWrapper, StyledList, StyledVirtualListWrapper } from './styled';\nimport { AutocompleteDataTestid } from '../../AutocompleteDataTestids';\nimport AutocompleteContext from '../../AutocompleteCTX';\nimport { useOnElementResize } from '../../utils/hooks/useOnElementResize';\nimport { useItemRenderer } from './useItemRenderer';\nimport { useMenuList } from './useMenuList';\n\nconst MenuList = (): JSX.Element => {\n const {\n props: { menuMinWidth, menuMaxHeight, options, isLoading },\n referenceElement,\n inputRef,\n listRef,\n showPopover,\n wrapperListRef,\n controlsWrapperRef,\n virtualListHelpers: { totalSize },\n } = useContext(AutocompleteContext);\n\n const ItemRenderer = useItemRenderer();\n useMenuList();\n const { width } = useOnElementResize(controlsWrapperRef);\n\n const listWidth = useMemo(\n () => (menuMinWidth as number) || `${referenceElement?.offsetWidth as number}`,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [menuMinWidth, referenceElement, width],\n );\n\n const handleOnFocus = useCallback(() => {\n inputRef.current?.focus();\n }, [inputRef]);\n\n return (\n <StyledListWrapper\n tabIndex={-1}\n ref={wrapperListRef}\n onMouseDown={(e) => e.preventDefault()}\n minWidth={listWidth}\n id=\"combo-listbox\"\n role=\"listbox\"\n >\n {isLoading && inputRef.current?.value !== '' ? (\n <Grid justifyContent=\"center\" alignItems=\"center\" style={{ padding: 20 }}>\n <DSCircularProgressIndicator size=\"l\" loading={isLoading} waiting={false} showTooltip={false} />\n </Grid>\n ) : (\n <>\n {options.length > 0 && (\n <StyledVirtualListWrapper tabIndex={-1} maxHeight={menuMaxHeight as number} ref={listRef}>\n <StyledList\n tabIndex={-1}\n aria-expanded={showPopover}\n onFocus={handleOnFocus}\n data-testid={AutocompleteDataTestid.LIST}\n style={{ height: totalSize, margin: '8px 0px' }}\n >\n {ItemRenderer}\n </StyledList>\n </StyledVirtualListWrapper>\n )}\n </>\n )}\n </StyledListWrapper>\n );\n};\n\nexport { MenuList };\n"],
5
- "mappings": "AAAA;ACAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAM,WAAW,MAAmB;AAClC,QAAM;AAAA,IACJ,OAAO,EAAE,cAAc,eAAe,SAAS;AAAA,IAC/C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB,EAAE;AAAA,MACpB,WAAW;AAEf,QAAM,eAAe;AACrB;AACA,QAAM,EAAE,UAAU,mBAAmB;AAErC,QAAM,YAAY,QAChB,MAAO,gBAA2B,GAAG,kBAAkB,eAEvD,CAAC,cAAc,kBAAkB;AAGnC,QAAM,gBAAgB,YAAY,MAAM;AACtC,aAAS,SAAS;AAAA,KACjB,CAAC;AAEJ,SACE,qCAAC,mBAAD;AAAA,IACE,UAAU;AAAA,IACV,KAAK;AAAA,IACL,aAAa,CAAC,MAAM,EAAE;AAAA,IACtB,UAAU;AAAA,IACV,IAAG;AAAA,IACH,MAAK;AAAA,KAEJ,aAAa,SAAS,SAAS,UAAU,KACxC,qCAAC,MAAD;AAAA,IAAM,gBAAe;AAAA,IAAS,YAAW;AAAA,IAAS,OAAO,EAAE,SAAS;AAAA,KAClE,qCAAC,6BAAD;AAAA,IAA6B,MAAK;AAAA,IAAI,SAAS;AAAA,IAAW,SAAS;AAAA,IAAO,aAAa;AAAA,QAGzF,4DACG,QAAQ,SAAS,KAChB,qCAAC,0BAAD;AAAA,IAA0B,UAAU;AAAA,IAAI,WAAW;AAAA,IAAyB,KAAK;AAAA,KAC/E,qCAAC,YAAD;AAAA,IACE,UAAU;AAAA,IACV,iBAAe;AAAA,IACf,SAAS;AAAA,IACT,eAAa,uBAAuB;AAAA,IACpC,OAAO,EAAE,QAAQ,WAAW,QAAQ;AAAA,KAEnC;AAAA;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useCallback } from 'react';\nimport { StyledListWrapper, StyledList, StyledVirtualListWrapper } from './styled';\nimport { AutocompleteDataTestid } from '../../AutocompleteDataTestids';\nimport AutocompleteContext from '../../AutocompleteCTX';\nimport { useItemRenderer } from './useItemRenderer';\n\nexport const MenuList = (): JSX.Element => {\n const {\n props: { options },\n referenceElement,\n inputRef,\n listRef,\n showPopover,\n virtualListHelpers: { totalSize },\n } = useContext(AutocompleteContext);\n\n const ItemRenderer = useItemRenderer();\n\n const handleOnFocus = useCallback(() => {\n inputRef.current?.focus();\n }, [inputRef]);\n\n return (\n <StyledListWrapper\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n minWidth={referenceElement?.offsetWidth}\n id=\"autocomplete-listbox\"\n role=\"listbox\"\n >\n {options.length > 0 && (\n <StyledVirtualListWrapper tabIndex={-1} ref={listRef}>\n <StyledList\n tabIndex={-1}\n aria-expanded={showPopover}\n onFocus={handleOnFocus}\n data-testid={AutocompleteDataTestid.LIST}\n style={{ height: totalSize, margin: '8px 0px' }}\n >\n {ItemRenderer}\n </StyledList>\n </StyledVirtualListWrapper>\n )}\n </StyledListWrapper>\n );\n};\n"],
5
+ "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AAEO,MAAM,WAAW,MAAmB;AACzC,QAAM;AAAA,IACJ,OAAO,EAAE;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB,EAAE;AAAA,MACpB,WAAW;AAEf,QAAM,eAAe;AAErB,QAAM,gBAAgB,YAAY,MAAM;AACtC,aAAS,SAAS;AAAA,KACjB,CAAC;AAEJ,SACE,qCAAC,mBAAD;AAAA,IACE,UAAU;AAAA,IACV,aAAa,CAAC,MAAM,EAAE;AAAA,IACtB,UAAU,kBAAkB;AAAA,IAC5B,IAAG;AAAA,IACH,MAAK;AAAA,KAEJ,QAAQ,SAAS,KAChB,qCAAC,0BAAD;AAAA,IAA0B,UAAU;AAAA,IAAI,KAAK;AAAA,KAC3C,qCAAC,YAAD;AAAA,IACE,UAAU;AAAA,IACV,iBAAe;AAAA,IACf,SAAS;AAAA,IACT,eAAa,uBAAuB;AAAA,IACpC,OAAO,EAAE,QAAQ,WAAW,QAAQ;AAAA,KAEnC;AAAA;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import * as React from "react";
2
2
  import styled from "styled-components";
3
3
  const StyledListWrapper = styled.div`
4
- min-width: ${(props) => props.inline ? "100%" : `${props.minWidth}px`};
4
+ min-width: ${({ minWidth }) => minWidth ? `${minWidth}px` : "100%"};
5
5
  `;
6
6
  const StyledList = styled.ul`
7
7
  position: relative;
@@ -9,9 +9,7 @@ const StyledList = styled.ul`
9
9
  `;
10
10
  const StyledVirtualListWrapper = styled.div`
11
11
  overflow-y: auto;
12
- margin-top: ${({ withHeader }) => withHeader ? "28px" : ""};
13
-
14
- max-height: ${({ maxHeight, inline }) => inline ? "" : `${!maxHeight ? "400" : maxHeight}px`};
12
+ max-height: ${({ maxHeight }) => `${!maxHeight ? "400" : maxHeight}px`};
15
13
  `;
16
14
  export {
17
15
  StyledList,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/autocomplete/parts/menu-list/styled.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import styled from 'styled-components';\n\nexport const StyledListWrapper = styled.div<{ inline: boolean | undefined; minWidth: string | number }>`\n min-width: ${(props) => (props.inline ? '100%' : `${props.minWidth}px`)};\n`;\n\nexport const StyledList = styled.ul`\n position: relative;\n padding: 0;\n`;\n\nexport const StyledVirtualListWrapper = styled.div<{\n inline: boolean | undefined;\n maxHeight: number;\n withHeader: boolean;\n}>`\n overflow-y: auto;\n margin-top: ${({ withHeader }) => (withHeader ? '28px' : '')};\n\n max-height: ${({ maxHeight, inline }) => (inline ? '' : `${!maxHeight ? '400' : maxHeight}px`)};\n`;\n"],
5
- "mappings": "AAAA;ACAA;AAEO,MAAM,oBAAoB,OAAO;AAAA,eACzB,CAAC,UAAW,MAAM,SAAS,SAAS,GAAG,MAAM;AAAA;AAGrD,MAAM,aAAa,OAAO;AAAA;AAAA;AAAA;AAK1B,MAAM,2BAA2B,OAAO;AAAA;AAAA,gBAM/B,CAAC,EAAE,iBAAkB,aAAa,SAAS;AAAA;AAAA,gBAE3C,CAAC,EAAE,WAAW,aAAc,SAAS,KAAK,GAAG,CAAC,YAAY,QAAQ;AAAA;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import styled from 'styled-components';\n\nexport const StyledListWrapper = styled.div<{ minWidth?: number | string }>`\n min-width: ${({ minWidth }) => (minWidth ? `${minWidth}px` : '100%')};\n`;\n\nexport const StyledList = styled.ul`\n position: relative;\n padding: 0;\n`;\n\nexport const StyledVirtualListWrapper = styled.div<{\n maxHeight: number;\n}>`\n overflow-y: auto;\n max-height: ${({ maxHeight }) => `${!maxHeight ? '400' : maxHeight}px`};\n`;\n"],
5
+ "mappings": "AAAA;ACAA;AAEO,MAAM,oBAAoB,OAAO;AAAA,eACzB,CAAC,EAAE,eAAgB,WAAW,GAAG,eAAe;AAAA;AAGxD,MAAM,aAAa,OAAO;AAAA;AAAA;AAAA;AAK1B,MAAM,2BAA2B,OAAO;AAAA;AAAA,gBAI/B,CAAC,EAAE,gBAAgB,GAAG,CAAC,YAAY,QAAQ;AAAA;",
6
6
  "names": []
7
7
  }
@@ -19,54 +19,52 @@ var __spreadValues = (a, b) => {
19
19
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
20
  import * as React from "react";
21
21
  import React2, { useMemo, useContext, useCallback } from "react";
22
- import { SingleMenuItem } from "@elliemae/ds-common/MenuItem";
23
- import { AutocompleteContext } from "../../AutocompleteCTX";
24
- import { isSelected } from "../../utils/listHelper";
22
+ import { SingleMenuItem, Section } from "@elliemae/ds-common/MenuItem";
23
+ import AutocompleteContext from "../../AutocompleteCTX";
25
24
  import { AutocompleteDataTestid } from "../../AutocompleteDataTestids";
26
25
  const useItemRenderer = () => {
27
26
  const {
28
- props: { options, onChange, selectedValues, onFilter },
27
+ props: { options, onSelect },
29
28
  inputRef,
30
29
  setShowPopover,
31
30
  focusOptionIdx,
32
31
  virtualListHelpers
33
32
  } = useContext(AutocompleteContext);
34
- const { virtualItems } = virtualListHelpers;
35
33
  const handleClick = useCallback((option, e) => {
36
- if (inputRef.current)
37
- inputRef.current.value = option.label;
38
- onFilter(option.label);
39
- onChange(option.label);
34
+ onSelect(option.label, e);
40
35
  setShowPopover(false);
41
- inputRef.current?.focus();
42
36
  e.stopPropagation();
43
37
  e.preventDefault();
44
- }, [onFilter, onChange, setShowPopover, inputRef]);
45
- const handleOnMouseDown = useCallback((e) => {
46
- e.preventDefault();
47
- }, []);
48
- const ItemRenderer = useMemo(() => virtualItems.map((vItem) => {
49
- const option = options[vItem.index];
50
- const generalProps = {
51
- wrapperStyles: { position: "absolute", top: vItem.start, left: 0, width: "100%" },
52
- key: `${option.dsId}`,
53
- innerRef: vItem.measureRef
54
- };
55
- if (option.type === "option") {
56
- return /* @__PURE__ */ React2.createElement(SingleMenuItem, __spreadProps(__spreadValues({}, generalProps), {
57
- value: option.value,
58
- label: option.label,
59
- dataTestid: AutocompleteDataTestid.OPTION,
60
- disabled: option.disabled,
61
- onClick: (e) => handleClick(option, e),
62
- onMouseDown: handleOnMouseDown,
63
- isActive: option.dsId === focusOptionIdx,
64
- isSelected: isSelected(selectedValues, option)
65
- }));
38
+ }, [onSelect, setShowPopover]);
39
+ return useMemo(() => {
40
+ if (virtualListHelpers) {
41
+ return virtualListHelpers.virtualItems.map((vItem) => {
42
+ const option = options[vItem.index];
43
+ const generalProps = {
44
+ wrapperStyles: { position: "absolute", top: vItem.start, left: 0, width: "100%" },
45
+ key: `${option.dsId}`,
46
+ innerRef: vItem.measureRef
47
+ };
48
+ if (option.type === "section") {
49
+ return /* @__PURE__ */ React2.createElement(Section, __spreadValues({
50
+ label: option.label
51
+ }, generalProps));
52
+ }
53
+ if (option.type === "option") {
54
+ return /* @__PURE__ */ React2.createElement(SingleMenuItem, __spreadProps(__spreadValues({}, generalProps), {
55
+ value: option.value,
56
+ label: option.label,
57
+ dataTestid: AutocompleteDataTestid.OPTION,
58
+ disabled: option.disabled,
59
+ onClick: (e) => handleClick(option, e),
60
+ isActive: option.dsId === focusOptionIdx
61
+ }));
62
+ }
63
+ return /* @__PURE__ */ React2.createElement(React2.Fragment, null);
64
+ });
66
65
  }
67
- return /* @__PURE__ */ React2.createElement(React2.Fragment, null);
68
- }), [options, focusOptionIdx, selectedValues, inputRef, virtualItems]);
69
- return ItemRenderer;
66
+ return null;
67
+ }, [options, focusOptionIdx, inputRef, virtualListHelpers]);
70
68
  };
71
69
  export {
72
70
  useItemRenderer
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/autocomplete/parts/menu-list/useItemRenderer.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* 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"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;ACCA;AAGA;AACA;AACA;AACA;AAGA,MAAM,kBAAkB,MAAyB;AAC/C,QAAM;AAAA,IACJ,OAAO,EAAE,SAAS,UAAU,gBAAgB;AAAA,IAC5C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,WAAW;AAEf,QAAM,EAAE,iBAAkD;AAE1D,QAAM,cAAc,YAClB,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,YAAY,CAAC,MAAuC;AAC5E,MAAE;AAAA,KACD;AAEH,QAAM,eAAe,QACnB,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,qCAAC,gBAAD,iCACM,eADN;AAAA,QAEE,OAAO,OAAO;AAAA,QACd,OAAO,OAAO;AAAA,QACd,YAAY,uBAAuB;AAAA,QACnC,UAAU,OAAO;AAAA,QACjB,SAAS,CAAC,MAAa,YAAY,QAAQ;AAAA,QAC3C,aAAa;AAAA,QACb,UAAU,OAAO,SAAS;AAAA,QAC1B,YAAY,WAAW,gBAAgB;AAAA;AAAA;AAI7C,WAAO;AAAA,MAEX,CAAC,SAAS,gBAAgB,gBAAgB,UAAU;AAGtD,SAAO;AAAA;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* 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"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;ACCA;AACA;AACA;AACA;AAGO,MAAM,kBAAkB,MAAiC;AAC9D,QAAM;AAAA,IACJ,OAAO,EAAE,SAAS;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,WAAW;AAEf,QAAM,cAAc,YAClB,CAAC,QAAoC,MAA2C;AAC9E,aAAS,OAAO,OAAO;AACvB,mBAAe;AACf,MAAE;AACF,MAAE;AAAA,KAEJ,CAAC,UAAU;AAGb,SAAO,QAAQ,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,qCAAC,SAAD;AAAA,YAAS,OAAO,OAAO;AAAA,aAAW;AAAA;AAE3C,YAAI,OAAO,SAAS,UAAU;AAC5B,iBACE,qCAAC,gBAAD,iCACM,eADN;AAAA,YAEE,OAAO,OAAO;AAAA,YACd,OAAO,OAAO;AAAA,YACd,YAAY,uBAAuB;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
  }