@ozen-ui/kit 0.74.0 → 0.75.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/__inner__/cjs/components/Calendar/Calendar.js +26 -2
  2. package/__inner__/cjs/components/Calendar/CalendarContext.d.ts +8 -1
  3. package/__inner__/cjs/components/Calendar/CalendarContext.js +10 -1
  4. package/__inner__/cjs/components/Calendar/__tests__/utils.d.ts +11 -0
  5. package/__inner__/cjs/components/Calendar/__tests__/utils.js +58 -0
  6. package/__inner__/cjs/components/Calendar/components/CalendarGrid/CalendarGrid.js +4 -3
  7. package/__inner__/cjs/components/Calendar/components/CalendarItem/CalendarItem.js +25 -2
  8. package/__inner__/cjs/components/Calendar/components/CalendarItem/CalendarItemContext.d.ts +1 -0
  9. package/__inner__/cjs/components/Calendar/components/CalendarItem/CalendarItemContext.js +1 -0
  10. package/__inner__/cjs/components/Calendar/components/CalendarModeRange/CalendarModeRange.js +68 -13
  11. package/__inner__/cjs/components/Calendar/components/CalendarModeSingle/CalendarModeSingle.js +62 -16
  12. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/CalendarSwitcher.js +6 -7
  13. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.d.ts +3 -0
  14. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.js +13 -0
  15. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.d.ts +2 -0
  16. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.js +5 -0
  17. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.d.ts +4 -0
  18. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.js +2 -0
  19. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/index.d.ts +1 -0
  20. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/index.js +4 -0
  21. package/__inner__/cjs/components/Calendar/constants.d.ts +2 -0
  22. package/__inner__/cjs/components/Calendar/constants.js +7 -1
  23. package/__inner__/cjs/components/Calendar/index.d.ts +1 -0
  24. package/__inner__/cjs/components/Calendar/index.js +1 -0
  25. package/__inner__/cjs/components/Calendar/types.d.ts +13 -5
  26. package/__inner__/cjs/components/Calendar/utils.d.ts +10 -1
  27. package/__inner__/cjs/components/Calendar/utils.js +12 -1
  28. package/__inner__/cjs/components/DatePicker/components/DateInput/DateInput.js +4 -3
  29. package/__inner__/cjs/components/DatePicker/components/DateInput/types.d.ts +6 -2
  30. package/__inner__/cjs/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.d.ts +2 -1
  31. package/__inner__/cjs/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.js +67 -7
  32. package/__inner__/cjs/components/DatePicker/components/DatePickerModeDate/DatePickerModeDate.js +32 -20
  33. package/__inner__/cjs/components/DatePicker/components/DatePickerModeDateRange/DatePickerModeDateRange.js +74 -51
  34. package/__inner__/cjs/components/DatePicker/constants.d.ts +2 -0
  35. package/__inner__/cjs/components/DatePicker/constants.js +4 -1
  36. package/__inner__/cjs/components/DatePicker/types.d.ts +10 -6
  37. package/__inner__/cjs/components/DatePicker/types.js +3 -1
  38. package/__inner__/cjs/components/DatePicker/utils/formatDateToString/formatDateToString.d.ts +2 -1
  39. package/__inner__/cjs/components/DatePicker/utils/formatDateToString/formatDateToString.js +18 -5
  40. package/__inner__/cjs/components/DatePicker/utils/formatStringToDate/formatStringToDate.d.ts +2 -1
  41. package/__inner__/cjs/components/DatePicker/utils/formatStringToDate/formatStringToDate.js +6 -5
  42. package/__inner__/cjs/components/DatePicker/utils/getCommonCalendarProps/getCommonCalendarProps.js +2 -2
  43. package/__inner__/cjs/components/DatePicker/utils/index.d.ts +2 -0
  44. package/__inner__/cjs/components/DatePicker/utils/index.js +2 -0
  45. package/__inner__/cjs/components/DatePicker/utils/isValidDateString/isValidDateString.d.ts +2 -1
  46. package/__inner__/cjs/components/DatePicker/utils/isValidDateString/isValidDateString.js +9 -8
  47. package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/index.d.ts +1 -0
  48. package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/index.js +4 -0
  49. package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/maskPastedDate.d.ts +6 -0
  50. package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/maskPastedDate.js +43 -0
  51. package/__inner__/cjs/components/DatePicker/utils/parseDateString/index.d.ts +1 -0
  52. package/__inner__/cjs/components/DatePicker/utils/parseDateString/index.js +4 -0
  53. package/__inner__/cjs/components/DatePicker/utils/parseDateString/parseDateString.d.ts +6 -0
  54. package/__inner__/cjs/components/DatePicker/utils/parseDateString/parseDateString.js +66 -0
  55. package/__inner__/cjs/components/ListCardItem/hooks/useListCardItemRatio.js +10 -14
  56. package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/b-business-dark/color-b-business-dark.css +1 -1
  57. package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/b-business-default/color-b-business-default.css +1 -1
  58. package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/ozen-dark/color-ozen-dark.css +1 -1
  59. package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/ozen-default/color-ozen-default.css +1 -1
  60. package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/vip-dark/color-vip-dark.css +1 -1
  61. package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/vip-default/color-vip-default.css +1 -1
  62. package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/shadow/ozen-default/shadow-ozen-default.css +1 -1
  63. package/__inner__/cjs/components/Stack/Stack.css +3 -0
  64. package/__inner__/cjs/components/Stack/Stack.js +2 -1
  65. package/__inner__/cjs/components/Stack/constants.d.ts +1 -0
  66. package/__inner__/cjs/components/Stack/constants.js +2 -1
  67. package/__inner__/cjs/components/Stack/types.d.ts +4 -0
  68. package/__inner__/cjs/components/Stack/types.js +2 -1
  69. package/__inner__/cjs/hooks/useDevEffect/index.d.ts +1 -0
  70. package/__inner__/cjs/hooks/useDevEffect/index.js +4 -0
  71. package/__inner__/cjs/hooks/useDevEffect/useDevEffect.d.ts +3 -0
  72. package/__inner__/cjs/hooks/useDevEffect/useDevEffect.js +13 -0
  73. package/__inner__/cjs/hooks/useIntersectionObserver/useIntersectionObserver.js +3 -2
  74. package/__inner__/cjs/locale/locale.js +39 -3
  75. package/__inner__/cjs/utils/array/createFilled/createFilledArray.d.ts +1 -1
  76. package/__inner__/cjs/utils/array/createFilled/createFilledArray.js +6 -1
  77. package/__inner__/esm/components/Calendar/Calendar.js +27 -3
  78. package/__inner__/esm/components/Calendar/CalendarContext.d.ts +8 -1
  79. package/__inner__/esm/components/Calendar/CalendarContext.js +10 -1
  80. package/__inner__/esm/components/Calendar/__tests__/utils.d.ts +11 -0
  81. package/__inner__/esm/components/Calendar/__tests__/utils.js +45 -0
  82. package/__inner__/esm/components/Calendar/components/CalendarGrid/CalendarGrid.js +4 -3
  83. package/__inner__/esm/components/Calendar/components/CalendarItem/CalendarItem.js +25 -2
  84. package/__inner__/esm/components/Calendar/components/CalendarItem/CalendarItemContext.d.ts +1 -0
  85. package/__inner__/esm/components/Calendar/components/CalendarItem/CalendarItemContext.js +1 -0
  86. package/__inner__/esm/components/Calendar/components/CalendarModeRange/CalendarModeRange.js +70 -15
  87. package/__inner__/esm/components/Calendar/components/CalendarModeSingle/CalendarModeSingle.js +64 -18
  88. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/CalendarSwitcher.js +6 -7
  89. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.d.ts +3 -0
  90. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.js +9 -0
  91. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.d.ts +2 -0
  92. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.js +2 -0
  93. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.d.ts +4 -0
  94. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.js +1 -0
  95. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/index.d.ts +1 -0
  96. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/index.js +1 -0
  97. package/__inner__/esm/components/Calendar/constants.d.ts +2 -0
  98. package/__inner__/esm/components/Calendar/constants.js +6 -0
  99. package/__inner__/esm/components/Calendar/index.d.ts +1 -0
  100. package/__inner__/esm/components/Calendar/index.js +1 -0
  101. package/__inner__/esm/components/Calendar/types.d.ts +13 -5
  102. package/__inner__/esm/components/Calendar/utils.d.ts +10 -1
  103. package/__inner__/esm/components/Calendar/utils.js +9 -0
  104. package/__inner__/esm/components/DatePicker/components/DateInput/DateInput.js +3 -2
  105. package/__inner__/esm/components/DatePicker/components/DateInput/types.d.ts +6 -2
  106. package/__inner__/esm/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.d.ts +2 -1
  107. package/__inner__/esm/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.js +67 -7
  108. package/__inner__/esm/components/DatePicker/components/DatePickerModeDate/DatePickerModeDate.js +33 -21
  109. package/__inner__/esm/components/DatePicker/components/DatePickerModeDateRange/DatePickerModeDateRange.js +68 -45
  110. package/__inner__/esm/components/DatePicker/constants.d.ts +2 -0
  111. package/__inner__/esm/components/DatePicker/constants.js +3 -0
  112. package/__inner__/esm/components/DatePicker/types.d.ts +10 -6
  113. package/__inner__/esm/components/DatePicker/types.js +2 -0
  114. package/__inner__/esm/components/DatePicker/utils/formatDateToString/formatDateToString.d.ts +2 -1
  115. package/__inner__/esm/components/DatePicker/utils/formatDateToString/formatDateToString.js +18 -5
  116. package/__inner__/esm/components/DatePicker/utils/formatStringToDate/formatStringToDate.d.ts +2 -1
  117. package/__inner__/esm/components/DatePicker/utils/formatStringToDate/formatStringToDate.js +6 -5
  118. package/__inner__/esm/components/DatePicker/utils/getCommonCalendarProps/getCommonCalendarProps.js +2 -2
  119. package/__inner__/esm/components/DatePicker/utils/index.d.ts +2 -0
  120. package/__inner__/esm/components/DatePicker/utils/index.js +2 -0
  121. package/__inner__/esm/components/DatePicker/utils/isValidDateString/isValidDateString.d.ts +2 -1
  122. package/__inner__/esm/components/DatePicker/utils/isValidDateString/isValidDateString.js +8 -7
  123. package/__inner__/esm/components/DatePicker/utils/maskPastedDate/index.d.ts +1 -0
  124. package/__inner__/esm/components/DatePicker/utils/maskPastedDate/index.js +1 -0
  125. package/__inner__/esm/components/DatePicker/utils/maskPastedDate/maskPastedDate.d.ts +6 -0
  126. package/__inner__/esm/components/DatePicker/utils/maskPastedDate/maskPastedDate.js +39 -0
  127. package/__inner__/esm/components/DatePicker/utils/parseDateString/index.d.ts +1 -0
  128. package/__inner__/esm/components/DatePicker/utils/parseDateString/index.js +1 -0
  129. package/__inner__/esm/components/DatePicker/utils/parseDateString/parseDateString.d.ts +6 -0
  130. package/__inner__/esm/components/DatePicker/utils/parseDateString/parseDateString.js +62 -0
  131. package/__inner__/esm/components/ListCardItem/hooks/useListCardItemRatio.js +10 -14
  132. package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/b-business-dark/color-b-business-dark.css +1 -1
  133. package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/b-business-default/color-b-business-default.css +1 -1
  134. package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/ozen-dark/color-ozen-dark.css +1 -1
  135. package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/ozen-default/color-ozen-default.css +1 -1
  136. package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/vip-dark/color-vip-dark.css +1 -1
  137. package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/vip-default/color-vip-default.css +1 -1
  138. package/__inner__/esm/components/OzenProvider/providers/theme/tokens/shadow/ozen-default/shadow-ozen-default.css +1 -1
  139. package/__inner__/esm/components/Stack/Stack.css +3 -0
  140. package/__inner__/esm/components/Stack/Stack.js +3 -2
  141. package/__inner__/esm/components/Stack/constants.d.ts +1 -0
  142. package/__inner__/esm/components/Stack/constants.js +1 -0
  143. package/__inner__/esm/components/Stack/types.d.ts +4 -0
  144. package/__inner__/esm/components/Stack/types.js +1 -0
  145. package/__inner__/esm/hooks/useDevEffect/index.d.ts +1 -0
  146. package/__inner__/esm/hooks/useDevEffect/index.js +1 -0
  147. package/__inner__/esm/hooks/useDevEffect/useDevEffect.d.ts +3 -0
  148. package/__inner__/esm/hooks/useDevEffect/useDevEffect.js +9 -0
  149. package/__inner__/esm/hooks/useIntersectionObserver/useIntersectionObserver.js +3 -2
  150. package/__inner__/esm/locale/locale.js +39 -3
  151. package/__inner__/esm/utils/array/createFilled/createFilledArray.d.ts +1 -1
  152. package/__inner__/esm/utils/array/createFilled/createFilledArray.js +6 -1
  153. package/package.json +4 -4
@@ -1,7 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createFilledArray = void 0;
4
+ var isFunction_1 = require("../../isFunction");
4
5
  var createFilledArray = function (length, value) {
5
- return new Array(length).fill(value);
6
+ var array = [];
7
+ for (var i = 0; i < length; i++) {
8
+ array.push((0, isFunction_1.isFunction)(value) ? value(i) : value);
9
+ }
10
+ return array;
6
11
  };
7
12
  exports.createFilledArray = createFilledArray;
@@ -1,10 +1,12 @@
1
1
  import { __assign, __rest } from "tslib";
2
2
  import './Calendar.css';
3
3
  import React, { forwardRef } from 'react';
4
+ import { logger } from '@ozen-ui/logger';
5
+ import { useDevEffect } from '../../hooks/useDevEffect';
4
6
  import { useThemeProps } from '../../hooks/useThemeProps';
5
7
  import { getByMap } from '../../utils/getByMap';
6
8
  import { CalendarModeRange, CalendarModeSingle } from './components';
7
- import { CALENDAR_DEFAULT_CALENDARS, CALENDAR_DEFAULT_MODE, CALENDAR_DEFAULT_SIZE, CALENDAR_DEFAULT_START_DAY, } from './constants';
9
+ import { CALENDAR_DEFAULT_CALENDARS, CALENDAR_DEFAULT_MODE, CALENDAR_DEFAULT_SIZE, CALENDAR_DEFAULT_START_DAY, CALENDAR_DEFAULT_STEPS, CALENDAR_DEFAULT_INITIAL_STEP, } from './constants';
8
10
  import { getPeriodSwitchAriaLabel as createPeriodSwitchAriaLabel } from './utils';
9
11
  var typeMap = {
10
12
  range: CalendarModeRange,
@@ -15,9 +17,31 @@ export var Calendar = forwardRef(function (inProps, ref) {
15
17
  props: inProps,
16
18
  name: 'Calendar',
17
19
  });
18
- var _a = props.size, size = _a === void 0 ? CALENDAR_DEFAULT_SIZE : _a, _b = props.mode, mode = _b === void 0 ? CALENDAR_DEFAULT_MODE : _b, _c = props.startDay, startDay = _c === void 0 ? CALENDAR_DEFAULT_START_DAY : _c, _d = props.calendars, calendars = _d === void 0 ? CALENDAR_DEFAULT_CALENDARS : _d, getPeriodSwitchAriaLabelProp = props.getPeriodSwitchAriaLabel, other = __rest(props, ["size", "mode", "startDay", "calendars", "getPeriodSwitchAriaLabel"]);
20
+ var _a = props.size, size = _a === void 0 ? CALENDAR_DEFAULT_SIZE : _a, _b = props.mode, mode = _b === void 0 ? CALENDAR_DEFAULT_MODE : _b, _c = props.startDay, startDay = _c === void 0 ? CALENDAR_DEFAULT_START_DAY : _c, _d = props.calendars, calendars = _d === void 0 ? CALENDAR_DEFAULT_CALENDARS : _d, getPeriodSwitchAriaLabelProp = props.getPeriodSwitchAriaLabel, stepsProp = props.steps, initialStepProp = props.initialStep, other = __rest(props, ["size", "mode", "startDay", "calendars", "getPeriodSwitchAriaLabel", "steps", "initialStep"]);
21
+ var initialStep = (function () {
22
+ if (initialStepProp) {
23
+ return initialStepProp;
24
+ }
25
+ if (stepsProp !== undefined && initialStepProp === undefined) {
26
+ return stepsProp[0];
27
+ }
28
+ return CALENDAR_DEFAULT_INITIAL_STEP;
29
+ })();
30
+ var steps = stepsProp !== null && stepsProp !== void 0 ? stepsProp : CALENDAR_DEFAULT_STEPS;
19
31
  var getPeriodSwitchAriaLabel = getPeriodSwitchAriaLabelProp || createPeriodSwitchAriaLabel;
20
32
  var Component = getByMap(typeMap, mode);
21
- return (React.createElement(Component, __assign({ size: size, startDay: startDay, calendars: calendars, getPeriodSwitchAriaLabel: getPeriodSwitchAriaLabel }, other, { ref: ref })));
33
+ useDevEffect(function () {
34
+ if (steps.length === 0) {
35
+ logger.error('steps не может быть пустым массивом.');
36
+ return;
37
+ }
38
+ if (!steps.includes(initialStep)) {
39
+ logger.error("initialStep \"".concat(initialStep, "\" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D \u0432 steps [").concat(steps.map(function (step) { return "\"".concat(step, "\""); }).join(', '), "]."));
40
+ }
41
+ if (steps.length !== new Set(steps).size) {
42
+ logger.error("\u0412 steps [".concat(steps.map(function (step) { return "\"".concat(step, "\""); }).join(', '), "] \u0435\u0441\u0442\u044C \u0434\u0443\u0431\u043B\u0438\u0440\u0443\u044E\u0449\u0438\u0435 \u0448\u0430\u0433\u0438, \u043F\u0435\u0440\u0435\u043F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043C\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435."));
43
+ }
44
+ }, [steps, initialStep]);
45
+ return (React.createElement(Component, __assign({ size: size, startDay: startDay, calendars: calendars, getPeriodSwitchAriaLabel: getPeriodSwitchAriaLabel, steps: steps, initialStep: initialStep }, other, { ref: ref })));
22
46
  });
23
47
  Calendar.displayName = 'Calendar';
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { CalendarPropSize, CalendarProps } from './types';
2
+ import type { CalendarPropSize, CalendarProps, CalendarSteps, CalendarStepVariant } from './types';
3
3
  export interface CalendarContextValue {
4
4
  minDate?: Date;
5
5
  maxDate?: Date;
@@ -8,6 +8,13 @@ export interface CalendarContextValue {
8
8
  onYearClick?: CalendarProps['onYearClick'];
9
9
  onMonthClick?: CalendarProps['onMonthClick'];
10
10
  getPeriodSwitchAriaLabel?: CalendarProps['getPeriodSwitchAriaLabel'];
11
+ steps: CalendarSteps;
12
+ initialStep: CalendarStepVariant;
13
+ hasDaysStep: boolean;
14
+ hasMonthsStep: boolean;
15
+ hasYearsStep: boolean;
16
+ lastStep: CalendarStepVariant;
17
+ firstStep: CalendarStepVariant;
11
18
  }
12
19
  export declare const CalendarContext: React.Context<CalendarContextValue>;
13
20
  export declare const useCalendar: () => CalendarContextValue;
@@ -1,3 +1,12 @@
1
1
  import React, { useContext } from 'react';
2
- export var CalendarContext = React.createContext({});
2
+ import { CALENDAR_DEFAULT_STEPS, CALENDAR_DEFAULT_INITIAL_STEP, } from './constants';
3
+ export var CalendarContext = React.createContext({
4
+ steps: CALENDAR_DEFAULT_STEPS,
5
+ initialStep: CALENDAR_DEFAULT_INITIAL_STEP,
6
+ hasDaysStep: true,
7
+ hasMonthsStep: true,
8
+ hasYearsStep: true,
9
+ firstStep: 'years',
10
+ lastStep: 'days',
11
+ });
3
12
  export var useCalendar = function () { return useContext(CalendarContext); };
@@ -0,0 +1,11 @@
1
+ import type { CalendarStepVariant } from '../types';
2
+ export declare const getRoot: () => HTMLDivElement;
3
+ export declare const getFromCalendar: () => HTMLDivElement;
4
+ export declare const getToCalendar: () => HTMLDivElement;
5
+ export declare const getButtonPrevPeriod: () => HTMLDivElement;
6
+ export declare const getButtonNextPeriod: () => HTMLDivElement;
7
+ export declare const getDaysGrid: (root?: HTMLDivElement) => HTMLDivElement;
8
+ export declare const getMonthsGrid: (root?: HTMLDivElement) => HTMLDivElement;
9
+ export declare const getYearsGrid: (root?: HTMLDivElement) => HTMLDivElement;
10
+ export declare const getStep: (root?: HTMLDivElement) => CalendarStepVariant;
11
+ export declare const getGridButton: (text: string | number, root?: HTMLDivElement) => Element;
@@ -0,0 +1,45 @@
1
+ import { screen } from '@testing-library/react';
2
+ import { cnCalendarDays, cnCalendarMoths, cnCalendarYears, } from '../components';
3
+ import { cnCalendar } from '../utils';
4
+ export var getRoot = function () { return screen.getByTestId('calendar'); };
5
+ export var getFromCalendar = function () {
6
+ return getRoot().querySelectorAll(".".concat(cnCalendar('MonthContainer')))[0];
7
+ };
8
+ export var getToCalendar = function () {
9
+ return getRoot().querySelectorAll(".".concat(cnCalendar('MonthContainer')))[1];
10
+ };
11
+ export var getButtonPrevPeriod = function () {
12
+ return screen.getByLabelText('prev');
13
+ };
14
+ export var getButtonNextPeriod = function () {
15
+ return screen.getByLabelText('next');
16
+ };
17
+ export var getDaysGrid = function (root) {
18
+ return (root !== null && root !== void 0 ? root : getRoot()).querySelector(".".concat(cnCalendarDays()));
19
+ };
20
+ export var getMonthsGrid = function (root) {
21
+ return (root !== null && root !== void 0 ? root : getRoot()).querySelector(".".concat(cnCalendarMoths()));
22
+ };
23
+ export var getYearsGrid = function (root) {
24
+ return (root !== null && root !== void 0 ? root : getRoot()).querySelector(".".concat(cnCalendarYears()));
25
+ };
26
+ export var getStep = function (root) {
27
+ if (getDaysGrid(root)) {
28
+ return 'days';
29
+ }
30
+ if (getMonthsGrid(root)) {
31
+ return 'months';
32
+ }
33
+ if (getYearsGrid(root)) {
34
+ return 'years';
35
+ }
36
+ throw new Error('Не удалось определить шаг календаря.');
37
+ };
38
+ export var getGridButton = function (text, root) {
39
+ var rootElement = root !== null && root !== void 0 ? root : getRoot();
40
+ var button = Array.from(rootElement.querySelectorAll('.CalendarGridItem')).find(function (element) { var _a; return ((_a = element.textContent) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === String(text).toLowerCase(); });
41
+ if (!button) {
42
+ throw new Error("\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043D\u0430\u0439\u0442\u0438 \u043A\u043D\u043E\u043F\u043A\u0443 \u0441 \u0442\u0435\u043A\u0441\u0442\u043E\u043C \"".concat(text, "\""));
43
+ }
44
+ return button;
45
+ };
@@ -15,18 +15,19 @@ export var cnCalendarMoths = cn('CalendarMonths');
15
15
  export var cnCalendarYears = cn('CalendarYears');
16
16
  export var CalendarGrid = forwardRef(function () {
17
17
  var _a = useCalendar(), size = _a.size, onYearClick = _a.onYearClick, onDayClick = _a.onDayClick, onMonthClick = _a.onMonthClick;
18
- var _b = useCalendarItem(), step = _b.step, goStep = _b.goStep, calendar = _b.calendar;
18
+ var _b = useCalendarItem(), step = _b.step, toNextStep = _b.toNextStep, calendar = _b.calendar;
19
19
  var _c = useDatePickerContext(), _d = _c.data, weekDays = _d.weekDays, years = _d.years, months = _d.months, _e = _c.propGetters, dayButton = _e.dayButton, monthButton = _e.monthButton, yearButton = _e.yearButton;
20
20
  var _f = calendar || {}, days = _f.days, month = _f.month;
21
21
  var handleClickOnDay = function (e, date) {
22
+ toNextStep();
22
23
  onDayClick === null || onDayClick === void 0 ? void 0 : onDayClick(e, date);
23
24
  };
24
25
  var handleClickOnMonth = function (e, date) {
25
- goStep === null || goStep === void 0 ? void 0 : goStep('days');
26
+ toNextStep();
26
27
  onMonthClick === null || onMonthClick === void 0 ? void 0 : onMonthClick(e, date);
27
28
  };
28
29
  var handleClickOnYear = function (e, date) {
29
- goStep === null || goStep === void 0 ? void 0 : goStep('months');
30
+ toNextStep();
30
31
  onYearClick === null || onYearClick === void 0 ? void 0 : onYearClick(e, date);
31
32
  };
32
33
  return (React.createElement(React.Fragment, null,
@@ -1,17 +1,35 @@
1
1
  import { __assign, __read } from "tslib";
2
2
  import React, { forwardRef, useState } from 'react';
3
3
  import { Divider } from '../../../Divider';
4
+ import { useCalendar } from '../../CalendarContext';
4
5
  import { cnCalendar } from '../../utils';
5
6
  import { CalendarGrid, CalendarSwitcher } from '../index';
6
7
  import { CalendarItemContext } from './CalendarItemContext';
7
8
  import { CalendarItemNextMonth, CalendarItemPreviousMonth } from './components';
8
9
  export var CalendarItem = forwardRef(function (_a, ref) {
9
10
  var calendar = _a.calendar, type = _a.type;
10
- var _b = __read(useState('days'), 2), step = _b[0], setStep = _b[1];
11
+ var _b = useCalendar(), steps = _b.steps, initialStep = _b.initialStep;
12
+ var _c = __read(useState(function () {
13
+ if (!steps.includes(initialStep)) {
14
+ return steps[0];
15
+ }
16
+ return initialStep;
17
+ }), 2), step = _c[0], setStep = _c[1];
11
18
  // Управление представлениями календаря
12
19
  var goStep = function (step) {
13
20
  setStep(step);
14
21
  };
22
+ var toNextStep = function () {
23
+ var currentStepIndex = steps.indexOf(step);
24
+ if (currentStepIndex === -1) {
25
+ return;
26
+ }
27
+ var nextStep = steps[currentStepIndex + 1];
28
+ if (!nextStep) {
29
+ return;
30
+ }
31
+ setStep(nextStep);
32
+ };
15
33
  var getActions = function (type) {
16
34
  if (type === 'single') {
17
35
  return {
@@ -37,7 +55,12 @@ export var CalendarItem = forwardRef(function (_a, ref) {
37
55
  nextButton: React.createElement("div", null),
38
56
  };
39
57
  };
40
- return (React.createElement(CalendarItemContext.Provider, { value: { step: step, goStep: goStep, calendar: calendar } },
58
+ return (React.createElement(CalendarItemContext.Provider, { value: {
59
+ step: step,
60
+ goStep: goStep,
61
+ toNextStep: toNextStep,
62
+ calendar: calendar,
63
+ } },
41
64
  React.createElement("div", { ref: ref, className: cnCalendar('MonthContainer') },
42
65
  React.createElement(CalendarSwitcher, __assign({}, getActions(type))),
43
66
  React.createElement(Divider, { color: "secondary" }),
@@ -4,6 +4,7 @@ import type { CalendarStepVariant } from '../../index';
4
4
  export interface CalendarItemContextValue {
5
5
  step: CalendarStepVariant;
6
6
  goStep?: (step: CalendarStepVariant) => void;
7
+ toNextStep: () => void;
7
8
  calendar?: DPCalendar;
8
9
  }
9
10
  export declare const CalendarItemContext: React.Context<CalendarItemContextValue>;
@@ -1,5 +1,6 @@
1
1
  import React, { useContext } from 'react';
2
2
  export var CalendarItemContext = React.createContext({
3
3
  step: 'days',
4
+ toNextStep: function () { },
4
5
  });
5
6
  export var useCalendarItem = function () { return useContext(CalendarItemContext); };
@@ -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, onMonthClick = props.onMonthClick, onDayClick = props.onDayClick, onYearClick = 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, other = __rest(props, ["size", "startDay", "renderAdditionalControls", "locale", "onChange", "onCalendarsChange", "onOffsetDateChange", "calendars", "onMonthClick", "onDayClick", "onYearClick", "value", "defaultValue", "offsetDate", "defaultOffsetDate", "exclude", "minDate", "maxDate", "className", "getPeriodSwitchAriaLabel"]);
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
- setOffsetDateState(date);
30
- onOffsetDateChangeProp === null || onOffsetDateChangeProp === void 0 ? void 0 : onOffsetDateChangeProp(date);
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
- if (data) {
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 })))));
@@ -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, onMonthClick = props.onMonthClick, onDayClick = props.onDayClick, onYearClick = 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, other = __rest(props, ["size", "startDay", "renderAdditionalControls", "locale", "onChange", "onOffsetDateChange", "onMonthClick", "onDayClick", "onYearClick", "value", "defaultValue", "offsetDate", "onCalendarsChange", "defaultOffsetDate", "exclude", "minDate", "maxDate", "calendars", "className", "getPeriodSwitchAriaLabel"]);
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 value = data[0];
25
- if (value) {
26
- setValue(value);
27
- onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(value);
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
- setOffsetDateState(date);
32
- onOffsetDateChangeProp === null || onOffsetDateChangeProp === void 0 ? void 0 : onOffsetDateChangeProp(date);
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(Typography, __assign({ color: "primary" }, (size && { variant: "text-".concat(size) })), (_b = years === null || years === void 0 ? void 0 : years[0]) === null || _b === void 0 ? void 0 :
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,3 @@
1
+ import React from 'react';
2
+ import type { CalendarSwitcherTextProps } from './types';
3
+ export declare const CalendarSwitcherText: ({ children, }: CalendarSwitcherTextProps) => React.JSX.Element;
@@ -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,2 @@
1
+ export * from './CalendarSwitcherText';
2
+ export * from './types';
@@ -0,0 +1,2 @@
1
+ export * from './CalendarSwitcherText';
2
+ export * from './types';
@@ -0,0 +1,4 @@
1
+ import type { ReactNode } from 'react';
2
+ export type CalendarSwitcherTextProps = {
3
+ children: ReactNode;
4
+ };
@@ -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,2 +1,3 @@
1
1
  export * from './Calendar';
2
+ export * from './constants';
2
3
  export * from './types';
@@ -1,2 +1,3 @@
1
1
  export * from './Calendar';
2
+ export * from './constants';
2
3
  export * from './types';