@alfalab/core-components-number-input 1.2.6 → 2.0.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 (166) hide show
  1. package/Component.desktop.d.ts +1 -1
  2. package/Component.desktop.js +9 -1
  3. package/Component.mobile.d.ts +1 -1
  4. package/Component.mobile.js +9 -1
  5. package/Component.responsive.d.ts +1 -1
  6. package/Component.responsive.js +14 -1
  7. package/components/number-input/Component.d.ts +21 -46
  8. package/components/number-input/Component.js +87 -84
  9. package/components/number-input/index.css +30 -0
  10. package/components/number-input/index.js +8 -0
  11. package/components/steppers/Component.d.ts +14 -0
  12. package/components/steppers/Component.js +33 -0
  13. package/components/steppers/index.css +32 -0
  14. package/components/steppers/index.d.ts +1 -0
  15. package/components/steppers/index.js +15 -0
  16. package/cssm/Component.desktop.d.ts +1 -1
  17. package/cssm/Component.desktop.js +11 -1
  18. package/cssm/Component.mobile.d.ts +1 -1
  19. package/cssm/Component.mobile.js +11 -1
  20. package/cssm/Component.responsive.d.ts +1 -1
  21. package/cssm/Component.responsive.js +16 -1
  22. package/cssm/components/number-input/Component.d.ts +21 -46
  23. package/cssm/components/number-input/Component.js +87 -84
  24. package/cssm/components/number-input/index.js +10 -0
  25. package/cssm/components/number-input/index.module.css +29 -0
  26. package/cssm/components/steppers/Component.d.ts +14 -0
  27. package/cssm/components/steppers/Component.js +32 -0
  28. package/cssm/components/steppers/index.d.ts +1 -0
  29. package/cssm/components/steppers/index.js +16 -0
  30. package/cssm/components/steppers/index.module.css +31 -0
  31. package/cssm/desktop/index.d.ts +2 -0
  32. package/cssm/desktop/index.js +25 -0
  33. package/cssm/index.js +11 -0
  34. package/cssm/mobile/index.d.ts +2 -0
  35. package/cssm/mobile/index.js +25 -0
  36. package/cssm/utils.d.ts +19 -9
  37. package/cssm/utils.js +244 -21
  38. package/desktop/index.d.ts +2 -0
  39. package/desktop/index.js +23 -0
  40. package/desktop/package.json +3 -0
  41. package/esm/Component.desktop.d.ts +1 -1
  42. package/esm/Component.desktop.js +9 -1
  43. package/esm/Component.mobile.d.ts +1 -1
  44. package/esm/Component.mobile.js +9 -1
  45. package/esm/Component.responsive.d.ts +1 -1
  46. package/esm/Component.responsive.js +15 -2
  47. package/esm/components/number-input/Component.d.ts +21 -46
  48. package/esm/components/number-input/Component.js +88 -86
  49. package/esm/components/number-input/index.css +30 -0
  50. package/esm/components/number-input/index.js +8 -0
  51. package/esm/components/steppers/Component.d.ts +14 -0
  52. package/esm/components/steppers/Component.js +24 -0
  53. package/esm/components/steppers/index.css +32 -0
  54. package/esm/components/steppers/index.d.ts +1 -0
  55. package/esm/components/steppers/index.js +7 -0
  56. package/esm/desktop/index.d.ts +2 -0
  57. package/esm/desktop/index.js +15 -0
  58. package/esm/index.js +9 -0
  59. package/esm/mobile/index.d.ts +2 -0
  60. package/esm/mobile/index.js +15 -0
  61. package/esm/utils.d.ts +19 -9
  62. package/esm/utils.js +236 -19
  63. package/index.js +9 -0
  64. package/mobile/index.d.ts +2 -0
  65. package/mobile/index.js +23 -0
  66. package/mobile/package.json +3 -0
  67. package/modern/Component.desktop.d.ts +1 -1
  68. package/modern/Component.desktop.js +9 -1
  69. package/modern/Component.mobile.d.ts +1 -1
  70. package/modern/Component.mobile.js +9 -1
  71. package/modern/Component.responsive.d.ts +1 -1
  72. package/modern/Component.responsive.js +13 -1
  73. package/modern/components/number-input/Component.d.ts +21 -46
  74. package/modern/components/number-input/Component.js +84 -86
  75. package/modern/components/number-input/index.css +30 -0
  76. package/modern/components/number-input/index.js +8 -0
  77. package/modern/components/steppers/Component.d.ts +14 -0
  78. package/modern/components/steppers/Component.js +23 -0
  79. package/modern/components/steppers/index.css +32 -0
  80. package/modern/components/steppers/index.d.ts +1 -0
  81. package/modern/components/steppers/index.js +7 -0
  82. package/modern/desktop/index.d.ts +2 -0
  83. package/modern/desktop/index.js +14 -0
  84. package/modern/index.js +9 -0
  85. package/modern/mobile/index.d.ts +2 -0
  86. package/modern/mobile/index.js +14 -0
  87. package/modern/utils.d.ts +19 -9
  88. package/modern/utils.js +223 -18
  89. package/package.json +9 -2
  90. package/src/Component.desktop.tsx +2 -2
  91. package/src/Component.mobile.tsx +2 -2
  92. package/src/Component.responsive.tsx +16 -2
  93. package/src/components/number-input/Component.tsx +195 -129
  94. package/src/components/number-input/index.module.css +18 -0
  95. package/src/components/steppers/Component.tsx +64 -0
  96. package/src/components/steppers/index.module.css +21 -0
  97. package/src/components/steppers/index.ts +1 -0
  98. package/src/desktop/index.ts +1 -0
  99. package/src/desktop/package.json +3 -0
  100. package/src/mobile/index.ts +1 -0
  101. package/src/mobile/package.json +3 -0
  102. package/src/utils.ts +302 -24
  103. package/utils.d.ts +19 -9
  104. package/utils.js +244 -21
  105. package/Component-10db897e.d.ts +0 -38
  106. package/Component-72dda473.d.ts +0 -53
  107. package/Component.desktop-785df74d.d.ts +0 -6
  108. package/Component.mobile-d7e9f69d.d.ts +0 -6
  109. package/Component.mobile-ebda875c.d.ts +0 -7
  110. package/Component.responsive-785df74d.d.ts +0 -26
  111. package/cssm/Component-10db897e.d.ts +0 -38
  112. package/cssm/Component-72dda473.d.ts +0 -53
  113. package/cssm/Component.desktop-785df74d.d.ts +0 -6
  114. package/cssm/Component.mobile-d7e9f69d.d.ts +0 -6
  115. package/cssm/Component.mobile-ebda875c.d.ts +0 -7
  116. package/cssm/Component.responsive-785df74d.d.ts +0 -26
  117. package/cssm/desktop.d.ts +0 -2
  118. package/cssm/desktop.js +0 -15
  119. package/cssm/index-10db897e.d.ts +0 -50
  120. package/cssm/index-3109f463.d.ts +0 -62
  121. package/cssm/index-72dda473.d.ts +0 -12
  122. package/cssm/index-ebda875c.d.ts +0 -145
  123. package/cssm/mobile.d.ts +0 -2
  124. package/cssm/mobile.js +0 -15
  125. package/cssm/typings-89f0cb07.d.ts +0 -93
  126. package/desktop.d.ts +0 -2
  127. package/desktop.js +0 -15
  128. package/esm/Component-10db897e.d.ts +0 -38
  129. package/esm/Component-72dda473.d.ts +0 -53
  130. package/esm/Component.desktop-785df74d.d.ts +0 -6
  131. package/esm/Component.mobile-d7e9f69d.d.ts +0 -6
  132. package/esm/Component.mobile-ebda875c.d.ts +0 -7
  133. package/esm/Component.responsive-785df74d.d.ts +0 -26
  134. package/esm/desktop.d.ts +0 -2
  135. package/esm/desktop.js +0 -7
  136. package/esm/index-10db897e.d.ts +0 -50
  137. package/esm/index-3109f463.d.ts +0 -62
  138. package/esm/index-72dda473.d.ts +0 -12
  139. package/esm/index-ebda875c.d.ts +0 -145
  140. package/esm/mobile.d.ts +0 -2
  141. package/esm/mobile.js +0 -7
  142. package/esm/typings-89f0cb07.d.ts +0 -93
  143. package/index-10db897e.d.ts +0 -50
  144. package/index-3109f463.d.ts +0 -62
  145. package/index-72dda473.d.ts +0 -12
  146. package/index-ebda875c.d.ts +0 -145
  147. package/mobile.d.ts +0 -2
  148. package/mobile.js +0 -15
  149. package/modern/Component-10db897e.d.ts +0 -38
  150. package/modern/Component-72dda473.d.ts +0 -53
  151. package/modern/Component.desktop-785df74d.d.ts +0 -6
  152. package/modern/Component.mobile-d7e9f69d.d.ts +0 -6
  153. package/modern/Component.mobile-ebda875c.d.ts +0 -7
  154. package/modern/Component.responsive-785df74d.d.ts +0 -26
  155. package/modern/desktop.d.ts +0 -2
  156. package/modern/desktop.js +0 -6
  157. package/modern/index-10db897e.d.ts +0 -50
  158. package/modern/index-3109f463.d.ts +0 -62
  159. package/modern/index-72dda473.d.ts +0 -12
  160. package/modern/index-ebda875c.d.ts +0 -145
  161. package/modern/mobile.d.ts +0 -2
  162. package/modern/mobile.js +0 -6
  163. package/modern/typings-89f0cb07.d.ts +0 -93
  164. package/src/desktop.ts +0 -1
  165. package/src/mobile.ts +0 -1
  166. package/typings-89f0cb07.d.ts +0 -93
@@ -1,99 +1,97 @@
1
- import React, { useRef, useState } from 'react';
1
+ import React, { forwardRef, useMemo, useState, useEffect } from 'react';
2
2
  import mergeRefs from 'react-merge-refs';
3
- import { createSeparatorsRegExp, getAllowedValue, SEPARATORS, SIGNS } from '../../utils.js';
3
+ import { maskitoTransform } from '@maskito/core';
4
+ import { useMaskito } from '@maskito/react';
5
+ import cn from 'classnames';
6
+ import { fnUtils, os } from '@alfalab/core-components-shared/modern';
7
+ import { createMaskOptions, parseNumber, stringifyNumberWithoutExp, MAX_DIGITS, MIN_SAFE_INTEGER, MAX_SAFE_INTEGER, MINUS_SIGN } from '../../utils.js';
8
+ import { Steppers } from '../steppers/Component.js';
9
+ import '@alfalab/core-components-icon-button/modern';
10
+ import '@alfalab/icons-glyph/MinusMIcon';
11
+ import '@alfalab/icons-glyph/PlusMediumMIcon';
4
12
 
5
- const NumberInput = React.forwardRef(({ value: propValue, onChange, onBlur, allowSigns = true, separator = ',', fractionLength, defaultValue, Input, ...restProps }, ref) => {
6
- const uncontrolled = propValue === undefined;
7
- const inputRef = useRef(null);
8
- const [value, setValue] = useState(defaultValue || '');
9
- const getNumberValueFromStr = (valueString) => {
10
- if (valueString === '')
11
- return null;
12
- if (valueString.includes(',')) {
13
- return parseFloat(valueString.replace(',', '.'));
13
+ const styles = {"steppers":"number-input__steppers_1g1qu","steppersFocused":"number-input__steppersFocused_1g1qu","steppersDisable":"number-input__steppersDisable_1g1qu","s":"number-input__s_1g1qu","m":"number-input__m_1g1qu"};
14
+ require('./index.css')
15
+
16
+ const NumberInput = forwardRef(({ value: propValue, onChange, separator = ',', fractionLength = MAX_DIGITS, defaultValue, Input, min: minProp, max: maxProp, rightAddons, dataTestId, disabled, onBlur, onFocus, view, step: stepProp, size = 's', disableUserInput, clear: clearProp, ...restProps }, ref) => {
17
+ const min = Math.max(MIN_SAFE_INTEGER, minProp ?? MIN_SAFE_INTEGER);
18
+ const max = Math.min(MAX_SAFE_INTEGER, maxProp ?? MAX_SAFE_INTEGER);
19
+ const withStepper = stepProp !== undefined;
20
+ const maskOptions = useMemo(() => createMaskOptions({
21
+ separator,
22
+ fractionLength: withStepper ? 0 : fractionLength,
23
+ min,
24
+ max,
25
+ }), [separator, fractionLength, min, max, withStepper]);
26
+ const [focused, setFocused] = useState(false);
27
+ const [value, setValue] = useState(() => {
28
+ if (defaultValue == null) {
29
+ return withStepper ? fnUtils.clamp(0, min, max).toString() : '';
14
30
  }
15
- return parseFloat(valueString);
16
- };
17
- const restoreCaret = (target) => {
18
- setTimeout(() => {
19
- const input = target;
20
- const positionCursor = input.selectionStart || 0;
21
- const isEndPosition = input.value.length === positionCursor;
22
- const enteredSign = SIGNS.some((s) => s === input.value[positionCursor - 1]);
23
- const enteredSeparator = SEPARATORS.filter((s) => s !== separator).some((s) => s === input.value[positionCursor - 1]);
24
- const shouldRestore = enteredSeparator || enteredSign;
25
- if (!isEndPosition && shouldRestore) {
26
- input.selectionStart = positionCursor;
27
- input.selectionEnd = positionCursor;
28
- }
29
- });
30
- };
31
- const handleChange = (event) => {
32
- const input = event.target;
33
- const newValue = input.value.replace(createSeparatorsRegExp(), separator);
34
- const allowedValue = getAllowedValue({
35
- value: newValue,
36
- fractionLength,
37
- allowSigns,
38
- separator,
39
- });
40
- if (onChange) {
41
- onChange(event, {
42
- value: getNumberValueFromStr(allowedValue),
43
- valueString: allowedValue,
31
+ return fnUtils
32
+ .clamp(parseNumber(maskitoTransform(defaultValue.toString(), maskOptions)), min, max)
33
+ .toString();
34
+ });
35
+ const maskRef = useMaskito({ options: maskOptions });
36
+ useEffect(() => {
37
+ if (propValue !== undefined) {
38
+ setValue((prev) => {
39
+ const parsedNumber = parseNumber(propValue);
40
+ if (parsedNumber !== parseNumber(prev)) {
41
+ return maskitoTransform(stringifyNumberWithoutExp(parsedNumber), maskOptions);
42
+ }
43
+ return prev;
44
44
  });
45
45
  }
46
- if (uncontrolled) {
47
- setValue(allowedValue);
48
- }
49
- restoreCaret(input);
50
- };
51
- const handleKeyDown = (event) => {
52
- const disallowedSymbols = /[/|?!@#$%^&*()_=A-Za-zА-Яа-яЁё ]/;
53
- const oneKeyPress = !event.altKey && !event.metaKey && !event.ctrlKey;
54
- const target = event.target;
55
- // Запрещаем вводить неразрешенные символы за исключением комбинаций клавиш
56
- if (oneKeyPress && event.key.length === 1 && disallowedSymbols.test(event.key)) {
57
- return event.preventDefault();
58
- }
59
- const val = target.value;
60
- const hasSeparator = (val.match(createSeparatorsRegExp()) || []).length > 0;
61
- // Запрещаем вводить второй сепаратор
62
- if (hasSeparator && SEPARATORS.some((s) => s === event.key)) {
63
- return event.preventDefault();
64
- }
65
- // Запрещаем вводить лишний знак
66
- if ((!allowSigns || SIGNS.some((s) => s === val[0])) &&
67
- SIGNS.some((s) => s === event.key)) {
68
- return event.preventDefault();
69
- }
70
- const selectionStart = target.selectionStart || 0;
71
- // Запрещаем вводить цифры в дробную часть, если кол-во цифр больше fractionLength
72
- if (hasSeparator &&
73
- fractionLength &&
74
- event.key.length === 1 &&
75
- selectionStart > val.indexOf(separator) &&
76
- val.split(separator)[1].length >= fractionLength) {
77
- return event.preventDefault();
78
- }
79
- return undefined;
46
+ }, [maskOptions, propValue, separator]);
47
+ const getMaxLength = (valueString) => {
48
+ const hasSeparator = valueString?.includes(separator);
49
+ const hasSigns = valueString?.startsWith(MINUS_SIGN);
50
+ return MAX_DIGITS + (hasSeparator ? 1 : 0) + (hasSigns ? 1 : 0);
80
51
  };
81
- const handleBlur = (event) => {
82
- const valueBlur = event.target.value.replace(new RegExp(`\\${separator}$`), '');
83
- if (onChange) {
84
- onChange(event, {
85
- value: getNumberValueFromStr(valueBlur),
86
- valueString: valueBlur,
52
+ const getStep = () => Math.round(stepProp ?? 1);
53
+ const changeValue = (event, newValue) => {
54
+ const isNaNValue = Number.isNaN(newValue);
55
+ const valueString = event?.target.value ?? newValue?.toString() ?? '';
56
+ setValue(valueString);
57
+ if (valueString === '' || !isNaNValue) {
58
+ onChange?.(event, {
59
+ value: isNaNValue ? null : newValue,
87
60
  });
88
61
  }
89
- if (uncontrolled) {
90
- setValue(valueBlur);
62
+ };
63
+ const handleChange = (event) => {
64
+ const valueString = event.target.value;
65
+ changeValue(event, parseNumber(valueString));
66
+ };
67
+ const handleIncrement = () => {
68
+ const parsed = parseNumber(value);
69
+ const nextValue = maskitoTransform((Number.isNaN(parsed) ? min : parsed + getStep()).toString(), maskOptions);
70
+ changeValue(null, parseNumber(nextValue));
71
+ };
72
+ const handleDecrement = () => {
73
+ const parsed = parseNumber(value);
74
+ const nextValue = maskitoTransform((Number.isNaN(parsed) ? max : parsed - getStep()).toString(), maskOptions);
75
+ changeValue(null, parseNumber(nextValue));
76
+ };
77
+ const handleFocus = (e) => {
78
+ onFocus?.(e);
79
+ if (!disableUserInput) {
80
+ setFocused(true);
91
81
  }
92
- if (onBlur)
93
- onBlur(event);
94
82
  };
95
- const visibleValue = uncontrolled ? value : propValue?.toString();
96
- return (React.createElement(Input, { ref: mergeRefs([ref, inputRef]), value: visibleValue, onBlur: handleBlur, onChange: handleChange, onKeyDown: handleKeyDown, inputMode: 'decimal', ...restProps }));
83
+ const handleBlur = (e) => {
84
+ onBlur?.(e);
85
+ setFocused(false);
86
+ };
87
+ return (React.createElement(Input, { maxLength: getMaxLength(value), ...restProps,
88
+ // В iOS в цифровой клавиатуре невозможно ввести минус.
89
+ inputMode: min < 0 && os.isIOS() ? 'text' : 'decimal', ref: mergeRefs([ref, maskRef]), value: value, onInput: handleChange, dataTestId: dataTestId, disabled: disabled, onFocus: handleFocus, onBlur: handleBlur, size: size, disableUserInput: disableUserInput, clear: clearProp && /\d/.test(value), rightAddons: withStepper ? (React.createElement(React.Fragment, null,
90
+ rightAddons,
91
+ React.createElement(Steppers, { dataTestId: dataTestId, disabled: disabled, value: parseNumber(value), min: min, max: max, className: cn(styles.steppers, styles[size], {
92
+ [styles.steppersFocused]: focused,
93
+ [styles.steppersDisable]: disabled,
94
+ }), onIncrement: handleIncrement, onDecrement: handleDecrement }))) : (rightAddons) }));
97
95
  });
98
96
 
99
97
  export { NumberInput };
@@ -0,0 +1,30 @@
1
+ /* hash: ppwj9 */
2
+ :root {
3
+ } /* deprecated */ :root {
4
+ --color-light-neutral-0: #fff;
5
+ --color-light-neutral-translucent-200: rgba(30, 43, 68, 0.08); /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
6
+ } :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
7
+ } :root {
8
+ } :root {
9
+
10
+ /* Hard */
11
+
12
+ /* Up */
13
+
14
+ /* Hard up */
15
+ } :root {
16
+ } :root {
17
+ --gap-2xs-neg: -4px;
18
+ --gap-xs-neg: -8px;
19
+ } :root {
20
+ } :root {
21
+ } .number-input__steppers_1g1qu {
22
+ background-color: var(--color-light-neutral-0);
23
+ } .number-input__steppersFocused_1g1qu,
24
+ .number-input__steppersDisable_1g1qu {
25
+ background-color: var(--color-light-neutral-translucent-200);
26
+ } .number-input__s_1g1qu {
27
+ margin-right: var(--gap-xs-neg);
28
+ } .number-input__m_1g1qu {
29
+ margin-right: var(--gap-2xs-neg);
30
+ }
@@ -1,4 +1,12 @@
1
1
  export { NumberInput } from './Component.js';
2
2
  import 'react';
3
3
  import 'react-merge-refs';
4
+ import '@maskito/core';
5
+ import '@maskito/react';
6
+ import 'classnames';
7
+ import '@alfalab/core-components-shared/modern';
4
8
  import '../../utils.js';
9
+ import '../steppers/Component.js';
10
+ import '@alfalab/core-components-icon-button/modern';
11
+ import '@alfalab/icons-glyph/MinusMIcon';
12
+ import '@alfalab/icons-glyph/PlusMediumMIcon';
@@ -0,0 +1,14 @@
1
+ /// <reference types="react" />
2
+ import React from 'react';
3
+ type SteppersProps = {
4
+ value: number;
5
+ min: number;
6
+ max: number;
7
+ className?: string;
8
+ disabled?: boolean;
9
+ onIncrement: () => void;
10
+ onDecrement: () => void;
11
+ dataTestId?: string;
12
+ };
13
+ declare const Steppers: React.FC<SteppersProps>;
14
+ export { SteppersProps, Steppers };
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import cn from 'classnames';
3
+ import { IconButton } from '@alfalab/core-components-icon-button/modern';
4
+ import { getDataTestId } from '@alfalab/core-components-shared/modern';
5
+ import { MinusMIcon } from '@alfalab/icons-glyph/MinusMIcon';
6
+ import { PlusMediumMIcon } from '@alfalab/icons-glyph/PlusMediumMIcon';
7
+
8
+ const styles = {"component":"number-input__component_1k8eq","separator":"number-input__separator_1k8eq","button":"number-input__button_1k8eq"};
9
+ require('./index.css')
10
+
11
+ function preventDefault(e) {
12
+ e.preventDefault();
13
+ }
14
+ const Steppers = ({ className, onIncrement, onDecrement, value, min, max, disabled, dataTestId, }) => {
15
+ const decButtonDisabled = disabled || value <= min;
16
+ const incButtonDisabled = disabled || value >= max;
17
+ return (React.createElement("div", { className: cn(styles.component, className) },
18
+ React.createElement(IconButton, { disabled: decButtonDisabled, className: styles.button, icon: React.createElement(MinusMIcon, null), "aria-label": '\u0443\u043C\u0435\u043D\u044C\u0448\u0438\u0442\u044C', onMouseDown: preventDefault, onClick: onDecrement, dataTestId: getDataTestId(dataTestId, 'decrement-button'), view: 'secondary' }),
19
+ React.createElement("div", { className: styles.separator }),
20
+ React.createElement(IconButton, { disabled: incButtonDisabled, className: styles.button, icon: React.createElement(PlusMediumMIcon, null), "aria-label": '\u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0442\u044C', onMouseDown: preventDefault, onClick: onIncrement, dataTestId: getDataTestId(dataTestId, 'increment-button'), view: 'secondary' })));
21
+ };
22
+
23
+ export { Steppers };
@@ -0,0 +1,32 @@
1
+ /* hash: 1x7ch */
2
+ :root {
3
+ } /* deprecated */ :root {
4
+ --color-light-neutral-translucent-300: rgba(15, 25, 55, 0.1); /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
5
+ } :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
6
+ } :root {
7
+ } :root {
8
+
9
+ /* Hard */
10
+
11
+ /* Up */
12
+
13
+ /* Hard up */
14
+ } :root {
15
+ } :root {
16
+ } :root {
17
+ } :root {
18
+ } .number-input__component_1k8eq {
19
+ display: flex;
20
+ flex-flow: row nowrap;
21
+ align-items: center;
22
+ border-radius: 5px;
23
+ transition: background-color 0.2s ease;
24
+ overflow: visible;
25
+ } .number-input__separator_1k8eq {
26
+ height: 18px;
27
+ width: 1px;
28
+ background-color: var(--color-light-neutral-translucent-300);
29
+ } .number-input__button_1k8eq {
30
+ width: 40px;
31
+ height: 40px;
32
+ }
@@ -0,0 +1 @@
1
+ export * from "./Component";
@@ -0,0 +1,7 @@
1
+ export { Steppers } from './Component.js';
2
+ import 'react';
3
+ import 'classnames';
4
+ import '@alfalab/core-components-icon-button/modern';
5
+ import '@alfalab/core-components-shared/modern';
6
+ import '@alfalab/icons-glyph/MinusMIcon';
7
+ import '@alfalab/icons-glyph/PlusMediumMIcon';
@@ -0,0 +1,2 @@
1
+ export { NumberInputDesktop, NumberInputDesktopProps } from "../Component.desktop";
2
+ export {};
@@ -0,0 +1,14 @@
1
+ export { NumberInputDesktop } from '../Component.desktop.js';
2
+ import 'react';
3
+ import '@alfalab/core-components-input/modern/desktop';
4
+ import '../components/number-input/Component.js';
5
+ import 'react-merge-refs';
6
+ import '@maskito/core';
7
+ import '@maskito/react';
8
+ import 'classnames';
9
+ import '@alfalab/core-components-shared/modern';
10
+ import '../utils.js';
11
+ import '../components/steppers/Component.js';
12
+ import '@alfalab/core-components-icon-button/modern';
13
+ import '@alfalab/icons-glyph/MinusMIcon';
14
+ import '@alfalab/icons-glyph/PlusMediumMIcon';
package/modern/index.js CHANGED
@@ -1,6 +1,15 @@
1
1
  export { NumberInputResponsive as NumberInput } from './Component.responsive.js';
2
2
  import 'react';
3
3
  import '@alfalab/core-components-input/modern';
4
+ import '@alfalab/core-components-mq/modern';
4
5
  import './components/number-input/Component.js';
5
6
  import 'react-merge-refs';
7
+ import '@maskito/core';
8
+ import '@maskito/react';
9
+ import 'classnames';
10
+ import '@alfalab/core-components-shared/modern';
6
11
  import './utils.js';
12
+ import './components/steppers/Component.js';
13
+ import '@alfalab/core-components-icon-button/modern';
14
+ import '@alfalab/icons-glyph/MinusMIcon';
15
+ import '@alfalab/icons-glyph/PlusMediumMIcon';
@@ -0,0 +1,2 @@
1
+ export { NumberInputMobile, NumberInputMobileProps } from "../Component.mobile";
2
+ export {};
@@ -0,0 +1,14 @@
1
+ export { NumberInputMobile } from '../Component.mobile.js';
2
+ import 'react';
3
+ import '@alfalab/core-components-input/modern/mobile';
4
+ import '../components/number-input/Component.js';
5
+ import 'react-merge-refs';
6
+ import '@maskito/core';
7
+ import '@maskito/react';
8
+ import 'classnames';
9
+ import '@alfalab/core-components-shared/modern';
10
+ import '../utils.js';
11
+ import '../components/steppers/Component.js';
12
+ import '@alfalab/core-components-icon-button/modern';
13
+ import '@alfalab/icons-glyph/MinusMIcon';
14
+ import '@alfalab/icons-glyph/PlusMediumMIcon';
package/modern/utils.d.ts CHANGED
@@ -1,13 +1,23 @@
1
- declare const SIGNS: string[];
1
+ import { MaskitoOptions, MaskitoPlugin } from '@maskito/core';
2
+ declare const MINUS_SIGN = "-";
2
3
  declare const SEPARATORS: string[];
3
- declare function createSeparatorsRegExp(): RegExp;
4
+ declare const MAX_SAFE_INTEGER: number;
5
+ declare const MIN_SAFE_INTEGER: number;
6
+ declare const MAX_DIGITS = 15;
7
+ declare function parseNumber(value?: string | number | null): number;
4
8
  /**
5
- * Проверка вводимых значений.
9
+ * Преобразовать число в строку с заменой экспоненты на десятичную дробь
6
10
  */
7
- declare const getAllowedValue: ({ value, fractionLength, separator, allowSigns, }: {
8
- value: string;
9
- fractionLength?: number | undefined;
11
+ declare function stringifyNumberWithoutExp(value: number): string;
12
+ declare function createMaskOptions({ separator, fractionLength, min, max, }: {
10
13
  separator: string;
11
- allowSigns: boolean;
12
- }) => string;
13
- export { SIGNS, SEPARATORS, createSeparatorsRegExp, getAllowedValue };
14
+ fractionLength: number;
15
+ min: number;
16
+ max: number;
17
+ }): MaskitoOptions;
18
+ declare function createMinMaxPlugin({ min, max }: {
19
+ min: number;
20
+ max: number;
21
+ }): MaskitoPlugin;
22
+ declare function createNotEmptyPartsPlugin(separator: string): MaskitoPlugin;
23
+ export { MINUS_SIGN, SEPARATORS, MAX_SAFE_INTEGER, MIN_SAFE_INTEGER, MAX_DIGITS, parseNumber, stringifyNumberWithoutExp, createMaskOptions, createMinMaxPlugin, createNotEmptyPartsPlugin };