@alfalab/core-components-phone-input 7.5.4 → 7.5.5-snapshot-1393ffa
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Component.js +9 -8
- package/Component.js.map +1 -0
- package/cssm/Component.js +11 -10
- package/cssm/Component.js.map +1 -0
- package/cssm/index.js +1 -0
- package/cssm/index.js.map +1 -0
- package/cssm/src/Component.d.ts +8 -0
- package/cssm/src/index.d.ts +1 -0
- package/cssm/src/utils/index.d.ts +17 -0
- package/cssm/utils/index.js +1 -0
- package/cssm/utils/index.js.map +1 -0
- package/esm/Component.js +1 -0
- package/esm/Component.js.map +1 -0
- package/esm/index.js +1 -0
- package/esm/index.js.map +1 -0
- package/esm/src/Component.d.ts +8 -0
- package/esm/src/index.d.ts +1 -0
- package/esm/src/utils/index.d.ts +17 -0
- package/esm/utils/index.js +1 -0
- package/esm/utils/index.js.map +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -0
- package/modern/Component.js +1 -0
- package/modern/Component.js.map +1 -0
- package/modern/index.js +1 -0
- package/modern/index.js.map +1 -0
- package/modern/src/Component.d.ts +8 -0
- package/modern/src/index.d.ts +1 -0
- package/modern/src/utils/index.d.ts +17 -0
- package/modern/utils/index.js +1 -0
- package/modern/utils/index.js.map +1 -0
- package/moderncssm/Component.js +1 -0
- package/moderncssm/Component.js.map +1 -0
- package/moderncssm/index.js +1 -0
- package/moderncssm/index.js.map +1 -0
- package/moderncssm/src/Component.d.ts +8 -0
- package/moderncssm/src/index.d.ts +1 -0
- package/moderncssm/src/utils/index.d.ts +17 -0
- package/moderncssm/utils/index.js +1 -0
- package/moderncssm/utils/index.js.map +1 -0
- package/package.json +4 -4
- package/src/Component.d.ts +8 -0
- package/src/index.d.ts +1 -0
- package/src/text-mask-core.d.ts +44 -0
- package/src/utils/index.d.ts +17 -0
- package/utils/index.js +1 -0
- package/utils/index.js.map +1 -0
- package/Component.d.ts +0 -10
- package/cssm/Component.d.ts +0 -10
- package/cssm/index.d.ts +0 -1
- package/cssm/utils/index.d.ts +0 -18
- package/esm/Component.d.ts +0 -10
- package/esm/index.d.ts +0 -1
- package/esm/utils/index.d.ts +0 -18
- package/index.d.ts +0 -1
- package/modern/Component.d.ts +0 -10
- package/modern/index.d.ts +0 -1
- package/modern/utils/index.d.ts +0 -18
- package/moderncssm/Component.d.ts +0 -10
- package/moderncssm/index.d.ts +0 -1
- package/moderncssm/utils/index.d.ts +0 -18
- package/utils/index.d.ts +0 -18
package/Component.js
CHANGED
|
@@ -7,7 +7,7 @@ var React = require('react');
|
|
|
7
7
|
var mergeRefs = require('react-merge-refs');
|
|
8
8
|
var textMaskCore = require('text-mask-core');
|
|
9
9
|
var coreComponentsMaskedInput = require('@alfalab/core-components-masked-input');
|
|
10
|
-
var
|
|
10
|
+
var index = require('./utils/index.js');
|
|
11
11
|
|
|
12
12
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
13
13
|
|
|
@@ -39,16 +39,16 @@ var PhoneInput = React__default.default.forwardRef(function (_a, ref) {
|
|
|
39
39
|
var handleBeforeDisplay = React.useCallback(function (conformedValue, config) {
|
|
40
40
|
var rawValue = config.rawValue, previousConformedValue = config.previousConformedValue, currentCaretPosition = config.currentCaretPosition;
|
|
41
41
|
var previousValueWithoutFormatting = previousConformedValue
|
|
42
|
-
?
|
|
42
|
+
? index.deleteFormatting(previousConformedValue)
|
|
43
43
|
: '';
|
|
44
44
|
/*
|
|
45
45
|
* Удаляем лишний символ маски при вводе или вставке значений перед знаком + или после него.
|
|
46
46
|
*/
|
|
47
47
|
if (previousConformedValue && rawValue.indexOf('+7') !== 0) {
|
|
48
|
-
var newRaw =
|
|
48
|
+
var newRaw = index.deleteMaskChar(previousValueWithoutFormatting, rawValue);
|
|
49
49
|
conformedValue = textMaskCore.conformToMask(newRaw, mask, config).conformedValue;
|
|
50
50
|
}
|
|
51
|
-
var currentValueWithoutFormatting =
|
|
51
|
+
var currentValueWithoutFormatting = index.deleteFormatting(conformedValue) || '';
|
|
52
52
|
/*
|
|
53
53
|
* код ниже нужен для фикса следующих багов библиотеки text-mask:
|
|
54
54
|
* 1) так как код страны указан в маске жестко как "+7",
|
|
@@ -63,11 +63,11 @@ var PhoneInput = React__default.default.forwardRef(function (_a, ref) {
|
|
|
63
63
|
currentValueWithoutFormatting.length) === 1) ||
|
|
64
64
|
([7, 10, 13].includes(currentCaretPosition) &&
|
|
65
65
|
previousConformedValue.length > currentCaretPosition))) {
|
|
66
|
-
|
|
66
|
+
index.setCaretPosition({ position: currentCaretPosition, inputRef: inputRef });
|
|
67
67
|
}
|
|
68
68
|
// // В режиме clearableCountryCode удаляет лишний пробел, чтобы можно было стереть код города.
|
|
69
69
|
if (rawValue === '+7' && conformedValue === '' && clearableCountryCode) {
|
|
70
|
-
|
|
70
|
+
index.setCaretPosition({ position: countryPrefix.length - 1, inputRef: inputRef });
|
|
71
71
|
}
|
|
72
72
|
// Удаление цифры перед кодом страны удаляет только саму цифру, код остается ("+7 1" -> "+7 ")
|
|
73
73
|
if (rawValue === countryPrefix) {
|
|
@@ -86,7 +86,7 @@ var PhoneInput = React__default.default.forwardRef(function (_a, ref) {
|
|
|
86
86
|
var masked = textMaskCore.conformToMask("+7".concat(rawValue), mask, config);
|
|
87
87
|
return masked.conformedValue;
|
|
88
88
|
}
|
|
89
|
-
var insertedNumber =
|
|
89
|
+
var insertedNumber = index.getInsertedNumber({
|
|
90
90
|
rawValue: rawValue,
|
|
91
91
|
clearableCountryCode: clearableCountryCode,
|
|
92
92
|
countryPrefix: countryPrefix,
|
|
@@ -104,7 +104,7 @@ var PhoneInput = React__default.default.forwardRef(function (_a, ref) {
|
|
|
104
104
|
}
|
|
105
105
|
var abortCountryCodeClearing = !clearableCountryCode && !conformedValue;
|
|
106
106
|
if (abortCountryCodeClearing) {
|
|
107
|
-
|
|
107
|
+
index.setCaretPosition({ position: countryPrefix.length, inputRef: inputRef });
|
|
108
108
|
if (!rawValue.length)
|
|
109
109
|
return countryPrefix;
|
|
110
110
|
return false;
|
|
@@ -116,3 +116,4 @@ var PhoneInput = React__default.default.forwardRef(function (_a, ref) {
|
|
|
116
116
|
PhoneInput.displayName = 'PhoneInputs';
|
|
117
117
|
|
|
118
118
|
exports.PhoneInput = PhoneInput;
|
|
119
|
+
//# sourceMappingURL=Component.js.map
|
package/Component.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["/* eslint-disable complexity, no-param-reassign */\nimport React, { useCallback, useRef } from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { conformToMask, TextMaskConfig } from 'text-mask-core';\n\nimport { MaskedInput, MaskedInputProps } from '@alfalab/core-components-masked-input';\n\nimport { deleteFormatting, deleteMaskChar, getInsertedNumber, setCaretPosition } from './utils';\n\nconst mask = [\n '+',\n '7',\n ' ',\n /([0-6]|[8-9])/,\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n];\n\nconst countryPrefix = '+7 ';\n\nexport type PhoneInputProps = Omit<MaskedInputProps, 'onBeforeDisplay' | 'type' | 'mask'> & {\n clearableCountryCode?: boolean;\n};\n\nexport const PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(\n ({ clearableCountryCode = true, ...restProps }, ref) => {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleBeforeDisplay = useCallback(\n (conformedValue: string, config: TextMaskConfig) => {\n const { rawValue, previousConformedValue, currentCaretPosition } = config;\n\n const previousValueWithoutFormatting = previousConformedValue\n ? deleteFormatting(previousConformedValue)\n : '';\n\n /*\n * Удаляем лишний символ маски при вводе или вставке значений перед знаком + или после него.\n */\n if (previousConformedValue && rawValue.indexOf('+7') !== 0) {\n const newRaw = deleteMaskChar(previousValueWithoutFormatting, rawValue);\n\n conformedValue = conformToMask(newRaw, mask, config).conformedValue;\n }\n\n const currentValueWithoutFormatting = deleteFormatting(conformedValue) || '';\n\n /*\n * код ниже нужен для фикса следующих багов библиотеки text-mask:\n * 1) так как код страны указан в маске жестко как \"+7\",\n * то при удалении цифры перед ним каретка устанавливается перед кодом страны\n * 2) в номере телефона есть пробелы и дефисы,\n * при редактировании цифр рядом с этими символами каретка перескакивает через них,\n * а не остается на том же месте, на котором была до редактирования\n */\n if (\n previousConformedValue &&\n (([3, 6].includes(currentCaretPosition) &&\n Math.abs(\n previousValueWithoutFormatting.length -\n currentValueWithoutFormatting.length,\n ) === 1) ||\n ([7, 10, 13].includes(currentCaretPosition) &&\n previousConformedValue.length > currentCaretPosition))\n ) {\n setCaretPosition({ position: currentCaretPosition, inputRef });\n }\n\n // // В режиме clearableCountryCode удаляет лишний пробел, чтобы можно было стереть код города.\n if (rawValue === '+7' && conformedValue === '' && clearableCountryCode) {\n setCaretPosition({ position: countryPrefix.length - 1, inputRef });\n }\n\n // Удаление цифры перед кодом страны удаляет только саму цифру, код остается (\"+7 1\" -> \"+7 \")\n if (rawValue === countryPrefix) {\n return rawValue;\n }\n\n // Вставка номера с 10 цифрами без кода страны\n if (rawValue.length === 10 && conformedValue.length === mask.length) {\n const masked = conformToMask(`+7${rawValue}`, mask, config);\n\n return masked.conformedValue;\n }\n\n /*\n * Код нужен для исправления ошибки в библиотеке text-mask: если цифра 7 находится на второй позиции при вставке, то она удаляется\n * Это происходит потому что цифра 7 есть уже в маске\n */\n if (rawValue[1] === '7') {\n const masked = conformToMask(`+7${rawValue}`, mask, config);\n\n return masked.conformedValue;\n }\n\n const insertedNumber = getInsertedNumber({\n rawValue,\n clearableCountryCode,\n countryPrefix,\n previousConformedValue,\n });\n\n // Вставка номера, начинающегося с 8 или 7: 89990313131, 71112223344\n if (\n conformedValue.length === mask.length &&\n (insertedNumber.startsWith('8') || insertedNumber.startsWith('7'))\n ) {\n const masked = conformToMask(`+7${insertedNumber.slice(1)}`, mask, config);\n\n return masked.conformedValue;\n }\n\n // Если ввод начат с 7 или 8 - выводит \"+7 \" и дает продолжить ввод со след. цифры\n if (rawValue.length === 1 && ['7', '8'].includes(rawValue[0])) {\n return countryPrefix;\n }\n\n const abortCountryCodeClearing = !clearableCountryCode && !conformedValue;\n\n if (abortCountryCodeClearing) {\n setCaretPosition({ position: countryPrefix.length, inputRef });\n\n if (!rawValue.length) return countryPrefix;\n\n return false;\n }\n\n return conformedValue;\n },\n [clearableCountryCode],\n );\n\n return (\n <MaskedInput\n {...restProps}\n defaultValue={clearableCountryCode ? restProps.defaultValue : countryPrefix}\n mask={mask}\n onBeforeDisplay={handleBeforeDisplay}\n type='tel'\n ref={mergeRefs([ref, inputRef])}\n />\n );\n },\n);\n\nPhoneInput.displayName = 'PhoneInputs';\n"],"names":["React","__rest","useRef","useCallback","deleteFormatting","deleteMaskChar","conformToMask","setCaretPosition","getInsertedNumber","MaskedInput","__assign","mergeRefs"],"mappings":"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"}
|
package/cssm/Component.js
CHANGED
|
@@ -6,8 +6,8 @@ var tslib = require('tslib');
|
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var mergeRefs = require('react-merge-refs');
|
|
8
8
|
var textMaskCore = require('text-mask-core');
|
|
9
|
-
var
|
|
10
|
-
var
|
|
9
|
+
var cssm = require('@alfalab/core-components-masked-input/cssm');
|
|
10
|
+
var index = require('./utils/index.js');
|
|
11
11
|
|
|
12
12
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
13
13
|
|
|
@@ -39,16 +39,16 @@ var PhoneInput = React__default.default.forwardRef(function (_a, ref) {
|
|
|
39
39
|
var handleBeforeDisplay = React.useCallback(function (conformedValue, config) {
|
|
40
40
|
var rawValue = config.rawValue, previousConformedValue = config.previousConformedValue, currentCaretPosition = config.currentCaretPosition;
|
|
41
41
|
var previousValueWithoutFormatting = previousConformedValue
|
|
42
|
-
?
|
|
42
|
+
? index.deleteFormatting(previousConformedValue)
|
|
43
43
|
: '';
|
|
44
44
|
/*
|
|
45
45
|
* Удаляем лишний символ маски при вводе или вставке значений перед знаком + или после него.
|
|
46
46
|
*/
|
|
47
47
|
if (previousConformedValue && rawValue.indexOf('+7') !== 0) {
|
|
48
|
-
var newRaw =
|
|
48
|
+
var newRaw = index.deleteMaskChar(previousValueWithoutFormatting, rawValue);
|
|
49
49
|
conformedValue = textMaskCore.conformToMask(newRaw, mask, config).conformedValue;
|
|
50
50
|
}
|
|
51
|
-
var currentValueWithoutFormatting =
|
|
51
|
+
var currentValueWithoutFormatting = index.deleteFormatting(conformedValue) || '';
|
|
52
52
|
/*
|
|
53
53
|
* код ниже нужен для фикса следующих багов библиотеки text-mask:
|
|
54
54
|
* 1) так как код страны указан в маске жестко как "+7",
|
|
@@ -63,11 +63,11 @@ var PhoneInput = React__default.default.forwardRef(function (_a, ref) {
|
|
|
63
63
|
currentValueWithoutFormatting.length) === 1) ||
|
|
64
64
|
([7, 10, 13].includes(currentCaretPosition) &&
|
|
65
65
|
previousConformedValue.length > currentCaretPosition))) {
|
|
66
|
-
|
|
66
|
+
index.setCaretPosition({ position: currentCaretPosition, inputRef: inputRef });
|
|
67
67
|
}
|
|
68
68
|
// // В режиме clearableCountryCode удаляет лишний пробел, чтобы можно было стереть код города.
|
|
69
69
|
if (rawValue === '+7' && conformedValue === '' && clearableCountryCode) {
|
|
70
|
-
|
|
70
|
+
index.setCaretPosition({ position: countryPrefix.length - 1, inputRef: inputRef });
|
|
71
71
|
}
|
|
72
72
|
// Удаление цифры перед кодом страны удаляет только саму цифру, код остается ("+7 1" -> "+7 ")
|
|
73
73
|
if (rawValue === countryPrefix) {
|
|
@@ -86,7 +86,7 @@ var PhoneInput = React__default.default.forwardRef(function (_a, ref) {
|
|
|
86
86
|
var masked = textMaskCore.conformToMask("+7".concat(rawValue), mask, config);
|
|
87
87
|
return masked.conformedValue;
|
|
88
88
|
}
|
|
89
|
-
var insertedNumber =
|
|
89
|
+
var insertedNumber = index.getInsertedNumber({
|
|
90
90
|
rawValue: rawValue,
|
|
91
91
|
clearableCountryCode: clearableCountryCode,
|
|
92
92
|
countryPrefix: countryPrefix,
|
|
@@ -104,15 +104,16 @@ var PhoneInput = React__default.default.forwardRef(function (_a, ref) {
|
|
|
104
104
|
}
|
|
105
105
|
var abortCountryCodeClearing = !clearableCountryCode && !conformedValue;
|
|
106
106
|
if (abortCountryCodeClearing) {
|
|
107
|
-
|
|
107
|
+
index.setCaretPosition({ position: countryPrefix.length, inputRef: inputRef });
|
|
108
108
|
if (!rawValue.length)
|
|
109
109
|
return countryPrefix;
|
|
110
110
|
return false;
|
|
111
111
|
}
|
|
112
112
|
return conformedValue;
|
|
113
113
|
}, [clearableCountryCode]);
|
|
114
|
-
return (React__default.default.createElement(
|
|
114
|
+
return (React__default.default.createElement(cssm.MaskedInput, tslib.__assign({}, restProps, { defaultValue: clearableCountryCode ? restProps.defaultValue : countryPrefix, mask: mask, onBeforeDisplay: handleBeforeDisplay, type: 'tel', ref: mergeRefs__default.default([ref, inputRef]) })));
|
|
115
115
|
});
|
|
116
116
|
PhoneInput.displayName = 'PhoneInputs';
|
|
117
117
|
|
|
118
118
|
exports.PhoneInput = PhoneInput;
|
|
119
|
+
//# sourceMappingURL=Component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Component.js","sources":["../../src/Component.tsx"],"sourcesContent":["/* eslint-disable complexity, no-param-reassign */\nimport React, { useCallback, useRef } from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { conformToMask, TextMaskConfig } from 'text-mask-core';\n\nimport { MaskedInput, MaskedInputProps } from '@alfalab/core-components-masked-input';\n\nimport { deleteFormatting, deleteMaskChar, getInsertedNumber, setCaretPosition } from './utils';\n\nconst mask = [\n '+',\n '7',\n ' ',\n /([0-6]|[8-9])/,\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n];\n\nconst countryPrefix = '+7 ';\n\nexport type PhoneInputProps = Omit<MaskedInputProps, 'onBeforeDisplay' | 'type' | 'mask'> & {\n clearableCountryCode?: boolean;\n};\n\nexport const PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(\n ({ clearableCountryCode = true, ...restProps }, ref) => {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleBeforeDisplay = useCallback(\n (conformedValue: string, config: TextMaskConfig) => {\n const { rawValue, previousConformedValue, currentCaretPosition } = config;\n\n const previousValueWithoutFormatting = previousConformedValue\n ? deleteFormatting(previousConformedValue)\n : '';\n\n /*\n * Удаляем лишний символ маски при вводе или вставке значений перед знаком + или после него.\n */\n if (previousConformedValue && rawValue.indexOf('+7') !== 0) {\n const newRaw = deleteMaskChar(previousValueWithoutFormatting, rawValue);\n\n conformedValue = conformToMask(newRaw, mask, config).conformedValue;\n }\n\n const currentValueWithoutFormatting = deleteFormatting(conformedValue) || '';\n\n /*\n * код ниже нужен для фикса следующих багов библиотеки text-mask:\n * 1) так как код страны указан в маске жестко как \"+7\",\n * то при удалении цифры перед ним каретка устанавливается перед кодом страны\n * 2) в номере телефона есть пробелы и дефисы,\n * при редактировании цифр рядом с этими символами каретка перескакивает через них,\n * а не остается на том же месте, на котором была до редактирования\n */\n if (\n previousConformedValue &&\n (([3, 6].includes(currentCaretPosition) &&\n Math.abs(\n previousValueWithoutFormatting.length -\n currentValueWithoutFormatting.length,\n ) === 1) ||\n ([7, 10, 13].includes(currentCaretPosition) &&\n previousConformedValue.length > currentCaretPosition))\n ) {\n setCaretPosition({ position: currentCaretPosition, inputRef });\n }\n\n // // В режиме clearableCountryCode удаляет лишний пробел, чтобы можно было стереть код города.\n if (rawValue === '+7' && conformedValue === '' && clearableCountryCode) {\n setCaretPosition({ position: countryPrefix.length - 1, inputRef });\n }\n\n // Удаление цифры перед кодом страны удаляет только саму цифру, код остается (\"+7 1\" -> \"+7 \")\n if (rawValue === countryPrefix) {\n return rawValue;\n }\n\n // Вставка номера с 10 цифрами без кода страны\n if (rawValue.length === 10 && conformedValue.length === mask.length) {\n const masked = conformToMask(`+7${rawValue}`, mask, config);\n\n return masked.conformedValue;\n }\n\n /*\n * Код нужен для исправления ошибки в библиотеке text-mask: если цифра 7 находится на второй позиции при вставке, то она удаляется\n * Это происходит потому что цифра 7 есть уже в маске\n */\n if (rawValue[1] === '7') {\n const masked = conformToMask(`+7${rawValue}`, mask, config);\n\n return masked.conformedValue;\n }\n\n const insertedNumber = getInsertedNumber({\n rawValue,\n clearableCountryCode,\n countryPrefix,\n previousConformedValue,\n });\n\n // Вставка номера, начинающегося с 8 или 7: 89990313131, 71112223344\n if (\n conformedValue.length === mask.length &&\n (insertedNumber.startsWith('8') || insertedNumber.startsWith('7'))\n ) {\n const masked = conformToMask(`+7${insertedNumber.slice(1)}`, mask, config);\n\n return masked.conformedValue;\n }\n\n // Если ввод начат с 7 или 8 - выводит \"+7 \" и дает продолжить ввод со след. цифры\n if (rawValue.length === 1 && ['7', '8'].includes(rawValue[0])) {\n return countryPrefix;\n }\n\n const abortCountryCodeClearing = !clearableCountryCode && !conformedValue;\n\n if (abortCountryCodeClearing) {\n setCaretPosition({ position: countryPrefix.length, inputRef });\n\n if (!rawValue.length) return countryPrefix;\n\n return false;\n }\n\n return conformedValue;\n },\n [clearableCountryCode],\n );\n\n return (\n <MaskedInput\n {...restProps}\n defaultValue={clearableCountryCode ? restProps.defaultValue : countryPrefix}\n mask={mask}\n onBeforeDisplay={handleBeforeDisplay}\n type='tel'\n ref={mergeRefs([ref, inputRef])}\n />\n );\n },\n);\n\nPhoneInput.displayName = 'PhoneInputs';\n"],"names":["React","__rest","useRef","useCallback","deleteFormatting","deleteMaskChar","conformToMask","setCaretPosition","getInsertedNumber","MaskedInput","__assign","mergeRefs"],"mappings":"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"}
|
package/cssm/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { MaskedInputProps } from '@alfalab/core-components-masked-input';
|
|
3
|
+
export declare type PhoneInputProps = Omit<MaskedInputProps, 'onBeforeDisplay' | 'type' | 'mask'> & {
|
|
4
|
+
clearableCountryCode?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const PhoneInput: React.ForwardRefExoticComponent<Omit<MaskedInputProps, "type" | "onBeforeDisplay" | "mask"> & {
|
|
7
|
+
clearableCountryCode?: boolean | undefined;
|
|
8
|
+
} & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Component';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Удаляет форматирование номера телефона
|
|
3
|
+
* @param phone Номер телефона
|
|
4
|
+
*/
|
|
5
|
+
/// <reference types="react" />
|
|
6
|
+
export declare const deleteFormatting: (phone: string) => string;
|
|
7
|
+
export declare function setCaretPosition({ position, inputRef, }: {
|
|
8
|
+
position: number;
|
|
9
|
+
inputRef: React.RefObject<HTMLInputElement>;
|
|
10
|
+
}): void;
|
|
11
|
+
export declare function getInsertedNumber({ rawValue, clearableCountryCode, countryPrefix, previousConformedValue, }: {
|
|
12
|
+
rawValue: string;
|
|
13
|
+
clearableCountryCode: boolean;
|
|
14
|
+
countryPrefix: string;
|
|
15
|
+
previousConformedValue: string;
|
|
16
|
+
}): string;
|
|
17
|
+
export declare function deleteMaskChar(previousValue: string, rawValue: string): string;
|
package/cssm/utils/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/utils/index.ts"],"sourcesContent":["/**\n * Удаляет форматирование номера телефона\n * @param phone Номер телефона\n */\n\nexport const deleteFormatting = (phone: string) =>\n phone.replace('+', '').replace(/^7/, '').replace(/\\s/g, '');\n\nexport function setCaretPosition({\n position,\n inputRef,\n}: {\n position: number;\n inputRef: React.RefObject<HTMLInputElement>;\n}) {\n window.requestAnimationFrame(() => {\n if (inputRef === null || !inputRef.current) return;\n\n inputRef.current.setSelectionRange(position, position);\n });\n}\n\nexport function getInsertedNumber({\n rawValue,\n clearableCountryCode,\n countryPrefix,\n previousConformedValue,\n}: {\n rawValue: string;\n clearableCountryCode: boolean;\n countryPrefix: string;\n previousConformedValue: string;\n}) {\n if (!clearableCountryCode && previousConformedValue === countryPrefix) {\n if (rawValue.startsWith('7') || rawValue.startsWith('8')) {\n return rawValue;\n }\n\n return rawValue.slice(countryPrefix.length);\n }\n\n return rawValue;\n}\n\nexport function deleteMaskChar(previousValue: string, rawValue: string) {\n const prevRawValueAsArr = deleteFormatting(rawValue).split('').reverse();\n let prevConformedCharIdx = previousValue.length - 1;\n let isMaskRemoved = false;\n const newRaw: string[] = [];\n\n prevRawValueAsArr.forEach((char) => {\n if (isMaskRemoved || char === previousValue[prevConformedCharIdx]) {\n newRaw.push(char);\n prevConformedCharIdx -= 1;\n } else if (char === '7') {\n isMaskRemoved = true;\n }\n });\n\n return newRaw.reverse().join('');\n}\n"],"names":[],"mappings":";;;;AAAA;;;AAGG;AAEI,IAAM,gBAAgB,GAAG,UAAC,KAAa,EAAA;IAC1C,OAAA,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAA3D;AAEE,SAAU,gBAAgB,CAAC,EAMhC,EAAA;QALG,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,QAAQ,GAAA,EAAA,CAAA,QAAA;IAKR,MAAM,CAAC,qBAAqB,CAAC,YAAA;AACzB,QAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE;QAE5C,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC1D,KAAC,CAAC;AACN;AAEM,SAAU,iBAAiB,CAAC,EAUjC,EAAA;QATG,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,oBAAoB,GAAA,EAAA,CAAA,oBAAA,EACpB,aAAa,GAAA,EAAA,CAAA,aAAA,EACb,sBAAsB,GAAA,EAAA,CAAA,sBAAA;AAOtB,IAAA,IAAI,CAAC,oBAAoB,IAAI,sBAAsB,KAAK,aAAa,EAAE;AACnE,QAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACtD,YAAA,OAAO,QAAQ;AAClB;QAED,OAAO,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9C;AAED,IAAA,OAAO,QAAQ;AACnB;AAEgB,SAAA,cAAc,CAAC,aAAqB,EAAE,QAAgB,EAAA;AAClE,IAAA,IAAM,iBAAiB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE;AACxE,IAAA,IAAI,oBAAoB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;IACnD,IAAI,aAAa,GAAG,KAAK;IACzB,IAAM,MAAM,GAAa,EAAE;AAE3B,IAAA,iBAAiB,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;QAC3B,IAAI,aAAa,IAAI,IAAI,KAAK,aAAa,CAAC,oBAAoB,CAAC,EAAE;AAC/D,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACjB,oBAAoB,IAAI,CAAC;AAC5B;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE;YACrB,aAAa,GAAG,IAAI;AACvB;AACL,KAAC,CAAC;IAEF,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACpC;;;;;;;"}
|
package/esm/Component.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Component.js","sources":["../../src/Component.tsx"],"sourcesContent":["/* eslint-disable complexity, no-param-reassign */\nimport React, { useCallback, useRef } from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { conformToMask, TextMaskConfig } from 'text-mask-core';\n\nimport { MaskedInput, MaskedInputProps } from '@alfalab/core-components-masked-input';\n\nimport { deleteFormatting, deleteMaskChar, getInsertedNumber, setCaretPosition } from './utils';\n\nconst mask = [\n '+',\n '7',\n ' ',\n /([0-6]|[8-9])/,\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n];\n\nconst countryPrefix = '+7 ';\n\nexport type PhoneInputProps = Omit<MaskedInputProps, 'onBeforeDisplay' | 'type' | 'mask'> & {\n clearableCountryCode?: boolean;\n};\n\nexport const PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(\n ({ clearableCountryCode = true, ...restProps }, ref) => {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleBeforeDisplay = useCallback(\n (conformedValue: string, config: TextMaskConfig) => {\n const { rawValue, previousConformedValue, currentCaretPosition } = config;\n\n const previousValueWithoutFormatting = previousConformedValue\n ? deleteFormatting(previousConformedValue)\n : '';\n\n /*\n * Удаляем лишний символ маски при вводе или вставке значений перед знаком + или после него.\n */\n if (previousConformedValue && rawValue.indexOf('+7') !== 0) {\n const newRaw = deleteMaskChar(previousValueWithoutFormatting, rawValue);\n\n conformedValue = conformToMask(newRaw, mask, config).conformedValue;\n }\n\n const currentValueWithoutFormatting = deleteFormatting(conformedValue) || '';\n\n /*\n * код ниже нужен для фикса следующих багов библиотеки text-mask:\n * 1) так как код страны указан в маске жестко как \"+7\",\n * то при удалении цифры перед ним каретка устанавливается перед кодом страны\n * 2) в номере телефона есть пробелы и дефисы,\n * при редактировании цифр рядом с этими символами каретка перескакивает через них,\n * а не остается на том же месте, на котором была до редактирования\n */\n if (\n previousConformedValue &&\n (([3, 6].includes(currentCaretPosition) &&\n Math.abs(\n previousValueWithoutFormatting.length -\n currentValueWithoutFormatting.length,\n ) === 1) ||\n ([7, 10, 13].includes(currentCaretPosition) &&\n previousConformedValue.length > currentCaretPosition))\n ) {\n setCaretPosition({ position: currentCaretPosition, inputRef });\n }\n\n // // В режиме clearableCountryCode удаляет лишний пробел, чтобы можно было стереть код города.\n if (rawValue === '+7' && conformedValue === '' && clearableCountryCode) {\n setCaretPosition({ position: countryPrefix.length - 1, inputRef });\n }\n\n // Удаление цифры перед кодом страны удаляет только саму цифру, код остается (\"+7 1\" -> \"+7 \")\n if (rawValue === countryPrefix) {\n return rawValue;\n }\n\n // Вставка номера с 10 цифрами без кода страны\n if (rawValue.length === 10 && conformedValue.length === mask.length) {\n const masked = conformToMask(`+7${rawValue}`, mask, config);\n\n return masked.conformedValue;\n }\n\n /*\n * Код нужен для исправления ошибки в библиотеке text-mask: если цифра 7 находится на второй позиции при вставке, то она удаляется\n * Это происходит потому что цифра 7 есть уже в маске\n */\n if (rawValue[1] === '7') {\n const masked = conformToMask(`+7${rawValue}`, mask, config);\n\n return masked.conformedValue;\n }\n\n const insertedNumber = getInsertedNumber({\n rawValue,\n clearableCountryCode,\n countryPrefix,\n previousConformedValue,\n });\n\n // Вставка номера, начинающегося с 8 или 7: 89990313131, 71112223344\n if (\n conformedValue.length === mask.length &&\n (insertedNumber.startsWith('8') || insertedNumber.startsWith('7'))\n ) {\n const masked = conformToMask(`+7${insertedNumber.slice(1)}`, mask, config);\n\n return masked.conformedValue;\n }\n\n // Если ввод начат с 7 или 8 - выводит \"+7 \" и дает продолжить ввод со след. цифры\n if (rawValue.length === 1 && ['7', '8'].includes(rawValue[0])) {\n return countryPrefix;\n }\n\n const abortCountryCodeClearing = !clearableCountryCode && !conformedValue;\n\n if (abortCountryCodeClearing) {\n setCaretPosition({ position: countryPrefix.length, inputRef });\n\n if (!rawValue.length) return countryPrefix;\n\n return false;\n }\n\n return conformedValue;\n },\n [clearableCountryCode],\n );\n\n return (\n <MaskedInput\n {...restProps}\n defaultValue={clearableCountryCode ? restProps.defaultValue : countryPrefix}\n mask={mask}\n onBeforeDisplay={handleBeforeDisplay}\n type='tel'\n ref={mergeRefs([ref, inputRef])}\n />\n );\n },\n);\n\nPhoneInput.displayName = 'PhoneInputs';\n"],"names":[],"mappings":"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"}
|
package/esm/index.js
CHANGED
package/esm/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { MaskedInputProps } from '@alfalab/core-components-masked-input';
|
|
3
|
+
export declare type PhoneInputProps = Omit<MaskedInputProps, 'onBeforeDisplay' | 'type' | 'mask'> & {
|
|
4
|
+
clearableCountryCode?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const PhoneInput: React.ForwardRefExoticComponent<Omit<MaskedInputProps, "type" | "onBeforeDisplay" | "mask"> & {
|
|
7
|
+
clearableCountryCode?: boolean | undefined;
|
|
8
|
+
} & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Component';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Удаляет форматирование номера телефона
|
|
3
|
+
* @param phone Номер телефона
|
|
4
|
+
*/
|
|
5
|
+
/// <reference types="react" />
|
|
6
|
+
export declare const deleteFormatting: (phone: string) => string;
|
|
7
|
+
export declare function setCaretPosition({ position, inputRef, }: {
|
|
8
|
+
position: number;
|
|
9
|
+
inputRef: React.RefObject<HTMLInputElement>;
|
|
10
|
+
}): void;
|
|
11
|
+
export declare function getInsertedNumber({ rawValue, clearableCountryCode, countryPrefix, previousConformedValue, }: {
|
|
12
|
+
rawValue: string;
|
|
13
|
+
clearableCountryCode: boolean;
|
|
14
|
+
countryPrefix: string;
|
|
15
|
+
previousConformedValue: string;
|
|
16
|
+
}): string;
|
|
17
|
+
export declare function deleteMaskChar(previousValue: string, rawValue: string): string;
|
package/esm/utils/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/utils/index.ts"],"sourcesContent":["/**\n * Удаляет форматирование номера телефона\n * @param phone Номер телефона\n */\n\nexport const deleteFormatting = (phone: string) =>\n phone.replace('+', '').replace(/^7/, '').replace(/\\s/g, '');\n\nexport function setCaretPosition({\n position,\n inputRef,\n}: {\n position: number;\n inputRef: React.RefObject<HTMLInputElement>;\n}) {\n window.requestAnimationFrame(() => {\n if (inputRef === null || !inputRef.current) return;\n\n inputRef.current.setSelectionRange(position, position);\n });\n}\n\nexport function getInsertedNumber({\n rawValue,\n clearableCountryCode,\n countryPrefix,\n previousConformedValue,\n}: {\n rawValue: string;\n clearableCountryCode: boolean;\n countryPrefix: string;\n previousConformedValue: string;\n}) {\n if (!clearableCountryCode && previousConformedValue === countryPrefix) {\n if (rawValue.startsWith('7') || rawValue.startsWith('8')) {\n return rawValue;\n }\n\n return rawValue.slice(countryPrefix.length);\n }\n\n return rawValue;\n}\n\nexport function deleteMaskChar(previousValue: string, rawValue: string) {\n const prevRawValueAsArr = deleteFormatting(rawValue).split('').reverse();\n let prevConformedCharIdx = previousValue.length - 1;\n let isMaskRemoved = false;\n const newRaw: string[] = [];\n\n prevRawValueAsArr.forEach((char) => {\n if (isMaskRemoved || char === previousValue[prevConformedCharIdx]) {\n newRaw.push(char);\n prevConformedCharIdx -= 1;\n } else if (char === '7') {\n isMaskRemoved = true;\n }\n });\n\n return newRaw.reverse().join('');\n}\n"],"names":[],"mappings":"AAAA;;;AAGG;AAEI,IAAM,gBAAgB,GAAG,UAAC,KAAa,EAAA;IAC1C,OAAA,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAA3D;AAEE,SAAU,gBAAgB,CAAC,EAMhC,EAAA;QALG,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,QAAQ,GAAA,EAAA,CAAA,QAAA;IAKR,MAAM,CAAC,qBAAqB,CAAC,YAAA;AACzB,QAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE;QAE5C,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC1D,KAAC,CAAC;AACN;AAEM,SAAU,iBAAiB,CAAC,EAUjC,EAAA;QATG,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,oBAAoB,GAAA,EAAA,CAAA,oBAAA,EACpB,aAAa,GAAA,EAAA,CAAA,aAAA,EACb,sBAAsB,GAAA,EAAA,CAAA,sBAAA;AAOtB,IAAA,IAAI,CAAC,oBAAoB,IAAI,sBAAsB,KAAK,aAAa,EAAE;AACnE,QAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACtD,YAAA,OAAO,QAAQ;AAClB;QAED,OAAO,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9C;AAED,IAAA,OAAO,QAAQ;AACnB;AAEgB,SAAA,cAAc,CAAC,aAAqB,EAAE,QAAgB,EAAA;AAClE,IAAA,IAAM,iBAAiB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE;AACxE,IAAA,IAAI,oBAAoB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;IACnD,IAAI,aAAa,GAAG,KAAK;IACzB,IAAM,MAAM,GAAa,EAAE;AAE3B,IAAA,iBAAiB,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;QAC3B,IAAI,aAAa,IAAI,IAAI,KAAK,aAAa,CAAC,oBAAoB,CAAC,EAAE;AAC/D,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACjB,oBAAoB,IAAI,CAAC;AAC5B;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE;YACrB,aAAa,GAAG,IAAI;AACvB;AACL,KAAC,CAAC;IAEF,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACpC;;;;"}
|
package/index.js
CHANGED
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
package/modern/Component.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Component.js","sources":["../../src/Component.tsx"],"sourcesContent":["/* eslint-disable complexity, no-param-reassign */\nimport React, { useCallback, useRef } from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { conformToMask, TextMaskConfig } from 'text-mask-core';\n\nimport { MaskedInput, MaskedInputProps } from '@alfalab/core-components-masked-input';\n\nimport { deleteFormatting, deleteMaskChar, getInsertedNumber, setCaretPosition } from './utils';\n\nconst mask = [\n '+',\n '7',\n ' ',\n /([0-6]|[8-9])/,\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n];\n\nconst countryPrefix = '+7 ';\n\nexport type PhoneInputProps = Omit<MaskedInputProps, 'onBeforeDisplay' | 'type' | 'mask'> & {\n clearableCountryCode?: boolean;\n};\n\nexport const PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(\n ({ clearableCountryCode = true, ...restProps }, ref) => {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleBeforeDisplay = useCallback(\n (conformedValue: string, config: TextMaskConfig) => {\n const { rawValue, previousConformedValue, currentCaretPosition } = config;\n\n const previousValueWithoutFormatting = previousConformedValue\n ? deleteFormatting(previousConformedValue)\n : '';\n\n /*\n * Удаляем лишний символ маски при вводе или вставке значений перед знаком + или после него.\n */\n if (previousConformedValue && rawValue.indexOf('+7') !== 0) {\n const newRaw = deleteMaskChar(previousValueWithoutFormatting, rawValue);\n\n conformedValue = conformToMask(newRaw, mask, config).conformedValue;\n }\n\n const currentValueWithoutFormatting = deleteFormatting(conformedValue) || '';\n\n /*\n * код ниже нужен для фикса следующих багов библиотеки text-mask:\n * 1) так как код страны указан в маске жестко как \"+7\",\n * то при удалении цифры перед ним каретка устанавливается перед кодом страны\n * 2) в номере телефона есть пробелы и дефисы,\n * при редактировании цифр рядом с этими символами каретка перескакивает через них,\n * а не остается на том же месте, на котором была до редактирования\n */\n if (\n previousConformedValue &&\n (([3, 6].includes(currentCaretPosition) &&\n Math.abs(\n previousValueWithoutFormatting.length -\n currentValueWithoutFormatting.length,\n ) === 1) ||\n ([7, 10, 13].includes(currentCaretPosition) &&\n previousConformedValue.length > currentCaretPosition))\n ) {\n setCaretPosition({ position: currentCaretPosition, inputRef });\n }\n\n // // В режиме clearableCountryCode удаляет лишний пробел, чтобы можно было стереть код города.\n if (rawValue === '+7' && conformedValue === '' && clearableCountryCode) {\n setCaretPosition({ position: countryPrefix.length - 1, inputRef });\n }\n\n // Удаление цифры перед кодом страны удаляет только саму цифру, код остается (\"+7 1\" -> \"+7 \")\n if (rawValue === countryPrefix) {\n return rawValue;\n }\n\n // Вставка номера с 10 цифрами без кода страны\n if (rawValue.length === 10 && conformedValue.length === mask.length) {\n const masked = conformToMask(`+7${rawValue}`, mask, config);\n\n return masked.conformedValue;\n }\n\n /*\n * Код нужен для исправления ошибки в библиотеке text-mask: если цифра 7 находится на второй позиции при вставке, то она удаляется\n * Это происходит потому что цифра 7 есть уже в маске\n */\n if (rawValue[1] === '7') {\n const masked = conformToMask(`+7${rawValue}`, mask, config);\n\n return masked.conformedValue;\n }\n\n const insertedNumber = getInsertedNumber({\n rawValue,\n clearableCountryCode,\n countryPrefix,\n previousConformedValue,\n });\n\n // Вставка номера, начинающегося с 8 или 7: 89990313131, 71112223344\n if (\n conformedValue.length === mask.length &&\n (insertedNumber.startsWith('8') || insertedNumber.startsWith('7'))\n ) {\n const masked = conformToMask(`+7${insertedNumber.slice(1)}`, mask, config);\n\n return masked.conformedValue;\n }\n\n // Если ввод начат с 7 или 8 - выводит \"+7 \" и дает продолжить ввод со след. цифры\n if (rawValue.length === 1 && ['7', '8'].includes(rawValue[0])) {\n return countryPrefix;\n }\n\n const abortCountryCodeClearing = !clearableCountryCode && !conformedValue;\n\n if (abortCountryCodeClearing) {\n setCaretPosition({ position: countryPrefix.length, inputRef });\n\n if (!rawValue.length) return countryPrefix;\n\n return false;\n }\n\n return conformedValue;\n },\n [clearableCountryCode],\n );\n\n return (\n <MaskedInput\n {...restProps}\n defaultValue={clearableCountryCode ? restProps.defaultValue : countryPrefix}\n mask={mask}\n onBeforeDisplay={handleBeforeDisplay}\n type='tel'\n ref={mergeRefs([ref, inputRef])}\n />\n );\n },\n);\n\nPhoneInput.displayName = 'PhoneInputs';\n"],"names":[],"mappings":"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"}
|
package/modern/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { MaskedInputProps } from '@alfalab/core-components-masked-input';
|
|
3
|
+
export declare type PhoneInputProps = Omit<MaskedInputProps, 'onBeforeDisplay' | 'type' | 'mask'> & {
|
|
4
|
+
clearableCountryCode?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const PhoneInput: React.ForwardRefExoticComponent<Omit<MaskedInputProps, "type" | "onBeforeDisplay" | "mask"> & {
|
|
7
|
+
clearableCountryCode?: boolean | undefined;
|
|
8
|
+
} & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Component';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Удаляет форматирование номера телефона
|
|
3
|
+
* @param phone Номер телефона
|
|
4
|
+
*/
|
|
5
|
+
/// <reference types="react" />
|
|
6
|
+
export declare const deleteFormatting: (phone: string) => string;
|
|
7
|
+
export declare function setCaretPosition({ position, inputRef, }: {
|
|
8
|
+
position: number;
|
|
9
|
+
inputRef: React.RefObject<HTMLInputElement>;
|
|
10
|
+
}): void;
|
|
11
|
+
export declare function getInsertedNumber({ rawValue, clearableCountryCode, countryPrefix, previousConformedValue, }: {
|
|
12
|
+
rawValue: string;
|
|
13
|
+
clearableCountryCode: boolean;
|
|
14
|
+
countryPrefix: string;
|
|
15
|
+
previousConformedValue: string;
|
|
16
|
+
}): string;
|
|
17
|
+
export declare function deleteMaskChar(previousValue: string, rawValue: string): string;
|
package/modern/utils/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/utils/index.ts"],"sourcesContent":["/**\n * Удаляет форматирование номера телефона\n * @param phone Номер телефона\n */\n\nexport const deleteFormatting = (phone: string) =>\n phone.replace('+', '').replace(/^7/, '').replace(/\\s/g, '');\n\nexport function setCaretPosition({\n position,\n inputRef,\n}: {\n position: number;\n inputRef: React.RefObject<HTMLInputElement>;\n}) {\n window.requestAnimationFrame(() => {\n if (inputRef === null || !inputRef.current) return;\n\n inputRef.current.setSelectionRange(position, position);\n });\n}\n\nexport function getInsertedNumber({\n rawValue,\n clearableCountryCode,\n countryPrefix,\n previousConformedValue,\n}: {\n rawValue: string;\n clearableCountryCode: boolean;\n countryPrefix: string;\n previousConformedValue: string;\n}) {\n if (!clearableCountryCode && previousConformedValue === countryPrefix) {\n if (rawValue.startsWith('7') || rawValue.startsWith('8')) {\n return rawValue;\n }\n\n return rawValue.slice(countryPrefix.length);\n }\n\n return rawValue;\n}\n\nexport function deleteMaskChar(previousValue: string, rawValue: string) {\n const prevRawValueAsArr = deleteFormatting(rawValue).split('').reverse();\n let prevConformedCharIdx = previousValue.length - 1;\n let isMaskRemoved = false;\n const newRaw: string[] = [];\n\n prevRawValueAsArr.forEach((char) => {\n if (isMaskRemoved || char === previousValue[prevConformedCharIdx]) {\n newRaw.push(char);\n prevConformedCharIdx -= 1;\n } else if (char === '7') {\n isMaskRemoved = true;\n }\n });\n\n return newRaw.reverse().join('');\n}\n"],"names":[],"mappings":"AAAA;;;AAGG;AAEI,MAAM,gBAAgB,GAAG,CAAC,KAAa,KAC1C,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE;SAE9C,gBAAgB,CAAC,EAC7B,QAAQ,EACR,QAAQ,GAIX,EAAA;AACG,IAAA,MAAM,CAAC,qBAAqB,CAAC,MAAK;AAC9B,QAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE;QAE5C,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC1D,KAAC,CAAC;AACN;AAEM,SAAU,iBAAiB,CAAC,EAC9B,QAAQ,EACR,oBAAoB,EACpB,aAAa,EACb,sBAAsB,GAMzB,EAAA;AACG,IAAA,IAAI,CAAC,oBAAoB,IAAI,sBAAsB,KAAK,aAAa,EAAE;AACnE,QAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACtD,YAAA,OAAO,QAAQ;AAClB;QAED,OAAO,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9C;AAED,IAAA,OAAO,QAAQ;AACnB;AAEgB,SAAA,cAAc,CAAC,aAAqB,EAAE,QAAgB,EAAA;AAClE,IAAA,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE;AACxE,IAAA,IAAI,oBAAoB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;IACnD,IAAI,aAAa,GAAG,KAAK;IACzB,MAAM,MAAM,GAAa,EAAE;AAE3B,IAAA,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;QAC/B,IAAI,aAAa,IAAI,IAAI,KAAK,aAAa,CAAC,oBAAoB,CAAC,EAAE;AAC/D,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACjB,oBAAoB,IAAI,CAAC;AAC5B;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE;YACrB,aAAa,GAAG,IAAI;AACvB;AACL,KAAC,CAAC;IAEF,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACpC;;;;"}
|
package/moderncssm/Component.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Component.js","sources":["../../src/Component.tsx"],"sourcesContent":["/* eslint-disable complexity, no-param-reassign */\nimport React, { useCallback, useRef } from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { conformToMask, TextMaskConfig } from 'text-mask-core';\n\nimport { MaskedInput, MaskedInputProps } from '@alfalab/core-components-masked-input';\n\nimport { deleteFormatting, deleteMaskChar, getInsertedNumber, setCaretPosition } from './utils';\n\nconst mask = [\n '+',\n '7',\n ' ',\n /([0-6]|[8-9])/,\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n ' ',\n /\\d/,\n /\\d/,\n];\n\nconst countryPrefix = '+7 ';\n\nexport type PhoneInputProps = Omit<MaskedInputProps, 'onBeforeDisplay' | 'type' | 'mask'> & {\n clearableCountryCode?: boolean;\n};\n\nexport const PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(\n ({ clearableCountryCode = true, ...restProps }, ref) => {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleBeforeDisplay = useCallback(\n (conformedValue: string, config: TextMaskConfig) => {\n const { rawValue, previousConformedValue, currentCaretPosition } = config;\n\n const previousValueWithoutFormatting = previousConformedValue\n ? deleteFormatting(previousConformedValue)\n : '';\n\n /*\n * Удаляем лишний символ маски при вводе или вставке значений перед знаком + или после него.\n */\n if (previousConformedValue && rawValue.indexOf('+7') !== 0) {\n const newRaw = deleteMaskChar(previousValueWithoutFormatting, rawValue);\n\n conformedValue = conformToMask(newRaw, mask, config).conformedValue;\n }\n\n const currentValueWithoutFormatting = deleteFormatting(conformedValue) || '';\n\n /*\n * код ниже нужен для фикса следующих багов библиотеки text-mask:\n * 1) так как код страны указан в маске жестко как \"+7\",\n * то при удалении цифры перед ним каретка устанавливается перед кодом страны\n * 2) в номере телефона есть пробелы и дефисы,\n * при редактировании цифр рядом с этими символами каретка перескакивает через них,\n * а не остается на том же месте, на котором была до редактирования\n */\n if (\n previousConformedValue &&\n (([3, 6].includes(currentCaretPosition) &&\n Math.abs(\n previousValueWithoutFormatting.length -\n currentValueWithoutFormatting.length,\n ) === 1) ||\n ([7, 10, 13].includes(currentCaretPosition) &&\n previousConformedValue.length > currentCaretPosition))\n ) {\n setCaretPosition({ position: currentCaretPosition, inputRef });\n }\n\n // // В режиме clearableCountryCode удаляет лишний пробел, чтобы можно было стереть код города.\n if (rawValue === '+7' && conformedValue === '' && clearableCountryCode) {\n setCaretPosition({ position: countryPrefix.length - 1, inputRef });\n }\n\n // Удаление цифры перед кодом страны удаляет только саму цифру, код остается (\"+7 1\" -> \"+7 \")\n if (rawValue === countryPrefix) {\n return rawValue;\n }\n\n // Вставка номера с 10 цифрами без кода страны\n if (rawValue.length === 10 && conformedValue.length === mask.length) {\n const masked = conformToMask(`+7${rawValue}`, mask, config);\n\n return masked.conformedValue;\n }\n\n /*\n * Код нужен для исправления ошибки в библиотеке text-mask: если цифра 7 находится на второй позиции при вставке, то она удаляется\n * Это происходит потому что цифра 7 есть уже в маске\n */\n if (rawValue[1] === '7') {\n const masked = conformToMask(`+7${rawValue}`, mask, config);\n\n return masked.conformedValue;\n }\n\n const insertedNumber = getInsertedNumber({\n rawValue,\n clearableCountryCode,\n countryPrefix,\n previousConformedValue,\n });\n\n // Вставка номера, начинающегося с 8 или 7: 89990313131, 71112223344\n if (\n conformedValue.length === mask.length &&\n (insertedNumber.startsWith('8') || insertedNumber.startsWith('7'))\n ) {\n const masked = conformToMask(`+7${insertedNumber.slice(1)}`, mask, config);\n\n return masked.conformedValue;\n }\n\n // Если ввод начат с 7 или 8 - выводит \"+7 \" и дает продолжить ввод со след. цифры\n if (rawValue.length === 1 && ['7', '8'].includes(rawValue[0])) {\n return countryPrefix;\n }\n\n const abortCountryCodeClearing = !clearableCountryCode && !conformedValue;\n\n if (abortCountryCodeClearing) {\n setCaretPosition({ position: countryPrefix.length, inputRef });\n\n if (!rawValue.length) return countryPrefix;\n\n return false;\n }\n\n return conformedValue;\n },\n [clearableCountryCode],\n );\n\n return (\n <MaskedInput\n {...restProps}\n defaultValue={clearableCountryCode ? restProps.defaultValue : countryPrefix}\n mask={mask}\n onBeforeDisplay={handleBeforeDisplay}\n type='tel'\n ref={mergeRefs([ref, inputRef])}\n />\n );\n },\n);\n\nPhoneInput.displayName = 'PhoneInputs';\n"],"names":[],"mappings":"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"}
|
package/moderncssm/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { MaskedInputProps } from '@alfalab/core-components-masked-input';
|
|
3
|
+
export declare type PhoneInputProps = Omit<MaskedInputProps, 'onBeforeDisplay' | 'type' | 'mask'> & {
|
|
4
|
+
clearableCountryCode?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const PhoneInput: React.ForwardRefExoticComponent<Omit<MaskedInputProps, "type" | "onBeforeDisplay" | "mask"> & {
|
|
7
|
+
clearableCountryCode?: boolean | undefined;
|
|
8
|
+
} & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Component';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Удаляет форматирование номера телефона
|
|
3
|
+
* @param phone Номер телефона
|
|
4
|
+
*/
|
|
5
|
+
/// <reference types="react" />
|
|
6
|
+
export declare const deleteFormatting: (phone: string) => string;
|
|
7
|
+
export declare function setCaretPosition({ position, inputRef, }: {
|
|
8
|
+
position: number;
|
|
9
|
+
inputRef: React.RefObject<HTMLInputElement>;
|
|
10
|
+
}): void;
|
|
11
|
+
export declare function getInsertedNumber({ rawValue, clearableCountryCode, countryPrefix, previousConformedValue, }: {
|
|
12
|
+
rawValue: string;
|
|
13
|
+
clearableCountryCode: boolean;
|
|
14
|
+
countryPrefix: string;
|
|
15
|
+
previousConformedValue: string;
|
|
16
|
+
}): string;
|
|
17
|
+
export declare function deleteMaskChar(previousValue: string, rawValue: string): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/utils/index.ts"],"sourcesContent":["/**\n * Удаляет форматирование номера телефона\n * @param phone Номер телефона\n */\n\nexport const deleteFormatting = (phone: string) =>\n phone.replace('+', '').replace(/^7/, '').replace(/\\s/g, '');\n\nexport function setCaretPosition({\n position,\n inputRef,\n}: {\n position: number;\n inputRef: React.RefObject<HTMLInputElement>;\n}) {\n window.requestAnimationFrame(() => {\n if (inputRef === null || !inputRef.current) return;\n\n inputRef.current.setSelectionRange(position, position);\n });\n}\n\nexport function getInsertedNumber({\n rawValue,\n clearableCountryCode,\n countryPrefix,\n previousConformedValue,\n}: {\n rawValue: string;\n clearableCountryCode: boolean;\n countryPrefix: string;\n previousConformedValue: string;\n}) {\n if (!clearableCountryCode && previousConformedValue === countryPrefix) {\n if (rawValue.startsWith('7') || rawValue.startsWith('8')) {\n return rawValue;\n }\n\n return rawValue.slice(countryPrefix.length);\n }\n\n return rawValue;\n}\n\nexport function deleteMaskChar(previousValue: string, rawValue: string) {\n const prevRawValueAsArr = deleteFormatting(rawValue).split('').reverse();\n let prevConformedCharIdx = previousValue.length - 1;\n let isMaskRemoved = false;\n const newRaw: string[] = [];\n\n prevRawValueAsArr.forEach((char) => {\n if (isMaskRemoved || char === previousValue[prevConformedCharIdx]) {\n newRaw.push(char);\n prevConformedCharIdx -= 1;\n } else if (char === '7') {\n isMaskRemoved = true;\n }\n });\n\n return newRaw.reverse().join('');\n}\n"],"names":[],"mappings":"AAAA;;;AAGG;AAEI,MAAM,gBAAgB,GAAG,CAAC,KAAa,KAC1C,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE;SAE9C,gBAAgB,CAAC,EAC7B,QAAQ,EACR,QAAQ,GAIX,EAAA;AACG,IAAA,MAAM,CAAC,qBAAqB,CAAC,MAAK;AAC9B,QAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE;QAE5C,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC1D,KAAC,CAAC;AACN;AAEM,SAAU,iBAAiB,CAAC,EAC9B,QAAQ,EACR,oBAAoB,EACpB,aAAa,EACb,sBAAsB,GAMzB,EAAA;AACG,IAAA,IAAI,CAAC,oBAAoB,IAAI,sBAAsB,KAAK,aAAa,EAAE;AACnE,QAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACtD,YAAA,OAAO,QAAQ;AAClB;QAED,OAAO,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9C;AAED,IAAA,OAAO,QAAQ;AACnB;AAEgB,SAAA,cAAc,CAAC,aAAqB,EAAE,QAAgB,EAAA;AAClE,IAAA,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE;AACxE,IAAA,IAAI,oBAAoB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;IACnD,IAAI,aAAa,GAAG,KAAK;IACzB,MAAM,MAAM,GAAa,EAAE;AAE3B,IAAA,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;QAC/B,IAAI,aAAa,IAAI,IAAI,KAAK,aAAa,CAAC,oBAAoB,CAAC,EAAE;AAC/D,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACjB,oBAAoB,IAAI,CAAC;AAC5B;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE;YACrB,aAAa,GAAG,IAAI;AACvB;AACL,KAAC,CAAC;IAEF,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACpC;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alfalab/core-components-phone-input",
|
|
3
|
-
"version": "7.5.
|
|
3
|
+
"version": "7.5.5-snapshot-1393ffa",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"license": "MIT",
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
"react": "^16.9.0 || ^17.0.1 || ^18.0.0"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@alfalab/core-components-masked-input": "
|
|
18
|
+
"@alfalab/core-components-masked-input": "6.3.36-snapshot-1393ffa",
|
|
19
19
|
"react-merge-refs": "^1.1.0",
|
|
20
20
|
"text-mask-core": "^5.1.2",
|
|
21
21
|
"tslib": "^2.4.0"
|
|
22
22
|
},
|
|
23
|
-
"themesVersion": "
|
|
24
|
-
"varsVersion": "9.
|
|
23
|
+
"themesVersion": "14.0.0-snapshot-1393ffa",
|
|
24
|
+
"varsVersion": "9.20.1-snapshot-1393ffa"
|
|
25
25
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { MaskedInputProps } from '@alfalab/core-components-masked-input';
|
|
3
|
+
export declare type PhoneInputProps = Omit<MaskedInputProps, 'onBeforeDisplay' | 'type' | 'mask'> & {
|
|
4
|
+
clearableCountryCode?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const PhoneInput: React.ForwardRefExoticComponent<Omit<MaskedInputProps, "type" | "onBeforeDisplay" | "mask"> & {
|
|
7
|
+
clearableCountryCode?: boolean | undefined;
|
|
8
|
+
} & React.RefAttributes<HTMLInputElement>>;
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Component';
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
declare module 'text-mask-core' {
|
|
2
|
+
export type Mask = Array<string | RegExp>;
|
|
3
|
+
|
|
4
|
+
export 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?: (
|
|
14
|
+
conformedValue: string,
|
|
15
|
+
config: TextMaskConfig,
|
|
16
|
+
) => false | string | { value: string; indexesOfPipedChars: number[] };
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export type TextMaskInputElement = {
|
|
20
|
+
state: { previousConformedValue: string; previousPlaceholder: string };
|
|
21
|
+
update: (
|
|
22
|
+
rawValue?: string,
|
|
23
|
+
textMaskConfig?: TextMaskConfig & { inputElement: HTMLInputElement },
|
|
24
|
+
) => void;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export function createTextMaskInputElement(
|
|
28
|
+
config: TextMaskConfig & { inputElement: HTMLInputElement },
|
|
29
|
+
): TextMaskInputElement;
|
|
30
|
+
|
|
31
|
+
export function conformToMask(
|
|
32
|
+
text: string,
|
|
33
|
+
mask: Mask | ((rawValue: string) => Mask),
|
|
34
|
+
config?: TextMaskConfig,
|
|
35
|
+
): conformToMaskResult;
|
|
36
|
+
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
38
|
+
export type conformToMaskResult = {
|
|
39
|
+
conformedValue: string;
|
|
40
|
+
meta: {
|
|
41
|
+
someCharsRejected: boolean;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Удаляет форматирование номера телефона
|
|
3
|
+
* @param phone Номер телефона
|
|
4
|
+
*/
|
|
5
|
+
/// <reference types="react" />
|
|
6
|
+
export declare const deleteFormatting: (phone: string) => string;
|
|
7
|
+
export declare function setCaretPosition({ position, inputRef, }: {
|
|
8
|
+
position: number;
|
|
9
|
+
inputRef: React.RefObject<HTMLInputElement>;
|
|
10
|
+
}): void;
|
|
11
|
+
export declare function getInsertedNumber({ rawValue, clearableCountryCode, countryPrefix, previousConformedValue, }: {
|
|
12
|
+
rawValue: string;
|
|
13
|
+
clearableCountryCode: boolean;
|
|
14
|
+
countryPrefix: string;
|
|
15
|
+
previousConformedValue: string;
|
|
16
|
+
}): string;
|
|
17
|
+
export declare function deleteMaskChar(previousValue: string, rawValue: string): string;
|
package/utils/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/utils/index.ts"],"sourcesContent":["/**\n * Удаляет форматирование номера телефона\n * @param phone Номер телефона\n */\n\nexport const deleteFormatting = (phone: string) =>\n phone.replace('+', '').replace(/^7/, '').replace(/\\s/g, '');\n\nexport function setCaretPosition({\n position,\n inputRef,\n}: {\n position: number;\n inputRef: React.RefObject<HTMLInputElement>;\n}) {\n window.requestAnimationFrame(() => {\n if (inputRef === null || !inputRef.current) return;\n\n inputRef.current.setSelectionRange(position, position);\n });\n}\n\nexport function getInsertedNumber({\n rawValue,\n clearableCountryCode,\n countryPrefix,\n previousConformedValue,\n}: {\n rawValue: string;\n clearableCountryCode: boolean;\n countryPrefix: string;\n previousConformedValue: string;\n}) {\n if (!clearableCountryCode && previousConformedValue === countryPrefix) {\n if (rawValue.startsWith('7') || rawValue.startsWith('8')) {\n return rawValue;\n }\n\n return rawValue.slice(countryPrefix.length);\n }\n\n return rawValue;\n}\n\nexport function deleteMaskChar(previousValue: string, rawValue: string) {\n const prevRawValueAsArr = deleteFormatting(rawValue).split('').reverse();\n let prevConformedCharIdx = previousValue.length - 1;\n let isMaskRemoved = false;\n const newRaw: string[] = [];\n\n prevRawValueAsArr.forEach((char) => {\n if (isMaskRemoved || char === previousValue[prevConformedCharIdx]) {\n newRaw.push(char);\n prevConformedCharIdx -= 1;\n } else if (char === '7') {\n isMaskRemoved = true;\n }\n });\n\n return newRaw.reverse().join('');\n}\n"],"names":[],"mappings":";;;;AAAA;;;AAGG;AAEI,IAAM,gBAAgB,GAAG,UAAC,KAAa,EAAA;IAC1C,OAAA,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAA3D;AAEE,SAAU,gBAAgB,CAAC,EAMhC,EAAA;QALG,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,QAAQ,GAAA,EAAA,CAAA,QAAA;IAKR,MAAM,CAAC,qBAAqB,CAAC,YAAA;AACzB,QAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE;QAE5C,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC1D,KAAC,CAAC;AACN;AAEM,SAAU,iBAAiB,CAAC,EAUjC,EAAA;QATG,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,oBAAoB,GAAA,EAAA,CAAA,oBAAA,EACpB,aAAa,GAAA,EAAA,CAAA,aAAA,EACb,sBAAsB,GAAA,EAAA,CAAA,sBAAA;AAOtB,IAAA,IAAI,CAAC,oBAAoB,IAAI,sBAAsB,KAAK,aAAa,EAAE;AACnE,QAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACtD,YAAA,OAAO,QAAQ;AAClB;QAED,OAAO,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9C;AAED,IAAA,OAAO,QAAQ;AACnB;AAEgB,SAAA,cAAc,CAAC,aAAqB,EAAE,QAAgB,EAAA;AAClE,IAAA,IAAM,iBAAiB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE;AACxE,IAAA,IAAI,oBAAoB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;IACnD,IAAI,aAAa,GAAG,KAAK;IACzB,IAAM,MAAM,GAAa,EAAE;AAE3B,IAAA,iBAAiB,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;QAC3B,IAAI,aAAa,IAAI,IAAI,KAAK,aAAa,CAAC,oBAAoB,CAAC,EAAE;AAC/D,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACjB,oBAAoB,IAAI,CAAC;AAC5B;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE;YACrB,aAAa,GAAG,IAAI;AACvB;AACL,KAAC,CAAC;IAEF,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACpC;;;;;;;"}
|
package/Component.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { MaskedInputProps } from "@alfalab/core-components-masked-input";
|
|
4
|
-
type PhoneInputProps = Omit<MaskedInputProps, 'onBeforeDisplay' | 'type' | 'mask'> & {
|
|
5
|
-
clearableCountryCode?: boolean;
|
|
6
|
-
};
|
|
7
|
-
declare const PhoneInput: React.ForwardRefExoticComponent<Omit<MaskedInputProps, "mask" | "type" | "onBeforeDisplay"> & {
|
|
8
|
-
clearableCountryCode?: boolean | undefined;
|
|
9
|
-
} & React.RefAttributes<HTMLInputElement>>;
|
|
10
|
-
export { PhoneInputProps, PhoneInput };
|
package/cssm/Component.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { MaskedInputProps } from "@alfalab/core-components-masked-input";
|
|
4
|
-
type PhoneInputProps = Omit<MaskedInputProps, 'onBeforeDisplay' | 'type' | 'mask'> & {
|
|
5
|
-
clearableCountryCode?: boolean;
|
|
6
|
-
};
|
|
7
|
-
declare const PhoneInput: React.ForwardRefExoticComponent<Omit<MaskedInputProps, "mask" | "type" | "onBeforeDisplay"> & {
|
|
8
|
-
clearableCountryCode?: boolean | undefined;
|
|
9
|
-
} & React.RefAttributes<HTMLInputElement>>;
|
|
10
|
-
export { PhoneInputProps, PhoneInput };
|
package/cssm/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./Component";
|
package/cssm/utils/index.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
/**
|
|
3
|
-
* Удаляет форматирование номера телефона
|
|
4
|
-
* @param phone Номер телефона
|
|
5
|
-
*/
|
|
6
|
-
declare const deleteFormatting: (phone: string) => string;
|
|
7
|
-
declare function setCaretPosition({ position, inputRef, }: {
|
|
8
|
-
position: number;
|
|
9
|
-
inputRef: React.RefObject<HTMLInputElement>;
|
|
10
|
-
}): void;
|
|
11
|
-
declare function getInsertedNumber({ rawValue, clearableCountryCode, countryPrefix, previousConformedValue, }: {
|
|
12
|
-
rawValue: string;
|
|
13
|
-
clearableCountryCode: boolean;
|
|
14
|
-
countryPrefix: string;
|
|
15
|
-
previousConformedValue: string;
|
|
16
|
-
}): string;
|
|
17
|
-
declare function deleteMaskChar(previousValue: string, rawValue: string): string;
|
|
18
|
-
export { deleteFormatting, setCaretPosition, getInsertedNumber, deleteMaskChar };
|
package/esm/Component.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { MaskedInputProps } from "@alfalab/core-components-masked-input";
|
|
4
|
-
type PhoneInputProps = Omit<MaskedInputProps, 'onBeforeDisplay' | 'type' | 'mask'> & {
|
|
5
|
-
clearableCountryCode?: boolean;
|
|
6
|
-
};
|
|
7
|
-
declare const PhoneInput: React.ForwardRefExoticComponent<Omit<MaskedInputProps, "mask" | "type" | "onBeforeDisplay"> & {
|
|
8
|
-
clearableCountryCode?: boolean | undefined;
|
|
9
|
-
} & React.RefAttributes<HTMLInputElement>>;
|
|
10
|
-
export { PhoneInputProps, PhoneInput };
|
package/esm/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./Component";
|
package/esm/utils/index.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
/**
|
|
3
|
-
* Удаляет форматирование номера телефона
|
|
4
|
-
* @param phone Номер телефона
|
|
5
|
-
*/
|
|
6
|
-
declare const deleteFormatting: (phone: string) => string;
|
|
7
|
-
declare function setCaretPosition({ position, inputRef, }: {
|
|
8
|
-
position: number;
|
|
9
|
-
inputRef: React.RefObject<HTMLInputElement>;
|
|
10
|
-
}): void;
|
|
11
|
-
declare function getInsertedNumber({ rawValue, clearableCountryCode, countryPrefix, previousConformedValue, }: {
|
|
12
|
-
rawValue: string;
|
|
13
|
-
clearableCountryCode: boolean;
|
|
14
|
-
countryPrefix: string;
|
|
15
|
-
previousConformedValue: string;
|
|
16
|
-
}): string;
|
|
17
|
-
declare function deleteMaskChar(previousValue: string, rawValue: string): string;
|
|
18
|
-
export { deleteFormatting, setCaretPosition, getInsertedNumber, deleteMaskChar };
|
package/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./Component";
|
package/modern/Component.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { MaskedInputProps } from "@alfalab/core-components-masked-input";
|
|
4
|
-
type PhoneInputProps = Omit<MaskedInputProps, 'onBeforeDisplay' | 'type' | 'mask'> & {
|
|
5
|
-
clearableCountryCode?: boolean;
|
|
6
|
-
};
|
|
7
|
-
declare const PhoneInput: React.ForwardRefExoticComponent<Omit<MaskedInputProps, "mask" | "type" | "onBeforeDisplay"> & {
|
|
8
|
-
clearableCountryCode?: boolean | undefined;
|
|
9
|
-
} & React.RefAttributes<HTMLInputElement>>;
|
|
10
|
-
export { PhoneInputProps, PhoneInput };
|
package/modern/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./Component";
|
package/modern/utils/index.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
/**
|
|
3
|
-
* Удаляет форматирование номера телефона
|
|
4
|
-
* @param phone Номер телефона
|
|
5
|
-
*/
|
|
6
|
-
declare const deleteFormatting: (phone: string) => string;
|
|
7
|
-
declare function setCaretPosition({ position, inputRef, }: {
|
|
8
|
-
position: number;
|
|
9
|
-
inputRef: React.RefObject<HTMLInputElement>;
|
|
10
|
-
}): void;
|
|
11
|
-
declare function getInsertedNumber({ rawValue, clearableCountryCode, countryPrefix, previousConformedValue, }: {
|
|
12
|
-
rawValue: string;
|
|
13
|
-
clearableCountryCode: boolean;
|
|
14
|
-
countryPrefix: string;
|
|
15
|
-
previousConformedValue: string;
|
|
16
|
-
}): string;
|
|
17
|
-
declare function deleteMaskChar(previousValue: string, rawValue: string): string;
|
|
18
|
-
export { deleteFormatting, setCaretPosition, getInsertedNumber, deleteMaskChar };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { MaskedInputProps } from "@alfalab/core-components-masked-input";
|
|
4
|
-
type PhoneInputProps = Omit<MaskedInputProps, 'onBeforeDisplay' | 'type' | 'mask'> & {
|
|
5
|
-
clearableCountryCode?: boolean;
|
|
6
|
-
};
|
|
7
|
-
declare const PhoneInput: React.ForwardRefExoticComponent<Omit<MaskedInputProps, "mask" | "type" | "onBeforeDisplay"> & {
|
|
8
|
-
clearableCountryCode?: boolean | undefined;
|
|
9
|
-
} & React.RefAttributes<HTMLInputElement>>;
|
|
10
|
-
export { PhoneInputProps, PhoneInput };
|
package/moderncssm/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./Component";
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
/**
|
|
3
|
-
* Удаляет форматирование номера телефона
|
|
4
|
-
* @param phone Номер телефона
|
|
5
|
-
*/
|
|
6
|
-
declare const deleteFormatting: (phone: string) => string;
|
|
7
|
-
declare function setCaretPosition({ position, inputRef, }: {
|
|
8
|
-
position: number;
|
|
9
|
-
inputRef: React.RefObject<HTMLInputElement>;
|
|
10
|
-
}): void;
|
|
11
|
-
declare function getInsertedNumber({ rawValue, clearableCountryCode, countryPrefix, previousConformedValue, }: {
|
|
12
|
-
rawValue: string;
|
|
13
|
-
clearableCountryCode: boolean;
|
|
14
|
-
countryPrefix: string;
|
|
15
|
-
previousConformedValue: string;
|
|
16
|
-
}): string;
|
|
17
|
-
declare function deleteMaskChar(previousValue: string, rawValue: string): string;
|
|
18
|
-
export { deleteFormatting, setCaretPosition, getInsertedNumber, deleteMaskChar };
|
package/utils/index.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
/**
|
|
3
|
-
* Удаляет форматирование номера телефона
|
|
4
|
-
* @param phone Номер телефона
|
|
5
|
-
*/
|
|
6
|
-
declare const deleteFormatting: (phone: string) => string;
|
|
7
|
-
declare function setCaretPosition({ position, inputRef, }: {
|
|
8
|
-
position: number;
|
|
9
|
-
inputRef: React.RefObject<HTMLInputElement>;
|
|
10
|
-
}): void;
|
|
11
|
-
declare function getInsertedNumber({ rawValue, clearableCountryCode, countryPrefix, previousConformedValue, }: {
|
|
12
|
-
rawValue: string;
|
|
13
|
-
clearableCountryCode: boolean;
|
|
14
|
-
countryPrefix: string;
|
|
15
|
-
previousConformedValue: string;
|
|
16
|
-
}): string;
|
|
17
|
-
declare function deleteMaskChar(previousValue: string, rawValue: string): string;
|
|
18
|
-
export { deleteFormatting, setCaretPosition, getInsertedNumber, deleteMaskChar };
|