@transferwise/components 0.0.0-experimental-15273df → 0.0.0-experimental-d6d5b6e

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 (155) hide show
  1. package/build/Calendar/Calendar.js +94 -16
  2. package/build/Calendar/Calendar.js.map +1 -1
  3. package/build/Calendar/Calendar.messages.js +12 -0
  4. package/build/Calendar/Calendar.messages.js.map +1 -1
  5. package/build/Calendar/Calendar.messages.mjs +12 -0
  6. package/build/Calendar/Calendar.messages.mjs.map +1 -1
  7. package/build/Calendar/Calendar.mjs +95 -17
  8. package/build/Calendar/Calendar.mjs.map +1 -1
  9. package/build/Calendar/DateHeader/DateHeader.js +5 -1
  10. package/build/Calendar/DateHeader/DateHeader.js.map +1 -1
  11. package/build/Calendar/DateHeader/DateHeader.mjs +5 -1
  12. package/build/Calendar/DateHeader/DateHeader.mjs.map +1 -1
  13. package/build/Calendar/DayCalendar/DayCalendar.js +14 -0
  14. package/build/Calendar/DayCalendar/DayCalendar.js.map +1 -1
  15. package/build/Calendar/DayCalendar/DayCalendar.mjs +14 -0
  16. package/build/Calendar/DayCalendar/DayCalendar.mjs.map +1 -1
  17. package/build/Calendar/DayCalendar/Table/DayCalendarTable.js +53 -19
  18. package/build/Calendar/DayCalendar/Table/DayCalendarTable.js.map +1 -1
  19. package/build/Calendar/DayCalendar/Table/DayCalendarTable.mjs +53 -19
  20. package/build/Calendar/DayCalendar/Table/DayCalendarTable.mjs.map +1 -1
  21. package/build/Calendar/MonthCalendar/MonthCalendar.js +6 -0
  22. package/build/Calendar/MonthCalendar/MonthCalendar.js.map +1 -1
  23. package/build/Calendar/MonthCalendar/MonthCalendar.mjs +6 -0
  24. package/build/Calendar/MonthCalendar/MonthCalendar.mjs.map +1 -1
  25. package/build/Calendar/MonthCalendar/Table/MonthCalendarTable.js +8 -3
  26. package/build/Calendar/MonthCalendar/Table/MonthCalendarTable.js.map +1 -1
  27. package/build/Calendar/MonthCalendar/Table/MonthCalendarTable.mjs +8 -3
  28. package/build/Calendar/MonthCalendar/Table/MonthCalendarTable.mjs.map +1 -1
  29. package/build/Calendar/{tableLink → TableLink}/TableLink.js +26 -11
  30. package/build/Calendar/TableLink/TableLink.js.map +1 -0
  31. package/build/Calendar/{tableLink → TableLink}/TableLink.mjs +26 -11
  32. package/build/Calendar/TableLink/TableLink.mjs.map +1 -0
  33. package/build/Calendar/YearCalendar/Table/YearCalendarTable.js +8 -3
  34. package/build/Calendar/YearCalendar/Table/YearCalendarTable.js.map +1 -1
  35. package/build/Calendar/YearCalendar/Table/YearCalendarTable.mjs +8 -3
  36. package/build/Calendar/YearCalendar/Table/YearCalendarTable.mjs.map +1 -1
  37. package/build/Calendar/YearCalendar/YearCalendar.js +7 -0
  38. package/build/Calendar/YearCalendar/YearCalendar.js.map +1 -1
  39. package/build/Calendar/YearCalendar/YearCalendar.mjs +7 -0
  40. package/build/Calendar/YearCalendar/YearCalendar.mjs.map +1 -1
  41. package/build/DateLookup/DateLookup.js +19 -9
  42. package/build/DateLookup/DateLookup.js.map +1 -1
  43. package/build/DateLookup/DateLookup.mjs +19 -9
  44. package/build/DateLookup/DateLookup.mjs.map +1 -1
  45. package/build/Sticky/Sticky.js +0 -1
  46. package/build/Sticky/Sticky.js.map +1 -1
  47. package/build/Sticky/Sticky.mjs +0 -1
  48. package/build/Sticky/Sticky.mjs.map +1 -1
  49. package/build/common/DateUtils/hasDisabledDatesInMonth/hasDisabledDatesInMonth.js +33 -0
  50. package/build/common/DateUtils/hasDisabledDatesInMonth/hasDisabledDatesInMonth.js.map +1 -0
  51. package/build/common/DateUtils/hasDisabledDatesInMonth/hasDisabledDatesInMonth.mjs +31 -0
  52. package/build/common/DateUtils/hasDisabledDatesInMonth/hasDisabledDatesInMonth.mjs.map +1 -0
  53. package/build/common/DateUtils/isDateDisabled/isDateDisabled.js +40 -0
  54. package/build/common/DateUtils/isDateDisabled/isDateDisabled.js.map +1 -0
  55. package/build/common/DateUtils/isDateDisabled/isDateDisabled.mjs +38 -0
  56. package/build/common/DateUtils/isDateDisabled/isDateDisabled.mjs.map +1 -0
  57. package/build/i18n/en.json +4 -0
  58. package/build/i18n/en.json.js +4 -0
  59. package/build/i18n/en.json.js.map +1 -1
  60. package/build/i18n/en.json.mjs +4 -0
  61. package/build/i18n/en.json.mjs.map +1 -1
  62. package/build/index.js +2 -2
  63. package/build/index.mjs +1 -1
  64. package/build/main.css +123 -48
  65. package/build/styles/Calendar/Calendar.css +112 -37
  66. package/build/styles/Calendar/TableLink/TableLink.css +115 -0
  67. package/build/styles/main.css +123 -48
  68. package/build/types/Calendar/Calendar.d.ts +16 -3
  69. package/build/types/Calendar/Calendar.d.ts.map +1 -1
  70. package/build/types/Calendar/Calendar.messages.d.ts +20 -0
  71. package/build/types/Calendar/Calendar.messages.d.ts.map +1 -1
  72. package/build/types/Calendar/Calendar.types.d.ts +32 -0
  73. package/build/types/Calendar/Calendar.types.d.ts.map +1 -0
  74. package/build/types/Calendar/DateHeader/DateHeader.d.ts +2 -0
  75. package/build/types/Calendar/DateHeader/DateHeader.d.ts.map +1 -1
  76. package/build/types/Calendar/DayCalendar/DayCalendar.d.ts +5 -1
  77. package/build/types/Calendar/DayCalendar/DayCalendar.d.ts.map +1 -1
  78. package/build/types/Calendar/DayCalendar/Table/DayCalendarTable.d.ts +4 -0
  79. package/build/types/Calendar/DayCalendar/Table/DayCalendarTable.d.ts.map +1 -1
  80. package/build/types/Calendar/MonthCalendar/MonthCalendar.d.ts +1 -0
  81. package/build/types/Calendar/MonthCalendar/MonthCalendar.d.ts.map +1 -1
  82. package/build/types/Calendar/MonthCalendar/Table/MonthCalendarTable.d.ts +2 -1
  83. package/build/types/Calendar/MonthCalendar/Table/MonthCalendarTable.d.ts.map +1 -1
  84. package/build/types/Calendar/{tableLink → TableLink}/TableLink.d.ts +3 -1
  85. package/build/types/Calendar/TableLink/TableLink.d.ts.map +1 -0
  86. package/build/types/Calendar/TableLink/index.d.ts.map +1 -0
  87. package/build/types/Calendar/YearCalendar/Table/YearCalendarTable.d.ts +2 -1
  88. package/build/types/Calendar/YearCalendar/Table/YearCalendarTable.d.ts.map +1 -1
  89. package/build/types/Calendar/YearCalendar/YearCalendar.d.ts +1 -0
  90. package/build/types/Calendar/YearCalendar/YearCalendar.d.ts.map +1 -1
  91. package/build/types/Calendar/index.d.ts +1 -0
  92. package/build/types/Calendar/index.d.ts.map +1 -1
  93. package/build/types/DateLookup/DateLookup.d.ts +23 -4
  94. package/build/types/DateLookup/DateLookup.d.ts.map +1 -1
  95. package/build/types/DateLookup/index.d.ts +1 -0
  96. package/build/types/DateLookup/index.d.ts.map +1 -1
  97. package/build/types/Sticky/Sticky.d.ts.map +1 -1
  98. package/build/types/common/DateUtils/hasDisabledDatesInMonth/hasDisabledDatesInMonth.d.ts +3 -0
  99. package/build/types/common/DateUtils/hasDisabledDatesInMonth/hasDisabledDatesInMonth.d.ts.map +1 -0
  100. package/build/types/common/DateUtils/index.d.ts +2 -0
  101. package/build/types/common/DateUtils/index.d.ts.map +1 -1
  102. package/build/types/common/DateUtils/isDateDisabled/isDateDisabled.d.ts +3 -0
  103. package/build/types/common/DateUtils/isDateDisabled/isDateDisabled.d.ts.map +1 -0
  104. package/build/types/index.d.ts +3 -2
  105. package/build/types/index.d.ts.map +1 -1
  106. package/build/types/test-utils/index.d.ts +8 -0
  107. package/build/types/test-utils/index.d.ts.map +1 -1
  108. package/package.json +1 -1
  109. package/src/Calendar/Calendar.css +112 -37
  110. package/src/Calendar/Calendar.disabledDates.test.tsx +518 -0
  111. package/src/Calendar/Calendar.less +5 -35
  112. package/src/Calendar/Calendar.messages.ts +21 -0
  113. package/src/Calendar/Calendar.test.tsx +217 -28
  114. package/src/Calendar/Calendar.tsx +136 -19
  115. package/src/Calendar/Calendar.types.ts +35 -0
  116. package/src/Calendar/DateHeader/DateHeader.tsx +6 -0
  117. package/src/Calendar/DayCalendar/DayCalendar.tsx +33 -1
  118. package/src/Calendar/DayCalendar/Table/DayCalendarTable.tsx +62 -28
  119. package/src/Calendar/MonthCalendar/MonthCalendar.tsx +8 -0
  120. package/src/Calendar/MonthCalendar/Table/MonthCalendarTable.tsx +15 -3
  121. package/src/Calendar/TableLink/TableLink.css +115 -0
  122. package/src/Calendar/TableLink/TableLink.less +68 -0
  123. package/src/Calendar/{tableLink → TableLink}/TableLink.tsx +29 -14
  124. package/src/Calendar/YearCalendar/Table/YearCalendarTable.tsx +15 -3
  125. package/src/Calendar/YearCalendar/YearCalendar.tsx +9 -0
  126. package/src/Calendar/_stories/Calendar.accessibility.docs.mdx +118 -0
  127. package/src/Calendar/_stories/Calendar.story.tsx +138 -4
  128. package/src/Calendar/index.ts +7 -0
  129. package/src/DateLookup/DateLookup.disabledDates.test.tsx +293 -0
  130. package/src/DateLookup/DateLookup.test.tsx +34 -37
  131. package/src/DateLookup/DateLookup.tsx +36 -13
  132. package/src/DateLookup/_stories/DateLookup.accessibility.docs.mdx +108 -0
  133. package/src/DateLookup/_stories/DateLookup.story.tsx +124 -2
  134. package/src/DateLookup/index.ts +6 -0
  135. package/src/Sticky/Sticky.test.tsx +0 -1
  136. package/src/Sticky/Sticky.tsx +0 -1
  137. package/src/common/DateUtils/hasDisabledDatesInMonth/hasDisabledDatesInMonth.test.ts +98 -0
  138. package/src/common/DateUtils/hasDisabledDatesInMonth/hasDisabledDatesInMonth.ts +45 -0
  139. package/src/common/DateUtils/index.ts +2 -0
  140. package/src/common/DateUtils/isDateDisabled/isDateDisabled.test.ts +159 -0
  141. package/src/common/DateUtils/isDateDisabled/isDateDisabled.ts +59 -0
  142. package/src/i18n/en.json +4 -0
  143. package/src/index.ts +3 -2
  144. package/src/main.css +123 -48
  145. package/src/main.less +0 -1
  146. package/build/Calendar/tableLink/TableLink.js.map +0 -1
  147. package/build/Calendar/tableLink/TableLink.mjs.map +0 -1
  148. package/build/styles/Sticky/Sticky.css +0 -4
  149. package/build/types/Calendar/tableLink/TableLink.d.ts.map +0 -1
  150. package/build/types/Calendar/tableLink/index.d.ts.map +0 -1
  151. package/src/Sticky/Sticky.css +0 -4
  152. package/src/Sticky/Sticky.less +0 -6
  153. package/src/Sticky/_stories/Sticky.test.story.tsx +0 -177
  154. /package/build/types/Calendar/{tableLink → TableLink}/index.d.ts +0 -0
  155. /package/src/Calendar/{tableLink → TableLink}/index.ts +0 -0
@@ -3,14 +3,20 @@ 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 '../../../common/DateUtils/isDateDisabled/isDateDisabled.mjs';
6
7
  import { getFocusableTime } from '../../GetFocusableTime/GetFocusableTime.mjs';
7
8
  import { getStartOfDay } from '../../GetStartOfDay/GetStartOfDay.mjs';
8
- import TableLink from '../../tableLink/TableLink.mjs';
9
+ import TableLink from '../../TableLink/TableLink.mjs';
9
10
  import { jsxs, jsx } from 'react/jsx-runtime';
10
11
 
11
12
  const SHORT_DAY_FORMAT = {
12
13
  day: 'numeric'
13
14
  };
15
+ const LONG_DAY_FORMAT = {
16
+ day: 'numeric',
17
+ month: 'long',
18
+ year: 'numeric'
19
+ };
14
20
  class DayCalendarTable extends PureComponent {
15
21
  getTableStructure = () => {
16
22
  const {
@@ -58,7 +64,7 @@ class DayCalendarTable extends PureComponent {
58
64
  } = this.props;
59
65
  onSelect(new Date(viewYear, viewMonth, day));
60
66
  };
61
- isDisabled = day => {
67
+ isOutOfRange = day => {
62
68
  if (day < 0) {
63
69
  return true;
64
70
  }
@@ -71,6 +77,19 @@ class DayCalendarTable extends PureComponent {
71
77
  const date = new Date(viewYear, viewMonth, day);
72
78
  return !isWithinRange(date, min, max);
73
79
  };
80
+ isDisabled = day => {
81
+ if (day < 0) {
82
+ return false;
83
+ }
84
+ const {
85
+ viewMonth,
86
+ viewYear,
87
+ disabledRules
88
+ } = this.props;
89
+ const date = new Date(viewYear, viewMonth, day);
90
+ return isDateDisabled(date, disabledRules);
91
+ };
92
+ isUnavailable = day => this.isOutOfRange(day) || this.isDisabled(day);
74
93
  isActive = day => {
75
94
  const {
76
95
  selectedDate,
@@ -79,6 +98,14 @@ class DayCalendarTable extends PureComponent {
79
98
  } = this.props;
80
99
  return !!(selectedDate && Number(new Date(viewYear, viewMonth, day)) === Number(selectedDate));
81
100
  };
101
+ isFocused = day => {
102
+ const {
103
+ focusedDate,
104
+ viewMonth,
105
+ viewYear
106
+ } = this.props;
107
+ return !!(focusedDate && Number(new Date(viewYear, viewMonth, day)) === Number(focusedDate));
108
+ };
82
109
  isToday = day => {
83
110
  const {
84
111
  viewMonth,
@@ -89,9 +116,9 @@ class DayCalendarTable extends PureComponent {
89
116
  getAutofocusDay = weeks => {
90
117
  const days = weeks.flatMap(week => week);
91
118
  return getFocusableTime({
92
- isActive: this.isActive,
119
+ isActive: this.isFocused,
93
120
  isNow: this.isToday,
94
- isDisabled: this.isDisabled,
121
+ isDisabled: this.isUnavailable,
95
122
  timeSpan: days
96
123
  });
97
124
  };
@@ -99,7 +126,8 @@ class DayCalendarTable extends PureComponent {
99
126
  const {
100
127
  viewMonth,
101
128
  viewYear,
102
- intl
129
+ intl,
130
+ disabledReasonId
103
131
  } = this.props;
104
132
  const weeks = this.getTableStructure();
105
133
  const autoFocusDay = this.getAutofocusDay(weeks);
@@ -126,20 +154,26 @@ class DayCalendarTable extends PureComponent {
126
154
  })
127
155
  }), /*#__PURE__*/jsx("tbody", {
128
156
  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))
157
+ children: week.map((day, dayIndex) => {
158
+ const dayOutOfRange = this.isOutOfRange(day);
159
+ const dayDisabled = this.isDisabled(day);
160
+ return /*#__PURE__*/jsx("td", {
161
+ className: dayIndex > 4 ? 'weekend' : '',
162
+ children: day !== -1 && /*#__PURE__*/jsx(TableLink, {
163
+ item: day,
164
+ type: "day",
165
+ title: formatDate(new Date(viewYear, viewMonth, day), intl.locale, SHORT_DAY_FORMAT),
166
+ autofocus: day === autoFocusDay,
167
+ longTitle: formatDate(new Date(viewYear, viewMonth, day), intl.locale, LONG_DAY_FORMAT),
168
+ active: this.isActive(day),
169
+ outOfRange: dayOutOfRange,
170
+ disabled: dayDisabled,
171
+ today: this.isToday(day),
172
+ disabledReasonId: disabledReasonId,
173
+ onClick: this.selectDay
174
+ })
175
+ }, dayIndex);
176
+ })
143
177
  }, weekIndex))
144
178
  })]
145
179
  });
@@ -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, isDateDisabled } from '../../../common/DateUtils';\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' };\nconst LONG_DAY_FORMAT: Intl.DateTimeFormatOptions = {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n};\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 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 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 } = 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 onClick={this.selectDay}\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","LONG_DAY_FORMAT","month","year","DayCalendarTable","PureComponent","getTableStructure","viewMonth","viewYear","props","firstDayOfMonth","Date","getDay","daysInMonth","getDate","week","weeks","i","push","length","days","getDayNames","intl","locale","daysShort","daysLong","selectDay","onSelect","isOutOfRange","min","max","date","isWithinRange","isDisabled","disabledRules","isDateDisabled","isUnavailable","isActive","selectedDate","Number","isFocused","focusedDate","isToday","getStartOfDay","getAutofocusDay","flatMap","getFocusableTime","isNow","timeSpan","render","disabledReasonId","autoFocusDay","_jsxs","className","children","_jsx","map","index","title","slice","weekIndex","dayIndex","dayOutOfRange","dayDisabled","TableLink","item","type","formatDate","autofocus","longTitle","active","outOfRange","disabled","today","onClick","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
@@ -1 +1 @@
1
- {"version":3,"file":"MonthCalendarTable.mjs","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.mjs","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":";;;;;;AAgBA,MAAMA,IAAI,GAAG,CAAC;AACd,MAAMC,IAAI,GAAG,CAAC;AACd,MAAMC,iBAAiB,GAA+B;AAAEC,EAAAA,KAAK,EAAE;CAAS;AAExE,MAAMC,kBAAkB,GAAGA,CAAC;EAC1BC,YAAY;EACZC,WAAW;EACXC,GAAG;EACHC,GAAG;EACHC,QAAQ;EACRC,WAAW;AACXC,EAAAA;AAAQ,CACgB,KAAI;EAC5B,MAAM;AAAEC,IAAAA;GAAQ,GAAGC,OAAO,EAAE;EAE5B,MAAMC,OAAO,GAAIX,KAAa,IAAI;IAChC,oBACEY,GAAA,CAACC,SAAS,EAAA;AACRC,MAAAA,IAAI,EAAEd,KAAM;AACZe,MAAAA,IAAI,EAAC,OAAO;AACZC,MAAAA,KAAK,EAAEC,UAAU,CAAC,IAAIC,IAAI,CAACZ,QAAQ,EAAEN,KAAK,CAAC,EAAES,MAAM,EAAEV,iBAAiB,CAAE;AACxEoB,MAAAA,MAAM,EAAEC,QAAQ,CAACpB,KAAK,CAAE;AACxBqB,MAAAA,UAAU,EAAEC,UAAU,CAACtB,KAAK,CAAE;AAC9BuB,MAAAA,QAAQ,EAAE,KAAM;MAChBC,KAAK,EAAElB,QAAQ,KAAK,IAAIY,IAAI,EAAE,CAACO,WAAW,EAAE,IAAIzB,KAAK,KAAK,IAAIkB,IAAI,EAAE,CAACQ,QAAQ,EAAG;MAChFC,SAAS,EAAEC,cAAc,KAAK5B,KAAM;AACpC6B,MAAAA,OAAO,EAAErB;AAAS,KAAA,CAClB;EAEN,CAAC;EAED,MAAMY,QAAQ,GAAIpB,KAAa,IAAI;AACjC,IAAA,OAAO,CAAC,EAAEA,KAAK,KAAKE,YAAY,EAAEwB,QAAQ,EAAE,IAAIpB,QAAQ,KAAKJ,YAAY,EAAEuB,WAAW,EAAE,CAAC;EAC3F,CAAC;EAED,MAAMK,SAAS,GAAI9B,KAAa,IAAI;AAClC,IAAA,OAAO,CAAC,EAAEA,KAAK,KAAKG,WAAW,EAAEuB,QAAQ,EAAE,IAAIpB,QAAQ,KAAKH,WAAW,EAAEsB,WAAW,EAAE,CAAC;EACzF,CAAC;EAED,MAAMM,WAAW,GAAI/B,KAAa,IAAI;IACpC,OAAOM,QAAQ,KAAK,IAAIY,IAAI,EAAE,CAACO,WAAW,EAAE,IAAIzB,KAAK,KAAK,IAAIkB,IAAI,EAAE,CAACQ,QAAQ,EAAE;EACjF,CAAC;EAED,MAAMJ,UAAU,GAAItB,KAAa,IAAI;IACnC,MAAMgC,IAAI,GAAG,IAAId,IAAI,CAACZ,QAAQ,EAAEN,KAAK,CAAC;AACtC,IAAA,OAAO,CAAC,EACLI,GAAG,IAAI4B,IAAI,GAAG,IAAId,IAAI,CAACd,GAAG,CAACqB,WAAW,EAAE,EAAErB,GAAG,CAACsB,QAAQ,EAAE,CAAC,IACzDrB,GAAG,IAAI2B,IAAI,GAAG,IAAId,IAAI,CAACb,GAAG,CAACoB,WAAW,EAAE,EAAEpB,GAAG,CAACqB,QAAQ,EAAE,CAAE,CAC5D;EACH,CAAC;EAED,MAAME,cAAc,GAAG,CAAC,MAAK;AAC3B,IAAA,MAAMK,MAAM,GAAGC,KAAK,CAACC,IAAI,CAAC;MAAEC,MAAM,EAAEvC,IAAI,GAAGC;AAAI,KAAE,EAAE,CAACuC,CAAC,EAAEC,KAAK,KAAKA,KAAK,CAAC;AACvE,IAAA,OAAOC,gBAAgB,CAAC;AACtBnB,MAAAA,QAAQ,EAAEU,SAAS;AACnBU,MAAAA,KAAK,EAAET,WAAW;MAClBT,UAAU;AACVmB,MAAAA,QAAQ,EAAER;AACX,KAAA,CAAC;AACJ,EAAA,CAAC,GAAG;AAEJ,EAAA,oBACES,IAAA,CAAA,OAAA,EAAA;AAAOC,IAAAA,SAAS,EAAC,8FAA8F;AAAAC,IAAAA,QAAA,gBAC7GhC,GAAA,CAAA,OAAA,EAAA;AAAO+B,MAAAA,SAAS,EAAC,SAAS;AAAAC,MAAAA,QAAA,eACxBhC,GAAA,CAAA,IAAA,EAAA;AAAAgC,QAAAA,QAAA,eACEhC,GAAA,CAAA,IAAA,EAAA;AAAIiC,UAAAA,OAAO,EAAE/C,IAAK;AAAA8C,UAAAA,QAAA,EAAErC;SAAgB;OAClC;KACC,CACP,eAAAK,GAAA,CAAA,OAAA,EAAA;AAAAgC,MAAAA,QAAA,EACGV,KAAK,CAACC,IAAI,CAAC;AAAEC,QAAAA,MAAM,EAAEvC;AAAI,OAAE,EAAE,CAACwC,CAAC,EAAES,QAAQ,kBACxClC,GAAA,CAAA,IAAA,EAAA;AAAAgC,QAAAA,QAAA,EACGV,KAAK,CAACC,IAAI,CAAC;AAAEC,UAAAA,MAAM,EAAEtC;AAAI,SAAE,EAAE,CAACuC,CAAC,EAAEU,QAAQ,kBACxCnC,GAAA,CAAA,IAAA,EAAA;AAAAgC,UAAAA,QAAA,EAAoBjC,OAAO,CAACmC,QAAQ,GAAGhD,IAAI,GAAGiD,QAAQ;AAAC,SAAA,EAA9CA,QAAmD,CAC7D;AAAC,OAAA,EAHKD,QAIL,CACL;AAAC,KACG,CACT;AAAA,GAAO,CAAC;AAEZ;;;;"}
@@ -6,6 +6,7 @@ var clsx = require('clsx');
6
6
  var React = require('react');
7
7
  var reactIntl = require('react-intl');
8
8
  var Calendar_messages = require('../Calendar.messages.js');
9
+ var SentimentSurface = require('../../SentimentSurface/SentimentSurface.js');
9
10
  var jsxRuntime = require('react/jsx-runtime');
10
11
 
11
12
  const TableLink = ({
@@ -14,9 +15,11 @@ const TableLink = ({
14
15
  title,
15
16
  longTitle,
16
17
  active,
18
+ outOfRange,
17
19
  disabled,
18
20
  today,
19
21
  autofocus,
22
+ disabledReasonId,
20
23
  onClick
21
24
  }) => {
22
25
  const buttonRef = React.useRef(null);
@@ -30,28 +33,40 @@ const TableLink = ({
30
33
  }, [autofocus]);
31
34
  const onCalendarClick = event => {
32
35
  event.preventDefault();
33
- if (!disabled) {
34
- onClick(item);
35
- }
36
+ onClick(item);
36
37
  };
38
+ const isUnavailable = outOfRange || disabled;
37
39
  const calculateAriaLabel = () => {
40
+ let label = longTitle || title || '';
38
41
  if (active) {
39
- return `${longTitle || title || ''}, ${intl.formatMessage(Calendar_messages.default.selected)} ${intl.formatMessage(Calendar_messages.default[type])}`;
42
+ label += `, ${intl.formatMessage(Calendar_messages.default.selected)} ${intl.formatMessage(Calendar_messages.default[type])}`;
43
+ }
44
+ if (isUnavailable) {
45
+ label += `, ${intl.formatMessage(Calendar_messages.default.notAvailable)}`;
40
46
  }
41
- return longTitle || title;
47
+ return label;
42
48
  };
43
- return /*#__PURE__*/jsxRuntime.jsx("button", {
49
+ return /*#__PURE__*/jsxRuntime.jsx(SentimentSurface.default
50
+ // @ts-expect-error - Generic forwardRef limitation in SentimentSurface
51
+ , {
44
52
  ref: buttonRef,
45
- type: "button",
46
- className: clsx.clsx(`tw-date-lookup-${type}-option np-text-body-default-bold`, {
53
+ as: "button",
54
+ "data-calendar-cell": true,
55
+ "aria-describedby": isUnavailable ? disabledReasonId : undefined,
56
+ "aria-disabled": isUnavailable || undefined,
57
+ "aria-label": calculateAriaLabel(),
58
+ "aria-pressed": active,
59
+ className: clsx.clsx(`wds-Calendar__option--${type}`, `tw-date-lookup-${type}-option np-text-body-default-bold`, {
47
60
  active: !!active
48
61
  }, {
49
62
  today: !!today
63
+ }, {
64
+ disabled: !!isUnavailable
50
65
  }),
51
- disabled: disabled,
66
+ hasBaseStyles: false,
67
+ sentiment: isUnavailable ? 'negative' : 'neutral',
52
68
  tabIndex: autofocus ? 0 : -1,
53
- "aria-label": calculateAriaLabel(),
54
- "aria-pressed": active,
69
+ type: "button",
55
70
  onClick: onCalendarClick,
56
71
  children: title || item
57
72
  });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableLink.js","sources":["../../../src/Calendar/TableLink/TableLink.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useEffect, useRef } from 'react';\nimport { useIntl } from 'react-intl';\n\nimport messages from '../Calendar.messages';\nimport SentimentSurface from '../../SentimentSurface';\n\ninterface TableLinkProps {\n item: number;\n type: 'day' | 'month' | 'year';\n title?: string;\n longTitle?: string;\n active: boolean;\n outOfRange: boolean;\n disabled: boolean;\n today: boolean;\n autofocus?: boolean;\n disabledReasonId?: string;\n onClick: (item: number) => void;\n}\n\nconst TableLink = ({\n item,\n type,\n title,\n longTitle,\n active,\n outOfRange,\n disabled,\n today,\n autofocus,\n disabledReasonId,\n onClick,\n}: TableLinkProps) => {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const intl = useIntl();\n\n useEffect(() => {\n if (autofocus) {\n setTimeout(() => {\n buttonRef.current?.focus();\n }, 0);\n }\n }, [autofocus]);\n\n const onCalendarClick = (event: React.MouseEvent) => {\n event.preventDefault();\n onClick(item);\n };\n\n const isUnavailable = outOfRange || disabled;\n\n const calculateAriaLabel = () => {\n let label = longTitle || title || '';\n if (active) {\n label += `, ${intl.formatMessage(messages.selected)} ${intl.formatMessage(messages[type])}`;\n }\n if (isUnavailable) {\n label += `, ${intl.formatMessage(messages.notAvailable)}`;\n }\n return label;\n };\n\n return (\n <SentimentSurface\n // @ts-expect-error - Generic forwardRef limitation in SentimentSurface\n ref={buttonRef}\n as=\"button\"\n data-calendar-cell\n aria-describedby={isUnavailable ? disabledReasonId : undefined}\n aria-disabled={isUnavailable || undefined}\n aria-label={calculateAriaLabel()}\n aria-pressed={active}\n className={clsx(\n `wds-Calendar__option--${type}`,\n `tw-date-lookup-${type}-option np-text-body-default-bold`,\n { active: !!active },\n { today: !!today },\n { disabled: !!isUnavailable },\n )}\n hasBaseStyles={false}\n sentiment={isUnavailable ? 'negative' : 'neutral'}\n tabIndex={autofocus ? 0 : -1}\n type=\"button\"\n onClick={onCalendarClick}\n >\n {title || item}\n </SentimentSurface>\n );\n};\n\nexport default TableLink;\n"],"names":["TableLink","item","type","title","longTitle","active","outOfRange","disabled","today","autofocus","disabledReasonId","onClick","buttonRef","useRef","intl","useIntl","useEffect","setTimeout","current","focus","onCalendarClick","event","preventDefault","isUnavailable","calculateAriaLabel","label","formatMessage","messages","selected","notAvailable","_jsx","SentimentSurface","ref","as","undefined","className","clsx","hasBaseStyles","sentiment","tabIndex","children"],"mappings":";;;;;;;;;;;AAqBA,MAAMA,SAAS,GAAGA,CAAC;EACjBC,IAAI;EACJC,IAAI;EACJC,KAAK;EACLC,SAAS;EACTC,MAAM;EACNC,UAAU;EACVC,QAAQ;EACRC,KAAK;EACLC,SAAS;EACTC,gBAAgB;AAChBC,EAAAA;AAAO,CACQ,KAAI;AACnB,EAAA,MAAMC,SAAS,GAAGC,YAAM,CAAoB,IAAI,CAAC;AACjD,EAAA,MAAMC,IAAI,GAAGC,iBAAO,EAAE;AAEtBC,EAAAA,eAAS,CAAC,MAAK;AACb,IAAA,IAAIP,SAAS,EAAE;AACbQ,MAAAA,UAAU,CAAC,MAAK;AACdL,QAAAA,SAAS,CAACM,OAAO,EAAEC,KAAK,EAAE;MAC5B,CAAC,EAAE,CAAC,CAAC;AACP,IAAA;AACF,EAAA,CAAC,EAAE,CAACV,SAAS,CAAC,CAAC;EAEf,MAAMW,eAAe,GAAIC,KAAuB,IAAI;IAClDA,KAAK,CAACC,cAAc,EAAE;IACtBX,OAAO,CAACV,IAAI,CAAC;EACf,CAAC;AAED,EAAA,MAAMsB,aAAa,GAAGjB,UAAU,IAAIC,QAAQ;EAE5C,MAAMiB,kBAAkB,GAAGA,MAAK;AAC9B,IAAA,IAAIC,KAAK,GAAGrB,SAAS,IAAID,KAAK,IAAI,EAAE;AACpC,IAAA,IAAIE,MAAM,EAAE;MACVoB,KAAK,IAAI,KAAKX,IAAI,CAACY,aAAa,CAACC,yBAAQ,CAACC,QAAQ,CAAC,IAAId,IAAI,CAACY,aAAa,CAACC,yBAAQ,CAACzB,IAAI,CAAC,CAAC,CAAA,CAAE;AAC7F,IAAA;AACA,IAAA,IAAIqB,aAAa,EAAE;MACjBE,KAAK,IAAI,CAAA,EAAA,EAAKX,IAAI,CAACY,aAAa,CAACC,yBAAQ,CAACE,YAAY,CAAC,CAAA,CAAE;AAC3D,IAAA;AACA,IAAA,OAAOJ,KAAK;EACd,CAAC;AAED,EAAA,oBACEK,cAAA,CAACC;AACC;AAAA,IAAA;AACAC,IAAAA,GAAG,EAAEpB,SAAU;AACfqB,IAAAA,EAAE,EAAC,QAAQ;IACX,oBAAA,EAAA,IAAkB;AAClB,IAAA,kBAAA,EAAkBV,aAAa,GAAGb,gBAAgB,GAAGwB,SAAU;IAC/D,eAAA,EAAeX,aAAa,IAAIW,SAAU;IAC1C,YAAA,EAAYV,kBAAkB,EAAG;AACjC,IAAA,cAAA,EAAcnB,MAAO;IACrB8B,SAAS,EAAEC,SAAI,CACb,CAAA,sBAAA,EAAyBlC,IAAI,EAAE,EAC/B,CAAA,eAAA,EAAkBA,IAAI,CAAA,iCAAA,CAAmC,EACzD;MAAEG,MAAM,EAAE,CAAC,CAACA;AAAM,KAAE,EACpB;MAAEG,KAAK,EAAE,CAAC,CAACA;AAAK,KAAE,EAClB;MAAED,QAAQ,EAAE,CAAC,CAACgB;AAAa,KAAE,CAC7B;AACFc,IAAAA,aAAa,EAAE,KAAM;AACrBC,IAAAA,SAAS,EAAEf,aAAa,GAAG,UAAU,GAAG,SAAU;AAClDgB,IAAAA,QAAQ,EAAE9B,SAAS,GAAG,CAAC,GAAG,EAAG;AAC7BP,IAAAA,IAAI,EAAC,QAAQ;AACbS,IAAAA,OAAO,EAAES,eAAgB;IAAAoB,QAAA,EAExBrC,KAAK,IAAIF;AAAI,GACE,CAAC;AAEvB;;;;"}
@@ -2,6 +2,7 @@ import { clsx } from 'clsx';
2
2
  import { useRef, useEffect } from 'react';
3
3
  import { useIntl } from 'react-intl';
4
4
  import messages from '../Calendar.messages.mjs';
5
+ import SentimentSurface from '../../SentimentSurface/SentimentSurface.mjs';
5
6
  import { jsx } from 'react/jsx-runtime';
6
7
 
7
8
  const TableLink = ({
@@ -10,9 +11,11 @@ const TableLink = ({
10
11
  title,
11
12
  longTitle,
12
13
  active,
14
+ outOfRange,
13
15
  disabled,
14
16
  today,
15
17
  autofocus,
18
+ disabledReasonId,
16
19
  onClick
17
20
  }) => {
18
21
  const buttonRef = useRef(null);
@@ -26,28 +29,40 @@ const TableLink = ({
26
29
  }, [autofocus]);
27
30
  const onCalendarClick = event => {
28
31
  event.preventDefault();
29
- if (!disabled) {
30
- onClick(item);
31
- }
32
+ onClick(item);
32
33
  };
34
+ const isUnavailable = outOfRange || disabled;
33
35
  const calculateAriaLabel = () => {
36
+ let label = longTitle || title || '';
34
37
  if (active) {
35
- return `${longTitle || title || ''}, ${intl.formatMessage(messages.selected)} ${intl.formatMessage(messages[type])}`;
38
+ label += `, ${intl.formatMessage(messages.selected)} ${intl.formatMessage(messages[type])}`;
39
+ }
40
+ if (isUnavailable) {
41
+ label += `, ${intl.formatMessage(messages.notAvailable)}`;
36
42
  }
37
- return longTitle || title;
43
+ return label;
38
44
  };
39
- return /*#__PURE__*/jsx("button", {
45
+ return /*#__PURE__*/jsx(SentimentSurface
46
+ // @ts-expect-error - Generic forwardRef limitation in SentimentSurface
47
+ , {
40
48
  ref: buttonRef,
41
- type: "button",
42
- className: clsx(`tw-date-lookup-${type}-option np-text-body-default-bold`, {
49
+ as: "button",
50
+ "data-calendar-cell": true,
51
+ "aria-describedby": isUnavailable ? disabledReasonId : undefined,
52
+ "aria-disabled": isUnavailable || undefined,
53
+ "aria-label": calculateAriaLabel(),
54
+ "aria-pressed": active,
55
+ className: clsx(`wds-Calendar__option--${type}`, `tw-date-lookup-${type}-option np-text-body-default-bold`, {
43
56
  active: !!active
44
57
  }, {
45
58
  today: !!today
59
+ }, {
60
+ disabled: !!isUnavailable
46
61
  }),
47
- disabled: disabled,
62
+ hasBaseStyles: false,
63
+ sentiment: isUnavailable ? 'negative' : 'neutral',
48
64
  tabIndex: autofocus ? 0 : -1,
49
- "aria-label": calculateAriaLabel(),
50
- "aria-pressed": active,
65
+ type: "button",
51
66
  onClick: onCalendarClick,
52
67
  children: title || item
53
68
  });