@salutejs/plasma-new-hope 0.239.0-canary.1702.12763507639.0 → 0.239.0-dev.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 (77) hide show
  1. package/cjs/components/DatePicker/RangeDate/RangeDate.js +21 -66
  2. package/cjs/components/DatePicker/RangeDate/RangeDate.js.map +1 -1
  3. package/cjs/components/NumberInput/NumberInput.js +10 -3
  4. package/cjs/components/NumberInput/NumberInput.js.map +1 -1
  5. package/cjs/components/NumberInput/ui/Input/Input.js +16 -7
  6. package/cjs/components/NumberInput/ui/Input/Input.js.map +1 -1
  7. package/cjs/components/NumberInput/utils/index.js +10 -0
  8. package/cjs/components/NumberInput/utils/index.js.map +1 -1
  9. package/emotion/cjs/components/DatePicker/RangeDate/RangeDate.js +21 -66
  10. package/emotion/cjs/components/NumberInput/NumberInput.js +10 -3
  11. package/emotion/cjs/components/NumberInput/ui/Input/Input.js +16 -7
  12. package/emotion/cjs/components/NumberInput/utils/index.js +11 -2
  13. package/emotion/cjs/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +7 -1
  14. package/emotion/cjs/examples/plasma_b2c/components/NumberInput/NumberInput.stories.tsx +1 -0
  15. package/emotion/cjs/examples/plasma_web/components/DatePicker/DatePicker.stories.tsx +7 -3
  16. package/emotion/cjs/examples/plasma_web/components/NumberInput/NumberInput.stories.tsx +1 -0
  17. package/emotion/es/components/DatePicker/RangeDate/RangeDate.js +21 -66
  18. package/emotion/es/components/NumberInput/NumberInput.js +10 -3
  19. package/emotion/es/components/NumberInput/ui/Input/Input.js +17 -8
  20. package/emotion/es/components/NumberInput/utils/index.js +10 -1
  21. package/emotion/es/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +7 -1
  22. package/emotion/es/examples/plasma_b2c/components/NumberInput/NumberInput.stories.tsx +1 -0
  23. package/emotion/es/examples/plasma_web/components/DatePicker/DatePicker.stories.tsx +7 -3
  24. package/emotion/es/examples/plasma_web/components/NumberInput/NumberInput.stories.tsx +1 -0
  25. package/es/components/DatePicker/RangeDate/RangeDate.js +21 -66
  26. package/es/components/DatePicker/RangeDate/RangeDate.js.map +1 -1
  27. package/es/components/NumberInput/NumberInput.js +10 -3
  28. package/es/components/NumberInput/NumberInput.js.map +1 -1
  29. package/es/components/NumberInput/ui/Input/Input.js +17 -8
  30. package/es/components/NumberInput/ui/Input/Input.js.map +1 -1
  31. package/es/components/NumberInput/utils/index.js +10 -1
  32. package/es/components/NumberInput/utils/index.js.map +1 -1
  33. package/package.json +2 -2
  34. package/styled-components/cjs/components/DatePicker/RangeDate/RangeDate.js +21 -66
  35. package/styled-components/cjs/components/NumberInput/NumberInput.js +10 -3
  36. package/styled-components/cjs/components/NumberInput/ui/Input/Input.js +16 -7
  37. package/styled-components/cjs/components/NumberInput/utils/index.js +11 -2
  38. package/styled-components/cjs/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +7 -1
  39. package/styled-components/cjs/examples/plasma_b2c/components/NumberInput/NumberInput.stories.tsx +1 -0
  40. package/styled-components/cjs/examples/plasma_web/components/DatePicker/DatePicker.stories.tsx +7 -3
  41. package/styled-components/cjs/examples/plasma_web/components/NumberInput/NumberInput.stories.tsx +1 -0
  42. package/styled-components/es/components/DatePicker/RangeDate/RangeDate.js +21 -66
  43. package/styled-components/es/components/NumberInput/NumberInput.js +10 -3
  44. package/styled-components/es/components/NumberInput/ui/Input/Input.js +17 -8
  45. package/styled-components/es/components/NumberInput/utils/index.js +10 -1
  46. package/styled-components/es/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +7 -1
  47. package/styled-components/es/examples/plasma_b2c/components/NumberInput/NumberInput.stories.tsx +1 -0
  48. package/styled-components/es/examples/plasma_web/components/DatePicker/DatePicker.stories.tsx +7 -3
  49. package/styled-components/es/examples/plasma_web/components/NumberInput/NumberInput.stories.tsx +1 -0
  50. package/types/components/DatePicker/RangeDate/RangeDate.d.ts +8 -10
  51. package/types/components/DatePicker/RangeDate/RangeDate.d.ts.map +1 -1
  52. package/types/components/DatePicker/RangeDate/RangeDate.styles.d.ts +12 -12
  53. package/types/components/DatePicker/RangeDate/RangeDate.types.d.ts +0 -4
  54. package/types/components/DatePicker/RangeDate/RangeDate.types.d.ts.map +1 -1
  55. package/types/components/DatePicker/SingleDate/SingleDate.types.d.ts +1 -1
  56. package/types/components/DatePicker/SingleDate/SingleDate.types.d.ts.map +1 -1
  57. package/types/components/NumberInput/NumberInput.d.ts.map +1 -1
  58. package/types/components/NumberInput/NumberInput.types.d.ts +5 -0
  59. package/types/components/NumberInput/NumberInput.types.d.ts.map +1 -1
  60. package/types/components/NumberInput/ui/Input/Input.d.ts +1 -0
  61. package/types/components/NumberInput/ui/Input/Input.d.ts.map +1 -1
  62. package/types/components/NumberInput/ui/Input/Input.types.d.ts +1 -0
  63. package/types/components/NumberInput/ui/Input/Input.types.d.ts.map +1 -1
  64. package/types/components/NumberInput/utils/index.d.ts +1 -0
  65. package/types/components/NumberInput/utils/index.d.ts.map +1 -1
  66. package/types/components/Range/Range.types.d.ts +5 -5
  67. package/types/components/Range/Range.types.d.ts.map +1 -1
  68. package/types/examples/plasma_b2c/components/DatePicker/DatePicker.d.ts +4 -5
  69. package/types/examples/plasma_b2c/components/DatePicker/DatePicker.d.ts.map +1 -1
  70. package/types/examples/plasma_b2c/components/NumberInput/NumberInput.d.ts +2 -0
  71. package/types/examples/plasma_b2c/components/NumberInput/NumberInput.d.ts.map +1 -1
  72. package/types/examples/plasma_b2c/components/Range/Range.d.ts +12 -12
  73. package/types/examples/plasma_web/components/DatePicker/DatePicker.d.ts +4 -5
  74. package/types/examples/plasma_web/components/DatePicker/DatePicker.d.ts.map +1 -1
  75. package/types/examples/plasma_web/components/NumberInput/NumberInput.d.ts +2 -0
  76. package/types/examples/plasma_web/components/NumberInput/NumberInput.d.ts.map +1 -1
  77. package/types/examples/plasma_web/components/Range/Range.d.ts +12 -12
@@ -1,4 +1,4 @@
1
- var _excluded = ["className", "autoComplete", "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", "required", "requiredPlacement", "format", "lang", "maskWithFormat", "min", "max", "includeEdgeDates", "eventList", "disabledList", "eventMonthList", "disabledMonthList", "eventQuarterList", "disabledQuarterList", "eventYearList", "disabledYearList", "type", "frame", "usePortal", "placement", "closeOnOverlayClick", "closeOnEsc", "closeAfterDateSelect", "offset", "onToggle", "onChange", "onChangeFirstValue", "onChangeSecondValue", "onCommitFirstDate", "onCommitSecondDate", "onFocusFirstTextfield", "onFocusSecondTextfield", "onBlurFirstTextfield", "onBlurSecondTextfield"];
1
+ var _excluded = ["className", "autoComplete", "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", "required", "requiredPlacement", "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."); }
@@ -95,8 +95,6 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
95
95
  closeOnOverlayClick = _ref$closeOnOverlayCl === void 0 ? true : _ref$closeOnOverlayCl,
96
96
  _ref$closeOnEsc = _ref.closeOnEsc,
97
97
  closeOnEsc = _ref$closeOnEsc === void 0 ? true : _ref$closeOnEsc,
98
- _ref$closeAfterDateSe = _ref.closeAfterDateSelect,
99
- closeAfterDateSelect = _ref$closeAfterDateSe === void 0 ? true : _ref$closeAfterDateSe,
100
98
  offset = _ref.offset,
101
99
  onToggle = _ref.onToggle,
102
100
  onChange = _ref.onChange,
@@ -149,14 +147,6 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
149
147
  _useState14 = _slicedToArray(_useState13, 2),
150
148
  inputSecondValue = _useState14[0],
151
149
  setInputSecondValue = _useState14[1];
152
- var _useState15 = useState(Boolean(calendarFirstValue && calendarSecondValue)),
153
- _useState16 = _slicedToArray(_useState15, 2),
154
- fullDateEntered = _useState16[0],
155
- setFullDateEntered = _useState16[1];
156
- var _useState17 = useState(false),
157
- _useState18 = _slicedToArray(_useState17, 2),
158
- secondTextFieldClicked = _useState18[0],
159
- setSecondTextFieldClicked = _useState18[1];
160
150
  var setFirstInputValue = function setFirstInputValue(value) {
161
151
  setInputFirstValue(value);
162
152
  if (onChange) {
@@ -217,12 +207,12 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
217
207
  }),
218
208
  handleChangeSecondValue = _useDatePicker2.handleChangeValue,
219
209
  handleCommitSecondDate = _useDatePicker2.handleCommitDate;
220
- var handleToggle = function handleToggle(currentOpened, event) {
210
+ var handleToggle = function handleToggle(opened, event) {
221
211
  var _firstInputRef$curren, _secondInputRef$curre;
222
212
  if (disabled || readOnly) {
223
213
  return;
224
214
  }
225
- var isCalendarOpen = (firstInputRef !== null && firstInputRef !== void 0 && (_firstInputRef$curren = firstInputRef.current) !== null && _firstInputRef$curren !== void 0 && _firstInputRef$curren.contains((event === null || event === void 0 ? void 0 : event.target) || null) || secondInputRef !== null && secondInputRef !== void 0 && (_secondInputRef$curre = secondInputRef.current) !== null && _secondInputRef$curre !== void 0 && _secondInputRef$curre.contains((event === null || event === void 0 ? void 0 : event.target) || null)) && (event === null || event === void 0 ? void 0 : event.code) !== keys.Escape ? true : currentOpened;
215
+ 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;
226
216
  if (!isCalendarOpen) {
227
217
  if (calendarFirstValue && !calendarSecondValue) {
228
218
  var _secondInputRef$curre2;
@@ -233,22 +223,11 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
233
223
  firstInputRef === null || firstInputRef === void 0 || (_firstInputRef$curren2 = firstInputRef.current) === null || _firstInputRef$curren2 === void 0 || _firstInputRef$curren2.focus();
234
224
  }
235
225
  }
236
- if (!isCalendarOpen) {
237
- setSecondTextFieldClicked(false);
238
- }
239
226
  if (onToggle) {
240
227
  return onToggle(isCalendarOpen, event);
241
228
  }
242
229
  setIsInnerOpen(isCalendarOpen);
243
230
  };
244
- var handleFocusFirstTextField = function handleFocusFirstTextField(event) {
245
- onFocusFirstTextfield === null || onFocusFirstTextfield === void 0 || onFocusFirstTextfield(event);
246
- setSecondTextFieldClicked(false);
247
- };
248
- var handleFocusSecondTextField = function handleFocusSecondTextField(event) {
249
- onFocusSecondTextfield === null || onFocusSecondTextfield === void 0 || onFocusSecondTextfield(event);
250
- setSecondTextFieldClicked(true);
251
- };
252
231
  var handleBlur = function handleBlur(event, outerHandler) {
253
232
  if (!inputFirstValue || !inputSecondValue) {
254
233
  outerHandler === null || outerHandler === void 0 || outerHandler(event);
@@ -288,37 +267,6 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
288
267
  closeOnEsc: closeOnEsc
289
268
  }),
290
269
  onKeyDown = _useKeyNavigation.onKeyDown;
291
- var handleChangeStartOfRange = function handleChangeStartOfRange(chosenDate, dateInfo) {
292
- if (!fullDateEntered) {
293
- handleCommitFirstDate(chosenDate, false, true, dateInfo);
294
- handleCommitSecondDate('');
295
- return;
296
- }
297
- var prevValue = secondTextFieldClicked ? calendarFirstValue : calendarSecondValue;
298
- var _getSortedValues3 = getSortedValues([prevValue, chosenDate]),
299
- _getSortedValues4 = _slicedToArray(_getSortedValues3, 2),
300
- first = _getSortedValues4[0],
301
- second = _getSortedValues4[1];
302
- handleCommitFirstDate(first, false, true, dateInfo);
303
- handleCommitSecondDate(second, false, true, dateInfo);
304
- if (!firstValueError && !secondValueError && closeAfterDateSelect) {
305
- handleToggle(false);
306
- }
307
- };
308
- var handleChangeCalendarValue = function handleChangeCalendarValue(_ref2, dateInfo) {
309
- var _ref3 = _slicedToArray(_ref2, 2),
310
- firstDate = _ref3[0],
311
- secondDate = _ref3[1];
312
- if (firstDate) {
313
- handleCommitFirstDate(firstDate, false, true, dateInfo);
314
- }
315
- if (secondDate) {
316
- handleCommitSecondDate(secondDate, false, true, dateInfo);
317
- }
318
- if (firstDate && secondDate && !firstValueError && !secondValueError && closeAfterDateSelect) {
319
- handleToggle(false);
320
- }
321
- };
322
270
  var RangeComponent = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StyledRange, {
323
271
  ref: rangeRef,
324
272
  autoComplete: autoComplete,
@@ -364,8 +312,8 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
364
312
  rangeRef === null || rangeRef === void 0 || (_rangeRef$current4 = rangeRef.current) === null || _rangeRef$current4 === void 0 || (_rangeRef$current4 = _rangeRef$current4.firstTextField()) === null || _rangeRef$current4 === void 0 || (_rangeRef$current4 = _rangeRef$current4.current) === null || _rangeRef$current4 === void 0 || _rangeRef$current4.focus();
365
313
  }
366
314
  },
367
- onFocusFirstTextfield: handleFocusFirstTextField,
368
- onFocusSecondTextfield: handleFocusSecondTextField,
315
+ onFocusFirstTextfield: onFocusFirstTextfield,
316
+ onFocusSecondTextfield: onFocusSecondTextfield,
369
317
  onBlurFirstTextfield: function onBlurFirstTextfield(event) {
370
318
  return handleBlur(event, _onBlurFirstTextfield);
371
319
  },
@@ -414,13 +362,8 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
414
362
  lang: lang
415
363
  }));
416
364
  }, [format, lang]);
417
- useEffect(function () {
418
- if (calendarFirstValue && calendarSecondValue) {
419
- setFullDateEntered(true);
420
- }
421
- }, [calendarFirstValue, calendarSecondValue]);
422
- var RootWrapper = useCallback(function (_ref4) {
423
- var children = _ref4.children;
365
+ var RootWrapper = useCallback(function (_ref2) {
366
+ var children = _ref2.children;
424
367
  return /*#__PURE__*/React.createElement(Root, {
425
368
  view: view,
426
369
  size: size,
@@ -462,8 +405,20 @@ export var datePickerRangeRoot = function datePickerRangeRoot(Root) {
462
405
  lang: lang,
463
406
  isDoubleCalendar: isDoubleCalendar,
464
407
  rootWrapper: RootWrapper,
465
- onChangeStartOfRange: handleChangeStartOfRange,
466
- onChangeValue: handleChangeCalendarValue
408
+ onChangeStartOfRange: function onChangeStartOfRange(firstDate, dateInfo) {
409
+ handleCommitFirstDate(firstDate, false, true, dateInfo);
410
+ handleCommitSecondDate('');
411
+ },
412
+ onChangeValue: function onChangeValue(_ref3, dateInfo) {
413
+ var _ref4 = _slicedToArray(_ref3, 2),
414
+ firstDate = _ref4[0],
415
+ secondDate = _ref4[1];
416
+ firstDate && handleCommitFirstDate(firstDate, false, true, dateInfo);
417
+ secondDate && handleCommitSecondDate(secondDate, false, true, dateInfo);
418
+ if (firstDate && secondDate && !firstValueError && !secondValueError) {
419
+ setIsInnerOpen(false);
420
+ }
421
+ }
467
422
  }), leftHelper && /*#__PURE__*/React.createElement(LeftHelper, null, leftHelper), /*#__PURE__*/React.createElement(InputHidden, _extends({
468
423
  name: name,
469
424
  type: "hidden",
@@ -1,5 +1,5 @@
1
1
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
- var _excluded = ["className", "style", "width", "value", "min", "max", "step", "isLoading", "loader", "size", "view", "clear", "shape", "segmentation", "inputBackgroundType", "disabled", "textBefore", "textAfter", "customIncrementButton", "incrementIcon", "customDecrementButton", "decrementIcon", "isManualInput", "onChange", "onIncrement", "onDecrement"];
2
+ var _excluded = ["className", "style", "width", "value", "min", "max", "step", "precision", "isLoading", "loader", "size", "view", "clear", "shape", "segmentation", "inputBackgroundType", "disabled", "textBefore", "textAfter", "customIncrementButton", "incrementIcon", "customDecrementButton", "decrementIcon", "isManualInput", "onChange", "onIncrement", "onDecrement"];
3
3
  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); }
4
4
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5
5
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -26,6 +26,7 @@ import { base as shapeCSS } from './variations/_shape/base';
26
26
  import { base as inputBackgroundTypeCSS } from './variations/_background-type/base';
27
27
  import { base as segmentationCSS } from './variations/_segmentation/base';
28
28
  import { base as disabledCSS } from './variations/_disabled/base';
29
+ import { getPreciseValue } from './utils';
29
30
  export var numberInputRoot = function numberInputRoot(Root) {
30
31
  return /*#__PURE__*/forwardRef(function (_ref, ref) {
31
32
  var _ref2;
@@ -37,6 +38,8 @@ export var numberInputRoot = function numberInputRoot(Root) {
37
38
  max = _ref.max,
38
39
  _ref$step = _ref.step,
39
40
  step = _ref$step === void 0 ? 1 : _ref$step,
41
+ _ref$precision = _ref.precision,
42
+ precision = _ref$precision === void 0 ? 2 : _ref$precision,
40
43
  isLoading = _ref.isLoading,
41
44
  loader = _ref.loader,
42
45
  size = _ref.size,
@@ -70,6 +73,7 @@ export var numberInputRoot = function numberInputRoot(Root) {
70
73
  _useState6 = _slicedToArray(_useState5, 2),
71
74
  isAnimationRun = _useState6[0],
72
75
  setIsAnimationRun = _useState6[1];
76
+ console.log('innerValue', innerValue);
73
77
  var innerWidth = width ? getSizeValueFromProp(width) : '100%';
74
78
  var actionIconSize = size === 'xs' ? 'xs' : 's';
75
79
  var solidViewClass = segmentation === 'solid' ? classes.solidView : undefined;
@@ -90,7 +94,8 @@ export var numberInputRoot = function numberInputRoot(Root) {
90
94
  if (isLoading || disabled || isAnimationRun) {
91
95
  return;
92
96
  }
93
- var diffValue = Number(innerValue) - step;
97
+ var preciseDiff = getPreciseValue(Number(innerValue) - step, precision);
98
+ var diffValue = Number(preciseDiff);
94
99
  var resValue = min !== undefined && diffValue <= min ? min : diffValue;
95
100
  setInnerValue(resValue);
96
101
  if (onDecrement) {
@@ -104,7 +109,8 @@ export var numberInputRoot = function numberInputRoot(Root) {
104
109
  if (isLoading || disabled || isAnimationRun) {
105
110
  return;
106
111
  }
107
- var diffValue = Number(innerValue) + step;
112
+ var preciseDiff = getPreciseValue(Number(innerValue) + step, precision);
113
+ var diffValue = Number(preciseDiff);
108
114
  var resValue = max !== undefined && diffValue >= max ? max : diffValue;
109
115
  setInnerValue(resValue);
110
116
  if (onIncrement) {
@@ -148,6 +154,7 @@ export var numberInputRoot = function numberInputRoot(Root) {
148
154
  ref: ref,
149
155
  segmentation: segmentation,
150
156
  value: innerValue,
157
+ precision: precision,
151
158
  min: min,
152
159
  max: max,
153
160
  isManualInput: isManualInput,
@@ -1,5 +1,5 @@
1
1
  var _StyledSpinner;
2
- var _excluded = ["value", "min", "max", "isLoading", "loader", "disabled", "segmentation", "textBefore", "textAfter", "isManualInput", "isInputFocused", "setIsInputFocused", "setIsAnimationRun", "setInnerValue", "onChange", "onBlur", "onKeyDown"];
2
+ var _excluded = ["value", "precision", "min", "max", "isLoading", "loader", "disabled", "segmentation", "textBefore", "textAfter", "isManualInput", "isInputFocused", "setIsInputFocused", "setIsAnimationRun", "setInnerValue", "onChange", "onBlur", "onKeyDown"];
3
3
  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); }
4
4
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
5
5
  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."); }
@@ -14,11 +14,12 @@ import { useForkRef } from '@salutejs/plasma-core';
14
14
  import { classes } from '../../NumberInput.tokens';
15
15
  import { cx, isNumber } from '../../../../utils';
16
16
  import { useDidMountEffect } from '../../../../hooks';
17
- import { defaultCharacterWidth, excludingNumberSchema, numberSchema } from '../../utils';
17
+ import { defaultCharacterWidth, excludingNumberSchema, getPreciseValue, numberSchema } from '../../utils';
18
18
  import { keyCodes } from '../../../../utils/constants';
19
19
  import { AdditionalText, Input, InputWrapper, DynamicInput, InputWidthHelper, TextWrapper, StyledSpinner, Loader } from './Input.styles';
20
20
  export var NumberInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
21
21
  var value = _ref.value,
22
+ precision = _ref.precision,
22
23
  min = _ref.min,
23
24
  max = _ref.max,
24
25
  isLoading = _ref.isLoading,
@@ -84,11 +85,6 @@ export var NumberInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
84
85
  setIsAnimationRun(false);
85
86
  return;
86
87
  }
87
- if (String(newValue).endsWith('.')) {
88
- setValues(null, Number(newValue));
89
- setIsAnimationRun(false);
90
- return;
91
- }
92
88
  var resValue = Number(newValue);
93
89
  if (max !== undefined && resValue > max) {
94
90
  setErrorClass(classes.errorAnimation);
@@ -100,6 +96,16 @@ export var NumberInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
100
96
  setErrorClass(classes.errorAnimation);
101
97
  setErrorValue(min);
102
98
  setIsAnimationRun(true);
99
+ return;
100
+ }
101
+ if (String(newValue).endsWith('.')) {
102
+ setValues(null, Number(newValue));
103
+ setIsAnimationRun(false);
104
+ return;
105
+ }
106
+ if (precision !== undefined) {
107
+ var preciseNewValue = Number(getPreciseValue(newValue, precision));
108
+ setValues(null, preciseNewValue);
103
109
  }
104
110
  setIsAnimationRun(false);
105
111
  };
@@ -125,15 +131,18 @@ export var NumberInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
125
131
  }
126
132
  return;
127
133
  }
134
+ console.log('here');
128
135
  var isValid = numberSchema.test(cleanValue);
129
136
  if (!isValid) {
137
+ console.log('not valid', cleanValue);
130
138
  setValues(event, lastValidValue);
131
139
  return;
132
140
  }
141
+ console.log('valid!', cleanValue);
133
142
  if (textWrapperRef !== null && textWrapperRef !== void 0 && textWrapperRef.current && wrapperRef !== null && wrapperRef !== void 0 && wrapperRef.current && (textWrapperRef === null || textWrapperRef === void 0 || (_textWrapperRef$curre = textWrapperRef.current) === null || _textWrapperRef$curre === void 0 ? void 0 : _textWrapperRef$curre.clientWidth) > (wrapperRef === null || wrapperRef === void 0 || (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.clientWidth)) {
134
143
  wrapperRef.current.scrollLeft = textWrapperRef.current.offsetWidth - textWrapperRef.current.offsetLeft || 0;
135
144
  }
136
- setValues(event, Number(cleanValue));
145
+ setValues(event, cleanValue);
137
146
  };
138
147
  var handleClickInputWrapper = function handleClickInputWrapper() {
139
148
  if (!isManualInput || !inputRef.current) {
@@ -1,3 +1,12 @@
1
1
  export var defaultCharacterWidth = '1ch';
2
2
  export var numberSchema = /^(-)?\d+(\.\d+)?$/;
3
- export var excludingNumberSchema = /[^-.\d]/g;
3
+ export var excludingNumberSchema = /[^-.\d]/g;
4
+ export var getPreciseValue = function getPreciseValue(value, precision) {
5
+ var innerValue = String(value);
6
+ if (precision !== undefined) {
7
+ var factor = Math.pow(10, precision);
8
+ var preparedValue = Number(innerValue) < 0 ? Number(innerValue) - Number.EPSILON : Number(innerValue) + Number.EPSILON;
9
+ return String(Math.round(preparedValue * factor) / factor);
10
+ }
11
+ return innerValue;
12
+ };
@@ -192,6 +192,7 @@ const StoryRange = ({
192
192
  const rangeRef = useRef<RangeInputRefs>(null);
193
193
 
194
194
  const [isOpen, setIsOpen] = useState(false);
195
+ const [firstDate, setFirstDate] = useState<string | Date>('');
195
196
 
196
197
  const iconSize = size === 'xs' ? 'xs' : 's';
197
198
  const showDividerIcon = dividerVariant === 'icon';
@@ -238,6 +239,12 @@ const StoryRange = ({
238
239
  onChangeSecondValue={(e, currentValue) => {
239
240
  onChangeSecondValue(e, currentValue);
240
241
  }}
242
+ onCommitFirstDate={(currentValue) => {
243
+ setFirstDate(currentValue);
244
+ }}
245
+ onCommitSecondDate={(currentValue) => {
246
+ firstDate && currentValue && setIsOpen(false);
247
+ }}
241
248
  lang={lang}
242
249
  {...dividerIconProps}
243
250
  {...rest}
@@ -272,7 +279,6 @@ export const Range: StoryObj<StoryPropsRange> = {
272
279
  size: 'l',
273
280
  view: 'default',
274
281
  isDoubleCalendar: false,
275
- closeAfterDateSelect: true,
276
282
  dividerVariant: 'dash',
277
283
  min: new Date(2024, 1, 1),
278
284
  max: new Date(2024, 12, 29),
@@ -96,6 +96,7 @@ export const Default: StoryObj<StoryPropsDefault> = {
96
96
  segmentation: 'default',
97
97
  min: 0,
98
98
  max: 9,
99
+ precision: 2,
99
100
  step: 1,
100
101
  width: 188,
101
102
  isManualInput: false,
@@ -186,12 +186,12 @@ const StoryRange = ({
186
186
  secondValueError,
187
187
  secondValueSuccess,
188
188
  size,
189
- lang,
190
189
  ...rest
191
190
  }: StoryPropsRange) => {
192
191
  const rangeRef = useRef<RangeInputRefs>(null);
193
192
 
194
193
  const [isOpen, setIsOpen] = useState(false);
194
+ const [firstDate, setFirstDate] = useState<string | Date>('');
195
195
 
196
196
  const iconSize = size === 'xs' ? 'xs' : 's';
197
197
  const showDividerIcon = dividerVariant === 'icon';
@@ -238,7 +238,12 @@ const StoryRange = ({
238
238
  onChangeSecondValue={(e, currentValue) => {
239
239
  onChangeSecondValue(e, currentValue);
240
240
  }}
241
- lang={lang}
241
+ onCommitFirstDate={(currentValue) => {
242
+ setFirstDate(currentValue);
243
+ }}
244
+ onCommitSecondDate={(currentValue) => {
245
+ firstDate && currentValue && setIsOpen(false);
246
+ }}
242
247
  {...dividerIconProps}
243
248
  {...rest}
244
249
  />
@@ -272,7 +277,6 @@ export const Range: StoryObj<StoryPropsRange> = {
272
277
  size: 'l',
273
278
  view: 'default',
274
279
  isDoubleCalendar: false,
275
- closeAfterDateSelect: true,
276
280
  dividerVariant: 'dash',
277
281
  min: new Date(2024, 1, 1),
278
282
  max: new Date(2024, 12, 29),
@@ -96,6 +96,7 @@ export const Default: StoryObj<StoryPropsDefault> = {
96
96
  segmentation: 'default',
97
97
  min: 0,
98
98
  max: 9,
99
+ precision: 2,
99
100
  step: 1,
100
101
  width: 188,
101
102
  isManualInput: false,
@@ -15,7 +15,7 @@ import { RangeDatePopover } from './RangeDatePopover/RangeDatePopover.js';
15
15
  import { noop } from '../../../utils/noop.js';
16
16
  import { getSortedValues } from '../../Calendar/utils/calendarRangeHelper.js';
17
17
 
18
- var _excluded = ["className", "autoComplete", "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", "required", "requiredPlacement", "format", "lang", "maskWithFormat", "min", "max", "includeEdgeDates", "eventList", "disabledList", "eventMonthList", "disabledMonthList", "eventQuarterList", "disabledQuarterList", "eventYearList", "disabledYearList", "type", "frame", "usePortal", "placement", "closeOnOverlayClick", "closeOnEsc", "closeAfterDateSelect", "offset", "onToggle", "onChange", "onChangeFirstValue", "onChangeSecondValue", "onCommitFirstDate", "onCommitSecondDate", "onFocusFirstTextfield", "onFocusSecondTextfield", "onBlurFirstTextfield", "onBlurSecondTextfield"];
18
+ var _excluded = ["className", "autoComplete", "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", "required", "requiredPlacement", "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"];
19
19
  var datePickerRangeRoot = function datePickerRangeRoot(Root) {
20
20
  return /*#__PURE__*/forwardRef(function (_ref, ref) {
21
21
  var _rangeRef$current, _rangeRef$current2;
@@ -89,8 +89,6 @@ var datePickerRangeRoot = function datePickerRangeRoot(Root) {
89
89
  closeOnOverlayClick = _ref$closeOnOverlayCl === void 0 ? true : _ref$closeOnOverlayCl,
90
90
  _ref$closeOnEsc = _ref.closeOnEsc,
91
91
  closeOnEsc = _ref$closeOnEsc === void 0 ? true : _ref$closeOnEsc,
92
- _ref$closeAfterDateSe = _ref.closeAfterDateSelect,
93
- closeAfterDateSelect = _ref$closeAfterDateSe === void 0 ? true : _ref$closeAfterDateSe,
94
92
  offset = _ref.offset,
95
93
  onToggle = _ref.onToggle,
96
94
  onChange = _ref.onChange,
@@ -143,14 +141,6 @@ var datePickerRangeRoot = function datePickerRangeRoot(Root) {
143
141
  _useState14 = _slicedToArray(_useState13, 2),
144
142
  inputSecondValue = _useState14[0],
145
143
  setInputSecondValue = _useState14[1];
146
- var _useState15 = useState(Boolean(calendarFirstValue && calendarSecondValue)),
147
- _useState16 = _slicedToArray(_useState15, 2),
148
- fullDateEntered = _useState16[0],
149
- setFullDateEntered = _useState16[1];
150
- var _useState17 = useState(false),
151
- _useState18 = _slicedToArray(_useState17, 2),
152
- secondTextFieldClicked = _useState18[0],
153
- setSecondTextFieldClicked = _useState18[1];
154
144
  var setFirstInputValue = function setFirstInputValue(value) {
155
145
  setInputFirstValue(value);
156
146
  if (onChange) {
@@ -211,12 +201,12 @@ var datePickerRangeRoot = function datePickerRangeRoot(Root) {
211
201
  }),
212
202
  handleChangeSecondValue = _useDatePicker2.handleChangeValue,
213
203
  handleCommitSecondDate = _useDatePicker2.handleCommitDate;
214
- var handleToggle = function handleToggle(currentOpened, event) {
204
+ var handleToggle = function handleToggle(opened, event) {
215
205
  var _firstInputRef$curren, _secondInputRef$curre;
216
206
  if (disabled || readOnly) {
217
207
  return;
218
208
  }
219
- var isCalendarOpen = (firstInputRef !== null && firstInputRef !== void 0 && (_firstInputRef$curren = firstInputRef.current) !== null && _firstInputRef$curren !== void 0 && _firstInputRef$curren.contains((event === null || event === void 0 ? void 0 : event.target) || null) || secondInputRef !== null && secondInputRef !== void 0 && (_secondInputRef$curre = secondInputRef.current) !== null && _secondInputRef$curre !== void 0 && _secondInputRef$curre.contains((event === null || event === void 0 ? void 0 : event.target) || null)) && (event === null || event === void 0 ? void 0 : event.code) !== keys.Escape ? true : currentOpened;
209
+ 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;
220
210
  if (!isCalendarOpen) {
221
211
  if (calendarFirstValue && !calendarSecondValue) {
222
212
  var _secondInputRef$curre2;
@@ -227,22 +217,11 @@ var datePickerRangeRoot = function datePickerRangeRoot(Root) {
227
217
  firstInputRef === null || firstInputRef === void 0 || (_firstInputRef$curren2 = firstInputRef.current) === null || _firstInputRef$curren2 === void 0 || _firstInputRef$curren2.focus();
228
218
  }
229
219
  }
230
- if (!isCalendarOpen) {
231
- setSecondTextFieldClicked(false);
232
- }
233
220
  if (onToggle) {
234
221
  return onToggle(isCalendarOpen, event);
235
222
  }
236
223
  setIsInnerOpen(isCalendarOpen);
237
224
  };
238
- var handleFocusFirstTextField = function handleFocusFirstTextField(event) {
239
- onFocusFirstTextfield === null || onFocusFirstTextfield === void 0 || onFocusFirstTextfield(event);
240
- setSecondTextFieldClicked(false);
241
- };
242
- var handleFocusSecondTextField = function handleFocusSecondTextField(event) {
243
- onFocusSecondTextfield === null || onFocusSecondTextfield === void 0 || onFocusSecondTextfield(event);
244
- setSecondTextFieldClicked(true);
245
- };
246
225
  var handleBlur = function handleBlur(event, outerHandler) {
247
226
  if (!inputFirstValue || !inputSecondValue) {
248
227
  outerHandler === null || outerHandler === void 0 || outerHandler(event);
@@ -282,37 +261,6 @@ var datePickerRangeRoot = function datePickerRangeRoot(Root) {
282
261
  closeOnEsc: closeOnEsc
283
262
  }),
284
263
  onKeyDown = _useKeyNavigation.onKeyDown;
285
- var handleChangeStartOfRange = function handleChangeStartOfRange(chosenDate, dateInfo) {
286
- if (!fullDateEntered) {
287
- handleCommitFirstDate(chosenDate, false, true, dateInfo);
288
- handleCommitSecondDate('');
289
- return;
290
- }
291
- var prevValue = secondTextFieldClicked ? calendarFirstValue : calendarSecondValue;
292
- var _getSortedValues3 = getSortedValues([prevValue, chosenDate]),
293
- _getSortedValues4 = _slicedToArray(_getSortedValues3, 2),
294
- first = _getSortedValues4[0],
295
- second = _getSortedValues4[1];
296
- handleCommitFirstDate(first, false, true, dateInfo);
297
- handleCommitSecondDate(second, false, true, dateInfo);
298
- if (!firstValueError && !secondValueError && closeAfterDateSelect) {
299
- handleToggle(false);
300
- }
301
- };
302
- var handleChangeCalendarValue = function handleChangeCalendarValue(_ref2, dateInfo) {
303
- var _ref3 = _slicedToArray(_ref2, 2),
304
- firstDate = _ref3[0],
305
- secondDate = _ref3[1];
306
- if (firstDate) {
307
- handleCommitFirstDate(firstDate, false, true, dateInfo);
308
- }
309
- if (secondDate) {
310
- handleCommitSecondDate(secondDate, false, true, dateInfo);
311
- }
312
- if (firstDate && secondDate && !firstValueError && !secondValueError && closeAfterDateSelect) {
313
- handleToggle(false);
314
- }
315
- };
316
264
  var RangeComponent = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StyledRange, {
317
265
  ref: rangeRef,
318
266
  autoComplete: autoComplete,
@@ -358,8 +306,8 @@ var datePickerRangeRoot = function datePickerRangeRoot(Root) {
358
306
  rangeRef === null || rangeRef === void 0 || (_rangeRef$current4 = rangeRef.current) === null || _rangeRef$current4 === void 0 || (_rangeRef$current4 = _rangeRef$current4.firstTextField()) === null || _rangeRef$current4 === void 0 || (_rangeRef$current4 = _rangeRef$current4.current) === null || _rangeRef$current4 === void 0 || _rangeRef$current4.focus();
359
307
  }
360
308
  },
361
- onFocusFirstTextfield: handleFocusFirstTextField,
362
- onFocusSecondTextfield: handleFocusSecondTextField,
309
+ onFocusFirstTextfield: onFocusFirstTextfield,
310
+ onFocusSecondTextfield: onFocusSecondTextfield,
363
311
  onBlurFirstTextfield: function onBlurFirstTextfield(event) {
364
312
  return handleBlur(event, _onBlurFirstTextfield);
365
313
  },
@@ -408,13 +356,8 @@ var datePickerRangeRoot = function datePickerRangeRoot(Root) {
408
356
  lang: lang
409
357
  }));
410
358
  }, [format, lang]);
411
- useEffect(function () {
412
- if (calendarFirstValue && calendarSecondValue) {
413
- setFullDateEntered(true);
414
- }
415
- }, [calendarFirstValue, calendarSecondValue]);
416
- var RootWrapper = useCallback(function (_ref4) {
417
- var children = _ref4.children;
359
+ var RootWrapper = useCallback(function (_ref2) {
360
+ var children = _ref2.children;
418
361
  return /*#__PURE__*/React.createElement(Root, {
419
362
  view: view,
420
363
  size: size,
@@ -456,8 +399,20 @@ var datePickerRangeRoot = function datePickerRangeRoot(Root) {
456
399
  lang: lang,
457
400
  isDoubleCalendar: isDoubleCalendar,
458
401
  rootWrapper: RootWrapper,
459
- onChangeStartOfRange: handleChangeStartOfRange,
460
- onChangeValue: handleChangeCalendarValue
402
+ onChangeStartOfRange: function onChangeStartOfRange(firstDate, dateInfo) {
403
+ handleCommitFirstDate(firstDate, false, true, dateInfo);
404
+ handleCommitSecondDate('');
405
+ },
406
+ onChangeValue: function onChangeValue(_ref3, dateInfo) {
407
+ var _ref4 = _slicedToArray(_ref3, 2),
408
+ firstDate = _ref4[0],
409
+ secondDate = _ref4[1];
410
+ firstDate && handleCommitFirstDate(firstDate, false, true, dateInfo);
411
+ secondDate && handleCommitSecondDate(secondDate, false, true, dateInfo);
412
+ if (firstDate && secondDate && !firstValueError && !secondValueError) {
413
+ setIsInnerOpen(false);
414
+ }
415
+ }
461
416
  }), leftHelper && /*#__PURE__*/React.createElement(LeftHelper, null, leftHelper), /*#__PURE__*/React.createElement(InputHidden, _extends({
462
417
  name: name,
463
418
  type: "hidden",