@alfalab/core-components-date-range-input 2.2.7 → 2.2.9

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 (65) hide show
  1. package/Component.desktop.d.ts +5 -4
  2. package/Component.desktop.js +4 -2
  3. package/Component.mobile.d.ts +5 -4
  4. package/Component.mobile.js +4 -2
  5. package/Component.responsive.d.ts +5 -4
  6. package/Component.responsive.js +7 -5
  7. package/components/date-range-input/Component.d.ts +108 -0
  8. package/components/date-range-input/Component.js +220 -13
  9. package/components/date-range-input/index.css +6 -6
  10. package/components/date-range-input/index.d.ts +1 -1
  11. package/components/date-range-input/index.js +3 -1
  12. package/cssm/Component.desktop.d.ts +5 -4
  13. package/cssm/Component.desktop.js +4 -2
  14. package/cssm/Component.mobile.d.ts +5 -4
  15. package/cssm/Component.mobile.js +4 -2
  16. package/cssm/Component.responsive.d.ts +5 -4
  17. package/cssm/Component.responsive.js +7 -5
  18. package/cssm/components/date-range-input/Component.d.ts +108 -0
  19. package/cssm/components/date-range-input/Component.js +219 -14
  20. package/cssm/components/date-range-input/index.d.ts +1 -1
  21. package/cssm/components/date-range-input/index.js +3 -1
  22. package/cssm/desktop.js +3 -1
  23. package/cssm/index.js +5 -3
  24. package/cssm/mobile.js +4 -2
  25. package/cssm/responsive.js +5 -3
  26. package/desktop.js +3 -1
  27. package/esm/Component.desktop.d.ts +5 -4
  28. package/esm/Component.desktop.js +5 -3
  29. package/esm/Component.mobile.d.ts +5 -4
  30. package/esm/Component.mobile.js +5 -3
  31. package/esm/Component.responsive.d.ts +5 -4
  32. package/esm/Component.responsive.js +7 -5
  33. package/esm/components/date-range-input/Component.d.ts +108 -0
  34. package/esm/components/date-range-input/Component.js +216 -12
  35. package/esm/components/date-range-input/index.css +6 -6
  36. package/esm/components/date-range-input/index.d.ts +1 -1
  37. package/esm/components/date-range-input/index.js +3 -1
  38. package/esm/desktop.js +3 -1
  39. package/esm/index.js +5 -3
  40. package/esm/mobile.js +4 -2
  41. package/esm/responsive.js +5 -3
  42. package/index.js +5 -3
  43. package/mobile.js +4 -2
  44. package/modern/Component.desktop.d.ts +5 -4
  45. package/modern/Component.desktop.js +3 -2
  46. package/modern/Component.mobile.d.ts +5 -4
  47. package/modern/Component.mobile.js +3 -2
  48. package/modern/Component.responsive.d.ts +5 -4
  49. package/modern/Component.responsive.js +5 -4
  50. package/modern/components/date-range-input/Component.d.ts +16 -104
  51. package/modern/components/date-range-input/Component.js +65 -28
  52. package/modern/components/date-range-input/index.css +6 -6
  53. package/modern/components/date-range-input/index.js +1 -0
  54. package/modern/desktop.js +1 -0
  55. package/modern/index.js +1 -0
  56. package/modern/mobile.js +1 -0
  57. package/modern/responsive.js +1 -0
  58. package/package.json +7 -6
  59. package/responsive.js +5 -3
  60. package/Component-156f85af.d.ts +0 -229
  61. package/Component-156f85af.js +0 -225
  62. package/cssm/Component-540e1474.d.ts +0 -229
  63. package/cssm/Component-540e1474.js +0 -224
  64. package/esm/Component-2c3bcbd6.d.ts +0 -229
  65. package/esm/Component-2c3bcbd6.js +0 -215
@@ -1,5 +1,6 @@
1
- import { FC } from 'react';
2
- import { DateRangeInputProps } from "./Component-156f85af";
3
- type DateRangeInputDesktopProps = Omit<DateRangeInputProps, 'view'>;
4
- declare const DateRangeInputDesktop: FC<DateRangeInputDesktopProps>;
1
+ /// <reference types="react" />
2
+ import React from 'react';
3
+ import { DateRangeInputProps, ConditionalProps } from "./components/date-range-input/Component";
4
+ type DateRangeInputDesktopProps = Omit<DateRangeInputProps, 'view' | 'picker' | 'onClose'> & ConditionalProps;
5
+ declare const DateRangeInputDesktop: React.ForwardRefExoticComponent<DateRangeInputDesktopProps & React.RefAttributes<HTMLInputElement>>;
5
6
  export { DateRangeInputDesktopProps, DateRangeInputDesktop };
@@ -1,9 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var components_dateRangeInput_Component = require('./Component-156f85af.js');
3
+ var tslib = require('tslib');
4
4
  var React = require('react');
5
+ var components_dateRangeInput_Component = require('./components/date-range-input/Component.js');
5
6
  require('react-merge-refs');
6
7
  require('classnames');
8
+ require('date-fns');
7
9
  require('date-fns/isValid');
8
10
  require('@alfalab/core-components-calendar');
9
11
  require('@alfalab/core-components-icon-button');
@@ -18,6 +20,6 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
18
20
 
19
21
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
20
22
 
21
- var DateRangeInputDesktop = function (props) { return (React__default.default.createElement(components_dateRangeInput_Component.DateRangeInput, components_dateRangeInput_Component.__assign({}, props))); };
23
+ var DateRangeInputDesktop = React.forwardRef(function (props, ref) { return React__default.default.createElement(components_dateRangeInput_Component.DateRangeInput, tslib.__assign({}, props, { ref: ref })); });
22
24
 
23
25
  exports.DateRangeInputDesktop = DateRangeInputDesktop;
@@ -1,5 +1,6 @@
1
- import { FC } from 'react';
2
- import { DateRangeInputProps } from "./Component-156f85af";
3
- type DateRangeInputMobileProps = Omit<DateRangeInputProps, 'view'>;
4
- declare const DateRangeInputMobile: FC<DateRangeInputMobileProps>;
1
+ /// <reference types="react" />
2
+ import React from 'react';
3
+ import { DateRangeInputProps, ConditionalProps } from "./components/date-range-input/Component";
4
+ type DateRangeInputMobileProps = Omit<DateRangeInputProps, 'view' | 'picker' | 'onClose'> & ConditionalProps;
5
+ declare const DateRangeInputMobile: React.ForwardRefExoticComponent<DateRangeInputMobileProps & React.RefAttributes<HTMLInputElement>>;
5
6
  export { DateRangeInputMobileProps, DateRangeInputMobile };
@@ -1,10 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var components_dateRangeInput_Component = require('./Component-156f85af.js');
3
+ var tslib = require('tslib');
4
4
  var React = require('react');
5
5
  var coreComponentsCalendar = require('@alfalab/core-components-calendar');
6
+ var components_dateRangeInput_Component = require('./components/date-range-input/Component.js');
6
7
  require('react-merge-refs');
7
8
  require('classnames');
9
+ require('date-fns');
8
10
  require('date-fns/isValid');
9
11
  require('@alfalab/core-components-icon-button');
10
12
  require('@alfalab/core-components-input');
@@ -18,6 +20,6 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
18
20
 
19
21
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
20
22
 
21
- var DateRangeInputMobile = function (props) { return (React__default.default.createElement(components_dateRangeInput_Component.DateRangeInput, components_dateRangeInput_Component.__assign({ Calendar: coreComponentsCalendar.CalendarMobile, view: 'mobile' }, props))); };
23
+ var DateRangeInputMobile = React.forwardRef(function (props, ref) { return React__default.default.createElement(components_dateRangeInput_Component.DateRangeInput, tslib.__assign({ Calendar: coreComponentsCalendar.CalendarMobile, view: 'mobile' }, props, { ref: ref })); });
22
24
 
23
25
  exports.DateRangeInputMobile = DateRangeInputMobile;
@@ -1,6 +1,7 @@
1
- import { FC } from 'react';
2
- import { DateRangeInputProps } from "./Component-156f85af";
3
- type DateRangeInputResponsiveProps = Omit<DateRangeInputProps, 'view'> & {
1
+ /// <reference types="react" />
2
+ import React from 'react';
3
+ import { DateRangeInputProps, ConditionalProps } from "./components/date-range-input/Component";
4
+ type DateRangeInputResponsiveProps = Omit<DateRangeInputProps, 'view' | 'picker' | 'onClose'> & ConditionalProps & {
4
5
  /**
5
6
  * Контрольная точка, с нее начинается desktop версия
6
7
  * @default 1024
@@ -8,5 +9,5 @@ type DateRangeInputResponsiveProps = Omit<DateRangeInputProps, 'view'> & {
8
9
  breakpoint?: number;
9
10
  };
10
11
  type DateRangeInputMedia = 'desktop' | 'mobile';
11
- declare const DateRangeInputResponsive: FC<DateRangeInputResponsiveProps>;
12
+ declare const DateRangeInputResponsive: React.ForwardRefExoticComponent<DateRangeInputResponsiveProps & React.RefAttributes<HTMLInputElement>>;
12
13
  export { DateRangeInputResponsiveProps, DateRangeInputMedia, DateRangeInputResponsive };
@@ -1,12 +1,14 @@
1
1
  'use strict';
2
2
 
3
- var components_dateRangeInput_Component = require('./Component-156f85af.js');
3
+ var tslib = require('tslib');
4
4
  var React = require('react');
5
5
  var hooks = require('@alfalab/hooks');
6
6
  var Component_desktop = require('./Component.desktop.js');
7
7
  var Component_mobile = require('./Component.mobile.js');
8
+ require('./components/date-range-input/Component.js');
8
9
  require('react-merge-refs');
9
10
  require('classnames');
11
+ require('date-fns');
10
12
  require('date-fns/isValid');
11
13
  require('@alfalab/core-components-calendar');
12
14
  require('@alfalab/core-components-icon-button');
@@ -20,13 +22,13 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
20
22
 
21
23
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
22
24
 
23
- var DateRangeInputResponsive = function (_a) {
24
- var _b = _a.breakpoint, breakpoint = _b === void 0 ? 1024 : _b, restProps = components_dateRangeInput_Component.__rest(_a, ["breakpoint"]);
25
+ var DateRangeInputResponsive = React.forwardRef(function (_a, ref) {
26
+ var _b = _a.breakpoint, breakpoint = _b === void 0 ? 1024 : _b, restProps = tslib.__rest(_a, ["breakpoint"]);
25
27
  var view = hooks.useMedia([
26
28
  ['mobile', "(max-width: ".concat(breakpoint - 1, "px)")],
27
29
  ['desktop', "(min-width: ".concat(breakpoint, "px)")],
28
30
  ], 'desktop')[0];
29
- return view === 'desktop' ? (React__default.default.createElement(Component_desktop.DateRangeInputDesktop, components_dateRangeInput_Component.__assign({}, restProps))) : (React__default.default.createElement(Component_mobile.DateRangeInputMobile, components_dateRangeInput_Component.__assign({}, restProps)));
30
- };
31
+ return view === 'desktop' ? (React__default.default.createElement(Component_desktop.DateRangeInputDesktop, tslib.__assign({}, restProps, { ref: ref }))) : (React__default.default.createElement(Component_mobile.DateRangeInputMobile, tslib.__assign({}, restProps, { ref: ref })));
32
+ });
31
33
 
32
34
  exports.DateRangeInputResponsive = DateRangeInputResponsive;
@@ -0,0 +1,108 @@
1
+ /// <reference types="react" />
2
+ import React from 'react';
3
+ import { ChangeEvent, ElementType } from "react";
4
+ import { CalendarMobileProps, CalendarProps } from "@alfalab/core-components-calendar";
5
+ import { InputProps } from "@alfalab/core-components-input";
6
+ import { PopoverProps } from "@alfalab/core-components-popover";
7
+ type ConditionalProps = {
8
+ /**
9
+ * Обработчик изменения значения
10
+ */
11
+ picker: true;
12
+ /**
13
+ * Обработчик закрытия календаря
14
+ */
15
+ onClose?: () => void;
16
+ } | {
17
+ picker?: false;
18
+ onClose?: never;
19
+ };
20
+ type DateRangeInputProps = Omit<InputProps, 'onChange'> & ConditionalProps & {
21
+ /**
22
+ * Дополнительный класс
23
+ */
24
+ className?: string;
25
+ /**
26
+ * Дополнительный класс для инпута
27
+ */
28
+ inputClassName?: string;
29
+ /**
30
+ * Дополнительный класс для поповера
31
+ */
32
+ popoverClassName?: string;
33
+ /**
34
+ * Обработчик изменения значения
35
+ */
36
+ onChange?: (payload: {
37
+ dateFrom?: Date;
38
+ dateTo?: Date;
39
+ value: string;
40
+ }, event?: ChangeEvent<HTMLInputElement>) => void;
41
+ /**
42
+ * Обработчик окончания ввода
43
+ */
44
+ onComplete?: (payload: {
45
+ dateFrom: Date;
46
+ dateTo: Date;
47
+ value: string;
48
+ }, event?: ChangeEvent<HTMLInputElement>) => void;
49
+ /**
50
+ * Компонент календаря
51
+ */
52
+ Calendar?: ElementType;
53
+ /**
54
+ * Доп. пропсы для календаря
55
+ */
56
+ calendarProps?: (CalendarProps & Record<string, unknown>) | (CalendarMobileProps & Record<string, unknown>);
57
+ /**
58
+ * Месяц в календаре по умолчанию (timestamp)
59
+ */
60
+ defaultMonth?: number;
61
+ /**
62
+ * Минимальная дата, доступная для выбора (timestamp)
63
+ */
64
+ minDate?: number;
65
+ /**
66
+ * Максимальная дата, доступная для выбора (timestamp)
67
+ */
68
+ maxDate?: number;
69
+ /**
70
+ * Список событий
71
+ */
72
+ events?: Array<Date | number>;
73
+ /**
74
+ * Список выходных
75
+ */
76
+ offDays?: Array<Date | number>;
77
+ /**
78
+ * Состояние открытия по умолчанию
79
+ */
80
+ defaultOpen?: boolean;
81
+ /**
82
+ * Позиционирование поповера с календарем
83
+ */
84
+ popoverPosition?: PopoverProps['position'];
85
+ /**
86
+ * z-index Popover
87
+ */
88
+ zIndexPopover?: PopoverProps['zIndex'];
89
+ /**
90
+ * Запрещает поповеру менять свою позицию.
91
+ * Например, если места снизу недостаточно,то он все равно будет показан снизу
92
+ */
93
+ preventFlip?: boolean;
94
+ /**
95
+ * Календарь будет принимать ширину инпута
96
+ */
97
+ useAnchorWidth?: boolean;
98
+ /**
99
+ * Растягивает компонент на ширину контейнера
100
+ */
101
+ block?: boolean;
102
+ /**
103
+ * Отображение компонента в мобильном или десктопном виде
104
+ */
105
+ view?: 'desktop' | 'mobile';
106
+ };
107
+ declare const DateRangeInput: React.ForwardRefExoticComponent<DateRangeInputProps & React.RefAttributes<HTMLInputElement>>;
108
+ export { ConditionalProps, DateRangeInputProps, DateRangeInput };
@@ -1,19 +1,226 @@
1
1
  'use strict';
2
2
 
3
- var components_dateRangeInput_Component = require('../../Component-156f85af.js');
4
- require('react');
5
- require('react-merge-refs');
6
- require('classnames');
7
- require('date-fns/isValid');
8
- require('@alfalab/core-components-calendar');
9
- require('@alfalab/core-components-icon-button');
10
- require('@alfalab/core-components-input');
11
- require('@alfalab/core-components-popover');
12
- require('@alfalab/hooks');
13
- require('@alfalab/icons-glyph/CalendarMIcon');
14
- require('../../utils/format.js');
3
+ var tslib = require('tslib');
4
+ var React = require('react');
5
+ var mergeRefs = require('react-merge-refs');
6
+ var cn = require('classnames');
7
+ var dateFns = require('date-fns');
8
+ var dateFnsIsValid = require('date-fns/isValid');
9
+ var coreComponentsCalendar = require('@alfalab/core-components-calendar');
10
+ var coreComponentsIconButton = require('@alfalab/core-components-icon-button');
11
+ var coreComponentsInput = require('@alfalab/core-components-input');
12
+ var coreComponentsPopover = require('@alfalab/core-components-popover');
13
+ var hooks = require('@alfalab/hooks');
14
+ var CalendarMIcon = require('@alfalab/icons-glyph/CalendarMIcon');
15
+ var utils_format = require('../../utils/format.js');
15
16
  require('date-fns/parse');
16
17
 
18
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
17
19
 
20
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
21
+ var mergeRefs__default = /*#__PURE__*/_interopDefaultCompat(mergeRefs);
22
+ var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
23
+ var dateFnsIsValid__default = /*#__PURE__*/_interopDefaultCompat(dateFnsIsValid);
18
24
 
19
- exports.DateRangeInput = components_dateRangeInput_Component.DateRangeInput;
25
+ var styles = {"component":"date-range-input__component_1iuwu","calendarContainer":"date-range-input__calendarContainer_1iuwu","calendarResponsive":"date-range-input__calendarResponsive_1iuwu","block":"date-range-input__block_1iuwu"};
26
+ require('./index.css')
27
+
28
+ /* eslint-disable no-useless-escape, jsx-a11y/click-events-have-key-events */
29
+ var DateRangeInput = React__default.default.forwardRef(function (_a, ref) {
30
+ var _b, _c;
31
+ var _d;
32
+ var className = _a.className, inputClassName = _a.inputClassName, popoverClassName = _a.popoverClassName, disabled = _a.disabled, readOnly = _a.readOnly, picker = _a.picker, _e = _a.defaultValue, defaultValue = _e === void 0 ? '' : _e, propValue = _a.value, onChange = _a.onChange, onComplete = _a.onComplete, onClose = _a.onClose, rightAddons = _a.rightAddons, useAnchorWidth = _a.useAnchorWidth, block = _a.block, _f = _a.popoverPosition, popoverPosition = _f === void 0 ? 'bottom-start' : _f, zIndexPopover = _a.zIndexPopover, preventFlip = _a.preventFlip, _g = _a.Calendar, Calendar = _g === void 0 ? coreComponentsCalendar.Calendar : _g, _h = _a.calendarProps, calendarProps = _h === void 0 ? {} : _h, defaultMonth = _a.defaultMonth, _j = _a.minDate, minDate = _j === void 0 ? calendarProps.minDate : _j, _k = _a.maxDate, maxDate = _k === void 0 ? calendarProps.maxDate : _k, _l = _a.offDays, offDays = _l === void 0 ? calendarProps.offDays || [] : _l, _m = _a.events, events = _m === void 0 ? calendarProps.events || [] : _m, _o = _a.defaultOpen, defaultOpen = _o === void 0 ? false : _o, _p = _a.view, view = _p === void 0 ? 'desktop' : _p, restProps = tslib.__rest(_a, ["className", "inputClassName", "popoverClassName", "disabled", "readOnly", "picker", "defaultValue", "value", "onChange", "onComplete", "onClose", "rightAddons", "useAnchorWidth", "block", "popoverPosition", "zIndexPopover", "preventFlip", "Calendar", "calendarProps", "defaultMonth", "minDate", "maxDate", "offDays", "events", "defaultOpen", "view"]);
33
+ var inputRef = React.useRef(null);
34
+ var iconRef = React.useRef(null);
35
+ var calendarRef = React.useRef(null);
36
+ var _q = React.useState(propValue || defaultValue), value = _q[0], setValue = _q[1];
37
+ var _r = React.useState(defaultOpen), open = _r[0], setOpen = _r[1];
38
+ var inputDisabled = disabled || readOnly;
39
+ var calendarResponsive = (_d = calendarProps === null || calendarProps === void 0 ? void 0 : calendarProps.responsive) !== null && _d !== void 0 ? _d : true;
40
+ var _s = coreComponentsCalendar.usePeriod({ onPeriodChange: handlePeriodChange }), selectedFrom = _s.selectedFrom, selectedTo = _s.selectedTo, updatePeriod = _s.updatePeriod, resetPeriod = _s.resetPeriod, setStart = _s.setStart, setEnd = _s.setEnd;
41
+ React.useEffect(function () {
42
+ if (value) {
43
+ setCalendarPeriod(getDates(value));
44
+ }
45
+ // eslint-disable-next-line react-hooks/exhaustive-deps
46
+ }, []);
47
+ React.useEffect(function () {
48
+ setValue(function (prevValue) {
49
+ if (selectedFrom && selectedTo) {
50
+ var from = utils_format.parseTimestampToDate(selectedFrom);
51
+ var to = utils_format.parseTimestampToDate(selectedTo);
52
+ return "".concat(from, " - ").concat(to);
53
+ }
54
+ if (selectedFrom && prevValue.length < utils_format.DATE_FORMAT.length) {
55
+ return utils_format.parseTimestampToDate(selectedFrom);
56
+ }
57
+ return prevValue;
58
+ });
59
+ }, [selectedFrom, selectedTo]);
60
+ hooks.useDidUpdateEffect(function () {
61
+ var newPropValue = propValue || '';
62
+ setValue(function (prevValue) {
63
+ if (prevValue === newPropValue) {
64
+ return prevValue;
65
+ }
66
+ var dates = getDates(newPropValue);
67
+ setCalendarPeriod(dates);
68
+ return dates.formattedValue;
69
+ });
70
+ }, [propValue]);
71
+ function getDates(val) {
72
+ var formattedValue = utils_format.format(val);
73
+ var dateArr = formattedValue.split('-').map(function (v) { return v.trim(); });
74
+ var dateFrom = dateArr[0] ? utils_format.parseDateString(dateArr[0]) : undefined;
75
+ var dateTo = dateArr[1] ? utils_format.parseDateString(dateArr[1]) : undefined;
76
+ return { formattedValue: formattedValue, dateFrom: dateFrom, dateTo: dateTo, dateArr: dateArr };
77
+ }
78
+ function setCalendarPeriod(_a) {
79
+ var dateFrom = _a.dateFrom, dateTo = _a.dateTo;
80
+ setStart(dateFrom === null || dateFrom === void 0 ? void 0 : dateFrom.getTime());
81
+ setEnd(dateTo === null || dateTo === void 0 ? void 0 : dateTo.getTime());
82
+ }
83
+ function handlePeriodChange(selectedFrom, selectedTo) {
84
+ if (selectedFrom && !selectedTo && value.length === utils_format.DATE_MASK.length) {
85
+ setValue(utils_format.parseTimestampToDate(selectedFrom));
86
+ }
87
+ else if ((!selectedFrom && !selectedTo && value.length === utils_format.DATE_FORMAT.length) ||
88
+ (selectedFrom === selectedTo && value.length === utils_format.DATE_MASK.length)) {
89
+ setValue('');
90
+ }
91
+ var dateFrom = selectedFrom ? new Date(selectedFrom) : undefined;
92
+ var dateTo = selectedTo ? new Date(selectedTo) : undefined;
93
+ var newValue = [selectedFrom, selectedTo].filter(Boolean)
94
+ .map(function (timestamp) { return utils_format.parseTimestampToDate(timestamp); })
95
+ .join(' - ');
96
+ onChange === null || onChange === void 0 ? void 0 : onChange({
97
+ dateFrom: dateFrom,
98
+ dateTo: dateTo,
99
+ value: newValue,
100
+ });
101
+ if (dateFrom && dateTo) {
102
+ onComplete === null || onComplete === void 0 ? void 0 : onComplete({
103
+ dateFrom: dateFrom,
104
+ dateTo: dateTo,
105
+ value: newValue,
106
+ });
107
+ }
108
+ }
109
+ var handleInputWrapperFocus = function (event) {
110
+ if (view === 'desktop') {
111
+ if (picker) {
112
+ setOpen(true);
113
+ }
114
+ if (!open && event.target.tagName !== 'INPUT' && calendarRef.current) {
115
+ calendarRef.current.focus();
116
+ }
117
+ }
118
+ };
119
+ var handleBlur = function (event) {
120
+ var _a, _b, _c;
121
+ if (view === 'desktop') {
122
+ var target = (event.relatedTarget || document.activeElement);
123
+ if (((_a = calendarRef.current) === null || _a === void 0 ? void 0 : _a.contains(target)) === false &&
124
+ ((_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.contains(target)) === false &&
125
+ ((_c = iconRef.current) === null || _c === void 0 ? void 0 : _c.contains(target)) === false) {
126
+ setOpen(false);
127
+ if (onClose) {
128
+ onClose();
129
+ }
130
+ }
131
+ }
132
+ };
133
+ var handleChange = function (event) {
134
+ var _a, _b;
135
+ var newValue = event.target.value;
136
+ if (newValue.length > utils_format.DATE_MASK.length)
137
+ return;
138
+ // Позволяем вводить только цифры, точки, дефис и пробелы
139
+ if (/[^\d. -]/.test(newValue)) {
140
+ return;
141
+ }
142
+ var dots = newValue.match(/\./g);
143
+ var hyphen = newValue.match(/\-/g);
144
+ // Не даем вводить больше, чем 4 точки и 1 дефис
145
+ if ((dots && dots.length > 4) || (hyphen && hyphen.length > 1)) {
146
+ return;
147
+ }
148
+ var _c = getDates(newValue), formattedValue = _c.formattedValue, dateFrom = _c.dateFrom, dateTo = _c.dateTo, dateArr = _c.dateArr;
149
+ if (!dateFrom && !dateTo) {
150
+ resetPeriod();
151
+ }
152
+ else if (selectedFrom && formattedValue.length < utils_format.DATE_FORMAT.length) {
153
+ setStart();
154
+ }
155
+ else if (selectedFrom && selectedTo) {
156
+ setEnd();
157
+ }
158
+ else if (dateFrom &&
159
+ dateFnsIsValid__default.default(dateFrom) &&
160
+ ((_a = dateArr[0]) === null || _a === void 0 ? void 0 : _a.length) === utils_format.DATE_FORMAT.length &&
161
+ dateFrom.getTime() !== selectedFrom) {
162
+ setStart(dateFrom.getTime());
163
+ }
164
+ else if (dateTo &&
165
+ dateFnsIsValid__default.default(dateTo) &&
166
+ ((_b = dateArr[1]) === null || _b === void 0 ? void 0 : _b.length) === utils_format.DATE_FORMAT.length &&
167
+ dateTo.getTime() !== selectedTo) {
168
+ setEnd(dateTo.getTime());
169
+ }
170
+ setValue(formattedValue);
171
+ onChange === null || onChange === void 0 ? void 0 : onChange({ dateFrom: dateFrom, dateTo: dateTo, value: formattedValue }, event);
172
+ if (utils_format.isCompleteDateInput(formattedValue)) {
173
+ var valid = utils_format.isValid(formattedValue, dateArr[0], dateArr[1]);
174
+ if (!valid)
175
+ return;
176
+ if (dateFrom && dateTo) {
177
+ onComplete === null || onComplete === void 0 ? void 0 : onComplete({ dateFrom: dateFrom, dateTo: dateTo, value: formattedValue }, event);
178
+ }
179
+ }
180
+ };
181
+ var handleCalendarClose = function () {
182
+ if (view === 'mobile' && onClose) {
183
+ onClose();
184
+ }
185
+ setOpen(false);
186
+ };
187
+ var handleClear = function () {
188
+ setValue('');
189
+ resetPeriod();
190
+ };
191
+ var handleCalendarChange = function (date) {
192
+ if (date) {
193
+ updatePeriod(date);
194
+ }
195
+ };
196
+ var handleCalendarWrapperMouseDown = function (event) {
197
+ // Не дает инпуту терять фокус при выборе даты
198
+ event.preventDefault();
199
+ };
200
+ var handleIconButtonClick = function () {
201
+ if (!open)
202
+ setOpen(true);
203
+ if (view === 'desktop' && inputRef.current) {
204
+ inputRef.current.focus();
205
+ }
206
+ };
207
+ var renderCalendar = function () {
208
+ var activeMonth = (selectedTo && dateFns.startOfMonth(selectedTo)) ||
209
+ (selectedFrom && dateFns.startOfMonth(selectedFrom));
210
+ return (
211
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
212
+ React__default.default.createElement("div", { onMouseDown: handleCalendarWrapperMouseDown },
213
+ React__default.default.createElement(Calendar, tslib.__assign({}, calendarProps, { responsive: calendarResponsive, open: open, onClose: handleCalendarClose, ref: calendarRef, defaultMonth: activeMonth || defaultMonth, selectedFrom: selectedFrom, selectedTo: selectedTo, onChange: handleCalendarChange, minDate: minDate, maxDate: maxDate, offDays: offDays, events: events }))));
214
+ };
215
+ return (React__default.default.createElement("div", { className: cn__default.default(styles.component, className, (_b = {},
216
+ _b[styles.block] = block,
217
+ _b)), onFocus: inputDisabled ? undefined : handleInputWrapperFocus, onBlur: handleBlur },
218
+ React__default.default.createElement(coreComponentsInput.Input, tslib.__assign({}, restProps, { block: block, ref: mergeRefs__default.default([ref, inputRef]), value: value, onChange: handleChange, disabled: disabled, readOnly: readOnly, className: inputClassName, onClear: handleClear, rightAddons: React__default.default.createElement(React__default.default.Fragment, null,
219
+ rightAddons,
220
+ picker && (React__default.default.createElement(coreComponentsIconButton.IconButton, { ref: iconRef, onClick: inputDisabled ? undefined : handleIconButtonClick, icon: CalendarMIcon.CalendarMIcon, size: 'xxs' }))) })),
221
+ picker && (React__default.default.createElement(coreComponentsPopover.Popover, { open: open, useAnchorWidth: useAnchorWidth, anchorElement: inputRef.current, popperClassName: cn__default.default(styles.calendarContainer, (_c = {},
222
+ _c[styles.calendarResponsive] = calendarResponsive,
223
+ _c)), className: popoverClassName, position: popoverPosition, offset: [0, 8], withTransition: false, preventFlip: preventFlip, zIndex: zIndexPopover }, renderCalendar()))));
224
+ });
225
+
226
+ exports.DateRangeInput = DateRangeInput;
@@ -1,4 +1,4 @@
1
- /* hash: xeu3t */
1
+ /* hash: 19sow */
2
2
  :root {
3
3
  } /* deprecated */ :root {
4
4
  } :root {
@@ -40,21 +40,21 @@
40
40
  /* marker */
41
41
  } :root {
42
42
  --calendar-popover-border-radius: var(--border-radius-m);
43
- } .date-range-input__component_1hljt {
43
+ } .date-range-input__component_1iuwu {
44
44
  display: inline-block;
45
45
  outline: none;
46
46
  position: relative;
47
- } .date-range-input__calendarContainer_1hljt {
47
+ } .date-range-input__calendarContainer_1iuwu {
48
48
  display: inline-block;
49
49
  box-sizing: border-box;
50
50
  border-radius: var(--calendar-popover-border-radius)
51
- } @media (max-width: 374px) { .date-range-input__calendarContainer_1hljt {
51
+ } @media (max-width: 374px) { .date-range-input__calendarContainer_1iuwu {
52
52
  width: 100%;
53
53
  min-width: 288px
54
54
  }
55
- } .date-range-input__calendarResponsive_1hljt {
55
+ } .date-range-input__calendarResponsive_1iuwu {
56
56
  width: var(--calendar-width);
57
57
  padding: 0 var(--gap-m);
58
- } .date-range-input__block_1hljt {
58
+ } .date-range-input__block_1iuwu {
59
59
  width: 100%;
60
60
  }
@@ -1 +1 @@
1
- export * from "../../Component-156f85af";
1
+ export * from "./Component";
@@ -1,9 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var components_dateRangeInput_Component = require('../../Component-156f85af.js');
3
+ var components_dateRangeInput_Component = require('./Component.js');
4
+ require('tslib');
4
5
  require('react');
5
6
  require('react-merge-refs');
6
7
  require('classnames');
8
+ require('date-fns');
7
9
  require('date-fns/isValid');
8
10
  require('@alfalab/core-components-calendar');
9
11
  require('@alfalab/core-components-icon-button');
@@ -1,5 +1,6 @@
1
- import { FC } from 'react';
2
- import { DateRangeInputProps } from "./Component-540e1474";
3
- type DateRangeInputDesktopProps = Omit<DateRangeInputProps, 'view'>;
4
- declare const DateRangeInputDesktop: FC<DateRangeInputDesktopProps>;
1
+ /// <reference types="react" />
2
+ import React from 'react';
3
+ import { DateRangeInputProps, ConditionalProps } from "./components/date-range-input/Component";
4
+ type DateRangeInputDesktopProps = Omit<DateRangeInputProps, 'view' | 'picker' | 'onClose'> & ConditionalProps;
5
+ declare const DateRangeInputDesktop: React.ForwardRefExoticComponent<DateRangeInputDesktopProps & React.RefAttributes<HTMLInputElement>>;
5
6
  export { DateRangeInputDesktopProps, DateRangeInputDesktop };
@@ -1,9 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var components_dateRangeInput_Component = require('./Component-540e1474.js');
3
+ var tslib = require('tslib');
4
4
  var React = require('react');
5
+ var components_dateRangeInput_Component = require('./components/date-range-input/Component.js');
5
6
  require('react-merge-refs');
6
7
  require('classnames');
8
+ require('date-fns');
7
9
  require('date-fns/isValid');
8
10
  require('@alfalab/core-components-calendar/cssm');
9
11
  require('@alfalab/core-components-icon-button/cssm');
@@ -19,6 +21,6 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
19
21
 
20
22
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
21
23
 
22
- var DateRangeInputDesktop = function (props) { return (React__default.default.createElement(components_dateRangeInput_Component.DateRangeInput, components_dateRangeInput_Component.__assign({}, props))); };
24
+ var DateRangeInputDesktop = React.forwardRef(function (props, ref) { return React__default.default.createElement(components_dateRangeInput_Component.DateRangeInput, tslib.__assign({}, props, { ref: ref })); });
23
25
 
24
26
  exports.DateRangeInputDesktop = DateRangeInputDesktop;
@@ -1,5 +1,6 @@
1
- import { FC } from 'react';
2
- import { DateRangeInputProps } from "./Component-540e1474";
3
- type DateRangeInputMobileProps = Omit<DateRangeInputProps, 'view'>;
4
- declare const DateRangeInputMobile: FC<DateRangeInputMobileProps>;
1
+ /// <reference types="react" />
2
+ import React from 'react';
3
+ import { DateRangeInputProps, ConditionalProps } from "./components/date-range-input/Component";
4
+ type DateRangeInputMobileProps = Omit<DateRangeInputProps, 'view' | 'picker' | 'onClose'> & ConditionalProps;
5
+ declare const DateRangeInputMobile: React.ForwardRefExoticComponent<DateRangeInputMobileProps & React.RefAttributes<HTMLInputElement>>;
5
6
  export { DateRangeInputMobileProps, DateRangeInputMobile };
@@ -1,10 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var components_dateRangeInput_Component = require('./Component-540e1474.js');
3
+ var tslib = require('tslib');
4
4
  var React = require('react');
5
5
  var coreComponentsCalendar = require('@alfalab/core-components-calendar/cssm');
6
+ var components_dateRangeInput_Component = require('./components/date-range-input/Component.js');
6
7
  require('react-merge-refs');
7
8
  require('classnames');
9
+ require('date-fns');
8
10
  require('date-fns/isValid');
9
11
  require('@alfalab/core-components-icon-button/cssm');
10
12
  require('@alfalab/core-components-input/cssm');
@@ -19,6 +21,6 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
19
21
 
20
22
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
21
23
 
22
- var DateRangeInputMobile = function (props) { return (React__default.default.createElement(components_dateRangeInput_Component.DateRangeInput, components_dateRangeInput_Component.__assign({ Calendar: coreComponentsCalendar.CalendarMobile, view: 'mobile' }, props))); };
24
+ var DateRangeInputMobile = React.forwardRef(function (props, ref) { return React__default.default.createElement(components_dateRangeInput_Component.DateRangeInput, tslib.__assign({ Calendar: coreComponentsCalendar.CalendarMobile, view: 'mobile' }, props, { ref: ref })); });
23
25
 
24
26
  exports.DateRangeInputMobile = DateRangeInputMobile;
@@ -1,6 +1,7 @@
1
- import { FC } from 'react';
2
- import { DateRangeInputProps } from "./Component-540e1474";
3
- type DateRangeInputResponsiveProps = Omit<DateRangeInputProps, 'view'> & {
1
+ /// <reference types="react" />
2
+ import React from 'react';
3
+ import { DateRangeInputProps, ConditionalProps } from "./components/date-range-input/Component";
4
+ type DateRangeInputResponsiveProps = Omit<DateRangeInputProps, 'view' | 'picker' | 'onClose'> & ConditionalProps & {
4
5
  /**
5
6
  * Контрольная точка, с нее начинается desktop версия
6
7
  * @default 1024
@@ -8,5 +9,5 @@ type DateRangeInputResponsiveProps = Omit<DateRangeInputProps, 'view'> & {
8
9
  breakpoint?: number;
9
10
  };
10
11
  type DateRangeInputMedia = 'desktop' | 'mobile';
11
- declare const DateRangeInputResponsive: FC<DateRangeInputResponsiveProps>;
12
+ declare const DateRangeInputResponsive: React.ForwardRefExoticComponent<DateRangeInputResponsiveProps & React.RefAttributes<HTMLInputElement>>;
12
13
  export { DateRangeInputResponsiveProps, DateRangeInputMedia, DateRangeInputResponsive };