@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
@@ -7,9 +7,11 @@ var React = require('react');
7
7
  var injectIntl = require('../../../common/injectIntl.js');
8
8
  var getDayNames = require('../../../common/DateUtils/getDayNames/getDayNames.js');
9
9
  var isWithinRange = require('../../../common/DateUtils/isWithinRange/isWithinRange.js');
10
+ var isDateDisabled = require('../../_helpers/isDateDisabled/isDateDisabled.js');
11
+ var Calendar_constants = require('../../Calendar.constants.js');
10
12
  var GetFocusableTime = require('../../GetFocusableTime/GetFocusableTime.js');
11
13
  var GetStartOfDay = require('../../GetStartOfDay/GetStartOfDay.js');
12
- var TableLink = require('../../tableLink/TableLink.js');
14
+ var TableLink = require('../../TableLink/TableLink.js');
13
15
  var jsxRuntime = require('react/jsx-runtime');
14
16
 
15
17
  const SHORT_DAY_FORMAT = {
@@ -62,7 +64,15 @@ let DayCalendarTable$1 = class DayCalendarTable extends React.PureComponent {
62
64
  } = this.props;
63
65
  onSelect(new Date(viewYear, viewMonth, day));
64
66
  };
65
- isDisabled = day => {
67
+ focusDay = day => {
68
+ const {
69
+ viewMonth,
70
+ viewYear,
71
+ onDayFocus
72
+ } = this.props;
73
+ onDayFocus?.(new Date(viewYear, viewMonth, day));
74
+ };
75
+ isOutOfRange = day => {
66
76
  if (day < 0) {
67
77
  return true;
68
78
  }
@@ -75,6 +85,19 @@ let DayCalendarTable$1 = class DayCalendarTable extends React.PureComponent {
75
85
  const date = new Date(viewYear, viewMonth, day);
76
86
  return !isWithinRange.isWithinRange(date, min, max);
77
87
  };
88
+ isDisabled = day => {
89
+ if (day < 0) {
90
+ return false;
91
+ }
92
+ const {
93
+ viewMonth,
94
+ viewYear,
95
+ disabledRules
96
+ } = this.props;
97
+ const date = new Date(viewYear, viewMonth, day);
98
+ return isDateDisabled.isDateDisabled(date, disabledRules);
99
+ };
100
+ isUnavailable = day => this.isOutOfRange(day) || this.isDisabled(day);
78
101
  isActive = day => {
79
102
  const {
80
103
  selectedDate,
@@ -83,6 +106,14 @@ let DayCalendarTable$1 = class DayCalendarTable extends React.PureComponent {
83
106
  } = this.props;
84
107
  return !!(selectedDate && Number(new Date(viewYear, viewMonth, day)) === Number(selectedDate));
85
108
  };
109
+ isFocused = day => {
110
+ const {
111
+ focusedDate,
112
+ viewMonth,
113
+ viewYear
114
+ } = this.props;
115
+ return !!(focusedDate && Number(new Date(viewYear, viewMonth, day)) === Number(focusedDate));
116
+ };
86
117
  isToday = day => {
87
118
  const {
88
119
  viewMonth,
@@ -93,9 +124,9 @@ let DayCalendarTable$1 = class DayCalendarTable extends React.PureComponent {
93
124
  getAutofocusDay = weeks => {
94
125
  const days = weeks.flatMap(week => week);
95
126
  return GetFocusableTime.getFocusableTime({
96
- isActive: this.isActive,
127
+ isActive: this.isFocused,
97
128
  isNow: this.isToday,
98
- isDisabled: this.isDisabled,
129
+ isDisabled: this.isUnavailable,
99
130
  timeSpan: days
100
131
  });
101
132
  };
@@ -103,7 +134,9 @@ let DayCalendarTable$1 = class DayCalendarTable extends React.PureComponent {
103
134
  const {
104
135
  viewMonth,
105
136
  viewYear,
106
- intl
137
+ intl,
138
+ disabledReasonId,
139
+ announceReasonOnFocus
107
140
  } = this.props;
108
141
  const weeks = this.getTableStructure();
109
142
  const autoFocusDay = this.getAutofocusDay(weeks);
@@ -130,20 +163,28 @@ let DayCalendarTable$1 = class DayCalendarTable extends React.PureComponent {
130
163
  })
131
164
  }), /*#__PURE__*/jsxRuntime.jsx("tbody", {
132
165
  children: weeks.map((week, weekIndex) => /*#__PURE__*/jsxRuntime.jsx("tr", {
133
- children: week.map((day, dayIndex) => /*#__PURE__*/jsxRuntime.jsx("td", {
134
- className: dayIndex > 4 ? 'weekend' : '',
135
- children: day !== -1 && /*#__PURE__*/jsxRuntime.jsx(TableLink.default, {
136
- item: day,
137
- type: "day",
138
- title: formatting.formatDate(new Date(viewYear, viewMonth, day), intl.locale, SHORT_DAY_FORMAT),
139
- autofocus: day === autoFocusDay,
140
- longTitle: formatting.formatDate(new Date(viewYear, viewMonth, day), intl.locale),
141
- active: this.isActive(day),
142
- disabled: this.isDisabled(day),
143
- today: this.isToday(day),
144
- onClick: this.selectDay
145
- })
146
- }, dayIndex))
166
+ children: week.map((day, dayIndex) => {
167
+ const dayOutOfRange = this.isOutOfRange(day);
168
+ const dayDisabled = this.isDisabled(day);
169
+ return /*#__PURE__*/jsxRuntime.jsx("td", {
170
+ className: dayIndex > 4 ? 'weekend' : '',
171
+ children: day !== -1 && /*#__PURE__*/jsxRuntime.jsx(TableLink.default, {
172
+ item: day,
173
+ type: "day",
174
+ title: formatting.formatDate(new Date(viewYear, viewMonth, day), intl.locale, SHORT_DAY_FORMAT),
175
+ autofocus: day === autoFocusDay,
176
+ longTitle: formatting.formatDate(new Date(viewYear, viewMonth, day), intl.locale, Calendar_constants.LONG_DAY_FORMAT),
177
+ active: this.isActive(day),
178
+ outOfRange: dayOutOfRange,
179
+ disabled: dayDisabled,
180
+ today: this.isToday(day),
181
+ disabledReasonId: disabledReasonId,
182
+ announceReasonOnFocus: announceReasonOnFocus,
183
+ onClick: this.selectDay,
184
+ onFocus: this.focusDay
185
+ })
186
+ }, dayIndex);
187
+ })
147
188
  }, weekIndex))
148
189
  })]
149
190
  });
@@ -1 +1 @@
1
- {"version":3,"file":"DayCalendarTable.js","sources":["../../../../src/Calendar/DayCalendar/Table/DayCalendarTable.tsx"],"sourcesContent":["import { formatDate } from '@transferwise/formatting';\nimport { PureComponent } from 'react';\nimport { injectIntl, type WrappedComponentProps } from '../../../common/injectIntl';\n\nimport { getDayNames, isWithinRange } from '../../../common/DateUtils';\nimport { getFocusableTime } from '../../GetFocusableTime/GetFocusableTime';\nimport { getStartOfDay } from '../../GetStartOfDay';\nimport TableLink from '../../tableLink';\n\nconst SHORT_DAY_FORMAT: Intl.DateTimeFormatOptions = { day: 'numeric' };\n\ninterface DayCalendarTableProps extends WrappedComponentProps {\n selectedDate: Date | null;\n min: Date | null;\n max: Date | null;\n viewMonth: number;\n viewYear: number;\n onSelect: (date: Date) => void;\n}\n\nclass DayCalendarTable extends PureComponent<DayCalendarTableProps> {\n getTableStructure = () => {\n const { viewMonth, viewYear } = this.props;\n let firstDayOfMonth = new Date(viewYear, viewMonth, 1).getDay();\n // JS Sunday is 0, we're setting it last\n if (firstDayOfMonth === 0) {\n firstDayOfMonth = 7;\n }\n const daysInMonth = new Date(viewYear, viewMonth + 1, 0).getDate();\n\n let week: number[] = [];\n const weeks: number[][] = [];\n let i;\n\n // Pad first week\n for (i = 1; i < firstDayOfMonth; i += 1) {\n week.push(-1);\n }\n // Fill in days\n for (i = 1; i <= daysInMonth; i += 1) {\n week.push(i);\n if ((firstDayOfMonth + i - 1) % 7 === 0) {\n weeks.push(week);\n week = [];\n }\n }\n if (week.length > 0) {\n // Pad last week\n for (i = week.length; i < 7; i += 1) {\n week.push(-1);\n }\n weeks.push(week);\n }\n return weeks;\n };\n\n days = getDayNames(this.props.intl.locale, 'short');\n daysShort = getDayNames(this.props.intl.locale, 'narrow');\n daysLong = getDayNames(this.props.intl.locale, 'long');\n\n selectDay = (day: number) => {\n const { viewMonth, viewYear, onSelect } = this.props;\n onSelect(new Date(viewYear, viewMonth, day));\n };\n\n isDisabled = (day: number) => {\n if (day < 0) {\n return true;\n }\n const { min, max, viewMonth, viewYear } = this.props;\n const date = new Date(viewYear, viewMonth, day);\n\n return !isWithinRange(date, min, max);\n };\n\n isActive = (day: number) => {\n const { selectedDate, viewMonth, viewYear } = this.props;\n return !!(selectedDate && Number(new Date(viewYear, viewMonth, day)) === Number(selectedDate));\n };\n\n isToday = (day: number) => {\n const { viewMonth, viewYear } = this.props;\n return Number(getStartOfDay(new Date())) === Number(new Date(viewYear, viewMonth, day));\n };\n\n getAutofocusDay = (weeks: number[][]) => {\n const days = weeks.flatMap((week) => week);\n return getFocusableTime({\n isActive: this.isActive,\n isNow: this.isToday,\n isDisabled: this.isDisabled,\n timeSpan: days,\n });\n };\n\n render() {\n const { viewMonth, viewYear, intl } = this.props;\n const weeks = this.getTableStructure();\n const autoFocusDay = this.getAutofocusDay(weeks);\n return (\n <table className=\"table table-condensed table-bordered tw-date-lookup-calendar m-b-0\">\n <thead>\n <tr>\n {this.days.map((day, index) => (\n <th\n key={day}\n className={\n index > 4\n ? 'text-xs-center np-text-body-default'\n : 'text-xs-center np-text-body-default-bold'\n }\n >\n <span className=\"hidden-xs\">\n <abbr title={this.daysLong[index]}>{day.slice(0, 3)}</abbr>\n </span>\n <span className=\"visible-xs-inline-block\">\n <abbr title={this.daysLong[index]}>{this.daysShort[index].slice(0, 2)}</abbr>\n </span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {/* eslint-disable react/no-array-index-key */}\n {weeks.map((week, weekIndex) => (\n <tr key={weekIndex}>\n {week.map((day, dayIndex) => (\n <td key={dayIndex} className={dayIndex > 4 ? 'weekend' : ''}>\n {day !== -1 && (\n <TableLink\n item={day}\n type=\"day\"\n title={formatDate(\n new Date(viewYear, viewMonth, day),\n intl.locale,\n SHORT_DAY_FORMAT,\n )}\n autofocus={day === autoFocusDay}\n longTitle={formatDate(new Date(viewYear, viewMonth, day), intl.locale)}\n active={this.isActive(day)}\n disabled={this.isDisabled(day)}\n today={this.isToday(day)}\n onClick={this.selectDay}\n />\n )}\n </td>\n ))}\n </tr>\n ))}\n {/* eslint-enable react/no-array-index-key */}\n </tbody>\n </table>\n );\n }\n}\n\nexport default injectIntl(DayCalendarTable);\n"],"names":["SHORT_DAY_FORMAT","day","DayCalendarTable","PureComponent","getTableStructure","viewMonth","viewYear","props","firstDayOfMonth","Date","getDay","daysInMonth","getDate","week","weeks","i","push","length","days","getDayNames","intl","locale","daysShort","daysLong","selectDay","onSelect","isDisabled","min","max","date","isWithinRange","isActive","selectedDate","Number","isToday","getStartOfDay","getAutofocusDay","flatMap","getFocusableTime","isNow","timeSpan","render","autoFocusDay","_jsxs","className","children","_jsx","map","index","title","slice","weekIndex","dayIndex","TableLink","item","type","formatDate","autofocus","longTitle","active","disabled","today","onClick","injectIntl"],"mappings":"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"}
1
+ {"version":3,"file":"DayCalendarTable.js","sources":["../../../../src/Calendar/DayCalendar/Table/DayCalendarTable.tsx"],"sourcesContent":["import { formatDate } from '@transferwise/formatting';\nimport { PureComponent } from 'react';\nimport { injectIntl, type WrappedComponentProps } from '../../../common/injectIntl';\n\nimport { getDayNames, isWithinRange } from '../../../common/DateUtils';\nimport { isDateDisabled } from '../../_helpers';\nimport { LONG_DAY_FORMAT } from '../../Calendar.constants';\nimport type { DisabledRules } from '../../Calendar.types';\nimport { getFocusableTime } from '../../GetFocusableTime/GetFocusableTime';\nimport { getStartOfDay } from '../../GetStartOfDay';\nimport TableLink from '../../TableLink';\n\nconst SHORT_DAY_FORMAT: Intl.DateTimeFormatOptions = { day: 'numeric' };\n\ninterface DayCalendarTableProps extends WrappedComponentProps {\n selectedDate: Date | null;\n focusedDate?: Date | null;\n min: Date | null;\n max: Date | null;\n viewMonth: number;\n viewYear: number;\n disabledRules?: DisabledRules;\n disabledReasonId?: string;\n announceReasonOnFocus?: boolean;\n onSelect: (date: Date) => void;\n onDayFocus?: (date: Date) => void;\n}\n\nclass DayCalendarTable extends PureComponent<DayCalendarTableProps> {\n getTableStructure = () => {\n const { viewMonth, viewYear } = this.props;\n let firstDayOfMonth = new Date(viewYear, viewMonth, 1).getDay();\n // JS Sunday is 0, we're setting it last\n if (firstDayOfMonth === 0) {\n firstDayOfMonth = 7;\n }\n const daysInMonth = new Date(viewYear, viewMonth + 1, 0).getDate();\n\n let week: number[] = [];\n const weeks: number[][] = [];\n let i;\n\n // Pad first week\n for (i = 1; i < firstDayOfMonth; i += 1) {\n week.push(-1);\n }\n // Fill in days\n for (i = 1; i <= daysInMonth; i += 1) {\n week.push(i);\n if ((firstDayOfMonth + i - 1) % 7 === 0) {\n weeks.push(week);\n week = [];\n }\n }\n if (week.length > 0) {\n // Pad last week\n for (i = week.length; i < 7; i += 1) {\n week.push(-1);\n }\n weeks.push(week);\n }\n return weeks;\n };\n\n days = getDayNames(this.props.intl.locale, 'short');\n daysShort = getDayNames(this.props.intl.locale, 'narrow');\n daysLong = getDayNames(this.props.intl.locale, 'long');\n\n selectDay = (day: number) => {\n const { viewMonth, viewYear, onSelect } = this.props;\n onSelect(new Date(viewYear, viewMonth, day));\n };\n\n focusDay = (day: number) => {\n const { viewMonth, viewYear, onDayFocus } = this.props;\n onDayFocus?.(new Date(viewYear, viewMonth, day));\n };\n\n isOutOfRange = (day: number) => {\n if (day < 0) {\n return true;\n }\n const { min, max, viewMonth, viewYear } = this.props;\n const date = new Date(viewYear, viewMonth, day);\n return !isWithinRange(date, min, max);\n };\n\n isDisabled = (day: number) => {\n if (day < 0) {\n return false;\n }\n const { viewMonth, viewYear, disabledRules } = this.props;\n const date = new Date(viewYear, viewMonth, day);\n return isDateDisabled(date, disabledRules);\n };\n\n isUnavailable = (day: number) => this.isOutOfRange(day) || this.isDisabled(day);\n\n isActive = (day: number) => {\n const { selectedDate, viewMonth, viewYear } = this.props;\n return !!(selectedDate && Number(new Date(viewYear, viewMonth, day)) === Number(selectedDate));\n };\n\n isFocused = (day: number) => {\n const { focusedDate, viewMonth, viewYear } = this.props;\n return !!(focusedDate && Number(new Date(viewYear, viewMonth, day)) === Number(focusedDate));\n };\n\n isToday = (day: number) => {\n const { viewMonth, viewYear } = this.props;\n return Number(getStartOfDay(new Date())) === Number(new Date(viewYear, viewMonth, day));\n };\n\n getAutofocusDay = (weeks: number[][]) => {\n const days = weeks.flatMap((week) => week);\n return getFocusableTime({\n isActive: this.isFocused,\n isNow: this.isToday,\n isDisabled: this.isUnavailable,\n timeSpan: days,\n });\n };\n\n render() {\n const { viewMonth, viewYear, intl, disabledReasonId, announceReasonOnFocus } = this.props;\n const weeks = this.getTableStructure();\n const autoFocusDay = this.getAutofocusDay(weeks);\n return (\n <table className=\"table table-condensed table-bordered tw-date-lookup-calendar m-b-0\">\n <thead>\n <tr>\n {this.days.map((day, index) => (\n <th\n key={day}\n className={\n index > 4\n ? 'text-xs-center np-text-body-default'\n : 'text-xs-center np-text-body-default-bold'\n }\n >\n <span className=\"hidden-xs\">\n <abbr title={this.daysLong[index]}>{day.slice(0, 3)}</abbr>\n </span>\n <span className=\"visible-xs-inline-block\">\n <abbr title={this.daysLong[index]}>{this.daysShort[index].slice(0, 2)}</abbr>\n </span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {/* eslint-disable react/no-array-index-key */}\n {weeks.map((week, weekIndex) => (\n <tr key={weekIndex}>\n {week.map((day, dayIndex) => {\n const dayOutOfRange = this.isOutOfRange(day);\n const dayDisabled = this.isDisabled(day);\n return (\n <td key={dayIndex} className={dayIndex > 4 ? 'weekend' : ''}>\n {day !== -1 && (\n <TableLink\n item={day}\n type=\"day\"\n title={formatDate(\n new Date(viewYear, viewMonth, day),\n intl.locale,\n SHORT_DAY_FORMAT,\n )}\n autofocus={day === autoFocusDay}\n longTitle={formatDate(\n new Date(viewYear, viewMonth, day),\n intl.locale,\n LONG_DAY_FORMAT,\n )}\n active={this.isActive(day)}\n outOfRange={dayOutOfRange}\n disabled={dayDisabled}\n today={this.isToday(day)}\n disabledReasonId={disabledReasonId}\n announceReasonOnFocus={announceReasonOnFocus}\n onClick={this.selectDay}\n onFocus={this.focusDay}\n />\n )}\n </td>\n );\n })}\n </tr>\n ))}\n {/* eslint-enable react/no-array-index-key */}\n </tbody>\n </table>\n );\n }\n}\n\nexport default injectIntl(DayCalendarTable);\n"],"names":["SHORT_DAY_FORMAT","day","DayCalendarTable","PureComponent","getTableStructure","viewMonth","viewYear","props","firstDayOfMonth","Date","getDay","daysInMonth","getDate","week","weeks","i","push","length","days","getDayNames","intl","locale","daysShort","daysLong","selectDay","onSelect","focusDay","onDayFocus","isOutOfRange","min","max","date","isWithinRange","isDisabled","disabledRules","isDateDisabled","isUnavailable","isActive","selectedDate","Number","isFocused","focusedDate","isToday","getStartOfDay","getAutofocusDay","flatMap","getFocusableTime","isNow","timeSpan","render","disabledReasonId","announceReasonOnFocus","autoFocusDay","_jsxs","className","children","_jsx","map","index","title","slice","weekIndex","dayIndex","dayOutOfRange","dayDisabled","TableLink","item","type","formatDate","autofocus","longTitle","LONG_DAY_FORMAT","active","outOfRange","disabled","today","onClick","onFocus","injectIntl"],"mappings":"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"}
@@ -3,9 +3,11 @@ import { PureComponent } from 'react';
3
3
  import { injectIntl } from '../../../common/injectIntl.mjs';
4
4
  import { getDayNames } from '../../../common/DateUtils/getDayNames/getDayNames.mjs';
5
5
  import { isWithinRange } from '../../../common/DateUtils/isWithinRange/isWithinRange.mjs';
6
+ import { isDateDisabled } from '../../_helpers/isDateDisabled/isDateDisabled.mjs';
7
+ import { LONG_DAY_FORMAT } from '../../Calendar.constants.mjs';
6
8
  import { getFocusableTime } from '../../GetFocusableTime/GetFocusableTime.mjs';
7
9
  import { getStartOfDay } from '../../GetStartOfDay/GetStartOfDay.mjs';
8
- import TableLink from '../../tableLink/TableLink.mjs';
10
+ import TableLink from '../../TableLink/TableLink.mjs';
9
11
  import { jsxs, jsx } from 'react/jsx-runtime';
10
12
 
11
13
  const SHORT_DAY_FORMAT = {
@@ -58,7 +60,15 @@ class DayCalendarTable extends PureComponent {
58
60
  } = this.props;
59
61
  onSelect(new Date(viewYear, viewMonth, day));
60
62
  };
61
- isDisabled = day => {
63
+ focusDay = day => {
64
+ const {
65
+ viewMonth,
66
+ viewYear,
67
+ onDayFocus
68
+ } = this.props;
69
+ onDayFocus?.(new Date(viewYear, viewMonth, day));
70
+ };
71
+ isOutOfRange = day => {
62
72
  if (day < 0) {
63
73
  return true;
64
74
  }
@@ -71,6 +81,19 @@ class DayCalendarTable extends PureComponent {
71
81
  const date = new Date(viewYear, viewMonth, day);
72
82
  return !isWithinRange(date, min, max);
73
83
  };
84
+ isDisabled = day => {
85
+ if (day < 0) {
86
+ return false;
87
+ }
88
+ const {
89
+ viewMonth,
90
+ viewYear,
91
+ disabledRules
92
+ } = this.props;
93
+ const date = new Date(viewYear, viewMonth, day);
94
+ return isDateDisabled(date, disabledRules);
95
+ };
96
+ isUnavailable = day => this.isOutOfRange(day) || this.isDisabled(day);
74
97
  isActive = day => {
75
98
  const {
76
99
  selectedDate,
@@ -79,6 +102,14 @@ class DayCalendarTable extends PureComponent {
79
102
  } = this.props;
80
103
  return !!(selectedDate && Number(new Date(viewYear, viewMonth, day)) === Number(selectedDate));
81
104
  };
105
+ isFocused = day => {
106
+ const {
107
+ focusedDate,
108
+ viewMonth,
109
+ viewYear
110
+ } = this.props;
111
+ return !!(focusedDate && Number(new Date(viewYear, viewMonth, day)) === Number(focusedDate));
112
+ };
82
113
  isToday = day => {
83
114
  const {
84
115
  viewMonth,
@@ -89,9 +120,9 @@ class DayCalendarTable extends PureComponent {
89
120
  getAutofocusDay = weeks => {
90
121
  const days = weeks.flatMap(week => week);
91
122
  return getFocusableTime({
92
- isActive: this.isActive,
123
+ isActive: this.isFocused,
93
124
  isNow: this.isToday,
94
- isDisabled: this.isDisabled,
125
+ isDisabled: this.isUnavailable,
95
126
  timeSpan: days
96
127
  });
97
128
  };
@@ -99,7 +130,9 @@ class DayCalendarTable extends PureComponent {
99
130
  const {
100
131
  viewMonth,
101
132
  viewYear,
102
- intl
133
+ intl,
134
+ disabledReasonId,
135
+ announceReasonOnFocus
103
136
  } = this.props;
104
137
  const weeks = this.getTableStructure();
105
138
  const autoFocusDay = this.getAutofocusDay(weeks);
@@ -126,20 +159,28 @@ class DayCalendarTable extends PureComponent {
126
159
  })
127
160
  }), /*#__PURE__*/jsx("tbody", {
128
161
  children: weeks.map((week, weekIndex) => /*#__PURE__*/jsx("tr", {
129
- children: week.map((day, dayIndex) => /*#__PURE__*/jsx("td", {
130
- className: dayIndex > 4 ? 'weekend' : '',
131
- children: day !== -1 && /*#__PURE__*/jsx(TableLink, {
132
- item: day,
133
- type: "day",
134
- title: formatDate(new Date(viewYear, viewMonth, day), intl.locale, SHORT_DAY_FORMAT),
135
- autofocus: day === autoFocusDay,
136
- longTitle: formatDate(new Date(viewYear, viewMonth, day), intl.locale),
137
- active: this.isActive(day),
138
- disabled: this.isDisabled(day),
139
- today: this.isToday(day),
140
- onClick: this.selectDay
141
- })
142
- }, dayIndex))
162
+ children: week.map((day, dayIndex) => {
163
+ const dayOutOfRange = this.isOutOfRange(day);
164
+ const dayDisabled = this.isDisabled(day);
165
+ return /*#__PURE__*/jsx("td", {
166
+ className: dayIndex > 4 ? 'weekend' : '',
167
+ children: day !== -1 && /*#__PURE__*/jsx(TableLink, {
168
+ item: day,
169
+ type: "day",
170
+ title: formatDate(new Date(viewYear, viewMonth, day), intl.locale, SHORT_DAY_FORMAT),
171
+ autofocus: day === autoFocusDay,
172
+ longTitle: formatDate(new Date(viewYear, viewMonth, day), intl.locale, LONG_DAY_FORMAT),
173
+ active: this.isActive(day),
174
+ outOfRange: dayOutOfRange,
175
+ disabled: dayDisabled,
176
+ today: this.isToday(day),
177
+ disabledReasonId: disabledReasonId,
178
+ announceReasonOnFocus: announceReasonOnFocus,
179
+ onClick: this.selectDay,
180
+ onFocus: this.focusDay
181
+ })
182
+ }, dayIndex);
183
+ })
143
184
  }, weekIndex))
144
185
  })]
145
186
  });
@@ -1 +1 @@
1
- {"version":3,"file":"DayCalendarTable.mjs","sources":["../../../../src/Calendar/DayCalendar/Table/DayCalendarTable.tsx"],"sourcesContent":["import { formatDate } from '@transferwise/formatting';\nimport { PureComponent } from 'react';\nimport { injectIntl, type WrappedComponentProps } from '../../../common/injectIntl';\n\nimport { getDayNames, isWithinRange } from '../../../common/DateUtils';\nimport { getFocusableTime } from '../../GetFocusableTime/GetFocusableTime';\nimport { getStartOfDay } from '../../GetStartOfDay';\nimport TableLink from '../../tableLink';\n\nconst SHORT_DAY_FORMAT: Intl.DateTimeFormatOptions = { day: 'numeric' };\n\ninterface DayCalendarTableProps extends WrappedComponentProps {\n selectedDate: Date | null;\n min: Date | null;\n max: Date | null;\n viewMonth: number;\n viewYear: number;\n onSelect: (date: Date) => void;\n}\n\nclass DayCalendarTable extends PureComponent<DayCalendarTableProps> {\n getTableStructure = () => {\n const { viewMonth, viewYear } = this.props;\n let firstDayOfMonth = new Date(viewYear, viewMonth, 1).getDay();\n // JS Sunday is 0, we're setting it last\n if (firstDayOfMonth === 0) {\n firstDayOfMonth = 7;\n }\n const daysInMonth = new Date(viewYear, viewMonth + 1, 0).getDate();\n\n let week: number[] = [];\n const weeks: number[][] = [];\n let i;\n\n // Pad first week\n for (i = 1; i < firstDayOfMonth; i += 1) {\n week.push(-1);\n }\n // Fill in days\n for (i = 1; i <= daysInMonth; i += 1) {\n week.push(i);\n if ((firstDayOfMonth + i - 1) % 7 === 0) {\n weeks.push(week);\n week = [];\n }\n }\n if (week.length > 0) {\n // Pad last week\n for (i = week.length; i < 7; i += 1) {\n week.push(-1);\n }\n weeks.push(week);\n }\n return weeks;\n };\n\n days = getDayNames(this.props.intl.locale, 'short');\n daysShort = getDayNames(this.props.intl.locale, 'narrow');\n daysLong = getDayNames(this.props.intl.locale, 'long');\n\n selectDay = (day: number) => {\n const { viewMonth, viewYear, onSelect } = this.props;\n onSelect(new Date(viewYear, viewMonth, day));\n };\n\n isDisabled = (day: number) => {\n if (day < 0) {\n return true;\n }\n const { min, max, viewMonth, viewYear } = this.props;\n const date = new Date(viewYear, viewMonth, day);\n\n return !isWithinRange(date, min, max);\n };\n\n isActive = (day: number) => {\n const { selectedDate, viewMonth, viewYear } = this.props;\n return !!(selectedDate && Number(new Date(viewYear, viewMonth, day)) === Number(selectedDate));\n };\n\n isToday = (day: number) => {\n const { viewMonth, viewYear } = this.props;\n return Number(getStartOfDay(new Date())) === Number(new Date(viewYear, viewMonth, day));\n };\n\n getAutofocusDay = (weeks: number[][]) => {\n const days = weeks.flatMap((week) => week);\n return getFocusableTime({\n isActive: this.isActive,\n isNow: this.isToday,\n isDisabled: this.isDisabled,\n timeSpan: days,\n });\n };\n\n render() {\n const { viewMonth, viewYear, intl } = this.props;\n const weeks = this.getTableStructure();\n const autoFocusDay = this.getAutofocusDay(weeks);\n return (\n <table className=\"table table-condensed table-bordered tw-date-lookup-calendar m-b-0\">\n <thead>\n <tr>\n {this.days.map((day, index) => (\n <th\n key={day}\n className={\n index > 4\n ? 'text-xs-center np-text-body-default'\n : 'text-xs-center np-text-body-default-bold'\n }\n >\n <span className=\"hidden-xs\">\n <abbr title={this.daysLong[index]}>{day.slice(0, 3)}</abbr>\n </span>\n <span className=\"visible-xs-inline-block\">\n <abbr title={this.daysLong[index]}>{this.daysShort[index].slice(0, 2)}</abbr>\n </span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {/* eslint-disable react/no-array-index-key */}\n {weeks.map((week, weekIndex) => (\n <tr key={weekIndex}>\n {week.map((day, dayIndex) => (\n <td key={dayIndex} className={dayIndex > 4 ? 'weekend' : ''}>\n {day !== -1 && (\n <TableLink\n item={day}\n type=\"day\"\n title={formatDate(\n new Date(viewYear, viewMonth, day),\n intl.locale,\n SHORT_DAY_FORMAT,\n )}\n autofocus={day === autoFocusDay}\n longTitle={formatDate(new Date(viewYear, viewMonth, day), intl.locale)}\n active={this.isActive(day)}\n disabled={this.isDisabled(day)}\n today={this.isToday(day)}\n onClick={this.selectDay}\n />\n )}\n </td>\n ))}\n </tr>\n ))}\n {/* eslint-enable react/no-array-index-key */}\n </tbody>\n </table>\n );\n }\n}\n\nexport default injectIntl(DayCalendarTable);\n"],"names":["SHORT_DAY_FORMAT","day","DayCalendarTable","PureComponent","getTableStructure","viewMonth","viewYear","props","firstDayOfMonth","Date","getDay","daysInMonth","getDate","week","weeks","i","push","length","days","getDayNames","intl","locale","daysShort","daysLong","selectDay","onSelect","isDisabled","min","max","date","isWithinRange","isActive","selectedDate","Number","isToday","getStartOfDay","getAutofocusDay","flatMap","getFocusableTime","isNow","timeSpan","render","autoFocusDay","_jsxs","className","children","_jsx","map","index","title","slice","weekIndex","dayIndex","TableLink","item","type","formatDate","autofocus","longTitle","active","disabled","today","onClick","injectIntl"],"mappings":"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"}
1
+ {"version":3,"file":"DayCalendarTable.mjs","sources":["../../../../src/Calendar/DayCalendar/Table/DayCalendarTable.tsx"],"sourcesContent":["import { formatDate } from '@transferwise/formatting';\nimport { PureComponent } from 'react';\nimport { injectIntl, type WrappedComponentProps } from '../../../common/injectIntl';\n\nimport { getDayNames, isWithinRange } from '../../../common/DateUtils';\nimport { isDateDisabled } from '../../_helpers';\nimport { LONG_DAY_FORMAT } from '../../Calendar.constants';\nimport type { DisabledRules } from '../../Calendar.types';\nimport { getFocusableTime } from '../../GetFocusableTime/GetFocusableTime';\nimport { getStartOfDay } from '../../GetStartOfDay';\nimport TableLink from '../../TableLink';\n\nconst SHORT_DAY_FORMAT: Intl.DateTimeFormatOptions = { day: 'numeric' };\n\ninterface DayCalendarTableProps extends WrappedComponentProps {\n selectedDate: Date | null;\n focusedDate?: Date | null;\n min: Date | null;\n max: Date | null;\n viewMonth: number;\n viewYear: number;\n disabledRules?: DisabledRules;\n disabledReasonId?: string;\n announceReasonOnFocus?: boolean;\n onSelect: (date: Date) => void;\n onDayFocus?: (date: Date) => void;\n}\n\nclass DayCalendarTable extends PureComponent<DayCalendarTableProps> {\n getTableStructure = () => {\n const { viewMonth, viewYear } = this.props;\n let firstDayOfMonth = new Date(viewYear, viewMonth, 1).getDay();\n // JS Sunday is 0, we're setting it last\n if (firstDayOfMonth === 0) {\n firstDayOfMonth = 7;\n }\n const daysInMonth = new Date(viewYear, viewMonth + 1, 0).getDate();\n\n let week: number[] = [];\n const weeks: number[][] = [];\n let i;\n\n // Pad first week\n for (i = 1; i < firstDayOfMonth; i += 1) {\n week.push(-1);\n }\n // Fill in days\n for (i = 1; i <= daysInMonth; i += 1) {\n week.push(i);\n if ((firstDayOfMonth + i - 1) % 7 === 0) {\n weeks.push(week);\n week = [];\n }\n }\n if (week.length > 0) {\n // Pad last week\n for (i = week.length; i < 7; i += 1) {\n week.push(-1);\n }\n weeks.push(week);\n }\n return weeks;\n };\n\n days = getDayNames(this.props.intl.locale, 'short');\n daysShort = getDayNames(this.props.intl.locale, 'narrow');\n daysLong = getDayNames(this.props.intl.locale, 'long');\n\n selectDay = (day: number) => {\n const { viewMonth, viewYear, onSelect } = this.props;\n onSelect(new Date(viewYear, viewMonth, day));\n };\n\n focusDay = (day: number) => {\n const { viewMonth, viewYear, onDayFocus } = this.props;\n onDayFocus?.(new Date(viewYear, viewMonth, day));\n };\n\n isOutOfRange = (day: number) => {\n if (day < 0) {\n return true;\n }\n const { min, max, viewMonth, viewYear } = this.props;\n const date = new Date(viewYear, viewMonth, day);\n return !isWithinRange(date, min, max);\n };\n\n isDisabled = (day: number) => {\n if (day < 0) {\n return false;\n }\n const { viewMonth, viewYear, disabledRules } = this.props;\n const date = new Date(viewYear, viewMonth, day);\n return isDateDisabled(date, disabledRules);\n };\n\n isUnavailable = (day: number) => this.isOutOfRange(day) || this.isDisabled(day);\n\n isActive = (day: number) => {\n const { selectedDate, viewMonth, viewYear } = this.props;\n return !!(selectedDate && Number(new Date(viewYear, viewMonth, day)) === Number(selectedDate));\n };\n\n isFocused = (day: number) => {\n const { focusedDate, viewMonth, viewYear } = this.props;\n return !!(focusedDate && Number(new Date(viewYear, viewMonth, day)) === Number(focusedDate));\n };\n\n isToday = (day: number) => {\n const { viewMonth, viewYear } = this.props;\n return Number(getStartOfDay(new Date())) === Number(new Date(viewYear, viewMonth, day));\n };\n\n getAutofocusDay = (weeks: number[][]) => {\n const days = weeks.flatMap((week) => week);\n return getFocusableTime({\n isActive: this.isFocused,\n isNow: this.isToday,\n isDisabled: this.isUnavailable,\n timeSpan: days,\n });\n };\n\n render() {\n const { viewMonth, viewYear, intl, disabledReasonId, announceReasonOnFocus } = this.props;\n const weeks = this.getTableStructure();\n const autoFocusDay = this.getAutofocusDay(weeks);\n return (\n <table className=\"table table-condensed table-bordered tw-date-lookup-calendar m-b-0\">\n <thead>\n <tr>\n {this.days.map((day, index) => (\n <th\n key={day}\n className={\n index > 4\n ? 'text-xs-center np-text-body-default'\n : 'text-xs-center np-text-body-default-bold'\n }\n >\n <span className=\"hidden-xs\">\n <abbr title={this.daysLong[index]}>{day.slice(0, 3)}</abbr>\n </span>\n <span className=\"visible-xs-inline-block\">\n <abbr title={this.daysLong[index]}>{this.daysShort[index].slice(0, 2)}</abbr>\n </span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {/* eslint-disable react/no-array-index-key */}\n {weeks.map((week, weekIndex) => (\n <tr key={weekIndex}>\n {week.map((day, dayIndex) => {\n const dayOutOfRange = this.isOutOfRange(day);\n const dayDisabled = this.isDisabled(day);\n return (\n <td key={dayIndex} className={dayIndex > 4 ? 'weekend' : ''}>\n {day !== -1 && (\n <TableLink\n item={day}\n type=\"day\"\n title={formatDate(\n new Date(viewYear, viewMonth, day),\n intl.locale,\n SHORT_DAY_FORMAT,\n )}\n autofocus={day === autoFocusDay}\n longTitle={formatDate(\n new Date(viewYear, viewMonth, day),\n intl.locale,\n LONG_DAY_FORMAT,\n )}\n active={this.isActive(day)}\n outOfRange={dayOutOfRange}\n disabled={dayDisabled}\n today={this.isToday(day)}\n disabledReasonId={disabledReasonId}\n announceReasonOnFocus={announceReasonOnFocus}\n onClick={this.selectDay}\n onFocus={this.focusDay}\n />\n )}\n </td>\n );\n })}\n </tr>\n ))}\n {/* eslint-enable react/no-array-index-key */}\n </tbody>\n </table>\n );\n }\n}\n\nexport default injectIntl(DayCalendarTable);\n"],"names":["SHORT_DAY_FORMAT","day","DayCalendarTable","PureComponent","getTableStructure","viewMonth","viewYear","props","firstDayOfMonth","Date","getDay","daysInMonth","getDate","week","weeks","i","push","length","days","getDayNames","intl","locale","daysShort","daysLong","selectDay","onSelect","focusDay","onDayFocus","isOutOfRange","min","max","date","isWithinRange","isDisabled","disabledRules","isDateDisabled","isUnavailable","isActive","selectedDate","Number","isFocused","focusedDate","isToday","getStartOfDay","getAutofocusDay","flatMap","getFocusableTime","isNow","timeSpan","render","disabledReasonId","announceReasonOnFocus","autoFocusDay","_jsxs","className","children","_jsx","map","index","title","slice","weekIndex","dayIndex","dayOutOfRange","dayDisabled","TableLink","item","type","formatDate","autofocus","longTitle","LONG_DAY_FORMAT","active","outOfRange","disabled","today","onClick","onFocus","injectIntl"],"mappings":"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"}
@@ -30,6 +30,7 @@ let MonthCalendar$1 = class MonthCalendar extends React.PureComponent {
30
30
  render() {
31
31
  const {
32
32
  selectedDate,
33
+ focusedDate,
33
34
  min,
34
35
  max,
35
36
  viewYear,
@@ -40,17 +41,22 @@ let MonthCalendar$1 = class MonthCalendar extends React.PureComponent {
40
41
  placeholder,
41
42
  onLabelClick
42
43
  } = this.props;
44
+ const isPreviousDisabled = !!(min && viewYear - 1 < min.getFullYear());
45
+ const isNextDisabled = !!(max && viewYear + 1 > max.getFullYear());
43
46
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
44
47
  children: [/*#__PURE__*/jsxRuntime.jsx(DateHeader.default, {
45
48
  dateMode: formatMessage(Calendar_messages.default.year),
46
49
  label: formatting.formatDate(new Date(viewYear, 0), locale, {
47
50
  year: 'numeric'
48
51
  }),
52
+ isPreviousDisabled: isPreviousDisabled,
53
+ isNextDisabled: isNextDisabled,
49
54
  onLabelClick: onLabelClick,
50
55
  onPreviousClick: this.selectPreviousYear,
51
56
  onNextClick: this.selectNextYear
52
57
  }), /*#__PURE__*/jsxRuntime.jsx(MonthCalendarTable.default, {
53
58
  selectedDate: selectedDate,
59
+ focusedDate: focusedDate,
54
60
  min: min,
55
61
  max: max,
56
62
  viewYear: viewYear,
@@ -1 +1 @@
1
- {"version":3,"file":"MonthCalendar.js","sources":["../../../src/Calendar/MonthCalendar/MonthCalendar.tsx"],"sourcesContent":["import { formatDate } from '@transferwise/formatting';\nimport { PureComponent } from 'react';\nimport { injectIntl, type WrappedComponentProps } from '../../common/injectIntl';\n\nimport messages from '../Calendar.messages';\nimport DateHeader from '../DateHeader';\n\nimport MonthCalendarTable from './Table';\n\ninterface MonthCalendarProps extends WrappedComponentProps {\n selectedDate: Date | null;\n min: Date | null;\n max: Date | null;\n viewYear: number;\n placeholder?: string;\n onSelect: () => void;\n onLabelClick: () => void;\n onViewDateUpdate: (date: { year?: number; month?: number }) => void;\n}\n\nclass MonthCalendar extends PureComponent<MonthCalendarProps> {\n onMonthSelect = (month: number) => {\n this.props.onViewDateUpdate({ month });\n this.props.onSelect();\n };\n\n selectPreviousYear = () => {\n this.props.onViewDateUpdate({ year: this.props.viewYear - 1 });\n };\n\n selectNextYear = () => {\n this.props.onViewDateUpdate({ year: this.props.viewYear + 1 });\n };\n\n render() {\n const {\n selectedDate,\n min,\n max,\n viewYear,\n intl: { locale, formatMessage },\n placeholder,\n onLabelClick,\n } = this.props;\n return (\n <>\n <DateHeader\n dateMode={formatMessage(messages.year)}\n label={formatDate(new Date(viewYear, 0), locale, { year: 'numeric' })}\n onLabelClick={onLabelClick}\n onPreviousClick={this.selectPreviousYear}\n onNextClick={this.selectNextYear}\n />\n <MonthCalendarTable\n selectedDate={selectedDate}\n min={min}\n max={max}\n viewYear={viewYear}\n placeholder={placeholder}\n onSelect={this.onMonthSelect}\n />\n </>\n );\n }\n}\n\nexport default injectIntl(MonthCalendar);\n"],"names":["MonthCalendar","PureComponent","onMonthSelect","month","props","onViewDateUpdate","onSelect","selectPreviousYear","year","viewYear","selectNextYear","render","selectedDate","min","max","intl","locale","formatMessage","placeholder","onLabelClick","_jsxs","_Fragment","children","_jsx","DateHeader","dateMode","messages","label","formatDate","Date","onPreviousClick","onNextClick","MonthCalendarTable","injectIntl"],"mappings":";;;;;;;;;;;;sBAoBA,MAAMA,aAAc,SAAQC,mBAAiC,CAAA;EAC3DC,aAAa,GAAIC,KAAa,IAAI;AAChC,IAAA,IAAI,CAACC,KAAK,CAACC,gBAAgB,CAAC;AAAEF,MAAAA;AAAK,KAAE,CAAC;AACtC,IAAA,IAAI,CAACC,KAAK,CAACE,QAAQ,EAAE;EACvB,CAAC;EAEDC,kBAAkB,GAAGA,MAAK;AACxB,IAAA,IAAI,CAACH,KAAK,CAACC,gBAAgB,CAAC;AAAEG,MAAAA,IAAI,EAAE,IAAI,CAACJ,KAAK,CAACK,QAAQ,GAAG;AAAC,KAAE,CAAC;EAChE,CAAC;EAEDC,cAAc,GAAGA,MAAK;AACpB,IAAA,IAAI,CAACN,KAAK,CAACC,gBAAgB,CAAC;AAAEG,MAAAA,IAAI,EAAE,IAAI,CAACJ,KAAK,CAACK,QAAQ,GAAG;AAAC,KAAE,CAAC;EAChE,CAAC;AAEDE,EAAAA,MAAMA,GAAA;IACJ,MAAM;MACJC,YAAY;MACZC,GAAG;MACHC,GAAG;MACHL,QAAQ;AACRM,MAAAA,IAAI,EAAE;QAAEC,MAAM;AAAEC,QAAAA;OAAe;MAC/BC,WAAW;AACXC,MAAAA;KACD,GAAG,IAAI,CAACf,KAAK;IACd,oBACEgB,eAAA,CAAAC,mBAAA,EAAA;MAAAC,QAAA,EAAA,cACEC,cAAA,CAACC,kBAAU,EAAA;AACTC,QAAAA,QAAQ,EAAER,aAAa,CAACS,yBAAQ,CAAClB,IAAI,CAAE;AACvCmB,QAAAA,KAAK,EAAEC,qBAAU,CAAC,IAAIC,IAAI,CAACpB,QAAQ,EAAE,CAAC,CAAC,EAAEO,MAAM,EAAE;AAAER,UAAAA,IAAI,EAAE;AAAS,SAAE,CAAE;AACtEW,QAAAA,YAAY,EAAEA,YAAa;QAC3BW,eAAe,EAAE,IAAI,CAACvB,kBAAmB;QACzCwB,WAAW,EAAE,IAAI,CAACrB;AAAe,OAAA,CAEnC,eAAAa,cAAA,CAACS,0BAAkB,EAAA;AACjBpB,QAAAA,YAAY,EAAEA,YAAa;AAC3BC,QAAAA,GAAG,EAAEA,GAAI;AACTC,QAAAA,GAAG,EAAEA,GAAI;AACTL,QAAAA,QAAQ,EAAEA,QAAS;AACnBS,QAAAA,WAAW,EAAEA,WAAY;QACzBZ,QAAQ,EAAE,IAAI,CAACJ;AAAc,OAAA,CAEjC;AAAA,KAAA,CAAG;AAEP,EAAA;AACD;AAED,oBAAe+B,qBAAU,CAACjC,eAAa,CAAC;;;;"}
1
+ {"version":3,"file":"MonthCalendar.js","sources":["../../../src/Calendar/MonthCalendar/MonthCalendar.tsx"],"sourcesContent":["import { formatDate } from '@transferwise/formatting';\nimport { PureComponent } from 'react';\nimport { injectIntl, type WrappedComponentProps } from '../../common/injectIntl';\n\nimport messages from '../Calendar.messages';\nimport DateHeader from '../DateHeader';\n\nimport MonthCalendarTable from './Table';\n\ninterface MonthCalendarProps extends WrappedComponentProps {\n selectedDate: Date | null;\n focusedDate?: Date | null;\n min: Date | null;\n max: Date | null;\n viewYear: number;\n placeholder?: string;\n onSelect: () => void;\n onLabelClick: () => void;\n onViewDateUpdate: (date: { year?: number; month?: number }) => void;\n}\n\nclass MonthCalendar extends PureComponent<MonthCalendarProps> {\n onMonthSelect = (month: number) => {\n this.props.onViewDateUpdate({ month });\n this.props.onSelect();\n };\n\n selectPreviousYear = () => {\n this.props.onViewDateUpdate({ year: this.props.viewYear - 1 });\n };\n\n selectNextYear = () => {\n this.props.onViewDateUpdate({ year: this.props.viewYear + 1 });\n };\n\n render() {\n const {\n selectedDate,\n focusedDate,\n min,\n max,\n viewYear,\n intl: { locale, formatMessage },\n placeholder,\n onLabelClick,\n } = this.props;\n const isPreviousDisabled = !!(min && viewYear - 1 < min.getFullYear());\n const isNextDisabled = !!(max && viewYear + 1 > max.getFullYear());\n\n return (\n <>\n <DateHeader\n dateMode={formatMessage(messages.year)}\n label={formatDate(new Date(viewYear, 0), locale, { year: 'numeric' })}\n isPreviousDisabled={isPreviousDisabled}\n isNextDisabled={isNextDisabled}\n onLabelClick={onLabelClick}\n onPreviousClick={this.selectPreviousYear}\n onNextClick={this.selectNextYear}\n />\n <MonthCalendarTable\n selectedDate={selectedDate}\n focusedDate={focusedDate}\n min={min}\n max={max}\n viewYear={viewYear}\n placeholder={placeholder}\n onSelect={this.onMonthSelect}\n />\n </>\n );\n }\n}\n\nexport default injectIntl(MonthCalendar);\n"],"names":["MonthCalendar","PureComponent","onMonthSelect","month","props","onViewDateUpdate","onSelect","selectPreviousYear","year","viewYear","selectNextYear","render","selectedDate","focusedDate","min","max","intl","locale","formatMessage","placeholder","onLabelClick","isPreviousDisabled","getFullYear","isNextDisabled","_jsxs","_Fragment","children","_jsx","DateHeader","dateMode","messages","label","formatDate","Date","onPreviousClick","onNextClick","MonthCalendarTable","injectIntl"],"mappings":";;;;;;;;;;;;sBAqBA,MAAMA,aAAc,SAAQC,mBAAiC,CAAA;EAC3DC,aAAa,GAAIC,KAAa,IAAI;AAChC,IAAA,IAAI,CAACC,KAAK,CAACC,gBAAgB,CAAC;AAAEF,MAAAA;AAAK,KAAE,CAAC;AACtC,IAAA,IAAI,CAACC,KAAK,CAACE,QAAQ,EAAE;EACvB,CAAC;EAEDC,kBAAkB,GAAGA,MAAK;AACxB,IAAA,IAAI,CAACH,KAAK,CAACC,gBAAgB,CAAC;AAAEG,MAAAA,IAAI,EAAE,IAAI,CAACJ,KAAK,CAACK,QAAQ,GAAG;AAAC,KAAE,CAAC;EAChE,CAAC;EAEDC,cAAc,GAAGA,MAAK;AACpB,IAAA,IAAI,CAACN,KAAK,CAACC,gBAAgB,CAAC;AAAEG,MAAAA,IAAI,EAAE,IAAI,CAACJ,KAAK,CAACK,QAAQ,GAAG;AAAC,KAAE,CAAC;EAChE,CAAC;AAEDE,EAAAA,MAAMA,GAAA;IACJ,MAAM;MACJC,YAAY;MACZC,WAAW;MACXC,GAAG;MACHC,GAAG;MACHN,QAAQ;AACRO,MAAAA,IAAI,EAAE;QAAEC,MAAM;AAAEC,QAAAA;OAAe;MAC/BC,WAAW;AACXC,MAAAA;KACD,GAAG,IAAI,CAAChB,KAAK;AACd,IAAA,MAAMiB,kBAAkB,GAAG,CAAC,EAAEP,GAAG,IAAIL,QAAQ,GAAG,CAAC,GAAGK,GAAG,CAACQ,WAAW,EAAE,CAAC;AACtE,IAAA,MAAMC,cAAc,GAAG,CAAC,EAAER,GAAG,IAAIN,QAAQ,GAAG,CAAC,GAAGM,GAAG,CAACO,WAAW,EAAE,CAAC;IAElE,oBACEE,eAAA,CAAAC,mBAAA,EAAA;MAAAC,QAAA,EAAA,cACEC,cAAA,CAACC,kBAAU,EAAA;AACTC,QAAAA,QAAQ,EAAEX,aAAa,CAACY,yBAAQ,CAACtB,IAAI,CAAE;AACvCuB,QAAAA,KAAK,EAAEC,qBAAU,CAAC,IAAIC,IAAI,CAACxB,QAAQ,EAAE,CAAC,CAAC,EAAEQ,MAAM,EAAE;AAAET,UAAAA,IAAI,EAAE;AAAS,SAAE,CAAE;AACtEa,QAAAA,kBAAkB,EAAEA,kBAAmB;AACvCE,QAAAA,cAAc,EAAEA,cAAe;AAC/BH,QAAAA,YAAY,EAAEA,YAAa;QAC3Bc,eAAe,EAAE,IAAI,CAAC3B,kBAAmB;QACzC4B,WAAW,EAAE,IAAI,CAACzB;AAAe,OAAA,CAEnC,eAAAiB,cAAA,CAACS,0BAAkB,EAAA;AACjBxB,QAAAA,YAAY,EAAEA,YAAa;AAC3BC,QAAAA,WAAW,EAAEA,WAAY;AACzBC,QAAAA,GAAG,EAAEA,GAAI;AACTC,QAAAA,GAAG,EAAEA,GAAI;AACTN,QAAAA,QAAQ,EAAEA,QAAS;AACnBU,QAAAA,WAAW,EAAEA,WAAY;QACzBb,QAAQ,EAAE,IAAI,CAACJ;AAAc,OAAA,CAEjC;AAAA,KAAA,CAAG;AAEP,EAAA;AACD;AAED,oBAAemC,qBAAU,CAACrC,eAAa,CAAC;;;;"}
@@ -26,6 +26,7 @@ class MonthCalendar extends PureComponent {
26
26
  render() {
27
27
  const {
28
28
  selectedDate,
29
+ focusedDate,
29
30
  min,
30
31
  max,
31
32
  viewYear,
@@ -36,17 +37,22 @@ class MonthCalendar extends PureComponent {
36
37
  placeholder,
37
38
  onLabelClick
38
39
  } = this.props;
40
+ const isPreviousDisabled = !!(min && viewYear - 1 < min.getFullYear());
41
+ const isNextDisabled = !!(max && viewYear + 1 > max.getFullYear());
39
42
  return /*#__PURE__*/jsxs(Fragment, {
40
43
  children: [/*#__PURE__*/jsx(DateHeader, {
41
44
  dateMode: formatMessage(messages.year),
42
45
  label: formatDate(new Date(viewYear, 0), locale, {
43
46
  year: 'numeric'
44
47
  }),
48
+ isPreviousDisabled: isPreviousDisabled,
49
+ isNextDisabled: isNextDisabled,
45
50
  onLabelClick: onLabelClick,
46
51
  onPreviousClick: this.selectPreviousYear,
47
52
  onNextClick: this.selectNextYear
48
53
  }), /*#__PURE__*/jsx(MonthCalendarTable, {
49
54
  selectedDate: selectedDate,
55
+ focusedDate: focusedDate,
50
56
  min: min,
51
57
  max: max,
52
58
  viewYear: viewYear,
@@ -1 +1 @@
1
- {"version":3,"file":"MonthCalendar.mjs","sources":["../../../src/Calendar/MonthCalendar/MonthCalendar.tsx"],"sourcesContent":["import { formatDate } from '@transferwise/formatting';\nimport { PureComponent } from 'react';\nimport { injectIntl, type WrappedComponentProps } from '../../common/injectIntl';\n\nimport messages from '../Calendar.messages';\nimport DateHeader from '../DateHeader';\n\nimport MonthCalendarTable from './Table';\n\ninterface MonthCalendarProps extends WrappedComponentProps {\n selectedDate: Date | null;\n min: Date | null;\n max: Date | null;\n viewYear: number;\n placeholder?: string;\n onSelect: () => void;\n onLabelClick: () => void;\n onViewDateUpdate: (date: { year?: number; month?: number }) => void;\n}\n\nclass MonthCalendar extends PureComponent<MonthCalendarProps> {\n onMonthSelect = (month: number) => {\n this.props.onViewDateUpdate({ month });\n this.props.onSelect();\n };\n\n selectPreviousYear = () => {\n this.props.onViewDateUpdate({ year: this.props.viewYear - 1 });\n };\n\n selectNextYear = () => {\n this.props.onViewDateUpdate({ year: this.props.viewYear + 1 });\n };\n\n render() {\n const {\n selectedDate,\n min,\n max,\n viewYear,\n intl: { locale, formatMessage },\n placeholder,\n onLabelClick,\n } = this.props;\n return (\n <>\n <DateHeader\n dateMode={formatMessage(messages.year)}\n label={formatDate(new Date(viewYear, 0), locale, { year: 'numeric' })}\n onLabelClick={onLabelClick}\n onPreviousClick={this.selectPreviousYear}\n onNextClick={this.selectNextYear}\n />\n <MonthCalendarTable\n selectedDate={selectedDate}\n min={min}\n max={max}\n viewYear={viewYear}\n placeholder={placeholder}\n onSelect={this.onMonthSelect}\n />\n </>\n );\n }\n}\n\nexport default injectIntl(MonthCalendar);\n"],"names":["MonthCalendar","PureComponent","onMonthSelect","month","props","onViewDateUpdate","onSelect","selectPreviousYear","year","viewYear","selectNextYear","render","selectedDate","min","max","intl","locale","formatMessage","placeholder","onLabelClick","_jsxs","_Fragment","children","_jsx","DateHeader","dateMode","messages","label","formatDate","Date","onPreviousClick","onNextClick","MonthCalendarTable","injectIntl"],"mappings":";;;;;;;;AAoBA,MAAMA,aAAc,SAAQC,aAAiC,CAAA;EAC3DC,aAAa,GAAIC,KAAa,IAAI;AAChC,IAAA,IAAI,CAACC,KAAK,CAACC,gBAAgB,CAAC;AAAEF,MAAAA;AAAK,KAAE,CAAC;AACtC,IAAA,IAAI,CAACC,KAAK,CAACE,QAAQ,EAAE;EACvB,CAAC;EAEDC,kBAAkB,GAAGA,MAAK;AACxB,IAAA,IAAI,CAACH,KAAK,CAACC,gBAAgB,CAAC;AAAEG,MAAAA,IAAI,EAAE,IAAI,CAACJ,KAAK,CAACK,QAAQ,GAAG;AAAC,KAAE,CAAC;EAChE,CAAC;EAEDC,cAAc,GAAGA,MAAK;AACpB,IAAA,IAAI,CAACN,KAAK,CAACC,gBAAgB,CAAC;AAAEG,MAAAA,IAAI,EAAE,IAAI,CAACJ,KAAK,CAACK,QAAQ,GAAG;AAAC,KAAE,CAAC;EAChE,CAAC;AAEDE,EAAAA,MAAMA,GAAA;IACJ,MAAM;MACJC,YAAY;MACZC,GAAG;MACHC,GAAG;MACHL,QAAQ;AACRM,MAAAA,IAAI,EAAE;QAAEC,MAAM;AAAEC,QAAAA;OAAe;MAC/BC,WAAW;AACXC,MAAAA;KACD,GAAG,IAAI,CAACf,KAAK;IACd,oBACEgB,IAAA,CAAAC,QAAA,EAAA;MAAAC,QAAA,EAAA,cACEC,GAAA,CAACC,UAAU,EAAA;AACTC,QAAAA,QAAQ,EAAER,aAAa,CAACS,QAAQ,CAAClB,IAAI,CAAE;AACvCmB,QAAAA,KAAK,EAAEC,UAAU,CAAC,IAAIC,IAAI,CAACpB,QAAQ,EAAE,CAAC,CAAC,EAAEO,MAAM,EAAE;AAAER,UAAAA,IAAI,EAAE;AAAS,SAAE,CAAE;AACtEW,QAAAA,YAAY,EAAEA,YAAa;QAC3BW,eAAe,EAAE,IAAI,CAACvB,kBAAmB;QACzCwB,WAAW,EAAE,IAAI,CAACrB;AAAe,OAAA,CAEnC,eAAAa,GAAA,CAACS,kBAAkB,EAAA;AACjBpB,QAAAA,YAAY,EAAEA,YAAa;AAC3BC,QAAAA,GAAG,EAAEA,GAAI;AACTC,QAAAA,GAAG,EAAEA,GAAI;AACTL,QAAAA,QAAQ,EAAEA,QAAS;AACnBS,QAAAA,WAAW,EAAEA,WAAY;QACzBZ,QAAQ,EAAE,IAAI,CAACJ;AAAc,OAAA,CAEjC;AAAA,KAAA,CAAG;AAEP,EAAA;AACD;AAED,sBAAe+B,UAAU,CAACjC,aAAa,CAAC;;;;"}
1
+ {"version":3,"file":"MonthCalendar.mjs","sources":["../../../src/Calendar/MonthCalendar/MonthCalendar.tsx"],"sourcesContent":["import { formatDate } from '@transferwise/formatting';\nimport { PureComponent } from 'react';\nimport { injectIntl, type WrappedComponentProps } from '../../common/injectIntl';\n\nimport messages from '../Calendar.messages';\nimport DateHeader from '../DateHeader';\n\nimport MonthCalendarTable from './Table';\n\ninterface MonthCalendarProps extends WrappedComponentProps {\n selectedDate: Date | null;\n focusedDate?: Date | null;\n min: Date | null;\n max: Date | null;\n viewYear: number;\n placeholder?: string;\n onSelect: () => void;\n onLabelClick: () => void;\n onViewDateUpdate: (date: { year?: number; month?: number }) => void;\n}\n\nclass MonthCalendar extends PureComponent<MonthCalendarProps> {\n onMonthSelect = (month: number) => {\n this.props.onViewDateUpdate({ month });\n this.props.onSelect();\n };\n\n selectPreviousYear = () => {\n this.props.onViewDateUpdate({ year: this.props.viewYear - 1 });\n };\n\n selectNextYear = () => {\n this.props.onViewDateUpdate({ year: this.props.viewYear + 1 });\n };\n\n render() {\n const {\n selectedDate,\n focusedDate,\n min,\n max,\n viewYear,\n intl: { locale, formatMessage },\n placeholder,\n onLabelClick,\n } = this.props;\n const isPreviousDisabled = !!(min && viewYear - 1 < min.getFullYear());\n const isNextDisabled = !!(max && viewYear + 1 > max.getFullYear());\n\n return (\n <>\n <DateHeader\n dateMode={formatMessage(messages.year)}\n label={formatDate(new Date(viewYear, 0), locale, { year: 'numeric' })}\n isPreviousDisabled={isPreviousDisabled}\n isNextDisabled={isNextDisabled}\n onLabelClick={onLabelClick}\n onPreviousClick={this.selectPreviousYear}\n onNextClick={this.selectNextYear}\n />\n <MonthCalendarTable\n selectedDate={selectedDate}\n focusedDate={focusedDate}\n min={min}\n max={max}\n viewYear={viewYear}\n placeholder={placeholder}\n onSelect={this.onMonthSelect}\n />\n </>\n );\n }\n}\n\nexport default injectIntl(MonthCalendar);\n"],"names":["MonthCalendar","PureComponent","onMonthSelect","month","props","onViewDateUpdate","onSelect","selectPreviousYear","year","viewYear","selectNextYear","render","selectedDate","focusedDate","min","max","intl","locale","formatMessage","placeholder","onLabelClick","isPreviousDisabled","getFullYear","isNextDisabled","_jsxs","_Fragment","children","_jsx","DateHeader","dateMode","messages","label","formatDate","Date","onPreviousClick","onNextClick","MonthCalendarTable","injectIntl"],"mappings":";;;;;;;;AAqBA,MAAMA,aAAc,SAAQC,aAAiC,CAAA;EAC3DC,aAAa,GAAIC,KAAa,IAAI;AAChC,IAAA,IAAI,CAACC,KAAK,CAACC,gBAAgB,CAAC;AAAEF,MAAAA;AAAK,KAAE,CAAC;AACtC,IAAA,IAAI,CAACC,KAAK,CAACE,QAAQ,EAAE;EACvB,CAAC;EAEDC,kBAAkB,GAAGA,MAAK;AACxB,IAAA,IAAI,CAACH,KAAK,CAACC,gBAAgB,CAAC;AAAEG,MAAAA,IAAI,EAAE,IAAI,CAACJ,KAAK,CAACK,QAAQ,GAAG;AAAC,KAAE,CAAC;EAChE,CAAC;EAEDC,cAAc,GAAGA,MAAK;AACpB,IAAA,IAAI,CAACN,KAAK,CAACC,gBAAgB,CAAC;AAAEG,MAAAA,IAAI,EAAE,IAAI,CAACJ,KAAK,CAACK,QAAQ,GAAG;AAAC,KAAE,CAAC;EAChE,CAAC;AAEDE,EAAAA,MAAMA,GAAA;IACJ,MAAM;MACJC,YAAY;MACZC,WAAW;MACXC,GAAG;MACHC,GAAG;MACHN,QAAQ;AACRO,MAAAA,IAAI,EAAE;QAAEC,MAAM;AAAEC,QAAAA;OAAe;MAC/BC,WAAW;AACXC,MAAAA;KACD,GAAG,IAAI,CAAChB,KAAK;AACd,IAAA,MAAMiB,kBAAkB,GAAG,CAAC,EAAEP,GAAG,IAAIL,QAAQ,GAAG,CAAC,GAAGK,GAAG,CAACQ,WAAW,EAAE,CAAC;AACtE,IAAA,MAAMC,cAAc,GAAG,CAAC,EAAER,GAAG,IAAIN,QAAQ,GAAG,CAAC,GAAGM,GAAG,CAACO,WAAW,EAAE,CAAC;IAElE,oBACEE,IAAA,CAAAC,QAAA,EAAA;MAAAC,QAAA,EAAA,cACEC,GAAA,CAACC,UAAU,EAAA;AACTC,QAAAA,QAAQ,EAAEX,aAAa,CAACY,QAAQ,CAACtB,IAAI,CAAE;AACvCuB,QAAAA,KAAK,EAAEC,UAAU,CAAC,IAAIC,IAAI,CAACxB,QAAQ,EAAE,CAAC,CAAC,EAAEQ,MAAM,EAAE;AAAET,UAAAA,IAAI,EAAE;AAAS,SAAE,CAAE;AACtEa,QAAAA,kBAAkB,EAAEA,kBAAmB;AACvCE,QAAAA,cAAc,EAAEA,cAAe;AAC/BH,QAAAA,YAAY,EAAEA,YAAa;QAC3Bc,eAAe,EAAE,IAAI,CAAC3B,kBAAmB;QACzC4B,WAAW,EAAE,IAAI,CAACzB;AAAe,OAAA,CAEnC,eAAAiB,GAAA,CAACS,kBAAkB,EAAA;AACjBxB,QAAAA,YAAY,EAAEA,YAAa;AAC3BC,QAAAA,WAAW,EAAEA,WAAY;AACzBC,QAAAA,GAAG,EAAEA,GAAI;AACTC,QAAAA,GAAG,EAAEA,GAAI;AACTN,QAAAA,QAAQ,EAAEA,QAAS;AACnBU,QAAAA,WAAW,EAAEA,WAAY;QACzBb,QAAQ,EAAE,IAAI,CAACJ;AAAc,OAAA,CAEjC;AAAA,KAAA,CAAG;AAEP,EAAA;AACD;AAED,sBAAemC,UAAU,CAACrC,aAAa,CAAC;;;;"}
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var formatting = require('@transferwise/formatting');
6
6
  var reactIntl = require('react-intl');
7
7
  var GetFocusableTime = require('../../GetFocusableTime/GetFocusableTime.js');
8
- var TableLink = require('../../tableLink/TableLink.js');
8
+ var TableLink = require('../../TableLink/TableLink.js');
9
9
  var jsxRuntime = require('react/jsx-runtime');
10
10
 
11
11
  const ROWS = 3;
@@ -15,6 +15,7 @@ const MONTH_ONLY_FORMAT = {
15
15
  };
16
16
  const MonthCalendarTable = ({
17
17
  selectedDate,
18
+ focusedDate,
18
19
  min,
19
20
  max,
20
21
  viewYear,
@@ -30,7 +31,8 @@ const MonthCalendarTable = ({
30
31
  type: "month",
31
32
  title: formatting.formatDate(new Date(viewYear, month), locale, MONTH_ONLY_FORMAT),
32
33
  active: isActive(month),
33
- disabled: isDisabled(month),
34
+ outOfRange: isDisabled(month),
35
+ disabled: false,
34
36
  today: viewYear === new Date().getFullYear() && month === new Date().getMonth(),
35
37
  autofocus: autofocusMonth === month,
36
38
  onClick: onSelect
@@ -39,6 +41,9 @@ const MonthCalendarTable = ({
39
41
  const isActive = month => {
40
42
  return !!(month === selectedDate?.getMonth() && viewYear === selectedDate?.getFullYear());
41
43
  };
44
+ const isFocused = month => {
45
+ return !!(month === focusedDate?.getMonth() && viewYear === focusedDate?.getFullYear());
46
+ };
42
47
  const isThisMonth = month => {
43
48
  return viewYear === new Date().getFullYear() && month === new Date().getMonth();
44
49
  };
@@ -51,7 +56,7 @@ const MonthCalendarTable = ({
51
56
  length: ROWS * COLS
52
57
  }, (_, index) => index);
53
58
  return GetFocusableTime.getFocusableTime({
54
- isActive,
59
+ isActive: isFocused,
55
60
  isNow: isThisMonth,
56
61
  isDisabled,
57
62
  timeSpan: months
@@ -1 +1 @@
1
- {"version":3,"file":"MonthCalendarTable.js","sources":["../../../../src/Calendar/MonthCalendar/Table/MonthCalendarTable.tsx"],"sourcesContent":["import { formatDate } from '@transferwise/formatting';\nimport { useIntl } from 'react-intl';\n\nimport { getFocusableTime } from '../../GetFocusableTime/GetFocusableTime';\nimport TableLink from '../../tableLink';\n\ninterface MonthCalendarTableProps {\n selectedDate: Date | null;\n min: Date | null;\n max: Date | null;\n viewYear: number;\n placeholder?: string;\n onSelect: (date: number) => void;\n}\n\nconst ROWS = 3;\nconst COLS = 4;\nconst MONTH_ONLY_FORMAT: Intl.DateTimeFormatOptions = { month: 'short' };\n\nconst MonthCalendarTable = ({\n selectedDate,\n min,\n max,\n viewYear,\n placeholder,\n onSelect,\n}: MonthCalendarTableProps) => {\n const { locale } = useIntl();\n\n const getLink = (month: number) => {\n return (\n <TableLink\n item={month}\n type=\"month\"\n title={formatDate(new Date(viewYear, month), locale, MONTH_ONLY_FORMAT)}\n active={isActive(month)}\n disabled={isDisabled(month)}\n today={viewYear === new Date().getFullYear() && month === new Date().getMonth()}\n autofocus={autofocusMonth === month}\n onClick={onSelect}\n />\n );\n };\n\n const isActive = (month: number) => {\n return !!(month === selectedDate?.getMonth() && viewYear === selectedDate?.getFullYear());\n };\n\n const isThisMonth = (month: number) => {\n return viewYear === new Date().getFullYear() && month === new Date().getMonth();\n };\n\n const isDisabled = (month: number) => {\n const date = new Date(viewYear, month);\n return !!(\n (min && date < new Date(min.getFullYear(), min.getMonth())) ||\n (max && date > new Date(max.getFullYear(), max.getMonth()))\n );\n };\n\n const autofocusMonth = (() => {\n const months = Array.from({ length: ROWS * COLS }, (_, index) => index);\n return getFocusableTime({ isActive, isNow: isThisMonth, isDisabled, timeSpan: months });\n })();\n\n return (\n <table className=\"table table-condensed table-bordered tw-date-lookup-calendar np-text-body-default-bold m-b-0\">\n <thead className=\"sr-only\">\n <tr>\n <th colSpan={COLS}>{placeholder}</th>\n </tr>\n </thead>\n <tbody>\n {Array.from({ length: ROWS }, (_, rowIndex) => (\n <tr key={rowIndex}>\n {Array.from({ length: COLS }, (_, colIndex) => (\n <td key={colIndex}>{getLink(rowIndex * COLS + colIndex)}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n};\n\nexport default MonthCalendarTable;\n"],"names":["ROWS","COLS","MONTH_ONLY_FORMAT","month","MonthCalendarTable","selectedDate","min","max","viewYear","placeholder","onSelect","locale","useIntl","getLink","_jsx","TableLink","item","type","title","formatDate","Date","active","isActive","disabled","isDisabled","today","getFullYear","getMonth","autofocus","autofocusMonth","onClick","isThisMonth","date","months","Array","from","length","_","index","getFocusableTime","isNow","timeSpan","_jsxs","className","children","colSpan","rowIndex","colIndex"],"mappings":"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"}
1
+ {"version":3,"file":"MonthCalendarTable.js","sources":["../../../../src/Calendar/MonthCalendar/Table/MonthCalendarTable.tsx"],"sourcesContent":["import { formatDate } from '@transferwise/formatting';\nimport { useIntl } from 'react-intl';\n\nimport { getFocusableTime } from '../../GetFocusableTime/GetFocusableTime';\nimport TableLink from '../../TableLink';\n\ninterface MonthCalendarTableProps {\n selectedDate: Date | null;\n focusedDate?: Date | null;\n min: Date | null;\n max: Date | null;\n viewYear: number;\n placeholder?: string;\n onSelect: (date: number) => void;\n}\n\nconst ROWS = 3;\nconst COLS = 4;\nconst MONTH_ONLY_FORMAT: Intl.DateTimeFormatOptions = { month: 'short' };\n\nconst MonthCalendarTable = ({\n selectedDate,\n focusedDate,\n min,\n max,\n viewYear,\n placeholder,\n onSelect,\n}: MonthCalendarTableProps) => {\n const { locale } = useIntl();\n\n const getLink = (month: number) => {\n return (\n <TableLink\n item={month}\n type=\"month\"\n title={formatDate(new Date(viewYear, month), locale, MONTH_ONLY_FORMAT)}\n active={isActive(month)}\n outOfRange={isDisabled(month)}\n disabled={false}\n today={viewYear === new Date().getFullYear() && month === new Date().getMonth()}\n autofocus={autofocusMonth === month}\n onClick={onSelect}\n />\n );\n };\n\n const isActive = (month: number) => {\n return !!(month === selectedDate?.getMonth() && viewYear === selectedDate?.getFullYear());\n };\n\n const isFocused = (month: number) => {\n return !!(month === focusedDate?.getMonth() && viewYear === focusedDate?.getFullYear());\n };\n\n const isThisMonth = (month: number) => {\n return viewYear === new Date().getFullYear() && month === new Date().getMonth();\n };\n\n const isDisabled = (month: number) => {\n const date = new Date(viewYear, month);\n return !!(\n (min && date < new Date(min.getFullYear(), min.getMonth())) ||\n (max && date > new Date(max.getFullYear(), max.getMonth()))\n );\n };\n\n const autofocusMonth = (() => {\n const months = Array.from({ length: ROWS * COLS }, (_, index) => index);\n return getFocusableTime({\n isActive: isFocused,\n isNow: isThisMonth,\n isDisabled,\n timeSpan: months,\n });\n })();\n\n return (\n <table className=\"table table-condensed table-bordered tw-date-lookup-calendar np-text-body-default-bold m-b-0\">\n <thead className=\"sr-only\">\n <tr>\n <th colSpan={COLS}>{placeholder}</th>\n </tr>\n </thead>\n <tbody>\n {Array.from({ length: ROWS }, (_, rowIndex) => (\n <tr key={rowIndex}>\n {Array.from({ length: COLS }, (_, colIndex) => (\n <td key={colIndex}>{getLink(rowIndex * COLS + colIndex)}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n};\n\nexport default MonthCalendarTable;\n"],"names":["ROWS","COLS","MONTH_ONLY_FORMAT","month","MonthCalendarTable","selectedDate","focusedDate","min","max","viewYear","placeholder","onSelect","locale","useIntl","getLink","_jsx","TableLink","item","type","title","formatDate","Date","active","isActive","outOfRange","isDisabled","disabled","today","getFullYear","getMonth","autofocus","autofocusMonth","onClick","isFocused","isThisMonth","date","months","Array","from","length","_","index","getFocusableTime","isNow","timeSpan","_jsxs","className","children","colSpan","rowIndex","colIndex"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { formatDate } from '@transferwise/formatting';
2
2
  import { useIntl } from 'react-intl';
3
3
  import { getFocusableTime } from '../../GetFocusableTime/GetFocusableTime.mjs';
4
- import TableLink from '../../tableLink/TableLink.mjs';
4
+ import TableLink from '../../TableLink/TableLink.mjs';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
6
6
 
7
7
  const ROWS = 3;
@@ -11,6 +11,7 @@ const MONTH_ONLY_FORMAT = {
11
11
  };
12
12
  const MonthCalendarTable = ({
13
13
  selectedDate,
14
+ focusedDate,
14
15
  min,
15
16
  max,
16
17
  viewYear,
@@ -26,7 +27,8 @@ const MonthCalendarTable = ({
26
27
  type: "month",
27
28
  title: formatDate(new Date(viewYear, month), locale, MONTH_ONLY_FORMAT),
28
29
  active: isActive(month),
29
- disabled: isDisabled(month),
30
+ outOfRange: isDisabled(month),
31
+ disabled: false,
30
32
  today: viewYear === new Date().getFullYear() && month === new Date().getMonth(),
31
33
  autofocus: autofocusMonth === month,
32
34
  onClick: onSelect
@@ -35,6 +37,9 @@ const MonthCalendarTable = ({
35
37
  const isActive = month => {
36
38
  return !!(month === selectedDate?.getMonth() && viewYear === selectedDate?.getFullYear());
37
39
  };
40
+ const isFocused = month => {
41
+ return !!(month === focusedDate?.getMonth() && viewYear === focusedDate?.getFullYear());
42
+ };
38
43
  const isThisMonth = month => {
39
44
  return viewYear === new Date().getFullYear() && month === new Date().getMonth();
40
45
  };
@@ -47,7 +52,7 @@ const MonthCalendarTable = ({
47
52
  length: ROWS * COLS
48
53
  }, (_, index) => index);
49
54
  return getFocusableTime({
50
- isActive,
55
+ isActive: isFocused,
51
56
  isNow: isThisMonth,
52
57
  isDisabled,
53
58
  timeSpan: months