@elliemae/ds-controlled-form 2.0.0-alpha.7 → 2.0.0-next.1

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 (128) hide show
  1. package/cjs/controlled-date-range-picker/parts/ControlledDateRangeContent.js +6 -2
  2. package/cjs/controlled-date-time-picker/ControlledDateTimePickerDatatestid.js +26 -4
  3. package/cjs/controlled-date-time-picker/config/useControlledDateTimePicker.js +54 -3
  4. package/cjs/controlled-date-time-picker/config/useGetDestructuredValues.js +146 -0
  5. package/cjs/controlled-date-time-picker/index.js +1 -1
  6. package/cjs/controlled-date-time-picker/parts/ClearButton/ClearButton.js +8 -7
  7. package/cjs/controlled-date-time-picker/parts/DateInputs/DDInput.js +3 -2
  8. package/cjs/controlled-date-time-picker/parts/DateInputs/DateInputs.js +8 -4
  9. package/cjs/controlled-date-time-picker/parts/DateInputs/MMInput.js +3 -2
  10. package/cjs/controlled-date-time-picker/parts/DateInputs/YYYYInput.js +3 -2
  11. package/cjs/controlled-date-time-picker/parts/DateInputs/useDateInputs.js +3 -25
  12. package/cjs/controlled-date-time-picker/parts/Pickers/Calendar/CalendarBody.js +7 -4
  13. package/cjs/controlled-date-time-picker/parts/Pickers/Calendar/CalendarContent.js +11 -6
  14. package/cjs/controlled-date-time-picker/parts/Pickers/Calendar/CalendarContext.js +4 -0
  15. package/cjs/controlled-date-time-picker/parts/Pickers/Calendar/CalendarDaysList.js +24 -5
  16. package/cjs/controlled-date-time-picker/parts/Pickers/Calendar/CalendarHead.js +34 -32
  17. package/cjs/controlled-date-time-picker/parts/Pickers/Calendar/CalendarIconTrigger.js +13 -11
  18. package/cjs/controlled-date-time-picker/parts/Pickers/Calendar/CalendarMonthDays.js +6 -2
  19. package/cjs/controlled-date-time-picker/parts/Pickers/Calendar/CalendarWeekDays.js +34 -2
  20. package/cjs/controlled-date-time-picker/parts/Pickers/Calendar/CalendarWrapper.js +2 -0
  21. package/cjs/controlled-date-time-picker/parts/Pickers/Calendar/Day.js +39 -20
  22. package/cjs/controlled-date-time-picker/parts/Pickers/Calendar/Styleds.js +56 -37
  23. package/cjs/controlled-date-time-picker/parts/Pickers/Calendar/useConfigCalendarCTX.js +34 -3
  24. package/cjs/controlled-date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelContent.js +3 -1
  25. package/cjs/controlled-date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelContext.js +1 -0
  26. package/cjs/controlled-date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelIconTrigger.js +13 -11
  27. package/cjs/controlled-date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelWrapper.js +2 -0
  28. package/cjs/controlled-date-time-picker/parts/Pickers/CalendarWithTimeWheel/Styleds.js +11 -4
  29. package/cjs/controlled-date-time-picker/parts/Pickers/CalendarWithTimeWheel/useConfigCalendarWithTimeWheelCTX.js +5 -3
  30. package/cjs/controlled-date-time-picker/parts/Pickers/TimeWheel/HoursList.js +17 -18
  31. package/cjs/controlled-date-time-picker/parts/Pickers/TimeWheel/MeridiemList.js +15 -22
  32. package/cjs/controlled-date-time-picker/parts/Pickers/TimeWheel/MinutesList.js +18 -19
  33. package/cjs/controlled-date-time-picker/parts/Pickers/TimeWheel/SecondsList.js +9 -10
  34. package/cjs/controlled-date-time-picker/parts/Pickers/TimeWheel/Styleds.js +33 -34
  35. package/cjs/controlled-date-time-picker/parts/Pickers/TimeWheel/TimeWheelContent.js +3 -1
  36. package/cjs/controlled-date-time-picker/parts/Pickers/TimeWheel/TimeWheelContext.js +1 -0
  37. package/cjs/controlled-date-time-picker/parts/Pickers/TimeWheel/TimeWheelIconTrigger.js +11 -10
  38. package/cjs/controlled-date-time-picker/parts/Pickers/TimeWheel/TimeWheelWrapper.js +2 -0
  39. package/cjs/controlled-date-time-picker/parts/Pickers/TimeWheel/useConfigTimePickerCTX.js +5 -3
  40. package/cjs/controlled-date-time-picker/parts/Styleds.js +4 -5
  41. package/cjs/controlled-date-time-picker/parts/TimeInputs/HHInput.js +2 -1
  42. package/cjs/controlled-date-time-picker/parts/TimeInputs/MeridiemInput.js +2 -1
  43. package/cjs/controlled-date-time-picker/parts/TimeInputs/MinutesInput.js +2 -1
  44. package/cjs/controlled-date-time-picker/parts/TimeInputs/TimeInputs.js +7 -3
  45. package/cjs/controlled-date-time-picker/parts/TimeInputs/useTimeInputs.js +7 -30
  46. package/cjs/controlled-date-time-picker/utils/constants.js +43 -0
  47. package/cjs/controlled-date-time-picker/utils/dateHelpers.js +2 -2
  48. package/cjs/controlled-date-time-picker/utils/dateTimeHelpers.js +2 -2
  49. package/cjs/controlled-date-time-picker/utils/stringHelpers.js +16 -0
  50. package/cjs/index.js +1 -1
  51. package/esm/controlled-date-range-picker/parts/ControlledDateRangeContent.js +6 -2
  52. package/esm/controlled-date-time-picker/ControlledDateTimePickerDatatestid.js +26 -4
  53. package/esm/controlled-date-time-picker/config/useControlledDateTimePicker.js +54 -3
  54. package/esm/controlled-date-time-picker/config/useGetDestructuredValues.js +140 -0
  55. package/esm/controlled-date-time-picker/index.js +1 -1
  56. package/esm/controlled-date-time-picker/parts/ClearButton/ClearButton.js +7 -6
  57. package/esm/controlled-date-time-picker/parts/DateInputs/DDInput.js +3 -2
  58. package/esm/controlled-date-time-picker/parts/DateInputs/DateInputs.js +8 -4
  59. package/esm/controlled-date-time-picker/parts/DateInputs/MMInput.js +3 -2
  60. package/esm/controlled-date-time-picker/parts/DateInputs/YYYYInput.js +3 -2
  61. package/esm/controlled-date-time-picker/parts/DateInputs/useDateInputs.js +6 -27
  62. package/esm/controlled-date-time-picker/parts/Pickers/Calendar/CalendarBody.js +7 -4
  63. package/esm/controlled-date-time-picker/parts/Pickers/Calendar/CalendarContent.js +12 -7
  64. package/esm/controlled-date-time-picker/parts/Pickers/Calendar/CalendarContext.js +4 -0
  65. package/esm/controlled-date-time-picker/parts/Pickers/Calendar/CalendarDaysList.js +26 -7
  66. package/esm/controlled-date-time-picker/parts/Pickers/Calendar/CalendarHead.js +34 -32
  67. package/esm/controlled-date-time-picker/parts/Pickers/Calendar/CalendarIconTrigger.js +12 -9
  68. package/esm/controlled-date-time-picker/parts/Pickers/Calendar/CalendarMonthDays.js +6 -2
  69. package/esm/controlled-date-time-picker/parts/Pickers/Calendar/CalendarWeekDays.js +35 -3
  70. package/esm/controlled-date-time-picker/parts/Pickers/Calendar/CalendarWrapper.js +2 -0
  71. package/esm/controlled-date-time-picker/parts/Pickers/Calendar/Day.js +38 -20
  72. package/esm/controlled-date-time-picker/parts/Pickers/Calendar/Styleds.js +54 -36
  73. package/esm/controlled-date-time-picker/parts/Pickers/Calendar/useConfigCalendarCTX.js +35 -4
  74. package/esm/controlled-date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelContent.js +3 -1
  75. package/esm/controlled-date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelContext.js +1 -0
  76. package/esm/controlled-date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelIconTrigger.js +12 -9
  77. package/esm/controlled-date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelWrapper.js +2 -0
  78. package/esm/controlled-date-time-picker/parts/Pickers/CalendarWithTimeWheel/Styleds.js +11 -5
  79. package/esm/controlled-date-time-picker/parts/Pickers/CalendarWithTimeWheel/useConfigCalendarWithTimeWheelCTX.js +5 -3
  80. package/esm/controlled-date-time-picker/parts/Pickers/TimeWheel/HoursList.js +17 -16
  81. package/esm/controlled-date-time-picker/parts/Pickers/TimeWheel/MeridiemList.js +15 -20
  82. package/esm/controlled-date-time-picker/parts/Pickers/TimeWheel/MinutesList.js +18 -17
  83. package/esm/controlled-date-time-picker/parts/Pickers/TimeWheel/SecondsList.js +9 -10
  84. package/esm/controlled-date-time-picker/parts/Pickers/TimeWheel/Styleds.js +33 -34
  85. package/esm/controlled-date-time-picker/parts/Pickers/TimeWheel/TimeWheelContent.js +3 -1
  86. package/esm/controlled-date-time-picker/parts/Pickers/TimeWheel/TimeWheelContext.js +1 -0
  87. package/esm/controlled-date-time-picker/parts/Pickers/TimeWheel/TimeWheelIconTrigger.js +11 -9
  88. package/esm/controlled-date-time-picker/parts/Pickers/TimeWheel/TimeWheelWrapper.js +2 -0
  89. package/esm/controlled-date-time-picker/parts/Pickers/TimeWheel/useConfigTimePickerCTX.js +5 -3
  90. package/esm/controlled-date-time-picker/parts/Styleds.js +4 -4
  91. package/esm/controlled-date-time-picker/parts/TimeInputs/HHInput.js +2 -1
  92. package/esm/controlled-date-time-picker/parts/TimeInputs/MeridiemInput.js +2 -1
  93. package/esm/controlled-date-time-picker/parts/TimeInputs/MinutesInput.js +2 -1
  94. package/esm/controlled-date-time-picker/parts/TimeInputs/TimeInputs.js +7 -3
  95. package/esm/controlled-date-time-picker/parts/TimeInputs/useTimeInputs.js +8 -31
  96. package/esm/controlled-date-time-picker/utils/constants.js +37 -0
  97. package/esm/controlled-date-time-picker/utils/dateHelpers.js +1 -1
  98. package/esm/controlled-date-time-picker/utils/dateTimeHelpers.js +2 -2
  99. package/esm/controlled-date-time-picker/utils/stringHelpers.js +16 -1
  100. package/esm/index.js +1 -1
  101. package/package.json +12 -4
  102. package/types/controlled-date-time-picker/ControlledDateTimePickerDatatestid.d.ts +25 -3
  103. package/types/controlled-date-time-picker/config/useGetDestructuredValues.d.ts +4 -0
  104. package/types/controlled-date-time-picker/index.d.ts +1 -1
  105. package/types/controlled-date-time-picker/parts/DateInputs/DDInput.d.ts +2 -1
  106. package/types/controlled-date-time-picker/parts/DateInputs/MMInput.d.ts +2 -1
  107. package/types/controlled-date-time-picker/parts/DateInputs/YYYYInput.d.ts +2 -1
  108. package/types/controlled-date-time-picker/parts/DateInputs/useDateInputs.d.ts +0 -9
  109. package/types/controlled-date-time-picker/parts/Pickers/Calendar/CalendarBody.d.ts +5 -1
  110. package/types/controlled-date-time-picker/parts/Pickers/Calendar/CalendarContext.d.ts +9 -5
  111. package/types/controlled-date-time-picker/parts/Pickers/Calendar/CalendarDaysList.d.ts +5 -3
  112. package/types/controlled-date-time-picker/parts/Pickers/Calendar/Day.d.ts +5 -3
  113. package/types/controlled-date-time-picker/parts/Pickers/Calendar/Styleds.d.ts +48 -103
  114. package/types/controlled-date-time-picker/parts/Pickers/Calendar/useFocusLogic.d.ts +2 -2
  115. package/types/controlled-date-time-picker/parts/Pickers/Calendar/useKeyboardHandlers.d.ts +4 -4
  116. package/types/controlled-date-time-picker/parts/Pickers/Calendar/usePopperTriggerLogic.d.ts +2 -2
  117. package/types/controlled-date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelContext.d.ts +1 -0
  118. package/types/controlled-date-time-picker/parts/Pickers/CalendarWithTimeWheel/Styleds.d.ts +21 -0
  119. package/types/controlled-date-time-picker/parts/Pickers/TimeWheel/Styleds.d.ts +65 -4
  120. package/types/controlled-date-time-picker/parts/Pickers/TimeWheel/TimeWheelContext.d.ts +1 -0
  121. package/types/controlled-date-time-picker/parts/Styleds.d.ts +21 -1
  122. package/types/controlled-date-time-picker/parts/TimeInputs/HHInput.d.ts +2 -1
  123. package/types/controlled-date-time-picker/parts/TimeInputs/MeridiemInput.d.ts +2 -1
  124. package/types/controlled-date-time-picker/parts/TimeInputs/MinutesInput.d.ts +2 -1
  125. package/types/controlled-date-time-picker/utils/constants.d.ts +35 -0
  126. package/types/controlled-date-time-picker/utils/dateHelpers.d.ts +2 -2
  127. package/types/controlled-date-time-picker/utils/dateTimeHelpers.d.ts +1 -1
  128. package/types/controlled-date-time-picker/utils/stringHelpers.d.ts +1 -0
@@ -0,0 +1,140 @@
1
+ import { useMemo } from 'react';
2
+ import { dateTimeToDate, deconstructValuesFromDateString, fillStringWithPlaceHolders, dateTimeToTime, deconstructTimeValues } from '../utils/stringHelpers.js';
3
+ import { convertToPositiveNumberIfPossible } from '../utils/numberHelpers.js';
4
+ import { monthNames, announcableCardinalDays } from '../utils/constants.js';
5
+
6
+ /* eslint-disable max-lines */
7
+ // this is because it's fully controlled
8
+ // our source of truth is either the date props or dateTime props
9
+ // based on wheter it's a dateTime picker
10
+ // or a date picker (it's date picker when hideTime is true)
11
+ const useGetDestructuredDateValues = ({
12
+ date,
13
+ dateTime,
14
+ isDateTimeSelector
15
+ }) => {
16
+ const dateStringFromProps = isDateTimeSelector ? dateTimeToDate(dateTime) : date;
17
+ const deconstructedValues = deconstructValuesFromDateString(dateStringFromProps);
18
+ const {
19
+ month,
20
+ day,
21
+ year
22
+ } = deconstructedValues;
23
+ const monthNum = convertToPositiveNumberIfPossible(month);
24
+ const dayNum = convertToPositiveNumberIfPossible(day);
25
+ const yearNum = convertToPositiveNumberIfPossible(year);
26
+ const announcedMonth = monthNum !== -1 ? monthNames[monthNum - 1] : 'empty month';
27
+ const announcedDay = dayNum !== -1 ? announcableCardinalDays[dayNum] : 'empty day';
28
+ const announcedYear = yearNum !== -1 ? fillStringWithPlaceHolders(`${yearNum}`, 4, '0') : 'empty year';
29
+ const announcedDateValues = `${announcedMonth}, ${announcedDay}, ${announcedYear}`;
30
+ return useMemo(() => ({
31
+ month,
32
+ day,
33
+ year,
34
+ monthNum,
35
+ dayNum,
36
+ yearNum,
37
+ announcedMonth,
38
+ announcedDay,
39
+ announcedYear,
40
+ announcedDateValues
41
+ }), [announcedDay, announcedMonth, announcedYear, announcedDateValues, day, dayNum, month, monthNum, year, yearNum]);
42
+ }; // this is because it's fully controlled
43
+ // our source of truth is either the time props or dateTime props
44
+ // based on wheter it's a dateTime picker
45
+ // or a time picker (it's time picker when hideDate is true)
46
+
47
+ const useGetDestructuredTimeValues = ({
48
+ time,
49
+ dateTime,
50
+ isDateTimeSelector
51
+ }) => {
52
+ const timeStringFromProps = isDateTimeSelector ? dateTimeToTime(dateTime) : time;
53
+ const deconstructedValues = deconstructTimeValues(timeStringFromProps);
54
+ const {
55
+ hours,
56
+ minutes,
57
+ meridiem
58
+ } = deconstructedValues;
59
+ const hoursNum = convertToPositiveNumberIfPossible(hours);
60
+ const minutesNum = convertToPositiveNumberIfPossible(minutes); // 01 -> 1 ~ 09 -> 9 || 1_ -> 1 ~ 9_ -> 9 || empty...
61
+
62
+ const announcedHours = hoursNum !== -1 ? `${hoursNum}` : 'empty hours'; // 01 -> 1 ~ 09 -> 9 || 1_ -> 1 ~ 9_ -> 9 || empty...
63
+
64
+ const announcedMinutes = minutesNum !== -1 ? `${minutesNum}` : 'empty minutes';
65
+ const announcedMeridiem = // eslint-disable-next-line no-nested-ternary
66
+ meridiem === 'PM' ? `post meridiem` : meridiem === 'AM' ? 'ante meridiem' : 'empty meriediem';
67
+ const announcedTimeValues = `${announcedHours}, ${announcedMinutes}, ${announcedMeridiem}`;
68
+ return useMemo(() => ({
69
+ hours,
70
+ minutes,
71
+ meridiem,
72
+ hoursNum,
73
+ minutesNum,
74
+ announcedHours,
75
+ announcedMinutes,
76
+ announcedMeridiem,
77
+ announcedTimeValues
78
+ }), [hours, minutes, meridiem, hoursNum, minutesNum, announcedHours, announcedMinutes, announcedMeridiem, announcedTimeValues]);
79
+ };
80
+ const useGetDestructuredValues = ({
81
+ date,
82
+ time,
83
+ dateTime,
84
+ isDateTimeSelector
85
+ }) => {
86
+ const {
87
+ month,
88
+ day,
89
+ year,
90
+ monthNum,
91
+ dayNum,
92
+ yearNum,
93
+ announcedMonth,
94
+ announcedDay,
95
+ announcedYear,
96
+ announcedDateValues
97
+ } = useGetDestructuredDateValues({
98
+ date,
99
+ dateTime,
100
+ isDateTimeSelector
101
+ });
102
+ const {
103
+ hours,
104
+ minutes,
105
+ meridiem,
106
+ hoursNum,
107
+ minutesNum,
108
+ announcedHours,
109
+ announcedMinutes,
110
+ announcedMeridiem,
111
+ announcedTimeValues
112
+ } = useGetDestructuredTimeValues({
113
+ time,
114
+ dateTime,
115
+ isDateTimeSelector
116
+ });
117
+ return useMemo(() => ({
118
+ month,
119
+ day,
120
+ year,
121
+ monthNum,
122
+ dayNum,
123
+ yearNum,
124
+ announcedMonth,
125
+ announcedDay,
126
+ announcedYear,
127
+ announcedDateValues,
128
+ hours,
129
+ minutes,
130
+ meridiem,
131
+ hoursNum,
132
+ minutesNum,
133
+ announcedHours,
134
+ announcedMinutes,
135
+ announcedMeridiem,
136
+ announcedTimeValues
137
+ }), [month, day, year, monthNum, dayNum, yearNum, announcedMonth, announcedDay, announcedYear, announcedDateValues, hours, minutes, meridiem, hoursNum, minutesNum, announcedHours, announcedMinutes, announcedMeridiem, announcedTimeValues]);
138
+ };
139
+
140
+ export { useGetDestructuredDateValues, useGetDestructuredTimeValues, useGetDestructuredValues };
@@ -2,6 +2,6 @@ export { DSControlledDateTimePicker, DSControlledDateTimePickerWithSchema } from
2
2
  export { ControlledDateTimePickerDatatestid } from './ControlledDateTimePickerDatatestid.js';
3
3
  export { CONTROLLED_DATE_TIME_PICKER_TYPES } from './ControlledDateTimePickerTypes.js';
4
4
  export { deconstructValuesFromDateString, prependStringWithPlaceHolders } from './utils/stringHelpers.js';
5
- export { getValidatioDateTimeStringMetaInfo } from './utils/dateTimeHelpers.js';
5
+ export { getValidationDateTimeStringMetaInfo } from './utils/dateTimeHelpers.js';
6
6
  export { getDateStringFromDay, getDateValuesFromDate, getDayFromDateString, getValidationDateStringMetaInfo } from './utils/dateHelpers.js';
7
7
  export { getValidationTimeStringMetaInfo } from './utils/timeHelpers.js';
@@ -1,12 +1,12 @@
1
1
  import _jsx from '@babel/runtime/helpers/esm/jsx';
2
2
  import 'react';
3
3
  import CloseMedium from '@elliemae/ds-icons/CloseMedium';
4
- import { BUTTON_VARIANT } from '@elliemae/ds-basic/Button';
4
+ import { DSIconColors } from '@elliemae/ds-icon';
5
+ import { BUTTON_SIZES, BUTTON_VARIANT } from '@elliemae/ds-button';
5
6
  import { StyledClearButton } from '../Styleds.js';
6
7
  import { ControlledDateTimePickerDatatestid } from '../../ControlledDateTimePickerDatatestid.js';
7
8
  import { useClearButton } from './useClearButton.js';
8
9
 
9
- var _CloseMedium;
10
10
  const ClearButton = () => {
11
11
  const {
12
12
  onClearClick,
@@ -18,16 +18,17 @@ const ClearButton = () => {
18
18
  return /*#__PURE__*/_jsx(StyledClearButton, {
19
19
  shouldDisplay: withClearBtn,
20
20
  "aria-label": "clear selected date",
21
- buttonType: "text",
22
- leftIcon: _CloseMedium || (_CloseMedium = /*#__PURE__*/_jsx(CloseMedium, {})),
23
- size: "m",
21
+ buttonType: "icon",
22
+ size: BUTTON_SIZES.M,
24
23
  variant: BUTTON_VARIANT.DEFAULT,
25
24
  "data-testid": ControlledDateTimePickerDatatestid.CLEAR_BUTTON,
26
25
  innerRef: clearButtonRef,
27
26
  onClick: onClearClick,
28
27
  onKeyDown: onClearButtonKeyDown,
29
28
  withAnyPicker: withAnyPicker
30
- });
29
+ }, void 0, /*#__PURE__*/_jsx(CloseMedium, {
30
+ color: DSIconColors.PRIMARY
31
+ }));
31
32
  };
32
33
 
33
34
  export { ClearButton };
@@ -18,7 +18,8 @@ const DDInput = /*#__PURE__*/React.memo(({
18
18
  onKeyDown,
19
19
  value,
20
20
  contextRef,
21
- placeholder
21
+ placeholder,
22
+ ariaCurrentValueForInputs
22
23
  }) => {
23
24
  const validateOnChange = useCallback(e => {
24
25
  var _e$target;
@@ -38,7 +39,7 @@ const DDInput = /*#__PURE__*/React.memo(({
38
39
  value: value,
39
40
  ref: contextRef,
40
41
  placeholder: placeholder,
41
- "aria-label": "day input field",
42
+ "aria-label": `day input field, ${ariaCurrentValueForInputs}`,
42
43
  "data-testid": ControlledDateTimePickerDatatestid.DATE_INPUTS.DAY
43
44
  });
44
45
  });
@@ -33,7 +33,8 @@ const DateInputs = () => {
33
33
  const {
34
34
  monthInputRef,
35
35
  dayInputRef,
36
- yearInputRef
36
+ yearInputRef,
37
+ ariaCurrentValueForInputs
37
38
  } = useContext(ControlledDateTimePickerContext);
38
39
  return /*#__PURE__*/_jsx(Grid, {
39
40
  cols: [fixedValues.smallInputWidth, fixedValues.separatorWidth, fixedValues.smallInputWidth, fixedValues.separatorWidth, fixedValues.largeInputWidth]
@@ -45,7 +46,8 @@ const DateInputs = () => {
45
46
  value: month,
46
47
  contextRef: monthInputRef,
47
48
  autoFocusMonthInput: autoFocusMonthInput,
48
- placeholder: "MM"
49
+ placeholder: "MM",
50
+ ariaCurrentValueForInputs: ariaCurrentValueForInputs
49
51
  })), _StyledSeparator || (_StyledSeparator = /*#__PURE__*/_jsx(StyledSeparator, {
50
52
  alignItems: "center"
51
53
  }, void 0, "/")), /*#__PURE__*/_jsx(StyledFocusWithIn, {}, void 0, /*#__PURE__*/_jsx(DDInput, {
@@ -55,7 +57,8 @@ const DateInputs = () => {
55
57
  onKeyDown: onDayKeyDown,
56
58
  value: day,
57
59
  contextRef: dayInputRef,
58
- placeholder: "DD"
60
+ placeholder: "DD",
61
+ ariaCurrentValueForInputs: ariaCurrentValueForInputs
59
62
  })), _StyledSeparator2 || (_StyledSeparator2 = /*#__PURE__*/_jsx(StyledSeparator, {
60
63
  alignItems: "center"
61
64
  }, void 0, "/")), /*#__PURE__*/_jsx(StyledFocusWithIn, {}, void 0, /*#__PURE__*/_jsx(YYYYInput, {
@@ -65,7 +68,8 @@ const DateInputs = () => {
65
68
  onKeyDown: onYearKeyDown,
66
69
  value: year,
67
70
  contextRef: yearInputRef,
68
- placeholder: "YYYY"
71
+ placeholder: "YYYY",
72
+ ariaCurrentValueForInputs: ariaCurrentValueForInputs
69
73
  })));
70
74
  };
71
75
 
@@ -19,7 +19,8 @@ const MMInput = /*#__PURE__*/React.memo(({
19
19
  value,
20
20
  placeholder,
21
21
  contextRef,
22
- autoFocusMonthInput
22
+ autoFocusMonthInput,
23
+ ariaCurrentValueForInputs
23
24
  }) => {
24
25
  const validateOnChange = useCallback(e => {
25
26
  var _e$target;
@@ -40,7 +41,7 @@ const MMInput = /*#__PURE__*/React.memo(({
40
41
  value: value,
41
42
  ref: contextRef,
42
43
  placeholder: placeholder,
43
- "aria-label": "month input field",
44
+ "aria-label": `month input field, ${ariaCurrentValueForInputs}`,
44
45
  "data-testid": ControlledDateTimePickerDatatestid.DATE_INPUTS.MONTH
45
46
  });
46
47
  });
@@ -18,7 +18,8 @@ const YYYYInput = /*#__PURE__*/React.memo(({
18
18
  onKeyDown,
19
19
  value,
20
20
  placeholder,
21
- contextRef
21
+ contextRef,
22
+ ariaCurrentValueForInputs
22
23
  }) => {
23
24
  const validateOnChange = useCallback(e => {
24
25
  var _e$target;
@@ -38,7 +39,7 @@ const YYYYInput = /*#__PURE__*/React.memo(({
38
39
  value: value,
39
40
  ref: contextRef,
40
41
  placeholder: placeholder,
41
- "aria-label": "year input field",
42
+ "aria-label": `year input field, ${ariaCurrentValueForInputs}`,
42
43
  "data-testid": ControlledDateTimePickerDatatestid.DATE_INPUTS.YEAR
43
44
  });
44
45
  });
@@ -1,36 +1,24 @@
1
1
  import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
2
- import { useMemo, useContext, useCallback } from 'react';
2
+ import { useContext, useCallback, useMemo } from 'react';
3
3
  import { ControlledDateTimePickerContext } from '../../ControlledDateTimePickerCTX.js';
4
- import { dateTimeToDate, deconstructValuesFromDateString, getFormattedDateString, prependStringWithPlaceHolders, fillStringWithPlaceHolders } from '../../utils/stringHelpers.js';
4
+ import { getFormattedDateString, prependStringWithPlaceHolders, fillStringWithPlaceHolders } from '../../utils/stringHelpers.js';
5
5
  import { getValidationDateStringMetaInfo } from '../../utils/dateHelpers.js';
6
6
 
7
7
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
8
8
 
9
9
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
10
- // our source of truth is either the date props or dateTime props
11
- // based on wheter it's a dateTime picker
12
- // or a date picker (it's date picker when hideTime is true)
13
-
14
- const useGetDestructuredDateValues = ({
15
- date,
16
- dateTime,
17
- hideTime
18
- }) => {
19
- const dateStringFromProps = useMemo(() => hideTime ? date : dateTimeToDate(dateTime), [date, dateTime, hideTime]);
20
- const deconstructedValues = useMemo(() => deconstructValuesFromDateString(dateStringFromProps), [dateStringFromProps]);
21
- return deconstructedValues;
22
- };
23
10
  const useDateInputs = () => {
24
11
  const {
25
12
  props: {
26
- date,
27
- dateTime,
28
13
  onMonthChange: appOnMonthChange,
29
14
  onDayChange: appOnDayChange,
30
15
  onYearChange: appOnYearChange,
31
16
  getIsDisabledDay,
32
17
  getIsOutOfRangeDay
33
18
  },
19
+ month,
20
+ day,
21
+ year,
34
22
  hideTime,
35
23
  monthInputRef,
36
24
  dayInputRef,
@@ -46,15 +34,6 @@ const useDateInputs = () => {
46
34
  withAnyRightController,
47
35
  autoFocusMonthInput
48
36
  } = useContext(ControlledDateTimePickerContext);
49
- const {
50
- month,
51
- day,
52
- year
53
- } = useGetDestructuredDateValues({
54
- date,
55
- dateTime,
56
- hideTime
57
- });
58
37
  const onHomeKeyDown = useCallback(() => {
59
38
  var _monthInputRef$curren, _monthInputRef$curren2;
60
39
 
@@ -269,4 +248,4 @@ const useDateInputs = () => {
269
248
  }), [month, day, year, autoFocusMonthInput, onMonthFocus, onMonthChange, onDayFocus, onDayChange, onYearFocus, onYearChange, onMonthBlur, onDayBlur, onYearBlur, onMonthKeyDown, onDayKeyDown, onYearKeyDown]);
270
249
  };
271
250
 
272
- export { useDateInputs, useGetDestructuredDateValues };
251
+ export { useDateInputs };
@@ -3,11 +3,14 @@ import React from 'react';
3
3
  import { CalendarMonthDays } from './CalendarMonthDays.js';
4
4
  import { CalendarWeekDays } from './CalendarWeekDays.js';
5
5
  import { StyledBody } from './Styleds.js';
6
- import { jsxs, Fragment } from 'react/jsx-runtime';
7
6
 
8
7
  var _CalendarWeekDays, _StyledBody;
9
- const CalendarBody = /*#__PURE__*/React.memo(() => /*#__PURE__*/jsxs(Fragment, {
10
- children: [_CalendarWeekDays || (_CalendarWeekDays = /*#__PURE__*/_jsx(CalendarWeekDays, {})), _StyledBody || (_StyledBody = /*#__PURE__*/_jsx(StyledBody, {}, void 0, /*#__PURE__*/_jsx(CalendarMonthDays, {})))]
11
- }));
8
+ const CalendarBody = /*#__PURE__*/React.memo(({
9
+ weekRowsNum
10
+ }) => /*#__PURE__*/_jsx("span", {
11
+ role: "grid",
12
+ "aria-colcount": 7,
13
+ "aria-rowcount": weekRowsNum
14
+ }, void 0, _CalendarWeekDays || (_CalendarWeekDays = /*#__PURE__*/_jsx(CalendarWeekDays, {})), _StyledBody || (_StyledBody = /*#__PURE__*/_jsx(StyledBody, {}, void 0, /*#__PURE__*/_jsx(CalendarMonthDays, {})))));
12
15
 
13
16
  export { CalendarBody };
@@ -1,13 +1,14 @@
1
1
  import _jsx from '@babel/runtime/helpers/esm/jsx';
2
2
  import { useContext } from 'react';
3
+ import { ControlledDateTimePickerDatatestid } from '../../../ControlledDateTimePickerDatatestid.js';
3
4
  import { CalendarBody } from './CalendarBody.js';
4
5
  import { CalendarHead } from './CalendarHead.js';
5
6
  import { CalendarFooter } from './CalendarFooter.js';
6
7
  import { CalendarContext } from './CalendarContext.js';
7
- import { StyledSpacingResetter, StyledCalendarWrapper } from './Styleds.js';
8
+ import { StyledShadowWrapper, StyledCalendarWrapper } from './Styleds.js';
8
9
 
9
- var _StyledCalendarWrappe;
10
- // <StyledSpacingResetter className={className}>
10
+ var _CalendarHead, _CalendarFooter;
11
+ // <StyledShadowWrapper className={className}>
11
12
  // is required for styled-components, without this we can't styled(CalendarContent)...
12
13
  // https://stackoverflow.com/questions/52542817/styled-components-not-applying-style-to-custom-functional-react-component
13
14
 
@@ -15,12 +16,16 @@ const CalendarContent = ({
15
16
  className = ''
16
17
  }) => {
17
18
  const {
18
- isControllerOnly
19
+ isControllerOnly,
20
+ daysMatrixByWeekday
19
21
  } = useContext(CalendarContext);
20
- return /*#__PURE__*/_jsx(StyledSpacingResetter, {
22
+ return /*#__PURE__*/_jsx(StyledShadowWrapper, {
21
23
  className: className,
22
- isControllerOnly: isControllerOnly
23
- }, void 0, _StyledCalendarWrappe || (_StyledCalendarWrappe = /*#__PURE__*/_jsx(StyledCalendarWrapper, {}, void 0, /*#__PURE__*/_jsx(CalendarHead, {}), /*#__PURE__*/_jsx(CalendarBody, {}), /*#__PURE__*/_jsx(CalendarFooter, {}))));
24
+ isControllerOnly: isControllerOnly,
25
+ "data-testid": ControlledDateTimePickerDatatestid.CONTROLLER_COMPONENT.CALENDAR
26
+ }, void 0, /*#__PURE__*/_jsx(StyledCalendarWrapper, {}, void 0, _CalendarHead || (_CalendarHead = /*#__PURE__*/_jsx(CalendarHead, {})), /*#__PURE__*/_jsx(CalendarBody, {
27
+ weekRowsNum: daysMatrixByWeekday.length
28
+ }), _CalendarFooter || (_CalendarFooter = /*#__PURE__*/_jsx(CalendarFooter, {}))));
24
29
  };
25
30
 
26
31
  export { CalendarContent };
@@ -4,6 +4,7 @@ import { createRef, createContext } from 'react';
4
4
  const noop = () => {};
5
5
 
6
6
  const defaultCalendarContext = {
7
+ ariaCurrentValueForInputs: '',
7
8
  showCalendar: false,
8
9
  setShowCalendar: noop,
9
10
  closeCalendar: noop,
@@ -21,6 +22,9 @@ const defaultCalendarContext = {
21
22
  currentMonth: undefined,
22
23
  currentYear: undefined,
23
24
  daysArray: [],
25
+ invisibleFirstDay: undefined,
26
+ daysMatrixByWeekday: [],
27
+ invisibleLastDay: undefined,
24
28
  focusedDay: undefined,
25
29
  tryToFocusCurrentlyDataIsFocusedDay: noop,
26
30
  resetFocusedDayToStartDate: noop,
@@ -1,17 +1,36 @@
1
1
  import _jsx from '@babel/runtime/helpers/esm/jsx';
2
2
  import React from 'react';
3
3
  import { Day } from './Day.js';
4
- import { StyledMonthDaysUList } from './Styleds.js';
5
- import { jsx } from 'react/jsx-runtime';
4
+ import { StyledWeekDaysListWrapper } from './Styleds.js';
5
+ import { jsxs } from 'react/jsx-runtime';
6
6
 
7
7
  const CalendarDaysList = /*#__PURE__*/React.memo(({
8
- daysArray,
8
+ invisibleFirstDay,
9
+ daysMatrixByWeekday,
10
+ invisibleLastDay,
9
11
  innerRef
10
- }) => /*#__PURE__*/jsx("div", {
12
+ }) => /*#__PURE__*/jsxs("div", {
11
13
  ref: innerRef,
12
- children: /*#__PURE__*/_jsx(StyledMonthDaysUList, {}, void 0, daysArray.map(metaDay => /*#__PURE__*/_jsx(Day, {
13
- metaDay: metaDay
14
- }, `ds-calendar-${metaDay.day.toString()}`)))
14
+ role: "rowgroup",
15
+ children: [/*#__PURE__*/_jsx(Day, {
16
+ metaDay: invisibleFirstDay,
17
+ isInvisible: true
18
+ }, `ds-calendar-${invisibleFirstDay.day.toString()}`), daysMatrixByWeekday.map((week, i) => /*#__PURE__*/_jsx(StyledWeekDaysListWrapper, {
19
+ role: "row",
20
+ "aria-rowindex": i + 1,
21
+ cols: ['32px', '32px', '32px', '32px', '32px', '32px', '32px'],
22
+ rows: ['28px'],
23
+ py: "xxxs",
24
+ px: "2px",
25
+ justifyContent: "space-between",
26
+ alignItems: "center"
27
+ }, `ds-calendar-week-${week[0].day.toString()}-${week[6].day.toString()}`, week.map((metaDay, z) => /*#__PURE__*/_jsx(Day, {
28
+ metaDay: metaDay,
29
+ colIndex: z + 1
30
+ }, `ds-calendar-${metaDay.day.toString()}`)))), /*#__PURE__*/_jsx(Day, {
31
+ metaDay: invisibleLastDay,
32
+ isInvisible: true
33
+ }, `ds-calendar-${invisibleLastDay.day.toString()}`)]
15
34
  }));
16
35
 
17
36
  export { CalendarDaysList };
@@ -1,9 +1,11 @@
1
1
  import _jsx from '@babel/runtime/helpers/esm/jsx';
2
2
  import { useMemo, useContext } from 'react';
3
+ import { BUTTON_SIZES } from '@elliemae/ds-button';
3
4
  import ChevronDoubleLeft from '@elliemae/ds-icons/ChevronDoubleLeft';
4
5
  import ChevronLeft from '@elliemae/ds-icons/ChevronLeft';
5
6
  import ChevronRight from '@elliemae/ds-icons/ChevronRight';
6
7
  import ChevronDoubleRight from '@elliemae/ds-icons/ChevronDoubleRight';
8
+ import { ControlledDateTimePickerDatatestid } from '../../../ControlledDateTimePickerDatatestid.js';
7
9
  import { getMonthNameByMonthNumber } from '../../../utils/dateHelpers.js';
8
10
  import { StyledHeader, StyledHeaderButton } from './Styleds.js';
9
11
  import { CalendarContext } from './CalendarContext.js';
@@ -43,56 +45,56 @@ const CalendarHead = () => {
43
45
  } = useContext(CalendarContext);
44
46
  return /*#__PURE__*/_jsx(StyledHeader, {}, void 0, /*#__PURE__*/_jsx(StyledHeaderButton, {
45
47
  "aria-label": "previous year",
46
- buttonType: "text",
47
- leftIcon: _ChevronDoubleLeft || (_ChevronDoubleLeft = /*#__PURE__*/_jsx(ChevronDoubleLeft, {
48
- height: 14,
49
- width: 14,
50
- fill: "#25292f"
51
- })),
52
- size: "m",
48
+ buttonType: "raw",
49
+ size: BUTTON_SIZES.M,
53
50
  onClick: handlePrevYear,
54
51
  innerRef: prevYearBtnRef,
55
52
  onKeyDown: handlePrevYearKeyDown,
56
53
  onFocus: onPrevYearFocus,
57
- tabIndex: isControllerOnly ? -1 : 1
58
- }), /*#__PURE__*/_jsx(StyledHeaderButton, {
54
+ tabIndex: isControllerOnly ? -1 : 1,
55
+ "data-testid": ControlledDateTimePickerDatatestid.CALENDAR.PREV_YEAR
56
+ }, void 0, _ChevronDoubleLeft || (_ChevronDoubleLeft = /*#__PURE__*/_jsx(ChevronDoubleLeft, {
57
+ height: 14,
58
+ width: 14,
59
+ fill: "#25292f"
60
+ }))), /*#__PURE__*/_jsx(StyledHeaderButton, {
59
61
  autoFocus: autoFocusPrevMonthArrow,
60
62
  "aria-label": "previous month",
61
- buttonType: "text",
62
- leftIcon: _ChevronLeft || (_ChevronLeft = /*#__PURE__*/_jsx(ChevronLeft, {
63
- fill: "#25292f"
64
- })),
65
- size: "m",
63
+ buttonType: "raw",
64
+ size: BUTTON_SIZES.M,
66
65
  onClick: handlePrevMonth,
67
66
  innerRef: prevMonthBtnRef,
68
67
  onKeyDown: handlePrevMonthKeyDown,
69
- onFocus: onPrevMonthFocus // this is a tabstop for when the calendar is open
68
+ onFocus: onPrevMonthFocus,
69
+ "data-testid": ControlledDateTimePickerDatatestid.CALENDAR.PREV_MONTH // this is a tabstop for when the calendar is open
70
70
 
71
- }), /*#__PURE__*/_jsx("h3", {}, void 0, currentFormatedDate), /*#__PURE__*/_jsx(StyledHeaderButton, {
71
+ }, void 0, _ChevronLeft || (_ChevronLeft = /*#__PURE__*/_jsx(ChevronLeft, {
72
+ fill: "#25292f"
73
+ }))), /*#__PURE__*/_jsx("h3", {}, void 0, currentFormatedDate), /*#__PURE__*/_jsx(StyledHeaderButton, {
72
74
  "aria-label": "next month",
73
- buttonType: "text",
74
- leftIcon: _ChevronRight || (_ChevronRight = /*#__PURE__*/_jsx(ChevronRight, {
75
- fill: "#25292f"
76
- })),
77
- size: "m",
75
+ buttonType: "raw",
76
+ size: BUTTON_SIZES.M,
78
77
  onClick: handleNextMonth,
79
78
  innerRef: nextMonthBtnRef,
80
79
  onKeyDown: handleNextMonthKeyDown,
81
- onFocus: onNextMonthFocus
82
- }), /*#__PURE__*/_jsx(StyledHeaderButton, {
80
+ onFocus: onNextMonthFocus,
81
+ "data-testid": ControlledDateTimePickerDatatestid.CALENDAR.NEXT_MONTH
82
+ }, void 0, _ChevronRight || (_ChevronRight = /*#__PURE__*/_jsx(ChevronRight, {
83
+ fill: "#25292f"
84
+ }))), /*#__PURE__*/_jsx(StyledHeaderButton, {
83
85
  "aria-label": "next year",
84
- buttonType: "text",
85
- leftIcon: _ChevronDoubleRight || (_ChevronDoubleRight = /*#__PURE__*/_jsx(ChevronDoubleRight, {
86
- height: 14,
87
- width: 14,
88
- fill: "#25292f"
89
- })),
90
- size: "m",
86
+ buttonType: "raw",
87
+ size: BUTTON_SIZES.M,
91
88
  onClick: handleNextYear,
92
89
  innerRef: nextYearBtnRef,
93
90
  onKeyDown: handleNextYearKeyDown,
94
- onFocus: onNextYearFocus
95
- }));
91
+ onFocus: onNextYearFocus,
92
+ "data-testid": ControlledDateTimePickerDatatestid.CALENDAR.NEXT_YEAR
93
+ }, void 0, _ChevronDoubleRight || (_ChevronDoubleRight = /*#__PURE__*/_jsx(ChevronDoubleRight, {
94
+ height: 14,
95
+ width: 14,
96
+ fill: "#25292f"
97
+ }))));
96
98
  };
97
99
 
98
100
  export { CalendarHead };
@@ -1,11 +1,12 @@
1
1
  import _jsx from '@babel/runtime/helpers/esm/jsx';
2
2
  import { useContext, useMemo } from 'react';
3
- import DSButton, { BUTTON_VARIANT } from '@elliemae/ds-basic/Button';
3
+ import { DSIconColors } from '@elliemae/ds-icon';
4
+ import { BUTTON_SIZES, BUTTON_VARIANT } from '@elliemae/ds-button';
4
5
  import DatePicker from '@elliemae/ds-icons/DatePicker';
5
6
  import { ControlledDateTimePickerDatatestid } from '../../../ControlledDateTimePickerDatatestid.js';
6
7
  import { CalendarContext } from './CalendarContext.js';
8
+ import { StyledIconTriggerButton } from './Styleds.js';
7
9
 
8
- var _DatePicker;
9
10
  // this is particularly usefull due to how usePopper needs to check the references
10
11
  // since references are saved in a immutable way, we make sure to shortcircuit useless-re-renders
11
12
 
@@ -13,19 +14,21 @@ const CalendarIconTrigger = () => {
13
14
  const {
14
15
  handleToggleCalendar,
15
16
  handleSetTriggerRef,
16
- handlePickerIconKeyDown
17
+ handlePickerIconKeyDown,
18
+ ariaCurrentValueForInputs
17
19
  } = useContext(CalendarContext);
18
- return useMemo(() => /*#__PURE__*/_jsx(DSButton, {
19
- "aria-label": "date picker context menu trigger",
20
- buttonType: "text",
21
- leftIcon: _DatePicker || (_DatePicker = /*#__PURE__*/_jsx(DatePicker, {})),
22
- size: "m",
20
+ return useMemo(() => /*#__PURE__*/_jsx(StyledIconTriggerButton, {
21
+ "aria-label": `date picker context menu trigger, ${ariaCurrentValueForInputs}`,
22
+ buttonType: "icon",
23
+ size: BUTTON_SIZES.M,
23
24
  variant: BUTTON_VARIANT.DEFAULT,
24
25
  innerRef: handleSetTriggerRef,
25
26
  onClick: handleToggleCalendar,
26
27
  onKeyDown: handlePickerIconKeyDown,
27
28
  "data-testid": ControlledDateTimePickerDatatestid.PICKER_ICONS.CALENDAR
28
- }), [handlePickerIconKeyDown, handleSetTriggerRef, handleToggleCalendar]);
29
+ }, void 0, /*#__PURE__*/_jsx(DatePicker, {
30
+ color: DSIconColors.PRIMARY
31
+ })), [handlePickerIconKeyDown, handleSetTriggerRef, handleToggleCalendar, ariaCurrentValueForInputs]);
29
32
  };
30
33
 
31
34
  export { CalendarIconTrigger };
@@ -5,11 +5,15 @@ import { CalendarContext } from './CalendarContext.js';
5
5
 
6
6
  const CalendarMonthDays = () => {
7
7
  const {
8
- daysArray,
8
+ invisibleFirstDay,
9
+ daysMatrixByWeekday,
10
+ invisibleLastDay,
9
11
  calendarDaysWrapperRef
10
12
  } = useContext(CalendarContext);
11
13
  return /*#__PURE__*/_jsx(CalendarDaysList, {
12
- daysArray: daysArray,
14
+ invisibleFirstDay: invisibleFirstDay,
15
+ daysMatrixByWeekday: daysMatrixByWeekday,
16
+ invisibleLastDay: invisibleLastDay,
13
17
  innerRef: calendarDaysWrapperRef
14
18
  });
15
19
  };