@transferwise/components 46.156.0 → 46.157.0

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 (215) hide show
  1. package/build/Calendar/Calendar.constants.js +10 -0
  2. package/build/Calendar/Calendar.constants.js.map +1 -0
  3. package/build/Calendar/Calendar.constants.mjs +8 -0
  4. package/build/Calendar/Calendar.constants.mjs.map +1 -0
  5. package/build/Calendar/Calendar.js +121 -17
  6. package/build/Calendar/Calendar.js.map +1 -1
  7. package/build/Calendar/Calendar.messages.js +12 -0
  8. package/build/Calendar/Calendar.messages.js.map +1 -1
  9. package/build/Calendar/Calendar.messages.mjs +12 -0
  10. package/build/Calendar/Calendar.messages.mjs.map +1 -1
  11. package/build/Calendar/Calendar.mjs +122 -18
  12. package/build/Calendar/Calendar.mjs.map +1 -1
  13. package/build/Calendar/DateHeader/DateHeader.js +5 -1
  14. package/build/Calendar/DateHeader/DateHeader.js.map +1 -1
  15. package/build/Calendar/DateHeader/DateHeader.mjs +5 -1
  16. package/build/Calendar/DateHeader/DateHeader.mjs.map +1 -1
  17. package/build/Calendar/DayCalendar/DayCalendar.js +20 -2
  18. package/build/Calendar/DayCalendar/DayCalendar.js.map +1 -1
  19. package/build/Calendar/DayCalendar/DayCalendar.mjs +20 -2
  20. package/build/Calendar/DayCalendar/DayCalendar.mjs.map +1 -1
  21. package/build/Calendar/DayCalendar/Table/DayCalendarTable.js +60 -19
  22. package/build/Calendar/DayCalendar/Table/DayCalendarTable.js.map +1 -1
  23. package/build/Calendar/DayCalendar/Table/DayCalendarTable.mjs +60 -19
  24. package/build/Calendar/DayCalendar/Table/DayCalendarTable.mjs.map +1 -1
  25. package/build/Calendar/MonthCalendar/MonthCalendar.js +6 -0
  26. package/build/Calendar/MonthCalendar/MonthCalendar.js.map +1 -1
  27. package/build/Calendar/MonthCalendar/MonthCalendar.mjs +6 -0
  28. package/build/Calendar/MonthCalendar/MonthCalendar.mjs.map +1 -1
  29. package/build/Calendar/MonthCalendar/Table/MonthCalendarTable.js +8 -3
  30. package/build/Calendar/MonthCalendar/Table/MonthCalendarTable.js.map +1 -1
  31. package/build/Calendar/MonthCalendar/Table/MonthCalendarTable.mjs +8 -3
  32. package/build/Calendar/MonthCalendar/Table/MonthCalendarTable.mjs.map +1 -1
  33. package/build/Calendar/TableLink/TableLink.js +95 -0
  34. package/build/Calendar/TableLink/TableLink.js.map +1 -0
  35. package/build/Calendar/TableLink/TableLink.mjs +91 -0
  36. package/build/Calendar/TableLink/TableLink.mjs.map +1 -0
  37. package/build/Calendar/YearCalendar/Table/YearCalendarTable.js +8 -3
  38. package/build/Calendar/YearCalendar/Table/YearCalendarTable.js.map +1 -1
  39. package/build/Calendar/YearCalendar/Table/YearCalendarTable.mjs +8 -3
  40. package/build/Calendar/YearCalendar/Table/YearCalendarTable.mjs.map +1 -1
  41. package/build/Calendar/YearCalendar/YearCalendar.js +7 -0
  42. package/build/Calendar/YearCalendar/YearCalendar.js.map +1 -1
  43. package/build/Calendar/YearCalendar/YearCalendar.mjs +7 -0
  44. package/build/Calendar/YearCalendar/YearCalendar.mjs.map +1 -1
  45. package/build/Calendar/_helpers/clampToDayViewBoundary/clampToDayViewBoundary.js +24 -0
  46. package/build/Calendar/_helpers/clampToDayViewBoundary/clampToDayViewBoundary.js.map +1 -0
  47. package/build/Calendar/_helpers/clampToDayViewBoundary/clampToDayViewBoundary.mjs +22 -0
  48. package/build/Calendar/_helpers/clampToDayViewBoundary/clampToDayViewBoundary.mjs.map +1 -0
  49. package/build/Calendar/_helpers/hasDisabledDatesInMonth/hasDisabledDatesInMonth.js +33 -0
  50. package/build/Calendar/_helpers/hasDisabledDatesInMonth/hasDisabledDatesInMonth.js.map +1 -0
  51. package/build/Calendar/_helpers/hasDisabledDatesInMonth/hasDisabledDatesInMonth.mjs +31 -0
  52. package/build/Calendar/_helpers/hasDisabledDatesInMonth/hasDisabledDatesInMonth.mjs.map +1 -0
  53. package/build/Calendar/_helpers/isDateDisabled/isDateDisabled.js +40 -0
  54. package/build/Calendar/_helpers/isDateDisabled/isDateDisabled.js.map +1 -0
  55. package/build/Calendar/_helpers/isDateDisabled/isDateDisabled.mjs +38 -0
  56. package/build/Calendar/_helpers/isDateDisabled/isDateDisabled.mjs.map +1 -0
  57. package/build/DateLookup/DateLookup.js +20 -9
  58. package/build/DateLookup/DateLookup.js.map +1 -1
  59. package/build/DateLookup/DateLookup.mjs +20 -9
  60. package/build/DateLookup/DateLookup.mjs.map +1 -1
  61. package/build/ExpressiveMoneyInput/CurrencySelector/CurrencySelector.js +3 -5
  62. package/build/ExpressiveMoneyInput/CurrencySelector/CurrencySelector.js.map +1 -1
  63. package/build/ExpressiveMoneyInput/CurrencySelector/CurrencySelector.mjs +3 -5
  64. package/build/ExpressiveMoneyInput/CurrencySelector/CurrencySelector.mjs.map +1 -1
  65. package/build/Inputs/SelectInput/TriggerButton/SelectInputTriggerButton.js.map +1 -1
  66. package/build/Inputs/SelectInput/TriggerButton/SelectInputTriggerButton.mjs.map +1 -1
  67. package/build/Typeahead/Typeahead.js +53 -27
  68. package/build/Typeahead/Typeahead.js.map +1 -1
  69. package/build/Typeahead/Typeahead.messages.js +3 -0
  70. package/build/Typeahead/Typeahead.messages.js.map +1 -1
  71. package/build/Typeahead/Typeahead.messages.mjs +3 -0
  72. package/build/Typeahead/Typeahead.messages.mjs.map +1 -1
  73. package/build/Typeahead/Typeahead.mjs +53 -27
  74. package/build/Typeahead/Typeahead.mjs.map +1 -1
  75. package/build/Typeahead/TypeaheadInput/TypeaheadInput.js +2 -2
  76. package/build/Typeahead/TypeaheadInput/TypeaheadInput.js.map +1 -1
  77. package/build/Typeahead/TypeaheadInput/TypeaheadInput.mjs +2 -2
  78. package/build/Typeahead/TypeaheadInput/TypeaheadInput.mjs.map +1 -1
  79. package/build/Typeahead/TypeaheadOption/TypeaheadOption.js +3 -1
  80. package/build/Typeahead/TypeaheadOption/TypeaheadOption.js.map +1 -1
  81. package/build/Typeahead/TypeaheadOption/TypeaheadOption.mjs +3 -1
  82. package/build/Typeahead/TypeaheadOption/TypeaheadOption.mjs.map +1 -1
  83. package/build/i18n/en.json +5 -0
  84. package/build/i18n/en.json.js +5 -0
  85. package/build/i18n/en.json.js.map +1 -1
  86. package/build/i18n/en.json.mjs +5 -0
  87. package/build/i18n/en.json.mjs.map +1 -1
  88. package/build/index.js +2 -2
  89. package/build/index.mjs +1 -1
  90. package/build/main.css +133 -43
  91. package/build/styles/Calendar/Calendar.css +112 -37
  92. package/build/styles/Calendar/TableLink/TableLink.css +115 -0
  93. package/build/styles/Typeahead/Typeahead.css +4 -0
  94. package/build/styles/Typeahead/TypeaheadOption/TypeaheadOption.css +5 -0
  95. package/build/styles/main.css +133 -43
  96. package/build/types/Body/Body.d.ts +2 -2
  97. package/build/types/Calendar/Calendar.constants.d.ts +2 -0
  98. package/build/types/Calendar/Calendar.constants.d.ts.map +1 -0
  99. package/build/types/Calendar/Calendar.d.ts +16 -3
  100. package/build/types/Calendar/Calendar.d.ts.map +1 -1
  101. package/build/types/Calendar/Calendar.messages.d.ts +20 -0
  102. package/build/types/Calendar/Calendar.messages.d.ts.map +1 -1
  103. package/build/types/Calendar/Calendar.types.d.ts +32 -0
  104. package/build/types/Calendar/Calendar.types.d.ts.map +1 -0
  105. package/build/types/Calendar/DateHeader/DateHeader.d.ts +2 -0
  106. package/build/types/Calendar/DateHeader/DateHeader.d.ts.map +1 -1
  107. package/build/types/Calendar/DayCalendar/DayCalendar.d.ts +7 -1
  108. package/build/types/Calendar/DayCalendar/DayCalendar.d.ts.map +1 -1
  109. package/build/types/Calendar/DayCalendar/Table/DayCalendarTable.d.ts +6 -0
  110. package/build/types/Calendar/DayCalendar/Table/DayCalendarTable.d.ts.map +1 -1
  111. package/build/types/Calendar/MonthCalendar/MonthCalendar.d.ts +1 -0
  112. package/build/types/Calendar/MonthCalendar/MonthCalendar.d.ts.map +1 -1
  113. package/build/types/Calendar/MonthCalendar/Table/MonthCalendarTable.d.ts +2 -1
  114. package/build/types/Calendar/MonthCalendar/Table/MonthCalendarTable.d.ts.map +1 -1
  115. package/build/types/Calendar/{tableLink → TableLink}/TableLink.d.ts +5 -1
  116. package/build/types/Calendar/TableLink/TableLink.d.ts.map +1 -0
  117. package/build/types/Calendar/TableLink/index.d.ts.map +1 -0
  118. package/build/types/Calendar/YearCalendar/Table/YearCalendarTable.d.ts +2 -1
  119. package/build/types/Calendar/YearCalendar/Table/YearCalendarTable.d.ts.map +1 -1
  120. package/build/types/Calendar/YearCalendar/YearCalendar.d.ts +1 -0
  121. package/build/types/Calendar/YearCalendar/YearCalendar.d.ts.map +1 -1
  122. package/build/types/Calendar/_helpers/clampToDayViewBoundary/clampToDayViewBoundary.d.ts +8 -0
  123. package/build/types/Calendar/_helpers/clampToDayViewBoundary/clampToDayViewBoundary.d.ts.map +1 -0
  124. package/build/types/Calendar/_helpers/hasDisabledDatesInMonth/hasDisabledDatesInMonth.d.ts +3 -0
  125. package/build/types/Calendar/_helpers/hasDisabledDatesInMonth/hasDisabledDatesInMonth.d.ts.map +1 -0
  126. package/build/types/Calendar/_helpers/index.d.ts +4 -0
  127. package/build/types/Calendar/_helpers/index.d.ts.map +1 -0
  128. package/build/types/Calendar/_helpers/isDateDisabled/isDateDisabled.d.ts +3 -0
  129. package/build/types/Calendar/_helpers/isDateDisabled/isDateDisabled.d.ts.map +1 -0
  130. package/build/types/Calendar/index.d.ts +1 -0
  131. package/build/types/Calendar/index.d.ts.map +1 -1
  132. package/build/types/DateLookup/DateLookup.d.ts +24 -5
  133. package/build/types/DateLookup/DateLookup.d.ts.map +1 -1
  134. package/build/types/DateLookup/index.d.ts +1 -0
  135. package/build/types/DateLookup/index.d.ts.map +1 -1
  136. package/build/types/ExpressiveMoneyInput/CurrencySelector/CurrencySelector.d.ts +6 -4
  137. package/build/types/ExpressiveMoneyInput/CurrencySelector/CurrencySelector.d.ts.map +1 -1
  138. package/build/types/IconButton/IconButton.d.ts +1 -1
  139. package/build/types/Inputs/SelectInput/TriggerButton/SelectInputTriggerButton.d.ts +1 -1
  140. package/build/types/Inputs/SelectInput/TriggerButton/SelectInputTriggerButton.d.ts.map +1 -1
  141. package/build/types/MoneyInput/MoneyInput.d.ts +1 -1
  142. package/build/types/MoneyInput/MoneyInput.d.ts.map +1 -1
  143. package/build/types/Title/Title.d.ts +2 -2
  144. package/build/types/Typeahead/Typeahead.d.ts.map +1 -1
  145. package/build/types/Typeahead/Typeahead.messages.d.ts +5 -0
  146. package/build/types/Typeahead/Typeahead.messages.d.ts.map +1 -1
  147. package/build/types/Typeahead/TypeaheadInput/TypeaheadInput.d.ts.map +1 -1
  148. package/build/types/Typeahead/TypeaheadOption/TypeaheadOption.d.ts +1 -0
  149. package/build/types/Typeahead/TypeaheadOption/TypeaheadOption.d.ts.map +1 -1
  150. package/build/types/Upload/Steps/UploadImageStep/UploadImageStep.d.ts +1 -1
  151. package/build/types/UploadInput/UploadItem/UploadItemLink.d.ts +1 -1
  152. package/build/types/index.d.ts +3 -2
  153. package/build/types/index.d.ts.map +1 -1
  154. package/build/types/test-utils/index.d.ts +10 -0
  155. package/build/types/test-utils/index.d.ts.map +1 -1
  156. package/package.json +1 -1
  157. package/src/Calendar/Calendar.constants.ts +5 -0
  158. package/src/Calendar/Calendar.css +112 -37
  159. package/src/Calendar/Calendar.disabledDates.test.tsx +610 -0
  160. package/src/Calendar/Calendar.less +5 -35
  161. package/src/Calendar/Calendar.messages.ts +21 -0
  162. package/src/Calendar/Calendar.test.tsx +342 -32
  163. package/src/Calendar/Calendar.tsx +169 -19
  164. package/src/Calendar/Calendar.types.ts +35 -0
  165. package/src/Calendar/DateHeader/DateHeader.tsx +6 -0
  166. package/src/Calendar/DayCalendar/DayCalendar.tsx +39 -1
  167. package/src/Calendar/DayCalendar/Table/DayCalendarTable.tsx +67 -27
  168. package/src/Calendar/MonthCalendar/MonthCalendar.tsx +8 -0
  169. package/src/Calendar/MonthCalendar/Table/MonthCalendarTable.tsx +15 -3
  170. package/src/Calendar/TableLink/TableLink.css +115 -0
  171. package/src/Calendar/TableLink/TableLink.less +68 -0
  172. package/src/Calendar/TableLink/TableLink.tsx +117 -0
  173. package/src/Calendar/YearCalendar/Table/YearCalendarTable.tsx +15 -3
  174. package/src/Calendar/YearCalendar/YearCalendar.tsx +9 -0
  175. package/src/Calendar/_helpers/clampToDayViewBoundary/clampToDayViewBoundary.test.ts +90 -0
  176. package/src/Calendar/_helpers/clampToDayViewBoundary/clampToDayViewBoundary.ts +25 -0
  177. package/src/Calendar/_helpers/hasDisabledDatesInMonth/hasDisabledDatesInMonth.test.ts +98 -0
  178. package/src/Calendar/_helpers/hasDisabledDatesInMonth/hasDisabledDatesInMonth.ts +45 -0
  179. package/src/Calendar/_helpers/index.ts +3 -0
  180. package/src/Calendar/_helpers/isDateDisabled/isDateDisabled.test.ts +169 -0
  181. package/src/Calendar/_helpers/isDateDisabled/isDateDisabled.ts +59 -0
  182. package/src/Calendar/_stories/Calendar.accessibility.docs.mdx +118 -0
  183. package/src/Calendar/_stories/Calendar.story.tsx +144 -4
  184. package/src/Calendar/_stories/Calendar.test.story.tsx +114 -0
  185. package/src/Calendar/index.ts +7 -0
  186. package/src/DateLookup/DateLookup.disabledDates.test.tsx +312 -0
  187. package/src/DateLookup/DateLookup.test.tsx +34 -37
  188. package/src/DateLookup/DateLookup.tsx +37 -13
  189. package/src/DateLookup/_stories/DateLookup.accessibility.docs.mdx +108 -0
  190. package/src/DateLookup/_stories/DateLookup.story.tsx +126 -2
  191. package/src/DateLookup/index.ts +6 -0
  192. package/src/ExpressiveMoneyInput/CurrencySelector/CurrencySelector.tsx +12 -13
  193. package/src/Inputs/SelectInput/SelectInput.test.tsx +37 -0
  194. package/src/Inputs/SelectInput/TriggerButton/SelectInputTriggerButton.tsx +1 -1
  195. package/src/Typeahead/Typeahead.css +4 -0
  196. package/src/Typeahead/Typeahead.less +2 -0
  197. package/src/Typeahead/Typeahead.messages.ts +5 -0
  198. package/src/Typeahead/Typeahead.test.tsx +80 -3
  199. package/src/Typeahead/Typeahead.tsx +50 -27
  200. package/src/Typeahead/TypeaheadInput/TypeaheadInput.tsx +2 -6
  201. package/src/Typeahead/TypeaheadOption/TypeaheadOption.css +5 -0
  202. package/src/Typeahead/TypeaheadOption/TypeaheadOption.less +9 -0
  203. package/src/Typeahead/TypeaheadOption/TypeaheadOption.tsx +4 -2
  204. package/src/i18n/en.json +4 -0
  205. package/src/index.ts +3 -2
  206. package/src/main.css +133 -43
  207. package/build/Calendar/tableLink/TableLink.js +0 -61
  208. package/build/Calendar/tableLink/TableLink.js.map +0 -1
  209. package/build/Calendar/tableLink/TableLink.mjs +0 -57
  210. package/build/Calendar/tableLink/TableLink.mjs.map +0 -1
  211. package/build/types/Calendar/tableLink/TableLink.d.ts.map +0 -1
  212. package/build/types/Calendar/tableLink/index.d.ts.map +0 -1
  213. package/src/Calendar/tableLink/TableLink.tsx +0 -77
  214. /package/build/types/Calendar/{tableLink → TableLink}/index.d.ts +0 -0
  215. /package/src/Calendar/{tableLink → TableLink}/index.ts +0 -0
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ const LONG_DAY_FORMAT = {
4
+ day: 'numeric',
5
+ month: 'long',
6
+ year: 'numeric'
7
+ };
8
+
9
+ exports.LONG_DAY_FORMAT = LONG_DAY_FORMAT;
10
+ //# sourceMappingURL=Calendar.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Calendar.constants.js","sources":["../../src/Calendar/Calendar.constants.ts"],"sourcesContent":["export const LONG_DAY_FORMAT: Intl.DateTimeFormatOptions = {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n};\n"],"names":["LONG_DAY_FORMAT","day","month","year"],"mappings":";;AAAO,MAAMA,eAAe,GAA+B;AACzDC,EAAAA,GAAG,EAAE,SAAS;AACdC,EAAAA,KAAK,EAAE,MAAM;AACbC,EAAAA,IAAI,EAAE;;;;;"}
@@ -0,0 +1,8 @@
1
+ const LONG_DAY_FORMAT = {
2
+ day: 'numeric',
3
+ month: 'long',
4
+ year: 'numeric'
5
+ };
6
+
7
+ export { LONG_DAY_FORMAT };
8
+ //# sourceMappingURL=Calendar.constants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Calendar.constants.mjs","sources":["../../src/Calendar/Calendar.constants.ts"],"sourcesContent":["export const LONG_DAY_FORMAT: Intl.DateTimeFormatOptions = {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n};\n"],"names":["LONG_DAY_FORMAT","day","month","year"],"mappings":"AAAO,MAAMA,eAAe,GAA+B;AACzDC,EAAAA,GAAG,EAAE,SAAS;AACdC,EAAAA,KAAK,EAAE,MAAM;AACbC,EAAAA,IAAI,EAAE;;;;;"}
@@ -3,6 +3,8 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
+ var reactIntl = require('react-intl');
7
+ var formatting = require('@transferwise/formatting');
6
8
  require('../common/theme.js');
7
9
  require('../common/direction.js');
8
10
  require('@transferwise/neptune-tokens');
@@ -22,37 +24,66 @@ require('../common/PropsValues/variant.js');
22
24
  require('../common/PropsValues/scroll.js');
23
25
  require('../common/PropsValues/markdownNodeType.js');
24
26
  require('../common/fileType.js');
25
- require('@transferwise/formatting');
26
27
  require('@transferwise/icons');
27
28
  require('clsx');
28
- require('react-intl');
29
29
  require('../common/CloseButton/CloseButton.messages.js');
30
30
  var jsxRuntime = require('react/jsx-runtime');
31
31
  var moveToWithinRange = require('../common/DateUtils/moveToWithinRange/moveToWithinRange.js');
32
32
  var isWithinRange = require('../common/DateUtils/isWithinRange/isWithinRange.js');
33
33
  var getDateView = require('../common/DateUtils/getDateView/getDateView.js');
34
+ var clampToDayViewBoundary = require('./_helpers/clampToDayViewBoundary/clampToDayViewBoundary.js');
35
+ var isDateDisabled = require('./_helpers/isDateDisabled/isDateDisabled.js');
36
+ var hasDisabledDatesInMonth = require('./_helpers/hasDisabledDatesInMonth/hasDisabledDatesInMonth.js');
37
+ var Calendar_constants = require('./Calendar.constants.js');
38
+ var InlinePrompt = require('../Prompt/InlinePrompt/InlinePrompt.js');
34
39
  var DayCalendar = require('./DayCalendar/DayCalendar.js');
35
40
  var GetStartOfDay = require('./GetStartOfDay/GetStartOfDay.js');
41
+ var Calendar_messages = require('./Calendar.messages.js');
36
42
  var MonthCalendar = require('./MonthCalendar/MonthCalendar.js');
37
43
  var YearCalendar = require('./YearCalendar/YearCalendar.js');
38
44
 
45
+ /**
46
+ * Inline calendar for selecting a single date. Powers [DateLookup](?path=/docs/forms-datelookup--docs).
47
+ */
39
48
  const Calendar = ({
40
49
  value,
41
50
  min: minProp = null,
42
51
  max: maxProp = null,
43
52
  monthFormat: monthFormat$1 = monthFormat.MonthFormat.LONG,
44
53
  placeholder,
45
- onChange,
46
- onSelect
54
+ disabledRules,
55
+ onDateFocus,
56
+ onChange
47
57
  }) => {
58
+ const intl = reactIntl.useIntl();
48
59
  const selectedDate = GetStartOfDay.getStartOfDay(value);
49
60
  const min = GetStartOfDay.getStartOfDay(minProp);
50
61
  const max = GetStartOfDay.getStartOfDay(maxProp);
62
+ const disabledReasonId = React.useId();
63
+ const disabledRulesRef = React.useRef(disabledRules);
64
+ React.useEffect(() => {
65
+ disabledRulesRef.current = disabledRules;
66
+ });
67
+ const [hasInteracted, setHasInteracted] = React.useState(false);
68
+ const [focusedDate, setFocusedDate] = React.useState(selectedDate);
69
+ React.useEffect(() => {
70
+ // eslint-disable-next-line react-hooks/set-state-in-effect
71
+ setFocusedDate(selectedDate);
72
+ }, [selectedDate?.getTime()]); // eslint-disable-line react-hooks/exhaustive-deps
73
+ const checkIsEnabled = date => {
74
+ if (!date) return true;
75
+ return isWithinRange.isWithinRange(date, min, max) && !isDateDisabled.isDateDisabled(date, disabledRulesRef.current);
76
+ };
77
+ const focusedDateDisabled = focusedDate ? !isWithinRange.isWithinRange(focusedDate, min, max) || isDateDisabled.isDateDisabled(focusedDate, disabledRules) : false;
51
78
  React.useEffect(() => {
52
79
  if (selectedDate && !isWithinRange.isWithinRange(selectedDate, min, max)) {
53
- onChange(moveToWithinRange.moveToWithinRange(selectedDate, min, max));
80
+ const clamped = moveToWithinRange.moveToWithinRange(selectedDate, min, max);
81
+ setFocusedDate(clamped); // eslint-disable-line react-hooks/set-state-in-effect
82
+ onDateFocus?.(clamped, {
83
+ isEnabled: checkIsEnabled(clamped)
84
+ });
54
85
  }
55
- }, [selectedDate?.getTime(), min?.getTime(), max?.getTime(), onChange]); // eslint-disable-line react-hooks/exhaustive-deps
86
+ }, [selectedDate?.getTime(), min?.getTime(), max?.getTime(), onDateFocus]); // eslint-disable-line react-hooks/exhaustive-deps
56
87
  const dateView = getDateView.returnDateView(selectedDate, min, max);
57
88
  const [viewMonth, setViewMonth] = React.useState(dateView.getMonth());
58
89
  const [viewYear, setViewYear] = React.useState(dateView.getFullYear());
@@ -63,6 +94,13 @@ const Calendar = ({
63
94
  setViewMonth(view.getMonth());
64
95
  setViewYear(view.getFullYear());
65
96
  }, [selectedDate?.getTime(), min?.getTime(), max?.getTime()]); // eslint-disable-line react-hooks/exhaustive-deps
97
+ React.useEffect(() => {
98
+ if (focusedDate) {
99
+ // eslint-disable-next-line react-hooks/set-state-in-effect
100
+ setViewMonth(focusedDate.getMonth());
101
+ setViewYear(focusedDate.getFullYear());
102
+ }
103
+ }, [focusedDate?.getTime()]); // eslint-disable-line react-hooks/exhaustive-deps
66
104
  const handleViewDateUpdate = React.useCallback(
67
105
  // eslint-disable-next-line react-hooks/preserve-manual-memoization
68
106
  ({
@@ -71,29 +109,56 @@ const Calendar = ({
71
109
  }) => {
72
110
  if (month !== undefined) setViewMonth(month);
73
111
  if (year !== undefined) setViewYear(year);
112
+ setHasInteracted(false);
74
113
  }, []);
75
114
  const switchToDays = React.useCallback(() => setMode('day'), []);
76
115
  const switchToMonths = React.useCallback(() => setMode('month'), []);
77
116
  const switchToYears = React.useCallback(() => setMode('year'), []);
78
117
  const handleSelectedDateUpdate = React.useCallback(date => {
79
- if (onSelect) {
80
- onSelect(date);
81
- } else {
118
+ if (!hasInteracted) setHasInteracted(true);
119
+ const isEnabled = checkIsEnabled(date);
120
+ setFocusedDate(date);
121
+ onDateFocus?.(date, {
122
+ isEnabled
123
+ });
124
+ if (isEnabled && onChange) {
82
125
  onChange(date);
83
126
  }
84
- }, [onChange, onSelect]);
127
+ }, [onDateFocus, onChange]);
85
128
  const adjustDate = React.useCallback((daysToAdd, monthsToAdd, yearsToAdd) => {
129
+ const base = focusedDate ?? selectedDate;
86
130
  let date;
87
- if (selectedDate) {
88
- date = new Date(mode === 'year' ? selectedDate.getFullYear() + yearsToAdd : selectedDate.getFullYear(), mode === 'month' ? selectedDate.getMonth() + monthsToAdd : selectedDate.getMonth(), mode === 'day' ? selectedDate.getDate() + daysToAdd : selectedDate.getDate());
131
+ if (base) {
132
+ date = new Date(mode === 'year' ? base.getFullYear() + yearsToAdd : base.getFullYear(), mode === 'month' ? base.getMonth() + monthsToAdd : base.getMonth(), mode === 'day' ? base.getDate() + daysToAdd : base.getDate());
89
133
  } else {
90
134
  date = GetStartOfDay.getStartOfDay(new Date());
91
135
  }
92
- date &&= moveToWithinRange.moveToWithinRange(date, min, max);
93
- if (date?.getTime() !== selectedDate?.getTime()) {
94
- onChange(date);
136
+ date &&= mode !== 'day' ? moveToWithinRange.moveToWithinRange(date, min, max) : clampToDayViewBoundary.clampToDayViewBoundary(date, min, max);
137
+ if (date?.getTime() !== focusedDate?.getTime()) {
138
+ const monthChanged = date ? date.getMonth() !== focusedDate?.getMonth() || date.getFullYear() !== focusedDate?.getFullYear() : false;
139
+ setFocusedDate(date);
140
+ if (date) {
141
+ setViewMonth(date.getMonth());
142
+ setViewYear(date.getFullYear());
143
+ }
144
+ if (monthChanged) {
145
+ setHasInteracted(false);
146
+ } else if (!hasInteracted) {
147
+ setHasInteracted(true);
148
+ }
149
+ onDateFocus?.(date, {
150
+ isEnabled: checkIsEnabled(date)
151
+ });
95
152
  }
96
- }, [selectedDate, min, max, mode, onChange]);
153
+ }, [focusedDate, selectedDate, min, max, mode, onDateFocus]);
154
+ const handleDayFocus = React.useCallback(date => {
155
+ if (date.getTime() !== focusedDate?.getTime()) {
156
+ setFocusedDate(date);
157
+ onDateFocus?.(date, {
158
+ isEnabled: checkIsEnabled(date)
159
+ });
160
+ }
161
+ }, [focusedDate, onDateFocus]);
97
162
  const handleKeyDown = React.useCallback(event => {
98
163
  switch (event.key) {
99
164
  case 'ArrowLeft':
@@ -112,8 +177,34 @@ const Calendar = ({
112
177
  adjustDate(7, 4, 4);
113
178
  event.preventDefault();
114
179
  break;
180
+ case 'Enter':
181
+ case ' ':
182
+ if (mode === 'day' && focusedDate && event.target.hasAttribute('data-calendar-cell')) {
183
+ handleSelectedDateUpdate(focusedDate);
184
+ event.preventDefault();
185
+ }
186
+ break;
115
187
  }
116
- }, [adjustDate]);
188
+ }, [adjustDate, focusedDate, mode, handleSelectedDateUpdate]);
189
+ const focusedDateOutOfRange = focusedDate ? !isWithinRange.isWithinRange(focusedDate, min, max) : false;
190
+ const formatDateForPrompt = date => formatting.formatDate(date, intl.locale, Calendar_constants.LONG_DAY_FORMAT);
191
+ const outOfRangePromptText = min && max ? intl.formatMessage(Calendar_messages.default.outOfRangeBetween, {
192
+ min: formatDateForPrompt(min),
193
+ max: formatDateForPrompt(max)
194
+ }) : min ? intl.formatMessage(Calendar_messages.default.outOfRangeAfter, {
195
+ min: formatDateForPrompt(min)
196
+ }) : max ? intl.formatMessage(Calendar_messages.default.outOfRangeBefore, {
197
+ max: formatDateForPrompt(max)
198
+ }) : '';
199
+ const hasOutOfRangeDates = mode === 'day' && !!(min || max);
200
+ const showRulesPrompt = mode === 'day' && !!disabledRules && hasDisabledDatesInMonth.hasDisabledDatesInMonth(viewMonth, viewYear, disabledRules, min, max);
201
+ const showOutOfRangePrompt = mode === 'day' && focusedDateOutOfRange;
202
+ const showPrompt = hasOutOfRangeDates || showRulesPrompt;
203
+ const promptText = showOutOfRangePrompt ? outOfRangePromptText : disabledRules?.reason ?? outOfRangePromptText;
204
+ const promptSentiment = showOutOfRangePrompt || focusedDateDisabled ? 'negative' : 'neutral';
205
+ // Visible when there's an actionable message; sr-only when only hasOutOfRangeDates is true
206
+ // (prompt exists for aria-describedby but no visual cue needed until an out-of-range date is focused)
207
+ const promptClassName = showOutOfRangePrompt || showRulesPrompt ? 'm-t-1' : 'sr-only';
117
208
  return (
118
209
  /*#__PURE__*/
119
210
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions
@@ -121,16 +212,22 @@ const Calendar = ({
121
212
  onKeyDown: handleKeyDown,
122
213
  children: [mode === 'day' && /*#__PURE__*/jsxRuntime.jsx(DayCalendar.default, {
123
214
  selectedDate: selectedDate,
215
+ focusedDate: focusedDate,
124
216
  min: min,
125
217
  max: max,
126
218
  viewMonth: viewMonth,
127
219
  viewYear: viewYear,
128
220
  monthFormat: monthFormat$1,
221
+ disabledRules: disabledRules,
222
+ disabledReasonId: showPrompt ? disabledReasonId : undefined,
223
+ announceReasonOnFocus: !hasInteracted,
129
224
  onSelect: handleSelectedDateUpdate,
225
+ onDayFocus: handleDayFocus,
130
226
  onLabelClick: switchToYears,
131
227
  onViewDateUpdate: handleViewDateUpdate
132
228
  }), mode === 'month' && /*#__PURE__*/jsxRuntime.jsx(MonthCalendar.default, {
133
229
  selectedDate: selectedDate,
230
+ focusedDate: focusedDate,
134
231
  min: min,
135
232
  max: max,
136
233
  viewYear: viewYear,
@@ -142,6 +239,7 @@ const Calendar = ({
142
239
  onViewDateUpdate: handleViewDateUpdate
143
240
  }), mode === 'year' && /*#__PURE__*/jsxRuntime.jsx(YearCalendar.default, {
144
241
  selectedDate: selectedDate,
242
+ focusedDate: focusedDate,
145
243
  min: min,
146
244
  max: max,
147
245
  viewYear: viewYear,
@@ -150,6 +248,12 @@ const Calendar = ({
150
248
  }),
151
249
  onSelect: switchToMonths,
152
250
  onViewDateUpdate: handleViewDateUpdate
251
+ }), showPrompt && /*#__PURE__*/jsxRuntime.jsx(InlinePrompt.InlinePrompt, {
252
+ sentiment: promptSentiment,
253
+ width: "full",
254
+ id: disabledReasonId,
255
+ className: promptClassName,
256
+ children: promptText
153
257
  })]
154
258
  })
155
259
  );
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.js","sources":["../../src/Calendar/Calendar.tsx"],"sourcesContent":["import { useState, useCallback, useEffect, KeyboardEvent } from 'react';\n\nimport { MonthFormat } from '../common';\nimport { isWithinRange, moveToWithinRange, returnDateView } from '../common/DateUtils';\nimport DayCalendar from './DayCalendar';\nimport { getStartOfDay } from './GetStartOfDay';\nimport MonthCalendar from './MonthCalendar';\nimport YearCalendar from './YearCalendar';\n\nexport interface CalendarProps {\n value: Date | null;\n min?: Date | null;\n max?: Date | null;\n monthFormat?: `${MonthFormat}`;\n placeholder?: string;\n onChange: (date: Date | null) => void;\n onSelect?: (date: Date) => void;\n}\n\nconst Calendar = ({\n value,\n min: minProp = null,\n max: maxProp = null,\n monthFormat = MonthFormat.LONG,\n placeholder,\n onChange,\n onSelect,\n}: CalendarProps) => {\n const selectedDate = getStartOfDay(value);\n const min = getStartOfDay(minProp);\n const max = getStartOfDay(maxProp);\n\n useEffect(() => {\n if (selectedDate && !isWithinRange(selectedDate, min, max)) {\n onChange(moveToWithinRange(selectedDate, min, max));\n }\n }, [selectedDate?.getTime(), min?.getTime(), max?.getTime(), onChange]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const dateView = returnDateView(selectedDate, min, max);\n const [viewMonth, setViewMonth] = useState(dateView.getMonth());\n const [viewYear, setViewYear] = useState(dateView.getFullYear());\n const [mode, setMode] = useState<'day' | 'month' | 'year'>('day');\n\n useEffect(() => {\n const view = returnDateView(selectedDate, min, max);\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setViewMonth(view.getMonth());\n\n setViewYear(view.getFullYear());\n }, [selectedDate?.getTime(), min?.getTime(), max?.getTime()]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleViewDateUpdate = useCallback(\n // eslint-disable-next-line react-hooks/preserve-manual-memoization\n ({ month, year }: { month?: number; year?: number }) => {\n if (month !== undefined) setViewMonth(month);\n if (year !== undefined) setViewYear(year);\n },\n [],\n );\n\n const switchToDays = useCallback(() => setMode('day'), []);\n const switchToMonths = useCallback(() => setMode('month'), []);\n const switchToYears = useCallback(() => setMode('year'), []);\n\n const handleSelectedDateUpdate = useCallback(\n (date: Date) => {\n if (onSelect) {\n onSelect(date);\n } else {\n onChange(date);\n }\n },\n [onChange, onSelect],\n );\n\n const adjustDate = useCallback(\n (daysToAdd: number, monthsToAdd: number, yearsToAdd: number) => {\n let date: Date | null;\n if (selectedDate) {\n date = new Date(\n mode === 'year' ? selectedDate.getFullYear() + yearsToAdd : selectedDate.getFullYear(),\n mode === 'month' ? selectedDate.getMonth() + monthsToAdd : selectedDate.getMonth(),\n mode === 'day' ? selectedDate.getDate() + daysToAdd : selectedDate.getDate(),\n );\n } else {\n date = getStartOfDay(new Date());\n }\n date &&= moveToWithinRange(date, min, max);\n if (date?.getTime() !== selectedDate?.getTime()) {\n onChange(date);\n }\n },\n [selectedDate, min, max, mode, onChange],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n switch (event.key) {\n case 'ArrowLeft':\n adjustDate(-1, -1, -1);\n event.preventDefault();\n break;\n case 'ArrowUp':\n adjustDate(-7, -4, -4);\n event.preventDefault();\n break;\n case 'ArrowRight':\n adjustDate(1, 1, 1);\n event.preventDefault();\n break;\n case 'ArrowDown':\n adjustDate(7, 4, 4);\n event.preventDefault();\n break;\n default:\n break;\n }\n },\n [adjustDate],\n );\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div onKeyDown={handleKeyDown}>\n {mode === 'day' && (\n <DayCalendar\n selectedDate={selectedDate}\n min={min}\n max={max}\n viewMonth={viewMonth}\n viewYear={viewYear}\n monthFormat={monthFormat}\n onSelect={handleSelectedDateUpdate}\n onLabelClick={switchToYears}\n onViewDateUpdate={handleViewDateUpdate}\n />\n )}\n {mode === 'month' && (\n <MonthCalendar\n selectedDate={selectedDate}\n min={min}\n max={max}\n viewYear={viewYear}\n {...(placeholder != null && { placeholder })}\n onSelect={switchToDays}\n onLabelClick={switchToYears}\n onViewDateUpdate={handleViewDateUpdate}\n />\n )}\n {mode === 'year' && (\n <YearCalendar\n selectedDate={selectedDate}\n min={min}\n max={max}\n viewYear={viewYear}\n {...(placeholder != null && { placeholder })}\n onSelect={switchToMonths}\n onViewDateUpdate={handleViewDateUpdate}\n />\n )}\n </div>\n );\n};\n\nexport default Calendar;\n"],"names":["Calendar","value","min","minProp","max","maxProp","monthFormat","MonthFormat","LONG","placeholder","onChange","onSelect","selectedDate","getStartOfDay","useEffect","isWithinRange","moveToWithinRange","getTime","dateView","returnDateView","viewMonth","setViewMonth","useState","getMonth","viewYear","setViewYear","getFullYear","mode","setMode","view","handleViewDateUpdate","useCallback","month","year","undefined","switchToDays","switchToMonths","switchToYears","handleSelectedDateUpdate","date","adjustDate","daysToAdd","monthsToAdd","yearsToAdd","Date","getDate","handleKeyDown","event","key","preventDefault","_jsxs","onKeyDown","children","_jsx","DayCalendar","onLabelClick","onViewDateUpdate","MonthCalendar","YearCalendar"],"mappings":"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"}
1
+ {"version":3,"file":"Calendar.js","sources":["../../src/Calendar/Calendar.tsx"],"sourcesContent":["import { useState, useCallback, useEffect, useId, useRef, KeyboardEvent } from 'react';\nimport { useIntl } from 'react-intl';\nimport { formatDate } from '@transferwise/formatting';\n\nimport { MonthFormat } from '../common';\nimport { isWithinRange, moveToWithinRange, returnDateView } from '../common/DateUtils';\nimport { clampToDayViewBoundary, isDateDisabled, hasDisabledDatesInMonth } from './_helpers';\nimport { LONG_DAY_FORMAT } from './Calendar.constants';\nimport { InlinePrompt } from '../Prompt/InlinePrompt';\nimport type { DateChangeMeta, DisabledRules } from './Calendar.types';\nimport DayCalendar from './DayCalendar';\nimport { getStartOfDay } from './GetStartOfDay';\nimport messages from './Calendar.messages';\nimport MonthCalendar from './MonthCalendar';\nimport YearCalendar from './YearCalendar';\n\nexport interface CalendarProps {\n /** The currently selected date, or `null` for no selection. */\n value: Date | null;\n /** Earliest selectable date (inclusive). Dates before this are interactive but not selectable, and show a boundary prompt. */\n min?: Date | null;\n /** Latest selectable date (inclusive). Dates after this are interactive but not selectable, and show a boundary prompt. */\n max?: Date | null;\n /** Month name format in the header. Defaults to `'long'` (e.g. \"January\"). */\n monthFormat?: `${MonthFormat}`;\n /** Placeholder text shown in the month/year cells when no date is selected. */\n placeholder?: string;\n /** Rules for disabling specific weekdays, individual dates, or date ranges. The required `reason` is shown in an inline prompt and linked to disabled cells via `aria-describedby` for screen reader accessibility. */\n disabledRules?: DisabledRules;\n /** Called whenever the focused date changes — including disabled and out-of-range dates. `meta.isEnabled` is `false` when the date is not selectable. */\n onDateFocus?: (date: Date | null, meta: DateChangeMeta) => void;\n /** Called when a date is confirmed (click or Enter). Only fires for enabled dates. */\n onChange?: (date: Date | null) => void;\n}\n\n/**\n * Temporary toggle — set `true` to restore strict min/max keyboard clamping.\n * @see https://transferwise.atlassian.net/browse/DS-8518\n */\nconst STRICT_KEYBOARD_CLAMPING = false;\n\n/**\n * Inline calendar for selecting a single date. Powers [DateLookup](?path=/docs/forms-datelookup--docs).\n */\nconst Calendar = ({\n value,\n min: minProp = null,\n max: maxProp = null,\n monthFormat = MonthFormat.LONG,\n placeholder,\n disabledRules,\n onDateFocus,\n onChange,\n}: CalendarProps) => {\n const intl = useIntl();\n const selectedDate = getStartOfDay(value);\n const min = getStartOfDay(minProp);\n const max = getStartOfDay(maxProp);\n const disabledReasonId = useId();\n const disabledRulesRef = useRef(disabledRules);\n useEffect(() => {\n disabledRulesRef.current = disabledRules;\n });\n\n const [hasInteracted, setHasInteracted] = useState(false);\n const [focusedDate, setFocusedDate] = useState<Date | null>(selectedDate);\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setFocusedDate(selectedDate);\n }, [selectedDate?.getTime()]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const checkIsEnabled = (date: Date | null) => {\n if (!date) return true;\n return isWithinRange(date, min, max) && !isDateDisabled(date, disabledRulesRef.current);\n };\n\n const focusedDateDisabled = focusedDate\n ? !isWithinRange(focusedDate, min, max) || isDateDisabled(focusedDate, disabledRules)\n : false;\n\n useEffect(() => {\n if (selectedDate && !isWithinRange(selectedDate, min, max)) {\n const clamped = moveToWithinRange(selectedDate, min, max);\n setFocusedDate(clamped); // eslint-disable-line react-hooks/set-state-in-effect\n onDateFocus?.(clamped, { isEnabled: checkIsEnabled(clamped) });\n }\n }, [selectedDate?.getTime(), min?.getTime(), max?.getTime(), onDateFocus]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const dateView = returnDateView(selectedDate, min, max);\n const [viewMonth, setViewMonth] = useState(dateView.getMonth());\n const [viewYear, setViewYear] = useState(dateView.getFullYear());\n const [mode, setMode] = useState<'day' | 'month' | 'year'>('day');\n\n useEffect(() => {\n const view = returnDateView(selectedDate, min, max);\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setViewMonth(view.getMonth());\n\n setViewYear(view.getFullYear());\n }, [selectedDate?.getTime(), min?.getTime(), max?.getTime()]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (focusedDate) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setViewMonth(focusedDate.getMonth());\n setViewYear(focusedDate.getFullYear());\n }\n }, [focusedDate?.getTime()]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleViewDateUpdate = useCallback(\n // eslint-disable-next-line react-hooks/preserve-manual-memoization\n ({ month, year }: { month?: number; year?: number }) => {\n if (month !== undefined) setViewMonth(month);\n if (year !== undefined) setViewYear(year);\n setHasInteracted(false);\n },\n [],\n );\n\n const switchToDays = useCallback(() => setMode('day'), []);\n const switchToMonths = useCallback(() => setMode('month'), []);\n const switchToYears = useCallback(() => setMode('year'), []);\n\n const handleSelectedDateUpdate = useCallback(\n (date: Date) => {\n if (!hasInteracted) setHasInteracted(true);\n const isEnabled = checkIsEnabled(date);\n setFocusedDate(date);\n onDateFocus?.(date, { isEnabled });\n if (isEnabled && onChange) {\n onChange(date);\n }\n },\n [onDateFocus, onChange], // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const adjustDate = useCallback(\n (daysToAdd: number, monthsToAdd: number, yearsToAdd: number) => {\n const base = focusedDate ?? selectedDate;\n let date: Date | null;\n if (base) {\n date = new Date(\n mode === 'year' ? base.getFullYear() + yearsToAdd : base.getFullYear(),\n mode === 'month' ? base.getMonth() + monthsToAdd : base.getMonth(),\n mode === 'day' ? base.getDate() + daysToAdd : base.getDate(),\n );\n } else {\n date = getStartOfDay(new Date());\n }\n date &&=\n STRICT_KEYBOARD_CLAMPING || mode !== 'day'\n ? moveToWithinRange(date, min, max)\n : clampToDayViewBoundary(date, min, max);\n if (date?.getTime() !== focusedDate?.getTime()) {\n const monthChanged = date\n ? date.getMonth() !== focusedDate?.getMonth() ||\n date.getFullYear() !== focusedDate?.getFullYear()\n : false;\n setFocusedDate(date);\n if (date) {\n setViewMonth(date.getMonth());\n setViewYear(date.getFullYear());\n }\n if (monthChanged) {\n setHasInteracted(false);\n } else if (!hasInteracted) {\n setHasInteracted(true);\n }\n onDateFocus?.(date, { isEnabled: checkIsEnabled(date) });\n }\n },\n [focusedDate, selectedDate, min, max, mode, onDateFocus], // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const handleDayFocus = useCallback(\n (date: Date) => {\n if (date.getTime() !== focusedDate?.getTime()) {\n setFocusedDate(date);\n onDateFocus?.(date, { isEnabled: checkIsEnabled(date) });\n }\n },\n [focusedDate, onDateFocus], // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n switch (event.key) {\n case 'ArrowLeft':\n adjustDate(-1, -1, -1);\n event.preventDefault();\n break;\n case 'ArrowUp':\n adjustDate(-7, -4, -4);\n event.preventDefault();\n break;\n case 'ArrowRight':\n adjustDate(1, 1, 1);\n event.preventDefault();\n break;\n case 'ArrowDown':\n adjustDate(7, 4, 4);\n event.preventDefault();\n break;\n case 'Enter':\n case ' ':\n if (\n mode === 'day' &&\n focusedDate &&\n (event.target as HTMLElement).hasAttribute('data-calendar-cell')\n ) {\n handleSelectedDateUpdate(focusedDate);\n event.preventDefault();\n }\n break;\n default:\n break;\n }\n },\n [adjustDate, focusedDate, mode, handleSelectedDateUpdate],\n );\n\n const focusedDateOutOfRange = focusedDate ? !isWithinRange(focusedDate, min, max) : false;\n\n const formatDateForPrompt = (date: Date) => formatDate(date, intl.locale, LONG_DAY_FORMAT);\n\n const outOfRangePromptText =\n min && max\n ? intl.formatMessage(messages.outOfRangeBetween, {\n min: formatDateForPrompt(min),\n max: formatDateForPrompt(max),\n })\n : min\n ? intl.formatMessage(messages.outOfRangeAfter, { min: formatDateForPrompt(min) })\n : max\n ? intl.formatMessage(messages.outOfRangeBefore, { max: formatDateForPrompt(max) })\n : '';\n\n const hasOutOfRangeDates = mode === 'day' && !!(min || max);\n const showRulesPrompt =\n mode === 'day' &&\n !!disabledRules &&\n hasDisabledDatesInMonth(viewMonth, viewYear, disabledRules, min, max);\n const showOutOfRangePrompt = mode === 'day' && focusedDateOutOfRange;\n const showPrompt = hasOutOfRangeDates || showRulesPrompt;\n\n const promptText = showOutOfRangePrompt\n ? outOfRangePromptText\n : (disabledRules?.reason ?? outOfRangePromptText);\n const promptSentiment = showOutOfRangePrompt || focusedDateDisabled ? 'negative' : 'neutral';\n // Visible when there's an actionable message; sr-only when only hasOutOfRangeDates is true\n // (prompt exists for aria-describedby but no visual cue needed until an out-of-range date is focused)\n const promptClassName = showOutOfRangePrompt || showRulesPrompt ? 'm-t-1' : 'sr-only';\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div onKeyDown={handleKeyDown}>\n {mode === 'day' && (\n <DayCalendar\n selectedDate={selectedDate}\n focusedDate={focusedDate}\n min={min}\n max={max}\n viewMonth={viewMonth}\n viewYear={viewYear}\n monthFormat={monthFormat}\n disabledRules={disabledRules}\n disabledReasonId={showPrompt ? disabledReasonId : undefined}\n announceReasonOnFocus={!hasInteracted}\n onSelect={handleSelectedDateUpdate}\n onDayFocus={handleDayFocus}\n onLabelClick={switchToYears}\n onViewDateUpdate={handleViewDateUpdate}\n />\n )}\n {mode === 'month' && (\n <MonthCalendar\n selectedDate={selectedDate}\n focusedDate={focusedDate}\n min={min}\n max={max}\n viewYear={viewYear}\n {...(placeholder != null && { placeholder })}\n onSelect={switchToDays}\n onLabelClick={switchToYears}\n onViewDateUpdate={handleViewDateUpdate}\n />\n )}\n {mode === 'year' && (\n <YearCalendar\n selectedDate={selectedDate}\n focusedDate={focusedDate}\n min={min}\n max={max}\n viewYear={viewYear}\n {...(placeholder != null && { placeholder })}\n onSelect={switchToMonths}\n onViewDateUpdate={handleViewDateUpdate}\n />\n )}\n {showPrompt && (\n <InlinePrompt\n sentiment={promptSentiment}\n width=\"full\"\n id={disabledReasonId}\n className={promptClassName}\n >\n {promptText}\n </InlinePrompt>\n )}\n </div>\n );\n};\n\nexport default Calendar;\n"],"names":["Calendar","value","min","minProp","max","maxProp","monthFormat","MonthFormat","LONG","placeholder","disabledRules","onDateFocus","onChange","intl","useIntl","selectedDate","getStartOfDay","disabledReasonId","useId","disabledRulesRef","useRef","useEffect","current","hasInteracted","setHasInteracted","useState","focusedDate","setFocusedDate","getTime","checkIsEnabled","date","isWithinRange","isDateDisabled","focusedDateDisabled","clamped","moveToWithinRange","isEnabled","dateView","returnDateView","viewMonth","setViewMonth","getMonth","viewYear","setViewYear","getFullYear","mode","setMode","view","handleViewDateUpdate","useCallback","month","year","undefined","switchToDays","switchToMonths","switchToYears","handleSelectedDateUpdate","adjustDate","daysToAdd","monthsToAdd","yearsToAdd","base","Date","getDate","clampToDayViewBoundary","monthChanged","handleDayFocus","handleKeyDown","event","key","preventDefault","target","hasAttribute","focusedDateOutOfRange","formatDateForPrompt","formatDate","locale","LONG_DAY_FORMAT","outOfRangePromptText","formatMessage","messages","outOfRangeBetween","outOfRangeAfter","outOfRangeBefore","hasOutOfRangeDates","showRulesPrompt","hasDisabledDatesInMonth","showOutOfRangePrompt","showPrompt","promptText","reason","promptSentiment","promptClassName","_jsxs","onKeyDown","children","_jsx","DayCalendar","announceReasonOnFocus","onSelect","onDayFocus","onLabelClick","onViewDateUpdate","MonthCalendar","YearCalendar","InlinePrompt","sentiment","width","id","className"],"mappings":"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"}
@@ -26,8 +26,20 @@ var messages = reactIntl.defineMessages({
26
26
  selected: {
27
27
  id: "neptune.DateLookup.selected"
28
28
  },
29
+ notAvailable: {
30
+ id: "neptune.DateLookup.notAvailable"
31
+ },
29
32
  goTo20YearView: {
30
33
  id: "neptune.DateLookup.goTo20YearView"
34
+ },
35
+ outOfRangeBetween: {
36
+ id: "neptune.DateLookup.outOfRangeBetween"
37
+ },
38
+ outOfRangeAfter: {
39
+ id: "neptune.DateLookup.outOfRangeAfter"
40
+ },
41
+ outOfRangeBefore: {
42
+ id: "neptune.DateLookup.outOfRangeBefore"
31
43
  }
32
44
  });
33
45
 
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.messages.js","sources":["../../src/Calendar/Calendar.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n next: {\n id: 'neptune.DateLookup.next',\n defaultMessage: 'next',\n description: 'Description of next button',\n },\n previous: {\n id: 'neptune.DateLookup.previous',\n defaultMessage: 'previous',\n description: 'Description of previous button',\n },\n day: {\n id: 'neptune.DateLookup.day',\n defaultMessage: 'day',\n description: 'Description of next/previous/selected day button',\n },\n month: {\n id: 'neptune.DateLookup.month',\n defaultMessage: 'month',\n description: 'Description of next/previous/selected month button',\n },\n year: {\n id: 'neptune.DateLookup.year',\n defaultMessage: 'year',\n description: 'Description of next/previous/selected year button',\n },\n twentyYears: {\n id: 'neptune.DateLookup.twentyYears',\n defaultMessage: '20 years',\n description: 'Description of next/previous 20 years button',\n },\n selected: {\n id: 'neptune.DateLookup.selected',\n defaultMessage: 'selected',\n description: 'Description of the selected day/month/year',\n },\n goTo20YearView: {\n id: 'neptune.DateLookup.goTo20YearView',\n defaultMessage: 'Go to 20 year view',\n description: 'Description of the button to go to 20 year view',\n },\n});\n"],"names":["defineMessages","next","id","previous","day","month","year","twentyYears","selected","goTo20YearView"],"mappings":";;;;;;AAEA,eAAeA,wBAAc,CAAC;AAC5BC,EAAAA,IAAI,EAAE;IACJC,EAAE,EAAA;GAGH;AACDC,EAAAA,QAAQ,EAAE;IACRD,EAAE,EAAA;GAGH;AACDE,EAAAA,GAAG,EAAE;IACHF,EAAE,EAAA;GAGH;AACDG,EAAAA,KAAK,EAAE;IACLH,EAAE,EAAA;GAGH;AACDI,EAAAA,IAAI,EAAE;IACJJ,EAAE,EAAA;GAGH;AACDK,EAAAA,WAAW,EAAE;IACXL,EAAE,EAAA;GAGH;AACDM,EAAAA,QAAQ,EAAE;IACRN,EAAE,EAAA;GAGH;AACDO,EAAAA,cAAc,EAAE;IACdP,EAAE,EAAA;AAGH;AACF,CAAA,CAAC;;;;"}
1
+ {"version":3,"file":"Calendar.messages.js","sources":["../../src/Calendar/Calendar.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n next: {\n id: 'neptune.DateLookup.next',\n defaultMessage: 'next',\n description: 'Description of next button',\n },\n previous: {\n id: 'neptune.DateLookup.previous',\n defaultMessage: 'previous',\n description: 'Description of previous button',\n },\n day: {\n id: 'neptune.DateLookup.day',\n defaultMessage: 'day',\n description: 'Description of next/previous/selected day button',\n },\n month: {\n id: 'neptune.DateLookup.month',\n defaultMessage: 'month',\n description: 'Description of next/previous/selected month button',\n },\n year: {\n id: 'neptune.DateLookup.year',\n defaultMessage: 'year',\n description: 'Description of next/previous/selected year button',\n },\n twentyYears: {\n id: 'neptune.DateLookup.twentyYears',\n defaultMessage: '20 years',\n description: 'Description of next/previous 20 years button',\n },\n selected: {\n id: 'neptune.DateLookup.selected',\n defaultMessage: 'selected',\n description: 'Description of the selected day/month/year',\n },\n notAvailable: {\n id: 'neptune.DateLookup.notAvailable',\n defaultMessage: 'not available',\n description: 'Announces that a date is disabled/unavailable',\n },\n goTo20YearView: {\n id: 'neptune.DateLookup.goTo20YearView',\n defaultMessage: 'Go to 20 year view',\n description: 'Description of the button to go to 20 year view',\n },\n outOfRangeBetween: {\n id: 'neptune.DateLookup.outOfRangeBetween',\n defaultMessage: 'Please select a date between {min} and {max}.',\n description:\n 'Inline prompt when a date outside min/max boundaries is focused and both min and max are set',\n },\n outOfRangeAfter: {\n id: 'neptune.DateLookup.outOfRangeAfter',\n defaultMessage: 'Please enter {min} or a later date.',\n description: 'Inline prompt when a date before min is focused and only min is set',\n },\n outOfRangeBefore: {\n id: 'neptune.DateLookup.outOfRangeBefore',\n defaultMessage: 'Please enter {max} or an earlier date.',\n description: 'Inline prompt when a date after max is focused and only max is set',\n },\n});\n"],"names":["defineMessages","next","id","previous","day","month","year","twentyYears","selected","notAvailable","goTo20YearView","outOfRangeBetween","outOfRangeAfter","outOfRangeBefore"],"mappings":";;;;;;AAEA,eAAeA,wBAAc,CAAC;AAC5BC,EAAAA,IAAI,EAAE;IACJC,EAAE,EAAA;GAGH;AACDC,EAAAA,QAAQ,EAAE;IACRD,EAAE,EAAA;GAGH;AACDE,EAAAA,GAAG,EAAE;IACHF,EAAE,EAAA;GAGH;AACDG,EAAAA,KAAK,EAAE;IACLH,EAAE,EAAA;GAGH;AACDI,EAAAA,IAAI,EAAE;IACJJ,EAAE,EAAA;GAGH;AACDK,EAAAA,WAAW,EAAE;IACXL,EAAE,EAAA;GAGH;AACDM,EAAAA,QAAQ,EAAE;IACRN,EAAE,EAAA;GAGH;AACDO,EAAAA,YAAY,EAAE;IACZP,EAAE,EAAA;GAGH;AACDQ,EAAAA,cAAc,EAAE;IACdR,EAAE,EAAA;GAGH;AACDS,EAAAA,iBAAiB,EAAE;IACjBT,EAAE,EAAA;GAIH;AACDU,EAAAA,eAAe,EAAE;IACfV,EAAE,EAAA;GAGH;AACDW,EAAAA,gBAAgB,EAAE;IAChBX,EAAE,EAAA;AAGH;AACF,CAAA,CAAC;;;;"}
@@ -22,8 +22,20 @@ var messages = defineMessages({
22
22
  selected: {
23
23
  id: "neptune.DateLookup.selected"
24
24
  },
25
+ notAvailable: {
26
+ id: "neptune.DateLookup.notAvailable"
27
+ },
25
28
  goTo20YearView: {
26
29
  id: "neptune.DateLookup.goTo20YearView"
30
+ },
31
+ outOfRangeBetween: {
32
+ id: "neptune.DateLookup.outOfRangeBetween"
33
+ },
34
+ outOfRangeAfter: {
35
+ id: "neptune.DateLookup.outOfRangeAfter"
36
+ },
37
+ outOfRangeBefore: {
38
+ id: "neptune.DateLookup.outOfRangeBefore"
27
39
  }
28
40
  });
29
41
 
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.messages.mjs","sources":["../../src/Calendar/Calendar.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n next: {\n id: 'neptune.DateLookup.next',\n defaultMessage: 'next',\n description: 'Description of next button',\n },\n previous: {\n id: 'neptune.DateLookup.previous',\n defaultMessage: 'previous',\n description: 'Description of previous button',\n },\n day: {\n id: 'neptune.DateLookup.day',\n defaultMessage: 'day',\n description: 'Description of next/previous/selected day button',\n },\n month: {\n id: 'neptune.DateLookup.month',\n defaultMessage: 'month',\n description: 'Description of next/previous/selected month button',\n },\n year: {\n id: 'neptune.DateLookup.year',\n defaultMessage: 'year',\n description: 'Description of next/previous/selected year button',\n },\n twentyYears: {\n id: 'neptune.DateLookup.twentyYears',\n defaultMessage: '20 years',\n description: 'Description of next/previous 20 years button',\n },\n selected: {\n id: 'neptune.DateLookup.selected',\n defaultMessage: 'selected',\n description: 'Description of the selected day/month/year',\n },\n goTo20YearView: {\n id: 'neptune.DateLookup.goTo20YearView',\n defaultMessage: 'Go to 20 year view',\n description: 'Description of the button to go to 20 year view',\n },\n});\n"],"names":["defineMessages","next","id","previous","day","month","year","twentyYears","selected","goTo20YearView"],"mappings":";;AAEA,eAAeA,cAAc,CAAC;AAC5BC,EAAAA,IAAI,EAAE;IACJC,EAAE,EAAA;GAGH;AACDC,EAAAA,QAAQ,EAAE;IACRD,EAAE,EAAA;GAGH;AACDE,EAAAA,GAAG,EAAE;IACHF,EAAE,EAAA;GAGH;AACDG,EAAAA,KAAK,EAAE;IACLH,EAAE,EAAA;GAGH;AACDI,EAAAA,IAAI,EAAE;IACJJ,EAAE,EAAA;GAGH;AACDK,EAAAA,WAAW,EAAE;IACXL,EAAE,EAAA;GAGH;AACDM,EAAAA,QAAQ,EAAE;IACRN,EAAE,EAAA;GAGH;AACDO,EAAAA,cAAc,EAAE;IACdP,EAAE,EAAA;AAGH;AACF,CAAA,CAAC;;;;"}
1
+ {"version":3,"file":"Calendar.messages.mjs","sources":["../../src/Calendar/Calendar.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n next: {\n id: 'neptune.DateLookup.next',\n defaultMessage: 'next',\n description: 'Description of next button',\n },\n previous: {\n id: 'neptune.DateLookup.previous',\n defaultMessage: 'previous',\n description: 'Description of previous button',\n },\n day: {\n id: 'neptune.DateLookup.day',\n defaultMessage: 'day',\n description: 'Description of next/previous/selected day button',\n },\n month: {\n id: 'neptune.DateLookup.month',\n defaultMessage: 'month',\n description: 'Description of next/previous/selected month button',\n },\n year: {\n id: 'neptune.DateLookup.year',\n defaultMessage: 'year',\n description: 'Description of next/previous/selected year button',\n },\n twentyYears: {\n id: 'neptune.DateLookup.twentyYears',\n defaultMessage: '20 years',\n description: 'Description of next/previous 20 years button',\n },\n selected: {\n id: 'neptune.DateLookup.selected',\n defaultMessage: 'selected',\n description: 'Description of the selected day/month/year',\n },\n notAvailable: {\n id: 'neptune.DateLookup.notAvailable',\n defaultMessage: 'not available',\n description: 'Announces that a date is disabled/unavailable',\n },\n goTo20YearView: {\n id: 'neptune.DateLookup.goTo20YearView',\n defaultMessage: 'Go to 20 year view',\n description: 'Description of the button to go to 20 year view',\n },\n outOfRangeBetween: {\n id: 'neptune.DateLookup.outOfRangeBetween',\n defaultMessage: 'Please select a date between {min} and {max}.',\n description:\n 'Inline prompt when a date outside min/max boundaries is focused and both min and max are set',\n },\n outOfRangeAfter: {\n id: 'neptune.DateLookup.outOfRangeAfter',\n defaultMessage: 'Please enter {min} or a later date.',\n description: 'Inline prompt when a date before min is focused and only min is set',\n },\n outOfRangeBefore: {\n id: 'neptune.DateLookup.outOfRangeBefore',\n defaultMessage: 'Please enter {max} or an earlier date.',\n description: 'Inline prompt when a date after max is focused and only max is set',\n },\n});\n"],"names":["defineMessages","next","id","previous","day","month","year","twentyYears","selected","notAvailable","goTo20YearView","outOfRangeBetween","outOfRangeAfter","outOfRangeBefore"],"mappings":";;AAEA,eAAeA,cAAc,CAAC;AAC5BC,EAAAA,IAAI,EAAE;IACJC,EAAE,EAAA;GAGH;AACDC,EAAAA,QAAQ,EAAE;IACRD,EAAE,EAAA;GAGH;AACDE,EAAAA,GAAG,EAAE;IACHF,EAAE,EAAA;GAGH;AACDG,EAAAA,KAAK,EAAE;IACLH,EAAE,EAAA;GAGH;AACDI,EAAAA,IAAI,EAAE;IACJJ,EAAE,EAAA;GAGH;AACDK,EAAAA,WAAW,EAAE;IACXL,EAAE,EAAA;GAGH;AACDM,EAAAA,QAAQ,EAAE;IACRN,EAAE,EAAA;GAGH;AACDO,EAAAA,YAAY,EAAE;IACZP,EAAE,EAAA;GAGH;AACDQ,EAAAA,cAAc,EAAE;IACdR,EAAE,EAAA;GAGH;AACDS,EAAAA,iBAAiB,EAAE;IACjBT,EAAE,EAAA;GAIH;AACDU,EAAAA,eAAe,EAAE;IACfV,EAAE,EAAA;GAGH;AACDW,EAAAA,gBAAgB,EAAE;IAChBX,EAAE,EAAA;AAGH;AACF,CAAA,CAAC;;;;"}