@salutejs/plasma-new-hope 0.144.0-canary.1430.10833771822.0 → 0.145.0-canary.1418.10848257808.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. package/emotion/cjs/components/Mask/Mask.js +213 -0
  2. package/emotion/cjs/components/Mask/Mask.types.js +5 -0
  3. package/emotion/cjs/components/Mask/index.js +12 -0
  4. package/emotion/cjs/components/Mask/utils/constants.js +29 -0
  5. package/emotion/cjs/components/Mask/utils/createMask.js +50 -0
  6. package/emotion/cjs/components/Mask/utils/mask.js +241 -0
  7. package/emotion/cjs/components/Mask/utils/parseMask.js +36 -0
  8. package/emotion/cjs/components/Mask/utils/processInput.js +52 -0
  9. package/emotion/cjs/components/Mask/utils/processMask.js +99 -0
  10. package/emotion/cjs/components/Mask/utils/selection.js +48 -0
  11. package/emotion/cjs/examples/plasma_b2c/components/Mask/Mask.js +9 -0
  12. package/emotion/cjs/examples/plasma_b2c/components/Mask/Mask.stories.tsx +125 -0
  13. package/emotion/es/components/Mask/Mask.js +205 -0
  14. package/emotion/es/components/Mask/Mask.types.js +1 -0
  15. package/emotion/es/components/Mask/index.js +1 -0
  16. package/emotion/es/components/Mask/utils/constants.js +23 -0
  17. package/emotion/es/components/Mask/utils/createMask.js +44 -0
  18. package/emotion/es/components/Mask/utils/mask.js +235 -0
  19. package/emotion/es/components/Mask/utils/parseMask.js +30 -0
  20. package/emotion/es/components/Mask/utils/processInput.js +46 -0
  21. package/emotion/es/components/Mask/utils/processMask.js +93 -0
  22. package/emotion/es/components/Mask/utils/selection.js +42 -0
  23. package/emotion/es/examples/plasma_b2c/components/Mask/Mask.js +3 -0
  24. package/emotion/es/examples/plasma_b2c/components/Mask/Mask.stories.tsx +125 -0
  25. package/package.json +2 -2
  26. package/styled-components/cjs/components/Mask/Mask.js +213 -0
  27. package/styled-components/cjs/components/Mask/Mask.types.js +5 -0
  28. package/styled-components/cjs/components/Mask/index.js +12 -0
  29. package/styled-components/cjs/components/Mask/utils/constants.js +29 -0
  30. package/styled-components/cjs/components/Mask/utils/createMask.js +50 -0
  31. package/styled-components/cjs/components/Mask/utils/mask.js +241 -0
  32. package/styled-components/cjs/components/Mask/utils/parseMask.js +36 -0
  33. package/styled-components/cjs/components/Mask/utils/processInput.js +52 -0
  34. package/styled-components/cjs/components/Mask/utils/processMask.js +99 -0
  35. package/styled-components/cjs/components/Mask/utils/selection.js +48 -0
  36. package/styled-components/cjs/examples/plasma_b2c/components/Mask/Mask.js +9 -0
  37. package/styled-components/cjs/examples/plasma_b2c/components/Mask/Mask.stories.tsx +125 -0
  38. package/styled-components/es/components/Mask/Mask.js +205 -0
  39. package/styled-components/es/components/Mask/Mask.types.js +1 -0
  40. package/styled-components/es/components/Mask/index.js +1 -0
  41. package/styled-components/es/components/Mask/utils/constants.js +23 -0
  42. package/styled-components/es/components/Mask/utils/createMask.js +44 -0
  43. package/styled-components/es/components/Mask/utils/mask.js +235 -0
  44. package/styled-components/es/components/Mask/utils/parseMask.js +30 -0
  45. package/styled-components/es/components/Mask/utils/processInput.js +46 -0
  46. package/styled-components/es/components/Mask/utils/processMask.js +93 -0
  47. package/styled-components/es/components/Mask/utils/selection.js +42 -0
  48. package/styled-components/es/examples/plasma_b2c/components/Mask/Mask.js +3 -0
  49. package/styled-components/es/examples/plasma_b2c/components/Mask/Mask.stories.tsx +125 -0
  50. package/types/components/Mask/Mask.d.ts +5 -0
  51. package/types/components/Mask/Mask.d.ts.map +1 -0
  52. package/types/components/Mask/Mask.types.d.ts +84 -0
  53. package/types/components/Mask/Mask.types.d.ts.map +1 -0
  54. package/types/components/Mask/index.d.ts +2 -0
  55. package/types/components/Mask/index.d.ts.map +1 -0
  56. package/types/components/Mask/utils/constants.d.ts +15 -0
  57. package/types/components/Mask/utils/constants.d.ts.map +1 -0
  58. package/types/components/Mask/utils/createMask.d.ts +19 -0
  59. package/types/components/Mask/utils/createMask.d.ts.map +1 -0
  60. package/types/components/Mask/utils/mask.d.ts +42 -0
  61. package/types/components/Mask/utils/mask.d.ts.map +1 -0
  62. package/types/components/Mask/utils/parseMask.d.ts +3 -0
  63. package/types/components/Mask/utils/parseMask.d.ts.map +1 -0
  64. package/types/components/Mask/utils/processInput.d.ts +13 -0
  65. package/types/components/Mask/utils/processInput.d.ts.map +1 -0
  66. package/types/components/Mask/utils/processMask.d.ts +7 -0
  67. package/types/components/Mask/utils/processMask.d.ts.map +1 -0
  68. package/types/components/Mask/utils/selection.d.ts +10 -0
  69. package/types/components/Mask/utils/selection.d.ts.map +1 -0
  70. package/types/examples/plasma_b2c/components/Mask/Mask.d.ts +191 -0
  71. package/types/examples/plasma_b2c/components/Mask/Mask.d.ts.map +1 -0
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.processMask = void 0;
7
+ var _constants = /*#__PURE__*/require("./constants");
8
+ var processMask = exports.processMask = function processMask(data, mask, input, maskChar, maskString, selection) {
9
+ var value = [];
10
+ var valueIndex = 0;
11
+ var pastedIndex = 0;
12
+ var maskedValue = '';
13
+ var inputValuesApplied = 0;
14
+ var processMaskPartAsChar = function processMaskPartAsChar(maskPart, pastedValuesStack, item) {
15
+ if (pastedValuesStack && pastedValuesStack[0] === maskPart["char"]) {
16
+ pastedIndex++;
17
+ } else if (item && (item["char"] === maskPart["char"] || item.type !== _constants.charType.User) || input) {
18
+ valueIndex++;
19
+ }
20
+ value.push({
21
+ "char": String(maskPart["char"]),
22
+ type: _constants.charType.Char
23
+ });
24
+ if (pastedValuesStack) {
25
+ inputValuesApplied++;
26
+ }
27
+ maskedValue += maskPart["char"];
28
+ };
29
+ var processMaskPartAsRegExp = function processMaskPartAsRegExp(maskPart, maskIndex, pastedValuesStack, item) {
30
+ var _maskPart$regexp2;
31
+ var part;
32
+ if (pastedValuesStack) {
33
+ var i = 0;
34
+ while (!(maskPart !== null && maskPart !== void 0 && (_maskPart$regexp = maskPart.regexp) !== null && _maskPart$regexp !== void 0 && _maskPart$regexp.test(pastedValuesStack[i])) && pastedValuesStack.length > i) {
35
+ var _maskPart$regexp;
36
+ i++;
37
+ pastedIndex++;
38
+ }
39
+ if (pastedValuesStack.length > i) {
40
+ pastedIndex++;
41
+ inputValuesApplied++;
42
+ valueIndex++;
43
+ part = pastedValuesStack[i];
44
+ value.push({
45
+ "char": part,
46
+ type: _constants.charType.User
47
+ });
48
+ maskedValue += part;
49
+ }
50
+ }
51
+ if (part) {
52
+ return;
53
+ }
54
+ if (item && item.type === _constants.charType.Char && data.length > valueIndex + 1) {
55
+ valueIndex++;
56
+ processMaskItem(maskPart, maskIndex);
57
+ return;
58
+ }
59
+ if (item && item.type === _constants.charType.User && maskPart !== null && maskPart !== void 0 && (_maskPart$regexp2 = maskPart.regexp) !== null && _maskPart$regexp2 !== void 0 && _maskPart$regexp2.test(item["char"])) {
60
+ value.push({
61
+ "char": item["char"],
62
+ type: _constants.charType.User
63
+ });
64
+ maskedValue += item["char"];
65
+ valueIndex++;
66
+ return;
67
+ }
68
+ part = maskString ? maskString[maskIndex] : maskChar;
69
+ value.push({
70
+ "char": part,
71
+ type: _constants.charType.Mask
72
+ });
73
+ if (data.length > maskIndex) {
74
+ valueIndex++;
75
+ }
76
+ maskedValue += part;
77
+ };
78
+ var processMaskItem = function processMaskItem(maskPart, maskIndex) {
79
+ var item = data.length > valueIndex ? data[valueIndex] : null;
80
+ var pastedValuesStack = '';
81
+ if (selection.start <= maskIndex && pastedIndex < input.length) {
82
+ pastedValuesStack = input.slice(pastedIndex);
83
+ }
84
+ if (maskPart["char"]) {
85
+ return processMaskPartAsChar(maskPart, pastedValuesStack, item);
86
+ }
87
+ if (maskPart.regexp) {
88
+ return processMaskPartAsRegExp(maskPart, maskIndex, pastedValuesStack, item);
89
+ }
90
+ };
91
+ mask.forEach(function (maskPart, maskIndex) {
92
+ processMaskItem(maskPart, maskIndex);
93
+ });
94
+ return {
95
+ value: value,
96
+ maskedValue: maskedValue,
97
+ inputValuesApplied: inputValuesApplied
98
+ };
99
+ };
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.removeSelectedRange = void 0;
7
+ var _constants = /*#__PURE__*/require("./constants");
8
+ var copyMaskChar = function copyMaskChar(count, maskChar) {
9
+ var res = [];
10
+ for (var i = 0; i < count; i++) {
11
+ res.push({
12
+ "char": maskChar,
13
+ type: _constants.charType.Mask
14
+ });
15
+ }
16
+ return res;
17
+ };
18
+ var pasteMaskSymbols = function pasteMaskSymbols(maskString, maskChar, selection) {
19
+ if (maskString) {
20
+ var res = [];
21
+ for (var i = selection.start; i < selection.end; i++) {
22
+ res.push({
23
+ "char": maskString[i],
24
+ type: _constants.charType.Mask
25
+ });
26
+ }
27
+ return res;
28
+ }
29
+ return copyMaskChar(selection.end - selection.start, maskChar);
30
+ };
31
+ var removeSelectedRange = exports.removeSelectedRange = function removeSelectedRange(args) {
32
+ var value = args.value,
33
+ selection = args.selection,
34
+ maskChar = args.maskChar,
35
+ maskString = args.maskString;
36
+ if (selection.end < selection.start) {
37
+ var tmp = selection.end;
38
+ selection.end = selection.start;
39
+ selection.start = tmp;
40
+ }
41
+ if (selection.start === selection.end) {
42
+ return value;
43
+ }
44
+ if (value.length > selection.start) {
45
+ return value.slice(0, selection.start).concat(pasteMaskSymbols(maskString, maskChar, selection), value.slice(selection.end, value.length));
46
+ }
47
+ return value;
48
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Mask = void 0;
7
+ var _Mask = /*#__PURE__*/require("../../../../components/Mask");
8
+ var _TextField = /*#__PURE__*/require("../TextField/TextField");
9
+ var Mask = exports.Mask = /*#__PURE__*/(0, _Mask.composeMask)(_TextField.TextField);
@@ -0,0 +1,125 @@
1
+ import React from 'react';
2
+ import type { ComponentProps } from 'react';
3
+ import type { StoryObj, Meta } from '@storybook/react';
4
+ import { action } from '@storybook/addon-actions';
5
+
6
+ import { WithTheme } from '../../../_helpers';
7
+
8
+ import { Mask } from './Mask';
9
+
10
+ const onChange = action('onChange');
11
+
12
+ const sizes = ['l', 'm', 's', 'xs'];
13
+ const views = ['default', 'positive', 'warning', 'negative'];
14
+
15
+ const meta: Meta<typeof Mask> = {
16
+ title: 'plasma_b2c/Mask',
17
+ component: Mask,
18
+ decorators: [WithTheme],
19
+ argTypes: {
20
+ view: {
21
+ options: views,
22
+ control: {
23
+ type: 'select',
24
+ },
25
+ },
26
+ size: {
27
+ options: sizes,
28
+ control: {
29
+ type: 'inline-radio',
30
+ },
31
+ },
32
+ },
33
+ };
34
+
35
+ export default meta;
36
+
37
+ type StoryPropsDefault = Omit<
38
+ ComponentProps<typeof Mask>,
39
+ | 'helperBlock'
40
+ | 'contentLeft'
41
+ | 'htmlSize'
42
+ | 'contentRight'
43
+ | 'type'
44
+ | 'name'
45
+ | 'onFocus'
46
+ | 'onBlur'
47
+ | 'onChange'
48
+ | 'value'
49
+ | 'checked'
50
+ | 'maxLength'
51
+ | 'minLength'
52
+ | 'required'
53
+ | 'enumerationType'
54
+ | 'chips'
55
+ | 'onChangeChips'
56
+ >;
57
+
58
+ const StoryDemo = ({ view, ...rest }: StoryPropsDefault) => {
59
+ return (
60
+ <div style={{ display: 'flex', flexDirection: 'column', gap: '2rem', width: '50%' }}>
61
+ <Mask
62
+ label="Маска телефона"
63
+ mask="+7 (000) 000 - 00 - 00"
64
+ maskChar="_"
65
+ showPrefix={false}
66
+ view={view}
67
+ onChange={onChange}
68
+ {...rest}
69
+ />
70
+
71
+ <Mask
72
+ label="Маска телефона: отображается всегда"
73
+ mask="+7 (000) 000 - 00 - 00"
74
+ maskChar="_"
75
+ view={view}
76
+ alwaysShowMask
77
+ onChange={onChange}
78
+ {...rest}
79
+ />
80
+
81
+ <Mask
82
+ label="Маска даты"
83
+ mask="00/00/0000"
84
+ maskString="DD/MM/YYYY"
85
+ alwaysShowMask
86
+ view={view}
87
+ onChange={onChange}
88
+ {...rest}
89
+ />
90
+
91
+ <Mask
92
+ label="Маска даты: значения по умолчанию"
93
+ // eslint-disable-next-line no-octal-escape
94
+ mask="12.\04.0000"
95
+ maskChar="_"
96
+ alwaysShowMask
97
+ view={view}
98
+ onChange={onChange}
99
+ {...rest}
100
+ />
101
+
102
+ <Mask
103
+ label="Маска времени"
104
+ mask="00:00"
105
+ maskChar="_"
106
+ alwaysShowMask
107
+ view={view}
108
+ onChange={onChange}
109
+ {...rest}
110
+ />
111
+ </div>
112
+ );
113
+ };
114
+
115
+ export const Default: StoryObj<StoryPropsDefault> = {
116
+ args: {
117
+ size: 'l',
118
+ view: 'default',
119
+ labelPlacement: 'outer',
120
+ placeholder: 'Заполните поле',
121
+ disabled: false,
122
+ readOnly: false,
123
+ },
124
+ render: (args) => <StoryDemo {...args} />,
125
+ };
@@ -0,0 +1,205 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ var _excluded = ["mask", "maskChar", "alwaysShowMask", "maskString", "showPrefix", "value", "defaultValue", "showMask", "onChange", "onBlur", "onFocus", "reformat"];
3
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
10
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
11
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
12
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
14
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
15
+ import React, { forwardRef, useEffect, useMemo, useRef, useState } from 'react';
16
+ import { useForkRef } from '@salutejs/plasma-core';
17
+ import { useDidMountEffect } from '../../hooks';
18
+ import { createMask, defaults } from './utils/createMask';
19
+ import { keyboardCode } from './utils/constants';
20
+ export var composeMask = function composeMask(InputComponent) {
21
+ return /*#__PURE__*/forwardRef(function (props, outerRef) {
22
+ var maskValue = props.mask,
23
+ maskChar = props.maskChar,
24
+ alwaysShowMask = props.alwaysShowMask,
25
+ maskString = props.maskString,
26
+ showPrefix = props.showPrefix,
27
+ value = props.value,
28
+ defaultValue = props.defaultValue,
29
+ showMaskedValue = props.showMask,
30
+ onChange = props.onChange,
31
+ onBlur = props.onBlur,
32
+ onFocus = props.onFocus,
33
+ reformat = props.reformat,
34
+ rest = _objectWithoutProperties(props, _excluded);
35
+ var _useState = useState(alwaysShowMask || showMaskedValue),
36
+ _useState2 = _slicedToArray(_useState, 2),
37
+ showMask = _useState2[0],
38
+ setShowMask = _useState2[1];
39
+ var mask = useMemo(function () {
40
+ return createMask({
41
+ value: String(value) || String(defaultValue) || '',
42
+ mask: maskValue,
43
+ maskChar: maskChar || defaults.maskChar,
44
+ maskString: maskString,
45
+ showPrefix: showPrefix || defaults.showPrefix,
46
+ reformat: reformat
47
+ });
48
+ }, []);
49
+ var canSetSelection = useRef(false);
50
+ var inputRef = useRef(null);
51
+ var innerRef = useForkRef(inputRef, outerRef);
52
+ var getSelection = function getSelection() {
53
+ var _inputRef$current, _inputRef$current2;
54
+ mask.setSelection = {
55
+ start: (inputRef === null || inputRef === void 0 || (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.selectionStart) || 0,
56
+ end: (inputRef === null || inputRef === void 0 || (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.selectionEnd) || 0
57
+ };
58
+ };
59
+ var setSelection = function setSelection() {
60
+ var _inputRef$current3;
61
+ if (!canSetSelection.current) {
62
+ return;
63
+ }
64
+ var selection = mask.getSelection;
65
+ inputRef === null || inputRef === void 0 || (_inputRef$current3 = inputRef.current) === null || _inputRef$current3 === void 0 || _inputRef$current3.setSelectionRange(selection.start, selection.end);
66
+ setTimeout(function () {
67
+ var _inputRef$current4;
68
+ return inputRef === null || inputRef === void 0 || (_inputRef$current4 = inputRef.current) === null || _inputRef$current4 === void 0 ? void 0 : _inputRef$current4.setSelectionRange(selection.start, selection.end);
69
+ }, 0);
70
+ };
71
+ var showValue = function showValue() {
72
+ if (!(inputRef !== null && inputRef !== void 0 && inputRef.current)) {
73
+ return;
74
+ }
75
+ if (showMask && (canSetSelection.current || alwaysShowMask)) {
76
+ inputRef.current.value = mask.getState.maskedValue;
77
+ return;
78
+ }
79
+ inputRef.current.value = mask.getState.visibleValue;
80
+ };
81
+ var keyPressPropName = function keyPressPropName() {
82
+ if (typeof navigator !== 'undefined' && navigator.userAgent.match(/Android/i)) {
83
+ return 'onBeforeInput';
84
+ }
85
+ return 'onKeyPress';
86
+ };
87
+ var dispatchEvent = function dispatchEvent(e) {
88
+ var _mask$getState = mask.getState,
89
+ maskedValue = _mask$getState.maskedValue,
90
+ visibleValue = _mask$getState.visibleValue;
91
+ if (onChange) {
92
+ onChange(e, {
93
+ maskedValue: maskedValue,
94
+ value: visibleValue
95
+ });
96
+ }
97
+ };
98
+ var onPaste = function onPaste(e) {
99
+ e.preventDefault();
100
+ getSelection();
101
+ if (!(e !== null && e !== void 0 && e.clipboardData)) {
102
+ return;
103
+ }
104
+ mask.paste(e.clipboardData.getData('Text'));
105
+ setTimeout(setSelection, 0);
106
+ dispatchEvent(e);
107
+ };
108
+ var handleChange = function handleChange(e) {
109
+ var currentValue;
110
+ if (showMask && (canSetSelection.current || alwaysShowMask)) {
111
+ currentValue = mask.getState.maskedValue;
112
+ } else {
113
+ currentValue = mask.getState.visibleValue;
114
+ }
115
+ if (e.target.value !== currentValue) {
116
+ getSelection();
117
+ mask.updateValue(e.target.value);
118
+ setTimeout(setSelection, 0);
119
+ }
120
+ dispatchEvent(e);
121
+ };
122
+ var onKeyPress = function onKeyPress(e) {
123
+ if (e.metaKey || e.altKey || e.ctrlKey || e.key === 'Enter') {
124
+ return;
125
+ }
126
+ e.preventDefault();
127
+ getSelection();
128
+ mask.input(e.key || String.fromCharCode(e.which));
129
+ setSelection();
130
+ dispatchEvent(e);
131
+ };
132
+ var onKeyDown = function onKeyDown(e) {
133
+ if (e.code === keyboardCode.Backspace) {
134
+ e.preventDefault();
135
+ getSelection();
136
+ mask.removePreviousOrSelected();
137
+ setSelection();
138
+ dispatchEvent(e);
139
+ }
140
+ if (e.code === keyboardCode.Delete) {
141
+ e.preventDefault();
142
+ getSelection();
143
+ mask.removeNextOrSelected();
144
+ setSelection();
145
+ dispatchEvent(e);
146
+ }
147
+ };
148
+ var handleFocus = function handleFocus(e) {
149
+ canSetSelection.current = true;
150
+ if (onFocus) {
151
+ onFocus(e);
152
+ }
153
+ };
154
+ var handleBlur = function handleBlur(e) {
155
+ canSetSelection.current = false;
156
+ if (onBlur) {
157
+ onBlur(e);
158
+ }
159
+ };
160
+ var keyPressEvent = _defineProperty({}, keyPressPropName(), onKeyPress);
161
+ useDidMountEffect(function () {
162
+ setShowMask(alwaysShowMask || showMask);
163
+ }, [alwaysShowMask, showMask]);
164
+ useDidMountEffect(function () {
165
+ if (reformat) {
166
+ mask.updateReformat(reformat);
167
+ }
168
+ }, [reformat]);
169
+ useDidMountEffect(function () {
170
+ mask.updateMask(String(mask));
171
+ }, [mask]);
172
+ useDidMountEffect(function () {
173
+ mask.updateMaskString(String(maskString));
174
+ }, [maskString]);
175
+ useDidMountEffect(function () {
176
+ mask.updateMaskChar(String(maskChar));
177
+ }, [maskChar]);
178
+ useDidMountEffect(function () {
179
+ mask.updateValue(String(value));
180
+ }, [value]);
181
+ useEffect(function () {
182
+ showValue();
183
+ }, [showValue, mask]);
184
+ useEffect(function () {
185
+ var subscriber = function subscriber() {
186
+ showValue();
187
+ setSelection();
188
+ };
189
+ mask.subscribe(subscriber);
190
+ return function () {
191
+ mask.unsubscribe(subscriber);
192
+ };
193
+ }, [mask, showValue, setSelection]);
194
+ return /*#__PURE__*/React.createElement(InputComponent, _extends({}, rest, {
195
+ onChange: handleChange,
196
+ onKeyDown: onKeyDown,
197
+ onPaste: onPaste,
198
+ onFocus: handleFocus,
199
+ onBlur: handleBlur
200
+ }, keyPressEvent, {
201
+ ref: innerRef,
202
+ autoComplete: "off"
203
+ }));
204
+ });
205
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export { composeMask } from './Mask';
@@ -0,0 +1,23 @@
1
+ export var charType = {
2
+ User: 1,
3
+ Char: 2,
4
+ Mask: 3
5
+ };
6
+ export var keyboardCode = {
7
+ Backspace: 'Backspace',
8
+ Delete: 'Delete'
9
+ };
10
+ export var escapeChar = '\\';
11
+ export var defaultFormatChars = [{
12
+ str: '0',
13
+ regexp: /[0-9]/
14
+ }, {
15
+ str: '*',
16
+ regexp: /./
17
+ }, {
18
+ str: 'a',
19
+ regexp: /[a-zA-Z]/
20
+ }, {
21
+ str: 'я',
22
+ regexp: /[а-яА-ЯёЁ]/
23
+ }];
@@ -0,0 +1,44 @@
1
+ import { defaultFormatChars } from './constants';
2
+ import { Mask } from './mask';
3
+ import { removeSelectedRange } from './selection';
4
+ export var defaults = {
5
+ maskFormat: defaultFormatChars,
6
+ maskChar: '',
7
+ showMask: false,
8
+ removeSelectedRange: removeSelectedRange,
9
+ showPrefix: false
10
+ };
11
+ export var createMask = function createMask(params) {
12
+ var _params$mask;
13
+ var maskString = params.maskString,
14
+ _params$showPrefix = params.showPrefix,
15
+ showPrefix = _params$showPrefix === void 0 ? defaults.showPrefix : _params$showPrefix,
16
+ _params$maskChar = params.maskChar,
17
+ maskChar = _params$maskChar === void 0 ? defaults.maskChar : _params$maskChar,
18
+ reformat = params.reformat;
19
+ var resReformat = reformat;
20
+ if (!reformat && !params.mask) {
21
+ resReformat = function resReformat(args) {
22
+ var str = args.value.map(function (item) {
23
+ return item["char"];
24
+ }).join('');
25
+ return {
26
+ value: args.value,
27
+ visibleValue: str,
28
+ maskedValue: str,
29
+ selection: args.selection
30
+ };
31
+ };
32
+ } else if (reformat && params.mask) {
33
+ params.mask = undefined;
34
+ }
35
+ if (maskString && maskString.length !== (params === null || params === void 0 || (_params$mask = params.mask) === null || _params$mask === void 0 ? void 0 : _params$mask.length)) {
36
+ throw new Error('maskString должна быть такой же длины, как и mask');
37
+ }
38
+ if (maskChar.length > 1) {
39
+ throw new Error('maskChar должен содержать только 1 символ');
40
+ }
41
+ var mask = new Mask(showPrefix, maskChar, maskString, resReformat);
42
+ mask.updateMask(params.mask);
43
+ return mask;
44
+ };