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

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 (91) hide show
  1. package/cjs/date-time-picker/config/useChangeHandlers.js +8 -12
  2. package/cjs/date-time-picker/config/useControlledDateTimePicker.js +13 -9
  3. package/cjs/date-time-picker/config/useFocusTracker.js +136 -0
  4. package/cjs/date-time-picker/config/useGetReferences.js +40 -19
  5. package/cjs/date-time-picker/config/useGlobalKeyHandlers.js +8 -12
  6. package/cjs/date-time-picker/parts/ClearButton/ClearButton.js +12 -2
  7. package/cjs/date-time-picker/parts/ClearButton/useClearButton.js +12 -25
  8. package/cjs/date-time-picker/parts/ControlledDateTimePickerContent.js +4 -7
  9. package/cjs/date-time-picker/parts/DateInputs/DDInput.js +8 -2
  10. package/cjs/date-time-picker/parts/DateInputs/DateInputs.js +9 -4
  11. package/cjs/date-time-picker/parts/DateInputs/MMInput.js +8 -2
  12. package/cjs/date-time-picker/parts/DateInputs/YYYYInput.js +8 -2
  13. package/cjs/date-time-picker/parts/DateInputs/useDateInputs.js +76 -95
  14. package/cjs/date-time-picker/parts/Pickers/Calendar/CalendarHead.js +31 -5
  15. package/cjs/date-time-picker/parts/Pickers/Calendar/Day.js +16 -10
  16. package/cjs/date-time-picker/parts/Pickers/Calendar/useConfigCalendarCTX.js +12 -12
  17. package/cjs/date-time-picker/parts/Pickers/Calendar/useFocusLogic.js +2 -38
  18. package/cjs/date-time-picker/parts/Pickers/Calendar/useKeyboardHandlers.js +40 -73
  19. package/cjs/date-time-picker/parts/Pickers/Calendar/usePopperTriggerLogic.js +18 -27
  20. package/cjs/date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelIconTrigger.js +1 -0
  21. package/cjs/date-time-picker/parts/Pickers/CalendarWithTimeWheel/useConfigCalendarWithTimeWheelCTX.js +17 -23
  22. package/cjs/date-time-picker/parts/Pickers/TimeWheel/HoursList.js +13 -7
  23. package/cjs/date-time-picker/parts/Pickers/TimeWheel/MeridiemList.js +14 -8
  24. package/cjs/date-time-picker/parts/Pickers/TimeWheel/MinutesList.js +13 -7
  25. package/cjs/date-time-picker/parts/Pickers/TimeWheel/useKeyboardHandlers.js +36 -230
  26. package/cjs/date-time-picker/parts/Pickers/TimeWheel/usePopperTriggerLogic.js +11 -13
  27. package/cjs/date-time-picker/parts/TimeInputs/HHInput.js +8 -2
  28. package/cjs/date-time-picker/parts/TimeInputs/MeridiemInput.js +8 -2
  29. package/cjs/date-time-picker/parts/TimeInputs/MinutesInput.js +8 -2
  30. package/cjs/date-time-picker/parts/TimeInputs/TimeInputs.js +11 -6
  31. package/cjs/date-time-picker/parts/TimeInputs/useTimeInputs.js +44 -74
  32. package/cjs/date-time-picker/utils/constants.js +0 -12
  33. package/cjs/date-time-picker/utils/hooks/useGetStartingFocusedDay.js +38 -36
  34. package/esm/autocomplete/config/useAutocomplete.js +2 -2
  35. package/esm/combobox/config/useComboBox.js +2 -2
  36. package/esm/date-range-picker/config/useRangePickerLogic.js +2 -2
  37. package/esm/date-time-picker/config/useChangeHandlers.js +8 -12
  38. package/esm/date-time-picker/config/useControlledDateTimePicker.js +13 -9
  39. package/esm/date-time-picker/config/useFocusTracker.js +132 -0
  40. package/esm/date-time-picker/config/useGetReferences.js +41 -20
  41. package/esm/date-time-picker/config/useGlobalKeyHandlers.js +8 -12
  42. package/esm/date-time-picker/parts/ClearButton/ClearButton.js +12 -2
  43. package/esm/date-time-picker/parts/ClearButton/useClearButton.js +12 -25
  44. package/esm/date-time-picker/parts/ControlledDateTimePickerContent.js +4 -7
  45. package/esm/date-time-picker/parts/DateInputs/DDInput.js +8 -2
  46. package/esm/date-time-picker/parts/DateInputs/DateInputs.js +9 -4
  47. package/esm/date-time-picker/parts/DateInputs/MMInput.js +8 -2
  48. package/esm/date-time-picker/parts/DateInputs/YYYYInput.js +8 -2
  49. package/esm/date-time-picker/parts/DateInputs/useDateInputs.js +77 -96
  50. package/esm/date-time-picker/parts/Pickers/Calendar/CalendarHead.js +32 -6
  51. package/esm/date-time-picker/parts/Pickers/Calendar/Day.js +16 -10
  52. package/esm/date-time-picker/parts/Pickers/Calendar/useConfigCalendarCTX.js +14 -14
  53. package/esm/date-time-picker/parts/Pickers/Calendar/useFocusLogic.js +3 -39
  54. package/esm/date-time-picker/parts/Pickers/Calendar/useKeyboardHandlers.js +40 -73
  55. package/esm/date-time-picker/parts/Pickers/Calendar/usePopperTriggerLogic.js +18 -27
  56. package/esm/date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelIconTrigger.js +1 -0
  57. package/esm/date-time-picker/parts/Pickers/CalendarWithTimeWheel/useConfigCalendarWithTimeWheelCTX.js +17 -23
  58. package/esm/date-time-picker/parts/Pickers/TimeWheel/HoursList.js +14 -8
  59. package/esm/date-time-picker/parts/Pickers/TimeWheel/MeridiemList.js +15 -9
  60. package/esm/date-time-picker/parts/Pickers/TimeWheel/MinutesList.js +14 -8
  61. package/esm/date-time-picker/parts/Pickers/TimeWheel/useKeyboardHandlers.js +36 -230
  62. package/esm/date-time-picker/parts/Pickers/TimeWheel/usePopperTriggerLogic.js +11 -13
  63. package/esm/date-time-picker/parts/TimeInputs/HHInput.js +8 -2
  64. package/esm/date-time-picker/parts/TimeInputs/MeridiemInput.js +8 -2
  65. package/esm/date-time-picker/parts/TimeInputs/MinutesInput.js +8 -2
  66. package/esm/date-time-picker/parts/TimeInputs/TimeInputs.js +11 -6
  67. package/esm/date-time-picker/parts/TimeInputs/useTimeInputs.js +44 -74
  68. package/esm/date-time-picker/utils/constants.js +1 -7
  69. package/esm/date-time-picker/utils/hooks/useGetStartingFocusedDay.js +38 -36
  70. package/esm/toggle/ControlledToggle.js +3 -3
  71. package/package.json +19 -15
  72. package/types/date-time-picker/config/useChangeHandlers.d.ts +3 -1
  73. package/types/date-time-picker/config/useControlledDateTimePicker.d.ts +2 -5
  74. package/types/date-time-picker/config/useFocusTracker.d.ts +38 -0
  75. package/types/date-time-picker/config/useGetPropsBasedOnType.d.ts +6 -6
  76. package/types/date-time-picker/config/useGetReferences.d.ts +30 -36
  77. package/types/date-time-picker/config/useGlobalKeyHandlers.d.ts +3 -1
  78. package/types/date-time-picker/parts/DateInputs/DDInput.d.ts +2 -1
  79. package/types/date-time-picker/parts/DateInputs/MMInput.d.ts +2 -1
  80. package/types/date-time-picker/parts/DateInputs/YYYYInput.d.ts +2 -1
  81. package/types/date-time-picker/parts/Pickers/Calendar/useConfigCalendarCTX.d.ts +14 -0
  82. package/types/date-time-picker/parts/Pickers/Calendar/useFocusLogic.d.ts +1 -2
  83. package/types/date-time-picker/parts/Pickers/Calendar/usePopperTriggerLogic.d.ts +19 -0
  84. package/types/date-time-picker/parts/Pickers/TimeWheel/useKeyboardHandlers.d.ts +0 -6
  85. package/types/date-time-picker/parts/Pickers/TimeWheel/usePopperTriggerLogic.d.ts +14 -0
  86. package/types/date-time-picker/parts/TimeInputs/HHInput.d.ts +2 -1
  87. package/types/date-time-picker/parts/TimeInputs/MeridiemInput.d.ts +2 -1
  88. package/types/date-time-picker/parts/TimeInputs/MinutesInput.d.ts +2 -1
  89. package/types/date-time-picker/propTypes.d.ts +117 -0
  90. package/types/date-time-picker/sharedTypes.d.ts +1 -1
  91. package/types/date-time-picker/utils/constants.d.ts +0 -6
@@ -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] : {};
@@ -91,7 +91,7 @@ const useChangeHandlers = _ref => {
91
91
  setTimeString(newTimeString);
92
92
  const newDateTimeString = "".concat(newDateString, " ").concat(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
@@ -108,7 +108,7 @@ const useChangeHandlers = _ref => {
108
108
  setTempDateString(newDateString);
109
109
  const newDateTimeString = "".concat(newDateString, " ").concat(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
@@ -124,7 +124,7 @@ const useChangeHandlers = _ref => {
124
124
  setTimeString(newTimeString);
125
125
  const newDateTimeString = "".concat(tempDateString, " ").concat(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
@@ -64,13 +69,12 @@ const useControlledDateTimePicker = props => {
64
69
  isWithTimeInputs
65
70
  } = flags;
66
71
  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({
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
+ require('core-js/modules/web.dom-collections.iterator.js');
6
+ var React = require('react');
7
+
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;
@@ -2,17 +2,23 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ require('core-js/modules/web.dom-collections.iterator.js');
5
6
  var React = require('react');
6
7
 
7
- /* eslint-disable complexity */
8
8
  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,
@@ -9,12 +9,13 @@ require('core-js/modules/esnext.async-iterator.for-each.js');
9
9
  require('core-js/modules/esnext.iterator.for-each.js');
10
10
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
11
11
  var _jsx = require('@babel/runtime/helpers/jsx');
12
- require('react');
12
+ var React = require('react');
13
13
  var dsIcons = require('@elliemae/ds-icons');
14
14
  var dsIcon = require('@elliemae/ds-icon');
15
15
  var DSButton = require('@elliemae/ds-button');
16
16
  var Styleds = require('../Styleds.js');
17
17
  var ControlledDateTimePickerDatatestid = require('../../ControlledDateTimePickerDatatestid.js');
18
+ var ControlledDateTimePickerCTX = require('../../ControlledDateTimePickerCTX.js');
18
19
  var useClearButton = require('./useClearButton.js');
19
20
  var jsxRuntime = require('react/jsx-runtime');
20
21
 
@@ -36,12 +37,21 @@ const ClearButton = () => {
36
37
  const styledsAttrs = {
37
38
  shouldDisplay: withClearBtn
38
39
  };
40
+ const {
41
+ latestInteractionRegion,
42
+ currFocusDescriber
43
+ } = React.useContext(ControlledDateTimePickerCTX.ControlledDateTimePickerContext);
39
44
  return /*#__PURE__*/jsxRuntime.jsx(Styleds.StyledClearButton, _objectSpread(_objectSpread({
40
45
  "aria-label": "clear selected date",
41
46
  buttonType: "icon",
42
47
  size: DSButton.BUTTON_SIZES.M,
43
48
  "data-testid": ControlledDateTimePickerDatatestid.ControlledDateTimePickerDatatestid.CLEAR_BUTTON,
44
- innerRef: clearButtonRef,
49
+ innerRef: DomElem => {
50
+ var _DomElem$focus;
51
+
52
+ clearButtonRef.current = DomElem;
53
+ if (latestInteractionRegion === 'clear-btn' && currFocusDescriber === 'clear-btn') DomElem === null || DomElem === void 0 ? void 0 : (_DomElem$focus = DomElem.focus) === null || _DomElem$focus === void 0 ? void 0 : _DomElem$focus.call(DomElem);
54
+ },
45
55
  onClick: onClearClick,
46
56
  onKeyDown: onClearButtonKeyDown
47
57
  }, styledsAttrs), {}, {
@@ -15,32 +15,21 @@ const useClearButton = () => {
15
15
  withAnyInputs,
16
16
  isWithTimeInputs,
17
17
  isWithDateInputs,
18
- isTimeSelector,
19
- hourInputRef,
20
- monthInputRef,
21
- pickerButtonRef,
22
- meridiemInputRef,
23
- yearInputRef,
24
- setLatestInteractionRegion
18
+ trackFocusFirstSegment,
19
+ trackFocusMeridiemInput,
20
+ trackFocusYearInput,
21
+ trackFocusPicker
25
22
  } = React.useContext(ControlledDateTimePickerCTX.ControlledDateTimePickerContext);
26
- const focusFirstRegion = React.useCallback(() => {
27
- var _hourInputRef$current, _hourInputRef$current2, _monthInputRef$curren, _monthInputRef$curren2;
28
-
29
- if (withAnyInputs) if (isTimeSelector) hourInputRef === null || hourInputRef === void 0 ? void 0 : (_hourInputRef$current = hourInputRef.current) === null || _hourInputRef$current === void 0 ? void 0 : (_hourInputRef$current2 = _hourInputRef$current.focus) === null || _hourInputRef$current2 === void 0 ? void 0 : _hourInputRef$current2.call(_hourInputRef$current);else monthInputRef === null || monthInputRef === void 0 ? void 0 : (_monthInputRef$curren = monthInputRef.current) === null || _monthInputRef$curren === void 0 ? void 0 : (_monthInputRef$curren2 = _monthInputRef$curren.focus) === null || _monthInputRef$curren2 === void 0 ? void 0 : _monthInputRef$curren2.call(_monthInputRef$curren);
30
- }, [withAnyInputs, isTimeSelector, hourInputRef, monthInputRef]);
31
23
  const onClearClick = React.useCallback(e => {
32
24
  handleClearAll(e);
33
- setLatestInteractionRegion('clear-btn');
34
- focusFirstRegion();
35
- }, [focusFirstRegion, handleClearAll, setLatestInteractionRegion]);
25
+ trackFocusFirstSegment();
26
+ }, [handleClearAll, trackFocusFirstSegment]);
36
27
  const onHomeKeyDown = React.useCallback(() => {
37
- focusFirstRegion();
38
- }, [focusFirstRegion]);
28
+ trackFocusFirstSegment();
29
+ }, [trackFocusFirstSegment]);
39
30
  const onEndKeyDown = React.useCallback(() => {
40
- var _pickerButtonRef$curr, _pickerButtonRef$curr2;
41
-
42
- if (withAnyPicker) pickerButtonRef === null || pickerButtonRef === void 0 ? void 0 : (_pickerButtonRef$curr = pickerButtonRef.current) === null || _pickerButtonRef$curr === void 0 ? void 0 : (_pickerButtonRef$curr2 = _pickerButtonRef$curr.focus) === null || _pickerButtonRef$curr2 === void 0 ? void 0 : _pickerButtonRef$curr2.call(_pickerButtonRef$curr);
43
- }, [withAnyPicker, pickerButtonRef]);
31
+ if (withAnyPicker) trackFocusPicker();
32
+ }, [withAnyPicker, trackFocusPicker]);
44
33
  const onClearButtonKeyDown = React.useCallback(e => {
45
34
  const {
46
35
  key
@@ -53,11 +42,9 @@ const useClearButton = () => {
53
42
  if (key === 'End') onEndKeyDown();
54
43
 
55
44
  if (key === 'Backspace' && withAnyInputs) {
56
- var _meridiemInputRef$cur, _meridiemInputRef$cur2, _yearInputRef$current, _yearInputRef$current2;
57
-
58
- if (isWithTimeInputs) meridiemInputRef === null || meridiemInputRef === void 0 ? void 0 : (_meridiemInputRef$cur = meridiemInputRef.current) === null || _meridiemInputRef$cur === void 0 ? void 0 : (_meridiemInputRef$cur2 = _meridiemInputRef$cur.focus) === null || _meridiemInputRef$cur2 === void 0 ? void 0 : _meridiemInputRef$cur2.call(_meridiemInputRef$cur);else if (isWithDateInputs) yearInputRef === null || yearInputRef === void 0 ? void 0 : (_yearInputRef$current = yearInputRef.current) === null || _yearInputRef$current === void 0 ? void 0 : (_yearInputRef$current2 = _yearInputRef$current.focus) === null || _yearInputRef$current2 === void 0 ? void 0 : _yearInputRef$current2.call(_yearInputRef$current);
45
+ if (isWithTimeInputs) trackFocusMeridiemInput();else if (isWithDateInputs) trackFocusYearInput();
59
46
  }
60
- }, [isWithDateInputs, isWithTimeInputs, meridiemInputRef, onEndKeyDown, onHomeKeyDown, withAnyInputs, yearInputRef]);
47
+ }, [isWithDateInputs, isWithTimeInputs, onEndKeyDown, onHomeKeyDown, trackFocusMeridiemInput, trackFocusYearInput, withAnyInputs]);
61
48
  return React.useMemo(() => ({
62
49
  onClearClick,
63
50
  onClearButtonKeyDown,
@@ -41,13 +41,13 @@ const ControlledDateTimePickerContent = () => {
41
41
  hideTime,
42
42
  hideTimePicker,
43
43
  hideDateTimePicker,
44
- setLatestInteractionRegion,
45
44
  withAnyPicker,
46
45
  withAnyRightController,
47
46
  shouldPreserveClearableSpace,
48
47
  isControllerOnly,
49
48
  dataAttrs,
50
- onGlobalKeyDown
49
+ onGlobalKeyDown,
50
+ trackFocusResetter
51
51
  } = React__default["default"].useContext(ControlledDateTimePickerCTX.ControlledDateTimePickerContext);
52
52
  const styledsAttrs = {
53
53
  justPicker: hideDate && hideTime,
@@ -55,9 +55,6 @@ const ControlledDateTimePickerContent = () => {
55
55
  hasError,
56
56
  isControllerOnly
57
57
  };
58
- const resetLatestInteraction = React__default["default"].useCallback(() => {
59
- setLatestInteractionRegion('');
60
- }, [setLatestInteractionRegion]);
61
58
  const mainCols = [];
62
59
  if (!hideDate) mainCols.push('auto');
63
60
  if (!hideTime) mainCols.push('auto');
@@ -70,9 +67,9 @@ const ControlledDateTimePickerContent = () => {
70
67
  cols: mainCols,
71
68
  gutter: "xxs",
72
69
  pr: hideDatePicker && hideTimePicker && hideDateTimePicker ? '2px' : undefined,
73
- onBlur: resetLatestInteraction,
74
70
  onKeyDown: onGlobalKeyDown,
75
- disabled: disabled
71
+ disabled: disabled,
72
+ onBlur: trackFocusResetter
76
73
  }, styledsAttrs), dataAttrs), {}, {
77
74
  children: [hideDate ? null : _DateInputs || (_DateInputs = /*#__PURE__*/_jsx__default["default"](DateInputs.DateInputs, {})), hideTime ? null : _TimeInputs || (_TimeInputs = /*#__PURE__*/_jsx__default["default"](TimeInputs.TimeInputs, {})), withAnyRightController ? /*#__PURE__*/_jsx__default["default"](dsGrid.Grid, {
78
75
  cols: rightControlCols
@@ -29,7 +29,8 @@ const DDInput = /*#__PURE__*/React__default["default"].memo(_ref => {
29
29
  disabled,
30
30
  contextRef,
31
31
  placeholder,
32
- ariaCurrentValueForInputs
32
+ ariaCurrentValueForInputs,
33
+ isFocused
33
34
  } = _ref;
34
35
  const validateOnChange = React.useCallback(e => {
35
36
  var _e$target;
@@ -47,7 +48,12 @@ const DDInput = /*#__PURE__*/React__default["default"].memo(_ref => {
47
48
  onFocus: onFocus,
48
49
  onKeyDown: onKeyDown,
49
50
  value: value,
50
- ref: contextRef,
51
+ ref: DomElem => {
52
+ var _DomElem$focus;
53
+
54
+ contextRef.current = DomElem;
55
+ if (isFocused) DomElem === null || DomElem === void 0 ? void 0 : (_DomElem$focus = DomElem.focus) === null || _DomElem$focus === void 0 ? void 0 : _DomElem$focus.call(DomElem);
56
+ },
51
57
  placeholder: placeholder,
52
58
  "aria-label": "day input field, ".concat(ariaCurrentValueForInputs),
53
59
  "data-testid": ControlledDateTimePickerDatatestid.ControlledDateTimePickerDatatestid.DATE_INPUTS.DAY,
@@ -43,7 +43,9 @@ const DateInputs = () => {
43
43
  monthInputRef,
44
44
  dayInputRef,
45
45
  yearInputRef,
46
- ariaCurrentValueForInputs
46
+ ariaCurrentValueForInputs,
47
+ latestInteractionRegion,
48
+ currFocusDescriber
47
49
  } = React.useContext(ControlledDateTimePickerCTX.ControlledDateTimePickerContext);
48
50
  return /*#__PURE__*/_jsx__default["default"](dsGrid.Grid, {
49
51
  cols: [config.fixedValues.smallInputWidth, config.fixedValues.separatorWidth, config.fixedValues.smallInputWidth, config.fixedValues.separatorWidth, config.fixedValues.largeInputWidth]
@@ -57,7 +59,8 @@ const DateInputs = () => {
57
59
  autoFocusMonthInput: autoFocusMonthInput,
58
60
  placeholder: "MM",
59
61
  ariaCurrentValueForInputs: ariaCurrentValueForInputs,
60
- disabled: disabled
62
+ disabled: disabled,
63
+ isFocused: latestInteractionRegion === 'date-inputs' && currFocusDescriber === 'month-input'
61
64
  })), _StyledSeparator || (_StyledSeparator = /*#__PURE__*/_jsx__default["default"](Styleds.StyledSeparator, {
62
65
  alignItems: "center"
63
66
  }, void 0, "/")), /*#__PURE__*/_jsx__default["default"](Styleds.StyledFocusWithIn, {}, void 0, /*#__PURE__*/_jsx__default["default"](DDInput.DDInput, {
@@ -69,7 +72,8 @@ const DateInputs = () => {
69
72
  contextRef: dayInputRef,
70
73
  placeholder: "DD",
71
74
  ariaCurrentValueForInputs: ariaCurrentValueForInputs,
72
- disabled: disabled
75
+ disabled: disabled,
76
+ isFocused: latestInteractionRegion === 'date-inputs' && currFocusDescriber === 'day-input'
73
77
  })), _StyledSeparator2 || (_StyledSeparator2 = /*#__PURE__*/_jsx__default["default"](Styleds.StyledSeparator, {
74
78
  alignItems: "center"
75
79
  }, void 0, "/")), /*#__PURE__*/_jsx__default["default"](Styleds.StyledFocusWithIn, {}, void 0, /*#__PURE__*/_jsx__default["default"](YYYYInput.YYYYInput, {
@@ -81,7 +85,8 @@ const DateInputs = () => {
81
85
  contextRef: yearInputRef,
82
86
  placeholder: "YYYY",
83
87
  ariaCurrentValueForInputs: ariaCurrentValueForInputs,
84
- disabled: disabled
88
+ disabled: disabled,
89
+ isFocused: latestInteractionRegion === 'date-inputs' && currFocusDescriber === 'year-input'
85
90
  })));
86
91
  };
87
92
 
@@ -30,7 +30,8 @@ const MMInput = /*#__PURE__*/React__default["default"].memo(_ref => {
30
30
  placeholder,
31
31
  contextRef,
32
32
  autoFocusMonthInput,
33
- ariaCurrentValueForInputs
33
+ ariaCurrentValueForInputs,
34
+ isFocused
34
35
  } = _ref;
35
36
  const validateOnChange = React.useCallback(e => {
36
37
  var _e$target;
@@ -49,7 +50,12 @@ const MMInput = /*#__PURE__*/React__default["default"].memo(_ref => {
49
50
  onFocus: onFocus,
50
51
  onKeyDown: onKeyDown,
51
52
  value: value,
52
- ref: contextRef,
53
+ ref: DomElem => {
54
+ var _DomElem$focus;
55
+
56
+ contextRef.current = DomElem;
57
+ if (isFocused) DomElem === null || DomElem === void 0 ? void 0 : (_DomElem$focus = DomElem.focus) === null || _DomElem$focus === void 0 ? void 0 : _DomElem$focus.call(DomElem);
58
+ },
53
59
  placeholder: placeholder,
54
60
  "aria-label": "month input field, ".concat(ariaCurrentValueForInputs),
55
61
  "data-testid": ControlledDateTimePickerDatatestid.ControlledDateTimePickerDatatestid.DATE_INPUTS.MONTH,
@@ -29,7 +29,8 @@ const YYYYInput = /*#__PURE__*/React__default["default"].memo(_ref => {
29
29
  disabled,
30
30
  placeholder,
31
31
  contextRef,
32
- ariaCurrentValueForInputs
32
+ ariaCurrentValueForInputs,
33
+ isFocused
33
34
  } = _ref;
34
35
  const validateOnChange = React.useCallback(e => {
35
36
  var _e$target;
@@ -47,7 +48,12 @@ const YYYYInput = /*#__PURE__*/React__default["default"].memo(_ref => {
47
48
  onFocus: onFocus,
48
49
  onKeyDown: onKeyDown,
49
50
  value: value,
50
- ref: contextRef,
51
+ ref: DomElem => {
52
+ var _DomElem$focus;
53
+
54
+ contextRef.current = DomElem;
55
+ if (isFocused) DomElem === null || DomElem === void 0 ? void 0 : (_DomElem$focus = DomElem.focus) === null || _DomElem$focus === void 0 ? void 0 : _DomElem$focus.call(DomElem);
56
+ },
51
57
  placeholder: placeholder,
52
58
  "aria-label": "year input field, ".concat(ariaCurrentValueForInputs),
53
59
  "data-testid": ControlledDateTimePickerDatatestid.ControlledDateTimePickerDatatestid.DATE_INPUTS.YEAR,