@alfalab/core-components-number-input 4.0.4 → 4.0.5

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 (66) hide show
  1. package/Component.responsive.d.ts +1 -1
  2. package/components/number-input/Component.js.map +1 -1
  3. package/components/steppers/Component.d.ts +1 -1
  4. package/components/steppers/default.css +4 -4
  5. package/components/steppers/default.module.css.js +1 -1
  6. package/components/steppers/default.module.css.js.map +1 -1
  7. package/components/steppers/index.css +6 -6
  8. package/components/steppers/index.module.css.js +1 -1
  9. package/components/steppers/index.module.css.js.map +1 -1
  10. package/components/steppers/inverted.css +4 -4
  11. package/components/steppers/inverted.module.css.js +1 -1
  12. package/components/steppers/inverted.module.css.js.map +1 -1
  13. package/cssm/Component.responsive.d.ts +1 -1
  14. package/cssm/components/number-input/Component.js.map +1 -1
  15. package/cssm/components/steppers/Component.d.ts +1 -1
  16. package/cssm/desktop/Component.desktop.d.ts +1 -1
  17. package/cssm/mobile/Component.mobile.d.ts +1 -1
  18. package/cssm/utils.d.ts +2 -2
  19. package/cssm/utils.js.map +1 -1
  20. package/desktop/Component.desktop.d.ts +1 -1
  21. package/esm/Component.responsive.d.ts +1 -1
  22. package/esm/components/number-input/Component.js.map +1 -1
  23. package/esm/components/steppers/Component.d.ts +1 -1
  24. package/esm/components/steppers/default.css +4 -4
  25. package/esm/components/steppers/default.module.css.js +1 -1
  26. package/esm/components/steppers/default.module.css.js.map +1 -1
  27. package/esm/components/steppers/index.css +6 -6
  28. package/esm/components/steppers/index.module.css.js +1 -1
  29. package/esm/components/steppers/index.module.css.js.map +1 -1
  30. package/esm/components/steppers/inverted.css +4 -4
  31. package/esm/components/steppers/inverted.module.css.js +1 -1
  32. package/esm/components/steppers/inverted.module.css.js.map +1 -1
  33. package/esm/desktop/Component.desktop.d.ts +1 -1
  34. package/esm/mobile/Component.mobile.d.ts +1 -1
  35. package/esm/utils.d.ts +2 -2
  36. package/esm/utils.js.map +1 -1
  37. package/mobile/Component.mobile.d.ts +1 -1
  38. package/modern/Component.responsive.d.ts +1 -1
  39. package/modern/components/number-input/Component.js.map +1 -1
  40. package/modern/components/steppers/Component.d.ts +1 -1
  41. package/modern/components/steppers/default.css +4 -4
  42. package/modern/components/steppers/default.module.css.js +1 -1
  43. package/modern/components/steppers/default.module.css.js.map +1 -1
  44. package/modern/components/steppers/index.css +6 -6
  45. package/modern/components/steppers/index.module.css.js +1 -1
  46. package/modern/components/steppers/index.module.css.js.map +1 -1
  47. package/modern/components/steppers/inverted.css +4 -4
  48. package/modern/components/steppers/inverted.module.css.js +1 -1
  49. package/modern/components/steppers/inverted.module.css.js.map +1 -1
  50. package/modern/desktop/Component.desktop.d.ts +1 -1
  51. package/modern/mobile/Component.mobile.d.ts +1 -1
  52. package/modern/utils.d.ts +2 -2
  53. package/modern/utils.js.map +1 -1
  54. package/moderncssm/Component.responsive.d.ts +1 -1
  55. package/moderncssm/components/number-input/Component.js.map +1 -1
  56. package/moderncssm/components/steppers/Component.d.ts +1 -1
  57. package/moderncssm/desktop/Component.desktop.d.ts +1 -1
  58. package/moderncssm/mobile/Component.mobile.d.ts +1 -1
  59. package/moderncssm/utils.d.ts +2 -2
  60. package/moderncssm/utils.js.map +1 -1
  61. package/package.json +6 -6
  62. package/src/components/steppers/default.module.css +1 -1
  63. package/src/components/steppers/index.module.css +1 -1
  64. package/src/components/steppers/inverted.module.css +1 -1
  65. package/utils.d.ts +2 -2
  66. package/utils.js.map +1 -1
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type NumberInputProps } from './components/number-input';
3
- export declare type NumberInputResponsiveProps = Omit<NumberInputProps, 'Input' | 'view'>;
3
+ export type NumberInputResponsiveProps = Omit<NumberInputProps, 'Input' | 'view'>;
4
4
  export declare const NumberInputResponsive: React.ForwardRefExoticComponent<NumberInputResponsiveProps & React.RefAttributes<HTMLInputElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../../src/components/number-input/Component.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n type FocusEvent,\n forwardRef,\n type ForwardRefExoticComponent,\n Fragment,\n type RefAttributes,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { type MaskitoOptions, maskitoTransform } from '@maskito/core';\nimport { useMaskito } from '@maskito/react';\n\nimport { type InputProps } from '@alfalab/core-components-input';\nimport { fnUtils, isIOS } from '@alfalab/core-components-shared';\n\nimport {\n createMaskOptions,\n getMinMaxOrDefault,\n MAX_DIGITS,\n MINUS_SIGN,\n parseNumber,\n stringifyNumberWithoutExp,\n} from '../../utils';\nimport { Steppers } from '../steppers';\n\nexport interface NumberInputProps\n extends Omit<InputProps, 'value' | 'onChange' | 'type' | 'defaultValue' | 'dataTestId'> {\n /**\n * Значение поля ввода\n */\n value?: string | number | null;\n\n /**\n * Значение по-умолчанию\n */\n defaultValue?: string | number | null;\n\n /**\n * Разделитель ',' или '.'\n */\n separator?: '.' | ',';\n\n /**\n * Количество символов после разделителя\n * Если указан проп step, то всегда 0\n */\n fractionLength?: number;\n\n /**\n * Шаг инкремента/декремента. Используйте только целочисленные значения\n */\n step?: number;\n\n /**\n * Минимальное значение\n * @default Number.MIN_SAFE_INTEGER\n */\n min?: number;\n\n /**\n * Максимальное значение\n * @default Number.MAX_SAFE_INTEGER\n */\n max?: number;\n\n /**\n * Отображение компонента в мобильном или десктопном виде\n */\n view?: 'desktop' | 'mobile';\n\n /**\n * Компонент инпута\n */\n Input: ForwardRefExoticComponent<InputProps & RefAttributes<HTMLInputElement>>;\n\n /**\n * Обработчик события изменения значения\n */\n onChange?: (e: ChangeEvent<HTMLInputElement> | null, payload: { value: number | null }) => void;\n\n /**\n * Идентификатор для систем автоматизированного тестирования.\n * Для кнопки инкремента используется модификатор -increment-button, декремента -decrement-button\n */\n dataTestId?: string;\n}\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value: propValue,\n onChange,\n separator = ',',\n fractionLength = MAX_DIGITS,\n defaultValue,\n Input,\n min: minProp,\n max: maxProp,\n rightAddons,\n dataTestId,\n disabled,\n onBlur,\n onFocus,\n view,\n step: stepProp,\n size = 48,\n disableUserInput,\n clear: clearProp,\n colors = 'default',\n ...restProps\n },\n ref,\n ) => {\n const { readOnly } = restProps;\n const { min, max } = getMinMaxOrDefault({ minProp, maxProp });\n const withStepper = stepProp !== undefined;\n\n const maskOptions: MaskitoOptions = useMemo(\n () =>\n createMaskOptions({\n separator,\n fractionLength: withStepper ? 0 : fractionLength,\n min,\n max,\n }),\n [separator, fractionLength, min, max, withStepper],\n );\n\n const [focused, setFocused] = useState(false);\n const [value, setValue] = useState(() => {\n if (defaultValue == null) {\n return withStepper ? fnUtils.clamp(0, min, max).toString() : '';\n }\n\n return fnUtils\n .clamp(\n parseNumber(maskitoTransform(defaultValue.toString(), maskOptions)),\n min,\n max,\n )\n .toString();\n });\n\n const maskRef = useMaskito({ options: maskOptions });\n\n useEffect(() => {\n if (propValue !== undefined) {\n setValue((prev) => {\n const parsedNumber = parseNumber(propValue);\n\n if (parsedNumber !== parseNumber(prev)) {\n return maskitoTransform(\n stringifyNumberWithoutExp(parsedNumber),\n maskOptions,\n );\n }\n\n return prev;\n });\n }\n }, [maskOptions, propValue, separator]);\n\n const getMaxLength = (valueString: string) => {\n const hasSeparator = valueString?.includes(separator);\n const hasSigns = valueString?.startsWith(MINUS_SIGN);\n\n return MAX_DIGITS + (hasSeparator ? 1 : 0) + (hasSigns ? 1 : 0);\n };\n\n const getStep = () => Math.round(stepProp ?? 1);\n\n const changeValue = (\n event: ChangeEvent<HTMLInputElement> | null,\n newValue: number | null,\n ) => {\n const isNaNValue = Number.isNaN(newValue);\n const valueString = event?.target.value ?? newValue?.toString() ?? '';\n\n setValue(valueString);\n\n if (valueString === '' || !isNaNValue) {\n onChange?.(event, {\n value: isNaNValue ? null : newValue,\n });\n }\n };\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const valueString = event.target.value;\n\n changeValue(event, parseNumber(valueString));\n };\n\n const handleIncrement = () => {\n const parsed = parseNumber(value);\n const nextValue = maskitoTransform(\n (Number.isNaN(parsed) ? min : parsed + getStep()).toString(),\n maskOptions,\n );\n\n changeValue(null, parseNumber(nextValue));\n };\n\n const handleDecrement = () => {\n const parsed = parseNumber(value);\n const nextValue = maskitoTransform(\n (Number.isNaN(parsed) ? max : parsed - getStep()).toString(),\n maskOptions,\n );\n\n changeValue(null, parseNumber(nextValue));\n };\n\n const handleFocus = (e: FocusEvent<HTMLInputElement>) => {\n onFocus?.(e);\n\n if (!disableUserInput) {\n setFocused(true);\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n setFocused(false);\n };\n\n const renderRightAddons = () => (\n <Fragment>\n {rightAddons}\n {withStepper && !disabled && !readOnly && (\n <Steppers\n colors={colors}\n dataTestId={dataTestId}\n disabled={disabled}\n focused={focused}\n value={parseNumber(value)}\n min={min}\n max={max}\n onIncrement={handleIncrement}\n onDecrement={handleDecrement}\n size={size}\n />\n )}\n </Fragment>\n );\n\n return (\n <Input\n maxLength={getMaxLength(value)}\n {...restProps}\n // В iOS в цифровой клавиатуре невозможно ввести минус.\n inputMode={min < 0 && isIOS() ? 'text' : 'decimal'}\n ref={mergeRefs([ref, maskRef])}\n value={value}\n onInput={handleChange}\n dataTestId={dataTestId}\n colors={colors}\n disabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n size={size}\n disableUserInput={disableUserInput}\n clear={clearProp && /\\d/.test(value)}\n rightAddons={renderRightAddons()}\n />\n );\n },\n);\n"],"names":["forwardRef","MAX_DIGITS","__rest","getMinMaxOrDefault","useMemo","createMaskOptions","useState","fnUtils","parseNumber","maskitoTransform","useMaskito","useEffect","stringifyNumberWithoutExp","MINUS_SIGN","React","Fragment","Steppers","__assign","isIOS","mergeRefs"],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["../../src/components/number-input/Component.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n type FocusEvent,\n forwardRef,\n type ForwardRefExoticComponent,\n Fragment,\n type RefAttributes,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { type MaskitoOptions, maskitoTransform } from '@maskito/core';\nimport { useMaskito } from '@maskito/react';\n\nimport { type InputProps } from '@alfalab/core-components-input';\nimport { fnUtils, isIOS } from '@alfalab/core-components-shared';\n\nimport {\n createMaskOptions,\n getMinMaxOrDefault,\n MAX_DIGITS,\n MINUS_SIGN,\n parseNumber,\n stringifyNumberWithoutExp,\n} from '../../utils';\nimport { Steppers } from '../steppers';\n\nexport interface NumberInputProps\n extends Omit<InputProps, 'value' | 'onChange' | 'type' | 'defaultValue' | 'dataTestId'> {\n /**\n * Значение поля ввода\n */\n value?: string | number | null;\n\n /**\n * Значение по-умолчанию\n */\n defaultValue?: string | number | null;\n\n /**\n * Разделитель ',' или '.'\n */\n separator?: '.' | ',';\n\n /**\n * Количество символов после разделителя\n * Если указан проп step, то всегда 0\n */\n fractionLength?: number;\n\n /**\n * Шаг инкремента/декремента. Используйте только целочисленные значения\n */\n step?: number;\n\n /**\n * Минимальное значение\n * @default Number.MIN_SAFE_INTEGER\n */\n min?: number;\n\n /**\n * Максимальное значение\n * @default Number.MAX_SAFE_INTEGER\n */\n max?: number;\n\n /**\n * Отображение компонента в мобильном или десктопном виде\n */\n view?: 'desktop' | 'mobile';\n\n /**\n * Компонент инпута\n */\n Input: ForwardRefExoticComponent<InputProps & RefAttributes<HTMLInputElement>>;\n\n /**\n * Обработчик события изменения значения\n */\n onChange?: (e: ChangeEvent<HTMLInputElement> | null, payload: { value: number | null }) => void;\n\n /**\n * Идентификатор для систем автоматизированного тестирования.\n * Для кнопки инкремента используется модификатор -increment-button, декремента -decrement-button\n */\n dataTestId?: string;\n}\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value: propValue,\n onChange,\n separator = ',',\n fractionLength = MAX_DIGITS,\n defaultValue,\n Input,\n min: minProp,\n max: maxProp,\n rightAddons,\n dataTestId,\n disabled,\n onBlur,\n onFocus,\n view,\n step: stepProp,\n size = 48,\n disableUserInput,\n clear: clearProp,\n colors = 'default',\n ...restProps\n },\n ref,\n ) => {\n const { readOnly } = restProps;\n const { min, max } = getMinMaxOrDefault({ minProp, maxProp });\n const withStepper = stepProp !== undefined;\n\n const maskOptions: MaskitoOptions = useMemo(\n () =>\n createMaskOptions({\n separator,\n fractionLength: withStepper ? 0 : fractionLength,\n min,\n max,\n }),\n [separator, fractionLength, min, max, withStepper],\n );\n\n const [focused, setFocused] = useState(false);\n const [value, setValue] = useState(() => {\n if (defaultValue == null) {\n return withStepper ? fnUtils.clamp(0, min, max).toString() : '';\n }\n\n return fnUtils\n .clamp(\n parseNumber(maskitoTransform(defaultValue.toString(), maskOptions)),\n min,\n max,\n )\n .toString();\n });\n\n const maskRef = useMaskito({ options: maskOptions });\n\n useEffect(() => {\n if (propValue !== undefined) {\n setValue((prev) => {\n const parsedNumber = parseNumber(propValue);\n\n if (parsedNumber !== parseNumber(prev)) {\n return maskitoTransform(\n stringifyNumberWithoutExp(parsedNumber),\n maskOptions,\n );\n }\n\n return prev;\n });\n }\n }, [maskOptions, propValue, separator]);\n\n const getMaxLength = (valueString: string) => {\n const hasSeparator = valueString?.includes(separator);\n const hasSigns = valueString?.startsWith(MINUS_SIGN);\n\n return MAX_DIGITS + (hasSeparator ? 1 : 0) + (hasSigns ? 1 : 0);\n };\n\n const getStep = () => Math.round(stepProp ?? 1);\n\n const changeValue = (\n event: ChangeEvent<HTMLInputElement> | null,\n newValue: number | null,\n ) => {\n const isNaNValue = Number.isNaN(newValue);\n const valueString = event?.target.value ?? newValue?.toString() ?? '';\n\n setValue(valueString);\n\n if (valueString === '' || !isNaNValue) {\n onChange?.(event, {\n value: isNaNValue ? null : newValue,\n });\n }\n };\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const valueString = event.target.value;\n\n changeValue(event, parseNumber(valueString));\n };\n\n const handleIncrement = () => {\n const parsed = parseNumber(value);\n const nextValue = maskitoTransform(\n (Number.isNaN(parsed) ? min : parsed + getStep()).toString(),\n maskOptions,\n );\n\n changeValue(null, parseNumber(nextValue));\n };\n\n const handleDecrement = () => {\n const parsed = parseNumber(value);\n const nextValue = maskitoTransform(\n (Number.isNaN(parsed) ? max : parsed - getStep()).toString(),\n maskOptions,\n );\n\n changeValue(null, parseNumber(nextValue));\n };\n\n const handleFocus = (e: FocusEvent<HTMLInputElement>) => {\n onFocus?.(e);\n\n if (!disableUserInput) {\n setFocused(true);\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n setFocused(false);\n };\n\n const renderRightAddons = () => (\n <Fragment>\n {rightAddons}\n {withStepper && !disabled && !readOnly && (\n <Steppers\n colors={colors}\n dataTestId={dataTestId}\n disabled={disabled}\n focused={focused}\n value={parseNumber(value)}\n min={min}\n max={max}\n onIncrement={handleIncrement}\n onDecrement={handleDecrement}\n size={size}\n />\n )}\n </Fragment>\n );\n\n return (\n <Input\n maxLength={getMaxLength(value)}\n {...restProps}\n // В iOS в цифровой клавиатуре невозможно ввести минус.\n inputMode={min < 0 && isIOS() ? 'text' : 'decimal'}\n ref={mergeRefs([ref, maskRef])}\n value={value}\n onInput={handleChange}\n dataTestId={dataTestId}\n colors={colors}\n disabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n size={size}\n disableUserInput={disableUserInput}\n clear={clearProp && /\\d/.test(value)}\n rightAddons={renderRightAddons()}\n />\n );\n },\n);\n"],"names":["forwardRef","MAX_DIGITS","__rest","getMinMaxOrDefault","useMemo","createMaskOptions","useState","fnUtils","parseNumber","maskitoTransform","useMaskito","useEffect","stringifyNumberWithoutExp","MINUS_SIGN","React","Fragment","Steppers","__assign","isIOS","mergeRefs"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { type FC } from 'react';
2
2
  import { type InputProps } from '@alfalab/core-components-input';
3
- export declare type SteppersProps = {
3
+ export type SteppersProps = {
4
4
  value: number;
5
5
  min: number;
6
6
  max: number;
@@ -3,13 +3,13 @@
3
3
  --color-light-neutral-translucent-200: rgba(30, 43, 68, 0.08);
4
4
  --color-light-neutral-translucent-300: rgba(15, 25, 55, 0.1);
5
5
  }
6
- .number-input__separator_1bc30 {
6
+ .number-input__separator_jdkrj {
7
7
  background-color: var(--color-light-neutral-translucent-300);
8
8
  }
9
- .number-input__steppers_1bc30 {
9
+ .number-input__steppers_jdkrj {
10
10
  background-color: var(--color-light-neutral-translucent-0);
11
11
  }
12
- .number-input__steppersFocused_1bc30,
13
- .number-input__steppersDisabled_1bc30 {
12
+ .number-input__steppersFocused_jdkrj,
13
+ .number-input__steppersDisabled_jdkrj {
14
14
  background-color: var(--color-light-neutral-translucent-200);
15
15
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./default.css');
4
4
 
5
- var defaultColors = {"separator":"number-input__separator_1bc30","steppers":"number-input__steppers_1bc30","steppersFocused":"number-input__steppersFocused_1bc30","steppersDisabled":"number-input__steppersDisabled_1bc30"};
5
+ var defaultColors = {"separator":"number-input__separator_jdkrj","steppers":"number-input__steppers_jdkrj","steppersFocused":"number-input__steppersFocused_jdkrj","steppersDisabled":"number-input__steppersDisabled_jdkrj"};
6
6
 
7
7
  module.exports = defaultColors;
8
8
  //# sourceMappingURL=default.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"default.module.css.js","sources":["../../src/components/steppers/default.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/no-typography-index.css';\n\n.separator {\n background-color: var(--color-light-neutral-translucent-300);\n}\n\n.steppers {\n background-color: var(--color-light-neutral-translucent-0);\n}\n\n.steppersFocused,\n.steppersDisabled {\n background-color: var(--color-light-neutral-translucent-200);\n}\n"],"names":[],"mappings":";;;;AAEgB,oBAAe,CAAC,WAAW,CAAC,+BAA+B,CAAC,UAAU,CAAC,8BAA8B,CAAC,iBAAiB,CAAC,qCAAqC,CAAC,kBAAkB,CAAC,sCAAsC,CAAC;;;;"}
1
+ {"version":3,"file":"default.module.css.js","sources":["../../src/components/steppers/default.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/index.css';\n\n.separator {\n background-color: var(--color-light-neutral-translucent-300);\n}\n\n.steppers {\n background-color: var(--color-light-neutral-translucent-0);\n}\n\n.steppersFocused,\n.steppersDisabled {\n background-color: var(--color-light-neutral-translucent-200);\n}\n"],"names":[],"mappings":";;;;AAEgB,oBAAe,CAAC,WAAW,CAAC,+BAA+B,CAAC,UAAU,CAAC,8BAA8B,CAAC,iBAAiB,CAAC,qCAAqC,CAAC,kBAAkB,CAAC,sCAAsC,CAAC;;;;"}
@@ -7,7 +7,7 @@
7
7
  --gap-4-neg: var(--gap-2xs-neg);
8
8
  --gap-8-neg: var(--gap-xs-neg);
9
9
  }
10
- .number-input__component_abjt3 {
10
+ .number-input__component_v3gp7 {
11
11
  display: flex;
12
12
  flex-flow: row nowrap;
13
13
  align-items: center;
@@ -15,21 +15,21 @@
15
15
  transition: background-color 0.2s ease;
16
16
  overflow: visible;
17
17
  }
18
- .number-input__separator_abjt3 {
18
+ .number-input__separator_v3gp7 {
19
19
  height: 18px;
20
20
  width: 1px;
21
21
  }
22
- .number-input__button_abjt3 {
22
+ .number-input__button_v3gp7 {
23
23
  width: 40px;
24
24
  height: 40px;
25
25
  }
26
- .number-input__size-40_abjt3 {
26
+ .number-input__size-40_v3gp7 {
27
27
  margin-right: var(--gap-8-neg);
28
28
  height: 32px;
29
29
  }
30
- .number-input__size-48_abjt3 {
30
+ .number-input__size-48_v3gp7 {
31
31
  margin-right: var(--gap-8-neg);
32
32
  }
33
- .number-input__size-56_abjt3 {
33
+ .number-input__size-56_v3gp7 {
34
34
  margin-right: var(--gap-4-neg);
35
35
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"component":"number-input__component_abjt3","separator":"number-input__separator_abjt3","button":"number-input__button_abjt3","size-40":"number-input__size-40_abjt3","size-48":"number-input__size-48_abjt3","size-56":"number-input__size-56_abjt3"};
5
+ var styles = {"component":"number-input__component_v3gp7","separator":"number-input__separator_v3gp7","button":"number-input__button_v3gp7","size-40":"number-input__size-40_v3gp7","size-48":"number-input__size-48_v3gp7","size-56":"number-input__size-56_v3gp7"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.module.css.js","sources":["../../src/components/steppers/index.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/no-typography-index.css';\n\n.component {\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n border-radius: var(--border-radius-6);\n transition: background-color 0.2s ease;\n overflow: visible;\n}\n\n.separator {\n height: 18px;\n width: 1px;\n}\n\n.button {\n width: 40px;\n height: 40px;\n}\n\n.size-40 {\n margin-right: var(--gap-8-neg);\n height: 32px;\n}\n\n.size-48 {\n margin-right: var(--gap-8-neg);\n}\n\n.size-56 {\n margin-right: var(--gap-4-neg);\n}\n"],"names":[],"mappings":";;;;AAEgB,aAAe,CAAC,WAAW,CAAC,+BAA+B,CAAC,WAAW,CAAC,+BAA+B,CAAC,QAAQ,CAAC,4BAA4B,CAAC,SAAS,CAAC,6BAA6B,CAAC,SAAS,CAAC,6BAA6B,CAAC,SAAS,CAAC,6BAA6B,CAAC;;;;"}
1
+ {"version":3,"file":"index.module.css.js","sources":["../../src/components/steppers/index.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/index.css';\n\n.component {\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n border-radius: var(--border-radius-6);\n transition: background-color 0.2s ease;\n overflow: visible;\n}\n\n.separator {\n height: 18px;\n width: 1px;\n}\n\n.button {\n width: 40px;\n height: 40px;\n}\n\n.size-40 {\n margin-right: var(--gap-8-neg);\n height: 32px;\n}\n\n.size-48 {\n margin-right: var(--gap-8-neg);\n}\n\n.size-56 {\n margin-right: var(--gap-4-neg);\n}\n"],"names":[],"mappings":";;;;AAEgB,aAAe,CAAC,WAAW,CAAC,+BAA+B,CAAC,WAAW,CAAC,+BAA+B,CAAC,QAAQ,CAAC,4BAA4B,CAAC,SAAS,CAAC,6BAA6B,CAAC,SAAS,CAAC,6BAA6B,CAAC,SAAS,CAAC,6BAA6B,CAAC;;;;"}
@@ -2,13 +2,13 @@
2
2
  --color-light-neutral-translucent-0-inverted: rgba(214, 214, 229, 0.07);
3
3
  --color-light-neutral-translucent-300-inverted: rgba(222, 222, 238, 0.13);
4
4
  }
5
- .number-input__separator_1fkh7 {
5
+ .number-input__separator_nlyz2 {
6
6
  background-color: var(--color-light-neutral-translucent-300-inverted);
7
7
  }
8
- .number-input__steppers_1fkh7 {
8
+ .number-input__steppers_nlyz2 {
9
9
  background-color: var(--color-light-neutral-translucent-0-inverted);
10
10
  }
11
- .number-input__steppersFocused_1fkh7,
12
- .number-input__steppersDisabled_1fkh7 {
11
+ .number-input__steppersFocused_nlyz2,
12
+ .number-input__steppersDisabled_nlyz2 {
13
13
  background-color: var(--color-light-neutral-translucent-300-inverted);
14
14
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./inverted.css');
4
4
 
5
- var invertedColors = {"separator":"number-input__separator_1fkh7","steppers":"number-input__steppers_1fkh7","steppersFocused":"number-input__steppersFocused_1fkh7","steppersDisabled":"number-input__steppersDisabled_1fkh7"};
5
+ var invertedColors = {"separator":"number-input__separator_nlyz2","steppers":"number-input__steppers_nlyz2","steppersFocused":"number-input__steppersFocused_nlyz2","steppersDisabled":"number-input__steppersDisabled_nlyz2"};
6
6
 
7
7
  module.exports = invertedColors;
8
8
  //# sourceMappingURL=inverted.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inverted.module.css.js","sources":["../../src/components/steppers/inverted.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/no-typography-index.css';\n\n.separator {\n background-color: var(--color-light-neutral-translucent-300-inverted);\n}\n\n.steppers {\n background-color: var(--color-light-neutral-translucent-0-inverted);\n}\n\n.steppersFocused,\n.steppersDisabled {\n background-color: var(--color-light-neutral-translucent-300-inverted);\n}\n"],"names":[],"mappings":";;;;AAEgB,qBAAe,CAAC,WAAW,CAAC,+BAA+B,CAAC,UAAU,CAAC,8BAA8B,CAAC,iBAAiB,CAAC,qCAAqC,CAAC,kBAAkB,CAAC,sCAAsC,CAAC;;;;"}
1
+ {"version":3,"file":"inverted.module.css.js","sources":["../../src/components/steppers/inverted.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/index.css';\n\n.separator {\n background-color: var(--color-light-neutral-translucent-300-inverted);\n}\n\n.steppers {\n background-color: var(--color-light-neutral-translucent-0-inverted);\n}\n\n.steppersFocused,\n.steppersDisabled {\n background-color: var(--color-light-neutral-translucent-300-inverted);\n}\n"],"names":[],"mappings":";;;;AAEgB,qBAAe,CAAC,WAAW,CAAC,+BAA+B,CAAC,UAAU,CAAC,8BAA8B,CAAC,iBAAiB,CAAC,qCAAqC,CAAC,kBAAkB,CAAC,sCAAsC,CAAC;;;;"}
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type NumberInputProps } from './components/number-input';
3
- export declare type NumberInputResponsiveProps = Omit<NumberInputProps, 'Input' | 'view'>;
3
+ export type NumberInputResponsiveProps = Omit<NumberInputProps, 'Input' | 'view'>;
4
4
  export declare const NumberInputResponsive: React.ForwardRefExoticComponent<NumberInputResponsiveProps & React.RefAttributes<HTMLInputElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../../../src/components/number-input/Component.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n type FocusEvent,\n forwardRef,\n type ForwardRefExoticComponent,\n Fragment,\n type RefAttributes,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { type MaskitoOptions, maskitoTransform } from '@maskito/core';\nimport { useMaskito } from '@maskito/react';\n\nimport { type InputProps } from '@alfalab/core-components-input';\nimport { fnUtils, isIOS } from '@alfalab/core-components-shared';\n\nimport {\n createMaskOptions,\n getMinMaxOrDefault,\n MAX_DIGITS,\n MINUS_SIGN,\n parseNumber,\n stringifyNumberWithoutExp,\n} from '../../utils';\nimport { Steppers } from '../steppers';\n\nexport interface NumberInputProps\n extends Omit<InputProps, 'value' | 'onChange' | 'type' | 'defaultValue' | 'dataTestId'> {\n /**\n * Значение поля ввода\n */\n value?: string | number | null;\n\n /**\n * Значение по-умолчанию\n */\n defaultValue?: string | number | null;\n\n /**\n * Разделитель ',' или '.'\n */\n separator?: '.' | ',';\n\n /**\n * Количество символов после разделителя\n * Если указан проп step, то всегда 0\n */\n fractionLength?: number;\n\n /**\n * Шаг инкремента/декремента. Используйте только целочисленные значения\n */\n step?: number;\n\n /**\n * Минимальное значение\n * @default Number.MIN_SAFE_INTEGER\n */\n min?: number;\n\n /**\n * Максимальное значение\n * @default Number.MAX_SAFE_INTEGER\n */\n max?: number;\n\n /**\n * Отображение компонента в мобильном или десктопном виде\n */\n view?: 'desktop' | 'mobile';\n\n /**\n * Компонент инпута\n */\n Input: ForwardRefExoticComponent<InputProps & RefAttributes<HTMLInputElement>>;\n\n /**\n * Обработчик события изменения значения\n */\n onChange?: (e: ChangeEvent<HTMLInputElement> | null, payload: { value: number | null }) => void;\n\n /**\n * Идентификатор для систем автоматизированного тестирования.\n * Для кнопки инкремента используется модификатор -increment-button, декремента -decrement-button\n */\n dataTestId?: string;\n}\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value: propValue,\n onChange,\n separator = ',',\n fractionLength = MAX_DIGITS,\n defaultValue,\n Input,\n min: minProp,\n max: maxProp,\n rightAddons,\n dataTestId,\n disabled,\n onBlur,\n onFocus,\n view,\n step: stepProp,\n size = 48,\n disableUserInput,\n clear: clearProp,\n colors = 'default',\n ...restProps\n },\n ref,\n ) => {\n const { readOnly } = restProps;\n const { min, max } = getMinMaxOrDefault({ minProp, maxProp });\n const withStepper = stepProp !== undefined;\n\n const maskOptions: MaskitoOptions = useMemo(\n () =>\n createMaskOptions({\n separator,\n fractionLength: withStepper ? 0 : fractionLength,\n min,\n max,\n }),\n [separator, fractionLength, min, max, withStepper],\n );\n\n const [focused, setFocused] = useState(false);\n const [value, setValue] = useState(() => {\n if (defaultValue == null) {\n return withStepper ? fnUtils.clamp(0, min, max).toString() : '';\n }\n\n return fnUtils\n .clamp(\n parseNumber(maskitoTransform(defaultValue.toString(), maskOptions)),\n min,\n max,\n )\n .toString();\n });\n\n const maskRef = useMaskito({ options: maskOptions });\n\n useEffect(() => {\n if (propValue !== undefined) {\n setValue((prev) => {\n const parsedNumber = parseNumber(propValue);\n\n if (parsedNumber !== parseNumber(prev)) {\n return maskitoTransform(\n stringifyNumberWithoutExp(parsedNumber),\n maskOptions,\n );\n }\n\n return prev;\n });\n }\n }, [maskOptions, propValue, separator]);\n\n const getMaxLength = (valueString: string) => {\n const hasSeparator = valueString?.includes(separator);\n const hasSigns = valueString?.startsWith(MINUS_SIGN);\n\n return MAX_DIGITS + (hasSeparator ? 1 : 0) + (hasSigns ? 1 : 0);\n };\n\n const getStep = () => Math.round(stepProp ?? 1);\n\n const changeValue = (\n event: ChangeEvent<HTMLInputElement> | null,\n newValue: number | null,\n ) => {\n const isNaNValue = Number.isNaN(newValue);\n const valueString = event?.target.value ?? newValue?.toString() ?? '';\n\n setValue(valueString);\n\n if (valueString === '' || !isNaNValue) {\n onChange?.(event, {\n value: isNaNValue ? null : newValue,\n });\n }\n };\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const valueString = event.target.value;\n\n changeValue(event, parseNumber(valueString));\n };\n\n const handleIncrement = () => {\n const parsed = parseNumber(value);\n const nextValue = maskitoTransform(\n (Number.isNaN(parsed) ? min : parsed + getStep()).toString(),\n maskOptions,\n );\n\n changeValue(null, parseNumber(nextValue));\n };\n\n const handleDecrement = () => {\n const parsed = parseNumber(value);\n const nextValue = maskitoTransform(\n (Number.isNaN(parsed) ? max : parsed - getStep()).toString(),\n maskOptions,\n );\n\n changeValue(null, parseNumber(nextValue));\n };\n\n const handleFocus = (e: FocusEvent<HTMLInputElement>) => {\n onFocus?.(e);\n\n if (!disableUserInput) {\n setFocused(true);\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n setFocused(false);\n };\n\n const renderRightAddons = () => (\n <Fragment>\n {rightAddons}\n {withStepper && !disabled && !readOnly && (\n <Steppers\n colors={colors}\n dataTestId={dataTestId}\n disabled={disabled}\n focused={focused}\n value={parseNumber(value)}\n min={min}\n max={max}\n onIncrement={handleIncrement}\n onDecrement={handleDecrement}\n size={size}\n />\n )}\n </Fragment>\n );\n\n return (\n <Input\n maxLength={getMaxLength(value)}\n {...restProps}\n // В iOS в цифровой клавиатуре невозможно ввести минус.\n inputMode={min < 0 && isIOS() ? 'text' : 'decimal'}\n ref={mergeRefs([ref, maskRef])}\n value={value}\n onInput={handleChange}\n dataTestId={dataTestId}\n colors={colors}\n disabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n size={size}\n disableUserInput={disableUserInput}\n clear={clearProp && /\\d/.test(value)}\n rightAddons={renderRightAddons()}\n />\n );\n },\n);\n"],"names":["forwardRef","MAX_DIGITS","__rest","getMinMaxOrDefault","useMemo","createMaskOptions","useState","fnUtils","parseNumber","maskitoTransform","useMaskito","useEffect","stringifyNumberWithoutExp","MINUS_SIGN","React","Fragment","Steppers","__assign","isIOS","mergeRefs"],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["../../../src/components/number-input/Component.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n type FocusEvent,\n forwardRef,\n type ForwardRefExoticComponent,\n Fragment,\n type RefAttributes,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { type MaskitoOptions, maskitoTransform } from '@maskito/core';\nimport { useMaskito } from '@maskito/react';\n\nimport { type InputProps } from '@alfalab/core-components-input';\nimport { fnUtils, isIOS } from '@alfalab/core-components-shared';\n\nimport {\n createMaskOptions,\n getMinMaxOrDefault,\n MAX_DIGITS,\n MINUS_SIGN,\n parseNumber,\n stringifyNumberWithoutExp,\n} from '../../utils';\nimport { Steppers } from '../steppers';\n\nexport interface NumberInputProps\n extends Omit<InputProps, 'value' | 'onChange' | 'type' | 'defaultValue' | 'dataTestId'> {\n /**\n * Значение поля ввода\n */\n value?: string | number | null;\n\n /**\n * Значение по-умолчанию\n */\n defaultValue?: string | number | null;\n\n /**\n * Разделитель ',' или '.'\n */\n separator?: '.' | ',';\n\n /**\n * Количество символов после разделителя\n * Если указан проп step, то всегда 0\n */\n fractionLength?: number;\n\n /**\n * Шаг инкремента/декремента. Используйте только целочисленные значения\n */\n step?: number;\n\n /**\n * Минимальное значение\n * @default Number.MIN_SAFE_INTEGER\n */\n min?: number;\n\n /**\n * Максимальное значение\n * @default Number.MAX_SAFE_INTEGER\n */\n max?: number;\n\n /**\n * Отображение компонента в мобильном или десктопном виде\n */\n view?: 'desktop' | 'mobile';\n\n /**\n * Компонент инпута\n */\n Input: ForwardRefExoticComponent<InputProps & RefAttributes<HTMLInputElement>>;\n\n /**\n * Обработчик события изменения значения\n */\n onChange?: (e: ChangeEvent<HTMLInputElement> | null, payload: { value: number | null }) => void;\n\n /**\n * Идентификатор для систем автоматизированного тестирования.\n * Для кнопки инкремента используется модификатор -increment-button, декремента -decrement-button\n */\n dataTestId?: string;\n}\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value: propValue,\n onChange,\n separator = ',',\n fractionLength = MAX_DIGITS,\n defaultValue,\n Input,\n min: minProp,\n max: maxProp,\n rightAddons,\n dataTestId,\n disabled,\n onBlur,\n onFocus,\n view,\n step: stepProp,\n size = 48,\n disableUserInput,\n clear: clearProp,\n colors = 'default',\n ...restProps\n },\n ref,\n ) => {\n const { readOnly } = restProps;\n const { min, max } = getMinMaxOrDefault({ minProp, maxProp });\n const withStepper = stepProp !== undefined;\n\n const maskOptions: MaskitoOptions = useMemo(\n () =>\n createMaskOptions({\n separator,\n fractionLength: withStepper ? 0 : fractionLength,\n min,\n max,\n }),\n [separator, fractionLength, min, max, withStepper],\n );\n\n const [focused, setFocused] = useState(false);\n const [value, setValue] = useState(() => {\n if (defaultValue == null) {\n return withStepper ? fnUtils.clamp(0, min, max).toString() : '';\n }\n\n return fnUtils\n .clamp(\n parseNumber(maskitoTransform(defaultValue.toString(), maskOptions)),\n min,\n max,\n )\n .toString();\n });\n\n const maskRef = useMaskito({ options: maskOptions });\n\n useEffect(() => {\n if (propValue !== undefined) {\n setValue((prev) => {\n const parsedNumber = parseNumber(propValue);\n\n if (parsedNumber !== parseNumber(prev)) {\n return maskitoTransform(\n stringifyNumberWithoutExp(parsedNumber),\n maskOptions,\n );\n }\n\n return prev;\n });\n }\n }, [maskOptions, propValue, separator]);\n\n const getMaxLength = (valueString: string) => {\n const hasSeparator = valueString?.includes(separator);\n const hasSigns = valueString?.startsWith(MINUS_SIGN);\n\n return MAX_DIGITS + (hasSeparator ? 1 : 0) + (hasSigns ? 1 : 0);\n };\n\n const getStep = () => Math.round(stepProp ?? 1);\n\n const changeValue = (\n event: ChangeEvent<HTMLInputElement> | null,\n newValue: number | null,\n ) => {\n const isNaNValue = Number.isNaN(newValue);\n const valueString = event?.target.value ?? newValue?.toString() ?? '';\n\n setValue(valueString);\n\n if (valueString === '' || !isNaNValue) {\n onChange?.(event, {\n value: isNaNValue ? null : newValue,\n });\n }\n };\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const valueString = event.target.value;\n\n changeValue(event, parseNumber(valueString));\n };\n\n const handleIncrement = () => {\n const parsed = parseNumber(value);\n const nextValue = maskitoTransform(\n (Number.isNaN(parsed) ? min : parsed + getStep()).toString(),\n maskOptions,\n );\n\n changeValue(null, parseNumber(nextValue));\n };\n\n const handleDecrement = () => {\n const parsed = parseNumber(value);\n const nextValue = maskitoTransform(\n (Number.isNaN(parsed) ? max : parsed - getStep()).toString(),\n maskOptions,\n );\n\n changeValue(null, parseNumber(nextValue));\n };\n\n const handleFocus = (e: FocusEvent<HTMLInputElement>) => {\n onFocus?.(e);\n\n if (!disableUserInput) {\n setFocused(true);\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n setFocused(false);\n };\n\n const renderRightAddons = () => (\n <Fragment>\n {rightAddons}\n {withStepper && !disabled && !readOnly && (\n <Steppers\n colors={colors}\n dataTestId={dataTestId}\n disabled={disabled}\n focused={focused}\n value={parseNumber(value)}\n min={min}\n max={max}\n onIncrement={handleIncrement}\n onDecrement={handleDecrement}\n size={size}\n />\n )}\n </Fragment>\n );\n\n return (\n <Input\n maxLength={getMaxLength(value)}\n {...restProps}\n // В iOS в цифровой клавиатуре невозможно ввести минус.\n inputMode={min < 0 && isIOS() ? 'text' : 'decimal'}\n ref={mergeRefs([ref, maskRef])}\n value={value}\n onInput={handleChange}\n dataTestId={dataTestId}\n colors={colors}\n disabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n size={size}\n disableUserInput={disableUserInput}\n clear={clearProp && /\\d/.test(value)}\n rightAddons={renderRightAddons()}\n />\n );\n },\n);\n"],"names":["forwardRef","MAX_DIGITS","__rest","getMinMaxOrDefault","useMemo","createMaskOptions","useState","fnUtils","parseNumber","maskitoTransform","useMaskito","useEffect","stringifyNumberWithoutExp","MINUS_SIGN","React","Fragment","Steppers","__assign","isIOS","mergeRefs"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { type FC } from 'react';
2
2
  import { type InputProps } from '@alfalab/core-components-input/cssm';
3
- export declare type SteppersProps = {
3
+ export type SteppersProps = {
4
4
  value: number;
5
5
  min: number;
6
6
  max: number;
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type NumberInputProps } from '../components/number-input';
3
- export declare type NumberInputDesktopProps = Omit<NumberInputProps, 'Input' | 'breakpoint' | 'view'>;
3
+ export type NumberInputDesktopProps = Omit<NumberInputProps, 'Input' | 'breakpoint' | 'view'>;
4
4
  export declare const NumberInputDesktop: React.ForwardRefExoticComponent<NumberInputDesktopProps & React.RefAttributes<HTMLInputElement>>;
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type NumberInputProps } from '../components/number-input';
3
- export declare type NumberInputMobileProps = Omit<NumberInputProps, 'Input' | 'breakpoint' | 'view'>;
3
+ export type NumberInputMobileProps = Omit<NumberInputProps, 'Input' | 'breakpoint' | 'view'>;
4
4
  export declare const NumberInputMobile: React.ForwardRefExoticComponent<NumberInputMobileProps & React.RefAttributes<HTMLInputElement>>;
package/cssm/utils.d.ts CHANGED
@@ -34,8 +34,8 @@ export declare function getNumberInputTestIds(dataTestId: string): {
34
34
  * @description Если значение не передано, вернется { Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER }
35
35
  */
36
36
  export declare const getMinMaxOrDefault: ({ minProp, maxProp, }: {
37
- minProp?: number | undefined;
38
- maxProp?: number | undefined;
37
+ minProp?: number;
38
+ maxProp?: number;
39
39
  }) => {
40
40
  min: number;
41
41
  max: number;
package/cssm/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../src/utils.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport {\n type MaskitoOptions,\n type MaskitoPlugin,\n type MaskitoPostprocessor,\n type MaskitoPreprocessor,\n maskitoTransform,\n} from '@maskito/core';\n\nimport { fnUtils, getDataTestId } from '@alfalab/core-components-shared';\n\nimport { MAX_SAFE_INTEGER, MIN_SAFE_INTEGER } from './constants/min-max-safe-integer';\n\nexport const MINUS_SIGN = '-';\nexport const SEPARATORS = [',', '.'];\nexport const MAX_DIGITS = 15; // с 16 уже упираемся в MAX_SAFE_INTEGER\n\nexport function parseNumber(value: string | number | null = '') {\n if (typeof value === 'number') return value;\n\n const pseudoSeparatorsRegExp = new RegExp(`[${SEPARATORS.join('')}]`, 'gi');\n\n return value\n ? parseFloat(\n value\n .replace(new RegExp(`[^${MINUS_SIGN}${SEPARATORS.join('')}0-9]`, 'gi'), '')\n .replace(pseudoSeparatorsRegExp, '.'),\n )\n : NaN;\n}\n\n/**\n * Преобразовать число в строку с заменой экспоненты на десятичную дробь\n */\nexport function stringifyNumberWithoutExp(value: number): string {\n const valueString = String(value);\n const [numberPart, expPart] = valueString.split('e-');\n\n let valueWithoutExp = valueString;\n\n if (expPart) {\n const [, fractionalPart] = numberPart.split('.');\n const decimalDigits = Number(expPart) + (fractionalPart?.length || 0);\n\n valueWithoutExp = value.toFixed(decimalDigits);\n }\n\n return valueWithoutExp;\n}\n\nconst getNumberRegExp = (min: number, fractionLength: number): RegExp => {\n let reStr = '[0-9]*';\n\n if (min < 0) {\n reStr = `(\\\\${MINUS_SIGN})?${reStr}`;\n }\n\n if (fractionLength !== 0) {\n reStr = `${reStr}[${SEPARATORS.map((s) => `\\\\${s}`).join('')}]?[0-9]{0,${\n fractionLength || MAX_DIGITS\n }}`;\n }\n\n return new RegExp(`^${reStr}$`);\n};\n\nexport function createMaskOptions({\n separator,\n fractionLength,\n min,\n max,\n}: {\n separator: string;\n fractionLength: number;\n min: number;\n max: number;\n}): MaskitoOptions {\n return {\n mask: getNumberRegExp(min, fractionLength),\n preprocessors: [\n createPseudoSeparatorPreprocessor(separator),\n createNotEmptyIntegerPartPreprocessor({ separator, fractionLength }),\n createZeroFractionLengthPreprocessor(fractionLength, separator),\n createRepeatedSeparatorPreprocessor(separator),\n ],\n postprocessors: [\n createLeadingZeroesValidationPostprocessor(separator),\n createMinMaxPostprocessor({ min, max, separator }),\n ],\n plugins: [createNotEmptyPartsPlugin(separator), createMinMaxPlugin({ min, max })],\n };\n}\n\n/**\n * Заполняет целочисленную часть при вводе separator.\n * @example Type , => 0,\n */\nfunction createNotEmptyIntegerPartPreprocessor({\n separator,\n fractionLength,\n}: {\n separator: string;\n fractionLength: number;\n}): MaskitoPreprocessor {\n const startWithDecimalSepRegExp = new RegExp(`^\\\\D*\\\\${separator}`);\n\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n const [from] = selection;\n\n if (\n fractionLength <= 0 ||\n value.includes(separator) ||\n !data.match(startWithDecimalSepRegExp)\n ) {\n return { elementState, data };\n }\n\n const digitsBeforeCursor = value.slice(0, from).match(/\\d+/);\n\n return {\n elementState,\n data: digitsBeforeCursor ? data : `0${data}`,\n };\n };\n}\n\n/**\n * Не позволяет вводить невалидный разделитель.\n */\nfunction createPseudoSeparatorPreprocessor(separator: string): MaskitoPreprocessor {\n const pseudoSeparatorsRegExp = new RegExp(`[${SEPARATORS.join('')}]`, 'gi');\n\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n\n return {\n elementState: {\n selection,\n value: value.replace(pseudoSeparatorsRegExp, separator),\n },\n data: data.replace(pseudoSeparatorsRegExp, separator),\n };\n };\n}\n\n/**\n * Помогает верно обрезать значения при вставке, если fractionLength===0\n * @example paste 123,123 -> 123\n */\nfunction createZeroFractionLengthPreprocessor(\n fractionLength: number,\n separator: string,\n): MaskitoPreprocessor {\n if (fractionLength > 0) {\n return (state) => state;\n }\n\n const decimalPartRegExp = new RegExp(`\\\\${separator}.*$`, 'g');\n\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n const [from, to] = selection;\n const newValue = value.replace(decimalPartRegExp, '');\n\n return {\n elementState: {\n selection: [Math.min(from, newValue.length), Math.min(to, newValue.length)],\n value: newValue,\n },\n data: data.replace(decimalPartRegExp, ''),\n };\n };\n}\n\n/**\n * Запрещает вводить второй сепаратор\n */\nfunction createRepeatedSeparatorPreprocessor(separator: string): MaskitoPreprocessor {\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n const [from, to] = selection;\n\n return {\n elementState,\n data:\n !value.includes(separator) || value.slice(from, to + 1).includes(separator)\n ? data\n : data.replace(new RegExp(`\\\\${separator}`), ''),\n };\n };\n}\n\n/**\n * Удаляет лишние нули в начале целой части.\n * @example 0,|00005 => Backspace => |5\n * @example -0,|00005 => Backspace => -|5\n * @example \"000000\" => 0|\n * @example 0| => Type \"5\" => 5|\n */\nfunction createLeadingZeroesValidationPostprocessor(separator: string): MaskitoPostprocessor {\n const trimLeadingZeroes = (value: string): string =>\n value\n .replace(new RegExp('^(\\\\D+)?0+(?=0)'), '$1')\n .replace(new RegExp('^(\\\\D+)?0+(?=[1-9])'), '$1');\n\n const countTrimmedZeroesBefore = (value: string, index: number): number => {\n const valueBefore = value.slice(0, index);\n const followedByZero = value.slice(index).startsWith('0');\n\n return (\n valueBefore.length - trimLeadingZeroes(valueBefore).length + (followedByZero ? 1 : 0)\n );\n };\n\n return ({ value, selection }) => {\n const [from, to] = selection;\n const hasSeparator = value.includes(separator);\n const [integerPart, decimalPart = ''] = value.split(separator);\n const zeroTrimmedIntegerPart = trimLeadingZeroes(integerPart);\n\n if (integerPart === zeroTrimmedIntegerPart) {\n return { value, selection };\n }\n\n const newFrom = from - countTrimmedZeroesBefore(value, from);\n const newTo = to - countTrimmedZeroesBefore(value, to);\n\n return {\n value: zeroTrimmedIntegerPart + (hasSeparator ? separator : '') + decimalPart,\n selection: [Math.max(newFrom, 0), Math.max(newTo, 0)],\n };\n };\n}\n\n/**\n * Валидирует значение с учетом min max значений.\n * Работает совместно с createMinMaxPlugin\n */\nfunction createMinMaxPostprocessor({\n min,\n max,\n separator,\n}: {\n min: number;\n max: number;\n separator: string;\n}): MaskitoPostprocessor {\n return ({ value, selection }) => {\n const parsedNumber = parseNumber(value);\n\n const limitedValue =\n /**\n * Здесь невозможно ограничить нижнюю границу, если пользователь вводит положительное число.\n * То же самое для верхней границы и отрицательного числа.\n * Если min=5, то без этого условия не получится ввести 40, похожая ситуация и с отрицательным max\n */\n parsedNumber > 0 ? Math.min(parsedNumber, max) : Math.max(parsedNumber, min);\n\n if (!Number.isNaN(parsedNumber) && limitedValue !== parsedNumber) {\n const newValue = `${limitedValue}`.replace('.', separator);\n\n return {\n value: newValue,\n selection: [newValue.length, newValue.length],\n };\n }\n\n return {\n value,\n selection,\n };\n };\n}\n\nexport function createMinMaxPlugin({ min, max }: { min: number; max: number }): MaskitoPlugin {\n return (element, options) => {\n const listener = () => {\n const parsedNumber = parseNumber(element.value);\n\n const clampedNumber = fnUtils.clamp(parsedNumber, min, max);\n\n if (!Number.isNaN(parsedNumber) && parsedNumber !== clampedNumber) {\n element.value = maskitoTransform(stringifyNumberWithoutExp(clampedNumber), options);\n element.dispatchEvent(new Event('input', { bubbles: true }));\n }\n };\n\n const evListenerOptions = { capture: true };\n\n element.addEventListener('blur', listener, evListenerOptions);\n\n return () => element.removeEventListener('blur', listener, evListenerOptions);\n };\n}\n\nexport function createNotEmptyPartsPlugin(separator: string): MaskitoPlugin {\n return (element) => {\n const listener = () => {\n const newValue = element.value\n // 0,9000000 -> 0,9\n .replace(new RegExp(`(\\\\${separator}\\\\d*?)(0+$)`), '$1')\n // ,2 => 0,2\n .replace(new RegExp(`^(\\\\D+)?\\\\${separator}`), `$10${separator}`)\n // 0, -> 0\n .replace(new RegExp(`\\\\${separator}$`), '')\n // -0 -> 0\n .replace(new RegExp(`^${MINUS_SIGN}0$`), '0')\n // - -> ''\n .replace(new RegExp(`^${MINUS_SIGN}$`), '');\n\n if (newValue !== element.value) {\n element.value = newValue;\n element.dispatchEvent(new Event('input', { bubbles: true }));\n }\n };\n\n const evListenerOptions = { capture: true };\n\n element.addEventListener('blur', listener, evListenerOptions);\n\n return () => element.removeEventListener('blur', listener, evListenerOptions);\n };\n}\n\nexport function getNumberInputTestIds(dataTestId: string) {\n return {\n input: dataTestId,\n inputWrapper: getDataTestId(dataTestId, 'form-control'),\n inputWrapperInner: getDataTestId(dataTestId, 'form-control-inner'),\n leftAddons: getDataTestId(dataTestId, 'form-control-left-addons'),\n rightAddons: getDataTestId(dataTestId, 'form-control-right-addons'),\n error: getDataTestId(dataTestId, 'form-control-error-message'),\n hint: getDataTestId(dataTestId, 'form-control-hint'),\n decrementButton: getDataTestId(dataTestId, 'decrement-button'),\n incrementButton: getDataTestId(dataTestId, 'increment-button'),\n };\n}\n\n/**\n * Определение минимального / максимального значения\n * @description Если значение не передано, вернется { Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER }\n */\nexport const getMinMaxOrDefault = ({\n minProp,\n maxProp,\n}: {\n minProp?: number;\n maxProp?: number;\n}) => {\n const min = Math.max(MIN_SAFE_INTEGER, minProp ?? MIN_SAFE_INTEGER);\n const max = Math.min(MAX_SAFE_INTEGER, maxProp ?? MAX_SAFE_INTEGER);\n\n return { min, max };\n};\n"],"names":["fnUtils","maskitoTransform","getDataTestId","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../src/utils.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport {\n type MaskitoOptions,\n type MaskitoPlugin,\n type MaskitoPostprocessor,\n type MaskitoPreprocessor,\n maskitoTransform,\n} from '@maskito/core';\n\nimport { fnUtils, getDataTestId } from '@alfalab/core-components-shared';\n\nimport { MAX_SAFE_INTEGER, MIN_SAFE_INTEGER } from './constants/min-max-safe-integer';\n\nexport const MINUS_SIGN = '-';\nexport const SEPARATORS = [',', '.'];\nexport const MAX_DIGITS = 15; // с 16 уже упираемся в MAX_SAFE_INTEGER\n\nexport function parseNumber(value: string | number | null = '') {\n if (typeof value === 'number') return value;\n\n const pseudoSeparatorsRegExp = new RegExp(`[${SEPARATORS.join('')}]`, 'gi');\n\n return value\n ? parseFloat(\n value\n .replace(new RegExp(`[^${MINUS_SIGN}${SEPARATORS.join('')}0-9]`, 'gi'), '')\n .replace(pseudoSeparatorsRegExp, '.'),\n )\n : NaN;\n}\n\n/**\n * Преобразовать число в строку с заменой экспоненты на десятичную дробь\n */\nexport function stringifyNumberWithoutExp(value: number): string {\n const valueString = String(value);\n const [numberPart, expPart] = valueString.split('e-');\n\n let valueWithoutExp = valueString;\n\n if (expPart) {\n const [, fractionalPart] = numberPart.split('.');\n const decimalDigits = Number(expPart) + (fractionalPart?.length || 0);\n\n valueWithoutExp = value.toFixed(decimalDigits);\n }\n\n return valueWithoutExp;\n}\n\nconst getNumberRegExp = (min: number, fractionLength: number): RegExp => {\n let reStr = '[0-9]*';\n\n if (min < 0) {\n reStr = `(\\\\${MINUS_SIGN})?${reStr}`;\n }\n\n if (fractionLength !== 0) {\n reStr = `${reStr}[${SEPARATORS.map((s) => `\\\\${s}`).join('')}]?[0-9]{0,${\n fractionLength || MAX_DIGITS\n }}`;\n }\n\n return new RegExp(`^${reStr}$`);\n};\n\nexport function createMaskOptions({\n separator,\n fractionLength,\n min,\n max,\n}: {\n separator: string;\n fractionLength: number;\n min: number;\n max: number;\n}): MaskitoOptions {\n return {\n mask: getNumberRegExp(min, fractionLength),\n preprocessors: [\n createPseudoSeparatorPreprocessor(separator),\n createNotEmptyIntegerPartPreprocessor({ separator, fractionLength }),\n createZeroFractionLengthPreprocessor(fractionLength, separator),\n createRepeatedSeparatorPreprocessor(separator),\n ],\n postprocessors: [\n createLeadingZeroesValidationPostprocessor(separator),\n createMinMaxPostprocessor({ min, max, separator }),\n ],\n plugins: [createNotEmptyPartsPlugin(separator), createMinMaxPlugin({ min, max })],\n };\n}\n\n/**\n * Заполняет целочисленную часть при вводе separator.\n * @example Type , => 0,\n */\nfunction createNotEmptyIntegerPartPreprocessor({\n separator,\n fractionLength,\n}: {\n separator: string;\n fractionLength: number;\n}): MaskitoPreprocessor {\n const startWithDecimalSepRegExp = new RegExp(`^\\\\D*\\\\${separator}`);\n\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n const [from] = selection;\n\n if (\n fractionLength <= 0 ||\n value.includes(separator) ||\n !data.match(startWithDecimalSepRegExp)\n ) {\n return { elementState, data };\n }\n\n const digitsBeforeCursor = value.slice(0, from).match(/\\d+/);\n\n return {\n elementState,\n data: digitsBeforeCursor ? data : `0${data}`,\n };\n };\n}\n\n/**\n * Не позволяет вводить невалидный разделитель.\n */\nfunction createPseudoSeparatorPreprocessor(separator: string): MaskitoPreprocessor {\n const pseudoSeparatorsRegExp = new RegExp(`[${SEPARATORS.join('')}]`, 'gi');\n\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n\n return {\n elementState: {\n selection,\n value: value.replace(pseudoSeparatorsRegExp, separator),\n },\n data: data.replace(pseudoSeparatorsRegExp, separator),\n };\n };\n}\n\n/**\n * Помогает верно обрезать значения при вставке, если fractionLength===0\n * @example paste 123,123 -> 123\n */\nfunction createZeroFractionLengthPreprocessor(\n fractionLength: number,\n separator: string,\n): MaskitoPreprocessor {\n if (fractionLength > 0) {\n return (state) => state;\n }\n\n const decimalPartRegExp = new RegExp(`\\\\${separator}.*$`, 'g');\n\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n const [from, to] = selection;\n const newValue = value.replace(decimalPartRegExp, '');\n\n return {\n elementState: {\n selection: [Math.min(from, newValue.length), Math.min(to, newValue.length)],\n value: newValue,\n },\n data: data.replace(decimalPartRegExp, ''),\n };\n };\n}\n\n/**\n * Запрещает вводить второй сепаратор\n */\nfunction createRepeatedSeparatorPreprocessor(separator: string): MaskitoPreprocessor {\n return ({ elementState, data }) => {\n const { value, selection } = elementState;\n const [from, to] = selection;\n\n return {\n elementState,\n data:\n !value.includes(separator) || value.slice(from, to + 1).includes(separator)\n ? data\n : data.replace(new RegExp(`\\\\${separator}`), ''),\n };\n };\n}\n\n/**\n * Удаляет лишние нули в начале целой части.\n * @example 0,|00005 => Backspace => |5\n * @example -0,|00005 => Backspace => -|5\n * @example \"000000\" => 0|\n * @example 0| => Type \"5\" => 5|\n */\nfunction createLeadingZeroesValidationPostprocessor(separator: string): MaskitoPostprocessor {\n const trimLeadingZeroes = (value: string): string =>\n value\n .replace(new RegExp('^(\\\\D+)?0+(?=0)'), '$1')\n .replace(new RegExp('^(\\\\D+)?0+(?=[1-9])'), '$1');\n\n const countTrimmedZeroesBefore = (value: string, index: number): number => {\n const valueBefore = value.slice(0, index);\n const followedByZero = value.slice(index).startsWith('0');\n\n return (\n valueBefore.length - trimLeadingZeroes(valueBefore).length + (followedByZero ? 1 : 0)\n );\n };\n\n return ({ value, selection }) => {\n const [from, to] = selection;\n const hasSeparator = value.includes(separator);\n const [integerPart, decimalPart = ''] = value.split(separator);\n const zeroTrimmedIntegerPart = trimLeadingZeroes(integerPart);\n\n if (integerPart === zeroTrimmedIntegerPart) {\n return { value, selection };\n }\n\n const newFrom = from - countTrimmedZeroesBefore(value, from);\n const newTo = to - countTrimmedZeroesBefore(value, to);\n\n return {\n value: zeroTrimmedIntegerPart + (hasSeparator ? separator : '') + decimalPart,\n selection: [Math.max(newFrom, 0), Math.max(newTo, 0)],\n };\n };\n}\n\n/**\n * Валидирует значение с учетом min max значений.\n * Работает совместно с createMinMaxPlugin\n */\nfunction createMinMaxPostprocessor({\n min,\n max,\n separator,\n}: {\n min: number;\n max: number;\n separator: string;\n}): MaskitoPostprocessor {\n return ({ value, selection }) => {\n const parsedNumber = parseNumber(value);\n\n const limitedValue =\n /**\n * Здесь невозможно ограничить нижнюю границу, если пользователь вводит положительное число.\n * То же самое для верхней границы и отрицательного числа.\n * Если min=5, то без этого условия не получится ввести 40, похожая ситуация и с отрицательным max\n */\n parsedNumber > 0 ? Math.min(parsedNumber, max) : Math.max(parsedNumber, min);\n\n if (!Number.isNaN(parsedNumber) && limitedValue !== parsedNumber) {\n const newValue = `${limitedValue}`.replace('.', separator);\n\n return {\n value: newValue,\n selection: [newValue.length, newValue.length],\n };\n }\n\n return {\n value,\n selection,\n };\n };\n}\n\nexport function createMinMaxPlugin({ min, max }: { min: number; max: number }): MaskitoPlugin {\n return (element, options) => {\n const listener = () => {\n const parsedNumber = parseNumber(element.value);\n\n const clampedNumber = fnUtils.clamp(parsedNumber, min, max);\n\n if (!Number.isNaN(parsedNumber) && parsedNumber !== clampedNumber) {\n element.value = maskitoTransform(stringifyNumberWithoutExp(clampedNumber), options);\n element.dispatchEvent(new Event('input', { bubbles: true }));\n }\n };\n\n const evListenerOptions = { capture: true };\n\n element.addEventListener('blur', listener, evListenerOptions);\n\n return () => element.removeEventListener('blur', listener, evListenerOptions);\n };\n}\n\nexport function createNotEmptyPartsPlugin(separator: string): MaskitoPlugin {\n return (element) => {\n const listener = () => {\n const newValue = element.value\n // 0,9000000 -> 0,9\n .replace(new RegExp(`(\\\\${separator}\\\\d*?)(0+$)`), '$1')\n // ,2 => 0,2\n .replace(new RegExp(`^(\\\\D+)?\\\\${separator}`), `$10${separator}`)\n // 0, -> 0\n .replace(new RegExp(`\\\\${separator}$`), '')\n // -0 -> 0\n .replace(new RegExp(`^${MINUS_SIGN}0$`), '0')\n // - -> ''\n .replace(new RegExp(`^${MINUS_SIGN}$`), '');\n\n if (newValue !== element.value) {\n element.value = newValue;\n element.dispatchEvent(new Event('input', { bubbles: true }));\n }\n };\n\n const evListenerOptions = { capture: true };\n\n element.addEventListener('blur', listener, evListenerOptions);\n\n return () => element.removeEventListener('blur', listener, evListenerOptions);\n };\n}\n\nexport function getNumberInputTestIds(dataTestId: string) {\n return {\n input: dataTestId,\n inputWrapper: getDataTestId(dataTestId, 'form-control'),\n inputWrapperInner: getDataTestId(dataTestId, 'form-control-inner'),\n leftAddons: getDataTestId(dataTestId, 'form-control-left-addons'),\n rightAddons: getDataTestId(dataTestId, 'form-control-right-addons'),\n error: getDataTestId(dataTestId, 'form-control-error-message'),\n hint: getDataTestId(dataTestId, 'form-control-hint'),\n decrementButton: getDataTestId(dataTestId, 'decrement-button'),\n incrementButton: getDataTestId(dataTestId, 'increment-button'),\n };\n}\n\n/**\n * Определение минимального / максимального значения\n * @description Если значение не передано, вернется { Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER }\n */\nexport const getMinMaxOrDefault = ({\n minProp,\n maxProp,\n}: {\n minProp?: number;\n maxProp?: number;\n}) => {\n const min = Math.max(MIN_SAFE_INTEGER, minProp ?? MIN_SAFE_INTEGER);\n const max = Math.min(MAX_SAFE_INTEGER, maxProp ?? MAX_SAFE_INTEGER);\n\n return { min, max };\n};\n"],"names":["fnUtils","maskitoTransform","getDataTestId","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type NumberInputProps } from '../components/number-input';
3
- export declare type NumberInputDesktopProps = Omit<NumberInputProps, 'Input' | 'breakpoint' | 'view'>;
3
+ export type NumberInputDesktopProps = Omit<NumberInputProps, 'Input' | 'breakpoint' | 'view'>;
4
4
  export declare const NumberInputDesktop: React.ForwardRefExoticComponent<NumberInputDesktopProps & React.RefAttributes<HTMLInputElement>>;
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { type NumberInputProps } from './components/number-input';
3
- export declare type NumberInputResponsiveProps = Omit<NumberInputProps, 'Input' | 'view'>;
3
+ export type NumberInputResponsiveProps = Omit<NumberInputProps, 'Input' | 'view'>;
4
4
  export declare const NumberInputResponsive: React.ForwardRefExoticComponent<NumberInputResponsiveProps & React.RefAttributes<HTMLInputElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../../../src/components/number-input/Component.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n type FocusEvent,\n forwardRef,\n type ForwardRefExoticComponent,\n Fragment,\n type RefAttributes,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { type MaskitoOptions, maskitoTransform } from '@maskito/core';\nimport { useMaskito } from '@maskito/react';\n\nimport { type InputProps } from '@alfalab/core-components-input';\nimport { fnUtils, isIOS } from '@alfalab/core-components-shared';\n\nimport {\n createMaskOptions,\n getMinMaxOrDefault,\n MAX_DIGITS,\n MINUS_SIGN,\n parseNumber,\n stringifyNumberWithoutExp,\n} from '../../utils';\nimport { Steppers } from '../steppers';\n\nexport interface NumberInputProps\n extends Omit<InputProps, 'value' | 'onChange' | 'type' | 'defaultValue' | 'dataTestId'> {\n /**\n * Значение поля ввода\n */\n value?: string | number | null;\n\n /**\n * Значение по-умолчанию\n */\n defaultValue?: string | number | null;\n\n /**\n * Разделитель ',' или '.'\n */\n separator?: '.' | ',';\n\n /**\n * Количество символов после разделителя\n * Если указан проп step, то всегда 0\n */\n fractionLength?: number;\n\n /**\n * Шаг инкремента/декремента. Используйте только целочисленные значения\n */\n step?: number;\n\n /**\n * Минимальное значение\n * @default Number.MIN_SAFE_INTEGER\n */\n min?: number;\n\n /**\n * Максимальное значение\n * @default Number.MAX_SAFE_INTEGER\n */\n max?: number;\n\n /**\n * Отображение компонента в мобильном или десктопном виде\n */\n view?: 'desktop' | 'mobile';\n\n /**\n * Компонент инпута\n */\n Input: ForwardRefExoticComponent<InputProps & RefAttributes<HTMLInputElement>>;\n\n /**\n * Обработчик события изменения значения\n */\n onChange?: (e: ChangeEvent<HTMLInputElement> | null, payload: { value: number | null }) => void;\n\n /**\n * Идентификатор для систем автоматизированного тестирования.\n * Для кнопки инкремента используется модификатор -increment-button, декремента -decrement-button\n */\n dataTestId?: string;\n}\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value: propValue,\n onChange,\n separator = ',',\n fractionLength = MAX_DIGITS,\n defaultValue,\n Input,\n min: minProp,\n max: maxProp,\n rightAddons,\n dataTestId,\n disabled,\n onBlur,\n onFocus,\n view,\n step: stepProp,\n size = 48,\n disableUserInput,\n clear: clearProp,\n colors = 'default',\n ...restProps\n },\n ref,\n ) => {\n const { readOnly } = restProps;\n const { min, max } = getMinMaxOrDefault({ minProp, maxProp });\n const withStepper = stepProp !== undefined;\n\n const maskOptions: MaskitoOptions = useMemo(\n () =>\n createMaskOptions({\n separator,\n fractionLength: withStepper ? 0 : fractionLength,\n min,\n max,\n }),\n [separator, fractionLength, min, max, withStepper],\n );\n\n const [focused, setFocused] = useState(false);\n const [value, setValue] = useState(() => {\n if (defaultValue == null) {\n return withStepper ? fnUtils.clamp(0, min, max).toString() : '';\n }\n\n return fnUtils\n .clamp(\n parseNumber(maskitoTransform(defaultValue.toString(), maskOptions)),\n min,\n max,\n )\n .toString();\n });\n\n const maskRef = useMaskito({ options: maskOptions });\n\n useEffect(() => {\n if (propValue !== undefined) {\n setValue((prev) => {\n const parsedNumber = parseNumber(propValue);\n\n if (parsedNumber !== parseNumber(prev)) {\n return maskitoTransform(\n stringifyNumberWithoutExp(parsedNumber),\n maskOptions,\n );\n }\n\n return prev;\n });\n }\n }, [maskOptions, propValue, separator]);\n\n const getMaxLength = (valueString: string) => {\n const hasSeparator = valueString?.includes(separator);\n const hasSigns = valueString?.startsWith(MINUS_SIGN);\n\n return MAX_DIGITS + (hasSeparator ? 1 : 0) + (hasSigns ? 1 : 0);\n };\n\n const getStep = () => Math.round(stepProp ?? 1);\n\n const changeValue = (\n event: ChangeEvent<HTMLInputElement> | null,\n newValue: number | null,\n ) => {\n const isNaNValue = Number.isNaN(newValue);\n const valueString = event?.target.value ?? newValue?.toString() ?? '';\n\n setValue(valueString);\n\n if (valueString === '' || !isNaNValue) {\n onChange?.(event, {\n value: isNaNValue ? null : newValue,\n });\n }\n };\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const valueString = event.target.value;\n\n changeValue(event, parseNumber(valueString));\n };\n\n const handleIncrement = () => {\n const parsed = parseNumber(value);\n const nextValue = maskitoTransform(\n (Number.isNaN(parsed) ? min : parsed + getStep()).toString(),\n maskOptions,\n );\n\n changeValue(null, parseNumber(nextValue));\n };\n\n const handleDecrement = () => {\n const parsed = parseNumber(value);\n const nextValue = maskitoTransform(\n (Number.isNaN(parsed) ? max : parsed - getStep()).toString(),\n maskOptions,\n );\n\n changeValue(null, parseNumber(nextValue));\n };\n\n const handleFocus = (e: FocusEvent<HTMLInputElement>) => {\n onFocus?.(e);\n\n if (!disableUserInput) {\n setFocused(true);\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n setFocused(false);\n };\n\n const renderRightAddons = () => (\n <Fragment>\n {rightAddons}\n {withStepper && !disabled && !readOnly && (\n <Steppers\n colors={colors}\n dataTestId={dataTestId}\n disabled={disabled}\n focused={focused}\n value={parseNumber(value)}\n min={min}\n max={max}\n onIncrement={handleIncrement}\n onDecrement={handleDecrement}\n size={size}\n />\n )}\n </Fragment>\n );\n\n return (\n <Input\n maxLength={getMaxLength(value)}\n {...restProps}\n // В iOS в цифровой клавиатуре невозможно ввести минус.\n inputMode={min < 0 && isIOS() ? 'text' : 'decimal'}\n ref={mergeRefs([ref, maskRef])}\n value={value}\n onInput={handleChange}\n dataTestId={dataTestId}\n colors={colors}\n disabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n size={size}\n disableUserInput={disableUserInput}\n clear={clearProp && /\\d/.test(value)}\n rightAddons={renderRightAddons()}\n />\n );\n },\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["../../../src/components/number-input/Component.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n type FocusEvent,\n forwardRef,\n type ForwardRefExoticComponent,\n Fragment,\n type RefAttributes,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { type MaskitoOptions, maskitoTransform } from '@maskito/core';\nimport { useMaskito } from '@maskito/react';\n\nimport { type InputProps } from '@alfalab/core-components-input';\nimport { fnUtils, isIOS } from '@alfalab/core-components-shared';\n\nimport {\n createMaskOptions,\n getMinMaxOrDefault,\n MAX_DIGITS,\n MINUS_SIGN,\n parseNumber,\n stringifyNumberWithoutExp,\n} from '../../utils';\nimport { Steppers } from '../steppers';\n\nexport interface NumberInputProps\n extends Omit<InputProps, 'value' | 'onChange' | 'type' | 'defaultValue' | 'dataTestId'> {\n /**\n * Значение поля ввода\n */\n value?: string | number | null;\n\n /**\n * Значение по-умолчанию\n */\n defaultValue?: string | number | null;\n\n /**\n * Разделитель ',' или '.'\n */\n separator?: '.' | ',';\n\n /**\n * Количество символов после разделителя\n * Если указан проп step, то всегда 0\n */\n fractionLength?: number;\n\n /**\n * Шаг инкремента/декремента. Используйте только целочисленные значения\n */\n step?: number;\n\n /**\n * Минимальное значение\n * @default Number.MIN_SAFE_INTEGER\n */\n min?: number;\n\n /**\n * Максимальное значение\n * @default Number.MAX_SAFE_INTEGER\n */\n max?: number;\n\n /**\n * Отображение компонента в мобильном или десктопном виде\n */\n view?: 'desktop' | 'mobile';\n\n /**\n * Компонент инпута\n */\n Input: ForwardRefExoticComponent<InputProps & RefAttributes<HTMLInputElement>>;\n\n /**\n * Обработчик события изменения значения\n */\n onChange?: (e: ChangeEvent<HTMLInputElement> | null, payload: { value: number | null }) => void;\n\n /**\n * Идентификатор для систем автоматизированного тестирования.\n * Для кнопки инкремента используется модификатор -increment-button, декремента -decrement-button\n */\n dataTestId?: string;\n}\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value: propValue,\n onChange,\n separator = ',',\n fractionLength = MAX_DIGITS,\n defaultValue,\n Input,\n min: minProp,\n max: maxProp,\n rightAddons,\n dataTestId,\n disabled,\n onBlur,\n onFocus,\n view,\n step: stepProp,\n size = 48,\n disableUserInput,\n clear: clearProp,\n colors = 'default',\n ...restProps\n },\n ref,\n ) => {\n const { readOnly } = restProps;\n const { min, max } = getMinMaxOrDefault({ minProp, maxProp });\n const withStepper = stepProp !== undefined;\n\n const maskOptions: MaskitoOptions = useMemo(\n () =>\n createMaskOptions({\n separator,\n fractionLength: withStepper ? 0 : fractionLength,\n min,\n max,\n }),\n [separator, fractionLength, min, max, withStepper],\n );\n\n const [focused, setFocused] = useState(false);\n const [value, setValue] = useState(() => {\n if (defaultValue == null) {\n return withStepper ? fnUtils.clamp(0, min, max).toString() : '';\n }\n\n return fnUtils\n .clamp(\n parseNumber(maskitoTransform(defaultValue.toString(), maskOptions)),\n min,\n max,\n )\n .toString();\n });\n\n const maskRef = useMaskito({ options: maskOptions });\n\n useEffect(() => {\n if (propValue !== undefined) {\n setValue((prev) => {\n const parsedNumber = parseNumber(propValue);\n\n if (parsedNumber !== parseNumber(prev)) {\n return maskitoTransform(\n stringifyNumberWithoutExp(parsedNumber),\n maskOptions,\n );\n }\n\n return prev;\n });\n }\n }, [maskOptions, propValue, separator]);\n\n const getMaxLength = (valueString: string) => {\n const hasSeparator = valueString?.includes(separator);\n const hasSigns = valueString?.startsWith(MINUS_SIGN);\n\n return MAX_DIGITS + (hasSeparator ? 1 : 0) + (hasSigns ? 1 : 0);\n };\n\n const getStep = () => Math.round(stepProp ?? 1);\n\n const changeValue = (\n event: ChangeEvent<HTMLInputElement> | null,\n newValue: number | null,\n ) => {\n const isNaNValue = Number.isNaN(newValue);\n const valueString = event?.target.value ?? newValue?.toString() ?? '';\n\n setValue(valueString);\n\n if (valueString === '' || !isNaNValue) {\n onChange?.(event, {\n value: isNaNValue ? null : newValue,\n });\n }\n };\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const valueString = event.target.value;\n\n changeValue(event, parseNumber(valueString));\n };\n\n const handleIncrement = () => {\n const parsed = parseNumber(value);\n const nextValue = maskitoTransform(\n (Number.isNaN(parsed) ? min : parsed + getStep()).toString(),\n maskOptions,\n );\n\n changeValue(null, parseNumber(nextValue));\n };\n\n const handleDecrement = () => {\n const parsed = parseNumber(value);\n const nextValue = maskitoTransform(\n (Number.isNaN(parsed) ? max : parsed - getStep()).toString(),\n maskOptions,\n );\n\n changeValue(null, parseNumber(nextValue));\n };\n\n const handleFocus = (e: FocusEvent<HTMLInputElement>) => {\n onFocus?.(e);\n\n if (!disableUserInput) {\n setFocused(true);\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n setFocused(false);\n };\n\n const renderRightAddons = () => (\n <Fragment>\n {rightAddons}\n {withStepper && !disabled && !readOnly && (\n <Steppers\n colors={colors}\n dataTestId={dataTestId}\n disabled={disabled}\n focused={focused}\n value={parseNumber(value)}\n min={min}\n max={max}\n onIncrement={handleIncrement}\n onDecrement={handleDecrement}\n size={size}\n />\n )}\n </Fragment>\n );\n\n return (\n <Input\n maxLength={getMaxLength(value)}\n {...restProps}\n // В iOS в цифровой клавиатуре невозможно ввести минус.\n inputMode={min < 0 && isIOS() ? 'text' : 'decimal'}\n ref={mergeRefs([ref, maskRef])}\n value={value}\n onInput={handleChange}\n dataTestId={dataTestId}\n colors={colors}\n disabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n size={size}\n disableUserInput={disableUserInput}\n clear={clearProp && /\\d/.test(value)}\n rightAddons={renderRightAddons()}\n />\n );\n },\n);\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { type FC } from 'react';
2
2
  import { type InputProps } from '@alfalab/core-components-input/esm';
3
- export declare type SteppersProps = {
3
+ export type SteppersProps = {
4
4
  value: number;
5
5
  min: number;
6
6
  max: number;
@@ -3,13 +3,13 @@
3
3
  --color-light-neutral-translucent-200: rgba(30, 43, 68, 0.08);
4
4
  --color-light-neutral-translucent-300: rgba(15, 25, 55, 0.1);
5
5
  }
6
- .number-input__separator_1bc30 {
6
+ .number-input__separator_jdkrj {
7
7
  background-color: var(--color-light-neutral-translucent-300);
8
8
  }
9
- .number-input__steppers_1bc30 {
9
+ .number-input__steppers_jdkrj {
10
10
  background-color: var(--color-light-neutral-translucent-0);
11
11
  }
12
- .number-input__steppersFocused_1bc30,
13
- .number-input__steppersDisabled_1bc30 {
12
+ .number-input__steppersFocused_jdkrj,
13
+ .number-input__steppersDisabled_jdkrj {
14
14
  background-color: var(--color-light-neutral-translucent-200);
15
15
  }
@@ -1,6 +1,6 @@
1
1
  import './default.css';
2
2
 
3
- var defaultColors = {"separator":"number-input__separator_1bc30","steppers":"number-input__steppers_1bc30","steppersFocused":"number-input__steppersFocused_1bc30","steppersDisabled":"number-input__steppersDisabled_1bc30"};
3
+ var defaultColors = {"separator":"number-input__separator_jdkrj","steppers":"number-input__steppers_jdkrj","steppersFocused":"number-input__steppersFocused_jdkrj","steppersDisabled":"number-input__steppersDisabled_jdkrj"};
4
4
 
5
5
  export { defaultColors as default };
6
6
  //# sourceMappingURL=default.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"default.module.css.js","sources":["../../src/components/steppers/default.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/no-typography-index.css';\n\n.separator {\n background-color: var(--color-light-neutral-translucent-300);\n}\n\n.steppers {\n background-color: var(--color-light-neutral-translucent-0);\n}\n\n.steppersFocused,\n.steppersDisabled {\n background-color: var(--color-light-neutral-translucent-200);\n}\n"],"names":[],"mappings":";;AAEgB,oBAAe,CAAC,WAAW,CAAC,+BAA+B,CAAC,UAAU,CAAC,8BAA8B,CAAC,iBAAiB,CAAC,qCAAqC,CAAC,kBAAkB,CAAC,sCAAsC,CAAC;;;;"}
1
+ {"version":3,"file":"default.module.css.js","sources":["../../src/components/steppers/default.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/index.css';\n\n.separator {\n background-color: var(--color-light-neutral-translucent-300);\n}\n\n.steppers {\n background-color: var(--color-light-neutral-translucent-0);\n}\n\n.steppersFocused,\n.steppersDisabled {\n background-color: var(--color-light-neutral-translucent-200);\n}\n"],"names":[],"mappings":";;AAEgB,oBAAe,CAAC,WAAW,CAAC,+BAA+B,CAAC,UAAU,CAAC,8BAA8B,CAAC,iBAAiB,CAAC,qCAAqC,CAAC,kBAAkB,CAAC,sCAAsC,CAAC;;;;"}