@skbkontur/react-ui 4.21.0-next.2 → 4.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/cjs/components/Input/Input.d.ts +22 -5
  3. package/cjs/components/Input/Input.js +33 -14
  4. package/cjs/components/Input/Input.js.map +1 -1
  5. package/cjs/components/Input/Input.typings.d.ts +7 -0
  6. package/cjs/components/Input/Input.typings.js +1 -0
  7. package/cjs/components/Input/Input.typings.js.map +1 -0
  8. package/cjs/components/Input/index.d.ts +1 -0
  9. package/cjs/components/Input/index.js +2 -1
  10. package/cjs/components/Input/index.js.map +1 -1
  11. package/cjs/components/MaskedInput/MaskedInput.d.ts +24 -0
  12. package/cjs/components/MaskedInput/MaskedInput.js +78 -0
  13. package/cjs/components/MaskedInput/MaskedInput.js.map +1 -0
  14. package/cjs/components/MaskedInput/MaskedInput.md +21 -0
  15. package/cjs/components/MaskedInput/index.js.map +1 -0
  16. package/cjs/components/Token/Token.js +1 -1
  17. package/cjs/components/Token/Token.js.map +1 -1
  18. package/cjs/internal/{MaskedInput/MaskedInput.d.ts → InternalMaskedInput/InternalMaskedInput.d.ts} +8 -5
  19. package/cjs/internal/{MaskedInput/MaskedInput.js → InternalMaskedInput/InternalMaskedInput.js} +11 -8
  20. package/cjs/internal/InternalMaskedInput/InternalMaskedInput.js.map +1 -0
  21. package/cjs/internal/InternalMaskedInput/InternalMaskedInput.styles.js.map +1 -0
  22. package/cjs/internal/InternalMaskedInput/index.d.ts +1 -0
  23. package/cjs/internal/InternalMaskedInput/index.js +1 -0
  24. package/cjs/internal/InternalMaskedInput/index.js.map +1 -0
  25. package/cjs/internal/MaskedInputElement/MaskedInputElement.d.ts +14 -0
  26. package/cjs/internal/MaskedInputElement/MaskedInputElement.helpers.d.ts +16 -0
  27. package/cjs/internal/MaskedInputElement/MaskedInputElement.helpers.js +52 -0
  28. package/cjs/internal/MaskedInputElement/MaskedInputElement.helpers.js.map +1 -0
  29. package/cjs/internal/MaskedInputElement/MaskedInputElement.js +196 -0
  30. package/cjs/internal/MaskedInputElement/MaskedInputElement.js.map +1 -0
  31. package/cjs/internal/MaskedInputElement/MaskedInputElement.styles.js +29 -0
  32. package/cjs/internal/MaskedInputElement/MaskedInputElement.styles.js.map +1 -0
  33. package/cjs/internal/MaskedInputElement/index.d.ts +1 -0
  34. package/cjs/internal/MaskedInputElement/index.js +1 -0
  35. package/cjs/internal/MaskedInputElement/index.js.map +1 -0
  36. package/cjs/lib/utils.d.ts +7 -0
  37. package/cjs/lib/utils.js +25 -2
  38. package/cjs/lib/utils.js.map +1 -1
  39. package/components/Input/Input/Input.js +14 -5
  40. package/components/Input/Input/Input.js.map +1 -1
  41. package/components/Input/Input.d.ts +22 -5
  42. package/components/Input/Input.typings/Input.typings.js +1 -0
  43. package/components/Input/Input.typings/Input.typings.js.map +1 -0
  44. package/components/Input/Input.typings/package.json +6 -0
  45. package/components/Input/Input.typings.d.ts +7 -0
  46. package/components/Input/index/index.js +2 -1
  47. package/components/Input/index/index.js.map +1 -1
  48. package/components/Input/index.d.ts +1 -0
  49. package/components/MaskedInput/MaskedInput/MaskedInput.js +62 -0
  50. package/components/MaskedInput/MaskedInput/MaskedInput.js.map +1 -0
  51. package/{internal → components}/MaskedInput/MaskedInput/package.json +1 -1
  52. package/components/MaskedInput/MaskedInput.d.ts +24 -0
  53. package/components/MaskedInput/MaskedInput.md +21 -0
  54. package/components/MaskedInput/index/index.js.map +1 -0
  55. package/{internal → components}/MaskedInput/index/package.json +1 -1
  56. package/{internal → components}/MaskedInput/package.json +1 -1
  57. package/components/Token/Token/Token.js +4 -3
  58. package/components/Token/Token/Token.js.map +1 -1
  59. package/internal/{MaskedInput/MaskedInput/MaskedInput.js → InternalMaskedInput/InternalMaskedInput/InternalMaskedInput.js} +13 -9
  60. package/internal/InternalMaskedInput/InternalMaskedInput/InternalMaskedInput.js.map +1 -0
  61. package/internal/InternalMaskedInput/InternalMaskedInput/package.json +6 -0
  62. package/internal/{MaskedInput/MaskedInput.d.ts → InternalMaskedInput/InternalMaskedInput.d.ts} +8 -5
  63. package/{cjs/internal/MaskedInput/MaskedInput.styles.js.map → internal/InternalMaskedInput/InternalMaskedInput.styles/InternalMaskedInput.styles.js.map} +1 -1
  64. package/internal/InternalMaskedInput/InternalMaskedInput.styles/package.json +6 -0
  65. package/internal/InternalMaskedInput/InternalMaskedInput.styles.d.ts +6 -0
  66. package/internal/InternalMaskedInput/index/index.js +1 -0
  67. package/internal/InternalMaskedInput/index/index.js.map +1 -0
  68. package/internal/InternalMaskedInput/index/package.json +6 -0
  69. package/internal/InternalMaskedInput/index.d.ts +1 -0
  70. package/internal/InternalMaskedInput/package.json +6 -0
  71. package/internal/MaskedInputElement/MaskedInputElement/MaskedInputElement.js +206 -0
  72. package/internal/MaskedInputElement/MaskedInputElement/MaskedInputElement.js.map +1 -0
  73. package/internal/MaskedInputElement/MaskedInputElement/package.json +6 -0
  74. package/internal/MaskedInputElement/MaskedInputElement.d.ts +14 -0
  75. package/internal/MaskedInputElement/MaskedInputElement.helpers/MaskedInputElement.helpers.js +43 -0
  76. package/internal/MaskedInputElement/MaskedInputElement.helpers/MaskedInputElement.helpers.js.map +1 -0
  77. package/internal/MaskedInputElement/MaskedInputElement.helpers/package.json +6 -0
  78. package/internal/MaskedInputElement/MaskedInputElement.helpers.d.ts +16 -0
  79. package/internal/MaskedInputElement/MaskedInputElement.styles/MaskedInputElement.styles.js +16 -0
  80. package/internal/MaskedInputElement/MaskedInputElement.styles/MaskedInputElement.styles.js.map +1 -0
  81. package/internal/MaskedInputElement/MaskedInputElement.styles/package.json +6 -0
  82. package/internal/MaskedInputElement/MaskedInputElement.styles.d.ts +6 -0
  83. package/internal/MaskedInputElement/index/index.js +1 -0
  84. package/internal/MaskedInputElement/index/index.js.map +1 -0
  85. package/internal/MaskedInputElement/index/package.json +6 -0
  86. package/internal/MaskedInputElement/index.d.ts +1 -0
  87. package/internal/MaskedInputElement/package.json +6 -0
  88. package/lib/utils/utils.js +27 -1
  89. package/lib/utils/utils.js.map +1 -1
  90. package/lib/utils.d.ts +7 -0
  91. package/package.json +4 -3
  92. package/cjs/internal/MaskedInput/MaskedInput.js.map +0 -1
  93. package/cjs/internal/MaskedInput/index.js.map +0 -1
  94. package/internal/MaskedInput/MaskedInput/MaskedInput.js.map +0 -1
  95. package/internal/MaskedInput/MaskedInput.styles/MaskedInput.styles.js.map +0 -1
  96. package/internal/MaskedInput/MaskedInput.styles/package.json +0 -6
  97. package/internal/MaskedInput/index/index.js.map +0 -1
  98. /package/cjs/{internal → components}/MaskedInput/index.d.ts +0 -0
  99. /package/cjs/{internal → components}/MaskedInput/index.js +0 -0
  100. /package/cjs/internal/{MaskedInput/MaskedInput.styles.d.ts → InternalMaskedInput/InternalMaskedInput.styles.d.ts} +0 -0
  101. /package/cjs/internal/{MaskedInput/MaskedInput.styles.js → InternalMaskedInput/InternalMaskedInput.styles.js} +0 -0
  102. /package/{internal/MaskedInput/MaskedInput.styles.d.ts → cjs/internal/MaskedInputElement/MaskedInputElement.styles.d.ts} +0 -0
  103. /package/{internal → components}/MaskedInput/index/index.js +0 -0
  104. /package/{internal → components}/MaskedInput/index.d.ts +0 -0
  105. /package/internal/{MaskedInput/MaskedInput.styles/MaskedInput.styles.js → InternalMaskedInput/InternalMaskedInput.styles/InternalMaskedInput.styles.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,28 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [4.21.0](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.21.0-next.3...@skbkontur/react-ui@4.21.0) (2024-02-21)
7
+
8
+
9
+ ### Features
10
+
11
+ * **MuskedInput:** add MaskedInput component ([#3341](https://github.com/skbkontur/retail-ui/issues/3341)) ([4343d51](https://github.com/skbkontur/retail-ui/commit/223aa724d3497ae53d62ea8a86578c3564343d51))
12
+
13
+
14
+
15
+
16
+
17
+ ## [4.20.3](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.20.2...@skbkontur/react-ui@4.20.3) (2024-02-21)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **Token:** prevent focus on cross ([#3361](https://github.com/skbkontur/retail-ui/issues/3361)) ([757899c](https://github.com/skbkontur/retail-ui/commit/757899c17a1f5e040848ecd25a0eaf98ebe8e9e4))
23
+
24
+
25
+
26
+
27
+
6
28
  ## [4.20.2](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.20.1...@skbkontur/react-ui@4.20.2) (2024-02-19)
7
29
 
8
30
 
@@ -1,7 +1,8 @@
1
- import React, { AriaAttributes, HTMLAttributes } from 'react';
1
+ import React, { AriaAttributes, HTMLAttributes, ReactElement } from 'react';
2
2
  import { Nullable, Override } from '../../typings/utility-types';
3
3
  import { CommonProps } from '../../internal/CommonWrapper';
4
4
  import { SizeProp } from '../../lib/types/props';
5
+ import { InputElementProps } from './Input.typings';
5
6
  export declare const inputTypes: readonly ["password", "text", "number", "tel", "search", "time", "date", "url", "email"];
6
7
  /**
7
8
  * @deprecated use SizeProp
@@ -40,16 +41,26 @@ export interface InputProps extends CommonProps, Pick<HTMLAttributes<unknown>, '
40
41
  borderless?: boolean;
41
42
  /** Выравнивание текста */
42
43
  align?: InputAlign;
43
- /** Паттерн маски. Доступен для типов `text`, `password`, `email`, `tel`, `search`, `url` */
44
+ /**
45
+ * Паттерн маски. Доступен для типов `text`, `password`, `email`, `tel`, `search`, `url`
46
+ * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput
47
+ */
44
48
  mask?: Nullable<string>;
45
- /** Символ маски */
49
+ /**
50
+ * Символ маски
51
+ * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput
52
+ */
46
53
  maskChar?: Nullable<string>;
47
54
  /**
48
55
  * Словарь символов-регулярок для задания маски
56
+ * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput
49
57
  * @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' }
50
58
  */
51
59
  formatChars?: Record<string, string>;
52
- /** Показывать символы маски */
60
+ /**
61
+ * Показывать символы маски
62
+ * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput
63
+ */
53
64
  alwaysShowMask?: boolean;
54
65
  /** Размер */
55
66
  size?: SizeProp;
@@ -82,7 +93,7 @@ export interface InputProps extends CommonProps, Pick<HTMLAttributes<unknown>, '
82
93
  selectAllOnFocus?: boolean;
83
94
  /**
84
95
  * Обработчик неправильного ввода.
85
- * По-умолчанию, инпут вспыхивает синим.
96
+ * По-умолчанию, инпут вспыхивает акцентным цветом.
86
97
  * Если передан - вызывается переданный обработчик,
87
98
  * в таком случае вспыхивание можно вызвать
88
99
  * публичным методом инстанса `blink()`.
@@ -92,6 +103,11 @@ export interface InputProps extends CommonProps, Pick<HTMLAttributes<unknown>, '
92
103
  onUnexpectedInput?: (value: string) => void;
93
104
  /** @ignore */
94
105
  corners?: Partial<Pick<React.CSSProperties, 'borderTopRightRadius' | 'borderBottomRightRadius' | 'borderBottomLeftRadius' | 'borderTopLeftRadius'>>;
106
+ /**
107
+ * Элемент заменяет нативный input.
108
+ * Должен иметь пропы `InputElementProps` и тип `InputElement`
109
+ * */
110
+ element?: ReactElement<InputElementProps>;
95
111
  }> {
96
112
  }
97
113
  export interface InputState {
@@ -155,6 +171,7 @@ export declare class Input extends React.Component<InputProps, InputState> {
155
171
  private delaySelectAll;
156
172
  private cancelDelayedSelectAll;
157
173
  private cancelBlink;
174
+ private getInput;
158
175
  private renderMain;
159
176
  private renderMaskedInput;
160
177
  private getIconSizeClassname;
@@ -9,7 +9,7 @@ var _client = require("../../lib/client");
9
9
  var _identifiers = require("../../lib/events/keyboard/identifiers");
10
10
  var _needsPolyfillPlaceholder = require("../../lib/needsPolyfillPlaceholder");
11
11
 
12
- var _MaskedInput = require("../../internal/MaskedInput");
12
+ var _InternalMaskedInput = require("../../internal/InternalMaskedInput");
13
13
  var _ThemeContext = require("../../lib/theming/ThemeContext");
14
14
 
15
15
  var _CommonWrapper = require("../../internal/CommonWrapper");
@@ -20,9 +20,10 @@ var _ThemeHelpers = require("../../lib/theming/ThemeHelpers");
20
20
  var _utils = require("../../lib/utils");
21
21
 
22
22
 
23
+
23
24
  var _Input = require("./Input.styles");
24
25
  var _InputLayout = require("./InputLayout/InputLayout");
25
- var _PolyfillPlaceholder = require("./InputLayout/PolyfillPlaceholder");var _excluded = ["onMouseEnter", "onMouseLeave", "onMouseOver", "onKeyDown", "onKeyPress", "onValueChange", "width", "error", "role", "warning", "leftIcon", "rightIcon", "borderless", "value", "align", "type", "mask", "maskChar", "alwaysShowMask", "size", "placeholder", "selectAllOnFocus", "disabled", "onUnexpectedInput", "prefix", "suffix", "formatChars", "corners", "aria-describedby", "aria-controls", "aria-label"];var _class, _class2, _temp;
26
+ var _PolyfillPlaceholder = require("./InputLayout/PolyfillPlaceholder");var _excluded = ["onMouseEnter", "onMouseLeave", "onMouseOver", "onKeyDown", "onKeyPress", "onValueChange", "width", "error", "role", "warning", "leftIcon", "rightIcon", "borderless", "value", "align", "type", "mask", "maskChar", "alwaysShowMask", "size", "placeholder", "selectAllOnFocus", "disabled", "onUnexpectedInput", "prefix", "suffix", "formatChars", "corners", "aria-describedby", "aria-controls", "aria-label", "element"];var _class, _class2, _temp;
26
27
 
27
28
  var inputTypes = ['password', 'text', 'number', 'tel', 'search', 'time', 'date', 'url', 'email'];
28
29
 
@@ -133,6 +134,21 @@ var maskErrorMessage = function maskErrorMessage(type, allowedTypes) {if (allowe
133
134
 
134
135
 
135
136
 
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
136
152
 
137
153
 
138
154
 
@@ -334,6 +350,16 @@ Input = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
334
350
  }
335
351
  };_this.
336
352
 
353
+ getInput = function (inputProps) {
354
+ if (_this.props.element) {
355
+ return /*#__PURE__*/_react.default.cloneElement(_this.props.element, inputProps);
356
+ }
357
+
358
+ return _this.props.mask && !_this.canBeUsedWithMask ?
359
+ _this.renderMaskedInput(inputProps, _this.props.mask) : /*#__PURE__*/
360
+ _react.default.createElement('input', inputProps);
361
+ };_this.
362
+
337
363
  renderMain = function (props) {var _cx, _cx2;
338
364
  var
339
365
  onMouseEnter =
@@ -368,7 +394,8 @@ Input = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
368
394
 
369
395
 
370
396
 
371
- props.onMouseEnter,onMouseLeave = props.onMouseLeave,onMouseOver = props.onMouseOver,onKeyDown = props.onKeyDown,onKeyPress = props.onKeyPress,onValueChange = props.onValueChange,width = props.width,error = props.error,role = props.role,warning = props.warning,leftIcon = props.leftIcon,rightIcon = props.rightIcon,borderless = props.borderless,value = props.value,align = props.align,type = props.type,mask = props.mask,maskChar = props.maskChar,alwaysShowMask = props.alwaysShowMask,size = props.size,placeholder = props.placeholder,selectAllOnFocus = props.selectAllOnFocus,disabled = props.disabled,onUnexpectedInput = props.onUnexpectedInput,prefix = props.prefix,suffix = props.suffix,formatChars = props.formatChars,corners = props.corners,ariaDescribedby = props['aria-describedby'],ariaControls = props['aria-controls'],ariaLabel = props['aria-label'],rest = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
397
+
398
+ props.onMouseEnter,onMouseLeave = props.onMouseLeave,onMouseOver = props.onMouseOver,onKeyDown = props.onKeyDown,onKeyPress = props.onKeyPress,onValueChange = props.onValueChange,width = props.width,error = props.error,role = props.role,warning = props.warning,leftIcon = props.leftIcon,rightIcon = props.rightIcon,borderless = props.borderless,value = props.value,align = props.align,type = props.type,mask = props.mask,maskChar = props.maskChar,alwaysShowMask = props.alwaysShowMask,size = props.size,placeholder = props.placeholder,selectAllOnFocus = props.selectAllOnFocus,disabled = props.disabled,onUnexpectedInput = props.onUnexpectedInput,prefix = props.prefix,suffix = props.suffix,formatChars = props.formatChars,corners = props.corners,ariaDescribedby = props['aria-describedby'],ariaControls = props['aria-controls'],ariaLabel = props['aria-label'],element = props.element,rest = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
372
399
 
373
400
  var _this$state = _this.state,blinking = _this$state.blinking,focused = _this$state.focused;
374
401
 
@@ -414,10 +441,7 @@ Input = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
414
441
  'aria-label': ariaLabel });
415
442
 
416
443
 
417
- var input =
418
- mask && !_this.canBeUsedWithMask ?
419
- _this.renderMaskedInput(inputProps, mask) : /*#__PURE__*/
420
- _react.default.createElement('input', inputProps);
444
+ var input = _this.getInput(inputProps);
421
445
 
422
446
  if ((0, _ThemeHelpers.isTheme2022)(_this.theme)) {
423
447
  return /*#__PURE__*/(
@@ -559,11 +583,6 @@ Input = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
559
583
 
560
584
 
561
585
 
562
-
563
-
564
-
565
-
566
-
567
586
 
568
587
 
569
588
 
@@ -571,7 +590,7 @@ Input = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
571
590
 
572
591
 
573
592
  refInput = function (element) {
574
- if (element instanceof _MaskedInput.MaskedInput) {
593
+ if (element instanceof _InternalMaskedInput.InternalMaskedInput || element && 'input' in element) {
575
594
  _this.input = element.input;
576
595
  } else {
577
596
  _this.input = element;
@@ -691,7 +710,7 @@ Input = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
691
710
  * @param {number} end
692
711
  */;_proto.setSelectionRange = function setSelectionRange(start, end) {var _globalObject$documen,_this$props$value,_this3 = this; // https://github.com/facebook/react/issues/7769
693
712
  // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange
694
- if (!selectionAllowedTypes.includes(this.getProps().type)) {(0, _warning.default)(false, selectionErrorMessage(this.getProps().type));return;}if (!this.input) {throw new Error('Cannot call "setSelectionRange" on unmounted Input');}if (((_globalObject$documen = _globalObject.globalObject.document) == null ? void 0 : _globalObject$documen.activeElement) !== this.input) {this.focus();}if (this.props.mask && this.props.value && ((_this$props$value = this.props.value) == null ? void 0 : _this$props$value.length) < this.props.mask.length) {_globalObject.globalObject.setTimeout(function () {var _this3$input;(_this3$input = _this3.input) == null ? void 0 : _this3$input.setSelectionRange(start, end);}, 150);} else {var _this$input;(_this$input = this.input) == null ? void 0 : _this$input.setSelectionRange(start, end);}};_proto.render = function render() {var _this4 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this4.theme = theme;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: _this4.setRootNode }, _this4.props), _this4.renderMain);});};_proto.renderMaskedInput = function renderMaskedInput(inputProps, mask) {return /*#__PURE__*/_react.default.createElement(_MaskedInput.MaskedInput, (0, _extends2.default)({}, inputProps, { mask: mask, maskChar: this.props.maskChar, alwaysShowMask: this.props.alwaysShowMask, formatChars: this.props.formatChars, onChange: this.props.onChange, onValueChange: this.handleMaskedValueChange, onUnexpectedInput: this.handleUnexpectedInput }));};_proto.getIconSizeClassname = function getIconSizeClassname(right) {if (right === void 0) {right = false;}switch (this.getProps().size) {case 'large':return right ? _Input.styles.rightIconLarge(this.theme) : _Input.styles.leftIconLarge(this.theme);case 'medium':return right ? _Input.styles.rightIconMedium(this.theme) : _Input.styles.leftIconMedium(this.theme);case 'small':default:return right ? _Input.styles.rightIconSmall(this.theme) : _Input.styles.leftIconSmall(this.theme);}};_proto.renderLeftIcon = function renderLeftIcon() {return this.renderIcon(this.props.leftIcon, this.getIconSizeClassname());};_proto.renderRightIcon = function renderRightIcon() {return this.renderIcon(this.props.rightIcon, this.getIconSizeClassname(true));};_proto.renderIcon = function renderIcon(icon, sizeClassName) {var _cx5;if (!icon) {return null;}var disabled = this.props.disabled;var iconNode = (0, _utils.isFunction)(icon) ? icon() : icon;return /*#__PURE__*/_react.default.createElement("span", { className: (0, _Emotion.cx)(_Input.styles.icon(), sizeClassName, _Input.styles.useDefaultColor(this.theme), (_cx5 = {}, _cx5[_Input.styles.iconFocus(this.theme)] = this.state.focused, _cx5[_Input.styles.iconDisabled()] = disabled, _cx5)) }, iconNode);};_proto.renderPlaceholder = function renderPlaceholder() {var disabled = this.props.disabled;var focused = this.state.focused;var placeholder = null;if (this.state.needsPolyfillPlaceholder && this.props.placeholder && !this.isMaskVisible && !this.props.value && !this.props.defaultValue) {var _cx6;placeholder = /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(_Input.styles.placeholder(this.theme), (_cx6 = {}, _cx6[_Input.styles.placeholderDisabled(this.theme)] = disabled, _cx6[_Input.styles.placeholderFocus(this.theme)] = focused, _cx6)), style: { textAlign: this.props.align || 'inherit' } }, this.props.placeholder);}return placeholder;};_proto.getSizeClassName = function getSizeClassName() {var _cx7, _cx8, _cx9;switch (this.getProps().size) {case 'large':return (0, _Emotion.cx)((_cx7 = {}, _cx7[_Input.styles.sizeLarge(this.theme)] = true, _cx7[_Input.styles.sizeLargeFallback(this.theme)] = _client.isIE11 || _client.isEdge, _cx7));case 'medium':return (0, _Emotion.cx)((_cx8 = {}, _cx8[_Input.styles.sizeMedium(this.theme)] = true, _cx8[_Input.styles.sizeMediumFallback(this.theme)] = _client.isIE11 || _client.isEdge, _cx8));case 'small':default:return (0, _Emotion.cx)((_cx9 = {}, _cx9[_Input.styles.sizeSmall(this.theme)] = true, _cx9[_Input.styles.sizeSmallFallback(this.theme)] = _client.isIE11 || _client.isEdge, _cx9));}};(0, _createClass2.default)(Input, [{ key: "isMaskVisible", get: function get() {var _this$props3 = this.props,mask = _this$props3.mask,alwaysShowMask = _this$props3.alwaysShowMask;var focused = this.state.focused;return Boolean(mask && (focused || alwaysShowMask));} }, { key: "canBeUsedWithMask", get: function get() {return maskForbiddenTypes.includes(this.getProps().type);} /**
713
+ if (!selectionAllowedTypes.includes(this.getProps().type)) {(0, _warning.default)(false, selectionErrorMessage(this.getProps().type));return;}if (!this.input) {throw new Error('Cannot call "setSelectionRange" on unmounted Input');}if (((_globalObject$documen = _globalObject.globalObject.document) == null ? void 0 : _globalObject$documen.activeElement) !== this.input) {this.focus();}if (this.props.mask && this.props.value && ((_this$props$value = this.props.value) == null ? void 0 : _this$props$value.length) < this.props.mask.length) {_globalObject.globalObject.setTimeout(function () {var _this3$input;(_this3$input = _this3.input) == null ? void 0 : _this3$input.setSelectionRange(start, end);}, 150);} else {var _this$input;(_this$input = this.input) == null ? void 0 : _this$input.setSelectionRange(start, end);}};_proto.render = function render() {var _this4 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this4.theme = theme;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: _this4.setRootNode }, _this4.props), _this4.renderMain);});};_proto.renderMaskedInput = function renderMaskedInput(inputProps, mask) {return /*#__PURE__*/_react.default.createElement(_InternalMaskedInput.InternalMaskedInput, (0, _extends2.default)({}, inputProps, { mask: mask, maskChar: this.props.maskChar, alwaysShowMask: this.props.alwaysShowMask, formatChars: this.props.formatChars, onChange: this.props.onChange, onValueChange: this.handleMaskedValueChange, onUnexpectedInput: this.handleUnexpectedInput }));};_proto.getIconSizeClassname = function getIconSizeClassname(right) {if (right === void 0) {right = false;}switch (this.getProps().size) {case 'large':return right ? _Input.styles.rightIconLarge(this.theme) : _Input.styles.leftIconLarge(this.theme);case 'medium':return right ? _Input.styles.rightIconMedium(this.theme) : _Input.styles.leftIconMedium(this.theme);case 'small':default:return right ? _Input.styles.rightIconSmall(this.theme) : _Input.styles.leftIconSmall(this.theme);}};_proto.renderLeftIcon = function renderLeftIcon() {return this.renderIcon(this.props.leftIcon, this.getIconSizeClassname());};_proto.renderRightIcon = function renderRightIcon() {return this.renderIcon(this.props.rightIcon, this.getIconSizeClassname(true));};_proto.renderIcon = function renderIcon(icon, sizeClassName) {var _cx5;if (!icon) {return null;}var disabled = this.props.disabled;var iconNode = (0, _utils.isFunction)(icon) ? icon() : icon;return /*#__PURE__*/_react.default.createElement("span", { className: (0, _Emotion.cx)(_Input.styles.icon(), sizeClassName, _Input.styles.useDefaultColor(this.theme), (_cx5 = {}, _cx5[_Input.styles.iconFocus(this.theme)] = this.state.focused, _cx5[_Input.styles.iconDisabled()] = disabled, _cx5)) }, iconNode);};_proto.renderPlaceholder = function renderPlaceholder() {var disabled = this.props.disabled;var focused = this.state.focused;var placeholder = null;if (this.state.needsPolyfillPlaceholder && this.props.placeholder && !this.isMaskVisible && !this.props.value && !this.props.defaultValue) {var _cx6;placeholder = /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(_Input.styles.placeholder(this.theme), (_cx6 = {}, _cx6[_Input.styles.placeholderDisabled(this.theme)] = disabled, _cx6[_Input.styles.placeholderFocus(this.theme)] = focused, _cx6)), style: { textAlign: this.props.align || 'inherit' } }, this.props.placeholder);}return placeholder;};_proto.getSizeClassName = function getSizeClassName() {var _cx7, _cx8, _cx9;switch (this.getProps().size) {case 'large':return (0, _Emotion.cx)((_cx7 = {}, _cx7[_Input.styles.sizeLarge(this.theme)] = true, _cx7[_Input.styles.sizeLargeFallback(this.theme)] = _client.isIE11 || _client.isEdge, _cx7));case 'medium':return (0, _Emotion.cx)((_cx8 = {}, _cx8[_Input.styles.sizeMedium(this.theme)] = true, _cx8[_Input.styles.sizeMediumFallback(this.theme)] = _client.isIE11 || _client.isEdge, _cx8));case 'small':default:return (0, _Emotion.cx)((_cx9 = {}, _cx9[_Input.styles.sizeSmall(this.theme)] = true, _cx9[_Input.styles.sizeSmallFallback(this.theme)] = _client.isIE11 || _client.isEdge, _cx9));}};(0, _createClass2.default)(Input, [{ key: "isMaskVisible", get: function get() {var _this$props3 = this.props,mask = _this$props3.mask,alwaysShowMask = _this$props3.alwaysShowMask;var focused = this.state.focused;return Boolean(mask && (focused || alwaysShowMask));} }, { key: "canBeUsedWithMask", get: function get() {return maskForbiddenTypes.includes(this.getProps().type);} /**
695
714
  * Работает с типами `text`, `password`, `tel`, `search`, `url`
696
715
  * [Документация](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange)
697
716
  * @public
@@ -1 +1 @@
1
- {"version":3,"sources":["Input.tsx"],"names":["inputTypes","selectionAllowedTypes","selectionErrorMessage","type","allowedTypes","map","i","join","maskForbiddenTypes","maskAllowedTypes","filter","includes","maskErrorMessage","InputDataTids","root","Input","rootNode","getProps","defaultProps","state","needsPolyfillPlaceholder","blinking","focused","selectAllId","input","selectAll","setSelectionRange","value","length","delaySelectAll","globalObject","requestAnimationFrame","cancelDelayedSelectAll","cancelAnimationFrame","cancelBlink","callback","blinkTimeout","clearTimeout","setState","renderMain","props","onMouseEnter","onMouseLeave","onMouseOver","onKeyDown","onKeyPress","onValueChange","width","error","role","warning","leftIcon","rightIcon","borderless","align","mask","maskChar","alwaysShowMask","size","placeholder","selectAllOnFocus","disabled","onUnexpectedInput","prefix","suffix","formatChars","corners","ariaDescribedby","ariaControls","ariaLabel","rest","labelProps","className","styles","theme","getSizeClassName","focus","hovering","blink","focusFallback","isIE11","isEdge","warningFallback","errorFallback","style","inputProps","inputFocus","inputDisabled","onChange","handleChange","onFocus","handleFocus","handleKeyDown","handleKeyPress","onBlur","handleBlur","textAlign","ref","refInput","isMaskVisible","undefined","canBeUsedWithMask","renderMaskedInput","React","createElement","Boolean","defaultValue","sideContainer","renderLeftIcon","renderPrefix","wrapper","renderPlaceholder","rightContainer","renderSuffix","renderRightIcon","element","MaskedInput","event","fieldIsEmpty","target","e","isDeleteKey","isKeyBackspace","isKeyDelete","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__"],"mappings":";;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA,wE;;AAEO,IAAMA,UAAU,GAAG,CAAC,UAAD,EAAa,MAAb,EAAqB,QAArB,EAA+B,KAA/B,EAAsC,QAAtC,EAAgD,MAAhD,EAAwD,MAAxD,EAAgE,KAAhE,EAAuE,OAAvE,CAAnB;;AAEP;AACA;AACA,G;;;;;;AAMO,IAAMC,qBAAkC,GAAG,CAAC,MAAD,EAAS,UAAT,EAAqB,KAArB,EAA4B,QAA5B,EAAsC,KAAtC,CAA3C,C;AACA,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAwB,CAACC,IAAD,EAAkBC,YAAlB,EAAwE,KAAtDA,YAAsD,cAAtDA,YAAsD,GAA1BH,qBAA0B;AAC3G,kEAA6DE,IAA7D,0CAAqGC,YAAY;AAC9GC,EAAAA,GADkG,CAC9F,UAACC,CAAD,iBAAWA,CAAX,SAD8F;AAElGC,EAAAA,IAFkG,CAE7F,IAF6F,CAArG;AAGD,CAJM,C;;AAMA,IAAMC,kBAA+B,GAAG,CAAC,QAAD,EAAW,MAAX,EAAmB,MAAnB,CAAxC,C;AACA,IAAMC,gBAA6B,GAAGT,UAAU,CAACU,MAAX,CAAkB,UAACP,IAAD,EAAU;AACvE,SAAO,CAACK,kBAAkB,CAACG,QAAnB,CAA4BR,IAA5B,CAAR;AACD,CAF4C,CAAtC,C;AAGA,IAAMS,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACT,IAAD,EAAkBC,YAAlB,EAAmE,KAAjDA,YAAiD,cAAjDA,YAAiD,GAArBK,gBAAqB;AACjG,+DAAwDN,IAAxD,6BAAmFC,YAAY;AAC5FC,EAAAA,GADgF,CAC5E,UAACC,CAAD,iBAAWA,CAAX,SAD4E;AAEhFC,EAAAA,IAFgF,CAE3E,IAF2E,CAAnF;AAGD,CAJM,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwGA,IAAMM,aAAa,GAAG;AAC3BC,EAAAA,IAAI,EAAE,aADqB,EAAtB,C;;;;;AAMP;AACA;AACA;AACA,G;;AAEaC,K,OADZC,kB;;;;;;;;AASSC,IAAAA,Q,GAAW,0CAAkBF,KAAK,CAACG,YAAxB,C;;AAEZC,IAAAA,K,GAAoB;AACzBC,MAAAA,wBAAwB,EAAxBA,kDADyB;AAEzBC,MAAAA,QAAQ,EAAE,KAFe;AAGzBC,MAAAA,OAAO,EAAE,KAHgB,E;;;AAMnBC,IAAAA,W,GAA6B,I;;;AAG7BC,IAAAA,K,GAAiC,I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6HlCC,IAAAA,S,GAAY,YAAY;AAC7B,UAAI,MAAKD,KAAT,EAAgB;AACd,cAAKE,iBAAL,CAAuB,CAAvB,EAA0B,MAAKF,KAAL,CAAWG,KAAX,CAAiBC,MAA3C;AACD;AACF,K;;AAEOC,IAAAA,c,GAAiB;AACtB,cAAKN,WAAL,4BAAmBO,2BAAaC,qBAAhC,oBAAmBD,2BAAaC,qBAAb,CAAqC,MAAKN,SAA1C,CAAnB,oCAA2E,IADrD,G;;AAGjBO,IAAAA,sB,GAAyB,YAAY;AAC3C,UAAI,MAAKT,WAAT,EAAsB;AACpBO,mCAAaG,oBAAb,+CAAaA,oBAAb,CAAoC,MAAKV,WAAzC;AACA,cAAKA,WAAL,GAAmB,IAAnB;AACD;AACF,K;;AAEOW,IAAAA,W,GAAc,UAACC,QAAD,EAAiC;AACrD,UAAI,MAAKC,YAAT,EAAuB;AACrBN,mCAAaO,YAAb,CAA0B,MAAKD,YAA/B;AACA,cAAKA,YAAL,GAAoB,CAApB;AACA,YAAI,MAAKjB,KAAL,CAAWE,QAAf,EAAyB;AACvB,gBAAKiB,QAAL,CAAc,EAAEjB,QAAQ,EAAE,KAAZ,EAAd,EAAmCc,QAAnC;AACA;AACD;AACF;AACD,UAAIA,QAAJ,EAAc;AACZA,QAAAA,QAAQ;AACT;AACF,K;;AAEOI,IAAAA,U,GAAa,UAACC,KAAD,EAA+C;AAClE;AACEC,MAAAA,YADF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCID,MAAAA,KAjCJ,CACEC,YADF,CAEEC,YAFF,GAiCIF,KAjCJ,CAEEE,YAFF,CAGEC,WAHF,GAiCIH,KAjCJ,CAGEG,WAHF,CAIEC,SAJF,GAiCIJ,KAjCJ,CAIEI,SAJF,CAKEC,UALF,GAiCIL,KAjCJ,CAKEK,UALF,CAMEC,aANF,GAiCIN,KAjCJ,CAMEM,aANF,CAOEC,KAPF,GAiCIP,KAjCJ,CAOEO,KAPF,CAQEC,KARF,GAiCIR,KAjCJ,CAQEQ,KARF,CASEC,IATF,GAiCIT,KAjCJ,CASES,IATF,CAUEC,OAVF,GAiCIV,KAjCJ,CAUEU,OAVF,CAWEC,QAXF,GAiCIX,KAjCJ,CAWEW,QAXF,CAYEC,SAZF,GAiCIZ,KAjCJ,CAYEY,SAZF,CAaEC,UAbF,GAiCIb,KAjCJ,CAaEa,UAbF,CAcE1B,KAdF,GAiCIa,KAjCJ,CAcEb,KAdF,CAeE2B,KAfF,GAiCId,KAjCJ,CAeEc,KAfF,CAgBEnD,IAhBF,GAiCIqC,KAjCJ,CAgBErC,IAhBF,CAiBEoD,IAjBF,GAiCIf,KAjCJ,CAiBEe,IAjBF,CAkBEC,QAlBF,GAiCIhB,KAjCJ,CAkBEgB,QAlBF,CAmBEC,cAnBF,GAiCIjB,KAjCJ,CAmBEiB,cAnBF,CAoBEC,IApBF,GAiCIlB,KAjCJ,CAoBEkB,IApBF,CAqBEC,WArBF,GAiCInB,KAjCJ,CAqBEmB,WArBF,CAsBEC,gBAtBF,GAiCIpB,KAjCJ,CAsBEoB,gBAtBF,CAuBEC,QAvBF,GAiCIrB,KAjCJ,CAuBEqB,QAvBF,CAwBEC,iBAxBF,GAiCItB,KAjCJ,CAwBEsB,iBAxBF,CAyBEC,MAzBF,GAiCIvB,KAjCJ,CAyBEuB,MAzBF,CA0BEC,MA1BF,GAiCIxB,KAjCJ,CA0BEwB,MA1BF,CA2BEC,WA3BF,GAiCIzB,KAjCJ,CA2BEyB,WA3BF,CA4BEC,OA5BF,GAiCI1B,KAjCJ,CA4BE0B,OA5BF,CA6BsBC,eA7BtB,GAiCI3B,KAjCJ,CA6BE,kBA7BF,EA8BmB4B,YA9BnB,GAiCI5B,KAjCJ,CA8BE,eA9BF,EA+BgB6B,SA/BhB,GAiCI7B,KAjCJ,CA+BE,YA/BF,EAgCK8B,IAhCL,+CAiCI9B,KAjCJ;;AAmCA,wBAA8B,MAAKrB,KAAnC,CAAQE,QAAR,eAAQA,QAAR,CAAkBC,OAAlB,eAAkBA,OAAlB;;AAEA,UAAMiD,UAAU,GAAG;AACjBC,QAAAA,SAAS,EAAE,iBAAGC,cAAO3D,IAAP,CAAY,MAAK4D,KAAjB,CAAH,EAA4B,MAAKC,gBAAL,EAA5B;AACRF,sBAAOG,KAAP,CAAa,MAAKF,KAAlB,CADQ,IACmBpD,OAAO,IAAI,CAAC4B,OAAZ,IAAuB,CAACF,KAD3C;AAERyB,sBAAOI,QAAP,CAAgB,MAAKH,KAArB,CAFQ,IAEsB,CAACpD,OAAD,IAAY,CAACuC,QAAb,IAAyB,CAACX,OAA1B,IAAqC,CAACF,KAAtC,IAA+C,CAACK,UAFtE;AAGRoB,sBAAOK,KAAP,CAAa,MAAKJ,KAAlB,CAHQ,IAGmBrD,QAHnB;AAIRoD,sBAAOpB,UAAP,EAJQ,IAIcA,UAAU,IAAI,CAAC/B,OAJ7B;AAKRmD,sBAAOZ,QAAP,CAAgB,MAAKa,KAArB,CALQ,IAKsBb,QALtB;AAMRY,sBAAOvB,OAAP,CAAe,MAAKwB,KAApB,CANQ,IAMqBxB,OANrB;AAORuB,sBAAOzB,KAAP,CAAa,MAAK0B,KAAlB,CAPQ,IAOmB1B,KAPnB;AAQRyB,sBAAOM,aAAP,CAAqB,MAAKL,KAA1B,CARQ,IAQ2BpD,OAAO,KAAK0D,kBAAUC,cAAf,CARlC;AASRR,sBAAOS,eAAP,CAAuB,MAAKR,KAA5B,CATQ,IAS6BxB,OAAO,KAAK8B,kBAAUC,cAAf,CATpC;AAURR,sBAAOU,aAAP,CAAqB,MAAKT,KAA1B,CAVQ,IAU2B1B,KAAK,KAAKgC,kBAAUC,cAAf,CAVhC,OADM;;AAajB,yBAAiBb,YAbA;AAcjBgB,QAAAA,KAAK,2BAAIrC,KAAK,EAALA,KAAJ,IAAcmB,OAAd,CAdY;AAejBzB,QAAAA,YAAY,EAAZA,YAfiB;AAgBjBC,QAAAA,YAAY,EAAZA,YAhBiB;AAiBjBC,QAAAA,WAAW,EAAXA,WAjBiB,EAAnB;;;AAoBA,UAAM0C,UAAU;AACXf,MAAAA,IADW;AAEdE,QAAAA,SAAS,EAAE,iBAAGC,cAAOjD,KAAP,CAAa,MAAKkD,KAAlB,CAAH;AACRD,sBAAOa,UAAP,CAAkB,MAAKZ,KAAvB,CADQ,IACwBpD,OADxB;AAERmD,sBAAOc,aAAP,CAAqB,MAAKb,KAA1B,CAFQ,IAE2Bb,QAF3B,QAFG;;AAMdlC,QAAAA,KAAK,EAALA,KANc;AAOdsB,QAAAA,IAAI,EAAJA,IAPc;AAQduC,QAAAA,QAAQ,EAAE,MAAKC,YARD;AASdC,QAAAA,OAAO,EAAE,MAAKC,WATA;AAUd/C,QAAAA,SAAS,EAAE,MAAKgD,aAVF;AAWd/C,QAAAA,UAAU,EAAE,MAAKgD,cAXH;AAYdC,QAAAA,MAAM,EAAE,MAAKC,UAZC;AAadX,QAAAA,KAAK,EAAE,EAAEY,SAAS,EAAE1C,KAAb,EAbO;AAcd2C,QAAAA,GAAG,EAAE,MAAKC,QAdI;AAed/F,QAAAA,IAAI,EAAJA,IAfc;AAgBdwD,QAAAA,WAAW,EAAE,CAAC,MAAKwC,aAAN,IAAuB,CAAC/E,kDAAxB,GAAmDuC,WAAnD,GAAiEyC,SAhBhE;AAiBdvC,QAAAA,QAAQ,EAARA,QAjBc;AAkBd,4BAAoBM,eAlBN;AAmBd,sBAAcE,SAnBA,GAAhB;;;AAsBA,UAAM7C,KAAK;AACT+B,MAAAA,IAAI,IAAI,CAAC,MAAK8C,iBAAd;AACI,YAAKC,iBAAL,CAAuBjB,UAAvB,EAAmC9B,IAAnC,CADJ;AAEIgD,qBAAMC,aAAN,CAAoB,OAApB,EAA6BnB,UAA7B,CAHN;;AAKA,UAAI,+BAAY,MAAKX,KAAjB,CAAJ,EAA6B;AAC3B;AACE,uCAAC,wBAAD;AACE,YAAA,QAAQ,EAAEvB,QADZ;AAEE,YAAA,SAAS,EAAEC,SAFb;AAGE,YAAA,MAAM,EAAEW,MAHV;AAIE,YAAA,MAAM,EAAEC,MAJV;AAKE,YAAA,UAAU,EAAEO,UALd;AAME,YAAA,OAAO,EAAE,EAAEV,QAAQ,EAAE4C,OAAO,CAAC5C,QAAD,CAAnB,EAA+BvC,OAAO,EAAPA,OAA/B,EAAwCoC,IAAI,EAAJA,IAAxC,EANX;;AAQGlC,UAAAA,KARH;AASG,gBAAKL,KAAL,CAAWC,wBAAX;AACC,uCAAC,wCAAD;AACE,YAAA,aAAa,EAAE,MAAK+E,aADtB;AAEE,YAAA,KAAK,EAAExE,KAFT;AAGE,YAAA,YAAY,EAAE,MAAKa,KAAL,CAAWkE,YAH3B;AAIE,YAAA,KAAK,EAAEpD,KAJT;;AAMGK,UAAAA,WANH,CAVJ,CADF;;;;;AAsBD;;AAED;AACE,uEAAO,YAAU9C,aAAa,CAACC,IAA/B,IAAyCyD,UAAzC;AACE,+CAAM,SAAS,EAAEE,cAAOkC,aAAP,EAAjB;AACG,cAAKC,cAAL,EADH;AAEG,cAAKC,YAAL,EAFH,CADF;;AAKE,+CAAM,SAAS,EAAEpC,cAAOqC,OAAP,EAAjB;AACGtF,QAAAA,KADH;AAEG,cAAKuF,iBAAL,EAFH,CALF;;AASE,+CAAM,SAAS,EAAE,iBAAGtC,cAAOkC,aAAP,EAAH,EAA2BlC,cAAOuC,cAAP,EAA3B,CAAjB;AACG,cAAKC,YAAL,EADH;AAEG,cAAKC,eAAL,EAFH,CATF,CADF;;;;AAgBD,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8GOhB,IAAAA,Q,GAAW,UAACiB,OAAD,EAAoD;AACrE,UAAIA,OAAO,YAAYC,wBAAvB,EAAoC;AAClC,cAAK5F,KAAL,GAAa2F,OAAO,CAAC3F,KAArB;AACD,OAFD,MAEO;AACL,cAAKA,KAAL,GAAa2F,OAAb;AACD;AACF,K;;AAEO1B,IAAAA,Y,GAAe,UAAC4B,KAAD,EAAgD;AACrE,UAAIjG,kDAAJ,EAA8B;AAC5B,YAAMkG,YAAY,GAAGD,KAAK,CAACE,MAAN,CAAa5F,KAAb,KAAuB,EAA5C;AACA,YAAI,MAAKR,KAAL,CAAWC,wBAAX,KAAwCkG,YAA5C,EAA0D;AACxD,gBAAKhF,QAAL,CAAc,EAAElB,wBAAwB,EAAEkG,YAA5B,EAAd;AACD;AACF;;AAED,UAAI,MAAK9E,KAAL,CAAWM,aAAf,EAA8B;AAC5B,cAAKN,KAAL,CAAWM,aAAX,CAAyBuE,KAAK,CAACE,MAAN,CAAa5F,KAAtC;AACD;;AAED,UAAI,MAAKa,KAAL,CAAWgD,QAAf,EAAyB;AACvB,cAAKhD,KAAL,CAAWgD,QAAX,CAAoB6B,KAApB;AACD;AACF,K;;AAEO1B,IAAAA,W,GAAc,UAAC0B,KAAD,EAA+C;AACnE,YAAK/E,QAAL,CAAc;AACZhB,QAAAA,OAAO,EAAE,IADG,EAAd;;;AAIA,UAAI,MAAKkB,KAAL,CAAWoB,gBAAf,EAAiC;AAC/B,cAAKpC,KAAL,IAAc,CAACwD,cAAf,GAAwB,MAAKvD,SAAL,EAAxB,GAA2C,MAAKI,cAAL,EAA3C;AACD;;AAED,UAAI,MAAKW,KAAL,CAAWkD,OAAf,EAAwB;AACtB,cAAKlD,KAAL,CAAWkD,OAAX,CAAmB2B,KAAnB;AACD;AACF,K;;AAEOzB,IAAAA,a,GAAgB,UAAC4B,CAAD,EAA8C;AACpE,UAAI,MAAKhF,KAAL,CAAWI,SAAf,EAA0B;AACxB,cAAKJ,KAAL,CAAWI,SAAX,CAAqB4E,CAArB;AACD;;AAED,UAAMC,WAAW,GAAG,2BAASC,2BAAT,EAAyBC,wBAAzB,EAAsCH,CAAtC,CAApB;;AAEA,UAAI,CAACA,CAAC,CAACI,aAAF,CAAgBjG,KAAjB,IAA0B8F,WAA1B,IAAyC,CAACD,CAAC,CAACK,MAAhD,EAAwD;AACtD,cAAKC,qBAAL;AACD;AACF,K;;AAEOjC,IAAAA,c,GAAiB,UAACwB,KAAD,EAAkD;AACzE,UAAI,MAAK7E,KAAL,CAAWK,UAAf,EAA2B;AACzB,cAAKL,KAAL,CAAWK,UAAX,CAAsBwE,KAAtB;AACD;;AAED,UAAI,MAAK7E,KAAL,CAAWuF,SAAX,KAAyBV,KAAK,CAACO,aAAN,CAAoBjG,KAApB,CAA0BC,MAAvD,EAA+D;AAC7D,cAAKkG,qBAAL,CAA2BT,KAAK,CAACO,aAAN,CAAoBjG,KAA/C;AACD;AACF,K;;AAEOqG,IAAAA,uB,GAA0B,UAACrG,KAAD,EAAmB;AACnD,UAAI,MAAKa,KAAL,CAAWM,aAAf,EAA8B;AAC5B,cAAKN,KAAL,CAAWM,aAAX,CAAyBnB,KAAzB;AACD;AACF,K;;AAEOmG,IAAAA,qB,GAAwB,UAACnG,KAAD,EAA4C,KAA3CA,KAA2C,cAA3CA,KAA2C,GAA3B,MAAKa,KAAL,CAAWb,KAAX,IAAoB,EAAO;AAC1E,UAAI,MAAKa,KAAL,CAAWsB,iBAAf,EAAkC;AAChC,cAAKtB,KAAL,CAAWsB,iBAAX,CAA6BnC,KAA7B;AACD,OAFD,MAEO;AACL,cAAKmD,KAAL;AACD;AACF,K;;AAEOiB,IAAAA,U,GAAa,UAACsB,KAAD,EAA+C;AAClE,YAAK/E,QAAL,CAAc,EAAEhB,OAAO,EAAE,KAAX,EAAd;;AAEA,UAAI,MAAKkB,KAAL,CAAWsD,MAAf,EAAuB;AACrB,cAAKtD,KAAL,CAAWsD,MAAX,CAAkBuB,KAAlB;AACD;AACF,K;;AAEOR,IAAAA,Y,GAAe,YAAM;AAC3B,wBAA6B,MAAKrE,KAAlC,CAAQuB,MAAR,eAAQA,MAAR,CAAgBF,QAAhB,eAAgBA,QAAhB;;AAEA,UAAI,CAACE,MAAL,EAAa;AACX,eAAO,IAAP;AACD;;AAED;AACE,+CAAM,SAAS,EAAE,iBAAGU,cAAOV,MAAP,CAAc,MAAKW,KAAnB,CAAH,mBAAiCD,cAAOwD,cAAP,CAAsB,MAAKvD,KAA3B,CAAjC,IAAqEb,QAArE,QAAjB,IAAoGE,MAApG,CADF;;AAGD,K;;AAEOkD,IAAAA,Y,GAAe,YAAM;AAC3B,yBAA6B,MAAKzE,KAAlC,CAAQwB,MAAR,gBAAQA,MAAR,CAAgBH,QAAhB,gBAAgBA,QAAhB;;AAEA,UAAI,CAACG,MAAL,EAAa;AACX,eAAO,IAAP;AACD;;AAED;AACE,+CAAM,SAAS,EAAE,iBAAGS,cAAOT,MAAP,CAAc,MAAKU,KAAnB,CAAH,mBAAiCD,cAAOyD,cAAP,CAAsB,MAAKxD,KAA3B,CAAjC,IAAqEb,QAArE,QAAjB,IAAoGG,MAApG,CADF;;AAGD,K,mDA7eOmE,e,GAAR,2BAA0B,CACxB,sBAAQ,EAAE,KAAK3F,KAAL,CAAWe,IAAX,IAAmB,KAAK8C,iBAA1B,CAAR,EAAsDzF,gBAAgB,CAAC,KAAKK,QAAL,GAAgBd,IAAjB,CAAtE,EACD,C,QAEMiI,iB,GAAP,6BAA2B,CACzB,KAAKD,eAAL,GACD,C,QAEME,kB,GAAP,4BAA0BC,SAA1B,EAA2D,CACzD,IAAI,KAAK9F,KAAL,CAAWrC,IAAX,KAAoBmI,SAAS,CAACnI,IAA9B,IAAsC,KAAKqC,KAAL,CAAWe,IAAX,KAAoB+E,SAAS,CAAC/E,IAAxE,EAA8E,CAC5E,KAAK4E,eAAL,GACD,CACF,C,QAEMI,oB,GAAP,gCAA8B,CAC5B,IAAI,KAAKnG,YAAT,EAAuB,CACrBN,2BAAaO,YAAb,CAA0B,KAAKD,YAA/B,EACD,CACD,KAAKJ,sBAAL,GACD,C,CAED;AACF;AACA,K,QACS4C,K,GAAP,iBAAe,CACb,wBAAU,KAAKpD,KAAf,EAAsB,kDAAtB,EACA,KAAKA,KAAL,CAAWoD,KAAX,GACD,C,CAED;AACF;AACA,K,QACS4D,I,GAAP,gBAAc,CACZ,wBAAU,KAAKhH,KAAf,EAAsB,iDAAtB,EACA,KAAKA,KAAL,CAAWgH,IAAX,GACD,C,CAED;AACF;AACA,K,QACSC,O,GAAP,mBAAiB,CACf,OAAO,KAAKjH,KAAZ,CACD,C,CAED;AACF;AACA,K,QACSsD,K,GAAP,iBAAe,mBACb,IAAI,KAAK1C,YAAT,EAAuB,CACrB,KAAKF,WAAL,CAAiB,YAAM,CACrB;AACA;AACA,cAAM,MAAI,CAACV,KAAL,IAAc,MAAI,CAACA,KAAL,CAAWkH,WAA/B,EACA,MAAI,CAAC5D,KAAL,GACD,CALD,EAMA,OACD,CACD,KAAKxC,QAAL,CAAc,EAAEjB,QAAQ,EAAE,IAAZ,EAAd,EAAkC,YAAM,CACtC,MAAI,CAACe,YAAL,GAAoBN,2BAAa6G,UAAb,CAAwB,MAAI,CAACzG,WAA7B,EAA0C,GAA1C,CAApB,CACD,CAFD,EAGD,C,CAED;AACF;AACA;AACA;AACA,K,QACSR,iB,GAAP,2BAAyBkH,KAAzB,EAAwCC,GAAxC,EAAqD,4DACnD;AACA;AACA,QAAI,CAAC5I,qBAAqB,CAACU,QAAtB,CAA+B,KAAKM,QAAL,GAAgBd,IAA/C,CAAL,EAA2D,CACzD,sBAAQ,KAAR,EAAeD,qBAAqB,CAAC,KAAKe,QAAL,GAAgBd,IAAjB,CAApC,EAEA,OACD,CAED,IAAI,CAAC,KAAKqB,KAAV,EAAiB,CACf,MAAM,IAAIsH,KAAJ,CAAU,oDAAV,CAAN,CACD,CAED,IAAI,qDAAaC,QAAb,2CAAuBC,aAAvB,MAAyC,KAAKxH,KAAlD,EAAyD,CACvD,KAAKoD,KAAL,GACD,CACD,IAAI,KAAKpC,KAAL,CAAWe,IAAX,IAAmB,KAAKf,KAAL,CAAWb,KAA9B,IAAuC,2BAAKa,KAAL,CAAWb,KAAX,uCAAkBC,MAAlB,IAA2B,KAAKY,KAAL,CAAWe,IAAX,CAAgB3B,MAAtF,EAA8F,CAC5FE,2BAAa6G,UAAb,CAAwB,YAAM,kBAC5B,gBAAA,MAAI,CAACnH,KAAL,kCAAYE,iBAAZ,CAA8BkH,KAA9B,EAAqCC,GAArC,EACD,CAFD,EAEG,GAFH,EAGD,CAJD,MAIO,iBACL,oBAAKrH,KAAL,iCAAYE,iBAAZ,CAA8BkH,KAA9B,EAAqCC,GAArC,EACD,CACF,C,QAQMI,M,GAAP,kBAA6B,mBAC3B,oBACE,6BAAC,0BAAD,CAAc,QAAd,QACG,UAACvE,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,oBACE,6BAAC,4BAAD,2BAAe,WAAW,EAAE,MAAI,CAACwE,WAAjC,IAAkD,MAAI,CAAC1G,KAAvD,GACG,MAAI,CAACD,UADR,CADF,CAKD,CARH,CADF,CAYD,C,QAyKO+D,iB,GAAR,2BACEjB,UADF,EAIE9B,IAJF,EAKE,CACA,oBACE,6BAAC,wBAAD,6BACM8B,UADN,IAEE,IAAI,EAAE9B,IAFR,EAGE,QAAQ,EAAE,KAAKf,KAAL,CAAWgB,QAHvB,EAIE,cAAc,EAAE,KAAKhB,KAAL,CAAWiB,cAJ7B,EAKE,WAAW,EAAE,KAAKjB,KAAL,CAAWyB,WAL1B,EAME,QAAQ,EAAE,KAAKzB,KAAL,CAAWgD,QANvB,EAOE,aAAa,EAAE,KAAKwC,uBAPtB,EAQE,iBAAiB,EAAE,KAAKF,qBAR1B,IADF,CAYD,C,QAEOqB,oB,GAAR,8BAA6BC,KAA7B,EAA4C,KAAfA,KAAe,cAAfA,KAAe,GAAP,KAAO,EAC1C,QAAQ,KAAKnI,QAAL,GAAgByC,IAAxB,GACE,KAAK,OAAL,CACE,OAAO0F,KAAK,GAAG3E,cAAO4E,cAAP,CAAsB,KAAK3E,KAA3B,CAAH,GAAuCD,cAAO6E,aAAP,CAAqB,KAAK5E,KAA1B,CAAnD,CACF,KAAK,QAAL,CACE,OAAO0E,KAAK,GAAG3E,cAAO8E,eAAP,CAAuB,KAAK7E,KAA5B,CAAH,GAAwCD,cAAO+E,cAAP,CAAsB,KAAK9E,KAA3B,CAApD,CACF,KAAK,OAAL,CACA,QACE,OAAO0E,KAAK,GAAG3E,cAAOgF,cAAP,CAAsB,KAAK/E,KAA3B,CAAH,GAAuCD,cAAOiF,aAAP,CAAqB,KAAKhF,KAA1B,CAAnD,CAPJ,CASD,C,QAEOkC,c,GAAR,0BAAyB,CACvB,OAAO,KAAK+C,UAAL,CAAgB,KAAKnH,KAAL,CAAWW,QAA3B,EAAqC,KAAKgG,oBAAL,EAArC,CAAP,CACD,C,QAEOjC,e,GAAR,2BAA0B,CACxB,OAAO,KAAKyC,UAAL,CAAgB,KAAKnH,KAAL,CAAWY,SAA3B,EAAsC,KAAK+F,oBAAL,CAA0B,IAA1B,CAAtC,CAAP,CACD,C,QAEOQ,U,GAAR,oBAAmBC,IAAnB,EAAwCC,aAAxC,EAA+D,UAC7D,IAAI,CAACD,IAAL,EAAW,CACT,OAAO,IAAP,CACD,CACD,IAAQ/F,QAAR,GAAqB,KAAKrB,KAA1B,CAAQqB,QAAR,CACA,IAAMiG,QAAQ,GAAG,uBAAWF,IAAX,IAAmBA,IAAI,EAAvB,GAA4BA,IAA7C,CAEA,oBACE,uCACE,SAAS,EAAE,iBAAGnF,cAAOmF,IAAP,EAAH,EAAkBC,aAAlB,EAAiCpF,cAAOsF,eAAP,CAAuB,KAAKrF,KAA5B,CAAjC,mBACRD,cAAOuF,SAAP,CAAiB,KAAKtF,KAAtB,CADQ,IACuB,KAAKvD,KAAL,CAAWG,OADlC,OAERmD,cAAOwF,YAAP,EAFQ,IAEgBpG,QAFhB,QADb,IAMGiG,QANH,CADF,CAUD,C,QAEO/C,iB,GAAR,6BAA4B,CAC1B,IAAQlD,QAAR,GAAqB,KAAKrB,KAA1B,CAAQqB,QAAR,CACA,IAAQvC,OAAR,GAAoB,KAAKH,KAAzB,CAAQG,OAAR,CACA,IAAIqC,WAAW,GAAG,IAAlB,CAEA,IACE,KAAKxC,KAAL,CAAWC,wBAAX,IACA,KAAKoB,KAAL,CAAWmB,WADX,IAEA,CAAC,KAAKwC,aAFN,IAGA,CAAC,KAAK3D,KAAL,CAAWb,KAHZ,IAIA,CAAC,KAAKa,KAAL,CAAWkE,YALd,EAME,UACA/C,WAAW,gBACT,sCACE,SAAS,EAAE,iBAAGc,cAAOd,WAAP,CAAmB,KAAKe,KAAxB,CAAH,mBACRD,cAAOyF,mBAAP,CAA2B,KAAKxF,KAAhC,CADQ,IACiCb,QADjC,OAERY,cAAO0F,gBAAP,CAAwB,KAAKzF,KAA7B,CAFQ,IAE8BpD,OAF9B,QADb,EAKE,KAAK,EAAE,EAAE0E,SAAS,EAAE,KAAKxD,KAAL,CAAWc,KAAX,IAAoB,SAAjC,EALT,IAOG,KAAKd,KAAL,CAAWmB,WAPd,CADF,CAWD,CAED,OAAOA,WAAP,CACD,C,QAEOgB,gB,GAAR,4BAA2B,sBACzB,QAAQ,KAAK1D,QAAL,GAAgByC,IAAxB,GACE,KAAK,OAAL,CACE,OAAO,kCACJe,cAAO2F,SAAP,CAAiB,KAAK1F,KAAtB,CADI,IAC2B,IAD3B,OAEJD,cAAO4F,iBAAP,CAAyB,KAAK3F,KAA9B,CAFI,IAEmCM,kBAAUC,cAF7C,QAAP,CAIF,KAAK,QAAL,CACE,OAAO,kCACJR,cAAO6F,UAAP,CAAkB,KAAK5F,KAAvB,CADI,IAC4B,IAD5B,OAEJD,cAAO8F,kBAAP,CAA0B,KAAK7F,KAA/B,CAFI,IAEoCM,kBAAUC,cAF9C,QAAP,CAIF,KAAK,OAAL,CACA,QACE,OAAO,kCACJR,cAAO+F,SAAP,CAAiB,KAAK9F,KAAtB,CADI,IAC2B,IAD3B,OAEJD,cAAOgG,iBAAP,CAAyB,KAAK/F,KAA9B,CAFI,IAEmCM,kBAAUC,cAF7C,QAAP,CAbJ,CAkBD,C,iEAtSD,eAAoC,CAClC,mBAAiC,KAAKzC,KAAtC,CAAQe,IAAR,gBAAQA,IAAR,CAAcE,cAAd,gBAAcA,cAAd,CACA,IAAQnC,OAAR,GAAoB,KAAKH,KAAzB,CAAQG,OAAR,CACA,OAAOmF,OAAO,CAAClD,IAAI,KAAKjC,OAAO,IAAImC,cAAhB,CAAL,CAAd,CACD,C,qCAiBD,eAAgC,CAC9B,OAAOjD,kBAAkB,CAACG,QAAnB,CAA4B,KAAKM,QAAL,GAAgBd,IAA5C,CAAP,CACD,C,CAED;AACF;AACA;AACA;AACA,O,oBA/I2BoG,eAAMmE,S,WACjBC,mB,GAAsB,O,UAEtBzJ,Y,GAA6B,EACzCwC,IAAI,EAAE,OADmC,EAEzCvD,IAAI,EAAE,MAFmC,E","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport invariant from 'invariant';\nimport React, { AriaAttributes, HTMLAttributes } 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 { MaskedInput } from '../../internal/MaskedInput';\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';\n\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 /** Паттерн маски. Доступен для типов `text`, `password`, `email`, `tel`, `search`, `url` */\n mask?: Nullable<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 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 > {}\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\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 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 ...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 = {\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 mask && !this.canBeUsedWithMask\n ? this.renderMaskedInput(inputProps, mask)\n : React.createElement('input', inputProps);\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(\n inputProps: React.InputHTMLAttributes<HTMLInputElement> & {\n capture?: boolean;\n },\n mask: string,\n ) {\n return (\n <MaskedInput\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()]: 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 | MaskedInput | null) => {\n if (element instanceof MaskedInput) {\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 handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: false });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\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":["inputTypes","selectionAllowedTypes","selectionErrorMessage","type","allowedTypes","map","i","join","maskForbiddenTypes","maskAllowedTypes","filter","includes","maskErrorMessage","InputDataTids","root","Input","rootNode","getProps","defaultProps","state","needsPolyfillPlaceholder","blinking","focused","selectAllId","input","selectAll","setSelectionRange","value","length","delaySelectAll","globalObject","requestAnimationFrame","cancelDelayedSelectAll","cancelAnimationFrame","cancelBlink","callback","blinkTimeout","clearTimeout","setState","getInput","inputProps","props","element","React","cloneElement","mask","canBeUsedWithMask","renderMaskedInput","createElement","renderMain","onMouseEnter","onMouseLeave","onMouseOver","onKeyDown","onKeyPress","onValueChange","width","error","role","warning","leftIcon","rightIcon","borderless","align","maskChar","alwaysShowMask","size","placeholder","selectAllOnFocus","disabled","onUnexpectedInput","prefix","suffix","formatChars","corners","ariaDescribedby","ariaControls","ariaLabel","rest","labelProps","className","styles","theme","getSizeClassName","focus","hovering","blink","focusFallback","isIE11","isEdge","warningFallback","errorFallback","style","inputFocus","inputDisabled","onChange","handleChange","onFocus","handleFocus","handleKeyDown","handleKeyPress","onBlur","handleBlur","textAlign","ref","refInput","isMaskVisible","undefined","Boolean","defaultValue","sideContainer","renderLeftIcon","renderPrefix","wrapper","renderPlaceholder","rightContainer","renderSuffix","renderRightIcon","InternalMaskedInput","event","fieldIsEmpty","target","e","isDeleteKey","isKeyBackspace","isKeyDelete","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__"],"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';\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\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 = this.getInput(inputProps);\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()]: 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 handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: false });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\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"]}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ export declare type InputElement = (HTMLInputElement | {
3
+ input: HTMLInputElement | null;
4
+ }) & {
5
+ getRootNode: () => HTMLElement | null;
6
+ };
7
+ export declare type InputElementProps = React.InputHTMLAttributes<HTMLInputElement>;
@@ -0,0 +1 @@
1
+ "use strict";exports.__esModule = true;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
@@ -1 +1,2 @@
1
1
  export * from './Input';
2
+ export * from './Input.typings';
@@ -1 +1,2 @@
1
- "use strict";exports.__esModule = true;var _Input = require("./Input");Object.keys(_Input).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _Input[key]) return;exports[key] = _Input[key];});
1
+ "use strict";exports.__esModule = true;var _Input = require("./Input");Object.keys(_Input).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _Input[key]) return;exports[key] = _Input[key];});
2
+ var _Input2 = require("./Input.typings");Object.keys(_Input2).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _Input2[key]) return;exports[key] = _Input2[key];});
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":"uCAAA","sourcesContent":["export * from './Input';\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":"uCAAA;AACA","sourcesContent":["export * from './Input';\nexport * from './Input.typings';\n"]}
@@ -0,0 +1,24 @@
1
+ import { Input, InputProps, InputType } from '../Input';
2
+ import { Nullable } from '../../typings/utility-types';
3
+ export interface MaskedProps {
4
+ /** Паттерн маски */
5
+ mask: string;
6
+ /** Символ маски */
7
+ maskChar?: Nullable<string>;
8
+ /**
9
+ * Словарь символов-регулярок для маски
10
+ * @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' }
11
+ */
12
+ formatChars?: Record<string, string>;
13
+ /** Показывать символы маски */
14
+ alwaysShowMask?: boolean;
15
+ }
16
+ export declare type MaskInputType = Exclude<InputType, 'number' | 'date' | 'time' | 'password'>;
17
+ export interface MaskedInputProps extends MaskedProps, Omit<InputProps, 'mask' | 'maxLength' | 'type' | 'element'> {
18
+ type?: MaskInputType;
19
+ }
20
+ /**
21
+ * Интерфейс пропсов наследуется от `Input`.
22
+ * Из пропсов `Input` исключены некоторые не применимые к полю с маской пропсы и сокращен список возможных значений в type.
23
+ */
24
+ export declare const MaskedInput: import("../../lib/forwardRefAndName").ReactUIComponentWithRef<Input, MaskedInputProps> & Record<never, never>;
@@ -0,0 +1,78 @@
1
+ "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.MaskedInput = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));var _react = _interopRequireWildcard(require("react"));
2
+
3
+ var _Input = require("../Input");
4
+
5
+ var _MaskedInputElement = require("../../internal/MaskedInputElement");
6
+ var _forwardRefAndName = require("../../lib/forwardRefAndName");var _excluded = ["mask", "maskChar", "formatChars", "alwaysShowMask", "placeholder"];function _getRequireWildcardCache(nodeInterop) {if (typeof WeakMap !== "function") return null;var cacheBabelInterop = new WeakMap();var cacheNodeInterop = new WeakMap();return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {return nodeInterop ? cacheNodeInterop : cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj, nodeInterop) {if (!nodeInterop && obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache(nodeInterop);if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;}
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+ /**
29
+ * Интерфейс пропсов наследуется от `Input`.
30
+ * Из пропсов `Input` исключены некоторые не применимые к полю с маской пропсы и сокращен список возможных значений в type.
31
+ */
32
+ var MaskedInput = (0, _forwardRefAndName.forwardRefAndName)(
33
+ 'MaskedInput',
34
+ function MaskedInput(props, ref) {
35
+ var mask = props.mask,maskChar = props.maskChar,formatChars = props.formatChars,alwaysShowMask = props.alwaysShowMask,placeholder = props.placeholder,inputProps = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
36
+ var _useState = (0, _react.useState)(false),focused = _useState[0],setFocused = _useState[1];
37
+ var showPlaceholder = !(alwaysShowMask || focused);
38
+ var innerRef = (0, _react.useRef)(null);
39
+
40
+ (0, _react.useImperativeHandle)(ref, function () {return innerRef.current;});
41
+
42
+ return /*#__PURE__*/(
43
+ _react.default.createElement(_Input.Input, (0, _extends2.default)({
44
+ ref: innerRef },
45
+ inputProps, {
46
+ placeholder: showPlaceholder ? placeholder : undefined,
47
+ onFocus: handleFocus,
48
+ onBlur: handleBlur,
49
+ element: /*#__PURE__*/
50
+ _react.default.createElement(_MaskedInputElement.MaskedInputElement, {
51
+ mask: mask,
52
+ maskChar: maskChar,
53
+ formatChars: formatChars,
54
+ alwaysShowMask: alwaysShowMask,
55
+ onUnexpectedInput: handleUnexpectedInput }) })));
56
+
57
+
58
+
59
+
60
+
61
+ function handleUnexpectedInput(value) {
62
+ if (props.onUnexpectedInput) {
63
+ props.onUnexpectedInput(value);
64
+ } else if (innerRef.current) {
65
+ innerRef.current.blink();
66
+ }
67
+ }
68
+
69
+ function handleFocus(e) {
70
+ setFocused(true);
71
+ props.onFocus && props.onFocus(e);
72
+ }
73
+
74
+ function handleBlur(e) {
75
+ setFocused(false);
76
+ props.onBlur && props.onBlur(e);
77
+ }
78
+ });exports.MaskedInput = MaskedInput;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["MaskedInput.tsx"],"names":["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":"uWAAA;;AAEA;;AAEA;AACA,gE;;;;;;;;;;;;;;;;;;;;;;AAsBA;AACA;AACA;AACA;AACO,IAAMA,WAAW,GAAG;AACzB,aADyB;AAEzB,SAASA,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,+CAAoFP,KAApF;AACA,kBAA8B,qBAAS,KAAT,CAA9B,CAAOQ,OAAP,gBAAgBC,UAAhB;AACA,MAAMC,eAAe,GAAG,EAAEL,cAAc,IAAIG,OAApB,CAAxB;AACA,MAAMG,QAAQ,GAAG,mBAAc,IAAd,CAAjB;;AAEA,kCAAoBV,GAApB,EAAyB,oBAAMU,QAAQ,CAACC,OAAf,EAAzB;;AAEA;AACE,iCAAC,YAAD;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,mCAAC,sCAAD;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,CA9CwB,CAApB,C","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"]}
@@ -0,0 +1,21 @@
1
+ ```jsx harmony
2
+ <MaskedInput mask={'+7 999 999-99-99'} placeholder={"Номер телефона"} />
3
+ ```
4
+
5
+ Можно изменить символ значения с маской
6
+ ```jsx harmony
7
+ <MaskedInput mask={'9999 9999 9999 9999'} maskChar={'X'} placeholder={"Номер карты"} />
8
+ ```
9
+
10
+ **alwaysShowMask** позволяет показывать маску всегда. Placeholder в этом случае игнорируется.
11
+ ```jsx harmony
12
+ <MaskedInput mask={'9999 9999 9999 9999'} alwaysShowMask maskChar={'X'} placeholder={"Номер карты"} />
13
+ ```
14
+
15
+ Для форматирования по маске используется пакет [iMask](https://imask.js.org/). Используйте особенности пакета принимая всю ответственность на себя.
16
+
17
+ `MaskedInput` гарантирует поддержку работы 3 пропов: **mask**, **maskChar**, **alwaysShowMask** с заданными по-умолчанию **formatChars**.
18
+
19
+ Остальное поведение может меняться в мажорных релизах.
20
+
21
+ Например, iMask [позволяет добавлять](https://imask.js.org/guide.html#masked-pattern) в значения без форматирования константы с помощью фигурных скобок. Использовать этот вариант **НЕ РЕКОМЕНДУЕТСЯ**.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":"uCAAA","sourcesContent":["export * from './MaskedInput';\n"]}