@elliemae/ds-controlled-form 2.4.2-rc.1 → 2.4.2-rc.13

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 (272) hide show
  1. package/cjs/autocomplete/config/useAutocomplete.js +0 -1
  2. package/cjs/autocomplete/parts/A11yFocusedOption.js +46 -0
  3. package/cjs/autocomplete/parts/container/Container.js +36 -24
  4. package/cjs/autocomplete/parts/container/styled.js +2 -2
  5. package/cjs/autocomplete/parts/container/useKeyboardNavigation.js +2 -2
  6. package/cjs/autocomplete/parts/menu-list/MenuList.js +6 -6
  7. package/cjs/autocomplete/parts/menu-list/styled.js +2 -2
  8. package/cjs/autocomplete/parts/menu-list/useItemRenderer.js +1 -1
  9. package/cjs/autocomplete/parts/styled.js +2 -0
  10. package/cjs/autocomplete/utils/listHelper.js +1 -1
  11. package/cjs/checkbox/ControlledCheckbox.js +1 -1
  12. package/cjs/checkbox/config/useValidateProps.js +6 -3
  13. package/cjs/checkbox/react-desc-prop-types.js +2 -1
  14. package/cjs/checkbox/styles.js +73 -27
  15. package/cjs/checkbox/utils/styleHelpers.js +20 -2
  16. package/cjs/combobox/ComboBoxCTX.js +6 -3
  17. package/cjs/combobox/config/useComboBox.js +16 -6
  18. package/cjs/combobox/config/useCorrectOptions.js +1 -2
  19. package/cjs/combobox/parts/A11yFocusedOption.js +14 -6
  20. package/cjs/combobox/parts/A11ySelectedValues.js +2 -4
  21. package/cjs/combobox/parts/DropdownIndicator.js +15 -7
  22. package/cjs/combobox/parts/container/Container.js +11 -14
  23. package/cjs/combobox/parts/container/styled.js +11 -10
  24. package/cjs/combobox/parts/controls/Controls.js +19 -27
  25. package/cjs/combobox/parts/controls/styled.js +54 -22
  26. package/cjs/combobox/parts/controls/useOnPillsNavigation.js +7 -15
  27. package/cjs/combobox/parts/controls-input/ControlsInput.js +2 -2
  28. package/cjs/combobox/parts/controls-input/styled.js +41 -11
  29. package/cjs/combobox/parts/controls-input/useControlsInput.js +4 -7
  30. package/cjs/combobox/parts/controls-input/useKeyboardNavigation.js +19 -28
  31. package/cjs/combobox/parts/controls-input/useMaskedOnChange.js +7 -7
  32. package/cjs/combobox/parts/dropdown-indicator/DropdownIndicator.js +2 -2
  33. package/cjs/combobox/parts/header-list/HeaderList.js +1 -1
  34. package/cjs/combobox/parts/header-list/styled.js +39 -10
  35. package/cjs/combobox/parts/header-list/useHeaderListHandlers.js +7 -14
  36. package/cjs/combobox/parts/menu-list/MenuList.js +8 -6
  37. package/cjs/combobox/parts/menu-list/styled.js +38 -20
  38. package/cjs/combobox/parts/menu-list/useItemRenderer.js +18 -17
  39. package/cjs/combobox/parts/multi-selected-values-container/MultiSelectedValuesContainer.js +1 -1
  40. package/cjs/combobox/parts/multi-selected-values-container/RemovableSelectedValuePill.js +1 -3
  41. package/cjs/combobox/parts/multi-selected-values-container/useGroupPills.js +1 -2
  42. package/cjs/combobox/parts/styled.js +6 -7
  43. package/cjs/combobox/react-desc-prop-types.js +3 -2
  44. package/cjs/combobox/sharedTypes.js +2 -2
  45. package/cjs/combobox/utils/listHelper.js +14 -9
  46. package/cjs/date-range-picker/config/useRangePickerLogic.js +4 -8
  47. package/cjs/date-range-picker/parts/ControlledDateRangeCalendar.js +0 -2
  48. package/cjs/date-range-picker/parts/ControlledDateRangeFromDate.js +0 -2
  49. package/cjs/date-range-picker/parts/ControlledDateRangeToDate.js +0 -2
  50. package/cjs/date-time-picker/config/useChangeHandlers.js +11 -15
  51. package/cjs/date-time-picker/config/useControlledDateTimePicker.js +14 -10
  52. package/cjs/date-time-picker/config/useFocusTracker.js +136 -0
  53. package/cjs/date-time-picker/config/useGetDestructuredValues.js +6 -6
  54. package/cjs/date-time-picker/config/useGetPropsBasedOnType.js +1 -1
  55. package/cjs/date-time-picker/config/useGetReferences.js +39 -18
  56. package/cjs/date-time-picker/config/useGlobalKeyHandlers.js +8 -12
  57. package/cjs/date-time-picker/config/useRelevantValueFromProps.js +1 -1
  58. package/cjs/date-time-picker/config/useValidateProps.js +42 -11
  59. package/cjs/date-time-picker/parts/ClearButton/ClearButton.js +10 -2
  60. package/cjs/date-time-picker/parts/ClearButton/useClearButton.js +12 -25
  61. package/cjs/date-time-picker/parts/ControlledDateTimePickerContent.js +4 -7
  62. package/cjs/date-time-picker/parts/DateInputs/DDInput.js +8 -6
  63. package/cjs/date-time-picker/parts/DateInputs/DateInputs.js +9 -4
  64. package/cjs/date-time-picker/parts/DateInputs/MMInput.js +8 -6
  65. package/cjs/date-time-picker/parts/DateInputs/YYYYInput.js +8 -6
  66. package/cjs/date-time-picker/parts/DateInputs/useDateInputs.js +84 -113
  67. package/cjs/date-time-picker/parts/Pickers/Calendar/CalendarDaysList.js +4 -4
  68. package/cjs/date-time-picker/parts/Pickers/Calendar/CalendarHead.js +25 -7
  69. package/cjs/date-time-picker/parts/Pickers/Calendar/CalendarIconTrigger.js +1 -1
  70. package/cjs/date-time-picker/parts/Pickers/Calendar/Day.js +21 -17
  71. package/cjs/date-time-picker/parts/Pickers/Calendar/Styleds.js +44 -15
  72. package/cjs/date-time-picker/parts/Pickers/Calendar/useConfigCalendarCTX.js +13 -14
  73. package/cjs/date-time-picker/parts/Pickers/Calendar/useCurrentDisplayedMonthYearLogic.js +2 -1
  74. package/cjs/date-time-picker/parts/Pickers/Calendar/useFocusLogic.js +2 -39
  75. package/cjs/date-time-picker/parts/Pickers/Calendar/useKeyboardHandlers.js +40 -73
  76. package/cjs/date-time-picker/parts/Pickers/Calendar/usePopperTriggerLogic.js +18 -29
  77. package/cjs/date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelIconTrigger.js +2 -1
  78. package/cjs/date-time-picker/parts/Pickers/CalendarWithTimeWheel/useConfigCalendarWithTimeWheelCTX.js +19 -27
  79. package/cjs/date-time-picker/parts/Pickers/TimeWheel/HoursList.js +15 -11
  80. package/cjs/date-time-picker/parts/Pickers/TimeWheel/MeridiemList.js +17 -13
  81. package/cjs/date-time-picker/parts/Pickers/TimeWheel/MinutesList.js +15 -11
  82. package/cjs/date-time-picker/parts/Pickers/TimeWheel/SecondsList.js +2 -2
  83. package/cjs/date-time-picker/parts/Pickers/TimeWheel/Styleds.js +47 -15
  84. package/cjs/date-time-picker/parts/Pickers/TimeWheel/TimeWheelContent.js +1 -1
  85. package/cjs/date-time-picker/parts/Pickers/TimeWheel/TimeWheelIconTrigger.js +1 -1
  86. package/cjs/date-time-picker/parts/Pickers/TimeWheel/useCurrentDisplayedWheelsLogic.js +3 -3
  87. package/cjs/date-time-picker/parts/Pickers/TimeWheel/useKeyboardHandlers.js +36 -230
  88. package/cjs/date-time-picker/parts/Pickers/TimeWheel/usePopperTriggerLogic.js +12 -17
  89. package/cjs/date-time-picker/parts/Styleds.js +12 -6
  90. package/cjs/date-time-picker/parts/TimeInputs/HHInput.js +7 -3
  91. package/cjs/date-time-picker/parts/TimeInputs/MeridiemInput.js +8 -7
  92. package/cjs/date-time-picker/parts/TimeInputs/MinutesInput.js +8 -6
  93. package/cjs/date-time-picker/parts/TimeInputs/TimeInputs.js +11 -6
  94. package/cjs/date-time-picker/parts/TimeInputs/useTimeInputs.js +55 -97
  95. package/cjs/date-time-picker/utils/constants.js +0 -12
  96. package/cjs/date-time-picker/utils/dateHelpers.js +17 -34
  97. package/cjs/date-time-picker/utils/hooks/useGetStartingFocusedDay.js +38 -36
  98. package/cjs/date-time-picker/utils/hooks/useOnClickOutside.js +1 -3
  99. package/cjs/date-time-picker/utils/stringHelpers.js +5 -11
  100. package/cjs/input-group/InputGroup.js +8 -7
  101. package/cjs/input-group/exported-related/data-test-ids.js +12 -0
  102. package/cjs/input-group/exported-related/index.js +12 -0
  103. package/cjs/input-group/exported-related/theming.js +13 -0
  104. package/cjs/input-group/styled.js +90 -23
  105. package/cjs/large-text-input/DSControlledLargeTextInput.js +1 -1
  106. package/cjs/large-text-input/styles.js +27 -13
  107. package/cjs/mask-hook/hooks/useNumberMask.js +1 -5
  108. package/cjs/mask-hook/hooks/usePhoneMask.js +1 -4
  109. package/cjs/mask-hook/hooks/useRegExpMask.js +4 -7
  110. package/cjs/mask-hook/hooks/useSSNMask.js +1 -4
  111. package/cjs/mask-hook/hooks/useZipCodeMask.js +1 -4
  112. package/cjs/mask-hook/utils/addSpecialCharacters.js +0 -1
  113. package/cjs/mask-hook/utils/flatStringArray.js +0 -1
  114. package/cjs/text-input/config/useInputText.js +0 -1
  115. package/cjs/text-input/styled/borders.js +18 -11
  116. package/cjs/text-input/styled/components.js +49 -10
  117. package/cjs/toggle/ControlledToggle.js +2 -3
  118. package/cjs/toggle/styles.js +7 -5
  119. package/esm/autocomplete/config/useAutocomplete.js +0 -1
  120. package/esm/autocomplete/parts/A11yFocusedOption.js +36 -0
  121. package/esm/autocomplete/parts/container/Container.js +39 -27
  122. package/esm/autocomplete/parts/container/styled.js +2 -2
  123. package/esm/autocomplete/parts/container/useKeyboardNavigation.js +2 -2
  124. package/esm/autocomplete/parts/menu-list/MenuList.js +7 -7
  125. package/esm/autocomplete/parts/menu-list/styled.js +2 -2
  126. package/esm/autocomplete/parts/menu-list/useItemRenderer.js +1 -1
  127. package/esm/autocomplete/parts/styled.js +1 -0
  128. package/esm/autocomplete/utils/listHelper.js +1 -1
  129. package/esm/checkbox/ControlledCheckbox.js +2 -2
  130. package/esm/checkbox/config/useValidateProps.js +6 -3
  131. package/esm/checkbox/react-desc-prop-types.js +2 -1
  132. package/esm/checkbox/styles.js +73 -24
  133. package/esm/checkbox/utils/styleHelpers.js +20 -2
  134. package/esm/combobox/ComboBoxCTX.js +6 -3
  135. package/esm/combobox/config/useComboBox.js +16 -6
  136. package/esm/combobox/config/useCorrectOptions.js +1 -2
  137. package/esm/combobox/parts/A11yFocusedOption.js +15 -7
  138. package/esm/combobox/parts/A11ySelectedValues.js +2 -4
  139. package/esm/combobox/parts/DropdownIndicator.js +15 -6
  140. package/esm/combobox/parts/container/Container.js +11 -14
  141. package/esm/combobox/parts/container/styled.js +11 -6
  142. package/esm/combobox/parts/controls/Controls.js +19 -27
  143. package/esm/combobox/parts/controls/styled.js +54 -18
  144. package/esm/combobox/parts/controls/useOnPillsNavigation.js +7 -15
  145. package/esm/combobox/parts/controls-input/ControlsInput.js +2 -2
  146. package/esm/combobox/parts/controls-input/styled.js +41 -7
  147. package/esm/combobox/parts/controls-input/useControlsInput.js +4 -7
  148. package/esm/combobox/parts/controls-input/useKeyboardNavigation.js +20 -29
  149. package/esm/combobox/parts/controls-input/useMaskedOnChange.js +7 -7
  150. package/esm/combobox/parts/dropdown-indicator/DropdownIndicator.js +2 -2
  151. package/esm/combobox/parts/header-list/HeaderList.js +1 -1
  152. package/esm/combobox/parts/header-list/styled.js +40 -7
  153. package/esm/combobox/parts/header-list/useHeaderListHandlers.js +7 -14
  154. package/esm/combobox/parts/menu-list/MenuList.js +8 -6
  155. package/esm/combobox/parts/menu-list/styled.js +38 -17
  156. package/esm/combobox/parts/menu-list/useItemRenderer.js +20 -19
  157. package/esm/combobox/parts/multi-selected-values-container/MultiSelectedValuesContainer.js +1 -1
  158. package/esm/combobox/parts/multi-selected-values-container/RemovableSelectedValuePill.js +1 -3
  159. package/esm/combobox/parts/multi-selected-values-container/useGroupPills.js +1 -2
  160. package/esm/combobox/parts/styled.js +6 -3
  161. package/esm/combobox/react-desc-prop-types.js +3 -2
  162. package/esm/combobox/sharedTypes.js +2 -2
  163. package/esm/combobox/utils/listHelper.js +14 -10
  164. package/esm/date-range-picker/config/useRangePickerLogic.js +3 -7
  165. package/esm/date-range-picker/parts/ControlledDateRangeCalendar.js +0 -2
  166. package/esm/date-range-picker/parts/ControlledDateRangeFromDate.js +0 -2
  167. package/esm/date-range-picker/parts/ControlledDateRangeToDate.js +0 -2
  168. package/esm/date-time-picker/config/useChangeHandlers.js +11 -15
  169. package/esm/date-time-picker/config/useControlledDateTimePicker.js +14 -10
  170. package/esm/date-time-picker/config/useFocusTracker.js +132 -0
  171. package/esm/date-time-picker/config/useGetDestructuredValues.js +6 -6
  172. package/esm/date-time-picker/config/useGetPropsBasedOnType.js +1 -1
  173. package/esm/date-time-picker/config/useGetReferences.js +40 -19
  174. package/esm/date-time-picker/config/useGlobalKeyHandlers.js +8 -12
  175. package/esm/date-time-picker/config/useRelevantValueFromProps.js +1 -1
  176. package/esm/date-time-picker/config/useValidateProps.js +42 -11
  177. package/esm/date-time-picker/parts/ClearButton/ClearButton.js +10 -2
  178. package/esm/date-time-picker/parts/ClearButton/useClearButton.js +12 -25
  179. package/esm/date-time-picker/parts/ControlledDateTimePickerContent.js +4 -7
  180. package/esm/date-time-picker/parts/DateInputs/DDInput.js +8 -6
  181. package/esm/date-time-picker/parts/DateInputs/DateInputs.js +9 -4
  182. package/esm/date-time-picker/parts/DateInputs/MMInput.js +8 -6
  183. package/esm/date-time-picker/parts/DateInputs/YYYYInput.js +8 -6
  184. package/esm/date-time-picker/parts/DateInputs/useDateInputs.js +85 -114
  185. package/esm/date-time-picker/parts/Pickers/Calendar/CalendarDaysList.js +4 -4
  186. package/esm/date-time-picker/parts/Pickers/Calendar/CalendarHead.js +26 -8
  187. package/esm/date-time-picker/parts/Pickers/Calendar/CalendarIconTrigger.js +1 -1
  188. package/esm/date-time-picker/parts/Pickers/Calendar/Day.js +21 -17
  189. package/esm/date-time-picker/parts/Pickers/Calendar/Styleds.js +44 -14
  190. package/esm/date-time-picker/parts/Pickers/Calendar/useConfigCalendarCTX.js +12 -13
  191. package/esm/date-time-picker/parts/Pickers/Calendar/useCurrentDisplayedMonthYearLogic.js +2 -1
  192. package/esm/date-time-picker/parts/Pickers/Calendar/useFocusLogic.js +3 -40
  193. package/esm/date-time-picker/parts/Pickers/Calendar/useKeyboardHandlers.js +40 -73
  194. package/esm/date-time-picker/parts/Pickers/Calendar/usePopperTriggerLogic.js +18 -29
  195. package/esm/date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelIconTrigger.js +2 -1
  196. package/esm/date-time-picker/parts/Pickers/CalendarWithTimeWheel/useConfigCalendarWithTimeWheelCTX.js +19 -27
  197. package/esm/date-time-picker/parts/Pickers/TimeWheel/HoursList.js +16 -12
  198. package/esm/date-time-picker/parts/Pickers/TimeWheel/MeridiemList.js +18 -14
  199. package/esm/date-time-picker/parts/Pickers/TimeWheel/MinutesList.js +16 -12
  200. package/esm/date-time-picker/parts/Pickers/TimeWheel/SecondsList.js +2 -2
  201. package/esm/date-time-picker/parts/Pickers/TimeWheel/Styleds.js +47 -14
  202. package/esm/date-time-picker/parts/Pickers/TimeWheel/TimeWheelContent.js +1 -1
  203. package/esm/date-time-picker/parts/Pickers/TimeWheel/TimeWheelIconTrigger.js +1 -1
  204. package/esm/date-time-picker/parts/Pickers/TimeWheel/useCurrentDisplayedWheelsLogic.js +3 -3
  205. package/esm/date-time-picker/parts/Pickers/TimeWheel/useKeyboardHandlers.js +36 -230
  206. package/esm/date-time-picker/parts/Pickers/TimeWheel/usePopperTriggerLogic.js +12 -17
  207. package/esm/date-time-picker/parts/Styleds.js +12 -6
  208. package/esm/date-time-picker/parts/TimeInputs/HHInput.js +7 -3
  209. package/esm/date-time-picker/parts/TimeInputs/MeridiemInput.js +8 -7
  210. package/esm/date-time-picker/parts/TimeInputs/MinutesInput.js +8 -6
  211. package/esm/date-time-picker/parts/TimeInputs/TimeInputs.js +11 -6
  212. package/esm/date-time-picker/parts/TimeInputs/useTimeInputs.js +55 -97
  213. package/esm/date-time-picker/utils/constants.js +1 -7
  214. package/esm/date-time-picker/utils/dateHelpers.js +17 -34
  215. package/esm/date-time-picker/utils/hooks/useGetStartingFocusedDay.js +38 -36
  216. package/esm/date-time-picker/utils/hooks/useOnClickOutside.js +1 -3
  217. package/esm/date-time-picker/utils/stringHelpers.js +5 -11
  218. package/esm/input-group/InputGroup.js +5 -4
  219. package/esm/input-group/exported-related/data-test-ids.js +8 -0
  220. package/esm/input-group/exported-related/index.js +2 -0
  221. package/esm/input-group/exported-related/theming.js +8 -0
  222. package/esm/input-group/styled.js +89 -18
  223. package/esm/large-text-input/DSControlledLargeTextInput.js +1 -1
  224. package/esm/large-text-input/styles.js +27 -9
  225. package/esm/mask-hook/hooks/useNumberMask.js +1 -5
  226. package/esm/mask-hook/hooks/usePhoneMask.js +1 -4
  227. package/esm/mask-hook/hooks/useRegExpMask.js +4 -7
  228. package/esm/mask-hook/hooks/useSSNMask.js +1 -4
  229. package/esm/mask-hook/hooks/useZipCodeMask.js +1 -4
  230. package/esm/mask-hook/utils/addSpecialCharacters.js +0 -1
  231. package/esm/mask-hook/utils/flatStringArray.js +0 -1
  232. package/esm/text-input/config/useInputText.js +0 -1
  233. package/esm/text-input/styled/borders.js +18 -7
  234. package/esm/text-input/styled/components.js +49 -6
  235. package/esm/toggle/ControlledToggle.js +0 -1
  236. package/esm/toggle/styles.js +7 -5
  237. package/package.json +39 -15
  238. package/types/autocomplete/parts/A11yFocusedOption.d.ts +5 -0
  239. package/types/autocomplete/parts/container/styled.d.ts +1 -1
  240. package/types/autocomplete/parts/styled.d.ts +0 -0
  241. package/types/autocomplete/utils/listHelper.d.ts +5 -5
  242. package/types/checkbox/react-desc-prop-types.d.ts +1 -1
  243. package/types/checkbox/styles.d.ts +1 -0
  244. package/types/combobox/parts/menu-list/styled.d.ts +1 -0
  245. package/types/combobox/react-desc-prop-types.d.ts +8 -6
  246. package/types/combobox/sharedTypes.d.ts +3 -2
  247. package/types/combobox/utils/listHelper.d.ts +1 -0
  248. package/types/date-time-picker/config/useChangeHandlers.d.ts +3 -1
  249. package/types/date-time-picker/config/useControlledDateTimePicker.d.ts +2 -5
  250. package/types/date-time-picker/config/useFocusTracker.d.ts +38 -0
  251. package/types/date-time-picker/config/useGetPropsBasedOnType.d.ts +6 -6
  252. package/types/date-time-picker/config/useGetReferences.d.ts +30 -36
  253. package/types/date-time-picker/config/useGlobalKeyHandlers.d.ts +3 -1
  254. package/types/date-time-picker/parts/DateInputs/DDInput.d.ts +2 -1
  255. package/types/date-time-picker/parts/DateInputs/MMInput.d.ts +2 -1
  256. package/types/date-time-picker/parts/DateInputs/YYYYInput.d.ts +2 -1
  257. package/types/date-time-picker/parts/Pickers/Calendar/useConfigCalendarCTX.d.ts +14 -0
  258. package/types/date-time-picker/parts/Pickers/Calendar/useFocusLogic.d.ts +1 -2
  259. package/types/date-time-picker/parts/Pickers/Calendar/usePopperTriggerLogic.d.ts +19 -0
  260. package/types/date-time-picker/parts/Pickers/TimeWheel/useKeyboardHandlers.d.ts +0 -6
  261. package/types/date-time-picker/parts/Pickers/TimeWheel/usePopperTriggerLogic.d.ts +14 -0
  262. package/types/date-time-picker/parts/TimeInputs/HHInput.d.ts +2 -1
  263. package/types/date-time-picker/parts/TimeInputs/MeridiemInput.d.ts +2 -1
  264. package/types/date-time-picker/parts/TimeInputs/MinutesInput.d.ts +2 -1
  265. package/types/date-time-picker/propTypes.d.ts +117 -0
  266. package/types/date-time-picker/sharedTypes.d.ts +1 -1
  267. package/types/date-time-picker/utils/constants.d.ts +0 -6
  268. package/types/input-group/exported-related/data-test-ids.d.ts +6 -0
  269. package/types/input-group/exported-related/index.d.ts +2 -0
  270. package/types/input-group/exported-related/theming.d.ts +6 -0
  271. package/types/input-group/styled.d.ts +4 -7
  272. package/types/text-input/config/useInputText.d.ts +4 -4
@@ -9,7 +9,6 @@ require('core-js/modules/esnext.async-iterator.some.js');
9
9
  require('core-js/modules/esnext.iterator.some.js');
10
10
  require('core-js/modules/esnext.async-iterator.find.js');
11
11
  require('core-js/modules/esnext.iterator.find.js');
12
- require('core-js/modules/web.dom-collections.iterator.js');
13
12
  require('core-js/modules/esnext.async-iterator.for-each.js');
14
13
  require('core-js/modules/esnext.iterator.for-each.js');
15
14
  var constants = require('../constants.js');
@@ -21,11 +20,11 @@ const isSelectedValueMultiple = value => Array.isArray(value);
21
20
  const isSelected = (value, activeOption) => {
22
21
  if (isSelectedValueMultiple(value)) {
23
22
  const multiValue = value;
24
- return multiValue.some(item => (item === null || item === void 0 ? void 0 : item.value) === (activeOption === null || activeOption === void 0 ? void 0 : activeOption.value));
23
+ return multiValue.some(item => item?.value === activeOption?.value);
25
24
  }
26
25
 
27
26
  const singleValue = value;
28
- return (singleValue === null || singleValue === void 0 ? void 0 : singleValue.value) === activeOption.value;
27
+ return singleValue?.value === activeOption.value;
29
28
  };
30
29
  const findInCircularList = function (list, from, criteria) {
31
30
  let step = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
@@ -75,8 +74,6 @@ const getSuggestedValueOnChange = (selectedOption, selectedValues) => {
75
74
  };
76
75
  const filterOptions = (inputValue, options) => options.filter(option => option.type === constants.MENU_OPTION_TYPES.OPTION && option.label.toLowerCase().includes(inputValue.toLowerCase()));
77
76
  const selectedValuesWithSections = (optionsToParse, multiSelectedValue) => {
78
- var _items2;
79
-
80
77
  const items = [];
81
78
  if (optionsToParse) optionsToParse.forEach(option => {
82
79
  // const isSelectedValue = multiSelectedValue.find((item) => item?.dsId === option.dsId);
@@ -85,9 +82,7 @@ const selectedValuesWithSections = (optionsToParse, multiSelectedValue) => {
85
82
  }
86
83
 
87
84
  if (option.type === constants.MENU_OPTION_TYPES.SECTION) {
88
- var _items;
89
-
90
- if (((_items = items[items.length - 1]) === null || _items === void 0 ? void 0 : _items.type) === constants.MENU_OPTION_TYPES.SECTION) {
85
+ if (items[items.length - 1]?.type === constants.MENU_OPTION_TYPES.SECTION) {
91
86
  items[items.length - 1] = option;
92
87
  } else {
93
88
  items.push(option);
@@ -95,13 +90,22 @@ const selectedValuesWithSections = (optionsToParse, multiSelectedValue) => {
95
90
  }
96
91
  });
97
92
 
98
- if (((_items2 = items[items.length - 1]) === null || _items2 === void 0 ? void 0 : _items2.type) === constants.MENU_OPTION_TYPES.SECTION) {
93
+ if (items[items.length - 1]?.type === constants.MENU_OPTION_TYPES.SECTION) {
99
94
  items.pop();
100
95
  }
101
96
 
102
97
  return items;
103
98
  };
104
99
  const getFilteredOptionsSelected = (filteredOption, selectedValues) => filteredOption.filter(option => option.type === constants.MENU_OPTION_TYPES.OPTION && isSelected(selectedValues, option));
100
+ const scrollIfNeeded = function (elem) {
101
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
102
+ behavior: 'smooth',
103
+ block: 'end',
104
+ inline: 'nearest'
105
+ };
106
+ const bounding = elem.getBoundingClientRect();
107
+ if (!(bounding.top >= 0 && bounding.left >= 0 && bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) && bounding.right <= (window.innerWidth || document.documentElement.clientWidth))) elem.scrollIntoView(options);
108
+ };
105
109
 
106
110
  exports.filterOptions = filterOptions;
107
111
  exports.findInCircularList = findInCircularList;
@@ -114,4 +118,5 @@ exports.getSuggestedValueOnChange = getSuggestedValueOnChange;
114
118
  exports.isSelected = isSelected;
115
119
  exports.isSelectedValueEmpty = isSelectedValueEmpty;
116
120
  exports.isSelectedValueMultiple = isSelectedValueMultiple;
121
+ exports.scrollIfNeeded = scrollIfNeeded;
117
122
  exports.selectedValuesWithSections = selectedValuesWithSections;
@@ -2,18 +2,16 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
- require('core-js/modules/web.dom-collections.iterator.js');
7
5
  require('core-js/modules/esnext.async-iterator.filter.js');
8
6
  require('core-js/modules/esnext.iterator.constructor.js');
9
7
  require('core-js/modules/esnext.iterator.filter.js');
10
8
  require('core-js/modules/esnext.async-iterator.for-each.js');
11
9
  require('core-js/modules/esnext.iterator.for-each.js');
10
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
12
11
  var React = require('react');
13
12
  require('../../date-time-picker/ControlledDateTimePicker.js');
14
13
  require('core-js/modules/esnext.async-iterator.map.js');
15
14
  require('core-js/modules/esnext.iterator.map.js');
16
- require('core-js/modules/es.string.replace.js');
17
15
  var dateHelpers = require('../../date-time-picker/utils/dateHelpers.js');
18
16
 
19
17
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -54,7 +52,7 @@ const useRangePickerLogic = _ref => {
54
52
  const dateToString = calendarChangeIsFrom ? toDate : changedDay;
55
53
  const dateTo = dateHelpers.getDayFromDateString(dateToString); // we force the "from" to ALWAYS be before the "to" date
56
54
 
57
- const isToBeforeFrom = (dateTo === null || dateTo === void 0 ? void 0 : dateTo.getTime()) < (dateFrom === null || dateFrom === void 0 ? void 0 : dateFrom.getTime());
55
+ const isToBeforeFrom = dateTo?.getTime() < dateFrom?.getTime();
58
56
  const newDateFromString = isToBeforeFrom ? dateToString : dateFromString;
59
57
  const forcingFromDatePick = isToBeforeFrom ? !calendarChangeIsFrom : false;
60
58
  const newDateToString = isToBeforeFrom ? dateFromString : dateToString;
@@ -129,19 +127,17 @@ const useRangePickerLogic = _ref => {
129
127
  }, [getChangedDayStringValues, onFromDateChange, onToDateChange]);
130
128
  const getIsStartRangeDay = React.useCallback(dayString => dayString === fromDate, [fromDate]);
131
129
  const getIsDayInRange = React.useCallback(dayString => {
132
- var _getDayFromDateString;
133
-
134
130
  const dayFrom = dateHelpers.getDayFromDateString(fromDate);
135
131
  const dayTo = dateHelpers.getDayFromDateString(toDate);
136
132
  if (!dayFrom || !dayTo || !dayString) return false;
137
- const newDayTime = (_getDayFromDateString = dateHelpers.getDayFromDateString(dayString)) === null || _getDayFromDateString === void 0 ? void 0 : _getDayFromDateString.getTime();
133
+ const newDayTime = dateHelpers.getDayFromDateString(dayString)?.getTime();
138
134
  return newDayTime <= dayTo.getTime() && newDayTime >= dayFrom.getTime();
139
135
  }, [fromDate, toDate]);
140
136
  const getIsEndRangeDay = React.useCallback(dayString => dayString === toDate, [toDate]);
141
137
  const getIsToBeforeFrom = React.useCallback((fromString, toString) => {
142
138
  const dateFrom = dateHelpers.getDayFromDateString(fromString);
143
139
  const dateTo = dateHelpers.getDayFromDateString(toString);
144
- return (dateTo === null || dateTo === void 0 ? void 0 : dateTo.getTime()) < (dateFrom === null || dateFrom === void 0 ? void 0 : dateFrom.getTime());
140
+ return dateTo?.getTime() < dateFrom?.getTime();
145
141
  }, []);
146
142
  const handleFromDateChange = React.useCallback((newVal, metaInfo) => {
147
143
  const isIncorrectOrder = getIsToBeforeFrom(newVal, toDate);
@@ -8,8 +8,6 @@ var ControlledDateTimePicker = require('../../date-time-picker/ControlledDateTim
8
8
  var ControlledDateTimePickerTypes = require('../../date-time-picker/ControlledDateTimePickerTypes.js');
9
9
  require('core-js/modules/esnext.async-iterator.map.js');
10
10
  require('core-js/modules/esnext.iterator.map.js');
11
- require('core-js/modules/web.dom-collections.iterator.js');
12
- require('core-js/modules/es.string.replace.js');
13
11
  require('core-js/modules/esnext.async-iterator.filter.js');
14
12
  require('core-js/modules/esnext.iterator.constructor.js');
15
13
  require('core-js/modules/esnext.iterator.filter.js');
@@ -9,8 +9,6 @@ var ControlledDateTimePicker = require('../../date-time-picker/ControlledDateTim
9
9
  var ControlledDateTimePickerTypes = require('../../date-time-picker/ControlledDateTimePickerTypes.js');
10
10
  require('core-js/modules/esnext.async-iterator.map.js');
11
11
  require('core-js/modules/esnext.iterator.map.js');
12
- require('core-js/modules/web.dom-collections.iterator.js');
13
- require('core-js/modules/es.string.replace.js');
14
12
  require('core-js/modules/esnext.async-iterator.filter.js');
15
13
  require('core-js/modules/esnext.iterator.constructor.js');
16
14
  require('core-js/modules/esnext.iterator.filter.js');
@@ -9,8 +9,6 @@ var ControlledDateTimePicker = require('../../date-time-picker/ControlledDateTim
9
9
  var ControlledDateTimePickerTypes = require('../../date-time-picker/ControlledDateTimePickerTypes.js');
10
10
  require('core-js/modules/esnext.async-iterator.map.js');
11
11
  require('core-js/modules/esnext.iterator.map.js');
12
- require('core-js/modules/web.dom-collections.iterator.js');
13
- require('core-js/modules/es.string.replace.js');
14
12
  require('core-js/modules/esnext.async-iterator.filter.js');
15
13
  require('core-js/modules/esnext.iterator.constructor.js');
16
14
  require('core-js/modules/esnext.iterator.filter.js');
@@ -26,7 +26,7 @@ const useChangeHandlers = _ref => {
26
26
  relevantValues,
27
27
  destructuredValues,
28
28
  propsBasedOnType,
29
- DOMRefs
29
+ focusTrackers
30
30
  } = _ref;
31
31
  const {
32
32
  tempDateString,
@@ -60,8 +60,8 @@ const useChangeHandlers = _ref => {
60
60
  meridiem
61
61
  } = destructuredValues;
62
62
  const {
63
- firstSegmentRef
64
- } = DOMRefs;
63
+ trackFocusFirstSegment
64
+ } = focusTrackers;
65
65
  const getDateMetaInfo = React.useCallback(function () {
66
66
  let newDateString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
67
67
  let metaInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -89,9 +89,9 @@ const useChangeHandlers = _ref => {
89
89
  appOnTimeChange(appTimeString, metaInfo); // don't do this on useEffect to avoid complete chaos
90
90
 
91
91
  setTimeString(newTimeString);
92
- const newDateTimeString = "".concat(newDateString, " ").concat(newTimeString);
92
+ const newDateTimeString = `${newDateString} ${newTimeString}`;
93
93
 
94
- const newMetaInfo = _objectSpread(_objectSpread(_objectSpread({}, getTimeMetaInfo(newTimeString, metaInfo)), getDateMetaInfo(newDateString, metaInfo)), {}, {
94
+ const newMetaInfo = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, metaInfo), getTimeMetaInfo(newTimeString, metaInfo)), getDateMetaInfo(newDateString, metaInfo)), {}, {
95
95
  newDateString,
96
96
  newTimeString,
97
97
  newDateTimeString
@@ -106,9 +106,9 @@ const useChangeHandlers = _ref => {
106
106
  appOnDateChange(appDateString, metaInfo); // don't do this on useEffect to avoid complete chaos
107
107
 
108
108
  setTempDateString(newDateString);
109
- const newDateTimeString = "".concat(newDateString, " ").concat(tempTimeString);
109
+ const newDateTimeString = `${newDateString} ${tempTimeString}`;
110
110
 
111
- const newMetaInfo = _objectSpread(_objectSpread(_objectSpread({}, getTimeMetaInfo(tempTimeString, metaInfo)), getDateMetaInfo(newDateString, metaInfo)), {}, {
111
+ const newMetaInfo = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, metaInfo), getTimeMetaInfo(tempTimeString, metaInfo)), getDateMetaInfo(newDateString, metaInfo)), {}, {
112
112
  newDateString,
113
113
  newTimeString: tempTimeString,
114
114
  newDateTimeString
@@ -122,9 +122,9 @@ const useChangeHandlers = _ref => {
122
122
  appOnTimeChange(appTimeString, metaInfo); // don't do this on useEffect to avoid complete chaos
123
123
 
124
124
  setTimeString(newTimeString);
125
- const newDateTimeString = "".concat(tempDateString, " ").concat(newTimeString);
125
+ const newDateTimeString = `${tempDateString} ${newTimeString}`;
126
126
 
127
- const newMetaInfo = _objectSpread(_objectSpread(_objectSpread({}, getTimeMetaInfo(newTimeString, metaInfo)), getDateMetaInfo(tempDateString, metaInfo)), {}, {
127
+ const newMetaInfo = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, metaInfo), getTimeMetaInfo(newTimeString, metaInfo)), getDateMetaInfo(tempDateString, metaInfo)), {}, {
128
128
  newDateTimeString,
129
129
  newDateString: tempDateString,
130
130
  newTimeString
@@ -241,12 +241,8 @@ const useChangeHandlers = _ref => {
241
241
  if (isDateTime) handleChangeComposedDateTimeString('__/__/____', '__:__ __', metaInfo);
242
242
  if (isDate) handleChangeComposedDateString('__/__/____', metaInfo);
243
243
  if (isTime) handleChangeComposedTimeString('__:__ __', metaInfo);
244
- setTimeout(() => {
245
- var _firstSegmentRef$curr;
246
-
247
- (_firstSegmentRef$curr = firstSegmentRef.current) === null || _firstSegmentRef$curr === void 0 ? void 0 : _firstSegmentRef$curr.focus();
248
- });
249
- }, [appOnDayChange, appOnHourChange, appOnMeridiemChange, appOnMinuteChange, appOnMonthChange, appOnYearChange, firstSegmentRef, handleChangeComposedDateString, handleChangeComposedDateTimeString, handleChangeComposedTimeString, isDate, isDateTime, isTime]);
244
+ trackFocusFirstSegment();
245
+ }, [appOnDayChange, appOnHourChange, appOnMeridiemChange, appOnMinuteChange, appOnMonthChange, appOnYearChange, handleChangeComposedDateString, handleChangeComposedDateTimeString, handleChangeComposedTimeString, isDate, isDateTime, isTime, trackFocusFirstSegment]);
250
246
  return React.useMemo(() => ({
251
247
  handleChangeComposedDateTimeString,
252
248
  handleChangeComposedDateString,
@@ -2,16 +2,16 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
- require('core-js/modules/web.dom-collections.iterator.js');
7
5
  require('core-js/modules/esnext.async-iterator.filter.js');
8
6
  require('core-js/modules/esnext.iterator.constructor.js');
9
7
  require('core-js/modules/esnext.iterator.filter.js');
10
8
  require('core-js/modules/esnext.async-iterator.for-each.js');
11
9
  require('core-js/modules/esnext.iterator.for-each.js');
10
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
12
11
  var React = require('react');
13
12
  var dsPropsHelpers = require('@elliemae/ds-props-helpers');
14
13
  var useGetPropsWithDefault = require('./useGetPropsWithDefault.js');
14
+ var useFocusTracker = require('./useFocusTracker.js');
15
15
  var useGetFlags = require('./useGetFlags.js');
16
16
  var useGetReferences = require('./useGetReferences.js');
17
17
  var useRelevantValueFromProps = require('./useRelevantValueFromProps.js');
@@ -36,6 +36,10 @@ const useControlledDateTimePicker = props => {
36
36
  const flags = useGetFlags.useGetFlags(propsWithDefaults);
37
37
  const DOMRefs = useGetReferences.useGetReferences(flags); // refs are used for "auto-advance" feature
38
38
 
39
+ const focusTrackers = useFocusTracker.useFocusTracker({
40
+ DOMRefs,
41
+ flags
42
+ });
39
43
  const relevantValues = useRelevantValueFromProps.useRelevantValueFromProps(propsWithDefaults);
40
44
  const propsBasedOnType = useGetPropsBasedOnType.useGetPropsBasedOnType(propsWithDefaults);
41
45
  const destructuredValues = useGetDestructuredValues.useGetDestructuredValues(_objectSpread(_objectSpread({}, propsBasedOnType), flags));
@@ -43,17 +47,18 @@ const useControlledDateTimePicker = props => {
43
47
  relevantValues,
44
48
  destructuredValues,
45
49
  propsBasedOnType,
46
- DOMRefs
50
+ DOMRefs,
51
+ focusTrackers
47
52
  });
48
53
  const globalKeyHandlers = useGlobalKeyHandlers.useGlobalKeyHandlers({
49
54
  changeHandlers,
50
55
  propsBasedOnType,
51
56
  DOMRefs,
52
- flags
57
+ flags,
58
+ focusTrackers
53
59
  }); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
54
60
 
55
61
  const dataAttrs = dsPropsHelpers.getDataProps(propsWithDefaults);
56
- const [latestInteractionRegion, setLatestInteractionRegion] = React.useState('');
57
62
  const {
58
63
  announcedDateValues,
59
64
  announcedTimeValues
@@ -63,14 +68,13 @@ const useControlledDateTimePicker = props => {
63
68
  isDateTimeSelector,
64
69
  isWithTimeInputs
65
70
  } = flags;
66
- const ariaCurrentValueForInputs = "current values: ".concat(isWithDateInputs ? "".concat(announcedDateValues) : '').concat(isDateTimeSelector ? ', ' : '').concat(isWithTimeInputs ? "".concat(announcedTimeValues) : '');
67
- const ctx = React__default["default"].useMemo(() => _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
71
+ const ariaCurrentValueForInputs = `current values: ${isWithDateInputs ? `${announcedDateValues}` : ''}${isDateTimeSelector ? ', ' : ''}${isWithTimeInputs ? `${announcedTimeValues}` : ''}`;
72
+ const ctx = React__default["default"].useMemo(() => _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
68
73
  props: propsWithDefaults,
69
- latestInteractionRegion,
70
- setLatestInteractionRegion,
71
74
  ariaCurrentValueForInputs,
75
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
72
76
  dataAttrs
73
- }, flags), DOMRefs), relevantValues), propsBasedOnType), destructuredValues), changeHandlers), globalKeyHandlers), [propsWithDefaults, latestInteractionRegion, ariaCurrentValueForInputs, dataAttrs, flags, DOMRefs, relevantValues, propsBasedOnType, destructuredValues, changeHandlers, globalKeyHandlers]);
77
+ }, focusTrackers), flags), DOMRefs), relevantValues), propsBasedOnType), destructuredValues), changeHandlers), globalKeyHandlers), [propsWithDefaults, ariaCurrentValueForInputs, dataAttrs, focusTrackers, flags, DOMRefs, relevantValues, propsBasedOnType, destructuredValues, changeHandlers, globalKeyHandlers]);
74
78
  return ctx;
75
79
  };
76
80
 
@@ -0,0 +1,136 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+
7
+ /* eslint-disable max-lines */
8
+ const useFocusTracker = _ref => {
9
+ let {
10
+ DOMRefs,
11
+ flags
12
+ } = _ref;
13
+ const [latestInteractionRegion, setLatestInteractionRegion] = React.useState('');
14
+ const [currFocusDescriber, setCurrFocusDescriber] = React.useState('');
15
+ const {
16
+ firstSegment,
17
+ lastSegment
18
+ } = DOMRefs;
19
+ const {
20
+ isDateSelector,
21
+ isTimeSelector
22
+ } = flags;
23
+ const trackFocusPicker = React.useCallback(() => {
24
+ let picker = 'datetime-picker-icon';
25
+ if (isDateSelector) picker = 'date-picker-icon';
26
+ if (isTimeSelector) picker = 'time-picker-icon';
27
+ if (latestInteractionRegion !== 'picker-icon') setLatestInteractionRegion('picker-icon');
28
+ if (picker !== currFocusDescriber) setCurrFocusDescriber(picker);
29
+ }, [currFocusDescriber, isDateSelector, isTimeSelector, latestInteractionRegion]);
30
+ const trackFocusFirstSegment = React.useCallback(() => {
31
+ let region = 'date-inputs';
32
+ if (firstSegment === 'hour-input') region = 'time-inputs';
33
+ if (firstSegment === 'date-picker-icon') region = 'picker-icon';
34
+ if (firstSegment === 'time-picker-icon') region = 'picker-icon';
35
+ if (firstSegment === 'datetime-picker-icon') region = 'picker-icon';
36
+ if (region !== latestInteractionRegion) setLatestInteractionRegion(region);
37
+ if (firstSegment !== currFocusDescriber) setCurrFocusDescriber(firstSegment);
38
+ }, [currFocusDescriber, firstSegment, latestInteractionRegion]);
39
+ const trackFocusLastSegment = React.useCallback(() => {
40
+ let region = 'date-inputs';
41
+ if (lastSegment === 'meridiem-input') region = 'time-inputs';
42
+ if (lastSegment === 'clear-btn') region = 'clear-btn';
43
+ if (lastSegment === 'date-picker-icon') region = 'picker-icon';
44
+ if (lastSegment === 'time-picker-icon') region = 'picker-icon';
45
+ if (lastSegment === 'datetime-picker-icon') region = 'picker-icon';
46
+ if (region !== latestInteractionRegion) setLatestInteractionRegion(region);
47
+ if (lastSegment !== currFocusDescriber) setCurrFocusDescriber(lastSegment);
48
+ }, [currFocusDescriber, lastSegment, latestInteractionRegion]);
49
+ return React.useMemo(() => ({
50
+ latestInteractionRegion,
51
+ setLatestInteractionRegion,
52
+ currFocusDescriber,
53
+ setCurrFocusDescriber,
54
+ trackFocusResetter: () => {
55
+ if (latestInteractionRegion !== '') setLatestInteractionRegion('');
56
+ if (currFocusDescriber !== '') setCurrFocusDescriber('');
57
+ },
58
+ trackFocusMonthInput: () => {
59
+ if (latestInteractionRegion !== 'date-inputs') setLatestInteractionRegion('date-inputs');
60
+ if (currFocusDescriber !== 'month-input') setCurrFocusDescriber('month-input');
61
+ },
62
+ trackFocusDayInput: () => {
63
+ if (latestInteractionRegion !== 'date-inputs') setLatestInteractionRegion('date-inputs');
64
+ if (currFocusDescriber !== 'day-input') setCurrFocusDescriber('day-input');
65
+ },
66
+ trackFocusYearInput: () => {
67
+ if (latestInteractionRegion !== 'date-inputs') setLatestInteractionRegion('date-inputs');
68
+ if (currFocusDescriber !== 'year-input') setCurrFocusDescriber('year-input');
69
+ },
70
+ trackFocusHourInput: () => {
71
+ if (latestInteractionRegion !== 'time-inputs') setLatestInteractionRegion('time-inputs');
72
+ if (currFocusDescriber !== 'hour-input') setCurrFocusDescriber('hour-input');
73
+ },
74
+ trackFocusMinuteInput: () => {
75
+ if (latestInteractionRegion !== 'time-inputs') setLatestInteractionRegion('time-inputs');
76
+ if (currFocusDescriber !== 'minute-input') setCurrFocusDescriber('minute-input');
77
+ },
78
+ trackFocusMeridiemInput: () => {
79
+ if (latestInteractionRegion !== 'time-inputs') setLatestInteractionRegion('time-inputs');
80
+ if (currFocusDescriber !== 'meridiem-input') setCurrFocusDescriber('meridiem-input');
81
+ },
82
+ trackFocusClearBtn: () => {
83
+ if (latestInteractionRegion !== 'clear-btn') setLatestInteractionRegion('clear-btn');
84
+ if (currFocusDescriber !== 'clear-btn') setCurrFocusDescriber('clear-btn');
85
+ },
86
+ trackFocusDatePickerIcon: () => {
87
+ if (latestInteractionRegion !== 'picker-icon') setLatestInteractionRegion('picker-icon');
88
+ if (currFocusDescriber !== 'date-picker-icon') setCurrFocusDescriber('date-picker-icon');
89
+ },
90
+ trackFocusTimePickerIcon: () => {
91
+ if (latestInteractionRegion !== 'picker-icon') setLatestInteractionRegion('picker-icon');
92
+ if (currFocusDescriber !== 'time-picker-icon') setCurrFocusDescriber('time-picker-icon');
93
+ },
94
+ trackFocusDatetimePickerIcon: () => {
95
+ if (latestInteractionRegion !== 'picker-icon') setLatestInteractionRegion('picker-icon');
96
+ if (currFocusDescriber !== 'datetime-picker-icon') setCurrFocusDescriber('datetime-picker-icon');
97
+ },
98
+ trackFocusCalendarPrevMonth: () => {
99
+ if (latestInteractionRegion !== 'calendar-head') setLatestInteractionRegion('calendar-head');
100
+ if (currFocusDescriber !== 'calendar-prev-month') setCurrFocusDescriber('calendar-prev-month');
101
+ },
102
+ trackFocusCalendarNextMonth: () => {
103
+ if (latestInteractionRegion !== 'calendar-head') setLatestInteractionRegion('calendar-head');
104
+ if (currFocusDescriber !== 'calendar-next-month') setCurrFocusDescriber('calendar-next-month');
105
+ },
106
+ trackFocusCalendarPrevYear: () => {
107
+ if (latestInteractionRegion !== 'calendar-head') setLatestInteractionRegion('calendar-head');
108
+ if (currFocusDescriber !== 'calendar-prev-year') setCurrFocusDescriber('calendar-prev-year');
109
+ },
110
+ trackFocusCalendarNextYear: () => {
111
+ if (latestInteractionRegion !== 'calendar-head') setLatestInteractionRegion('calendar-head');
112
+ if (currFocusDescriber !== 'calendar-next-year') setCurrFocusDescriber('calendar-next-year');
113
+ },
114
+ trackFocusCalendarMetafocusedDay: () => {
115
+ if (latestInteractionRegion !== 'calendar-days') setLatestInteractionRegion('calendar-days');
116
+ if (currFocusDescriber !== 'calendar-metafocused-day') setCurrFocusDescriber('calendar-metafocused-day');
117
+ },
118
+ trackFocusTimewheelCurrHour: () => {
119
+ if (latestInteractionRegion !== 'timewheel') setLatestInteractionRegion('timewheel');
120
+ if (currFocusDescriber !== 'timewheel-curr-hour') setCurrFocusDescriber('timewheel-curr-hour');
121
+ },
122
+ trackFocusTimewheelCurrMinute: () => {
123
+ if (latestInteractionRegion !== 'timewheel') setLatestInteractionRegion('timewheel');
124
+ if (currFocusDescriber !== 'timewheel-curr-minute') setCurrFocusDescriber('timewheel-curr-minute');
125
+ },
126
+ trackFocusTimewheelCurrMeridiem: () => {
127
+ if (latestInteractionRegion !== 'timewheel') setLatestInteractionRegion('timewheel');
128
+ if (currFocusDescriber !== 'timewheel-curr-meridiem') setCurrFocusDescriber('timewheel-curr-meridiem');
129
+ },
130
+ trackFocusPicker,
131
+ trackFocusFirstSegment,
132
+ trackFocusLastSegment
133
+ }), [currFocusDescriber, latestInteractionRegion, trackFocusPicker, trackFocusFirstSegment, trackFocusLastSegment]);
134
+ };
135
+
136
+ exports.useFocusTracker = useFocusTracker;
@@ -42,8 +42,8 @@ const useGetDestructuredDateValues = _ref => {
42
42
  const yearNum = numberHelpers.convertToPositiveNumberIfPossible(year);
43
43
  const announcedMonth = monthNum !== -1 ? constants.monthNames[monthNum - 1] : 'empty month';
44
44
  const announcedDay = dayNum !== -1 ? constants.announcableCardinalDays[dayNum] : 'empty day';
45
- const announcedYear = yearNum !== -1 ? stringHelpers.fillStringWithPlaceHolders("".concat(yearNum), 4, '0') : 'empty year';
46
- const announcedDateValues = "".concat(announcedMonth, ", ").concat(announcedDay, ", ").concat(announcedYear);
45
+ const announcedYear = yearNum !== -1 ? stringHelpers.fillStringWithPlaceHolders(`${yearNum}`, 4, '0') : 'empty year';
46
+ const announcedDateValues = `${announcedMonth}, ${announcedDay}, ${announcedYear}`;
47
47
  return React.useMemo(() => ({
48
48
  month,
49
49
  day,
@@ -77,12 +77,12 @@ const useGetDestructuredTimeValues = _ref2 => {
77
77
  const hoursNum = numberHelpers.convertToPositiveNumberIfPossible(hours);
78
78
  const minutesNum = numberHelpers.convertToPositiveNumberIfPossible(minutes); // 01 -> 1 ~ 09 -> 9 || 1_ -> 1 ~ 9_ -> 9 || empty...
79
79
 
80
- const announcedHours = hoursNum !== -1 ? "".concat(hoursNum) : 'empty hours'; // 01 -> 1 ~ 09 -> 9 || 1_ -> 1 ~ 9_ -> 9 || empty...
80
+ const announcedHours = hoursNum !== -1 ? `${hoursNum}` : 'empty hours'; // 01 -> 1 ~ 09 -> 9 || 1_ -> 1 ~ 9_ -> 9 || empty...
81
81
 
82
- const announcedMinutes = minutesNum !== -1 ? "".concat(minutesNum) : 'empty minutes';
82
+ const announcedMinutes = minutesNum !== -1 ? `${minutesNum}` : 'empty minutes';
83
83
  const announcedMeridiem = // eslint-disable-next-line no-nested-ternary
84
- meridiem === 'PM' ? "post meridiem" : meridiem === 'AM' ? 'ante meridiem' : 'empty meriediem';
85
- const announcedTimeValues = "".concat(announcedHours, ", ").concat(announcedMinutes, ", ").concat(announcedMeridiem);
84
+ meridiem === 'PM' ? `post meridiem` : meridiem === 'AM' ? 'ante meridiem' : 'empty meriediem';
85
+ const announcedTimeValues = `${announcedHours}, ${announcedMinutes}, ${announcedMeridiem}`;
86
86
  return React.useMemo(() => ({
87
87
  hours,
88
88
  minutes,
@@ -27,7 +27,7 @@ const useGetPropsBasedOnType = propsWithDefaults => {
27
27
  const appOnMonthChange = (isDateTime || isDate) && propsWithDefaults.onMonthChange ? propsWithDefaults.onMonthChange : noop;
28
28
  const appOnDayChange = (isDateTime || isDate) && propsWithDefaults.onDayChange ? propsWithDefaults.onDayChange : noop;
29
29
  const appOnYearChange = (isDateTime || isDate) && propsWithDefaults.onYearChange ? propsWithDefaults.onYearChange : noop;
30
- const emptyPickerStartingMonthDefault = "".concat(new Date().getMonth() + 1, "/__/").concat(new Date().getFullYear());
30
+ const emptyPickerStartingMonthDefault = `${new Date().getMonth() + 1}/__/${new Date().getFullYear()}`;
31
31
  const emptyPickerStartingMonth = (isDateTime || isDate) && propsWithDefaults.emptyPickerStartingMonth ? propsWithDefaults.emptyPickerStartingMonth : emptyPickerStartingMonthDefault;
32
32
  const onCalendarOpenFocusedDay = (isDateTime || isDate) && propsWithDefaults.onCalendarOpenFocusedDay ? propsWithDefaults.onCalendarOpenFocusedDay : undefined;
33
33
  /* -------------------------- -------------- --------------------------*/
@@ -9,10 +9,16 @@ const useGetReferences = _ref => {
9
9
  let {
10
10
  isWithDateInputs,
11
11
  isWithTimeInputs,
12
+ isDateSelector,
13
+ isTimeSelector,
14
+ isDateTimeSelector,
12
15
  withAnyPicker,
13
16
  withClearBtn
14
17
  } = _ref;
15
- // refs are used for "auto-advance" feature
18
+ // those 2 states are needed for focus tracking
19
+ const [firstSegment, setFirstSegment] = React.useState('');
20
+ const [lastSegment, setLastSegment] = React.useState(''); // refs are used for "auto-advance" feature
21
+
16
22
  const monthInputRef = React.useRef(null);
17
23
  const dayInputRef = React.useRef(null);
18
24
  const yearInputRef = React.useRef(null);
@@ -36,22 +42,38 @@ const useGetReferences = _ref => {
36
42
  const currMeridiemBtnRef = React.useRef(null);
37
43
  const nextMeridiemBtnRef = React.useRef(null);
38
44
  let firstSegmentRef = React.useRef(null);
39
- if (isWithDateInputs) firstSegmentRef = monthInputRef;else if (isWithTimeInputs) firstSegmentRef = hourInputRef;else if (withAnyPicker) firstSegmentRef = pickerButtonRef; // we need some non-ref to force refresh of the hooks dependencies when using firstSegmentRef
40
45
 
41
- const firstFragmentRefUpdateDeps = React.useMemo(() => ({
42
- isWithDateInputs,
43
- isWithTimeInputs,
44
- withAnyPicker
45
- }), [isWithDateInputs, isWithTimeInputs, withAnyPicker]);
46
+ if (isWithDateInputs) {
47
+ firstSegmentRef = monthInputRef;
48
+ if (firstSegment !== 'month-input') setFirstSegment('month-input');
49
+ } else if (isWithTimeInputs) {
50
+ firstSegmentRef = hourInputRef;
51
+ if (firstSegment !== 'hour-input') setFirstSegment('hour-input');
52
+ } else if (withAnyPicker) {
53
+ firstSegmentRef = pickerButtonRef;
54
+ if (isDateSelector && firstSegment !== 'date-picker-icon') setFirstSegment('date-picker-icon');
55
+ if (isTimeSelector && firstSegment !== 'time-picker-icon') setFirstSegment('time-picker-icon');
56
+ if (isDateTimeSelector && firstSegment !== 'datetime-picker-icon') setFirstSegment('datetime-picker-icon');
57
+ }
58
+
46
59
  let lastSegmentRef = React.useRef(null);
47
- if (withAnyPicker) lastSegmentRef = pickerButtonRef;else if (withClearBtn) lastSegmentRef = clearButtonRef;else if (isWithTimeInputs) lastSegmentRef = meridiemInputRef;else if (isWithDateInputs) lastSegmentRef = yearInputRef; // we need some non-ref to force refresh of the hooks dependencies when using lastSegmentRef
48
60
 
49
- const lastFragmentRefUpdateDeps = React.useMemo(() => ({
50
- withAnyPicker,
51
- withClearBtn,
52
- isWithTimeInputs,
53
- isWithDateInputs
54
- }), [isWithDateInputs, isWithTimeInputs, withAnyPicker, withClearBtn]);
61
+ if (withAnyPicker) {
62
+ lastSegmentRef = pickerButtonRef;
63
+ if (isDateSelector && lastSegment !== 'date-picker-icon') setLastSegment('date-picker-icon');
64
+ if (isTimeSelector && lastSegment !== 'time-picker-icon') setLastSegment('time-picker-icon');
65
+ if (isDateTimeSelector && lastSegment !== 'datetime-picker-icon') setLastSegment('datetime-picker-icon');
66
+ } else if (withClearBtn) {
67
+ lastSegmentRef = clearButtonRef;
68
+ if (lastSegment !== 'clear-btn') setLastSegment('clear-btn');
69
+ } else if (isWithTimeInputs) {
70
+ lastSegmentRef = meridiemInputRef;
71
+ if (lastSegment !== 'meridiem-input') setLastSegment('meridiem-input');
72
+ } else if (isWithDateInputs) {
73
+ lastSegmentRef = yearInputRef;
74
+ if (lastSegment !== 'year-input') setLastSegment('year-input');
75
+ }
76
+
55
77
  return React.useMemo(() => ({
56
78
  monthInputRef,
57
79
  dayInputRef,
@@ -77,10 +99,9 @@ const useGetReferences = _ref => {
77
99
  nextMeridiemBtnRef,
78
100
  firstSegmentRef,
79
101
  lastSegmentRef,
80
- firstFragmentRefUpdateDeps,
81
- lastFragmentRefUpdateDeps
82
- }), [firstFragmentRefUpdateDeps, lastFragmentRefUpdateDeps] // if we remove this last/first segment won't work
83
- );
102
+ firstSegment,
103
+ lastSegment
104
+ }), [firstSegment, lastSegment]);
84
105
  };
85
106
 
86
107
  exports.useGetReferences = useGetReferences;
@@ -24,8 +24,8 @@ const useGlobalKeyHandlers = _ref => {
24
24
  let {
25
25
  propsBasedOnType,
26
26
  changeHandlers,
27
- DOMRefs,
28
- flags
27
+ flags,
28
+ focusTrackers
29
29
  } = _ref;
30
30
  const {
31
31
  getIsOutOfRangeDay,
@@ -42,13 +42,13 @@ const useGlobalKeyHandlers = _ref => {
42
42
  handleChangeComposedDateTimeString,
43
43
  handleClearAll
44
44
  } = changeHandlers;
45
- const {
46
- lastSegmentRef,
47
- clearButtonRef
48
- } = DOMRefs;
49
45
  const {
50
46
  shouldPreserveClearableSpace
51
47
  } = flags;
48
+ const {
49
+ trackFocusClearBtn,
50
+ trackFocusLastSegment
51
+ } = focusTrackers;
52
52
  const onFillWithCurrentDateKeys = React.useCallback(function (e) {
53
53
  let metaInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
54
54
  isAutomaticFillTrigger: true
@@ -78,12 +78,8 @@ const useGlobalKeyHandlers = _ref => {
78
78
  appOnMinuteChange(minutes, e, metaInfo);
79
79
  appOnMeridiemChange(meridiem, e, metaInfo);
80
80
  handleChangeComposedDateTimeString(nowDateString, nowTimeString, finalMetaInfo);
81
- setTimeout(() => {
82
- var _clearButtonRef$curre, _lastSegmentRef$curre;
83
-
84
- if (shouldPreserveClearableSpace) (_clearButtonRef$curre = clearButtonRef.current) === null || _clearButtonRef$curre === void 0 ? void 0 : _clearButtonRef$curre.focus();else (_lastSegmentRef$curre = lastSegmentRef.current) === null || _lastSegmentRef$curre === void 0 ? void 0 : _lastSegmentRef$curre.focus();
85
- });
86
- }, [appOnDayChange, appOnHourChange, appOnMeridiemChange, appOnMinuteChange, appOnMonthChange, appOnYearChange, clearButtonRef, getIsDisabledDay, getIsDisabledTime, getIsOutOfRangeDay, handleChangeComposedDateTimeString, lastSegmentRef, shouldPreserveClearableSpace]);
81
+ if (shouldPreserveClearableSpace) trackFocusClearBtn();else trackFocusLastSegment();
82
+ }, [appOnDayChange, appOnHourChange, appOnMeridiemChange, appOnMinuteChange, appOnMonthChange, appOnYearChange, getIsDisabledDay, getIsDisabledTime, getIsOutOfRangeDay, handleChangeComposedDateTimeString, shouldPreserveClearableSpace, trackFocusClearBtn, trackFocusLastSegment]);
87
83
  const onGlobalKeyDown = React.useCallback(e => {
88
84
  const {
89
85
  key,
@@ -2,11 +2,11 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- require('core-js/modules/web.dom-collections.iterator.js');
6
5
  var React = require('react');
7
6
  var typeGuards = require('../utils/typeGuards.js');
8
7
  var stringHelpers = require('../utils/stringHelpers.js');
9
8
 
9
+ /* eslint-disable complexity */
10
10
  const useRelevantValueFromProps = props => {
11
11
  const dateStringFromProps = React.useMemo(() => {
12
12
  if (typeGuards.getIsDateTime(props)) return props.dateTime !== '' ? stringHelpers.dateTimeToDate(props.dateTime) : '__/__/____';