@ozen-ui/kit 0.74.0 → 0.76.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/StepperVertical/package.json +5 -0
- package/__inner__/cjs/components/Autocomplete/helper.d.ts +1 -1
- package/__inner__/cjs/components/Autocomplete/types.d.ts +1 -1
- package/__inner__/cjs/components/Calendar/Calendar.js +26 -2
- package/__inner__/cjs/components/Calendar/CalendarContext.d.ts +8 -1
- package/__inner__/cjs/components/Calendar/CalendarContext.js +10 -1
- package/__inner__/cjs/components/Calendar/__tests__/utils.d.ts +11 -0
- package/__inner__/cjs/components/Calendar/__tests__/utils.js +58 -0
- package/__inner__/cjs/components/Calendar/components/CalendarGrid/CalendarGrid.js +4 -3
- package/__inner__/cjs/components/Calendar/components/CalendarItem/CalendarItem.js +25 -2
- package/__inner__/cjs/components/Calendar/components/CalendarItem/CalendarItemContext.d.ts +1 -0
- package/__inner__/cjs/components/Calendar/components/CalendarItem/CalendarItemContext.js +1 -0
- package/__inner__/cjs/components/Calendar/components/CalendarModeRange/CalendarModeRange.js +68 -13
- package/__inner__/cjs/components/Calendar/components/CalendarModeSingle/CalendarModeSingle.js +62 -16
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/CalendarSwitcher.js +6 -7
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.d.ts +3 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.js +13 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.d.ts +2 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.js +5 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.d.ts +4 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.js +2 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/index.d.ts +1 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/index.js +4 -0
- package/__inner__/cjs/components/Calendar/constants.d.ts +2 -0
- package/__inner__/cjs/components/Calendar/constants.js +7 -1
- package/__inner__/cjs/components/Calendar/index.d.ts +1 -0
- package/__inner__/cjs/components/Calendar/index.js +1 -0
- package/__inner__/cjs/components/Calendar/types.d.ts +13 -5
- package/__inner__/cjs/components/Calendar/utils.d.ts +10 -1
- package/__inner__/cjs/components/Calendar/utils.js +12 -1
- package/__inner__/cjs/components/DataList/types.d.ts +1 -1
- package/__inner__/cjs/components/DatePicker/components/DateInput/DateInput.js +4 -3
- package/__inner__/cjs/components/DatePicker/components/DateInput/types.d.ts +6 -2
- package/__inner__/cjs/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.d.ts +2 -1
- package/__inner__/cjs/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.js +67 -7
- package/__inner__/cjs/components/DatePicker/components/DatePickerModeDate/DatePickerModeDate.js +32 -20
- package/__inner__/cjs/components/DatePicker/components/DatePickerModeDateRange/DatePickerModeDateRange.js +74 -51
- package/__inner__/cjs/components/DatePicker/constants.d.ts +2 -0
- package/__inner__/cjs/components/DatePicker/constants.js +4 -1
- package/__inner__/cjs/components/DatePicker/types.d.ts +10 -6
- package/__inner__/cjs/components/DatePicker/types.js +3 -1
- package/__inner__/cjs/components/DatePicker/utils/formatDateToString/formatDateToString.d.ts +2 -1
- package/__inner__/cjs/components/DatePicker/utils/formatDateToString/formatDateToString.js +18 -5
- package/__inner__/cjs/components/DatePicker/utils/formatStringToDate/formatStringToDate.d.ts +2 -1
- package/__inner__/cjs/components/DatePicker/utils/formatStringToDate/formatStringToDate.js +6 -5
- package/__inner__/cjs/components/DatePicker/utils/getCommonCalendarProps/getCommonCalendarProps.js +2 -2
- package/__inner__/cjs/components/DatePicker/utils/index.d.ts +2 -0
- package/__inner__/cjs/components/DatePicker/utils/index.js +2 -0
- package/__inner__/cjs/components/DatePicker/utils/isValidDateString/isValidDateString.d.ts +2 -1
- package/__inner__/cjs/components/DatePicker/utils/isValidDateString/isValidDateString.js +9 -8
- package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/index.d.ts +1 -0
- package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/index.js +4 -0
- package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/maskPastedDate.d.ts +6 -0
- package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/maskPastedDate.js +43 -0
- package/__inner__/cjs/components/DatePicker/utils/parseDateString/index.d.ts +1 -0
- package/__inner__/cjs/components/DatePicker/utils/parseDateString/index.js +4 -0
- package/__inner__/cjs/components/DatePicker/utils/parseDateString/parseDateString.d.ts +6 -0
- package/__inner__/cjs/components/DatePicker/utils/parseDateString/parseDateString.js +66 -0
- package/__inner__/cjs/components/ListCardItem/hooks/useListCardItemRatio.js +10 -14
- package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/b-business-dark/color-b-business-dark.css +1 -1
- package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/b-business-default/color-b-business-default.css +1 -1
- package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/ozen-dark/color-ozen-dark.css +1 -1
- package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/ozen-default/color-ozen-default.css +1 -1
- package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/vip-dark/color-vip-dark.css +1 -1
- package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/vip-default/color-vip-default.css +1 -1
- package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/shadow/ozen-default/shadow-ozen-default.css +1 -1
- package/__inner__/cjs/components/Select/Select.css +10 -1
- package/__inner__/cjs/components/Select/Select.d.ts +0 -1
- package/__inner__/cjs/components/Select/Select.js +40 -10
- package/__inner__/cjs/components/Select/SelectContext.d.ts +21 -0
- package/__inner__/cjs/components/Select/SelectContext.js +29 -0
- package/__inner__/cjs/components/Select/classNames.d.ts +1 -0
- package/__inner__/cjs/components/Select/classNames.js +5 -0
- package/__inner__/cjs/components/Select/components/SelectInput/SelectInput.js +14 -15
- package/__inner__/cjs/components/Select/components/SelectInput/types.d.ts +0 -22
- package/__inner__/cjs/components/Select/components/SelectInputContextConsumer/SelectInputContextConsumer.js +3 -3
- package/__inner__/cjs/components/Select/components/SelectInputRenderRight/SelectInputRenderRight.d.ts +2 -0
- package/__inner__/cjs/components/Select/components/SelectInputRenderRight/SelectInputRenderRight.js +42 -0
- package/__inner__/cjs/components/Select/components/SelectInputRenderRight/index.d.ts +1 -0
- package/__inner__/cjs/components/Select/components/SelectInputRenderRight/index.js +4 -0
- package/__inner__/cjs/components/Select/components/index.d.ts +1 -0
- package/__inner__/cjs/components/Select/components/index.js +1 -0
- package/__inner__/cjs/components/Select/constants.d.ts +3 -0
- package/__inner__/cjs/components/Select/constants.js +8 -1
- package/__inner__/cjs/components/Select/entities/index.d.ts +2 -0
- package/__inner__/cjs/components/Select/entities/index.js +5 -0
- package/__inner__/cjs/components/Select/entities/onClear.d.ts +2 -0
- package/__inner__/cjs/components/Select/entities/onClear.js +2 -0
- package/__inner__/cjs/components/Select/entities/render.d.ts +6 -0
- package/__inner__/cjs/components/Select/entities/render.js +4 -0
- package/__inner__/cjs/components/Select/index.d.ts +1 -0
- package/__inner__/cjs/components/Select/index.js +1 -0
- package/__inner__/cjs/components/Select/types.d.ts +30 -5
- package/__inner__/cjs/components/Select/types.js +3 -0
- package/__inner__/cjs/components/Stack/Stack.css +3 -0
- package/__inner__/cjs/components/Stack/Stack.js +2 -1
- package/__inner__/cjs/components/Stack/constants.d.ts +1 -0
- package/__inner__/cjs/components/Stack/constants.js +2 -1
- package/__inner__/cjs/components/Stack/types.d.ts +4 -0
- package/__inner__/cjs/components/Stack/types.js +2 -1
- package/__inner__/cjs/hooks/useDevEffect/index.d.ts +1 -0
- package/__inner__/cjs/hooks/useDevEffect/index.js +4 -0
- package/__inner__/cjs/hooks/useDevEffect/useDevEffect.d.ts +3 -0
- package/__inner__/cjs/hooks/useDevEffect/useDevEffect.js +13 -0
- package/__inner__/cjs/hooks/useIntersectionObserver/useIntersectionObserver.js +3 -2
- package/__inner__/cjs/locale/locale.js +48 -3
- package/__inner__/cjs/utils/array/createFilled/createFilledArray.d.ts +1 -1
- package/__inner__/cjs/utils/array/createFilled/createFilledArray.js +6 -1
- package/__inner__/cjs/utils/array/generatePermutations/generatePermutations.d.ts +1 -0
- package/__inner__/cjs/utils/array/generatePermutations/generatePermutations.js +47 -0
- package/__inner__/cjs/utils/array/generatePermutations/index.d.ts +1 -0
- package/__inner__/cjs/utils/array/generatePermutations/index.js +4 -0
- package/__inner__/cjs/utils/array/index.d.ts +1 -0
- package/__inner__/cjs/utils/array/index.js +1 -0
- package/__inner__/esm/components/Autocomplete/helper.d.ts +1 -1
- package/__inner__/esm/components/Autocomplete/types.d.ts +1 -1
- package/__inner__/esm/components/Calendar/Calendar.js +27 -3
- package/__inner__/esm/components/Calendar/CalendarContext.d.ts +8 -1
- package/__inner__/esm/components/Calendar/CalendarContext.js +10 -1
- package/__inner__/esm/components/Calendar/__tests__/utils.d.ts +11 -0
- package/__inner__/esm/components/Calendar/__tests__/utils.js +45 -0
- package/__inner__/esm/components/Calendar/components/CalendarGrid/CalendarGrid.js +4 -3
- package/__inner__/esm/components/Calendar/components/CalendarItem/CalendarItem.js +25 -2
- package/__inner__/esm/components/Calendar/components/CalendarItem/CalendarItemContext.d.ts +1 -0
- package/__inner__/esm/components/Calendar/components/CalendarItem/CalendarItemContext.js +1 -0
- package/__inner__/esm/components/Calendar/components/CalendarModeRange/CalendarModeRange.js +70 -15
- package/__inner__/esm/components/Calendar/components/CalendarModeSingle/CalendarModeSingle.js +64 -18
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/CalendarSwitcher.js +6 -7
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.d.ts +3 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.js +9 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.d.ts +2 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.js +2 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.d.ts +4 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.js +1 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/index.d.ts +1 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/index.js +1 -0
- package/__inner__/esm/components/Calendar/constants.d.ts +2 -0
- package/__inner__/esm/components/Calendar/constants.js +6 -0
- package/__inner__/esm/components/Calendar/index.d.ts +1 -0
- package/__inner__/esm/components/Calendar/index.js +1 -0
- package/__inner__/esm/components/Calendar/types.d.ts +13 -5
- package/__inner__/esm/components/Calendar/utils.d.ts +10 -1
- package/__inner__/esm/components/Calendar/utils.js +9 -0
- package/__inner__/esm/components/DataList/types.d.ts +1 -1
- package/__inner__/esm/components/DatePicker/components/DateInput/DateInput.js +3 -2
- package/__inner__/esm/components/DatePicker/components/DateInput/types.d.ts +6 -2
- package/__inner__/esm/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.d.ts +2 -1
- package/__inner__/esm/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.js +67 -7
- package/__inner__/esm/components/DatePicker/components/DatePickerModeDate/DatePickerModeDate.js +33 -21
- package/__inner__/esm/components/DatePicker/components/DatePickerModeDateRange/DatePickerModeDateRange.js +68 -45
- package/__inner__/esm/components/DatePicker/constants.d.ts +2 -0
- package/__inner__/esm/components/DatePicker/constants.js +3 -0
- package/__inner__/esm/components/DatePicker/types.d.ts +10 -6
- package/__inner__/esm/components/DatePicker/types.js +2 -0
- package/__inner__/esm/components/DatePicker/utils/formatDateToString/formatDateToString.d.ts +2 -1
- package/__inner__/esm/components/DatePicker/utils/formatDateToString/formatDateToString.js +18 -5
- package/__inner__/esm/components/DatePicker/utils/formatStringToDate/formatStringToDate.d.ts +2 -1
- package/__inner__/esm/components/DatePicker/utils/formatStringToDate/formatStringToDate.js +6 -5
- package/__inner__/esm/components/DatePicker/utils/getCommonCalendarProps/getCommonCalendarProps.js +2 -2
- package/__inner__/esm/components/DatePicker/utils/index.d.ts +2 -0
- package/__inner__/esm/components/DatePicker/utils/index.js +2 -0
- package/__inner__/esm/components/DatePicker/utils/isValidDateString/isValidDateString.d.ts +2 -1
- package/__inner__/esm/components/DatePicker/utils/isValidDateString/isValidDateString.js +8 -7
- package/__inner__/esm/components/DatePicker/utils/maskPastedDate/index.d.ts +1 -0
- package/__inner__/esm/components/DatePicker/utils/maskPastedDate/index.js +1 -0
- package/__inner__/esm/components/DatePicker/utils/maskPastedDate/maskPastedDate.d.ts +6 -0
- package/__inner__/esm/components/DatePicker/utils/maskPastedDate/maskPastedDate.js +39 -0
- package/__inner__/esm/components/DatePicker/utils/parseDateString/index.d.ts +1 -0
- package/__inner__/esm/components/DatePicker/utils/parseDateString/index.js +1 -0
- package/__inner__/esm/components/DatePicker/utils/parseDateString/parseDateString.d.ts +6 -0
- package/__inner__/esm/components/DatePicker/utils/parseDateString/parseDateString.js +62 -0
- package/__inner__/esm/components/ListCardItem/hooks/useListCardItemRatio.js +10 -14
- package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/b-business-dark/color-b-business-dark.css +1 -1
- package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/b-business-default/color-b-business-default.css +1 -1
- package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/ozen-dark/color-ozen-dark.css +1 -1
- package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/ozen-default/color-ozen-default.css +1 -1
- package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/vip-dark/color-vip-dark.css +1 -1
- package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/vip-default/color-vip-default.css +1 -1
- package/__inner__/esm/components/OzenProvider/providers/theme/tokens/shadow/ozen-default/shadow-ozen-default.css +1 -1
- package/__inner__/esm/components/Select/Select.css +10 -1
- package/__inner__/esm/components/Select/Select.d.ts +0 -1
- package/__inner__/esm/components/Select/Select.js +40 -10
- package/__inner__/esm/components/Select/SelectContext.d.ts +21 -0
- package/__inner__/esm/components/Select/SelectContext.js +25 -0
- package/__inner__/esm/components/Select/classNames.d.ts +1 -0
- package/__inner__/esm/components/Select/classNames.js +2 -0
- package/__inner__/esm/components/Select/components/SelectInput/SelectInput.js +7 -8
- package/__inner__/esm/components/Select/components/SelectInput/types.d.ts +0 -22
- package/__inner__/esm/components/Select/components/SelectInputContextConsumer/SelectInputContextConsumer.js +1 -1
- package/__inner__/esm/components/Select/components/SelectInputRenderRight/SelectInputRenderRight.d.ts +2 -0
- package/__inner__/esm/components/Select/components/SelectInputRenderRight/SelectInputRenderRight.js +38 -0
- package/__inner__/esm/components/Select/components/SelectInputRenderRight/index.d.ts +1 -0
- package/__inner__/esm/components/Select/components/SelectInputRenderRight/index.js +1 -0
- package/__inner__/esm/components/Select/components/index.d.ts +1 -0
- package/__inner__/esm/components/Select/components/index.js +1 -0
- package/__inner__/esm/components/Select/constants.d.ts +3 -0
- package/__inner__/esm/components/Select/constants.js +7 -0
- package/__inner__/esm/components/Select/entities/index.d.ts +2 -0
- package/__inner__/esm/components/Select/entities/index.js +2 -0
- package/__inner__/esm/components/Select/entities/onClear.d.ts +2 -0
- package/__inner__/esm/components/Select/entities/onClear.js +1 -0
- package/__inner__/esm/components/Select/entities/render.d.ts +6 -0
- package/__inner__/esm/components/Select/entities/render.js +1 -0
- package/__inner__/esm/components/Select/index.d.ts +1 -0
- package/__inner__/esm/components/Select/index.js +1 -0
- package/__inner__/esm/components/Select/types.d.ts +30 -5
- package/__inner__/esm/components/Select/types.js +2 -1
- package/__inner__/esm/components/Stack/Stack.css +3 -0
- package/__inner__/esm/components/Stack/Stack.js +3 -2
- package/__inner__/esm/components/Stack/constants.d.ts +1 -0
- package/__inner__/esm/components/Stack/constants.js +1 -0
- package/__inner__/esm/components/Stack/types.d.ts +4 -0
- package/__inner__/esm/components/Stack/types.js +1 -0
- package/__inner__/esm/hooks/useDevEffect/index.d.ts +1 -0
- package/__inner__/esm/hooks/useDevEffect/index.js +1 -0
- package/__inner__/esm/hooks/useDevEffect/useDevEffect.d.ts +3 -0
- package/__inner__/esm/hooks/useDevEffect/useDevEffect.js +9 -0
- package/__inner__/esm/hooks/useIntersectionObserver/useIntersectionObserver.js +3 -2
- package/__inner__/esm/locale/locale.js +48 -3
- package/__inner__/esm/utils/array/createFilled/createFilledArray.d.ts +1 -1
- package/__inner__/esm/utils/array/createFilled/createFilledArray.js +6 -1
- package/__inner__/esm/utils/array/generatePermutations/generatePermutations.d.ts +1 -0
- package/__inner__/esm/utils/array/generatePermutations/generatePermutations.js +43 -0
- package/__inner__/esm/utils/array/generatePermutations/index.d.ts +1 -0
- package/__inner__/esm/utils/array/generatePermutations/index.js +1 -0
- package/__inner__/esm/utils/array/index.d.ts +1 -0
- package/__inner__/esm/utils/array/index.js +1 -0
- package/package.json +4 -4
|
@@ -1,18 +1,39 @@
|
|
|
1
1
|
import { __assign, __read, __rest } from "tslib";
|
|
2
|
-
import React, { forwardRef } from 'react';
|
|
2
|
+
import React, { forwardRef, useMemo } from 'react';
|
|
3
3
|
import { DatePickerProvider } from '@rehookify/datepicker';
|
|
4
4
|
import { useControlled } from '../../../../hooks/useControlled';
|
|
5
|
+
import { useStoredValue } from '../../../../hooks/useStoredValue';
|
|
5
6
|
import { useThemeProps } from '../../../../hooks/useThemeProps';
|
|
6
7
|
import { CalendarContext } from '../../CalendarContext';
|
|
7
|
-
import { cnCalendar } from '../../utils';
|
|
8
|
+
import { calculateStepsAvailability, calculateStepsHelpers, cnCalendar, } from '../../utils';
|
|
8
9
|
import { Calendars } from '../index';
|
|
9
10
|
import { CalendarAdditionalControls } from './components';
|
|
11
|
+
var isSameDayMonthYear = function (date1, date2) {
|
|
12
|
+
return date1.getFullYear() === date2.getFullYear() &&
|
|
13
|
+
date1.getMonth() === date2.getMonth() &&
|
|
14
|
+
date1.getDate() === date2.getDate();
|
|
15
|
+
};
|
|
10
16
|
export var CalendarModeRange = forwardRef(function (inProps, ref) {
|
|
11
17
|
var props = useThemeProps({
|
|
12
18
|
props: inProps,
|
|
13
19
|
name: 'Calendar',
|
|
14
20
|
});
|
|
15
|
-
var size = props.size, startDay = props.startDay, renderAdditionalControls = props.renderAdditionalControls, locale = props.locale, onChangeProp = props.onChange, onCalendarsChange = props.onCalendarsChange, onOffsetDateChangeProp = props.onOffsetDateChange, calendars = props.calendars,
|
|
21
|
+
var size = props.size, startDay = props.startDay, renderAdditionalControls = props.renderAdditionalControls, locale = props.locale, onChangeProp = props.onChange, onCalendarsChange = props.onCalendarsChange, onOffsetDateChangeProp = props.onOffsetDateChange, calendars = props.calendars, onMonthClickProp = props.onMonthClick, onDayClickProp = props.onDayClick, onYearClickProp = props.onYearClick, valueProp = props.value, defaultValue = props.defaultValue, offsetDateProp = props.offsetDate, defaultOffsetDate = props.defaultOffsetDate, exclude = props.exclude, minDate = props.minDate, maxDate = props.maxDate, className = props.className, getPeriodSwitchAriaLabel = props.getPeriodSwitchAriaLabel, steps = props.steps, initialStep = props.initialStep, other = __rest(props, ["size", "startDay", "renderAdditionalControls", "locale", "onChange", "onCalendarsChange", "onOffsetDateChange", "calendars", "onMonthClick", "onDayClick", "onYearClick", "value", "defaultValue", "offsetDate", "defaultOffsetDate", "exclude", "minDate", "maxDate", "className", "getPeriodSwitchAriaLabel", "steps", "initialStep"]);
|
|
22
|
+
var lastClickedStep = useStoredValue(null);
|
|
23
|
+
var onMonthClick = function (event, date) {
|
|
24
|
+
lastClickedStep.current = 'months';
|
|
25
|
+
onMonthClickProp === null || onMonthClickProp === void 0 ? void 0 : onMonthClickProp(event, date);
|
|
26
|
+
};
|
|
27
|
+
var onDayClick = function (event, date) {
|
|
28
|
+
lastClickedStep.current = 'days';
|
|
29
|
+
onDayClickProp === null || onDayClickProp === void 0 ? void 0 : onDayClickProp(event, date);
|
|
30
|
+
};
|
|
31
|
+
var onYearClick = function (event, date) {
|
|
32
|
+
lastClickedStep.current = 'years';
|
|
33
|
+
onYearClickProp === null || onYearClickProp === void 0 ? void 0 : onYearClickProp(event, date);
|
|
34
|
+
};
|
|
35
|
+
var stepsHelpers = useMemo(function () { return calculateStepsHelpers(steps); }, [steps]);
|
|
36
|
+
var stepsAvailability = useMemo(function () { return calculateStepsAvailability(steps); }, [steps]);
|
|
16
37
|
var _a = __read(useControlled({
|
|
17
38
|
value: valueProp,
|
|
18
39
|
defaultValue: defaultValue,
|
|
@@ -26,14 +47,56 @@ export var CalendarModeRange = forwardRef(function (inProps, ref) {
|
|
|
26
47
|
state: 'offsetDate',
|
|
27
48
|
}), 2), offsetDate = _b[0], setOffsetDateState = _b[1];
|
|
28
49
|
var onOffsetChange = function (date) {
|
|
29
|
-
|
|
30
|
-
|
|
50
|
+
var lastStep = lastClickedStep.current;
|
|
51
|
+
lastClickedStep.current = null;
|
|
52
|
+
var updateOffsetDate = function () {
|
|
53
|
+
setOffsetDateState(date);
|
|
54
|
+
onOffsetDateChangeProp === null || onOffsetDateChangeProp === void 0 ? void 0 : onOffsetDateChangeProp(date);
|
|
55
|
+
};
|
|
56
|
+
var isYearLastStep = stepsHelpers.lastStep === 'years';
|
|
57
|
+
var isMonthLastStep = stepsHelpers.lastStep === 'months';
|
|
58
|
+
var isFinishingImpossible = !isYearLastStep && !isMonthLastStep;
|
|
59
|
+
// Если произошло переключение через стрелки по датам
|
|
60
|
+
// Или финиш с текущей конфигурацией steps невозможен
|
|
61
|
+
if (!lastStep || isFinishingImpossible) {
|
|
62
|
+
updateOffsetDate();
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
var isMonthStep = lastStep === 'months';
|
|
66
|
+
var isYearStep = lastStep === 'years';
|
|
67
|
+
var isFinish = (isMonthStep && isMonthLastStep) || (isYearStep && isYearLastStep);
|
|
68
|
+
if (isFinish) {
|
|
69
|
+
var previousDateFirstDate = value === null || value === void 0 ? void 0 : value[0];
|
|
70
|
+
var isEqualFirstDate = previousDateFirstDate &&
|
|
71
|
+
isSameDayMonthYear(previousDateFirstDate, date);
|
|
72
|
+
var previousDateLastDate = value === null || value === void 0 ? void 0 : value[1];
|
|
73
|
+
var isEqualLastDate = previousDateLastDate &&
|
|
74
|
+
isSameDayMonthYear(previousDateLastDate, date);
|
|
75
|
+
if (isEqualFirstDate && isEqualLastDate) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
var newValue = previousDateFirstDate
|
|
79
|
+
? [previousDateFirstDate, date]
|
|
80
|
+
: [date];
|
|
81
|
+
setValue(newValue);
|
|
82
|
+
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(newValue);
|
|
83
|
+
}
|
|
84
|
+
updateOffsetDate();
|
|
31
85
|
};
|
|
32
86
|
var onDatesChange = function (data) {
|
|
33
|
-
|
|
87
|
+
var isFinishChange = stepsHelpers.lastStep === 'days';
|
|
88
|
+
if (isFinishChange) {
|
|
34
89
|
setValue(data);
|
|
35
90
|
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(data);
|
|
36
91
|
}
|
|
92
|
+
else {
|
|
93
|
+
var firstDate = data[0];
|
|
94
|
+
if (!firstDate) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
setOffsetDateState(firstDate);
|
|
98
|
+
onOffsetDateChangeProp === null || onOffsetDateChangeProp === void 0 ? void 0 : onOffsetDateChangeProp(firstDate);
|
|
99
|
+
}
|
|
37
100
|
};
|
|
38
101
|
var config = {
|
|
39
102
|
calendar: __assign({ startDay: startDay }, (calendars && calendars > 1 && { offsets: [1] })),
|
|
@@ -56,15 +119,7 @@ export var CalendarModeRange = forwardRef(function (inProps, ref) {
|
|
|
56
119
|
offsetDate: offsetDate || undefined,
|
|
57
120
|
};
|
|
58
121
|
return (React.createElement(DatePickerProvider, { config: config },
|
|
59
|
-
React.createElement(CalendarContext.Provider, { value: {
|
|
60
|
-
size: size,
|
|
61
|
-
minDate: minDate,
|
|
62
|
-
maxDate: maxDate,
|
|
63
|
-
onDayClick: onDayClick,
|
|
64
|
-
onYearClick: onYearClick,
|
|
65
|
-
onMonthClick: onMonthClick,
|
|
66
|
-
getPeriodSwitchAriaLabel: getPeriodSwitchAriaLabel,
|
|
67
|
-
} },
|
|
122
|
+
React.createElement(CalendarContext.Provider, { value: __assign(__assign({ size: size, minDate: minDate, maxDate: maxDate, onDayClick: onDayClick, onYearClick: onYearClick, onMonthClick: onMonthClick, getPeriodSwitchAriaLabel: getPeriodSwitchAriaLabel, steps: steps, initialStep: initialStep }, stepsHelpers), stepsAvailability) },
|
|
68
123
|
React.createElement("div", __assign({ className: cnCalendar({ size: size }, [className]) }, other, { ref: ref }),
|
|
69
124
|
React.createElement(Calendars, { onCalendarsChange: onCalendarsChange }),
|
|
70
125
|
React.createElement(CalendarAdditionalControls, { renderAdditionalControls: renderAdditionalControls })))));
|
package/__inner__/esm/components/Calendar/components/CalendarModeSingle/CalendarModeSingle.js
CHANGED
|
@@ -1,13 +1,32 @@
|
|
|
1
1
|
import { __assign, __read, __rest } from "tslib";
|
|
2
|
-
import React, { forwardRef } from 'react';
|
|
2
|
+
import React, { forwardRef, useMemo } from 'react';
|
|
3
3
|
import { DatePickerProvider } from '@rehookify/datepicker';
|
|
4
4
|
import { useControlled } from '../../../../hooks/useControlled';
|
|
5
|
+
import { useStoredValue } from '../../../../hooks/useStoredValue';
|
|
5
6
|
import { CalendarContext } from '../../CalendarContext';
|
|
6
|
-
import { cnCalendar } from '../../utils';
|
|
7
|
+
import { calculateStepsAvailability, calculateStepsHelpers, cnCalendar, } from '../../utils';
|
|
7
8
|
import { Calendars } from '../index';
|
|
8
9
|
import { CalendarAdditionalControls } from './components';
|
|
10
|
+
var isSameDayMonthYear = function (date1, date2) {
|
|
11
|
+
return date1.getFullYear() === date2.getFullYear() &&
|
|
12
|
+
date1.getMonth() === date2.getMonth() &&
|
|
13
|
+
date1.getDate() === date2.getDate();
|
|
14
|
+
};
|
|
9
15
|
export var CalendarModeSingle = forwardRef(function (props, ref) {
|
|
10
|
-
var size = props.size, startDay = props.startDay, renderAdditionalControls = props.renderAdditionalControls, locale = props.locale, onChangeProp = props.onChange, onOffsetDateChangeProp = props.onOffsetDateChange,
|
|
16
|
+
var size = props.size, startDay = props.startDay, renderAdditionalControls = props.renderAdditionalControls, locale = props.locale, onChangeProp = props.onChange, onOffsetDateChangeProp = props.onOffsetDateChange, onMonthClickProp = props.onMonthClick, onDayClickProp = props.onDayClick, onYearClickProp = props.onYearClick, valueProp = props.value, defaultValue = props.defaultValue, offsetDateProp = props.offsetDate, onCalendarsChange = props.onCalendarsChange, defaultOffsetDate = props.defaultOffsetDate, exclude = props.exclude, minDate = props.minDate, maxDate = props.maxDate, calendars = props.calendars, className = props.className, getPeriodSwitchAriaLabel = props.getPeriodSwitchAriaLabel, steps = props.steps, initialStep = props.initialStep, other = __rest(props, ["size", "startDay", "renderAdditionalControls", "locale", "onChange", "onOffsetDateChange", "onMonthClick", "onDayClick", "onYearClick", "value", "defaultValue", "offsetDate", "onCalendarsChange", "defaultOffsetDate", "exclude", "minDate", "maxDate", "calendars", "className", "getPeriodSwitchAriaLabel", "steps", "initialStep"]);
|
|
17
|
+
var lastClickedStep = useStoredValue(null);
|
|
18
|
+
var onMonthClick = function (event, date) {
|
|
19
|
+
lastClickedStep.current = 'months';
|
|
20
|
+
onMonthClickProp === null || onMonthClickProp === void 0 ? void 0 : onMonthClickProp(event, date);
|
|
21
|
+
};
|
|
22
|
+
var onDayClick = function (event, date) {
|
|
23
|
+
lastClickedStep.current = 'days';
|
|
24
|
+
onDayClickProp === null || onDayClickProp === void 0 ? void 0 : onDayClickProp(event, date);
|
|
25
|
+
};
|
|
26
|
+
var onYearClick = function (event, date) {
|
|
27
|
+
lastClickedStep.current = 'years';
|
|
28
|
+
onYearClickProp === null || onYearClickProp === void 0 ? void 0 : onYearClickProp(event, date);
|
|
29
|
+
};
|
|
11
30
|
var _a = __read(useControlled({
|
|
12
31
|
value: valueProp,
|
|
13
32
|
defaultValue: defaultValue,
|
|
@@ -20,16 +39,51 @@ export var CalendarModeSingle = forwardRef(function (props, ref) {
|
|
|
20
39
|
name: 'Calendar',
|
|
21
40
|
state: 'offsetDate',
|
|
22
41
|
}), 2), offsetDate = _b[0], setOffsetDateState = _b[1];
|
|
42
|
+
var stepsHelpers = useMemo(function () { return calculateStepsHelpers(steps); }, [steps]);
|
|
43
|
+
var stepsAvailability = useMemo(function () { return calculateStepsAvailability(steps); }, [steps]);
|
|
23
44
|
var onDatesChange = function (data) {
|
|
24
|
-
var
|
|
25
|
-
if (
|
|
26
|
-
|
|
27
|
-
|
|
45
|
+
var newValue = data[0];
|
|
46
|
+
if (!newValue) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
var isFinishChange = stepsHelpers.lastStep === 'days';
|
|
50
|
+
if (isFinishChange) {
|
|
51
|
+
setValue(newValue);
|
|
52
|
+
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(newValue);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
setOffsetDateState(newValue);
|
|
56
|
+
onOffsetDateChangeProp === null || onOffsetDateChangeProp === void 0 ? void 0 : onOffsetDateChangeProp(newValue);
|
|
28
57
|
}
|
|
29
58
|
};
|
|
30
59
|
var onOffsetChange = function (date) {
|
|
31
|
-
|
|
32
|
-
|
|
60
|
+
var lastStep = lastClickedStep.current;
|
|
61
|
+
lastClickedStep.current = null;
|
|
62
|
+
var updateOffsetDate = function () {
|
|
63
|
+
setOffsetDateState(date);
|
|
64
|
+
onOffsetDateChangeProp === null || onOffsetDateChangeProp === void 0 ? void 0 : onOffsetDateChangeProp(date);
|
|
65
|
+
};
|
|
66
|
+
var isYearLastStep = stepsHelpers.lastStep === 'years';
|
|
67
|
+
var isMonthLastStep = stepsHelpers.lastStep === 'months';
|
|
68
|
+
var isFinishingImpossible = !isYearLastStep && !isMonthLastStep;
|
|
69
|
+
// Если произошло переключение через стрелки по датам
|
|
70
|
+
// Или финиш с текущей конфигурацией steps невозможен
|
|
71
|
+
if (!lastStep || isFinishingImpossible) {
|
|
72
|
+
updateOffsetDate();
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
var isMonthStep = lastStep === 'months';
|
|
76
|
+
var isYearStep = lastStep === 'years';
|
|
77
|
+
var isFinish = (isMonthStep && isMonthLastStep) || (isYearStep && isYearLastStep);
|
|
78
|
+
if (isFinish) {
|
|
79
|
+
var previousDate = value;
|
|
80
|
+
if (previousDate && isSameDayMonthYear(previousDate, date)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
setValue(date);
|
|
84
|
+
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(date);
|
|
85
|
+
}
|
|
86
|
+
updateOffsetDate();
|
|
33
87
|
};
|
|
34
88
|
var config = {
|
|
35
89
|
calendar: __assign({ startDay: startDay }, (calendars && calendars > 1 && { offsets: [1] })),
|
|
@@ -47,15 +101,7 @@ export var CalendarModeSingle = forwardRef(function (props, ref) {
|
|
|
47
101
|
selectedDates: value ? [value] : [],
|
|
48
102
|
};
|
|
49
103
|
return (React.createElement(DatePickerProvider, { config: config },
|
|
50
|
-
React.createElement(CalendarContext.Provider, { value: {
|
|
51
|
-
size: size,
|
|
52
|
-
minDate: minDate,
|
|
53
|
-
maxDate: maxDate,
|
|
54
|
-
onDayClick: onDayClick,
|
|
55
|
-
onYearClick: onYearClick,
|
|
56
|
-
onMonthClick: onMonthClick,
|
|
57
|
-
getPeriodSwitchAriaLabel: getPeriodSwitchAriaLabel,
|
|
58
|
-
} },
|
|
104
|
+
React.createElement(CalendarContext.Provider, { value: __assign(__assign({ size: size, minDate: minDate, maxDate: maxDate, onDayClick: onDayClick, onYearClick: onYearClick, onMonthClick: onMonthClick, steps: steps, initialStep: initialStep, getPeriodSwitchAriaLabel: getPeriodSwitchAriaLabel }, stepsHelpers), stepsAvailability) },
|
|
59
105
|
React.createElement("div", __assign({ className: cnCalendar({ size: size }, [className]) }, other, { ref: ref }),
|
|
60
106
|
React.createElement(Calendars, { onCalendarsChange: onCalendarsChange }),
|
|
61
107
|
React.createElement(CalendarAdditionalControls, { renderAdditionalControls: renderAdditionalControls })))));
|
|
@@ -7,14 +7,14 @@ import { capitalizeFirstLetter as capitalize } from '../../../../utils/capitaliz
|
|
|
7
7
|
import { cn } from '../../../../utils/classname';
|
|
8
8
|
import { Button } from '../../../ButtonNext';
|
|
9
9
|
import { IconButton } from '../../../IconButtonNext';
|
|
10
|
-
import { Typography } from '../../../Typography';
|
|
11
10
|
import { useCalendar } from '../../CalendarContext';
|
|
12
11
|
import { useCalendarItem } from '../CalendarItem/CalendarItemContext';
|
|
12
|
+
import { CalendarSwitcherText } from './components';
|
|
13
13
|
export var cnCalendarSwitcher = cn('CalendarSwitcher');
|
|
14
14
|
export var CalendarSwitcher = forwardRef(function (_a, ref) {
|
|
15
15
|
var _b, _c;
|
|
16
16
|
var className = _a.className, prevButton = _a.prevButton, nextButton = _a.nextButton, other = __rest(_a, ["className", "prevButton", "nextButton"]);
|
|
17
|
-
var _d = useCalendar(), size = _d.size, getPeriodSwitchAriaLabel = _d.getPeriodSwitchAriaLabel;
|
|
17
|
+
var _d = useCalendar(), size = _d.size, getPeriodSwitchAriaLabel = _d.getPeriodSwitchAriaLabel, hasMonthsStep = _d.hasMonthsStep, hasYearsStep = _d.hasYearsStep;
|
|
18
18
|
var _e = useCalendarItem(), step = _e.step, goStep = _e.goStep, calendar = _e.calendar;
|
|
19
19
|
var _f = useDatePickerContext(), years = _f.data.years, _g = _f.propGetters, addOffset = _g.addOffset, subtractOffset = _g.subtractOffset, nextYearsButton = _g.nextYearsButton, previousYearsButton = _g.previousYearsButton;
|
|
20
20
|
var _h = calendar || {}, year = _h.year, month = _h.month;
|
|
@@ -29,18 +29,17 @@ export var CalendarSwitcher = forwardRef(function (_a, ref) {
|
|
|
29
29
|
step === 'days' && (React.createElement(React.Fragment, null,
|
|
30
30
|
prevButton,
|
|
31
31
|
React.createElement("div", { className: cnCalendarSwitcher('Actions') },
|
|
32
|
-
React.createElement(Button, { variant: "function", type: "button", color: "primary", onClick: handleClickOnMonths, size: size }, month && capitalize(month)),
|
|
33
|
-
React.createElement(Button, { variant: "function", type: "button", color: "primary", onClick: handleClickOnYears, size: size }, year)),
|
|
32
|
+
hasMonthsStep ? (React.createElement(Button, { variant: "function", type: "button", color: "primary", onClick: handleClickOnMonths, size: size }, month && capitalize(month))) : (React.createElement(CalendarSwitcherText, null, month && capitalize(month))),
|
|
33
|
+
hasYearsStep ? (React.createElement(Button, { variant: "function", type: "button", color: "primary", onClick: handleClickOnYears, size: size }, year)) : (React.createElement(CalendarSwitcherText, null, year))),
|
|
34
34
|
nextButton)),
|
|
35
35
|
step === 'months' && (React.createElement(React.Fragment, null,
|
|
36
|
-
React.createElement("div", { className: cnCalendarSwitcher('StartActions') },
|
|
37
|
-
React.createElement(Button, { variant: "function", type: "button", color: "primary", onClick: handleClickOnYears, size: size }, year)),
|
|
36
|
+
React.createElement("div", { className: cnCalendarSwitcher('StartActions') }, hasYearsStep ? (React.createElement(Button, { variant: "function", type: "button", color: "primary", onClick: handleClickOnYears, size: size }, year)) : (React.createElement(CalendarSwitcherText, null, year))),
|
|
38
37
|
React.createElement("div", { className: cnCalendarSwitcher('EndActions') },
|
|
39
38
|
React.createElement(IconButton, __assign({ variant: "function", type: "button", color: "primary", icon: ChevronLeftIcon, size: size, "aria-label": PREVIOUS, title: PREVIOUS }, subtractOffset({ years: 1 }))),
|
|
40
39
|
React.createElement(IconButton, __assign({ variant: "function", type: "button", color: "primary", icon: ChevronRightIcon, size: size, "aria-label": NEXT, title: NEXT }, addOffset({ years: 1 })))))),
|
|
41
40
|
step === 'years' && (React.createElement(React.Fragment, null,
|
|
42
41
|
React.createElement("div", { className: cnCalendarSwitcher('StartActions') },
|
|
43
|
-
React.createElement(
|
|
42
|
+
React.createElement(CalendarSwitcherText, null, (_b = years === null || years === void 0 ? void 0 : years[0]) === null || _b === void 0 ? void 0 :
|
|
44
43
|
_b.year,
|
|
45
44
|
" - ", (_c = years === null || years === void 0 ? void 0 : years[years.length - 1]) === null || _c === void 0 ? void 0 :
|
|
46
45
|
_c.year)),
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { __assign } from "tslib";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Typography } from '../../../../../Typography';
|
|
4
|
+
import { useCalendar } from '../../../../CalendarContext';
|
|
5
|
+
export var CalendarSwitcherText = function (_a) {
|
|
6
|
+
var children = _a.children;
|
|
7
|
+
var size = useCalendar().size;
|
|
8
|
+
return (React.createElement(Typography, __assign({ color: "primary" }, (size && { variant: "text-".concat(size) })), children));
|
|
9
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CalendarSwitcherText';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CalendarSwitcherText';
|
|
@@ -2,3 +2,5 @@ export declare const CALENDAR_DEFAULT_START_DAY = 1;
|
|
|
2
2
|
export declare const CALENDAR_DEFAULT_SIZE = "m";
|
|
3
3
|
export declare const CALENDAR_DEFAULT_MODE = "single";
|
|
4
4
|
export declare const CALENDAR_DEFAULT_CALENDARS = 1;
|
|
5
|
+
export declare const CALENDAR_DEFAULT_STEPS: ("days" | "months" | "years")[];
|
|
6
|
+
export declare const CALENDAR_DEFAULT_INITIAL_STEP = "days";
|
|
@@ -2,3 +2,9 @@ export var CALENDAR_DEFAULT_START_DAY = 1;
|
|
|
2
2
|
export var CALENDAR_DEFAULT_SIZE = 'm';
|
|
3
3
|
export var CALENDAR_DEFAULT_MODE = 'single';
|
|
4
4
|
export var CALENDAR_DEFAULT_CALENDARS = 1;
|
|
5
|
+
export var CALENDAR_DEFAULT_STEPS = [
|
|
6
|
+
'years',
|
|
7
|
+
'months',
|
|
8
|
+
'days',
|
|
9
|
+
];
|
|
10
|
+
export var CALENDAR_DEFAULT_INITIAL_STEP = 'days';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { MouseEvent, ReactElement, ReactNode } from 'react';
|
|
2
2
|
import type { DPExcludeConfig, DPDayInteger } from '@rehookify/datepicker';
|
|
3
|
-
import type { ExtendableComponentPropsWithRef } from '../../types
|
|
3
|
+
import type { WithRequired, ExtendableComponentPropsWithRef } from '../../types';
|
|
4
4
|
import type { WithDisplayName } from '../../types/react';
|
|
5
5
|
import type { CALENDAR_DEFAULT_MODE } from './constants';
|
|
6
6
|
export declare const calendarStepVariant: readonly ["days", "months", "years"];
|
|
@@ -18,6 +18,7 @@ export type CalendarPropRenderAdditionalControls<MODE extends CalendarModeVarian
|
|
|
18
18
|
date?: MODE extends 'range' ? Date[] : Date;
|
|
19
19
|
}) => ReactElement;
|
|
20
20
|
export type CalendarPropCalendars = 1 | 2;
|
|
21
|
+
export type CalendarSteps = CalendarStepVariant[];
|
|
21
22
|
/**
|
|
22
23
|
* @deprecated
|
|
23
24
|
* Use the `CalendarPropOnChange` type to replace it.
|
|
@@ -44,6 +45,9 @@ export type CalendarExclude = CalendarPropExclude;
|
|
|
44
45
|
* */
|
|
45
46
|
export type CalendarStartDay = CalendarPropStartDay;
|
|
46
47
|
export type CalendarRenderAdditionalControls<MODE extends CalendarModeVariant> = CalendarPropRenderAdditionalControls<MODE>;
|
|
48
|
+
export type CalendarOnMonthClick = (event: MouseEvent<HTMLElement>, date: Date) => void;
|
|
49
|
+
export type CalendarOnDayClick = (event: MouseEvent<HTMLElement>, date: Date) => void;
|
|
50
|
+
export type CalendarOnYearClick = (event: MouseEvent<HTMLElement>, date: Date) => void;
|
|
47
51
|
export type CalendarProps<MODE extends CalendarModeVariant = typeof CALENDAR_DEFAULT_MODE> = ExtendableComponentPropsWithRef<{
|
|
48
52
|
/** Способ выбора даты:
|
|
49
53
|
* - `single` — позволяет выбрать одну дату (показывает один календарь).
|
|
@@ -75,11 +79,11 @@ export type CalendarProps<MODE extends CalendarModeVariant = typeof CALENDAR_DEF
|
|
|
75
79
|
/** Ограничение выбора дат по большей дате */
|
|
76
80
|
maxDate?: Date;
|
|
77
81
|
/** Обработчик нажатия на кнопку месяца */
|
|
78
|
-
onMonthClick
|
|
82
|
+
onMonthClick?: CalendarOnMonthClick;
|
|
79
83
|
/** Обработчик нажатия на кнопку дня */
|
|
80
|
-
onDayClick
|
|
84
|
+
onDayClick?: CalendarOnDayClick;
|
|
81
85
|
/** Обработчик нажатия на кнопку года */
|
|
82
|
-
onYearClick
|
|
86
|
+
onYearClick?: CalendarOnYearClick;
|
|
83
87
|
/** Дополнительные контролы — рендер функция */
|
|
84
88
|
renderAdditionalControls?: CalendarPropRenderAdditionalControls<MODE>;
|
|
85
89
|
/** Функция форматирования атрибута `aria-label` для кнопок переключения периодов */
|
|
@@ -89,6 +93,10 @@ export type CalendarProps<MODE extends CalendarModeVariant = typeof CALENDAR_DEF
|
|
|
89
93
|
/** Количество отображаемых календарей в компоненте: один или два */
|
|
90
94
|
calendars?: CalendarPropCalendars;
|
|
91
95
|
children?: never;
|
|
96
|
+
/** Шаги календаря. Определяет порядок и наличие этапов выбора. */
|
|
97
|
+
steps?: CalendarSteps;
|
|
98
|
+
/** Изначальный шаг */
|
|
99
|
+
initialStep?: CalendarStepVariant;
|
|
92
100
|
}, 'div'>;
|
|
93
101
|
export type CalendarComponent = WithDisplayName<(<MODE extends CalendarModeVariant = typeof CALENDAR_DEFAULT_MODE>(props: CalendarProps<MODE>) => ReactNode)>;
|
|
94
|
-
export type CalendarModeComponent<MODE extends CalendarModeVariant> = WithDisplayName<(props: Omit<CalendarProps<MODE>, 'mode'>) => ReactNode>;
|
|
102
|
+
export type CalendarModeComponent<MODE extends CalendarModeVariant> = WithDisplayName<(props: Omit<WithRequired<CalendarProps<MODE>, 'steps' | 'initialStep'>, 'mode'>) => ReactNode>;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
-
import type { CalendarProps } from './index';
|
|
1
|
+
import type { CalendarProps, CalendarSteps } from './index';
|
|
2
2
|
export declare const cnCalendar: import("@bem-react/classname").ClassNameFormatter;
|
|
3
3
|
export declare const getPeriodSwitchAriaLabel: CalendarProps['getPeriodSwitchAriaLabel'];
|
|
4
|
+
export declare const calculateStepsAvailability: (steps: CalendarSteps) => {
|
|
5
|
+
hasDaysStep: boolean;
|
|
6
|
+
hasMonthsStep: boolean;
|
|
7
|
+
hasYearsStep: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare const calculateStepsHelpers: (steps: CalendarSteps) => {
|
|
10
|
+
lastStep: "days" | "months" | "years";
|
|
11
|
+
firstStep: "days" | "months" | "years";
|
|
12
|
+
};
|
|
@@ -9,3 +9,12 @@ export var getPeriodSwitchAriaLabel = function (step) {
|
|
|
9
9
|
}
|
|
10
10
|
return ['Previous period', 'Next period'];
|
|
11
11
|
};
|
|
12
|
+
export var calculateStepsAvailability = function (steps) { return ({
|
|
13
|
+
hasDaysStep: steps.includes('days'),
|
|
14
|
+
hasMonthsStep: steps.includes('months'),
|
|
15
|
+
hasYearsStep: steps.includes('years'),
|
|
16
|
+
}); };
|
|
17
|
+
export var calculateStepsHelpers = function (steps) { return ({
|
|
18
|
+
lastStep: steps[steps.length - 1],
|
|
19
|
+
firstStep: steps[0],
|
|
20
|
+
}); };
|
|
@@ -12,7 +12,7 @@ export type DataListPayload<MULTIPLE extends boolean> = {
|
|
|
12
12
|
name?: string;
|
|
13
13
|
value: DataListSelected<MULTIPLE>;
|
|
14
14
|
};
|
|
15
|
-
export type DataListOnSelect<MULTIPLE extends boolean> = (event: SyntheticEvent | KeyboardEvent, payload: DataListPayload<MULTIPLE>) => void;
|
|
15
|
+
export type DataListOnSelect<MULTIPLE extends boolean> = (event: SyntheticEvent | KeyboardEvent | MouseEvent, payload: DataListPayload<MULTIPLE>) => void;
|
|
16
16
|
export type DataListBaseProps<MULTIPLE extends boolean = false> = {
|
|
17
17
|
/** Имя списка */
|
|
18
18
|
name?: string;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { __assign, __rest } from "tslib";
|
|
2
2
|
import React, { forwardRef } from 'react';
|
|
3
3
|
import { useMultiRef } from '../../../../hooks/useMultiRef';
|
|
4
|
+
import { isFunction } from '../../../../utils';
|
|
4
5
|
import { Input } from '../../../Input';
|
|
5
6
|
import { dateInputMask } from './utils';
|
|
6
7
|
export var DateInput = forwardRef(function (_a, ref) {
|
|
7
|
-
var valueProp = _a.value, defaultValue = _a.defaultValue, other = __rest(_a, ["value", "defaultValue"]);
|
|
8
|
-
return (React.createElement(Input, __assign({ value: dateInputMask(valueProp), defaultValue: dateInputMask(defaultValue) }, other, { ref: useMultiRef([ref]) })));
|
|
8
|
+
var valueProp = _a.value, defaultValue = _a.defaultValue, steps = _a.steps, placeholder = _a.placeholder, other = __rest(_a, ["value", "defaultValue", "steps", "placeholder"]);
|
|
9
|
+
return (React.createElement(Input, __assign({ value: dateInputMask(valueProp, steps), defaultValue: dateInputMask(defaultValue, steps) }, other, { placeholder: isFunction(placeholder) ? placeholder(steps) : placeholder, ref: useMultiRef([ref]) })));
|
|
9
10
|
});
|
|
10
11
|
DateInput.displayName = 'DateInput';
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import type { ComponentRef } from 'react';
|
|
2
|
-
import type { ExtendableComponentPropsWithRef } from '../../../../types
|
|
2
|
+
import type { ExtendableComponentPropsWithRef } from '../../../../types';
|
|
3
|
+
import type { CalendarSteps } from '../../../Calendar';
|
|
3
4
|
import type { FIELD_CONTROL_DEFAULT_TAG } from '../../../FieldControl';
|
|
4
5
|
import type { InputProps } from '../../../Input';
|
|
6
|
+
import type { InputPropPlaceholder } from '../../types';
|
|
5
7
|
export type DateInputRef = ComponentRef<typeof FIELD_CONTROL_DEFAULT_TAG>;
|
|
6
8
|
export type DateInputProps = ExtendableComponentPropsWithRef<{
|
|
9
|
+
steps: CalendarSteps;
|
|
7
10
|
value?: string;
|
|
8
11
|
defaultValue?: string;
|
|
9
|
-
|
|
12
|
+
placeholder?: InputPropPlaceholder;
|
|
13
|
+
} & Omit<InputProps, 'value' | 'defaultValue' | 'placeholder'>, typeof FIELD_CONTROL_DEFAULT_TAG>;
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import type { CalendarSteps } from '../../../../../Calendar';
|
|
2
|
+
export declare const dateInputMask: (value: string | undefined, steps: CalendarSteps) => string | undefined;
|
|
@@ -1,14 +1,74 @@
|
|
|
1
|
-
|
|
1
|
+
var onlyOneDot = function (value) {
|
|
2
|
+
// Разрешить только первую точку, остальные убрать
|
|
3
|
+
var firstDotIndex = value.indexOf('.');
|
|
4
|
+
if (firstDotIndex === -1) {
|
|
5
|
+
return value;
|
|
6
|
+
}
|
|
7
|
+
// Сохраняем первую часть и одну точку
|
|
8
|
+
var beforeDot = value.slice(0, firstDotIndex + 1);
|
|
9
|
+
var afterDot = value.slice(firstDotIndex + 1).replace(/\./g, '');
|
|
10
|
+
return beforeDot + afterDot;
|
|
11
|
+
};
|
|
12
|
+
export var dateInputMask = function (value, steps) {
|
|
2
13
|
if (!value) {
|
|
3
14
|
return value;
|
|
4
15
|
}
|
|
16
|
+
var hasDaysStep = steps.includes('days');
|
|
17
|
+
var hasMonthsStep = steps.includes('months');
|
|
18
|
+
var hasYearsStep = steps.includes('years');
|
|
19
|
+
var maxLength = 0;
|
|
5
20
|
var newValue = value.replace(/[^0-9.]/g, ''); // Запрещаем ввод, кроме цифр и точек
|
|
6
21
|
newValue = newValue.replace(/\.\.+/g, '..'); // Удаляем лишние точки
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
22
|
+
// DD
|
|
23
|
+
if (hasDaysStep && !hasMonthsStep && !hasYearsStep) {
|
|
24
|
+
maxLength = 2;
|
|
25
|
+
newValue = newValue.replace('.', '');
|
|
26
|
+
}
|
|
27
|
+
// MM
|
|
28
|
+
if (!hasDaysStep && hasMonthsStep && !hasYearsStep) {
|
|
29
|
+
maxLength = 2;
|
|
30
|
+
newValue = newValue.replace('.', '');
|
|
31
|
+
}
|
|
32
|
+
// YYYY
|
|
33
|
+
if (!hasDaysStep && !hasMonthsStep && hasYearsStep) {
|
|
34
|
+
maxLength = 4;
|
|
35
|
+
newValue = newValue.replace('.', '');
|
|
36
|
+
}
|
|
37
|
+
// DD.MM.YYYY
|
|
38
|
+
if (hasDaysStep && hasMonthsStep && hasYearsStep) {
|
|
39
|
+
newValue = newValue.replace(/^(\d)\.$/g, '0$1.'); // Добавляем 0 в D.
|
|
40
|
+
newValue = newValue.replace(/^(\d\d)(\d)$/g, '$1.$2'); // Добавляем точку в DD.M
|
|
41
|
+
newValue = newValue.replace(/^(\d\d)\.(\d)\.$/g, '$1.0$2.'); // Добавляем 0 в DD.M.
|
|
42
|
+
newValue = newValue.replace(/^(\d\d\.\d\d)(\d)$/g, '$1.$2'); // Добавляем точку в DD.MM.Y
|
|
43
|
+
// + 2, так как одно соединение в виде "."
|
|
44
|
+
maxLength = 8 + 2;
|
|
45
|
+
}
|
|
46
|
+
// DD.MM
|
|
47
|
+
if (hasDaysStep && hasMonthsStep && !hasYearsStep) {
|
|
48
|
+
newValue = newValue.replace(/^(\d)\.$/g, '0$1.'); // Добавляем 0 в D.
|
|
49
|
+
newValue = newValue.replace(/^(\d\d)(\d)$/g, '$1.$2'); // Добавляем точку в DD.M
|
|
50
|
+
newValue = onlyOneDot(newValue); // Разрешаем только одну точку
|
|
51
|
+
// + 1, так как одно соединение в виде "."
|
|
52
|
+
maxLength = 4 + 1;
|
|
53
|
+
}
|
|
54
|
+
// DD.YYYY
|
|
55
|
+
if (hasDaysStep && !hasMonthsStep && hasYearsStep) {
|
|
56
|
+
newValue = newValue.replace(/^(\d)\.$/g, '0$1.'); // Добавляем 0 в D.
|
|
57
|
+
newValue = newValue.replace(/^(\d\d)(\d)$/g, '$1.$2'); // Добавляем точку в DD.Y
|
|
58
|
+
newValue = onlyOneDot(newValue);
|
|
59
|
+
// + 1, так как одно соединение в виде "."
|
|
60
|
+
maxLength = 6 + 1;
|
|
61
|
+
}
|
|
62
|
+
// MM.YYYY
|
|
63
|
+
if (!hasDaysStep && hasMonthsStep && hasYearsStep) {
|
|
64
|
+
newValue = newValue.replace(/^(\d)\.$/g, '0$1.'); // Добавляем 0 в M.
|
|
65
|
+
newValue = newValue.replace(/^(\d\d)(\d)$/g, '$1.$2'); // Добавляем точку в MM.Y
|
|
66
|
+
newValue = onlyOneDot(newValue);
|
|
67
|
+
// + 1, так как одно соединение в виде "."
|
|
68
|
+
maxLength = 6 + 1;
|
|
69
|
+
}
|
|
70
|
+
if (newValue.length > maxLength) {
|
|
71
|
+
newValue = newValue.slice(0, maxLength); // Ограничиваем длину
|
|
72
|
+
}
|
|
13
73
|
return newValue;
|
|
14
74
|
};
|