@salutejs/plasma-new-hope 0.140.0-dev.0 → 0.141.0-canary.1418.10704444225.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. package/emotion/cjs/components/Mask/Mask.js +227 -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 +31 -0
  5. package/emotion/cjs/components/Mask/utils/createMask.js +50 -0
  6. package/emotion/cjs/components/Mask/utils/maskUtils.js +248 -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/components/Mask/utils/types/input.types.js +5 -0
  12. package/emotion/cjs/components/Mask/utils/types/mask.types.js +5 -0
  13. package/emotion/cjs/components/Mask/utils/types/selectRange.types.js +5 -0
  14. package/emotion/cjs/examples/plasma_b2c/components/Mask/Mask.js +9 -0
  15. package/emotion/cjs/examples/plasma_b2c/components/Mask/Mask.stories.tsx +131 -0
  16. package/emotion/es/components/Mask/Mask.js +219 -0
  17. package/emotion/es/components/Mask/Mask.types.js +1 -0
  18. package/emotion/es/components/Mask/index.js +1 -0
  19. package/emotion/es/components/Mask/utils/constants.js +25 -0
  20. package/emotion/es/components/Mask/utils/createMask.js +44 -0
  21. package/emotion/es/components/Mask/utils/maskUtils.js +242 -0
  22. package/emotion/es/components/Mask/utils/parseMask.js +30 -0
  23. package/emotion/es/components/Mask/utils/processInput.js +46 -0
  24. package/emotion/es/components/Mask/utils/processMask.js +93 -0
  25. package/emotion/es/components/Mask/utils/selection.js +42 -0
  26. package/emotion/es/components/Mask/utils/types/input.types.js +1 -0
  27. package/emotion/es/components/Mask/utils/types/mask.types.js +1 -0
  28. package/emotion/es/components/Mask/utils/types/selectRange.types.js +1 -0
  29. package/emotion/es/examples/plasma_b2c/components/Mask/Mask.js +3 -0
  30. package/emotion/es/examples/plasma_b2c/components/Mask/Mask.stories.tsx +131 -0
  31. package/package.json +2 -2
  32. package/styled-components/cjs/components/Mask/Mask.js +227 -0
  33. package/styled-components/cjs/components/Mask/Mask.types.js +5 -0
  34. package/styled-components/cjs/components/Mask/index.js +12 -0
  35. package/styled-components/cjs/components/Mask/utils/constants.js +31 -0
  36. package/styled-components/cjs/components/Mask/utils/createMask.js +50 -0
  37. package/styled-components/cjs/components/Mask/utils/maskUtils.js +248 -0
  38. package/styled-components/cjs/components/Mask/utils/parseMask.js +36 -0
  39. package/styled-components/cjs/components/Mask/utils/processInput.js +52 -0
  40. package/styled-components/cjs/components/Mask/utils/processMask.js +99 -0
  41. package/styled-components/cjs/components/Mask/utils/selection.js +48 -0
  42. package/styled-components/cjs/components/Mask/utils/types/input.types.js +5 -0
  43. package/styled-components/cjs/components/Mask/utils/types/mask.types.js +5 -0
  44. package/styled-components/cjs/components/Mask/utils/types/selectRange.types.js +5 -0
  45. package/styled-components/cjs/examples/plasma_b2c/components/Mask/Mask.js +9 -0
  46. package/styled-components/cjs/examples/plasma_b2c/components/Mask/Mask.stories.tsx +131 -0
  47. package/styled-components/es/components/Mask/Mask.js +219 -0
  48. package/styled-components/es/components/Mask/Mask.types.js +1 -0
  49. package/styled-components/es/components/Mask/index.js +1 -0
  50. package/styled-components/es/components/Mask/utils/constants.js +25 -0
  51. package/styled-components/es/components/Mask/utils/createMask.js +44 -0
  52. package/styled-components/es/components/Mask/utils/maskUtils.js +242 -0
  53. package/styled-components/es/components/Mask/utils/parseMask.js +30 -0
  54. package/styled-components/es/components/Mask/utils/processInput.js +46 -0
  55. package/styled-components/es/components/Mask/utils/processMask.js +93 -0
  56. package/styled-components/es/components/Mask/utils/selection.js +42 -0
  57. package/styled-components/es/components/Mask/utils/types/input.types.js +1 -0
  58. package/styled-components/es/components/Mask/utils/types/mask.types.js +1 -0
  59. package/styled-components/es/components/Mask/utils/types/selectRange.types.js +1 -0
  60. package/styled-components/es/examples/plasma_b2c/components/Mask/Mask.js +3 -0
  61. package/styled-components/es/examples/plasma_b2c/components/Mask/Mask.stories.tsx +131 -0
  62. package/types/components/Mask/Mask.d.ts +5 -0
  63. package/types/components/Mask/Mask.d.ts.map +1 -0
  64. package/types/components/Mask/Mask.types.d.ts +48 -0
  65. package/types/components/Mask/Mask.types.d.ts.map +1 -0
  66. package/types/components/Mask/index.d.ts +3 -0
  67. package/types/components/Mask/index.d.ts.map +1 -0
  68. package/types/components/Mask/utils/constants.d.ts +15 -0
  69. package/types/components/Mask/utils/constants.d.ts.map +1 -0
  70. package/types/components/Mask/utils/createMask.d.ts +19 -0
  71. package/types/components/Mask/utils/createMask.d.ts.map +1 -0
  72. package/types/components/Mask/utils/maskUtils.d.ts +44 -0
  73. package/types/components/Mask/utils/maskUtils.d.ts.map +1 -0
  74. package/types/components/Mask/utils/parseMask.d.ts +3 -0
  75. package/types/components/Mask/utils/parseMask.d.ts.map +1 -0
  76. package/types/components/Mask/utils/processInput.d.ts +15 -0
  77. package/types/components/Mask/utils/processInput.d.ts.map +1 -0
  78. package/types/components/Mask/utils/processMask.d.ts +9 -0
  79. package/types/components/Mask/utils/processMask.d.ts.map +1 -0
  80. package/types/components/Mask/utils/selection.d.ts +11 -0
  81. package/types/components/Mask/utils/selection.d.ts.map +1 -0
  82. package/types/components/Mask/utils/types/input.types.d.ts +26 -0
  83. package/types/components/Mask/utils/types/input.types.d.ts.map +1 -0
  84. package/types/components/Mask/utils/types/mask.types.d.ts +9 -0
  85. package/types/components/Mask/utils/types/mask.types.d.ts.map +1 -0
  86. package/types/components/Mask/utils/types/selectRange.types.d.ts +5 -0
  87. package/types/components/Mask/utils/types/selectRange.types.d.ts.map +1 -0
  88. package/types/examples/plasma_b2c/components/Mask/Mask.d.ts +191 -0
  89. 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
+ 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
+ function processMaskPartAsRegExp(maskPart, maskIndex, pastedValuesStack, item) {
30
+ var _maskPart$regexp2;
31
+ var part = null;
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
+ 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,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -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,131 @@
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
+ const onValueChange = action('onValueChange');
12
+
13
+ const sizes = ['l', 'm', 's', 'xs'];
14
+ const views = ['default', 'positive', 'warning', 'negative'];
15
+
16
+ const meta: Meta<typeof Mask> = {
17
+ title: 'plasma_b2c/Mask',
18
+ component: Mask,
19
+ decorators: [WithTheme],
20
+ argTypes: {
21
+ view: {
22
+ options: views,
23
+ control: {
24
+ type: 'select',
25
+ },
26
+ },
27
+ size: {
28
+ options: sizes,
29
+ control: {
30
+ type: 'inline-radio',
31
+ },
32
+ },
33
+ },
34
+ };
35
+
36
+ export default meta;
37
+
38
+ type StoryPropsDefault = Omit<
39
+ ComponentProps<typeof Mask>,
40
+ | 'helperBlock'
41
+ | 'contentLeft'
42
+ | 'htmlSize'
43
+ | 'contentRight'
44
+ | 'type'
45
+ | 'name'
46
+ | 'onFocus'
47
+ | 'onBlur'
48
+ | 'onChange'
49
+ | 'value'
50
+ | 'checked'
51
+ | 'maxLength'
52
+ | 'minLength'
53
+ | 'required'
54
+ | 'enumerationType'
55
+ | 'chips'
56
+ | 'onChangeChips'
57
+ >;
58
+
59
+ const StoryDemo = ({ view, ...rest }: StoryPropsDefault) => {
60
+ return (
61
+ <div style={{ display: 'flex', flexDirection: 'column', gap: '2rem', width: '50%' }}>
62
+ <Mask
63
+ label="Маска телефона"
64
+ mask="+7 (000) 000 - 00 - 00"
65
+ maskChar="_"
66
+ showPrefix={false}
67
+ view={view}
68
+ onChange={onChange}
69
+ onValueChange={onValueChange}
70
+ {...rest}
71
+ />
72
+
73
+ <Mask
74
+ label="Маска телефона: отображается всегда"
75
+ mask="+7 (000) 000 - 00 - 00"
76
+ maskChar="_"
77
+ view={view}
78
+ alwaysShowMask
79
+ onChange={onChange}
80
+ onValueChange={onValueChange}
81
+ {...rest}
82
+ />
83
+
84
+ <Mask
85
+ label="Маска даты"
86
+ mask="00/00/0000"
87
+ maskString="DD/MM/YYYY"
88
+ alwaysShowMask
89
+ view={view}
90
+ onChange={onChange}
91
+ onValueChange={onValueChange}
92
+ {...rest}
93
+ />
94
+
95
+ <Mask
96
+ label="Маска даты: значения по умолчанию"
97
+ // eslint-disable-next-line no-octal-escape
98
+ mask="12.\04.0000"
99
+ maskChar="_"
100
+ alwaysShowMask
101
+ view={view}
102
+ onChange={onChange}
103
+ onValueChange={onValueChange}
104
+ {...rest}
105
+ />
106
+
107
+ <Mask
108
+ label="Маска времени"
109
+ mask="00:00"
110
+ maskChar="_"
111
+ alwaysShowMask
112
+ view={view}
113
+ onChange={onChange}
114
+ onValueChange={onValueChange}
115
+ {...rest}
116
+ />
117
+ </div>
118
+ );
119
+ };
120
+
121
+ export const Default: StoryObj<StoryPropsDefault> = {
122
+ args: {
123
+ size: 'l',
124
+ view: 'default',
125
+ labelPlacement: 'outer',
126
+ placeholder: 'Заполните поле',
127
+ disabled: false,
128
+ readOnly: false,
129
+ },
130
+ render: (args) => <StoryDemo {...args} />,
131
+ };
@@ -0,0 +1,219 @@
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", "onValueChange", "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, useCallback, useEffect, useMemo, useRef, useState } from 'react';
16
+ import { useForkRef } from '@salutejs/plasma-core';
17
+ import { canUseDOM } from '../../utils';
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
+ onValueChange = props.onValueChange,
32
+ onBlur = props.onBlur,
33
+ onFocus = props.onFocus,
34
+ reformat = props.reformat,
35
+ rest = _objectWithoutProperties(props, _excluded);
36
+ var mask = useMemo(function () {
37
+ return createMask({
38
+ value: String(value) || String(defaultValue) || '',
39
+ mask: maskValue,
40
+ maskChar: maskChar || defaults.maskChar,
41
+ maskString: maskString,
42
+ showPrefix: showPrefix || defaults.showPrefix,
43
+ reformat: reformat
44
+ });
45
+ }, []);
46
+ var firstRender = useRef(true);
47
+ var canSetSelection = useRef(false);
48
+ var inputRef = useRef(null);
49
+ var innerRef = useForkRef(inputRef, outerRef);
50
+ var _useState = useState(alwaysShowMask || showMaskedValue),
51
+ _useState2 = _slicedToArray(_useState, 2),
52
+ showMask = _useState2[0],
53
+ setShowMask = _useState2[1];
54
+ var getSelection = useCallback(function () {
55
+ var _inputRef$current, _inputRef$current2;
56
+ mask.setSelection = {
57
+ start: (inputRef === null || inputRef === void 0 || (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.selectionStart) || 0,
58
+ end: (inputRef === null || inputRef === void 0 || (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.selectionEnd) || 0
59
+ };
60
+ }, [mask]);
61
+ var setSelection = useCallback(function () {
62
+ var _inputRef$current3;
63
+ if (!canSetSelection.current) {
64
+ return;
65
+ }
66
+ var selection = mask.getSelection;
67
+ inputRef === null || inputRef === void 0 || (_inputRef$current3 = inputRef.current) === null || _inputRef$current3 === void 0 || _inputRef$current3.setSelectionRange(selection.start, selection.end);
68
+ var raf = function raf(fn) {
69
+ return setTimeout(fn, 0);
70
+ };
71
+ if (canUseDOM && window.requestAnimationFrame) {
72
+ raf = window.requestAnimationFrame;
73
+ }
74
+ raf(function () {
75
+ var _inputRef$current4;
76
+ return inputRef === null || inputRef === void 0 || (_inputRef$current4 = inputRef.current) === null || _inputRef$current4 === void 0 ? void 0 : _inputRef$current4.setSelectionRange(selection.start, selection.end);
77
+ });
78
+ }, [mask]);
79
+ var showValue = useCallback(function () {
80
+ if (!(inputRef !== null && inputRef !== void 0 && inputRef.current)) {
81
+ return;
82
+ }
83
+ if (showMask && (canSetSelection.current || alwaysShowMask)) {
84
+ inputRef.current.value = mask.getState.maskedValue;
85
+ return;
86
+ }
87
+ inputRef.current.value = mask.getState.visibleValue;
88
+ }, [showMask, alwaysShowMask, mask]);
89
+ var keyPressPropName = useCallback(function () {
90
+ if (typeof navigator !== 'undefined' && navigator.userAgent.match(/Android/i)) {
91
+ return 'onBeforeInput';
92
+ }
93
+ return 'onKeyPress';
94
+ }, []);
95
+ var dispatchEvent = function dispatchEvent(e) {
96
+ onChange && onChange(e);
97
+ var _mask$getState = mask.getState,
98
+ maskedValue = _mask$getState.maskedValue,
99
+ visibleValue = _mask$getState.visibleValue;
100
+ onValueChange && onValueChange({
101
+ maskedValue: maskedValue,
102
+ value: visibleValue
103
+ });
104
+ };
105
+ var onPaste = function onPaste(e) {
106
+ e.preventDefault();
107
+ getSelection();
108
+ if (!(e !== null && e !== void 0 && e.clipboardData)) {
109
+ return;
110
+ }
111
+ mask.paste(e.clipboardData.getData('Text'));
112
+ setTimeout(setSelection, 0);
113
+ dispatchEvent(e);
114
+ };
115
+ var handleChange = function handleChange(e) {
116
+ var currentValue;
117
+ if (showMask && (canSetSelection.current || alwaysShowMask)) {
118
+ currentValue = mask.getState.maskedValue;
119
+ } else {
120
+ currentValue = mask.getState.visibleValue;
121
+ }
122
+ if (e.target.value !== currentValue) {
123
+ getSelection();
124
+ mask.updateValue(e.target.value);
125
+ setTimeout(setSelection, 0);
126
+ }
127
+ dispatchEvent(e);
128
+ };
129
+ var onKeyPress = function onKeyPress(e) {
130
+ if (e.metaKey || e.altKey || e.ctrlKey || e.key === 'Enter') {
131
+ return;
132
+ }
133
+ e.preventDefault();
134
+ getSelection();
135
+ mask.input(e.key || String.fromCharCode(e.which));
136
+ setSelection();
137
+ dispatchEvent(e);
138
+ };
139
+ var onKeyDown = function onKeyDown(e) {
140
+ if (e.keyCode === KeyboardCode.Backspace) {
141
+ e.preventDefault();
142
+ getSelection();
143
+ mask.removePreviosOrSelected();
144
+ setSelection();
145
+ dispatchEvent(e);
146
+ }
147
+ if (e.keyCode === KeyboardCode.Delete) {
148
+ e.preventDefault();
149
+ getSelection();
150
+ mask.removeNextOrSelected();
151
+ setSelection();
152
+ dispatchEvent(e);
153
+ }
154
+ };
155
+ var handleFocus = function handleFocus(e) {
156
+ canSetSelection.current = true;
157
+ onFocus && onFocus(e);
158
+ };
159
+ var handleBlur = function handleBlur(e) {
160
+ canSetSelection.current = false;
161
+ onBlur && onBlur(e);
162
+ };
163
+ var keyPressEvent = _defineProperty({}, keyPressPropName(), onKeyPress);
164
+ useEffect(function () {
165
+ if (!firstRender.current) {
166
+ setShowMask(alwaysShowMask || showMask);
167
+ }
168
+ }, [alwaysShowMask, showMask]);
169
+ useEffect(function () {
170
+ if (!firstRender.current && reformat) {
171
+ mask.updateReformat(reformat);
172
+ }
173
+ }, [reformat]);
174
+ useEffect(function () {
175
+ if (!firstRender.current) {
176
+ mask.updateMask(String(mask));
177
+ }
178
+ }, [mask]);
179
+ useEffect(function () {
180
+ if (!firstRender.current) {
181
+ mask.updateMaskString(String(maskString));
182
+ }
183
+ }, [maskString]);
184
+ useEffect(function () {
185
+ if (!firstRender.current) {
186
+ mask.updateMaskChar(String(maskChar));
187
+ }
188
+ }, [maskChar]);
189
+ useEffect(function () {
190
+ if (!firstRender.current) {
191
+ mask.updateValue(String(value));
192
+ }
193
+ }, [value]);
194
+ useEffect(function () {
195
+ firstRender.current = false;
196
+ showValue();
197
+ }, [firstRender.current, mask]);
198
+ useEffect(function () {
199
+ var subscriber = function subscriber() {
200
+ showValue();
201
+ setSelection();
202
+ };
203
+ mask.subscribe(subscriber);
204
+ return function () {
205
+ mask.unsubscribe(subscriber);
206
+ };
207
+ }, [mask, showValue, setSelection]);
208
+ return /*#__PURE__*/React.createElement(InputComponent, _extends({}, rest, {
209
+ onChange: handleChange,
210
+ onKeyDown: onKeyDown,
211
+ onPaste: onPaste,
212
+ onFocus: handleFocus,
213
+ onBlur: handleBlur
214
+ }, keyPressEvent, {
215
+ ref: innerRef,
216
+ autoComplete: "off"
217
+ }));
218
+ });
219
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export { composeMask } from './Mask';
@@ -0,0 +1,25 @@
1
+ export var CharType = /*#__PURE__*/function (CharType) {
2
+ CharType[CharType["User"] = 1] = "User";
3
+ CharType[CharType["Char"] = 2] = "Char";
4
+ CharType[CharType["Mask"] = 3] = "Mask";
5
+ return CharType;
6
+ }({});
7
+ export var KeyboardCode = /*#__PURE__*/function (KeyboardCode) {
8
+ KeyboardCode[KeyboardCode["Backspace"] = 8] = "Backspace";
9
+ KeyboardCode[KeyboardCode["Delete"] = 46] = "Delete";
10
+ return KeyboardCode;
11
+ }({});
12
+ export var escapeChar = '\\';
13
+ export var defaultFormatChars = [{
14
+ str: '0',
15
+ regexp: /[0-9]/
16
+ }, {
17
+ str: '*',
18
+ regexp: /./
19
+ }, {
20
+ str: 'a',
21
+ regexp: /[a-zA-Z]/
22
+ }, {
23
+ str: 'я',
24
+ regexp: /[а-яА-ЯёЁ]/
25
+ }];
@@ -0,0 +1,44 @@
1
+ import { defaultFormatChars } from './constants';
2
+ import { MaskUtils } from './maskUtils';
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 maskUtils = new MaskUtils(showPrefix, maskChar, maskString, resReformat);
42
+ maskUtils.updateMask(params.mask || undefined);
43
+ return maskUtils;
44
+ };