baseui 10.5.0 → 10.6.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 (77) hide show
  1. package/button/styled-components.js +1 -1
  2. package/button/styled-components.js.flow +4 -1
  3. package/datepicker/calendar-header.js +227 -95
  4. package/datepicker/calendar-header.js.flow +270 -139
  5. package/datepicker/constants.js +4 -2
  6. package/datepicker/constants.js.flow +2 -0
  7. package/datepicker/day.js +1 -0
  8. package/datepicker/day.js.flow +1 -0
  9. package/datepicker/index.d.ts +1 -0
  10. package/datepicker/types.js.flow +1 -0
  11. package/datepicker/utils/calendar-header-helpers.js +51 -0
  12. package/datepicker/utils/calendar-header-helpers.js.flow +53 -0
  13. package/dnd-list/index.js.flow +2 -1
  14. package/drawer/drawer.js +2 -1
  15. package/drawer/drawer.js.flow +1 -1
  16. package/es/button/styled-components.js +1 -1
  17. package/es/datepicker/calendar-header.js +184 -84
  18. package/es/datepicker/constants.js +2 -1
  19. package/es/datepicker/day.js +1 -0
  20. package/es/datepicker/utils/calendar-header-helpers.js +34 -0
  21. package/es/dnd-list/index.js +2 -1
  22. package/es/drawer/drawer.js +2 -1
  23. package/es/popover/stateful-container.js +4 -0
  24. package/es/rating/emoticon-rating.js +3 -1
  25. package/es/rating/star-rating.js +3 -1
  26. package/es/select/select-component.js +4 -5
  27. package/es/select/styled-components.js +34 -4
  28. package/es/snackbar/snackbar-context.js +16 -4
  29. package/es/table-semantic/styled-components.js +6 -4
  30. package/es/table-semantic/table-builder.js +3 -0
  31. package/es/themes/dark-theme/color-component-tokens.js +1 -1
  32. package/es/themes/light-theme/color-component-tokens.js +9 -9
  33. package/es/tooltip/styled-components.js +8 -0
  34. package/esm/button/styled-components.js +1 -1
  35. package/esm/datepicker/calendar-header.js +226 -95
  36. package/esm/datepicker/constants.js +2 -1
  37. package/esm/datepicker/day.js +1 -0
  38. package/esm/datepicker/utils/calendar-header-helpers.js +45 -0
  39. package/esm/dnd-list/index.js +2 -1
  40. package/esm/drawer/drawer.js +2 -1
  41. package/esm/popover/stateful-container.js +4 -0
  42. package/esm/rating/emoticon-rating.js +2 -2
  43. package/esm/rating/star-rating.js +2 -2
  44. package/esm/select/select-component.js +4 -5
  45. package/esm/select/styled-components.js +28 -4
  46. package/esm/snackbar/snackbar-context.js +16 -4
  47. package/esm/table-semantic/styled-components.js +6 -4
  48. package/esm/table-semantic/table-builder.js +3 -0
  49. package/esm/themes/dark-theme/color-component-tokens.js +1 -1
  50. package/esm/themes/light-theme/color-component-tokens.js +9 -9
  51. package/esm/tooltip/styled-components.js +8 -0
  52. package/link/index.d.ts +1 -0
  53. package/menu/index.d.ts +7 -0
  54. package/menu/types.js.flow +12 -0
  55. package/package.json +2 -2
  56. package/popover/stateful-container.js +4 -0
  57. package/popover/stateful-container.js.flow +3 -0
  58. package/rating/emoticon-rating.js +2 -2
  59. package/rating/emoticon-rating.js.flow +4 -1
  60. package/rating/star-rating.js +2 -2
  61. package/rating/star-rating.js.flow +4 -1
  62. package/select/select-component.js +4 -5
  63. package/select/select-component.js.flow +4 -5
  64. package/select/styled-components.js +28 -4
  65. package/select/styled-components.js.flow +30 -2
  66. package/snackbar/snackbar-context.js +15 -4
  67. package/snackbar/snackbar-context.js.flow +15 -3
  68. package/table-semantic/styled-components.js +6 -4
  69. package/table-semantic/styled-components.js.flow +6 -4
  70. package/table-semantic/table-builder.js +3 -0
  71. package/table-semantic/table-builder.js.flow +3 -0
  72. package/themes/dark-theme/color-component-tokens.js +1 -1
  73. package/themes/dark-theme/color-component-tokens.js.flow +1 -1
  74. package/themes/light-theme/color-component-tokens.js +9 -9
  75. package/themes/light-theme/color-component-tokens.js.flow +9 -9
  76. package/tooltip/styled-components.js +8 -0
  77. package/tooltip/styled-components.js.flow +8 -0
@@ -48,7 +48,7 @@ var BaseButton = (0, _index.styled)('button', function (_ref) {
48
48
  cursor: 'pointer',
49
49
  ':disabled': {
50
50
  cursor: 'not-allowed',
51
- backgroundColor: $theme.colors.buttonDisabledFill,
51
+ backgroundColor: $kind === _constants.KIND.minimal || $kind === _constants.KIND.tertiary ? 'transparent' : $theme.colors.buttonDisabledFill,
52
52
  color: $theme.colors.buttonDisabledText
53
53
  },
54
54
  marginLeft: 0,
@@ -46,7 +46,10 @@ export const BaseButton = styled<SharedStylePropsT>(
46
46
  cursor: 'pointer',
47
47
  ':disabled': {
48
48
  cursor: 'not-allowed',
49
- backgroundColor: $theme.colors.buttonDisabledFill,
49
+ backgroundColor:
50
+ $kind === KIND.minimal || $kind === KIND.tertiary
51
+ ? 'transparent'
52
+ : $theme.colors.buttonDisabledFill,
50
53
  color: $theme.colors.buttonDisabledText,
51
54
  },
52
55
  marginLeft: 0,
@@ -9,16 +9,18 @@ exports.default = void 0;
9
9
 
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
 
12
- var _arrowRight = _interopRequireDefault(require("../icon/arrow-right.js"));
12
+ var _chevronRight = _interopRequireDefault(require("../icon/chevron-right.js"));
13
13
 
14
- var _arrowLeft = _interopRequireDefault(require("../icon/arrow-left.js"));
14
+ var _chevronLeft = _interopRequireDefault(require("../icon/chevron-left.js"));
15
15
 
16
- var _triangleDown = _interopRequireDefault(require("../icon/triangle-down.js"));
16
+ var _chevronDown = _interopRequireDefault(require("../icon/chevron-down.js"));
17
17
 
18
18
  var _dateFnsAdapter = _interopRequireDefault(require("./utils/date-fns-adapter.js"));
19
19
 
20
20
  var _dateHelpers = _interopRequireDefault(require("./utils/date-helpers.js"));
21
21
 
22
+ var _calendarHeaderHelpers = require("./utils/calendar-header-helpers.js");
23
+
22
24
  var _index = require("../menu/index.js");
23
25
 
24
26
  var _index2 = require("../popover/index.js");
@@ -55,6 +57,10 @@ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(
55
57
 
56
58
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
57
59
 
60
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
61
+
62
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
63
+
58
64
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
59
65
 
60
66
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
@@ -93,10 +99,6 @@ var DIRECTION = {
93
99
  PREVIOUS: 'previous'
94
100
  };
95
101
 
96
- function yearMonthToId(year, month) {
97
- return "".concat(year, "-").concat(month);
98
- }
99
-
100
102
  function idToYearMonth(id) {
101
103
  return id.split('-').map(Number);
102
104
  }
@@ -115,14 +117,13 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
115
117
 
116
118
  _defineProperty(_assertThisInitialized(_this), "dateHelpers", void 0);
117
119
 
118
- _defineProperty(_assertThisInitialized(_this), "items", void 0);
120
+ _defineProperty(_assertThisInitialized(_this), "monthItems", void 0);
119
121
 
120
- _defineProperty(_assertThisInitialized(_this), "minYear", void 0);
121
-
122
- _defineProperty(_assertThisInitialized(_this), "maxYear", void 0);
122
+ _defineProperty(_assertThisInitialized(_this), "yearItems", void 0);
123
123
 
124
124
  _defineProperty(_assertThisInitialized(_this), "state", {
125
- isMonthYearDropdownOpen: false,
125
+ isMonthDropdownOpen: false,
126
+ isYearDropdownOpen: false,
126
127
  isFocusVisible: false
127
128
  });
128
129
 
@@ -130,17 +131,94 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
130
131
  return _this.props.date || _this.dateHelpers.date();
131
132
  });
132
133
 
133
- _defineProperty(_assertThisInitialized(_this), "handleYearChange", function (_ref2) {
134
- var value = _ref2.value;
134
+ _defineProperty(_assertThisInitialized(_this), "getYearItems", function () {
135
+ var date = _this.getDateProp();
135
136
 
136
- if (_this.props.onYearChange) {
137
- // $FlowFixMe
138
- _this.props.onYearChange({
139
- date: _this.dateHelpers.setYear(_this.getDateProp(), value[0].id)
137
+ var maxDate = _this.props.maxDate;
138
+ var minDate = _this.props.minDate;
139
+ var maxYear = maxDate ? _this.dateHelpers.getYear(maxDate) : MAX_YEAR;
140
+ var minYear = minDate ? _this.dateHelpers.getYear(minDate) : MIN_YEAR;
141
+
142
+ var selectedMonth = _this.dateHelpers.getMonth(date); // TODO: this logic can be optimized to only run when minDate / maxDate change
143
+
144
+
145
+ _this.yearItems = Array.from({
146
+ length: maxYear - minYear + 1
147
+ }, function (_, i) {
148
+ return minYear + i;
149
+ }).map(function (year) {
150
+ return {
151
+ id: year.toString(),
152
+ label: year.toString()
153
+ };
154
+ });
155
+ var monthOfMaxDate = maxDate ? _this.dateHelpers.getMonth(maxDate) : MAX_MONTH;
156
+ var monthOfMinDate = minDate ? _this.dateHelpers.getMonth(minDate) : MIN_MONTH; // Generates array like [0,1,.... monthOfMaxDate]
157
+
158
+ var maxYearMonths = Array.from({
159
+ length: monthOfMaxDate + 1
160
+ }, function (x, i) {
161
+ return i;
162
+ }); // Generates array like [monthOfMinDate, ...., 10, 11]
163
+
164
+ var minYearMonths = Array.from({
165
+ length: 12 - monthOfMinDate
166
+ }, function (x, i) {
167
+ return i + monthOfMinDate;
168
+ });
169
+
170
+ if (selectedMonth > maxYearMonths[maxYearMonths.length - 1]) {
171
+ var lastIdx = _this.yearItems.length - 1;
172
+ _this.yearItems[lastIdx] = _objectSpread(_objectSpread({}, _this.yearItems[lastIdx]), {}, {
173
+ disabled: true
174
+ });
175
+ }
176
+
177
+ if (selectedMonth < minYearMonths[0]) {
178
+ _this.yearItems[0] = _objectSpread(_objectSpread({}, _this.yearItems[0]), {}, {
179
+ disabled: true
140
180
  });
141
181
  }
142
182
  });
143
183
 
184
+ _defineProperty(_assertThisInitialized(_this), "getMonthItems", function () {
185
+ var date = _this.getDateProp();
186
+
187
+ var year = _this.dateHelpers.getYear(date);
188
+
189
+ var maxDate = _this.props.maxDate;
190
+ var minDate = _this.props.minDate;
191
+ var maxYear = maxDate ? _this.dateHelpers.getYear(maxDate) : MAX_YEAR;
192
+ var minYear = minDate ? _this.dateHelpers.getYear(minDate) : MIN_YEAR;
193
+ var monthOfMaxDate = maxDate ? _this.dateHelpers.getMonth(maxDate) : MAX_MONTH; // Generates array like [0,1,.... monthOfMaxDate]
194
+
195
+ var maxYearMonths = Array.from({
196
+ length: monthOfMaxDate + 1
197
+ }, function (x, i) {
198
+ return i;
199
+ });
200
+ var monthOfMinDate = minDate ? _this.dateHelpers.getMonth(minDate) : MIN_MONTH; // Generates array like [monthOfMinDate, ...., 10, 11]
201
+
202
+ var minYearMonths = Array.from({
203
+ length: 12 - monthOfMinDate
204
+ }, function (x, i) {
205
+ return i + monthOfMinDate;
206
+ });
207
+ var maxMinYearMonthsIntersection = maxYearMonths.filter(function (year) {
208
+ return minYearMonths.includes(year);
209
+ });
210
+ var filterMonthsList = year === maxYear && year === minYear ? maxMinYearMonthsIntersection : year === maxYear ? maxYearMonths : year === minYear ? minYearMonths : null;
211
+
212
+ var formatMonthLabel = function formatMonthLabel(month) {
213
+ return _this.dateHelpers.getMonthInLocale(month, _this.props.locale);
214
+ };
215
+
216
+ _this.monthItems = (0, _calendarHeaderHelpers.getFilteredMonthItems)({
217
+ filterMonthsList: filterMonthsList,
218
+ formatMonthLabel: formatMonthLabel
219
+ });
220
+ });
221
+
144
222
  _defineProperty(_assertThisInitialized(_this), "increaseMonth", function () {
145
223
  if (_this.props.onMonthChange) {
146
224
  // $FlowFixMe
@@ -208,9 +286,9 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
208
286
  }
209
287
  });
210
288
 
211
- _defineProperty(_assertThisInitialized(_this), "renderPreviousMonthButton", function (_ref3) {
212
- var locale = _ref3.locale,
213
- theme = _ref3.theme;
289
+ _defineProperty(_assertThisInitialized(_this), "renderPreviousMonthButton", function (_ref2) {
290
+ var locale = _ref2.locale,
291
+ theme = _ref2.theme;
214
292
 
215
293
  var date = _this.getDateProp();
216
294
 
@@ -244,7 +322,7 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
244
322
  PrevButton = _getOverrides2[0],
245
323
  prevButtonProps = _getOverrides2[1];
246
324
 
247
- var _getOverrides3 = (0, _overrides.getOverrides)(overrides.PrevButtonIcon, theme.direction === 'rtl' ? _arrowRight.default : _arrowLeft.default),
325
+ var _getOverrides3 = (0, _overrides.getOverrides)(overrides.PrevButtonIcon, theme.direction === 'rtl' ? _chevronRight.default : _chevronLeft.default),
248
326
  _getOverrides4 = _slicedToArray(_getOverrides3, 2),
249
327
  PrevButtonIcon = _getOverrides4[0],
250
328
  prevButtonIconProps = _getOverrides4[1];
@@ -274,9 +352,9 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
274
352
  }, prevButtonIconProps)));
275
353
  });
276
354
 
277
- _defineProperty(_assertThisInitialized(_this), "renderNextMonthButton", function (_ref4) {
278
- var locale = _ref4.locale,
279
- theme = _ref4.theme;
355
+ _defineProperty(_assertThisInitialized(_this), "renderNextMonthButton", function (_ref3) {
356
+ var locale = _ref3.locale,
357
+ theme = _ref3.theme;
280
358
 
281
359
  var date = _this.getDateProp();
282
360
 
@@ -310,7 +388,7 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
310
388
  NextButton = _getOverrides6[0],
311
389
  nextButtonProps = _getOverrides6[1];
312
390
 
313
- var _getOverrides7 = (0, _overrides.getOverrides)(overrides.NextButtonIcon, theme.direction === 'rtl' ? _arrowLeft.default : _arrowRight.default),
391
+ var _getOverrides7 = (0, _overrides.getOverrides)(overrides.NextButtonIcon, theme.direction === 'rtl' ? _chevronLeft.default : _chevronRight.default),
314
392
  _getOverrides8 = _slicedToArray(_getOverrides7, 2),
315
393
  NextButtonIcon = _getOverrides8[0],
316
394
  nextButtonIconProps = _getOverrides8[1];
@@ -345,7 +423,7 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
345
423
  });
346
424
 
347
425
  _defineProperty(_assertThisInitialized(_this), "canArrowsOpenDropdown", function (event) {
348
- if (!_this.state.isMonthYearDropdownOpen) {
426
+ if (!_this.state.isMonthDropdownOpen && !_this.state.isYearDropdownOpen) {
349
427
  if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
350
428
  return true;
351
429
  }
@@ -357,10 +435,12 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
357
435
  _defineProperty(_assertThisInitialized(_this), "renderMonthYearDropdown", function () {
358
436
  var date = _this.getDateProp();
359
437
 
438
+ var month = _this.dateHelpers.getMonth(date);
439
+
440
+ var year = _this.dateHelpers.getYear(date);
441
+
360
442
  var _this$props3 = _this.props,
361
443
  locale = _this$props3.locale,
362
- maxDate = _this$props3.maxDate,
363
- minDate = _this$props3.minDate,
364
444
  _this$props3$override = _this$props3.overrides,
365
445
  overrides = _this$props3$override === void 0 ? {} : _this$props3$override;
366
446
 
@@ -395,115 +475,144 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
395
475
  menuProps && menuProps.overrides); // $FlowFixMe
396
476
 
397
477
  menuProps.overrides = menuOverrides;
398
- var defaultMonths = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
399
- var maxYear = maxDate ? _this.dateHelpers.getYear(maxDate) : MAX_YEAR;
400
- var minYear = minDate ? _this.dateHelpers.getYear(minDate) : MIN_YEAR;
401
- var maxDateMonth = maxDate ? _this.dateHelpers.getMonth(maxDate) : MAX_MONTH; // Generates array like [0,1,.... maxDateMonth]
402
478
 
403
- var maxYearMonths = Array.from({
404
- length: maxDateMonth + 1
405
- }, function (x, i) {
406
- return i;
479
+ var initialMonthIndex = _this.monthItems.findIndex(function (month) {
480
+ return month.id === _this.dateHelpers.getMonth(date).toString();
407
481
  });
408
- var minDateMonth = minDate ? _this.dateHelpers.getMonth(minDate) : MIN_MONTH; // Generates array like [minDateMonth, ...., 10, 11]
409
482
 
410
- var minYearMonths = Array.from({
411
- length: 12 - minDateMonth
412
- }, function (x, i) {
413
- return i + minDateMonth;
483
+ var initialYearIndex = _this.yearItems.findIndex(function (year) {
484
+ return year.id === _this.dateHelpers.getYear(date).toString();
414
485
  });
415
486
 
416
- if (_this.maxYear !== maxYear || _this.minYear !== minYear) {
417
- _this.maxYear = maxYear;
418
- _this.minYear = minYear;
419
- _this.items = [];
487
+ var monthTitle = "".concat(_this.dateHelpers.getMonthInLocale(_this.dateHelpers.getMonth(date), locale));
488
+ var yearTitle = "".concat(_this.dateHelpers.getYear(date));
489
+ return _this.isMultiMonthHorizontal() ? /*#__PURE__*/React.createElement("div", null, "".concat(monthTitle, " ").concat(yearTitle)) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(OverriddenPopover, _extends({
490
+ placement: "bottom",
491
+ autoFocus: true,
492
+ focusLock: true,
493
+ isOpen: _this.state.isMonthDropdownOpen,
494
+ onClick: function onClick() {
495
+ _this.setState(function (prev) {
496
+ return {
497
+ isMonthDropdownOpen: !prev.isMonthDropdownOpen
498
+ };
499
+ });
500
+ },
501
+ onClickOutside: function onClickOutside() {
502
+ return _this.setState({
503
+ isMonthDropdownOpen: false
504
+ });
505
+ },
506
+ onEsc: function onEsc() {
507
+ return _this.setState({
508
+ isMonthDropdownOpen: false
509
+ });
510
+ },
511
+ content: function content() {
512
+ return /*#__PURE__*/React.createElement(OverriddenStatefulMenu, _extends({
513
+ initialState: {
514
+ highlightedIndex: initialMonthIndex,
515
+ isFocused: true
516
+ },
517
+ items: _this.monthItems,
518
+ onItemSelect: function onItemSelect(_ref4) {
519
+ var item = _ref4.item,
520
+ event = _ref4.event;
521
+ event.preventDefault();
522
+ var month = idToYearMonth(item.id);
523
+
524
+ var updatedDate = _this.dateHelpers.set(date, {
525
+ year: year,
526
+ month: month
527
+ });
420
528
 
421
- var _loop = function _loop(i) {
422
- var months = void 0;
529
+ _this.props.onMonthChange && _this.props.onMonthChange({
530
+ date: updatedDate
531
+ });
423
532
 
424
- if (i === minYear && i === maxYear) {
425
- months = maxYearMonths.filter(function (month) {
426
- return minYearMonths.includes(month);
533
+ _this.setState({
534
+ isMonthDropdownOpen: false
535
+ });
536
+ }
537
+ }, menuProps));
538
+ }
539
+ }, popoverProps), /*#__PURE__*/React.createElement(MonthYearSelectButton, _extends({
540
+ "aria-live": "polite",
541
+ type: "button",
542
+ $isFocusVisible: _this.state.isFocusVisible,
543
+ onKeyUp: function onKeyUp(event) {
544
+ if (_this.canArrowsOpenDropdown(event)) {
545
+ _this.setState({
546
+ isMonthDropdownOpen: true
427
547
  });
428
- } else if (i === minYear) {
429
- months = minYearMonths;
430
- } else if (i === maxYear) {
431
- months = maxYearMonths;
432
- } else {
433
- months = defaultMonths;
548
+ }
549
+ },
550
+ onKeyDown: function onKeyDown(event) {
551
+ if (_this.canArrowsOpenDropdown(event)) {
552
+ // disables page scroll
553
+ event.preventDefault();
434
554
  }
435
555
 
436
- months.forEach(function (month) {
437
- _this.items.push({
438
- id: yearMonthToId(i, month),
439
- label: "".concat(_this.dateHelpers.getMonthInLocale(month, locale), " ").concat(i)
556
+ if (event.key === 'Tab') {
557
+ _this.setState({
558
+ isMonthDropdownOpen: false
440
559
  });
441
- });
442
- };
443
-
444
- for (var i = minYear; i <= maxYear; i++) {
445
- _loop(i);
560
+ }
446
561
  }
447
- }
448
-
449
- var initialIndex = _this.items.findIndex(function (item) {
450
- return item.id === yearMonthToId(_this.dateHelpers.getYear(date), _this.dateHelpers.getMonth(date));
451
- });
452
-
453
- var monthYearTitle = "".concat(_this.dateHelpers.getMonthInLocale(_this.dateHelpers.getMonth(date), locale), " ").concat(_this.dateHelpers.getYear(date));
454
- return _this.isMultiMonthHorizontal() ? /*#__PURE__*/React.createElement("div", null, monthYearTitle) : /*#__PURE__*/React.createElement(OverriddenPopover, _extends({
562
+ }, monthYearSelectButtonProps), monthTitle, /*#__PURE__*/React.createElement(MonthYearSelectIconContainer, monthYearSelectIconContainerProps, /*#__PURE__*/React.createElement(_chevronDown.default, {
563
+ title: "",
564
+ overrides: {
565
+ Svg: {
566
+ props: {
567
+ role: 'presentation'
568
+ }
569
+ }
570
+ }
571
+ })))), /*#__PURE__*/React.createElement(OverriddenPopover, _extends({
455
572
  placement: "bottom",
456
- autoFocus: true,
457
573
  focusLock: true,
458
- isOpen: _this.state.isMonthYearDropdownOpen,
574
+ isOpen: _this.state.isYearDropdownOpen,
459
575
  onClick: function onClick() {
460
576
  _this.setState(function (prev) {
461
577
  return {
462
- isMonthYearDropdownOpen: !prev.isMonthYearDropdownOpen
578
+ isYearDropdownOpen: !prev.isYearDropdownOpen
463
579
  };
464
580
  });
465
581
  },
466
582
  onClickOutside: function onClickOutside() {
467
583
  return _this.setState({
468
- isMonthYearDropdownOpen: false
584
+ isYearDropdownOpen: false
469
585
  });
470
586
  },
471
587
  onEsc: function onEsc() {
472
588
  return _this.setState({
473
- isMonthYearDropdownOpen: false
589
+ isYearDropdownOpen: false
474
590
  });
475
591
  },
476
592
  content: function content() {
477
593
  return /*#__PURE__*/React.createElement(OverriddenStatefulMenu, _extends({
478
594
  initialState: {
479
- highlightedIndex: initialIndex,
595
+ highlightedIndex: initialYearIndex,
480
596
  isFocused: true
481
597
  },
482
- items: _this.items,
598
+ items: _this.yearItems,
483
599
  onItemSelect: function onItemSelect(_ref5) {
484
600
  var item = _ref5.item,
485
601
  event = _ref5.event;
486
602
  event.preventDefault();
487
-
488
- var _idToYearMonth = idToYearMonth(item.id),
489
- _idToYearMonth2 = _slicedToArray(_idToYearMonth, 2),
490
- year = _idToYearMonth2[0],
491
- month = _idToYearMonth2[1];
603
+ var year = idToYearMonth(item.id);
492
604
 
493
605
  var updatedDate = _this.dateHelpers.set(date, {
494
606
  year: year,
495
607
  month: month
496
608
  });
497
609
 
498
- _this.props.onMonthChange && _this.props.onMonthChange({
499
- date: updatedDate
500
- });
501
610
  _this.props.onYearChange && _this.props.onYearChange({
502
611
  date: updatedDate
503
612
  });
504
613
 
505
614
  _this.setState({
506
- isMonthYearDropdownOpen: false
615
+ isYearDropdownOpen: false
507
616
  });
508
617
  }
509
618
  }, menuProps));
@@ -515,7 +624,7 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
515
624
  onKeyUp: function onKeyUp(event) {
516
625
  if (_this.canArrowsOpenDropdown(event)) {
517
626
  _this.setState({
518
- isMonthYearDropdownOpen: true
627
+ isYearDropdownOpen: true
519
628
  });
520
629
  }
521
630
  },
@@ -527,11 +636,11 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
527
636
 
528
637
  if (event.key === 'Tab') {
529
638
  _this.setState({
530
- isMonthYearDropdownOpen: false
639
+ isYearDropdownOpen: false
531
640
  });
532
641
  }
533
642
  }
534
- }, monthYearSelectButtonProps), monthYearTitle, /*#__PURE__*/React.createElement(MonthYearSelectIconContainer, monthYearSelectIconContainerProps, /*#__PURE__*/React.createElement(_triangleDown.default, {
643
+ }, monthYearSelectButtonProps), yearTitle, /*#__PURE__*/React.createElement(MonthYearSelectIconContainer, monthYearSelectIconContainerProps, /*#__PURE__*/React.createElement(_chevronDown.default, {
535
644
  title: "",
536
645
  overrides: {
537
646
  Svg: {
@@ -540,15 +649,38 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
540
649
  }
541
650
  }
542
651
  }
543
- }))));
652
+ })))));
544
653
  });
545
654
 
546
655
  _this.dateHelpers = new _dateHelpers.default(props.adapter);
547
- _this.items = [];
656
+ _this.monthItems = [];
657
+ _this.yearItems = [];
548
658
  return _this;
549
659
  }
550
660
 
551
661
  _createClass(CalendarHeader, [{
662
+ key: "componentDidMount",
663
+ value: function componentDidMount() {
664
+ this.getYearItems();
665
+ this.getMonthItems();
666
+ }
667
+ }, {
668
+ key: "componentDidUpdate",
669
+ value: function componentDidUpdate(prevProps) {
670
+ var selectedMonthDidChange = this.dateHelpers.getMonth(this.props.date) !== this.dateHelpers.getMonth(prevProps.date);
671
+ var selectedYearDidChange = this.dateHelpers.getYear(this.props.date) !== this.dateHelpers.getYear(prevProps.date);
672
+
673
+ if (selectedMonthDidChange) {
674
+ // re-calculate yearItems
675
+ this.getYearItems();
676
+ }
677
+
678
+ if (selectedYearDidChange) {
679
+ // re-calculate monthItems
680
+ this.getMonthItems();
681
+ }
682
+ }
683
+ }, {
552
684
  key: "render",
553
685
  value: function render() {
554
686
  var _this2 = this;