@skbkontur/react-ui 4.25.0 → 4.25.1-MaskedInput-fix.1
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.
- package/CHANGELOG.md +8 -0
- package/LICENSE +21 -21
- package/cjs/components/Gapped/Gapped.md +43 -43
- package/cjs/components/Input/Input.d.ts +3 -2
- package/cjs/components/Input/Input.js +7 -4
- package/cjs/components/Input/Input.js.map +1 -1
- package/cjs/components/MaskedInput/MaskedInput.d.ts +22 -4
- package/cjs/components/MaskedInput/MaskedInput.helpers.d.ts +10 -0
- package/cjs/components/MaskedInput/MaskedInput.helpers.js +30 -0
- package/cjs/components/MaskedInput/MaskedInput.helpers.js.map +1 -0
- package/cjs/components/MaskedInput/MaskedInput.js +181 -20
- package/cjs/components/MaskedInput/MaskedInput.js.map +1 -1
- package/cjs/components/MaskedInput/MaskedInput.md +203 -9
- package/cjs/components/MaskedInput/MaskedInput.styles.d.ts +3 -0
- package/cjs/components/MaskedInput/MaskedInput.styles.js +4 -0
- package/cjs/components/MaskedInput/MaskedInput.styles.js.map +1 -0
- package/cjs/components/RadioGroup/RadioGroup.md +43 -43
- package/cjs/index.d.ts +3 -0
- package/cjs/index.js +3 -0
- package/cjs/index.js.map +1 -1
- package/cjs/internal/MaskedInputElement/MaskedInputElement.d.ts +6 -9
- package/cjs/internal/MaskedInputElement/MaskedInputElement.js +99 -129
- package/cjs/internal/MaskedInputElement/MaskedInputElement.js.map +1 -1
- package/cjs/internal/MaskedInputElement/MaskedInputElement.styles.d.ts +2 -3
- package/cjs/internal/MaskedInputElement/MaskedInputElement.styles.js +7 -17
- package/cjs/internal/MaskedInputElement/MaskedInputElement.styles.js.map +1 -1
- package/cjs/internal/ThemeShowcase/ThemeShowcase.md +13 -13
- package/cjs/lib/styles/HoldSelectionColor.js +1 -1
- package/cjs/lib/styles/HoldSelectionColor.js.map +1 -1
- package/cjs/lib/styles/UiFont.d.ts +4 -0
- package/cjs/lib/styles/UiFont.js +39 -0
- package/cjs/lib/styles/UiFont.js.map +1 -0
- package/components/Gapped/Gapped.md +43 -43
- package/components/Input/Input/Input.js +8 -4
- package/components/Input/Input/Input.js.map +1 -1
- package/components/Input/Input.d.ts +3 -2
- package/components/MaskedInput/MaskedInput/MaskedInput.js +163 -22
- package/components/MaskedInput/MaskedInput/MaskedInput.js.map +1 -1
- package/components/MaskedInput/MaskedInput.d.ts +22 -4
- package/components/MaskedInput/MaskedInput.helpers/MaskedInput.helpers.js +27 -0
- package/components/MaskedInput/MaskedInput.helpers/MaskedInput.helpers.js.map +1 -0
- package/components/MaskedInput/MaskedInput.helpers/package.json +6 -0
- package/components/MaskedInput/MaskedInput.helpers.d.ts +10 -0
- package/components/MaskedInput/MaskedInput.md +203 -9
- package/components/MaskedInput/MaskedInput.styles/MaskedInput.styles.js +4 -0
- package/components/MaskedInput/MaskedInput.styles/MaskedInput.styles.js.map +1 -0
- package/components/MaskedInput/MaskedInput.styles/package.json +6 -0
- package/components/MaskedInput/MaskedInput.styles.d.ts +3 -0
- package/components/RadioGroup/RadioGroup.md +43 -43
- package/index.d.ts +3 -0
- package/index.js +3 -0
- package/index.js.map +1 -1
- package/internal/MaskedInputElement/MaskedInputElement/MaskedInputElement.js +102 -161
- package/internal/MaskedInputElement/MaskedInputElement/MaskedInputElement.js.map +1 -1
- package/internal/MaskedInputElement/MaskedInputElement.d.ts +6 -9
- package/internal/MaskedInputElement/MaskedInputElement.styles/MaskedInputElement.styles.js +5 -8
- package/internal/MaskedInputElement/MaskedInputElement.styles/MaskedInputElement.styles.js.map +1 -1
- package/internal/MaskedInputElement/MaskedInputElement.styles.d.ts +2 -3
- package/internal/ThemeShowcase/ThemeShowcase.md +13 -13
- package/lib/styles/HoldSelectionColor/HoldSelectionColor.js +1 -1
- package/lib/styles/HoldSelectionColor/HoldSelectionColor.js.map +1 -1
- package/lib/styles/UiFont/UiFont.js +30 -0
- package/lib/styles/UiFont/UiFont.js.map +1 -0
- package/lib/styles/UiFont/package.json +6 -0
- package/lib/styles/UiFont.d.ts +4 -0
- package/package.json +2 -5
- package/cjs/internal/MaskedInputElement/MaskedInputElement.helpers.d.ts +0 -16
- package/cjs/internal/MaskedInputElement/MaskedInputElement.helpers.js +0 -52
- package/cjs/internal/MaskedInputElement/MaskedInputElement.helpers.js.map +0 -1
- package/internal/MaskedInputElement/MaskedInputElement.helpers/MaskedInputElement.helpers.js +0 -43
- package/internal/MaskedInputElement/MaskedInputElement.helpers/MaskedInputElement.helpers.js.map +0 -1
- package/internal/MaskedInputElement/MaskedInputElement.helpers/package.json +0 -6
- package/internal/MaskedInputElement/MaskedInputElement.helpers.d.ts +0 -16
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
Вывод элементов с горизонтальным расположением
|
|
2
|
-
|
|
3
|
-
```jsx harmony
|
|
4
|
-
import { Button } from '@skbkontur/react-ui';
|
|
5
|
-
|
|
6
|
-
<Gapped gap={20}>
|
|
7
|
-
<Button use="primary">Сохранить</Button>
|
|
8
|
-
<Button>Отмена</Button>
|
|
9
|
-
</Gapped>;
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
Вертикальное расположение
|
|
13
|
-
|
|
14
|
-
```jsx harmony
|
|
15
|
-
import { Checkbox } from '@skbkontur/react-ui';
|
|
16
|
-
|
|
17
|
-
<Gapped vertical gap={20}>
|
|
18
|
-
<Checkbox checked>Write todos</Checkbox>
|
|
19
|
-
<Checkbox initialIndeterminate>Work in progress</Checkbox>
|
|
20
|
-
<Checkbox>Make things done</Checkbox>
|
|
21
|
-
</Gapped>;
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
По умолчанию `Gapped` выстраивает элементы в одну строчку, но с помощью свойства `wrap` можно включить перенос элементов на новую строку.
|
|
25
|
-
При этом между строчками будет отступ равный значению свойста `gap`
|
|
26
|
-
В таком случае из-за особенности верстки `Gapped` может перекрывать элементы расположенные сверху-слева.
|
|
27
|
-
|
|
28
|
-
```jsx harmony
|
|
29
|
-
import { Button, Checkbox, Toggle } from '@skbkontur/react-ui';
|
|
30
|
-
|
|
31
|
-
<>
|
|
32
|
-
{"U Can't Touch This! => "}
|
|
33
|
-
<Toggle />
|
|
34
|
-
|
|
35
|
-
<div style={{ paddingTop: '10px', position: 'relative', width: '250px' }}>
|
|
36
|
-
<Gapped wrap gap={50}>
|
|
37
|
-
<Button use="primary">Сохранить</Button>
|
|
38
|
-
<Button>Отмена</Button>
|
|
39
|
-
<Checkbox>Я не робот</Checkbox>
|
|
40
|
-
</Gapped>
|
|
41
|
-
</div>
|
|
42
|
-
</>;
|
|
43
|
-
```
|
|
1
|
+
Вывод элементов с горизонтальным расположением
|
|
2
|
+
|
|
3
|
+
```jsx harmony
|
|
4
|
+
import { Button } from '@skbkontur/react-ui';
|
|
5
|
+
|
|
6
|
+
<Gapped gap={20}>
|
|
7
|
+
<Button use="primary">Сохранить</Button>
|
|
8
|
+
<Button>Отмена</Button>
|
|
9
|
+
</Gapped>;
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Вертикальное расположение
|
|
13
|
+
|
|
14
|
+
```jsx harmony
|
|
15
|
+
import { Checkbox } from '@skbkontur/react-ui';
|
|
16
|
+
|
|
17
|
+
<Gapped vertical gap={20}>
|
|
18
|
+
<Checkbox checked>Write todos</Checkbox>
|
|
19
|
+
<Checkbox initialIndeterminate>Work in progress</Checkbox>
|
|
20
|
+
<Checkbox>Make things done</Checkbox>
|
|
21
|
+
</Gapped>;
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
По умолчанию `Gapped` выстраивает элементы в одну строчку, но с помощью свойства `wrap` можно включить перенос элементов на новую строку.
|
|
25
|
+
При этом между строчками будет отступ равный значению свойста `gap`
|
|
26
|
+
В таком случае из-за особенности верстки `Gapped` может перекрывать элементы расположенные сверху-слева.
|
|
27
|
+
|
|
28
|
+
```jsx harmony
|
|
29
|
+
import { Button, Checkbox, Toggle } from '@skbkontur/react-ui';
|
|
30
|
+
|
|
31
|
+
<>
|
|
32
|
+
{"U Can't Touch This! => "}
|
|
33
|
+
<Toggle />
|
|
34
|
+
|
|
35
|
+
<div style={{ paddingTop: '10px', position: 'relative', width: '250px' }}>
|
|
36
|
+
<Gapped wrap gap={50}>
|
|
37
|
+
<Button use="primary">Сохранить</Button>
|
|
38
|
+
<Button>Отмена</Button>
|
|
39
|
+
<Checkbox>Я не робот</Checkbox>
|
|
40
|
+
</Gapped>
|
|
41
|
+
</div>
|
|
42
|
+
</>;
|
|
43
|
+
```
|
|
@@ -85,15 +85,19 @@ var Input = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$C
|
|
|
85
85
|
_this.input = null;
|
|
86
86
|
|
|
87
87
|
_this.selectAll = function () {
|
|
88
|
-
|
|
89
|
-
_this.setSelectionRange(0, _this.input.value.length);
|
|
90
|
-
}
|
|
88
|
+
return _this._selectAll();
|
|
91
89
|
};
|
|
92
90
|
|
|
93
91
|
_this.delaySelectAll = function () {
|
|
94
92
|
var _globalObject$request;
|
|
95
93
|
|
|
96
|
-
return _this.selectAllId = (_globalObject$request = globalObject.requestAnimationFrame == null ? void 0 : globalObject.requestAnimationFrame(_this.
|
|
94
|
+
return _this.selectAllId = (_globalObject$request = globalObject.requestAnimationFrame == null ? void 0 : globalObject.requestAnimationFrame(_this._selectAll)) != null ? _globalObject$request : null;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
_this._selectAll = function () {
|
|
98
|
+
if (_this.input) {
|
|
99
|
+
_this.setSelectionRange(0, _this.input.value.length);
|
|
100
|
+
}
|
|
97
101
|
};
|
|
98
102
|
|
|
99
103
|
_this.cancelDelayedSelectAll = function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Input.tsx"],"names":["invariant","React","warning","globalObject","isEdge","isIE11","isKeyBackspace","isKeyDelete","someKeys","needsPolyfillPlaceholder","InternalMaskedInput","ThemeContext","CommonWrapper","cx","rootNode","createPropsGetter","isTheme2022","isFunction","FocusControlWrapper","styles","InputLayout","PolyfillPlaceholder","inputTypes","selectionAllowedTypes","selectionErrorMessage","type","allowedTypes","map","i","join","maskForbiddenTypes","maskAllowedTypes","filter","includes","maskErrorMessage","InputDataTids","root","Input","getProps","defaultProps","state","blinking","focused","selectAllId","input","selectAll","setSelectionRange","value","length","delaySelectAll","requestAnimationFrame","cancelDelayedSelectAll","cancelAnimationFrame","cancelBlink","callback","blinkTimeout","clearTimeout","setState","getInput","inputProps","props","element","cloneElement","mask","canBeUsedWithMask","renderMaskedInput","createElement","renderMain","onMouseEnter","onMouseLeave","onMouseOver","onKeyDown","onKeyPress","onValueChange","width","error","role","leftIcon","rightIcon","borderless","align","maskChar","alwaysShowMask","size","placeholder","selectAllOnFocus","disabled","onUnexpectedInput","prefix","suffix","formatChars","corners","ariaDescribedby","ariaControls","ariaLabel","rest","labelProps","className","theme","getSizeClassName","focus","hovering","blink","focusFallback","warningFallback","errorFallback","style","inputFocus","inputDisabled","onChange","handleChange","onFocus","handleFocus","handleKeyDown","handleKeyPress","onBlur","handleBlur","textAlign","ref","refInput","isMaskVisible","undefined","resetFocus","Boolean","defaultValue","sideContainer","renderLeftIcon","renderPrefix","wrapper","renderPlaceholder","rightContainer","renderSuffix","renderRightIcon","event","fieldIsEmpty","target","e","isDeleteKey","currentTarget","repeat","handleUnexpectedInput","maxLength","handleMaskedValueChange","prefixDisabled","suffixDisabled","outputMaskError","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","blur","getNode","offsetWidth","setTimeout","start","end","Error","document","activeElement","render","setRootNode","getIconSizeClassname","right","rightIconLarge","leftIconLarge","rightIconMedium","leftIconMedium","rightIconSmall","leftIconSmall","renderIcon","icon","sizeClassName","iconNode","useDefaultColor","iconFocus","iconDisabled","placeholderDisabled","placeholderFocus","sizeLarge","sizeLargeFallback","sizeMedium","sizeMediumFallback","sizeSmall","sizeSmallFallback","Component","__KONTUR_REACT_UI__","displayName"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport invariant from 'invariant';\nimport React, { AriaAttributes, ClassAttributes, HTMLAttributes, ReactElement } from 'react';\nimport warning from 'warning';\nimport { globalObject, SafeTimer } from '@skbkontur/global-object';\n\nimport { isEdge, isIE11 } from '../../lib/client';\nimport { isKeyBackspace, isKeyDelete, someKeys } from '../../lib/events/keyboard/identifiers';\nimport { needsPolyfillPlaceholder } from '../../lib/needsPolyfillPlaceholder';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { InternalMaskedInput } from '../../internal/InternalMaskedInput';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { isFunction } from '../../lib/utils';\nimport { SizeProp } from '../../lib/types/props';\nimport { FocusControlWrapper } from '../../internal/FocusControlWrapper';\n\nimport { InputElement, InputElementProps } from './Input.typings';\nimport { styles } from './Input.styles';\nimport { InputLayout } from './InputLayout/InputLayout';\nimport { PolyfillPlaceholder } from './InputLayout/PolyfillPlaceholder';\n\nexport const inputTypes = ['password', 'text', 'number', 'tel', 'search', 'time', 'date', 'url', 'email'] as const;\n\n/**\n * @deprecated use SizeProp\n */\nexport type InputSize = SizeProp;\nexport type InputAlign = 'left' | 'center' | 'right';\nexport type InputType = typeof inputTypes[number];\nexport type InputIconType = React.ReactNode | (() => React.ReactNode);\n\nexport const selectionAllowedTypes: InputType[] = ['text', 'password', 'tel', 'search', 'url'];\nexport const selectionErrorMessage = (type: InputType, allowedTypes: InputType[] = selectionAllowedTypes) => {\n return `<Input />. Selection is not supported by the type \"${type}\". Types that support selection: ${allowedTypes\n .map((i) => `\"${i}\"`)\n .join(', ')}. Reason: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange.`;\n};\n\nexport const maskForbiddenTypes: InputType[] = ['number', 'date', 'time'];\nexport const maskAllowedTypes: InputType[] = inputTypes.filter((type) => {\n return !maskForbiddenTypes.includes(type);\n});\nexport const maskErrorMessage = (type: InputType, allowedTypes: InputType[] = maskAllowedTypes) => {\n return `<Input />. Prop \"mask\" does not support type \"${type}\". Supported types: ${allowedTypes\n .map((i) => `\"${i}\"`)\n .join(', ')}.`;\n};\n\nexport interface InputProps\n extends CommonProps,\n Pick<HTMLAttributes<unknown>, 'role'>,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-controls' | 'aria-label'>,\n Override<\n React.InputHTMLAttributes<HTMLInputElement>,\n {\n /**\n * Иконка слева\n * Если `ReactNode` применяются дефолтные стили для иконки\n * Если `() => ReactNode` применяются только стили для позиционирование\n */\n leftIcon?: InputIconType;\n /**\n * Иконка справа\n * Если `ReactNode` применяются дефолтные стили для иконки\n * Если `() => ReactNode` применяются только стили для позиционирование\n */\n rightIcon?: InputIconType;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n /** Режим прозрачной рамки */\n borderless?: boolean;\n /** Выравнивание текста */\n align?: InputAlign;\n /**\n * Паттерн маски. Доступен для типов `text`, `password`, `email`, `tel`, `search`, `url`\n * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput\n */\n mask?: Nullable<string>;\n /**\n * Символ маски\n * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput\n */\n maskChar?: Nullable<string>;\n /**\n * Словарь символов-регулярок для задания маски\n * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput\n * @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' }\n */\n formatChars?: Record<string, string>;\n /**\n * Показывать символы маски\n * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput\n */\n alwaysShowMask?: boolean;\n /** Размер */\n size?: SizeProp;\n /** onValueChange */\n onValueChange?: (value: string) => void;\n /** Вызывается на label */\n onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;\n /** Вызывается на label */\n onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;\n /** Вызывается на label */\n onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * Тип. Возможные значения: 'password' | 'text' | 'number' | 'tel' | 'search' | 'time' | 'date' | 'url' | 'email'\n * */\n type?: InputType;\n /** Значение */\n value?: string;\n capture?: boolean;\n\n /**\n * Префикс\n * `ReactNode` перед значением, но после иконки\n */\n prefix?: React.ReactNode;\n /**\n * Суффикс\n * `ReactNode` после значения, но перед правой иконкой\n */\n suffix?: React.ReactNode;\n /** Выделять введенное значение при фокусе. Работает с типами `text`, `password`, `tel`, `search`, `url`. [Документация](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange) */\n selectAllOnFocus?: boolean;\n /**\n * Обработчик неправильного ввода.\n * По-умолчанию, инпут вспыхивает акцентным цветом.\n * Если передан - вызывается переданный обработчик,\n * в таком случае вспыхивание можно вызвать\n * публичным методом инстанса `blink()`.\n *\n * @param value значение инпута.\n */\n onUnexpectedInput?: (value: string) => void;\n /** @ignore */\n corners?: Partial<\n Pick<\n React.CSSProperties,\n 'borderTopRightRadius' | 'borderBottomRightRadius' | 'borderBottomLeftRadius' | 'borderTopLeftRadius'\n >\n >;\n /**\n * Элемент заменяет нативный input.\n * Должен иметь пропы `InputElementProps` и тип `InputElement`\n * */\n element?: ReactElement<InputElementProps>;\n }\n > {}\n\nexport interface InputState {\n blinking: boolean;\n focused: boolean;\n needsPolyfillPlaceholder: boolean;\n}\n\nexport const InputDataTids = {\n root: 'Input__root',\n} as const;\n\ntype DefaultProps = Required<Pick<InputProps, 'size' | 'type'>>;\n\n/**\n * Интерфейс пропсов наследуется от `React.InputHTMLAttributes<HTMLInputElement>`.\n * Все пропсы кроме перечисленных, `className` и `style` передаются в `<input>`\n */\n@rootNode\nexport class Input extends React.Component<InputProps, InputState> {\n public static __KONTUR_REACT_UI__ = 'Input';\n public static displayName = 'Input';\n\n public static defaultProps: DefaultProps = {\n size: 'small',\n type: 'text',\n };\n\n private getProps = createPropsGetter(Input.defaultProps);\n\n public state: InputState = {\n needsPolyfillPlaceholder,\n blinking: false,\n focused: false,\n };\n\n private selectAllId: number | null = null;\n private theme!: Theme;\n private blinkTimeout: SafeTimer;\n private input: HTMLInputElement | null = null;\n private setRootNode!: TSetRootNode;\n\n private outputMaskError() {\n warning(!(this.props.mask && this.canBeUsedWithMask), maskErrorMessage(this.getProps().type));\n }\n\n public componentDidMount() {\n this.outputMaskError();\n }\n\n public componentDidUpdate(prevProps: Readonly<InputProps>) {\n if (this.props.type !== prevProps.type || this.props.mask !== prevProps.mask) {\n this.outputMaskError();\n }\n }\n\n public componentWillUnmount() {\n if (this.blinkTimeout) {\n globalObject.clearTimeout(this.blinkTimeout);\n }\n this.cancelDelayedSelectAll();\n }\n\n /**\n * @public\n */\n public focus() {\n invariant(this.input, 'Cannot call \"focus\" because Input is not mounted');\n this.input.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n invariant(this.input, 'Cannot call \"blur\" because Input is not mounted');\n this.input.blur();\n }\n\n /**\n * @public\n */\n public getNode() {\n return this.input;\n }\n\n /**\n * @public\n */\n public blink() {\n if (this.blinkTimeout) {\n this.cancelBlink(() => {\n // trigger reflow to restart animation\n // @see https://css-tricks.com/restart-css-animation/#article-header-id-0\n void (this.input && this.input.offsetWidth);\n this.blink();\n });\n return;\n }\n this.setState({ blinking: true }, () => {\n this.blinkTimeout = globalObject.setTimeout(this.cancelBlink, 150);\n });\n }\n\n /**\n * @public\n * @param {number} start\n * @param {number} end\n */\n public setSelectionRange(start: number, end: number) {\n // https://github.com/facebook/react/issues/7769\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n if (!selectionAllowedTypes.includes(this.getProps().type)) {\n warning(false, selectionErrorMessage(this.getProps().type));\n\n return;\n }\n\n if (!this.input) {\n throw new Error('Cannot call \"setSelectionRange\" on unmounted Input');\n }\n\n if (globalObject.document?.activeElement !== this.input) {\n this.focus();\n }\n if (this.props.mask && this.props.value && this.props.value?.length < this.props.mask.length) {\n globalObject.setTimeout(() => {\n this.input?.setSelectionRange(start, end);\n }, 150);\n } else {\n this.input?.setSelectionRange(start, end);\n }\n }\n\n public get isMaskVisible(): boolean {\n const { mask, alwaysShowMask } = this.props;\n const { focused } = this.state;\n return Boolean(mask && (focused || alwaysShowMask));\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private get canBeUsedWithMask() {\n return maskForbiddenTypes.includes(this.getProps().type);\n }\n\n /**\n * Работает с типами `text`, `password`, `tel`, `search`, `url`\n * [Документация](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange)\n * @public\n */\n public selectAll = (): void => {\n if (this.input) {\n this.setSelectionRange(0, this.input.value.length);\n }\n };\n\n private delaySelectAll = (): number | null =>\n (this.selectAllId = globalObject.requestAnimationFrame?.(this.selectAll) ?? null);\n\n private cancelDelayedSelectAll = (): void => {\n if (this.selectAllId) {\n globalObject.cancelAnimationFrame?.(this.selectAllId);\n this.selectAllId = null;\n }\n };\n\n private cancelBlink = (callback?: () => void): void => {\n if (this.blinkTimeout) {\n globalObject.clearTimeout(this.blinkTimeout);\n this.blinkTimeout = 0;\n if (this.state.blinking) {\n this.setState({ blinking: false }, callback);\n return;\n }\n }\n if (callback) {\n callback();\n }\n };\n\n private getInput = (inputProps: InputElementProps & ClassAttributes<HTMLInputElement>) => {\n if (this.props.element) {\n return React.cloneElement(this.props.element, inputProps);\n }\n\n return this.props.mask && !this.canBeUsedWithMask\n ? this.renderMaskedInput(inputProps, this.props.mask)\n : React.createElement('input', inputProps);\n };\n\n private renderMain = (props: CommonWrapperRestProps<InputProps>) => {\n const {\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onKeyDown,\n onKeyPress,\n onValueChange,\n width,\n error,\n role,\n warning,\n leftIcon,\n rightIcon,\n borderless,\n value,\n align,\n type,\n mask,\n maskChar,\n alwaysShowMask,\n size,\n placeholder,\n selectAllOnFocus,\n disabled,\n onUnexpectedInput,\n prefix,\n suffix,\n formatChars,\n corners,\n 'aria-describedby': ariaDescribedby,\n 'aria-controls': ariaControls,\n 'aria-label': ariaLabel,\n element,\n ...rest\n } = props;\n\n const { blinking, focused } = this.state;\n\n const labelProps = {\n className: cx(styles.root(this.theme), this.getSizeClassName(), {\n [styles.focus(this.theme)]: focused && !warning && !error,\n [styles.hovering(this.theme)]: !focused && !disabled && !warning && !error && !borderless,\n [styles.blink(this.theme)]: blinking,\n [styles.borderless()]: borderless && !focused,\n [styles.disabled(this.theme)]: disabled,\n [styles.warning(this.theme)]: warning,\n [styles.error(this.theme)]: error,\n [styles.focusFallback(this.theme)]: focused && (isIE11 || isEdge),\n [styles.warningFallback(this.theme)]: warning && (isIE11 || isEdge),\n [styles.errorFallback(this.theme)]: error && (isIE11 || isEdge),\n }),\n 'aria-controls': ariaControls,\n style: { width, ...corners },\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n };\n\n const inputProps: InputElementProps & ClassAttributes<HTMLInputElement> = {\n ...rest,\n className: cx(styles.input(this.theme), {\n [styles.inputFocus(this.theme)]: focused,\n [styles.inputDisabled(this.theme)]: disabled,\n }),\n value,\n role,\n onChange: this.handleChange,\n onFocus: this.handleFocus,\n onKeyDown: this.handleKeyDown,\n onKeyPress: this.handleKeyPress,\n onBlur: this.handleBlur,\n style: { textAlign: align },\n ref: this.refInput,\n type,\n placeholder: !this.isMaskVisible && !needsPolyfillPlaceholder ? placeholder : undefined,\n disabled,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n };\n\n const input = (\n <FocusControlWrapper onBlurWhenDisabled={this.resetFocus}>{this.getInput(inputProps)}</FocusControlWrapper>\n );\n\n if (isTheme2022(this.theme)) {\n return (\n <InputLayout\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n prefix={prefix}\n suffix={suffix}\n labelProps={labelProps}\n context={{ disabled: Boolean(disabled), focused, size }}\n >\n {input}\n {this.state.needsPolyfillPlaceholder && (\n <PolyfillPlaceholder\n isMaskVisible={this.isMaskVisible}\n value={value}\n defaultValue={this.props.defaultValue}\n align={align}\n >\n {placeholder}\n </PolyfillPlaceholder>\n )}\n </InputLayout>\n );\n }\n\n return (\n <label data-tid={InputDataTids.root} {...labelProps}>\n <span className={styles.sideContainer()}>\n {this.renderLeftIcon()}\n {this.renderPrefix()}\n </span>\n <span className={styles.wrapper()}>\n {input}\n {this.renderPlaceholder()}\n </span>\n <span className={cx(styles.sideContainer(), styles.rightContainer())}>\n {this.renderSuffix()}\n {this.renderRightIcon()}\n </span>\n </label>\n );\n };\n\n private renderMaskedInput(inputProps: React.InputHTMLAttributes<HTMLInputElement>, mask: string) {\n return (\n <InternalMaskedInput\n {...inputProps}\n mask={mask}\n maskChar={this.props.maskChar}\n alwaysShowMask={this.props.alwaysShowMask}\n formatChars={this.props.formatChars}\n onChange={this.props.onChange}\n onValueChange={this.handleMaskedValueChange}\n onUnexpectedInput={this.handleUnexpectedInput}\n />\n );\n }\n\n private getIconSizeClassname(right = false) {\n switch (this.getProps().size) {\n case 'large':\n return right ? styles.rightIconLarge(this.theme) : styles.leftIconLarge(this.theme);\n case 'medium':\n return right ? styles.rightIconMedium(this.theme) : styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return right ? styles.rightIconSmall(this.theme) : styles.leftIconSmall(this.theme);\n }\n }\n\n private renderLeftIcon() {\n return this.renderIcon(this.props.leftIcon, this.getIconSizeClassname());\n }\n\n private renderRightIcon() {\n return this.renderIcon(this.props.rightIcon, this.getIconSizeClassname(true));\n }\n\n private renderIcon(icon: InputIconType, sizeClassName: string) {\n if (!icon) {\n return null;\n }\n const { disabled } = this.props;\n const iconNode = isFunction(icon) ? icon() : icon;\n\n return (\n <span\n className={cx(styles.icon(), sizeClassName, styles.useDefaultColor(this.theme), {\n [styles.iconFocus(this.theme)]: this.state.focused,\n [styles.iconDisabled(this.theme)]: disabled,\n })}\n >\n {iconNode}\n </span>\n );\n }\n\n private renderPlaceholder() {\n const { disabled } = this.props;\n const { focused } = this.state;\n let placeholder = null;\n\n if (\n this.state.needsPolyfillPlaceholder &&\n this.props.placeholder &&\n !this.isMaskVisible &&\n !this.props.value &&\n !this.props.defaultValue\n ) {\n placeholder = (\n <div\n className={cx(styles.placeholder(this.theme), {\n [styles.placeholderDisabled(this.theme)]: disabled,\n [styles.placeholderFocus(this.theme)]: focused,\n })}\n style={{ textAlign: this.props.align || 'inherit' }}\n >\n {this.props.placeholder}\n </div>\n );\n }\n\n return placeholder;\n }\n\n private getSizeClassName() {\n switch (this.getProps().size) {\n case 'large':\n return cx({\n [styles.sizeLarge(this.theme)]: true,\n [styles.sizeLargeFallback(this.theme)]: isIE11 || isEdge,\n });\n case 'medium':\n return cx({\n [styles.sizeMedium(this.theme)]: true,\n [styles.sizeMediumFallback(this.theme)]: isIE11 || isEdge,\n });\n case 'small':\n default:\n return cx({\n [styles.sizeSmall(this.theme)]: true,\n [styles.sizeSmallFallback(this.theme)]: isIE11 || isEdge,\n });\n }\n }\n\n private refInput = (element: HTMLInputElement | InternalMaskedInput | InputElement | null) => {\n if (element instanceof InternalMaskedInput || (element && 'input' in element)) {\n this.input = element.input;\n } else {\n this.input = element;\n }\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (needsPolyfillPlaceholder) {\n const fieldIsEmpty = event.target.value === '';\n if (this.state.needsPolyfillPlaceholder !== fieldIsEmpty) {\n this.setState({ needsPolyfillPlaceholder: fieldIsEmpty });\n }\n }\n\n if (this.props.onValueChange) {\n this.props.onValueChange(event.target.value);\n }\n\n if (this.props.onChange) {\n this.props.onChange(event);\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({\n focused: true,\n });\n\n if (this.props.selectAllOnFocus) {\n this.input && !isIE11 ? this.selectAll() : this.delaySelectAll();\n }\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n\n const isDeleteKey = someKeys(isKeyBackspace, isKeyDelete)(e);\n\n if (!e.currentTarget.value && isDeleteKey && !e.repeat) {\n this.handleUnexpectedInput();\n }\n };\n\n private handleKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyPress) {\n this.props.onKeyPress(event);\n }\n\n if (this.props.maxLength === event.currentTarget.value.length) {\n this.handleUnexpectedInput(event.currentTarget.value);\n }\n };\n\n private handleMaskedValueChange = (value: string) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private handleUnexpectedInput = (value: string = this.props.value || '') => {\n if (this.props.onUnexpectedInput) {\n this.props.onUnexpectedInput(value);\n } else {\n this.blink();\n }\n };\n\n private resetFocus = () => this.setState({ focused: false });\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n this.resetFocus();\n this.props.onBlur?.(event);\n };\n\n private renderPrefix = () => {\n const { prefix, disabled } = this.props;\n\n if (!prefix) {\n return null;\n }\n\n return (\n <span className={cx(styles.prefix(this.theme), { [styles.prefixDisabled(this.theme)]: disabled })}>{prefix}</span>\n );\n };\n\n private renderSuffix = () => {\n const { suffix, disabled } = this.props;\n\n if (!suffix) {\n return null;\n }\n\n return (\n <span className={cx(styles.suffix(this.theme), { [styles.suffixDisabled(this.theme)]: disabled })}>{suffix}</span>\n );\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Input.tsx"],"names":["invariant","React","warning","globalObject","isEdge","isIE11","isKeyBackspace","isKeyDelete","someKeys","needsPolyfillPlaceholder","InternalMaskedInput","ThemeContext","CommonWrapper","cx","rootNode","createPropsGetter","isTheme2022","isFunction","FocusControlWrapper","styles","InputLayout","PolyfillPlaceholder","inputTypes","selectionAllowedTypes","selectionErrorMessage","type","allowedTypes","map","i","join","maskForbiddenTypes","maskAllowedTypes","filter","includes","maskErrorMessage","InputDataTids","root","Input","getProps","defaultProps","state","blinking","focused","selectAllId","input","selectAll","_selectAll","delaySelectAll","requestAnimationFrame","setSelectionRange","value","length","cancelDelayedSelectAll","cancelAnimationFrame","cancelBlink","callback","blinkTimeout","clearTimeout","setState","getInput","inputProps","props","element","cloneElement","mask","canBeUsedWithMask","renderMaskedInput","createElement","renderMain","onMouseEnter","onMouseLeave","onMouseOver","onKeyDown","onKeyPress","onValueChange","width","error","role","leftIcon","rightIcon","borderless","align","maskChar","alwaysShowMask","size","placeholder","selectAllOnFocus","disabled","onUnexpectedInput","prefix","suffix","formatChars","corners","ariaDescribedby","ariaControls","ariaLabel","rest","labelProps","className","theme","getSizeClassName","focus","hovering","blink","focusFallback","warningFallback","errorFallback","style","inputFocus","inputDisabled","onChange","handleChange","onFocus","handleFocus","handleKeyDown","handleKeyPress","onBlur","handleBlur","textAlign","ref","refInput","isMaskVisible","undefined","resetFocus","Boolean","defaultValue","sideContainer","renderLeftIcon","renderPrefix","wrapper","renderPlaceholder","rightContainer","renderSuffix","renderRightIcon","event","fieldIsEmpty","target","e","isDeleteKey","currentTarget","repeat","handleUnexpectedInput","maxLength","handleMaskedValueChange","prefixDisabled","suffixDisabled","outputMaskError","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","blur","getNode","offsetWidth","setTimeout","start","end","Error","document","activeElement","render","setRootNode","getIconSizeClassname","right","rightIconLarge","leftIconLarge","rightIconMedium","leftIconMedium","rightIconSmall","leftIconSmall","renderIcon","icon","sizeClassName","iconNode","useDefaultColor","iconFocus","iconDisabled","placeholderDisabled","placeholderFocus","sizeLarge","sizeLargeFallback","sizeMedium","sizeMediumFallback","sizeSmall","sizeSmallFallback","Component","__KONTUR_REACT_UI__","displayName"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport invariant from 'invariant';\nimport React, { AriaAttributes, ClassAttributes, HTMLAttributes, ReactElement } from 'react';\nimport warning from 'warning';\nimport { globalObject, SafeTimer } from '@skbkontur/global-object';\n\nimport { isEdge, isIE11 } from '../../lib/client';\nimport { isKeyBackspace, isKeyDelete, someKeys } from '../../lib/events/keyboard/identifiers';\nimport { needsPolyfillPlaceholder } from '../../lib/needsPolyfillPlaceholder';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { InternalMaskedInput } from '../../internal/InternalMaskedInput';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { isFunction } from '../../lib/utils';\nimport { SizeProp } from '../../lib/types/props';\nimport { FocusControlWrapper } from '../../internal/FocusControlWrapper';\n\nimport { InputElement, InputElementProps } from './Input.typings';\nimport { styles } from './Input.styles';\nimport { InputLayout } from './InputLayout/InputLayout';\nimport { PolyfillPlaceholder } from './InputLayout/PolyfillPlaceholder';\n\nexport const inputTypes = ['password', 'text', 'number', 'tel', 'search', 'time', 'date', 'url', 'email'] as const;\n\n/**\n * @deprecated use SizeProp\n */\nexport type InputSize = SizeProp;\nexport type InputAlign = 'left' | 'center' | 'right';\nexport type InputType = typeof inputTypes[number];\nexport type InputIconType = React.ReactNode | (() => React.ReactNode);\n\nexport const selectionAllowedTypes: InputType[] = ['text', 'password', 'tel', 'search', 'url'];\nexport const selectionErrorMessage = (type: InputType, allowedTypes: InputType[] = selectionAllowedTypes) => {\n return `<Input />. Selection is not supported by the type \"${type}\". Types that support selection: ${allowedTypes\n .map((i) => `\"${i}\"`)\n .join(', ')}. Reason: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange.`;\n};\n\nexport const maskForbiddenTypes: InputType[] = ['number', 'date', 'time'];\nexport const maskAllowedTypes: InputType[] = inputTypes.filter((type) => {\n return !maskForbiddenTypes.includes(type);\n});\nexport const maskErrorMessage = (type: InputType, allowedTypes: InputType[] = maskAllowedTypes) => {\n return `<Input />. Prop \"mask\" does not support type \"${type}\". Supported types: ${allowedTypes\n .map((i) => `\"${i}\"`)\n .join(', ')}.`;\n};\n\nexport interface InputProps\n extends CommonProps,\n Pick<HTMLAttributes<unknown>, 'role'>,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-controls' | 'aria-label'>,\n Override<\n React.InputHTMLAttributes<HTMLInputElement>,\n {\n /**\n * Иконка слева\n * Если `ReactNode` применяются дефолтные стили для иконки\n * Если `() => ReactNode` применяются только стили для позиционирование\n */\n leftIcon?: InputIconType;\n /**\n * Иконка справа\n * Если `ReactNode` применяются дефолтные стили для иконки\n * Если `() => ReactNode` применяются только стили для позиционирование\n */\n rightIcon?: InputIconType;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n /** Режим прозрачной рамки */\n borderless?: boolean;\n /** Выравнивание текста */\n align?: InputAlign;\n /**\n * Паттерн маски. Доступен для типов `text`, `password`, `email`, `tel`, `search`, `url`\n * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput\n */\n mask?: Nullable<string>;\n /**\n * Символ маски\n * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput\n */\n maskChar?: Nullable<string>;\n /**\n * Словарь символов-регулярок для задания маски\n * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput\n * @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' }\n */\n formatChars?: Record<string, string>;\n /**\n * Показывать символы маски\n * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput\n */\n alwaysShowMask?: boolean;\n /** Размер */\n size?: SizeProp;\n /** onValueChange */\n onValueChange?: (value: string) => void;\n /** Вызывается на label */\n onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;\n /** Вызывается на label */\n onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;\n /** Вызывается на label */\n onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * Тип. Возможные значения: 'password' | 'text' | 'number' | 'tel' | 'search' | 'time' | 'date' | 'url' | 'email'\n * */\n type?: InputType;\n /** Значение */\n value?: string;\n capture?: boolean;\n\n /**\n * Префикс\n * `ReactNode` перед значением, но после иконки\n */\n prefix?: React.ReactNode;\n /**\n * Суффикс\n * `ReactNode` после значения, но перед правой иконкой\n */\n suffix?: React.ReactNode;\n /** Выделять введенное значение при фокусе. Работает с типами `text`, `password`, `tel`, `search`, `url`. [Документация](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange) */\n selectAllOnFocus?: boolean;\n /**\n * Обработчик неправильного ввода.\n * По-умолчанию, инпут вспыхивает акцентным цветом.\n * Если передан - вызывается переданный обработчик,\n * в таком случае вспыхивание можно вызвать\n * публичным методом инстанса `blink()`.\n *\n * @param value значение инпута.\n */\n onUnexpectedInput?: (value: string) => void;\n /** @ignore */\n corners?: Partial<\n Pick<\n React.CSSProperties,\n 'borderTopRightRadius' | 'borderBottomRightRadius' | 'borderBottomLeftRadius' | 'borderTopLeftRadius'\n >\n >;\n /**\n * Элемент заменяет нативный input.\n * Должен иметь пропы `InputElementProps` и тип `InputElement`\n * */\n element?: ReactElement<InputElementProps>;\n }\n > {}\n\nexport interface InputState {\n blinking: boolean;\n focused: boolean;\n needsPolyfillPlaceholder: boolean;\n}\n\nexport const InputDataTids = {\n root: 'Input__root',\n} as const;\n\ntype DefaultProps = Required<Pick<InputProps, 'size' | 'type'>>;\n\n/**\n * Интерфейс пропсов наследуется от `React.InputHTMLAttributes<HTMLInputElement>`.\n * Все пропсы кроме перечисленных, `className` и `style` передаются в `<input>`\n */\n@rootNode\nexport class Input extends React.Component<InputProps, InputState> {\n public static __KONTUR_REACT_UI__ = 'Input';\n public static displayName = 'Input';\n\n public static defaultProps: DefaultProps = {\n size: 'small',\n type: 'text',\n };\n\n private getProps = createPropsGetter(Input.defaultProps);\n\n public state: InputState = {\n needsPolyfillPlaceholder,\n blinking: false,\n focused: false,\n };\n\n private selectAllId: number | null = null;\n private theme!: Theme;\n private blinkTimeout: SafeTimer;\n public input: HTMLInputElement | null = null;\n private setRootNode!: TSetRootNode;\n\n private outputMaskError() {\n warning(!(this.props.mask && this.canBeUsedWithMask), maskErrorMessage(this.getProps().type));\n }\n\n public componentDidMount() {\n this.outputMaskError();\n }\n\n public componentDidUpdate(prevProps: Readonly<InputProps>) {\n if (this.props.type !== prevProps.type || this.props.mask !== prevProps.mask) {\n this.outputMaskError();\n }\n }\n\n public componentWillUnmount() {\n if (this.blinkTimeout) {\n globalObject.clearTimeout(this.blinkTimeout);\n }\n this.cancelDelayedSelectAll();\n }\n\n /**\n * @public\n */\n public focus() {\n invariant(this.input, 'Cannot call \"focus\" because Input is not mounted');\n this.input.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n invariant(this.input, 'Cannot call \"blur\" because Input is not mounted');\n this.input.blur();\n }\n\n /**\n * @public\n */\n public getNode() {\n return this.input;\n }\n\n /**\n * @public\n */\n public blink() {\n if (this.blinkTimeout) {\n this.cancelBlink(() => {\n // trigger reflow to restart animation\n // @see https://css-tricks.com/restart-css-animation/#article-header-id-0\n void (this.input && this.input.offsetWidth);\n this.blink();\n });\n return;\n }\n this.setState({ blinking: true }, () => {\n this.blinkTimeout = globalObject.setTimeout(this.cancelBlink, 150);\n });\n }\n\n /**\n * @public\n * @param {number} start\n * @param {number} end\n */\n public setSelectionRange(start: number, end: number) {\n // https://github.com/facebook/react/issues/7769\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n if (!selectionAllowedTypes.includes(this.getProps().type)) {\n warning(false, selectionErrorMessage(this.getProps().type));\n\n return;\n }\n\n if (!this.input) {\n throw new Error('Cannot call \"setSelectionRange\" on unmounted Input');\n }\n\n if (globalObject.document?.activeElement !== this.input) {\n this.focus();\n }\n if (this.props.mask && this.props.value && this.props.value?.length < this.props.mask.length) {\n globalObject.setTimeout(() => {\n this.input?.setSelectionRange(start, end);\n }, 150);\n } else {\n this.input?.setSelectionRange(start, end);\n }\n }\n\n public get isMaskVisible(): boolean {\n const { mask, alwaysShowMask } = this.props;\n const { focused } = this.state;\n return Boolean(mask && (focused || alwaysShowMask));\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private get canBeUsedWithMask() {\n return maskForbiddenTypes.includes(this.getProps().type);\n }\n\n /**\n * Работает с типами `text`, `password`, `tel`, `search`, `url`\n * [Документация](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange)\n * @public\n */\n public selectAll = (): void => this._selectAll();\n\n public delaySelectAll = (): number | null => {\n return (this.selectAllId = globalObject.requestAnimationFrame?.(this._selectAll) ?? null);\n };\n\n private _selectAll = (): void => {\n if (this.input) {\n this.setSelectionRange(0, this.input.value.length);\n }\n };\n\n private cancelDelayedSelectAll = (): void => {\n if (this.selectAllId) {\n globalObject.cancelAnimationFrame?.(this.selectAllId);\n this.selectAllId = null;\n }\n };\n\n private cancelBlink = (callback?: () => void): void => {\n if (this.blinkTimeout) {\n globalObject.clearTimeout(this.blinkTimeout);\n this.blinkTimeout = 0;\n if (this.state.blinking) {\n this.setState({ blinking: false }, callback);\n return;\n }\n }\n if (callback) {\n callback();\n }\n };\n\n private getInput = (inputProps: InputElementProps & ClassAttributes<HTMLInputElement>) => {\n if (this.props.element) {\n return React.cloneElement(this.props.element, inputProps);\n }\n\n return this.props.mask && !this.canBeUsedWithMask\n ? this.renderMaskedInput(inputProps, this.props.mask)\n : React.createElement('input', inputProps);\n };\n\n private renderMain = (props: CommonWrapperRestProps<InputProps>) => {\n const {\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onKeyDown,\n onKeyPress,\n onValueChange,\n width,\n error,\n role,\n warning,\n leftIcon,\n rightIcon,\n borderless,\n value,\n align,\n type,\n mask,\n maskChar,\n alwaysShowMask,\n size,\n placeholder,\n selectAllOnFocus,\n disabled,\n onUnexpectedInput,\n prefix,\n suffix,\n formatChars,\n corners,\n 'aria-describedby': ariaDescribedby,\n 'aria-controls': ariaControls,\n 'aria-label': ariaLabel,\n element,\n ...rest\n } = props;\n\n const { blinking, focused } = this.state;\n\n const labelProps = {\n className: cx(styles.root(this.theme), this.getSizeClassName(), {\n [styles.focus(this.theme)]: focused && !warning && !error,\n [styles.hovering(this.theme)]: !focused && !disabled && !warning && !error && !borderless,\n [styles.blink(this.theme)]: blinking,\n [styles.borderless()]: borderless && !focused,\n [styles.disabled(this.theme)]: disabled,\n [styles.warning(this.theme)]: warning,\n [styles.error(this.theme)]: error,\n [styles.focusFallback(this.theme)]: focused && (isIE11 || isEdge),\n [styles.warningFallback(this.theme)]: warning && (isIE11 || isEdge),\n [styles.errorFallback(this.theme)]: error && (isIE11 || isEdge),\n }),\n 'aria-controls': ariaControls,\n style: { width, ...corners },\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n };\n\n const inputProps: InputElementProps & ClassAttributes<HTMLInputElement> = {\n ...rest,\n className: cx(styles.input(this.theme), {\n [styles.inputFocus(this.theme)]: focused,\n [styles.inputDisabled(this.theme)]: disabled,\n }),\n value,\n role,\n onChange: this.handleChange,\n onFocus: this.handleFocus,\n onKeyDown: this.handleKeyDown,\n onKeyPress: this.handleKeyPress,\n onBlur: this.handleBlur,\n style: { textAlign: align },\n ref: this.refInput,\n type,\n placeholder: !this.isMaskVisible && !needsPolyfillPlaceholder ? placeholder : undefined,\n disabled,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n };\n\n const input = (\n <FocusControlWrapper onBlurWhenDisabled={this.resetFocus}>{this.getInput(inputProps)}</FocusControlWrapper>\n );\n\n if (isTheme2022(this.theme)) {\n return (\n <InputLayout\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n prefix={prefix}\n suffix={suffix}\n labelProps={labelProps}\n context={{ disabled: Boolean(disabled), focused, size }}\n >\n {input}\n {this.state.needsPolyfillPlaceholder && (\n <PolyfillPlaceholder\n isMaskVisible={this.isMaskVisible}\n value={value}\n defaultValue={this.props.defaultValue}\n align={align}\n >\n {placeholder}\n </PolyfillPlaceholder>\n )}\n </InputLayout>\n );\n }\n\n return (\n <label data-tid={InputDataTids.root} {...labelProps}>\n <span className={styles.sideContainer()}>\n {this.renderLeftIcon()}\n {this.renderPrefix()}\n </span>\n <span className={styles.wrapper()}>\n {input}\n {this.renderPlaceholder()}\n </span>\n <span className={cx(styles.sideContainer(), styles.rightContainer())}>\n {this.renderSuffix()}\n {this.renderRightIcon()}\n </span>\n </label>\n );\n };\n\n private renderMaskedInput(inputProps: React.InputHTMLAttributes<HTMLInputElement>, mask: string) {\n return (\n <InternalMaskedInput\n {...inputProps}\n mask={mask}\n maskChar={this.props.maskChar}\n alwaysShowMask={this.props.alwaysShowMask}\n formatChars={this.props.formatChars}\n onChange={this.props.onChange}\n onValueChange={this.handleMaskedValueChange}\n onUnexpectedInput={this.handleUnexpectedInput}\n />\n );\n }\n\n private getIconSizeClassname(right = false) {\n switch (this.getProps().size) {\n case 'large':\n return right ? styles.rightIconLarge(this.theme) : styles.leftIconLarge(this.theme);\n case 'medium':\n return right ? styles.rightIconMedium(this.theme) : styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return right ? styles.rightIconSmall(this.theme) : styles.leftIconSmall(this.theme);\n }\n }\n\n private renderLeftIcon() {\n return this.renderIcon(this.props.leftIcon, this.getIconSizeClassname());\n }\n\n private renderRightIcon() {\n return this.renderIcon(this.props.rightIcon, this.getIconSizeClassname(true));\n }\n\n private renderIcon(icon: InputIconType, sizeClassName: string) {\n if (!icon) {\n return null;\n }\n const { disabled } = this.props;\n const iconNode = isFunction(icon) ? icon() : icon;\n\n return (\n <span\n className={cx(styles.icon(), sizeClassName, styles.useDefaultColor(this.theme), {\n [styles.iconFocus(this.theme)]: this.state.focused,\n [styles.iconDisabled(this.theme)]: disabled,\n })}\n >\n {iconNode}\n </span>\n );\n }\n\n private renderPlaceholder() {\n const { disabled } = this.props;\n const { focused } = this.state;\n let placeholder = null;\n\n if (\n this.state.needsPolyfillPlaceholder &&\n this.props.placeholder &&\n !this.isMaskVisible &&\n !this.props.value &&\n !this.props.defaultValue\n ) {\n placeholder = (\n <div\n className={cx(styles.placeholder(this.theme), {\n [styles.placeholderDisabled(this.theme)]: disabled,\n [styles.placeholderFocus(this.theme)]: focused,\n })}\n style={{ textAlign: this.props.align || 'inherit' }}\n >\n {this.props.placeholder}\n </div>\n );\n }\n\n return placeholder;\n }\n\n private getSizeClassName() {\n switch (this.getProps().size) {\n case 'large':\n return cx({\n [styles.sizeLarge(this.theme)]: true,\n [styles.sizeLargeFallback(this.theme)]: isIE11 || isEdge,\n });\n case 'medium':\n return cx({\n [styles.sizeMedium(this.theme)]: true,\n [styles.sizeMediumFallback(this.theme)]: isIE11 || isEdge,\n });\n case 'small':\n default:\n return cx({\n [styles.sizeSmall(this.theme)]: true,\n [styles.sizeSmallFallback(this.theme)]: isIE11 || isEdge,\n });\n }\n }\n\n private refInput = (element: HTMLInputElement | InternalMaskedInput | InputElement | null) => {\n if (element instanceof InternalMaskedInput || (element && 'input' in element)) {\n this.input = element.input;\n } else {\n this.input = element;\n }\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (needsPolyfillPlaceholder) {\n const fieldIsEmpty = event.target.value === '';\n if (this.state.needsPolyfillPlaceholder !== fieldIsEmpty) {\n this.setState({ needsPolyfillPlaceholder: fieldIsEmpty });\n }\n }\n\n if (this.props.onValueChange) {\n this.props.onValueChange(event.target.value);\n }\n\n if (this.props.onChange) {\n this.props.onChange(event);\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({\n focused: true,\n });\n\n if (this.props.selectAllOnFocus) {\n this.input && !isIE11 ? this.selectAll() : this.delaySelectAll();\n }\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n\n const isDeleteKey = someKeys(isKeyBackspace, isKeyDelete)(e);\n\n if (!e.currentTarget.value && isDeleteKey && !e.repeat) {\n this.handleUnexpectedInput();\n }\n };\n\n private handleKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyPress) {\n this.props.onKeyPress(event);\n }\n\n if (this.props.maxLength === event.currentTarget.value.length) {\n this.handleUnexpectedInput(event.currentTarget.value);\n }\n };\n\n private handleMaskedValueChange = (value: string) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private handleUnexpectedInput = (value: string = this.props.value || '') => {\n if (this.props.onUnexpectedInput) {\n this.props.onUnexpectedInput(value);\n } else {\n this.blink();\n }\n };\n\n private resetFocus = () => this.setState({ focused: false });\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n this.resetFocus();\n this.props.onBlur?.(event);\n };\n\n private renderPrefix = () => {\n const { prefix, disabled } = this.props;\n\n if (!prefix) {\n return null;\n }\n\n return (\n <span className={cx(styles.prefix(this.theme), { [styles.prefixDisabled(this.theme)]: disabled })}>{prefix}</span>\n );\n };\n\n private renderSuffix = () => {\n const { suffix, disabled } = this.props;\n\n if (!suffix) {\n return null;\n }\n\n return (\n <span className={cx(styles.suffix(this.theme), { [styles.suffixDisabled(this.theme)]: disabled })}>{suffix}</span>\n );\n };\n}\n"]}
|
|
@@ -132,7 +132,7 @@ export declare class Input extends React.Component<InputProps, InputState> {
|
|
|
132
132
|
private selectAllId;
|
|
133
133
|
private theme;
|
|
134
134
|
private blinkTimeout;
|
|
135
|
-
|
|
135
|
+
input: HTMLInputElement | null;
|
|
136
136
|
private setRootNode;
|
|
137
137
|
private outputMaskError;
|
|
138
138
|
componentDidMount(): void;
|
|
@@ -169,7 +169,8 @@ export declare class Input extends React.Component<InputProps, InputState> {
|
|
|
169
169
|
* @public
|
|
170
170
|
*/
|
|
171
171
|
selectAll: () => void;
|
|
172
|
-
|
|
172
|
+
delaySelectAll: () => number | null;
|
|
173
|
+
private _selectAll;
|
|
173
174
|
private cancelDelayedSelectAll;
|
|
174
175
|
private cancelBlink;
|
|
175
176
|
private getInput;
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
-
var _excluded = ["
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
var _excluded = ["onAccept"],
|
|
4
|
+
_excluded2 = ["mask", "maskChar", "formatChars", "alwaysShowMask", "imaskProps", "placeholder", "onValueChange", "onUnexpectedInput", "onKeyDownCapture", "onChange", "element"];
|
|
5
|
+
import React, { useImperativeHandle, useRef, useState, useEffect } from 'react';
|
|
6
|
+
import { IMaskInput } from 'react-imask';
|
|
7
|
+
import { globalObject } from '@skbkontur/global-object';
|
|
8
|
+
import { MaskedInputElement, MaskedInputElementDataTids } from "../../../internal/MaskedInputElement";
|
|
7
9
|
import { forwardRefAndName } from "../../../lib/forwardRefAndName";
|
|
10
|
+
import { cx } from "../../../lib/theming/Emotion";
|
|
11
|
+
import { uiFontGlobalClasses } from "../../../lib/styles/UiFont";
|
|
12
|
+
import { Input } from "../../Input";
|
|
13
|
+
import { isKeyBackspace, isKeyDelete, someKeys } from "../../../lib/events/keyboard/identifiers";
|
|
14
|
+
import { isInstanceOf } from "../../../lib/isInstanceOf";
|
|
15
|
+
import { globalClasses } from "../MaskedInput.styles";
|
|
16
|
+
import { getDefinitions, getMaskChar } from "../MaskedInput.helpers";
|
|
8
17
|
/**
|
|
9
18
|
* Интерфейс пропсов наследуется от `Input`.
|
|
10
19
|
* Из пропсов `Input` исключены некоторые не применимые к полю с маской пропсы и сокращен список возможных значений в type.
|
|
@@ -15,48 +24,180 @@ export var MaskedInput = forwardRefAndName('MaskedInput', function MaskedInput(p
|
|
|
15
24
|
maskChar = props.maskChar,
|
|
16
25
|
formatChars = props.formatChars,
|
|
17
26
|
alwaysShowMask = props.alwaysShowMask,
|
|
27
|
+
_props$imaskProps = props.imaskProps;
|
|
28
|
+
_props$imaskProps = _props$imaskProps === void 0 ? {} : _props$imaskProps;
|
|
29
|
+
|
|
30
|
+
var onAccept = _props$imaskProps.onAccept,
|
|
31
|
+
customIMaskProps = _objectWithoutPropertiesLoose(_props$imaskProps, _excluded),
|
|
18
32
|
placeholder = props.placeholder,
|
|
19
|
-
|
|
33
|
+
onValueChange = props.onValueChange,
|
|
34
|
+
onUnexpectedInput = props.onUnexpectedInput,
|
|
35
|
+
onKeyDownCapture = props.onKeyDownCapture,
|
|
36
|
+
onChange = props.onChange,
|
|
37
|
+
element = props.element,
|
|
38
|
+
inputProps = _objectWithoutPropertiesLoose(props, _excluded2);
|
|
39
|
+
|
|
40
|
+
var inputRef = useRef(null);
|
|
41
|
+
var imaskRef = useRef(null);
|
|
20
42
|
|
|
21
43
|
var _useState = useState(false),
|
|
22
44
|
focused = _useState[0],
|
|
23
45
|
setFocused = _useState[1];
|
|
24
46
|
|
|
47
|
+
var prevValue = useRef(props.value || String(props.defaultValue) || '');
|
|
48
|
+
var prevSelectionStart = useRef(null);
|
|
25
49
|
var showPlaceholder = !(alwaysShowMask || focused);
|
|
26
|
-
var innerRef = useRef(null);
|
|
27
50
|
useImperativeHandle(ref, function () {
|
|
28
|
-
return
|
|
29
|
-
|
|
51
|
+
return inputRef.current && Object.assign(inputRef.current, {
|
|
52
|
+
selectAll: inputRef.current.delaySelectAll
|
|
53
|
+
});
|
|
54
|
+
}, []);
|
|
55
|
+
useEffect(function () {
|
|
56
|
+
var _inputRef$current;
|
|
57
|
+
/**
|
|
58
|
+
* Для корректной работы `onUnexpectedInput` надо знать предыдущий `value`,
|
|
59
|
+
* но `imask` при монтировании не вызывает `onAccept`, если `value` невалиден или `laze=false`
|
|
60
|
+
* Поэтому актуальный `value` при монтировании надо получать вручную
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
if ((_inputRef$current = inputRef.current) != null && _inputRef$current.input) {
|
|
65
|
+
prevValue.current = inputRef.current.input.value;
|
|
66
|
+
prevSelectionStart.current = inputRef.current.input.selectionStart;
|
|
67
|
+
}
|
|
68
|
+
}, []);
|
|
69
|
+
var imaskProps = getCompatibleIMaskProps();
|
|
30
70
|
return /*#__PURE__*/React.createElement(Input, _extends({
|
|
31
|
-
ref:
|
|
71
|
+
ref: inputRef
|
|
32
72
|
}, inputProps, {
|
|
33
73
|
placeholder: showPlaceholder ? placeholder : undefined,
|
|
34
74
|
onFocus: handleFocus,
|
|
35
75
|
onBlur: handleBlur,
|
|
76
|
+
onInput: handleInput,
|
|
77
|
+
onMouseUp: handleSelect,
|
|
78
|
+
onKeyDownCapture: handleKeyDownCapture,
|
|
79
|
+
className: cx(globalClasses.root, uiFontGlobalClasses.root),
|
|
80
|
+
"data-tid": MaskedInputElementDataTids.root,
|
|
36
81
|
element: /*#__PURE__*/React.createElement(MaskedInputElement, {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
})
|
|
82
|
+
maskChars: getMaskChars(imaskProps)
|
|
83
|
+
}, /*#__PURE__*/React.createElement(IMaskInput, _extends({
|
|
84
|
+
ref: imaskRef
|
|
85
|
+
}, imaskProps, {
|
|
86
|
+
onAccept: handleAccept
|
|
87
|
+
})))
|
|
43
88
|
}));
|
|
44
89
|
|
|
45
|
-
function
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
90
|
+
function handleSelect(e) {
|
|
91
|
+
var _inputRef$current2;
|
|
92
|
+
|
|
93
|
+
if (isInstanceOf(e.target, globalObject.HTMLInputElement) && e.target === ((_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.input) && e.target.closest('.react-ui-masked-input-root')) {
|
|
94
|
+
var _imaskRef$current;
|
|
95
|
+
|
|
96
|
+
var nearest = (_imaskRef$current = imaskRef.current) == null ? void 0 : _imaskRef$current.maskRef.masked.nearestInputPos(e.target.value.length, 'LEFT');
|
|
97
|
+
|
|
98
|
+
if (typeof e.target.selectionStart === 'number' && typeof nearest === 'number' && e.target.selectionStart >= nearest) {
|
|
99
|
+
e.target.selectionStart = nearest;
|
|
100
|
+
e.target.selectionEnd = nearest;
|
|
101
|
+
}
|
|
50
102
|
}
|
|
51
103
|
}
|
|
52
104
|
|
|
105
|
+
function getCompatibleIMaskProps() {
|
|
106
|
+
return _extends({
|
|
107
|
+
mask: mask.replace(/0/g, '{\\0}'),
|
|
108
|
+
placeholderChar: getMaskChar(maskChar),
|
|
109
|
+
definitions: getDefinitions(formatChars),
|
|
110
|
+
eager: true,
|
|
111
|
+
overwrite: 'shift',
|
|
112
|
+
lazy: alwaysShowMask === null ? true : !(alwaysShowMask || focused)
|
|
113
|
+
}, customIMaskProps);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function getMaskChars(imaskProps) {
|
|
117
|
+
var imaskPropsFix = imaskProps;
|
|
118
|
+
var maskChars = [imaskPropsFix.placeholderChar];
|
|
119
|
+
|
|
120
|
+
if (imaskPropsFix.blocks) {
|
|
121
|
+
Object.values(imaskPropsFix.blocks).forEach(function (_ref) {
|
|
122
|
+
var placeholderChar = _ref.placeholderChar;
|
|
123
|
+
return placeholderChar && maskChars.push(placeholderChar);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return maskChars;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function handleAccept() {
|
|
131
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
132
|
+
args[_key] = arguments[_key];
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
var value = args[0],
|
|
136
|
+
e = args[2];
|
|
137
|
+
/**
|
|
138
|
+
* Метод `onAccept` может вызываться при монтировании, если не задан проп `defaultValue`.
|
|
139
|
+
* Но нативный `input` никогда не вызывает `onChange` при монтировании.
|
|
140
|
+
* Наше событие `onValueChange` в `Input` вывается в тех же случаях, что и нативный `onChange`,
|
|
141
|
+
* поэтому чтобы сохранить консинстентность будем ориентироваться на наличие аргумента `e`.
|
|
142
|
+
* Он содержит нативное событие, вызвавшее изменение.
|
|
143
|
+
* Если его нет, значит `imask` вызывал `onAccept` по некой собственной логике.
|
|
144
|
+
*/
|
|
145
|
+
|
|
146
|
+
e && (onValueChange == null ? void 0 : onValueChange(value));
|
|
147
|
+
onAccept == null ? void 0 : onAccept.apply(void 0, args);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Отслеживаем неожиданные нажатия
|
|
151
|
+
* handleAccept не вызывается когда значение с маской не меняется
|
|
152
|
+
* Сначала вызывается handleAccept, затем handleInput
|
|
153
|
+
*/
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
function handleInput(e) {
|
|
157
|
+
if (prevValue.current === e.target.value && prevSelectionStart.current === e.target.selectionStart) {
|
|
158
|
+
handleUnexpectedInput(e.target.value);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
prevValue.current = e.target.value;
|
|
162
|
+
props.onInput == null ? void 0 : props.onInput(e);
|
|
163
|
+
}
|
|
164
|
+
|
|
53
165
|
function handleFocus(e) {
|
|
166
|
+
var _inputRef$current3;
|
|
167
|
+
|
|
54
168
|
setFocused(true);
|
|
55
|
-
props.onFocus
|
|
169
|
+
props.onFocus == null ? void 0 : props.onFocus(e); // если `value` из пропов отличается от `value`, которое получит `input` после обработки,
|
|
170
|
+
// то `imask` будет ставить курсор за последним валидным символом.
|
|
171
|
+
|
|
172
|
+
props.selectAllOnFocus && ((_inputRef$current3 = inputRef.current) == null ? void 0 : _inputRef$current3.delaySelectAll());
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function handleUnexpectedInput(value) {
|
|
176
|
+
if (value === void 0) {
|
|
177
|
+
value = '';
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (onUnexpectedInput) {
|
|
181
|
+
onUnexpectedInput(value);
|
|
182
|
+
} else if (inputRef.current) {
|
|
183
|
+
inputRef.current.blink();
|
|
184
|
+
}
|
|
56
185
|
}
|
|
57
186
|
|
|
58
187
|
function handleBlur(e) {
|
|
59
188
|
setFocused(false);
|
|
60
|
-
props.onBlur
|
|
189
|
+
props.onBlur == null ? void 0 : props.onBlur(e);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
function handleKeyDownCapture(e) {
|
|
193
|
+
var isDeleteKey = someKeys(isKeyBackspace, isKeyDelete)(e);
|
|
194
|
+
prevSelectionStart.current = e.currentTarget.selectionStart;
|
|
195
|
+
|
|
196
|
+
if (!e.currentTarget.value && isDeleteKey && !e.repeat) {
|
|
197
|
+
handleUnexpectedInput(e.currentTarget.value);
|
|
198
|
+
prevValue.current = e.currentTarget.value;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
onKeyDownCapture == null ? void 0 : onKeyDownCapture(e);
|
|
61
202
|
}
|
|
62
203
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MaskedInput.tsx"],"names":["React","useImperativeHandle","useRef","useState","Input","MaskedInputElement","forwardRefAndName","MaskedInput","props","ref","mask","maskChar","formatChars","alwaysShowMask","placeholder","inputProps","focused","setFocused","showPlaceholder","innerRef","current","undefined","handleFocus","handleBlur","handleUnexpectedInput","value","onUnexpectedInput","blink","e","onFocus","onBlur"],"mappings":"mPAAA,OAAOA,KAAP,IAAqBC,mBAArB,EAA0CC,MAA1C,EAAkDC,QAAlD,QAAkE,OAAlE;;AAEA,SAASC,KAAT,QAA6C,UAA7C;;AAEA,SAASC,kBAAT,QAAmC,mCAAnC;AACA,SAASC,iBAAT,QAAkC,6BAAlC;;;;;;;;;;;;;;;;;;;;;;AAsBA;AACA;AACA;AACA;AACA,OAAO,IAAMC,WAAW,GAAGD,iBAAiB;AAC1C,aAD0C;AAE1C,SAASC,WAAT,CAAqBC,KAArB,EAA8CC,GAA9C,EAAsE;AACpE,MAAQC,IAAR,GAAoFF,KAApF,CAAQE,IAAR,CAAcC,QAAd,GAAoFH,KAApF,CAAcG,QAAd,CAAwBC,WAAxB,GAAoFJ,KAApF,CAAwBI,WAAxB,CAAqCC,cAArC,GAAoFL,KAApF,CAAqCK,cAArC,CAAqDC,WAArD,GAAoFN,KAApF,CAAqDM,WAArD,CAAqEC,UAArE,iCAAoFP,KAApF;AACA,kBAA8BL,QAAQ,CAAC,KAAD,CAAtC,CAAOa,OAAP,gBAAgBC,UAAhB;AACA,MAAMC,eAAe,GAAG,EAAEL,cAAc,IAAIG,OAApB,CAAxB;AACA,MAAMG,QAAQ,GAAGjB,MAAM,CAAQ,IAAR,CAAvB;;AAEAD,EAAAA,mBAAmB,CAACQ,GAAD,EAAM,oBAAMU,QAAQ,CAACC,OAAf,EAAN,CAAnB;;AAEA;AACE,wBAAC,KAAD;AACE,MAAA,GAAG,EAAED,QADP;AAEMJ,IAAAA,UAFN;AAGE,MAAA,WAAW,EAAEG,eAAe,GAAGJ,WAAH,GAAiBO,SAH/C;AAIE,MAAA,OAAO,EAAEC,WAJX;AAKE,MAAA,MAAM,EAAEC,UALV;AAME,MAAA,OAAO;AACL,0BAAC,kBAAD;AACE,QAAA,IAAI,EAAEb,IADR;AAEE,QAAA,QAAQ,EAAEC,QAFZ;AAGE,QAAA,WAAW,EAAEC,WAHf;AAIE,QAAA,cAAc,EAAEC,cAJlB;AAKE,QAAA,iBAAiB,EAAEW,qBALrB,GAPJ,IADF;;;;;;AAmBA,WAASA,qBAAT,CAA+BC,KAA/B,EAA8C;AAC5C,QAAIjB,KAAK,CAACkB,iBAAV,EAA6B;AAC3BlB,MAAAA,KAAK,CAACkB,iBAAN,CAAwBD,KAAxB;AACD,KAFD,MAEO,IAAIN,QAAQ,CAACC,OAAb,EAAsB;AAC3BD,MAAAA,QAAQ,CAACC,OAAT,CAAiBO,KAAjB;AACD;AACF;;AAED,WAASL,WAAT,CAAqBM,CAArB,EAA4D;AAC1DX,IAAAA,UAAU,CAAC,IAAD,CAAV;AACAT,IAAAA,KAAK,CAACqB,OAAN,IAAiBrB,KAAK,CAACqB,OAAN,CAAcD,CAAd,CAAjB;AACD;;AAED,WAASL,UAAT,CAAoBK,CAApB,EAA2D;AACzDX,IAAAA,UAAU,CAAC,KAAD,CAAV;AACAT,IAAAA,KAAK,CAACsB,MAAN,IAAgBtB,KAAK,CAACsB,MAAN,CAAaF,CAAb,CAAhB;AACD;AACF,CA9CyC,CAArC","sourcesContent":["import React, { Ref, useImperativeHandle, useRef, useState } from 'react';\n\nimport { Input, InputProps, InputType } from '../Input';\nimport { Nullable } from '../../typings/utility-types';\nimport { MaskedInputElement } from '../../internal/MaskedInputElement';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\n\nexport interface MaskedProps {\n /** Паттерн маски */\n mask: string;\n /** Символ маски */\n maskChar?: Nullable<string>;\n /**\n * Словарь символов-регулярок для маски\n * @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' }\n */\n formatChars?: Record<string, string>;\n /** Показывать символы маски */\n alwaysShowMask?: boolean;\n}\n\nexport type MaskInputType = Exclude<InputType, 'number' | 'date' | 'time' | 'password'>;\n\nexport interface MaskedInputProps extends MaskedProps, Omit<InputProps, 'mask' | 'maxLength' | 'type' | 'element'> {\n type?: MaskInputType;\n}\n\n/**\n * Интерфейс пропсов наследуется от `Input`.\n * Из пропсов `Input` исключены некоторые не применимые к полю с маской пропсы и сокращен список возможных значений в type.\n */\nexport const MaskedInput = forwardRefAndName(\n 'MaskedInput',\n function MaskedInput(props: MaskedInputProps, ref: Ref<Input | null>) {\n const { mask, maskChar, formatChars, alwaysShowMask, placeholder, ...inputProps } = props;\n const [focused, setFocused] = useState(false);\n const showPlaceholder = !(alwaysShowMask || focused);\n const innerRef = useRef<Input>(null);\n\n useImperativeHandle(ref, () => innerRef.current);\n\n return (\n <Input\n ref={innerRef}\n {...inputProps}\n placeholder={showPlaceholder ? placeholder : undefined}\n onFocus={handleFocus}\n onBlur={handleBlur}\n element={\n <MaskedInputElement\n mask={mask}\n maskChar={maskChar}\n formatChars={formatChars}\n alwaysShowMask={alwaysShowMask}\n onUnexpectedInput={handleUnexpectedInput}\n />\n }\n />\n );\n\n function handleUnexpectedInput(value: string) {\n if (props.onUnexpectedInput) {\n props.onUnexpectedInput(value);\n } else if (innerRef.current) {\n innerRef.current.blink();\n }\n }\n\n function handleFocus(e: React.FocusEvent<HTMLInputElement>) {\n setFocused(true);\n props.onFocus && props.onFocus(e);\n }\n\n function handleBlur(e: React.FocusEvent<HTMLInputElement>) {\n setFocused(false);\n props.onBlur && props.onBlur(e);\n }\n },\n);\n"]}
|
|
1
|
+
{"version":3,"sources":["MaskedInput.tsx"],"names":["React","useImperativeHandle","useRef","useState","useEffect","IMaskInput","globalObject","MaskedInputElement","MaskedInputElementDataTids","forwardRefAndName","cx","uiFontGlobalClasses","Input","isKeyBackspace","isKeyDelete","someKeys","isInstanceOf","globalClasses","getDefinitions","getMaskChar","MaskedInput","props","ref","mask","maskChar","formatChars","alwaysShowMask","imaskProps","onAccept","customIMaskProps","placeholder","onValueChange","onUnexpectedInput","onKeyDownCapture","onChange","element","inputProps","inputRef","imaskRef","focused","setFocused","prevValue","value","String","defaultValue","prevSelectionStart","showPlaceholder","current","Object","assign","selectAll","delaySelectAll","input","selectionStart","getCompatibleIMaskProps","undefined","handleFocus","handleBlur","handleInput","handleSelect","handleKeyDownCapture","root","getMaskChars","handleAccept","e","target","HTMLInputElement","closest","nearest","maskRef","masked","nearestInputPos","length","selectionEnd","replace","placeholderChar","definitions","eager","overwrite","lazy","imaskPropsFix","maskChars","blocks","values","forEach","push","args","handleUnexpectedInput","onInput","onFocus","selectAllOnFocus","blink","onBlur","isDeleteKey","currentTarget","repeat"],"mappings":"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","sourcesContent":["import React, { Ref, useImperativeHandle, useRef, useState, useEffect } from 'react';\nimport { InputMask, MaskedPatternOptions, MaskedPattern } from 'imask';\nimport { IMaskInput, IMaskInputProps } from 'react-imask';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { MaskedInputElement, MaskedInputElementDataTids } from '../../internal/MaskedInputElement';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\nimport { cx } from '../../lib/theming/Emotion';\nimport { uiFontGlobalClasses } from '../../lib/styles/UiFont';\nimport { Input, InputProps, InputType } from '../Input';\nimport { isKeyBackspace, isKeyDelete, someKeys } from '../../lib/events/keyboard/identifiers';\nimport { isInstanceOf } from '../../lib/isInstanceOf';\n\nimport { globalClasses } from './MaskedInput.styles';\nimport { getDefinitions, getMaskChar } from './MaskedInput.helpers';\n\nexport interface MaskedProps {\n /** Паттерн маски */\n mask: string;\n /** Символ маски */\n maskChar?: Nullable<string>;\n /**\n * Словарь символов-регулярок для маски\n * @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' }\n */\n formatChars?: Record<string, string>;\n /**\n * Показывать символы маски\n *\n * null - не показывать\n * true - показывать всегда\n * false - показывать по фокусу\n */\n alwaysShowMask?: boolean | null;\n /**\n * Пропы для компонента `IMaskInput`\n *\n * @see https://imask.js.org/guide.html\n */\n imaskProps?: IMaskInputProps<HTMLInputElement>;\n}\n\nexport type MaskInputType = Exclude<InputType, 'number' | 'date' | 'time' | 'password'>;\n\nexport interface IMaskRefType {\n maskRef: InputMask<MaskedPatternOptions>;\n element: HTMLInputElement;\n}\n\nexport interface MaskedInputProps\n extends MaskedProps,\n Omit<InputProps, 'mask' | 'maxLength' | 'type' | 'alwaysShowMask'> {\n type?: MaskInputType;\n}\n\n/**\n * Интерфейс пропсов наследуется от `Input`.\n * Из пропсов `Input` исключены некоторые не применимые к полю с маской пропсы и сокращен список возможных значений в type.\n */\nexport const MaskedInput = forwardRefAndName(\n 'MaskedInput',\n function MaskedInput(props: MaskedInputProps, ref: Ref<Input | null>) {\n const {\n mask,\n maskChar,\n formatChars,\n alwaysShowMask,\n imaskProps: { onAccept, ...customIMaskProps } = {},\n placeholder,\n onValueChange,\n onUnexpectedInput,\n onKeyDownCapture,\n onChange,\n element,\n ...inputProps\n } = props;\n\n const inputRef = useRef<Input>(null);\n const imaskRef = useRef<IMaskRefType>(null);\n\n const [focused, setFocused] = useState(false);\n const prevValue = useRef<string>(props.value || String(props.defaultValue) || '');\n const prevSelectionStart = useRef<number | null>(null);\n\n const showPlaceholder = !(alwaysShowMask || focused);\n\n useImperativeHandle(\n ref,\n () =>\n inputRef.current &&\n Object.assign(inputRef.current, {\n selectAll: inputRef.current.delaySelectAll,\n }),\n [],\n );\n\n useEffect(() => {\n /**\n * Для корректной работы `onUnexpectedInput` надо знать предыдущий `value`,\n * но `imask` при монтировании не вызывает `onAccept`, если `value` невалиден или `laze=false`\n * Поэтому актуальный `value` при монтировании надо получать вручную\n */\n if (inputRef.current?.input) {\n prevValue.current = inputRef.current.input.value;\n prevSelectionStart.current = inputRef.current.input.selectionStart;\n }\n }, []);\n\n const imaskProps = getCompatibleIMaskProps();\n\n return (\n <Input\n ref={inputRef}\n {...inputProps}\n placeholder={showPlaceholder ? placeholder : undefined}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onInput={handleInput}\n onMouseUp={handleSelect}\n onKeyDownCapture={handleKeyDownCapture}\n className={cx(globalClasses.root, uiFontGlobalClasses.root)}\n data-tid={MaskedInputElementDataTids.root}\n element={\n <MaskedInputElement maskChars={getMaskChars(imaskProps)}>\n <IMaskInput ref={imaskRef} {...imaskProps} onAccept={handleAccept} />\n </MaskedInputElement>\n }\n />\n );\n\n function handleSelect(e: React.MouseEvent<HTMLInputElement>) {\n if (\n isInstanceOf(e.target, globalObject.HTMLInputElement) &&\n e.target === inputRef.current?.input &&\n e.target.closest('.react-ui-masked-input-root')\n ) {\n const nearest = imaskRef.current?.maskRef.masked.nearestInputPos(e.target.value.length, 'LEFT');\n if (\n typeof e.target.selectionStart === 'number' &&\n typeof nearest === 'number' &&\n e.target.selectionStart >= nearest\n ) {\n e.target.selectionStart = nearest;\n e.target.selectionEnd = nearest;\n }\n }\n }\n\n function getCompatibleIMaskProps(): IMaskInputProps<HTMLInputElement> {\n return {\n mask: mask.replace(/0/g, '{\\\\0}') as any,\n placeholderChar: getMaskChar(maskChar),\n definitions: getDefinitions(formatChars),\n eager: true,\n overwrite: 'shift',\n lazy: alwaysShowMask === null ? true : !(alwaysShowMask || focused),\n ...customIMaskProps,\n } as IMaskInputProps<HTMLInputElement>;\n }\n\n function getMaskChars(imaskProps: IMaskInputProps<HTMLInputElement>): string[] {\n const imaskPropsFix = imaskProps as MaskedPattern;\n const maskChars = [imaskPropsFix.placeholderChar];\n if (imaskPropsFix.blocks) {\n (Object.values(imaskPropsFix.blocks) as Array<{ placeholderChar?: string }>).forEach(\n ({ placeholderChar }) => placeholderChar && maskChars.push(placeholderChar),\n );\n }\n\n return maskChars;\n }\n\n function handleAccept(...args: Parameters<Required<IMaskInputProps<HTMLInputElement>>['onAccept']>) {\n const [value, , e] = args;\n\n /**\n * Метод `onAccept` может вызываться при монтировании, если не задан проп `defaultValue`.\n * Но нативный `input` никогда не вызывает `onChange` при монтировании.\n * Наше событие `onValueChange` в `Input` вывается в тех же случаях, что и нативный `onChange`,\n * поэтому чтобы сохранить консинстентность будем ориентироваться на наличие аргумента `e`.\n * Он содержит нативное событие, вызвавшее изменение.\n * Если его нет, значит `imask` вызывал `onAccept` по некой собственной логике.\n */\n e && onValueChange?.(value);\n\n onAccept?.(...args);\n }\n\n /**\n * Отслеживаем неожиданные нажатия\n * handleAccept не вызывается когда значение с маской не меняется\n * Сначала вызывается handleAccept, затем handleInput\n */\n function handleInput(e: React.ChangeEvent<HTMLInputElement>) {\n if (prevValue.current === e.target.value && prevSelectionStart.current === e.target.selectionStart) {\n handleUnexpectedInput(e.target.value);\n }\n\n prevValue.current = e.target.value;\n\n props.onInput?.(e);\n }\n\n function handleFocus(e: React.FocusEvent<HTMLInputElement>) {\n setFocused(true);\n props.onFocus?.(e);\n\n // если `value` из пропов отличается от `value`, которое получит `input` после обработки,\n // то `imask` будет ставить курсор за последним валидным символом.\n props.selectAllOnFocus && inputRef.current?.delaySelectAll();\n }\n\n function handleUnexpectedInput(value = '') {\n if (onUnexpectedInput) {\n onUnexpectedInput(value);\n } else if (inputRef.current) {\n inputRef.current.blink();\n }\n }\n\n function handleBlur(e: React.FocusEvent<HTMLInputElement>) {\n setFocused(false);\n props.onBlur?.(e);\n }\n\n function handleKeyDownCapture(e: React.KeyboardEvent<HTMLInputElement>) {\n const isDeleteKey = someKeys(isKeyBackspace, isKeyDelete)(e);\n\n prevSelectionStart.current = e.currentTarget.selectionStart;\n\n if (!e.currentTarget.value && isDeleteKey && !e.repeat) {\n handleUnexpectedInput(e.currentTarget.value);\n prevValue.current = e.currentTarget.value;\n }\n\n onKeyDownCapture?.(e);\n }\n },\n);\n"]}
|