baseui 10.3.0 → 10.7.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.
- package/app-nav-bar/user-menu.js +1 -0
- package/app-nav-bar/user-menu.js.flow +1 -0
- package/button/styled-components.js +1 -1
- package/button/styled-components.js.flow +4 -1
- package/card/styled-components.js +0 -1
- package/card/styled-components.js.flow +0 -1
- package/combobox/combobox.js +5 -1
- package/combobox/combobox.js.flow +4 -0
- package/combobox/index.d.ts +6 -3
- package/data-table/column-datetime.js +2 -0
- package/data-table/column-datetime.js.flow +2 -0
- package/data-table/data-table.js +13 -3
- package/data-table/data-table.js.flow +20 -4
- package/data-table/types.js.flow +2 -1
- package/datepicker/calendar-header.js +255 -109
- package/datepicker/calendar-header.js.flow +282 -145
- package/datepicker/calendar.js +6 -1
- package/datepicker/calendar.js.flow +5 -1
- package/datepicker/constants.js +9 -2
- package/datepicker/constants.js.flow +7 -0
- package/datepicker/datepicker.js +135 -73
- package/datepicker/datepicker.js.flow +161 -62
- package/datepicker/day.js +2 -0
- package/datepicker/day.js.flow +2 -0
- package/datepicker/index.d.ts +8 -0
- package/datepicker/month.js +4 -0
- package/datepicker/month.js.flow +3 -0
- package/datepicker/styled-components.js +116 -56
- package/datepicker/styled-components.js.flow +101 -36
- package/datepicker/types.js.flow +18 -1
- package/datepicker/utils/calendar-header-helpers.js +51 -0
- package/datepicker/utils/calendar-header-helpers.js.flow +53 -0
- package/datepicker/utils/date-helpers.js +1 -1
- package/datepicker/utils/date-helpers.js.flow +1 -1
- package/datepicker/week.js +1 -0
- package/datepicker/week.js.flow +1 -0
- package/dnd-list/index.js.flow +2 -1
- package/dnd-list/list.js +1 -2
- package/dnd-list/list.js.flow +1 -1
- package/dnd-list/styled-components.js +1 -1
- package/dnd-list/styled-components.js.flow +1 -0
- package/drawer/close-icon.js +3 -2
- package/drawer/close-icon.js.flow +2 -2
- package/drawer/drawer.js +5 -2
- package/drawer/drawer.js.flow +2 -2
- package/es/app-nav-bar/user-menu.js +1 -0
- package/es/button/styled-components.js +1 -1
- package/es/card/styled-components.js +0 -1
- package/es/combobox/combobox.js +5 -1
- package/es/data-table/column-datetime.js +2 -0
- package/es/data-table/data-table.js +13 -3
- package/es/datepicker/calendar-header.js +204 -93
- package/es/datepicker/calendar.js +7 -2
- package/es/datepicker/constants.js +6 -1
- package/es/datepicker/datepicker.js +70 -42
- package/es/datepicker/day.js +2 -0
- package/es/datepicker/month.js +3 -0
- package/es/datepicker/styled-components.js +98 -37
- package/es/datepicker/types.js +1 -1
- package/es/datepicker/utils/calendar-header-helpers.js +34 -0
- package/es/datepicker/utils/date-helpers.js +1 -1
- package/es/datepicker/week.js +1 -0
- package/es/dnd-list/index.js +2 -1
- package/es/dnd-list/list.js +1 -2
- package/es/dnd-list/styled-components.js +1 -0
- package/es/drawer/close-icon.js +3 -2
- package/es/drawer/drawer.js +5 -2
- package/es/helper/helper.js +1 -0
- package/es/layer/layer.js +8 -0
- package/es/list/list-heading.js +17 -6
- package/es/map-marker/constants.js +69 -0
- package/es/map-marker/fixed-marker.js +98 -0
- package/es/map-marker/floating-marker.js +65 -0
- package/es/map-marker/index.js +9 -0
- package/es/map-marker/pin-head.js +108 -0
- package/es/map-marker/styled-components.js +156 -0
- package/es/map-marker/types.js +8 -0
- package/es/menu/maybe-child-menu.js +1 -0
- package/es/popover/popover.js +6 -5
- package/es/popover/stateful-container.js +8 -2
- package/es/rating/emoticon-rating.js +3 -1
- package/es/rating/star-rating.js +3 -1
- package/es/select/select-component.js +20 -5
- package/es/select/styled-components.js +34 -4
- package/es/snackbar/snackbar-context.js +16 -4
- package/es/spinner/styled-components.js +1 -1
- package/es/table-semantic/styled-components.js +6 -4
- package/es/table-semantic/table-builder.js +3 -0
- package/es/themes/dark-theme/color-component-tokens.js +1 -1
- package/es/themes/light-theme/color-component-tokens.js +9 -9
- package/es/themes/shared/lighting.js +5 -1
- package/es/timepicker/timepicker.js +16 -11
- package/es/tooltip/styled-components.js +8 -0
- package/es/tooltip/tooltip.js +1 -0
- package/esm/app-nav-bar/user-menu.js +1 -0
- package/esm/button/styled-components.js +1 -1
- package/esm/card/styled-components.js +0 -1
- package/esm/combobox/combobox.js +5 -1
- package/esm/data-table/column-datetime.js +2 -0
- package/esm/data-table/data-table.js +13 -3
- package/esm/datepicker/calendar-header.js +255 -110
- package/esm/datepicker/calendar.js +7 -2
- package/esm/datepicker/constants.js +6 -1
- package/esm/datepicker/datepicker.js +136 -74
- package/esm/datepicker/day.js +2 -0
- package/esm/datepicker/month.js +3 -0
- package/esm/datepicker/styled-components.js +112 -55
- package/esm/datepicker/types.js +1 -1
- package/esm/datepicker/utils/calendar-header-helpers.js +45 -0
- package/esm/datepicker/utils/date-helpers.js +1 -1
- package/esm/datepicker/week.js +1 -0
- package/esm/dnd-list/index.js +2 -1
- package/esm/dnd-list/list.js +1 -2
- package/esm/dnd-list/styled-components.js +1 -1
- package/esm/drawer/close-icon.js +3 -2
- package/esm/drawer/drawer.js +5 -2
- package/esm/helper/helper.js +1 -0
- package/esm/layer/layer.js +8 -0
- package/esm/list/list-heading.js +17 -6
- package/esm/map-marker/constants.js +62 -0
- package/esm/map-marker/fixed-marker.js +137 -0
- package/esm/map-marker/floating-marker.js +94 -0
- package/esm/map-marker/index.js +9 -0
- package/esm/map-marker/pin-head.js +144 -0
- package/esm/map-marker/styled-components.js +168 -0
- package/esm/map-marker/types.js +8 -0
- package/esm/menu/maybe-child-menu.js +1 -0
- package/esm/popover/popover.js +6 -5
- package/esm/popover/stateful-container.js +8 -2
- package/esm/rating/emoticon-rating.js +2 -2
- package/esm/rating/star-rating.js +2 -2
- package/esm/select/select-component.js +19 -5
- package/esm/select/styled-components.js +28 -4
- package/esm/snackbar/snackbar-context.js +16 -4
- package/esm/spinner/styled-components.js +1 -1
- package/esm/table-semantic/styled-components.js +6 -4
- package/esm/table-semantic/table-builder.js +3 -0
- package/esm/themes/dark-theme/color-component-tokens.js +1 -1
- package/esm/themes/light-theme/color-component-tokens.js +9 -9
- package/esm/themes/shared/lighting.js +5 -1
- package/esm/timepicker/timepicker.js +17 -11
- package/esm/tooltip/styled-components.js +8 -0
- package/esm/tooltip/tooltip.js +1 -0
- package/helper/helper.js +1 -0
- package/helper/helper.js.flow +1 -0
- package/layer/layer.js +8 -0
- package/layer/layer.js.flow +9 -0
- package/link/index.d.ts +1 -0
- package/list/index.d.ts +36 -0
- package/list/list-heading.js +24 -7
- package/list/list-heading.js.flow +17 -8
- package/map-marker/constants.js +82 -0
- package/map-marker/constants.js.flow +74 -0
- package/map-marker/fixed-marker.js +152 -0
- package/map-marker/fixed-marker.js.flow +137 -0
- package/map-marker/floating-marker.js +109 -0
- package/map-marker/floating-marker.js.flow +102 -0
- package/map-marker/index.d.ts +105 -0
- package/map-marker/index.js +55 -0
- package/map-marker/index.js.flow +23 -0
- package/map-marker/package.json +4 -0
- package/map-marker/pin-head.js +159 -0
- package/map-marker/pin-head.js.flow +155 -0
- package/map-marker/styled-components.js +184 -0
- package/map-marker/styled-components.js.flow +177 -0
- package/map-marker/types.js +11 -0
- package/map-marker/types.js.flow +114 -0
- package/menu/index.d.ts +7 -0
- package/menu/maybe-child-menu.js +1 -0
- package/menu/maybe-child-menu.js.flow +1 -0
- package/menu/types.js.flow +12 -0
- package/modal/index.d.ts +1 -1
- package/modal/types.js.flow +4 -1
- package/package.json +5 -3
- package/popover/index.d.ts +2 -1
- package/popover/popover.js +6 -5
- package/popover/popover.js.flow +11 -4
- package/popover/stateful-container.js +8 -2
- package/popover/stateful-container.js.flow +5 -0
- package/popover/types.js.flow +6 -1
- package/rating/emoticon-rating.js +2 -2
- package/rating/emoticon-rating.js.flow +4 -1
- package/rating/star-rating.js +2 -2
- package/rating/star-rating.js.flow +4 -1
- package/select/select-component.js +19 -5
- package/select/select-component.js.flow +19 -5
- package/select/styled-components.js +28 -4
- package/select/styled-components.js.flow +30 -2
- package/select/types.js.flow +9 -0
- package/snackbar/index.d.ts +21 -16
- package/snackbar/snackbar-context.js +15 -4
- package/snackbar/snackbar-context.js.flow +15 -3
- package/spinner/styled-components.js +1 -1
- package/spinner/styled-components.js.flow +1 -1
- package/table-semantic/styled-components.js +6 -4
- package/table-semantic/styled-components.js.flow +6 -4
- package/table-semantic/table-builder.js +3 -0
- package/table-semantic/table-builder.js.flow +3 -0
- package/themes/dark-theme/color-component-tokens.js +1 -1
- package/themes/dark-theme/color-component-tokens.js.flow +1 -1
- package/themes/light-theme/color-component-tokens.js +9 -9
- package/themes/light-theme/color-component-tokens.js.flow +9 -9
- package/themes/shared/lighting.js +5 -1
- package/themes/shared/lighting.js.flow +4 -0
- package/themes/types.js.flow +4 -0
- package/timepicker/index.d.ts +1 -0
- package/timepicker/timepicker.js +17 -11
- package/timepicker/timepicker.js.flow +31 -12
- package/timepicker/types.js.flow +10 -0
- package/tooltip/styled-components.js +8 -0
- package/tooltip/styled-components.js.flow +8 -0
- package/tooltip/tooltip.js +1 -0
- package/tooltip/tooltip.js.flow +6 -1
|
@@ -9,17 +9,18 @@ This source code is licensed under the MIT license found in the
|
|
|
9
9
|
LICENSE file in the root directory of this source tree.
|
|
10
10
|
*/
|
|
11
11
|
import * as React from 'react';
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
12
|
+
import ChevronRight from '../icon/chevron-right.js';
|
|
13
|
+
import ChevronLeft from '../icon/chevron-left.js';
|
|
14
|
+
import ChevronDown from '../icon/chevron-down.js';
|
|
15
15
|
import dateFnsAdapter from './utils/date-fns-adapter.js';
|
|
16
16
|
import DateHelpers from './utils/date-helpers.js';
|
|
17
|
+
import { getFilteredMonthItems } from './utils/calendar-header-helpers.js';
|
|
17
18
|
import { StatefulMenu } from '../menu/index.js';
|
|
18
19
|
import { Popover } from '../popover/index.js';
|
|
19
20
|
import { LocaleContext } from '../locale/index.js';
|
|
20
21
|
import { ThemeContext } from '../styles/theme-provider.js';
|
|
21
22
|
import { StyledCalendarHeader, StyledPrevButton, StyledNextButton, StyledMonthHeader, StyledWeekdayHeader, StyledMonthYearSelectButton, StyledMonthYearSelectIconContainer } from './styled-components.js';
|
|
22
|
-
import { ORIENTATION, WEEKDAYS } from './constants.js';
|
|
23
|
+
import { ORIENTATION, WEEKDAYS, DENSITY } from './constants.js';
|
|
23
24
|
import { getOverrides, mergeOverrides } from '../helpers/overrides.js';
|
|
24
25
|
import { isFocusVisible, forkFocus, forkBlur } from '../utils/focusVisible.js';
|
|
25
26
|
|
|
@@ -38,10 +39,6 @@ const DIRECTION = {
|
|
|
38
39
|
PREVIOUS: 'previous'
|
|
39
40
|
};
|
|
40
41
|
|
|
41
|
-
function yearMonthToId(year, month) {
|
|
42
|
-
return `${year}-${month}`;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
42
|
function idToYearMonth(id) {
|
|
46
43
|
return id.split('-').map(Number);
|
|
47
44
|
}
|
|
@@ -52,14 +49,13 @@ export default class CalendarHeader extends React.Component {
|
|
|
52
49
|
|
|
53
50
|
_defineProperty(this, "dateHelpers", void 0);
|
|
54
51
|
|
|
55
|
-
_defineProperty(this, "
|
|
52
|
+
_defineProperty(this, "monthItems", void 0);
|
|
56
53
|
|
|
57
|
-
_defineProperty(this, "
|
|
58
|
-
|
|
59
|
-
_defineProperty(this, "maxYear", void 0);
|
|
54
|
+
_defineProperty(this, "yearItems", void 0);
|
|
60
55
|
|
|
61
56
|
_defineProperty(this, "state", {
|
|
62
|
-
|
|
57
|
+
isMonthDropdownOpen: false,
|
|
58
|
+
isYearDropdownOpen: false,
|
|
63
59
|
isFocusVisible: false
|
|
64
60
|
});
|
|
65
61
|
|
|
@@ -67,15 +63,71 @@ export default class CalendarHeader extends React.Component {
|
|
|
67
63
|
return this.props.date || this.dateHelpers.date();
|
|
68
64
|
});
|
|
69
65
|
|
|
70
|
-
_defineProperty(this, "
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
66
|
+
_defineProperty(this, "getYearItems", () => {
|
|
67
|
+
const date = this.getDateProp();
|
|
68
|
+
const maxDate = this.props.maxDate;
|
|
69
|
+
const minDate = this.props.minDate;
|
|
70
|
+
const maxYear = maxDate ? this.dateHelpers.getYear(maxDate) : MAX_YEAR;
|
|
71
|
+
const minYear = minDate ? this.dateHelpers.getYear(minDate) : MIN_YEAR;
|
|
72
|
+
const selectedMonth = this.dateHelpers.getMonth(date); // TODO: this logic can be optimized to only run when minDate / maxDate change
|
|
73
|
+
|
|
74
|
+
this.yearItems = Array.from({
|
|
75
|
+
length: maxYear - minYear + 1
|
|
76
|
+
}, (_, i) => minYear + i).map(year => ({
|
|
77
|
+
id: year.toString(),
|
|
78
|
+
label: year.toString()
|
|
79
|
+
}));
|
|
80
|
+
const monthOfMaxDate = maxDate ? this.dateHelpers.getMonth(maxDate) : MAX_MONTH;
|
|
81
|
+
const monthOfMinDate = minDate ? this.dateHelpers.getMonth(minDate) : MIN_MONTH; // Generates array like [0,1,.... monthOfMaxDate]
|
|
82
|
+
|
|
83
|
+
const maxYearMonths = Array.from({
|
|
84
|
+
length: monthOfMaxDate + 1
|
|
85
|
+
}, (x, i) => i); // Generates array like [monthOfMinDate, ...., 10, 11]
|
|
86
|
+
|
|
87
|
+
const minYearMonths = Array.from({
|
|
88
|
+
length: 12 - monthOfMinDate
|
|
89
|
+
}, (x, i) => i + monthOfMinDate);
|
|
90
|
+
|
|
91
|
+
if (selectedMonth > maxYearMonths[maxYearMonths.length - 1]) {
|
|
92
|
+
const lastIdx = this.yearItems.length - 1;
|
|
93
|
+
this.yearItems[lastIdx] = { ...this.yearItems[lastIdx],
|
|
94
|
+
disabled: true
|
|
95
|
+
};
|
|
78
96
|
}
|
|
97
|
+
|
|
98
|
+
if (selectedMonth < minYearMonths[0]) {
|
|
99
|
+
this.yearItems[0] = { ...this.yearItems[0],
|
|
100
|
+
disabled: true
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
_defineProperty(this, "getMonthItems", () => {
|
|
106
|
+
const date = this.getDateProp();
|
|
107
|
+
const year = this.dateHelpers.getYear(date);
|
|
108
|
+
const maxDate = this.props.maxDate;
|
|
109
|
+
const minDate = this.props.minDate;
|
|
110
|
+
const maxYear = maxDate ? this.dateHelpers.getYear(maxDate) : MAX_YEAR;
|
|
111
|
+
const minYear = minDate ? this.dateHelpers.getYear(minDate) : MIN_YEAR;
|
|
112
|
+
const monthOfMaxDate = maxDate ? this.dateHelpers.getMonth(maxDate) : MAX_MONTH; // Generates array like [0,1,.... monthOfMaxDate]
|
|
113
|
+
|
|
114
|
+
const maxYearMonths = Array.from({
|
|
115
|
+
length: monthOfMaxDate + 1
|
|
116
|
+
}, (x, i) => i);
|
|
117
|
+
const monthOfMinDate = minDate ? this.dateHelpers.getMonth(minDate) : MIN_MONTH; // Generates array like [monthOfMinDate, ...., 10, 11]
|
|
118
|
+
|
|
119
|
+
const minYearMonths = Array.from({
|
|
120
|
+
length: 12 - monthOfMinDate
|
|
121
|
+
}, (x, i) => i + monthOfMinDate);
|
|
122
|
+
const maxMinYearMonthsIntersection = maxYearMonths.filter(year => minYearMonths.includes(year));
|
|
123
|
+
const filterMonthsList = year === maxYear && year === minYear ? maxMinYearMonthsIntersection : year === maxYear ? maxYearMonths : year === minYear ? minYearMonths : null;
|
|
124
|
+
|
|
125
|
+
const formatMonthLabel = month => this.dateHelpers.getMonthInLocale(month, this.props.locale);
|
|
126
|
+
|
|
127
|
+
this.monthItems = getFilteredMonthItems({
|
|
128
|
+
filterMonthsList,
|
|
129
|
+
formatMonthLabel
|
|
130
|
+
});
|
|
79
131
|
});
|
|
80
132
|
|
|
81
133
|
_defineProperty(this, "increaseMonth", () => {
|
|
@@ -153,7 +205,8 @@ export default class CalendarHeader extends React.Component {
|
|
|
153
205
|
}) => {
|
|
154
206
|
const date = this.getDateProp();
|
|
155
207
|
const {
|
|
156
|
-
overrides = {}
|
|
208
|
+
overrides = {},
|
|
209
|
+
density
|
|
157
210
|
} = this.props;
|
|
158
211
|
const allPrevDaysDisabled = this.dateHelpers.monthDisabledBefore(date, this.props);
|
|
159
212
|
let isDisabled = false;
|
|
@@ -176,7 +229,7 @@ export default class CalendarHeader extends React.Component {
|
|
|
176
229
|
}
|
|
177
230
|
|
|
178
231
|
const [PrevButton, prevButtonProps] = getOverrides(overrides.PrevButton, StyledPrevButton);
|
|
179
|
-
const [PrevButtonIcon, prevButtonIconProps] = getOverrides(overrides.PrevButtonIcon, theme.direction === 'rtl' ?
|
|
232
|
+
const [PrevButtonIcon, prevButtonIconProps] = getOverrides(overrides.PrevButtonIcon, theme.direction === 'rtl' ? ChevronRight : ChevronLeft);
|
|
180
233
|
let clickHandler = this.decreaseMonth;
|
|
181
234
|
|
|
182
235
|
if (allPrevDaysDisabled) {
|
|
@@ -193,7 +246,7 @@ export default class CalendarHeader extends React.Component {
|
|
|
193
246
|
$disabled: isDisabled,
|
|
194
247
|
$order: this.props.order
|
|
195
248
|
}, prevButtonProps), isHidden ? null : /*#__PURE__*/React.createElement(PrevButtonIcon, _extends({
|
|
196
|
-
size:
|
|
249
|
+
size: density === DENSITY.high ? 24 : 36,
|
|
197
250
|
overrides: {
|
|
198
251
|
Svg: {
|
|
199
252
|
style: navBtnStyle
|
|
@@ -208,7 +261,8 @@ export default class CalendarHeader extends React.Component {
|
|
|
208
261
|
}) => {
|
|
209
262
|
const date = this.getDateProp();
|
|
210
263
|
const {
|
|
211
|
-
overrides = {}
|
|
264
|
+
overrides = {},
|
|
265
|
+
density
|
|
212
266
|
} = this.props;
|
|
213
267
|
const allNextDaysDisabled = this.dateHelpers.monthDisabledAfter(date, this.props);
|
|
214
268
|
let isDisabled = false;
|
|
@@ -231,7 +285,7 @@ export default class CalendarHeader extends React.Component {
|
|
|
231
285
|
}
|
|
232
286
|
|
|
233
287
|
const [NextButton, nextButtonProps] = getOverrides(overrides.NextButton, StyledNextButton);
|
|
234
|
-
const [NextButtonIcon, nextButtonIconProps] = getOverrides(overrides.NextButtonIcon, theme.direction === 'rtl' ?
|
|
288
|
+
const [NextButtonIcon, nextButtonIconProps] = getOverrides(overrides.NextButtonIcon, theme.direction === 'rtl' ? ChevronLeft : ChevronRight);
|
|
235
289
|
let clickHandler = this.increaseMonth; // The other option is to always provide a click handler and let customers
|
|
236
290
|
// override its functionality based on the `$allPrevDaysDisabled` prop
|
|
237
291
|
// in a custom NextButton component override
|
|
@@ -252,7 +306,7 @@ export default class CalendarHeader extends React.Component {
|
|
|
252
306
|
$isFocusVisible: this.state.isFocusVisible,
|
|
253
307
|
$order: this.props.order
|
|
254
308
|
}, nextButtonProps), isHidden ? null : /*#__PURE__*/React.createElement(NextButtonIcon, _extends({
|
|
255
|
-
size:
|
|
309
|
+
size: density === DENSITY.high ? 24 : 36,
|
|
256
310
|
overrides: {
|
|
257
311
|
Svg: {
|
|
258
312
|
style: navBtnStyle
|
|
@@ -262,7 +316,7 @@ export default class CalendarHeader extends React.Component {
|
|
|
262
316
|
});
|
|
263
317
|
|
|
264
318
|
_defineProperty(this, "canArrowsOpenDropdown", event => {
|
|
265
|
-
if (!this.state.
|
|
319
|
+
if (!this.state.isMonthDropdownOpen && !this.state.isYearDropdownOpen) {
|
|
266
320
|
if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
|
|
267
321
|
return true;
|
|
268
322
|
}
|
|
@@ -273,11 +327,12 @@ export default class CalendarHeader extends React.Component {
|
|
|
273
327
|
|
|
274
328
|
_defineProperty(this, "renderMonthYearDropdown", () => {
|
|
275
329
|
const date = this.getDateProp();
|
|
330
|
+
const month = this.dateHelpers.getMonth(date);
|
|
331
|
+
const year = this.dateHelpers.getYear(date);
|
|
276
332
|
const {
|
|
277
333
|
locale,
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
overrides = {}
|
|
334
|
+
overrides = {},
|
|
335
|
+
density
|
|
281
336
|
} = this.props;
|
|
282
337
|
const [MonthYearSelectButton, monthYearSelectButtonProps] = getOverrides(overrides.MonthYearSelectButton, StyledMonthYearSelectButton);
|
|
283
338
|
const [MonthYearSelectIconContainer, monthYearSelectIconContainerProps] = getOverrides(overrides.MonthYearSelectIconContainer, StyledMonthYearSelectIconContainer);
|
|
@@ -294,79 +349,38 @@ export default class CalendarHeader extends React.Component {
|
|
|
294
349
|
menuProps && menuProps.overrides); // $FlowFixMe
|
|
295
350
|
|
|
296
351
|
menuProps.overrides = menuOverrides;
|
|
297
|
-
const
|
|
298
|
-
const
|
|
299
|
-
const
|
|
300
|
-
const
|
|
301
|
-
|
|
302
|
-
const maxYearMonths = Array.from({
|
|
303
|
-
length: maxDateMonth + 1
|
|
304
|
-
}, (x, i) => i);
|
|
305
|
-
const minDateMonth = minDate ? this.dateHelpers.getMonth(minDate) : MIN_MONTH; // Generates array like [minDateMonth, ...., 10, 11]
|
|
306
|
-
|
|
307
|
-
const minYearMonths = Array.from({
|
|
308
|
-
length: 12 - minDateMonth
|
|
309
|
-
}, (x, i) => i + minDateMonth);
|
|
310
|
-
|
|
311
|
-
if (this.maxYear !== maxYear || this.minYear !== minYear) {
|
|
312
|
-
this.maxYear = maxYear;
|
|
313
|
-
this.minYear = minYear;
|
|
314
|
-
this.items = [];
|
|
315
|
-
|
|
316
|
-
for (let i = minYear; i <= maxYear; i++) {
|
|
317
|
-
let months;
|
|
318
|
-
|
|
319
|
-
if (i === minYear && i === maxYear) {
|
|
320
|
-
months = maxYearMonths.filter(month => minYearMonths.includes(month));
|
|
321
|
-
} else if (i === minYear) {
|
|
322
|
-
months = minYearMonths;
|
|
323
|
-
} else if (i === maxYear) {
|
|
324
|
-
months = maxYearMonths;
|
|
325
|
-
} else {
|
|
326
|
-
months = defaultMonths;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
months.forEach(month => {
|
|
330
|
-
this.items.push({
|
|
331
|
-
id: yearMonthToId(i, month),
|
|
332
|
-
label: `${this.dateHelpers.getMonthInLocale(month, locale)} ${i}`
|
|
333
|
-
});
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
const initialIndex = this.items.findIndex(item => {
|
|
339
|
-
return item.id === yearMonthToId(this.dateHelpers.getYear(date), this.dateHelpers.getMonth(date));
|
|
340
|
-
});
|
|
341
|
-
const monthYearTitle = `${this.dateHelpers.getMonthInLocale(this.dateHelpers.getMonth(date), locale)} ${this.dateHelpers.getYear(date)}`;
|
|
342
|
-
return this.isMultiMonthHorizontal() ? /*#__PURE__*/React.createElement("div", null, monthYearTitle) : /*#__PURE__*/React.createElement(OverriddenPopover, _extends({
|
|
352
|
+
const initialMonthIndex = this.monthItems.findIndex(month => month.id === this.dateHelpers.getMonth(date).toString());
|
|
353
|
+
const initialYearIndex = this.yearItems.findIndex(year => year.id === this.dateHelpers.getYear(date).toString());
|
|
354
|
+
const monthTitle = `${this.dateHelpers.getMonthInLocale(this.dateHelpers.getMonth(date), locale)}`;
|
|
355
|
+
const yearTitle = `${this.dateHelpers.getYear(date)}`;
|
|
356
|
+
return this.isMultiMonthHorizontal() ? /*#__PURE__*/React.createElement("div", null, `${monthTitle} ${yearTitle}`) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(OverriddenPopover, _extends({
|
|
343
357
|
placement: "bottom",
|
|
344
358
|
autoFocus: true,
|
|
345
359
|
focusLock: true,
|
|
346
|
-
isOpen: this.state.
|
|
360
|
+
isOpen: this.state.isMonthDropdownOpen,
|
|
347
361
|
onClick: () => {
|
|
348
362
|
this.setState(prev => ({
|
|
349
|
-
|
|
363
|
+
isMonthDropdownOpen: !prev.isMonthDropdownOpen
|
|
350
364
|
}));
|
|
351
365
|
},
|
|
352
366
|
onClickOutside: () => this.setState({
|
|
353
|
-
|
|
367
|
+
isMonthDropdownOpen: false
|
|
354
368
|
}),
|
|
355
369
|
onEsc: () => this.setState({
|
|
356
|
-
|
|
370
|
+
isMonthDropdownOpen: false
|
|
357
371
|
}),
|
|
358
372
|
content: () => /*#__PURE__*/React.createElement(OverriddenStatefulMenu, _extends({
|
|
359
373
|
initialState: {
|
|
360
|
-
highlightedIndex:
|
|
374
|
+
highlightedIndex: initialMonthIndex,
|
|
361
375
|
isFocused: true
|
|
362
376
|
},
|
|
363
|
-
items: this.
|
|
377
|
+
items: this.monthItems,
|
|
364
378
|
onItemSelect: ({
|
|
365
379
|
item,
|
|
366
380
|
event
|
|
367
381
|
}) => {
|
|
368
382
|
event.preventDefault();
|
|
369
|
-
const
|
|
383
|
+
const month = idToYearMonth(item.id);
|
|
370
384
|
const updatedDate = this.dateHelpers.set(date, {
|
|
371
385
|
year,
|
|
372
386
|
month
|
|
@@ -374,11 +388,81 @@ export default class CalendarHeader extends React.Component {
|
|
|
374
388
|
this.props.onMonthChange && this.props.onMonthChange({
|
|
375
389
|
date: updatedDate
|
|
376
390
|
});
|
|
391
|
+
this.setState({
|
|
392
|
+
isMonthDropdownOpen: false
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
}, menuProps))
|
|
396
|
+
}, popoverProps), /*#__PURE__*/React.createElement(MonthYearSelectButton, _extends({
|
|
397
|
+
"aria-live": "polite",
|
|
398
|
+
type: "button",
|
|
399
|
+
$isFocusVisible: this.state.isFocusVisible,
|
|
400
|
+
$density: density,
|
|
401
|
+
onKeyUp: event => {
|
|
402
|
+
if (this.canArrowsOpenDropdown(event)) {
|
|
403
|
+
this.setState({
|
|
404
|
+
isMonthDropdownOpen: true
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
},
|
|
408
|
+
onKeyDown: event => {
|
|
409
|
+
if (this.canArrowsOpenDropdown(event)) {
|
|
410
|
+
// disables page scroll
|
|
411
|
+
event.preventDefault();
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
if (event.key === 'Tab') {
|
|
415
|
+
this.setState({
|
|
416
|
+
isMonthDropdownOpen: false
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
}, monthYearSelectButtonProps), monthTitle, /*#__PURE__*/React.createElement(MonthYearSelectIconContainer, monthYearSelectIconContainerProps, /*#__PURE__*/React.createElement(ChevronDown, {
|
|
421
|
+
title: "",
|
|
422
|
+
overrides: {
|
|
423
|
+
Svg: {
|
|
424
|
+
props: {
|
|
425
|
+
role: 'presentation'
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
},
|
|
429
|
+
size: density === DENSITY.high ? 16 : 24
|
|
430
|
+
})))), /*#__PURE__*/React.createElement(OverriddenPopover, _extends({
|
|
431
|
+
placement: "bottom",
|
|
432
|
+
focusLock: true,
|
|
433
|
+
isOpen: this.state.isYearDropdownOpen,
|
|
434
|
+
onClick: () => {
|
|
435
|
+
this.setState(prev => ({
|
|
436
|
+
isYearDropdownOpen: !prev.isYearDropdownOpen
|
|
437
|
+
}));
|
|
438
|
+
},
|
|
439
|
+
onClickOutside: () => this.setState({
|
|
440
|
+
isYearDropdownOpen: false
|
|
441
|
+
}),
|
|
442
|
+
onEsc: () => this.setState({
|
|
443
|
+
isYearDropdownOpen: false
|
|
444
|
+
}),
|
|
445
|
+
content: () => /*#__PURE__*/React.createElement(OverriddenStatefulMenu, _extends({
|
|
446
|
+
initialState: {
|
|
447
|
+
highlightedIndex: initialYearIndex,
|
|
448
|
+
isFocused: true
|
|
449
|
+
},
|
|
450
|
+
items: this.yearItems,
|
|
451
|
+
onItemSelect: ({
|
|
452
|
+
item,
|
|
453
|
+
event
|
|
454
|
+
}) => {
|
|
455
|
+
event.preventDefault();
|
|
456
|
+
const year = idToYearMonth(item.id);
|
|
457
|
+
const updatedDate = this.dateHelpers.set(date, {
|
|
458
|
+
year,
|
|
459
|
+
month
|
|
460
|
+
});
|
|
377
461
|
this.props.onYearChange && this.props.onYearChange({
|
|
378
462
|
date: updatedDate
|
|
379
463
|
});
|
|
380
464
|
this.setState({
|
|
381
|
-
|
|
465
|
+
isYearDropdownOpen: false
|
|
382
466
|
});
|
|
383
467
|
}
|
|
384
468
|
}, menuProps))
|
|
@@ -386,10 +470,11 @@ export default class CalendarHeader extends React.Component {
|
|
|
386
470
|
"aria-live": "polite",
|
|
387
471
|
type: "button",
|
|
388
472
|
$isFocusVisible: this.state.isFocusVisible,
|
|
473
|
+
$density: density,
|
|
389
474
|
onKeyUp: event => {
|
|
390
475
|
if (this.canArrowsOpenDropdown(event)) {
|
|
391
476
|
this.setState({
|
|
392
|
-
|
|
477
|
+
isYearDropdownOpen: true
|
|
393
478
|
});
|
|
394
479
|
}
|
|
395
480
|
},
|
|
@@ -401,11 +486,11 @@ export default class CalendarHeader extends React.Component {
|
|
|
401
486
|
|
|
402
487
|
if (event.key === 'Tab') {
|
|
403
488
|
this.setState({
|
|
404
|
-
|
|
489
|
+
isYearDropdownOpen: false
|
|
405
490
|
});
|
|
406
491
|
}
|
|
407
492
|
}
|
|
408
|
-
}, monthYearSelectButtonProps),
|
|
493
|
+
}, monthYearSelectButtonProps), yearTitle, /*#__PURE__*/React.createElement(MonthYearSelectIconContainer, monthYearSelectIconContainerProps, /*#__PURE__*/React.createElement(ChevronDown, {
|
|
409
494
|
title: "",
|
|
410
495
|
overrides: {
|
|
411
496
|
Svg: {
|
|
@@ -413,23 +498,47 @@ export default class CalendarHeader extends React.Component {
|
|
|
413
498
|
role: 'presentation'
|
|
414
499
|
}
|
|
415
500
|
}
|
|
416
|
-
}
|
|
417
|
-
|
|
501
|
+
},
|
|
502
|
+
size: density === DENSITY.high ? 16 : 24
|
|
503
|
+
})))));
|
|
418
504
|
});
|
|
419
505
|
|
|
420
506
|
this.dateHelpers = new DateHelpers(props.adapter);
|
|
421
|
-
this.
|
|
507
|
+
this.monthItems = [];
|
|
508
|
+
this.yearItems = [];
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
componentDidMount() {
|
|
512
|
+
this.getYearItems();
|
|
513
|
+
this.getMonthItems();
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
componentDidUpdate(prevProps) {
|
|
517
|
+
const selectedMonthDidChange = this.dateHelpers.getMonth(this.props.date) !== this.dateHelpers.getMonth(prevProps.date);
|
|
518
|
+
const selectedYearDidChange = this.dateHelpers.getYear(this.props.date) !== this.dateHelpers.getYear(prevProps.date);
|
|
519
|
+
|
|
520
|
+
if (selectedMonthDidChange) {
|
|
521
|
+
// re-calculate yearItems
|
|
522
|
+
this.getYearItems();
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
if (selectedYearDidChange) {
|
|
526
|
+
// re-calculate monthItems
|
|
527
|
+
this.getMonthItems();
|
|
528
|
+
}
|
|
422
529
|
}
|
|
423
530
|
|
|
424
531
|
render() {
|
|
425
532
|
const {
|
|
426
|
-
overrides = {}
|
|
533
|
+
overrides = {},
|
|
534
|
+
density
|
|
427
535
|
} = this.props;
|
|
428
536
|
const [CalendarHeader, calendarHeaderProps] = getOverrides(overrides.CalendarHeader, StyledCalendarHeader);
|
|
429
537
|
const [MonthHeader, monthHeaderProps] = getOverrides(overrides.MonthHeader, StyledMonthHeader);
|
|
430
538
|
const [WeekdayHeader, weekdayHeaderProps] = getOverrides(overrides.WeekdayHeader, StyledWeekdayHeader);
|
|
431
539
|
const startOfWeek = this.dateHelpers.getStartOfWeek(this.getDateProp(), this.props.locale);
|
|
432
540
|
return /*#__PURE__*/React.createElement(ThemeContext.Consumer, null, theme => /*#__PURE__*/React.createElement(LocaleContext.Consumer, null, locale => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CalendarHeader, _extends({}, calendarHeaderProps, {
|
|
541
|
+
$density: this.props.density,
|
|
433
542
|
onFocus: forkFocus(calendarHeaderProps, this.handleFocus),
|
|
434
543
|
onBlur: forkBlur(calendarHeaderProps, this.handleBlur)
|
|
435
544
|
}), this.renderPreviousMonthButton({
|
|
@@ -445,7 +554,9 @@ export default class CalendarHeader extends React.Component {
|
|
|
445
554
|
return /*#__PURE__*/React.createElement(WeekdayHeader, _extends({
|
|
446
555
|
key: offset,
|
|
447
556
|
alt: this.dateHelpers.getWeekdayInLocale(day, this.props.locale)
|
|
448
|
-
}, weekdayHeaderProps
|
|
557
|
+
}, weekdayHeaderProps, {
|
|
558
|
+
$density: density
|
|
559
|
+
}), this.dateHelpers.getWeekdayMinInLocale(day, this.props.locale));
|
|
449
560
|
})))));
|
|
450
561
|
}
|
|
451
562
|
|
|
@@ -19,7 +19,7 @@ import { StyledCalendarContainer, StyledMonthContainer, StyledRoot, StyledSelect
|
|
|
19
19
|
import dateFnsAdapter from './utils/date-fns-adapter.js';
|
|
20
20
|
import DateHelpers from './utils/date-helpers.js';
|
|
21
21
|
import { getOverrides, mergeOverrides } from '../helpers/overrides.js';
|
|
22
|
-
import { ORIENTATION } from './constants.js';
|
|
22
|
+
import { DENSITY, ORIENTATION } from './constants.js';
|
|
23
23
|
export default class Calendar extends React.Component {
|
|
24
24
|
constructor(props) {
|
|
25
25
|
super(props);
|
|
@@ -329,10 +329,13 @@ export default class Calendar extends React.Component {
|
|
|
329
329
|
"aria-roledescription": translations.ariaRoleDescCalMonth,
|
|
330
330
|
"aria-multiselectable": this.props.range || null,
|
|
331
331
|
onKeyDown: this.onKeyDown
|
|
332
|
-
}, calendarContainerProps
|
|
332
|
+
}, calendarContainerProps, {
|
|
333
|
+
$density: this.props.density
|
|
334
|
+
}), /*#__PURE__*/React.createElement(Month, {
|
|
333
335
|
adapter: this.props.adapter,
|
|
334
336
|
date: monthDate,
|
|
335
337
|
dateLabel: this.props.dateLabel,
|
|
338
|
+
density: this.props.density,
|
|
336
339
|
excludeDates: this.props.excludeDates,
|
|
337
340
|
filterDate: this.props.filterDate,
|
|
338
341
|
highlightedDate: this.state.highlightedDate,
|
|
@@ -571,6 +574,7 @@ export default class Calendar extends React.Component {
|
|
|
571
574
|
const [Root, rootProps] = getOverrides(overrides.Root, StyledRoot);
|
|
572
575
|
const [startDate, endDate] = [].concat(this.props.value);
|
|
573
576
|
return /*#__PURE__*/React.createElement(LocaleContext.Consumer, null, locale => /*#__PURE__*/React.createElement(Root, _extends({
|
|
577
|
+
$density: this.props.density,
|
|
574
578
|
"data-baseweb": "calendar",
|
|
575
579
|
role: "application",
|
|
576
580
|
"aria-roledescription": "datepicker",
|
|
@@ -593,6 +597,7 @@ export default class Calendar extends React.Component {
|
|
|
593
597
|
_defineProperty(Calendar, "defaultProps", {
|
|
594
598
|
autoFocusCalendar: false,
|
|
595
599
|
dateLabel: null,
|
|
600
|
+
density: DENSITY.default,
|
|
596
601
|
excludeDates: null,
|
|
597
602
|
filterDate: null,
|
|
598
603
|
highlightedDate: null,
|
|
@@ -20,4 +20,9 @@ export const STATE_CHANGE_TYPE = Object.freeze({
|
|
|
20
20
|
mouseOver: 'mouseOver',
|
|
21
21
|
mouseLeave: 'mouseLeave'
|
|
22
22
|
});
|
|
23
|
-
export const WEEKDAYS = [0, 1, 2, 3, 4, 5, 6];
|
|
23
|
+
export const WEEKDAYS = [0, 1, 2, 3, 4, 5, 6];
|
|
24
|
+
export const DEFAULT_MONTHS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
|
|
25
|
+
export const DENSITY = {
|
|
26
|
+
high: 'high',
|
|
27
|
+
default: 'default'
|
|
28
|
+
};
|