@salutejs/plasma-new-hope 0.163.0-canary.1466.11254522155.0 → 0.163.0-canary.1475.11258202491.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. package/cjs/components/DatePicker/RangeDate/RangeDate.js +62 -11
  2. package/cjs/components/DatePicker/RangeDate/RangeDate.js.map +1 -1
  3. package/cjs/components/DatePicker/RangeDate/RangeDatePopover/RangeDatePopover.js +8 -2
  4. package/cjs/components/DatePicker/RangeDate/RangeDatePopover/RangeDatePopover.js.map +1 -1
  5. package/cjs/components/DatePicker/SingleDate/SingleDate.js +25 -7
  6. package/cjs/components/DatePicker/SingleDate/SingleDate.js.map +1 -1
  7. package/cjs/components/DatePicker/hooks/useDatePicker.js +20 -48
  8. package/cjs/components/DatePicker/hooks/useDatePicker.js.map +1 -1
  9. package/cjs/components/DatePicker/hooks/useKeyboardNavigation.js +11 -1
  10. package/cjs/components/DatePicker/hooks/useKeyboardNavigation.js.map +1 -1
  11. package/cjs/components/DatePicker/utils/dateHelper.js +31 -0
  12. package/cjs/components/DatePicker/utils/dateHelper.js.map +1 -1
  13. package/emotion/cjs/components/Badge/Badge.template-doc.mdx +1 -3
  14. package/emotion/cjs/components/DatePicker/RangeDate/RangeDate.js +62 -11
  15. package/emotion/cjs/components/DatePicker/RangeDate/RangeDatePopover/RangeDatePopover.js +8 -2
  16. package/emotion/cjs/components/DatePicker/SingleDate/SingleDate.js +25 -7
  17. package/emotion/cjs/components/DatePicker/hooks/useDatePicker.js +20 -48
  18. package/emotion/cjs/components/DatePicker/hooks/useKeyboardNavigation.js +11 -1
  19. package/emotion/cjs/components/DatePicker/utils/dateHelper.js +31 -1
  20. package/emotion/cjs/examples/plasma_b2c/components/Badge/Badge.config.js +13 -14
  21. package/emotion/cjs/examples/plasma_b2c/components/Badge/Badge.stories.tsx +1 -1
  22. package/emotion/cjs/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +2 -0
  23. package/emotion/cjs/examples/plasma_web/components/Badge/Badge.config.js +13 -14
  24. package/emotion/cjs/examples/plasma_web/components/Badge/Badge.stories.tsx +1 -1
  25. package/emotion/es/components/Badge/Badge.template-doc.mdx +1 -3
  26. package/emotion/es/components/DatePicker/RangeDate/RangeDate.js +64 -13
  27. package/emotion/es/components/DatePicker/RangeDate/RangeDatePopover/RangeDatePopover.js +8 -2
  28. package/emotion/es/components/DatePicker/SingleDate/SingleDate.js +26 -8
  29. package/emotion/es/components/DatePicker/hooks/useDatePicker.js +21 -49
  30. package/emotion/es/components/DatePicker/hooks/useKeyboardNavigation.js +11 -1
  31. package/emotion/es/components/DatePicker/utils/dateHelper.js +30 -0
  32. package/emotion/es/examples/plasma_b2c/components/Badge/Badge.config.js +13 -14
  33. package/emotion/es/examples/plasma_b2c/components/Badge/Badge.stories.tsx +1 -1
  34. package/emotion/es/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +2 -0
  35. package/emotion/es/examples/plasma_web/components/Badge/Badge.config.js +13 -14
  36. package/emotion/es/examples/plasma_web/components/Badge/Badge.stories.tsx +1 -1
  37. package/es/components/DatePicker/RangeDate/RangeDate.js +64 -13
  38. package/es/components/DatePicker/RangeDate/RangeDate.js.map +1 -1
  39. package/es/components/DatePicker/RangeDate/RangeDatePopover/RangeDatePopover.js +8 -2
  40. package/es/components/DatePicker/RangeDate/RangeDatePopover/RangeDatePopover.js.map +1 -1
  41. package/es/components/DatePicker/SingleDate/SingleDate.js +26 -8
  42. package/es/components/DatePicker/SingleDate/SingleDate.js.map +1 -1
  43. package/es/components/DatePicker/hooks/useDatePicker.js +21 -49
  44. package/es/components/DatePicker/hooks/useDatePicker.js.map +1 -1
  45. package/es/components/DatePicker/hooks/useKeyboardNavigation.js +11 -1
  46. package/es/components/DatePicker/hooks/useKeyboardNavigation.js.map +1 -1
  47. package/es/components/DatePicker/utils/dateHelper.js +31 -1
  48. package/es/components/DatePicker/utils/dateHelper.js.map +1 -1
  49. package/package.json +2 -2
  50. package/styled-components/cjs/components/Badge/Badge.template-doc.mdx +1 -3
  51. package/styled-components/cjs/components/DatePicker/RangeDate/RangeDate.js +62 -11
  52. package/styled-components/cjs/components/DatePicker/RangeDate/RangeDatePopover/RangeDatePopover.js +8 -2
  53. package/styled-components/cjs/components/DatePicker/SingleDate/SingleDate.js +25 -7
  54. package/styled-components/cjs/components/DatePicker/hooks/useDatePicker.js +20 -48
  55. package/styled-components/cjs/components/DatePicker/hooks/useKeyboardNavigation.js +11 -1
  56. package/styled-components/cjs/components/DatePicker/utils/dateHelper.js +31 -1
  57. package/styled-components/cjs/examples/plasma_b2c/components/Badge/Badge.config.js +1 -2
  58. package/styled-components/cjs/examples/plasma_b2c/components/Badge/Badge.stories.tsx +1 -1
  59. package/styled-components/cjs/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +2 -0
  60. package/styled-components/cjs/examples/plasma_web/components/Badge/Badge.config.js +1 -2
  61. package/styled-components/cjs/examples/plasma_web/components/Badge/Badge.stories.tsx +1 -1
  62. package/styled-components/es/components/Badge/Badge.template-doc.mdx +1 -3
  63. package/styled-components/es/components/DatePicker/RangeDate/RangeDate.js +64 -13
  64. package/styled-components/es/components/DatePicker/RangeDate/RangeDatePopover/RangeDatePopover.js +8 -2
  65. package/styled-components/es/components/DatePicker/SingleDate/SingleDate.js +26 -8
  66. package/styled-components/es/components/DatePicker/hooks/useDatePicker.js +21 -49
  67. package/styled-components/es/components/DatePicker/hooks/useKeyboardNavigation.js +11 -1
  68. package/styled-components/es/components/DatePicker/utils/dateHelper.js +30 -0
  69. package/styled-components/es/examples/plasma_b2c/components/Badge/Badge.config.js +1 -2
  70. package/styled-components/es/examples/plasma_b2c/components/Badge/Badge.stories.tsx +1 -1
  71. package/styled-components/es/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +2 -0
  72. package/styled-components/es/examples/plasma_web/components/Badge/Badge.config.js +1 -2
  73. package/styled-components/es/examples/plasma_web/components/Badge/Badge.stories.tsx +1 -1
  74. package/types/components/DatePicker/DatePickerBase.types.d.ts +7 -5
  75. package/types/components/DatePicker/DatePickerBase.types.d.ts.map +1 -1
  76. package/types/components/DatePicker/RangeDate/RangeDate.d.ts +8 -8
  77. package/types/components/DatePicker/RangeDate/RangeDate.d.ts.map +1 -1
  78. package/types/components/DatePicker/RangeDate/RangeDate.types.d.ts +14 -4
  79. package/types/components/DatePicker/RangeDate/RangeDate.types.d.ts.map +1 -1
  80. package/types/components/DatePicker/RangeDate/RangeDatePopover/RangeDatePopover.d.ts +1 -1
  81. package/types/components/DatePicker/RangeDate/RangeDatePopover/RangeDatePopover.d.ts.map +1 -1
  82. package/types/components/DatePicker/SingleDate/SingleDate.d.ts.map +1 -1
  83. package/types/components/DatePicker/SingleDate/SingleDate.types.d.ts +12 -2
  84. package/types/components/DatePicker/SingleDate/SingleDate.types.d.ts.map +1 -1
  85. package/types/components/DatePicker/hooks/useDatePicker.d.ts +2 -3
  86. package/types/components/DatePicker/hooks/useDatePicker.d.ts.map +1 -1
  87. package/types/components/DatePicker/hooks/useKeyboardNavigation.d.ts +3 -1
  88. package/types/components/DatePicker/hooks/useKeyboardNavigation.d.ts.map +1 -1
  89. package/types/components/DatePicker/utils/dateHelper.d.ts +10 -0
  90. package/types/components/DatePicker/utils/dateHelper.d.ts.map +1 -1
  91. package/types/components/Popover/Popover.types.d.ts +1 -1
  92. package/types/examples/plasma_b2c/components/Badge/Badge.config.d.ts +0 -1
  93. package/types/examples/plasma_b2c/components/Badge/Badge.config.d.ts.map +1 -1
  94. package/types/examples/plasma_b2c/components/Badge/Badge.d.ts +0 -1
  95. package/types/examples/plasma_b2c/components/Badge/Badge.d.ts.map +1 -1
  96. package/types/examples/plasma_b2c/components/DatePicker/DatePicker.d.ts +4 -4
  97. package/types/examples/plasma_web/components/Badge/Badge.config.d.ts +0 -1
  98. package/types/examples/plasma_web/components/Badge/Badge.config.d.ts.map +1 -1
  99. package/types/examples/plasma_web/components/Badge/Badge.d.ts +0 -1
  100. package/types/examples/plasma_web/components/Badge/Badge.d.ts.map +1 -1
  101. package/types/examples/plasma_web/components/DatePicker/DatePicker.d.ts +4 -4
@@ -26,6 +26,10 @@ var RangeDatePopover = exports.RangeDatePopover = function RangeDatePopover(_ref
26
26
  disabledQuarterList = _ref.disabledQuarterList,
27
27
  eventYearList = _ref.eventYearList,
28
28
  disabledYearList = _ref.disabledYearList,
29
+ _ref$frame = _ref.frame,
30
+ frame = _ref$frame === void 0 ? 'document' : _ref$frame,
31
+ _ref$usePortal = _ref.usePortal,
32
+ usePortal = _ref$usePortal === void 0 ? false : _ref$usePortal,
29
33
  _ref$placement = _ref.placement,
30
34
  placement = _ref$placement === void 0 ? ['top', 'bottom'] : _ref$placement,
31
35
  _ref$closeOnOverlayCl = _ref.closeOnOverlayClick,
@@ -43,7 +47,8 @@ var RangeDatePopover = exports.RangeDatePopover = function RangeDatePopover(_ref
43
47
  if (isDoubleCalendar) {
44
48
  return /*#__PURE__*/_react["default"].createElement(_RangeDate.StyledPopover, {
45
49
  opened: innerIsOpen,
46
- usePortal: false,
50
+ frame: frame,
51
+ usePortal: usePortal,
47
52
  onToggle: onToggle,
48
53
  offset: offset,
49
54
  placement: (0, _utils.getPlacements)(placement),
@@ -73,7 +78,8 @@ var RangeDatePopover = exports.RangeDatePopover = function RangeDatePopover(_ref
73
78
  }
74
79
  return /*#__PURE__*/_react["default"].createElement(_RangeDate.StyledPopover, {
75
80
  opened: innerIsOpen,
76
- usePortal: false,
81
+ frame: frame,
82
+ usePortal: usePortal,
77
83
  onToggle: onToggle,
78
84
  offset: offset,
79
85
  placement: (0, _utils.getPlacements)(placement),
@@ -17,7 +17,7 @@ var _base2 = /*#__PURE__*/require("./variations/_view/base");
17
17
  var _base3 = /*#__PURE__*/require("./variations/_disabled/base");
18
18
  var _base4 = /*#__PURE__*/require("./variations/_readonly/base");
19
19
  var _SingleDate = /*#__PURE__*/require("./SingleDate.styles");
20
- var _excluded = ["className", "opened", "label", "labelPlacement", "placeholder", "leftHelper", "contentLeft", "contentRight", "textBefore", "textAfter", "view", "size", "readOnly", "disabled", "name", "defaultDate", "valueError", "valueSuccess", "format", "lang", "maskWithFormat", "min", "max", "includeEdgeDates", "eventList", "disabledList", "eventMonthList", "disabledMonthList", "eventQuarterList", "disabledQuarterList", "eventYearList", "disabledYearList", "type", "placement", "closeOnOverlayClick", "offset", "onChangeValue", "onCommitDate", "onToggle", "onFocus", "onBlur", "onChange"];
20
+ var _excluded = ["className", "opened", "label", "labelPlacement", "placeholder", "leftHelper", "contentLeft", "contentRight", "textBefore", "textAfter", "view", "size", "readOnly", "disabled", "name", "defaultDate", "valueError", "valueSuccess", "format", "lang", "maskWithFormat", "min", "max", "includeEdgeDates", "eventList", "disabledList", "eventMonthList", "disabledMonthList", "eventQuarterList", "disabledQuarterList", "eventYearList", "disabledYearList", "type", "frame", "usePortal", "placement", "closeOnOverlayClick", "closeOnEsc", "offset", "onChangeValue", "onCommitDate", "onToggle", "onFocus", "onBlur", "onChange"];
21
21
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
22
22
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
23
23
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
@@ -73,10 +73,16 @@ var datePickerRoot = exports.datePickerRoot = function datePickerRoot(Root) {
73
73
  disabledYearList = _ref.disabledYearList,
74
74
  _ref$type = _ref.type,
75
75
  type = _ref$type === void 0 ? 'Days' : _ref$type,
76
+ _ref$frame = _ref.frame,
77
+ frame = _ref$frame === void 0 ? 'document' : _ref$frame,
78
+ _ref$usePortal = _ref.usePortal,
79
+ usePortal = _ref$usePortal === void 0 ? false : _ref$usePortal,
76
80
  _ref$placement = _ref.placement,
77
81
  placement = _ref$placement === void 0 ? ['top', 'bottom'] : _ref$placement,
78
82
  _ref$closeOnOverlayCl = _ref.closeOnOverlayClick,
79
83
  closeOnOverlayClick = _ref$closeOnOverlayCl === void 0 ? true : _ref$closeOnOverlayCl,
84
+ _ref$closeOnEsc = _ref.closeOnEsc,
85
+ closeOnEsc = _ref$closeOnEsc === void 0 ? true : _ref$closeOnEsc,
80
86
  offset = _ref.offset,
81
87
  onChangeValue = _ref.onChangeValue,
82
88
  onCommitDate = _ref.onCommitDate,
@@ -111,7 +117,6 @@ var datePickerRoot = exports.datePickerRoot = function datePickerRoot(Root) {
111
117
  currentValue: inputValue,
112
118
  setInputValue: setInputValue,
113
119
  setCalendarValue: setCalendarValue,
114
- setIsInnerOpen: setIsInnerOpen,
115
120
  dateFormatDelimiter: dateFormatDelimiter,
116
121
  format: format,
117
122
  lang: lang,
@@ -120,21 +125,33 @@ var datePickerRoot = exports.datePickerRoot = function datePickerRoot(Root) {
120
125
  maskWithFormat: maskWithFormat,
121
126
  valueError: valueError,
122
127
  valueSuccess: valueSuccess,
123
- inputRef: inputRef,
124
128
  name: name,
125
- onToggle: onToggle,
126
129
  onChangeValue: onChangeValue,
127
130
  onCommitDate: onCommitDate,
128
131
  onChange: onChange
129
132
  }),
130
133
  datePickerErrorClass = _useDatePicker.datePickerErrorClass,
131
134
  datePickerSuccessClass = _useDatePicker.datePickerSuccessClass,
132
- handleToggle = _useDatePicker.handleToggle,
133
135
  handleChangeValue = _useDatePicker.handleChangeValue,
134
136
  handleCommitDate = _useDatePicker.handleCommitDate;
137
+ var handleToggle = function handleToggle(opened, event) {
138
+ if (disabled || readOnly) {
139
+ return;
140
+ }
141
+ var isCalendarOpen = event.target === (inputRef === null || inputRef === void 0 ? void 0 : inputRef.current) && event.code !== _useKeyboardNavigation.keys.Escape ? true : opened;
142
+ if (!isCalendarOpen && inputValue) {
143
+ var _inputRef$current;
144
+ inputRef === null || inputRef === void 0 || (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.focus();
145
+ }
146
+ if (onToggle) {
147
+ return onToggle(isCalendarOpen, event);
148
+ }
149
+ setIsInnerOpen(isCalendarOpen);
150
+ };
135
151
  var _useKeyNavigation = (0, _useKeyboardNavigation.useKeyNavigation)({
136
152
  isCalendarOpen: isInnerOpen,
137
- onToggle: handleToggle
153
+ onToggle: handleToggle,
154
+ closeOnEsc: closeOnEsc
138
155
  }),
139
156
  onKeyDown = _useKeyNavigation.onKeyDown;
140
157
  var DatePickerInput = /*#__PURE__*/_react["default"].createElement(_SingleDate.StyledInput, _extends({
@@ -190,7 +207,8 @@ var datePickerRoot = exports.datePickerRoot = function datePickerRoot(Root) {
190
207
  ref: ref
191
208
  }, rest), !innerLabelPlacement && label && /*#__PURE__*/_react["default"].createElement(_SingleDate.StyledLabel, null, label), /*#__PURE__*/_react["default"].createElement(_SingleDate.StyledPopover, {
192
209
  opened: isInnerOpen,
193
- usePortal: false,
210
+ usePortal: usePortal,
211
+ frame: frame,
194
212
  onToggle: handleToggle,
195
213
  offset: offset,
196
214
  placement: (0, _utils.getPlacements)(placement),
@@ -6,12 +6,10 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.useDatePicker = void 0;
7
7
  var _DatePicker = /*#__PURE__*/require("../DatePicker.tokens");
8
8
  var _dateHelper = /*#__PURE__*/require("../utils/dateHelper");
9
- var _datejs = /*#__PURE__*/require("../../../utils/datejs");
10
9
  var useDatePicker = exports.useDatePicker = function useDatePicker(_ref) {
11
10
  var currentValue = _ref.currentValue,
12
11
  setInputValue = _ref.setInputValue,
13
12
  setCalendarValue = _ref.setCalendarValue,
14
- setIsInnerOpen = _ref.setIsInnerOpen,
15
13
  dateFormatDelimiter = _ref.dateFormatDelimiter,
16
14
  format = _ref.format,
17
15
  _ref$lang = _ref.lang,
@@ -21,24 +19,12 @@ var useDatePicker = exports.useDatePicker = function useDatePicker(_ref) {
21
19
  maskWithFormat = _ref.maskWithFormat,
22
20
  valueError = _ref.valueError,
23
21
  valueSuccess = _ref.valueSuccess,
24
- inputRef = _ref.inputRef,
25
22
  name = _ref.name,
26
- onToggle = _ref.onToggle,
27
23
  onChangeValue = _ref.onChangeValue,
28
24
  onCommitDate = _ref.onCommitDate,
29
25
  onChange = _ref.onChange;
30
26
  var datePickerErrorClass = valueError ? _DatePicker.classes.datePickerError : undefined;
31
27
  var datePickerSuccessClass = valueSuccess ? _DatePicker.classes.datePickerSuccess : undefined;
32
- var handleToggle = function handleToggle(opened, event) {
33
- if (disabled || readOnly) {
34
- return;
35
- }
36
- var isCalendarOpen = event.target === (inputRef === null || inputRef === void 0 ? void 0 : inputRef.current) ? true : opened;
37
- if (onToggle) {
38
- return onToggle(isCalendarOpen, event);
39
- }
40
- setIsInnerOpen(isCalendarOpen);
41
- };
42
28
  var handleChangeValue = function handleChangeValue(event) {
43
29
  if (disabled || readOnly) {
44
30
  return;
@@ -61,24 +47,14 @@ var useDatePicker = exports.useDatePicker = function useDatePicker(_ref) {
61
47
  });
62
48
  return;
63
49
  }
64
-
65
- /**
66
- * NOTE: если в формате даты есть месяц в полном названии или сокращенном,
67
- * нужно дополнительно проводить валидацию на полноту введенной даты.
68
- * Иначе dayjs циклически будет пытаться отформатировать некорректную дату.
69
- */
70
- var hasMonthFullName = /M{3,4}/g.test(format);
71
- var isValidMonth;
72
- var isLengthEqual;
73
- if (hasMonthFullName) {
74
- _datejs.customDayjs.locale(lang);
75
- var firstIndexOfMonth = format.indexOf('M');
76
- var lastIndexOfMonth = newValue.indexOf(dateFormatDelimiter(), firstIndexOfMonth);
77
- var fullMonthName = !lastIndexOfMonth ? newValue.slice(firstIndexOfMonth) : newValue.slice(firstIndexOfMonth, lastIndexOfMonth);
78
- var monthFormatting = format.replace(/[^M]/g, '');
79
- isValidMonth = (0, _datejs.customDayjs)("01 ".concat(fullMonthName, " 1970"), "DD ".concat(monthFormatting, " YYYY"), true).isValid();
80
- isLengthEqual = format.length - monthFormatting.length === newValue.length - fullMonthName.length;
81
- }
50
+ var _validateDateWithFull = (0, _dateHelper.validateDateWithFullMonth)({
51
+ currentValue: newValue,
52
+ format: format,
53
+ lang: lang
54
+ }),
55
+ hasMonthFullName = _validateDateWithFull.hasMonthFullName,
56
+ isValidMonth = _validateDateWithFull.isValidMonth,
57
+ isLengthEqual = _validateDateWithFull.isLengthEqual;
82
58
  if (!hasMonthFullName && (newValue === null || newValue === void 0 ? void 0 : newValue.length) === (format === null || format === void 0 ? void 0 : format.length) || isValidMonth && isLengthEqual) {
83
59
  setCalendarValue((0, _dateHelper.formatCalendarValue)(newValue, format, lang));
84
60
  }
@@ -108,20 +84,18 @@ var useDatePicker = exports.useDatePicker = function useDatePicker(_ref) {
108
84
  return onCommitDate === null || onCommitDate === void 0 ? void 0 : onCommitDate('', false, true);
109
85
  }
110
86
  if (isCalendarValue) {
111
- setCalendarValue((0, _dateHelper.formatCalendarValue)(date, format, lang));
112
- setInputValue((0, _dateHelper.formatInputValue)({
87
+ var _formattedInputValue = (0, _dateHelper.formatInputValue)({
113
88
  value: date,
114
89
  format: format,
115
90
  lang: lang
116
- }));
91
+ });
92
+ setCalendarValue((0, _dateHelper.formatCalendarValue)(date, format, lang));
93
+ setInputValue(_formattedInputValue);
117
94
  onCommitDate === null || onCommitDate === void 0 || onCommitDate(date, false, true, dateInfo);
95
+ onChangeValue === null || onChangeValue === void 0 || onChangeValue(null, _formattedInputValue);
118
96
  onChange === null || onChange === void 0 || onChange({
119
97
  target: {
120
- value: (0, _dateHelper.formatInputValue)({
121
- value: date,
122
- format: format,
123
- lang: lang
124
- }),
98
+ value: _formattedInputValue,
125
99
  name: name
126
100
  }
127
101
  });
@@ -132,19 +106,18 @@ var useDatePicker = exports.useDatePicker = function useDatePicker(_ref) {
132
106
  newDate = _getDateFromFormat.value,
133
107
  isError = _getDateFromFormat.isError,
134
108
  isSuccess = _getDateFromFormat.isSuccess;
135
- setCalendarValue((0, _dateHelper.formatCalendarValue)(newDate, format, lang));
136
- setInputValue((0, _dateHelper.formatInputValue)({
109
+ var formattedInputValue = (0, _dateHelper.formatInputValue)({
137
110
  value: newDate,
138
111
  format: format,
139
112
  lang: lang
140
- }));
113
+ });
114
+ setCalendarValue((0, _dateHelper.formatCalendarValue)(newDate, format, lang));
115
+ setInputValue(formattedInputValue);
141
116
  onCommitDate === null || onCommitDate === void 0 || onCommitDate(newDate, isError, isSuccess);
117
+ onChangeValue === null || onChangeValue === void 0 || onChangeValue(null, formattedInputValue);
142
118
  onChange === null || onChange === void 0 || onChange({
143
119
  target: {
144
- value: (0, _dateHelper.formatInputValue)({
145
- value: date,
146
- format: format
147
- }),
120
+ value: formattedInputValue,
148
121
  name: name
149
122
  }
150
123
  });
@@ -152,7 +125,6 @@ var useDatePicker = exports.useDatePicker = function useDatePicker(_ref) {
152
125
  return {
153
126
  datePickerErrorClass: datePickerErrorClass,
154
127
  datePickerSuccessClass: datePickerSuccessClass,
155
- handleToggle: handleToggle,
156
128
  handleChangeValue: handleChangeValue,
157
129
  handleCommitDate: handleCommitDate
158
130
  };
@@ -5,10 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.useKeyNavigation = exports.keys = void 0;
7
7
  var keys = exports.keys = {
8
- Space: 'Space'
8
+ Space: 'Space',
9
+ Escape: 'Escape'
9
10
  };
10
11
  var useKeyNavigation = exports.useKeyNavigation = function useKeyNavigation(_ref) {
11
12
  var isCalendarOpen = _ref.isCalendarOpen,
13
+ closeOnEsc = _ref.closeOnEsc,
12
14
  onToggle = _ref.onToggle;
13
15
  var onKeyDown = function onKeyDown(event) {
14
16
  switch (event.code) {
@@ -20,6 +22,14 @@ var useKeyNavigation = exports.useKeyNavigation = function useKeyNavigation(_ref
20
22
  }
21
23
  break;
22
24
  }
25
+ case keys.Escape:
26
+ {
27
+ if (isCalendarOpen && closeOnEsc) {
28
+ event.preventDefault();
29
+ onToggle(false, event);
30
+ }
31
+ break;
32
+ }
23
33
  default:
24
34
  {
25
35
  break;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getMaskedDateOnInput = exports.getDateFromFormat = exports.getDateFormatDelimiter = exports.formatInputValue = exports.formatCalendarValue = void 0;
6
+ exports.validateDateWithFullMonth = exports.getMaskedDateOnInput = exports.getDateFromFormat = exports.getDateFormatDelimiter = exports.formatInputValue = exports.formatCalendarValue = void 0;
7
7
  var _datejs = /*#__PURE__*/require("../../../utils/datejs");
8
8
  var formatInputValue = exports.formatInputValue = function formatInputValue(_ref) {
9
9
  var value = _ref.value,
@@ -84,4 +84,34 @@ var getMaskedDateOnInput = exports.getMaskedDateOnInput = function getMaskedDate
84
84
  return value + delimiter;
85
85
  }
86
86
  return value;
87
+ };
88
+ var validateDateWithFullMonth = exports.validateDateWithFullMonth = function validateDateWithFullMonth(_ref2) {
89
+ var currentValue = _ref2.currentValue,
90
+ format = _ref2.format,
91
+ lang = _ref2.lang;
92
+ /**
93
+ * NOTE: если в формате даты есть месяц в полном названии или сокращенном,
94
+ * нужно дополнительно проводить валидацию на полноту введенной даты.
95
+ * Иначе dayjs циклически будет пытаться отформатировать некорректную дату.
96
+ */
97
+ var hasMonthFullName = /M{3,4}/g.test(format);
98
+ if (!hasMonthFullName) {
99
+ return {
100
+ hasMonthFullName: hasMonthFullName,
101
+ isValidMonth: false,
102
+ isLengthEqual: false
103
+ };
104
+ }
105
+ _datejs.customDayjs.locale(lang);
106
+ var firstIndexOfMonth = format.indexOf('M');
107
+ var lastIndexOfMonth = currentValue.indexOf(getDateFormatDelimiter(format), firstIndexOfMonth);
108
+ var fullMonthName = !lastIndexOfMonth ? currentValue.slice(firstIndexOfMonth) : currentValue.slice(firstIndexOfMonth, lastIndexOfMonth);
109
+ var monthFormatting = format.replace(/[^M]/g, '');
110
+ var isValidMonth = (0, _datejs.customDayjs)("01 ".concat(fullMonthName, " 1970"), "DD ".concat(monthFormatting, " YYYY"), true).isValid();
111
+ var isLengthEqual = format.length - monthFormatting.length === currentValue.length - fullMonthName.length;
112
+ return {
113
+ hasMonthFullName: hasMonthFullName,
114
+ isValidMonth: isValidMonth,
115
+ isLengthEqual: isLengthEqual
116
+ };
87
117
  };
@@ -24,8 +24,7 @@ var config = exports.config = {
24
24
  size: {
25
25
  l: /*#__PURE__*/(0, _styledComponents.css)(["", ":0.5rem;", ":1.75rem;", ":0.6875rem;", ":0.6875rem;", ":var(--plasma-typo-body-s-font-family);", ":var(--plasma-typo-body-s-font-size);", ":var(--plasma-typo-body-s-font-style);", ":var(--plasma-typo-body-s-font-weight);", ":var(--plasma-typo-body-s-letter-spacing);", ":var(--plasma-typo-body-s-line-height);", ":-0.0625rem;", ":0.25rem;", ":0.25rem;", ":-0.0625rem;"], _Badge.badgeTokens.borderRadius, _Badge.badgeTokens.height, _Badge.badgeTokens.paddingRight, _Badge.badgeTokens.paddingLeft, _Badge.badgeTokens.fontFamily, _Badge.badgeTokens.fontSize, _Badge.badgeTokens.fontStyle, _Badge.badgeTokens.fontWeight, _Badge.badgeTokens.letterSpacing, _Badge.badgeTokens.lineHeight, _Badge.badgeTokens.leftContentMarginLeft, _Badge.badgeTokens.leftContentMarginRight, _Badge.badgeTokens.rightContentMarginLeft, _Badge.badgeTokens.rightContentMarginRight),
26
26
  m: /*#__PURE__*/(0, _styledComponents.css)(["", ":0.375rem;", ":1.5rem;", ":0.5625rem;", ":0.5625rem;", ":var(--plasma-typo-body-xs-font-family);", ":var(--plasma-typo-body-xs-font-size);", ":var(--plasma-typo-body-xs-font-style);", ":var(--plasma-typo-body-xs-font-weight);", ":var(--plasma-typo-body-xs-letter-spacing);", ":var(--plasma-typo-body-xs-line-height);", ":-0.0625rem;", ":0.1875rem;", ":0.1875rem;", ":-0.0625rem;"], _Badge.badgeTokens.borderRadius, _Badge.badgeTokens.height, _Badge.badgeTokens.paddingRight, _Badge.badgeTokens.paddingLeft, _Badge.badgeTokens.fontFamily, _Badge.badgeTokens.fontSize, _Badge.badgeTokens.fontStyle, _Badge.badgeTokens.fontWeight, _Badge.badgeTokens.letterSpacing, _Badge.badgeTokens.lineHeight, _Badge.badgeTokens.leftContentMarginLeft, _Badge.badgeTokens.leftContentMarginRight, _Badge.badgeTokens.rightContentMarginLeft, _Badge.badgeTokens.rightContentMarginRight),
27
- s: /*#__PURE__*/(0, _styledComponents.css)(["", ":0.375rem;", ":1.25rem;", ":0.4375rem;", ":0.4375rem;", ":var(--plasma-typo-body-xxs-font-family);", ":var(--plasma-typo-body-xxs-font-size);", ":var(--plasma-typo-body-xxs-font-style);", ":var(--plasma-typo-body-xxs-font-weight);", ":var(--plasma-typo-body-xxs-letter-spacing);", ":var(--plasma-typo-body-xxs-line-height);", ":-0.0625rem;", ":0.125rem;", ":0.125rem;", ":-0.0625rem;"], _Badge.badgeTokens.borderRadius, _Badge.badgeTokens.height, _Badge.badgeTokens.paddingRight, _Badge.badgeTokens.paddingLeft, _Badge.badgeTokens.fontFamily, _Badge.badgeTokens.fontSize, _Badge.badgeTokens.fontStyle, _Badge.badgeTokens.fontWeight, _Badge.badgeTokens.letterSpacing, _Badge.badgeTokens.lineHeight, _Badge.badgeTokens.leftContentMarginLeft, _Badge.badgeTokens.leftContentMarginRight, _Badge.badgeTokens.rightContentMarginLeft, _Badge.badgeTokens.rightContentMarginRight),
28
- xs: /*#__PURE__*/(0, _styledComponents.css)(["", ":0.25rem;", ":1rem;", ":0.25rem;", ":0.25rem;", ":var(--plasma-typo-body-xxs-font-family);", ":var(--plasma-typo-body-xxs-font-size);", ":var(--plasma-typo-body-xxs-font-style);", ":var(--plasma-typo-body-xxs-font-weight);", ":var(--plasma-typo-body-xxs-letter-spacing);", ":var(--plasma-typo-body-xxs-line-height);", ":-0.0625rem;", ":0.125rem;", ":0.125rem;", ":-0.0625rem;"], _Badge.badgeTokens.borderRadius, _Badge.badgeTokens.height, _Badge.badgeTokens.paddingRight, _Badge.badgeTokens.paddingLeft, _Badge.badgeTokens.fontFamily, _Badge.badgeTokens.fontSize, _Badge.badgeTokens.fontStyle, _Badge.badgeTokens.fontWeight, _Badge.badgeTokens.letterSpacing, _Badge.badgeTokens.lineHeight, _Badge.badgeTokens.leftContentMarginLeft, _Badge.badgeTokens.leftContentMarginRight, _Badge.badgeTokens.rightContentMarginLeft, _Badge.badgeTokens.rightContentMarginRight)
27
+ s: /*#__PURE__*/(0, _styledComponents.css)(["", ":0.375rem;", ":1.25rem;", ":0.4375rem;", ":0.4375rem;", ":var(--plasma-typo-body-xxs-font-family);", ":var(--plasma-typo-body-xxs-font-size);", ":var(--plasma-typo-body-xxs-font-style);", ":var(--plasma-typo-body-xxs-font-weight);", ":var(--plasma-typo-body-xxs-letter-spacing);", ":var(--plasma-typo-body-xxs-line-height);", ":-0.0625rem;", ":0.125rem;", ":0.125rem;", ":-0.0625rem;"], _Badge.badgeTokens.borderRadius, _Badge.badgeTokens.height, _Badge.badgeTokens.paddingRight, _Badge.badgeTokens.paddingLeft, _Badge.badgeTokens.fontFamily, _Badge.badgeTokens.fontSize, _Badge.badgeTokens.fontStyle, _Badge.badgeTokens.fontWeight, _Badge.badgeTokens.letterSpacing, _Badge.badgeTokens.lineHeight, _Badge.badgeTokens.leftContentMarginLeft, _Badge.badgeTokens.leftContentMarginRight, _Badge.badgeTokens.rightContentMarginLeft, _Badge.badgeTokens.rightContentMarginRight)
29
28
  },
30
29
  pilled: {
31
30
  "true": /*#__PURE__*/(0, _styledComponents.css)(["", ":1.25rem;"], _Badge.badgeTokens.pilledBorderRadius)
@@ -12,7 +12,7 @@ const meta: Meta<typeof Badge> = {
12
12
  decorators: [WithTheme],
13
13
  argTypes: {
14
14
  size: {
15
- options: ['l', 'm', 's', 'xs'],
15
+ options: ['s', 'm', 'l'],
16
16
  control: {
17
17
  type: 'select',
18
18
  },
@@ -139,6 +139,7 @@ export const Default: StoryObj<StoryPropsDefault> = {
139
139
  valueSuccess: false,
140
140
  lang: 'ru',
141
141
  format: 'DD.MM.YYYY',
142
+ closeOnEsc: true,
142
143
  },
143
144
  render: (args) => <StoryDefault {...args} />,
144
145
  };
@@ -269,6 +270,7 @@ export const Range: StoryObj<StoryPropsRange> = {
269
270
  size: 'l',
270
271
  view: 'default',
271
272
  isDoubleCalendar: false,
273
+ closeOnEsc: true,
272
274
  dividerVariant: 'dash',
273
275
  min: new Date(2024, 1, 1),
274
276
  max: new Date(2024, 12, 29),
@@ -24,8 +24,7 @@ var config = exports.config = {
24
24
  size: {
25
25
  l: /*#__PURE__*/(0, _styledComponents.css)(["", ":0.5rem;", ":1.75rem;", ":0.6875rem;", ":0.6875rem;", ":var(--plasma-typo-body-s-font-family);", ":var(--plasma-typo-body-s-font-size);", ":var(--plasma-typo-body-s-font-style);", ":var(--plasma-typo-body-s-font-weight);", ":var(--plasma-typo-body-s-letter-spacing);", ":var(--plasma-typo-body-s-line-height);", ":-0.0625rem;", ":0.25rem;", ":0.25rem;", ":-0.0625rem;"], _Badge.badgeTokens.borderRadius, _Badge.badgeTokens.height, _Badge.badgeTokens.paddingRight, _Badge.badgeTokens.paddingLeft, _Badge.badgeTokens.fontFamily, _Badge.badgeTokens.fontSize, _Badge.badgeTokens.fontStyle, _Badge.badgeTokens.fontWeight, _Badge.badgeTokens.letterSpacing, _Badge.badgeTokens.lineHeight, _Badge.badgeTokens.leftContentMarginLeft, _Badge.badgeTokens.leftContentMarginRight, _Badge.badgeTokens.rightContentMarginLeft, _Badge.badgeTokens.rightContentMarginRight),
26
26
  m: /*#__PURE__*/(0, _styledComponents.css)(["", ":0.375rem;", ":1.5rem;", ":0.5625rem;", ":0.5625rem;", ":var(--plasma-typo-body-xs-font-family);", ":var(--plasma-typo-body-xs-font-size);", ":var(--plasma-typo-body-xs-font-style);", ":var(--plasma-typo-body-xs-font-weight);", ":var(--plasma-typo-body-xs-letter-spacing);", ":var(--plasma-typo-body-xs-line-height);", ":-0.0625rem;", ":0.1875rem;", ":0.1875rem;", ":-0.0625rem;"], _Badge.badgeTokens.borderRadius, _Badge.badgeTokens.height, _Badge.badgeTokens.paddingRight, _Badge.badgeTokens.paddingLeft, _Badge.badgeTokens.fontFamily, _Badge.badgeTokens.fontSize, _Badge.badgeTokens.fontStyle, _Badge.badgeTokens.fontWeight, _Badge.badgeTokens.letterSpacing, _Badge.badgeTokens.lineHeight, _Badge.badgeTokens.leftContentMarginLeft, _Badge.badgeTokens.leftContentMarginRight, _Badge.badgeTokens.rightContentMarginLeft, _Badge.badgeTokens.rightContentMarginRight),
27
- s: /*#__PURE__*/(0, _styledComponents.css)(["", ":0.375rem;", ":1.25rem;", ":0.4375rem;", ":0.4375rem;", ":var(--plasma-typo-body-xxs-font-family);", ":var(--plasma-typo-body-xxs-font-size);", ":var(--plasma-typo-body-xxs-font-style);", ":var(--plasma-typo-body-xxs-font-weight);", ":var(--plasma-typo-body-xxs-letter-spacing);", ":var(--plasma-typo-body-xxs-line-height);", ":-0.0625rem;", ":0.125rem;", ":0.125rem;", ":-0.0625rem;"], _Badge.badgeTokens.borderRadius, _Badge.badgeTokens.height, _Badge.badgeTokens.paddingRight, _Badge.badgeTokens.paddingLeft, _Badge.badgeTokens.fontFamily, _Badge.badgeTokens.fontSize, _Badge.badgeTokens.fontStyle, _Badge.badgeTokens.fontWeight, _Badge.badgeTokens.letterSpacing, _Badge.badgeTokens.lineHeight, _Badge.badgeTokens.leftContentMarginLeft, _Badge.badgeTokens.leftContentMarginRight, _Badge.badgeTokens.rightContentMarginLeft, _Badge.badgeTokens.rightContentMarginRight),
28
- xs: /*#__PURE__*/(0, _styledComponents.css)(["", ":0.25rem;", ":1rem;", ":0.25rem;", ":0.25rem;", ":var(--plasma-typo-body-xxs-font-family);", ":var(--plasma-typo-body-xxs-font-size);", ":var(--plasma-typo-body-xxs-font-style);", ":var(--plasma-typo-body-xxs-font-weight);", ":var(--plasma-typo-body-xxs-letter-spacing);", ":var(--plasma-typo-body-xxs-line-height);", ":-0.0625rem;", ":0.125rem;", ":0.125rem;", ":-0.0625rem;"], _Badge.badgeTokens.borderRadius, _Badge.badgeTokens.height, _Badge.badgeTokens.paddingRight, _Badge.badgeTokens.paddingLeft, _Badge.badgeTokens.fontFamily, _Badge.badgeTokens.fontSize, _Badge.badgeTokens.fontStyle, _Badge.badgeTokens.fontWeight, _Badge.badgeTokens.letterSpacing, _Badge.badgeTokens.lineHeight, _Badge.badgeTokens.leftContentMarginLeft, _Badge.badgeTokens.leftContentMarginRight, _Badge.badgeTokens.rightContentMarginLeft, _Badge.badgeTokens.rightContentMarginRight)
27
+ s: /*#__PURE__*/(0, _styledComponents.css)(["", ":0.375rem;", ":1.25rem;", ":0.4375rem;", ":0.4375rem;", ":var(--plasma-typo-body-xxs-font-family);", ":var(--plasma-typo-body-xxs-font-size);", ":var(--plasma-typo-body-xxs-font-style);", ":var(--plasma-typo-body-xxs-font-weight);", ":var(--plasma-typo-body-xxs-letter-spacing);", ":var(--plasma-typo-body-xxs-line-height);", ":-0.0625rem;", ":0.125rem;", ":0.125rem;", ":-0.0625rem;"], _Badge.badgeTokens.borderRadius, _Badge.badgeTokens.height, _Badge.badgeTokens.paddingRight, _Badge.badgeTokens.paddingLeft, _Badge.badgeTokens.fontFamily, _Badge.badgeTokens.fontSize, _Badge.badgeTokens.fontStyle, _Badge.badgeTokens.fontWeight, _Badge.badgeTokens.letterSpacing, _Badge.badgeTokens.lineHeight, _Badge.badgeTokens.leftContentMarginLeft, _Badge.badgeTokens.leftContentMarginRight, _Badge.badgeTokens.rightContentMarginLeft, _Badge.badgeTokens.rightContentMarginRight)
29
28
  },
30
29
  pilled: {
31
30
  "true": /*#__PURE__*/(0, _styledComponents.css)(["", ":1.25rem;"], _Badge.badgeTokens.pilledBorderRadius)
@@ -12,7 +12,7 @@ const meta: Meta<typeof Badge> = {
12
12
  decorators: [WithTheme],
13
13
  argTypes: {
14
14
  size: {
15
- options: ['l', 'm', 's', 'xs'],
15
+ options: ['s', 'm', 'l'],
16
16
  control: {
17
17
  type: 'select',
18
18
  },
@@ -14,7 +14,7 @@ import { PropsTable, Description } from '@site/src/components';
14
14
  ### Размер badge
15
15
  Размер задается с помощью свойства `size`.
16
16
 
17
- Возможные значения свойства: `l`, `m`, `s`, `xs`.
17
+ Возможные значения свойства: `"l"`, `"m"`, `"s"`.
18
18
 
19
19
  ```tsx live
20
20
  import React from 'react';
@@ -26,7 +26,6 @@ export function App() {
26
26
  <Badge text="Бейдж" size="l" />
27
27
  <Badge text="Бейдж" size="m" />
28
28
  <Badge text="Бейдж" size="s" />
29
- <Badge text="Бейдж" size="xs" />
30
29
  </div>
31
30
  );
32
31
  }
@@ -45,7 +44,6 @@ export function App() {
45
44
  <Badge text="Бейдж" size="l" pilled />
46
45
  <Badge text="Бейдж" size="m" pilled />
47
46
  <Badge text="Бейдж" size="s" pilled />
48
- <Badge text="Бейдж" size="xs" pilled />
49
47
  </div>
50
48
  );
51
49
  }
@@ -1,4 +1,4 @@
1
- var _excluded = ["className", "isDoubleCalendar", "opened", "label", "leftHelper", "contentLeft", "contentRight", "view", "size", "readOnly", "disabled", "name", "dividerVariant", "dividerIcon", "defaultFirstDate", "defaultSecondDate", "firstValueError", "secondValueError", "firstValueSuccess", "secondValueSuccess", "firstPlaceholder", "secondPlaceholder", "firstTextfieldContentLeft", "firstTextfieldContentRight", "secondTextfieldContentLeft", "secondTextfieldContentRight", "firstTextfieldTextBefore", "secondTextfieldTextBefore", "firstTextfieldTextAfter", "secondTextfieldTextAfter", "format", "lang", "maskWithFormat", "min", "max", "includeEdgeDates", "eventList", "disabledList", "eventMonthList", "disabledMonthList", "eventQuarterList", "disabledQuarterList", "eventYearList", "disabledYearList", "type", "placement", "closeOnOverlayClick", "closeOnEsc", "offset", "onToggle", "onChange", "onChangeFirstValue", "onChangeSecondValue", "onCommitFirstDate", "onCommitSecondDate", "onFocusFirstTextfield", "onFocusSecondTextfield", "onBlurFirstTextfield", "onBlurSecondTextfield"];
1
+ var _excluded = ["className", "isDoubleCalendar", "opened", "label", "leftHelper", "contentLeft", "contentRight", "view", "size", "readOnly", "disabled", "name", "dividerVariant", "dividerIcon", "defaultFirstDate", "defaultSecondDate", "firstValueError", "secondValueError", "firstValueSuccess", "secondValueSuccess", "firstPlaceholder", "secondPlaceholder", "firstTextfieldContentLeft", "firstTextfieldContentRight", "secondTextfieldContentLeft", "secondTextfieldContentRight", "firstTextfieldTextBefore", "secondTextfieldTextBefore", "firstTextfieldTextAfter", "secondTextfieldTextAfter", "format", "lang", "maskWithFormat", "min", "max", "includeEdgeDates", "eventList", "disabledList", "eventMonthList", "disabledMonthList", "eventQuarterList", "disabledQuarterList", "eventYearList", "disabledYearList", "type", "frame", "usePortal", "placement", "closeOnOverlayClick", "closeOnEsc", "offset", "onToggle", "onChange", "onChangeFirstValue", "onChangeSecondValue", "onCommitFirstDate", "onCommitSecondDate", "onFocusFirstTextfield", "onFocusSecondTextfield", "onBlurFirstTextfield", "onBlurSecondTextfield"];
2
2
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3
3
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4
4
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -10,11 +10,12 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
10
10
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
11
11
  import React, { createRef, forwardRef, useCallback, useEffect, useRef, useState } from 'react';
12
12
  import { cx, noop } from '../../../utils';
13
- import { formatCalendarValue, formatInputValue, getDateFormatDelimiter } from '../utils/dateHelper';
13
+ import { formatCalendarValue, formatInputValue, getDateFormatDelimiter, getDateFromFormat } from '../utils/dateHelper';
14
14
  import { useDatePicker } from '../hooks/useDatePicker';
15
15
  import { classes } from '../DatePicker.tokens';
16
- import { useKeyNavigation } from '../hooks/useKeyboardNavigation';
16
+ import { keys, useKeyNavigation } from '../hooks/useKeyboardNavigation';
17
17
  import { InputHidden } from '../DatePickerBase.styles';
18
+ import { getSortedValues } from '../../Calendar/utils';
18
19
  import { base as sizeCSS } from './variations/_size/base';
19
20
  import { base as viewCSS } from './variations/_view/base';
20
21
  import { base as disabledCSS } from './variations/_disabled/base';
@@ -80,6 +81,10 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
80
81
  disabledYearList = _ref.disabledYearList,
81
82
  _ref$type = _ref.type,
82
83
  type = _ref$type === void 0 ? 'Days' : _ref$type,
84
+ _ref$frame = _ref.frame,
85
+ frame = _ref$frame === void 0 ? 'document' : _ref$frame,
86
+ _ref$usePortal = _ref.usePortal,
87
+ usePortal = _ref$usePortal === void 0 ? false : _ref$usePortal,
83
88
  _ref$placement = _ref.placement,
84
89
  placement = _ref$placement === void 0 ? ['top', 'bottom'] : _ref$placement,
85
90
  _ref$closeOnOverlayCl = _ref.closeOnOverlayClick,
@@ -95,8 +100,8 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
95
100
  onCommitSecondDate = _ref.onCommitSecondDate,
96
101
  onFocusFirstTextfield = _ref.onFocusFirstTextfield,
97
102
  onFocusSecondTextfield = _ref.onFocusSecondTextfield,
98
- onBlurFirstTextfield = _ref.onBlurFirstTextfield,
99
- onBlurSecondTextfield = _ref.onBlurSecondTextfield,
103
+ _onBlurFirstTextfield = _ref.onBlurFirstTextfield,
104
+ _onBlurSecondTextfield = _ref.onBlurSecondTextfield,
100
105
  rest = _objectWithoutProperties(_ref, _excluded);
101
106
  var rangeRef = ref && 'current' in ref ? ref : /*#__PURE__*/createRef();
102
107
  var rootRef = useRef(null);
@@ -167,7 +172,6 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
167
172
  currentValue: inputFirstValue,
168
173
  setInputValue: setFirstInputValue,
169
174
  setCalendarValue: setCalendarFirstValue,
170
- setIsInnerOpen: setIsInnerOpen,
171
175
  dateFormatDelimiter: dateFormatDelimiter,
172
176
  format: format,
173
177
  lang: lang,
@@ -176,7 +180,6 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
176
180
  maskWithFormat: maskWithFormat,
177
181
  valueError: firstValueError,
178
182
  valueSuccess: firstValueSuccess,
179
- inputRef: firstInputRef,
180
183
  name: name,
181
184
  onChangeValue: onChangeFirstValue,
182
185
  onCommitDate: onCommitFirstDate
@@ -187,7 +190,6 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
187
190
  currentValue: inputSecondValue,
188
191
  setInputValue: setSecondInputValue,
189
192
  setCalendarValue: setCalendarSecondValue,
190
- setIsInnerOpen: setIsInnerOpen,
191
193
  dateFormatDelimiter: dateFormatDelimiter,
192
194
  format: format,
193
195
  lang: lang,
@@ -196,7 +198,6 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
196
198
  maskWithFormat: maskWithFormat,
197
199
  valueError: secondValueError,
198
200
  valueSuccess: secondValueSuccess,
199
- inputRef: secondInputRef,
200
201
  onChangeValue: onChangeSecondValue,
201
202
  onCommitDate: onCommitSecondDate
202
203
  }),
@@ -207,15 +208,59 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
207
208
  if (disabled || readOnly) {
208
209
  return;
209
210
  }
210
- var isCalendarOpen = firstInputRef !== null && firstInputRef !== void 0 && (_firstInputRef$curren = firstInputRef.current) !== null && _firstInputRef$curren !== void 0 && _firstInputRef$curren.contains(event.target || null) || secondInputRef !== null && secondInputRef !== void 0 && (_secondInputRef$curre = secondInputRef.current) !== null && _secondInputRef$curre !== void 0 && _secondInputRef$curre.contains(event.target || null) ? true : opened;
211
+ var isCalendarOpen = (firstInputRef !== null && firstInputRef !== void 0 && (_firstInputRef$curren = firstInputRef.current) !== null && _firstInputRef$curren !== void 0 && _firstInputRef$curren.contains(event.target || null) || secondInputRef !== null && secondInputRef !== void 0 && (_secondInputRef$curre = secondInputRef.current) !== null && _secondInputRef$curre !== void 0 && _secondInputRef$curre.contains(event.target || null)) && event.code !== keys.Escape ? true : opened;
212
+ if (!isCalendarOpen) {
213
+ if (calendarFirstValue && !calendarSecondValue) {
214
+ var _secondInputRef$curre2;
215
+ secondInputRef === null || secondInputRef === void 0 || (_secondInputRef$curre2 = secondInputRef.current) === null || _secondInputRef$curre2 === void 0 || _secondInputRef$curre2.focus();
216
+ }
217
+ if (calendarSecondValue || !calendarFirstValue) {
218
+ var _firstInputRef$curren2;
219
+ firstInputRef === null || firstInputRef === void 0 || (_firstInputRef$curren2 = firstInputRef.current) === null || _firstInputRef$curren2 === void 0 || _firstInputRef$curren2.focus();
220
+ }
221
+ }
211
222
  if (onToggle) {
212
223
  return onToggle(isCalendarOpen, event);
213
224
  }
214
225
  setIsInnerOpen(isCalendarOpen);
215
226
  };
227
+ var handleBlur = function handleBlur(event, outerHandler) {
228
+ if (!inputFirstValue || !inputSecondValue) {
229
+ outerHandler === null || outerHandler === void 0 || outerHandler(event);
230
+ return;
231
+ }
232
+ var _getDateFromFormat = getDateFromFormat(inputFirstValue, format, lang),
233
+ firstDate = _getDateFromFormat.value,
234
+ firstIsSuccess = _getDateFromFormat.isSuccess;
235
+ var _getDateFromFormat2 = getDateFromFormat(inputSecondValue, format, lang),
236
+ secondDate = _getDateFromFormat2.value,
237
+ secondIsSuccess = _getDateFromFormat2.isSuccess;
238
+ if (!firstIsSuccess || !secondIsSuccess) {
239
+ outerHandler === null || outerHandler === void 0 || outerHandler(event);
240
+ return;
241
+ }
242
+ var _getSortedValues = getSortedValues([new Date(firstDate), new Date(secondDate)]),
243
+ _getSortedValues2 = _slicedToArray(_getSortedValues, 2),
244
+ startValue = _getSortedValues2[0],
245
+ endValue = _getSortedValues2[1];
246
+ setFirstInputValue(formatInputValue({
247
+ value: startValue,
248
+ format: format,
249
+ lang: lang
250
+ }));
251
+ setSecondInputValue(formatInputValue({
252
+ value: endValue,
253
+ format: format,
254
+ lang: lang
255
+ }));
256
+ setCalendarFirstValue(formatCalendarValue(startValue, format, lang));
257
+ setCalendarSecondValue(formatCalendarValue(endValue, format, lang));
258
+ outerHandler === null || outerHandler === void 0 || outerHandler(event);
259
+ };
216
260
  var _useKeyNavigation = useKeyNavigation({
217
261
  isCalendarOpen: isInnerOpen,
218
- onToggle: handleToggle
262
+ onToggle: handleToggle,
263
+ closeOnEsc: closeOnEsc
219
264
  }),
220
265
  onKeyDown = _useKeyNavigation.onKeyDown;
221
266
  var RangeComponent = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StyledRange, {
@@ -261,8 +306,12 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
261
306
  },
262
307
  onFocusFirstTextfield: onFocusFirstTextfield,
263
308
  onFocusSecondTextfield: onFocusSecondTextfield,
264
- onBlurFirstTextfield: onBlurFirstTextfield,
265
- onBlurSecondTextfield: onBlurSecondTextfield,
309
+ onBlurFirstTextfield: function onBlurFirstTextfield(event) {
310
+ return handleBlur(event, _onBlurFirstTextfield);
311
+ },
312
+ onBlurSecondTextfield: function onBlurSecondTextfield(event) {
313
+ return handleBlur(event, _onBlurSecondTextfield);
314
+ },
266
315
  onKeyDown: onKeyDown
267
316
  }));
268
317
  useEffect(function () {
@@ -327,6 +376,8 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
327
376
  disabledYearList: disabledYearList,
328
377
  min: min,
329
378
  max: max,
379
+ frame: frame,
380
+ usePortal: usePortal,
330
381
  placement: placement,
331
382
  closeOnOverlayClick: closeOnOverlayClick,
332
383
  closeOnEsc: closeOnEsc,
@@ -19,6 +19,10 @@ export var RangeDatePopover = function RangeDatePopover(_ref) {
19
19
  disabledQuarterList = _ref.disabledQuarterList,
20
20
  eventYearList = _ref.eventYearList,
21
21
  disabledYearList = _ref.disabledYearList,
22
+ _ref$frame = _ref.frame,
23
+ frame = _ref$frame === void 0 ? 'document' : _ref$frame,
24
+ _ref$usePortal = _ref.usePortal,
25
+ usePortal = _ref$usePortal === void 0 ? false : _ref$usePortal,
22
26
  _ref$placement = _ref.placement,
23
27
  placement = _ref$placement === void 0 ? ['top', 'bottom'] : _ref$placement,
24
28
  _ref$closeOnOverlayCl = _ref.closeOnOverlayClick,
@@ -36,7 +40,8 @@ export var RangeDatePopover = function RangeDatePopover(_ref) {
36
40
  if (isDoubleCalendar) {
37
41
  return /*#__PURE__*/React.createElement(StyledPopover, {
38
42
  opened: innerIsOpen,
39
- usePortal: false,
43
+ frame: frame,
44
+ usePortal: usePortal,
40
45
  onToggle: onToggle,
41
46
  offset: offset,
42
47
  placement: getPlacements(placement),
@@ -66,7 +71,8 @@ export var RangeDatePopover = function RangeDatePopover(_ref) {
66
71
  }
67
72
  return /*#__PURE__*/React.createElement(StyledPopover, {
68
73
  opened: innerIsOpen,
69
- usePortal: false,
74
+ frame: frame,
75
+ usePortal: usePortal,
70
76
  onToggle: onToggle,
71
77
  offset: offset,
72
78
  placement: getPlacements(placement),