@alfalab/core-components-masked-input 7.0.0 → 7.1.0-snapshot-92b8690

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.
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ import { InputProps } from '@alfalab/core-components-input';
3
+ declare type Mask = Array<string | RegExp>;
4
+ export declare type TextMaskConfig = {
5
+ currentCaretPosition: number;
6
+ rawValue: string;
7
+ previousConformedValue: string;
8
+ mask?: Mask | ((rawValue: string) => Mask);
9
+ guide?: boolean;
10
+ showMask?: boolean;
11
+ placeholderChar?: string;
12
+ keepCharPositions?: boolean;
13
+ pipe?: (conformedValue: string, config: TextMaskConfig) => false | string | {
14
+ value: string;
15
+ indexesOfPipedChars: number[];
16
+ };
17
+ };
18
+ export declare type MaskedInputProps = InputProps & {
19
+ /**
20
+ * Маска для поля ввода
21
+ * https://github.com/text-mask/text-mask/blob/master/componentDocumentation.md#mask-array
22
+ */
23
+ mask?: TextMaskConfig['mask'];
24
+ /**
25
+ * Управляет поведением компонента при удалении символов
26
+ */
27
+ keepCharPositions?: TextMaskConfig['keepCharPositions'];
28
+ /**
29
+ * Дает возможность изменить значение поля перед рендером
30
+ */
31
+ onBeforeDisplay?: TextMaskConfig['pipe'];
32
+ };
33
+ export declare const PLACEHOLDER_CHAR = "\u2000";
34
+ export declare const MaskedInput: React.ForwardRefExoticComponent<Omit<import("@alfalab/core-components-input/components/base-input").BaseInputProps, "FormControlComponent"> & {
35
+ breakpoint?: number | undefined;
36
+ client?: "desktop" | "mobile" | undefined;
37
+ defaultMatchMediaValue?: boolean | (() => boolean) | undefined;
38
+ } & {
39
+ /**
40
+ * Маска для поля ввода
41
+ * https://github.com/text-mask/text-mask/blob/master/componentDocumentation.md#mask-array
42
+ */
43
+ mask?: TextMaskConfig['mask'];
44
+ /**
45
+ * Управляет поведением компонента при удалении символов
46
+ */
47
+ keepCharPositions?: TextMaskConfig['keepCharPositions'];
48
+ /**
49
+ * Дает возможность изменить значение поля перед рендером
50
+ */
51
+ onBeforeDisplay?: TextMaskConfig['pipe'];
52
+ } & React.RefAttributes<HTMLInputElement>>;
53
+ export {};
@@ -0,0 +1,82 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var React = require('react');
7
+ var mergeRefs = require('react-merge-refs');
8
+ var cn = require('classnames');
9
+ var textMaskCore = require('text-mask-core');
10
+ var dynamicMixins = require('@alfalab/core-components-input/dynamic-mixins');
11
+ var index_module = require('./index.module.css.js');
12
+
13
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
14
+
15
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
16
+ var mergeRefs__default = /*#__PURE__*/_interopDefaultCompat(mergeRefs);
17
+ var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
18
+
19
+ // Символ плейсхолдера не может входить в маску, поэтому вместо пробела используется \u2000
20
+ var PLACEHOLDER_CHAR = '\u2000';
21
+ var MaskedInput = React__default.default.forwardRef(function (_a, ref) {
22
+ var _b;
23
+ var mask = _a.mask, _c = _a.keepCharPositions, keepCharPositions = _c === void 0 ? false : _c, value = _a.value, defaultValue = _a.defaultValue, className = _a.className, onBeforeDisplay = _a.onBeforeDisplay, onChange = _a.onChange, onClear = _a.onClear, restProps = tslib.__rest(_a, ["mask", "keepCharPositions", "value", "defaultValue", "className", "onBeforeDisplay", "onChange", "onClear"]);
24
+ var _d = React.useState(null), inputNode = _d[0], setInputNode = _d[1];
25
+ var textMask = React.useRef(null);
26
+ var _e = React.useState(value || defaultValue || ''), inputValue = _e[0], setInputValue = _e[1];
27
+ // Не показываем сырое значение до применения маски
28
+ var _f = React.useState(true), textHidden = _f[0], setTextHidden = _f[1];
29
+ var update = React.useCallback(function (newValue) {
30
+ if (newValue === void 0) { newValue = ''; }
31
+ if (textMask.current && inputNode) {
32
+ try {
33
+ textMask.current.update(newValue);
34
+ }
35
+ catch (e) {
36
+ // ignore masking errors
37
+ }
38
+ setInputValue(inputNode.value);
39
+ }
40
+ }, [inputNode]);
41
+ var handleInputChange = React.useCallback(function (event) {
42
+ update(event.target.value);
43
+ if (onChange) {
44
+ onChange(event, {
45
+ value: event.target.value,
46
+ });
47
+ }
48
+ }, [onChange, update]);
49
+ var handleClear = React.useCallback(function (event) {
50
+ update('');
51
+ if (onClear)
52
+ onClear(event);
53
+ }, [onClear, update]);
54
+ React.useEffect(function () {
55
+ if (inputNode) {
56
+ textMask.current = textMaskCore.createTextMaskInputElement({
57
+ mask: mask,
58
+ inputElement: inputNode,
59
+ pipe: onBeforeDisplay,
60
+ guide: false,
61
+ keepCharPositions: keepCharPositions,
62
+ showMask: false,
63
+ placeholderChar: PLACEHOLDER_CHAR,
64
+ rawValue: '',
65
+ currentCaretPosition: 0,
66
+ previousConformedValue: '',
67
+ });
68
+ }
69
+ }, [onBeforeDisplay, mask, keepCharPositions, inputNode]);
70
+ React.useEffect(function () {
71
+ update(value || defaultValue);
72
+ }, [value, update, defaultValue]);
73
+ React.useEffect(function () {
74
+ setTextHidden(false);
75
+ }, []);
76
+ return (React__default.default.createElement(dynamicMixins.Input, tslib.__assign({}, restProps, { className: cn__default.default(className, (_b = {}, _b[index_module.textHidden] = textHidden, _b)), value: inputValue, onChange: handleInputChange, onClear: handleClear, ref: mergeRefs__default.default([ref, setInputNode]) })));
77
+ });
78
+ MaskedInput.displayName = 'MaskedInput';
79
+
80
+ exports.MaskedInput = MaskedInput;
81
+ exports.PLACEHOLDER_CHAR = PLACEHOLDER_CHAR;
82
+ //# sourceMappingURL=Component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["import React, { ChangeEvent, MouseEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport cn from 'classnames';\nimport { createTextMaskInputElement, TextMaskInputElement } from 'text-mask-core';\n\nimport { Input, InputProps } from '@alfalab/core-components-input';\n\nimport styles from './index.module.css';\n\n// TODO: заставить rollup добавлять кастомные декларации в сборку\ntype Mask = Array<string | RegExp>;\nexport type TextMaskConfig = {\n currentCaretPosition: number;\n rawValue: string;\n previousConformedValue: string;\n mask?: Mask | ((rawValue: string) => Mask);\n guide?: boolean;\n showMask?: boolean;\n placeholderChar?: string;\n keepCharPositions?: boolean;\n pipe?: (\n conformedValue: string,\n config: TextMaskConfig,\n ) => false | string | { value: string; indexesOfPipedChars: number[] };\n};\n\nexport type MaskedInputProps = InputProps & {\n /**\n * Маска для поля ввода\n * https://github.com/text-mask/text-mask/blob/master/componentDocumentation.md#mask-array\n */\n mask?: TextMaskConfig['mask'];\n\n /**\n * Управляет поведением компонента при удалении символов\n */\n keepCharPositions?: TextMaskConfig['keepCharPositions'];\n\n /**\n * Дает возможность изменить значение поля перед рендером\n */\n onBeforeDisplay?: TextMaskConfig['pipe'];\n};\n\n// Символ плейсхолдера не может входить в маску, поэтому вместо пробела используется \\u2000\nexport const PLACEHOLDER_CHAR = '\\u2000';\n\nexport const MaskedInput = React.forwardRef<HTMLInputElement, MaskedInputProps>(\n (\n {\n mask,\n keepCharPositions = false,\n value,\n defaultValue,\n className,\n onBeforeDisplay,\n onChange,\n onClear,\n ...restProps\n },\n ref,\n ) => {\n const [inputNode, setInputNode] = useState<HTMLInputElement | null>(null);\n const textMask = useRef<TextMaskInputElement | null>(null);\n\n const [inputValue, setInputValue] = useState(value || defaultValue || '');\n // Не показываем сырое значение до применения маски\n const [textHidden, setTextHidden] = useState(true);\n\n const update = useCallback(\n (newValue = '') => {\n if (textMask.current && inputNode) {\n try {\n textMask.current.update(newValue);\n } catch (e) {\n // ignore masking errors\n }\n\n setInputValue(inputNode.value);\n }\n },\n [inputNode],\n );\n\n const handleInputChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n update(event.target.value);\n\n if (onChange) {\n onChange(event, {\n value: event.target.value,\n });\n }\n },\n [onChange, update],\n );\n\n const handleClear = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n update('');\n if (onClear) onClear(event);\n },\n [onClear, update],\n );\n\n useEffect(() => {\n if (inputNode) {\n textMask.current = createTextMaskInputElement({\n mask,\n inputElement: inputNode,\n pipe: onBeforeDisplay,\n guide: false,\n keepCharPositions,\n showMask: false,\n placeholderChar: PLACEHOLDER_CHAR,\n rawValue: '',\n currentCaretPosition: 0,\n previousConformedValue: '',\n });\n }\n }, [onBeforeDisplay, mask, keepCharPositions, inputNode]);\n\n useEffect(() => {\n update(value || defaultValue);\n }, [value, update, defaultValue]);\n\n useEffect(() => {\n setTextHidden(false);\n }, []);\n\n return (\n <Input\n {...restProps}\n className={cn(className, { [styles.textHidden]: textHidden })}\n value={inputValue}\n onChange={handleInputChange}\n onClear={handleClear}\n ref={mergeRefs([ref, setInputNode])}\n />\n );\n },\n);\n\nMaskedInput.displayName = 'MaskedInput';\n"],"names":["React","__rest","useState","useRef","useCallback","useEffect","createTextMaskInputElement","Input","__assign","cn","styles","mergeRefs"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ .masked-input__textHidden_1w511 input {
2
+ opacity: 0;
3
+ }
@@ -0,0 +1 @@
1
+ export * from './Component';
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var Component = require('./Component.js');
6
+
7
+
8
+
9
+ exports.MaskedInput = Component.MaskedInput;
10
+ exports.PLACEHOLDER_CHAR = Component.PLACEHOLDER_CHAR;
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ require('./index.css');
4
+
5
+ var styles = {"textHidden":"masked-input__textHidden_1w511"};
6
+
7
+ module.exports = styles;
8
+ //# sourceMappingURL=index.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.module.css.js","sources":["src/index.module.css"],"sourcesContent":[".textHidden input {\n opacity: 0;\n}\n"],"names":[],"mappings":";;;;AAEgB,aAAe,CAAC,YAAY,CAAC,gCAAgC,CAAC;;;;"}
package/esm/index.css CHANGED
@@ -1,3 +1,3 @@
1
- .masked-input__textHidden_1lxuc input {
1
+ .masked-input__textHidden_1w511 input {
2
2
  opacity: 0;
3
3
  }
@@ -1,6 +1,6 @@
1
1
  import './index.css';
2
2
 
3
- var styles = {"textHidden":"masked-input__textHidden_1lxuc"};
3
+ var styles = {"textHidden":"masked-input__textHidden_1w511"};
4
4
 
5
5
  export { styles as default };
6
6
  //# sourceMappingURL=index.module.css.js.map
package/index.css CHANGED
@@ -1,3 +1,3 @@
1
- .masked-input__textHidden_1lxuc input {
1
+ .masked-input__textHidden_1w511 input {
2
2
  opacity: 0;
3
3
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"textHidden":"masked-input__textHidden_1lxuc"};
5
+ var styles = {"textHidden":"masked-input__textHidden_1w511"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
package/modern/index.css CHANGED
@@ -1,3 +1,3 @@
1
- .masked-input__textHidden_1lxuc input {
1
+ .masked-input__textHidden_1w511 input {
2
2
  opacity: 0;
3
3
  }
@@ -1,6 +1,6 @@
1
1
  import './index.css';
2
2
 
3
- const styles = {"textHidden":"masked-input__textHidden_1lxuc"};
3
+ const styles = {"textHidden":"masked-input__textHidden_1w511"};
4
4
 
5
5
  export { styles as default };
6
6
  //# sourceMappingURL=index.module.css.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfalab/core-components-masked-input",
3
- "version": "7.0.0",
3
+ "version": "7.1.0-snapshot-92b8690",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -10,7 +10,7 @@
10
10
  "main": "index.js",
11
11
  "module": "./esm/index.js",
12
12
  "dependencies": {
13
- "@alfalab/core-components-input": "^16.0.0",
13
+ "@alfalab/core-components-input": "16.1.0-snapshot-92b8690",
14
14
  "classnames": "^2.5.1",
15
15
  "react-merge-refs": "^1.1.0",
16
16
  "text-mask-core": "^5.1.2",
@@ -24,6 +24,6 @@
24
24
  "access": "public",
25
25
  "directory": "dist"
26
26
  },
27
- "themesVersion": "14.0.0",
28
- "varsVersion": "10.0.0"
27
+ "themesVersion": "14.1.0-snapshot-92b8690",
28
+ "varsVersion": "10.1.0-snapshot-92b8690"
29
29
  }