rsuite 5.18.0-beta.3 → 5.18.1-beta.4

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 (83) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/Calendar/styles/index.less +30 -11
  3. package/DateRangePicker/styles/index.less +1 -1
  4. package/Nav/styles/index.less +1 -0
  5. package/cjs/Calendar/Calendar.d.ts +20 -55
  6. package/cjs/Calendar/Calendar.js +84 -163
  7. package/cjs/Calendar/CalendarBody.d.ts +4 -0
  8. package/cjs/Calendar/{View.js → CalendarBody.js} +5 -5
  9. package/cjs/Calendar/CalendarContainer.d.ts +61 -0
  10. package/cjs/Calendar/CalendarContainer.js +233 -0
  11. package/cjs/Calendar/{Header.d.ts → CalendarHeader.d.ts} +9 -7
  12. package/cjs/Calendar/{Header.js → CalendarHeader.js} +4 -4
  13. package/cjs/Calendar/Table.js +1 -1
  14. package/cjs/Calendar/TableHeaderRow.js +1 -1
  15. package/cjs/Calendar/TableRow.js +1 -1
  16. package/cjs/Calendar/index.d.ts +6 -5
  17. package/cjs/Calendar/index.js +8 -7
  18. package/cjs/Calendar/useCalendarState.d.ts +11 -0
  19. package/cjs/Calendar/useCalendarState.js +39 -0
  20. package/cjs/DatePicker/DatePicker.js +10 -47
  21. package/cjs/DatePicker/utils.d.ts +1 -8
  22. package/cjs/DatePicker/utils.js +24 -64
  23. package/cjs/DateRangePicker/Calendar.d.ts +1 -1
  24. package/cjs/DateRangePicker/Calendar.js +2 -17
  25. package/cjs/DateRangePicker/DateRangePicker.js +3 -3
  26. package/cjs/DateRangePicker/utils.d.ts +1 -3
  27. package/cjs/DateRangePicker/utils.js +14 -42
  28. package/cjs/List/ListItem.d.ts +1 -0
  29. package/cjs/List/ListItem.js +5 -2
  30. package/cjs/Stack/Stack.js +1 -1
  31. package/cjs/index.d.ts +1 -1
  32. package/cjs/utils/BrowserDetection.d.ts +7 -0
  33. package/cjs/utils/BrowserDetection.js +52 -2
  34. package/cjs/utils/dateUtils.d.ts +4 -4
  35. package/cjs/utils/dateUtils.js +9 -9
  36. package/dist/rsuite-rtl.css +43 -20
  37. package/dist/rsuite-rtl.min.css +1 -1
  38. package/dist/rsuite-rtl.min.css.map +1 -1
  39. package/dist/rsuite.css +43 -20
  40. package/dist/rsuite.js +51 -40
  41. package/dist/rsuite.js.map +1 -1
  42. package/dist/rsuite.min.css +1 -1
  43. package/dist/rsuite.min.css.map +1 -1
  44. package/dist/rsuite.min.js +1 -1
  45. package/dist/rsuite.min.js.map +1 -1
  46. package/esm/Calendar/Calendar.d.ts +20 -55
  47. package/esm/Calendar/Calendar.js +82 -154
  48. package/esm/Calendar/CalendarBody.d.ts +4 -0
  49. package/esm/Calendar/{View.js → CalendarBody.js} +5 -5
  50. package/esm/Calendar/CalendarContainer.d.ts +61 -0
  51. package/esm/Calendar/CalendarContainer.js +208 -0
  52. package/esm/Calendar/{Header.d.ts → CalendarHeader.d.ts} +9 -7
  53. package/esm/Calendar/{Header.js → CalendarHeader.js} +4 -4
  54. package/esm/Calendar/Table.js +1 -1
  55. package/esm/Calendar/TableHeaderRow.js +1 -1
  56. package/esm/Calendar/TableRow.js +1 -1
  57. package/esm/Calendar/index.d.ts +6 -5
  58. package/esm/Calendar/index.js +5 -4
  59. package/esm/Calendar/useCalendarState.d.ts +11 -0
  60. package/esm/Calendar/useCalendarState.js +31 -0
  61. package/esm/DatePicker/DatePicker.js +10 -46
  62. package/esm/DatePicker/utils.d.ts +1 -8
  63. package/esm/DatePicker/utils.js +23 -57
  64. package/esm/DateRangePicker/Calendar.d.ts +1 -1
  65. package/esm/DateRangePicker/Calendar.js +2 -16
  66. package/esm/DateRangePicker/DateRangePicker.js +5 -5
  67. package/esm/DateRangePicker/utils.d.ts +1 -3
  68. package/esm/DateRangePicker/utils.js +13 -33
  69. package/esm/List/ListItem.d.ts +1 -0
  70. package/esm/List/ListItem.js +5 -2
  71. package/esm/Stack/Stack.js +2 -2
  72. package/esm/index.d.ts +1 -1
  73. package/esm/utils/BrowserDetection.d.ts +7 -0
  74. package/esm/utils/BrowserDetection.js +41 -0
  75. package/esm/utils/dateUtils.d.ts +4 -4
  76. package/esm/utils/dateUtils.js +4 -4
  77. package/package.json +1 -1
  78. package/cjs/Calendar/CalendarPanel.d.ts +0 -26
  79. package/cjs/Calendar/CalendarPanel.js +0 -139
  80. package/cjs/Calendar/View.d.ts +0 -4
  81. package/esm/Calendar/CalendarPanel.d.ts +0 -26
  82. package/esm/Calendar/CalendarPanel.js +0 -119
  83. package/esm/Calendar/View.d.ts +0 -4
@@ -1,61 +1,26 @@
1
- import React, { HTMLAttributes } from 'react';
2
- import { HeaderProps } from './Header';
3
- import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
1
+ import React from 'react';
2
+ import Calendar from './CalendarContainer';
4
3
  import { CalendarLocale } from '../locales';
5
- export declare enum CalendarState {
6
- 'DROP_TIME' = "DROP_TIME",
7
- 'DROP_MONTH' = "DROP_MONTH"
8
- }
9
- export interface CalendarProps extends WithAsProps, Omit<HTMLAttributes<HTMLDivElement>, 'onSelect' | 'onChange' | 'onMouseMove'>, Omit<HeaderProps, 'onMoveForward' | 'onMoveBackward' | 'showDate' | 'showTime' | 'showMonth'> {
10
- /** The status of the calendar display: day, month, time. */
11
- calendarState?: CalendarState;
12
- /** The panel render based on date range */
13
- dateRange?: Date[];
14
- /** Disabled date */
15
- disabledDate?: (date: Date) => boolean;
16
- /** Disabled hours */
17
- disabledHours?: (hour: number, date: Date) => boolean;
18
- /** Disabled minutes */
19
- disabledMinutes?: (minute: number, date: Date) => boolean;
20
- /** Hidden seconds */
21
- disabledSeconds?: (second: number, date: Date) => boolean;
22
- /** Format str */
23
- format: string;
24
- /** Hidden hours */
25
- hideHours?: (hour: number, date: Date) => boolean;
26
- /** Hidden minutes */
27
- hideMinutes?: (minute: number, date: Date) => boolean;
28
- /** Hidden seconds */
29
- hideSeconds?: (second: number, date: Date) => boolean;
30
- /** The value that mouse hover on in range selection */
31
- hoverRangeValue?: [Date, Date];
32
- /** Is it in the same month as today */
33
- inSameMonth?: (date: Date) => boolean;
34
- /** ISO 8601 standard, each calendar week begins on Monday and Sunday on the seventh day */
4
+ import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
5
+ export interface CalendarProps extends WithAsProps {
6
+ /** Controlled value */
7
+ value?: Date;
8
+ /** Default value */
9
+ defaultValue?: Date;
10
+ /** ISO 8601 standard, each calendar week begins on Monday and Sunday on the seventh day */
35
11
  isoWeek?: boolean;
36
- /** Limit showing how many years in the future */
37
- limitEndYear?: number;
12
+ /** Display a compact calendar */
13
+ compact?: boolean;
14
+ /** Show border */
15
+ bordered?: boolean;
38
16
  /** Custom locale */
39
- locale: CalendarLocale;
40
- /** Callback after the date has changed */
41
- onChangePageDate?: (nextPageDate: Date, event: React.MouseEvent) => void;
42
- /** Callback after the time has changed */
43
- onChangePageTime?: (nextPageTime: Date, event: React.MouseEvent) => void;
44
- /** Callback after mouse enter other date cell */
45
- onMouseMove?: (date: Date) => void;
46
- /** Switch to the callback triggered after the previous month. */
47
- onMoveBackward?: (nextPageDate: Date) => void;
48
- /** Switch to the callback triggered after the next month. */
49
- onMoveForward?: (nextPageDate: Date) => void;
17
+ locale?: CalendarLocale;
18
+ /** Callback fired before the value changed */
19
+ onChange?: (date: Date) => void;
50
20
  /** Callback fired before the date selected */
51
- onSelect?: (date: Date, event: React.MouseEvent) => void;
52
- /** Date displayed on the current page */
53
- calendarDate: Date;
54
- /** Custom rendering cell*/
21
+ onSelect?: (date: Date) => void;
22
+ /** Custom render calendar cells */
55
23
  renderCell?: (date: Date) => React.ReactNode;
56
- /** Whether to show week numbers */
57
- showWeekNumbers?: boolean;
58
- inline?: boolean;
59
24
  }
60
- declare const Calendar: RsRefForwardingComponent<'div', CalendarProps>;
61
- export default Calendar;
25
+ declare const CalendarPanel: RsRefForwardingComponent<typeof Calendar, CalendarProps>;
26
+ export default CalendarPanel;
@@ -1,175 +1,103 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- import React, { useCallback, useMemo } from 'react';
3
+ import React, { useCallback } from 'react';
4
4
  import PropTypes from 'prop-types';
5
- import pick from 'lodash/pick';
6
- import MonthDropdown from './MonthDropdown';
7
- import TimeDropdown from './TimeDropdown';
8
- import View from './View';
9
- import Header from './Header';
10
- import { useClassNames, DateUtils, composeFunctions } from '../utils';
11
- import { CalendarProvider } from './CalendarContext';
12
- export var CalendarState;
13
-
14
- (function (CalendarState) {
15
- CalendarState["DROP_TIME"] = "DROP_TIME";
16
- CalendarState["DROP_MONTH"] = "DROP_MONTH";
17
- })(CalendarState || (CalendarState = {}));
18
-
19
- var Calendar = /*#__PURE__*/React.forwardRef(function (props, ref) {
5
+ import Calendar from './CalendarContainer';
6
+ import Button from '../Button';
7
+ import { FormattedDate } from '../CustomProvider';
8
+ import { useClassNames, useCustom } from '../utils';
9
+ import useCalendarDate from './useCalendarDate';
10
+ var CalendarPanel = /*#__PURE__*/React.forwardRef(function (props, ref) {
20
11
  var _props$as = props.as,
21
- Component = _props$as === void 0 ? 'div' : _props$as,
12
+ Component = _props$as === void 0 ? Calendar : _props$as,
13
+ bordered = props.bordered,
22
14
  className = props.className,
23
15
  _props$classPrefix = props.classPrefix,
24
16
  classPrefix = _props$classPrefix === void 0 ? 'calendar' : _props$classPrefix,
25
- calendarState = props.calendarState,
26
- dateRange = props.dateRange,
27
- disabledBackward = props.disabledBackward,
28
- disabledDate = props.disabledDate,
29
- disabledForward = props.disabledForward,
30
- format = props.format,
31
- hoverRangeValue = props.hoverRangeValue,
32
- inSameMonth = props.inSameMonth,
33
- _props$isoWeek = props.isoWeek,
34
- isoWeek = _props$isoWeek === void 0 ? false : _props$isoWeek,
35
- limitEndYear = props.limitEndYear,
36
- locale = props.locale,
37
- onChangePageDate = props.onChangePageDate,
38
- onChangePageTime = props.onChangePageTime,
39
- onMouseMove = props.onMouseMove,
40
- onMoveBackward = props.onMoveBackward,
41
- onMoveForward = props.onMoveForward,
17
+ compact = props.compact,
18
+ _props$defaultValue = props.defaultValue,
19
+ defaultValue = _props$defaultValue === void 0 ? new Date() : _props$defaultValue,
20
+ isoWeek = props.isoWeek,
21
+ overrideLocale = props.locale,
22
+ onChange = props.onChange,
42
23
  onSelect = props.onSelect,
43
- onToggleMeridian = props.onToggleMeridian,
44
- onToggleMonthDropdown = props.onToggleMonthDropdown,
45
- onToggleTimeDropdown = props.onToggleTimeDropdown,
46
- calendarDate = props.calendarDate,
47
24
  renderCell = props.renderCell,
48
- renderTitle = props.renderTitle,
49
- renderToolbar = props.renderToolbar,
50
- showMeridian = props.showMeridian,
51
- showWeekNumbers = props.showWeekNumbers,
52
- inline = props.inline,
53
- rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "calendarState", "dateRange", "disabledBackward", "disabledDate", "disabledForward", "format", "hoverRangeValue", "inSameMonth", "isoWeek", "limitEndYear", "locale", "onChangePageDate", "onChangePageTime", "onMouseMove", "onMoveBackward", "onMoveForward", "onSelect", "onToggleMeridian", "onToggleMonthDropdown", "onToggleTimeDropdown", "calendarDate", "renderCell", "renderTitle", "renderToolbar", "showMeridian", "showWeekNumbers", "inline"]);
25
+ value = props.value,
26
+ rest = _objectWithoutPropertiesLoose(props, ["as", "bordered", "className", "classPrefix", "compact", "defaultValue", "isoWeek", "locale", "onChange", "onSelect", "renderCell", "value"]);
54
27
 
55
- var _useClassNames = useClassNames(classPrefix),
56
- withClassPrefix = _useClassNames.withClassPrefix,
57
- merge = _useClassNames.merge;
28
+ var _useCalendarDate = useCalendarDate(value, defaultValue),
29
+ calendarDate = _useCalendarDate.calendarDate,
30
+ setCalendarDate = _useCalendarDate.setCalendarDate;
58
31
 
59
- var isDisabledDate = useCallback(function (date) {
60
- var _disabledDate;
32
+ var _useCustom = useCustom('Calendar', overrideLocale),
33
+ locale = _useCustom.locale;
61
34
 
62
- return (_disabledDate = disabledDate === null || disabledDate === void 0 ? void 0 : disabledDate(date)) !== null && _disabledDate !== void 0 ? _disabledDate : false;
63
- }, [disabledDate]);
35
+ var handleChange = useCallback(function (nextValue) {
36
+ setCalendarDate(nextValue);
37
+ onChange === null || onChange === void 0 ? void 0 : onChange(nextValue);
38
+ }, [setCalendarDate, onChange]);
39
+ var handleClickToday = useCallback(function () {
40
+ handleChange(new Date());
41
+ }, [handleChange]);
42
+ var handleSelect = useCallback(function (nextValue) {
43
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(nextValue);
44
+ handleChange(nextValue);
45
+ }, [handleChange, onSelect]);
64
46
 
65
- var isTimeDisabled = function isTimeDisabled(date) {
66
- return DateUtils.disabledTime(props, date);
67
- };
47
+ var _useClassNames = useClassNames(classPrefix),
48
+ prefix = _useClassNames.prefix,
49
+ merge = _useClassNames.merge,
50
+ withClassPrefix = _useClassNames.withClassPrefix;
68
51
 
69
- var handleMoveForward = useCallback(function () {
70
- onMoveForward === null || onMoveForward === void 0 ? void 0 : onMoveForward(DateUtils.addMonths(calendarDate, 1));
71
- }, [onMoveForward, calendarDate]);
72
- var handleMoveBackward = useCallback(function () {
73
- onMoveBackward === null || onMoveBackward === void 0 ? void 0 : onMoveBackward(DateUtils.addMonths(calendarDate, -1));
74
- }, [onMoveBackward, calendarDate]);
75
- var showDate = DateUtils.shouldDate(format);
76
- var showTime = DateUtils.shouldTime(format);
77
- var showMonth = DateUtils.shouldMonth(format);
78
- var onlyShowTime = showTime && !showDate && !showMonth;
79
- var onlyShowMonth = showMonth && !showDate && !showTime;
80
- var dropTime = calendarState === CalendarState.DROP_TIME || onlyShowTime;
81
- var dropMonth = calendarState === CalendarState.DROP_MONTH || onlyShowMonth;
82
- var inSameThisMonthDate = useCallback(function (date) {
83
- return composeFunctions(function (d) {
84
- return DateUtils.setDate(d, 1);
85
- }, function (d) {
86
- return DateUtils.isSameMonth(d, date);
87
- })(date);
88
- }, []);
89
- var calendarClasses = merge(className, withClassPrefix({
90
- 'show-time-dropdown': dropTime,
91
- 'show-month-dropdown': dropMonth,
92
- 'show-week-numbers': showWeekNumbers
52
+ var renderToolbar = useCallback(function () {
53
+ return /*#__PURE__*/React.createElement(Button, {
54
+ className: prefix('btn-today'),
55
+ size: "sm",
56
+ onClick: handleClickToday
57
+ }, locale.today || 'Today');
58
+ }, [handleClickToday, locale.today, prefix]);
59
+ var customRenderCell = useCallback(function (date) {
60
+ return renderCell === null || renderCell === void 0 ? void 0 : renderCell(date);
61
+ }, [renderCell]);
62
+ var classes = merge(className, withClassPrefix('panel', {
63
+ bordered: bordered,
64
+ compact: compact
93
65
  }));
94
- var timeDropdownProps = pick(rest, DateUtils.calendarOnlyProps);
95
- var contextValue = useMemo(function () {
96
- return {
97
- date: calendarDate,
98
- dateRange: dateRange,
99
- disabledDate: isDisabledDate,
100
- format: format,
101
- hoverRangeValue: hoverRangeValue,
102
- inSameMonth: inSameMonth !== null && inSameMonth !== void 0 ? inSameMonth : inSameThisMonthDate,
103
- isoWeek: isoWeek,
104
- locale: locale,
105
- onChangePageDate: onChangePageDate,
106
- onChangePageTime: onChangePageTime,
107
- onMouseMove: onMouseMove,
108
- onSelect: onSelect,
109
- renderCell: renderCell,
110
- showWeekNumbers: showWeekNumbers,
111
- inline: inline
112
- };
113
- }, [calendarDate, dateRange, format, hoverRangeValue, inSameMonth, inSameThisMonthDate, inline, isDisabledDate, isoWeek, locale, onChangePageDate, onChangePageTime, onMouseMove, onSelect, renderCell, showWeekNumbers]);
114
- return /*#__PURE__*/React.createElement(CalendarProvider, {
115
- value: contextValue
116
- }, /*#__PURE__*/React.createElement(Component, _extends({}, DateUtils.omitHideDisabledProps(rest), {
117
- className: calendarClasses,
118
- ref: ref
119
- }), /*#__PURE__*/React.createElement(Header, {
120
- showMonth: showMonth,
121
- showDate: showDate,
122
- showTime: showTime,
123
- showMeridian: showMeridian,
124
- disabledTime: isTimeDisabled,
125
- onMoveForward: handleMoveForward,
126
- onMoveBackward: handleMoveBackward,
127
- onToggleMonthDropdown: onToggleMonthDropdown,
128
- onToggleTimeDropdown: onToggleTimeDropdown,
129
- onToggleMeridian: onToggleMeridian,
130
- renderTitle: renderTitle,
66
+ return /*#__PURE__*/React.createElement(Component, _extends({}, rest, {
67
+ inline: true,
68
+ className: classes,
69
+ ref: ref,
70
+ isoWeek: isoWeek,
71
+ format: "yyyy-MM-dd",
72
+ calendarDate: calendarDate,
73
+ limitEndYear: 1000,
74
+ locale: locale,
75
+ renderTitle: function renderTitle(date) {
76
+ return /*#__PURE__*/React.createElement(FormattedDate, {
77
+ date: date,
78
+ formatStr: locale.formattedMonthPattern || 'MMMM yyyy'
79
+ });
80
+ },
131
81
  renderToolbar: renderToolbar,
132
- disabledBackward: disabledBackward,
133
- disabledForward: disabledForward
134
- }), showDate && /*#__PURE__*/React.createElement(View, null), showMonth && /*#__PURE__*/React.createElement(MonthDropdown, {
135
- show: dropMonth,
136
- limitEndYear: limitEndYear,
137
- disabledMonth: isDisabledDate
138
- }), showTime && /*#__PURE__*/React.createElement(TimeDropdown, _extends({}, timeDropdownProps, {
139
- show: dropTime,
140
- showMeridian: showMeridian
141
- }))));
82
+ renderCell: customRenderCell,
83
+ onMoveForward: handleChange,
84
+ onMoveBackward: handleChange,
85
+ onChangePageDate: handleChange,
86
+ onSelect: handleSelect
87
+ }));
142
88
  });
143
- Calendar.displayName = 'Calendar';
144
- Calendar.propTypes = {
145
- calendarState: PropTypes.oneOf(Object.values(CalendarState)),
146
- className: PropTypes.string,
147
- classPrefix: PropTypes.string,
148
- disabledDate: PropTypes.func,
149
- disabledHours: PropTypes.func,
150
- disabledMinutes: PropTypes.func,
151
- disabledSeconds: PropTypes.func,
152
- format: PropTypes.string,
153
- hideHours: PropTypes.func,
154
- hideMinutes: PropTypes.func,
155
- hideSeconds: PropTypes.func,
156
- inSameMonth: PropTypes.func,
89
+ CalendarPanel.displayName = 'CalendarPanel';
90
+ CalendarPanel.propTypes = {
91
+ value: PropTypes.instanceOf(Date),
92
+ defaultValue: PropTypes.instanceOf(Date),
157
93
  isoWeek: PropTypes.bool,
158
- limitEndYear: PropTypes.number,
94
+ compact: PropTypes.bool,
95
+ bordered: PropTypes.bool,
159
96
  locale: PropTypes.object,
160
- onChangePageDate: PropTypes.func,
161
- onChangePageTime: PropTypes.func,
162
- onMoveBackward: PropTypes.func,
163
- onMoveForward: PropTypes.func,
97
+ className: PropTypes.string,
98
+ classPrefix: PropTypes.string,
99
+ onChange: PropTypes.func,
164
100
  onSelect: PropTypes.func,
165
- onToggleMeridian: PropTypes.func,
166
- onToggleMonthDropdown: PropTypes.func,
167
- onToggleTimeDropdown: PropTypes.func,
168
- calendarDate: PropTypes.instanceOf(Date),
169
- renderCell: PropTypes.func,
170
- renderTitle: PropTypes.func,
171
- renderToolbar: PropTypes.func,
172
- showMeridian: PropTypes.bool,
173
- showWeekNumbers: PropTypes.bool
101
+ renderCell: PropTypes.func
174
102
  };
175
- export default Calendar;
103
+ export default CalendarPanel;
@@ -0,0 +1,4 @@
1
+ import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
2
+ export declare type CalendarBodyProps = WithAsProps;
3
+ declare const CalendarBody: RsRefForwardingComponent<'div', CalendarBodyProps>;
4
+ export default CalendarBody;
@@ -5,12 +5,12 @@ import PropTypes from 'prop-types';
5
5
  import { DateUtils, useClassNames, useCustom } from '../utils';
6
6
  import Table from './Table';
7
7
  import { useCalendarContext } from './CalendarContext';
8
- var View = /*#__PURE__*/React.forwardRef(function (props, ref) {
8
+ var CalendarBody = /*#__PURE__*/React.forwardRef(function (props, ref) {
9
9
  var _props$as = props.as,
10
10
  Component = _props$as === void 0 ? 'div' : _props$as,
11
11
  className = props.className,
12
12
  _props$classPrefix = props.classPrefix,
13
- classPrefix = _props$classPrefix === void 0 ? 'calendar-view' : _props$classPrefix,
13
+ classPrefix = _props$classPrefix === void 0 ? 'calendar-body' : _props$classPrefix,
14
14
  rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix"]);
15
15
 
16
16
  var _useCalendarContext = useCalendarContext(),
@@ -38,10 +38,10 @@ var View = /*#__PURE__*/React.forwardRef(function (props, ref) {
38
38
  "aria-label": formatDate(thisMonthDate, locale.formattedMonthPattern)
39
39
  }));
40
40
  });
41
- View.displayName = 'View';
42
- View.propTypes = {
41
+ CalendarBody.displayName = 'CalendarBody';
42
+ CalendarBody.propTypes = {
43
43
  as: PropTypes.elementType,
44
44
  className: PropTypes.string,
45
45
  classPrefix: PropTypes.string
46
46
  };
47
- export default View;
47
+ export default CalendarBody;
@@ -0,0 +1,61 @@
1
+ import React, { HTMLAttributes } from 'react';
2
+ import { CalendarHeaderProps } from './CalendarHeader';
3
+ import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
4
+ import { CalendarLocale } from '../locales';
5
+ import { CalendarState } from './useCalendarState';
6
+ export interface CalendarProps extends WithAsProps, Omit<HTMLAttributes<HTMLDivElement>, 'onSelect' | 'onChange' | 'onMouseMove'>, CalendarHeaderProps {
7
+ /** The panel render based on date range */
8
+ dateRange?: Date[];
9
+ /** Date displayed on the current page */
10
+ calendarDate: Date;
11
+ /** Whether to show week numbers */
12
+ showWeekNumbers?: boolean;
13
+ inline?: boolean;
14
+ defaultState?: CalendarState;
15
+ /** Disabled date */
16
+ disabledDate?: (date: Date) => boolean;
17
+ /** Disabled hours */
18
+ disabledHours?: (hour: number, date: Date) => boolean;
19
+ /** Disabled minutes */
20
+ disabledMinutes?: (minute: number, date: Date) => boolean;
21
+ /** Hidden seconds */
22
+ disabledSeconds?: (second: number, date: Date) => boolean;
23
+ /** Format str */
24
+ format: string;
25
+ /** Hidden hours */
26
+ hideHours?: (hour: number, date: Date) => boolean;
27
+ /** Hidden minutes */
28
+ hideMinutes?: (minute: number, date: Date) => boolean;
29
+ /** Hidden seconds */
30
+ hideSeconds?: (second: number, date: Date) => boolean;
31
+ /** The value that mouse hover on in range selection */
32
+ hoverRangeValue?: [Date, Date];
33
+ /** Is it in the same month as today */
34
+ inSameMonth?: (date: Date) => boolean;
35
+ /** ISO 8601 standard, each calendar week begins on Monday and Sunday on the seventh day */
36
+ isoWeek?: boolean;
37
+ /** Limit showing how many years in the future */
38
+ limitEndYear?: number;
39
+ /** Custom locale */
40
+ locale: CalendarLocale;
41
+ /** Callback after the date has changed */
42
+ onChangePageDate?: (nextPageDate: Date, event: React.MouseEvent) => void;
43
+ /** Callback after the time has changed */
44
+ onChangePageTime?: (nextPageTime: Date, event: React.MouseEvent) => void;
45
+ /** Callback after mouse enter other date cell */
46
+ onMouseMove?: (date: Date) => void;
47
+ /** Switch to the callback triggered after the previous month. */
48
+ onMoveBackward?: (nextPageDate: Date) => void;
49
+ /** Switch to the callback triggered after the next month. */
50
+ onMoveForward?: (nextPageDate: Date) => void;
51
+ /** Callback fired before the date selected */
52
+ onSelect?: (date: Date, event: React.MouseEvent) => void;
53
+ /** Custom rendering cell*/
54
+ renderCell?: (date: Date) => React.ReactNode;
55
+ /** Called when opening the month view */
56
+ onToggleMonthDropdown?: (toggle: boolean) => void;
57
+ /** Called when opening the time view */
58
+ onToggleTimeDropdown?: (toggle: boolean) => void;
59
+ }
60
+ declare const CalendarContainer: RsRefForwardingComponent<'div', CalendarProps>;
61
+ export default CalendarContainer;
@@ -0,0 +1,208 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
+ import React, { useCallback, useMemo } from 'react';
4
+ import PropTypes from 'prop-types';
5
+ import pick from 'lodash/pick';
6
+ import MonthDropdown from './MonthDropdown';
7
+ import TimeDropdown from './TimeDropdown';
8
+ import CalendarBody from './CalendarBody';
9
+ import CalendarHeader from './CalendarHeader';
10
+ import { useClassNames, composeFunctions } from '../utils';
11
+ import { disabledTime, addMonths, shouldRenderDate, shouldRenderTime, shouldRenderMonth, setDate, isSameMonth, calendarOnlyProps, omitHideDisabledProps } from '../utils/dateUtils';
12
+ import { CalendarProvider } from './CalendarContext';
13
+ import useCalendarState, { CalendarState } from './useCalendarState';
14
+ import AngleUpIcon from '@rsuite/icons/legacy/AngleUp';
15
+ var CalendarContainer = /*#__PURE__*/React.forwardRef(function (props, ref) {
16
+ var _props$as = props.as,
17
+ Component = _props$as === void 0 ? 'div' : _props$as,
18
+ className = props.className,
19
+ _props$classPrefix = props.classPrefix,
20
+ classPrefix = _props$classPrefix === void 0 ? 'calendar' : _props$classPrefix,
21
+ dateRange = props.dateRange,
22
+ disabledBackward = props.disabledBackward,
23
+ defaultState = props.defaultState,
24
+ disabledDate = props.disabledDate,
25
+ disabledForward = props.disabledForward,
26
+ format = props.format,
27
+ hoverRangeValue = props.hoverRangeValue,
28
+ inSameMonth = props.inSameMonth,
29
+ _props$isoWeek = props.isoWeek,
30
+ isoWeek = _props$isoWeek === void 0 ? false : _props$isoWeek,
31
+ limitEndYear = props.limitEndYear,
32
+ locale = props.locale,
33
+ onChangePageDate = props.onChangePageDate,
34
+ onChangePageTime = props.onChangePageTime,
35
+ onMouseMove = props.onMouseMove,
36
+ onMoveBackward = props.onMoveBackward,
37
+ onMoveForward = props.onMoveForward,
38
+ onSelect = props.onSelect,
39
+ onToggleMeridian = props.onToggleMeridian,
40
+ onToggleMonthDropdown = props.onToggleMonthDropdown,
41
+ onToggleTimeDropdown = props.onToggleTimeDropdown,
42
+ calendarDate = props.calendarDate,
43
+ renderCell = props.renderCell,
44
+ renderTitle = props.renderTitle,
45
+ renderToolbar = props.renderToolbar,
46
+ showMeridian = props.showMeridian,
47
+ showWeekNumbers = props.showWeekNumbers,
48
+ inline = props.inline,
49
+ rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "dateRange", "disabledBackward", "defaultState", "disabledDate", "disabledForward", "format", "hoverRangeValue", "inSameMonth", "isoWeek", "limitEndYear", "locale", "onChangePageDate", "onChangePageTime", "onMouseMove", "onMoveBackward", "onMoveForward", "onSelect", "onToggleMeridian", "onToggleMonthDropdown", "onToggleTimeDropdown", "calendarDate", "renderCell", "renderTitle", "renderToolbar", "showMeridian", "showWeekNumbers", "inline"]);
50
+
51
+ var _useClassNames = useClassNames(classPrefix),
52
+ withClassPrefix = _useClassNames.withClassPrefix,
53
+ merge = _useClassNames.merge,
54
+ prefix = _useClassNames.prefix;
55
+
56
+ var _useCalendarState = useCalendarState(defaultState),
57
+ calendarState = _useCalendarState.calendarState,
58
+ reset = _useCalendarState.reset,
59
+ openMonth = _useCalendarState.openMonth,
60
+ openTime = _useCalendarState.openTime;
61
+
62
+ var isDisabledDate = useCallback(function (date) {
63
+ var _disabledDate;
64
+
65
+ return (_disabledDate = disabledDate === null || disabledDate === void 0 ? void 0 : disabledDate(date)) !== null && _disabledDate !== void 0 ? _disabledDate : false;
66
+ }, [disabledDate]);
67
+
68
+ var isTimeDisabled = function isTimeDisabled(date) {
69
+ return disabledTime(props, date);
70
+ };
71
+
72
+ var handleMoveForward = useCallback(function () {
73
+ onMoveForward === null || onMoveForward === void 0 ? void 0 : onMoveForward(addMonths(calendarDate, 1));
74
+ }, [onMoveForward, calendarDate]);
75
+ var handleMoveBackward = useCallback(function () {
76
+ onMoveBackward === null || onMoveBackward === void 0 ? void 0 : onMoveBackward(addMonths(calendarDate, -1));
77
+ }, [onMoveBackward, calendarDate]); // It is displayed as the month to be selected.
78
+
79
+ var toggleMonthView = useCallback(function () {
80
+ if (calendarState === CalendarState.MONTH) {
81
+ reset();
82
+ } else {
83
+ openMonth();
84
+ }
85
+
86
+ onToggleMonthDropdown === null || onToggleMonthDropdown === void 0 ? void 0 : onToggleMonthDropdown(calendarState !== CalendarState.MONTH);
87
+ }, [calendarState, onToggleMonthDropdown, openMonth, reset]); // It is displayed as a time to be selected.
88
+
89
+ var toggleTimeView = useCallback(function () {
90
+ if (calendarState === CalendarState.TIME) {
91
+ reset();
92
+ } else {
93
+ openTime();
94
+ }
95
+
96
+ onToggleTimeDropdown === null || onToggleTimeDropdown === void 0 ? void 0 : onToggleTimeDropdown(calendarState !== CalendarState.TIME);
97
+ }, [calendarState, onToggleTimeDropdown, openTime, reset]);
98
+ var handleCloseDropdown = useCallback(function () {
99
+ return reset();
100
+ }, [reset]);
101
+ var renderDate = shouldRenderDate(format);
102
+ var renderTime = shouldRenderTime(format);
103
+ var renderMonth = shouldRenderMonth(format);
104
+ var onlyShowTime = renderTime && !renderDate && !renderMonth;
105
+ var onlyShowMonth = renderMonth && !renderDate && !renderTime;
106
+ var showTime = calendarState === CalendarState.TIME || onlyShowTime;
107
+ var showMonth = calendarState === CalendarState.MONTH || onlyShowMonth;
108
+ var inSameThisMonthDate = useCallback(function (date) {
109
+ return composeFunctions(function (d) {
110
+ return setDate(d, 1);
111
+ }, function (d) {
112
+ return isSameMonth(d, date);
113
+ })(date);
114
+ }, []);
115
+ var calendarClasses = merge(className, withClassPrefix({
116
+ 'time-view': showTime,
117
+ 'month-view': showMonth,
118
+ 'show-week-numbers': showWeekNumbers
119
+ }));
120
+ var timeDropdownProps = pick(rest, calendarOnlyProps);
121
+ var handleChangePageDate = useCallback(function (date, event) {
122
+ reset();
123
+ onChangePageDate === null || onChangePageDate === void 0 ? void 0 : onChangePageDate(date, event);
124
+ }, [onChangePageDate, reset]);
125
+ var contextValue = useMemo(function () {
126
+ return {
127
+ date: calendarDate,
128
+ dateRange: dateRange,
129
+ disabledDate: isDisabledDate,
130
+ format: format,
131
+ hoverRangeValue: hoverRangeValue,
132
+ inSameMonth: inSameMonth !== null && inSameMonth !== void 0 ? inSameMonth : inSameThisMonthDate,
133
+ isoWeek: isoWeek,
134
+ locale: locale,
135
+ onChangePageDate: handleChangePageDate,
136
+ onChangePageTime: onChangePageTime,
137
+ onMouseMove: onMouseMove,
138
+ onSelect: onSelect,
139
+ renderCell: renderCell,
140
+ showWeekNumbers: showWeekNumbers,
141
+ inline: inline
142
+ };
143
+ }, [calendarDate, dateRange, format, handleChangePageDate, hoverRangeValue, inSameMonth, inSameThisMonthDate, inline, isDisabledDate, isoWeek, locale, onChangePageTime, onMouseMove, onSelect, renderCell, showWeekNumbers]);
144
+ return /*#__PURE__*/React.createElement(CalendarProvider, {
145
+ value: contextValue
146
+ }, /*#__PURE__*/React.createElement(Component, _extends({}, omitHideDisabledProps(rest), {
147
+ className: calendarClasses,
148
+ ref: ref
149
+ }), /*#__PURE__*/React.createElement(CalendarHeader, {
150
+ showMonth: renderMonth,
151
+ showDate: renderDate,
152
+ showTime: renderTime,
153
+ showMeridian: showMeridian,
154
+ disabledTime: isTimeDisabled,
155
+ onMoveForward: handleMoveForward,
156
+ onMoveBackward: handleMoveBackward,
157
+ onToggleMonthDropdown: toggleMonthView,
158
+ onToggleTimeDropdown: toggleTimeView,
159
+ onToggleMeridian: onToggleMeridian,
160
+ renderTitle: renderTitle,
161
+ renderToolbar: renderToolbar,
162
+ disabledBackward: disabledBackward,
163
+ disabledForward: disabledForward
164
+ }), renderDate && /*#__PURE__*/React.createElement(CalendarBody, null), renderMonth && /*#__PURE__*/React.createElement(MonthDropdown, {
165
+ show: showMonth,
166
+ limitEndYear: limitEndYear,
167
+ disabledMonth: isDisabledDate
168
+ }), renderTime && /*#__PURE__*/React.createElement(TimeDropdown, _extends({}, timeDropdownProps, {
169
+ show: showTime,
170
+ showMeridian: showMeridian
171
+ })), (showMonth || showTime) && renderDate && /*#__PURE__*/React.createElement("button", {
172
+ className: prefix('btn-close'),
173
+ onClick: handleCloseDropdown,
174
+ "aria-label": "Collapse " + (showMonth ? 'month' : 'time') + " view"
175
+ }, /*#__PURE__*/React.createElement(AngleUpIcon, null))));
176
+ });
177
+ CalendarContainer.displayName = 'CalendarContainer';
178
+ CalendarContainer.propTypes = {
179
+ className: PropTypes.string,
180
+ classPrefix: PropTypes.string,
181
+ disabledDate: PropTypes.func,
182
+ disabledHours: PropTypes.func,
183
+ disabledMinutes: PropTypes.func,
184
+ disabledSeconds: PropTypes.func,
185
+ format: PropTypes.string,
186
+ hideHours: PropTypes.func,
187
+ hideMinutes: PropTypes.func,
188
+ hideSeconds: PropTypes.func,
189
+ inSameMonth: PropTypes.func,
190
+ isoWeek: PropTypes.bool,
191
+ limitEndYear: PropTypes.number,
192
+ locale: PropTypes.object,
193
+ onChangePageDate: PropTypes.func,
194
+ onChangePageTime: PropTypes.func,
195
+ onMoveBackward: PropTypes.func,
196
+ onMoveForward: PropTypes.func,
197
+ onSelect: PropTypes.func,
198
+ onToggleMeridian: PropTypes.func,
199
+ onToggleMonthDropdown: PropTypes.func,
200
+ onToggleTimeDropdown: PropTypes.func,
201
+ calendarDate: PropTypes.instanceOf(Date),
202
+ renderCell: PropTypes.func,
203
+ renderTitle: PropTypes.func,
204
+ renderToolbar: PropTypes.func,
205
+ showMeridian: PropTypes.bool,
206
+ showWeekNumbers: PropTypes.bool
207
+ };
208
+ export default CalendarContainer;