baseui 10.4.0 → 10.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/app-nav-bar/user-menu.js +1 -0
  2. package/app-nav-bar/user-menu.js.flow +1 -0
  3. package/button/styled-components.js +1 -1
  4. package/button/styled-components.js.flow +4 -1
  5. package/card/styled-components.js +0 -1
  6. package/card/styled-components.js.flow +0 -1
  7. package/combobox/combobox.js +5 -1
  8. package/combobox/combobox.js.flow +4 -0
  9. package/combobox/index.d.ts +6 -3
  10. package/data-table/column-datetime.js +2 -0
  11. package/data-table/column-datetime.js.flow +2 -0
  12. package/datepicker/calendar-header.js +255 -109
  13. package/datepicker/calendar-header.js.flow +282 -145
  14. package/datepicker/calendar.js +6 -1
  15. package/datepicker/calendar.js.flow +5 -1
  16. package/datepicker/constants.js +9 -2
  17. package/datepicker/constants.js.flow +7 -0
  18. package/datepicker/datepicker.js +135 -73
  19. package/datepicker/datepicker.js.flow +161 -62
  20. package/datepicker/day.js +2 -0
  21. package/datepicker/day.js.flow +2 -0
  22. package/datepicker/index.d.ts +8 -0
  23. package/datepicker/month.js +4 -0
  24. package/datepicker/month.js.flow +3 -0
  25. package/datepicker/styled-components.js +116 -56
  26. package/datepicker/styled-components.js.flow +101 -36
  27. package/datepicker/types.js.flow +18 -1
  28. package/datepicker/utils/calendar-header-helpers.js +51 -0
  29. package/datepicker/utils/calendar-header-helpers.js.flow +53 -0
  30. package/datepicker/utils/date-helpers.js +1 -1
  31. package/datepicker/utils/date-helpers.js.flow +1 -1
  32. package/datepicker/week.js +1 -0
  33. package/datepicker/week.js.flow +1 -0
  34. package/dnd-list/index.js.flow +2 -1
  35. package/dnd-list/list.js +1 -2
  36. package/dnd-list/list.js.flow +1 -1
  37. package/dnd-list/styled-components.js +1 -1
  38. package/dnd-list/styled-components.js.flow +1 -0
  39. package/drawer/drawer.js +2 -1
  40. package/drawer/drawer.js.flow +1 -1
  41. package/es/app-nav-bar/user-menu.js +1 -0
  42. package/es/button/styled-components.js +1 -1
  43. package/es/card/styled-components.js +0 -1
  44. package/es/combobox/combobox.js +5 -1
  45. package/es/data-table/column-datetime.js +2 -0
  46. package/es/datepicker/calendar-header.js +204 -93
  47. package/es/datepicker/calendar.js +7 -2
  48. package/es/datepicker/constants.js +6 -1
  49. package/es/datepicker/datepicker.js +70 -42
  50. package/es/datepicker/day.js +2 -0
  51. package/es/datepicker/month.js +3 -0
  52. package/es/datepicker/styled-components.js +98 -37
  53. package/es/datepicker/types.js +1 -1
  54. package/es/datepicker/utils/calendar-header-helpers.js +34 -0
  55. package/es/datepicker/utils/date-helpers.js +1 -1
  56. package/es/datepicker/week.js +1 -0
  57. package/es/dnd-list/index.js +2 -1
  58. package/es/dnd-list/list.js +1 -2
  59. package/es/dnd-list/styled-components.js +1 -0
  60. package/es/drawer/drawer.js +2 -1
  61. package/es/helper/helper.js +1 -0
  62. package/es/layer/layer.js +8 -0
  63. package/es/map-marker/constants.js +69 -0
  64. package/es/map-marker/fixed-marker.js +98 -0
  65. package/es/map-marker/floating-marker.js +65 -0
  66. package/es/map-marker/index.js +9 -0
  67. package/es/map-marker/pin-head.js +108 -0
  68. package/es/map-marker/styled-components.js +156 -0
  69. package/es/map-marker/types.js +8 -0
  70. package/es/menu/maybe-child-menu.js +1 -0
  71. package/es/popover/popover.js +6 -5
  72. package/es/popover/stateful-container.js +8 -2
  73. package/es/rating/emoticon-rating.js +3 -1
  74. package/es/rating/star-rating.js +3 -1
  75. package/es/select/select-component.js +20 -5
  76. package/es/select/styled-components.js +34 -4
  77. package/es/snackbar/snackbar-context.js +16 -4
  78. package/es/table-semantic/styled-components.js +6 -4
  79. package/es/table-semantic/table-builder.js +3 -0
  80. package/es/themes/dark-theme/color-component-tokens.js +1 -1
  81. package/es/themes/light-theme/color-component-tokens.js +9 -9
  82. package/es/themes/shared/lighting.js +5 -1
  83. package/es/timepicker/timepicker.js +16 -11
  84. package/es/tooltip/styled-components.js +8 -0
  85. package/es/tooltip/tooltip.js +1 -0
  86. package/esm/app-nav-bar/user-menu.js +1 -0
  87. package/esm/button/styled-components.js +1 -1
  88. package/esm/card/styled-components.js +0 -1
  89. package/esm/combobox/combobox.js +5 -1
  90. package/esm/data-table/column-datetime.js +2 -0
  91. package/esm/datepicker/calendar-header.js +255 -110
  92. package/esm/datepicker/calendar.js +7 -2
  93. package/esm/datepicker/constants.js +6 -1
  94. package/esm/datepicker/datepicker.js +136 -74
  95. package/esm/datepicker/day.js +2 -0
  96. package/esm/datepicker/month.js +3 -0
  97. package/esm/datepicker/styled-components.js +112 -55
  98. package/esm/datepicker/types.js +1 -1
  99. package/esm/datepicker/utils/calendar-header-helpers.js +45 -0
  100. package/esm/datepicker/utils/date-helpers.js +1 -1
  101. package/esm/datepicker/week.js +1 -0
  102. package/esm/dnd-list/index.js +2 -1
  103. package/esm/dnd-list/list.js +1 -2
  104. package/esm/dnd-list/styled-components.js +1 -1
  105. package/esm/drawer/drawer.js +2 -1
  106. package/esm/helper/helper.js +1 -0
  107. package/esm/layer/layer.js +8 -0
  108. package/esm/map-marker/constants.js +62 -0
  109. package/esm/map-marker/fixed-marker.js +137 -0
  110. package/esm/map-marker/floating-marker.js +94 -0
  111. package/esm/map-marker/index.js +9 -0
  112. package/esm/map-marker/pin-head.js +144 -0
  113. package/esm/map-marker/styled-components.js +168 -0
  114. package/esm/map-marker/types.js +8 -0
  115. package/esm/menu/maybe-child-menu.js +1 -0
  116. package/esm/popover/popover.js +6 -5
  117. package/esm/popover/stateful-container.js +8 -2
  118. package/esm/rating/emoticon-rating.js +2 -2
  119. package/esm/rating/star-rating.js +2 -2
  120. package/esm/select/select-component.js +19 -5
  121. package/esm/select/styled-components.js +28 -4
  122. package/esm/snackbar/snackbar-context.js +16 -4
  123. package/esm/table-semantic/styled-components.js +6 -4
  124. package/esm/table-semantic/table-builder.js +3 -0
  125. package/esm/themes/dark-theme/color-component-tokens.js +1 -1
  126. package/esm/themes/light-theme/color-component-tokens.js +9 -9
  127. package/esm/themes/shared/lighting.js +5 -1
  128. package/esm/timepicker/timepicker.js +17 -11
  129. package/esm/tooltip/styled-components.js +8 -0
  130. package/esm/tooltip/tooltip.js +1 -0
  131. package/helper/helper.js +1 -0
  132. package/helper/helper.js.flow +1 -0
  133. package/layer/layer.js +8 -0
  134. package/layer/layer.js.flow +9 -0
  135. package/link/index.d.ts +1 -0
  136. package/map-marker/constants.js +82 -0
  137. package/map-marker/constants.js.flow +74 -0
  138. package/map-marker/fixed-marker.js +152 -0
  139. package/map-marker/fixed-marker.js.flow +137 -0
  140. package/map-marker/floating-marker.js +109 -0
  141. package/map-marker/floating-marker.js.flow +102 -0
  142. package/map-marker/index.d.ts +105 -0
  143. package/map-marker/index.js +55 -0
  144. package/map-marker/index.js.flow +23 -0
  145. package/map-marker/package.json +4 -0
  146. package/map-marker/pin-head.js +159 -0
  147. package/map-marker/pin-head.js.flow +155 -0
  148. package/map-marker/styled-components.js +184 -0
  149. package/map-marker/styled-components.js.flow +177 -0
  150. package/map-marker/types.js +11 -0
  151. package/map-marker/types.js.flow +114 -0
  152. package/menu/index.d.ts +7 -0
  153. package/menu/maybe-child-menu.js +1 -0
  154. package/menu/maybe-child-menu.js.flow +1 -0
  155. package/menu/types.js.flow +12 -0
  156. package/modal/index.d.ts +1 -1
  157. package/modal/types.js.flow +4 -1
  158. package/package.json +5 -3
  159. package/popover/index.d.ts +2 -1
  160. package/popover/popover.js +6 -5
  161. package/popover/popover.js.flow +11 -4
  162. package/popover/stateful-container.js +8 -2
  163. package/popover/stateful-container.js.flow +5 -0
  164. package/popover/types.js.flow +6 -1
  165. package/rating/emoticon-rating.js +2 -2
  166. package/rating/emoticon-rating.js.flow +4 -1
  167. package/rating/star-rating.js +2 -2
  168. package/rating/star-rating.js.flow +4 -1
  169. package/select/select-component.js +19 -5
  170. package/select/select-component.js.flow +19 -5
  171. package/select/styled-components.js +28 -4
  172. package/select/styled-components.js.flow +30 -2
  173. package/select/types.js.flow +9 -0
  174. package/snackbar/index.d.ts +21 -16
  175. package/snackbar/snackbar-context.js +15 -4
  176. package/snackbar/snackbar-context.js.flow +15 -3
  177. package/table-semantic/styled-components.js +6 -4
  178. package/table-semantic/styled-components.js.flow +6 -4
  179. package/table-semantic/table-builder.js +3 -0
  180. package/table-semantic/table-builder.js.flow +3 -0
  181. package/themes/dark-theme/color-component-tokens.js +1 -1
  182. package/themes/dark-theme/color-component-tokens.js.flow +1 -1
  183. package/themes/light-theme/color-component-tokens.js +9 -9
  184. package/themes/light-theme/color-component-tokens.js.flow +9 -9
  185. package/themes/shared/lighting.js +5 -1
  186. package/themes/shared/lighting.js.flow +4 -0
  187. package/themes/types.js.flow +4 -0
  188. package/timepicker/index.d.ts +1 -0
  189. package/timepicker/timepicker.js +17 -11
  190. package/timepicker/timepicker.js.flow +31 -12
  191. package/timepicker/types.js.flow +10 -0
  192. package/tooltip/styled-components.js +8 -0
  193. package/tooltip/styled-components.js.flow +8 -0
  194. package/tooltip/tooltip.js +1 -0
  195. package/tooltip/tooltip.js.flow +6 -1
@@ -14,6 +14,10 @@ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(
14
14
 
15
15
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
16
16
 
17
+ 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; }
18
+
19
+ 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; }
20
+
17
21
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
18
22
 
19
23
  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); } }
@@ -43,17 +47,18 @@ This source code is licensed under the MIT license found in the
43
47
  LICENSE file in the root directory of this source tree.
44
48
  */
45
49
  import * as React from 'react';
46
- import ArrowRight from '../icon/arrow-right.js';
47
- import ArrowLeft from '../icon/arrow-left.js';
48
- import TriangleDown from '../icon/triangle-down.js';
50
+ import ChevronRight from '../icon/chevron-right.js';
51
+ import ChevronLeft from '../icon/chevron-left.js';
52
+ import ChevronDown from '../icon/chevron-down.js';
49
53
  import dateFnsAdapter from './utils/date-fns-adapter.js';
50
54
  import DateHelpers from './utils/date-helpers.js';
55
+ import { getFilteredMonthItems } from './utils/calendar-header-helpers.js';
51
56
  import { StatefulMenu } from '../menu/index.js';
52
57
  import { Popover } from '../popover/index.js';
53
58
  import { LocaleContext } from '../locale/index.js';
54
59
  import { ThemeContext } from '../styles/theme-provider.js';
55
60
  import { StyledCalendarHeader, StyledPrevButton, StyledNextButton, StyledMonthHeader, StyledWeekdayHeader, StyledMonthYearSelectButton, StyledMonthYearSelectIconContainer } from './styled-components.js';
56
- import { ORIENTATION, WEEKDAYS } from './constants.js';
61
+ import { ORIENTATION, WEEKDAYS, DENSITY } from './constants.js';
57
62
  import { getOverrides, mergeOverrides } from '../helpers/overrides.js';
58
63
  import { isFocusVisible, forkFocus, forkBlur } from '../utils/focusVisible.js';
59
64
 
@@ -73,10 +78,6 @@ var DIRECTION = {
73
78
  PREVIOUS: 'previous'
74
79
  };
75
80
 
76
- function yearMonthToId(year, month) {
77
- return "".concat(year, "-").concat(month);
78
- }
79
-
80
81
  function idToYearMonth(id) {
81
82
  return id.split('-').map(Number);
82
83
  }
@@ -95,14 +96,13 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
95
96
 
96
97
  _defineProperty(_assertThisInitialized(_this), "dateHelpers", void 0);
97
98
 
98
- _defineProperty(_assertThisInitialized(_this), "items", void 0);
99
-
100
- _defineProperty(_assertThisInitialized(_this), "minYear", void 0);
99
+ _defineProperty(_assertThisInitialized(_this), "monthItems", void 0);
101
100
 
102
- _defineProperty(_assertThisInitialized(_this), "maxYear", void 0);
101
+ _defineProperty(_assertThisInitialized(_this), "yearItems", void 0);
103
102
 
104
103
  _defineProperty(_assertThisInitialized(_this), "state", {
105
- isMonthYearDropdownOpen: false,
104
+ isMonthDropdownOpen: false,
105
+ isYearDropdownOpen: false,
106
106
  isFocusVisible: false
107
107
  });
108
108
 
@@ -110,17 +110,94 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
110
110
  return _this.props.date || _this.dateHelpers.date();
111
111
  });
112
112
 
113
- _defineProperty(_assertThisInitialized(_this), "handleYearChange", function (_ref2) {
114
- var value = _ref2.value;
113
+ _defineProperty(_assertThisInitialized(_this), "getYearItems", function () {
114
+ var date = _this.getDateProp();
115
115
 
116
- if (_this.props.onYearChange) {
117
- // $FlowFixMe
118
- _this.props.onYearChange({
119
- date: _this.dateHelpers.setYear(_this.getDateProp(), value[0].id)
116
+ var maxDate = _this.props.maxDate;
117
+ var minDate = _this.props.minDate;
118
+ var maxYear = maxDate ? _this.dateHelpers.getYear(maxDate) : MAX_YEAR;
119
+ var minYear = minDate ? _this.dateHelpers.getYear(minDate) : MIN_YEAR;
120
+
121
+ var selectedMonth = _this.dateHelpers.getMonth(date); // TODO: this logic can be optimized to only run when minDate / maxDate change
122
+
123
+
124
+ _this.yearItems = Array.from({
125
+ length: maxYear - minYear + 1
126
+ }, function (_, i) {
127
+ return minYear + i;
128
+ }).map(function (year) {
129
+ return {
130
+ id: year.toString(),
131
+ label: year.toString()
132
+ };
133
+ });
134
+ var monthOfMaxDate = maxDate ? _this.dateHelpers.getMonth(maxDate) : MAX_MONTH;
135
+ var monthOfMinDate = minDate ? _this.dateHelpers.getMonth(minDate) : MIN_MONTH; // Generates array like [0,1,.... monthOfMaxDate]
136
+
137
+ var maxYearMonths = Array.from({
138
+ length: monthOfMaxDate + 1
139
+ }, function (x, i) {
140
+ return i;
141
+ }); // Generates array like [monthOfMinDate, ...., 10, 11]
142
+
143
+ var minYearMonths = Array.from({
144
+ length: 12 - monthOfMinDate
145
+ }, function (x, i) {
146
+ return i + monthOfMinDate;
147
+ });
148
+
149
+ if (selectedMonth > maxYearMonths[maxYearMonths.length - 1]) {
150
+ var lastIdx = _this.yearItems.length - 1;
151
+ _this.yearItems[lastIdx] = _objectSpread(_objectSpread({}, _this.yearItems[lastIdx]), {}, {
152
+ disabled: true
153
+ });
154
+ }
155
+
156
+ if (selectedMonth < minYearMonths[0]) {
157
+ _this.yearItems[0] = _objectSpread(_objectSpread({}, _this.yearItems[0]), {}, {
158
+ disabled: true
120
159
  });
121
160
  }
122
161
  });
123
162
 
163
+ _defineProperty(_assertThisInitialized(_this), "getMonthItems", function () {
164
+ var date = _this.getDateProp();
165
+
166
+ var year = _this.dateHelpers.getYear(date);
167
+
168
+ var maxDate = _this.props.maxDate;
169
+ var minDate = _this.props.minDate;
170
+ var maxYear = maxDate ? _this.dateHelpers.getYear(maxDate) : MAX_YEAR;
171
+ var minYear = minDate ? _this.dateHelpers.getYear(minDate) : MIN_YEAR;
172
+ var monthOfMaxDate = maxDate ? _this.dateHelpers.getMonth(maxDate) : MAX_MONTH; // Generates array like [0,1,.... monthOfMaxDate]
173
+
174
+ var maxYearMonths = Array.from({
175
+ length: monthOfMaxDate + 1
176
+ }, function (x, i) {
177
+ return i;
178
+ });
179
+ var monthOfMinDate = minDate ? _this.dateHelpers.getMonth(minDate) : MIN_MONTH; // Generates array like [monthOfMinDate, ...., 10, 11]
180
+
181
+ var minYearMonths = Array.from({
182
+ length: 12 - monthOfMinDate
183
+ }, function (x, i) {
184
+ return i + monthOfMinDate;
185
+ });
186
+ var maxMinYearMonthsIntersection = maxYearMonths.filter(function (year) {
187
+ return minYearMonths.includes(year);
188
+ });
189
+ var filterMonthsList = year === maxYear && year === minYear ? maxMinYearMonthsIntersection : year === maxYear ? maxYearMonths : year === minYear ? minYearMonths : null;
190
+
191
+ var formatMonthLabel = function formatMonthLabel(month) {
192
+ return _this.dateHelpers.getMonthInLocale(month, _this.props.locale);
193
+ };
194
+
195
+ _this.monthItems = getFilteredMonthItems({
196
+ filterMonthsList: filterMonthsList,
197
+ formatMonthLabel: formatMonthLabel
198
+ });
199
+ });
200
+
124
201
  _defineProperty(_assertThisInitialized(_this), "increaseMonth", function () {
125
202
  if (_this.props.onMonthChange) {
126
203
  // $FlowFixMe
@@ -188,14 +265,16 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
188
265
  }
189
266
  });
190
267
 
191
- _defineProperty(_assertThisInitialized(_this), "renderPreviousMonthButton", function (_ref3) {
192
- var locale = _ref3.locale,
193
- theme = _ref3.theme;
268
+ _defineProperty(_assertThisInitialized(_this), "renderPreviousMonthButton", function (_ref2) {
269
+ var locale = _ref2.locale,
270
+ theme = _ref2.theme;
194
271
 
195
272
  var date = _this.getDateProp();
196
273
 
197
- var _this$props$overrides = _this.props.overrides,
198
- overrides = _this$props$overrides === void 0 ? {} : _this$props$overrides;
274
+ var _this$props3 = _this.props,
275
+ _this$props3$override = _this$props3.overrides,
276
+ overrides = _this$props3$override === void 0 ? {} : _this$props3$override,
277
+ density = _this$props3.density;
199
278
 
200
279
  var allPrevDaysDisabled = _this.dateHelpers.monthDisabledBefore(date, _this.props);
201
280
 
@@ -224,7 +303,7 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
224
303
  PrevButton = _getOverrides2[0],
225
304
  prevButtonProps = _getOverrides2[1];
226
305
 
227
- var _getOverrides3 = getOverrides(overrides.PrevButtonIcon, theme.direction === 'rtl' ? ArrowRight : ArrowLeft),
306
+ var _getOverrides3 = getOverrides(overrides.PrevButtonIcon, theme.direction === 'rtl' ? ChevronRight : ChevronLeft),
228
307
  _getOverrides4 = _slicedToArray(_getOverrides3, 2),
229
308
  PrevButtonIcon = _getOverrides4[0],
230
309
  prevButtonIconProps = _getOverrides4[1];
@@ -245,7 +324,7 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
245
324
  $disabled: isDisabled,
246
325
  $order: _this.props.order
247
326
  }, prevButtonProps), isHidden ? null : /*#__PURE__*/React.createElement(PrevButtonIcon, _extends({
248
- size: '24px',
327
+ size: density === DENSITY.high ? 24 : 36,
249
328
  overrides: {
250
329
  Svg: {
251
330
  style: navBtnStyle
@@ -254,14 +333,16 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
254
333
  }, prevButtonIconProps)));
255
334
  });
256
335
 
257
- _defineProperty(_assertThisInitialized(_this), "renderNextMonthButton", function (_ref4) {
258
- var locale = _ref4.locale,
259
- theme = _ref4.theme;
336
+ _defineProperty(_assertThisInitialized(_this), "renderNextMonthButton", function (_ref3) {
337
+ var locale = _ref3.locale,
338
+ theme = _ref3.theme;
260
339
 
261
340
  var date = _this.getDateProp();
262
341
 
263
- var _this$props$overrides2 = _this.props.overrides,
264
- overrides = _this$props$overrides2 === void 0 ? {} : _this$props$overrides2;
342
+ var _this$props4 = _this.props,
343
+ _this$props4$override = _this$props4.overrides,
344
+ overrides = _this$props4$override === void 0 ? {} : _this$props4$override,
345
+ density = _this$props4.density;
265
346
 
266
347
  var allNextDaysDisabled = _this.dateHelpers.monthDisabledAfter(date, _this.props);
267
348
 
@@ -290,7 +371,7 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
290
371
  NextButton = _getOverrides6[0],
291
372
  nextButtonProps = _getOverrides6[1];
292
373
 
293
- var _getOverrides7 = getOverrides(overrides.NextButtonIcon, theme.direction === 'rtl' ? ArrowLeft : ArrowRight),
374
+ var _getOverrides7 = getOverrides(overrides.NextButtonIcon, theme.direction === 'rtl' ? ChevronLeft : ChevronRight),
294
375
  _getOverrides8 = _slicedToArray(_getOverrides7, 2),
295
376
  NextButtonIcon = _getOverrides8[0],
296
377
  nextButtonIconProps = _getOverrides8[1];
@@ -315,7 +396,7 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
315
396
  $isFocusVisible: _this.state.isFocusVisible,
316
397
  $order: _this.props.order
317
398
  }, nextButtonProps), isHidden ? null : /*#__PURE__*/React.createElement(NextButtonIcon, _extends({
318
- size: '24px',
399
+ size: density === DENSITY.high ? 24 : 36,
319
400
  overrides: {
320
401
  Svg: {
321
402
  style: navBtnStyle
@@ -325,7 +406,7 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
325
406
  });
326
407
 
327
408
  _defineProperty(_assertThisInitialized(_this), "canArrowsOpenDropdown", function (event) {
328
- if (!_this.state.isMonthYearDropdownOpen) {
409
+ if (!_this.state.isMonthDropdownOpen && !_this.state.isYearDropdownOpen) {
329
410
  if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
330
411
  return true;
331
412
  }
@@ -337,12 +418,15 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
337
418
  _defineProperty(_assertThisInitialized(_this), "renderMonthYearDropdown", function () {
338
419
  var date = _this.getDateProp();
339
420
 
340
- var _this$props3 = _this.props,
341
- locale = _this$props3.locale,
342
- maxDate = _this$props3.maxDate,
343
- minDate = _this$props3.minDate,
344
- _this$props3$override = _this$props3.overrides,
345
- overrides = _this$props3$override === void 0 ? {} : _this$props3$override;
421
+ var month = _this.dateHelpers.getMonth(date);
422
+
423
+ var year = _this.dateHelpers.getYear(date);
424
+
425
+ var _this$props5 = _this.props,
426
+ locale = _this$props5.locale,
427
+ _this$props5$override = _this$props5.overrides,
428
+ overrides = _this$props5$override === void 0 ? {} : _this$props5$override,
429
+ density = _this$props5.density;
346
430
 
347
431
  var _getOverrides9 = getOverrides(overrides.MonthYearSelectButton, StyledMonthYearSelectButton),
348
432
  _getOverrides10 = _slicedToArray(_getOverrides9, 2),
@@ -375,115 +459,146 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
375
459
  menuProps && menuProps.overrides); // $FlowFixMe
376
460
 
377
461
  menuProps.overrides = menuOverrides;
378
- var defaultMonths = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
379
- var maxYear = maxDate ? _this.dateHelpers.getYear(maxDate) : MAX_YEAR;
380
- var minYear = minDate ? _this.dateHelpers.getYear(minDate) : MIN_YEAR;
381
- var maxDateMonth = maxDate ? _this.dateHelpers.getMonth(maxDate) : MAX_MONTH; // Generates array like [0,1,.... maxDateMonth]
382
462
 
383
- var maxYearMonths = Array.from({
384
- length: maxDateMonth + 1
385
- }, function (x, i) {
386
- return i;
463
+ var initialMonthIndex = _this.monthItems.findIndex(function (month) {
464
+ return month.id === _this.dateHelpers.getMonth(date).toString();
387
465
  });
388
- var minDateMonth = minDate ? _this.dateHelpers.getMonth(minDate) : MIN_MONTH; // Generates array like [minDateMonth, ...., 10, 11]
389
466
 
390
- var minYearMonths = Array.from({
391
- length: 12 - minDateMonth
392
- }, function (x, i) {
393
- return i + minDateMonth;
467
+ var initialYearIndex = _this.yearItems.findIndex(function (year) {
468
+ return year.id === _this.dateHelpers.getYear(date).toString();
394
469
  });
395
470
 
396
- if (_this.maxYear !== maxYear || _this.minYear !== minYear) {
397
- _this.maxYear = maxYear;
398
- _this.minYear = minYear;
399
- _this.items = [];
471
+ var monthTitle = "".concat(_this.dateHelpers.getMonthInLocale(_this.dateHelpers.getMonth(date), locale));
472
+ var yearTitle = "".concat(_this.dateHelpers.getYear(date));
473
+ return _this.isMultiMonthHorizontal() ? /*#__PURE__*/React.createElement("div", null, "".concat(monthTitle, " ").concat(yearTitle)) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(OverriddenPopover, _extends({
474
+ placement: "bottom",
475
+ autoFocus: true,
476
+ focusLock: true,
477
+ isOpen: _this.state.isMonthDropdownOpen,
478
+ onClick: function onClick() {
479
+ _this.setState(function (prev) {
480
+ return {
481
+ isMonthDropdownOpen: !prev.isMonthDropdownOpen
482
+ };
483
+ });
484
+ },
485
+ onClickOutside: function onClickOutside() {
486
+ return _this.setState({
487
+ isMonthDropdownOpen: false
488
+ });
489
+ },
490
+ onEsc: function onEsc() {
491
+ return _this.setState({
492
+ isMonthDropdownOpen: false
493
+ });
494
+ },
495
+ content: function content() {
496
+ return /*#__PURE__*/React.createElement(OverriddenStatefulMenu, _extends({
497
+ initialState: {
498
+ highlightedIndex: initialMonthIndex,
499
+ isFocused: true
500
+ },
501
+ items: _this.monthItems,
502
+ onItemSelect: function onItemSelect(_ref4) {
503
+ var item = _ref4.item,
504
+ event = _ref4.event;
505
+ event.preventDefault();
506
+ var month = idToYearMonth(item.id);
507
+
508
+ var updatedDate = _this.dateHelpers.set(date, {
509
+ year: year,
510
+ month: month
511
+ });
400
512
 
401
- var _loop = function _loop(i) {
402
- var months = void 0;
513
+ _this.props.onMonthChange && _this.props.onMonthChange({
514
+ date: updatedDate
515
+ });
403
516
 
404
- if (i === minYear && i === maxYear) {
405
- months = maxYearMonths.filter(function (month) {
406
- return minYearMonths.includes(month);
517
+ _this.setState({
518
+ isMonthDropdownOpen: false
519
+ });
520
+ }
521
+ }, menuProps));
522
+ }
523
+ }, popoverProps), /*#__PURE__*/React.createElement(MonthYearSelectButton, _extends({
524
+ "aria-live": "polite",
525
+ type: "button",
526
+ $isFocusVisible: _this.state.isFocusVisible,
527
+ $density: density,
528
+ onKeyUp: function onKeyUp(event) {
529
+ if (_this.canArrowsOpenDropdown(event)) {
530
+ _this.setState({
531
+ isMonthDropdownOpen: true
407
532
  });
408
- } else if (i === minYear) {
409
- months = minYearMonths;
410
- } else if (i === maxYear) {
411
- months = maxYearMonths;
412
- } else {
413
- months = defaultMonths;
533
+ }
534
+ },
535
+ onKeyDown: function onKeyDown(event) {
536
+ if (_this.canArrowsOpenDropdown(event)) {
537
+ // disables page scroll
538
+ event.preventDefault();
414
539
  }
415
540
 
416
- months.forEach(function (month) {
417
- _this.items.push({
418
- id: yearMonthToId(i, month),
419
- label: "".concat(_this.dateHelpers.getMonthInLocale(month, locale), " ").concat(i)
541
+ if (event.key === 'Tab') {
542
+ _this.setState({
543
+ isMonthDropdownOpen: false
420
544
  });
421
- });
422
- };
423
-
424
- for (var i = minYear; i <= maxYear; i++) {
425
- _loop(i);
545
+ }
426
546
  }
427
- }
428
-
429
- var initialIndex = _this.items.findIndex(function (item) {
430
- return item.id === yearMonthToId(_this.dateHelpers.getYear(date), _this.dateHelpers.getMonth(date));
431
- });
432
-
433
- var monthYearTitle = "".concat(_this.dateHelpers.getMonthInLocale(_this.dateHelpers.getMonth(date), locale), " ").concat(_this.dateHelpers.getYear(date));
434
- return _this.isMultiMonthHorizontal() ? /*#__PURE__*/React.createElement("div", null, monthYearTitle) : /*#__PURE__*/React.createElement(OverriddenPopover, _extends({
547
+ }, monthYearSelectButtonProps), monthTitle, /*#__PURE__*/React.createElement(MonthYearSelectIconContainer, monthYearSelectIconContainerProps, /*#__PURE__*/React.createElement(ChevronDown, {
548
+ title: "",
549
+ overrides: {
550
+ Svg: {
551
+ props: {
552
+ role: 'presentation'
553
+ }
554
+ }
555
+ },
556
+ size: density === DENSITY.high ? 16 : 24
557
+ })))), /*#__PURE__*/React.createElement(OverriddenPopover, _extends({
435
558
  placement: "bottom",
436
- autoFocus: true,
437
559
  focusLock: true,
438
- isOpen: _this.state.isMonthYearDropdownOpen,
560
+ isOpen: _this.state.isYearDropdownOpen,
439
561
  onClick: function onClick() {
440
562
  _this.setState(function (prev) {
441
563
  return {
442
- isMonthYearDropdownOpen: !prev.isMonthYearDropdownOpen
564
+ isYearDropdownOpen: !prev.isYearDropdownOpen
443
565
  };
444
566
  });
445
567
  },
446
568
  onClickOutside: function onClickOutside() {
447
569
  return _this.setState({
448
- isMonthYearDropdownOpen: false
570
+ isYearDropdownOpen: false
449
571
  });
450
572
  },
451
573
  onEsc: function onEsc() {
452
574
  return _this.setState({
453
- isMonthYearDropdownOpen: false
575
+ isYearDropdownOpen: false
454
576
  });
455
577
  },
456
578
  content: function content() {
457
579
  return /*#__PURE__*/React.createElement(OverriddenStatefulMenu, _extends({
458
580
  initialState: {
459
- highlightedIndex: initialIndex,
581
+ highlightedIndex: initialYearIndex,
460
582
  isFocused: true
461
583
  },
462
- items: _this.items,
584
+ items: _this.yearItems,
463
585
  onItemSelect: function onItemSelect(_ref5) {
464
586
  var item = _ref5.item,
465
587
  event = _ref5.event;
466
588
  event.preventDefault();
467
-
468
- var _idToYearMonth = idToYearMonth(item.id),
469
- _idToYearMonth2 = _slicedToArray(_idToYearMonth, 2),
470
- year = _idToYearMonth2[0],
471
- month = _idToYearMonth2[1];
589
+ var year = idToYearMonth(item.id);
472
590
 
473
591
  var updatedDate = _this.dateHelpers.set(date, {
474
592
  year: year,
475
593
  month: month
476
594
  });
477
595
 
478
- _this.props.onMonthChange && _this.props.onMonthChange({
479
- date: updatedDate
480
- });
481
596
  _this.props.onYearChange && _this.props.onYearChange({
482
597
  date: updatedDate
483
598
  });
484
599
 
485
600
  _this.setState({
486
- isMonthYearDropdownOpen: false
601
+ isYearDropdownOpen: false
487
602
  });
488
603
  }
489
604
  }, menuProps));
@@ -492,10 +607,11 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
492
607
  "aria-live": "polite",
493
608
  type: "button",
494
609
  $isFocusVisible: _this.state.isFocusVisible,
610
+ $density: density,
495
611
  onKeyUp: function onKeyUp(event) {
496
612
  if (_this.canArrowsOpenDropdown(event)) {
497
613
  _this.setState({
498
- isMonthYearDropdownOpen: true
614
+ isYearDropdownOpen: true
499
615
  });
500
616
  }
501
617
  },
@@ -507,11 +623,11 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
507
623
 
508
624
  if (event.key === 'Tab') {
509
625
  _this.setState({
510
- isMonthYearDropdownOpen: false
626
+ isYearDropdownOpen: false
511
627
  });
512
628
  }
513
629
  }
514
- }, monthYearSelectButtonProps), monthYearTitle, /*#__PURE__*/React.createElement(MonthYearSelectIconContainer, monthYearSelectIconContainerProps, /*#__PURE__*/React.createElement(TriangleDown, {
630
+ }, monthYearSelectButtonProps), yearTitle, /*#__PURE__*/React.createElement(MonthYearSelectIconContainer, monthYearSelectIconContainerProps, /*#__PURE__*/React.createElement(ChevronDown, {
515
631
  title: "",
516
632
  overrides: {
517
633
  Svg: {
@@ -519,22 +635,48 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
519
635
  role: 'presentation'
520
636
  }
521
637
  }
522
- }
523
- }))));
638
+ },
639
+ size: density === DENSITY.high ? 16 : 24
640
+ })))));
524
641
  });
525
642
 
526
643
  _this.dateHelpers = new DateHelpers(props.adapter);
527
- _this.items = [];
644
+ _this.monthItems = [];
645
+ _this.yearItems = [];
528
646
  return _this;
529
647
  }
530
648
 
531
649
  _createClass(CalendarHeader, [{
650
+ key: "componentDidMount",
651
+ value: function componentDidMount() {
652
+ this.getYearItems();
653
+ this.getMonthItems();
654
+ }
655
+ }, {
656
+ key: "componentDidUpdate",
657
+ value: function componentDidUpdate(prevProps) {
658
+ var selectedMonthDidChange = this.dateHelpers.getMonth(this.props.date) !== this.dateHelpers.getMonth(prevProps.date);
659
+ var selectedYearDidChange = this.dateHelpers.getYear(this.props.date) !== this.dateHelpers.getYear(prevProps.date);
660
+
661
+ if (selectedMonthDidChange) {
662
+ // re-calculate yearItems
663
+ this.getYearItems();
664
+ }
665
+
666
+ if (selectedYearDidChange) {
667
+ // re-calculate monthItems
668
+ this.getMonthItems();
669
+ }
670
+ }
671
+ }, {
532
672
  key: "render",
533
673
  value: function render() {
534
674
  var _this2 = this;
535
675
 
536
- var _this$props$overrides3 = this.props.overrides,
537
- overrides = _this$props$overrides3 === void 0 ? {} : _this$props$overrides3;
676
+ var _this$props6 = this.props,
677
+ _this$props6$override = _this$props6.overrides,
678
+ overrides = _this$props6$override === void 0 ? {} : _this$props6$override,
679
+ density = _this$props6.density;
538
680
 
539
681
  var _getOverrides17 = getOverrides(overrides.CalendarHeader, StyledCalendarHeader),
540
682
  _getOverrides18 = _slicedToArray(_getOverrides17, 2),
@@ -555,6 +697,7 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
555
697
  return /*#__PURE__*/React.createElement(ThemeContext.Consumer, null, function (theme) {
556
698
  return /*#__PURE__*/React.createElement(LocaleContext.Consumer, null, function (locale) {
557
699
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_CalendarHeader, _extends({}, calendarHeaderProps, {
700
+ $density: _this2.props.density,
558
701
  onFocus: forkFocus(calendarHeaderProps, _this2.handleFocus),
559
702
  onBlur: forkBlur(calendarHeaderProps, _this2.handleBlur)
560
703
  }), _this2.renderPreviousMonthButton({
@@ -571,7 +714,9 @@ var CalendarHeader = /*#__PURE__*/function (_React$Component) {
571
714
  return /*#__PURE__*/React.createElement(WeekdayHeader, _extends({
572
715
  key: offset,
573
716
  alt: _this2.dateHelpers.getWeekdayInLocale(day, _this2.props.locale)
574
- }, weekdayHeaderProps), _this2.dateHelpers.getWeekdayMinInLocale(day, _this2.props.locale));
717
+ }, weekdayHeaderProps, {
718
+ $density: density
719
+ }), _this2.dateHelpers.getWeekdayMinInLocale(day, _this2.props.locale));
575
720
  })));
576
721
  });
577
722
  });
@@ -65,7 +65,7 @@ import { StyledCalendarContainer, StyledMonthContainer, StyledRoot, StyledSelect
65
65
  import dateFnsAdapter from './utils/date-fns-adapter.js';
66
66
  import DateHelpers from './utils/date-helpers.js';
67
67
  import { getOverrides, mergeOverrides } from '../helpers/overrides.js';
68
- import { ORIENTATION } from './constants.js';
68
+ import { DENSITY, ORIENTATION } from './constants.js';
69
69
 
70
70
  var Calendar = /*#__PURE__*/function (_React$Component) {
71
71
  _inherits(Calendar, _React$Component);
@@ -408,10 +408,13 @@ var Calendar = /*#__PURE__*/function (_React$Component) {
408
408
  "aria-roledescription": translations.ariaRoleDescCalMonth,
409
409
  "aria-multiselectable": _this.props.range || null,
410
410
  onKeyDown: _this.onKeyDown
411
- }, calendarContainerProps), /*#__PURE__*/React.createElement(Month, {
411
+ }, calendarContainerProps, {
412
+ $density: _this.props.density
413
+ }), /*#__PURE__*/React.createElement(Month, {
412
414
  adapter: _this.props.adapter,
413
415
  date: monthDate,
414
416
  dateLabel: _this.props.dateLabel,
417
+ density: _this.props.density,
415
418
  excludeDates: _this.props.excludeDates,
416
419
  filterDate: _this.props.filterDate,
417
420
  highlightedDate: _this.state.highlightedDate,
@@ -693,6 +696,7 @@ var Calendar = /*#__PURE__*/function (_React$Component) {
693
696
 
694
697
  return /*#__PURE__*/React.createElement(LocaleContext.Consumer, null, function (locale) {
695
698
  return /*#__PURE__*/React.createElement(Root, _extends({
699
+ $density: _this2.props.density,
696
700
  "data-baseweb": "calendar",
697
701
  role: "application",
698
702
  "aria-roledescription": "datepicker",
@@ -722,6 +726,7 @@ var Calendar = /*#__PURE__*/function (_React$Component) {
722
726
  _defineProperty(Calendar, "defaultProps", {
723
727
  autoFocusCalendar: false,
724
728
  dateLabel: null,
729
+ density: DENSITY.default,
725
730
  excludeDates: null,
726
731
  filterDate: null,
727
732
  highlightedDate: null,
@@ -20,4 +20,9 @@ export var STATE_CHANGE_TYPE = Object.freeze({
20
20
  mouseOver: 'mouseOver',
21
21
  mouseLeave: 'mouseLeave'
22
22
  });
23
- export var WEEKDAYS = [0, 1, 2, 3, 4, 5, 6];
23
+ export var WEEKDAYS = [0, 1, 2, 3, 4, 5, 6];
24
+ export var DEFAULT_MONTHS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
25
+ export var DENSITY = {
26
+ high: 'high',
27
+ default: 'default'
28
+ };